<?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>96421</bug_id>
          
          <creation_ts>2012-09-11 13:57:44 -0700</creation_ts>
          <short_desc>Split per-resolve logic out from StyleResolver.</short_desc>
          <delta_ts>2013-02-04 15:50:04 -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>New Bugs</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="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>alancutter</cc>
    
    <cc>allan.jensen</cc>
    
    <cc>buildbot</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dominicc</cc>
    
    <cc>eric</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rniwa</cc>
    
    <cc>tasak</cc>
    
    <cc>webcomponents-bugzilla</cc>
    
    <cc>WebkitBugTracker</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>717520</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-09-11 13:57:44 -0700</bug_when>
    <thetext>Split per-resolve logic out from StyleResolver.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717521</commentid>
    <comment_count>1</comment_count>
      <attachid>163428</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-09-11 13:58:25 -0700</bug_when>
    <thetext>Created attachment 163428
WIP: Exploring the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717524</commentid>
    <comment_count>2</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-09-11 14:00:27 -0700</bug_when>
    <thetext>Just for learning purposes, I gave a quick shot to splitting out per-resolve logic, and it&apos;s actually not that bad. Found lots of interesting boogers. Will study them individually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816320</commentid>
    <comment_count>3</comment_count>
      <attachid>184683</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-25 00:02:30 -0800</bug_when>
    <thetext>Created attachment 184683
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816322</commentid>
    <comment_count>4</comment_count>
      <attachid>184684</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-25 00:08:55 -0800</bug_when>
    <thetext>Created attachment 184684
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816367</commentid>
    <comment_count>5</comment_count>
      <attachid>184695</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-25 01:17:02 -0800</bug_when>
    <thetext>Created attachment 184695
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816369</commentid>
    <comment_count>6</comment_count>
      <attachid>184695</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-25 01:21:10 -0800</bug_when>
    <thetext>Comment on attachment 184695
WIP

state isn&apos;t a very good variable name.  But I&apos;m not sure I have better suggestions.  even resolveState would be better (and more grep-able), but I understand that&apos;s longer.  Not sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816370</commentid>
    <comment_count>7</comment_count>
      <attachid>184695</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-25 01:23:09 -0800</bug_when>
    <thetext>Comment on attachment 184695
WIP

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

&gt; Source/WebCore/css/CSSToStyleMap.h:43
&gt; +    static void mapFillAttachment(StyleResolveState&amp;, CSSPropertyID, FillLayer*, CSSValue*);
&gt; +    static void mapFillClip(StyleResolveState&amp;, CSSPropertyID, FillLayer*, CSSValue*);

Why are these all static?  We should just have the CSSToStyleMap wrap the state intsead of the Resolver, no?  CSSToStyleMap wuld then just be a statck object, and never kept around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816372</commentid>
    <comment_count>8</comment_count>
      <attachid>184695</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-25 01:26:30 -0800</bug_when>
    <thetext>Comment on attachment 184695
WIP

Attachment 184695 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/16113305</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816395</commentid>
    <comment_count>9</comment_count>
      <attachid>184702</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-25 02:00:39 -0800</bug_when>
    <thetext>Created attachment 184702
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816442</commentid>
    <comment_count>10</comment_count>
      <attachid>184714</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-25 03:10:47 -0800</bug_when>
    <thetext>Created attachment 184714
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816444</commentid>
    <comment_count>11</comment_count>
      <attachid>184695</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-25 03:14:52 -0800</bug_when>
    <thetext>Comment on attachment 184695
WIP

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

Thank you for reviewing.

I renamed StyleResolveState to ResolveState.

&gt;&gt; Source/WebCore/css/CSSToStyleMap.h:43
&gt;&gt; +    static void mapFillClip(StyleResolveState&amp;, CSSPropertyID, FillLayer*, CSSValue*);
&gt; 
&gt; Why are these all static?  We should just have the CSSToStyleMap wrap the state intsead of the Resolver, no?  CSSToStyleMap wuld then just be a statck object, and never kept around.

I see.
I made CSSToStyleMap a stack object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816511</commentid>
    <comment_count>12</comment_count>
      <attachid>184714</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-25 05:22:34 -0800</bug_when>
    <thetext>Comment on attachment 184714
WIP

Attachment 184714 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16119294

New failing tests:
media/track/track-css-matching.html
media/track/track-css-matching-timestamps.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816534</commentid>
    <comment_count>13</comment_count>
      <attachid>184714</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-25 06:22:54 -0800</bug_when>
    <thetext>Comment on attachment 184714
WIP

Attachment 184714 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16113400

New failing tests:
media/track/track-css-matching.html
media/track/track-css-matching-timestamps.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816535</commentid>
    <comment_count>14</comment_count>
      <attachid>184714</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-25 06:23:26 -0800</bug_when>
    <thetext>Comment on attachment 184714
WIP

Attachment 184714 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16124330</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816542</commentid>
    <comment_count>15</comment_count>
      <attachid>184714</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-25 06:37:10 -0800</bug_when>
    <thetext>Comment on attachment 184714
WIP

Attachment 184714 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16117366</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816579</commentid>
    <comment_count>16</comment_count>
      <attachid>184714</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-25 07:21:52 -0800</bug_when>
    <thetext>Comment on attachment 184714
WIP

Attachment 184714 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16111592</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817461</commentid>
    <comment_count>17</comment_count>
      <attachid>184927</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-27 18:25:59 -0800</bug_when>
    <thetext>Created attachment 184927
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817480</commentid>
    <comment_count>18</comment_count>
      <attachid>184927</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-27 19:54:52 -0800</bug_when>
    <thetext>Comment on attachment 184927
WIP

Attachment 184927 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16160398

New failing tests:
media/track/track-css-matching.html
media/track/track-css-matching-timestamps.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817496</commentid>
    <comment_count>19</comment_count>
      <attachid>184927</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-27 21:00:42 -0800</bug_when>
    <thetext>Comment on attachment 184927
WIP

Attachment 184927 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16150566

New failing tests:
media/track/track-css-matching.html
media/track/track-css-matching-timestamps.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817529</commentid>
    <comment_count>20</comment_count>
      <attachid>184927</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-27 22:30:34 -0800</bug_when>
    <thetext>Comment on attachment 184927
WIP

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

New failing tests:
inspector/styles/region-style-crash.html
media/track/track-css-matching.html
media/track/track-css-matching-timestamps.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817670</commentid>
    <comment_count>21</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-28 03:37:24 -0800</bug_when>
    <thetext>Looking at inspector/styles/region-style-crash.html regression, I think, inspector would not support CSS regions correctly.
InspectorCSSAgent::getMatchedStylesForNode doesn&apos;t check RenderRegion. However, since StyleResolver doesn&apos;t initialize m_regionForStyling member variable, pseudoStyleRulesForElement sometimes returns CSSRules for CSS Regions.

Talking about the followings, https://bugs.webkit.org/show_bug.cgi?id=108024 was filed. I think, HTMLTagNames.in was not updated when some WebVTTElement&apos;s patch was landed:
- media/track/track-css-matching.html
- media/track/track-css-matching-timestamps.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817672</commentid>
    <comment_count>22</comment_count>
      <attachid>184927</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-28 03:48:22 -0800</bug_when>
    <thetext>Comment on attachment 184927
WIP

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

New failing tests:
inspector/styles/region-style-crash.html
media/track/track-css-matching.html
media/track/track-css-matching-timestamps.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817817</commentid>
    <comment_count>23</comment_count>
      <attachid>184927</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-01-28 09:43:09 -0800</bug_when>
    <thetext>Comment on attachment 184927
WIP

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

This patch is super-ambitious. I hope you have a plan on how to chunk it up into smaller pieces that help us better understand how its effects :)

&gt; Source/WebCore/css/CSSToStyleMap.h:76
&gt; +    ResolveState&amp; m_state;

state is mysterious. Variable should probably match the name of the class.

&gt; Source/WebCore/css/ResolveState.h:1
&gt; +/*

Just an idea: it might be easier (save reviewers&apos; sanity!) to first refactor this in-place, then move the new class out into its own file.

&gt; Source/WebCore/css/ResolveState.h:4
&gt; + *

Aren&apos;t we supposed to add teh Google line here?

&gt; Source/WebCore/css/ResolveState.h:22
&gt; +#ifndef ResolveState_h

Better name needed. It&apos;s a state, yes. But it&apos;s also something that looks like both intermediate state and the actual result of style resolution. It&apos;s like a builder, but not quite... Hmmm..

&gt; Source/WebCore/css/SelectorChecker.cpp:-72
&gt; -bool SelectorChecker::matches(const CSSSelector* selector, Element* element, bool isFastCheckableSelector) const

Not sure what&apos;s happening in this file. Sounds like some other unrelated refactoring. BTW, I am splitting fast path off into its own class in bug 106860.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817845</commentid>
    <comment_count>24</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-01-28 10:11:44 -0800</bug_when>
    <thetext>I&apos;m not sure It needs a file. The state is inherent part of the StyleResolver. I would probably go with StyleResolver::State. If it is is a separate file then StyleResolverState would be a good name.

You should follow strict constness. Functions that shouldn&apos;t logically change the state should always get const StyleResolver::State&amp;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818776</commentid>
    <comment_count>25</comment_count>
      <attachid>185211</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-29 03:03:39 -0800</bug_when>
    <thetext>Created attachment 185211
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818786</commentid>
    <comment_count>26</comment_count>
      <attachid>184927</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-29 03:13:05 -0800</bug_when>
    <thetext>Comment on attachment 184927
WIP

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

Thank you for reviewing.

I did the followings:
- renamed ResolveState to StyleResolverState. Since the state is used outside of StyleResolver, i.e. StyleBuilder, I would like to use StyleResolverState instead of StyleResolver::State.
- focused on StyleResolverState. So I removed a patch for making SelectorChecker an on-stack object.
- tried to added &quot;const&quot; to StyleResolverState&amp; parameter.

In this patch, I gathered all states (including intermediate ones) to StyleResolverState. If I could add StyleResolverState, I would like to split the gathered states into followings:
- states which are active during matchRules.
- states which are active during applyMatchedProperties.
- states which are always active, e.g. m_element, m_rootElementStyle, and so on. The state is used in StyleBuilder and StyleResolver (sibling cache).

&gt;&gt; Source/WebCore/css/ResolveState.h:22
&gt;&gt; +#ifndef ResolveState_h
&gt; 
&gt; Better name needed. It&apos;s a state, yes. But it&apos;s also something that looks like both intermediate state and the actual result of style resolution. It&apos;s like a builder, but not quite... Hmmm..

Yeah. I&apos;m thinking of the following:
(1) firstly, move all variables, including intermediate state, to state. (this patch)
(2) next, I would like to move some of variables to other classes, i.e. Collector and Applier. For example, Collector is for collecting matching rules. It would have m_matchedRules, one of intermediate states. Applier is for applying matched properties and working with StyleBuilder and CSSToStyleMap. It would have m_lineHeightValue, m_fontDirty, and so on.

I think, finally, StyleResolverState would have only important states, m_element, m_rootElementStyle, m_parentStyle, ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818793</commentid>
    <comment_count>27</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-29 03:21:21 -0800</bug_when>
    <thetext>(In reply to comment #26)

&gt; I did the followings:
&gt; - renamed ResolveState to StyleResolverState. Since the state is used outside of StyleResolver, i.e. StyleBuilder, I would like to use StyleResolverState instead of StyleResolver::State.
&gt; - focused on StyleResolverState. So I removed a patch for making SelectorChecker an on-stack object.
&gt; - tried to added &quot;const&quot; to StyleResolverState&amp; parameter.

I forgot to say the following:
- I removed ResolveState.h and moved the code into StyleResolver.h.

&gt; I removed a patch for making SelectorChecker an on-stack object.

I would like to file another bug for making SelectorChecker an on-stack object. This enables  StyleResolverState to have SelectorChecker::mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818796</commentid>
    <comment_count>28</comment_count>
      <attachid>185211</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-01-29 03:23:50 -0800</bug_when>
    <thetext>Comment on attachment 185211
WIP

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

Naming game aside, you might want to reduce the size of this patch by splitting 
- One for extracting new class
- Another for passing the new class around

&gt; Source/WebCore/css/BasicShapeFunctions.cpp:-103
&gt; -static Length convertToLength(const StyleResolver* styleResolver, CSSPrimitiveValue* value)

Seems natural to be a method of the new state class. Could be done in separate change though.

&gt; Source/WebCore/css/StyleResolver.h:144
&gt; +class StyleResolverState {

The class name basically means nothing. It is better to clarify this per-Element nature.

&gt; Source/WebCore/css/StyleResolver.h:289
&gt; +    void initForStyleResolve(StyleResolverState&amp;, Element*, RenderStyle* parentStyle = 0, PseudoId = NOPSEUDO);

Passing StyleResolverState to StyleResolver is too... redundant. Had better to be a inner class or to have a typedef.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818821</commentid>
    <comment_count>29</comment_count>
      <attachid>185211</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-29 04:10:32 -0800</bug_when>
    <thetext>Comment on attachment 185211
WIP

Attachment 185211 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16022221

New failing tests:
media/track/track-css-matching.html
media/track/track-css-matching-timestamps.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819025</commentid>
    <comment_count>30</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-01-29 09:47:20 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 184927 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184927&amp;action=review
&gt; 
&gt; Thank you for reviewing.
&gt; 
&gt; I did the followings:
&gt; - renamed ResolveState to StyleResolverState. Since the state is used outside of StyleResolver, i.e. StyleBuilder, I would like to use StyleResolverState instead of StyleResolver::State.
&gt; - focused on StyleResolverState. So I removed a patch for making SelectorChecker an on-stack object.
&gt; - tried to added &quot;const&quot; to StyleResolverState&amp; parameter.
&gt; 
&gt; In this patch, I gathered all states (including intermediate ones) to StyleResolverState. If I could add StyleResolverState, I would like to split the gathered states into followings:
&gt; - states which are active during matchRules.
&gt; - states which are active during applyMatchedProperties.
&gt; - states which are always active, e.g. m_element, m_rootElementStyle, and so on. The state is used in StyleBuilder and StyleResolver (sibling cache).
&gt; 
&gt; &gt;&gt; Source/WebCore/css/ResolveState.h:22
&gt; &gt;&gt; +#ifndef ResolveState_h
&gt; &gt; 
&gt; &gt; Better name needed. It&apos;s a state, yes. But it&apos;s also something that looks like both intermediate state and the actual result of style resolution. It&apos;s like a builder, but not quite... Hmmm..
&gt; 
&gt; Yeah. I&apos;m thinking of the following:
&gt; (1) firstly, move all variables, including intermediate state, to state. (this patch)
&gt; (2) next, I would like to move some of variables to other classes, i.e. Collector and Applier. For example, Collector is for collecting matching rules. It would have m_matchedRules, one of intermediate states. Applier is for applying matched properties and working with StyleBuilder and CSSToStyleMap. It would have m_lineHeightValue, m_fontDirty, and so on.

This might be the wrong approach. This patch is already 300Kb. You will need a super-brave reviewer to land it as-is. It&apos;s certainly not me :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819032</commentid>
    <comment_count>31</comment_count>
      <attachid>185211</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-29 09:52:09 -0800</bug_when>
    <thetext>Comment on attachment 185211
WIP

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

New failing tests:
inspector/styles/region-style-crash.html
media/track/track-css-matching.html
media/track/track-css-matching-timestamps.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819735</commentid>
    <comment_count>32</comment_count>
      <attachid>185211</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-29 20:37:16 -0800</bug_when>
    <thetext>Comment on attachment 185211
WIP

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

New failing tests:
inspector/styles/region-style-crash.html
media/track/track-css-matching.html
fast/frames/sandboxed-iframe-scripting.html
media/track/track-css-matching-timestamps.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819890</commentid>
    <comment_count>33</comment_count>
      <attachid>185416</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-30 00:45:02 -0800</bug_when>
    <thetext>Created attachment 185416
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819901</commentid>
    <comment_count>34</comment_count>
      <attachid>185416</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-30 00:50:37 -0800</bug_when>
    <thetext>Comment on attachment 185416
WIP

Attachment 185416 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16217393</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819907</commentid>
    <comment_count>35</comment_count>
      <attachid>185416</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-30 00:58:46 -0800</bug_when>
    <thetext>Comment on attachment 185416
WIP

Attachment 185416 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16199552</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819926</commentid>
    <comment_count>36</comment_count>
      <attachid>185427</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-30 01:15:14 -0800</bug_when>
    <thetext>Created attachment 185427
WIP: added m_state</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819927</commentid>
    <comment_count>37</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-30 01:15:51 -0800</bug_when>
    <thetext>Thank you, Morita-san and Dimitri.

I would like to change my plan:
(1) implement class StyleResolver::State and add m_state to StyleResolver. (this patch)

(2) make CSSSelector an on-stack object and move m_selectorChecker.mode() to m_state.

(3) refactor CanvasRenderingContext2D.

(4) make m_state an on-stack object and provides state value for methods as a parameter.

(5) split intermediate states into other classes. 

Now this patch is almost the same as &quot;just adding m_state to access some member variables in StyleResolver&quot;, e.g. m_style -&gt; m_state.m_style and so on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819965</commentid>
    <comment_count>38</comment_count>
      <attachid>185427</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-30 01:55:59 -0800</bug_when>
    <thetext>Comment on attachment 185427
WIP: added m_state

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

New failing tests:
fast/frames/sandboxed-iframe-scripting.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819972</commentid>
    <comment_count>39</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-30 02:13:59 -0800</bug_when>
    <thetext>Death by a-thousand flaky tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819975</commentid>
    <comment_count>40</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-30 02:15:15 -0800</bug_when>
    <thetext>I think this patch is a huge step in the right direction.  The only interesting bits to review seem to be making sure that the right members got moved onto State.  Obviously there are many follow-up patches to write to add accessors to State and clean-up all the callsites, but this is definitely in the right direction!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819993</commentid>
    <comment_count>41</comment_count>
      <attachid>185427</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-01-30 02:33:48 -0800</bug_when>
    <thetext>Comment on attachment 185427
WIP: added m_state

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

Looking good!

&gt; Source/WebCore/css/StyleResolver.h:446
&gt; +    class State {
&gt; +        WTF_MAKE_NONCOPYABLE(State);
&gt; +    public:
&gt; +        State()
&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)

You can make this struct to signal that it is supposed to have public members is not supposed to have functions. Please drop the m_ prefix for the public members, that&apos;s what we usually do and the code will look nicer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819994</commentid>
    <comment_count>42</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-01-30 02:34:19 -0800</bug_when>
    <thetext>&quot;and is not supposed to have functions&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820000</commentid>
    <comment_count>43</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-01-30 02:37:26 -0800</bug_when>
    <thetext>m_state.m_parentStyle -&gt; m_state.parentStyle etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820340</commentid>
    <comment_count>44</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-30 11:18:17 -0800</bug_when>
    <thetext>(In reply to comment #41)
&gt; (From update of attachment 185427 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=185427&amp;action=review
&gt; 
&gt; You can make this struct to signal that it is supposed to have public members is not supposed to have functions. Please drop the m_ prefix for the public members, that&apos;s what we usually do and the code will look nicer.

I agree with Antti that these should either have no m_ prefix or have accessors.  But I also feel that could be done in a second patch to keep this one small.  That said, you&apos;ll probably end up changing the same lines again, so up to you.

(Its probably easy to search for &apos;state.m_&apos; and replace it with &apos;state.&apos; to get what you want from this diff)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820359</commentid>
    <comment_count>45</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-01-30 11:36:32 -0800</bug_when>
    <thetext>&gt; I agree with Antti that these should either have no m_ prefix or have accessors.  But I also feel that could be done in a second patch to keep this one small.  That said, you&apos;ll probably end up changing the same lines again, so up to you.

Is shouldn&apos;t change the patch size at all, no? Hits all the same lines.

&gt; (Its probably easy to search for &apos;state.m_&apos; and replace it with &apos;state.&apos; to get what you want from this diff)

...and is a trivial search replace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820366</commentid>
    <comment_count>46</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-30 11:42:11 -0800</bug_when>
    <thetext>Yup. :)  I believe we&apos;re in agreement. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821161</commentid>
    <comment_count>47</comment_count>
      <attachid>185696</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-31 00:06:09 -0800</bug_when>
    <thetext>Created attachment 185696
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821165</commentid>
    <comment_count>48</comment_count>
      <attachid>185427</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-31 00:07:16 -0800</bug_when>
    <thetext>Comment on attachment 185427
WIP: added m_state

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

Thank you for reviewing.

&gt;&gt; Source/WebCore/css/StyleResolver.h:446
&gt;&gt; +        , m_elementLinkState(NotInsideLink)
&gt; 
&gt; You can make this struct to signal that it is supposed to have public members is not supposed to have functions. Please drop the m_ prefix for the public members, that&apos;s what we usually do and the code will look nicer.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821175</commentid>
    <comment_count>49</comment_count>
      <attachid>185696</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-01-31 00:17:00 -0800</bug_when>
    <thetext>Comment on attachment 185696
Patch

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

It looks the patch becomes out of date. Please rebase it and let&apos;s cq?

&gt; Source/WebCore/css/StyleResolver.h:460
&gt; +        // FIXME: to make it easier to review, these member variables are

Had better file a bug for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822285</commentid>
    <comment_count>50</comment_count>
      <attachid>185930</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-31 21:03:15 -0800</bug_when>
    <thetext>Created attachment 185930
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822287</commentid>
    <comment_count>51</comment_count>
      <attachid>185696</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-31 21:05:17 -0800</bug_when>
    <thetext>Comment on attachment 185696
Patch

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

&gt;&gt; Source/WebCore/css/StyleResolver.h:460
&gt;&gt; +        // FIXME: to make it easier to review, these member variables are
&gt; 
&gt; Had better file a bug for this.

I see. Done. I filed bug 108563.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822291</commentid>
    <comment_count>52</comment_count>
      <attachid>185933</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-31 21:14:44 -0800</bug_when>
    <thetext>Created attachment 185933
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822351</commentid>
    <comment_count>53</comment_count>
      <attachid>185933</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-31 22:54:56 -0800</bug_when>
    <thetext>Comment on attachment 185933
Patch

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

I do not think that &quot;State&quot;&apos;s eventual destiny is as a struct, but rather as a class which holds all the useful data about an in-progress element resolve, and some related logic.  But I also think that this is a great step in the right direction and we don&apos;t have to get everythign right on the first pass. :)  I&apos;m happy to r+ this, but I Think you should give antti 12 hours to make sure he doesn&apos;t want another round.

&gt; Source/WebCore/css/SVGCSSStyleSelector.cpp:568
&gt; +            IntPoint location(item-&gt;x-&gt;computeLength&lt;int&gt;(state.style.get(), state.rootElementStyle),

This .get() is very unfortunate. :(  But again, we could add an accessor in another pass.

&gt; Source/WebCore/css/StyleResolver.cpp:980
&gt; +    State&amp; state = m_state;
&gt; +    state.pseudoStyle = pseudoID;

I think this function eventually moves onto State.

&gt; Source/WebCore/css/StyleResolver.cpp:1620
&gt; -    return m_style.release();
&gt; +    return state.style.release();

This will end up being takeStyle(), presumably.

&gt; Source/WebCore/css/StyleResolver.h:481
&gt; +        // FIXME(bug 108563): to make it easier to review, these member
&gt; +        // variables are public. However we should add methods to access
&gt; +        // these variables.

Agreed. :)  As well as move some of the clear(), and init() logic into this class.

&gt; Source/WebCore/css/StyleResolver.h:497
&gt; +        bool distributedToInsertionPoint;
&gt; +
&gt; +        bool elementAffectedByClassRules;

Also in a second pass we should shrink the size of this class by using bitfields.  It doesn&apos;t cost us anything and has some marginal benefit.

&gt; Source/WebCore/css/StyleResolver.h:503
&gt; +        // A buffer used to hold the set of matched rules for an element,
&gt; +        // and a temporary buffer used for merge sorting.
&gt; +        Vector&lt;const RuleData*, 32&gt; matchedRules;

Seems like a rather large internal capacity for this, I wonder how it was tuned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823957</commentid>
    <comment_count>54</comment_count>
      <attachid>186284</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-03 18:21:24 -0800</bug_when>
    <thetext>Created attachment 186284
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823969</commentid>
    <comment_count>55</comment_count>
      <attachid>185933</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-03 18:32:44 -0800</bug_when>
    <thetext>Comment on attachment 185933
Patch

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

Thank you for reviewing.

&gt;&gt; Source/WebCore/css/SVGCSSStyleSelector.cpp:568
&gt;&gt; +            IntPoint location(item-&gt;x-&gt;computeLength&lt;int&gt;(state.style.get(), state.rootElementStyle),
&gt; 
&gt; This .get() is very unfortunate. :(  But again, we could add an accessor in another pass.

Yeah. I would like to refactor this in another patch.

&gt;&gt; Source/WebCore/css/StyleResolver.cpp:980
&gt;&gt; +    state.pseudoStyle = pseudoID;
&gt; 
&gt; I think this function eventually moves onto State.

Yeah, I agree.

&gt;&gt; Source/WebCore/css/StyleResolver.h:497
&gt;&gt; +        bool elementAffectedByClassRules;
&gt; 
&gt; Also in a second pass we should shrink the size of this class by using bitfields.  It doesn&apos;t cost us anything and has some marginal benefit.

I changed these member variables to use bitfields in this patch. Is this ok? Or I have to split this into another patch?

&gt;&gt; Source/WebCore/css/StyleResolver.h:503
&gt;&gt; +        Vector&lt;const RuleData*, 32&gt; matchedRules;
&gt; 
&gt; Seems like a rather large internal capacity for this, I wonder how it was tuned.

I&apos;m thinking of the followings...
(1) use OwnPtr&lt;Vector&lt;const RuleData*, 32&gt; &gt; matchedRules and add &quot;ensureMatchedRules&quot;.
(2) check how many &quot;const RuleData*&quot; are stored in matchedRules (average, minimum, maximum, ...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823971</commentid>
    <comment_count>56</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-03 18:35:26 -0800</bug_when>
    <thetext>Antti, would you check the patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823988</commentid>
    <comment_count>57</comment_count>
      <attachid>186284</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-03 19:45:36 -0800</bug_when>
    <thetext>Comment on attachment 186284
Patch

Attachment 186284 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16356899</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824004</commentid>
    <comment_count>58</comment_count>
      <attachid>186284</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-02-03 20:43:25 -0800</bug_when>
    <thetext>Comment on attachment 186284
Patch

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

&gt; Source/WebCore/css/StyleResolver.h:490
&gt; +        bool sameOriginOnly : 1;

Bit-fields must be grouped all together in order to work.  Having them interspersed like this won&apos;t do anything. :)  This will still take up the full space of &quot;bool&quot; because the next member isn&apos;t also a bool bitfield.

Generaly we place all the bitfields at the end of a class, just for this reason.

I think we should just do the bitfield thing in a separate pass.

Note that for bitfields to pack in the MSVC compiler all members must have the same type.  For example, elementLinkState probably only needs like 3 bits, but if you wanted it to pack with the bools, we&apos;d have to make all the bools and that enum be &quot;unsigned&quot; in order to pack correctly on MSVC.

Bitfields are sadly kinda complicated, and althoguh we could land this as is, it won&apos;t really do what you expect it to. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824046</commentid>
    <comment_count>59</comment_count>
      <attachid>186303</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-03 22:08:55 -0800</bug_when>
    <thetext>Created attachment 186303
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824047</commentid>
    <comment_count>60</comment_count>
      <attachid>186303</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-03 22:11:47 -0800</bug_when>
    <thetext>Comment on attachment 186303
Patch

This patch is the same as last Thursday&apos;s patch.

I reverted bitfields code and just rebased current master.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824056</commentid>
    <comment_count>61</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-03 22:16:08 -0800</bug_when>
    <thetext>Thank you, Eric.

I uploaded a new patch, which is the same as Thursday&apos;s one (I just rebased).

I will wait until JST tomorrow morning and will submit if I have no issues.

(In reply to comment #58)
&gt; (From update of attachment 186284 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186284&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/css/StyleResolver.h:490
&gt; &gt; +        bool sameOriginOnly : 1;
&gt; 
&gt; Bit-fields must be grouped all together in order to work.  Having them interspersed like this won&apos;t do anything. :)  This will still take up the full space of &quot;bool&quot; because the next member isn&apos;t also a bool bitfield.
&gt; 
&gt; Generaly we place all the bitfields at the end of a class, just for this reason.
&gt; 
&gt; I think we should just do the bitfield thing in a separate pass.
&gt; 
&gt; Note that for bitfields to pack in the MSVC compiler all members must have the same type.  For example, elementLinkState probably only needs like 3 bits, but if you wanted it to pack with the bools, we&apos;d have to make all the bools and that enum be &quot;unsigned&quot; in order to pack correctly on MSVC.
&gt; 
&gt; Bitfields are sadly kinda complicated, and althoguh we could land this as is, it won&apos;t really do what you expect it to. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824060</commentid>
    <comment_count>62</comment_count>
      <attachid>186303</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-02-03 22:22:43 -0800</bug_when>
    <thetext>Comment on attachment 186303
Patch

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824061</commentid>
    <comment_count>63</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-02-03 22:23:05 -0800</bug_when>
    <thetext>I think we should land this and stat working on the next patch.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824084</commentid>
    <comment_count>64</comment_count>
      <attachid>186303</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-03 23:04:31 -0800</bug_when>
    <thetext>Comment on attachment 186303
Patch

Clearing flags on attachment: 186303

Committed r141742: &lt;http://trac.webkit.org/changeset/141742&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824085</commentid>
    <comment_count>65</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-03 23:04:40 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824197</commentid>
    <comment_count>66</comment_count>
      <attachid>186303</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-02-04 03:34:56 -0800</bug_when>
    <thetext>Comment on attachment 186303
Patch

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

&gt; Source/WebCore/css/StyleResolver.h:476
&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; +#if ENABLE(CSS_SHADERS)
&gt; +        , hasPendingShaders(false)
&gt; +#endif
&gt; +        , lineHeightValue(0)
&gt; +        , fontDirty(false)
&gt; +        , hasUAAppearance(false)
&gt; +        , backgroundData(BackgroundFillLayer) { }

Please move the constructor to .cpp. There is no need to have all this in the header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824201</commentid>
    <comment_count>67</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-02-04 03:38:22 -0800</bug_when>
    <thetext>(In reply to comment #58)
&gt; Bitfields are sadly kinda complicated, and althoguh we could land this as is, it won&apos;t really do what you expect it to. :)

Bitfields should not be used anyway if the object is not important for memory consumption. This one is not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824217</commentid>
    <comment_count>68</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-02-04 03:54:04 -0800</bug_when>
    <thetext>(In reply to comment #53)
&gt; I do not think that &quot;State&quot;&apos;s eventual destiny is as a struct, but rather as a class which holds all the useful data about an in-progress element resolve, and some related logic.  But I also think that this is a great step in the right direction and we don&apos;t have to get everythign right on the first pass. :)  I&apos;m happy to r+ this, but I Think you should give antti 12 hours to make sure he doesn&apos;t want another round.

We should be careful about the &quot;related logic&quot; part as you can easily end up with a confused type where people hang their favorite functions. A pure state object has a pretty clearly defined purpose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824231</commentid>
    <comment_count>69</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-02-04 04:06:38 -0800</bug_when>
    <thetext>StyleResolver::Query?
StyleResolver::Request?
StyleResolver::ElementContext?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824354</commentid>
    <comment_count>70</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-02-04 07:57:07 -0800</bug_when>
    <thetext>StyleQuery?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824383</commentid>
    <comment_count>71</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-02-04 08:31:23 -0800</bug_when>
    <thetext>I&apos;m OK with ElementContext or REquest or Query.  If this is a Request or Query I think it&apos;s construction is going to feel a bit different though.  It feels more like an in-process state object, so ElementContext or ResolveState would be higher on my list than reqest/query.

I&apos;m excited to get a chance to help clean even more of this up once I&apos;m done with current parser obligations. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824843</commentid>
    <comment_count>72</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-04 15:50:04 -0800</bug_when>
    <thetext>(In reply to comment #68)
&gt; We should be careful about the &quot;related logic&quot; part as you can easily end up with a confused type where people hang their favorite functions. A pure state object has a pretty clearly defined purpose.

Well, one lesson learned from NodeRenderingContext is that this actually happens.
The pure state approach might be too strict, but limiting dependency would be vital here.
We never want this class to depend StyleResolver.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163428</attachid>
            <date>2012-09-11 13:58:25 -0700</date>
            <delta_ts>2013-01-25 00:02:25 -0800</delta_ts>
            <desc>WIP: Exploring the problem.</desc>
            <filename>bug-96421-20120911135800.patch</filename>
            <type>text/plain</type>
            <size>126583</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MTkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGE4MDM1ZmVmZDk2MWVi
NzRmOWE5ZDVlZjVlYTFlM2E3YzJkYzcyNy4uNmFjYThlOGVkYjY5MmY1YjNhZmNhNTY2YjhlNjkz
ZmMwMTYzOWY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTA5LTExICBEaW1p
dHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3BsaXQgcGVy
LXJlc29sdmUgbG9naWMgb3V0IGZyb20gU3R5bGVSZXNvbHZlci4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NDIxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0
aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVu
Y3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IChPT1BTISkuCisKKyAgICAgICAgKiBjc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KToKKyAgICAgICAg
KiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6cHVzaFBhcmVudEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6cG9wUGFyZW50RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCk6CisgICAg
ICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFN0eWxlUmVzb2x1dGlvblN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x1dGlvblN0YXRlOjpzdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdXRpb25TdGF0ZTo6c2V0U3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHV0aW9uU3RhdGU6OnJlbGVhc2VTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnJvb3RFbGVtZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojpkb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpmb250RGVzY3Jp
cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Rm9udERlc2NyaXB0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFpvb20pOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0RWZmZWN0aXZlWm9vbSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRUZXh0U2l6ZUFkanVzdCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpoYXNQYXJlbnROb2RlKToKKyAgICAgICAgKFN0eWxlUmVzb2x2
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWxsVmlzaXRlZFN0YXRlQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjp2aXNpdGVkU3RhdGVDaGFu
Z2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmRvY3VtZW50U2V0dGluZ3Mp
OgorCiAyMDEyLTA5LTExICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTI4MTc1LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDViMzU0N2Y0ZDYyN2QzZTE5
YTFhZTY1Yjc2ZDA2MDliNTkzYWI1ZDIuLjAwMWJlMmZiNzJjMTc0OTE4OWI4ZWU3MzNjMDA1NmE4
OTRhNzVmNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVj
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAK
QEAgLTQ5LDcgKzQ5LDcgQEAKICNkZWZpbmUgSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAog
aWYgKGlzSW5oZXJpdCkgXAogeyBcCi0gICAgc3Znc3R5bGUtPnNldCMjUHJvcChtX3BhcmVudFN0
eWxlLT5zdmdTdHlsZSgpLT5wcm9wKCkpOyBcCisgICAgc3Znc3R5bGUtPnNldCMjUHJvcChtX3N0
YXRlLm1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnByb3AoKSk7IFwKICAgICByZXR1cm47IFwK
IH0KIApAQCAtMTA5LDEwICsxMDksMTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1By
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBpZiAodmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAotICAgIFNWR1JlbmRlclN0eWxlKiBzdmdz
dHlsZSA9IG1fc3R5bGUtPmFjY2Vzc1NWR1N0eWxlKCk7CisgICAgU1ZHUmVuZGVyU3R5bGUqIHN2
Z3N0eWxlID0gbV9zdGF0ZS5zdHlsZSgpLT5hY2Nlc3NTVkdTdHlsZSgpOworICAgIENvbG9yIGNv
bG9yID0gbV9zdGF0ZS5zdHlsZSgpLT5jb2xvcigpOwogCi0gICAgYm9vbCBpc0luaGVyaXQgPSBt
X3BhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKLSAgICBib29sIGlzSW5p
dGlhbCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICghbV9wYXJlbnROb2RlICYmIHZhbHVl
LT5pc0luaGVyaXRlZFZhbHVlKCkpOworICAgIGJvb2wgaXNJbmhlcml0ID0gbV9zdGF0ZS5tX3Bh
cmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKKyAgICBib29sIGlzSW5pdGlh
bCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICghbV9zdGF0ZS5tX3BhcmVudE5vZGUgJiYg
dmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7CiAKICAgICAvLyBXaGF0IGZvbGxvd3MgaXMgYSBs
aXN0IHRoYXQgbWFwcyB0aGUgQ1NTIHByb3BlcnRpZXMgaW50byB0aGVpcgogICAgIC8vIGNvcnJl
c3BvbmRpbmcgZnJvbnQtZW5kIFJlbmRlclN0eWxlIHZhbHVlcy4gU2hvcnRoYW5kcyhlLmcuIGJv
cmRlciwKQEAgLTIyNCw3ICsyMjUsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5RmlsbDoKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewot
ICAgICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQYXJlbnRTdHlsZSA9IG1f
cGFyZW50U3R5bGUtPnN2Z1N0eWxlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVy
U3R5bGUqIHN2Z1BhcmVudFN0eWxlID0gbV9zdGF0ZS5tX3BhcmVudFN0eWxlLT5zdmdTdHlsZSgp
OwogICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFyZW50U3R5bGUt
PmZpbGxQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludENvbG9yKCksIHN2Z1Bh
cmVudFN0eWxlLT5maWxsUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCks
IGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQpAQCAtMjM0LDE0ICsyMzUsMTQgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdQYWludCgpKSB7CiAg
ICAgICAgICAgICAgICAgU1ZHUGFpbnQqIHN2Z1BhaW50ID0gc3RhdGljX2Nhc3Q8U1ZHUGFpbnQq
Pih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChzdmdQYWlu
dC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIG1fc3R5
bGUtPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgICAgICAgICAgICAg
IHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21T
VkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBjb2xvciksIHN2Z1BhaW50LT51cmkoKSwgYXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUo
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlOgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoaXNJ
bmhlcml0KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1BhcmVu
dFN0eWxlID0gbV9wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBjb25z
dCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBtX3N0YXRlLm1fcGFyZW50U3R5bGUt
PnN2Z1N0eWxlKCk7CiAgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KHN2
Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBh
aW50Q29sb3IoKSwgc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50VXJpKCksIGFwcGx5UHJvcGVy
dHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTI1MSw3ICsyNTIsNyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHZhbHVlLT5p
c1NWR1BhaW50KCkpIHsKICAgICAgICAgICAgICAgICBTVkdQYWludCogc3ZnUGFpbnQgPSBzdGF0
aWNfY2FzdDxTVkdQYWludCo+KHZhbHVlKTsKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0
U3Ryb2tlUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1Zh
bHVlKHN2Z1BhaW50LCBtX3N0eWxlLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgp
KTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFpbnQtPnBh
aW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBjb2xvciksIHN2
Z1BhaW50LT51cmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQpAQCAtMzU4LDcgKzM1OSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAg
ICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAg
ICAgICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAg
IHN2Z3N0eWxlLT5zZXRNYXJrZXJTdGFydFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21l
bnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAg
ICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXJrZXJTdGFydFJlc291cmNlKFNWR1VSSVJlZmVyZW5j
ZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBtX3N0YXRlLm1fZWxlbWVudC0+
ZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eU1hcmtlck1pZDoKQEAgLTM3Miw3ICszNzMsNyBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAg
ICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0g
ICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFya2VyTWlkUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNl
OjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQo
KSkpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hcmtlck1pZFJlc291cmNlKFNWR1VSSVJl
ZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBtX3N0YXRlLm1fZWxl
bWVudC0+ZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmtlckVuZDoKQEAgLTM4Niw3ICszODcsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19V
UkkpCiAgICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgp
OwogCi0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFya2VyRW5kUmVzb3VyY2UoU1ZHVVJJUmVm
ZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9j
dW1lbnQoKSkpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hcmtlckVuZFJlc291cmNlKFNW
R1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBtX3N0YXRl
Lm1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZUxpbmVjYXA6CkBAIC00MjMsNyArNDI0LDcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3Ry
aW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbHRlclJlc291cmNlKFNW
R1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBtX2VsZW1l
bnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWx0ZXJSZXNvdXJj
ZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgbV9z
dGF0ZS5tX2VsZW1lbnQtPmRvY3VtZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXNrOgpAQCAtNDM3LDcgKzQzOCw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1Zh
bHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXNrZXJSZXNvdXJjZShTVkdVUklS
ZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgbV9lbGVtZW50LT5k
b2N1bWVudCgpKSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFza2VyUmVzb3VyY2UoU1ZH
VVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fc3RhdGUu
bV9lbGVtZW50LT5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q2xpcFBhdGg6CkBAIC00NTEsNyArNDUyLDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFs
dWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNldENsaXBwZXJSZXNvdXJjZShTVkdVUklS
ZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgbV9lbGVtZW50LT5k
b2N1bWVudCgpKSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0Q2xpcHBlclJlc291cmNlKFNW
R1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBtX3N0YXRl
Lm1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRBbmNob3I6CkBAIC00NzIsMTQgKzQ3MywxNCBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9B
TkRfSU5JVElBTChzdG9wQ29sb3IsIFN0b3BDb2xvcik7CiAgICAgICAgICAgICBpZiAodmFsdWUt
PmlzU1ZHQ29sb3IoKSkKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3RvcENvbG9yKGNv
bG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSksIG1f
c3R5bGUtPmNvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3RvcENvbG9y
KGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSks
IGNvbG9yKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlMaWdodGluZ0NvbG9yOgogICAgICAgICB7CiAgICAgICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChsaWdodGluZ0NvbG9yLCBMaWdodGluZ0NvbG9yKTsKICAgICAgICAg
ICAgIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRMaWdodGluZ0NvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZH
Q29sb3IqPih2YWx1ZSksIG1fc3R5bGUtPmNvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBzdmdz
dHlsZS0+c2V0TGlnaHRpbmdDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19j
YXN0PFNWR0NvbG9yKj4odmFsdWUpLCBjb2xvcikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZsb29kT3BhY2l0eToKQEAgLTUwNCw3ICs1
MDUsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChmbG9vZENvbG9yLCBGbG9vZENvbG9yKTsKICAgICAgICAgICAgIGlm
ICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGbG9v
ZENvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2
YWx1ZSksIG1fc3R5bGUtPmNvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0
Rmxvb2RDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9y
Kj4odmFsdWUpLCBjb2xvcikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsOgpAQCAtNTQ0LDcg
KzU0NSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFN2Z1NoYWRvdzogewogICAgICAgICAgICAgaWYgKGlzSW5oZXJp
dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3Znc3R5bGUtPnNldFNoYWRvdyhhZG9wdFB0ciht
X3BhcmVudFN0eWxlLT5zdmdTdHlsZSgpLT5zaGFkb3coKSA/IG5ldyBTaGFkb3dEYXRhKCptX3Bh
cmVudFN0eWxlLT5zdmdTdHlsZSgpLT5zaGFkb3coKSkgOiAwKSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHN2Z3N0eWxlLT5zZXRTaGFkb3coYWRvcHRQdHIobV9zdGF0ZS5tX3BhcmVudFN0eWxl
LT5zdmdTdHlsZSgpLT5zaGFkb3coKSA/IG5ldyBTaGFkb3dEYXRhKCptX3N0YXRlLm1fcGFyZW50
U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRvdygpKSA6IDApKTsKICAgICAgICAgICAgIGlmIChpc0lu
aXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUpIC8vIGluaXRpYWwgfCBub25lCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN2Z3N0eWxlLT5zZXRTaGFkb3cobnVsbHB0cik7CiAKQEAgLTU1OSw5ICs1NjAs
OSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKCFmaXJzdFZhbHVlLT5pc1NoYWRv
d1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgU2hhZG93VmFs
dWUqIGl0ZW0gPSBzdGF0aWNfY2FzdDxTaGFkb3dWYWx1ZSo+KGZpcnN0VmFsdWUpOwotICAgICAg
ICAgICAgSW50UG9pbnQgbG9jYXRpb24oaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxl
KCksIG1fcm9vdEVsZW1lbnRTdHlsZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
dGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKSk7
Ci0gICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRl
TGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKSA6IDA7CisgICAgICAgICAg
ICBJbnRQb2ludCBsb2NhdGlvbihpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwg
bV9zdGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fc3RhdGUubV9yb290RWxl
bWVudFN0eWxlKSk7CisgICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5i
bHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9zdGF0ZS5tX3Jvb3RFbGVtZW50U3R5
bGUpIDogMDsKICAgICAgICAgICAgIENvbG9yIGNvbG9yOwogICAgICAgICAgICAgaWYgKGl0ZW0t
PmNvbG9yKQogICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUo
aXRlbS0+Y29sb3IuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4
IGRkODc3Mzc3MWYxZjg3N2MwY2YzOWJmOTQ0ZmU2YTIwYjA2NTE2MWMuLjRkZGVmODkwMDA2Mjhk
ZTIwYTgyZjA1ODgyYmE0ZmU5Nzc1MjI4NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5jcHAKQEAgLTE3NiwyOCArMTc2LDI4IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAK
ICNkZWZpbmUgSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAogaWYgKGlzSW5oZXJpdCkgeyBc
Ci0gICAgbV9zdHlsZS0+c2V0IyNQcm9wKG1fcGFyZW50U3R5bGUtPnByb3AoKSk7IFwKKyAgICBt
X3N0YXRlLnN0eWxlKCktPnNldCMjUHJvcChtX3N0YXRlLm1fcGFyZW50U3R5bGUtPnByb3AoKSk7
IFwKICAgICByZXR1cm47IFwKIH0KIAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElB
TChwcm9wLCBQcm9wKSBcCiBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJbml0
aWFsKSB7IFwKLSAgICBtX3N0eWxlLT5zZXQjI1Byb3AoUmVuZGVyU3R5bGU6OmluaXRpYWwjI1By
b3AoKSk7IFwKKyAgICBtX3N0YXRlLnN0eWxlKCktPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5p
dGlhbCMjUHJvcCgpKTsgXAogICAgIHJldHVybjsgXAogfQogCiAjZGVmaW5lIEhBTkRMRV9JTkhF
UklUX0FORF9JTklUSUFMX1dJVEhfVkFMVUUocHJvcCwgUHJvcCwgVmFsdWUpIFwKIEhBTkRMRV9J
TkhFUklUKHByb3AsIFByb3ApIFwKIGlmIChpc0luaXRpYWwpIHsgXAotICAgIG1fc3R5bGUtPnNl
dCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMjVmFsdWUoKSk7XAorICAgIG1fc3RhdGUuc3R5
bGUoKS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNWYWx1ZSgpKTtcCiAgICAgcmV0
dXJuO1wKIH0KIAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlU
SVZFKHByb3AsIFByb3ApIFwKIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3Ap
IFwKIGlmIChwcmltaXRpdmVWYWx1ZSkgXAotICAgIG1fc3R5bGUtPnNldCMjUHJvcCgqcHJpbWl0
aXZlVmFsdWUpOworICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0IyNQcm9wKCpwcmltaXRpdmVWYWx1
ZSk7CiAKIGNsYXNzIFJ1bGVEYXRhIHsKIHB1YmxpYzoKQEAgLTM2NiwxOSArMzY2LDggQEAgU3R5
bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgbWF0Y2hB
dXRob3JBbmRVc2VyU3R5bGVzKQogICAgIDogbV9oYXNVQUFwcGVhcmFuY2UoZmFsc2UpCiAgICAg
LCBtX2JhY2tncm91bmREYXRhKEJhY2tncm91bmRGaWxsTGF5ZXIpCiAgICAgLCBtX21hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCgwKQotICAgICwgbV9jaGVja2Vy
KGRvY3VtZW50LCAhZG9jdW1lbnQtPmluUXVpcmtzTW9kZSgpKQotICAgICwgbV9wYXJlbnRTdHls
ZSgwKQotICAgICwgbV9yb290RWxlbWVudFN0eWxlKDApCi0gICAgLCBtX2VsZW1lbnQoMCkKLSAg
ICAsIG1fc3R5bGVkRWxlbWVudCgwKQotICAgICwgbV9yZWdpb25Gb3JTdHlsaW5nKDApCi0gICAg
LCBtX2VsZW1lbnRMaW5rU3RhdGUoTm90SW5zaWRlTGluaykKLSAgICAsIG1fcGFyZW50Tm9kZSgw
KQotICAgICwgbV9saW5lSGVpZ2h0VmFsdWUoMCkKLSAgICAsIG1fZm9udERpcnR5KGZhbHNlKQog
ICAgICwgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMobWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVz
KQotICAgICwgbV9zYW1lT3JpZ2luT25seShmYWxzZSkKLSAgICAsIG1fZGlzdHJpYnV0ZWRUb0lu
c2VydGlvblBvaW50KGZhbHNlKQorICAgICwgbV9zdGF0ZShkb2N1bWVudCkKICAgICAsIG1fZm9u
dFNlbGVjdG9yKENTU0ZvbnRTZWxlY3Rvcjo6Y3JlYXRlKGRvY3VtZW50KSkKICAgICAsIG1fYXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpCiAgICAgLCBtX2FwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUoZmFsc2UpCkBAIC02MzksMTAgKzYyOCwxMCBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OnB1c2hQYXJlbnRFbGVtZW50KEVsZW1lbnQqIHBhcmVudCkKICAgICAvLyBzdHlsZSBy
ZWNhbGMgaW4gdGhlIG1pZGRsZSBvZiB0cmVlIGJ1aWxkaW5nLiBXZSBtYXkgYWxzbyBiZSBpbnZv
a2VkIGZyb20gc29tZXdoZXJlIHdpdGhpbiB0aGUgdHJlZS4KICAgICAvLyBSZXNldCB0aGUgc3Rh
Y2sgaW4gdGhpcyBjYXNlLCBvciBpZiB3ZSBzZWUgYSBuZXcgcm9vdCBlbGVtZW50LgogICAgIC8v
IE90aGVyd2lzZSBqdXN0IHB1c2ggdGhlIG5ldyBwYXJlbnQuCi0gICAgaWYgKCFwYXJlbnRzUGFy
ZW50IHx8IG1fY2hlY2tlci5wYXJlbnRTdGFja0lzRW1wdHkoKSkKLSAgICAgICAgbV9jaGVja2Vy
LnNldHVwUGFyZW50U3RhY2socGFyZW50KTsKKyAgICBpZiAoIXBhcmVudHNQYXJlbnQgfHwgbV9z
dGF0ZS5tX2NoZWNrZXIucGFyZW50U3RhY2tJc0VtcHR5KCkpCisgICAgICAgIG1fc3RhdGUubV9j
aGVja2VyLnNldHVwUGFyZW50U3RhY2socGFyZW50KTsKICAgICBlbHNlCi0gICAgICAgIG1fY2hl
Y2tlci5wdXNoUGFyZW50KHBhcmVudCk7CisgICAgICAgIG1fc3RhdGUubV9jaGVja2VyLnB1c2hQ
YXJlbnQocGFyZW50KTsKIAogICAgIC8vIE5vdGU6IFdlIG11c3RuJ3Qgc2tpcCBTaGFkb3dSb290
IG5vZGVzIGZvciB0aGUgc2NvcGUgc3RhY2suCiAgICAgcHVzaFNjb3BlKHBhcmVudCwgcGFyZW50
LT5wYXJlbnRPckhvc3ROb2RlKCkpOwpAQCAtNjUyLDggKzY0MSw4IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6cG9wUGFyZW50RWxlbWVudChFbGVtZW50KiBwYXJlbnQpCiB7CiAgICAgLy8gTm90ZSB0
aGF0IHdlIG1heSBnZXQgaW52b2tlZCBmb3Igc29tZSByYW5kb20gZWxlbWVudHMgaW4gc29tZSB3
YWNreSBjYXNlcyBkdXJpbmcgc3R5bGUgcmVzb2x2ZS4KICAgICAvLyBQYXVzZSBtYWludGFpbmlu
ZyB0aGUgc3RhY2sgaW4gdGhpcyBjYXNlLgotICAgIGlmIChtX2NoZWNrZXIucGFyZW50U3RhY2tJ
c0NvbnNpc3RlbnQocGFyZW50KSkKLSAgICAgICAgbV9jaGVja2VyLnBvcFBhcmVudCgpOworICAg
IGlmIChtX3N0YXRlLm1fY2hlY2tlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChwYXJlbnQpKQor
ICAgICAgICBtX3N0YXRlLm1fY2hlY2tlci5wb3BQYXJlbnQoKTsKICAgICBwb3BTY29wZShwYXJl
bnQpOwogfQogCkBAIC04ODIsMzggKzg3MSwzOCBAQCBpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVy
OjphZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGNvbnN0CiB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBp
bnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9u
cyYgb3B0aW9ucykKIHsKICAgICBBU1NFUlQocnVsZXMpOwotICAgIEFTU0VSVChtX2VsZW1lbnQp
OworICAgIEFTU0VSVChtX3N0YXRlLm1fZWxlbWVudCk7CiAKICAgICAvLyBXZSBuZWVkIHRvIGNv
bGxlY3QgdGhlIHJ1bGVzIGZvciBpZCwgY2xhc3MsIHRhZywgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBp
bnRvIGEgYnVmZmVyIGFuZAogICAgIC8vIHRoZW4gc29ydCB0aGUgYnVmZmVyLgotICAgIGlmICht
X2VsZW1lbnQtPmhhc0lEKCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChy
dWxlcy0+aWRSdWxlcyhtX2VsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSwg
Zmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIG9wdGlvbnMpOwotICAgIGlmIChtX3N0eWxl
ZEVsZW1lbnQgJiYgbV9zdHlsZWRFbGVtZW50LT5oYXNDbGFzcygpKSB7Ci0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9zdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKCkuc2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZXMtPmNsYXNz
UnVsZXMobV9zdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKClbaV0uaW1wbCgpKSwgZmlyc3RSdWxl
SW5kZXgsIGxhc3RSdWxlSW5kZXgsIG9wdGlvbnMpOworICAgIGlmIChtX3N0YXRlLm1fZWxlbWVu
dC0+aGFzSUQoKSkKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT5p
ZFJ1bGVzKG1fc3RhdGUubV9lbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSks
IGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsKKyAgICBpZiAobV9zdGF0
ZS5tX3N0eWxlZEVsZW1lbnQgJiYgbV9zdGF0ZS5tX3N0eWxlZEVsZW1lbnQtPmhhc0NsYXNzKCkp
IHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0YXRlLm1fc3R5bGVkRWxlbWVu
dC0+Y2xhc3NOYW1lcygpLnNpemUoKTsgKytpKQorICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5n
UnVsZXNGb3JMaXN0KHJ1bGVzLT5jbGFzc1J1bGVzKG1fc3RhdGUubV9zdHlsZWRFbGVtZW50LT5j
bGFzc05hbWVzKClbaV0uaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIG9w
dGlvbnMpOwogICAgIH0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHBzZXVkb0lkID0gbV9lbGVt
ZW50LT5zaGFkb3dQc2V1ZG9JZCgpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHNldWRvSWQg
PSBtX3N0YXRlLm1fZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKTsKICAgICBpZiAoIXBzZXVkb0lk
LmlzRW1wdHkoKSkgewotICAgICAgICBBU1NFUlQobV9zdHlsZWRFbGVtZW50KTsKKyAgICAgICAg
QVNTRVJUKG1fc3RhdGUubV9zdHlsZWRFbGVtZW50KTsKICAgICAgICAgY29sbGVjdE1hdGNoaW5n
UnVsZXNGb3JMaXN0KHJ1bGVzLT5zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMocHNldWRvSWQuaW1w
bCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIG9wdGlvbnMpOwogICAgIH0KLSAg
ICBpZiAobV9lbGVtZW50LT5pc0xpbmsoKSkKKyAgICBpZiAobV9zdGF0ZS5tX2VsZW1lbnQtPmlz
TGluaygpKQogICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZXMtPmxpbmtQ
c2V1ZG9DbGFzc1J1bGVzKCksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25z
KTsKLSAgICBpZiAobV9jaGVja2VyLm1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKG1fZWxlbWVudCkp
CisgICAgaWYgKG1fc3RhdGUubV9jaGVja2VyLm1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKG1fc3Rh
dGUubV9lbGVtZW50KSkKICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVz
LT5mb2N1c1BzZXVkb0NsYXNzUnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgs
IG9wdGlvbnMpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlcy0+dGFnUnVs
ZXMobV9lbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1
bGVJbmRleCwgb3B0aW9ucyk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVz
LT50YWdSdWxlcyhtX3N0YXRlLm1fZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgZmlyc3RS
dWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIG9wdGlvbnMpOwogICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yTGlzdChydWxlcy0+dW5pdmVyc2FsUnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RS
dWxlSW5kZXgsIG9wdGlvbnMpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBp
bnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBp
ZiAoIW1fcmVnaW9uRm9yU3R5bGluZykKKyAgICBpZiAoIW1fc3RhdGUubV9yZWdpb25Gb3JTdHls
aW5nKQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBzaXplID0gcnVsZXMtPm1fcmVn
aW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yID0g
cnVsZXMtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkuc2VsZWN0b3I7Ci0gICAg
ICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKHJlZ2lvblNlbGVjdG9yLCBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obV9yZWdpb25Gb3JTdHlsaW5nLT5ub2RlKCkpKSkgeworICAgICAgICBpZiAoY2hl
Y2tSZWdpb25TZWxlY3RvcihyZWdpb25TZWxlY3Rvciwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1f
c3RhdGUubV9yZWdpb25Gb3JTdHlsaW5nLT5ub2RlKCkpKSkgewogICAgICAgICAgICAgUnVsZVNl
dCogcmVnaW9uUnVsZXMgPSBydWxlcy0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChp
KS5ydWxlU2V0LmdldCgpOwogICAgICAgICAgICAgQVNTRVJUKHJlZ2lvblJ1bGVzKTsKICAgICAg
ICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJlZ2lvblJ1bGVzLCBmaXJzdFJ1bGVJbmRleCwg
bGFzdFJ1bGVJbmRleCwgb3B0aW9ucyk7CkBAIC05MjgsMjAgKzkxNywyMCBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0
KQogCiAgICAgc29ydE1hdGNoZWRSdWxlcygpOwogCi0gICAgaWYgKG1fY2hlY2tlci5tb2RlKCkg
PT0gU2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpIHsKLSAgICAgICAgaWYgKCFtX3J1
bGVMaXN0KQotICAgICAgICAgICAgbV9ydWxlTGlzdCA9IFN0YXRpY0NTU1J1bGVMaXN0OjpjcmVh
dGUoKTsKKyAgICBpZiAobV9zdGF0ZS5tX2NoZWNrZXIubW9kZSgpID09IFNlbGVjdG9yQ2hlY2tl
cjo6Q29sbGVjdGluZ1J1bGVzKSB7CisgICAgICAgIGlmICghbV9zdGF0ZS5tX3J1bGVMaXN0KQor
ICAgICAgICAgICAgbV9zdGF0ZS5tX3J1bGVMaXN0ID0gU3RhdGljQ1NTUnVsZUxpc3Q6OmNyZWF0
ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICBtX3J1bGVMaXN0LT5ydWxlcygpLmFwcGVuZChtX21hdGNo
ZWRSdWxlc1tpXS0+cnVsZSgpLT5jcmVhdGVDU1NPTVdyYXBwZXIoKSk7CisgICAgICAgICAgICBt
X3N0YXRlLm1fcnVsZUxpc3QtPnJ1bGVzKCkuYXBwZW5kKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxl
KCktPmNyZWF0ZUNTU09NV3JhcHBlcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0byBvdXIgbGlz
dCBvZiBkZWNsYXJhdGlvbnMuCiAgICAgLy8gRklYTUU6IFRoaXMgc3Vja3MsIHRoZSBpbnNwZWN0
b3Igc2hvdWxkIGdldCB0aGUgc3R5bGUgZnJvbSB0aGUgdmlzaXRlZCBzdHlsZSBpdHNlbGYuCi0g
ICAgYm9vbCBzd2FwVmlzaXRlZFVudmlzaXRlZCA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
Zm9yY2VQc2V1ZG9TdGF0ZShtX2VsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkKTsK
KyAgICBib29sIHN3YXBWaXNpdGVkVW52aXNpdGVkID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojpmb3JjZVBzZXVkb1N0YXRlKG1fc3RhdGUubV9lbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRv
VmlzaXRlZCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNp
emUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChtX3N0eWxlICYmIG1fbWF0Y2hlZFJ1bGVzW2ldLT5j
b250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAgICAgICAgICAgIG1fc3R5bGUt
PnNldEFmZmVjdGVkQnlVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9ycygpOworICAgICAgICBpZiAo
bV9zdGF0ZS5zdHlsZSgpICYmIG1fbWF0Y2hlZFJ1bGVzW2ldLT5jb250YWluc1VuY29tbW9uQXR0
cmlidXRlU2VsZWN0b3IoKSkKKyAgICAgICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0QWZmZWN0
ZWRCeVVuY29tbW9uQXR0cmlidXRlU2VsZWN0b3JzKCk7CiAgICAgICAgIHVuc2lnbmVkIGxpbmtN
YXRjaFR5cGUgPSBtX21hdGNoZWRSdWxlc1tpXS0+bGlua01hdGNoVHlwZSgpOwogICAgICAgICBp
ZiAoc3dhcFZpc2l0ZWRVbnZpc2l0ZWQgJiYgbGlua01hdGNoVHlwZSAmJiBsaW5rTWF0Y2hUeXBl
ICE9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwpCiAgICAgICAgICAgICBsaW5rTWF0Y2hUeXBl
ID0gKGxpbmtNYXRjaFR5cGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQpID8gU2Vs
ZWN0b3JDaGVja2VyOjpNYXRjaExpbmsgOiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZDsK
QEAgLTk1OCwxMSArOTQ3LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRo
b3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0CiAgICAgTWF0Y2hP
cHRpb25zIG9wdGlvbnMoaW5jbHVkZUVtcHR5UnVsZXMpOwogCiAgICAgLy8gTWF0Y2ggc2NvcGVk
IGF1dGhvciBydWxlcyBieSB0cmF2ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVudCBzdGFjayAocmVi
dWlsZCBpdCBpZiBpdCBnb3QgaW5jb25zaXN0ZW50KS4KLSAgICBpZiAoIXNjb3BlU3RhY2tJc0Nv
bnNpc3RlbnQobV9lbGVtZW50KSkKLSAgICAgICAgc2V0dXBTY29wZVN0YWNrKG1fZWxlbWVudCk7
CisgICAgaWYgKCFzY29wZVN0YWNrSXNDb25zaXN0ZW50KG1fc3RhdGUubV9lbGVtZW50KSkKKyAg
ICAgICAgc2V0dXBTY29wZVN0YWNrKG1fc3RhdGUubV9lbGVtZW50KTsKIAogICAgIHVuc2lnbmVk
IGludCBmaXJzdFNoYWRvd1Njb3BlSW5kZXggPSAwOwotICAgIGlmIChtX2VsZW1lbnQtPnRyZWVT
Y29wZSgpLT5hcHBseUF1dGhvclN0eWxlcygpKSB7CisgICAgaWYgKG1fc3RhdGUubV9lbGVtZW50
LT50cmVlU2NvcGUoKS0+YXBwbHlBdXRob3JTdHlsZXMoKSkgewogICAgICAgICB1bnNpZ25lZCBp
OwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV9zY29wZVN0YWNrLnNpemUoKSAmJiAhbV9zY29w
ZVN0YWNrW2ldLm1fc2NvcGUtPmlzSW5TaGFkb3dUcmVlKCk7ICsraSkgewogICAgICAgICAgICAg
Y29uc3QgU2NvcGVTdGFja0ZyYW1lJiBmcmFtZSA9IG1fc2NvcGVTdGFja1tpXTsKQEAgLTk3Myw3
ICs5NjIsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0
Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdAogICAgICAgICBmaXJzdFNoYWRvd1Nj
b3BlSW5kZXggPSBpOwogICAgIH0KIAotICAgIGlmICghbV9lbGVtZW50LT5pc0luU2hhZG93VHJl
ZSgpIHx8IG1fc2NvcGVTdGFjay5pc0VtcHR5KCkpCisgICAgaWYgKCFtX3N0YXRlLm1fZWxlbWVu
dC0+aXNJblNoYWRvd1RyZWUoKSB8fCBtX3Njb3BlU3RhY2suaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICB1bnNpZ25lZCBzY29wZWRJbmRleCA9IG1fc2NvcGVTdGFjay5zaXplKCk7
CkBAIC0xMDAxLDcgKzk5MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxl
cyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzCiAgICAgbV9tYXRj
aGVkUnVsZXMuY2xlYXIoKTsKICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVz
dWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKLSAgICBpZiAoIW1fZWxlbWVudCkK
KyAgICBpZiAoIW1fc3RhdGUubV9lbGVtZW50KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBN
YXRjaCBnbG9iYWwgYXV0aG9yIHJ1bGVzLgpAQCAtMTA3MiwxNiArMTA2MSwxNiBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVs
ZURhdGE+KiBydWxlcywgaQogICAgIGlmICghcnVsZXMpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFRyZWVTY29wZSogdHJlZVNjb3BlID0gbV9lbGVtZW50LT50cmVlU2NvcGUoKTsKKyAgICBUcmVl
U2NvcGUqIHRyZWVTY29wZSA9IG1fc3RhdGUubV9lbGVtZW50LT50cmVlU2NvcGUoKTsKIAogICAg
IC8vIEluIHNvbWUgY2FzZXMgd2UgbWF5IGVuZCB1cCBsb29raW5nIHVwIHN0eWxlIGZvciByYW5k
b20gZWxlbWVudHMgaW4gdGhlIG1pZGRsZSBvZiBhIHJlY3Vyc2l2ZSB0cmVlIHJlc29sdmUuCiAg
ICAgLy8gQW5jZXN0b3IgaWRlbnRpZmllciBmaWx0ZXIgd29uJ3QgYmUgdXAtdG8tZGF0ZSBpbiB0
aGF0IGNhc2UgYW5kIHdlIGNhbid0IHVzZSB0aGUgZmFzdCBwYXRoLgotICAgIGJvb2wgY2FuVXNl
RmFzdFJlamVjdCA9IG1fY2hlY2tlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChtX3BhcmVudE5v
ZGUpOworICAgIGJvb2wgY2FuVXNlRmFzdFJlamVjdCA9IG1fc3RhdGUubV9jaGVja2VyLnBhcmVu
dFN0YWNrSXNDb25zaXN0ZW50KG1fc3RhdGUubV9wYXJlbnROb2RlKTsKIAogICAgIHVuc2lnbmVk
IHNpemUgPSBydWxlcy0+c2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKICAgICAgICAgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhID0gcnVsZXMtPmF0KGkp
OwotICAgICAgICBpZiAoY2FuVXNlRmFzdFJlamVjdCAmJiBtX2NoZWNrZXIuZmFzdFJlamVjdFNl
bGVjdG9yPFJ1bGVEYXRhOjptYXhpbXVtSWRlbnRpZmllckNvdW50PihydWxlRGF0YS5kZXNjZW5k
YW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCkpKQorICAgICAgICBpZiAoY2FuVXNlRmFzdFJl
amVjdCAmJiBtX3N0YXRlLm1fY2hlY2tlci5mYXN0UmVqZWN0U2VsZWN0b3I8UnVsZURhdGE6Om1h
eGltdW1JZGVudGlmaWVyQ291bnQ+KHJ1bGVEYXRhLmRlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZp
ZXJIYXNoZXMoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBTdHlsZVJ1bGUq
IHJ1bGUgPSBydWxlRGF0YS5ydWxlKCk7CkBAIC0xMTAxLDcgKzEwOTAsNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURh
dGE+KiBydWxlcywgaQogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCiAgICAgICAgICAgICAgICAg
JiYgKCFvcHRpb25zLnNjb3BlIHx8IG9wdGlvbnMuc2NvcGUtPnRyZWVTY29wZSgpICE9IHRyZWVT
Y29wZSkKICNlbmRpZgotICAgICAgICAgICAgICAgICYmICFtX2NoZWNrZXIuaGFzVW5rbm93blBz
ZXVkb0VsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgICAmJiAhbV9zdGF0ZS5tX2NoZWNrZXIu
aGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKCkpIHsKIAogICAgICAgICAgICAgICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOwogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwpAQCAtMTExMywxOSArMTEwMiwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBy
dWxlcywgaQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgLy8gRklYTUU6IEV4cG9zaW5nIHRoZSBub24tc3RhbmRhcmQgZ2V0TWF0Y2hlZENTU1J1
bGVzIEFQSSB0byB3ZWIgaXMgdGhlIG9ubHkgcmVhc29uIHRoaXMgaXMgbmVlZGVkLgotICAgICAg
ICAgICAgaWYgKG1fc2FtZU9yaWdpbk9ubHkgJiYgIXJ1bGVEYXRhLmhhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4oKSkgeworICAgICAgICAgICAgaWYgKG1fc3RhdGUubV9zYW1lT3JpZ2luT25seSAm
JiAhcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSB7CiAgICAgICAgICAgICAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAv
LyBJZiB3ZSdyZSBtYXRjaGluZyBub3JtYWwgcnVsZXMsIHNldCBhIHBzZXVkbyBiaXQgaWYKICAg
ICAgICAgICAgIC8vIHdlIHJlYWxseSBqdXN0IG1hdGNoZWQgYSBwc2V1ZG8tZWxlbWVudC4KLSAg
ICAgICAgICAgIGlmIChtX2R5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgbV9jaGVja2VyLnBz
ZXVkb1N0eWxlKCkgPT0gTk9QU0VVRE8pIHsKLSAgICAgICAgICAgICAgICBpZiAobV9jaGVja2Vy
Lm1vZGUoKSA9PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcykgeworICAgICAgICAg
ICAgaWYgKG1fc3RhdGUubV9keW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIG1fc3RhdGUubV9j
aGVja2VyLnBzZXVkb1N0eWxlKCkgPT0gTk9QU0VVRE8pIHsKKyAgICAgICAgICAgICAgICBpZiAo
bV9zdGF0ZS5tX2NoZWNrZXIubW9kZSgpID09IFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1
bGVzKSB7CiAgICAgICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
TWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG1fZHluYW1pY1BzZXVkbyA8
IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEKQotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRIYXNQc2V1ZG9TdHlsZShtX2R5bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgICAgIGlmICht
X3N0YXRlLm1fZHluYW1pY1BzZXVkbyA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEKQorICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxlKCktPnNldEhhc1BzZXVkb1N0eWxlKG1fc3RhdGUu
bV9keW5hbWljUHNldWRvKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
Ly8gVXBkYXRlIG91ciBmaXJzdC9sYXN0IHJ1bGUgaW5kaWNlcyBpbiB0aGUgbWF0Y2hlZCBydWxl
cyBhcnJheS4KICAgICAgICAgICAgICAgICArK2xhc3RSdWxlSW5kZXg7CkBAIC0xMTYzLDE3ICsx
MTUyLDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYg
cmVzdWx0LCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGllCiAgICAgICAgIG1hdGNoVXNlclJ1bGVz
KHJlc3VsdCwgZmFsc2UpOwogICAgICAgICAKICAgICAvLyBOb3cgY2hlY2sgYXV0aG9yIHJ1bGVz
LCBiZWdpbm5pbmcgZmlyc3Qgd2l0aCBwcmVzZW50YXRpb25hbCBhdHRyaWJ1dGVzIG1hcHBlZCBm
cm9tIEhUTUwuCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudCkgewotICAgICAgICBhZGRFbGVtZW50
U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdHlsZWRFbGVtZW50LT5hdHRyaWJ1dGVTdHlsZSgp
KTsKKyAgICBpZiAobV9zdGF0ZS5tX3N0eWxlZEVsZW1lbnQpIHsKKyAgICAgICAgYWRkRWxlbWVu
dFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3RhdGUubV9zdHlsZWRFbGVtZW50LT5hdHRyaWJ1
dGVTdHlsZSgpKTsKIAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sgYWRkaXRpb25hbCBtYXBwZWQg
ZGVjbGFyYXRpb25zLgogICAgICAgICAvLyBUYWJsZXMgYW5kIHRhYmxlIGNlbGxzIHNoYXJlIGFu
IGFkZGl0aW9uYWwgbWFwcGVkIHJ1bGUgdGhhdCBtdXN0IGJlIGFwcGxpZWQKICAgICAgICAgLy8g
YWZ0ZXIgYWxsIGF0dHJpYnV0ZXMsIHNpbmNlIHRoZWlyIG1hcHBlZCBzdHlsZSBkZXBlbmRzIG9u
IHRoZSB2YWx1ZXMgb2YgbXVsdGlwbGUgYXR0cmlidXRlcy4KLSAgICAgICAgYWRkRWxlbWVudFN0
eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbEF0dHJpYnV0
ZVN0eWxlKCkpOworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9z
dGF0ZS5tX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpKTsKIAotICAg
ICAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgaWYg
KG1fc3RhdGUubV9zdHlsZWRFbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAg
IGJvb2wgaXNBdXRvOwotICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0g
dG9IVE1MRWxlbWVudChtX3N0eWxlZEVsZW1lbnQpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0
b0F0dHJpYnV0ZShpc0F1dG8pOworICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0
aW9uID0gdG9IVE1MRWxlbWVudChtX3N0YXRlLm1fc3R5bGVkRWxlbWVudCktPmRpcmVjdGlvbmFs
aXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CiAgICAgICAgICAgICBpZiAoaXNBdXRv
KQogICAgICAgICAgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgdGV4dERpcmVj
dGlvbiA9PSBMVFIgPyBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVmdERlY2xh
cmF0aW9uKCkpOwogICAgICAgICB9CkBAIC0xMTg0LDY2ICsxMTczLDIzIEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6bWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVT
TUlMUHJvcGVydGllCiAgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMocmVzdWx0LCBmYWxzZSk7CiAK
ICAgICAvLyBOb3cgY2hlY2sgb3VyIGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCi0gICAgaWYgKG1f
bWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3R5bGVkRWxlbWVudCAmJiBtX3N0eWxlZEVs
ZW1lbnQtPmlubGluZVN0eWxlKCkpIHsKKyAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHls
ZXMgJiYgbV9zdGF0ZS5tX3N0eWxlZEVsZW1lbnQgJiYgbV9zdGF0ZS5tX3N0eWxlZEVsZW1lbnQt
PmlubGluZVN0eWxlKCkpIHsKICAgICAgICAgLy8gSW5saW5lIHN0eWxlIGlzIGltbXV0YWJsZSBh
cyBsb25nIGFzIHRoZXJlIGlzIG5vIENTU09NIHdyYXBwZXIuCiAgICAgICAgIC8vIEZJWE1FOiBN
ZWRpYSBjb250cm9sIHNoYWRvdyB0cmVlcyBzZWVtIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCBjYWNo
aW5nLgotICAgICAgICBib29sIGlzSW5saW5lU3R5bGVDYWNoZWFibGUgPSAhbV9zdHlsZWRFbGVt
ZW50LT5pbmxpbmVTdHlsZSgpLT5pc011dGFibGUoKSAmJiAhbV9zdHlsZWRFbGVtZW50LT5pc0lu
U2hhZG93VHJlZSgpOworICAgICAgICBib29sIGlzSW5saW5lU3R5bGVDYWNoZWFibGUgPSAhbV9z
dGF0ZS5tX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCktPmlzTXV0YWJsZSgpICYmICFtX3N0
YXRlLm1fc3R5bGVkRWxlbWVudC0+aXNJblNoYWRvd1RyZWUoKTsKICAgICAgICAgLy8gRklYTUU6
IENvbnN0aWZ5LgotICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9z
dHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpLCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlKTsKKyAg
ICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3RhdGUubV9zdHlsZWRF
bGVtZW50LT5pbmxpbmVTdHlsZSgpLCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlKTsKICAgICB9CiAK
ICNpZiBFTkFCTEUoU1ZHKQogICAgIC8vIE5vdyBjaGVjayBTTUlMIGFuaW1hdGlvbiBvdmVycmlk
ZSBzdHlsZS4KLSAgICBpZiAoaW5jbHVkZVNNSUxQcm9wZXJ0aWVzICYmIG1fbWF0Y2hBdXRob3JB
bmRVc2VyU3R5bGVzICYmIG1fc3R5bGVkRWxlbWVudCAmJiBtX3N0eWxlZEVsZW1lbnQtPmlzU1ZH
RWxlbWVudCgpKQotICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3Rh
dGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxl
UHJvcGVydGllcygpLCBmYWxzZSAvKiBpc0NhY2hlYWJsZSAqLyk7CisgICAgaWYgKGluY2x1ZGVT
TUlMUHJvcGVydGllcyAmJiBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0YXRlLm1f
c3R5bGVkRWxlbWVudCAmJiBtX3N0YXRlLm1fc3R5bGVkRWxlbWVudC0+aXNTVkdFbGVtZW50KCkp
CisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBzdGF0aWNfY2FzdDxT
VkdFbGVtZW50Kj4obV9zdGF0ZS5tX3N0eWxlZEVsZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVBy
b3BlcnRpZXMoKSwgZmFsc2UgLyogaXNDYWNoZWFibGUgKi8pOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0oaW5jbHVkZVNNSUxQcm9wZXJ0aWVzKTsKICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBT
dHlsZVJlc29sdmVyOjppbml0RWxlbWVudChFbGVtZW50KiBlKQotewotICAgIGlmIChtX2VsZW1l
bnQgIT0gZSkgewotICAgICAgICBtX2VsZW1lbnQgPSBlOwotICAgICAgICBtX3N0eWxlZEVsZW1l
bnQgPSBtX2VsZW1lbnQgJiYgbV9lbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSA/IHN0YXRpY19j
YXN0PFN0eWxlZEVsZW1lbnQqPihtX2VsZW1lbnQpIDogMDsKLSAgICAgICAgbV9lbGVtZW50TGlu
a1N0YXRlID0gbV9jaGVja2VyLmRldGVybWluZUxpbmtTdGF0ZShtX2VsZW1lbnQpOwotICAgICAg
ICBpZiAoZSAmJiBlID09IGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKSB7Ci0gICAg
ICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXREaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudChm
YWxzZSk7Ci0gICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNldE9uRG9j
dW1lbnRFbGVtZW50KGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotaW5saW5lIHZvaWQg
U3R5bGVSZXNvbHZlcjo6aW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50KiBlLCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUsIFBzZXVkb0lkIHBzZXVkb0lEKQotewotICAgIG1fY2hlY2tlci5zZXRQ
c2V1ZG9TdHlsZShwc2V1ZG9JRCk7Ci0KLSAgICBpZiAoZSkgewotICAgICAgICBOb2RlUmVuZGVy
aW5nQ29udGV4dCBjb250ZXh0KGUpOwotICAgICAgICBtX3BhcmVudE5vZGUgPSBjb250ZXh0LnBh
cmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHlsZSgpOwotICAgICAgICBtX3BhcmVudFN0eWxlID0g
Y29udGV4dC5yZXNldFN0eWxlSW5oZXJpdGFuY2UoKT8gMCA6Ci0gICAgICAgICAgICBwYXJlbnRT
dHlsZSA/IHBhcmVudFN0eWxlIDoKLSAgICAgICAgICAgIG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50
Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDA7Ci0gICAgICAgIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlv
blBvaW50ID0gY29udGV4dC5pbnNlcnRpb25Qb2ludCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IG1fcGFyZW50Tm9kZSA9IDA7Ci0gICAgICAgIG1fcGFyZW50U3R5bGUgPSBwYXJlbnRTdHlsZTsK
LSAgICAgICAgbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQgPSBmYWxzZTsKLSAgICB9Ci0K
LSAgICBOb2RlKiBkb2NFbGVtZW50ID0gZSA/IGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVu
dCgpIDogMDsKLSAgICBSZW5kZXJTdHlsZSogZG9jU3R5bGUgPSBtX2NoZWNrZXIuZG9jdW1lbnQo
KS0+cmVuZGVyU3R5bGUoKTsKLSAgICBtX3Jvb3RFbGVtZW50U3R5bGUgPSBkb2NFbGVtZW50ICYm
IGUgIT0gZG9jRWxlbWVudCA/IGRvY0VsZW1lbnQtPnJlbmRlclN0eWxlKCkgOiBkb2NTdHlsZTsK
LQotICAgIG1fc3R5bGUgPSAwOwotCi0gICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmNsZWFy
KCk7Ci0KLSAgICBtX3J1bGVMaXN0ID0gMDsKLQotICAgIG1fZm9udERpcnR5ID0gZmFsc2U7Ci19
Ci0KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjU3R5bGVTZWFyY2hUaHJlc2hvbGQgPSAxMDsKIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBjU3R5bGVTZWFyY2hMZXZlbFRocmVzaG9sZCA9IDEwOwogCkBA
IC0xMzEyLDcgKzEyNTgsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6Om1hdGNoZXNSdWxlU2V0KFJ1
bGVTZXQqIHJ1bGVTZXQpCiBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoQ29u
dHJvbChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewogICAgIEhUTUxJbnB1dEVsZW1l
bnQqIHRoaXNJbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwotICAgIEhU
TUxJbnB1dEVsZW1lbnQqIG90aGVySW5wdXRFbGVtZW50ID0gbV9lbGVtZW50LT50b0lucHV0RWxl
bWVudCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIG90aGVySW5wdXRFbGVtZW50ID0gbV9zdGF0
ZS5tX2VsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CiAKICAgICBpZiAoIXRoaXNJbnB1dEVsZW1l
bnQgfHwgIW90aGVySW5wdXRFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzI5
LDI1ICsxMjc1LDI1IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250
cm9sKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKHRoaXNJbnB1dEVsZW1l
bnQtPnJlcXVpcmVkKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPnJlcXVpcmVkKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgp
ICE9IG1fZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSkKKyAgICBpZiAoZWxlbWVudC0+
aXNFbmFibGVkRm9ybUNvbnRyb2woKSAhPSBtX3N0YXRlLm1fZWxlbWVudC0+aXNFbmFibGVkRm9y
bUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQtPmlz
RGVmYXVsdEJ1dHRvbkZvckZvcm0oKSAhPSBtX2VsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZv
cm0oKSkKKyAgICBpZiAoZWxlbWVudC0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpICE9IG1fc3Rh
dGUubV9lbGVtZW50LT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmIChtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNvbnRhaW5zVmFsaWRpdHlT
dHlsZVJ1bGVzKCkpIHsKKyAgICBpZiAobV9zdGF0ZS5tX2VsZW1lbnQtPmRvY3VtZW50KCktPmNv
bnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCkpIHsKICAgICAgICAgYm9vbCB3aWxsVmFsaWRhdGUg
PSBlbGVtZW50LT53aWxsVmFsaWRhdGUoKTsKIAotICAgICAgICBpZiAod2lsbFZhbGlkYXRlICE9
IG1fZWxlbWVudC0+d2lsbFZhbGlkYXRlKCkpCisgICAgICAgIGlmICh3aWxsVmFsaWRhdGUgIT0g
bV9zdGF0ZS5tX2VsZW1lbnQtPndpbGxWYWxpZGF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgIGlmICh3aWxsVmFsaWRhdGUgJiYgKGVsZW1lbnQtPmlzVmFsaWRGb3Jt
Q29udHJvbEVsZW1lbnQoKSAhPSBtX2VsZW1lbnQtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQo
KSkpCisgICAgICAgIGlmICh3aWxsVmFsaWRhdGUgJiYgKGVsZW1lbnQtPmlzVmFsaWRGb3JtQ29u
dHJvbEVsZW1lbnQoKSAhPSBtX3N0YXRlLm1fZWxlbWVudC0+aXNWYWxpZEZvcm1Db250cm9sRWxl
bWVudCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoZWxlbWVu
dC0+aXNJblJhbmdlKCkgIT0gbV9lbGVtZW50LT5pc0luUmFuZ2UoKSkKKyAgICAgICAgaWYgKGVs
ZW1lbnQtPmlzSW5SYW5nZSgpICE9IG1fc3RhdGUubV9lbGVtZW50LT5pc0luUmFuZ2UoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoZWxlbWVudC0+aXNPdXRPZlJh
bmdlKCkgIT0gbV9lbGVtZW50LT5pc091dE9mUmFuZ2UoKSkKKyAgICAgICAgaWYgKGVsZW1lbnQt
PmlzT3V0T2ZSYW5nZSgpICE9IG1fc3RhdGUubV9lbGVtZW50LT5pc091dE9mUmFuZ2UoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTEzOTQsOSArMTM0MCw5IEBAIGJv
b2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQq
IGVsZW1lbnQpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoc3R5bGUtPnVu
aXF1ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPnRhZ1FOYW1l
KCkgIT0gbV9lbGVtZW50LT50YWdRTmFtZSgpKQorICAgIGlmIChlbGVtZW50LT50YWdRTmFtZSgp
ICE9IG1fc3RhdGUubV9lbGVtZW50LT50YWdRTmFtZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkgIT0gbV9lbGVtZW50LT5oYXNDbGFzcygpKQor
ICAgIGlmIChlbGVtZW50LT5oYXNDbGFzcygpICE9IG1fc3RhdGUubV9lbGVtZW50LT5oYXNDbGFz
cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1lbnQtPmlubGluZVN0eWxl
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0MDYsMzUgKzEzNTIsMzUgQEAgYm9vbCBT
dHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxl
bWVudCkgY29uc3QKICAgICBpZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudCo+KGVsZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCi0gICAgaWYgKCEhZWxlbWVudC0+YXR0cmli
dXRlU3R5bGUoKSAhPSAhIW1fc3R5bGVkRWxlbWVudC0+YXR0cmlidXRlU3R5bGUoKSkKKyAgICBp
ZiAoISFlbGVtZW50LT5hdHRyaWJ1dGVTdHlsZSgpICE9ICEhbV9zdGF0ZS5tX3N0eWxlZEVsZW1l
bnQtPmF0dHJpYnV0ZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjb25zdCBT
dHlsZVByb3BlcnR5U2V0KiBhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVBID0gZWxlbWVudC0+YWRk
aXRpb25hbEF0dHJpYnV0ZVN0eWxlKCk7Ci0gICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogYWRk
aXRpb25hbEF0dHJpYnV0ZVN0eWxlQiA9IG1fc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbEF0dHJp
YnV0ZVN0eWxlKCk7CisgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogYWRkaXRpb25hbEF0dHJp
YnV0ZVN0eWxlQiA9IG1fc3RhdGUubV9zdHlsZWRFbGVtZW50LT5hZGRpdGlvbmFsQXR0cmlidXRl
U3R5bGUoKTsKICAgICBpZiAoIWFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZUEgIT0gIWFkZGl0aW9u
YWxBdHRyaWJ1dGVTdHlsZUIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVu
dC0+aXNMaW5rKCkgIT0gbV9lbGVtZW50LT5pc0xpbmsoKSkKKyAgICBpZiAoZWxlbWVudC0+aXNM
aW5rKCkgIT0gbV9zdGF0ZS5tX2VsZW1lbnQtPmlzTGluaygpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKHN0eWxlLT5hZmZlY3RlZEJ5VW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcnMo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5ob3ZlcmVkKCkgIT0g
bV9lbGVtZW50LT5ob3ZlcmVkKCkpCisgICAgaWYgKGVsZW1lbnQtPmhvdmVyZWQoKSAhPSBtX3N0
YXRlLm1fZWxlbWVudC0+aG92ZXJlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KGVsZW1lbnQtPmFjdGl2ZSgpICE9IG1fZWxlbWVudC0+YWN0aXZlKCkpCisgICAgaWYgKGVsZW1l
bnQtPmFjdGl2ZSgpICE9IG1fc3RhdGUubV9lbGVtZW50LT5hY3RpdmUoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5mb2N1c2VkKCkgIT0gbV9lbGVtZW50LT5mb2N1
c2VkKCkpCisgICAgaWYgKGVsZW1lbnQtPmZvY3VzZWQoKSAhPSBtX3N0YXRlLm1fZWxlbWVudC0+
Zm9jdXNlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPnNoYWRv
d1BzZXVkb0lkKCkgIT0gbV9lbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpKQorICAgIGlmIChlbGVt
ZW50LT5zaGFkb3dQc2V1ZG9JZCgpICE9IG1fc3RhdGUubV9lbGVtZW50LT5zaGFkb3dQc2V1ZG9J
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+
ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
bV9lbGVtZW50ID09IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCisgICAgaWYg
KG1fc3RhdGUubV9lbGVtZW50ID09IG1fc3RhdGUubV9lbGVtZW50LT5kb2N1bWVudCgpLT5jc3NU
YXJnZXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5mYXN0R2V0
QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikgIT0gbV9lbGVtZW50LT5mYXN0R2V0QXR0cmli
dXRlKFhNTE5hbWVzOjpsYW5nQXR0cikpCisgICAgaWYgKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1
dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSAhPSBtX3N0YXRlLm1fZWxlbWVudC0+ZmFzdEdldEF0dHJp
YnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIpICE9IG1fZWxlbWVudC0+ZmFzdEdl
dEF0dHJpYnV0ZShsYW5nQXR0cikpCisgICAgaWYgKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUo
bGFuZ0F0dHIpICE9IG1fc3RhdGUubV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRy
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5mYXN0R2V0QXR0cmli
dXRlKHJlYWRvbmx5QXR0cikgIT0gbV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5
QXR0cikpCisgICAgaWYgKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUocmVhZG9ubHlBdHRyKSAh
PSBtX3N0YXRlLm1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShyZWFkb25seUF0dHIpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoY2Vs
bHBhZGRpbmdBdHRyKSAhPSBtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoY2VsbHBhZGRpbmdB
dHRyKSkKKyAgICBpZiAoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShjZWxscGFkZGluZ0F0dHIp
ICE9IG1fc3RhdGUubV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGNlbGxwYWRkaW5nQXR0cikp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChlbGVtZW50LT5oYXNJRCgpICYmIG1f
ZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlv
bigpLmltcGwoKSkpCkBAIC0xNDQ3LDExICsxMzkzLDExIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6
Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAK
ICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFt
ZShwcm9ncmVzc1RhZykpIHsKLSAgICAgICAgaWYgKCFtX2VsZW1lbnQtPmhhc1RhZ05hbWUocHJv
Z3Jlc3NUYWcpKQorICAgICAgICBpZiAoIW1fc3RhdGUubV9lbGVtZW50LT5oYXNUYWdOYW1lKHBy
b2dyZXNzVGFnKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBIVE1MUHJv
Z3Jlc3NFbGVtZW50KiB0aGlzUHJvZ3Jlc3NFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFByb2dy
ZXNzRWxlbWVudCo+KGVsZW1lbnQpOwotICAgICAgICBIVE1MUHJvZ3Jlc3NFbGVtZW50KiBvdGhl
clByb2dyZXNzRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihtX2Vs
ZW1lbnQpOworICAgICAgICBIVE1MUHJvZ3Jlc3NFbGVtZW50KiBvdGhlclByb2dyZXNzRWxlbWVu
dCA9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihtX3N0YXRlLm1fZWxlbWVudCk7
CiAgICAgICAgIGlmICh0aGlzUHJvZ3Jlc3NFbGVtZW50LT5pc0RldGVybWluYXRlKCkgIT0gb3Ro
ZXJQcm9ncmVzc0VsZW1lbnQtPmlzRGV0ZXJtaW5hdGUoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CkBAIC0xNDY1LDcgKzE0MTEsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNh
blNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogCiAg
ICAgYm9vbCBpc0NvbnRyb2wgPSBlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpOwogCi0g
ICAgaWYgKGlzQ29udHJvbCAhPSBtX2VsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisg
ICAgaWYgKGlzQ29udHJvbCAhPSBtX3N0YXRlLm1fZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1l
bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGlzQ29udHJvbCAmJiAhY2Fu
U2hhcmVTdHlsZVdpdGhDb250cm9sKGVsZW1lbnQpKQpAQCAtMTQ4NiwyOCArMTQzMiwyOCBAQCBi
b29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50
KiBlbGVtZW50KSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIGlm
IChlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhlbGVtZW50KSB8fCBlbGVtZW50SGFzRGlyZWN0aW9u
QXV0byhtX2VsZW1lbnQpKQorICAgIGlmIChlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhlbGVtZW50
KSB8fCBlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhtX3N0YXRlLm1fZWxlbWVudCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmIChlbGVtZW50LT5oYXNDbGFzcygpKSB7CiAjaWYgRU5B
QkxFKFNWRykKICAgICAgICAgLy8gU1ZHIGVsZW1lbnRzIHJlcXVpcmUgYSAoc2xvdyEpIGdldEF0
dHJpYnV0ZSBjb21wYXJpc2lvbiBiZWNhdXNlICJjbGFzcyIgaXMgYW4gYW5pbWF0YWJsZSBhdHRy
aWJ1dGUgZm9yIFNWRy4KICAgICAgICAgaWYgKGVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKSB7Ci0g
ICAgICAgICAgICBpZiAoZWxlbWVudC0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgIT0gbV9lbGVt
ZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSkKKyAgICAgICAgICAgIGlmIChlbGVtZW50LT5n
ZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSAhPSBtX3N0YXRlLm1fZWxlbWVudC0+Z2V0QXR0cmlidXRl
KGNsYXNzQXR0cikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGVs
c2UKICNlbmRpZgotICAgICAgICBpZiAoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShjbGFzc0F0
dHIpICE9IG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShjbGFzc0F0dHIpKQorICAgICAgICBp
ZiAoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9IG1fc3RhdGUubV9lbGVt
ZW50LT5mYXN0R2V0QXR0cmlidXRlKGNsYXNzQXR0cikpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgaWYgKGVsZW1lbnQtPmF0dHJpYnV0ZVN0eWxlKCkgJiYgIWF0dHJp
YnV0ZVN0eWxlc0VxdWFsKGVsZW1lbnQtPmF0dHJpYnV0ZVN0eWxlKCksIG1fc3R5bGVkRWxlbWVu
dC0+YXR0cmlidXRlU3R5bGUoKSkpCisgICAgaWYgKGVsZW1lbnQtPmF0dHJpYnV0ZVN0eWxlKCkg
JiYgIWF0dHJpYnV0ZVN0eWxlc0VxdWFsKGVsZW1lbnQtPmF0dHJpYnV0ZVN0eWxlKCksIG1fc3Rh
dGUubV9zdHlsZWRFbGVtZW50LT5hdHRyaWJ1dGVTdHlsZSgpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgaWYgKGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZUEgJiYgIWF0dHJpYnV0ZVN0
eWxlc0VxdWFsKGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZUEsIGFkZGl0aW9uYWxBdHRyaWJ1dGVT
dHlsZUIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNMaW5r
KCkgJiYgbV9lbGVtZW50TGlua1N0YXRlICE9IHN0eWxlLT5pbnNpZGVMaW5rKCkpCisgICAgaWYg
KGVsZW1lbnQtPmlzTGluaygpICYmIG1fc3RhdGUubV9lbGVtZW50TGlua1N0YXRlICE9IHN0eWxl
LT5pbnNpZGVMaW5rKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVl
OwpAQCAtMTUzNiwyMiArMTQ4MiwyMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGFyZW50U3R5bGVQ
cmV2ZW50c1NoYXJpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogCiBSZW5kZXJT
dHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQogewotICAgIGlmICghbV9z
dHlsZWRFbGVtZW50IHx8ICFtX3BhcmVudFN0eWxlKQorICAgIGlmICghbV9zdGF0ZS5tX3N0eWxl
ZEVsZW1lbnQgfHwgIW1fc3RhdGUubV9wYXJlbnRTdHlsZSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgLy8gSWYgdGhlIGVsZW1lbnQgaGFzIGlubGluZSBzdHlsZSBpdCBpcyBwcm9iYWJseSB1bmlx
dWUuCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSkKKyAgICBpZiAobV9z
dGF0ZS5tX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiAwOwog
I2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aXNTVkdFbGVtZW50KCkg
JiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01J
TFN0eWxlUHJvcGVydGllcygpKQorICAgIGlmIChtX3N0YXRlLm1fc3R5bGVkRWxlbWVudC0+aXNT
VkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3RhdGUubV9zdHlsZWRF
bGVtZW50KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCiAgICAgICAgIHJldHVybiAw
OwogI2VuZGlmCiAgICAgLy8gSWRzIHN0b3Agc3R5bGUgc2hhcmluZyBpZiB0aGV5IHNob3cgdXAg
aW4gdGhlIHN0eWxlc2hlZXRzLgotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmhhc0lEKCkgJiYg
bV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKG1fc3R5bGVkRWxlbWVudC0+aWRGb3JTdHls
ZVJlc29sdXRpb24oKS5pbXBsKCkpKQorICAgIGlmIChtX3N0YXRlLm1fc3R5bGVkRWxlbWVudC0+
aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMobV9zdGF0ZS5tX3N0eWxl
ZEVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgaWYgKHBhcmVudFN0eWxlUHJldmVudHNTaGFyaW5nKG1fcGFyZW50U3R5bGUpKQor
ICAgIGlmIChwYXJlbnRTdHlsZVByZXZlbnRzU2hhcmluZyhtX3N0YXRlLm1fcGFyZW50U3R5bGUp
KQogICAgICAgICByZXR1cm4gMDsKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgIGlmICht
X3N0eWxlZEVsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgaWYgKG1fc3Rh
dGUubV9zdHlsZWRFbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQogICAgICAgICBy
ZXR1cm4gMDsKICNlbmRpZgogCkBAIC0xNTU5LDcgKzE1MDUsNyBAQCBSZW5kZXJTdHlsZSogU3R5
bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsK
ICAgICB1bnNpZ25lZCB2aXNpdGVkTm9kZUNvdW50ID0gMDsKICAgICBTdHlsZWRFbGVtZW50KiBz
aGFyZUVsZW1lbnQgPSAwOwotICAgIE5vZGUqIGNvdXNpbkxpc3QgPSBtX3N0eWxlZEVsZW1lbnQt
PnByZXZpb3VzU2libGluZygpOworICAgIE5vZGUqIGNvdXNpbkxpc3QgPSBtX3N0YXRlLm1fc3R5
bGVkRWxlbWVudC0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgd2hpbGUgKGNvdXNpbkxpc3QpIHsK
ICAgICAgICAgc2hhcmVFbGVtZW50ID0gZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoY291c2lu
TGlzdCwgY291bnQpOwogICAgICAgICBpZiAoc2hhcmVFbGVtZW50KQpAQCAtMTU3OCw3ICsxNTI0
LDcgQEAgUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAg
ICBpZiAobWF0Y2hlc1J1bGVTZXQobV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQuZ2V0KCkpKQog
ICAgICAgICByZXR1cm4gMDsKICAgICAvLyBUcmFja2luZyBjaGlsZCBpbmRleCByZXF1aXJlcyB1
bmlxdWUgc3R5bGUgZm9yIGVhY2ggbm9kZS4gVGhpcyBtYXkgZ2V0IHNldCBieSB0aGUgc2libGlu
ZyBydWxlIG1hdGNoIGFib3ZlLgotICAgIGlmIChwYXJlbnRTdHlsZVByZXZlbnRzU2hhcmluZyht
X3BhcmVudFN0eWxlKSkKKyAgICBpZiAocGFyZW50U3R5bGVQcmV2ZW50c1NoYXJpbmcobV9zdGF0
ZS5tX3BhcmVudFN0eWxlKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHNoYXJlRWxl
bWVudC0+cmVuZGVyU3R5bGUoKTsKIH0KQEAgLTE1OTUsMTEgKzE1NDEsMTEgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjptYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKICAgICBtYXRjaFVB
UnVsZXMocmVzdWx0LCB1c2VyQWdlbnRTdHlsZVNoZWV0KTsKIAogICAgIC8vIEluIHF1aXJrcyBt
b2RlLCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSBxdWlya3MgdXNlciBhZ2VudCBzaGVldC4KLSAg
ICBpZiAoIW1fY2hlY2tlci5zdHJpY3RQYXJzaW5nKCkpCisgICAgaWYgKCFtX3N0YXRlLm1fY2hl
Y2tlci5zdHJpY3RQYXJzaW5nKCkpCiAgICAgICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQsIGRlZmF1
bHRRdWlya3NTdHlsZSk7CiAKICAgICAvLyBJZiBkb2N1bWVudCB1c2VzIHZpZXcgc291cmNlIHN0
eWxlcyAoaW4gdmlldyBzb3VyY2UgbW9kZSBvciBpbiB4bWwgdmlld2VyIG1vZGUpLCB0aGVuIHdl
IG1hdGNoIHJ1bGVzIGZyb20gdGhlIHZpZXcgc291cmNlIHN0eWxlIHNoZWV0LgotICAgIGlmICht
X2NoZWNrZXIuZG9jdW1lbnQoKS0+aXNWaWV3U291cmNlKCkpIHsKKyAgICBpZiAobV9zdGF0ZS5t
X2NoZWNrZXIuZG9jdW1lbnQoKS0+aXNWaWV3U291cmNlKCkpIHsKICAgICAgICAgaWYgKCFkZWZh
dWx0Vmlld1NvdXJjZVN0eWxlKQogICAgICAgICAgICAgbG9hZFZpZXdTb3VyY2VTdHlsZSgpOwog
ICAgICAgICBtYXRjaFVBUnVsZXMocmVzdWx0LCBkZWZhdWx0Vmlld1NvdXJjZVN0eWxlKTsKQEAg
LTE3NTUsMzUgKzE3MDEsMzUgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZl
cjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIFJlbmRlclMKICAgICAgICAgcmV0
dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CiAgICAgfQogCi0gICAgaW5pdEVsZW1lbnQoZWxl
bWVudCk7Ci0gICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlbGVtZW50LCBkZWZhdWx0UGFyZW50KTsK
LSAgICBtX3JlZ2lvbkZvclN0eWxpbmcgPSByZWdpb25Gb3JTdHlsaW5nOwotICAgIGlmIChzaGFy
aW5nQmVoYXZpb3IgPT0gQWxsb3dTdHlsZVNoYXJpbmcgJiYgIW1fZGlzdHJpYnV0ZWRUb0luc2Vy
dGlvblBvaW50KSB7CisgICAgbV9zdGF0ZS5pbml0RWxlbWVudChlbGVtZW50KTsKKyAgICBtX3N0
YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZWxlbWVudCwgZGVmYXVsdFBhcmVudCk7CisgICAgbV9z
dGF0ZS5tX3JlZ2lvbkZvclN0eWxpbmcgPSByZWdpb25Gb3JTdHlsaW5nOworICAgIGlmIChzaGFy
aW5nQmVoYXZpb3IgPT0gQWxsb3dTdHlsZVNoYXJpbmcgJiYgIW1fc3RhdGUubV9kaXN0cmlidXRl
ZFRvSW5zZXJ0aW9uUG9pbnQpIHsKICAgICAgICAgUmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0g
bG9jYXRlU2hhcmVkU3R5bGUoKTsKICAgICAgICAgaWYgKHNoYXJlZFN0eWxlKQogICAgICAgICAg
ICAgcmV0dXJuIHNoYXJlZFN0eWxlOwogICAgIH0KIAotICAgIG1fc3R5bGUgPSBSZW5kZXJTdHls
ZTo6Y3JlYXRlKCk7CisgICAgbV9zdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlKCkp
OwogCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjbG9uZUZvclBhcmVudDsKIAotICAgIGlmICht
X3BhcmVudFN0eWxlKQotICAgICAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShtX3BhcmVudFN0eWxl
LCBpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkgPyBSZW5kZXJTdHlsZTo6QXRTaGFkb3dCb3Vu
ZGFyeSA6IFJlbmRlclN0eWxlOjpOb3RBdFNoYWRvd0JvdW5kYXJ5KTsKKyAgICBpZiAobV9zdGF0
ZS5tX3BhcmVudFN0eWxlKQorICAgICAgICBtX3N0YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKG1f
c3RhdGUubV9wYXJlbnRTdHlsZSwgaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1lbnQpID8gUmVuZGVy
U3R5bGU6OkF0U2hhZG93Qm91bmRhcnkgOiBSZW5kZXJTdHlsZTo6Tm90QXRTaGFkb3dCb3VuZGFy
eSk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIE1ha2Ugc3VyZSBvdXIgZm9udHMgYXJlIGluaXRp
YWxpemVkIGlmIHdlIGRvbid0IGluaGVyaXQgdGhlbSBmcm9tIG91ciBwYXJlbnQgc3R5bGUuCiAg
ICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudFNldHRpbmdzKCkpIHsKICAg
ICAgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOwotICAgICAgICAgICAgbV9z
dHlsZS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CisgICAgICAgICAgICBtX3N0YXRl
LnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIG1fc3R5bGUtPmZvbnQoKS51cGRhdGUoMCk7CisgICAgICAgICAgICBtX3N0
YXRlLnN0eWxlKCktPmZvbnQoKS51cGRhdGUoMCk7CiAgICAgICAgIGNsb25lRm9yUGFyZW50ID0g
UmVuZGVyU3R5bGU6OmNsb25lKHN0eWxlKCkpOwotICAgICAgICBtX3BhcmVudFN0eWxlID0gY2xv
bmVGb3JQYXJlbnQuZ2V0KCk7CisgICAgICAgIG1fc3RhdGUubV9wYXJlbnRTdHlsZSA9IGNsb25l
Rm9yUGFyZW50LmdldCgpOwogICAgIH0KIAogICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSkgewot
ICAgICAgICBtX3N0eWxlLT5zZXRJc0xpbmsodHJ1ZSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldElu
c2lkZUxpbmsobV9lbGVtZW50TGlua1N0YXRlKTsKKyAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5z
ZXRJc0xpbmsodHJ1ZSk7CisgICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0SW5zaWRlTGluayht
X3N0YXRlLm1fZWxlbWVudExpbmtTdGF0ZSk7CiAgICAgfQogCiAgICAgZW5zdXJlRGVmYXVsdFN0
eWxlU2hlZXRzRm9yRWxlbWVudChlbGVtZW50KTsKQEAgLTE3OTcsMTUgKzE3NDMsMTUgQEAgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1l
bnQqIGVsZW1lbnQsIFJlbmRlclMKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVz
dWx0LCBlbGVtZW50KTsKIAogICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNw
bGF5IGFuZCB0ZXh0IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVz
dFJlbmRlclN0eWxlKHN0eWxlKCksIG1fcGFyZW50U3R5bGUsIGVsZW1lbnQpOworICAgIGFkanVz
dFJlbmRlclN0eWxlKHN0eWxlKCksIG1fc3RhdGUubV9wYXJlbnRTdHlsZSwgZWxlbWVudCk7CiAK
LSAgICBpbml0RWxlbWVudCgwKTsgLy8gQ2xlYXIgb3V0IGZvciB0aGUgbmV4dCByZXNvbHZlLgor
ICAgIG1fc3RhdGUuaW5pdEVsZW1lbnQoMCk7IC8vIENsZWFyIG91dCBmb3IgdGhlIG5leHQgcmVz
b2x2ZS4KIAogICAgIGlmIChjbG9uZUZvclBhcmVudCkKLSAgICAgICAgbV9wYXJlbnRTdHlsZSA9
IDA7CisgICAgICAgIG1fc3RhdGUubV9wYXJlbnRTdHlsZSA9IDA7CiAKICAgICAvLyBOb3cgcmV0
dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4gbV9zdHlsZS5yZWxlYXNlKCk7CisgICAgcmV0dXJu
IG1fc3RhdGUucmVsZWFzZVN0eWxlKCk7CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0
eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRT
dHlsZSwgY29uc3QgU3R5bGVLZXlmcmFtZSoga2V5ZnJhbWUsIEtleWZyYW1lVmFsdWUmIGtleWZy
YW1lVmFsdWUpCkBAIC0xODE0LDEyICsxNzYwLDEyIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1l
CiAgICAgaWYgKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpCiAgICAgICAgIGFkZE1hdGNoZWRQcm9w
ZXJ0aWVzKHJlc3VsdCwga2V5ZnJhbWUtPnByb3BlcnRpZXMoKSk7CiAKLSAgICBBU1NFUlQoIW1f
c3R5bGUpOworICAgIEFTU0VSVCghbV9zdGF0ZS5zdHlsZSgpKTsKIAogICAgIC8vIENyZWF0ZSB0
aGUgc3R5bGUKLSAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKGVsZW1lbnRTdHlsZSk7
CisgICAgbV9zdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmUoZWxlbWVudFN0eWxlKSk7
CiAKLSAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAgbV9zdGF0ZS5tX2xpbmVIZWlnaHRW
YWx1ZSA9IDA7CiAKICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGJvdGhlciB3aXRoICFpbXBvcnRh
bnQuIFNpbmNlIHRoZXJlIGlzIG9ubHkgZXZlciBvbmUKICAgICAvLyBkZWNsLCB0aGVyZSdzIG5v
dGhpbmcgdG8gb3ZlcnJpZGUuIFNvIGp1c3QgYWRkIHRoZSBmaXJzdCBwcm9wZXJ0aWVzLgpAQCAt
MTgzMSw4ICsxNzc3LDggQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6
c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSogZWxlbWUKICAgICB1cGRhdGVGb250
KCk7CiAKICAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNp
ZGVkIG9uIHRoZSBmb250LXNpemUKLSAgICBpZiAobV9saW5lSGVpZ2h0VmFsdWUpCi0gICAgICAg
IGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX2xpbmVIZWlnaHRWYWx1ZSk7
CisgICAgaWYgKG1fc3RhdGUubV9saW5lSGVpZ2h0VmFsdWUpCisgICAgICAgIGFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX3N0YXRlLm1fbGluZUhlaWdodFZhbHVlKTsKIAog
ICAgIC8vIE5vdyBkbyByZXN0IG9mIHRoZSBwcm9wZXJ0aWVzLgogICAgIGlmIChrZXlmcmFtZS0+
cHJvcGVydGllcygpKQpAQCAtMTg1Nyw3ICsxODAzLDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSogZWxl
bWUKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKKyAg
ICByZXR1cm4gbV9zdGF0ZS5yZWxlYXNlU3R5bGUoKTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVy
OjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHls
ZSogZWxlbWVudFN0eWxlLCBLZXlmcmFtZUxpc3QmIGxpc3QpCkBAIC0xODgwLDggKzE4MjYsOCBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQq
IGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbAogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVL
ZXlmcmFtZT4gPiYga2V5ZnJhbWVzID0ga2V5ZnJhbWVzUnVsZS0+a2V5ZnJhbWVzKCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleWZyYW1lcy5zaXplKCk7ICsraSkgewogICAgICAg
ICAvLyBBcHBseSB0aGUgZGVjbGFyYXRpb24gdG8gdGhlIHN0eWxlLiBUaGlzIGlzIGEgc2ltcGxp
ZmllZCB2ZXJzaW9uIG9mIHRoZSBsb2dpYyBpbiBzdHlsZUZvckVsZW1lbnQKLSAgICAgICAgaW5p
dEVsZW1lbnQoZSk7Ci0gICAgICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSk7CisgICAgICAgIG1f
c3RhdGUuaW5pdEVsZW1lbnQoZSk7CisgICAgICAgIG1fc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2
ZShlKTsKIAogICAgICAgICBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSA9IGtleWZyYW1l
c1tpXS5nZXQoKTsKIApAQCAtMTkyNSwxNSArMTg3MSwxNSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxl
KiBlbAogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHls
ZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUpCiB7Ci0gICAgQVNTRVJUKG1fcGFyZW50U3R5bGUpOworICAgIEFTU0VSVChtX3N0
YXRlLm1fcGFyZW50U3R5bGUpOwogICAgIGlmICghZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAg
ICBpbml0RWxlbWVudChlKTsKKyAgICBtX3N0YXRlLmluaXRFbGVtZW50KGUpOwogCi0gICAgaW5p
dEZvclN0eWxlUmVzb2x2ZShlLCBwYXJlbnRTdHlsZSwgcHNldWRvKTsKLSAgICBtX3N0eWxlID0g
UmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKG1fcGFyZW50
U3R5bGUpOworICAgIG1fc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShlLCBwYXJlbnRTdHlsZSwg
cHNldWRvKTsKKyAgICBtX3N0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUoKSk7Cisg
ICAgbV9zdGF0ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShtX3N0YXRlLm1fcGFyZW50U3R5bGUpOwog
CiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgdXNlIHBzZXVkby1lbGVtZW50cyBpbiBhbnkgb2Ygb3Vy
IHF1aXJrL3ByaW50IHVzZXIgYWdlbnQgcnVsZXMsIGRvbid0IHdhc3RlIHRpbWUgd2Fsa2luZwog
ICAgIC8vIHRob3NlIHJ1bGVzLgpAQCAtMTk1MCw3ICsxODk2LDcgQEAgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBz
ZXVkbywgRWwKICAgICBpZiAobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1fc3R5bGUtPnNldFN0eWxlVHlwZShwc2V1ZG8p
OworICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0U3R5bGVUeXBlKHBzZXVkbyk7CiAKICAgICBhcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBlKTsKIApAQCAtMTk2MSwxNSArMTkwNywx
NSBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZv
ckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbAogICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7
CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4gbV9zdHlsZS5yZWxl
YXNlKCk7CisgICAgcmV0dXJuIG1fc3RhdGUucmVsZWFzZVN0eWxlKCk7CiB9CiAKIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4
KQogewotICAgIGluaXRGb3JTdHlsZVJlc29sdmUobV9jaGVja2VyLmRvY3VtZW50KCktPmRvY3Vt
ZW50RWxlbWVudCgpKTsgLy8gbV9yb290RWxlbWVudFN0eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBk
b2N1bWVudCBzdHlsZS4KKyAgICBtX3N0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUobV9zdGF0ZS5t
X2NoZWNrZXIuZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpOyAvLyBtX3N0YXRlLm1fcm9v
dEVsZW1lbnRTdHlsZSB3aWxsIGJlIHNldCB0byB0aGUgZG9jdW1lbnQgc3R5bGUuCiAKLSAgICBt
X3N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgIG1fc3R5bGUtPmluaGVyaXRGcm9t
KG1fcm9vdEVsZW1lbnRTdHlsZSk7CisgICAgbV9zdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6
Y3JlYXRlKCkpOworICAgIG1fc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEZyb20obV9zdGF0ZS5tX3Jv
b3RFbGVtZW50U3R5bGUpOwogCiAgICAgY29uc3QgYm9vbCBpc0xlZnQgPSBpc0xlZnRQYWdlKHBh
Z2VJbmRleCk7CiAgICAgY29uc3QgYm9vbCBpc0ZpcnN0ID0gaXNGaXJzdFBhZ2UocGFnZUluZGV4
KTsKQEAgLTE5ODAsNyArMTkyNiw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVz
b2x2ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogICAgIG1hdGNoUGFnZVJ1bGVzKHJl
c3VsdCwgbV91c2VyU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CiAgICAgLy8g
T25seSBjb25zaWRlciB0aGUgZ2xvYmFsIGF1dGhvciBSdWxlU2V0IGZvciBAcGFnZSBydWxlcywg
YXMgcGVyIHRoZSBIVE1MNSBzcGVjLgogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV9hdXRo
b3JTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKLSAgICBtX2xpbmVIZWlnaHRW
YWx1ZSA9IDA7CisgICAgbV9zdGF0ZS5tX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CiAgICAgYm9vbCBp
bmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCiAgICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihyZXN1bHQsIGZhbHNlLCAw
LCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CkBA
IC0xOTkxLDggKzE5MzcsOCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVy
OjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICB1cGRhdGVGb250KCk7CiAKICAgICAv
LyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBm
b250LXNpemUuCi0gICAgaWYgKG1fbGluZUhlaWdodFZhbHVlKQotICAgICAgICBhcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOworICAgIGlmICht
X3N0YXRlLm1fbGluZUhlaWdodFZhbHVlKQorICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5TGluZUhlaWdodCwgbV9zdGF0ZS5tX2xpbmVIZWlnaHRWYWx1ZSk7CiAKICAgICBhcHBseU1h
dGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwg
cmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwogCkBA
IC0yMDAwLDcgKzE5NDYsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVy
OjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygp
OwogCiAgICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUuCi0gICAgcmV0dXJuIG1fc3R5bGUucmVs
ZWFzZSgpOworICAgIHJldHVybiBtX3N0YXRlLnJlbGVhc2VTdHlsZSgpOwogfQogCiBzdGF0aWMg
dm9pZCBhZGRJbnRyaW5zaWNNYXJnaW5zKFJlbmRlclN0eWxlKiBzdHlsZSkKQEAgLTIwOTcsNyAr
MjA0Myw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5
bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5CiAgICAgICAgIC8vIHByb3BlcnR5Lgog
ICAgICAgICAvLyBTaXRlcyBhbHNvIGNvbW1vbmx5IHVzZSBkaXNwbGF5OmlubGluZS9ibG9jayBv
biA8dGQ+cyBhbmQgPHRhYmxlPnMuIEluIHF1aXJrcyBtb2RlIHdlIGZvcmNlCiAgICAgICAgIC8v
IHRoZXNlIHRhZ3MgdG8gcmV0YWluIHRoZWlyIGRpc3BsYXkgdHlwZXMuCi0gICAgICAgIGlmICgh
bV9jaGVja2VyLnN0cmljdFBhcnNpbmcoKSAmJiBlKSB7CisgICAgICAgIGlmICghbV9zdGF0ZS5t
X2NoZWNrZXIuc3RyaWN0UGFyc2luZygpICYmIGUpIHsKICAgICAgICAgICAgIGlmIChlLT5oYXNU
YWdOYW1lKHRkVGFnKSkgewogICAgICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KFRBQkxF
X0NFTEwpOwogICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRGbG9hdGluZyhOb0Zsb2F0KTsKQEAg
LTIxNDQsNyArMjA5MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUo
UmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5CiAKICAgICAgICAgLy8g
QWJzb2x1dGUvZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cywgZmxvYXRpbmcgZWxlbWVudHMgYW5k
IHRoZSBkb2N1bWVudCBlbGVtZW50IG5lZWQgYmxvY2stbGlrZSBvdXRzaWRlIGRpc3BsYXkuCiAg
ICAgICAgIGlmIChzdHlsZS0+aGFzT3V0T2ZGbG93UG9zaXRpb24oKSB8fCBzdHlsZS0+aXNGbG9h
dGluZygpIHx8IChlICYmIGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpID09IGUpKQot
ICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoZXF1aXZhbGVudEJsb2NrRGlzcGxheShzdHls
ZS0+ZGlzcGxheSgpLCBzdHlsZS0+aXNGbG9hdGluZygpLCBtX2NoZWNrZXIuc3RyaWN0UGFyc2lu
ZygpKSk7CisgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShlcXVpdmFsZW50QmxvY2tEaXNw
bGF5KHN0eWxlLT5kaXNwbGF5KCksIHN0eWxlLT5pc0Zsb2F0aW5nKCksIG1fc3RhdGUubV9jaGVj
a2VyLnN0cmljdFBhcnNpbmcoKSkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBEb24ndCBzdXBwb3J0
IHRoaXMgbXV0YXRpb24gZm9yIHBzZXVkbyBzdHlsZXMgbGlrZSBmaXJzdC1sZXR0ZXIgb3IgZmly
c3QtbGluZSwgc2luY2UgaXQncyBub3QgY29tcGxldGVseQogICAgICAgICAvLyBjbGVhciBob3cg
dGhhdCBzaG91bGQgd29yay4KQEAgLTIxNzQsNyArMjEyMCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5CiAKICAgICAgICAgaWYgKGlzRGlzcGxheUZsZXhpYmxlQm94KHBhcmVudFN0eWxlLT5k
aXNwbGF5KCkpKSB7CiAgICAgICAgICAgICBzdHlsZS0+c2V0RmxvYXRpbmcoTm9GbG9hdCk7Ci0g
ICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShlcXVpdmFsZW50QmxvY2tEaXNwbGF5KHN0eWxl
LT5kaXNwbGF5KCksIHN0eWxlLT5pc0Zsb2F0aW5nKCksIG1fY2hlY2tlci5zdHJpY3RQYXJzaW5n
KCkpKTsKKyAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KGVxdWl2YWxlbnRCbG9ja0Rpc3Bs
YXkoc3R5bGUtPmRpc3BsYXkoKSwgc3R5bGUtPmlzRmxvYXRpbmcoKSwgbV9zdGF0ZS5tX2NoZWNr
ZXIuc3RyaWN0UGFyc2luZygpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIzMzcsMjMgKzIy
ODMsMjQgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblN0eWxlKEVsZW1lbnQqIHJl
Z2lvbkVsZW1lbnQpCiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCgpCiB7Ci0gICAg
aWYgKCFtX2ZvbnREaXJ0eSkKKyAgICBpZiAoIW1fc3RhdGUubV9mb250RGlydHkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKTsKLSAgICBjaGVja0Zvckdl
bmVyaWNGYW1pbHlDaGFuZ2Uoc3R5bGUoKSwgbV9wYXJlbnRTdHlsZSk7Ci0gICAgY2hlY2tGb3Ja
b29tQ2hhbmdlKHN0eWxlKCksIG1fcGFyZW50U3R5bGUpOwotICAgIG1fc3R5bGUtPmZvbnQoKS51
cGRhdGUobV9mb250U2VsZWN0b3IpOwotICAgIG1fZm9udERpcnR5ID0gZmFsc2U7CisgICAgY2hl
Y2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKHN0eWxlKCksIG1fc3RhdGUubV9wYXJlbnRTdHlsZSk7
CisgICAgY2hlY2tGb3Jab29tQ2hhbmdlKHN0eWxlKCksIG1fc3RhdGUubV9wYXJlbnRTdHlsZSk7
CisgICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250KCkudXBkYXRlKG1fZm9udFNlbGVjdG9yKTsKKyAg
ICBtX3N0YXRlLm1fZm9udERpcnR5ID0gZmFsc2U7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6
Y2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCkKIHsKLSAgICBtX2hhc1VBQXBwZWFyYW5jZSA9IG1f
c3R5bGUtPmhhc0FwcGVhcmFuY2UoKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX3N0YXRl
LnN0eWxlKCk7CisgICAgbV9oYXNVQUFwcGVhcmFuY2UgPSBzdHlsZS0+aGFzQXBwZWFyYW5jZSgp
OwogICAgIGlmIChtX2hhc1VBQXBwZWFyYW5jZSkgewotICAgICAgICBtX2JvcmRlckRhdGEgPSBt
X3N0eWxlLT5ib3JkZXIoKTsKLSAgICAgICAgbV9iYWNrZ3JvdW5kRGF0YSA9ICptX3N0eWxlLT5i
YWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAgIG1fYmFja2dyb3VuZENvbG9yID0gbV9zdHlsZS0+
YmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgIG1fYm9yZGVyRGF0YSA9IHN0eWxlLT5ib3JkZXIo
KTsKKyAgICAgICAgbV9iYWNrZ3JvdW5kRGF0YSA9ICpzdHlsZS0+YmFja2dyb3VuZExheWVycygp
OworICAgICAgICBtX2JhY2tncm91bmRDb2xvciA9IHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKTsK
ICAgICB9CiB9CiAKQEAgLTIzNjcsMTAgKzIzMTQsMTAgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlz
dD4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwg
UHMKICAgICBpZiAoIWUgfHwgIWUtPmRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgp
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1fY2hlY2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hl
Y2tlcjo6Q29sbGVjdGluZ1J1bGVzKTsKKyAgICBtX3N0YXRlLm1fY2hlY2tlci5zZXRNb2RlKFNl
bGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKTsKIAotICAgIGluaXRFbGVtZW50KGUpOwot
ICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSwgMCwgcHNldWRvSWQpOworICAgIG1fc3RhdGUuaW5p
dEVsZW1lbnQoZSk7CisgICAgbV9zdGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGUsIDAsIHBzZXVk
b0lkKTsKIAogICAgIE1hdGNoUmVzdWx0IGR1bW15OwogICAgIGlmIChydWxlc1RvSW5jbHVkZSAm
IFVBQW5kVXNlckNTU1J1bGVzKSB7CkBAIC0yMzgzLDQ5ICsyMzMwLDQ5IEBAIFBhc3NSZWZQdHI8
Q1NTUnVsZUxpc3Q+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVs
ZW1lbnQqIGUsIFBzCiAgICAgfQogCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVz
ICYmIChydWxlc1RvSW5jbHVkZSAmIEF1dGhvckNTU1J1bGVzKSkgewotICAgICAgICBtX3NhbWVP
cmlnaW5Pbmx5ID0gIShydWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2luQ1NTUnVsZXMpOworICAg
ICAgICBtX3N0YXRlLm1fc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NP
cmlnaW5DU1NSdWxlcyk7CiAKICAgICAgICAgLy8gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBz
aGVldHMuCiAgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYg
RW1wdHlDU1NSdWxlcyk7CiAKLSAgICAgICAgbV9zYW1lT3JpZ2luT25seSA9IGZhbHNlOworICAg
ICAgICBtX3N0YXRlLm1fc2FtZU9yaWdpbk9ubHkgPSBmYWxzZTsKICAgICB9CiAKLSAgICBtX2No
ZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlJlc29sdmluZ1N0eWxlKTsKKyAgICBtX3N0
YXRlLm1fY2hlY2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpOwog
Ci0gICAgcmV0dXJuIG1fcnVsZUxpc3QucmVsZWFzZSgpOworICAgIHJldHVybiBtX3N0YXRlLm1f
cnVsZUxpc3QucmVsZWFzZSgpOwogfQogCiBpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpjaGVj
a1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSwgY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGUpCiB7Ci0gICAgbV9keW5hbWljUHNldWRvID0gTk9QU0VVRE87Ci0gICAgbV9jaGVja2Vy
LmNsZWFySGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKCk7CisgICAgbV9zdGF0ZS5tX2R5bmFtaWNQ
c2V1ZG8gPSBOT1BTRVVETzsKKyAgICBtX3N0YXRlLm1fY2hlY2tlci5jbGVhckhhc1Vua25vd25Q
c2V1ZG9FbGVtZW50cygpOwogCiAgICAgaWYgKHJ1bGVEYXRhLmhhc0Zhc3RDaGVja2FibGVTZWxl
Y3RvcigpKSB7CiAgICAgICAgIC8vIFdlIGtub3cgdGhpcyBzZWxlY3RvciBkb2VzIG5vdCBpbmNs
dWRlIGFueSBwc2V1ZG8gZWxlbWVudHMuCi0gICAgICAgIGlmIChtX2NoZWNrZXIucHNldWRvU3R5
bGUoKSAhPSBOT1BTRVVETykKKyAgICAgICAgaWYgKG1fc3RhdGUubV9jaGVja2VyLnBzZXVkb1N0
eWxlKCkgIT0gTk9QU0VVRE8pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIC8v
IFdlIGtub3cgYSBzdWZmaWNpZW50bHkgc2ltcGxlIHNpbmdsZSBwYXJ0IHNlbGVjdG9yIG1hdGNo
ZXMgc2ltcGx5IGJlY2F1c2Ugd2UgZm91bmQgaXQgZnJvbSB0aGUgcnVsZSBoYXNoLgogICAgICAg
ICAvLyBUaGlzIGlzIGxpbWl0ZWQgdG8gSFRNTCBvbmx5IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hl
Y2sgdGhlIG5hbWVzcGFjZS4KLSAgICAgICAgaWYgKHJ1bGVEYXRhLmhhc1JpZ2h0bW9zdFNlbGVj
dG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKCkgJiYgbV9lbGVtZW50LT5pc0hUTUxFbGVt
ZW50KCkpIHsKKyAgICAgICAgaWYgKHJ1bGVEYXRhLmhhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hp
bmdIVE1MQmFzZWRPblJ1bGVIYXNoKCkgJiYgbV9zdGF0ZS5tX2VsZW1lbnQtPmlzSFRNTEVsZW1l
bnQoKSkgewogICAgICAgICAgICAgaWYgKCFydWxlRGF0YS5oYXNNdWx0aXBhcnRTZWxlY3Rvcigp
KQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKCFTZWxl
Y3RvckNoZWNrZXI6OnRhZ01hdGNoZXMobV9lbGVtZW50LCBydWxlRGF0YS5zZWxlY3RvcigpKSkK
KyAgICAgICAgfSBlbHNlIGlmICghU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKG1fc3RhdGUu
bV9lbGVtZW50LCBydWxlRGF0YS5zZWxlY3RvcigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdEF0dHJp
YnV0ZVNlbGVjdG9yKG1fZWxlbWVudCwgcnVsZURhdGEuc2VsZWN0b3IoKSkpCisgICAgICAgIGlm
ICghU2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hlY2tSaWdodG1vc3RBdHRyaWJ1dGVTZWxlY3Rvciht
X3N0YXRlLm1fZWxlbWVudCwgcnVsZURhdGEuc2VsZWN0b3IoKSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBtX2NoZWNrZXIuZmFzdENoZWNrU2VsZWN0b3IocnVs
ZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIG1fc3RhdGUubV9j
aGVja2VyLmZhc3RDaGVja1NlbGVjdG9yKHJ1bGVEYXRhLnNlbGVjdG9yKCksIG1fc3RhdGUubV9l
bGVtZW50KTsKICAgICB9CiAKICAgICAvLyBTbG93IHBhdGguCi0gICAgU2VsZWN0b3JDaGVja2Vy
OjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVEYXRhLnNlbGVjdG9yKCksIG1f
ZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFibGVkKTsKKyAgICBTZWxl
Y3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IGNvbnRleHQocnVsZURhdGEuc2Vs
ZWN0b3IoKSwgbV9zdGF0ZS5tX2VsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNo
RW5hYmxlZCk7CiAgICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBzdHlsZSgpOwotICAgIGNvbnRl
eHQuZWxlbWVudFBhcmVudFN0eWxlID0gbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5yZW5k
ZXJTdHlsZSgpIDogMDsKKyAgICBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA9IG1fc3RhdGUu
bV9wYXJlbnROb2RlID8gbV9zdGF0ZS5tX3BhcmVudE5vZGUtPnJlbmRlclN0eWxlKCkgOiAwOwog
ICAgIGNvbnRleHQuc2NvcGUgPSBzY29wZTsKLSAgICBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
TWF0Y2ggbWF0Y2ggPSBtX2NoZWNrZXIuY2hlY2tTZWxlY3Rvcihjb250ZXh0LCBtX2R5bmFtaWNQ
c2V1ZG8pOworICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBtYXRjaCA9IG1fc3Rh
dGUubV9jaGVja2VyLmNoZWNrU2VsZWN0b3IoY29udGV4dCwgbV9zdGF0ZS5tX2R5bmFtaWNQc2V1
ZG8pOwogICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2hlcykK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2NoZWNrZXIucHNldWRvU3R5bGUoKSAh
PSBOT1BTRVVETyAmJiBtX2NoZWNrZXIucHNldWRvU3R5bGUoKSAhPSBtX2R5bmFtaWNQc2V1ZG8p
CisgICAgaWYgKG1fc3RhdGUubV9jaGVja2VyLnBzZXVkb1N0eWxlKCkgIT0gTk9QU0VVRE8gJiYg
bV9zdGF0ZS5tX2NoZWNrZXIucHNldWRvU3R5bGUoKSAhPSBtX3N0YXRlLm1fZHluYW1pY1BzZXVk
bykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjQzNSwx
MSArMjM4MiwxMSBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9uU2VsZWN0b3IoQ1NT
U2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZW50KiByZQogICAgIGlmICghcmVnaW9uU2Vs
ZWN0b3IgfHwgIXJlZ2lvbkVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1f
Y2hlY2tlci5jbGVhckhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cygpOwotICAgIG1fY2hlY2tlci5z
ZXRQc2V1ZG9TdHlsZShOT1BTRVVETyk7CisgICAgbV9zdGF0ZS5tX2NoZWNrZXIuY2xlYXJIYXNV
bmtub3duUHNldWRvRWxlbWVudHMoKTsKKyAgICBtX3N0YXRlLm1fY2hlY2tlci5zZXRQc2V1ZG9T
dHlsZShOT1BTRVVETyk7CiAKICAgICBmb3IgKENTU1NlbGVjdG9yKiBzID0gcmVnaW9uU2VsZWN0
b3I7IHM7IHMgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQocykpCi0gICAgICAgIGlmIChtX2NoZWNr
ZXIuY2hlY2tTZWxlY3RvcihzLCByZWdpb25FbGVtZW50KSkKKyAgICAgICAgaWYgKG1fc3RhdGUu
bV9jaGVja2VyLmNoZWNrU2VsZWN0b3IocywgcmVnaW9uRWxlbWVudCkpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTI4MjUsNyArMjc3Miw3IEBAIExl
bmd0aCBTdHlsZVJlc29sdmVyOjpjb252ZXJ0VG9GbG9hdExlbmd0aChDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUsIFJlCiB0ZW1wbGF0ZSA8U3R5bGVSZXNvbHZlcjo6U3R5bGVBcHBs
aWNhdGlvblBhc3MgcGFzcz4KIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKGNv
bnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgYm9vbCBp
c0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBib29sIGZpbHRlclJlZ2lvblByb3BlcnRp
ZXMpCiB7Ci0gICAgQVNTRVJUKCFmaWx0ZXJSZWdpb25Qcm9wZXJ0aWVzIHx8IG1fcmVnaW9uRm9y
U3R5bGluZyk7CisgICAgQVNTRVJUKCFmaWx0ZXJSZWdpb25Qcm9wZXJ0aWVzIHx8IG1fc3RhdGUu
bV9yZWdpb25Gb3JTdHlsaW5nKTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUg
Y29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUHJvY2Vzc1J1bGUoZG9jdW1l
bnQoKSwgcnVsZSk7CiAKICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gcHJvcGVydGllcy0+
cHJvcGVydHlDb3VudCgpOwpAQCAtMjg2Niw3ICsyODEzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5
bGVSdWwKICAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KGN1cnJlbnQuaWQoKSwgY3VycmVu
dC52YWx1ZSgpKTsKICAgICAgICAgICAgIC8vIHdlIGFwcGx5IGxpbmUtaGVpZ2h0IGxhdGVyCiAg
ICAgICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpCi0g
ICAgICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSBjdXJyZW50LnZhbHVlKCk7CisgICAg
ICAgICAgICAgICAgbV9zdGF0ZS5tX2xpbmVIZWlnaHRWYWx1ZSA9IGN1cnJlbnQudmFsdWUoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvd1ByaW9yaXR5UHJvcGVydGllczoK
ICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA+IENTU1Byb3BlcnR5TGluZUhlaWdodCkKQEAgLTI4
ODIsNyArMjgyOSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGll
cyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGJvb2wKICAgICBpZiAoc3RhcnRJbmRl
eCA9PSAtMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fc3R5bGUtPmluc2lkZUxpbmso
KSAhPSBOb3RJbnNpZGVMaW5rKSB7CisgICAgaWYgKG1fc3RhdGUuc3R5bGUoKS0+aW5zaWRlTGlu
aygpICE9IE5vdEluc2lkZUxpbmspIHsKICAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7
IGkgPD0gZW5kSW5kZXg7ICsraSkgewogICAgICAgICAgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRp
ZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXNbaV07
CiAgICAgICAgICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gbWF0Y2hlZFByb3BlcnRpZXMu
bGlua01hdGNoVHlwZTsKQEAgLTMwMDEsMTkgKzI5NDgsMjEgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwg
Y29uc3QKICAgICB1bnNpZ25lZCBjYWNoZUhhc2ggPSBtYXRjaFJlc3VsdC5pc0NhY2hlYWJsZSA/
IGNvbXB1dGVNYXRjaGVkUHJvcGVydGllc0hhc2gobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRp
ZXMuZGF0YSgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkpIDogMDsKICAg
ICBib29sIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwogICAgIGNvbnN0IE1hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGVJdGVtKiBjYWNoZUl0ZW0gPSAwOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IG1fc3RhdGUuc3R5bGUoKTsKKwogICAgIGlmIChjYWNoZUhhc2ggJiYgKGNhY2hlSXRlbSA9IGZp
bmRGcm9tTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShjYWNoZUhhc2gsIG1hdGNoUmVzdWx0KSkpIHsK
ICAgICAgICAgLy8gV2UgY2FuIGJ1aWxkIHVwIHRoZSBzdHlsZSBieSBjb3B5aW5nIG5vbi1pbmhl
cml0ZWQgcHJvcGVydGllcyBmcm9tIGFuIGVhcmxpZXIgc3R5bGUgb2JqZWN0IGJ1aWx0IHVzaW5n
IHRoZSBzYW1lIGV4YWN0CiAgICAgICAgIC8vIHN0eWxlIGRlY2xhcmF0aW9ucy4gV2UgdGhlbiBv
bmx5IG5lZWQgdG8gYXBwbHkgdGhlIGluaGVyaXRlZCBwcm9wZXJ0aWVzLCBpZiBhbnksIGFzIHRo
ZWlyIHZhbHVlcyBjYW4gZGVwZW5kIG9uIHRoZSAKICAgICAgICAgLy8gZWxlbWVudCBjb250ZXh0
LiBUaGlzIGlzIGZhc3QgYW5kIHNhdmVzIG1lbW9yeSBieSByZXVzaW5nIHRoZSBzdHlsZSBkYXRh
IHN0cnVjdHVyZXMuCi0gICAgICAgIG1fc3R5bGUtPmNvcHlOb25Jbmhlcml0ZWRGcm9tKGNhY2hl
SXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOwotICAgICAgICBpZiAobV9wYXJlbnRTdHlsZS0+aW5o
ZXJpdGVkRGF0YVNoYXJlZChjYWNoZUl0ZW0tPnBhcmVudFJlbmRlclN0eWxlLmdldCgpKSAmJiAh
aXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICBFSW5zaWRlTGluayBs
aW5rU3RhdHVzID0gbV9zdHlsZS0+aW5zaWRlTGluaygpOworICAgICAgICBzdHlsZS0+Y29weU5v
bkluaGVyaXRlZEZyb20oY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7CisgICAgICAgIGlm
IChtX3N0YXRlLm1fcGFyZW50U3R5bGUtPmluaGVyaXRlZERhdGFTaGFyZWQoY2FjaGVJdGVtLT5w
YXJlbnRSZW5kZXJTdHlsZS5nZXQoKSkgJiYgIWlzQXRTaGFkb3dCb3VuZGFyeShlbGVtZW50KSkg
eworICAgICAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXR1cyA9IHN0eWxlLT5pbnNpZGVMaW5r
KCk7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY2FjaGUgaXRlbSBwYXJlbnQgc3R5bGUgaGFzIGlk
ZW50aWNhbCBpbmhlcml0ZWQgcHJvcGVydGllcyB0byB0aGUgY3VycmVudCBwYXJlbnQgc3R5bGUg
dGhlbiB0aGUKICAgICAgICAgICAgIC8vIHJlc3VsdGluZyBzdHlsZSB3aWxsIGJlIGlkZW50aWNh
bCB0b28uIFdlIGNvcHkgdGhlIGluaGVyaXRlZCBwcm9wZXJ0aWVzIG92ZXIgZnJvbSB0aGUgY2Fj
aGUgYW5kIGFyZSBkb25lLgotICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEZyb20oY2FjaGVJ
dGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7CisgICAgICAgICAgICBzdHlsZS0+aW5oZXJpdEZyb20o
Y2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7CiAKICAgICAgICAgICAgIC8vIFVuZm9ydHVu
YXRlbHkgdGhlIGxpbmsgc3RhdHVzIGlzIHRyZWF0ZWQgbGlrZSBhbiBpbmhlcml0ZWQgcHJvcGVy
dHkuIFdlIG5lZWQgdG8gZXhwbGljaXRseSByZXN0b3JlIGl0LgotICAgICAgICAgICAgbV9zdHls
ZS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdHVzKTsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRJbnNp
ZGVMaW5rKGxpbmtTdGF0dXMpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IHRydWU7IApAQCAtMzAzMSwxNCArMjk4MCwxNCBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1
bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgIC8vIGhpZ2gtcHJpb3JpdHkgcHJvcGVydGllcyBm
aXJzdCwgaS5lLiwgdGhvc2UgcHJvcGVydGllcyB0aGF0IG90aGVyIHByb3BlcnRpZXMgZGVwZW5k
IG9uLgogICAgIC8vIFRoZSBvcmRlciBpcyAoMSkgaGlnaC1wcmlvcml0eSBub3QgaW1wb3J0YW50
LCAoMikgaGlnaC1wcmlvcml0eSBpbXBvcnRhbnQsICgzKSBub3JtYWwgbm90IGltcG9ydGFudAog
ICAgIC8vIGFuZCAoNCkgbm9ybWFsIGltcG9ydGFudC4KLSAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9
IDA7CisgICAgbV9zdGF0ZS5tX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CiAgICAgYXBwbHlNYXRjaGVk
UHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgZmFsc2UsIDAs
IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVk
T25seSk7CiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVz
PihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwg
bWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwog
ICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hS
ZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwogICAgIGFwcGx5TWF0
Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUs
IG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RV
QVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAKLSAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hl
SXRlbS0+cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBtX3N0eWxlLT5lZmZlY3RpdmVa
b29tKCkpIHsKLSAgICAgICAgbV9mb250RGlydHkgPSB0cnVlOworICAgIGlmIChjYWNoZUl0ZW0g
JiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IHN0eWxlLT5lZmZl
Y3RpdmVab29tKCkpIHsKKyAgICAgICAgbV9zdGF0ZS5tX2ZvbnREaXJ0eSA9IHRydWU7CiAgICAg
ICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwogICAgIH0KIApAQCAtMzA0NiwxMSArMjk5
NSwxMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3Qg
TWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgIHVwZGF0ZUZvbnQoKTsKIAogICAg
IC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhl
IGZvbnQtc2l6ZS4KLSAgICBpZiAobV9saW5lSGVpZ2h0VmFsdWUpCi0gICAgICAgIGFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX2xpbmVIZWlnaHRWYWx1ZSk7CisgICAgaWYg
KG1fc3RhdGUubV9saW5lSGVpZ2h0VmFsdWUpCisgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlMaW5lSGVpZ2h0LCBtX3N0YXRlLm1fbGluZUhlaWdodFZhbHVlKTsKIAogICAgIC8vIE1h
bnkgcHJvcGVydGllcyBkZXBlbmQgb24gdGhlIGZvbnQuIElmIGl0IGNoYW5nZXMgd2UganVzdCBh
cHBseSBhbGwgcHJvcGVydGllcy4KLSAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVu
ZGVyU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpICE9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigp
KQorICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+Zm9udERlc2Ny
aXB0aW9uKCkgIT0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKQogICAgICAgICBhcHBseUluaGVy
aXRlZE9ubHkgPSBmYWxzZTsKIAogICAgIC8vIE5vdyBkbyB0aGUgbm9ybWFsIHByaW9yaXR5IFVB
IHByb3BlcnRpZXMuCkBAIC0zMDY4LDEzICszMDE3LDEzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNv
bnN0CiAgICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0
eWxlLgogICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CiAgICAgCi0gICAgQVNTRVJUKCFtX2Zv
bnREaXJ0eSk7CisgICAgQVNTRVJUKCFtX3N0YXRlLm1fZm9udERpcnR5KTsKICAgICAKICAgICBp
ZiAoY2FjaGVJdGVtIHx8ICFjYWNoZUhhc2gpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlz
Q2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKG1fZWxlbWVudCwgbV9zdHlsZS5nZXQo
KSwgbV9wYXJlbnRTdHlsZSkpCisgICAgaWYgKCFpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZShtX3N0YXRlLm1fZWxlbWVudCwgc3R5bGUsIG1fc3RhdGUubV9wYXJlbnRTdHlsZSkp
CiAgICAgICAgIHJldHVybjsKLSAgICBhZGRUb01hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUobV9zdHls
ZS5nZXQoKSwgbV9wYXJlbnRTdHlsZSwgY2FjaGVIYXNoLCBtYXRjaFJlc3VsdCk7CisgICAgYWRk
VG9NYXRjaGVkUHJvcGVydGllc0NhY2hlKHN0eWxlLCBtX3N0YXRlLm1fcGFyZW50U3R5bGUsIGNh
Y2hlSGFzaCwgbWF0Y2hSZXN1bHQpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVBh
Z2VSdWxlcyhjb25zdCBTdHlsZVJ1bGVQYWdlKiByMSwgY29uc3QgU3R5bGVSdWxlUGFnZSogcjIp
CkBAIC0zMTI1LDcgKzMwNzQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoUGFnZVJ1bGVz
Rm9yTGlzdChWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBtYXRjaGVkUnVsZXMsCiBib29sIFN0eWxl
UmVzb2x2ZXI6OmlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QKIHsKICAgICBib29sIGlz
Rmlyc3RQYWdlTGVmdCA9IGZhbHNlOwotICAgIGlmICghbV9yb290RWxlbWVudFN0eWxlLT5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCisgICAgaWYgKCFtX3N0YXRlLm1fcm9vdEVsZW1lbnRTdHls
ZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICBpc0ZpcnN0UGFnZUxlZnQgPSB0
cnVlOwogCiAgICAgcmV0dXJuIChwYWdlSW5kZXggKyAoaXNGaXJzdFBhZ2VMZWZ0ID8gMSA6IDAp
KSAlIDI7CkBAIC0zMjE5LDkgKzMxNjgsOSBAQCBDU1NTdHlsZVJ1bGUqIFN0eWxlUmVzb2x2ZXI6
OmVuc3VyZUZ1bGxDU1NPTVdyYXBwZXJGb3JJbnNwZWN0b3IoU3R5bGVSdWxlKiBydWxlKQogCiB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlKQogewotICAgIGluaXRFbGVtZW50
KDApOwotICAgIGluaXRGb3JTdHlsZVJlc29sdmUoMCwgc3R5bGUpOwotICAgIG1fc3R5bGUgPSBz
dHlsZTsKKyAgICBtX3N0YXRlLmluaXRFbGVtZW50KDApOworICAgIG1fc3RhdGUuaW5pdEZvclN0
eWxlUmVzb2x2ZSgwLCBzdHlsZSk7CisgICAgbV9zdGF0ZS5zZXRTdHlsZShzdHlsZSk7CiAgICAg
YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKGlkLCB2YWx1ZSk7CiB9CiAKQEAgLTMyOTAsNyAr
MzIzOSw3IEBAIGlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OmlzVmFsaWRSZWdpb25TdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpCiAvLyBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5PVCBhbGxv
d2VkIHRvIHNjYWxlIHdpdGhpbiBhIHpvb21lZCBTVkcgZG9jdW1lbnQgKGxldHRlci93b3JkLXNw
YWNpbmcvZm9udC1zaXplKS4KIGJvb2wgU3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKCkK
IHsKLSAgICByZXR1cm4gbV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCk7Cisg
ICAgcmV0dXJuIG1fc3RhdGUubV9lbGVtZW50ICYmIG1fc3RhdGUubV9lbGVtZW50LT5pc1NWR0Vs
ZW1lbnQoKTsKIH0KIAogc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBMZW5n
dGgmIGxlbmd0aCkKQEAgLTM0MDcsOCArMzM1Niw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgfQogI2Vu
ZGlmCiAKLSAgICBib29sIGlzSW5oZXJpdCA9IG1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhl
cml0ZWRWYWx1ZSgpOwotICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVl
KCkgfHwgKCFtX3BhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7CisgICAg
Ym9vbCBpc0luaGVyaXQgPSBtX3N0YXRlLm1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0
ZWRWYWx1ZSgpOworICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkg
fHwgKCFtX3N0YXRlLm1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsK
IAogICAgIEFTU0VSVCghaXNJbmhlcml0IHx8ICFpc0luaXRpYWwpOyAvLyBpc0luaGVyaXQgLT4g
IWlzSW5pdGlhbCAmJiBpc0luaXRpYWwgLT4gIWlzSW5oZXJpdAogCkBAIC0zNDE3LDggKzMzNjYs
MTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChpc0lu
aGVyaXQgJiYgbV9wYXJlbnRTdHlsZSAmJiAhbV9wYXJlbnRTdHlsZS0+aGFzRXhwbGljaXRseUlu
aGVyaXRlZFByb3BlcnRpZXMoKSAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHko
aWQpKQotICAgICAgICBtX3BhcmVudFN0eWxlLT5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJv
cGVydGllcygpOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fc3RhdGUuc3R5bGUoKTsKKwor
ICAgIGlmIChpc0luaGVyaXQgJiYgbV9zdGF0ZS5tX3BhcmVudFN0eWxlICYmICFtX3N0YXRlLm1f
cGFyZW50U3R5bGUtPmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkgJiYgIUNTU1By
b3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkKKyAgICAgICAgbV9zdGF0ZS5tX3BhcmVu
dFN0eWxlLT5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpOwogCiAjaWYgRU5B
QkxFKENTU19WQVJJQUJMRVMpCiAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5VmFyaWFibGUpIHsK
QEAgLTM0MjYsNyArMzM3Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIENTU1ZhcmlhYmxlVmFs
dWUqIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Q1NTVmFyaWFibGVWYWx1ZSo+KHZhbHVlKTsKICAg
ICAgICAgQVNTRVJUKCF2YXJpYWJsZS0+bmFtZSgpLmlzRW1wdHkoKSk7CiAgICAgICAgIEFTU0VS
VCghdmFyaWFibGUtPnZhbHVlKCkuaXNFbXB0eSgpKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0VmFy
aWFibGUodmFyaWFibGUtPm5hbWUoKSwgdmFyaWFibGUtPnZhbHVlKCkpOworICAgICAgICBzdHls
ZS0+c2V0VmFyaWFibGUodmFyaWFibGUtPm5hbWUoKSwgdmFyaWFibGUtPnZhbHVlKCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zNDQ1LDcgKzMzOTYsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogCiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSA/IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUp
IDogMDsKIAotICAgIGZsb2F0IHpvb21GYWN0b3IgPSBtX3N0eWxlLT5lZmZlY3RpdmVab29tKCk7
CisgICAgZmxvYXQgem9vbUZhY3RvciA9IHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CiAKICAgICAv
LyBXaGF0IGZvbGxvd3MgaXMgYSBsaXN0IHRoYXQgbWFwcyB0aGUgQ1NTIHByb3BlcnRpZXMgaW50
byB0aGVpciBjb3JyZXNwb25kaW5nIGZyb250LWVuZAogICAgIC8vIFJlbmRlclN0eWxlIHZhbHVl
cy4gU2hvcnRoYW5kcyAoZS5nLiBib3JkZXIsIGJhY2tncm91bmQpIG9jY3VyIGluIHRoaXMgbGlz
dCBhcyB3ZWxsIGFuZApAQCAtMzQ1OSw3ICszNDEwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
ICAgIC8vIG5vdGUgaXMgYSByZW1pbmRlciB0aGF0IGV2ZW50dWFsbHkgImluaGVyaXQiIG5lZWRz
IHRvIGJlIHN1cHBvcnRlZC4KIAogICAgICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAg
ICAgICAgICAgIG1fc3R5bGUtPmNsZWFyQ29udGVudCgpOworICAgICAgICAgICAgICAgIHN0eWxl
LT5jbGVhckNvbnRlbnQoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAKQEAgLTM0NzEsMTkgKzM0MjIsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBD
U1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsKICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJ
bWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlz
R3JhZGllbnRWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29u
dGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRW
YWx1ZSo+KGl0ZW0pLT5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCh0aGlzKS5nZXQoKSksIGRp
ZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0Q29udGVudChTdHlsZUdl
bmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+KGl0ZW0p
LT5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCh0aGlzKS5nZXQoKSksIGRpZFNldCk7CiAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0ltYWdl
R2VuZXJhdG9yVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdHlsZS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nh
c3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAg
ICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzSW1hZ2VTZXRWYWx1ZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENT
U1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KGl0ZW0pKSwg
ZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldENvbnRlbnQoc2V0T3JQZW5k
aW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRW
YWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1
ZTsKICNlbmRpZgogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChpdGVt
LT5pc0ltYWdlVmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250
ZW50KGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19j
YXN0PENTU0ltYWdlVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAg
IHN0eWxlLT5zZXRDb250ZW50KGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNv
bnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CiAgICAg
ICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTM0OTQsMTcgKzM0NDUsMTcgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogY29udGVudFZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKIAogICAgICAgICAgICAgICAgIGlm
IChjb250ZW50VmFsdWUtPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9zdHls
ZS0+c2V0Q29udGVudChjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBkaWRT
ZXQpOworICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0Q29udGVudChjb250ZW50VmFsdWUt
PmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBk
aWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGVudFZhbHVlLT5p
c0F0dHIoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ2FuIGEgbmFtZXNwYWNl
IGJlIHNwZWNpZmllZCBmb3IgYW4gYXR0cihmb28pPwotICAgICAgICAgICAgICAgICAgICBpZiAo
bV9zdHlsZS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLT5z
dHlsZVR5cGUoKSA9PSBOT1BTRVVETykKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5z
ZXRVbmlxdWUoKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9wYXJlbnRTdHlsZS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX3N0YXRlLm1fcGFyZW50U3R5bGUtPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgICAgICAg
ICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0b20sIGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFs
dWUoKS5pbXBsKCksIG51bGxBdG9tKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSA9IG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0dHIpOwotICAgICAgICAg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9t
IDogdmFsdWUuaW1wbCgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlID0gbV9zdGF0ZS5tX2VsZW1lbnQtPmdldEF0dHJpYnV0ZShhdHRyKTsK
KyAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldENvbnRlbnQodmFsdWUuaXNOdWxsKCkgPyBl
bXB0eUF0b20gOiB2YWx1ZS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRp
ZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBmYWN0IHRo
YXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZQogICAgICAgICAgICAgICAg
ICAgICBtX2ZlYXR1cmVzLmF0dHJzSW5SdWxlcy5hZGQoYXR0ci5sb2NhbE5hbWUoKS5pbXBsKCkp
OwpAQCAtMzUxNSwyNCArMzQ2NiwyNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgICAg
ICBpZiAobGlzdFN0eWxlSWRlbnQgIT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgICAgICAg
ICAgICAgbGlzdFN0eWxlVHlwZSA9IHN0YXRpY19jYXN0PEVMaXN0U3R5bGVUeXBlPihsaXN0U3R5
bGVJZGVudCAtIENTU1ZhbHVlRGlzYyk7CiAgICAgICAgICAgICAgICAgICAgIE93blB0cjxDb3Vu
dGVyQ29udGVudD4gY291bnRlciA9IGFkb3B0UHRyKG5ldyBDb3VudGVyQ29udGVudChjb3VudGVy
VmFsdWUtPmlkZW50aWZpZXIoKSwgbGlzdFN0eWxlVHlwZSwgY291bnRlclZhbHVlLT5zZXBhcmF0
b3IoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNvdW50ZXIu
cmVsZWFzZSgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0Q29udGVu
dChjb3VudGVyLnJlbGVhc2UoKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKGNvbnRlbnRWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlT3BlblF1b3RlOgotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0Q29udGVudChPUEVOX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAg
c3R5bGUtPnNldENvbnRlbnQoT1BFTl9RVU9URSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUNsb3NlUXVvdGU6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KENMT1NFX1FVT1RFLCBkaWRTZXQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldENvbnRlbnQoQ0xPU0VfUVVPVEUsIGRpZFNl
dCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb09w
ZW5RdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoTk9f
T1BFTl9RVU9URSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRD
b250ZW50KE5PX09QRU5fUVVPVEUsIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBk
aWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb0Nsb3NlUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtX3N0eWxlLT5zZXRDb250ZW50KE5PX0NMT1NFX1FVT1RFLCBkaWRTZXQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldENvbnRlbnQoTk9fQ0xPU0VfUVVPVEUsIGRpZFNl
dCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0zNTQy
LDE3ICszNDkzLDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKCFkaWRTZXQpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+
Y2xlYXJDb250ZW50KCk7CisgICAgICAgICAgICAgICAgc3R5bGUtPmNsZWFyQ29udGVudCgpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVF1b3Rl
czoKICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgaWYgKG1fcGFyZW50U3R5
bGUpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKG1fcGFyZW50U3R5bGUtPnF1
b3RlcygpKTsKKyAgICAgICAgICAgIGlmIChtX3N0YXRlLm1fcGFyZW50U3R5bGUpCisgICAgICAg
ICAgICAgICAgc3R5bGUtPnNldFF1b3RlcyhtX3N0YXRlLm1fcGFyZW50U3R5bGUtPnF1b3Rlcygp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAoaXNJbml0aWFs
KSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90ZXMoMCk7CisgICAgICAgICAgICBzdHls
ZS0+c2V0UXVvdGVzKDApOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewpAQCAtMzU3MCwxOSArMzUyMSwxOSBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICAgICAgICAgIFN0cmluZyBlbmRRdW90ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4oc2Vjb25kKS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAg
ICAgICBxdW90ZXMtPmFkZFBhaXIoc3RkOjptYWtlX3BhaXIoc3RhcnRRdW90ZSwgZW5kUXVvdGUp
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhxdW90ZXMp
OworICAgICAgICAgICAgc3R5bGUtPnNldFF1b3RlcyhxdW90ZXMpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSkgewogICAgICAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkKLSAgICAg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90ZXMoUXVvdGVzRGF0YTo6Y3JlYXRlKCkpOworICAg
ICAgICAgICAgICAgIHN0eWxlLT5zZXRRdW90ZXMoUXVvdGVzRGF0YTo6Y3JlYXRlKCkpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseTog
ewogICAgICAgICAvLyBsaXN0IG9mIHN0cmluZ3MgYW5kIGlkcwogICAgICAgICBpZiAoaXNJbmhl
cml0KSB7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gcGFyZW50Rm9udERlc2NyaXB0aW9u
ID0gbV9wYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Cisg
ICAgICAgICAgICBGb250RGVzY3JpcHRpb24gcGFyZW50Rm9udERlc2NyaXB0aW9uID0gbV9zdGF0
ZS5tX3BhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShwYXJlbnRGb250RGVzY3Jp
cHRpb24uZ2VuZXJpY0ZhbWlseSgpKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRG
YW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkpOwogICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldElzU3BlY2lmaWVkRm9udChwYXJlbnRGb250RGVzY3JpcHRpb24u
aXNTcGVjaWZpZWRGb250KCkpOwpAQCAtMzU5MiwxMSArMzU0MywxMSBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQog
CiAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBp
bml0aWFsRGVzYyA9IEZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLT5mb250RGVzY3Jp
cHRpb24oKTsKICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBzaXplIHRvIGFj
Y291bnQgZm9yIHRoZSBnZW5lcmljIGZhbWlseSBjaGFuZ2UgZnJvbSBtb25vc3BhY2UKICAgICAg
ICAgICAgIC8vIHRvIG5vbi1tb25vc3BhY2UuCiAgICAgICAgICAgICBpZiAoZm9udERlc2NyaXB0
aW9uLmtleXdvcmRTaXplKCkgJiYgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUo
KSkKLSAgICAgICAgICAgICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXpl
Rm9yS2V5d29yZChtX2NoZWNrZXIuZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERl
c2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCBmYWxzZSkpOworICAgICAgICAgICAgICAgIHNl
dEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKG1fc3RhdGUubV9j
aGVja2VyLmRvY3VtZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3
b3JkU2l6ZSgpIC0gMSwgZmFsc2UpKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRH
ZW5lcmljRmFtaWx5KGluaXRpYWxEZXNjLmdlbmVyaWNGYW1pbHkoKSk7CiAgICAgICAgICAgICBp
ZiAoIWluaXRpYWxEZXNjLmZpcnN0RmFtaWx5KCkuZmFtaWx5SXNFbXB0eSgpKQogICAgICAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbHkoaW5pdGlhbERlc2MuZmlyc3RGYW1pbHko
KSk7CkBAIC0zNjA2LDcgKzM1NTcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogCiAgICAgICAgIGlmICghdmFs
dWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLT5mb250RGVzY3Jp
cHRpb24oKTsKICAgICAgICAgRm9udEZhbWlseSYgZmlyc3RGYW1pbHkgPSBmb250RGVzY3JpcHRp
b24uZmlyc3RGYW1pbHkoKTsKICAgICAgICAgRm9udEZhbWlseSogY3VyckZhbWlseSA9IDA7CiAK
QEAgLTM2NzUsNyArMzYyNiw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIC8vIElmIGN1cnJGYW1p
bHkgaXMgbm9uLXplcm8gdGhlbiB3ZSBzZXQgYXQgbGVhc3Qgb25lIGZhbWlseSBvbiB0aGlzIGRl
c2NyaXB0aW9uLgogICAgICAgICBpZiAoY3VyckZhbWlseSkgewogICAgICAgICAgICAgaWYgKGZv
bnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERl
ZmF1bHRTaXplKCkgIT0gb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpCi0gICAgICAgICAg
ICAgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQobV9j
aGVja2VyLmRvY3VtZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3
b3JkU2l6ZSgpIC0gMSwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSk7CisgICAgICAg
ICAgICAgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQo
bV9zdGF0ZS5tX2NoZWNrZXIuZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2Ny
aXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUp
KTsKIAogICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAg
ICAgICAgIH0KQEAgLTM2ODQsMjQgKzM2MzUsMjQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIC8vIHNob3J0aGFu
ZCBwcm9wZXJ0aWVzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmQ6CiAgICAgICAgIGlm
IChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyQmFja2dyb3VuZExheWVy
cygpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKENvbG9yKCkpOwor
ICAgICAgICAgICAgc3R5bGUtPmNsZWFyQmFja2dyb3VuZExheWVycygpOworICAgICAgICAgICAg
c3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihDb2xvcigpKTsKICAgICAgICAgfSBlbHNlIGlmIChp
c0luaGVyaXQpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRCYWNrZ3JvdW5kTGF5ZXJz
KCptX3BhcmVudFN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkpOwotICAgICAgICAgICAgbV9zdHls
ZS0+c2V0QmFja2dyb3VuZENvbG9yKG1fcGFyZW50U3R5bGUtPmJhY2tncm91bmRDb2xvcigpKTsK
KyAgICAgICAgICAgIHN0eWxlLT5pbmhlcml0QmFja2dyb3VuZExheWVycygqbV9zdGF0ZS5tX3Bh
cmVudFN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkpOworICAgICAgICAgICAgc3R5bGUtPnNldEJh
Y2tncm91bmRDb2xvcihtX3N0YXRlLm1fcGFyZW50U3R5bGUtPmJhY2tncm91bmRDb2xvcigpKTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2s6CiAgICAgICAgIGlmIChpc0luaXRpYWwpCi0gICAgICAgICAgICBtX3N0eWxlLT5jbGVhck1h
c2tMYXllcnMoKTsKKyAgICAgICAgICAgIHN0eWxlLT5jbGVhck1hc2tMYXllcnMoKTsKICAgICAg
ICAgZWxzZSBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdE1hc2tM
YXllcnMoKm1fcGFyZW50U3R5bGUtPm1hc2tMYXllcnMoKSk7CisgICAgICAgICAgICBzdHlsZS0+
aW5oZXJpdE1hc2tMYXllcnMoKm1fc3RhdGUubV9wYXJlbnRTdHlsZS0+bWFza0xheWVycygpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250OgogICAgICAgICBpZiAo
aXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gbV9wYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBtX3N0eWxl
LT5zZXRMaW5lSGVpZ2h0KG1fcGFyZW50U3R5bGUtPnNwZWNpZmllZExpbmVIZWlnaHQoKSk7Ci0g
ICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAgICAgICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdGF0ZS5tX3BhcmVudFN0eWxlLT5mb250RGVzY3Jp
cHRpb24oKTsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KG1fc3RhdGUubV9wYXJl
bnRTdHlsZS0+c3BlY2lmaWVkTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgIG1fc3RhdGUubV9s
aW5lSGVpZ2h0VmFsdWUgPSAwOwogICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnRE
ZXNjcmlwdGlvbik7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKSB7CiAgICAgICAgICAg
ICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudFNldHRpbmdzKCk7CkBAIC0zNzEwLDggKzM2
NjEsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0
eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLSAgICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVl
ID0gMDsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0
aWFsTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgIG1fc3RhdGUubV9saW5lSGVpZ2h0VmFsdWUg
PSAwOwogCiAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAg
ICAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Gb250KHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpLCBmb250RGVzY3JpcHRpb24pOwpAQCAtMzcyNCwxMCArMzY3NSwx
MCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIGlmICghc2V0dGluZ3MpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01vZGUoKSk7Ci0gICAgICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KG1fY2hlY2tlci5kb2N1bWVu
dCgpLT5wcmludGluZygpKTsKKyAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNl
UHJpbnRlckZvbnQobV9zdGF0ZS5tX2NoZWNrZXIuZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSk7CiAK
ICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIHpvb20gZmFjdG9yLgotICAgICAgICAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNw
ZWNpZmllZFNpemUobV9jaGVja2VyLmRvY3VtZW50KCksIG1fc3R5bGUuZ2V0KCksIGZvbnREZXNj
cmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgp
LCB1c2VTVkdab29tUnVsZXMoKSkpOworICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUobV9zdGF0ZS5t
X2NoZWNrZXIuZG9jdW1lbnQoKSwgc3R5bGUsIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6
ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSkp
OwogICAgICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ZvbnRWYWx1ZSgpKSB7
CkBAIC0zNzQ1LDcgKzM2OTYsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgdXBkYXRlRm9u
dCgpOwogICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBmb250
LT5zaXplLmdldCgpKTsKIAotICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSBmb250LT5s
aW5lSGVpZ2h0LmdldCgpOworICAgICAgICAgICAgbV9zdGF0ZS5tX2xpbmVIZWlnaHRWYWx1ZSA9
IGZvbnQtPmxpbmVIZWlnaHQuZ2V0KCk7CiAKICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlGb250RmFtaWx5LCBmb250LT5mYW1pbHkuZ2V0KCkpOwogICAgICAgICB9CkBAIC0z
NzU3LDExICszNzA4LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEJveFNoYWRvdzogewogICAgICAgICBpZiAoaXNJbmhlcml0KSB7CiAgICAgICAgICAgICBpZiAo
aWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93KQotICAgICAgICAgICAgICAgIHJldHVybiBtX3N0
eWxlLT5zZXRUZXh0U2hhZG93KG1fcGFyZW50U3R5bGUtPnRleHRTaGFkb3coKSA/IGFkb3B0UHRy
KG5ldyBTaGFkb3dEYXRhKCptX3BhcmVudFN0eWxlLT50ZXh0U2hhZG93KCkpKSA6IG51bGxwdHIp
OwotICAgICAgICAgICAgcmV0dXJuIG1fc3R5bGUtPnNldEJveFNoYWRvdyhtX3BhcmVudFN0eWxl
LT5ib3hTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCptX3BhcmVudFN0eWxlLT5i
b3hTaGFkb3coKSkpIDogbnVsbHB0cik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlLT5z
ZXRUZXh0U2hhZG93KG1fc3RhdGUubV9wYXJlbnRTdHlsZS0+dGV4dFNoYWRvdygpID8gYWRvcHRQ
dHIobmV3IFNoYWRvd0RhdGEoKm1fc3RhdGUubV9wYXJlbnRTdHlsZS0+dGV4dFNoYWRvdygpKSkg
OiBudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybiBzdHlsZS0+c2V0Qm94U2hhZG93KG1fc3Rh
dGUubV9wYXJlbnRTdHlsZS0+Ym94U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgq
bV9zdGF0ZS5tX3BhcmVudFN0eWxlLT5ib3hTaGFkb3coKSkpIDogbnVsbHB0cik7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGlzSW5pdGlhbCB8fCBwcmltaXRpdmVWYWx1ZSkgLy8gaW5pdGlhbCB8
IG5vbmUKLSAgICAgICAgICAgIHJldHVybiBpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cgPyBt
X3N0eWxlLT5zZXRUZXh0U2hhZG93KG51bGxwdHIpIDogbV9zdHlsZS0+c2V0Qm94U2hhZG93KG51
bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuIGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdyA/
IHN0eWxlLT5zZXRUZXh0U2hhZG93KG51bGxwdHIpIDogc3R5bGUtPnNldEJveFNoYWRvdyhudWxs
cHRyKTsKIAogICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMzc3MSwyOSArMzcyMiwyOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAg
aWYgKCFjdXJyVmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIFNoYWRvd1ZhbHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8U2hhZG93VmFs
dWUqPihjdXJyVmFsdWUpOwotICAgICAgICAgICAgaW50IHggPSBpdGVtLT54LT5jb21wdXRlTGVu
Z3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAg
ICAgICAgIGludCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9v
dEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0t
PmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxl
bWVudFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7Ci0gICAgICAgICAgICBpbnQgc3ByZWFkID0gaXRl
bS0+c3ByZWFkID8gaXRlbS0+c3ByZWFkLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9y
b290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7CisgICAgICAgICAgICBpbnQgeCA9IGl0
ZW0tPngtPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgbV9zdGF0ZS5tX3Jvb3RFbGVtZW50U3R5
bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgaW50IHkgPSBpdGVtLT55LT5jb21wdXRlTGVu
Z3RoPGludD4oc3R5bGUsIG1fc3RhdGUubV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsK
KyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVM
ZW5ndGg8aW50PihzdHlsZSwgbV9zdGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3Ip
IDogMDsKKyAgICAgICAgICAgIGludCBzcHJlYWQgPSBpdGVtLT5zcHJlYWQgPyBpdGVtLT5zcHJl
YWQtPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgbV9zdGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUs
IHpvb21GYWN0b3IpIDogMDsKICAgICAgICAgICAgIFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxlID0g
aXRlbS0+c3R5bGUgJiYgaXRlbS0+c3R5bGUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnNldCA/
IEluc2V0IDogTm9ybWFsOwogICAgICAgICAgICAgQ29sb3IgY29sb3I7CiAgICAgICAgICAgICBp
ZiAoaXRlbS0+Y29sb3IpCiAgICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRp
dmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChtX3N0eWxl
KQotICAgICAgICAgICAgICAgIGNvbG9yID0gbV9zdHlsZS0+Y29sb3IoKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKHN0eWxlKQorICAgICAgICAgICAgICAgIGNvbG9yID0gc3R5bGUtPmNvbG9yKCk7
CiAKICAgICAgICAgICAgIE93blB0cjxTaGFkb3dEYXRhPiBzaGFkb3dEYXRhID0gYWRvcHRQdHIo
bmV3IFNoYWRvd0RhdGEoSW50UG9pbnQoeCwgeSksIGJsdXIsIHNwcmVhZCwgc2hhZG93U3R5bGUs
IGlkID09IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xv
ciA6IENvbG9yOjp0cmFuc3BhcmVudCkpOwogICAgICAgICAgICAgaWYgKGlkID09IENTU1Byb3Bl
cnR5VGV4dFNoYWRvdykKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRUZXh0U2hhZG93KHNo
YWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhp
cyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CisgICAgICAgICAgICAgICAgc3R5bGUtPnNldFRleHRT
aGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlz
dCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3hTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGku
aW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50
cnkKKyAgICAgICAgICAgICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVsZWFz
ZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZp
cnN0IGVudHJ5CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRf
SU5JVElBTChib3hSZWZsZWN0LCBCb3hSZWZsZWN0KQogICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJveFJlZmxlY3QoUmVuZGVyU3R5bGU6Omlu
aXRpYWxCb3hSZWZsZWN0KCkpOworICAgICAgICAgICAgc3R5bGUtPnNldEJveFJlZmxlY3QoUmVu
ZGVyU3R5bGU6OmluaXRpYWxCb3hSZWZsZWN0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKQEAgLTM4MDQsMTMgKzM3NTUsMTMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgUmVm
UHRyPFN0eWxlUmVmbGVjdGlvbj4gcmVmbGVjdGlvbiA9IFN0eWxlUmVmbGVjdGlvbjo6Y3JlYXRl
KCk7CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldERpcmVjdGlvbihyZWZsZWN0VmFsdWUtPmRpcmVj
dGlvbigpKTsKICAgICAgICAgaWYgKHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCkpCi0gICAgICAgICAg
ICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVjdFZhbHVlLT5vZmZzZXQoKS0+Y29udmVydFRv
TGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1
bGF0ZWRDb252ZXJzaW9uPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3Ip
KTsKKyAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChyZWZsZWN0VmFsdWUtPm9mZnNl
dCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252
ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0eWxlLCBtX3N0YXRlLm1fcm9vdEVsZW1l
bnRTdHlsZSwgem9vbUZhY3RvcikpOwogICAgICAgICBOaW5lUGllY2VJbWFnZSBtYXNrOwogICAg
ICAgICBtYXNrLnNldE1hc2tEZWZhdWx0cygpOwogICAgICAgICBtX3N0eWxlTWFwLm1hcE5pbmVQ
aWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUtPm1hc2soKSwgbWFzayk7CiAgICAgICAgIHJlZmxl
Y3Rpb24tPnNldE1hc2sobWFzayk7CiAKLSAgICAgICAgbV9zdHlsZS0+c2V0Qm94UmVmbGVjdChy
ZWZsZWN0aW9uLnJlbGVhc2UoKSk7CisgICAgICAgIHN0eWxlLT5zZXRCb3hSZWZsZWN0KHJlZmxl
Y3Rpb24ucmVsZWFzZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1By
b3BlcnR5T3BhY2l0eToKQEAgLTM4MjIsMjkgKzM3NzMsMjkgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlOgogICAgICAg
ICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRDb2x1bW5SdWxlQ29s
b3IobV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkuaXNWYWxpZCgpID8gbV9wYXJlbnRT
dHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkgOiBtX3BhcmVudFN0eWxlLT5jb2xvcigpKTsKLSAgICAg
ICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1bGVTdHlsZShtX3BhcmVudFN0eWxlLT5jb2x1bW5S
dWxlU3R5bGUoKSk7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRDb2x1bW5SdWxlV2lkdGgobV9w
YXJlbnRTdHlsZS0+Y29sdW1uUnVsZVdpZHRoKCkpOworICAgICAgICAgICAgc3R5bGUtPnNldENv
bHVtblJ1bGVDb2xvcihtX3N0YXRlLm1fcGFyZW50U3R5bGUtPmNvbHVtblJ1bGVDb2xvcigpLmlz
VmFsaWQoKSA/IG1fc3RhdGUubV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkgOiBtX3N0
YXRlLm1fcGFyZW50U3R5bGUtPmNvbG9yKCkpOworICAgICAgICAgICAgc3R5bGUtPnNldENvbHVt
blJ1bGVTdHlsZShtX3N0YXRlLm1fcGFyZW50U3R5bGUtPmNvbHVtblJ1bGVTdHlsZSgpKTsKKyAg
ICAgICAgICAgIHN0eWxlLT5zZXRDb2x1bW5SdWxlV2lkdGgobV9zdGF0ZS5tX3BhcmVudFN0eWxl
LT5jb2x1bW5SdWxlV2lkdGgoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKQotICAg
ICAgICAgICAgbV9zdHlsZS0+cmVzZXRDb2x1bW5SdWxlKCk7CisgICAgICAgICAgICBzdHlsZS0+
cmVzZXRDb2x1bW5SdWxlKCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFycXVlZToKLSAgICAgICAgaWYgKCFtX3BhcmVudE5vZGUgfHwgIXZhbHVlLT5pc0lu
aGVyaXRlZFZhbHVlKCkpCisgICAgICAgIGlmICghbV9zdGF0ZS5tX3BhcmVudE5vZGUgfHwgIXZh
bHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1f
c3R5bGUtPnNldE1hcnF1ZWVEaXJlY3Rpb24obV9wYXJlbnRTdHlsZS0+bWFycXVlZURpcmVjdGlv
bigpKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChtX3BhcmVudFN0eWxl
LT5tYXJxdWVlSW5jcmVtZW50KCkpOwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQo
bV9wYXJlbnRTdHlsZS0+bWFycXVlZVNwZWVkKCkpOwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJx
dWVlTG9vcENvdW50KG1fcGFyZW50U3R5bGUtPm1hcnF1ZWVMb29wQ291bnQoKSk7Ci0gICAgICAg
IG1fc3R5bGUtPnNldE1hcnF1ZWVCZWhhdmlvcihtX3BhcmVudFN0eWxlLT5tYXJxdWVlQmVoYXZp
b3IoKSk7CisgICAgICAgIHN0eWxlLT5zZXRNYXJxdWVlRGlyZWN0aW9uKG1fc3RhdGUubV9wYXJl
bnRTdHlsZS0+bWFycXVlZURpcmVjdGlvbigpKTsKKyAgICAgICAgc3R5bGUtPnNldE1hcnF1ZWVJ
bmNyZW1lbnQobV9zdGF0ZS5tX3BhcmVudFN0eWxlLT5tYXJxdWVlSW5jcmVtZW50KCkpOworICAg
ICAgICBzdHlsZS0+c2V0TWFycXVlZVNwZWVkKG1fc3RhdGUubV9wYXJlbnRTdHlsZS0+bWFycXVl
ZVNwZWVkKCkpOworICAgICAgICBzdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudChtX3N0YXRlLm1f
cGFyZW50U3R5bGUtPm1hcnF1ZWVMb29wQ291bnQoKSk7CisgICAgICAgIHN0eWxlLT5zZXRNYXJx
dWVlQmVoYXZpb3IobV9zdGF0ZS5tX3BhcmVudFN0eWxlLT5tYXJxdWVlQmVoYXZpb3IoKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVJlcGV0aXRp
b246IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFycXVlZUxvb3BDb3Vu
dCwgTWFycXVlZUxvb3BDb3VudCkKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlSW5maW5pdGUpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENv
dW50KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCisgICAgICAgICAgICBzdHlsZS0+
c2V0TWFycXVlZUxvb3BDb3VudCgtMSk7IC8vIC0xIG1lYW5zIHJlcGVhdCBmb3JldmVyLgogICAg
ICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkKLSAgICAgICAgICAgIG1f
c3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkp
OworICAgICAgICAgICAgc3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQocHJpbWl0aXZlVmFsdWUt
PmdldEludFZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXJxdWVlU3BlZWQ6IHsKQEAgLTM4NTQsMTkgKzM4MDUsMTkgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAgICAgaWYgKGludCBpZGVudCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
KSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGlkZW50KSB7CiAgICAgICAgICAgICBjYXNlIENTU1Zh
bHVlU2xvdzoKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoNTAwKTsg
Ly8gNTAwIG1zZWMuCisgICAgICAgICAgICAgICAgc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCg1MDAp
OyAvLyA1MDAgbXNlYy4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVk
KDg1KTsgLy8gODVtc2VjLiBUaGUgV2luSUUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICBzdHls
ZS0+c2V0TWFycXVlZVNwZWVkKDg1KTsgLy8gODVtc2VjLiBUaGUgV2luSUUgZGVmYXVsdC4KICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVGYXN0OgotICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCgxMCk7IC8vIDEwbXNlYy4gU3Vw
ZXIgZmFzdC4KKyAgICAgICAgICAgICAgICBzdHlsZS0+c2V0TWFycXVlZVNwZWVkKDEwKTsgLy8g
MTBtc2VjLiBTdXBlciBmYXN0LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1RpbWUoKSkKLSAgICAgICAg
ICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZVRpbWU8
aW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6TWlsbGlzZWNvbmRzPigpKTsKKyAgICAgICAgICAgIHN0
eWxlLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGludCwgQ1NT
UHJpbWl0aXZlVmFsdWU6Ok1pbGxpc2Vjb25kcz4oKSk7CiAgICAgICAgIGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLT5pc051bWJlcigpKSAvLyBGb3Igc2Nyb2xsYW1vdW50IHN1cHBvcnQuCi0gICAg
ICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmdldEludFZh
bHVlKCkpOworICAgICAgICAgICAgc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1
ZS0+Z2V0SW50VmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hcnF1ZWVJbmNyZW1lbnQ6IHsKQEAgLTM4NzYsMTkgKzM4MjcsMTkgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CiAg
ICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAg
ICAgICBjYXNlIENTU1ZhbHVlU21hbGw6Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFy
cXVlZUluY3JlbWVudChMZW5ndGgoMSwgRml4ZWQpKTsgLy8gMXB4LgorICAgICAgICAgICAgICAg
IHN0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgxLCBGaXhlZCkpOyAvLyAxcHguCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgot
ICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDYsIEZp
eGVkKSk7IC8vIDZweC4gVGhlIFdpbklFIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgc3R5bGUt
PnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDYsIEZpeGVkKSk7IC8vIDZweC4gVGhlIFdpbklF
IGRlZmF1bHQuCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1Zh
bHVlTGFyZ2U6Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChM
ZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCisgICAgICAgICAgICAgICAgc3R5bGUtPnNldE1h
cnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDM2LCBGaXhlZCkpOyAvLyAzNnB4LgogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
TGVuZ3RoIG1hcnF1ZWVMZW5ndGggPSBjb252ZXJ0VG9JbnRMZW5ndGgocHJpbWl0aXZlVmFsdWUs
IHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7CisgICAgICAgICAgICBMZW5ndGggbWFycXVl
ZUxlbmd0aCA9IGNvbnZlcnRUb0ludExlbmd0aChwcmltaXRpdmVWYWx1ZSwgc3R5bGUsIG1fc3Rh
dGUubV9yb290RWxlbWVudFN0eWxlKTsKICAgICAgICAgICAgIGlmICghbWFycXVlZUxlbmd0aC5p
c1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1l
bnQobWFycXVlZUxlbmd0aCk7CisgICAgICAgICAgICAgICAgc3R5bGUtPnNldE1hcnF1ZWVJbmNy
ZW1lbnQobWFycXVlZUxlbmd0aCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTM5MDAsMTEgKzM4NTEsMTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgaWYgKCFwcmltaXRp
dmVWYWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldExv
Y2FsZShudWxsQXRvbSk7CisgICAgICAgICAgICBzdHlsZS0+c2V0TG9jYWxlKG51bGxBdG9tKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TG9jYWxlKHByaW1pdGl2ZVZh
bHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24obV9zdHls
ZS0+bG9jYWxlKCkpKTsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRMb2NhbGUocHJpbWl0aXZlVmFs
dWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2Ny
aXB0aW9uID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24oc3R5bGUtPmxv
Y2FsZSgpKSk7CiAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzkyOCw3ICszODc5LDcgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXREYXNoYm9h
cmRSZWdpb25zKFJlbmRlclN0eWxlOjpub25lRGFzaGJvYXJkUmVnaW9ucygpKTsKKyAgICAgICAg
ICAgIHN0eWxlLT5zZXREYXNoYm9hcmRSZWdpb25zKFJlbmRlclN0eWxlOjpub25lRGFzaGJvYXJk
UmVnaW9ucygpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0zOTM4LDEw
ICszODg5LDEwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAKICAgICAgICAgRGFzaGJvYXJkUmVnaW9uKiBmaXJz
dCA9IHJlZ2lvbjsKICAgICAgICAgd2hpbGUgKHJlZ2lvbikgewotICAgICAgICAgICAgTGVuZ3Ro
IHRvcCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPnRvcCgpLCBzdHlsZSgpLCBtX3Jvb3RF
bGVtZW50U3R5bGUpOwotICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVydFRvSW50TGVu
Z3RoKHJlZ2lvbi0+cmlnaHQoKSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKLSAgICAg
ICAgICAgIExlbmd0aCBib3R0b20gPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5ib3R0b20o
KSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKLSAgICAgICAgICAgIExlbmd0aCBsZWZ0
ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+bGVmdCgpLCBzdHlsZSgpLCBtX3Jvb3RFbGVt
ZW50U3R5bGUpOworICAgICAgICAgICAgTGVuZ3RoIHRvcCA9IGNvbnZlcnRUb0ludExlbmd0aChy
ZWdpb24tPnRvcCgpLCBzdHlsZSwgbV9zdGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUpOworICAgICAg
ICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+cmlnaHQoKSwg
c3R5bGUsIG1fc3RhdGUubV9yb290RWxlbWVudFN0eWxlKTsKKyAgICAgICAgICAgIExlbmd0aCBi
b3R0b20gPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5ib3R0b20oKSwgc3R5bGUsIG1fc3Rh
dGUubV9yb290RWxlbWVudFN0eWxlKTsKKyAgICAgICAgICAgIExlbmd0aCBsZWZ0ID0gY29udmVy
dFRvSW50TGVuZ3RoKHJlZ2lvbi0+bGVmdCgpLCBzdHlsZSwgbV9zdGF0ZS5tX3Jvb3RFbGVtZW50
U3R5bGUpOwogCiAgICAgICAgICAgICBpZiAodG9wLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAg
ICAgICAgdG9wID0gTGVuZ3RoKCk7CkBAIC0zOTUzLDEzICszOTA0LDEzIEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgICAgICAgICAgICAgbGVmdCA9IExlbmd0aCgpOwogCiAgICAgICAgICAgICBpZiAocmVn
aW9uLT5tX2lzQ2lyY2xlKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hib2FyZFJl
Z2lvbihTdHlsZURhc2hib2FyZFJlZ2lvbjo6Q2lyY2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwg
cmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKKyAg
ICAgICAgICAgICAgICBzdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVn
aW9uOjpDaXJjbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBy
ZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwogICAgICAgICAgICAgZWxzZSBpZiAocmVn
aW9uLT5tX2lzUmVjdGFuZ2xlKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hib2Fy
ZFJlZ2lvbihTdHlsZURhc2hib2FyZFJlZ2lvbjo6UmVjdGFuZ2xlLCByZWdpb24tPm1fbGFiZWws
IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVl
KTsKKyAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJv
YXJkUmVnaW9uOjpSZWN0YW5nbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9t
LCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwogICAgICAgICAgICAgcmVn
aW9uID0gcmVnaW9uLT5tX25leHQuZ2V0KCk7CiAgICAgICAgIH0KIAotICAgICAgICBtX2VsZW1l
bnQtPmRvY3VtZW50KCktPnNldEhhc0Rhc2hib2FyZFJlZ2lvbnModHJ1ZSk7CisgICAgICAgIG1f
c3RhdGUubV9lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRIYXNEYXNoYm9hcmRSZWdpb25zKHRydWUp
OwogCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zOTc2LDIxICszOTI3LDIxIEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgICAgICAgICAgcmVzdWx0ICo9IDM7CiAgICAgICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVRoaWNrKQogICAgICAgICAg
ICAgICAgIHJlc3VsdCAqPSA1OwotICAgICAgICAgICAgd2lkdGggPSBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlKHJlc3VsdCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpLT5jb21wdXRlTGVu
Z3RoPGZsb2F0PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAg
ICAgICAgICAgd2lkdGggPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlc3VsdCwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19FTVMpLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZSwgbV9zdGF0
ZS5tX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHdpZHRoID0gcHJpbWl0aXZl
VmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwg
em9vbUZhY3Rvcik7CisgICAgICAgICAgICB3aWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRl
TGVuZ3RoPGZsb2F0PihzdHlsZSwgbV9zdGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0
b3IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgbV9zdHlsZS0+c2V0
VGV4dFN0cm9rZVdpZHRoKHdpZHRoKTsKKyAgICAgICAgc3R5bGUtPnNldFRleHRTdHJva2VXaWR0
aCh3aWR0aCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFRyYW5zZm9ybTogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0cmFu
c2Zvcm0sIFRyYW5zZm9ybSk7CiAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9u
czsKLSAgICAgICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZSwgc3R5bGUoKSwgbV9y
b290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0VHJhbnNm
b3JtKG9wZXJhdGlvbnMpOworICAgICAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVl
LCBzdHlsZSwgbV9zdGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUsIG9wZXJhdGlvbnMpOworICAgICAg
ICBzdHlsZS0+c2V0VHJhbnNmb3JtKG9wZXJhdGlvbnMpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2ZTogewpAQCAtNDAwMCwzNCAr
Mzk1MSwzNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAg
ICAgIG1fc3R5bGUtPnNldFBlcnNwZWN0aXZlKDApOworICAgICAgICAgICAgc3R5bGUtPnNldFBl
cnNwZWN0aXZlKDApOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAg
ZmxvYXQgcGVyc3BlY3RpdmVWYWx1ZTsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xl
bmd0aCgpKQotICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLT5j
b21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0
b3IpOworICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLT5jb21w
dXRlTGVuZ3RoPGZsb2F0PihzdHlsZSwgbV9zdGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21G
YWN0b3IpOwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgewog
ICAgICAgICAgICAgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRyZWF0IHZhbHVlbGVz
cyBudW1iZXJzIGFzIHB4LgotICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9IENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUFgpLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZSgpLCBtX3Jv
b3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1
ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZh
bHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpLT5jb21wdXRlTGVuZ3RoPGZsb2F0Pihz
dHlsZSwgbV9zdGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwogICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAocGVyc3BlY3RpdmVWYWx1
ZSA+PSAwLjBmKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UGVyc3BlY3RpdmUocGVyc3BlY3Rp
dmVWYWx1ZSk7CisgICAgICAgICAgICBzdHlsZS0+c2V0UGVyc3BlY3RpdmUocGVyc3BlY3RpdmVW
YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEFuaW1hdGlvbjoKICAgICAgICAgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIG1fc3R5bGUt
PmNsZWFyQW5pbWF0aW9ucygpOworICAgICAgICAgICAgc3R5bGUtPmNsZWFyQW5pbWF0aW9ucygp
OwogICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICBtX3N0eWxlLT5pbmhl
cml0QW5pbWF0aW9ucyhtX3BhcmVudFN0eWxlLT5hbmltYXRpb25zKCkpOworICAgICAgICAgICAg
c3R5bGUtPmluaGVyaXRBbmltYXRpb25zKG1fc3RhdGUubV9wYXJlbnRTdHlsZS0+YW5pbWF0aW9u
cygpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0
aW9uOgogICAgICAgICBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJU
cmFuc2l0aW9ucygpOworICAgICAgICAgICAgc3R5bGUtPmNsZWFyVHJhbnNpdGlvbnMoKTsKICAg
ICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdFRy
YW5zaXRpb25zKG1fcGFyZW50U3R5bGUtPnRyYW5zaXRpb25zKCkpOworICAgICAgICAgICAgc3R5
bGUtPmluaGVyaXRUcmFuc2l0aW9ucyhtX3N0YXRlLm1fcGFyZW50U3R5bGUtPnRyYW5zaXRpb25z
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVBvaW50ZXJFdmVudHM6
CiAgICAgewpAQCAtNDA0MSw3ICszOTkyLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgIENvbG9yIGNvbCA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1p
dGl2ZVZhbHVlKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0VGFwSGlnaGxpZ2h0Q29sb3IoY29sKTsK
KyAgICAgICAgc3R5bGUtPnNldFRhcEhpZ2hsaWdodENvbG9yKGNvbCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYKQEAgLTQwNTAsNyArNDAwMSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcs
IFVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcpOwogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVl
KQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG1fc3R5bGUtPnNldFVzZVRvdWNoT3ZlcmZs
b3dTY3JvbGxpbmcocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVUb3VjaCk7
CisgICAgICAgIHN0eWxlLT5zZXRVc2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlVG91Y2gpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogI2VuZGlmCkBAIC00MDkzLDcgKzQwNDQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRNYXhMb2dpY2FsV2lkdGg6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1heExvZ2ljYWxIZWlnaHQ6CiAgICAgewotICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0g
Q1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBtX3N0eWxlLT5k
aXJlY3Rpb24oKSwgbV9zdHlsZS0+d3JpdGluZ01vZGUoKSk7CisgICAgICAgIENTU1Byb3BlcnR5
SUQgbmV3SWQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoaWQs
IHN0eWxlLT5kaXJlY3Rpb24oKSwgc3R5bGUtPndyaXRpbmdNb2RlKCkpOwogICAgICAgICBBU1NF
UlQobmV3SWQgIT0gaWQpOwogICAgICAgICByZXR1cm4gYXBwbHlQcm9wZXJ0eShuZXdJZCwgdmFs
dWUpOwogICAgIH0KQEAgLTQxMjQsMTAgKzQwNzUsMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0V3JpdGluZ01vZGU6IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRf
QU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRSh3cml0aW5nTW9kZSwgV3JpdGluZ01vZGUpCiAgICAg
ICAgIC8vIEZJWE1FOiBJdCBpcyBub3Qgb2sgdG8gbW9kaWZ5IGRvY3VtZW50IHN0YXRlIHdoaWxl
IGFwcGx5aW5nIHN0eWxlLgotICAgICAgICBpZiAoIWlzSW5oZXJpdCAmJiAhaXNJbml0aWFsICYm
IG1fZWxlbWVudCAmJiBtX2VsZW1lbnQgPT0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kb2N1bWVu
dEVsZW1lbnQoKSkKLSAgICAgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0V3JpdGlu
Z01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCh0cnVlKTsKLSAgICAgICAgRm9udERlc2NyaXB0aW9u
IGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0T3JpZW50YXRpb24obV9zdHlsZS0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IEhvcml6b250YWwgOiBWZXJ0aWNhbCk7CisgICAgICAgIGlmICghaXNJbmhlcml0
ICYmICFpc0luaXRpYWwgJiYgbV9zdGF0ZS5tX2VsZW1lbnQgJiYgbV9zdGF0ZS5tX2VsZW1lbnQg
PT0gbV9zdGF0ZS5tX2VsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQorICAg
ICAgICAgICAgbV9zdGF0ZS5tX2VsZW1lbnQtPmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0
T25Eb2N1bWVudEVsZW1lbnQodHJ1ZSk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb24gPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRPcmllbnRhdGlvbihzdHlsZS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IEhv
cml6b250YWwgOiBWZXJ0aWNhbCk7CiAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVz
Y3JpcHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDEzNSw3ICs0MDg2LDcgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUJveENvbnRhaW46IHsK
ICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobGluZUJveENvbnRhaW4sIExpbmVC
b3hDb250YWluKQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRM
aW5lQm94Q29udGFpbihMaW5lQm94Q29udGFpbk5vbmUpOworICAgICAgICAgICAgc3R5bGUtPnNl
dExpbmVCb3hDb250YWluKExpbmVCb3hDb250YWluTm9uZSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIApAQCAtNDE0MywyMSArNDA5NCwyMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIENTU0xpbmVCb3hDb250YWluVmFsdWUqIGxpbmVCb3hD
b250YWluVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NMaW5lQm94Q29udGFpblZhbHVlKj4odmFsdWUp
OwotICAgICAgICBtX3N0eWxlLT5zZXRMaW5lQm94Q29udGFpbihsaW5lQm94Q29udGFpblZhbHVl
LT52YWx1ZSgpKTsKKyAgICAgICAgc3R5bGUtPnNldExpbmVCb3hDb250YWluKGxpbmVCb3hDb250
YWluVmFsdWUtPnZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gQ1NT
IEZvbnRzIE1vZHVsZSBMZXZlbCAzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRGZWF0
dXJlU2V0dGluZ3M6IHsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKSB7Ci0gICAgICAgICAgICBzZXRGb250
RGVzY3JpcHRpb24obV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkubWFrZU5vcm1hbEZlYXR1cmVT
ZXR0aW5ncygpKTsKKyAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihzdHlsZS0+Zm9udERl
c2NyaXB0aW9uKCkubWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlw
dGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICBD
U1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CiAg
ICAgICAgIFJlZlB0cjxGb250RmVhdHVyZVNldHRpbmdzPiBzZXR0aW5ncyA9IEZvbnRGZWF0dXJl
U2V0dGluZ3M6OmNyZWF0ZSgpOwogICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7CkBA
IC00MTc3LDggKzQxMjgsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRGaWx0ZXI6IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoZmlsdGVyLCBG
aWx0ZXIpOwogICAgICAgICBGaWx0ZXJPcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgICAgIGlm
IChjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKHZhbHVlLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5
bGUsIG9wZXJhdGlvbnMpKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0RmlsdGVyKG9wZXJhdGlv
bnMpOworICAgICAgICBpZiAoY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyh2YWx1ZSwgc3R5bGUsIG1f
c3RhdGUubV9yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKSkKKyAgICAgICAgICAgIHN0eWxl
LT5zZXRGaWx0ZXIob3BlcmF0aW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYK
QEAgLTQxODYsMTQgKzQxMzcsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgVmVjdG9yPExlbmd0
aD4gbGVuZ3RoczsKICAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tMaXN0KHZhbHVlLCBsZW5n
dGhzLCB0aGlzKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0R3Jp
ZENvbHVtbnMobGVuZ3Rocyk7CisgICAgICAgIHN0eWxlLT5zZXRHcmlkQ29sdW1ucyhsZW5ndGhz
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3Jp
ZFJvd3M6IHsKICAgICAgICAgVmVjdG9yPExlbmd0aD4gbGVuZ3RoczsKICAgICAgICAgaWYgKCFj
cmVhdGVHcmlkVHJhY2tMaXN0KHZhbHVlLCBsZW5ndGhzLCB0aGlzKSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0R3JpZFJvd3MobGVuZ3Rocyk7CisgICAgICAgIHN0
eWxlLT5zZXRHcmlkUm93cyhsZW5ndGhzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
NDIwMSwxNCArNDE1MiwxNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBMZW5ndGggY29sdW1uOwog
ICAgICAgICBpZiAoIWNyZWF0ZUdyaWRQb3NpdGlvbih2YWx1ZSwgY29sdW1uKSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0R3JpZEl0ZW1Db2x1bW4oY29sdW1uKTsK
KyAgICAgICAgc3R5bGUtPnNldEdyaWRJdGVtQ29sdW1uKGNvbHVtbik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRSb3c6IHsKICAgICAgICAg
TGVuZ3RoIHJvdzsKICAgICAgICAgaWYgKCFjcmVhdGVHcmlkUG9zaXRpb24odmFsdWUsIHJvdykp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5bGUtPnNldEdyaWRJdGVtUm93KHJv
dyk7CisgICAgICAgIHN0eWxlLT5zZXRHcmlkSXRlbVJvdyhyb3cpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgYXJlIGltcGxlbWVudGVkIGluIHRoZSBT
dHlsZUJ1aWxkZXIgbG9va3VwIHRhYmxlLgpAQCAtNDUxOCwxNCArNDQ2OSwxNCBAQCBQYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShD
U1NQcm9wZXJ0eUlEIHBybwogewogICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVl
LT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5k
aW5nSW1hZ2UoKSkKLSAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0
eSwgdmFsdWUpOworICAgICAgICBtX3N0YXRlLm1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQo
cHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogCiBQYXNz
UmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zyb21W
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKiB2YWx1
ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzUGVuZGluZygpKSB7Ci0gICAgICAgIG1fcGVuZGluZ0lt
YWdlUHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICAgICAgbV9zdGF0ZS5tX3Bl
bmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgICAgIHJldHVy
biBTdHlsZVBlbmRpbmdJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKICAgICB9CiAgICAgcmV0dXJuIFN0
eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7CkBAIC00NTM2LDE5ICs0NDg3LDE5IEBA
IFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcGVyCiB7CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdl
ID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50KCkpOwogICAgIGlmIChp
bWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9wZW5kaW5nSW1hZ2VQ
cm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBtX3N0YXRlLm1fcGVuZGlu
Z0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2Uu
cmVsZWFzZSgpOwogfQogI2VuZGlmCiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JUZXh0
U2l6ZUFkanVzdCgpCiB7Ci0gICAgaWYgKG1fc3R5bGUtPnRleHRTaXplQWRqdXN0KCkpCisgICAg
aWYgKG1fc3RhdGUuc3R5bGUoKS0+dGV4dFNpemVBZGp1c3QoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihtX3N0eWxlLT5mb250RGVz
Y3JpcHRpb24oKSk7CisgICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihtX3N0
YXRlLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpKTsKICAgICBuZXdGb250RGVzY3JpcHRpb24u
c2V0Q29tcHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkpOwotICAg
IG1fc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOworICAgIG1f
c3RhdGUuc3R5bGUoKS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CiB9
CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiBz
dHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQpAQCAtNDU4NCw3ICs0NTM1LDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUq
IHN0eWxlLCBSZW5kZXJTdHlsZSoKICAgICAvLyBtdWx0aXBseWluZyBieSBvdXIgc2NhbGUgZmFj
dG9yLgogICAgIGZsb2F0IHNpemU7CiAgICAgaWYgKGNoaWxkRm9udC5rZXl3b3JkU2l6ZSgpKQot
ICAgICAgICBzaXplID0gZm9udFNpemVGb3JLZXl3b3JkKG1fY2hlY2tlci5kb2N1bWVudCgpLCBD
U1NWYWx1ZVh4U21hbGwgKyBjaGlsZEZvbnQua2V5d29yZFNpemUoKSAtIDEsIGNoaWxkRm9udC51
c2VGaXhlZERlZmF1bHRTaXplKCkpOworICAgICAgICBzaXplID0gZm9udFNpemVGb3JLZXl3b3Jk
KG1fc3RhdGUubV9jaGVja2VyLmRvY3VtZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGNoaWxkRm9u
dC5rZXl3b3JkU2l6ZSgpIC0gMSwgY2hpbGRGb250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50U2V0dGluZ3Mo
KTsKICAgICAgICAgZmxvYXQgZml4ZWRTY2FsZUZhY3RvciA9IHNldHRpbmdzCkBAIC00NjA1LDIz
ICs0NTU2LDIzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0
aW5ncyogc2V0dGluZ3MpCiAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAg
ICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlN0YW5k
YXJkRmFtaWx5KTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShzZXR0aW5n
cy0+Zm9udFJlbmRlcmluZ01vZGUoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50
ZXJGb250KG1fY2hlY2tlci5kb2N1bWVudCgpLT5wcmludGluZygpKTsKKyAgICBmb250RGVzY3Jp
cHRpb24uc2V0VXNlUHJpbnRlckZvbnQobV9zdGF0ZS5tX2NoZWNrZXIuZG9jdW1lbnQoKS0+cHJp
bnRpbmcoKSk7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGFuZGFyZEZvbnRGYW1pbHkgPSBk
b2N1bWVudFNldHRpbmdzKCktPnN0YW5kYXJkRm9udEZhbWlseSgpOwogICAgIGlmICghc3RhbmRh
cmRGb250RmFtaWx5LmlzRW1wdHkoKSkgewogICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RG
YW1pbHkoKS5zZXRGYW1pbHkoc3RhbmRhcmRGb250RmFtaWx5KTsKICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLmZpcnN0RmFtaWx5KCkuYXBwZW5kRmFtaWx5KDApOwogICAgIH0KICAgICBmb250RGVz
Y3JpcHRpb24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwg
KyAxKTsKLSAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29y
ZChtX2NoZWNrZXIuZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZhbHNlKSk7Ci0gICAgbV9z
dHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0g
ICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOworICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlv
biwgZm9udFNpemVGb3JLZXl3b3JkKG1fc3RhdGUubV9jaGVja2VyLmRvY3VtZW50KCksIENTU1Zh
bHVlTWVkaXVtLCBmYWxzZSkpOworICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0TGluZUhlaWdodChS
ZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgbV9zdGF0ZS5tX2xpbmVIZWln
aHRWYWx1ZSA9IDA7CiAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiB9
CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGZsb2F0IHNpemUpCiB7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNp
ZmllZFNpemUoc2l6ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRD
b21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShtX2NoZWNrZXIuZG9jdW1lbnQoKSwgbV9zdHls
ZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNpemUsIHVzZVNWR1pv
b21SdWxlcygpKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21w
dXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShtX3N0YXRlLm1fY2hlY2tlci5kb2N1bWVudCgpLCBt
X3N0YXRlLnN0eWxlKCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXplLCB1
c2VTVkdab29tUnVsZXMoKSkpOwogfQogCiBmbG9hdCBTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRl
ZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIFJlbmRlclN0eWxlKiBz
dHlsZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VT
Vkdab29tUnVsZXMpCkBAIC00ODI5LDE1ICs0NzgwLDE1IEBAIENvbG9yIFN0eWxlUmVzb2x2ZXI6
OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwgYm9vbCBm
b3JWCiAgICAgY2FzZSAwOgogICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICBjYXNlIENTU1Zh
bHVlV2Via2l0VGV4dDoKLSAgICAgICAgcmV0dXJuIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dGV4
dENvbG9yKCk7CisgICAgICAgIHJldHVybiBtX3N0YXRlLm1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+
dGV4dENvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdExpbms6Ci0gICAgICAgIHJldHVy
biAobV9lbGVtZW50LT5pc0xpbmsoKSAmJiBmb3JWaXNpdGVkTGluaykgPyBtX2VsZW1lbnQtPmRv
Y3VtZW50KCktPnZpc2l0ZWRMaW5rQ29sb3IoKSA6IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+bGlu
a0NvbG9yKCk7CisgICAgICAgIHJldHVybiAobV9zdGF0ZS5tX2VsZW1lbnQtPmlzTGluaygpICYm
IGZvclZpc2l0ZWRMaW5rKSA/IG1fc3RhdGUubV9lbGVtZW50LT5kb2N1bWVudCgpLT52aXNpdGVk
TGlua0NvbG9yKCkgOiBtX3N0YXRlLm1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7
CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEFjdGl2ZWxpbms6Ci0gICAgICAgIHJldHVybiBtX2Vs
ZW1lbnQtPmRvY3VtZW50KCktPmFjdGl2ZUxpbmtDb2xvcigpOworICAgICAgICByZXR1cm4gbV9z
dGF0ZS5tX2VsZW1lbnQtPmRvY3VtZW50KCktPmFjdGl2ZUxpbmtDb2xvcigpOwogICAgIGNhc2Ug
Q1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvcjoKICAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1l
Ojpmb2N1c1JpbmdDb2xvcigpOwogICAgIGNhc2UgQ1NTVmFsdWVDdXJyZW50Y29sb3I6Ci0gICAg
ICAgIHJldHVybiBtX3N0eWxlLT5jb2xvcigpOworICAgICAgICByZXR1cm4gbV9zdGF0ZS5zdHls
ZSgpLT5jb2xvcigpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBjb2xvckZvckNTU1Zh
bHVlKGlkZW50KTsKICAgICB9CkBAIC01MTc2LDExICs1MTI3LDExIEBAIHN0YXRpYyBGaWx0ZXJP
cGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZmlsdGVyT3BlcmF0aW9uRm9yVHlwZShXZWJLaXRDU1NG
aWx0ZXJWYWx1CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQogdm9pZCBT
dHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cygpCiB7Ci0gICAgaWYgKCFtX3N0
eWxlLT5oYXNGaWx0ZXIoKSB8fCBtX3BlbmRpbmdTVkdEb2N1bWVudHMuaXNFbXB0eSgpKQorICAg
IGlmICghbV9zdGF0ZS5zdHlsZSgpLT5oYXNGaWx0ZXIoKSB8fCBtX3BlbmRpbmdTVkdEb2N1bWVu
dHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRl
ciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJl
c291cmNlTG9hZGVyKCk7Ci0gICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZp
bHRlck9wZXJhdGlvbnMgPSBtX3N0eWxlLT5maWx0ZXIoKS5vcGVyYXRpb25zKCk7CisgICAgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9zdGF0ZS5tX2VsZW1l
bnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CisgICAgVmVjdG9yPFJlZlB0
cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBtX3N0YXRlLnN0eWxlKCkt
PmZpbHRlcigpLm9wZXJhdGlvbnMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmls
dGVyT3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0
aW9uPiBmaWx0ZXJPcGVyYXRpb24gPSBmaWx0ZXJPcGVyYXRpb25zLmF0KGkpOwogICAgICAgICBp
ZiAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9u
OjpSRUZFUkVOQ0UpIHsKQEAgLTUyMTksMTIgKzUxNzAsMTIgQEAgU3R5bGVTaGFkZXIqIFN0eWxl
UmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKFdlYktpdENTU1No
YWRlclYKIAogdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMoKQogewotICAg
IGlmICghbV9zdHlsZS0+aGFzRmlsdGVyKCkgfHwgIW1faGFzUGVuZGluZ1NoYWRlcnMpCisgICAg
aWYgKCFtX3N0YXRlLnN0eWxlKCktPmhhc0ZpbHRlcigpIHx8ICFtX2hhc1BlbmRpbmdTaGFkZXJz
KQogICAgICAgICByZXR1cm47CiAKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVz
b3VyY2VMb2FkZXIgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVy
KCk7CisgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9z
dGF0ZS5tX2VsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAKLSAg
ICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9IG1f
c3R5bGUtPmZpbHRlcigpLm9wZXJhdGlvbnMoKTsKKyAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9w
ZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9IG1fc3RhdGUuc3R5bGUoKS0+ZmlsdGVyKCku
b3BlcmF0aW9ucygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJPcGVyYXRp
b25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRl
ck9wZXJhdGlvbiA9IGZpbHRlck9wZXJhdGlvbnMuYXQoaSk7CiAgICAgICAgIGlmIChmaWx0ZXJP
cGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSkg
ewpAQCAtNTI2OCw3ICs1MjE5LDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+
IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW0KIHsKICAgICBS
ZWZQdHI8Q3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyPiB0cmFuc2Zvcm1QYXJhbWV0ZXIg
PSBDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXI6OmNyZWF0ZShuYW1lKTsKICAgICBUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9u
cyh2YWx1ZXMsIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgb3BlcmF0aW9ucyk7CisgICAg
Y3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZXMsIHN0eWxlKCksIG1fc3RhdGUubV9yb290
RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKTsKICAgICB0cmFuc2Zvcm1QYXJhbWV0ZXItPnNldE9w
ZXJhdGlvbnMob3BlcmF0aW9ucyk7CiAgICAgcmV0dXJuIHRyYW5zZm9ybVBhcmFtZXRlci5yZWxl
YXNlKCk7CiB9CkBAIC01NDk4LDEwICs1NDQ5LDEwIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3Jl
YXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxl
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIFdlYktpdENTU1NWR0Rv
Y3VtZW50VmFsdWUqIHN2Z0RvY3VtZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NTVkdE
b2N1bWVudFZhbHVlKj4oYXJndW1lbnQpOwotICAgICAgICAgICAgS1VSTCB1cmwgPSBtX2VsZW1l
bnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpKTsKKyAg
ICAgICAgICAgIEtVUkwgdXJsID0gbV9zdGF0ZS5tX2VsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBs
ZXRlVVJMKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpKTsKIAogICAgICAgICAgICAgUmVmUHRyPFJl
ZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4gb3BlcmF0aW9uID0gUmVmZXJlbmNlRmlsdGVyT3BlcmF0
aW9uOjpjcmVhdGUoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIHVybC5mcmFnbWVudElkZW50aWZp
ZXIoKSwgb3BlcmF0aW9uVHlwZSk7Ci0gICAgICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpp
c0V4dGVybmFsVVJJUmVmZXJlbmNlKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpLCBtX2VsZW1lbnQt
PmRvY3VtZW50KCkpKSB7CisgICAgICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0V4dGVy
bmFsVVJJUmVmZXJlbmNlKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpLCBtX3N0YXRlLm1fZWxlbWVu
dC0+ZG9jdW1lbnQoKSkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXN2Z0RvY3VtZW50VmFsdWUt
PmxvYWRSZXF1ZXN0ZWQoKSkKICAgICAgICAgICAgICAgICAgICAgbV9wZW5kaW5nU1ZHRG9jdW1l
bnRzLnNldChvcGVyYXRpb24uZ2V0KCksIHN2Z0RvY3VtZW50VmFsdWUpOwogICAgICAgICAgICAg
ICAgIGVsc2UKQEAgLTU2MDcsNyArNTU1OCw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRl
RmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlCiAK
IFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZShT
dHlsZVBlbmRpbmdJbWFnZSogcGVuZGluZ0ltYWdlKQogewotICAgIENhY2hlZFJlc291cmNlTG9h
ZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVk
UmVzb3VyY2VMb2FkZXIoKTsKKyAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3Vy
Y2VMb2FkZXIgPSBtX3N0YXRlLm1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKTsKIAogICAgIGlmIChwZW5kaW5nSW1hZ2UtPmNzc0ltYWdlVmFsdWUoKSkgewogICAg
ICAgICBDU1NJbWFnZVZhbHVlKiBpbWFnZVZhbHVlID0gcGVuZGluZ0ltYWdlLT5jc3NJbWFnZVZh
bHVlKCk7CkBAIC01NjMyLDIzICs1NTgzLDI1IEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5
bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSogcGVuZGluCiAK
IHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogewotICAgIGlmIChtX3Bl
bmRpbmdJbWFnZVByb3BlcnRpZXMuaXNFbXB0eSgpKQorICAgIGlmIChtX3N0YXRlLm1fcGVuZGlu
Z0ltYWdlUHJvcGVydGllcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFBlbmRp
bmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBtX3BlbmRpbmdJ
bWFnZVByb3BlcnRpZXMuZW5kKCkua2V5cygpOwotICAgIGZvciAoUGVuZGluZ0ltYWdlUHJvcGVy
dHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0ID0gbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVz
LmJlZ2luKCkua2V5cygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSBtX3N0YXRlLnN0eWxlKCk7CisKKyAgICBTdHlsZVJlc29sdXRpb25TdGF0ZTo6UGVuZGlu
Z0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGVuZCA9IG1fc3RhdGUubV9w
ZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmVuZCgpLmtleXMoKTsKKyAgICBmb3IgKFN0eWxlUmVzb2x1
dGlvblN0YXRlOjpQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMg
aXQgPSBtX3N0YXRlLm1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5iZWdpbigpLmtleXMoKTsgaXQg
IT0gZW5kOyArK2l0KSB7CiAgICAgICAgIENTU1Byb3BlcnR5SUQgY3VycmVudFByb3BlcnR5ID0g
Kml0OwogCiAgICAgICAgIHN3aXRjaCAoY3VycmVudFByb3BlcnR5KSB7CiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6IHsKLSAgICAgICAgICAgIGZvciAoRmlsbExheWVy
KiBiYWNrZ3JvdW5kTGF5ZXIgPSBtX3N0eWxlLT5hY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzKCk7IGJh
Y2tncm91bmRMYXllcjsgYmFja2dyb3VuZExheWVyID0gYmFja2dyb3VuZExheWVyLT5uZXh0KCkp
IHsKKyAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBiYWNrZ3JvdW5kTGF5ZXIgPSBzdHlsZS0+
YWNjZXNzQmFja2dyb3VuZExheWVycygpOyBiYWNrZ3JvdW5kTGF5ZXI7IGJhY2tncm91bmRMYXll
ciA9IGJhY2tncm91bmRMYXllci0+bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGJhY2tn
cm91bmRMYXllci0+aW1hZ2UoKSAmJiBiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCktPmlzUGVuZGlu
Z0ltYWdlKCkpCiAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRMYXllci0+c2V0SW1hZ2Uo
bG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGJhY2tncm91
bmRMYXllci0+aW1hZ2UoKSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDb250ZW50OiB7Ci0gICAgICAgICAg
ICBmb3IgKENvbnRlbnREYXRhKiBjb250ZW50RGF0YSA9IGNvbnN0X2Nhc3Q8Q29udGVudERhdGEq
PihtX3N0eWxlLT5jb250ZW50RGF0YSgpKTsgY29udGVudERhdGE7IGNvbnRlbnREYXRhID0gY29u
dGVudERhdGEtPm5leHQoKSkgeworICAgICAgICAgICAgZm9yIChDb250ZW50RGF0YSogY29udGVu
dERhdGEgPSBjb25zdF9jYXN0PENvbnRlbnREYXRhKj4oc3R5bGUtPmNvbnRlbnREYXRhKCkpOyBj
b250ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50RGF0YS0+bmV4dCgpKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKGNvbnRlbnREYXRhLT5pc0ltYWdlKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgU3R5bGVJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxJbWFnZUNvbnRlbnREYXRhKj4oY29u
dGVudERhdGEpLT5pbWFnZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzUGVu
ZGluZ0ltYWdlKCkpIHsKQEAgLTU2NjEsNyArNTYxNCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUN1cnNvcjogewotICAgICAgICAgICAgaWYgKEN1cnNvckxpc3Qq
IGN1cnNvckxpc3QgPSBtX3N0eWxlLT5jdXJzb3JzKCkpIHsKKyAgICAgICAgICAgIGlmIChDdXJz
b3JMaXN0KiBjdXJzb3JMaXN0ID0gc3R5bGUtPmN1cnNvcnMoKSkgewogICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3Vyc29yTGlzdC0+c2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgICAgICAgICAgICAgQ3Vyc29yRGF0YSYgY3VycmVudEN1cnNvciA9IGN1cnNvckxpc3QtPmF0
KGkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoU3R5bGVJbWFnZSogaW1hZ2UgPSBjdXJyZW50
Q3Vyc29yLmltYWdlKCkpIHsKQEAgLTU2NzMsMTcgKzU2MjYsMTcgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2U6IHsKLSAgICAgICAgICAgIGlm
IChtX3N0eWxlLT5saXN0U3R5bGVJbWFnZSgpICYmIG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkt
PmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGlzdFN0eWxl
SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1f
c3R5bGUtPmxpc3RTdHlsZUltYWdlKCkpKSk7CisgICAgICAgICAgICBpZiAoc3R5bGUtPmxpc3RT
dHlsZUltYWdlKCkgJiYgc3R5bGUtPmxpc3RTdHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkp
CisgICAgICAgICAgICAgICAgc3R5bGUtPnNldExpc3RTdHlsZUltYWdlKGxvYWRQZW5kaW5nSW1h
Z2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihzdHlsZS0+bGlzdFN0eWxlSW1hZ2Uo
KSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJJbWFnZVNvdXJjZTogewotICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmJvcmRl
ckltYWdlU291cmNlKCkgJiYgbV9zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5n
SW1hZ2UoKSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJJbWFnZVNvdXJjZShs
b2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+
Ym9yZGVySW1hZ2VTb3VyY2UoKSkpKTsKKyAgICAgICAgICAgIGlmIChzdHlsZS0+Ym9yZGVySW1h
Z2VTb3VyY2UoKSAmJiBzdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2Uo
KSkKKyAgICAgICAgICAgICAgICBzdHlsZS0+c2V0Qm9yZGVySW1hZ2VTb3VyY2UobG9hZFBlbmRp
bmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KHN0eWxlLT5ib3JkZXJJbWFn
ZVNvdXJjZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6IHsKLSAgICAgICAgICAgIGlmIChTdHlsZVJl
ZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtX3N0eWxlLT5ib3hSZWZsZWN0KCkpIHsKKyAgICAgICAg
ICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBzdHlsZS0+Ym94UmVmbGVjdCgp
KSB7CiAgICAgICAgICAgICAgICAgY29uc3QgTmluZVBpZWNlSW1hZ2UmIG1hc2tJbWFnZSA9IHJl
ZmxlY3Rpb24tPm1hc2soKTsKICAgICAgICAgICAgICAgICBpZiAobWFza0ltYWdlLmltYWdlKCkg
JiYgbWFza0ltYWdlLmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShz
dGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tJbWFnZS5pbWFnZSgpKSk7CkBAIC01
NjkzLDEyICs1NjQ2LDEyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMo
KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZTogewotICAgICAgICAgICAgaWYgKG1fc3R5bGUtPm1h
c2tCb3hJbWFnZVNvdXJjZSgpICYmIG1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpLT5pc1Bl
bmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hc2tCb3hJbWFnZVNv
dXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9z
dHlsZS0+bWFza0JveEltYWdlU291cmNlKCkpKSk7CisgICAgICAgICAgICBpZiAoc3R5bGUtPm1h
c2tCb3hJbWFnZVNvdXJjZSgpICYmIHN0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQZW5k
aW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBzdHlsZS0+c2V0TWFza0JveEltYWdlU291cmNl
KGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihzdHlsZS0+
bWFza0JveEltYWdlU291cmNlKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlOiB7Ci0gICAgICAgICAgICBm
b3IgKEZpbGxMYXllciogbWFza0xheWVyID0gbV9zdHlsZS0+YWNjZXNzTWFza0xheWVycygpOyBt
YXNrTGF5ZXI7IG1hc2tMYXllciA9IG1hc2tMYXllci0+bmV4dCgpKSB7CisgICAgICAgICAgICBm
b3IgKEZpbGxMYXllciogbWFza0xheWVyID0gc3R5bGUtPmFjY2Vzc01hc2tMYXllcnMoKTsgbWFz
a0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAgICAg
IGlmIChtYXNrTGF5ZXItPmltYWdlKCkgJiYgbWFza0xheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJ
bWFnZSgpKQogICAgICAgICAgICAgICAgICAgICBtYXNrTGF5ZXItPnNldEltYWdlKGxvYWRQZW5k
aW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrTGF5ZXItPmltYWdl
KCkpKSk7CiAgICAgICAgICAgICB9CkBAIC01NzA5LDcgKzU2NjIsNyBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fcGVu
ZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigpOworICAgIG1fc3RhdGUubV9wZW5kaW5nSW1hZ2VQ
cm9wZXJ0aWVzLmNsZWFyKCk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdS
ZXNvdXJjZXMoKQpAQCAtNTc0OSw3ICs1NzAyLDcgQEAgdm9pZCBNZWRpYVF1ZXJ5UmVzdWx0Ojpy
ZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb24K
IHZvaWQgU3R5bGVSZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyog
bWVtb3J5T2JqZWN0SW5mbykgY29uc3QKIHsKICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1v
cnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7Ci0gICAgaW5mby5h
ZGRNZW1iZXIobV9zdHlsZSk7CisgICAgaW5mby5hZGRNZW1iZXIobV9zdGF0ZS5zdHlsZSgpKTsK
ICAgICBpbmZvLmFkZEluc3RydW1lbnRlZE1lbWJlcihtX2F1dGhvclN0eWxlKTsKICAgICBpbmZv
LmFkZEluc3RydW1lbnRlZE1lbWJlcihtX3VzZXJTdHlsZSk7CiAgICAgaW5mby5hZGRJbnN0cnVt
ZW50ZWRNZW1iZXIobV9zaWJsaW5nUnVsZVNldCk7CkBAIC01NzU5LDEwICs1NzEyLDEwIEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVt
b3J5T2JqZWN0SW5mbykgY29uc3QKICAgICBpbmZvLmFkZEluc3RydW1lbnRlZE1hcFZhbHVlcyht
X21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpOwogICAgIGluZm8uYWRkVmVjdG9yKG1fbWF0Y2hlZFJ1
bGVzKTsKIAotICAgIGluZm8uYWRkSW5zdHJ1bWVudGVkTWVtYmVyKG1fcnVsZUxpc3QpOwotICAg
IGluZm8uYWRkSGFzaE1hcChtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMpOwotICAgIGluZm8uYWRk
SW5zdHJ1bWVudGVkTWFwVmFsdWVzKG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcyk7Ci0gICAgaW5m
by5hZGRJbnN0cnVtZW50ZWRNZW1iZXIobV9saW5lSGVpZ2h0VmFsdWUpOworICAgIGluZm8uYWRk
SW5zdHJ1bWVudGVkTWVtYmVyKG1fc3RhdGUubV9ydWxlTGlzdCk7CisgICAgaW5mby5hZGRIYXNo
TWFwKG1fc3RhdGUubV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKTsKKyAgICBpbmZvLmFkZEluc3Ry
dW1lbnRlZE1hcFZhbHVlcyhtX3N0YXRlLm1fcGVuZGluZ0ltYWdlUHJvcGVydGllcyk7CisgICAg
aW5mby5hZGRJbnN0cnVtZW50ZWRNZW1iZXIobV9zdGF0ZS5tX2xpbmVIZWlnaHRWYWx1ZSk7CiAg
ICAgaW5mby5hZGRJbnN0cnVtZW50ZWRWZWN0b3IobV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVl
cnlSZXN1bHRzKTsKICAgICBpbmZvLmFkZEhhc2hNYXAobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBl
ck1hcCk7CiAgICAgaW5mby5hZGRJbnN0cnVtZW50ZWRNYXBFbnRyaWVzKG1fc3R5bGVSdWxlVG9D
U1NPTVdyYXBwZXJNYXApOwpAQCAtNTc4Myw0ICs1NzM2LDY0IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykg
Y29uc3QKICAgICBpbmZvLmFkZEluc3RydW1lbnRlZE1lbWJlcihkZWZhdWx0Vmlld1NvdXJjZVN0
eWxlKTsKIH0KIAorU3R5bGVSZXNvbHV0aW9uU3RhdGU6OlN0eWxlUmVzb2x1dGlvblN0YXRlKERv
Y3VtZW50KiBkb2N1bWVudCkKKyAgICA6IG1fY2hlY2tlcihkb2N1bWVudCwgIWRvY3VtZW50LT5p
blF1aXJrc01vZGUoKSkKKyAgICAsIG1fcGFyZW50U3R5bGUoMCkKKyAgICAsIG1fcm9vdEVsZW1l
bnRTdHlsZSgwKQorICAgICwgbV9lbGVtZW50KDApCisgICAgLCBtX3N0eWxlZEVsZW1lbnQoMCkK
KyAgICAsIG1fcmVnaW9uRm9yU3R5bGluZygwKQorICAgICwgbV9lbGVtZW50TGlua1N0YXRlKE5v
dEluc2lkZUxpbmspCisgICAgLCBtX3BhcmVudE5vZGUoMCkKKyAgICAsIG1fbGluZUhlaWdodFZh
bHVlKDApCisgICAgLCBtX2ZvbnREaXJ0eShmYWxzZSkKKyAgICAsIG1fc2FtZU9yaWdpbk9ubHko
ZmFsc2UpCisgICAgLCBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludChmYWxzZSkKK3sKK30K
KworaW5saW5lIHZvaWQgU3R5bGVSZXNvbHV0aW9uU3RhdGU6OmluaXRFbGVtZW50KEVsZW1lbnQq
IGUpCit7CisgICAgaWYgKG1fZWxlbWVudCAhPSBlKSB7CisgICAgICAgIG1fZWxlbWVudCA9IGU7
CisgICAgICAgIG1fc3R5bGVkRWxlbWVudCA9IG1fZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlzU3R5
bGVkRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fZWxlbWVudCkgOiAw
OworICAgICAgICBtX2VsZW1lbnRMaW5rU3RhdGUgPSBtX2NoZWNrZXIuZGV0ZXJtaW5lTGlua1N0
YXRlKG1fZWxlbWVudCk7CisgICAgICAgIGlmIChlICYmIGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9j
dW1lbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldERpcmVjdGlv
blNldE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsKKyAgICAgICAgICAgIGUtPmRvY3VtZW50KCkt
PnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOworICAgICAgICB9Cisg
ICAgfQorfQorCitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdXRpb25TdGF0ZTo6aW5pdEZvclN0eWxl
UmVzb2x2ZShFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFBzZXVkb0lkIHBz
ZXVkb0lEKQoreworICAgIG1fY2hlY2tlci5zZXRQc2V1ZG9TdHlsZShwc2V1ZG9JRCk7CisKKyAg
ICBpZiAoZSkgeworICAgICAgICBOb2RlUmVuZGVyaW5nQ29udGV4dCBjb250ZXh0KGUpOworICAg
ICAgICBtX3BhcmVudE5vZGUgPSBjb250ZXh0LnBhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHls
ZSgpOworICAgICAgICBtX3BhcmVudFN0eWxlID0gY29udGV4dC5yZXNldFN0eWxlSW5oZXJpdGFu
Y2UoKT8gMCA6CisgICAgICAgICAgICBwYXJlbnRTdHlsZSA/IHBhcmVudFN0eWxlIDoKKyAgICAg
ICAgICAgIG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDA7Cisg
ICAgICAgIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50ID0gY29udGV4dC5pbnNlcnRpb25Q
b2ludCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcGFyZW50Tm9kZSA9IDA7CisgICAgICAg
IG1fcGFyZW50U3R5bGUgPSBwYXJlbnRTdHlsZTsKKyAgICAgICAgbV9kaXN0cmlidXRlZFRvSW5z
ZXJ0aW9uUG9pbnQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBOb2RlKiBkb2NFbGVtZW50ID0gZSA/
IGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpIDogMDsKKyAgICBSZW5kZXJTdHlsZSog
ZG9jU3R5bGUgPSBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+cmVuZGVyU3R5bGUoKTsKKyAgICBtX3Jv
b3RFbGVtZW50U3R5bGUgPSBkb2NFbGVtZW50ICYmIGUgIT0gZG9jRWxlbWVudCA/IGRvY0VsZW1l
bnQtPnJlbmRlclN0eWxlKCkgOiBkb2NTdHlsZTsKKworICAgIG1fc3R5bGUgPSAwOworCisgICAg
bV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmNsZWFyKCk7CisKKyAgICBtX3J1bGVMaXN0ID0gMDsK
KworICAgIG1fZm9udERpcnR5ID0gZmFsc2U7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggZmU2OTczOTBjNzYwYzZlYjNiN2E5
MGI1NWFkMTNiMmVjOGNlZGJiMC4uMmM5NWNmMzA1YWU2ZDgwNDQzOTIyOGQ1NDJlZmRiZmRiZmVh
ZTg0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0xMjQsNiArMTI0LDQyIEBA
IGVudW0gUnVsZU1hdGNoaW5nQmVoYXZpb3IgewogICAgIE1hdGNoT25seVVzZXJBZ2VudFJ1bGVz
LAogfTsKIAorY2xhc3MgU3R5bGVSZXNvbHV0aW9uU3RhdGUgeworcHVibGljOgorICAgIFN0eWxl
UmVzb2x1dGlvblN0YXRlKERvY3VtZW50Kik7CisKKyAgICB2b2lkIGluaXRGb3JTdHlsZVJlc29s
dmUoRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9Q
U0VVRE8pOworICAgIHZvaWQgaW5pdEVsZW1lbnQoRWxlbWVudCopOworCisgICAgUmVuZGVyU3R5
bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0
U3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUpIHsgbV9zdHlsZSA9IHN0eWxlOyB9
CisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gcmVsZWFzZVN0eWxlKCkgeyByZXR1cm4gbV9z
dHlsZS5yZWxlYXNlKCk7IH0KKworICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NQcm9wZXJ0eUlELCBS
ZWZQdHI8Q1NTVmFsdWU+ID4gUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA7CisgICAgUGVuZGluZ0lt
YWdlUHJvcGVydHlNYXAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzOworCisgICAgUmVmUHRyPFN0
YXRpY0NTU1J1bGVMaXN0PiBtX3J1bGVMaXN0OworCisgICAgUHNldWRvSWQgbV9keW5hbWljUHNl
dWRvOworCisgICAgLy8gRklYTUU6IE9uY2UgbV9oYXNVbmtub3duUHNldWRvRWxlbWVudHMgYW5k
IG1fcHNldWRvU3R5bGUgYXJlIGV4dHJhY3RlZCBmcm9tIGl0LCBtb3ZlIHRvIFN0eWxlUmVzb2x2
ZXIuCisgICAgU2VsZWN0b3JDaGVja2VyIG1fY2hlY2tlcjsKKyAgICBSZW5kZXJTdHlsZSogbV9w
YXJlbnRTdHlsZTsKKyAgICBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlOworICAgIEVs
ZW1lbnQqIG1fZWxlbWVudDsKKyAgICBTdHlsZWRFbGVtZW50KiBtX3N0eWxlZEVsZW1lbnQ7Cisg
ICAgUmVuZGVyUmVnaW9uKiBtX3JlZ2lvbkZvclN0eWxpbmc7CisgICAgRUluc2lkZUxpbmsgbV9l
bGVtZW50TGlua1N0YXRlOworICAgIENvbnRhaW5lck5vZGUqIG1fcGFyZW50Tm9kZTsKKyAgICBD
U1NWYWx1ZSogbV9saW5lSGVpZ2h0VmFsdWU7CisgICAgYm9vbCBtX2ZvbnREaXJ0eTsKKyAgICBi
b29sIG1fc2FtZU9yaWdpbk9ubHk7CisgICAgYm9vbCBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Q
b2ludDsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7Cit9Owor
CiAvLyBUaGlzIGNsYXNzIHNlbGVjdHMgYSBSZW5kZXJTdHlsZSBmb3IgYSBnaXZlbiBlbGVtZW50
IGJhc2VkIG9uIGEgY29sbGVjdGlvbiBvZiBzdHlsZXNoZWV0cy4KIGNsYXNzIFN0eWxlUmVzb2x2
ZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0eWxlUmVzb2x2ZXIpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKQEAgLTE0OCwxOCArMTg0LDE4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckRvY3VtZW50KERvY3VtZW50KiwgQ1NT
Rm9udFNlbGVjdG9yKiA9IDApOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7IH0KLSAgICBSZW5kZXJTdHlsZSogcm9vdEVsZW1l
bnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEVsZW1lbnRTdHlsZTsgfQotICAgIEVsZW1l
bnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KLSAgICBEb2N1bWVudCog
ZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2NoZWNrZXIuZG9jdW1lbnQoKTsgfQotICAgIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gc3R5bGUoKS0+
Zm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnN0eWxlKCk7IH0KKyAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLm1fcGFyZW50U3R5bGU7IH0KKyAgICBSZW5kZXJTdHlsZSog
cm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUubV9yb290RWxlbWVudFN0
eWxlOyB9CisgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUubV9l
bGVtZW50OyB9CisgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5tX2NoZWNrZXIuZG9jdW1lbnQoKTsgfQorICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24o
KTsgfQogICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkg
eyByZXR1cm4gcGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICB2b2lkIHNl
dEZvbnREZXNjcmlwdGlvbihjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikg
eyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsgfQotICAgIHZvaWQgc2V0Wm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9IHN0eWxl
KCktPnNldFpvb20oZik7IH0KLSAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQgZikgeyBt
X2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRFZmZlY3RpdmVab29tKGYpOyB9Ci0gICAgdm9pZCBz
ZXRUZXh0U2l6ZUFkanVzdChib29sIGIpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0VGV4
dFNpemVBZGp1c3QoYik7IH0KLSAgICBib29sIGhhc1BhcmVudE5vZGUoKSBjb25zdCB7IHJldHVy
biBtX3BhcmVudE5vZGU7IH0KKyAgICB2b2lkIHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgeyBtX3N0YXRlLm1fZm9udERpcnR5IHw9IG1f
c3RhdGUuc3R5bGUoKS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KKyAg
ICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX3N0YXRlLm1fZm9udERpcnR5IHw9IG1fc3RhdGUu
c3R5bGUoKS0+c2V0Wm9vbShmKTsgfQorICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBm
KSB7IG1fc3RhdGUubV9mb250RGlydHkgfD0gbV9zdGF0ZS5zdHlsZSgpLT5zZXRFZmZlY3RpdmVa
b29tKGYpOyB9CisgICAgdm9pZCBzZXRUZXh0U2l6ZUFkanVzdChib29sIGIpIHsgbV9zdGF0ZS5t
X2ZvbnREaXJ0eSB8PSBtX3N0YXRlLnN0eWxlKCktPnNldFRleHRTaXplQWRqdXN0KGIpOyB9Cisg
ICAgYm9vbCBoYXNQYXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5tX3BhcmVudE5v
ZGU7IH0KICAgICAKICAgICB2b2lkIGFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKHVuc2lnbmVkIGZp
cnN0TmV3LCBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mKTsKICAgICAKQEAgLTE2
Nyw4ICsyMDMsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZGV0ZXJtaW5lU3R5bGVzaGVl
dFNlbGVjdG9yU2NvcGVzKFN0eWxlU2hlZXRDb250ZW50cyosIEhhc2hTZXQ8QXRvbWljU3RyaW5n
SW1wbCo+JiBpZFNjb3BlcywgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNzU2NvcGVz
KTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCosIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VVRE8pOwotICAgIHZv
aWQgaW5pdEVsZW1lbnQoRWxlbWVudCopOwogICAgIHZvaWQgY29sbGVjdEZlYXR1cmVzKCk7CiAg
ICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7CiAgICAgYm9vbCBtYXRjaGVzUnVs
ZVNldChSdWxlU2V0Kik7CkBAIC0yMDcsOCArMjQxLDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBp
bnQgbGVnYWN5Rm9udFNpemUoRG9jdW1lbnQqLCBpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbCBzaG91
bGRVc2VGaXhlZERlZmF1bHRTaXplKTsKIAogcHVibGljOgotICAgIHZvaWQgc2V0U3R5bGUoUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gcykgeyBtX3N0eWxlID0gczsgfSAvLyBVc2VkIGJ5IHRoZSBk
b2N1bWVudCB3aGVuIHNldHRpbmcgdXAgaXRzIHJvb3Qgc3R5bGUuCi0KICAgICB2b2lkIGFwcGx5
UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgUmVuZGVyU3R5bGUqKTsK
IAogICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQsIENT
U1ZhbHVlKik7CkBAIC0yMzcsOCArMjY5LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBhZmZlY3Rl
ZEJ5Vmlld3BvcnRDaGFuZ2UoKSBjb25zdDsKIAotICAgIHZvaWQgYWxsVmlzaXRlZFN0YXRlQ2hh
bmdlZCgpIHsgbV9jaGVja2VyLmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKTsgfQotICAgIHZvaWQg
dmlzaXRlZFN0YXRlQ2hhbmdlZChMaW5rSGFzaCB2aXNpdGVkSGFzaCkgeyBtX2NoZWNrZXIudmlz
aXRlZFN0YXRlQ2hhbmdlZCh2aXNpdGVkSGFzaCk7IH0KKyAgICB2b2lkIGFsbFZpc2l0ZWRTdGF0
ZUNoYW5nZWQoKSB7IG1fc3RhdGUubV9jaGVja2VyLmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKTsg
fQorICAgIHZvaWQgdmlzaXRlZFN0YXRlQ2hhbmdlZChMaW5rSGFzaCB2aXNpdGVkSGFzaCkgeyBt
X3N0YXRlLm1fY2hlY2tlci52aXNpdGVkU3RhdGVDaGFuZ2VkKHZpc2l0ZWRIYXNoKTsgfQogCiAg
ICAgdm9pZCBhZGRLZXlmcmFtZVN0eWxlKFBhc3NSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPik7
CiAKQEAgLTM4OCw3ICs0MjAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBtYXRjaFBhZ2VSdWxl
cyhNYXRjaFJlc3VsdCYsIFJ1bGVTZXQqLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBh
Z2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwogICAgIHZvaWQgbWF0Y2hQYWdlUnVsZXNGb3JM
aXN0KFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIG1hdGNoZWRSdWxlcywgY29uc3QgVmVjdG9yPFN0
eWxlUnVsZVBhZ2UqPiYsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3Qg
U3RyaW5nJiBwYWdlTmFtZSk7Ci0gICAgU2V0dGluZ3MqIGRvY3VtZW50U2V0dGluZ3MoKSB7IHJl
dHVybiBtX2NoZWNrZXIuZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsgfQorICAgIFNldHRpbmdzKiBk
b2N1bWVudFNldHRpbmdzKCkgeyByZXR1cm4gbV9zdGF0ZS5tX2NoZWNrZXIuZG9jdW1lbnQoKS0+
c2V0dGluZ3MoKTsgfQogCiAgICAgYm9vbCBpc0xlZnRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0
OwogICAgIGJvb2wgaXNSaWdodFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QgeyByZXR1cm4gIWlz
TGVmdFBhZ2UocGFnZUluZGV4KTsgfQpAQCAtNDc0LDMxICs1MDYsMTEgQEAgcHJpdmF0ZToKICAg
ICAvLyBtZXJnZSBzb3J0aW5nLgogICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiBtX21h
dGNoZWRSdWxlczsKIAotICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4gbV9ydWxlTGlzdDsK
LQotICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NQcm9wZXJ0eUlELCBSZWZQdHI8Q1NTVmFsdWU+ID4g
UGVuZGluZ0ltYWdlUHJvcGVydHlNYXA7Ci0gICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXAgbV9w
ZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzOwotCiAgICAgT3duUHRyPE1lZGlhUXVlcnlFdmFsdWF0b3I+
IG1fbWVkaXVtOwogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9yb290RGVmYXVsdFN0eWxlOwot
Ci0gICAgUHNldWRvSWQgbV9keW5hbWljUHNldWRvOwotCi0gICAgU2VsZWN0b3JDaGVja2VyIG1f
Y2hlY2tlcjsKLQotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKLSAgICBSZW5kZXJT
dHlsZSogbV9wYXJlbnRTdHlsZTsKLSAgICBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxl
OwotICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKLSAgICBTdHlsZWRFbGVtZW50KiBtX3N0eWxlZEVs
ZW1lbnQ7Ci0gICAgUmVuZGVyUmVnaW9uKiBtX3JlZ2lvbkZvclN0eWxpbmc7Ci0gICAgRUluc2lk
ZUxpbmsgbV9lbGVtZW50TGlua1N0YXRlOwotICAgIENvbnRhaW5lck5vZGUqIG1fcGFyZW50Tm9k
ZTsKLSAgICBDU1NWYWx1ZSogbV9saW5lSGVpZ2h0VmFsdWU7Ci0gICAgYm9vbCBtX2ZvbnREaXJ0
eTsKICAgICBib29sIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzOwotICAgIGJvb2wgbV9zYW1l
T3JpZ2luT25seTsKLSAgICBib29sIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50OworCisg
ICAgU3R5bGVSZXNvbHV0aW9uU3RhdGUgbV9zdGF0ZTsKIAogICAgIFJlZlB0cjxDU1NGb250U2Vs
ZWN0b3I+IG1fZm9udFNlbGVjdG9yOwogICAgIFZlY3RvcjxPd25QdHI8TWVkaWFRdWVyeVJlc3Vs
dD4gPiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184683</attachid>
            <date>2013-01-25 00:02:30 -0800</date>
            <delta_ts>2013-01-25 00:08:51 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-96421-20130125165920.patch</filename>
            <type>text/plain</type>
            <size>358110</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGIyMjYzZjgwZWQ0N2I3
ZDVlOWFlMzgyYWFjNDZkNGM5NjEzNGZlMi4uMDM3YmFmYjczOWNkYWIzMmY2NTVmYmFjN2JiYWYz
YmUwOTA4OTdkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwNyBAQAorMjAxMy0wMS0yNCAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgU3BsaXQgcGVyLXJl
c29sdmUgbG9naWMgb3V0IGZyb20gU3R5bGVSZXNvbHZlci4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NDIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50ZWQgY2xhc3MgU3R5bGVSZXNvbHZl
U3RhdGUgYW5kIG1vdmVkIGFsbCBtZW1iZXIgdmFyaWFibGVzCisgICAgICAgIHVzZWQgb25seSBm
b3IgcGVyLXJlc29sdmUgbG9naWMuCisgICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgdG8g
ZW5hYmxlIFN0eWxlUmVzb2x2ZXIgdG8gcmVzb2x2ZSBzdHlsZXMgb2YKKyAgICAgICAgbXVsdGlw
bGUgZWxlbWVudHMgaW4gcGFyYWxsZWwuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNhdXNl
IGp1c3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICBBZGRl
ZCBTdHlsZVJlc29sdmVTdGF0ZS5oLgorICAgICAgICAqIGNzcy9CYXNpY1NoYXBlRnVuY3Rpb25z
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0xlbmd0aCk6CisgICAgICAgIChXZWJD
b3JlOjpiYXNpY1NoYXBlRm9yVmFsdWUpOgorICAgICAgICAqIGNzcy9CYXNpY1NoYXBlRnVuY3Rp
b25zLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhT
dHlsZXNSZXNvbHZlZCk6CisgICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFsdWUuaDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoQ1NTR3JhZGllbnRWYWx1ZSk6CisgICAgICAgICogY3Nz
L0NTU1RvU3R5bGVNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFw
RmlsbEF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmls
bENsaXApOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbENvbXBvc2l0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBGaWxsT3JpZ2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjptYXBGaWxsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFw
OjptYXBGaWxsWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6Om1h
cEZpbGxZUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwTmlu
ZVBpZWNlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwTmluZVBp
ZWNlSW1hZ2VTbGljZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBOaW5l
UGllY2VJbWFnZVF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwTmlu
ZVBpZWNlSW1hZ2VSZXBlYXQpOgorICAgICAgICAqIGNzcy9DU1NUb1N0eWxlTWFwLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKENTU1RvU3R5bGVNYXApOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVG9TdHlsZU1hcDo6Q1NTVG9TdHlsZU1hcCk6CisgICAgICAgICogY3NzL1NWR0NTU1N0
eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlT
VkdQcm9wZXJ0eSk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hl
Y2thYmxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjptYXRj
aGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrKToKKyAg
ICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChTZWxlY3RvckNoZWNrZXIp
OgorICAgICAgICAoV2ViQ29yZTo6aXNGcmFtZUZvY3VzZWQpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjptYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyk6CisgICAgICAgICog
Y3NzL1N0eWxlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RXhw
YW5kaW5nOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5RXhwYW5kaW5nOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5RXhwYW5kaW5nOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlEZWZhdWx0QmFzZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U6OmFwcGx5VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU51bWJlcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5U3R5bGVJbWFnZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5QXV0bzo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eUF1dG86OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlBdXRvOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlDbGlwOjpjb252ZXJ0VG9MZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUNsaXA6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlDbGlwOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5Q2xpcDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5Q29sb3I6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlDb2xvcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUNvbG9yOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlDb2xvcjo6YXBwbHlDb2xvclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlEaXJlY3Rpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUxlbmd0aDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5U3RyaW5nOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlC
b3JkZXJSYWRpdXM6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eUZpbGxMYXllcjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5Rm9udDo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUZvbnQ6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlGb250OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlGb250U2l6ZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFNpemU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRXZWlnaHQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzOjphcHBseUluaGVyaXRWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVyZXM6
OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250
VmFyaWFudExpZ2F0dXJlczo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5Qm9yZGVySW1hZ2U6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyOjphcHBseUluaXRpYWxW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmll
cjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1h
Z2VTb3VyY2U6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNv
dW50ZXI6OmVtcHR5RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNv
dW50ZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlDb3VudGVyOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlD
dXJzb3I6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlDdXJzb3I6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJv
cGVydHlDdXJzb3I6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eVRleHRBbGlnbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
VGV4dERlY29yYXRpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eUxpbmVIZWlnaHQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eVBhZ2VTaXplOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5UGFnZVNpemU6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlQYWdlU2l6ZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5VGV4dEVtcGhhc2lzU3R5bGU6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RW1waGFzaXNTdHlsZTo6YXBwbHlJbml0aWFs
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRFbXBoYXNpc1N0eWxl
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eUFuaW1hdGlvbjo6bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlBbmltYXRpb246OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlBbmltYXRpb246OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlBbmltYXRpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6YXBwbHlJbml0aWFsVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6YXBwbHlWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5UmVzaXplOjphcHBseVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlWZXJ0aWNhbEFsaWduOjphcHBseVZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBc3BlY3RSYXRpbzo6YXBwbHlJbmhlcml0
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlvOjphcHBs
eUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QXNwZWN0UmF0
aW86OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVpvb206OnJl
c2V0RWZmZWN0aXZlWm9vbSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Wm9vbTo6
YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVpvb206
OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlab29t
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEaXNwbGF5Ojpp
c1ZhbGlkRGlzcGxheVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEaXNw
bGF5OjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
RGlzcGxheTo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eURpc3BsYXk6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eUNsaXBQYXRoOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlF
eGNsdXNpb25TaGFwZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5SW1hZ2VSZXNvbHV0aW9uOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5SW1hZ2VSZXNvbHV0aW9uOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5SW1hZ2VSZXNvbHV0aW9uOjphcHBseVZhbHVlKToK
KyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFByb3BlcnR5SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eUhhbmRsZXI6
OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5SGFuZGxlcjo6
YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlIYW5kbGVyOjph
cHBseVZhbHVlKToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlU3RhdGUuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFN0eWxlUmVzb2x2ZVN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpTdHlsZVJlc29sdmVTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlU3RhdGU6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZVN0YXRlOjpyb290RWxlbWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZVN0YXRlOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0
YXRlOjpzdHlsZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRl
Ojpkb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6cmVnaW9u
Rm9yU3R5bGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6bW9kZSk6
CisgICAgICAgIE1vdmVkIFN0eWxlUmVzb2x2ZXIncyBtb2RlIGZyb20gbV9zZWxlY3RvckNoZWNr
ZXIgdG8gU3R5bGVSZXNvbHZlU3RhdGUuCisgICAgICAgIFNvIHdlIGRvbid0IG5lZWQgdG8ga2Vl
cCBTZWxlY3RvckNoZWNrZXIgYXMgYSBtZW1iZXIgdmFyaWFibGUgb2YKKyAgICAgICAgU3R5bGVS
ZXNvbHZlci4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpwc2V1ZG9TdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6cGFyZW50Tm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6ZWxlbWVudExpbmtTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6ZGlzdHJpYnV0ZWRUb0luc2VydGlv
blBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRDYW5Vc2VG
YXN0UmVqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpjYW5Vc2VG
YXN0UmVqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0Um9vdEVsZW1lbnRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0RWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0RWxlbWVudExpbmtTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0UGFyZW50Tm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0UGFyZW50U3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNldERpc3RyaWJ1dGVkVG9JbnNl
cnRpb25Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0TW9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0UmVnaW9uRm9yU3R5
bGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0UHNldWRvU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OmZvbnREZXNjcmlwdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6cGFyZW50Rm9udERlc2Ny
aXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRGb250RGVz
Y3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNldFpvb20p
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNldEVmZmVjdGl2ZVpvb20p
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNldFRleHRTaXplQWRqdXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRXcml0aW5nTW9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0VGV4dE9yaWVudGF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRBcHBseVByb3BlcnR5
VG9SZWd1bGFyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNl
dEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlU3RhdGU6OmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6bWF0Y2hlZFJ1bGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRFbGVtZW50QWZmZWN0ZWRC
eUNsYXNzUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OmVsZW1l
bnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVT
dGF0ZTo6Y2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZVN0YXRlOjpwZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZVN0YXRlOjpwZW5kaW5nU1ZHRG9jdW1lbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRMaW5lSGVpZ2h0VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OmxpbmVIZWlnaHRWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6aGFzUGFyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0Rm9udERpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZVN0YXRlOjpmb250RGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlU3RhdGU6OmVuc3VyZVJ1bGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZVN0YXRlOjpydWxlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6
c2V0SGFzUGVuZGluZ1NoYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3Rh
dGU6Omhhc1BlbmRpbmdTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0
YXRlOjp1c2VTVkdab29tUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3Rh
dGU6Omhhc1VBQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0
ZTo6Ym9yZGVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6YmFj
a2dyb3VuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OmJhY2tn
cm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0SW5j
bHVkZUVtcHR5UnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNl
dFNhbWVPcmlnaW5Pbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpp
bmNsdWRlRW1wdHlSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6
c2FtZU9yaWdpbk9ubHkpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNv
bHZlcik6CisgICAgICAgIFNpbmNlIFN0eWxlUmVzb2x2ZVN0YXRlIHByb3ZpZGVzIGFsbCBpbmZv
cm1hdGlvbiwgbm8gbmVlZCB0byBoYXZlCisgICAgICAgIGFueSBpbnN0YW5jZSBvZiBDU1NUb1N0
eWxlTWFwIGFuZCBubyBuZWVkIHRvIG1ha2UgU2VsZWN0b3JDaGVja2VyCisgICAgICAgIGEgbWVt
YmVyIHZhcmlhYmxlIG9mIFN0eWxlUmVzb2x2ZXIuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9z
dFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzb3J0TWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6aW5pdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6aW5pdEZvclN0eWxlUmVzb2x2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2wpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxl
QWZmZWN0aW5nQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpj
YW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6ZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnN0eWxlRm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6a2V5
ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnN0eWxlRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpkZWZh
dWx0U3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFk
anVzdFJlbmRlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnVwZGF0
ZUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxl
c0ZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cnVsZU1hdGNo
ZXMpOgorICAgICAgICBtX2R5bmFtaWNQc2V1ZG8gaXMgdXNlZCBiZXR3ZWVuIHRoaXMgcnVsZU1h
dGNoZXMgYW5kCisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdC4gU28gYWRkZWQg
b25lIHBhcmFtZXRlciB0byByZXR1cm4KKyAgICAgICAgd2hhdCBkeW5hbWljIHBzZXVkbyBhbiBl
bGVtZW50IG1hdGNoZXMuIFJlbW92ZWQgbV9keW5hbWljUHNldWRvCisgICAgICAgIGZyb20gU3R5
bGVSZXNvbHZlci4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9u
U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6aXNMZWZ0UGFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5V2l0aFZhbHVlQ2hl
Y2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlGb250UHJvcGVy
dHlUb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0JyZWFkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR3JpZFRyYWNrTWluTWF4KToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUdyaWRUcmFja0dyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRU
cmFja0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlh
Ymxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdGcm9tVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVB
ZGp1c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3Jab29tQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0Zh
bWlseUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjppbml0aWFsaXpl
Rm9udFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9j
dW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ1N0eWxlU2hh
ZGVyRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5k
aW5nU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3Rv
bUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1Jlc291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3Nz
L1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6YWRkTWF0Y2hlZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6aXNSaWdodFBhZ2UpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjp0b1N0eWxlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisKIDIwMTMtMDEtMjIgIEpv
c2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbmRleGVkREI6IFJl
bW92ZSBJREJLZXkgZnJvbSBXZWJLaXRJREwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmlu
ZGV4IGZmYTM5YWE0MzNkNDM2NzgwZTEzZTliYTRlOTg1ZDViYTEyMTJiMTcuLjQ3YzNkMDMwN2Yw
ZTY2YzhjZDQyNDAxNWU4MTBiZDkyODE4YzYzMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQpAQCAtMjY2OCw2ICsyNjY4LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVQcm9wZXJ0eVNob3J0aGFuZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3Bl
cnR5U2hvcnRoYW5kLmggXAorCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVTdGF0ZS5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUu
Y3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCmluZGV4IDlhNDg5ZTUxZTNmOTM5ODFlODIxMTQzOTZlNWJkNWVlMzk5
ZGFkM2YuLmQ1NDZhNjVmMGFhYTBkNTBjNDMzMTJhZDgxNjU4ZjQzYjQ0NmFjODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQpAQCAtMTUyOCw2ICsxNTI4LDcgQEAgSEVBREVSUyArPSBcCiAgICAgY3NzL1N0eWxlSW52
YWxpZGF0aW9uQW5hbHlzaXMuaCBcCiAgICAgY3NzL1N0eWxlUHJvcGVydHlTZXQuaCBcCiAgICAg
Y3NzL1N0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCBcCisgICAgY3NzL1N0eWxlUmVzb2x2ZVN0YXRl
LmggXAogICAgIGNzcy9TdHlsZVJlc29sdmVyLmggXAogICAgIGNzcy9TdHlsZVJ1bGUuaCBcCiAg
ICAgY3NzL1N0eWxlUnVsZUltcG9ydC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhYzIzNjRjMTg3
MTNkNzk5YTEzZTNjNWVlOTU2NmRiZWI2ZmQ1Zjc0Li44NGQwYzE5YzgxN2Y5YzkwN2IzNTllYmFh
MTI2ZWJjOWJhZGU0YWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xNTg4LDYgKzE1ODgsNyBAQAog
ICAgICAgICAgICAgJ2Nzcy9TdHlsZVByb3BlcnR5U2V0LmgnLAogICAgICAgICAgICAgJ2Nzcy9T
dHlsZVByb3BlcnR5U2hvcnRoYW5kLmNwcCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlUHJvcGVy
dHlTaG9ydGhhbmQuaCcsCisgICAgICAgICAgICAnY3NzL1N0eWxlUmVzb2x2ZVN0YXRlLmgnLAog
ICAgICAgICAgICAgJ2Nzcy9TdHlsZVJlc29sdmVyLmNwcCcsCiAgICAgICAgICAgICAnY3NzL1N0
eWxlUmVzb2x2ZXIuaCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlUnVsZS5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwCmluZGV4IDNhOGY3OTUzYjZmOTZi
MDEyZjg0MzIzN2EyZTEyYTBmZGY0Y2IxMjEuLjFiMzU5OTllZTE5M2Q2NDQxZTg5Y2JiMDk0NGRm
NjgxZjU4ZWY2ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVu
Y3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5j
cHAKQEAgLTEwMCwxMiArMTAwLDEyIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlRm9yQmFz
aWNTaGFwZShjb25zdCBCYXNpY1NoYXBlKiBiYXNpY1NoYXBlKQogICAgIHJldHVybiBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZTxQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+ID4oYmFzaWNTaGFw
ZVZhbHVlLnJlbGVhc2UoKSk7CiB9CiAKLXN0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKGNv
bnN0IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1
ZSkKK3N0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0
ZSwgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlKQogewotICAgIHJldHVybiB2YWx1ZS0+Y29udmVy
dFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBGaXhlZEZsb2F0Q29udmVyc2lvbiB8
IFBlcmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4oc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAgIHJldHVybiB2YWx1ZS0+
Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBGaXhlZEZsb2F0Q29udmVy
c2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4o
c3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCkpOwogfQogCi1QYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVG
b3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NCYXNp
Y1NoYXBlKiBiYXNpY1NoYXBlVmFsdWUpCitQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hh
cGVGb3JWYWx1ZShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIGNvbnN0IENTU0Jhc2ljU2hhcGUq
IGJhc2ljU2hhcGVWYWx1ZSkKIHsKICAgICBSZWZQdHI8QmFzaWNTaGFwZT4gYmFzaWNTaGFwZTsK
IApAQCAtMTE0LDE0ICsxMTQsMTQgQEAgUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBl
Rm9yVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgY28KICAgICAgICAg
Y29uc3QgQ1NTQmFzaWNTaGFwZVJlY3RhbmdsZSogcmVjdFZhbHVlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQ1NTQmFzaWNTaGFwZVJlY3RhbmdsZSAqPihiYXNpY1NoYXBlVmFsdWUpOwogICAgICAgICBS
ZWZQdHI8QmFzaWNTaGFwZVJlY3RhbmdsZT4gcmVjdCA9IEJhc2ljU2hhcGVSZWN0YW5nbGU6OmNy
ZWF0ZSgpOwogCi0gICAgICAgIHJlY3QtPnNldFgoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2
ZXIsIHJlY3RWYWx1ZS0+eCgpKSk7Ci0gICAgICAgIHJlY3QtPnNldFkoY29udmVydFRvTGVuZ3Ro
KHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+eSgpKSk7Ci0gICAgICAgIHJlY3QtPnNldFdpZHRo
KGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0VmFsdWUtPndpZHRoKCkpKTsKLSAg
ICAgICAgcmVjdC0+c2V0SGVpZ2h0KGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0
VmFsdWUtPmhlaWdodCgpKSk7CisgICAgICAgIHJlY3QtPnNldFgoY29udmVydFRvTGVuZ3RoKHN0
YXRlLCByZWN0VmFsdWUtPngoKSkpOworICAgICAgICByZWN0LT5zZXRZKGNvbnZlcnRUb0xlbmd0
aChzdGF0ZSwgcmVjdFZhbHVlLT55KCkpKTsKKyAgICAgICAgcmVjdC0+c2V0V2lkdGgoY29udmVy
dFRvTGVuZ3RoKHN0YXRlLCByZWN0VmFsdWUtPndpZHRoKCkpKTsKKyAgICAgICAgcmVjdC0+c2V0
SGVpZ2h0KGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdFZhbHVlLT5oZWlnaHQoKSkpOwogICAg
ICAgICBpZiAocmVjdFZhbHVlLT5yYWRpdXNYKCkpIHsKLSAgICAgICAgICAgIHJlY3QtPnNldENv
cm5lclJhZGl1c1goY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+cmFk
aXVzWCgpKSk7CisgICAgICAgICAgICByZWN0LT5zZXRDb3JuZXJSYWRpdXNYKGNvbnZlcnRUb0xl
bmd0aChzdGF0ZSwgcmVjdFZhbHVlLT5yYWRpdXNYKCkpKTsKICAgICAgICAgICAgIGlmIChyZWN0
VmFsdWUtPnJhZGl1c1koKSkKLSAgICAgICAgICAgICAgICByZWN0LT5zZXRDb3JuZXJSYWRpdXNZ
KGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0VmFsdWUtPnJhZGl1c1koKSkpOwor
ICAgICAgICAgICAgICAgIHJlY3QtPnNldENvcm5lclJhZGl1c1koY29udmVydFRvTGVuZ3RoKHN0
YXRlLCByZWN0VmFsdWUtPnJhZGl1c1koKSkpOwogICAgICAgICB9CiAgICAgICAgIGJhc2ljU2hh
cGUgPSByZWN0LnJlbGVhc2UoKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMzAsOSArMTMwLDkgQEAg
UGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUoY29uc3QgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlciwgY28KICAgICAgICAgY29uc3QgQ1NTQmFzaWNTaGFwZUNpcmNs
ZSogY2lyY2xlVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBDU1NCYXNpY1NoYXBlQ2lyY2xlICo+
KGJhc2ljU2hhcGVWYWx1ZSk7CiAgICAgICAgIFJlZlB0cjxCYXNpY1NoYXBlQ2lyY2xlPiBjaXJj
bGUgPSBCYXNpY1NoYXBlQ2lyY2xlOjpjcmVhdGUoKTsKIAotICAgICAgICBjaXJjbGUtPnNldENl
bnRlclgoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIGNpcmNsZVZhbHVlLT5jZW50ZXJY
KCkpKTsKLSAgICAgICAgY2lyY2xlLT5zZXRDZW50ZXJZKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJl
c29sdmVyLCBjaXJjbGVWYWx1ZS0+Y2VudGVyWSgpKSk7Ci0gICAgICAgIGNpcmNsZS0+c2V0UmFk
aXVzKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBjaXJjbGVWYWx1ZS0+cmFkaXVzKCkp
KTsKKyAgICAgICAgY2lyY2xlLT5zZXRDZW50ZXJYKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgY2ly
Y2xlVmFsdWUtPmNlbnRlclgoKSkpOworICAgICAgICBjaXJjbGUtPnNldENlbnRlclkoY29udmVy
dFRvTGVuZ3RoKHN0YXRlLCBjaXJjbGVWYWx1ZS0+Y2VudGVyWSgpKSk7CisgICAgICAgIGNpcmNs
ZS0+c2V0UmFkaXVzKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgY2lyY2xlVmFsdWUtPnJhZGl1cygp
KSk7CiAKICAgICAgICAgYmFzaWNTaGFwZSA9IGNpcmNsZS5yZWxlYXNlKCk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtMTQxLDEwICsxNDEsMTAgQEAgUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1No
YXBlRm9yVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgY28KICAgICAg
ICAgY29uc3QgQ1NTQmFzaWNTaGFwZUVsbGlwc2UqIGVsbGlwc2VWYWx1ZSA9IHN0YXRpY19jYXN0
PGNvbnN0IENTU0Jhc2ljU2hhcGVFbGxpcHNlICo+KGJhc2ljU2hhcGVWYWx1ZSk7CiAgICAgICAg
IFJlZlB0cjxCYXNpY1NoYXBlRWxsaXBzZT4gZWxsaXBzZSA9IEJhc2ljU2hhcGVFbGxpcHNlOjpj
cmVhdGUoKTsKIAotICAgICAgICBlbGxpcHNlLT5zZXRDZW50ZXJYKGNvbnZlcnRUb0xlbmd0aChz
dHlsZVJlc29sdmVyLCBlbGxpcHNlVmFsdWUtPmNlbnRlclgoKSkpOwotICAgICAgICBlbGxpcHNl
LT5zZXRDZW50ZXJZKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBlbGxpcHNlVmFsdWUt
PmNlbnRlclkoKSkpOwotICAgICAgICBlbGxpcHNlLT5zZXRSYWRpdXNYKGNvbnZlcnRUb0xlbmd0
aChzdHlsZVJlc29sdmVyLCBlbGxpcHNlVmFsdWUtPnJhZGl1c1goKSkpOwotICAgICAgICBlbGxp
cHNlLT5zZXRSYWRpdXNZKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBlbGxpcHNlVmFs
dWUtPnJhZGl1c1koKSkpOworICAgICAgICBlbGxpcHNlLT5zZXRDZW50ZXJYKGNvbnZlcnRUb0xl
bmd0aChzdGF0ZSwgZWxsaXBzZVZhbHVlLT5jZW50ZXJYKCkpKTsKKyAgICAgICAgZWxsaXBzZS0+
c2V0Q2VudGVyWShjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIGVsbGlwc2VWYWx1ZS0+Y2VudGVyWSgp
KSk7CisgICAgICAgIGVsbGlwc2UtPnNldFJhZGl1c1goY29udmVydFRvTGVuZ3RoKHN0YXRlLCBl
bGxpcHNlVmFsdWUtPnJhZGl1c1goKSkpOworICAgICAgICBlbGxpcHNlLT5zZXRSYWRpdXNZKGNv
bnZlcnRUb0xlbmd0aChzdGF0ZSwgZWxsaXBzZVZhbHVlLT5yYWRpdXNZKCkpKTsKIAogICAgICAg
ICBiYXNpY1NoYXBlID0gZWxsaXBzZS5yZWxlYXNlKCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTU2
LDcgKzE1Niw3IEBAIFBhc3NSZWZQdHI8QmFzaWNTaGFwZT4gYmFzaWNTaGFwZUZvclZhbHVlKGNv
bnN0IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIGNvCiAgICAgICAgIHBvbHlnb24tPnNl
dFdpbmRSdWxlKHBvbHlnb25WYWx1ZS0+d2luZFJ1bGUoKSk7CiAgICAgICAgIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+ID4mIHZhbHVlcyA9IHBvbHlnb25WYWx1ZS0+dmFs
dWVzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyBp
ICs9IDIpCi0gICAgICAgICAgICBwb2x5Z29uLT5hcHBlbmRQb2ludChjb252ZXJ0VG9MZW5ndGgo
c3R5bGVSZXNvbHZlciwgdmFsdWVzLmF0KGkpLmdldCgpKSwgY29udmVydFRvTGVuZ3RoKHN0eWxl
UmVzb2x2ZXIsIHZhbHVlcy5hdChpICsgMSkuZ2V0KCkpKTsKKyAgICAgICAgICAgIHBvbHlnb24t
PmFwcGVuZFBvaW50KGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgdmFsdWVzLmF0KGkpLmdldCgpKSwg
Y29udmVydFRvTGVuZ3RoKHN0YXRlLCB2YWx1ZXMuYXQoaSArIDEpLmdldCgpKSk7CiAKICAgICAg
ICAgYmFzaWNTaGFwZSA9IHBvbHlnb24ucmVsZWFzZSgpOwogICAgICAgICBicmVhazsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25zLmggYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5oCmluZGV4IGQzNjA3ZTkwOTkyOWMzNDFi
MGMwNjlkM2U1Y2ViNjFmMTNmMTE3MTkuLjgxYjJjYWEzNTdiNzQxZmEyMzg0NjFmMDcyOTNhMDZk
OThjYzljNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rp
b25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuaApAQCAt
MzcsMTAgKzM3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEJhc2ljU2hhcGU7CiBj
bGFzcyBDU1NCYXNpY1NoYXBlOwogY2xhc3MgQ1NTVmFsdWU7Ci1jbGFzcyBTdHlsZVJlc29sdmVy
OworY2xhc3MgU3R5bGVSZXNvbHZlU3RhdGU7CiAKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVl
Rm9yQmFzaWNTaGFwZShjb25zdCBCYXNpY1NoYXBlKik7Ci1QYXNzUmVmUHRyPEJhc2ljU2hhcGU+
IGJhc2ljU2hhcGVGb3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyKiwgY29uc3QgQ1NTQmFzaWNT
aGFwZSopOworUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUoU3R5bGVS
ZXNvbHZlU3RhdGUmLCBjb25zdCBDU1NCYXNpY1NoYXBlKik7CiAKIH0KICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCmluZGV4IGYxNTE4ZDhkYWM3NDgwYzRlMjM5
N2U1MmRmYTk0MmJjZThkYzZhODEuLmMyY2U5MjA3MGMxZjFmYjgxMjBiYjNmOTJmZWU4Y2VhNjk3
YzI2MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKQEAgLTExNSwx
MSArMTE1LDExIEBAIHN0cnVjdCBHcmFkaWVudFN0b3AgewogICAgIHsgfQogfTsKIAotUGFzc1Jl
ZlB0cjxDU1NHcmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhTdHls
ZXNSZXNvbHZlZChTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorUGFzc1JlZlB0cjxDU1NH
cmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZl
ZChTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiB7CiAgICAgYm9vbCBkZXJpdmVkID0gZmFsc2U7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RvcHMuc2l6ZSgpOyBpKyspCi0gICAg
ICAgIGlmIChzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZUlzRGVyaXZlZEZy
b21FbGVtZW50KG1fc3RvcHNbaV0ubV9jb2xvci5nZXQoKSkpIHsKKyAgICAgICAgaWYgKFN0eWxl
UmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlSXNEZXJpdmVkRnJvbUVsZW1lbnQobV9z
dG9wc1tpXS5tX2NvbG9yLmdldCgpKSkgewogICAgICAgICAgICAgbV9zdG9wc1tpXS5tX2NvbG9y
SXNEZXJpdmVkRnJvbUVsZW1lbnQgPSB0cnVlOwogICAgICAgICAgICAgZGVyaXZlZCA9IHRydWU7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTEzOCw3ICsxMzgsNyBAQCBQYXNzUmVmUHRyPENTU0dy
YWRpZW50VmFsdWU+IENTU0dyYWRpZW50VmFsdWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVk
KFN0eWxlUgogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHQtPm1f
c3RvcHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHJlc3VsdC0+bV9zdG9wc1tpXS5tX3Jlc29sdmVk
Q29sb3IgPSBzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShyZXN1bHQtPm1f
c3RvcHNbaV0ubV9jb2xvci5nZXQoKSk7CisgICAgICAgIHJlc3VsdC0+bV9zdG9wc1tpXS5tX3Jl
c29sdmVkQ29sb3IgPSBTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShzdGF0
ZSwgcmVzdWx0LT5tX3N0b3BzW2ldLm1fY29sb3IuZ2V0KCkpOwogCiAgICAgcmV0dXJuIHJlc3Vs
dC5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGll
bnRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAppbmRleCA2
ZjAwNTM1OTA3ZTE1Nzc5YTA4MDI3MmM4ODZmZDZiODA5N2M4MDBkLi4wYjcyZTJhZTYyZGEwODIz
ZjZkM2ZiZTYxNmE3YTUxMzgyNTllMmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTR3JhZGllbnRWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZh
bHVlLmgKQEAgLTM1LDYgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGbG9h
dFBvaW50OwogY2xhc3MgR3JhZGllbnQ7CitjbGFzcyBTdHlsZVJlc29sdmVTdGF0ZTsKIAogZW51
bSBDU1NHcmFkaWVudFR5cGUgewogICAgIENTU0RlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudCwKQEAg
LTg0LDcgKzg1LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzQWxwaGEoY29uc3QgUmVuZGVyT2Jq
ZWN0KikgY29uc3Q7CiAKICAgICB2b2lkIGxvYWRTdWJpbWFnZXMoQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIqKSB7IH0KLSAgICBQYXNzUmVmUHRyPENTU0dyYWRpZW50VmFsdWU+IGdyYWRpZW50V2l0aFN0
eWxlc1Jlc29sdmVkKFN0eWxlUmVzb2x2ZXIqKTsKKyAgICBQYXNzUmVmUHRyPENTU0dyYWRpZW50
VmFsdWU+IGdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlUmVzb2x2ZVN0YXRlJik7CiAK
IHByb3RlY3RlZDoKICAgICBDU1NHcmFkaWVudFZhbHVlKENsYXNzVHlwZSBjbGFzc1R5cGUsIENT
U0dyYWRpZW50UmVwZWF0IHJlcGVhdCwgQ1NTR3JhZGllbnRUeXBlIGdyYWRpZW50VHlwZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAppbmRleCAwMjQ0ZDhhM2FkNTc4ZjZlMTNmNmNk
MWRiZTZhOGQyNDNlZDgwN2IwLi4yY2RjZWM3ZDExMDQyNmJkYzEyOWEzMjM5MTAzOWFmMTU2ZTQ0
MGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCkBAIC00MSwyNyArNDEsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpz
dHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVzb2x2ZXItPnN0eWxlKCk7Ci19Ci0gICAg
Ci1SZW5kZXJTdHlsZSogQ1NTVG9TdHlsZU1hcDo6cm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fcmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKTsKLX0KLQotYm9vbCBD
U1NUb1N0eWxlTWFwOjp1c2VTVkdab29tUnVsZXMoKSBjb25zdAotewotICAgIHJldHVybiBtX3Jl
c29sdmVyLT51c2VTVkdab29tUnVsZXMoKTsKLX0KLSAgICAKLVBhc3NSZWZQdHI8U3R5bGVJbWFn
ZT4gQ1NTVG9TdHlsZU1hcDo6c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQsIENT
U1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+c3R5bGVJbWFnZShwcm9w
ZXJ0eUlkLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEF0dGFjaG1l
bnQoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9p
ZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsQXR0YWNobWVudChTdHlsZVJlc29sdmVTdGF0ZSYsIENT
U1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBp
ZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKICAgICAgICAgbGF5ZXItPnNldEF0dGFjaG1l
bnQoRmlsbExheWVyOjppbml0aWFsRmlsbEF0dGFjaG1lbnQobGF5ZXItPnR5cGUoKSkpOwpAQCAt
ODcsNyArNjcsNyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxBdHRhY2htZW50KENTU1By
b3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKgogICAgIH0KIH0KIAotdm9pZCBD
U1NUb1N0eWxlTWFwOjptYXBGaWxsQ2xpcChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVy
LCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxDbGlwKFN0eWxl
UmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUq
IHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewogICAgICAgICBs
YXllci0+c2V0Q2xpcChGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQ2xpcChsYXllci0+dHlwZSgpKSk7
CkBAIC0xMDEsNyArODEsNyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxDbGlwKENTU1By
b3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZQogICAgIGxheWVyLT5z
ZXRDbGlwKCpwcmltaXRpdmVWYWx1ZSk7CiB9CiAKLXZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmls
bENvbXBvc2l0ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFs
dWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxDb21wb3NpdGUoU3R5bGVSZXNvbHZlU3Rh
dGUmLCBDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiB7
CiAgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CiAgICAgICAgIGxheWVyLT5zZXRD
b21wb3NpdGUoRmlsbExheWVyOjppbml0aWFsRmlsbENvbXBvc2l0ZShsYXllci0+dHlwZSgpKSk7
CkBAIC0xMTUsNyArOTUsNyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxDb21wb3NpdGUo
Q1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqCiAgICAgbGF5ZXItPnNl
dENvbXBvc2l0ZSgqcHJpbWl0aXZlVmFsdWUpOwogfQogCi12b2lkIENTU1RvU3R5bGVNYXA6Om1h
cEZpbGxPcmlnaW4oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZh
bHVlKQordm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsT3JpZ2luKFN0eWxlUmVzb2x2ZVN0YXRl
JiwgQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogewog
ICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewogICAgICAgICBsYXllci0+c2V0T3Jp
Z2luKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxPcmlnaW4obGF5ZXItPnR5cGUoKSkpOwpAQCAtMTMw
LDE3ICsxMTAsMTcgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsT3JpZ2luKENTU1Byb3Bl
cnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWwKIH0KIAogCi12b2lkIENTU1Rv
U3R5bGVNYXA6Om1hcEZpbGxJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBGaWxsTGF5ZXIq
IGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxJbWFn
ZShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIEZpbGxM
YXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzSW5pdGlh
bFZhbHVlKCkpIHsKICAgICAgICAgbGF5ZXItPnNldEltYWdlKEZpbGxMYXllcjo6aW5pdGlhbEZp
bGxJbWFnZShsYXllci0+dHlwZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBs
YXllci0+c2V0SW1hZ2Uoc3R5bGVJbWFnZShwcm9wZXJ0eSwgdmFsdWUpKTsKKyAgICBsYXllci0+
c2V0SW1hZ2UoU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShzdGF0ZSwgcHJvcGVydHksIHZhbHVl
KSk7CiB9CiAKLXZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFJlcGVhdFgoQ1NTUHJvcGVydHlJ
RCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBDU1NUb1N0eWxlTWFw
OjptYXBGaWxsUmVwZWF0WChTdHlsZVJlc29sdmVTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIEZpbGxM
YXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzSW5pdGlh
bFZhbHVlKCkpIHsKICAgICAgICAgbGF5ZXItPnNldFJlcGVhdFgoRmlsbExheWVyOjppbml0aWFs
RmlsbFJlcGVhdFgobGF5ZXItPnR5cGUoKSkpOwpAQCAtMTU0LDcgKzEzNCw3IEBAIHZvaWQgQ1NT
VG9TdHlsZU1hcDo6bWFwRmlsbFJlcGVhdFgoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXll
ciwgQ1NTVmFsdWUqIHZhCiAgICAgbGF5ZXItPnNldFJlcGVhdFgoKnByaW1pdGl2ZVZhbHVlKTsK
IH0KIAotdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WShDU1NQcm9wZXJ0eUlELCBG
aWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1h
cEZpbGxSZXBlYXRZKFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgRmlsbExheWVy
KiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFs
dWUoKSkgewogICAgICAgICBsYXllci0+c2V0UmVwZWF0WShGaWxsTGF5ZXI6OmluaXRpYWxGaWxs
UmVwZWF0WShsYXllci0+dHlwZSgpKSk7CkBAIC0xNjgsNyArMTQ4LDcgQEAgdm9pZCBDU1NUb1N0
eWxlTWFwOjptYXBGaWxsUmVwZWF0WShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBD
U1NWYWx1ZSogdmEKICAgICBsYXllci0+c2V0UmVwZWF0WSgqcHJpbWl0aXZlVmFsdWUpOwogfQog
Ci12b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxTaXplKENTU1Byb3BlcnR5SUQsIEZpbGxMYXll
ciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFNp
emUoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxh
eWVyLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKSB7CiAgICAgICAgIGxheWVyLT5zZXRTaXplVHlwZShTaXplTm9uZSk7CkBAIC0xOTAsNyAr
MTcwLDcgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsU2l6ZShDU1NQcm9wZXJ0eUlELCBG
aWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisgICAg
ZmxvYXQgem9vbUZhY3RvciA9IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKIAogICAg
IExlbmd0aCBmaXJzdExlbmd0aDsKICAgICBMZW5ndGggc2Vjb25kTGVuZ3RoOwpAQCAtMTk4LDEw
ICsxNzgsMTAgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsU2l6ZShDU1NQcm9wZXJ0eUlE
LCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUKICAgICBpZiAoUGFpciogcGFpciA9
IHByaW1pdGl2ZVZhbHVlLT5nZXRQYWlyVmFsdWUoKSkgewogICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogZmlyc3QgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBhaXItPmZpcnN0
KCkpOwogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPihwYWlyLT5zZWNvbmQoKSk7Ci0gICAgICAgIGZpcnN0TGVuZ3RoID0g
Zmlyc3QtPmNvbnZlcnRUb0xlbmd0aDxBbnlDb252ZXJzaW9uPihzdHlsZSgpLCByb290RWxlbWVu
dFN0eWxlKCksIHpvb21GYWN0b3IpOwotICAgICAgICBzZWNvbmRMZW5ndGggPSBzZWNvbmQtPmNv
bnZlcnRUb0xlbmd0aDxBbnlDb252ZXJzaW9uPihzdHlsZSgpLCByb290RWxlbWVudFN0eWxlKCks
IHpvb21GYWN0b3IpOworICAgICAgICBmaXJzdExlbmd0aCA9IGZpcnN0LT5jb252ZXJ0VG9MZW5n
dGg8QW55Q29udmVyc2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgp
LCB6b29tRmFjdG9yKTsKKyAgICAgICAgc2Vjb25kTGVuZ3RoID0gc2Vjb25kLT5jb252ZXJ0VG9M
ZW5ndGg8QW55Q29udmVyc2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHls
ZSgpLCB6b29tRmFjdG9yKTsKICAgICB9IGVsc2UgewotICAgICAgICBmaXJzdExlbmd0aCA9IHBy
aW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8QW55Q29udmVyc2lvbj4oc3R5bGUoKSwgcm9v
dEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgZmlyc3RMZW5ndGggPSBwcmlt
aXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KHN0YXRlLnN0eWxlKCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CiAgICAgICAgIHNlY29uZExl
bmd0aCA9IExlbmd0aCgpOwogICAgIH0KIApAQCAtMjEzLDcgKzE5Myw3IEBAIHZvaWQgQ1NTVG9T
dHlsZU1hcDo6bWFwRmlsbFNpemUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NT
VmFsdWUqIHZhbHVlCiAgICAgbGF5ZXItPnNldFNpemVMZW5ndGgoYik7CiB9CiAKLXZvaWQgQ1NT
VG9TdHlsZU1hcDo6bWFwRmlsbFhQb3NpdGlvbihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEZp
bGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFw
RmlsbFhQb3NpdGlvbihTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2
YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewogICAgICAgICBsYXllci0+c2V0WFBvc2l0aW9uKEZp
bGxMYXllcjo6aW5pdGlhbEZpbGxYUG9zaXRpb24obGF5ZXItPnR5cGUoKSkpOwpAQCAtMjIzLDcg
KzIwMyw3IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFhQb3NpdGlvbihDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsCiAgICAgaWYgKCF2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmbG9hdCB6b29tRmFjdG9yID0g
c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdGF0ZS5z
dHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CiAKICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICBQ
YWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1ZSgpOwpAQCAtMjM0LDExICsy
MTQsMTEgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsWFBvc2l0aW9uKENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwKIAogICAgIExlbmd0aCBsZW5ndGg7CiAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQotICAgICAgICBsZW5ndGggPSBwcmlt
aXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIHJvb3RFbGVtZW50U3R5
bGUoKSwgem9vbUZhY3Rvcik7CisgICAgICAgIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21w
dXRlTGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgp
LCB6b29tRmFjdG9yKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdl
KCkpCiAgICAgICAgIGxlbmd0aCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFs
dWUoKSwgUGVyY2VudCk7CiAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRl
ZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgIGxlbmd0aCA9IExlbmd0aChwcmltaXRp
dmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxlKCksIHJvb3RFbGVtZW50
U3R5bGUoKSwgem9vbUZhY3RvcikpOworICAgICAgICBsZW5ndGggPSBMZW5ndGgocHJpbWl0aXZl
VmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5y
b290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKICAgICAgICAgbGVuZ3RoID0gcHJp
bWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpOwogICAgIGVsc2UKQEAgLTI0
OSw3ICsyMjksNyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxYUG9zaXRpb24oQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLAogICAgICAgICBsYXllci0+c2V0
QmFja2dyb3VuZFhPcmlnaW4oKihwYWlyLT5maXJzdCgpKSk7CiB9CiAKLXZvaWQgQ1NTVG9TdHls
ZU1hcDo6bWFwRmlsbFlQb3NpdGlvbihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEZpbGxMYXll
ciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFlQ
b3NpdGlvbihTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+
aXNJbml0aWFsVmFsdWUoKSkgewogICAgICAgICBsYXllci0+c2V0WVBvc2l0aW9uKEZpbGxMYXll
cjo6aW5pdGlhbEZpbGxZUG9zaXRpb24obGF5ZXItPnR5cGUoKSkpOwpAQCAtMjU5LDcgKzIzOSw3
IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFlQb3NpdGlvbihDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsCiAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmbG9hdCB6b29tRmFjdG9yID0gc3R5bGUo
KS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdGF0ZS5zdHlsZSgp
LT5lZmZlY3RpdmVab29tKCk7CiAKICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICBQYWlyKiBw
YWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1ZSgpOwpAQCAtMjcwLDExICsyNTAsMTEg
QEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsWVBvc2l0aW9uKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgRmlsbExheWVyKiBsYXllciwKIAogICAgIExlbmd0aCBsZW5ndGg7CiAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQotICAgICAgICBsZW5ndGggPSBwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUoKSwg
em9vbUZhY3Rvcik7CisgICAgICAgIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVu
Z3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29t
RmFjdG9yKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCiAg
ICAgICAgIGxlbmd0aCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwg
UGVyY2VudCk7CiAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNl
bnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgIGxlbmd0aCA9IExlbmd0aChwcmltaXRpdmVWYWx1
ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUo
KSwgem9vbUZhY3RvcikpOworICAgICAgICBsZW5ndGggPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUt
PmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlKCksIHpvb21GYWN0b3IpKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+
aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKICAgICAgICAgbGVuZ3RoID0gcHJpbWl0aXZl
VmFsdWUtPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpOwogICAgIGVsc2UKQEAgLTQ4NSw3ICs0
NjUsNyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKEFu
aW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdgogICAgICAgICBhbmltYXRpb24tPnNldFRp
bWluZ0Z1bmN0aW9uKExpbmVhclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CiB9CiAKLXZvaWQg
Q1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwg
Q1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCit2b2lkIENTU1RvU3R5bGVN
YXA6Om1hcE5pbmVQaWVjZUltYWdlKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCiB7
CiAgICAgLy8gSWYgd2UncmUgbm90IGEgdmFsdWUgbGlzdCwgdGhlbiB3ZSBhcmUgIm5vbmUiIGFu
ZCBkb24ndCBuZWVkIHRvIGFsdGVyIHRoZSBlbXB0eSBpbWFnZSBhdCBhbGwuCiAgICAgaWYgKCF2
YWx1ZSB8fCAhdmFsdWUtPmlzVmFsdWVMaXN0KCkpCkBAIC01MTEsMjUgKzQ5MSwyNSBAQCB2b2lk
IENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHks
IENTU1ZhbHVlKiB2YWx1ZSwgTgogICAgICAgICAgICAgfHwgY3VycmVudC0+aXNJbWFnZVNldFZh
bHVlKCkKICNlbmRpZgogICAgICAgICAgICAgKQotICAgICAgICAgICAgaW1hZ2Uuc2V0SW1hZ2Uo
c3R5bGVJbWFnZShpbWFnZVByb3BlcnR5LCBjdXJyZW50KSk7CisgICAgICAgICAgICBpbWFnZS5z
ZXRJbWFnZShTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKHN0YXRlLCBpbWFnZVByb3BlcnR5LCBj
dXJyZW50KSk7CiAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnQtPmlzQm9yZGVySW1hZ2VTbGljZVZh
bHVlKCkpCi0gICAgICAgICAgICBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKGN1cnJlbnQsIGltYWdl
KTsKKyAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlU2xpY2Uoc3RhdGUsIGN1cnJlbnQsIGlt
YWdlKTsKICAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aXNWYWx1ZUxpc3QoKSkgewogICAgICAg
ICAgICAgQ1NTVmFsdWVMaXN0KiBzbGFzaExpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3Qq
PihjdXJyZW50KTsKICAgICAgICAgICAgIC8vIE1hcCBpbiB0aGUgaW1hZ2Ugc2xpY2VzLgogICAg
ICAgICAgICAgaWYgKHNsYXNoTGlzdC0+aXRlbSgwKSAmJiBzbGFzaExpc3QtPml0ZW0oMCktPmlz
Qm9yZGVySW1hZ2VTbGljZVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgbWFwTmluZVBpZWNlSW1h
Z2VTbGljZShzbGFzaExpc3QtPml0ZW0oMCksIGltYWdlKTsKKyAgICAgICAgICAgICAgICBtYXBO
aW5lUGllY2VJbWFnZVNsaWNlKHN0YXRlLCBzbGFzaExpc3QtPml0ZW0oMCksIGltYWdlKTsKIAog
ICAgICAgICAgICAgLy8gTWFwIGluIHRoZSBib3JkZXIgc2xpY2VzLgogICAgICAgICAgICAgaWYg
KHNsYXNoTGlzdC0+aXRlbSgxKSkKLSAgICAgICAgICAgICAgICBpbWFnZS5zZXRCb3JkZXJTbGlj
ZXMobWFwTmluZVBpZWNlSW1hZ2VRdWFkKHNsYXNoTGlzdC0+aXRlbSgxKSkpOworICAgICAgICAg
ICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyhtYXBOaW5lUGllY2VJbWFnZVF1YWQoc3RhdGUs
IHNsYXNoTGlzdC0+aXRlbSgxKSkpOwogCiAgICAgICAgICAgICAvLyBNYXAgaW4gdGhlIG91dHNl
dC4KICAgICAgICAgICAgIGlmIChzbGFzaExpc3QtPml0ZW0oMikpCi0gICAgICAgICAgICAgICAg
aW1hZ2Uuc2V0T3V0c2V0KG1hcE5pbmVQaWVjZUltYWdlUXVhZChzbGFzaExpc3QtPml0ZW0oMikp
KTsKKyAgICAgICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQobWFwTmluZVBpZWNlSW1hZ2VRdWFk
KHN0YXRlLCBzbGFzaExpc3QtPml0ZW0oMikpKTsKICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAgICAgIC8vIFNldCB0aGUgYXBwcm9wcmlh
dGUgcnVsZXMgZm9yIHN0cmV0Y2gvcm91bmQvcmVwZWF0IG9mIHRoZSBzbGljZXMuCi0gICAgICAg
ICAgICBtYXBOaW5lUGllY2VJbWFnZVJlcGVhdChjdXJyZW50LCBpbWFnZSk7CisgICAgICAgICAg
ICBtYXBOaW5lUGllY2VJbWFnZVJlcGVhdChzdGF0ZSwgY3VycmVudCwgaW1hZ2UpOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC01MzgsMTcgKzUxOCwxNyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1h
cE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSwg
TgogICAgICAgICAvLyBhbHNvIHNldCB0aGUgYm9yZGVyIHdpZHRocy4gV2UgZG9uJ3QgbmVlZCB0
byB3b3JyeSBhYm91dCBwZXJjZW50YWdlcywgc2luY2Ugd2UgZG9uJ3QgZXZlbiBzdXBwb3J0CiAg
ICAgICAgIC8vIHRob3NlIG9uIHJlYWwgYm9yZGVycyB5ZXQuCiAgICAgICAgIGlmIChpbWFnZS5i
b3JkZXJTbGljZXMoKS50b3AoKS5pc0ZpeGVkKCkpCi0gICAgICAgICAgICBzdHlsZSgpLT5zZXRC
b3JkZXJUb3BXaWR0aChpbWFnZS5ib3JkZXJTbGljZXMoKS50b3AoKS52YWx1ZSgpKTsKKyAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJvcmRlclRvcFdpZHRoKGltYWdlLmJvcmRlclNsaWNl
cygpLnRvcCgpLnZhbHVlKCkpOwogICAgICAgICBpZiAoaW1hZ2UuYm9yZGVyU2xpY2VzKCkucmln
aHQoKS5pc0ZpeGVkKCkpCi0gICAgICAgICAgICBzdHlsZSgpLT5zZXRCb3JkZXJSaWdodFdpZHRo
KGltYWdlLmJvcmRlclNsaWNlcygpLnJpZ2h0KCkudmFsdWUoKSk7CisgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRCb3JkZXJSaWdodFdpZHRoKGltYWdlLmJvcmRlclNsaWNlcygpLnJpZ2h0
KCkudmFsdWUoKSk7CiAgICAgICAgIGlmIChpbWFnZS5ib3JkZXJTbGljZXMoKS5ib3R0b20oKS5p
c0ZpeGVkKCkpCi0gICAgICAgICAgICBzdHlsZSgpLT5zZXRCb3JkZXJCb3R0b21XaWR0aChpbWFn
ZS5ib3JkZXJTbGljZXMoKS5ib3R0b20oKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldEJvcmRlckJvdHRvbVdpZHRoKGltYWdlLmJvcmRlclNsaWNlcygpLmJvdHRvbSgp
LnZhbHVlKCkpOwogICAgICAgICBpZiAoaW1hZ2UuYm9yZGVyU2xpY2VzKCkubGVmdCgpLmlzRml4
ZWQoKSkKLSAgICAgICAgICAgIHN0eWxlKCktPnNldEJvcmRlckxlZnRXaWR0aChpbWFnZS5ib3Jk
ZXJTbGljZXMoKS5sZWZ0KCkudmFsdWUoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRCb3JkZXJMZWZ0V2lkdGgoaW1hZ2UuYm9yZGVyU2xpY2VzKCkubGVmdCgpLnZhbHVlKCkpOwog
ICAgIH0KIH0KIAotdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVNsaWNlKENT
U1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQordm9pZCBDU1NUb1N0eWxlTWFw
OjptYXBOaW5lUGllY2VJbWFnZVNsaWNlKFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTVmFsdWUqIHZh
bHVlLCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCiB7CiAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUt
PmlzQm9yZGVySW1hZ2VTbGljZVZhbHVlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTU4MSwxMyAr
NTYxLDEzIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VTbGljZShDU1NW
YWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnCiAgICAgaW1hZ2Uuc2V0RmlsbChib3Jk
ZXJJbWFnZVNsaWNlLT5tX2ZpbGwpOwogfQogCi1MZW5ndGhCb3ggQ1NTVG9TdHlsZU1hcDo6bWFw
TmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlKiB2YWx1ZSkKK0xlbmd0aEJveCBDU1NUb1N0eWxl
TWFwOjptYXBOaW5lUGllY2VJbWFnZVF1YWQoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NW
YWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUtPmlzUHJpbWl0aXZlVmFs
dWUoKSkKICAgICAgICAgcmV0dXJuIExlbmd0aEJveCgpOwogCiAgICAgLy8gR2V0IG91ciB6b29t
IHZhbHVlLgotICAgIGZsb2F0IHpvb20gPSB1c2VTVkdab29tUnVsZXMoKSA/IDEuMGYgOiBzdHls
ZSgpLT5lZmZlY3RpdmVab29tKCk7CisgICAgZmxvYXQgem9vbSA9IHN0YXRlLnVzZVNWR1pvb21S
dWxlcygpID8gMS4wZiA6IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKIAogICAgIC8v
IFJldHJpZXZlIHRoZSBwcmltaXRpdmUgdmFsdWUuCiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGJv
cmRlcldpZHRocyA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwpAQCAt
NjAwLDMzICs1ODAsMzMgQEAgTGVuZ3RoQm94IENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUlt
YWdlUXVhZChDU1NWYWx1ZSogdmFsdWUpCiAgICAgZWxzZSBpZiAoc2xpY2VzLT50b3AoKS0+aXNQ
ZXJjZW50YWdlKCkpCiAgICAgICAgIGJveC5tX3RvcCA9IExlbmd0aChzbGljZXMtPnRvcCgpLT5n
ZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpLCBQZXJjZW50
KTsKICAgICBlbHNlIGlmIChzbGljZXMtPnRvcCgpLT5nZXRJZGVudCgpICE9IENTU1ZhbHVlQXV0
bykKLSAgICAgICAgYm94Lm1fdG9wID0gc2xpY2VzLT50b3AoKS0+Y29tcHV0ZUxlbmd0aDxMZW5n
dGg+KHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7CisgICAgICAgIGJveC5tX3Rv
cCA9IHNsaWNlcy0+dG9wKCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBz
dGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb20pOwogCiAgICAgaWYgKHNsaWNlcy0+cmlnaHQo
KS0+aXNOdW1iZXIoKSkKICAgICAgICAgYm94Lm1fcmlnaHQgPSBMZW5ndGgoc2xpY2VzLT5yaWdo
dCgpLT5nZXRJbnRWYWx1ZSgpLCBSZWxhdGl2ZSk7CiAgICAgZWxzZSBpZiAoc2xpY2VzLT5yaWdo
dCgpLT5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgYm94Lm1fcmlnaHQgPSBMZW5ndGgoc2xpY2Vz
LT5yaWdodCgpLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRB
R0UpLCBQZXJjZW50KTsKICAgICBlbHNlIGlmIChzbGljZXMtPnJpZ2h0KCktPmdldElkZW50KCkg
IT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICBib3gubV9yaWdodCA9IHNsaWNlcy0+cmlnaHQoKS0+
Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7
CisgICAgICAgIGJveC5tX3JpZ2h0ID0gc2xpY2VzLT5yaWdodCgpLT5jb21wdXRlTGVuZ3RoPExl
bmd0aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tKTsKIAog
ICAgIGlmIChzbGljZXMtPmJvdHRvbSgpLT5pc051bWJlcigpKQogICAgICAgICBib3gubV9ib3R0
b20gPSBMZW5ndGgoc2xpY2VzLT5ib3R0b20oKS0+Z2V0SW50VmFsdWUoKSwgUmVsYXRpdmUpOwog
ICAgIGVsc2UgaWYgKHNsaWNlcy0+Ym90dG9tKCktPmlzUGVyY2VudGFnZSgpKQogICAgICAgICBi
b3gubV9ib3R0b20gPSBMZW5ndGgoc2xpY2VzLT5ib3R0b20oKS0+Z2V0RG91YmxlVmFsdWUoQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKSwgUGVyY2VudCk7CiAgICAgZWxzZSBpZiAo
c2xpY2VzLT5ib3R0b20oKS0+Z2V0SWRlbnQoKSAhPSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgIGJv
eC5tX2JvdHRvbSA9IHNsaWNlcy0+Ym90dG9tKCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHls
ZSgpLCByb290RWxlbWVudFN0eWxlKCksIHpvb20pOworICAgICAgICBib3gubV9ib3R0b20gPSBz
bGljZXMtPmJvdHRvbSgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwgc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tKTsKIAogICAgIGlmIChzbGljZXMtPmxlZnQoKS0+
aXNOdW1iZXIoKSkKICAgICAgICAgYm94Lm1fbGVmdCA9IExlbmd0aChzbGljZXMtPmxlZnQoKS0+
Z2V0SW50VmFsdWUoKSwgUmVsYXRpdmUpOwogICAgIGVsc2UgaWYgKHNsaWNlcy0+bGVmdCgpLT5p
c1BlcmNlbnRhZ2UoKSkKICAgICAgICAgYm94Lm1fbGVmdCA9IExlbmd0aChzbGljZXMtPmxlZnQo
KS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKSwgUGVy
Y2VudCk7CiAgICAgZWxzZSBpZiAoc2xpY2VzLT5sZWZ0KCktPmdldElkZW50KCkgIT0gQ1NTVmFs
dWVBdXRvKQotICAgICAgICBib3gubV9sZWZ0ID0gc2xpY2VzLT5sZWZ0KCktPmNvbXB1dGVMZW5n
dGg8TGVuZ3RoPihzdHlsZSgpLCByb290RWxlbWVudFN0eWxlKCksIHpvb20pOworICAgICAgICBi
b3gubV9sZWZ0ID0gc2xpY2VzLT5sZWZ0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5z
dHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb20pOwogCiAgICAgcmV0dXJuIGJv
eDsKIH0KIAotdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVJlcGVhdChDU1NW
YWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6
bWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NWYWx1ZSogdmFs
dWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKIHsKICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5
bGVNYXAuaAppbmRleCA2YmFiNDBiZmNkNzdlMTI1YWIwOGYwMDhmMTBlN2EzZTY4Mjc5MTRlLi44
YTU1YzRmMjg2OTcxYTkyNTAxNTk3M2VjNGFmNDI5NTFkZDkzOTEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NUb1N0eWxlTWFwLmgKQEAgLTMyLDU2ICszMiw0MSBAQCBjbGFzcyBDU1NWYWx1ZTsKIGNsYXNz
IEFuaW1hdGlvbjsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgU3R5bGVJbWFnZTsKLWNsYXNz
IFN0eWxlUmVzb2x2ZXI7CitjbGFzcyBTdHlsZVJlc29sdmVTdGF0ZTsKIGNsYXNzIE5pbmVQaWVj
ZUltYWdlOwogCiBjbGFzcyBDU1NUb1N0eWxlTWFwIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShDU1NUb1N0eWxlTWFwKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLQogcHVibGlj
OgotICAgIENTU1RvU3R5bGVNYXAoU3R5bGVSZXNvbHZlciogcmVzb2x2ZXIpIDogbV9yZXNvbHZl
cihyZXNvbHZlcikgeyB9Ci0KLSAgICB2b2lkIG1hcEZpbGxBdHRhY2htZW50KENTU1Byb3BlcnR5
SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBGaWxsQ2xpcChDU1NQcm9w
ZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwRmlsbENvbXBvc2l0
ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwRmls
bE9yaWdpbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgIHZvaWQg
bWFwRmlsbEltYWdlKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAg
dm9pZCBtYXBGaWxsUmVwZWF0WChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSop
OwotICAgIHZvaWQgbWFwRmlsbFJlcGVhdFkoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NT
VmFsdWUqKTsKLSAgICB2b2lkIG1hcEZpbGxTaXplKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllcios
IENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBGaWxsWFBvc2l0aW9uKENTU1Byb3BlcnR5SUQsIEZp
bGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBGaWxsWVBvc2l0aW9uKENTU1Byb3Bl
cnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgc3RhdGljIHZvaWQgbWFwRmlsbEF0
dGFjaG1lbnQoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBD
U1NWYWx1ZSopOworICAgIHN0YXRpYyB2b2lkIG1hcEZpbGxDbGlwKFN0eWxlUmVzb2x2ZVN0YXRl
JiwgQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICBzdGF0aWMgdm9p
ZCBtYXBGaWxsQ29tcG9zaXRlKFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgRmls
bExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICBzdGF0aWMgdm9pZCBtYXBGaWxsT3JpZ2luKFN0eWxl
UmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAg
ICBzdGF0aWMgdm9pZCBtYXBGaWxsSW1hZ2UoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0
eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAgIHN0YXRpYyB2b2lkIG1hcEZpbGxSZXBl
YXRYKFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFs
dWUqKTsKKyAgICBzdGF0aWMgdm9pZCBtYXBGaWxsUmVwZWF0WShTdHlsZVJlc29sdmVTdGF0ZSYs
IENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgc3RhdGljIHZvaWQg
bWFwRmlsbFNpemUoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIq
LCBDU1NWYWx1ZSopOworICAgIHN0YXRpYyB2b2lkIG1hcEZpbGxYUG9zaXRpb24oU3R5bGVSZXNv
bHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAgIHN0
YXRpYyB2b2lkIG1hcEZpbGxZUG9zaXRpb24oU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0
eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwogCi0gICAgdm9pZCBtYXBBbmltYXRpb25EZWxh
eShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwQW5pbWF0aW9uRGlyZWN0aW9u
KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBBbmltYXRpb25EdXJhdGlvbihB
bmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwQW5pbWF0aW9uRmlsbE1vZGUoQW5p
bWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50
KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBBbmltYXRpb25OYW1lKEFuaW1h
dGlvbiosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBBbmltYXRpb25QbGF5U3RhdGUoQW5pbWF0
aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1hdGlvblByb3BlcnR5KEFuaW1hdGlv
biosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBBbmltYXRpb25UaW1pbmdGdW5jdGlvbihBbmlt
YXRpb24qLCBDU1NWYWx1ZSopOworICAgIHN0YXRpYyB2b2lkIG1hcEFuaW1hdGlvbkRlbGF5KEFu
aW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgc3RhdGljIHZvaWQgbWFwQW5pbWF0aW9uRGlyZWN0
aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgc3RhdGljIHZvaWQgbWFwQW5pbWF0aW9u
RHVyYXRpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICBzdGF0aWMgdm9pZCBtYXBBbmlt
YXRpb25GaWxsTW9kZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAgIHN0YXRpYyB2b2lkIG1h
cEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgc3Rh
dGljIHZvaWQgbWFwQW5pbWF0aW9uTmFtZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAgIHN0
YXRpYyB2b2lkIG1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwor
ICAgIHN0YXRpYyB2b2lkIG1hcEFuaW1hdGlvblByb3BlcnR5KEFuaW1hdGlvbiosIENTU1ZhbHVl
Kik7CisgICAgc3RhdGljIHZvaWQgbWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9u
KiwgQ1NTVmFsdWUqKTsKIAotICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJ
RCwgQ1NTVmFsdWUqLCBOaW5lUGllY2VJbWFnZSYpOwotICAgIHZvaWQgbWFwTmluZVBpZWNlSW1h
Z2VTbGljZShDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7Ci0gICAgTGVuZ3RoQm94IG1hcE5p
bmVQaWVjZUltYWdlUXVhZChDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2VS
ZXBlYXQoQ1NTVmFsdWUqLCBOaW5lUGllY2VJbWFnZSYpOworICAgIHN0YXRpYyB2b2lkIG1hcE5p
bmVQaWVjZUltYWdlKFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUq
LCBOaW5lUGllY2VJbWFnZSYpOworICAgIHN0YXRpYyB2b2lkIG1hcE5pbmVQaWVjZUltYWdlU2xp
Y2UoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7CisgICAg
c3RhdGljIExlbmd0aEJveCBtYXBOaW5lUGllY2VJbWFnZVF1YWQoU3R5bGVSZXNvbHZlU3RhdGUm
LCBDU1NWYWx1ZSopOworICAgIHN0YXRpYyB2b2lkIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KFN0
eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTVmFsdWUqLCBOaW5lUGllY2VJbWFnZSYpOwogCiBwcml2YXRl
OgotICAgIC8vIEZJWE1FOiBUaGVzZSBhY2Nlc3NvcnMgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEg
UmVzb2x2ZVN0YXRlIG9iamVjdAotICAgIC8vIHNpbWlsYXIgdG8gaG93IFBhaW50SW5mby9MYXlv
dXRTdGF0ZSBjYWNoZSB2YWx1ZXMgbmVlZGVkIGZvcgotICAgIC8vIHRoZSBjdXJyZW50IHBhaW50
L2xheW91dC4KLSAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdDsKLSAgICBSZW5kZXJTdHls
ZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0OwotICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCkg
Y29uc3Q7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcGFydCBvZiBzb21lIHNvcnQg
b2YgU3R5bGVJbWFnZUNhY2hlIG9iamVjdCB3aGljaAotICAgIC8vIGlzIGhlbGQgYnkgdGhlIFN0
eWxlUmVzb2x2ZXIsIGFuZCBsaWtlbHkgcHJvdmlkZWQgdG8gdGhpcyBvYmplY3QKLSAgICAvLyBk
dXJpbmcgdGhlIHJlc29sdmUuCi0gICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdl
KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7Ci0KLSAgICBTdHlsZVJlc29sdmVyKiBtX3Jlc29s
dmVyOworICAgIENTU1RvU3R5bGVNYXAoKSB7IH0KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCA2MTQ1YmIxZjE2MjViOGZlNGQxNjc2MDdi
YmJhOGJmZDlhMWIwMTE5Li5kYjIzZTk5NDAyZTczNzQzMGQ5NWYxMmE4YmFjNjA3Y2UzMTczNjdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC00OSw3
ICs0OSw3IEBACiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlmIChpc0lu
aGVyaXQpIFwKIHsgXAotICAgIHN2Z3N0eWxlLT5zZXQjI1Byb3AobV9wYXJlbnRTdHlsZS0+c3Zn
U3R5bGUoKS0+cHJvcCgpKTsgXAorICAgIHN2Z3N0eWxlLT5zZXQjI1Byb3Aoc3RhdGUucGFyZW50
U3R5bGUoKS0+c3ZnU3R5bGUoKS0+cHJvcCgpKTsgXAogICAgIHJldHVybjsgXAogfQogCkBAIC0x
MDIsMTcgKzEwMiwxNyBAQCBzdGF0aWMgQ29sb3IgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShT
VkdDb2xvciogc3ZnQ29sb3IsIGNvbnN0IENvbG9yJiBmZ0NvbG9yKQogICAgIHJldHVybiBjb2xv
cjsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9w
ZXJ0eShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKIHsKICAgICBBU1NFUlQodmFsdWUpOwogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSA9IDA7CiAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAg
ICAgICAgIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2
YWx1ZSk7CiAKLSAgICBTVkdSZW5kZXJTdHlsZSogc3Znc3R5bGUgPSBtX3N0eWxlLT5hY2Nlc3NT
VkdTdHlsZSgpOworICAgIFNWR1JlbmRlclN0eWxlKiBzdmdzdHlsZSA9IHN0YXRlLnN0eWxlKCkt
PmFjY2Vzc1NWR1N0eWxlKCk7CiAKLSAgICBib29sIGlzSW5oZXJpdCA9IG1fcGFyZW50Tm9kZSAm
JiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpOwotICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUt
PmlzSW5pdGlhbFZhbHVlKCkgfHwgKCFtX3BhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVk
VmFsdWUoKSk7CisgICAgYm9vbCBpc0luaGVyaXQgPSBzdGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFs
dWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKKyAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5pc0lu
aXRpYWxWYWx1ZSgpIHx8ICghc3RhdGUucGFyZW50Tm9kZSgpICYmIHZhbHVlLT5pc0luaGVyaXRl
ZFZhbHVlKCkpOwogCiAgICAgLy8gV2hhdCBmb2xsb3dzIGlzIGEgbGlzdCB0aGF0IG1hcHMgdGhl
IENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIKICAgICAvLyBjb3JyZXNwb25kaW5nIGZyb250LWVu
ZCBSZW5kZXJTdHlsZSB2YWx1ZXMuIFNob3J0aGFuZHMoZS5nLiBib3JkZXIsCkBAIC0yMjksMzQg
KzIyOSwzNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5RmlsbDoK
ICAgICAgICAgewogICAgICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgICAg
IGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQYXJlbnRTdHlsZSA9IG1fcGFyZW50U3R5bGUtPnN2
Z1N0eWxlKCk7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChzdmdQYXJl
bnRTdHlsZS0+ZmlsbFBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50Q29sb3Io
KSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFy
U3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRT
dHlsZSgpLT5zdmdTdHlsZSgpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFp
bnQoc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQ
YWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRVcmkoKSwgc3RhdGUuYXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5r
U3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxs
UGFpbnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0
eWxlOjppbml0aWFsRmlsbFBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxs
UGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlU
b1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CisgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQ
YWludChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludFR5cGUoKSwgU1ZHUmVuZGVyU3R5
bGU6OmluaXRpYWxGaWxsUGFpbnRDb2xvcigpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQ
YWludFVyaSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3RhdGUuYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkgewog
ICAgICAgICAgICAgICAgIFNWR1BhaW50KiBzdmdQYWludCA9IHN0YXRpY19jYXN0PFNWR1BhaW50
Kj4odmFsdWUpOwotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFp
bnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBtX3N0
eWxlLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAg
ICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29sb3JGcm9t
U1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSksIHN2Z1Bh
aW50LT51cmkoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0YXRlLmFw
cGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlOgog
ICAgICAgICB7CiAgICAgICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1BhcmVudFN0eWxlID0gbV9wYXJlbnRTdHlsZS0+c3Zn
U3R5bGUoKTsKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFy
ZW50U3R5bGUtPnN0cm9rZVBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRD
b2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CisgICAg
ICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1BhcmVudFN0eWxlID0gc3RhdGUu
cGFyZW50U3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0
U3Ryb2tlUGFpbnQoc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50VHlwZSgpLCBzdmdQYXJlbnRT
dHlsZS0+c3Ryb2tlUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRVcmko
KSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0YXRlLmFwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgICAgIHN2
Z3N0eWxlLT5zZXRTdHJva2VQYWludChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50
VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50Q29sb3IoKSwgU1ZHUmVu
ZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFy
U3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAg
ICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJv
a2VQYWludFR5cGUoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludENvbG9yKCks
IFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRVcmkoKSwgc3RhdGUuYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5
bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKHZhbHVlLT5pc1NWR1BhaW50KCkpIHsKICAgICAgICAgICAgICAgICBTVkdQYWludCog
c3ZnUGFpbnQgPSBzdGF0aWNfY2FzdDxTVkdQYWludCo+KHZhbHVlKTsKLSAgICAgICAgICAgICAg
ICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZy
b21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBtX3N0eWxlLT5jb2xvcigpKSwgc3ZnUGFpbnQt
PnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlz
aXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFp
bnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1Bh
aW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBzdGF0ZS5hcHBs
eVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkBAIC0zNjMsNyArMzYzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBl
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmlt
aXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dE1hcmtlclN0YXJ0UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJG
cm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Zn
c3R5bGUtPnNldE1hcmtlclN0YXJ0UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElk
ZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50KCkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJrZXJNaWQ6CkBA
IC0zNzcsNyArMzc3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBlID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmltaXRp
dmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1h
cmtlck1pZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlS
SVN0cmluZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxl
LT5zZXRNYXJrZXJNaWRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmll
ckZyb21JUklTdHJpbmcocywgc3RhdGUuZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmtlckVuZDoKQEAgLTM5MSw3
ICszOTEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVl
LT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFya2VyRW5k
UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5n
KHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1h
cmtlckVuZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlS
SVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlTGluZWNhcDoKQEAgLTQyOCw3ICs0
MjgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5n
ZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsdGVyUmVzb3Vy
Y2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1f
ZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbHRlclJl
c291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhz
LCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5TWFzazoKQEAgLTQ0Miw3ICs0NDIsNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkp
CiAgICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwog
Ci0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFza2VyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNl
OjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQo
KSkpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hc2tlclJlc291cmNlKFNWR1VSSVJlZmVy
ZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Q2xpcFBhdGg6CkBAIC00NTYsNyArNDU2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
ICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAg
ICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAg
c3Znc3R5bGUtPnNldENsaXBwZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRl
bnRpZmllckZyb21JUklTdHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAg
ICAgICBzdmdzdHlsZS0+c2V0Q2xpcHBlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21l
bnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dEFuY2hv
cjoKQEAgLTQ3NywxNCArNDc3LDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHN0b3BDb2xvciwgU3RvcENvbG9yKTsK
ICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAgICAgICAgIHN2
Z3N0eWxlLT5zZXRTdG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2Fz
dDxTVkdDb2xvcio+KHZhbHVlKSwgbV9zdHlsZS0+Y29sb3IoKSkpOworICAgICAgICAgICAgICAg
IHN2Z3N0eWxlLT5zZXRTdG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNf
Y2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlnaHRpbmdD
b2xvcjoKICAgICAgICAgewogICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwo
bGlnaHRpbmdDb2xvciwgTGlnaHRpbmdDb2xvcik7CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlz
U1ZHQ29sb3IoKSkKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TGlnaHRpbmdDb2xvcihj
b2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBt
X3N0eWxlLT5jb2xvcigpKSk7CisgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldExpZ2h0aW5n
Q29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2FzdDxTVkdDb2xvcio+KHZh
bHVlKSwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZsb29kT3BhY2l0eToKQEAgLTUwOSw3ICs1
MDksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChmbG9vZENvbG9yLCBGbG9vZENvbG9yKTsKICAgICAgICAgICAgIGlm
ICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGbG9v
ZENvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2
YWx1ZSksIG1fc3R5bGUtPmNvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0
Rmxvb2RDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9y
Kj4odmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5R2x5cGhPcmllbnRhdGlvbkhvcml6
b250YWw6CkBAIC01NDksNyArNTQ5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1By
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U3ZnU2hhZG93OiB7CiAgICAgICAg
ICAgICBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgICAgIHJldHVybiBzdmdzdHlsZS0+c2V0
U2hhZG93KGFkb3B0UHRyKG1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRvdygpID8gbmV3
IFNoYWRvd0RhdGEoKm1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRvdygpKSA6IDApKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gc3Znc3R5bGUtPnNldFNoYWRvdyhhZG9wdFB0cihzdGF0
ZS5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpLT5zaGFkb3coKSA/IG5ldyBTaGFkb3dEYXRhKCpz
dGF0ZS5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpLT5zaGFkb3coKSkgOiAwKSk7CiAgICAgICAg
ICAgICBpZiAoaXNJbml0aWFsIHx8IHByaW1pdGl2ZVZhbHVlKSAvLyBpbml0aWFsIHwgbm9uZQog
ICAgICAgICAgICAgICAgIHJldHVybiBzdmdzdHlsZS0+c2V0U2hhZG93KG51bGxwdHIpOwogCkBA
IC01NjQsMTIgKzU2NCwxMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKCFmaXJz
dFZhbHVlLT5pc1NoYWRvd1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgU2hhZG93VmFsdWUqIGl0ZW0gPSBzdGF0aWNfY2FzdDxTaGFkb3dWYWx1ZSo+KGZpcnN0
VmFsdWUpOwotICAgICAgICAgICAgSW50UG9pbnQgbG9jYXRpb24oaXRlbS0+eC0+Y29tcHV0ZUxl
bmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290
RWxlbWVudFN0eWxlKSk7Ci0gICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVt
LT5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKSA6
IDA7CisgICAgICAgICAgICBJbnRQb2ludCBsb2NhdGlvbihpdGVtLT54LT5jb21wdXRlTGVuZ3Ro
PGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKSwKKyAgICAgICAg
ICAgICAgICBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUu
cm9vdEVsZW1lbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIg
PyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9v
dEVsZW1lbnRTdHlsZSgpKSA6IDA7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKICAgICAgICAg
ICAgIGlmIChpdGVtLT5jb2xvcikKLSAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVBy
aW1pdGl2ZVZhbHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKKyAgICAgICAgICAgICAgICBjb2xvciA9
IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCBpdGVtLT5jb2xvci5nZXQoKSk7CiAKICAg
ICAgICAgICAgIC8vIC13ZWJraXQtc3ZnLXNoYWRvdyBkb2VzIHNob3VsZCBub3QgaGF2ZSBhIHNw
cmVhZCBvciBzdHlsZQogICAgICAgICAgICAgQVNTRVJUKCFpdGVtLT5zcHJlYWQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCA3ZjljMDk3YjFiOGRlNDM1Nzg1NWU2
ZWQ4NjhmMTVkM2Y0ZjNjODNjLi4xNzFkNWNmMjRjOWViMTU4NDYxYWY2MjhmOTNhMDdmZGY3ODFk
NGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtNjksMTkgKzY5
LDkwIEBAIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2VyKERvY3VtZW50KiBkb2N1bWVu
dCkKIHsKIH0KIAotYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoZXMoQ1NTU2VsZWN0b3IqIHNl
bCwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBpc0Zhc3RDaGVja2FibGVTZWxlY3RvcikgY29uc3QK
K25hbWVzcGFjZSB7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0Zhc3RDaGVja2FibGVSZWxhdGlv
bihDU1NTZWxlY3Rvcjo6UmVsYXRpb24gcmVsYXRpb24pCiB7Ci0gICAgaWYgKGlzRmFzdENoZWNr
YWJsZVNlbGVjdG9yICYmICFlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkgewotICAgICAgICBpZiAo
IWZhc3RDaGVja1JpZ2h0bW9zdFNlbGVjdG9yKHNlbCwgZWxlbWVudCwgVmlzaXRlZE1hdGNoRGlz
YWJsZWQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gZmFzdENo
ZWNrKHNlbCwgZWxlbWVudCk7CisgICAgcmV0dXJuIHJlbGF0aW9uID09IENTU1NlbGVjdG9yOjpE
ZXNjZW5kYW50IHx8IHJlbGF0aW9uID09IENTU1NlbGVjdG9yOjpDaGlsZCB8fCByZWxhdGlvbiA9
PSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3I7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0Zh
c3RDaGVja2FibGVNYXRjaChjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgaWYg
KHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpTZXQpIHsKKyAgICAgICAgLy8gU3R5
bGUgYXR0cmlidXRlIGlzIGdlbmVyYXRlZCBsYXppbHkgYnV0IHRoZSBmYXN0IHBhdGggZG9lc24n
dCB0cmlnZ2VyIGl0LgorICAgICAgICAvLyBEaXNhbGxvdyB0aGVtIGhlcmUgcmF0aGVyIHRoYW4g
bWFraW5nIHRoZSBmYXN0IHBhdGggbW9yZSBicmFuY2h5LgorICAgICAgICByZXR1cm4gc2VsZWN0
b3ItPmF0dHJpYnV0ZSgpICE9IHN0eWxlQXR0cjsKICAgICB9CisgICAgaWYgKHNlbGVjdG9yLT5t
X21hdGNoID09IENTU1NlbGVjdG9yOjpFeGFjdCkKKyAgICAgICAgcmV0dXJuIHNlbGVjdG9yLT5h
dHRyaWJ1dGUoKSAhPSBzdHlsZUF0dHIgJiYgSFRNTERvY3VtZW50Ojppc0Nhc2VTZW5zaXRpdmVB
dHRyaWJ1dGUoc2VsZWN0b3ItPmF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gc2VsZWN0b3ItPm1f
bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZyB8fCBzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxl
Y3Rvcjo6SWQgfHwgc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzOworfQog
Ci0gICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwotICAgIHJldHVy
biBtYXRjaChTZWxlY3RvckNoZWNraW5nQ29udGV4dChzZWwsIGVsZW1lbnQsIFNlbGVjdG9yQ2hl
Y2tlcjo6VmlzaXRlZE1hdGNoRGlzYWJsZWQpLCBpZ25vcmVEeW5hbWljUHNldWRvLCBET01TaWJs
aW5nVHJhdmVyc2FsU3RyYXRlZ3koKSkgPT0gU2VsZWN0b3JNYXRjaGVzOworc3RhdGljIGlubGlu
ZSBib29sIGlzRmFzdENoZWNrYWJsZVJpZ2h0bW9zdFNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9y
KiBzZWxlY3RvcikKK3sKKyAgICBpZiAoIWlzRmFzdENoZWNrYWJsZVJlbGF0aW9uKHNlbGVjdG9y
LT5yZWxhdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBpc0Zhc3RD
aGVja2FibGVNYXRjaChzZWxlY3RvcikgfHwgU2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVk
b0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IpOwogfQogCi1uYW1lc3BhY2UgeworaW5saW5lIGJvb2wg
Y2hlY2tUYWdWYWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciog
c2VsZWN0b3IpCit7CisgICAgcmV0dXJuIFNlbGVjdG9yQ2hlY2tlcjo6dGFnTWF0Y2hlcyhlbGVt
ZW50LCBzZWxlY3Rvci0+dGFnUU5hbWUoKSk7Cit9CisKK2lubGluZSBib29sIGNoZWNrQ2xhc3NW
YWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3Ip
Cit7CisgICAgcmV0dXJuIGVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgc3RhdGljX2Nhc3Q8Y29uc3Qg
U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5jbGFzc05hbWVzKCkuY29udGFpbnMoc2VsZWN0b3It
PnZhbHVlKCkuaW1wbCgpKTsKK30KKworaW5saW5lIGJvb2wgY2hlY2tJRFZhbHVlKGNvbnN0IEVs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICByZXR1
cm4gZWxlbWVudC0+aGFzSUQoKSAmJiBlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmlt
cGwoKSA9PSBzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCk7Cit9CisKK2lubGluZSBib29sIGNoZWNr
RXhhY3RBdHRyaWJ1dGVWYWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxl
Y3Rvciogc2VsZWN0b3IpCit7CisgICAgcmV0dXJuIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tFeGFj
dEF0dHJpYnV0ZShlbGVtZW50LCBzZWxlY3Rvci0+YXR0cmlidXRlKCksIHNlbGVjdG9yLT52YWx1
ZSgpLmltcGwoKSk7Cit9CisKK2lubGluZSBib29sIGNvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3JN
YXRjaGVzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3Rv
ciwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGUpCit7
CisgICAgQVNTRVJUKFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9y
KHNlbGVjdG9yKSk7CisgICAgc3dpdGNoIChzZWxlY3Rvci0+cHNldWRvVHlwZSgpKSB7CisgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGluazoKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9BbnlMaW5rOgorICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNMaW5rKCk7CisgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZDoKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmlzTGlu
aygpICYmIHZpc2l0ZWRNYXRjaFR5cGUgPT0gU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hF
bmFibGVkOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZvY3VzOgorICAgICAgICByZXR1
cm4gbWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MoZWxlbWVudCk7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitp
bmxpbmUgYm9vbCBmYXN0Q2hlY2tSaWdodG1vc3RTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciog
c2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRl
ZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlKQoreworICAgIEFTU0VSVChTZWxlY3RvckNoZWNr
ZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKHNlbGVjdG9yKSk7CisKKyAgICBzd2l0Y2ggKHNl
bGVjdG9yLT5tX21hdGNoKSB7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6VGFnOgorICAgICAgICBy
ZXR1cm4gY2hlY2tUYWdWYWx1ZShlbGVtZW50LCBzZWxlY3Rvcik7CisgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6Q2xhc3M6CisgICAgICAgIHJldHVybiBjaGVja0NsYXNzVmFsdWUoZWxlbWVudCwgc2Vs
ZWN0b3IpOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OklkOgorICAgICAgICByZXR1cm4gY2hlY2tJ
RFZhbHVlKGVsZW1lbnQsIHNlbGVjdG9yKTsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpFeGFjdDoK
KyAgICBjYXNlIENTU1NlbGVjdG9yOjpTZXQ6CisgICAgICAgIHJldHVybiBjaGVja0V4YWN0QXR0
cmlidXRlVmFsdWUoZWxlbWVudCwgc2VsZWN0b3IpOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0NsYXNzOgorICAgICAgICByZXR1cm4gY29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvck1hdGNo
ZXMoZWxlbWVudCwgc2VsZWN0b3IsIHZpc2l0ZWRNYXRjaFR5cGUpOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CiAKIHRlbXBsYXRlIDxib29sIGNoZWNrVmFsdWUoY29uc3QgRWxlbWVudCosIGNvbnN0IENTU1Nl
bGVjdG9yKik+CiBpbmxpbmUgYm9vbCBmYXN0Q2hlY2tTaW5nbGVTZWxlY3Rvcihjb25zdCBDU1NT
ZWxlY3RvciomIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiYgZWxlbWVudCwgY29uc3QgQ1NTU2Vs
ZWN0b3IqJiB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqJiB0b3BDaGlsZE9y
U3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpCkBAIC0xMTcsNTEgKzE4OCwzNCBAQCBpbmxpbmUgYm9v
bCBmYXN0Q2hlY2tTaW5nbGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciomIHNlbGVjdG9yLCBj
b25zdCBFbGVtZW50KgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW5saW5lIGJvb2wgY2hlY2tD
bGFzc1ZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxl
Y3RvcikKLXsKLSAgICByZXR1cm4gZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBzdGF0aWNfY2FzdDxj
b25zdCBTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmNsYXNzTmFtZXMoKS5jb250YWlucyhzZWxl
Y3Rvci0+dmFsdWUoKS5pbXBsKCkpOwogfQogCi1pbmxpbmUgYm9vbCBjaGVja0lEVmFsdWUoY29u
c3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAg
IHJldHVybiBlbGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9u
KCkuaW1wbCgpID09IHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKTsKLX0KLQotaW5saW5lIGJvb2wg
Y2hlY2tFeGFjdEF0dHJpYnV0ZVZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICByZXR1cm4gU2VsZWN0b3JDaGVja2VyOjpjaGVj
a0V4YWN0QXR0cmlidXRlKGVsZW1lbnQsIHNlbGVjdG9yLT5hdHRyaWJ1dGUoKSwgc2VsZWN0b3It
PnZhbHVlKCkuaW1wbCgpKTsKLX0KLQotaW5saW5lIGJvb2wgY2hlY2tUYWdWYWx1ZShjb25zdCBF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCitib29sIFNlbGVj
dG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yKQogewotICAgIHJldHVybiBTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMoZWxlbWVu
dCwgc2VsZWN0b3ItPnRhZ1FOYW1lKCkpOwotfQotCisgICAgaWYgKCFpc0Zhc3RDaGVja2FibGVS
aWdodG1vc3RTZWxlY3RvcihzZWxlY3RvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBm
b3IgKHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsgc2VsZWN0b3I7IHNlbGVjdG9y
ID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgeworICAgICAgICBpZiAoIWlzRmFzdENoZWNrYWJs
ZVJlbGF0aW9uKHNlbGVjdG9yLT5yZWxhdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKCFpc0Zhc3RDaGVja2FibGVNYXRjaChzZWxlY3RvcikpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUg
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdFNlbGVjdG9yKGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvciwgY29uc3QgRWxlbWVudCogZWxlbWVudCwgVmlzaXRlZE1hdGNo
VHlwZSB2aXNpdGVkTWF0Y2hUeXBlKSBjb25zdAorYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNo
ZXMoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBpc0Zhc3RDaGVja2Fi
bGVTZWxlY3RvcikgY29uc3QKIHsKLSAgICBBU1NFUlQoaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Io
c2VsZWN0b3IpKTsKLQotICAgIHN3aXRjaCAoc2VsZWN0b3ItPm1fbWF0Y2gpIHsKLSAgICBjYXNl
IENTU1NlbGVjdG9yOjpUYWc6Ci0gICAgICAgIHJldHVybiBjaGVja1RhZ1ZhbHVlKGVsZW1lbnQs
IHNlbGVjdG9yKTsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpDbGFzczoKLSAgICAgICAgcmV0dXJu
IGNoZWNrQ2xhc3NWYWx1ZShlbGVtZW50LCBzZWxlY3Rvcik7Ci0gICAgY2FzZSBDU1NTZWxlY3Rv
cjo6SWQ6Ci0gICAgICAgIHJldHVybiBjaGVja0lEVmFsdWUoZWxlbWVudCwgc2VsZWN0b3IpOwot
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkV4YWN0OgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNldDoK
LSAgICAgICAgcmV0dXJuIGNoZWNrRXhhY3RBdHRyaWJ1dGVWYWx1ZShlbGVtZW50LCBzZWxlY3Rv
cik7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3M6Ci0gICAgICAgIHJldHVybiBj
b21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yTWF0Y2hlcyhlbGVtZW50LCBzZWxlY3RvciwgdmlzaXRl
ZE1hdGNoVHlwZSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgaWYgKGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yICYmICFlbGVtZW50LT5pc1NWR0VsZW1l
bnQoKSkgeworICAgICAgICBpZiAoIWZhc3RDaGVja1JpZ2h0bW9zdFNlbGVjdG9yKHNlbCwgZWxl
bWVudCwgVmlzaXRlZE1hdGNoRGlzYWJsZWQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gZmFzdENoZWNrKHNlbCwgZWxlbWVudCk7CiAgICAgfQotICAgIHJldHVy
biBmYWxzZTsKKworICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsK
KyAgICByZXR1cm4gbWF0Y2goU2VsZWN0b3JDaGVja2luZ0NvbnRleHQoc2VsLCBlbGVtZW50LCBT
ZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaERpc2FibGVkKSwgaWdub3JlRHluYW1pY1BzZXVk
bywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KCkpID09IFNlbGVjdG9yTWF0Y2hlczsKIH0K
IAotYm9vbCBTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVjayhjb25zdCBDU1NTZWxlY3Rvciogc2Vs
ZWN0b3IsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Citib29sIFNlbGVjdG9yQ2hlY2tl
cjo6ZmFzdENoZWNrKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgY29uc3QgRWxlbWVudCog
ZWxlbWVudCkKIHsKICAgICBBU1NFUlQoZmFzdENoZWNrUmlnaHRtb3N0U2VsZWN0b3Ioc2VsZWN0
b3IsIGVsZW1lbnQsIFZpc2l0ZWRNYXRjaEVuYWJsZWQpKTsKIApAQCAtMjAyLDQzICsyNTYsNiBA
QCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxl
Y3RvciwgY29uc3QgRWxlbWVudCogZWxlbQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMg
aW5saW5lIGJvb2wgaXNGYXN0Q2hlY2thYmxlUmVsYXRpb24oQ1NTU2VsZWN0b3I6OlJlbGF0aW9u
IHJlbGF0aW9uKQotewotICAgIHJldHVybiByZWxhdGlvbiA9PSBDU1NTZWxlY3Rvcjo6RGVzY2Vu
ZGFudCB8fCByZWxhdGlvbiA9PSBDU1NTZWxlY3Rvcjo6Q2hpbGQgfHwgcmVsYXRpb24gPT0gQ1NT
U2VsZWN0b3I6OlN1YlNlbGVjdG9yOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNGYXN0Q2hl
Y2thYmxlTWF0Y2goY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIGlmIChzZWxl
Y3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6U2V0KSB7Ci0gICAgICAgIC8vIFN0eWxlIGF0
dHJpYnV0ZSBpcyBnZW5lcmF0ZWQgbGF6aWx5IGJ1dCB0aGUgZmFzdCBwYXRoIGRvZXNuJ3QgdHJp
Z2dlciBpdC4KLSAgICAgICAgLy8gRGlzYWxsb3cgdGhlbSBoZXJlIHJhdGhlciB0aGFuIG1ha2lu
ZyB0aGUgZmFzdCBwYXRoIG1vcmUgYnJhbmNoeS4KLSAgICAgICAgcmV0dXJuIHNlbGVjdG9yLT5h
dHRyaWJ1dGUoKSAhPSBzdHlsZUF0dHI7Ci0gICAgfQotICAgIGlmIChzZWxlY3Rvci0+bV9tYXRj
aCA9PSBDU1NTZWxlY3Rvcjo6RXhhY3QpCi0gICAgICAgIHJldHVybiBzZWxlY3Rvci0+YXR0cmli
dXRlKCkgIT0gc3R5bGVBdHRyICYmIEhUTUxEb2N1bWVudDo6aXNDYXNlU2Vuc2l0aXZlQXR0cmli
dXRlKHNlbGVjdG9yLT5hdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIHNlbGVjdG9yLT5tX21hdGNo
ID09IENTU1NlbGVjdG9yOjpUYWcgfHwgc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6
OklkIHx8IHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzczsKLX0KLQotc3Rh
dGljIGlubGluZSBib29sIGlzRmFzdENoZWNrYWJsZVJpZ2h0bW9zdFNlbGVjdG9yKGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICBpZiAoIWlzRmFzdENoZWNrYWJsZVJlbGF0aW9u
KHNlbGVjdG9yLT5yZWxhdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVy
biBpc0Zhc3RDaGVja2FibGVNYXRjaChzZWxlY3RvcikgfHwgU2VsZWN0b3JDaGVja2VyOjppc0Nv
bW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IpOwotfQotCi1ib29sIFNlbGVjdG9yQ2hl
Y2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
KQotewotICAgIGlmICghaXNGYXN0Q2hlY2thYmxlUmlnaHRtb3N0U2VsZWN0b3Ioc2VsZWN0b3Ip
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChzZWxlY3RvciA9IHNlbGVjdG9yLT50
YWdIaXN0b3J5KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkp
IHsKLSAgICAgICAgaWYgKCFpc0Zhc3RDaGVja2FibGVSZWxhdGlvbihzZWxlY3Rvci0+cmVsYXRp
b24oKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghaXNGYXN0Q2hl
Y2thYmxlTWF0Y2goc2VsZWN0b3IpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogLy8gUmVjdXJzaXZlIGNoZWNrIG9mIHNlbGVjdG9ycyBh
bmQgY29tYmluYXRvcnMKIC8vIEl0IGNhbiByZXR1cm4gNCBkaWZmZXJlbnQgdmFsdWVzOgogLy8g
KiBTZWxlY3Rvck1hdGNoZXMgICAgICAgICAgLSB0aGUgc2VsZWN0b3IgbWF0Y2hlcyB0aGUgZWxl
bWVudCBlCkBAIC05OTYsMjMgKzEwMTMsNiBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tT
Y3JvbGxiYXJQc2V1ZG9DbGFzcyhEb2N1bWVudCogZG9jdW1lbnQsIENTU1NlbGVjdG9yKgogICAg
IH0KIH0KIAotYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3JN
YXRjaGVzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3Rv
ciwgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlKSBjb25zdAotewotICAgIEFTU0VS
VChpc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IpKTsKLSAgICBzd2l0Y2ggKHNl
bGVjdG9yLT5wc2V1ZG9UeXBlKCkpIHsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5r
OgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FueUxpbms6Ci0gICAgICAgIHJldHVybiBl
bGVtZW50LT5pc0xpbmsoKTsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkOgot
ICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNMaW5rKCkgJiYgdmlzaXRlZE1hdGNoVHlwZSA9PSBW
aXNpdGVkTWF0Y2hFbmFibGVkOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZvY3VzOgot
ICAgICAgICByZXR1cm4gbWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MoZWxlbWVudCk7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCiB1bnNpZ25lZCBTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtNYXRjaFR5
cGUoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQogewogICAgIHVuc2lnbmVkIGxpbmtNYXRj
aFR5cGUgPSBNYXRjaEFsbDsKQEAgLTEwNTgsMTEgKzEwNTgsNiBAQCB1bnNpZ25lZCBTZWxlY3Rv
ckNoZWNrZXI6OmRldGVybWluZUxpbmtNYXRjaFR5cGUoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yKQogICAgIHJldHVybiBsaW5rTWF0Y2hUeXBlOwogfQogCi1ib29sIFNlbGVjdG9yQ2hlY2tl
cjo6aXNGcmFtZUZvY3VzZWQoY29uc3QgRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICByZXR1cm4g
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiBlbGVtZW50LT5kb2N1bWVudCgpLT5mcmFt
ZSgpLT5zZWxlY3Rpb24oKS0+aXNGb2N1c2VkQW5kQWN0aXZlKCk7Ci19Ci0KIHRlbXBsYXRlCiBT
ZWxlY3RvckNoZWNrZXI6Ok1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2goY29uc3QgU2VsZWN0
b3JDaGVja2luZ0NvbnRleHQmLCBQc2V1ZG9JZCYsIGNvbnN0IERPTVNpYmxpbmdUcmF2ZXJzYWxT
dHJhdGVneSYpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0
b3JDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKaW5kZXgg
OTJmODYyMTZjYWU3MjA2MTYyOGI2NzE0ZmIzM2FiN2RkNjhlNGUxMC4uYjM1NzIwNTNjODEwYjVk
ZWVmYzUyZjMxYTE1OWE4OTE3ZGUyODg0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L1NlbGVjdG9yQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuaApAQCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjaGVja09uZShjb25zdCBT
ZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIGNvbnN0IFNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSYp
IGNvbnN0OwogCiAgICAgc3RhdGljIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3Qg
Q1NTU2VsZWN0b3IqKTsKLSAgICBib29sIGZhc3RDaGVjayhjb25zdCBDU1NTZWxlY3RvciosIGNv
bnN0IEVsZW1lbnQqKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBmYXN0Q2hlY2soY29uc3QgQ1NT
U2VsZWN0b3IqLCBjb25zdCBFbGVtZW50Kik7CiAKICAgICBib29sIHN0cmljdFBhcnNpbmcoKSBj
b25zdCB7IHJldHVybiBtX3N0cmljdFBhcnNpbmc7IH0KIApAQCAtOTMsNyArOTMsNiBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgYm9vbCB0YWdNYXRjaGVzKGNvbnN0IEVsZW1lbnQqLCBjb25zdCBR
dWFsaWZpZWROYW1lJik7CiAgICAgc3RhdGljIGJvb2wgaXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVj
dG9yKGNvbnN0IENTU1NlbGVjdG9yKik7Ci0gICAgYm9vbCBtYXRjaGVzRm9jdXNQc2V1ZG9DbGFz
cyhjb25zdCBFbGVtZW50KikgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wgZmFzdENoZWNrUmlnaHRt
b3N0QXR0cmlidXRlU2VsZWN0b3IoY29uc3QgRWxlbWVudCosIGNvbnN0IENTU1NlbGVjdG9yKik7
CiAgICAgc3RhdGljIGJvb2wgY2hlY2tFeGFjdEF0dHJpYnV0ZShjb25zdCBFbGVtZW50KiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgc2VsZWN0b3JBdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNTdHJp
bmdJbXBsKiB2YWx1ZSk7CiAKQEAgLTEwMiwxMCArMTAxLDYgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIGJvb2wgY2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhEb2N1bWVudCosIENTU1NlbGVj
dG9yKikgY29uc3Q7Ci0gICAgc3RhdGljIGJvb2wgaXNGcmFtZUZvY3VzZWQoY29uc3QgRWxlbWVu
dCopOwotCi0gICAgYm9vbCBmYXN0Q2hlY2tSaWdodG1vc3RTZWxlY3Rvcihjb25zdCBDU1NTZWxl
Y3RvciosIGNvbnN0IEVsZW1lbnQqLCBWaXNpdGVkTWF0Y2hUeXBlKSBjb25zdDsKLSAgICBib29s
IGNvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3JNYXRjaGVzKGNvbnN0IEVsZW1lbnQqLCBjb25zdCBD
U1NTZWxlY3RvciosIFZpc2l0ZWRNYXRjaFR5cGUpIGNvbnN0OwogCiAgICAgYm9vbCBtX3N0cmlj
dFBhcnNpbmc7CiAgICAgYm9vbCBtX2RvY3VtZW50SXNIVE1MOwpAQCAtMTIzLDcgKzExOCwxMiBA
QCBpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rv
cihjb25zdCBDU1NTZWxlY3Rvciogc2VsZQogICAgICAgICB8fCBwc2V1ZG9UeXBlID09IENTU1Nl
bGVjdG9yOjpQc2V1ZG9Gb2N1czsKIH0KIAotaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpt
YXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhjb25zdCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAoraW5s
aW5lIGJvb2wgaXNGcmFtZUZvY3VzZWQoY29uc3QgRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBy
ZXR1cm4gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiBlbGVtZW50LT5kb2N1bWVudCgp
LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+aXNGb2N1c2VkQW5kQWN0aXZlKCk7Cit9CisKK2lubGlu
ZSBib29sIG1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiB7
CiAgICAgaWYgKEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShjb25z
dF9jYXN0PEVsZW1lbnQqPihlbGVtZW50KSwgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZvY3VzKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVC
dWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCmluZGV4IDZk
NzhjNjg0NDQyY2M3ZTI0ZWJmOWE2Mjg2N2JkODg5OWZlNzk4ZTYuLmMzMzY1ZWE4MGVhOWJkYTdm
ZGU0MTg0MTk3OTQ2ZWY5Y2NiMzA1MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3Bw
CkBAIC02MSw3ICs2MSw3IEBAIGNsYXNzIEFwcGx5UHJvcGVydHlFeHBhbmRpbmcgewogcHVibGlj
OgogCiAgICAgdGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQ+Ci0gICAgc3RhdGljIGlubGluZSB2
b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlJbmhlcml0
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUp
CiAgICAgewogICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtNjksMjAgKzY5LDIwIEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgU3R5
bGVCdWlsZGVyJiB0YWJsZSA9IFN0eWxlQnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVyKCk7CiAg
ICAgICAgIGNvbnN0IFByb3BlcnR5SGFuZGxlciYgaGFuZGxlciA9IHRhYmxlLnByb3BlcnR5SGFu
ZGxlcihpZCk7CiAgICAgICAgIGlmIChoYW5kbGVyLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIGhh
bmRsZXIuYXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAg
ICAgICAgICBoYW5kbGVyLmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQg
YXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVT
dGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTxvbmU+KHByb3Bl
cnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTx0d28+KHBy
b3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTx0aHJl
ZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5oZXJpdFZhbHVl
PGZvdXI+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaGVyaXRW
YWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJbmhl
cml0VmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5oZXJpdFZh
bHVlPHR3bz4ocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTx0
aHJlZT4ocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTxmb3Vy
Pihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPGZpdmU+KHBy
b3BlcnR5SUQsIHN0YXRlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJRCBp
ZD4KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7CiAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9w
ZXJ0eUludmFsaWQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC05MCwyMCArOTAsMjAgQEAgcHVi
bGljOgogICAgICAgICBjb25zdCBTdHlsZUJ1aWxkZXImIHRhYmxlID0gU3R5bGVCdWlsZGVyOjpz
aGFyZWRTdHlsZUJ1aWxkZXIoKTsKICAgICAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5k
bGVyID0gdGFibGUucHJvcGVydHlIYW5kbGVyKGlkKTsKICAgICAgICAgaWYgKGhhbmRsZXIuaXNW
YWxpZCgpKQotICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlE
LCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbml0aWFsVmFsdWUo
cHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlh
bFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIGFwcGx5
SW5pdGlhbFZhbHVlPG9uZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFw
cGx5SW5pdGlhbFZhbHVlPHR3bz4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAg
IGFwcGx5SW5pdGlhbFZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAg
ICAgICAgYXBwbHlJbml0aWFsVmFsdWU8Zm91cj4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7
Ci0gICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPGZpdmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2
ZXIpOworICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0YXRlKTsK
KyAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAg
ICAgIGFwcGx5SW5pdGlhbFZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAg
IGFwcGx5SW5pdGlhbFZhbHVlPGZvdXI+KHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgYXBw
bHlJbml0aWFsVmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAogICAgIHRl
bXBsYXRlIDxDU1NQcm9wZXJ0eUlEIGlkPgotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKQog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTExLDE5ICsxMTEsMTkgQEAgcHVibGljOgogICAgICAg
ICBjb25zdCBTdHlsZUJ1aWxkZXImIHRhYmxlID0gU3R5bGVCdWlsZGVyOjpzaGFyZWRTdHlsZUJ1
aWxkZXIoKTsKICAgICAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0gdGFibGUu
cHJvcGVydHlIYW5kbGVyKGlkKTsKICAgICAgICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgaGFuZGxlci5hcHBseVZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZh
bHVlKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSwg
dmFsdWUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFs
dWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAg
ICAgaWYgKCFleHBhbmRWYWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBhcHBs
eVZhbHVlPG9uZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBh
cHBseVZhbHVlPHR3bz4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAg
ICBhcHBseVZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7Ci0g
ICAgICAgIGFwcGx5VmFsdWU8Zm91cj4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUp
OwotICAgICAgICBhcHBseVZhbHVlPGZpdmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZh
bHVlKTsKKyAgICAgICAgYXBwbHlWYWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIGFwcGx5VmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAg
ICAgICBhcHBseVZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAgICAg
ICBhcHBseVZhbHVlPGZvdXI+KHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGFw
cGx5VmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKICAgICB9CiAgICAgc3Rh
dGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5k
bGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7
IH0KIH07CkBAIC0xMzQsOSArMTM0LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZh
bHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgU2V0dGVyVHlwZSB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0
ZXJGdW5jdGlvbikodmFsdWUpOyB9CiAgICAgc3RhdGljIEdldHRlclR5cGUgdmFsdWUoUmVuZGVy
U3R5bGUqIHN0eWxlKSB7IHJldHVybiAoc3R5bGUtPipnZXR0ZXJGdW5jdGlvbikoKTsgfQogICAg
IHN0YXRpYyBJbml0aWFsVHlwZSBpbml0aWFsKCkgeyByZXR1cm4gKCppbml0aWFsRnVuY3Rpb24p
KCk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKSB7IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCksIHZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsgfQotICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIpIHsgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgaW5pdGlhbCgp
KTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciosIENTU1ZhbHVlKikgeyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKSB7IHNldFZhbHVlKHN0YXRl
LnN0eWxlKCksIHZhbHVlKHN0YXRlLnBhcmVudFN0eWxlKCkpKTsgfQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0
ZSkgeyBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBpbml0aWFsKCkpOyB9CisgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYsIENTU1ZhbHVl
KikgeyB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1
cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVl
LCAmYXBwbHlWYWx1ZSk7IH0KIH07CiAKQEAgLTE0NCwxMCArMTQ0LDEwIEBAIHRlbXBsYXRlIDx0
eXBlbmFtZSBHZXR0ZXJUeXBlLCBHZXR0ZXJUeXBlIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0
aW9uKSgpIGNvbnN0CiBjbGFzcyBBcHBseVByb3BlcnR5RGVmYXVsdCB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBTZXR0ZXJUeXBlIHZhbHVl
KSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAg
ICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICBzZXRWYWx1ZShz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCAqc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2
YWx1ZSkpOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgKnN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5
SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xNjAsMTYgKzE2MCwxNiBAQCB0ZW1w
bGF0ZSA8dHlwZW5hbWUgTnVtYmVyVHlwZSwgTnVtYmVyVHlwZSAoUmVuZGVyU3R5bGU6OipnZXR0
ZXJGdW5jdGlvbikoKSBjb25zdAogY2xhc3MgQXBwbHlQcm9wZXJ0eU51bWJlciB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBOdW1iZXJUeXBl
IHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsK
ICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0
dXJuOwogCiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gaWRNYXBzVG9NaW51c09uZSkKLSAgICAgICAgICAgIHNldFZh
bHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIC0xKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0
YXRlLnN0eWxlKCksIC0xKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlPE51bWJlclR5cGU+
KENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShz
dGF0ZS5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWU8TnVtYmVyVHlwZT4oQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFu
ZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xODEsNyArMTgxLDcgQEAgcHVibGljOgog
dGVtcGxhdGUgPFN0eWxlSW1hZ2UqIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNv
bnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShQYXNzUmVmUHRyPFN0eWxl
SW1hZ2U+KSwgU3R5bGVJbWFnZSogKCppbml0aWFsRnVuY3Rpb24pKCksIENTU1Byb3BlcnR5SUQg
cHJvcGVydHk+CiBjbGFzcyBBcHBseVByb3BlcnR5U3R5bGVJbWFnZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpIHsgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPipz
ZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShwcm9wZXJ0eSwgdmFsdWUp
KTsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpIHsgKHN0YXRlLnN0eWxlKCktPipzZXR0
ZXJGdW5jdGlvbikoU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShzdGF0ZSwgcHJvcGVydHksIHZh
bHVlKSk7IH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAg
IHsKICAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVmYXVs
dEJhc2U8U3R5bGVJbWFnZSosIGdldHRlckZ1bmN0aW9uLCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
LCBzZXR0ZXJGdW5jdGlvbiwgU3R5bGVJbWFnZSosIGluaXRpYWxGdW5jdGlvbj46OmNyZWF0ZUhh
bmRsZXIoKTsKQEAgLTE5OCwyOCArMTk4LDI4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBo
YXNBdXRvKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gKHN0eWxlLT4qaGFzQXV0b0Z1bmN0
aW9uKSgpOyB9CiAgICAgc3RhdGljIHZvaWQgc2V0QXV0byhSZW5kZXJTdHlsZSogc3R5bGUpIHsg
KHN0eWxlLT4qc2V0QXV0b0Z1bmN0aW9uKSgpOyB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIGlmIChoYXNBdXRvKHN0eWxlUmVzb2x2
ZXItPnBhcmVudFN0eWxlKCkpKQotICAgICAgICAgICAgc2V0QXV0byhzdHlsZVJlc29sdmVyLT5z
dHlsZSgpKTsKKyAgICAgICAgaWYgKGhhc0F1dG8oc3RhdGUucGFyZW50U3R5bGUoKSkpCisgICAg
ICAgICAgICBzZXRBdXRvKHN0YXRlLnN0eWxlKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCB2YWx1ZShzdHlsZVJlc29sdmVyLT5w
YXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCB2YWx1
ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJ
bml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikg
eyBzZXRBdXRvKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpOyB9CisgICAgc3RhdGljIHZvaWQgYXBw
bHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKSB7
IHNldEF1dG8oc3RhdGUuc3R5bGUoKSk7IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZh
bHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBhdXRvSWRlbnRpdHkpCi0gICAgICAgICAgICBzZXRBdXRvKHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCkpOworICAgICAgICAgICAgc2V0QXV0byhzdGF0ZS5zdHlsZSgpKTsKICAgICAgICAgZWxz
ZSBpZiAodmFsdWVUeXBlID09IE51bWJlcikKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksICpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBzZXRWYWx1ZShz
dGF0ZS5zdHlsZSgpLCAqcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICBlbHNlIGlmICh2YWx1ZVR5
cGUgPT0gQ29tcHV0ZUxlbmd0aCkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0
ZS5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdGF0ZS5zdHlsZSgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigp
IHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRp
YWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBAIC0yMjcsMjcgKzIyNywyNyBAQCBwdWJsaWM6CiAK
IGNsYXNzIEFwcGx5UHJvcGVydHlDbGlwIHsKIHByaXZhdGU6Ci0gICAgc3RhdGljIExlbmd0aCBj
b252ZXJ0VG9MZW5ndGgoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTUHJpbWl0aXZl
VmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKFN0eWxlUmVz
b2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8
IFBlcmNlbnRDb252ZXJzaW9uIHwgRnJhY3Rpb25Db252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUo
KSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgcmV0
dXJuIHZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNl
bnRDb252ZXJzaW9uIHwgRnJhY3Rpb25Db252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KHN0YXRl
LnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0
aXZlWm9vbSgpKTsKICAgICB9CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKTsKKyAgICAg
ICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gc3RhdGUucGFyZW50U3R5bGUoKTsKICAgICAg
ICAgaWYgKCFwYXJlbnRTdHlsZS0+aGFzQ2xpcCgpKQotICAgICAgICAgICAgcmV0dXJuIGFwcGx5
SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRDbGlwKHBhcmVudFN0eWxlLT5jbGlwVG9wKCksIHBhcmVudFN0
eWxlLT5jbGlwUmlnaHQoKSwgcGFyZW50U3R5bGUtPmNsaXBCb3R0b20oKSwgcGFyZW50U3R5bGUt
PmNsaXBMZWZ0KCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlw
KHRydWUpOworICAgICAgICAgICAgcmV0dXJuIGFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQs
IHN0YXRlKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q2xpcChwYXJlbnRTdHlsZS0+Y2xp
cFRvcCgpLCBwYXJlbnRTdHlsZS0+Y2xpcFJpZ2h0KCksIHBhcmVudFN0eWxlLT5jbGlwQm90dG9t
KCksIHBhcmVudFN0eWxlLT5jbGlwTGVmdCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
SGFzQ2xpcCh0cnVlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRl
JiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENsaXAo
TGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCkpOwotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKGZhbHNlKTsKKyAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSk7CisgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc0NsaXAoZmFsc2UpOwogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0yNTUsMTUgKzI1NSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsdWUpOwogCiAgICAgICAgIGlmIChSZWN0KiByZWN0ID0gcHJpbWl0aXZlVmFsdWUtPmdldFJl
Y3RWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBMZW5ndGggdG9wID0gY29udmVydFRvTGVuZ3RoKHN0
eWxlUmVzb2x2ZXIsIHJlY3QtPnRvcCgpKTsKLSAgICAgICAgICAgIExlbmd0aCByaWdodCA9IGNv
bnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0LT5yaWdodCgpKTsKLSAgICAgICAgICAg
IExlbmd0aCBib3R0b20gPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+Ym90
dG9tKCkpOwotICAgICAgICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVS
ZXNvbHZlciwgcmVjdC0+bGVmdCgpKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldENsaXAodG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsKLSAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0NsaXAodHJ1ZSk7CisgICAgICAgICAgICBMZW5ndGgg
dG9wID0gY29udmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0LT50b3AoKSk7CisgICAgICAgICAgICBM
ZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3QtPnJpZ2h0KCkpOworICAg
ICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdC0+Ym90
dG9tKCkpOworICAgICAgICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgoc3RhdGUs
IHJlY3QtPmxlZnQoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDbGlwKHRvcCwg
cmlnaHQsIGJvdHRvbSwgbGVmdCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXND
bGlwKHRydWUpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlQXV0bykgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSk7Ci0gICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKGZhbHNlKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldENsaXAoTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSwg
TGVuZ3RoKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQ2xpcChmYWxzZSk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI4MSw0MCArMjgxLDQwIEBAIHRlbXBsYXRlIDxDb2xv
ckluaGVyaXQgaW5oZXJpdENvbG9yRnJvbVBhcmVudCwKICAgICAgICAgICBDb2xvciAoKmluaXRp
YWxGdW5jdGlvbikoKSA9ICZkZWZhdWx0SW5pdGlhbENvbG9yPgogY2xhc3MgQXBwbHlQcm9wZXJ0
eUNvbG9yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0
ZSkKICAgICB7CiAgICAgICAgIC8vIFZpc2l0ZWQgbGluayBzdHlsZSBjYW4gbmV2ZXIgZXhwbGlj
aXRseSBpbmhlcml0IGZyb20gcGFyZW50IHZpc2l0ZWQgbGluayBzdHlsZSBzbyBubyBzZXBhcmF0
ZSBnZXR0ZXJzIGFyZSBuZWVkZWQuCi0gICAgICAgIENvbG9yIGNvbG9yID0gKHN0eWxlUmVzb2x2
ZXItPnBhcmVudFN0eWxlKCktPipnZXR0ZXJGdW5jdGlvbikoKTsKLSAgICAgICAgYXBwbHlDb2xv
clZhbHVlKHN0eWxlUmVzb2x2ZXIsIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogKHN0eWxlUmVz
b2x2ZXItPnBhcmVudFN0eWxlKCktPipkZWZhdWx0RnVuY3Rpb24pKCkpOworICAgICAgICBDb2xv
ciBjb2xvciA9IChzdGF0ZS5wYXJlbnRTdHlsZSgpLT4qZ2V0dGVyRnVuY3Rpb24pKCk7CisgICAg
ICAgIGFwcGx5Q29sb3JWYWx1ZShzdGF0ZSwgY29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiAoc3Rh
dGUucGFyZW50U3R5bGUoKS0+KmRlZmF1bHRGdW5jdGlvbikoKSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBhcHBseUNv
bG9yVmFsdWUoc3R5bGVSZXNvbHZlciwgaW5pdGlhbEZ1bmN0aW9uKCkpOworICAgICAgICBhcHBs
eUNvbG9yVmFsdWUoc3RhdGUsIGluaXRpYWxGdW5jdGlvbigpKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVl
KTsKICAgICAgICAgaWYgKGluaGVyaXRDb2xvckZyb21QYXJlbnQgJiYgcHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCi0gICAgICAgICAgICBhcHBseUlu
aGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgICAgIGFwcGx5
SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBpZiAoc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpCi0g
ICAgICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbiko
c3R5bGVSZXNvbHZlci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUpKTsK
LSAgICAgICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlKCkpCi0gICAgICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPip2aXNp
dGVkTGlua1NldHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVW
YWx1ZShwcmltaXRpdmVWYWx1ZSwgLyogZm9yVmlzaXRlZExpbmsgKi8gdHJ1ZSkpOworICAgICAg
ICAgICAgaWYgKHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKQorICAgICAgICAg
ICAgICAgIChzdGF0ZS5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKFN0eWxlUmVzb2x2ZXI6OmNv
bG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCBwcmltaXRpdmVWYWx1ZSkpOworICAgICAgICAg
ICAgaWYgKHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSkKKyAgICAgICAg
ICAgICAgICAoc3RhdGUuc3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0dGVyRnVuY3Rpb24pKFN0eWxl
UmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCBwcmltaXRpdmVWYWx1ZSwg
LyogZm9yVmlzaXRlZExpbmsgKi8gdHJ1ZSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlDb2xvclZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIGNv
bnN0IENvbG9yJiBjb2xvcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUNvbG9yVmFsdWUoU3R5bGVS
ZXNvbHZlU3RhdGUmIHN0YXRlLCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgewotICAgICAgICBp
ZiAoc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpCi0gICAgICAg
ICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShjb2xvcik7Ci0g
ICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KCkpCi0gICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0
dGVyRnVuY3Rpb24pKGNvbG9yKTsKKyAgICAgICAgaWYgKHN0YXRlLmFwcGx5UHJvcGVydHlUb1Jl
Z3VsYXJTdHlsZSgpKQorICAgICAgICAgICAgKHN0YXRlLnN0eWxlKCktPipzZXR0ZXJGdW5jdGlv
bikoY29sb3IpOworICAgICAgICBpZiAoc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtT
dHlsZSgpKQorICAgICAgICAgICAgKHN0YXRlLnN0eWxlKCktPip2aXNpdGVkTGlua1NldHRlckZ1
bmN0aW9uKShjb2xvcik7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVh
dGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwg
JmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KQEAgLTMyMywxMSArMzIzLDExIEBA
IHB1YmxpYzoKIHRlbXBsYXRlIDxUZXh0RGlyZWN0aW9uIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1
bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShUZXh0
RGlyZWN0aW9uKSwgVGV4dERpcmVjdGlvbiAoKmluaXRpYWxGdW5jdGlvbikoKT4KIGNsYXNzIEFw
cGx5UHJvcGVydHlEaXJlY3Rpb24gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgIHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8VGV4dERpcmVjdGlvbiwgZ2V0
dGVyRnVuY3Rpb24sIFRleHREaXJlY3Rpb24sIHNldHRlckZ1bmN0aW9uLCBUZXh0RGlyZWN0aW9u
LCBpbml0aWFsRnVuY3Rpb24+OjphcHBseVZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIs
IHZhbHVlKTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0eWxlUmVzb2x2ZXItPmVsZW1l
bnQoKTsKLSAgICAgICAgaWYgKGVsZW1lbnQgJiYgc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpID09
IGVsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQorICAgICAgICBBcHBseVBy
b3BlcnR5RGVmYXVsdDxUZXh0RGlyZWN0aW9uLCBnZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlv
biwgc2V0dGVyRnVuY3Rpb24sIFRleHREaXJlY3Rpb24sIGluaXRpYWxGdW5jdGlvbj46OmFwcGx5
VmFsdWUocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVu
dCA9IHN0YXRlLmVsZW1lbnQoKTsKKyAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudCA9PSBl
bGVtZW50LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKICAgICAgICAgICAgIGVsZW1l
bnQtPmRvY3VtZW50KCktPnNldERpcmVjdGlvblNldE9uRG9jdW1lbnRFbGVtZW50KHRydWUpOwog
ICAgIH0KIApAQCAtMzU0LDcgKzM1NCw3IEBAIHRlbXBsYXRlIDxMZW5ndGggKFJlbmRlclN0eWxl
OjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsCiBjbGFzcyBBcHBseVByb3BlcnR5TGVuZ3RoIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIExl
bmd0aCB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTM2MiwzOSArMzYyLDM5IEBAIHB1YmxpYzoKICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih2YWx1ZSk7CiAgICAgICAgIGlmIChub25lRW5hYmxlZCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKICAgICAgICAgICAgIGlmIChub25lVW5kZWZpbmVk
KQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0
aChVbmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBM
ZW5ndGgoVW5kZWZpbmVkKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0
VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKCkpOworICAgICAgICAgICAgICAg
IHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aCgpKTsKICAgICAgICAgfQogICAgICAgICBp
ZiAobGVnYWN5SW50cmluc2ljRW5hYmxlZCkgewogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlSW50cmluc2ljKQotICAgICAgICAgICAgICAgIHNl
dFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChJbnRyaW5zaWMpKTsKKyAgICAg
ICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoSW50cmluc2ljKSk7CiAg
ICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZU1pbkludHJpbnNpYykKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLCBMZW5ndGgoTWluSW50cmluc2ljKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUo
c3RhdGUuc3R5bGUoKSwgTGVuZ3RoKE1pbkludHJpbnNpYykpOwogICAgICAgICB9CiAgICAgICAg
IGlmIChpbnRyaW5zaWNFbmFibGVkKSB7CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50KQotICAgICAgICAgICAgICAg
IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChNaW5Db250ZW50KSk7Cisg
ICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKE1pbkNvbnRlbnQp
KTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENT
U1ZhbHVlV2Via2l0TWF4Q29udGVudCkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoTWF4Q29udGVudCkpOworICAgICAgICAgICAgICAgIHNl
dFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aChNYXhDb250ZW50KSk7CiAgICAgICAgICAgICBl
bHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdEZpbGxB
dmFpbGFibGUpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgTGVuZ3RoKEZpbGxBdmFpbGFibGUpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0
ZS5zdHlsZSgpLCBMZW5ndGgoRmlsbEF2YWlsYWJsZSkpOwogICAgICAgICAgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVXZWJraXRGaXRDb250ZW50KQot
ICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChG
aXRDb250ZW50KSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVu
Z3RoKEZpdENvbnRlbnQpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChhdXRvRW5hYmxlZCAm
JiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoKSk7CisgICAgICAgICAg
ICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoKSk7CiAgICAgICAgIGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7Ci0gICAgICAgICAgICBMZW5ndGggbGVuZ3RoID0g
cHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgICAgICBMZW5ndGggbGVuZ3RoID0gcHJp
bWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5y
b290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAg
ICAgICAgICBsZW5ndGguc2V0UXVpcmsocHJpbWl0aXZlVmFsdWUtPmlzUXVpcmtWYWx1ZSgpKTsK
LSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGxlbmd0aCk7Cisg
ICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBsZW5ndGgpOwogICAgICAgICB9IGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgICAgIHNldFZh
bHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91
YmxlVmFsdWUoKSwgUGVyY2VudCkpOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUo
KSwgTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KSk7CiAg
ICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0
aExlbmd0aCgpKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CisgICAgICAgICAgICBzZXRW
YWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgp
LT50b0NhbGNWYWx1ZShzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0
YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0
aXZlVmFsdWUtPmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCi0gICAgICAgICAgICBzZXRW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJj
ZW50YWdlTGVuZ3RoKCkpOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgcHJp
bWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKTsKICAgICB9CiAKICAgICBz
dGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtNDA5LDE2ICs0MDksMTYg
QEAgdGVtcGxhdGUgPFN0cmluZ0lkZW50QmVoYXZpb3IgaWRlbnRCZWhhdmlvciwgY29uc3QgQXRv
bWljU3RyaW5nJiAoUmVuZGVyU3R5bGU6OioKIGNsYXNzIEFwcGx5UHJvcGVydHlTdHJpbmcgewog
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgY29u
c3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUp
OyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAg
IGlmICgoaWRlbnRCZWhhdmlvciA9PSBNYXBOb25lVG9OdWxsICYmIHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgIHx8IChpZGVudEJlaGF2aW9y
ID09IE1hcEF1dG9Ub051bGwgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVBdXRvKSkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIG51
bGxBdG9tKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIG51bGxBdG9tKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICAgICAgc2V0VmFs
dWUoc3RhdGUuc3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwogICAg
IH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAg
LTQzMSw3ICs0MzEsNyBAQCB0ZW1wbGF0ZSA8TGVuZ3RoU2l6ZSAoUmVuZGVyU3R5bGU6OipnZXR0
ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OgogY2xhc3MgQXBwbHlQcm9w
ZXJ0eUJvcmRlclJhZGl1cyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVu
ZGVyU3R5bGUqIHN0eWxlLCBMZW5ndGhTaXplIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0
aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0
ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDQ4LDE3ICs0NDgsMTcgQEAgcHVi
bGljOgogICAgICAgICBlbHNlIGlmIChwYWlyLT5maXJzdCgpLT5pc1ZpZXdwb3J0UGVyY2VudGFn
ZUxlbmd0aCgpKQogICAgICAgICAgICAgcmFkaXVzV2lkdGggPSBwYWlyLT5maXJzdCgpLT52aWV3
cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKICAgICAgICAgZWxzZSBpZiAocGFpci0+Zmlyc3QoKS0+
aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKLSAgICAgICAgICAgIHJhZGl1c1dp
ZHRoID0gTGVuZ3RoKChwYWlyLT5maXJzdCgpLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgp
LCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CisgICAgICAgICAg
ICByYWRpdXNXaWR0aCA9IExlbmd0aCgocGFpci0+Zmlyc3QoKS0+Y3NzQ2FsY1ZhbHVlKCktPnRv
Q2FsY1ZhbHVlKHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUu
c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBy
YWRpdXNXaWR0aCA9IHBhaXItPmZpcnN0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgICAgICByYWRpdXNX
aWR0aCA9IHBhaXItPmZpcnN0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSk7CiAgICAgICAgIGlmIChwYWlyLT5zZWNvbmQoKS0+aXNQZXJjZW50YWdlKCkpCiAgICAgICAg
ICAgICByYWRpdXNIZWlnaHQgPSBMZW5ndGgocGFpci0+c2Vjb25kKCktPmdldERvdWJsZVZhbHVl
KCksIFBlcmNlbnQpOwogICAgICAgICBlbHNlIGlmIChwYWlyLT5zZWNvbmQoKS0+aXNWaWV3cG9y
dFBlcmNlbnRhZ2VMZW5ndGgoKSkKICAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IHBhaXItPnNl
Y29uZCgpLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKICAgICAgICAgZWxzZSBpZiAocGFp
ci0+c2Vjb25kKCktPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAg
ICAgICByYWRpdXNIZWlnaHQgPSBMZW5ndGgoKHBhaXItPnNlY29uZCgpLT5jc3NDYWxjVmFsdWUo
KS0+dG9DYWxjVmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9v
dEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkp
KSk7CisgICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBMZW5ndGgoKHBhaXItPnNlY29uZCgpLT5j
c3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1l
bnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IHBhaXItPnNlY29uZCgpLT5jb21wdXRlTGVu
Z3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVs
ZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwor
ICAgICAgICAgICAgcmFkaXVzSGVpZ2h0ID0gcGFpci0+c2Vjb25kKCktPmNvbXB1dGVMZW5ndGg8
TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIGludCB3aWR0aCA9IHJhZGl1c1dpZHRo
LnZhbHVlKCk7CiAgICAgICAgIGludCBoZWlnaHQgPSByYWRpdXNIZWlnaHQudmFsdWUoKTsKICAg
ICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQpAQCAtNDY5LDcgKzQ2OSw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gcmFkaXVzSGVpZ2h0OyAvLyBOdWxsIG91
dCB0aGUgb3RoZXIgdmFsdWUuCiAKICAgICAgICAgTGVuZ3RoU2l6ZSBzaXplKHJhZGl1c1dpZHRo
LCByYWRpdXNIZWlnaHQpOwotICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBzaXplKTsKKyAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgc2l6ZSk7CiAgICAgfQog
ICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtNDkx
LDIzICs0OTEsMjMgQEAgc3RydWN0IEZpbGxMYXllckFjY2Vzc29yVHlwZXM8U3R5bGVJbWFnZSo+
IHsKIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBULAotICAgICAgICAgIENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJZCwKLSAgICAgICAgICBFRmlsbExheWVyVHlwZSBmaWxsTGF5ZXJUeXBlLAotICAg
ICAgICAgIEZpbGxMYXllciogKFJlbmRlclN0eWxlOjoqYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCks
Ci0gICAgICAgICAgY29uc3QgRmlsbExheWVyKiAoUmVuZGVyU3R5bGU6OipsYXllcnNGdW5jdGlv
bikoKSBjb25zdCwKLSAgICAgICAgICBib29sIChGaWxsTGF5ZXI6Oip0ZXN0RnVuY3Rpb24pKCkg
Y29uc3QsCi0gICAgICAgICAgdHlwZW5hbWUgRmlsbExheWVyQWNjZXNzb3JUeXBlczxUPjo6R2V0
dGVyIChGaWxsTGF5ZXI6OipnZXRGdW5jdGlvbikoKSBjb25zdCwKLSAgICAgICAgICB2b2lkIChG
aWxsTGF5ZXI6OipzZXRGdW5jdGlvbikodHlwZW5hbWUgRmlsbExheWVyQWNjZXNzb3JUeXBlczxU
Pjo6U2V0dGVyKSwKLSAgICAgICAgICB2b2lkIChGaWxsTGF5ZXI6OipjbGVhckZ1bmN0aW9uKSgp
LAotICAgICAgICAgIHR5cGVuYW1lIEZpbGxMYXllckFjY2Vzc29yVHlwZXM8VD46OkdldHRlciAo
KmluaXRpYWxGdW5jdGlvbikoRUZpbGxMYXllclR5cGUpLAotICAgICAgICAgIHZvaWQgKENTU1Rv
U3R5bGVNYXA6OiptYXBGaWxsRnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENT
U1ZhbHVlKik+CisgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLAorICAgIEVGaWxsTGF5ZXJU
eXBlIGZpbGxMYXllclR5cGUsCisgICAgRmlsbExheWVyKiAoUmVuZGVyU3R5bGU6OiphY2Nlc3NM
YXllcnNGdW5jdGlvbikoKSwKKyAgICBjb25zdCBGaWxsTGF5ZXIqIChSZW5kZXJTdHlsZTo6Kmxh
eWVyc0Z1bmN0aW9uKSgpIGNvbnN0LAorICAgIGJvb2wgKEZpbGxMYXllcjo6KnRlc3RGdW5jdGlv
bikoKSBjb25zdCwKKyAgICB0eXBlbmFtZSBGaWxsTGF5ZXJBY2Nlc3NvclR5cGVzPFQ+OjpHZXR0
ZXIgKEZpbGxMYXllcjo6KmdldEZ1bmN0aW9uKSgpIGNvbnN0LAorICAgIHZvaWQgKEZpbGxMYXll
cjo6KnNldEZ1bmN0aW9uKSh0eXBlbmFtZSBGaWxsTGF5ZXJBY2Nlc3NvclR5cGVzPFQ+OjpTZXR0
ZXIpLAorICAgIHZvaWQgKEZpbGxMYXllcjo6KmNsZWFyRnVuY3Rpb24pKCksCisgICAgdHlwZW5h
bWUgRmlsbExheWVyQWNjZXNzb3JUeXBlczxUPjo6R2V0dGVyICgqaW5pdGlhbEZ1bmN0aW9uKShF
RmlsbExheWVyVHlwZSksCisgICAgdm9pZCAoKm1hcEZpbGxGdW5jdGlvbikoU3R5bGVSZXNvbHZl
U3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopPgogY2xhc3MgQXBw
bHlQcm9wZXJ0eUZpbGxMYXllciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhl
cml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7CisgICAgICAg
IEZpbGxMYXllciogY3VyckNoaWxkID0gKHN0YXRlLnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5j
dGlvbikoKTsKICAgICAgICAgRmlsbExheWVyKiBwcmV2Q2hpbGQgPSAwOwotICAgICAgICBjb25z
dCBGaWxsTGF5ZXIqIGN1cnJQYXJlbnQgPSAoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+
KmxheWVyc0Z1bmN0aW9uKSgpOworICAgICAgICBjb25zdCBGaWxsTGF5ZXIqIGN1cnJQYXJlbnQg
PSAoc3RhdGUucGFyZW50U3R5bGUoKS0+KmxheWVyc0Z1bmN0aW9uKSgpOwogICAgICAgICB3aGls
ZSAoY3VyclBhcmVudCAmJiAoY3VyclBhcmVudC0+KnRlc3RGdW5jdGlvbikoKSkgewogICAgICAg
ICAgICAgaWYgKCFjdXJyQ2hpbGQpIHsKICAgICAgICAgICAgICAgICAvKiBOZWVkIHRvIG1ha2Ug
YSBuZXcgbGF5ZXIuKi8KQEAgLTUyNywxNyArNTI3LDE3IEBAIHB1YmxpYzoKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0
aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsK
LSAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOworICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9
IChzdGF0ZS5zdHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7CiAgICAgICAgIChjdXJy
Q2hpbGQtPipzZXRGdW5jdGlvbikoKCppbml0aWFsRnVuY3Rpb24pKGZpbGxMYXllclR5cGUpKTsK
ICAgICAgICAgZm9yIChjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgY3VyckNoaWxkOyBj
dXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKSkKICAgICAgICAgICAgIChjdXJyQ2hpbGQtPipj
bGVhckZ1bmN0aW9uKSgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVl
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBGaWxsTGF5ZXIq
IGN1cnJDaGlsZCA9IChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rp
b24pKCk7CisgICAgICAgIEZpbGxMYXllciogY3VyckNoaWxkID0gKHN0YXRlLnN0eWxlKCktPiph
Y2Nlc3NMYXllcnNGdW5jdGlvbikoKTsKICAgICAgICAgRmlsbExheWVyKiBwcmV2Q2hpbGQgPSAw
OwogICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkKICNpZiBFTkFCTEUoQ1NTX0lNQUdF
X1NFVCkKQEAgLTU1MiwxMiArNTUyLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
Y3VyckNoaWxkID0gbmV3IEZpbGxMYXllcihmaWxsTGF5ZXJUeXBlKTsKICAgICAgICAgICAgICAg
ICAgICAgcHJldkNoaWxkLT5zZXROZXh0KGN1cnJDaGlsZCk7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT4qbWFwRmlsbEZ1bmN0
aW9uKShwcm9wZXJ0eUlkLCBjdXJyQ2hpbGQsIHZhbHVlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjayhpKSk7CisgICAgICAgICAgICAgICAgKCptYXBGaWxsRnVuY3Rpb24pKHN0YXRlLCBwcm9w
ZXJ0eUlkLCBjdXJyQ2hpbGQsIHZhbHVlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7
CiAgICAgICAgICAgICAgICAgcHJldkNoaWxkID0gY3VyckNoaWxkOwogICAgICAgICAgICAgICAg
IGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPiptYXBGaWxs
RnVuY3Rpb24pKHByb3BlcnR5SWQsIGN1cnJDaGlsZCwgdmFsdWUpOworICAgICAgICAgICAgKCpt
YXBGaWxsRnVuY3Rpb24pKHN0YXRlLCBwcm9wZXJ0eUlkLCBjdXJyQ2hpbGQsIHZhbHVlKTsKICAg
ICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOwogICAgICAgICB9CiAgICAg
ICAgIHdoaWxlIChjdXJyQ2hpbGQpIHsKQEAgLTU4Myw3ICs1ODMsNyBAQCB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwKIGNsYXNzIEFwcGx5UHJvcGVydHlDb21wdXRlTGVuZ3RoIHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIFQgdmFsdWUpIHsgKHN0
eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICAvLyBu
b3RlOiBDU1NQcm9wZXJ0eUxldHRlci9Xb3JkU3BhY2luZyByaWdodCBub3cgc2V0cyB0byB6ZXJv
IGlmIGl0J3Mgbm90IGEgcHJpbWl0aXZlIHZhbHVlIGZvciBzb21lIHJlYXNvbi4uLgogICAgICAg
ICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCkBAIC02MDIsMTMgKzYwMiwxMyBAQCBw
dWJsaWM6CiAgICAgICAgIH0gZWxzZSBpZiAodGhpY2tuZXNzRW5hYmxlZCAmJiBpZGVudCA9PSBD
U1NWYWx1ZVRoaWNrKSB7CiAgICAgICAgICAgICBsZW5ndGggPSA1OwogICAgICAgICB9IGVsc2Ug
aWYgKGlkZW50ID09IENTU1ZhbHVlSW52YWxpZCkgewotICAgICAgICAgICAgZmxvYXQgem9vbSA9
IChzdmdab29tRW5hYmxlZCAmJiBzdHlsZVJlc29sdmVyLT51c2VTVkdab29tUnVsZXMoKSkgPyAx
LjBmIDogc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICAg
ICAgZmxvYXQgem9vbSA9IChzdmdab29tRW5hYmxlZCAmJiBzdGF0ZS51c2VTVkdab29tUnVsZXMo
KSkgPyAxLjBmIDogc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwogCiAgICAgICAgICAg
ICAvLyBBbnkgb3JpZ2luYWwgcmVzdWx0IHRoYXQgd2FzID49IDEgc2hvdWxkIG5vdCBiZSBhbGxv
d2VkIHRvIGZhbGwgYmVsb3cgMS4KICAgICAgICAgICAgIC8vIFRoaXMga2VlcHMgYm9yZGVyIGxp
bmVzIGZyb20gdmFuaXNoaW5nLgotICAgICAgICAgICAgbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUt
PmNvbXB1dGVMZW5ndGg8VD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+
cm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tKTsKKyAgICAgICAgICAgIGxlbmd0aCA9IHByaW1pdGl2
ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50
U3R5bGUoKSwgem9vbSk7CiAgICAgICAgICAgICBpZiAoem9vbSA8IDEuMGYgJiYgbGVuZ3RoIDwg
MS4wKSB7Ci0gICAgICAgICAgICAgICAgVCBvcmlnaW5hbExlbmd0aCA9IHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXIt
PnJvb3RFbGVtZW50U3R5bGUoKSwgMS4wKTsKKyAgICAgICAgICAgICAgICBUIG9yaWdpbmFsTGVu
Z3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4oc3RhdGUuc3R5bGUoKSwgc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSgpLCAxLjApOwogICAgICAgICAgICAgICAgIGlmIChvcmlnaW5h
bExlbmd0aCA+PSAxLjApCiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IDEuMDsKICAgICAg
ICAgICAgIH0KQEAgLTYxOCw3ICs2MTgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBsZW5ndGgg
PSAwOwogICAgICAgICB9CiAKLSAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgbGVuZ3RoKTsKKyAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgbGVuZ3RoKTsKICAg
ICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBA
IC02MzAsMjggKzYzMCwyOCBAQCBwdWJsaWM6CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgVCAoRm9u
dERlc2NyaXB0aW9uOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKEZvbnREZXNjcmlw
dGlvbjo6KnNldHRlckZ1bmN0aW9uKShUKSwgVCBpbml0aWFsVmFsdWU+CiBjbGFzcyBBcHBseVBy
b3BlcnR5Rm9udCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMg
dm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYg
c3RhdGUpCiAgICAgewotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0g
c3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIChmb250RGVzY3JpcHRp
b24uKnNldHRlckZ1bmN0aW9uKSgoc3R5bGVSZXNvbHZlci0+cGFyZW50Rm9udERlc2NyaXB0aW9u
KCkuKmdldHRlckZ1bmN0aW9uKSgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgKGZvbnREZXNj
cmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24pKChzdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS4q
Z2V0dGVyRnVuY3Rpb24pKCkpOworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRl
JiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24g
PSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAo
Zm9udERlc2NyaXB0aW9uLipzZXR0ZXJGdW5jdGlvbikoaW5pdGlhbFZhbHVlKTsKLSAgICAgICAg
c3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAg
ICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KIAot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICBGb250
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0
aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5m
b250RGVzY3JpcHRpb24oKTsKICAgICAgICAgKGZvbnREZXNjcmlwdGlvbi4qc2V0dGVyRnVuY3Rp
b24pKCpwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRp
b24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVy
IGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZh
bHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQpAQCAtNjc2LDUwICs2NzYs
NTAgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNpemUgLyAxLjJmOwogICAgIH0KIHB1Ymxp
YzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAg
ICAgIGZsb2F0IHNpemUgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3Jp
cHRpb24oKS5zcGVjaWZpZWRTaXplKCk7CisgICAgICAgIGZsb2F0IHNpemUgPSBzdGF0ZS5wYXJl
bnRGb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCk7CiAKICAgICAgICAgaWYgKHNpemUg
PCAwKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsK
LSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKHN0eWxlUmVzb2x2ZXItPnBh
cmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmtleXdvcmRTaXplKCkpOwotICAgICAgICBz
dHlsZVJlc29sdmVyLT5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOwotICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlw
dGlvbigpOworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoc3RhdGUucGFy
ZW50Rm9udERlc2NyaXB0aW9uKCkua2V5d29yZFNpemUoKSk7CisgICAgICAgIFN0eWxlUmVzb2x2
ZXI6OnNldEZvbnRTaXplKHN0YXRlLCBmb250RGVzY3JpcHRpb24sIHNpemUpOworICAgICAgICBz
dGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJ
bml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAg
IHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBmbG9hdCBzaXplID0gc3R5
bGVSZXNvbHZlci0+Zm9udFNpemVGb3JLZXl3b3JkKHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCks
IENTU1ZhbHVlTWVkaXVtLCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsK
KyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNj
cmlwdGlvbigpOworICAgICAgICBmbG9hdCBzaXplID0gU3R5bGVSZXNvbHZlcjo6Zm9udFNpemVG
b3JLZXl3b3JkKHN0YXRlLmRvY3VtZW50KCksIENTU1ZhbHVlTWVkaXVtLCBmb250RGVzY3JpcHRp
b24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsKIAogICAgICAgICBpZiAoc2l6ZSA8IDApCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXpl
KENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7Ci0gICAgICAgIHN0eWxlUmVz
b2x2ZXItPnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7Ci0gICAgICAgIHN0eWxl
UmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBT
dHlsZVJlc29sdmVyOjpzZXRGb250U2l6ZShzdGF0ZSwgZm9udERlc2NyaXB0aW9uLCBzaXplKTsK
KyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRl
JiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odmFsdWUpOwogCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoMCk7CiAgICAgICAgIGZsb2F0IHBh
cmVudFNpemUgPSAwOwogICAgICAgICBib29sIHBhcmVudElzQWJzb2x1dGVTaXplID0gZmFsc2U7
CiAgICAgICAgIGZsb2F0IHNpemUgPSAwOwogCi0gICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5w
YXJlbnRTdHlsZSgpKSB7Ci0gICAgICAgICAgICBwYXJlbnRTaXplID0gc3R5bGVSZXNvbHZlci0+
cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOwotICAgICAg
ICAgICAgcGFyZW50SXNBYnNvbHV0ZVNpemUgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgp
LT5mb250RGVzY3JpcHRpb24oKS5pc0Fic29sdXRlU2l6ZSgpOworICAgICAgICBpZiAoc3RhdGUu
cGFyZW50U3R5bGUoKSkgeworICAgICAgICAgICAgcGFyZW50U2l6ZSA9IHN0YXRlLnBhcmVudEZv
bnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKKyAgICAgICAgICAgIHBhcmVudElzQWJz
b2x1dGVTaXplID0gc3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkuaXNBYnNvbHV0ZVNpemUo
KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpbnQgaWRlbnQgPSBwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSkgewpAQCAtNzMzLDcgKzczMyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVYTGFyZ2U6CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlWHhMYXJnZToKICAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRYeHhMYXJnZToKLSAgICAgICAgICAgICAgICBz
aXplID0gc3R5bGVSZXNvbHZlci0+Zm9udFNpemVGb3JLZXl3b3JkKHN0eWxlUmVzb2x2ZXItPmRv
Y3VtZW50KCksIGlkZW50LCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsK
KyAgICAgICAgICAgICAgICBzaXplID0gU3R5bGVSZXNvbHZlcjo6Zm9udFNpemVGb3JLZXl3b3Jk
KHN0YXRlLmRvY3VtZW50KCksIGlkZW50LCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0
U2l6ZSgpKTsKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUo
aWRlbnQgLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMYXJnZXI6CkBAIC03NTEsMTMgKzc1MSwxMyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUocGFyZW50
SXNBYnNvbHV0ZVNpemUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCAhKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSB8fCBwcmltaXRpdmVWYWx1
ZS0+aXNGb250UmVsYXRpdmVMZW5ndGgoKSkpOwogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc0xlbmd0aCgpKQotICAgICAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+
Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5bGVS
ZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCAxLjAsIHRydWUpOworICAgICAgICAgICAgICAg
IHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUucGFyZW50
U3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCAxLjAsIHRydWUpOwogICAgICAgICAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKQogICAgICAgICAgICAg
ICAgIHNpemUgPSAocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSAqIHBhcmVudFNpemUp
IC8gMTAwLjBmOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3Vs
YXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgc2l6ZSA9IHByaW1p
dGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGVSZXNvbHZlci0+cGFy
ZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpKS0+ZXZhbHVhdGUo
cGFyZW50U2l6ZSk7CisgICAgICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLT5jc3ND
YWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSwgc3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSgpKS0+ZXZhbHVhdGUocGFyZW50U2l6ZSk7CiAgICAgICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKLSAgICAgICAg
ICAgICAgICBzaXplID0gdmFsdWVGb3JMZW5ndGgocHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVy
Y2VudGFnZUxlbmd0aCgpLCAwLCBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3
KCkpOworICAgICAgICAgICAgICAgIHNpemUgPSB2YWx1ZUZvckxlbmd0aChwcmltaXRpdmVWYWx1
ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCksIDAsIHN0YXRlLmRvY3VtZW50KCktPnJlbmRl
clZpZXcoKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CkBAIC03NjksOCArNzY5LDggQEAgcHVibGljOgogICAgICAgICAvLyBDYXAgZm9udCBz
aXplIGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgZG9lc24ndCBoYXBwZW4uCiAgICAgICAgIHNpemUg
PSBtaW4obWF4aW11bUFsbG93ZWRGb250U2l6ZSwgc2l6ZSk7CiAKLSAgICAgICAgc3R5bGVSZXNv
bHZlci0+c2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIFN0
eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKHN0YXRlLCBmb250RGVzY3JpcHRpb24sIHNpemUpOwor
ICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzc5LDEyICs3NzksMTIgQEAgcHVibGljOgogCiBjbGFz
cyBBcHBseVByb3BlcnR5Rm9udFdlaWdodCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwog
ICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgIGNh
c2UgQ1NTVmFsdWVJbnZhbGlkOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBA
IC03OTgsNyArNzk4LDcgQEAgcHVibGljOgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgqcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICB9Ci0g
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAg
ICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBA
IC04MDksMzAgKzgwOSwzMCBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlGb250VmFy
aWFudExpZ2F0dXJlcyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0
aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0
ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZv
bnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudEZvbnREZXNjcmlwdGlvbigpOwot
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+
Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50
Rm9udERlc2NyaXB0aW9uID0gc3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCk7CisgICAgICAg
IEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24o
KTsKIAogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tbW9uTGlnYXR1cmVzU3RhdGUocGFy
ZW50Rm9udERlc2NyaXB0aW9uLmNvbW1vbkxpZ2F0dXJlc1N0YXRlKCkpOwogICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKHBhcmVudEZvbnREZXNj
cmlwdGlvbi5kaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoKSk7CiAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRIaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUocGFyZW50Rm9udERlc2NyaXB0aW9u
Lmhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSgpKTsKIAotICAgICAgICBzdHlsZVJlc29sdmVyLT5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAg
ICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRp
b24oKTsKIAogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tbW9uTGlnYXR1cmVzU3RhdGUo
Rm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSk7CiAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoRm9udERlc2NyaXB0aW9uOjpO
b3JtYWxMaWdhdHVyZXNTdGF0ZSk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRIaXN0b3Jp
Y2FsTGlnYXR1cmVzU3RhdGUoRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSk7
CiAKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbik7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBGb250RGVzY3JpcHRpb246OkxpZ2F0dXJl
c1N0YXRlIGNvbW1vbkxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdh
dHVyZXNTdGF0ZTsKICAgICAgICAgRm9udERlc2NyaXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBkaXNj
cmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJl
c1N0YXRlOwpAQCAtODc4LDExICs4NzgsMTEgQEAgcHVibGljOgogICAgICAgICB9CiAjZW5kaWYK
IAotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZl
ci0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldENvbW1vbkxpZ2F0dXJlc1N0YXRlKGNvbW1vbkxpZ2F0dXJlc1N0YXRlKTsKICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldERpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZShkaXNjcmV0aW9u
YXJ5TGlnYXR1cmVzU3RhdGUpOwogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SGlzdG9yaWNh
bExpZ2F0dXJlc1N0YXRlKGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSk7Ci0gICAgICAgIHN0eWxl
UmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBz
dGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKICAgICBz
dGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtODk4LDEzICs4OTgsMTMg
QEAgdGVtcGxhdGUgPEJvcmRlckltYWdlVHlwZSBib3JkZXJJbWFnZVR5cGUsCiAgICAgICAgICAg
dm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoY29uc3QgTmluZVBpZWNlSW1hZ2Um
KT4KIGNsYXNzIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7
CiAgICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlOwogICAgICAgICBpZiAoYm9yZGVySW1hZ2VU
eXBlID09IEJvcmRlck1hc2spCiAgICAgICAgICAgICBpbWFnZS5zZXRNYXNrRGVmYXVsdHMoKTsK
LSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2UocHJv
cGVydHksIHZhbHVlLCBpbWFnZSk7Ci0gICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4q
c2V0dGVyRnVuY3Rpb24pKGltYWdlKTsKKyAgICAgICAgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBp
ZWNlSW1hZ2Uoc3RhdGUsIHByb3BlcnR5LCB2YWx1ZSwgaW1hZ2UpOworICAgICAgICAoc3RhdGUu
c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShpbWFnZSk7CiAgICAgfQogCiAgICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTkyMSwyOSArOTIxLDI5IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIGlubGluZSBjb25zdCBOaW5lUGllY2VJbWFnZSYgZ2V0VmFsdWUoUmVu
ZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiB0eXBlID09IEJvcmRlckltYWdlID8gc3R5bGUtPmJv
cmRlckltYWdlKCkgOiBzdHlsZS0+bWFza0JveEltYWdlKCk7IH0KICAgICBzdGF0aWMgaW5saW5l
IHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBOaW5lUGllY2VJbWFnZSYg
dmFsdWUpIHsgcmV0dXJuIHR5cGUgPT0gQm9yZGVySW1hZ2UgPyBzdHlsZS0+c2V0Qm9yZGVySW1h
Z2UodmFsdWUpIDogc3R5bGUtPnNldE1hc2tCb3hJbWFnZSh2YWx1ZSk7IH0KIHB1YmxpYzoKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIE5p
bmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpKTsKKyAg
ICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3RhdGUuc3R5bGUoKSkpOwogICAg
ICAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7CiAgICAgICAgIGNhc2UgT3V0c2V0OgotICAgICAgICAg
ICAgaW1hZ2UuY29weU91dHNldEZyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5
bGUoKSkpOworICAgICAgICAgICAgaW1hZ2UuY29weU91dHNldEZyb20oZ2V0VmFsdWUoc3RhdGUu
cGFyZW50U3R5bGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVwZWF0
OgotICAgICAgICAgICAgaW1hZ2UuY29weVJlcGVhdEZyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZl
ci0+cGFyZW50U3R5bGUoKSkpOworICAgICAgICAgICAgaW1hZ2UuY29weVJlcGVhdEZyb20oZ2V0
VmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgU2xpY2U6Ci0gICAgICAgICAgICBpbWFnZS5jb3B5SW1hZ2VTbGljZXNGcm9tKGdldFZh
bHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGltYWdlLmNv
cHlJbWFnZVNsaWNlc0Zyb20oZ2V0VmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2lkdGg6Ci0gICAgICAgICAgICBpbWFnZS5jb3B5
Qm9yZGVyU2xpY2VzRnJvbShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSk7
CisgICAgICAgICAgICBpbWFnZS5jb3B5Qm9yZGVyU2xpY2VzRnJvbShnZXRWYWx1ZShzdGF0ZS5w
YXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBz
ZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBpbWFnZSk7CisgICAgICAgIHNldFZhbHVl
KHN0YXRlLnN0eWxlKCksIGltYWdlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdl
dFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpKTsKKyAgICAgICAgTmluZVBpZWNlSW1hZ2Ug
aW1hZ2UoZ2V0VmFsdWUoc3RhdGUuc3R5bGUoKSkpOwogICAgICAgICBzd2l0Y2ggKG1vZGlmaWVy
KSB7CiAgICAgICAgIGNhc2UgT3V0c2V0OgogICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KExl
bmd0aEJveCgwKSk7CkBAIC05NjIsMjcgKzk2MiwyNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBp
bWFnZS5zZXRCb3JkZXJTbGljZXModHlwZSA9PSBCb3JkZXJJbWFnZSA/IExlbmd0aEJveChMZW5n
dGgoMSwgUmVsYXRpdmUpLCBMZW5ndGgoMSwgUmVsYXRpdmUpLCBMZW5ndGgoMSwgUmVsYXRpdmUp
LCBMZW5ndGgoMSwgUmVsYXRpdmUpKSA6IExlbmd0aEJveCgpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGlt
YWdlKTsKKyAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgaW1hZ2UpOwogICAgIH0KIAot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgewotICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpKSk7CisgICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVl
KHN0YXRlLnN0eWxlKCkpKTsKICAgICAgICAgc3dpdGNoIChtb2RpZmllcikgewogICAgICAgICBj
YXNlIE91dHNldDoKLSAgICAgICAgICAgIGltYWdlLnNldE91dHNldChzdHlsZVJlc29sdmVyLT5z
dHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVF1YWQodmFsdWUpKTsKKyAgICAgICAgICAgIGlt
YWdlLnNldE91dHNldChDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVF1YWQoc3RhdGUs
IHZhbHVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXBlYXQ6Ci0gICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVJlcGVh
dCh2YWx1ZSwgaW1hZ2UpOworICAgICAgICAgICAgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNl
SW1hZ2VSZXBlYXQoc3RhdGUsIHZhbHVlLCBpbWFnZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBTbGljZToKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCkt
Pm1hcE5pbmVQaWVjZUltYWdlU2xpY2UodmFsdWUsIGltYWdlKTsKKyAgICAgICAgICAgIENTU1Rv
U3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlU2xpY2Uoc3RhdGUsIHZhbHVlLCBpbWFnZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXaWR0aDoKLSAgICAgICAgICAgIGltYWdl
LnNldEJvcmRlclNsaWNlcyhzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJ
bWFnZVF1YWQodmFsdWUpKTsKKyAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyhDU1NU
b1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVF1YWQoc3RhdGUsIHZhbHVlKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLCBpbWFnZSk7CisgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIGltYWdlKTsK
ICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJl
dHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFs
dWUsICZhcHBseVZhbHVlKTsgfQpAQCAtOTkxLDcgKzk5MSw3IEBAIHB1YmxpYzoKIHRlbXBsYXRl
IDxDU1NQcm9wZXJ0eUlEIGlkLCBTdHlsZUltYWdlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5j
dGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoUGFzc1Jl
ZlB0cjxTdHlsZUltYWdlPiksIFN0eWxlSW1hZ2UqICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgogY2xh
c3MgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1
bmN0aW9uKShzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKGlkLCB2YWx1ZSkpOyB9CisgICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3Rh
dGUsIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3RhdGUuc3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShT
dHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKHN0YXRlLCBpZCwgdmFsdWUpKTsgfQogICAgIHN0YXRp
YyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewogICAgICAgICBQcm9wZXJ0
eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxTdHlsZUltYWdlKiwg
Z2V0dGVyRnVuY3Rpb24sIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4sIHNldHRlckZ1bmN0aW9uLCBT
dHlsZUltYWdlKiwgaW5pdGlhbEZ1bmN0aW9uPjo6Y3JlYXRlSGFuZGxlcigpOwpAQCAtMTAwMywx
MSArMTAwMywxMSBAQCBlbnVtIENvdW50ZXJCZWhhdmlvciB7SW5jcmVtZW50ID0gMCwgUmVzZXR9
OwogdGVtcGxhdGUgPENvdW50ZXJCZWhhdmlvciBjb3VudGVyQmVoYXZpb3I+CiBjbGFzcyBBcHBs
eVByb3BlcnR5Q291bnRlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgZW1wdHlGdW5jdGlv
bihDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKikgeyB9Ci0gICAgc3RhdGljIHZvaWQgYXBw
bHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
cikKKyAgICBzdGF0aWMgdm9pZCBlbXB0eUZ1bmN0aW9uKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZVN0YXRlJikgeyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgQ291bnRl
ckRpcmVjdGl2ZU1hcCYgbWFwID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+YWNjZXNzQ291bnRl
ckRpcmVjdGl2ZXMoKTsKLSAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgcGFyZW50TWFwID0g
c3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsK
KyAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3RhdGUuc3R5bGUoKS0+YWNjZXNz
Q291bnRlckRpcmVjdGl2ZXMoKTsKKyAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgcGFyZW50
TWFwID0gc3RhdGUucGFyZW50U3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKIAog
ICAgICAgICB0eXBlZGVmIENvdW50ZXJEaXJlY3RpdmVNYXA6Oml0ZXJhdG9yIEl0ZXJhdG9yOwog
ICAgICAgICBJdGVyYXRvciBlbmQgPSBwYXJlbnRNYXAuZW5kKCk7CkBAIC0xMDIwLDE0ICsxMDIw
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
IHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxp
c3QqPih2YWx1ZSk7CiAKLSAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKKyAgICAgICAgQ291
bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3RhdGUuc3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVj
dGl2ZXMoKTsKICAgICAgICAgdHlwZWRlZiBDb3VudGVyRGlyZWN0aXZlTWFwOjppdGVyYXRvciBJ
dGVyYXRvcjsKIAogICAgICAgICBJdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CkBAIC0xMDYzLDQy
ICsxMDYzLDQyIEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUN1cnNvciB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3Ioc3R5bGVSZXNvbHZlci0+cGFy
ZW50U3R5bGUoKS0+Y3Vyc29yKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRDdXJzb3JMaXN0KHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmN1cnNvcnMoKSk7Cisg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEN1cnNvcihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jdXJz
b3IoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEN1cnNvckxpc3Qoc3RhdGUucGFyZW50
U3R5bGUoKS0+Y3Vyc29ycygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRp
YWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmNs
ZWFyQ3Vyc29yTGlzdCgpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJz
b3IoUmVuZGVyU3R5bGU6OmluaXRpYWxDdXJzb3IoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCkt
PmNsZWFyQ3Vyc29yTGlzdCgpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDdXJzb3IoUmVu
ZGVyU3R5bGU6OmluaXRpYWxDdXJzb3IoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmNsZWFyQ3Vyc29yTGlzdCgpOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5jbGVhckN1cnNvckxpc3QoKTsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVl
TGlzdCgpKSB7CiAgICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxD
U1NWYWx1ZUxpc3QqPih2YWx1ZSk7CiAgICAgICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3Ro
KCk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3IoQ1VSU09S
X0FVVE8pOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q3Vyc29yKENVUlNPUl9BVVRP
KTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAg
ICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7
CiAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzQ3Vyc29ySW1hZ2VWYWx1ZSgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIENTU0N1cnNvckltYWdlVmFsdWUqIGltYWdlID0gc3RhdGljX2Nhc3Q8
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSo+KGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW1h
Z2UtPnVwZGF0ZUlmU1ZHQ3Vyc29ySXNVc2VkKHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKSkpIC8v
IEVsZW1lbnRzIHdpdGggU1ZHIGN1cnNvcnMgYXJlIG5vdCBhbGxvd2VkIHRvIHNoYXJlIHN0eWxl
LgotICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VW5p
cXVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmFkZEN1
cnNvcihzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKENTU1Byb3BlcnR5Q3Vyc29yLCBpbWFnZSks
IGltYWdlLT5ob3RTcG90KCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPnVwZGF0
ZUlmU1ZHQ3Vyc29ySXNVc2VkKHN0YXRlLmVsZW1lbnQoKSkpIC8vIEVsZW1lbnRzIHdpdGggU1ZH
IGN1cnNvcnMgYXJlIG5vdCBhbGxvd2VkIHRvIHNoYXJlIHN0eWxlLgorICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPmFkZEN1cnNvcihTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKHN0YXRl
LCBDU1NQcm9wZXJ0eUN1cnNvciwgaW1hZ2UpLCBpbWFnZS0+aG90U3BvdCgpKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkgewogICAgICAgICAg
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwogICAgICAgICAgICAgICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzSWRlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q3Vyc29yKCpwcmltaXRpdmVWYWx1ZSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwot
ICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0lkZW50KCkgJiYgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+Y3Vyc29yKCkgIT0gRUN1cnNvcigqcHJpbWl0aXZlVmFsdWUpKQotICAgICAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcigqcHJpbWl0aXZlVmFs
dWUpOworICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0lkZW50KCkgJiYgc3RhdGUu
c3R5bGUoKS0+Y3Vyc29yKCkgIT0gRUN1cnNvcigqcHJpbWl0aXZlVmFsdWUpKQorICAgICAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC0xMTA3LDcgKzExMDcsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5
UHJvcGVydHlUZXh0QWxpZ24gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZh
bHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTE1LDEz
ICsxMTE1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKICAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpICE9IENTU1ZhbHVlV2Via2l0TWF0Y2hQ
YXJlbnQpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0QWxpZ24o
KnByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoc3R5bGVSZXNvbHZlci0+cGFyZW50
U3R5bGUoKS0+dGV4dEFsaWduKCkgPT0gVEFTVEFSVCkKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbihzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBMRUZUIDogUklHSFQpOwotICAgICAgICBlbHNlIGlm
IChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBUQUVORCkKLSAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbihzdHlsZVJlc29s
dmVyLT5wYXJlbnRTdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBSSUdIVCA6IExF
RlQpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEFsaWduKCpwcmltaXRpdmVW
YWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKHN0YXRlLnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigp
ID09IFRBU1RBUlQpCisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oc3Rh
dGUucGFyZW50U3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gTEVGVCA6IFJJR0hU
KTsKKyAgICAgICAgZWxzZSBpZiAoc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dEFsaWduKCkgPT0g
VEFFTkQpCisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oc3RhdGUucGFy
ZW50U3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gUklHSFQgOiBMRUZUKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEFs
aWduKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigpKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRBbGlnbihzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0
QWxpZ24oKSk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxl
cigpCiAgICAgewpAQCAtMTEzMiw3ICsxMTMyLDcgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVBy
b3BlcnR5VGV4dERlY29yYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBFVGV4
dERlY29yYXRpb24gdCA9IFJlbmRlclN0eWxlOjppbml0aWFsVGV4dERlY29yYXRpb24oKTsKICAg
ICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpKHZhbHVlKTsgaS5oYXNNb3JlKCk7IGku
YWR2YW5jZSgpKSB7CkBAIC0xMTQwLDcgKzExNDAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBB
U1NFUlQoaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKICAgICAgICAgICAgIHQgfD0gKnN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CiAgICAgICAgIH0KLSAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dERlY29yYXRpb24odCk7CisgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldFRleHREZWNvcmF0aW9uKHQpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVy
dHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTExNTEsNyArMTE1MSw3IEBAIHB1
YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUxpbmVIZWlnaHQgewogcHVibGljOgotICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0xMTYyLDE1ICsxMTYyLDE1IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICAgICAg
bGluZUhlaWdodCA9IFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpOwogICAgICAgICBl
bHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewotICAgICAgICAgICAgZG91Ymxl
IG11bHRpcGxpZXIgPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0g
ICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+dGV4dFNpemVBZGp1c3QoKSkg
ewotICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBzdHlsZVJlc29sdmVyLT5kb2N1
bWVudCgpLT5mcmFtZSgpKQorICAgICAgICAgICAgZG91YmxlIG11bHRpcGxpZXIgPSBzdGF0ZS5z
dHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAgICAgICBpZiAoc3RhdGUuc3R5bGUoKS0+
dGV4dFNpemVBZGp1c3QoKSkgeworICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBz
dGF0ZS5kb2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICAgICAgICAgICAgICBtdWx0aXBsaWVy
ICo9IGZyYW1lLT50ZXh0Wm9vbUZhY3RvcigpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
bGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBtdWx0
aXBsaWVyKTsKKyAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0
ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwg
bXVsdGlwbGllcik7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2Vu
dGFnZSgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogcGVyY2VudGFnZSBzaG91bGQgbm90IGJl
IHJlc3RyaWN0ZWQgdG8gYW4gaW50ZWdlciBoZXJlLgotICAgICAgICAgICAgbGluZUhlaWdodCA9
IExlbmd0aCgoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udFNpemUoKSAqIHByaW1pdGl2ZVZh
bHVlLT5nZXRJbnRWYWx1ZSgpKSAvIDEwMCwgRml4ZWQpOworICAgICAgICAgICAgbGluZUhlaWdo
dCA9IExlbmd0aCgoc3RhdGUuc3R5bGUoKS0+Zm9udFNpemUoKSAqIHByaW1pdGl2ZVZhbHVlLT5n
ZXRJbnRWYWx1ZSgpKSAvIDEwMCwgRml4ZWQpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2
ZVZhbHVlLT5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogbnVtYmVyIGFuZCBw
ZXJjZW50YWdlIHZhbHVlcyBzaG91bGQgcHJvZHVjZSB0aGUgc2FtZSB0eXBlIG9mIExlbmd0aCAo
aWUuIEZpeGVkIG9yIFBlcmNlbnQpLgogICAgICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0aChw
cmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSAqIDEwMC4wLCBQZXJjZW50KTsKQEAgLTEx
NzgsNyArMTE3OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBwcmltaXRp
dmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TGluZUhl
aWdodChsaW5lSGVpZ2h0KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUhlaWdodChs
aW5lSGVpZ2h0KTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5k
bGVyKCkKICAgICB7CkBAIC0xMjY1LDExICsxMjY1LDExIEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKikgeyB9Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciopIHsgfQotICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJp
dFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJikgeyB9CisgICAgc3RhdGlj
IHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUm
KSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+cmVzZXRQYWdlU2l6ZVR5cGUoKTsKKyAgICAgICAgc3RhdGUuc3R5
bGUoKS0+cmVzZXRQYWdlU2l6ZVR5cGUoKTsKICAgICAgICAgTGVuZ3RoIHdpZHRoOwogICAgICAg
ICBMZW5ndGggaGVpZ2h0OwogICAgICAgICBQYWdlU2l6ZVR5cGUgcGFnZVNpemVUeXBlID0gUEFH
RV9TSVpFX0FVVE87CkBAIC0xMjg1LDggKzEyODUsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgLy8gPGxlbmd0aD57Mn0KICAgICAgICAgICAgICAgICBpZiAoIXNlY29uZC0+aXNMZW5ndGgo
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIHdpZHRoID0g
Zmlyc3QtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHls
ZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkpOwotICAgICAgICAgICAgICAgIGhlaWdodCA9
IHNlY29uZC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0
eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSk7CisgICAgICAgICAgICAgICAgd2lkdGgg
PSBmaXJzdC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RF
bGVtZW50U3R5bGUoKSk7CisgICAgICAgICAgICAgICAgaGVpZ2h0ID0gc2Vjb25kLT5jb21wdXRl
TGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gPHBhZ2Utc2l6ZT4gPG9y
aWVudGF0aW9uPgogICAgICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBvcmRlciBpcyBndWFyYW50
ZWVkLiBTZWUgQ1NTUGFyc2VyOjpwYXJzZVNpemVQYXJhbWV0ZXIuCkBAIC0xMzA0LDcgKzEzMDQs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkp
IHsKICAgICAgICAgICAgICAgICAvLyA8bGVuZ3RoPgogICAgICAgICAgICAgICAgIHBhZ2VTaXpl
VHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsKLSAgICAgICAgICAgICAgICB3aWR0aCA9IGhlaWdo
dCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAg
ICAgICB3aWR0aCA9IGhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0
aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgMDoKQEAgLTEzMzAsMjkgKzEzMzAsMjkgQEAg
cHVibGljOgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFBhZ2VTaXplVHlwZShwYWdlU2l6
ZVR5cGUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRQYWdlU2l6ZShMZW5n
dGhTaXplKHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UGFnZVNp
emVUeXBlKHBhZ2VTaXplVHlwZSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFBhZ2VTaXpl
KExlbmd0aFNpemUod2lkdGgsIGhlaWdodCkpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlI
YW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5o
ZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQogfTsKIAogY2xh
c3MgQXBwbHlQcm9wZXJ0eVRleHRFbXBoYXNpc1N0eWxlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
dm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5
bGUoKS0+dGV4dEVtcGhhc2lzRmlsbCgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0VGV4dEVtcGhhc2lzTWFyayhzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0
RW1waGFzaXNNYXJrKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0
RW1waGFzaXNDdXN0b21NYXJrKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRFbXBo
YXNpc0N1c3RvbU1hcmsoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNp
c0ZpbGwoc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzRmlsbCgpKTsKKyAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhzdGF0ZS5wYXJlbnRTdHlsZSgpLT50
ZXh0RW1waGFzaXNNYXJrKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFz
aXNDdXN0b21NYXJrKHN0YXRlLnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNpc0N1c3RvbU1hcmso
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiAg
ICAgewotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxs
KFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzRmlsbCgpKTsKLSAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlh
bFRleHRFbXBoYXNpc01hcmsoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXND
dXN0b21NYXJrKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxs
KFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzRmlsbCgpKTsKKyAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBo
YXNpc01hcmsoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3Rv
bU1hcmsoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNDdXN0b21NYXJrKCkpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKICAg
ICAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+
KHZhbHVlKTsKQEAgLTEzNjYsMTEgKzEzNjYsMTEgQEAgcHVibGljOgogCiAgICAgICAgICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPihpdGVtKTsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPmdldElkZW50KCkgPT0gQ1NT
VmFsdWVGaWxsZWQgfHwgdmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVPcGVuKQotICAgICAg
ICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxs
KCp2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBo
YXNpc0ZpbGwoKnZhbHVlKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoKnZhbHVlKTsK
KyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyaygq
dmFsdWUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhudWxsQXRvbSk7CisgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0xMzc5LDIwICsxMzc5LDIwIEBAIHB1YmxpYzoK
ICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRU
ZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQpOwotICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJr
Q3VzdG9tKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBo
YXNpc0N1c3RvbU1hcmsocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChUZXh0RW1waGFzaXNGaWxs
RmlsbGVkKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmso
VGV4dEVtcGhhc2lzTWFya0N1c3RvbSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRU
ZXh0RW1waGFzaXNDdXN0b21NYXJrKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsobnVsbEF0b20pOworICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKTsKIAogICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVGaWxsZWQgfHwg
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVPcGVuKSB7Ci0gICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKCpwcmltaXRpdmVW
YWx1ZSk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFz
aXNNYXJrKFRleHRFbXBoYXNpc01hcmtBdXRvKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldFRleHRFbXBoYXNpc0ZpbGwoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFya0F1dG8pOwogICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4
dEVtcGhhc2lzRmlsbChUZXh0RW1waGFzaXNGaWxsRmlsbGVkKTsKLSAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoKnByaW1pdGl2ZVZhbHVlKTsK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoVGV4dEVtcGhh
c2lzRmlsbEZpbGxlZCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFz
aXNNYXJrKCpwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE0MDAsMTQg
KzE0MDAsMTQgQEAgcHVibGljOgogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQsCi0gICAgICAg
ICAgVCAoQW5pbWF0aW9uOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsCi0gICAgICAgICAgdm9p
ZCAoQW5pbWF0aW9uOjoqc2V0dGVyRnVuY3Rpb24pKFQpLAotICAgICAgICAgIGJvb2wgKEFuaW1h
dGlvbjo6KnRlc3RGdW5jdGlvbikoKSBjb25zdCwKLSAgICAgICAgICB2b2lkIChBbmltYXRpb246
OipjbGVhckZ1bmN0aW9uKSgpLAotICAgICAgICAgIFQgKCppbml0aWFsRnVuY3Rpb24pKCksCi0g
ICAgICAgICAgdm9pZCAoQ1NTVG9TdHlsZU1hcDo6Km1hcEZ1bmN0aW9uKShBbmltYXRpb24qLCBD
U1NWYWx1ZSopLAotICAgICAgICAgIEFuaW1hdGlvbkxpc3QqIChSZW5kZXJTdHlsZTo6KmFuaW1h
dGlvbkdldHRlckZ1bmN0aW9uKSgpLAotICAgICAgICAgIGNvbnN0IEFuaW1hdGlvbkxpc3QqIChS
ZW5kZXJTdHlsZTo6KmltbXV0YWJsZUFuaW1hdGlvbkdldHRlckZ1bmN0aW9uKSgpIGNvbnN0Pgor
ICAgIFQgKEFuaW1hdGlvbjo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LAorICAgIHZvaWQgKEFu
aW1hdGlvbjo6KnNldHRlckZ1bmN0aW9uKShUKSwKKyAgICBib29sIChBbmltYXRpb246Oip0ZXN0
RnVuY3Rpb24pKCkgY29uc3QsCisgICAgdm9pZCAoQW5pbWF0aW9uOjoqY2xlYXJGdW5jdGlvbiko
KSwKKyAgICBUICgqaW5pdGlhbEZ1bmN0aW9uKSgpLAorICAgIHZvaWQgKCptYXBGdW5jdGlvbiko
QW5pbWF0aW9uKiwgQ1NTVmFsdWUqKSwKKyAgICBBbmltYXRpb25MaXN0KiAoUmVuZGVyU3R5bGU6
OiphbmltYXRpb25HZXR0ZXJGdW5jdGlvbikoKSwKKyAgICBjb25zdCBBbmltYXRpb25MaXN0KiAo
UmVuZGVyU3R5bGU6OippbW11dGFibGVBbmltYXRpb25HZXR0ZXJGdW5jdGlvbikoKSBjb25zdD4K
IGNsYXNzIEFwcGx5UHJvcGVydHlBbmltYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IHNldFZhbHVlKEFuaW1hdGlvbiogYW5pbWF0aW9uLCBUIHZhbHVlKSB7IChhbmltYXRpb24tPipz
ZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9CkBAIC0xNDE1LDE0ICsxNDE1LDE0IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgYm9vbCB0ZXN0KGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uKSB7IHJldHVy
biAoYW5pbWF0aW9uLT4qdGVzdEZ1bmN0aW9uKSgpOyB9CiAgICAgc3RhdGljIHZvaWQgY2xlYXIo
QW5pbWF0aW9uKiBhbmltYXRpb24pIHsgKGFuaW1hdGlvbi0+KmNsZWFyRnVuY3Rpb24pKCk7IH0K
ICAgICBzdGF0aWMgVCBpbml0aWFsKCkgeyByZXR1cm4gKCppbml0aWFsRnVuY3Rpb24pKCk7IH0K
LSAgICBzdGF0aWMgdm9pZCBtYXAoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQW5pbWF0
aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3R5bGVSZXNvbHZlci0+c3R5bGVN
YXAoKS0+Km1hcEZ1bmN0aW9uKShhbmltYXRpb24sIHZhbHVlKTsgfQorICAgIHN0YXRpYyB2b2lk
IG1hcChTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NW
YWx1ZSogdmFsdWUpIHsgKCptYXBGdW5jdGlvbikoYW5pbWF0aW9uLCB2YWx1ZSk7IH0KICAgICBz
dGF0aWMgQW5pbWF0aW9uTGlzdCogYWNjZXNzQW5pbWF0aW9ucyhSZW5kZXJTdHlsZSogc3R5bGUp
IHsgcmV0dXJuIChzdHlsZS0+KmFuaW1hdGlvbkdldHRlckZ1bmN0aW9uKSgpOyB9CiAgICAgc3Rh
dGljIGNvbnN0IEFuaW1hdGlvbkxpc3QqIGFuaW1hdGlvbnMoUmVuZGVyU3R5bGUqIHN0eWxlKSB7
IHJldHVybiAoc3R5bGUtPippbW11dGFibGVBbmltYXRpb25HZXR0ZXJGdW5jdGlvbikoKTsgfQog
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAg
ICBBbmltYXRpb25MaXN0KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9ucyhzdHlsZVJlc29sdmVyLT5z
dHlsZSgpKTsKLSAgICAgICAgY29uc3QgQW5pbWF0aW9uTGlzdCogcGFyZW50TGlzdCA9IGFuaW1h
dGlvbnMoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSk7CisgICAgICAgIEFuaW1hdGlvbkxp
c3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0YXRlLnN0eWxlKCkpOworICAgICAgICBjb25z
dCBBbmltYXRpb25MaXN0KiBwYXJlbnRMaXN0ID0gYW5pbWF0aW9ucyhzdGF0ZS5wYXJlbnRTdHls
ZSgpKTsKICAgICAgICAgc2l6ZV90IGkgPSAwLCBwYXJlbnRTaXplID0gcGFyZW50TGlzdCA/IHBh
cmVudExpc3QtPnNpemUoKSA6IDA7CiAgICAgICAgIGZvciAoIDsgaSA8IHBhcmVudFNpemUgJiYg
dGVzdChwYXJlbnRMaXN0LT5hbmltYXRpb24oaSkpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChs
aXN0LT5zaXplKCkgPD0gaSkKQEAgLTE0MzYsOSArMTQzNiw5IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGNsZWFyKGxpc3QtPmFuaW1hdGlvbihpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAg
ICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMoc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKSk7CisgICAgICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRp
b25zKHN0YXRlLnN0eWxlKCkpOwogICAgICAgICBpZiAobGlzdC0+aXNFbXB0eSgpKQogICAgICAg
ICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOwogICAgICAgICBzZXRWYWx1
ZShsaXN0LT5hbmltYXRpb24oMCksIGluaXRpYWwoKSk7CkBAIC0xNDQ4LDIyICsxNDQ4LDIyIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGNsZWFyKGxpc3QtPmFuaW1hdGlvbihpKSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRp
b25zKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpOworICAgICAgICBBbmltYXRpb25MaXN0KiBsaXN0
ID0gYWNjZXNzQW5pbWF0aW9ucyhzdGF0ZS5zdHlsZSgpKTsKICAgICAgICAgc2l6ZV90IGNoaWxk
SW5kZXggPSAwOwogICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKICAgICAgICAg
ICAgIC8qIFdhbGsgZWFjaCB2YWx1ZSBhbmQgcHV0IGl0IGludG8gYW4gYW5pbWF0aW9uLCBjcmVh
dGluZyBuZXcgYW5pbWF0aW9ucyBhcyBuZWVkZWQuICovCiAgICAgICAgICAgICBmb3IgKENTU1Zh
bHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKGNoaWxkSW5kZXggPD0gbGlzdC0+c2l6ZSgpKQogICAgICAgICAg
ICAgICAgICAgICBsaXN0LT5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7Ci0gICAgICAgICAg
ICAgICAgbWFwKHN0eWxlUmVzb2x2ZXIsIGxpc3QtPmFuaW1hdGlvbihjaGlsZEluZGV4KSwgaS52
YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBtYXAoc3RhdGUsIGxpc3QtPmFuaW1hdGlvbihjaGls
ZEluZGV4KSwgaS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICArK2NoaWxkSW5kZXg7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobGlzdC0+aXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChBbmltYXRpb246OmNyZWF0ZSgpKTsK
LSAgICAgICAgICAgIG1hcChzdHlsZVJlc29sdmVyLCBsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRl
eCksIHZhbHVlKTsKKyAgICAgICAgICAgIG1hcChzdGF0ZSwgbGlzdC0+YW5pbWF0aW9uKGNoaWxk
SW5kZXgpLCB2YWx1ZSk7CiAgICAgICAgICAgICBjaGlsZEluZGV4ID0gMTsKICAgICAgICAgfQog
ICAgICAgICBmb3IgKCA7IGNoaWxkSW5kZXggPCBsaXN0LT5zaXplKCk7ICsrY2hpbGRJbmRleCkg
ewpAQCAtMTQ3NywyMiArMTQ3NywyMiBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlP
dXRsaW5lU3R5bGUgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikK
KyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEFwcGx5UHJvcGVy
dHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlz
QXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8s
IE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46
OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBB
cHBseVByb3BlcnR5RGVmYXVsdEJhc2U8RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6Om91dGxp
bmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZSwgRUJv
cmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46OmFwcGx5SW5oZXJp
dFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBBcHBseVByb3BlcnR5
RGVmYXVsdEJhc2U8T3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGVJc0F1
dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRvLCBP
dXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8+Ojph
cHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIEFwcGx5UHJvcGVy
dHlEZWZhdWx0QmFzZTxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBF
Qm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUs
ICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlJbmhlcml0VmFsdWUocHJv
cGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
cikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEFwcGx5UHJv
cGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHls
ZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1
dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0
bz46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAg
ICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6Om91
dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZSwg
RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46OmFwcGx5SW5p
dGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBBcHBseVByb3Bl
cnR5RGVmYXVsdEJhc2U8T3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGVJ
c0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRv
LCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8+
OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIEFwcGx5UHJv
cGVydHlEZWZhdWx0QmFzZTxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxl
LCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5
bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlJbml0aWFsVmFsdWUo
cHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgIHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8T3V0bGluZUlzQXV0bywgJlJlbmRl
clN0eWxlOjpvdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6
c2V0T3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OmluaXRp
YWxPdXRsaW5lU3R5bGVJc0F1dG8+OjphcHBseVZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2
ZXIsIHZhbHVlKTsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUJvcmRlclN0eWxlLCAm
UmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNl
dE91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJT
dHlsZT46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAg
ICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91
dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5l
U3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVT
dHlsZUlzQXV0bz46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6Om91dGxp
bmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZSwgRUJv
cmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46OmFwcGx5VmFsdWUo
cHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlI
YW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5o
ZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQpAQCAtMTUwMCw3
ICsxNTAwLDcgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5UmVzaXplIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTUxMiwxMyArMTUxMiwxMyBAQCBwdWJsaWM6CiAgICAg
ICAgIGNhc2UgMDoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBDU1NWYWx1ZUF1
dG86Ci0gICAgICAgICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gc3R5bGVSZXNvbHZlci0+
ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKSkKKyAgICAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGlu
Z3MgPSBzdGF0ZS5kb2N1bWVudCgpLT5zZXR0aW5ncygpKQogICAgICAgICAgICAgICAgIHIgPSBz
ZXR0aW5ncy0+dGV4dEFyZWFzQXJlUmVzaXphYmxlKCkgPyBSRVNJWkVfQk9USCA6IFJFU0laRV9O
T05FOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBy
ID0gKnByaW1pdGl2ZVZhbHVlOwogICAgICAgICB9Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldFJlc2l6ZShyKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UmVzaXplKHIp
OwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBA
IC0xNTMwLDcgKzE1MzAsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlWZXJ0aWNh
bEFsaWduIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBz
dGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTUzOCw5ICsxNTM4LDkgQEAg
cHVibGljOgogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAogICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAg
cmV0dXJuIHN0YXRlLnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ24oKnByaW1pdGl2ZVZhbHVlKTsK
IAotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFsaWduTGVuZ3Ro
KHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8
IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNl
bnRhZ2VDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5y
b290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFsaWduTGVuZ3RoKHByaW1p
dGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNl
bnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VD
b252ZXJzaW9uPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRl
LnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0
eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC0xNTUyLDMyICsxNTUyLDMyIEBAIHB1YmxpYzoK
IAogY2xhc3MgQXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlvIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
dm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIGlmICghc3R5bGVS
ZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+aGFzQXNwZWN0UmF0aW8oKSkKKyAgICAgICAgaWYgKCFz
dGF0ZS5wYXJlbnRTdHlsZSgpLT5oYXNBc3BlY3RSYXRpbygpKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0cnVl
KTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWlu
YXRvcihzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb0Rlbm9taW5hdG9y
KCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVy
YXRvcihzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb051bWVyYXRvcigp
KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8odHJ1ZSk7CisgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldEFzcGVjdFJhdGlvRGVub21pbmF0b3Ioc3RhdGUucGFyZW50
U3R5bGUoKS0+YXNwZWN0UmF0aW9EZW5vbWluYXRvcigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+YXNwZWN0UmF0
aW9OdW1lcmF0b3IoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0
aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0
ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNB
c3BlY3RSYXRpbyhSZW5kZXJTdHlsZTo6aW5pdGlhbEhhc0FzcGVjdFJhdGlvKCkpOwotICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKFJlbmRl
clN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9EZW5vbWluYXRvcigpKTsKLSAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3IoUmVuZGVyU3R5bGU6Omlu
aXRpYWxBc3BlY3RSYXRpb051bWVyYXRvcigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
SGFzQXNwZWN0UmF0aW8oUmVuZGVyU3R5bGU6OmluaXRpYWxIYXNBc3BlY3RSYXRpbygpKTsKKyAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihSZW5kZXJTdHls
ZTo6aW5pdGlhbEFzcGVjdFJhdGlvRGVub21pbmF0b3IoKSk7CisgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldEFzcGVjdFJhdGlvTnVtZXJhdG9yKFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0
aW9OdW1lcmF0b3IoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUp
CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVT
dGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUt
PmlzQXNwZWN0UmF0aW9WYWx1ZSgpKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyhmYWxzZSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRIYXNBc3BlY3RSYXRpbyhmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgQ1NTQXNwZWN0UmF0aW9WYWx1ZSogYXNwZWN0UmF0aW9WYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU0FzcGVjdFJhdGlvVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKHRydWUpOwotICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKGFzcGVjdFJhdGlvVmFsdWUt
PmRlbm9taW5hdG9yVmFsdWUoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dEFzcGVjdFJhdGlvTnVtZXJhdG9yKGFzcGVjdFJhdGlvVmFsdWUtPm51bWVyYXRvclZhbHVlKCkp
OworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0cnVlKTsKKyAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihhc3BlY3RSYXRpb1Zh
bHVlLT5kZW5vbWluYXRvclZhbHVlKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRBc3Bl
Y3RSYXRpb051bWVyYXRvcihhc3BlY3RSYXRpb1ZhbHVlLT5udW1lcmF0b3JWYWx1ZSgpKTsKICAg
ICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtMTU4
OCw0OCArMTU4OCw0OCBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlab29tIHsKIHBy
aXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcmVzZXRFZmZlY3RpdmVab29tKFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgcmVzZXRFZmZlY3RpdmVab29tKFN0eWxl
UmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7CiAgICAgICAgIC8vIFJlc2V0IHRoZSB6b29tIGlu
IGVmZmVjdC4gVGhpcyBhbGxvd3MgdGhlIHNldFpvb20gbWV0aG9kIHRvIGFjY3VyYXRlbHkgY29t
cHV0ZSBhIG5ldyB6b29tIGluIGVmZmVjdC4KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0RWZm
ZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpID8gc3R5bGVSZXNvbHZlci0+
cGFyZW50U3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpIDogUmVuZGVyU3R5bGU6OmluaXRpYWxab29t
KCkpOworICAgICAgICBzdGF0ZS5zZXRFZmZlY3RpdmVab29tKHN0YXRlLnBhcmVudFN0eWxlKCkg
PyBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5lZmZlY3RpdmVab29tKCkgOiBSZW5kZXJTdHlsZTo6aW5p
dGlhbFpvb20oKSk7CiAgICAgfQogCiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhl
cml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVS
ZXNvbHZlcik7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oc3R5bGVSZXNvbHZlci0+
cGFyZW50U3R5bGUoKS0+em9vbSgpKTsKKyAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0YXRl
KTsKKyAgICAgICAgc3RhdGUuc2V0Wm9vbShzdGF0ZS5wYXJlbnRTdHlsZSgpLT56b29tKCkpOwog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0
aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsK
LSAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBzdHls
ZVJlc29sdmVyLT5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICAgICAg
cmVzZXRFZmZlY3RpdmVab29tKHN0YXRlKTsKKyAgICAgICAgc3RhdGUuc2V0Wm9vbShSZW5kZXJT
dHlsZTo6aW5pdGlhbFpvb20oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSog
dmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VS
VCh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7
CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9y
bWFsKSB7Ci0gICAgICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7Ci0g
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9v
bSgpKTsKKyAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdGF0ZSk7CisgICAgICAgICAg
ICBzdGF0ZS5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKICAgICAgICAgfSBl
bHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVJlc2V0KSB7Ci0g
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxlOjpp
bml0aWFsWm9vbSgpKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oUmVuZGVy
U3R5bGU6OmluaXRpYWxab29tKCkpOworICAgICAgICAgICAgc3RhdGUuc2V0RWZmZWN0aXZlWm9v
bShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAgICAgICAgICBzdGF0ZS5zZXRab29t
KFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZURvY3VtZW50KSB7Ci0gICAgICAgICAgICBm
bG9hdCBkb2Nab29tID0gc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpID8gc3R5bGVS
ZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLT56b29tKCkgOiBSZW5kZXJTdHlsZTo6aW5pdGlh
bFpvb20oKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEVmZmVjdGl2ZVpvb20oZG9j
Wm9vbSk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKGRvY1pvb20pOworICAg
ICAgICAgICAgZmxvYXQgZG9jWm9vbSA9IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSA/IHN0YXRl
LnJvb3RFbGVtZW50U3R5bGUoKS0+em9vbSgpIDogUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCk7
CisgICAgICAgICAgICBzdGF0ZS5zZXRFZmZlY3RpdmVab29tKGRvY1pvb20pOworICAgICAgICAg
ICAgc3RhdGUuc2V0Wm9vbShkb2Nab29tKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+aXNQZXJjZW50YWdlKCkpIHsKLSAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShz
dHlsZVJlc29sdmVyKTsKKyAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdGF0ZSk7CiAg
ICAgICAgICAgICBpZiAoZmxvYXQgcGVyY2VudCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZh
bHVlKCkpCi0gICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9vbShwZXJjZW50IC8g
MTAwLjBmKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zZXRab29tKHBlcmNlbnQgLyAxMDAuMGYp
OwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7Ci0gICAg
ICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7CisgICAgICAgICAgICBy
ZXNldEVmZmVjdGl2ZVpvb20oc3RhdGUpOwogICAgICAgICAgICAgaWYgKGZsb2F0IG51bWJlciA9
IHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c2V0Wm9vbShudW1iZXIpOworICAgICAgICAgICAgICAgIHN0YXRlLnNldFpvb20o
bnVtYmVyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTY0MSw0MiArMTY0MSw0MiBAQCBwdWJs
aWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlEaXNwbGF5IHsKIHByaXZhdGU6Ci0gICAgc3RhdGlj
IGlubGluZSBib29sIGlzVmFsaWREaXNwbGF5VmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgRURpc3BsYXkgZGlzcGxheVByb3BlcnR5VmFsdWUpCisgICAgc3RhdGljIGlubGluZSBi
b29sIGlzVmFsaWREaXNwbGF5VmFsdWUoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBFRGlzcGxh
eSBkaXNwbGF5UHJvcGVydHlWYWx1ZSkKICAgICB7CiAjaWYgRU5BQkxFKFNWRykKLSAgICAgICAg
aWYgKHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKSAmJiBzdHlsZVJlc29sdmVyLT5lbGVtZW50KCkt
PmlzU1ZHRWxlbWVudCgpICYmIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnN0eWxlVHlwZSgpID09
IE5PUFNFVURPKQorICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpICYmIHN0YXRlLmVsZW1lbnQo
KS0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGUuc3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VV
RE8pCiAgICAgICAgICAgICByZXR1cm4gKGRpc3BsYXlQcm9wZXJ0eVZhbHVlID09IElOTElORSB8
fCBkaXNwbGF5UHJvcGVydHlWYWx1ZSA9PSBCTE9DSyB8fCBkaXNwbGF5UHJvcGVydHlWYWx1ZSA9
PSBOT05FKTsKICNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShzdHlsZVJlc29sdmVyKTsKKyAg
ICAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICAgICAgVU5VU0VEX1BBUkFNKGRpc3BsYXlQ
cm9wZXJ0eVZhbHVlKTsKICNlbmRpZgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiBwdWJs
aWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAg
ICAgICBFRGlzcGxheSBkaXNwbGF5ID0gc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+ZGlz
cGxheSgpOwotICAgICAgICBpZiAoIWlzVmFsaWREaXNwbGF5VmFsdWUoc3R5bGVSZXNvbHZlciwg
ZGlzcGxheSkpCisgICAgICAgIEVEaXNwbGF5IGRpc3BsYXkgPSBzdGF0ZS5wYXJlbnRTdHlsZSgp
LT5kaXNwbGF5KCk7CisgICAgICAgIGlmICghaXNWYWxpZERpc3BsYXlWYWx1ZShzdGF0ZSwgZGlz
cGxheSkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldERpc3BsYXkoZGlzcGxheSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldERpc3Bs
YXkoZGlzcGxheSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMg
dm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYg
c3RhdGUpCiAgICAgewotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXREaXNwbGF5
KFJlbmRlclN0eWxlOjppbml0aWFsRGlzcGxheSgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0RGlzcGxheShSZW5kZXJTdHlsZTo6aW5pdGlhbERpc3BsYXkoKSk7CiAgICAgfQogCi0gICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICBFRGlzcGxheSBkaXNwbGF5ID0gKnN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCi0gICAgICAgIGlmICghaXNWYWxpZERpc3BsYXlW
YWx1ZShzdHlsZVJlc29sdmVyLCBkaXNwbGF5KSkKKyAgICAgICAgaWYgKCFpc1ZhbGlkRGlzcGxh
eVZhbHVlKHN0YXRlLCBkaXNwbGF5KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXREaXNwbGF5KGRpc3BsYXkpOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXREaXNwbGF5KGRpc3BsYXkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9w
ZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC0xNjg5LDIxICsxNjg5LDIxIEBAIHRlbXBs
YXRlIDxDbGlwUGF0aE9wZXJhdGlvbiogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkg
Y29uc3QsIHZvaWQgKFJlbmRlCiBjbGFzcyBBcHBseVByb3BlcnR5Q2xpcFBhdGggewogcHVibGlj
OgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgUGFzc1JlZlB0
cjxDbGlwUGF0aE9wZXJhdGlvbj4gdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZh
bHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkgewogICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAg
IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIDApOworICAgICAgICAgICAgICAgIHNl
dFZhbHVlKHN0YXRlLnN0eWxlKCksIDApOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZl
VmFsdWUtPmlzU2hhcGUoKSkgewotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCksIFNoYXBlQ2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZShiYXNpY1NoYXBlRm9y
VmFsdWUoc3R5bGVSZXNvbHZlciwgcHJpbWl0aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUoKSkpKTsK
KyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBTaGFwZUNsaXBQYXRoT3Bl
cmF0aW9uOjpjcmVhdGUoYmFzaWNTaGFwZUZvclZhbHVlKHN0YXRlLCBwcmltaXRpdmVWYWx1ZS0+
Z2V0U2hhcGVWYWx1ZSgpKSkpOwogICAgICAgICAgICAgfQogI2lmIEVOQUJMRShTVkcpCiAgICAg
ICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGNzc1VSTFZh
bHVlID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7Ci0gICAgICAgICAgICAgICAg
S1VSTCB1cmwgPSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChjc3NVUkxW
YWx1ZSk7CisgICAgICAgICAgICAgICAgS1VSTCB1cmwgPSBzdGF0ZS5kb2N1bWVudCgpLT5jb21w
bGV0ZVVSTChjc3NVUkxWYWx1ZSk7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0IGRvZXNu
J3Qgd29yayB3aXRoIGZvcndhcmQgb3IgZXh0ZXJuYWwgU1ZHIHJlZmVyZW5jZXMgKHNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA0MDUpCi0gICAgICAgICAgICAg
ICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgUmVmZXJlbmNlQ2xpcFBhdGhPcGVy
YXRpb246OmNyZWF0ZShjc3NVUkxWYWx1ZSwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigpKSk7Cisg
ICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgUmVmZXJlbmNlQ2xpcFBhdGhP
cGVyYXRpb246OmNyZWF0ZShjc3NVUkxWYWx1ZSwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigpKSk7
CiAgICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgfQpAQCAtMTcyMCwxOCArMTcyMCwxOCBA
QCB0ZW1wbGF0ZSA8RXhjbHVzaW9uU2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVu
Y3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbgogY2xhc3MgQXBwbHlQcm9wZXJ0eUV4Y2x1c2lvblNo
YXBlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5
bGUsIFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gdmFsdWUpIHsgKHN0eWxlLT4qc2V0
dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3Rh
dGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkgewogICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAg
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKQot
ICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIDApOworICAg
ICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIDApOwogICAgICAgICAgICAgLy8g
RklYTUUgQnVnIDEwMjU3MTogTGF5b3V0IGZvciB0aGUgdmFsdWUgJ291dHNpZGUtc2hhcGUnIGlz
IG5vdCB5ZXQgaW1wbGVtZW50ZWQKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlT3V0c2lkZVNoYXBlKQotICAgICAgICAgICAgICAgIHNl
dFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0
ZU91dHNpZGVWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgp
LCBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVPdXRzaWRlVmFsdWUoKSk7CiAgICAgICAgICAg
ICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNTaGFwZSgpKSB7Ci0gICAgICAgICAgICAgICAg
UmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHNoYXBlID0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6
Y3JlYXRlU2hhcGVWYWx1ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3R5bGVSZXNvbHZlciwgcHJpbWl0
aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUoKSkpOwotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIHNoYXBlLnJlbGVhc2UoKSk7CisgICAgICAgICAgICAgICAg
UmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHNoYXBlID0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6
Y3JlYXRlU2hhcGVWYWx1ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3RhdGUsIHByaW1pdGl2ZVZhbHVl
LT5nZXRTaGFwZVZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHls
ZSgpLCBzaGFwZS5yZWxlYXNlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtMTc0NiwyMSArMTc0NiwyMSBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKENTU19JTUFHRV9SRVNP
TFVUSU9OKQogY2xhc3MgQXBwbHlQcm9wZXJ0eUltYWdlUmVzb2x1dGlvbiB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5o
ZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0
YXRlKQogICAgIHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1
dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVz
b2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UsIElt
YWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9u
U291cmNlPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0g
ICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVu
ZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5k
ZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJl
bmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU25hcD46OmFwcGx5SW5oZXJpdFZhbHVl
KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVs
dEJhc2U8ZmxvYXQsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRl
clN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJ
bWFnZVJlc29sdXRpb24+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29s
dmVyKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNv
dXJjZSwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlv
blNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVz
b2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNl
Pjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBBcHBseVBy
b3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbWFn
ZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OnNldElt
YWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW5p
dGlhbEltYWdlUmVzb2x1dGlvblNuYXA+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBz
dGF0ZSk7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxmbG9hdCwgJlJlbmRlclN0
eWxlOjppbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1
dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvbj46OmFwcGx5
SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewot
ICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU291cmNlLCAm
UmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNl
LCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9u
U291cmNlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25Tb3VyY2U+OjphcHBs
eUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgQXBwbHlQ
cm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW1h
Z2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjpzZXRJ
bWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6Omlu
aXRpYWxJbWFnZVJlc29sdXRpb25TbmFwPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwg
c3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxmbG9hdCwg
JlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OnNldElt
YWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlv
bj46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAg
ICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVy
U3R5bGU6OmltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVu
ZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNl
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25Tb3VyY2U+OjphcHBseUluaXRp
YWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0
QmFzZTxJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNu
YXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9u
U25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNv
bHV0aW9uU25hcD46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAg
ICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPGZsb2F0LCAmUmVuZGVyU3R5bGU6OmltYWdlUmVz
b2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwg
JlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uPjo6YXBwbHlJbml0aWFsVmFsdWUo
cHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZh
bHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZh
bHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTc4MCw5ICsxNzgw
LDkgQEAgcHVibGljOgogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJlc29sdXRp
b24gPSBwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19EUFBYKTsKICAgICAgICAgfQotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRJ
bWFnZVJlc29sdXRpb25Tb3VyY2Uoc291cmNlKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU25hcChzbmFwKTsKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uKHJlc29sdXRpb24pOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25Tb3VyY2Uoc291cmNlKTsKKyAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU25hcChzbmFwKTsKKyAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uKHJlc29sdXRpb24pOwogICAgIH0KIAogICAgIHN0
YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWls
ZGVyLmgKaW5kZXggNGZmZTg1MjM0YzEzZDBmYmIxNDQ2ZTA2ODgxYzlmN2ZlZmM3MDY3Yi4uNTkx
ZGRhOWI2MjhlMTc1OTMwZjg1ZjY0Y2E0ZDljOGU4ZTgyOWZmNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZUJ1aWxkZXIuaApAQCAtMzMsMTggKzMzLDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQ1NTVmFsdWU7CiBjbGFzcyBTdHlsZUJ1aWxkZXI7CitjbGFzcyBTdHlsZVJlc29sdmVTdGF0
ZTsKIGNsYXNzIFN0eWxlUmVzb2x2ZXI7CiAKIGNsYXNzIFByb3BlcnR5SGFuZGxlciB7CiBwdWJs
aWM6Ci0gICAgdHlwZWRlZiB2b2lkICgqSW5oZXJpdEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKik7Ci0gICAgdHlwZWRlZiB2b2lkICgqSW5pdGlhbEZ1bmN0aW9uKShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKik7Ci0gICAgdHlwZWRlZiB2b2lkICgqQXBwbHlGdW5j
dGlvbikoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciosIENTU1ZhbHVlKik7CisgICAgdHlw
ZWRlZiB2b2lkICgqSW5oZXJpdEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVT
dGF0ZSYpOworICAgIHR5cGVkZWYgdm9pZCAoKkluaXRpYWxGdW5jdGlvbikoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlU3RhdGUmKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpBcHBseUZ1bmN0aW9u
KShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYsIENTU1ZhbHVlKik7CiAgICAgUHJv
cGVydHlIYW5kbGVyKCkgOiBtX2luaGVyaXQoMCksIG1faW5pdGlhbCgwKSwgbV9hcHBseSgwKSB7
IH0KICAgICBQcm9wZXJ0eUhhbmRsZXIoSW5oZXJpdEZ1bmN0aW9uIGluaGVyaXQsIEluaXRpYWxG
dW5jdGlvbiBpbml0aWFsLCBBcHBseUZ1bmN0aW9uIGFwcGx5KSA6IG1faW5oZXJpdChpbmhlcml0
KSwgbV9pbml0aWFsKGluaXRpYWwpLCBtX2FwcGx5KGFwcGx5KSB7IH0KLSAgICB2b2lkIGFwcGx5
SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlcikgY29uc3QgeyBBU1NFUlQobV9pbmhlcml0KTsgKCptX2luaGVyaXQpKHByb3Bl
cnR5SUQsIHN0eWxlUmVzb2x2ZXIpOyB9Ci0gICAgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIGNvbnN0
IHsgQVNTRVJUKG1faW5pdGlhbCk7ICgqbV9pbml0aWFsKShwcm9wZXJ0eUlELCBzdHlsZVJlc29s
dmVyKTsgfQotICAgIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkgY29uc3QgeyBBU1NF
UlQobV9hcHBseSk7ICgqbV9hcHBseSkocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUp
OyB9CisgICAgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkgY29uc3QgeyBBU1NFUlQobV9pbmhlcml0KTsgKCpt
X2luaGVyaXQpKHByb3BlcnR5SUQsIHN0YXRlKTsgfQorICAgIHZvaWQgYXBwbHlJbml0aWFsVmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpIGNv
bnN0IHsgQVNTRVJUKG1faW5pdGlhbCk7ICgqbV9pbml0aWFsKShwcm9wZXJ0eUlELCBzdGF0ZSk7
IH0KKyAgICB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkgY29uc3QgeyBBU1NFUlQobV9hcHBs
eSk7ICgqbV9hcHBseSkocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsgfQogICAgIGJvb2wgaXNW
YWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5oZXJpdCAmJiBtX2luaXRpYWwgJiYgbV9hcHBseTsg
fQogICAgIEluaGVyaXRGdW5jdGlvbiBpbmhlcml0RnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBt
X2luaGVyaXQ7IH0KICAgICBJbml0aWFsRnVuY3Rpb24gaW5pdGlhbEZ1bmN0aW9uKCkgeyByZXR1
cm4gbV9pbml0aWFsOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVTdGF0ZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjg1ZWZkOTRmZjhjZDNlYWU4ZGZhNjdlMGI1MzcyZWJjYTE3YjhiZjMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlU3RhdGUuaApAQCAtMCww
ICsxLDIzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpZm5kZWYgU3R5bGVSZXNvbHZlU3RhdGVfaAorI2RlZmluZSBTdHlsZVJlc29sdmVTdGF0ZV9o
CisKKyNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNs
dWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgorI2lmIEVO
QUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJXZWJLaXRDU1NTVkdE
b2N1bWVudFZhbHVlLmgiCisjZW5kaWYKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordHlwZWRlZiBIYXNoTWFwPENTU1Byb3BlcnR5SUQsIFJlZlB0cjxDU1NWYWx1
ZT4gPiBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYm
IEVOQUJMRShTVkcpCit0eXBlZGVmIEhhc2hNYXA8RmlsdGVyT3BlcmF0aW9uKiwgUmVmUHRyPFdl
YktpdENTU1NWR0RvY3VtZW50VmFsdWU+ID4gUGVuZGluZ1NWR0RvY3VtZW50TWFwOworI2VuZGlm
CisKK2NsYXNzIFJlbmRlclJlZ2lvbjsKK2NsYXNzIFJ1bGVEYXRhOworCitjbGFzcyBTdHlsZVJl
c29sdmVTdGF0ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3R5bGVSZXNvbHZlU3RhdGUp
OworcHVibGljOgorICAgIFN0eWxlUmVzb2x2ZVN0YXRlKCkKKyAgICA6IG1fZWxlbWVudCgwKQor
ICAgICwgbV9zdHlsZSgwKQorICAgICwgbV9pbmNsdWRlRW1wdHlSdWxlcyhmYWxzZSkKKyAgICAs
IG1fc2FtZU9yaWdpbk9ubHkoZmFsc2UpCisgICAgLCBtX3BzZXVkb1N0eWxlKE5PUFNFVURPKQor
ICAgICwgbV9tb2RlKFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpCisgICAgLCBtX3Jl
Z2lvbkZvclN0eWxpbmcoMCkKKyAgICAsIG1fZWxlbWVudExpbmtTdGF0ZShOb3RJbnNpZGVMaW5r
KQorICAgICwgbV9wYXJlbnROb2RlKDApCisgICAgLCBtX3BhcmVudFN0eWxlKDApCisgICAgLCBt
X2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludChmYWxzZSkKKyAgICAsIG1fcm9vdEVsZW1lbnRT
dHlsZSgwKQorICAgICwgbV9jYW5Vc2VGYXN0UmVqZWN0KGZhbHNlKQorICAgICwgbV9lbGVtZW50
QWZmZWN0ZWRCeUNsYXNzUnVsZXMoZmFsc2UpCisgICAgLCBtX2FwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSh0cnVlKQorICAgICwgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZh
bHNlKQorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICAsIG1faGFzUGVuZGluZ1NoYWRlcnMo
ZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fbGluZUhlaWdodFZhbHVlKDApCisgICAgLCBtX2ZvbnRE
aXJ0eShmYWxzZSkKKyAgICAsIG1faGFzVUFBcHBlYXJhbmNlKGZhbHNlKQorICAgICwgbV9iYWNr
Z3JvdW5kRGF0YShCYWNrZ3JvdW5kRmlsbExheWVyKSB7IH0KKworcHVibGljOgorICAgIFJlbmRl
clN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KKyAgICBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9CisgICAgUmVu
ZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50
U3R5bGU7IH0KKyAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50
OyB9CisgICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3R5bGVkRWxlbWVudDsgfQorICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKTsgfQorICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5
bGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaW9uRm9yU3R5bGluZzsgfQorICAgIFNlbGVjdG9y
Q2hlY2tlcjo6TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgUHNldWRv
SWQgcHNldWRvU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3BzZXVkb1N0eWxlOyB9CisgICAgY29u
c3QgQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50Tm9k
ZTsgfQorICAgIEVJbnNpZGVMaW5rIGVsZW1lbnRMaW5rU3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X2VsZW1lbnRMaW5rU3RhdGU7IH0KKyAgICBib29sIGRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2lu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50OyB9CisKKyAg
ICB2b2lkIHNldENhblVzZUZhc3RSZWplY3QoYm9vbCBjYW5Vc2VGYXN0UmVqZWN0KSB7IG1fY2Fu
VXNlRmFzdFJlamVjdCA9IGNhblVzZUZhc3RSZWplY3Q7IH0KKyAgICBib29sIGNhblVzZUZhc3RS
ZWplY3QoKSBjb25zdCB7IHJldHVybiBtX2NhblVzZUZhc3RSZWplY3Q7IH0KKworICAgIHZvaWQg
c2V0U3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKSB7IG1fc3R5bGUgPSBzdHlsZTsgfQorICAgIHZv
aWQgc2V0Um9vdEVsZW1lbnRTdHlsZShSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSkgeyBt
X3Jvb3RFbGVtZW50U3R5bGUgPSByb290RWxlbWVudFN0eWxlOyB9CisgICAgdm9pZCBzZXRFbGVt
ZW50KEVsZW1lbnQqIGUpIHsgbV9lbGVtZW50ID0gZTsgbV9zdHlsZWRFbGVtZW50ID0gZSAmJiBl
LT5pc1N0eWxlZEVsZW1lbnQoKSA/IHRvU3R5bGVkRWxlbWVudChlKSA6IDA7IH0KKyAgICB2b2lk
IHNldEVsZW1lbnRMaW5rU3RhdGUoRUluc2lkZUxpbmsgZWxlbWVudExpbmtTdGF0ZSkgeyBtX2Vs
ZW1lbnRMaW5rU3RhdGUgPSBlbGVtZW50TGlua1N0YXRlOyB9CisgICAgdm9pZCBzZXRQYXJlbnRO
b2RlKENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUpIHsgbV9wYXJlbnROb2RlID0gcGFyZW50Tm9k
ZTsgfQorICAgIHZvaWQgc2V0UGFyZW50U3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSB7
IG1fcGFyZW50U3R5bGUgPSBwYXJlbnRTdHlsZTsgfQorICAgIHZvaWQgc2V0RGlzdHJpYnV0ZWRU
b0luc2VydGlvblBvaW50KGJvb2wgZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KSB7IG1fZGlz
dHJpYnV0ZWRUb0luc2VydGlvblBvaW50ID0gZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50OyB9
CisgICAgdm9pZCBzZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSBtb2RlKSB7IG1fbW9kZSA9
IG1vZGU7IH0KKyAgICB2b2lkIHNldFJlZ2lvbkZvclN0eWxpbmcoUmVuZGVyUmVnaW9uKiByZWdp
b25Gb3JTdHlsaW5nKSB7IG1fcmVnaW9uRm9yU3R5bGluZyA9IHJlZ2lvbkZvclN0eWxpbmc7IH0K
KyAgICB2b2lkIHNldFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkb1N0eWxlKSB7IG1fcHNldWRv
U3R5bGUgPSBwc2V1ZG9TdHlsZTsgfQorCisgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24oKSB7IHJldHVybiBzdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsgfQorICAg
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4g
cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KKworICAgIHZvaWQgc2V0Rm9udERl
c2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fZm9u
dERpcnR5IHw9IHN0eWxlKCktPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9
CisKKyAgICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5z
ZXRab29tKGYpOyB9CisgICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9mb250
RGlydHkgfD0gc3R5bGUoKS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQorCisgICAgdm9pZCBzZXRU
ZXh0U2l6ZUFkanVzdChib29sIGIpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0VGV4dFNp
emVBZGp1c3QoYik7IH0KKyAgICB2b2lkIHNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRp
bmdNb2RlKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFdyaXRpbmdNb2RlKHdyaXRpbmdN
b2RlKTsgfQorICAgIHZvaWQgc2V0VGV4dE9yaWVudGF0aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0
T3JpZW50YXRpb24pIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0VGV4dE9yaWVudGF0aW9u
KHRleHRPcmllbnRhdGlvbik7IH0KKworICAgIHZvaWQgc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxh
clN0eWxlKGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKSB7IG1fYXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlID0gYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOyB9CisgICAgdm9p
ZCBzZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGJvb2wgYXBwbHlQcm9wZXJ0eVRv
VmlzaXRlZExpbmtTdHlsZSkgeyBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBh
cHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOyB9CisgICAgYm9vbCBhcHBseVByb3BlcnR5
VG9SZWd1bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZTsgfQorICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsgfQorCisgICAgVmVj
dG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+JiBtYXRjaGVkUnVsZXMoKSB7IHJldHVybiBtX21hdGNo
ZWRSdWxlczsgfQorICAgIGNvbnN0IFJ1bGVEYXRhKiBtYXRjaGVkUnVsZUF0KGludCBpbmRleCkg
eyByZXR1cm4gbV9tYXRjaGVkUnVsZXNbaW5kZXhdOyB9CisKKyAgICB2b2lkIHNldEVsZW1lbnRB
ZmZlY3RlZEJ5Q2xhc3NSdWxlcyhib29sIGFmZmVjdGVkQnlDbGFzc1J1bGVzKSB7IG1fZWxlbWVu
dEFmZmVjdGVkQnlDbGFzc1J1bGVzID0gYWZmZWN0ZWRCeUNsYXNzUnVsZXM7IH0KKyAgICBib29s
IGVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudEFm
ZmVjdGVkQnlDbGFzc1J1bGVzOyB9CisgICAgCisgICAgdm9pZCBjYWNoZUJvcmRlckFuZEJhY2tn
cm91bmQoUmVuZGVyU3R5bGUqIHN0eWxlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0eWxlKTsK
KyAgICAgICAgbV9oYXNVQUFwcGVhcmFuY2UgPSBzdHlsZS0+aGFzQXBwZWFyYW5jZSgpOworICAg
ICAgICBpZiAobV9oYXNVQUFwcGVhcmFuY2UpIHsKKyAgICAgICAgICAgIG1fYm9yZGVyRGF0YSA9
IHN0eWxlLT5ib3JkZXIoKTsKKyAgICAgICAgICAgIG1fYmFja2dyb3VuZERhdGEgPSAqc3R5bGUt
PmJhY2tncm91bmRMYXllcnMoKTsKKyAgICAgICAgICAgIG1fYmFja2dyb3VuZENvbG9yID0gc3R5
bGUtPmJhY2tncm91bmRDb2xvcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUGVuZGluZ0lt
YWdlUHJvcGVydHlNYXAmIHBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKSB7IHJldHVybiBtX3BlbmRp
bmdJbWFnZVByb3BlcnRpZXM7IH0KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxF
KFNWRykKKyAgICBQZW5kaW5nU1ZHRG9jdW1lbnRNYXAmIHBlbmRpbmdTVkdEb2N1bWVudHMoKSB7
IHJldHVybiBtX3BlbmRpbmdTVkdEb2N1bWVudHM7IH0KKyNlbmRpZgorCisgICAgdm9pZCBzZXRM
aW5lSGVpZ2h0VmFsdWUoQ1NTVmFsdWUqIHZhbHVlKSB7IG1fbGluZUhlaWdodFZhbHVlID0gdmFs
dWU7IH0KKyAgICBDU1NWYWx1ZSogbGluZUhlaWdodFZhbHVlKCkgeyByZXR1cm4gbV9saW5lSGVp
Z2h0VmFsdWU7IH0KKworICAgIGJvb2wgaGFzUGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cGFyZW50Tm9kZTsgfQorCisgICAgdm9pZCBzZXRGb250RGlydHkoYm9vbCBkaXJ0eSkgeyBtX2Zv
bnREaXJ0eSA9IGRpcnR5OyB9CisgICAgYm9vbCBmb250RGlydHkoKSBjb25zdCB7IHJldHVybiBt
X2ZvbnREaXJ0eTsgfQorCisgICAgU3RhdGljQ1NTUnVsZUxpc3QqIGVuc3VyZVJ1bGVMaXN0KCkK
KyAgICB7CisgICAgICAgIGlmICghbV9ydWxlTGlzdCkKKyAgICAgICAgICAgIG1fcnVsZUxpc3Qg
PSBTdGF0aWNDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7CisgICAgICAgIHJldHVybiBtX3J1bGVMaXN0
LmdldCgpOworICAgIH0KKworICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4mIHJ1bGVMaXN0
KCkgeyByZXR1cm4gbV9ydWxlTGlzdDsgfQorCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAg
IHZvaWQgc2V0SGFzUGVuZGluZ1NoYWRlcnMoYm9vbCBoYXNQZW5kaW5nU2hhZGVycykgeyBtX2hh
c1BlbmRpbmdTaGFkZXJzID0gaGFzUGVuZGluZ1NoYWRlcnM7IH0KKyAgICBib29sIGhhc1BlbmRp
bmdTaGFkZXJzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNQZW5kaW5nU2hhZGVyczsgfQorI2VuZGlm
CisKKy8vIFNWRyBoYW5kbGVzIHpvb21pbmcgaW4gYSBkaWZmZXJlbnQgd2F5IGNvbXBhcmVkIHRv
IENTUy4gVGhlIHdob2xlIGRvY3VtZW50IGlzIHNjYWxlZCBpbnN0ZWFkCisvLyBvZiBlYWNoIGlu
ZGl2aWR1YWwgbGVuZ3RoIHZhbHVlIGluIHRoZSByZW5kZXIgc3R5bGUgLyB0cmVlLiBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aCooKQorLy8gbXVsdGlwbGllcyBlYWNoIHJlc29sdmVk
IGxlbmd0aCB3aXRoIHRoZSB6b29tIG11bHRpcGxpZXIgLSBzbyBmb3IgU1ZHIHdlIG5lZWQgdG8g
ZGlzYWJsZSB0aGF0LgorLy8gVGhvdWdoIGFsbCBDU1MgdmFsdWVzIHRoYXQgY2FuIGJlIGFwcGxp
ZWQgdG8gb3V0ZXJtb3N0IDxzdmc+IGVsZW1lbnRzICh3aWR0aC9oZWlnaHQvYm9yZGVyL3BhZGRp
bmcuLi4pCisvLyBuZWVkIHRvIHJlc3BlY3QgdGhlIHNjYWxpbmcuIFJlbmRlckJveCAodGhlIHBh
cmVudCBjbGFzcyBvZiBSZW5kZXJTVkdSb290KSBncmFicyB2YWx1ZXMgbGlrZQorLy8gd2lkdGgv
aGVpZ2h0L2JvcmRlci9wYWRkaW5nLy4uLiBmcm9tIHRoZSBSZW5kZXJTdHlsZSAtPiBmb3IgU1ZH
IHRoZXNlIHZhbHVlcyB3b3VsZCBuZXZlciBzY2FsZSwKKy8vIGlmIHdlJ2QgcGFzcyBhIDEuMCB6
b29tIGZhY3RvciBldmVyeWh3ZXJlLiBTbyB3ZSBvbmx5IHBhc3MgYSB6b29tIGZhY3RvciBvZiAx
LjAgZm9yIHNwZWNpZmljCisvLyBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5PVCBhbGxvd2VkIHRvIHNj
YWxlIHdpdGhpbiBhIHpvb21lZCBTVkcgZG9jdW1lbnQgKGxldHRlci93b3JkLXNwYWNpbmcvZm9u
dC1zaXplKS4KKyAgICBib29sIHVzZVNWR1pvb21SdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZWxl
bWVudCAmJiBtX2VsZW1lbnQtPmlzU1ZHRWxlbWVudCgpOyB9CisKKyAgICBib29sIGhhc1VBQXBw
ZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVUFBcHBlYXJhbmNlOyB9CisgICAgY29uc3Qg
Qm9yZGVyRGF0YSYgYm9yZGVyRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyRGF0YTsgfQor
ICAgIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZERhdGEoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tncm91bmREYXRhOyB9CisgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNrZ3JvdW5kQ29sb3I7IH0KKworICAgIHZvaWQgc2V0SW5jbHVkZUVtcHR5UnVsZXMo
Ym9vbCBpbmNsdWRlRW1wdHlSdWxlcykgeyBtX2luY2x1ZGVFbXB0eVJ1bGVzID0gaW5jbHVkZUVt
cHR5UnVsZXM7IH0KKyAgICB2b2lkIHNldFNhbWVPcmlnaW5Pbmx5KGJvb2wgc2FtZU9yaWdpbk9u
bHkpIHsgbV9zYW1lT3JpZ2luT25seSA9IHNhbWVPcmlnaW5Pbmx5OyB9CisgICAgYm9vbCBpbmNs
dWRlRW1wdHlSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1faW5jbHVkZUVtcHR5UnVsZXM7IH0KKyAg
ICBib29sIHNhbWVPcmlnaW5Pbmx5KCkgY29uc3QgeyByZXR1cm4gbV9zYW1lT3JpZ2luT25seTsg
fQorCitwcml2YXRlOgorICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICBSZW5kZXJTdHlsZSog
bV9zdHlsZTsKKyAgICBTdHlsZWRFbGVtZW50KiBtX3N0eWxlZEVsZW1lbnQ7CisKKyAgICBib29s
IG1faW5jbHVkZUVtcHR5UnVsZXM7IC8vIHNob3VsZCBiZSBtb3ZlZCB0byBNYXRjaFJlcXVlc3Q/
CisgICAgYm9vbCBtX3NhbWVPcmlnaW5Pbmx5OyAvLyBzaG91bGQgYmUgbW92ZWQgdG8gTWF0Y2hS
ZXF1ZXN0PworICAgIFBzZXVkb0lkIG1fcHNldWRvU3R5bGU7IC8vIHNob3VsZCBiZSBtb3ZlZCB0
byBNYXRjaFJlcXVlc3Q/CisgICAgU2VsZWN0b3JDaGVja2VyOjpNb2RlIG1fbW9kZTsKKworICAg
IFJlbmRlclJlZ2lvbiogbV9yZWdpb25Gb3JTdHlsaW5nOworICAgIEVJbnNpZGVMaW5rIG1fZWxl
bWVudExpbmtTdGF0ZTsKKworICAgIENvbnRhaW5lck5vZGUqIG1fcGFyZW50Tm9kZTsKKyAgICBS
ZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZTsKKyAgICBib29sIG1fZGlzdHJpYnV0ZWRUb0luc2Vy
dGlvblBvaW50OyAvLyBvbmx5IHN0eWxlRm9yRWxlbWVudCBuZWVkcy4KKyAgICBSZW5kZXJTdHls
ZSogbV9yb290RWxlbWVudFN0eWxlOyAvLyBhcHBseVByb3BlcnR5IG5lZWRzLgorCisgICAgYm9v
bCBtX2NhblVzZUZhc3RSZWplY3Q7IC8vIGNvbGxlY3RNYXRjaGVkUnVsZXNGb3JMaXN0IHVzZXMu
CisgICAgYm9vbCBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlczsgLy8gc2libGluZyBzdHls
ZSBzaGFyaW5nIG5lZWRzLgorCisgICAgLy8gQSBidWZmZXIgdXNlZCB0byBob2xkIHRoZSBzZXQg
b2YgbWF0Y2hlZCBydWxlcyBmb3IgYW4gZWxlbWVudCwKKyAgICAvLyBhbmQgYSB0ZW1wb3Jhcnkg
YnVmZmVyIHVzZWQgZm9yIG1lcmdlIHNvcnRpbmcuCisgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRh
KiwgMzI+IG1fbWF0Y2hlZFJ1bGVzOworICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4gbV9y
dWxlTGlzdDsKKworICAgIC8vIGFwcGx5UHJvcGVydHkgbmVlZHMuCisgICAgYm9vbCBtX2FwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsKKyAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRl
ZExpbmtTdHlsZTsKKworICAgIC8vIFBlbmRpbmdJbWFnZVByb3BlcnRpZXMgYXJlIHBlci1yZXNv
bHZpbmcgbWVtYmVyLgorICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwIG1fcGVuZGluZ0ltYWdl
UHJvcGVydGllczsKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgYm9vbCBtX2hhc1BlbmRp
bmdTaGFkZXJzOworI2VuZGlmCisjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZH
KQorICAgIFBlbmRpbmdTVkdEb2N1bWVudE1hcCBtX3BlbmRpbmdTVkdEb2N1bWVudHM7CisjZW5k
aWYKKyAgICBDU1NWYWx1ZSogbV9saW5lSGVpZ2h0VmFsdWU7IC8vIGNhY2hlOyB1cGRhdGVkIGlu
IGFwcGx5UHJvcGVydHkuCisgICAgYm9vbCBtX2ZvbnREaXJ0eTsKKworICAgIC8vIGJvcmRlci1h
bmQtYmFja2dyb3VuZCBjYWNoZSwgaXQgaXMgYmV0dGVyIHRvIG1vdmUgdG8gYW5vdGhlciBwbGFj
ZT8KKyAgICBib29sIG1faGFzVUFBcHBlYXJhbmNlOworICAgIEJvcmRlckRhdGEgbV9ib3JkZXJE
YXRhOworICAgIEZpbGxMYXllciBtX2JhY2tncm91bmREYXRhOworICAgIENvbG9yIG1fYmFja2dy
b3VuZENvbG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3R5
bGVSZXNvbHZlU3RhdGVfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXgg
ZDhkNjljMzJmYzUxY2I2ZjRhYmU4OGYwMTJkZmMyYTk1ZjA2ZDdkOS4uYWM1ZWQxYTZhNDAxMDVm
YjBiOTRjYmM3N2JlMmM1ZjI5MDVjNzFjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcApAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGlu
Z3MuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTUmVmbGVj
dFZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKICNpbmNsdWRlICJDU1NTZWxlY3Rv
ci5oIgogI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgogI2luY2x1ZGUgIkNTU1N0eWxlUnVs
ZS5oIgpAQCAtMTIwLDYgKzExOSw3IEBACiAjaW5jbHVkZSAiU3R5bGVSdWxlSW1wb3J0LmgiCiAj
aW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3Qu
aCIKKyNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1
ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uLmgiCkBAIC0xOTgsMTQgKzE5OCwxNCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwogCiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlmIChpc0luaGVy
aXQpIHsgXAotICAgIG1fc3R5bGUtPnNldCMjUHJvcChtX3BhcmVudFN0eWxlLT5wcm9wKCkpOyBc
CisgICAgc3RhdGUuc3R5bGUoKS0+c2V0IyNQcm9wKHN0YXRlLnBhcmVudFN0eWxlKCktPnByb3Ao
KSk7ICAgICAgXAogICAgIHJldHVybjsgXAogfQogCiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUX0FO
RF9JTklUSUFMKHByb3AsIFByb3ApIFwKIEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlm
IChpc0luaXRpYWwpIHsgXAotICAgIG1fc3R5bGUtPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5p
dGlhbCMjUHJvcCgpKTsgXAorICAgIHN0YXRlLnN0eWxlKCktPnNldCMjUHJvcChSZW5kZXJTdHls
ZTo6aW5pdGlhbCMjUHJvcCgpKTsgICAgIFwKICAgICByZXR1cm47IFwKIH0KIApAQCAtMjY2LDM1
ICsyNjYsMTUgQEAgc3RhdGljIFN0eWxlUHJvcGVydHlTZXQqIHJpZ2h0VG9MZWZ0RGVjbGFyYXRp
b24oKQogCiAKIFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQqIGRvY3VtZW50
LCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICA6IG1faGFzVUFBcHBlYXJhbmNl
KGZhbHNlKQotICAgICwgbV9iYWNrZ3JvdW5kRGF0YShCYWNrZ3JvdW5kRmlsbExheWVyKQotICAg
ICwgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VMYXN0U3dlZXAoMCkKKyAg
ICA6IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwKDApCiAg
ICAgLCBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyKHRoaXMsICZTdHlsZVJlc29s
dmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpCiAgICAgLCBtX2RvY3VtZW50KGRvY3Vt
ZW50KQotICAgICwgbV9zZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQpCi0gICAgLCBtX3BhcmVudFN0
eWxlKDApCi0gICAgLCBtX3Jvb3RFbGVtZW50U3R5bGUoMCkKLSAgICAsIG1fZWxlbWVudCgwKQot
ICAgICwgbV9zdHlsZWRFbGVtZW50KDApCi0gICAgLCBtX3JlZ2lvbkZvclN0eWxpbmcoMCkKLSAg
ICAsIG1fZWxlbWVudExpbmtTdGF0ZShOb3RJbnNpZGVMaW5rKQotICAgICwgbV9wYXJlbnROb2Rl
KDApCi0gICAgLCBtX2xpbmVIZWlnaHRWYWx1ZSgwKQotICAgICwgbV9mb250RGlydHkoZmFsc2Up
CiAgICAgLCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyhtYXRjaEF1dGhvckFuZFVzZXJTdHls
ZXMpCi0gICAgLCBtX3NhbWVPcmlnaW5Pbmx5KGZhbHNlKQotICAgICwgbV9kaXN0cmlidXRlZFRv
SW5zZXJ0aW9uUG9pbnQoZmFsc2UpCiAgICAgLCBtX2ZvbnRTZWxlY3RvcihDU1NGb250U2VsZWN0
b3I6OmNyZWF0ZShkb2N1bWVudCkpCiAjaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikK
ICAgICAsIG1fdmlld3BvcnRTdHlsZVJlc29sdmVyKFZpZXdwb3J0U3R5bGVSZXNvbHZlcjo6Y3Jl
YXRlKGRvY3VtZW50KSkKICNlbmRpZgotICAgICwgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGUodHJ1ZSkKLSAgICAsIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSkK
ICAgICAsIG1fc3R5bGVCdWlsZGVyKFN0eWxlQnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVyKCkp
Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgICwgbV9oYXNQZW5kaW5nU2hhZGVycyhmYWxz
ZSkKLSNlbmRpZgotICAgICwgbV9zdHlsZU1hcCh0aGlzKQogewogICAgIEVsZW1lbnQqIHJvb3Qg
PSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CiAKQEAgLTY0OCwxMDAgKzYyOCwxMDMgQEAg
aW5saW5lIGJvb2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKIAog
Ym9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6bV9tYXRjaGluZ1VBUnVsZXMgPSBmYWxzZTsKIAot
dm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBNYXRjaFJlcXVl
c3QmIG1hdGNoUmVxdWVzdCwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4
KQordm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiBydWxl
U2V0LCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYg
bGFzdFJ1bGVJbmRleCwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCiB7Ci0gICAgQVNTRVJU
KG1hdGNoUmVxdWVzdC5ydWxlU2V0KTsKLSAgICBBU1NFUlQobV9lbGVtZW50KTsKKyAgICBBU1NF
UlQocnVsZVNldCk7CisgICAgQVNTRVJUKHN0YXRlLmVsZW1lbnQoKSk7CiAKLSAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHBzZXVkb0lkID0gbV9lbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpOworICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50KCk7CisgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBwc2V1ZG9JZCA9IGVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCk7CiAgICAgaWYgKCFwc2V1
ZG9JZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgQVNTRVJUKG1fc3R5bGVkRWxlbWVudCk7Ci0gICAg
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+c2hh
ZG93UHNldWRvRWxlbWVudFJ1bGVzKHBzZXVkb0lkLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgZmly
c3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOworICAgICAgICBBU1NFUlQoZWxlbWVudC0+aXNT
dHlsZWRFbGVtZW50KCkpOworICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVs
ZVNldC0+c2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKHBzZXVkb0lkLmltcGwoKSksIHN0YXRlLCBm
aXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgc2NvcGUpOwogICAgIH0KIAogI2lmIEVOQUJM
RShWSURFT19UUkFDSykKLSAgICBpZiAobV9lbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiB0
b1dlYlZUVEVsZW1lbnQobV9lbGVtZW50KS0+d2ViVlRUTm9kZVR5cGUoKSkKLSAgICAgICAgY29s
bGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5jdWVQc2V1ZG9S
dWxlcygpLCBtYXRjaFJlcXVlc3QsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKKyAg
ICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYgdG9XZWJWVFRFbGVtZW50KGVsZW1l
bnQpLT53ZWJWVFROb2RlVHlwZSgpKQorICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxp
c3QocnVsZVNldC0+Y3VlUHNldWRvUnVsZXMoKSwgc3RhdGUsIGZpcnN0UnVsZUluZGV4LCBsYXN0
UnVsZUluZGV4LCBzY29wZSk7CiAjZW5kaWYKICAgICAvLyBDaGVjayB3aGV0aGVyIG90aGVyIHR5
cGVzIG9mIHJ1bGVzIGFyZSBhcHBsaWNhYmxlIGluIHRoZSBjdXJyZW50IHRyZWUgc2NvcGUuIENy
aXRlcmlhIGZvciB0aGlzOgogICAgIC8vIGEpIGl0J3MgYSBVQSBydWxlCiAgICAgLy8gYikgdGhl
IHRyZWUgc2NvcGUgYWxsb3dzIGF1dGhvciBydWxlcwogICAgIC8vIGMpIHRoZSBydWxlcyBjb21l
cyBmcm9tIGEgc2NvcGVkIHN0eWxlIHNoZWV0IHdpdGhpbiB0aGUgc2FtZSB0cmVlIHNjb3BlCi0g
ICAgVHJlZVNjb3BlKiB0cmVlU2NvcGUgPSBtX2VsZW1lbnQtPnRyZWVTY29wZSgpOworICAgIFRy
ZWVTY29wZSogdHJlZVNjb3BlID0gZWxlbWVudC0+dHJlZVNjb3BlKCk7CiAgICAgaWYgKCFNYXRj
aGluZ1VBUnVsZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQogICAgICAgICAmJiAhdHJlZVNj
b3BlLT5hcHBseUF1dGhvclN0eWxlcygpCi0gICAgICAgICYmICghbWF0Y2hSZXF1ZXN0LnNjb3Bl
IHx8IG1hdGNoUmVxdWVzdC5zY29wZS0+dHJlZVNjb3BlKCkgIT0gdHJlZVNjb3BlKSkKKyAgICAg
ICAgJiYgKCFzY29wZSB8fCBzY29wZS0+dHJlZVNjb3BlKCkgIT0gdHJlZVNjb3BlKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gV2UgbmVlZCB0byBjb2xsZWN0IHRoZSBydWxlcyBmb3IgaWQs
IGNsYXNzLCB0YWcsIGFuZCBldmVyeXRoaW5nIGVsc2UgaW50byBhIGJ1ZmZlciBhbmQKICAgICAv
LyB0aGVuIHNvcnQgdGhlIGJ1ZmZlci4KLSAgICBpZiAobV9lbGVtZW50LT5oYXNJRCgpKQotICAg
ICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmlk
UnVsZXMobV9lbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSksIG1hdGNoUmVx
dWVzdCwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwotICAgIGlmIChtX3N0eWxlZEVs
ZW1lbnQgJiYgbV9zdHlsZWRFbGVtZW50LT5oYXNDbGFzcygpKSB7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9zdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKCkuc2l6ZSgpOyArK2kp
Ci0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1
bGVTZXQtPmNsYXNzUnVsZXMobV9zdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKClbaV0uaW1wbCgp
KSwgbWF0Y2hSZXF1ZXN0LCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7CisgICAgaWYg
KGVsZW1lbnQtPmhhc0lEKCkpCisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChy
dWxlU2V0LT5pZFJ1bGVzKGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSwg
c3RhdGUsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBzY29wZSk7CisgICAgaWYgKGVs
ZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpICYmIHRvU3R5bGVkRWxlbWVudChlbGVtZW50KS0+aGFz
Q2xhc3MoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvU3R5bGVkRWxlbWVu
dChlbGVtZW50KS0+Y2xhc3NOYW1lcygpLnNpemUoKTsgKytpKQorICAgICAgICAgICAgY29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVTZXQtPmNsYXNzUnVsZXModG9TdHlsZWRFbGVtZW50
KGVsZW1lbnQpLT5jbGFzc05hbWVzKClbaV0uaW1wbCgpKSwgc3RhdGUsIGZpcnN0UnVsZUluZGV4
LCBsYXN0UnVsZUluZGV4LCBzY29wZSk7CiAgICAgfQogCi0gICAgaWYgKG1fZWxlbWVudC0+aXNM
aW5rKCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3Qu
cnVsZVNldC0+bGlua1BzZXVkb0NsYXNzUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBmaXJzdFJ1bGVJ
bmRleCwgbGFzdFJ1bGVJbmRleCk7Ci0gICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1hdGNoZXNG
b2N1c1BzZXVkb0NsYXNzKG1fZWxlbWVudCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCksIG1h
dGNoUmVxdWVzdCwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwotICAgIGNvbGxlY3RN
YXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+dGFnUnVsZXMobV9lbGVt
ZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIGZpcnN0UnVsZUluZGV4LCBs
YXN0UnVsZUluZGV4KTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1
ZXN0LnJ1bGVTZXQtPnVuaXZlcnNhbFJ1bGVzKCksIG1hdGNoUmVxdWVzdCwgZmlyc3RSdWxlSW5k
ZXgsIGxhc3RSdWxlSW5kZXgpOworICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSkKKyAgICAgICAg
Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVTZXQtPmxpbmtQc2V1ZG9DbGFzc1J1bGVz
KCksIHN0YXRlLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgc2NvcGUpOworICAgIGlm
IChtYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhlbGVtZW50KSkKKyAgICAgICAgY29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JMaXN0KHJ1bGVTZXQtPmZvY3VzUHNldWRvQ2xhc3NSdWxlcygpLCBzdGF0ZSwg
Zmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIHNjb3BlKTsKKyAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0Zvckxpc3QocnVsZVNldC0+dGFnUnVsZXMoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1w
bCgpKSwgc3RhdGUsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBzY29wZSk7CisgICAg
Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVTZXQtPnVuaXZlcnNhbFJ1bGVzKCksIHN0
YXRlLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgc2NvcGUpOwogfQogCi12b2lkIFN0
eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKGNvbnN0IE1hdGNoUmVx
dWVzdCYgbWF0Y2hSZXF1ZXN0LCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5k
ZXgpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1
bGVTZXQqIHJ1bGVTZXQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgaW50JiBmaXJzdFJ1bGVJ
bmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKIHsK
LSAgICBpZiAoIW1fcmVnaW9uRm9yU3R5bGluZykKKyAgICBpZiAoIXN0YXRlLnJlZ2lvbkZvclN0
eWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdW5zaWduZWQgc2l6ZSA9IG1hdGNoUmVx
dWVzdC5ydWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKKyAgICBF
bGVtZW50KiByZWdpb25TdHlsaW5nRWxlbWVudCA9IHRvRWxlbWVudChzdGF0ZS5yZWdpb25Gb3JT
dHlsaW5nKCktPm5vZGUoKSk7CisgICAgdW5zaWduZWQgc2l6ZSA9IHJ1bGVTZXQtPm1fcmVnaW9u
U2VsZWN0b3JzQW5kUnVsZVNldHMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yID0gbWF0
Y2hSZXF1ZXN0LnJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkuc2Vs
ZWN0b3I7Ci0gICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKHJlZ2lvblNlbGVjdG9yLCBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obV9yZWdpb25Gb3JTdHlsaW5nLT5ub2RlKCkpKSkgewotICAg
ICAgICAgICAgUnVsZVNldCogcmVnaW9uUnVsZXMgPSBtYXRjaFJlcXVlc3QucnVsZVNldC0+bV9y
ZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5ydWxlU2V0LmdldCgpOworICAgICAgICBD
U1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IgPSBydWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0Fu
ZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9yOworICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3Rv
cihyZWdpb25TZWxlY3RvciwgcmVnaW9uU3R5bGluZ0VsZW1lbnQpKSB7CisgICAgICAgICAgICBS
dWxlU2V0KiByZWdpb25SdWxlcyA9IHJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNl
dHMuYXQoaSkucnVsZVNldC5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVChyZWdpb25SdWxlcyk7
Ci0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QocmVnaW9uUnVs
ZXMsIG1hdGNoUmVxdWVzdC5pbmNsdWRlRW1wdHlSdWxlcywgbWF0Y2hSZXF1ZXN0LnNjb3BlKSwg
Zmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOworICAgICAgICAgICAgY29sbGVjdE1hdGNo
aW5nUnVsZXMocmVnaW9uUnVsZXMsIHN0YXRlLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRl
eCwgc2NvcGUpOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnNv
cnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQordm9pZCBTdHls
ZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoU3R5bGVSZXNvbHZlU3RhdGUm
IHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0KQogewotICAgIGlmIChtX21hdGNoZWRSdWxlcy5p
c0VtcHR5KCkpCisgICAgaWYgKHN0YXRlLm1hdGNoZWRSdWxlcygpLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgc29ydE1hdGNoZWRSdWxlcygpOworICAgIHNvcnRNYXRjaGVkUnVs
ZXMoc3RhdGUubWF0Y2hlZFJ1bGVzKCkpOwogCi0gICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1v
ZGUoKSA9PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcykgewotICAgICAgICBpZiAo
IW1fcnVsZUxpc3QpCi0gICAgICAgICAgICBtX3J1bGVMaXN0ID0gU3RhdGljQ1NTUnVsZUxpc3Q6
OmNyZWF0ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVs
ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX3J1bGVMaXN0LT5ydWxlcygpLmFwcGVuZCht
X21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5jcmVhdGVDU1NPTVdyYXBwZXIoKSk7CisgICAgLy8g
c2hvdWxkIGZpeAorICAgIGlmIChzdGF0ZS5tb2RlKCkgPT0gU2VsZWN0b3JDaGVja2VyOjpDb2xs
ZWN0aW5nUnVsZXMpIHsKKyAgICAgICAgLy8gU2hvdWxkIG1vdmUgcnVsZUxpc3QgZnJvbSBzdGF0
ZSB0byByZXN1bHQ/CisgICAgICAgIFN0YXRpY0NTU1J1bGVMaXN0KiBydWxlTGlzdCA9IHN0YXRl
LmVuc3VyZVJ1bGVMaXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0
ZS5tYXRjaGVkUnVsZXMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHJ1bGVMaXN0LT5ydWxl
cygpLmFwcGVuZChzdGF0ZS5tYXRjaGVkUnVsZUF0KGkpLT5ydWxlKCktPmNyZWF0ZUNTU09NV3Jh
cHBlcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIE5vdyB0cmFuc2ZlciB0
aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBkZWNsYXJhdGlvbnMu
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsr
KSB7Ci0gICAgICAgIGlmIChtX3N0eWxlICYmIG1fbWF0Y2hlZFJ1bGVzW2ldLT5jb250YWluc1Vu
Y29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFVuaXF1
ZSgpOwotICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIG1fbWF0Y2hlZFJ1bGVz
W2ldLT5ydWxlKCktPnByb3BlcnRpZXMoKSwgbV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKSwgbV9t
YXRjaGVkUnVsZXNbaV0tPmxpbmtNYXRjaFR5cGUoKSwgbV9tYXRjaGVkUnVsZXNbaV0tPnByb3Bl
cnR5V2hpdGVsaXN0VHlwZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUu
bWF0Y2hlZFJ1bGVzKCkuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKHN0YXRlLnN0eWxlKCkg
JiYgc3RhdGUubWF0Y2hlZFJ1bGVBdChpKS0+Y29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVj
dG9yKCkpCisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRVbmlxdWUoKTsKKyAgICAgICAg
YWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCBzdGF0ZS5tYXRjaGVkUnVsZUF0KGkpLT5ydWxl
KCktPnByb3BlcnRpZXMoKSwgc3RhdGUubWF0Y2hlZFJ1bGVBdChpKS0+cnVsZSgpLCBzdGF0ZS5t
YXRjaGVkUnVsZUF0KGkpLT5saW5rTWF0Y2hUeXBlKCksIHN0YXRlLm1hdGNoZWRSdWxlQXQoaSkt
PnByb3BlcnR5V2hpdGVsaXN0VHlwZSgpKTsKICAgICB9CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZl
cjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1
ZGVFbXB0eVJ1bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVz
KFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCkKIHsKICNpZiBF
TkFCTEUoU1RZTEVfU0NPUEVEKSB8fCBFTkFCTEUoU0hBRE9XX0RPTSkKICAgICBpZiAoIW1fc2Nv
cGVSZXNvbHZlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gTWF0Y2ggc2NvcGVkIGF1dGhv
ciBydWxlcyBieSB0cmF2ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVudCBzdGFjayAocmVidWlsZCBp
dCBpZiBpdCBnb3QgaW5jb25zaXN0ZW50KS4KLSAgICBpZiAobV9zY29wZVJlc29sdmVyLT5oYXNT
Y29wZWRTdHlsZXMoKSAmJiBtX3Njb3BlUmVzb2x2ZXItPmVuc3VyZVN0YWNrQ29uc2lzdGVuY3ko
bV9lbGVtZW50KSkgewotICAgICAgICBib29sIGFwcGx5QXV0aG9yU3R5bGVzID0gbV9lbGVtZW50
LT50cmVlU2NvcGUoKS0+YXBwbHlBdXRob3JTdHlsZXMoKTsKKyAgICBpZiAobV9zY29wZVJlc29s
dmVyLT5oYXNTY29wZWRTdHlsZXMoKSAmJiBtX3Njb3BlUmVzb2x2ZXItPmVuc3VyZVN0YWNrQ29u
c2lzdGVuY3koc3RhdGUuZWxlbWVudCgpKSkgeworICAgICAgICBib29sIGFwcGx5QXV0aG9yU3R5
bGVzID0gc3RhdGUuZWxlbWVudCgpLT50cmVlU2NvcGUoKS0+YXBwbHlBdXRob3JTdHlsZXMoKTsK
ICAgICAgICAgYm9vbCBkb2N1bWVudFNjb3BlID0gdHJ1ZTsKICAgICAgICAgdW5zaWduZWQgc2Nv
cGVTaXplID0gbV9zY29wZVJlc29sdmVyLT5zdGFja1NpemUoKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNjb3BlU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBtX21hdGNoZWRS
dWxlcy5jbGVhcigpOworICAgICAgICAgICAgc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsK
ICAgICAgICAgICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hl
ZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKIAogICAgICAgICAgICAgY29uc3QgU3R5bGVTY29wZVJl
c29sdmVyOjpTdGFja0ZyYW1lJiBmcmFtZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tGcmFtZUF0
KGkpOwpAQCAtNzU0LDEzMSArNzM3LDEyOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2Nv
cGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdAogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
TWF0Y2hSZXF1ZXN0IG1hdGNoUmVxdWVzdChmcmFtZS5tX3J1bGVTZXQsIGluY2x1ZGVFbXB0eVJ1
bGVzLCBmcmFtZS5tX3Njb3BlKTsKLSAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1h
dGNoUmVxdWVzdCwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMu
bGFzdEF1dGhvclJ1bGUpOwotICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdp
b24obWF0Y2hSZXF1ZXN0LCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJh
bmdlcy5sYXN0QXV0aG9yUnVsZSk7Ci0gICAgICAgICAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVk
UnVsZXMocmVzdWx0KTsKKyAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKGZyYW1lLm1f
cnVsZVNldCwgc3RhdGUsIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFu
Z2VzLmxhc3RBdXRob3JSdWxlLCBmcmFtZS5tX3Njb3BlKTsKKyAgICAgICAgICAgIGNvbGxlY3RN
YXRjaGluZ1J1bGVzRm9yUmVnaW9uKGZyYW1lLm1fcnVsZVNldCwgc3RhdGUsIHJlc3VsdC5yYW5n
ZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBmcmFtZS5t
X3Njb3BlKTsKKyAgICAgICAgICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhzdGF0ZSwg
cmVzdWx0KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIG1hdGNoSG9zdFJ1bGVzKHJlc3VsdCwg
aW5jbHVkZUVtcHR5UnVsZXMpOworICAgIG1hdGNoSG9zdFJ1bGVzKHN0YXRlLCByZXN1bHQpOwog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKICAgICBVTlVTRURfUEFSQU0oaW5jbHVk
ZUVtcHR5UnVsZXMpOwogI2VuZGlmCiB9CiAKLWlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OnN0
eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKQoraW5saW5lIGJvb2wgU3R5bGVS
ZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhFbGVtZW50KiBl
bGVtZW50KQogewogI2lmIEVOQUJMRShTSEFET1dfRE9NKQotICAgIHJldHVybiBtX3Njb3BlUmVz
b2x2ZXIgJiYgbV9zY29wZVJlc29sdmVyLT5zdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9z
dFJ1bGVzKG1fZWxlbWVudCk7CisgICAgcmV0dXJuIG1fc2NvcGVSZXNvbHZlciAmJiBtX3Njb3Bl
UmVzb2x2ZXItPnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoZWxlbWVudCk7
CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogfQogCi12b2lkIFN0eWxlUmVzb2x2
ZXI6Om1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5
UnVsZXMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKFN0eWxlUmVzb2x2ZVN0
YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCkKIHsKICNpZiBFTkFCTEUoU0hBRE9XX0RP
TSkKICAgICBBU1NFUlQobV9zY29wZVJlc29sdmVyKTsKIAotICAgIG1fbWF0Y2hlZFJ1bGVzLmNs
ZWFyKCk7CisgICAgc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKICAgICByZXN1bHQucmFu
Z2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7
CiAKICAgICBWZWN0b3I8UnVsZVNldCo+IG1hdGNoZWRSdWxlczsKLSAgICBtX3Njb3BlUmVzb2x2
ZXItPm1hdGNoSG9zdFJ1bGVzKG1fZWxlbWVudCwgbWF0Y2hlZFJ1bGVzKTsKKyAgICBtX3Njb3Bl
UmVzb2x2ZXItPm1hdGNoSG9zdFJ1bGVzKHN0YXRlLmVsZW1lbnQoKSwgbWF0Y2hlZFJ1bGVzKTsK
ICAgICBpZiAobWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSA+IDA7IC0taSkKLSAgICAg
ICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KG1hdGNoZWRSdWxlcy5hdChpLTEp
LCBpbmNsdWRlRW1wdHlSdWxlcywgbV9lbGVtZW50KSwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhv
clJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUpOwotICAgIHNvcnRBbmRUcmFuc2Zl
ck1hdGNoZWRSdWxlcyhyZXN1bHQpOworICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRj
aGVkUnVsZXMuYXQoaS0xKSwgc3RhdGUsIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBy
ZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBzdGF0ZS5lbGVtZW50KCkpOworICAgIHNvcnRB
bmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKICNlbHNlCiAgICAgVU5VU0VE
X1BBUkFNKHJlc3VsdCk7CiAgICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVFbXB0eVJ1bGVzKTsKICNl
bmRpZgogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1
bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6
bWF0Y2hBdXRob3JSdWxlcyhTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiBy
ZXN1bHQpCiB7Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICBzdGF0ZS5tYXRjaGVk
UnVsZXMoKS5jbGVhcigpOwogICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1
bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKIAotICAgIGlmICghbV9lbGVtZW50KQor
ICAgIGlmICghc3RhdGUuZWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXRj
aCBnbG9iYWwgYXV0aG9yIHJ1bGVzLgotICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QobV9h
dXRob3JTdHlsZS5nZXQoKSwgaW5jbHVkZUVtcHR5UnVsZXMpOwotICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzKG1hdGNoUmVxdWVzdCwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3Vs
dC5yYW5nZXMubGFzdEF1dGhvclJ1bGUpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVn
aW9uKG1hdGNoUmVxdWVzdCwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5y
YW5nZXMubGFzdEF1dGhvclJ1bGUpOwotICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhy
ZXN1bHQpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHN0
YXRlLCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0
aG9yUnVsZSk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obV9hdXRob3JTdHls
ZS5nZXQoKSwgc3RhdGUsIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFu
Z2VzLmxhc3RBdXRob3JSdWxlKTsKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoc3Rh
dGUsIHJlc3VsdCk7CiAKLSAgICBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKHJlc3VsdCwgaW5jbHVk
ZUVtcHR5UnVsZXMpOworICAgIG1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoc3RhdGUsIHJlc3VsdCk7
CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQmIHJl
c3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hV
c2VyUnVsZXMoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0KQog
ewogICAgIGlmICghbV91c2VyU3R5bGUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX21h
dGNoZWRSdWxlcy5jbGVhcigpOworICAgIHN0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAK
ICAgICByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGll
cy5zaXplKCkgLSAxOwotICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QobV91c2VyU3R5bGUu
Z2V0KCksIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRj
aFJlcXVlc3QsIHJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0
VXNlclJ1bGUpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1hdGNoUmVxdWVz
dCwgcmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVs
ZSk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIHN0YXRlLCBy
ZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlKTsK
KyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihtX3VzZXJTdHlsZS5nZXQoKSwgc3Rh
dGUsIHJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1
bGUpOwogCi0gICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7CisgICAgc29y
dEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHN0YXRlLCByZXN1bHQpOwogfQogCi12b2lkIFN0eWxl
UmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBSdWxlU2V0KiBydWxl
cykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiBz
dGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCwgUnVsZVNldCogcnVsZXMpCiB7Ci0gICAgbV9tYXRj
aGVkUnVsZXMuY2xlYXIoKTsKKyAgICBzdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOwogICAg
IAogICAgIHJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGll
cy5zaXplKCkgLSAxOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1hdGNoUmVxdWVzdChydWxl
cyksIHJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSk7
CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMocnVsZXMsIHN0YXRlLCByZXN1bHQucmFuZ2VzLmZp
cnN0VUFSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUpOwogCi0gICAgc29ydEFuZFRyYW5z
ZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7CisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVz
KHN0YXRlLCByZXN1bHQpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGlu
Z1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgY29uc3QgTWF0Y2hS
ZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJ
bmRleCkKKy8vIHNjb3BlLi4ub3J6Cit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGlu
Z1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgU3R5bGVSZXNvbHZl
U3RhdGUmIHN0YXRlLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNv
bnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQogewogICAgIGlmICghcnVsZXMpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIEluIHNvbWUgY2FzZXMgd2UgbWF5IGVuZCB1cCBsb29raW5nIHVwIHN0
eWxlIGZvciByYW5kb20gZWxlbWVudHMgaW4gdGhlIG1pZGRsZSBvZiBhIHJlY3Vyc2l2ZSB0cmVl
IHJlc29sdmUuCiAgICAgLy8gQW5jZXN0b3IgaWRlbnRpZmllciBmaWx0ZXIgd29uJ3QgYmUgdXAt
dG8tZGF0ZSBpbiB0aGF0IGNhc2UgYW5kIHdlIGNhbid0IHVzZSB0aGUgZmFzdCBwYXRoLgotICAg
IGJvb2wgY2FuVXNlRmFzdFJlamVjdCA9IG1fc2VsZWN0b3JGaWx0ZXIucGFyZW50U3RhY2tJc0Nv
bnNpc3RlbnQobV9wYXJlbnROb2RlKTsKLQogICAgIHVuc2lnbmVkIHNpemUgPSBydWxlcy0+c2l6
ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAg
Y29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhID0gcnVsZXMtPmF0KGkpOwotICAgICAgICBpZiAoY2Fu
VXNlRmFzdFJlamVjdCAmJiBtX3NlbGVjdG9yRmlsdGVyLmZhc3RSZWplY3RTZWxlY3RvcjxSdWxl
RGF0YTo6bWF4aW11bUlkZW50aWZpZXJDb3VudD4ocnVsZURhdGEuZGVzY2VuZGFudFNlbGVjdG9y
SWRlbnRpZmllckhhc2hlcygpKSkKKyAgICAgICAgaWYgKHN0YXRlLmNhblVzZUZhc3RSZWplY3Qo
KSAmJiBtX3NlbGVjdG9yRmlsdGVyLmZhc3RSZWplY3RTZWxlY3RvcjxSdWxlRGF0YTo6bWF4aW11
bUlkZW50aWZpZXJDb3VudD4ocnVsZURhdGEuZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhh
c2hlcygpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFN0eWxlUnVsZSogcnVs
ZSA9IHJ1bGVEYXRhLnJ1bGUoKTsKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbE1hdGNoUnVsZShkb2N1
bWVudCgpLCBydWxlLCB0aGlzKTsKLSAgICAgICAgaWYgKHJ1bGVNYXRjaGVzKHJ1bGVEYXRhLCBt
YXRjaFJlcXVlc3Quc2NvcGUpKSB7CisgICAgICAgIFBzZXVkb0lkIGR5bmFtaWNQc2V1ZG8gPSBO
T1BTRVVETzsKKyAgICAgICAgaWYgKHJ1bGVNYXRjaGVzKHN0YXRlLCBydWxlRGF0YSwgc2NvcGUs
IGR5bmFtaWNQc2V1ZG8pKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJv
cGVydGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQgaW4gdGhlIG5vbi1kZWJ1ZyBtb2RlLgog
ICAgICAgICAgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcyA9IHJ1bGUtPnBy
b3BlcnRpZXMoKTsKLSAgICAgICAgICAgIGlmICghcHJvcGVydGllcyB8fCAocHJvcGVydGllcy0+
aXNFbXB0eSgpICYmICFtYXRjaFJlcXVlc3QuaW5jbHVkZUVtcHR5UnVsZXMpKSB7CisgICAgICAg
ICAgICBpZiAoIXByb3BlcnRpZXMgfHwgKHByb3BlcnRpZXMtPmlzRW1wdHkoKSAmJiAhc3RhdGUu
aW5jbHVkZUVtcHR5UnVsZXMoKSkpIHsKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIEZJWE1FOiBFeHBvc2luZyB0
aGUgbm9uLXN0YW5kYXJkIGdldE1hdGNoZWRDU1NSdWxlcyBBUEkgdG8gd2ViIGlzIHRoZSBvbmx5
IHJlYXNvbiB0aGlzIGlzIG5lZWRlZC4KLSAgICAgICAgICAgIGlmIChtX3NhbWVPcmlnaW5Pbmx5
ICYmICFydWxlRGF0YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkpIHsKKyAgICAgICAgICAg
IGlmIChzdGF0ZS5zYW1lT3JpZ2luT25seSgpICYmICFydWxlRGF0YS5oYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luKCkpIHsKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIElmIHdlJ3JlIG1hdGNoaW5nIG5vcm1hbCBy
dWxlcywgc2V0IGEgcHNldWRvIGJpdCBpZgogICAgICAgICAgICAgLy8gd2UgcmVhbGx5IGp1c3Qg
bWF0Y2hlZCBhIHBzZXVkby1lbGVtZW50LgotICAgICAgICAgICAgaWYgKG1fZHluYW1pY1BzZXVk
byAhPSBOT1BTRVVETyAmJiBtX3BzZXVkb1N0eWxlID09IE5PUFNFVURPKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1vZGUoKSA9PSBTZWxlY3RvckNoZWNrZXI6OkNv
bGxlY3RpbmdSdWxlcykgeworICAgICAgICAgICAgaWYgKGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VV
RE8gJiYgc3RhdGUucHNldWRvU3R5bGUoKSA9PSBOT1BTRVVETykgeworICAgICAgICAgICAgICAg
IGlmIChzdGF0ZS5tb2RlKCkgPT0gU2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpIHsK
ICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1
bGUoY29va2llLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobV9keW5hbWljUHNldWRvIDwgRklSU1Rf
SU5URVJOQUxfUFNFVURPSUQpCi0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEhhc1Bz
ZXVkb1N0eWxlKG1fZHluYW1pY1BzZXVkbyk7CisgICAgICAgICAgICAgICAgaWYgKGR5bmFtaWNQ
c2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKKyAgICAgICAgICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0SGFzUHNldWRvU3R5bGUoZHluYW1pY1BzZXVkbyk7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBvdXIgZmlyc3QvbGFzdCBydWxl
IGluZGljZXMgaW4gdGhlIG1hdGNoZWQgcnVsZXMgYXJyYXkuCiAgICAgICAgICAgICAgICAgKyts
YXN0UnVsZUluZGV4OwpAQCAtODg2LDcgKzg2Niw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29s
bGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBj
CiAgICAgICAgICAgICAgICAgICAgIGZpcnN0UnVsZUluZGV4ID0gbGFzdFJ1bGVJbmRleDsKIAog
ICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIHJ1bGUgdG8gb3VyIGxpc3Qgb2YgbWF0Y2hlZCBy
dWxlcy4KLSAgICAgICAgICAgICAgICBhZGRNYXRjaGVkUnVsZSgmcnVsZURhdGEpOworICAgICAg
ICAgICAgICAgIGFkZE1hdGNoZWRSdWxlKHN0YXRlLCAmcnVsZURhdGEpOwogICAgICAgICAgICAg
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgdHJ1ZSk7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC05MDIsMzEgKzg4
MiwzMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVJ1bGVzKGNvbnN0IFJ1bGVEYXRhKiBy
MSwgY29uc3QgUnVsZURhdGEqIHIyKQogICAgIHJldHVybiAoc3BlY2lmaWNpdHkxID09IHNwZWNp
ZmljaXR5MikgPyByMS0+cG9zaXRpb24oKSA8IHIyLT5wb3NpdGlvbigpIDogc3BlY2lmaWNpdHkx
IDwgc3BlY2lmaWNpdHkyOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRNYXRjaGVkUnVs
ZXMoKQordm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0TWF0Y2hlZFJ1bGVzKFZlY3Rvcjxjb25zdCBS
dWxlRGF0YSosIDMyPiYgbWF0Y2hlZFJ1bGVzKQogewotICAgIHN0ZDo6c29ydChtX21hdGNoZWRS
dWxlcy5iZWdpbigpLCBtX21hdGNoZWRSdWxlcy5lbmQoKSwgY29tcGFyZVJ1bGVzKTsKKyAgICBz
dGQ6OnNvcnQobWF0Y2hlZFJ1bGVzLmJlZ2luKCksIG1hdGNoZWRSdWxlcy5lbmQoKSwgY29tcGFy
ZVJ1bGVzKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVz
dWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWVzKQordm9pZCBTdHlsZVJlc29s
dmVyOjptYXRjaEFsbFJ1bGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQm
IHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZXMpCiB7Ci0gICAgbWF0Y2hVQVJ1bGVz
KHJlc3VsdCk7CisgICAgbWF0Y2hVQVJ1bGVzKHN0YXRlLCByZXN1bHQpOworICAgIC8vIC4uLi4g
YmFkPworICAgIHN0YXRlLnNldEluY2x1ZGVFbXB0eVJ1bGVzKGZhbHNlKTsKIAogICAgIC8vIE5v
dyB3ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVzLgogICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNl
clN0eWxlcykKLSAgICAgICAgbWF0Y2hVc2VyUnVsZXMocmVzdWx0LCBmYWxzZSk7Ci0gICAgICAg
IAorICAgICAgICBtYXRjaFVzZXJSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKKwogICAgIC8vIE5vdyBj
aGVjayBhdXRob3IgcnVsZXMsIGJlZ2lubmluZyBmaXJzdCB3aXRoIHByZXNlbnRhdGlvbmFsIGF0
dHJpYnV0ZXMgbWFwcGVkIGZyb20gSFRNTC4KLSAgICBpZiAobV9zdHlsZWRFbGVtZW50KSB7Ci0g
ICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQt
PnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOworICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVt
ZW50KCkpIHsKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRl
LnN0eWxlZEVsZW1lbnQoKS0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CiAKICAgICAg
ICAgLy8gTm93IHdlIGNoZWNrIGFkZGl0aW9uYWwgbWFwcGVkIGRlY2xhcmF0aW9ucy4KICAgICAg
ICAgLy8gVGFibGVzIGFuZCB0YWJsZSBjZWxscyBzaGFyZSBhbiBhZGRpdGlvbmFsIG1hcHBlZCBy
dWxlIHRoYXQgbXVzdCBiZSBhcHBsaWVkCiAgICAgICAgIC8vIGFmdGVyIGFsbCBhdHRyaWJ1dGVz
LCBzaW5jZSB0aGVpciBtYXBwZWQgc3R5bGUgZGVwZW5kcyBvbiB0aGUgdmFsdWVzIG9mIG11bHRp
cGxlIGF0dHJpYnV0ZXMuCi0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0
LCBtX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgp
KTsKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRlLnN0eWxl
ZEVsZW1lbnQoKS0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOwogCi0g
ICAgICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBp
ZiAoc3RhdGUuZWxlbWVudCgpLT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGJvb2wg
aXNBdXRvOwotICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1M
RWxlbWVudChtX3N0eWxlZEVsZW1lbnQpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJp
YnV0ZShpc0F1dG8pOworICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0g
dG9IVE1MRWxlbWVudChzdGF0ZS5lbGVtZW50KCkpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0
b0F0dHJpYnV0ZShpc0F1dG8pOwogICAgICAgICAgICAgaWYgKGlzQXV0bykKICAgICAgICAgICAg
ICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIHRleHREaXJlY3Rpb24gPT0gTFRSID8g
bGVmdFRvUmlnaHREZWNsYXJhdGlvbigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpKTsKICAg
ICAgICAgfQpAQCAtOTM0LDIxICs5MTYsMjEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEFs
bFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWUKICAg
ICAKICAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cyBuZXh0LgogICAgIGlm
IChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhy
ZXN1bHQsIGZhbHNlKTsKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhzdGF0ZSwgcmVzdWx0KTsK
IAogICAgIC8vIE5vdyBjaGVjayBvdXIgaW5saW5lIHN0eWxlIGF0dHJpYnV0ZS4KLSAgICBpZiAo
bV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdHlsZWRFbGVtZW50ICYmIG1fc3R5bGVk
RWxlbWVudC0+aW5saW5lU3R5bGUoKSkgeworICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0
eWxlcyAmJiBzdGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5p
bmxpbmVTdHlsZSgpKSB7CiAgICAgICAgIC8vIElubGluZSBzdHlsZSBpcyBpbW11dGFibGUgYXMg
bG9uZyBhcyB0aGVyZSBpcyBubyBDU1NPTSB3cmFwcGVyLgogICAgICAgICAvLyBGSVhNRTogTWVk
aWEgY29udHJvbCBzaGFkb3cgdHJlZXMgc2VlbSB0byBoYXZlIHByb2JsZW1zIHdpdGggY2FjaGlu
Zy4KLSAgICAgICAgYm9vbCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlID0gIW1fc3R5bGVkRWxlbWVu
dC0+aW5saW5lU3R5bGUoKS0+aXNNdXRhYmxlKCkgJiYgIW1fc3R5bGVkRWxlbWVudC0+aXNJblNo
YWRvd1RyZWUoKTsKKyAgICAgICAgYm9vbCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlID0gIXN0YXRl
LnN0eWxlZEVsZW1lbnQoKS0+aW5saW5lU3R5bGUoKS0+aXNNdXRhYmxlKCkgJiYgIXN0YXRlLnN0
eWxlZEVsZW1lbnQoKS0+aXNJblNoYWRvd1RyZWUoKTsKICAgICAgICAgLy8gRklYTUU6IENvbnN0
aWZ5LgotICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdHlsZWRF
bGVtZW50LT5pbmxpbmVTdHlsZSgpLCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlKTsKKyAgICAgICAg
YWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+
aW5saW5lU3R5bGUoKSwgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSk7CiAgICAgfQogCiAjaWYgRU5B
QkxFKFNWRykKICAgICAvLyBOb3cgY2hlY2sgU01JTCBhbmltYXRpb24gb3ZlcnJpZGUgc3R5bGUu
Ci0gICAgaWYgKGluY2x1ZGVTTUlMUHJvcGVydGllcyAmJiBtX21hdGNoQXV0aG9yQW5kVXNlclN0
eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQgJiYgbV9zdHlsZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQo
KSkKLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRpY19jYXN0
PFNWR0VsZW1lbnQqPihtX3N0eWxlZEVsZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRp
ZXMoKSwgZmFsc2UgLyogaXNDYWNoZWFibGUgKi8pOworICAgIGlmIChpbmNsdWRlU01JTFByb3Bl
cnRpZXMgJiYgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgc3RhdGUuc3R5bGVkRWxlbWVu
dCgpICYmIHN0YXRlLmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkpCisgICAgICAgIGFkZEVsZW1l
bnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oc3RhdGUu
ZWxlbWVudCgpKS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCksIGZhbHNlIC8qIGlzQ2Fj
aGVhYmxlICovKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVTTUlMUHJvcGVydGll
cyk7CiAjZW5kaWYKQEAgLTk2Myw0NyArOTQ1LDM2IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2xh
c3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVz
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0
RWxlbWVudChFbGVtZW50KiBlKQoraW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEVsZW1l
bnQoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBFbGVtZW50KiBlKQogewotICAgIGlmIChtX2Vs
ZW1lbnQgIT0gZSkgewotICAgICAgICBtX2VsZW1lbnQgPSBlOwotICAgICAgICBtX3N0eWxlZEVs
ZW1lbnQgPSBtX2VsZW1lbnQgJiYgbV9lbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSA/IHN0YXRp
Y19jYXN0PFN0eWxlZEVsZW1lbnQqPihtX2VsZW1lbnQpIDogMDsKLSAgICAgICAgbV9lbGVtZW50
TGlua1N0YXRlID0gZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtTdGF0ZSgpLT5kZXRlcm1pbmVMaW5r
U3RhdGUobV9lbGVtZW50KTsKLSAgICAgICAgaWYgKGUgJiYgZSA9PSBlLT5kb2N1bWVudCgpLT5k
b2N1bWVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0RGlyZWN0
aW9uU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOwotICAgICAgICAgICAgZS0+ZG9jdW1lbnQo
KS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudChmYWxzZSk7Ci0gICAgICAgIH0K
KyAgICBzdGF0ZS5zZXRFbGVtZW50KGUpOworICAgIHN0YXRlLnNldEVsZW1lbnRMaW5rU3RhdGUo
ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtTdGF0ZSgpLT5kZXRlcm1pbmVMaW5rU3RhdGUoZSkpOwor
ICAgIGlmIChlICYmIGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpIHsKKyAg
ICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0RGlyZWN0aW9uU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFs
c2UpOworICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNldE9uRG9jdW1lbnRF
bGVtZW50KGZhbHNlKTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6Omlu
aXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBQ
c2V1ZG9JZCBwc2V1ZG9JRCkKK2lubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRGb3JTdHls
ZVJlc29sdmUoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBFbGVtZW50KiBlLCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUpCiB7Ci0gICAgbV9wc2V1ZG9TdHlsZSA9IHBzZXVkb0lEOwotCiAgICAg
aWYgKGUpIHsKICAgICAgICAgTm9kZVJlbmRlcmluZ0NvbnRleHQgY29udGV4dChlKTsKLSAgICAg
ICAgbV9wYXJlbnROb2RlID0gY29udGV4dC5wYXJlbnROb2RlRm9yUmVuZGVyaW5nQW5kU3R5bGUo
KTsKLSAgICAgICAgbV9wYXJlbnRTdHlsZSA9IGNvbnRleHQucmVzZXRTdHlsZUluaGVyaXRhbmNl
KCkgPyAwIDoKKyAgICAgICAgc3RhdGUuc2V0UGFyZW50Tm9kZShjb250ZXh0LnBhcmVudE5vZGVG
b3JSZW5kZXJpbmdBbmRTdHlsZSgpKTsKKyAgICAgICAgc3RhdGUuc2V0UGFyZW50U3R5bGUoY29u
dGV4dC5yZXNldFN0eWxlSW5oZXJpdGFuY2UoKSA/IDAgOgogICAgICAgICAgICAgcGFyZW50U3R5
bGUgPyBwYXJlbnRTdHlsZSA6Ci0gICAgICAgICAgICBtX3BhcmVudE5vZGUgPyBtX3BhcmVudE5v
ZGUtPnJlbmRlclN0eWxlKCkgOiAwOwotICAgICAgICBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Q
b2ludCA9IGNvbnRleHQuaW5zZXJ0aW9uUG9pbnQoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBt
X3BhcmVudE5vZGUgPSAwOwotICAgICAgICBtX3BhcmVudFN0eWxlID0gcGFyZW50U3R5bGU7Ci0g
ICAgICAgIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50ID0gZmFsc2U7Ci0gICAgfQorICAg
ICAgICAgICAgc3RhdGUucGFyZW50Tm9kZSgpID8gc3RhdGUucGFyZW50Tm9kZSgpLT5yZW5kZXJT
dHlsZSgpIDogMCk7CisgICAgICAgIHN0YXRlLnNldERpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2lu
dChjb250ZXh0Lmluc2VydGlvblBvaW50KCkpOworICAgIH0gZWxzZQorICAgICAgICBzdGF0ZS5z
ZXRQYXJlbnRTdHlsZShwYXJlbnRTdHlsZSk7CiAKKyAgICBzdGF0ZS5zZXRDYW5Vc2VGYXN0UmVq
ZWN0KG1fc2VsZWN0b3JGaWx0ZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQoc3RhdGUucGFyZW50
Tm9kZSgpKSk7CisgICAgCiAgICAgTm9kZSogZG9jRWxlbWVudCA9IGUgPyBlLT5kb2N1bWVudCgp
LT5kb2N1bWVudEVsZW1lbnQoKSA6IDA7CiAgICAgUmVuZGVyU3R5bGUqIGRvY1N0eWxlID0gZG9j
dW1lbnQoKS0+cmVuZGVyU3R5bGUoKTsKLSAgICBtX3Jvb3RFbGVtZW50U3R5bGUgPSBkb2NFbGVt
ZW50ICYmIGUgIT0gZG9jRWxlbWVudCA/IGRvY0VsZW1lbnQtPnJlbmRlclN0eWxlKCkgOiBkb2NT
dHlsZTsKLQotICAgIG1fc3R5bGUgPSAwOwotCi0gICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVz
LmNsZWFyKCk7Ci0KLSAgICBtX3J1bGVMaXN0ID0gMDsKKyAgICBzdGF0ZS5zZXRSb290RWxlbWVu
dFN0eWxlKGRvY0VsZW1lbnQgJiYgZSAhPSBkb2NFbGVtZW50ID8gZG9jRWxlbWVudC0+cmVuZGVy
U3R5bGUoKSA6IGRvY1N0eWxlKTsKIAotICAgIG1fZm9udERpcnR5ID0gZmFsc2U7CisgICAgc3Rh
dGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmNsZWFyKCk7CisgICAgc3RhdGUuc2V0Rm9udERp
cnR5KGZhbHNlKTsKIH0KIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNTdHlsZVNlYXJjaFRocmVz
aG9sZCA9IDEwOwpAQCAtMTA1NCwyNiArMTAyNSwyMyBAQCBOb2RlKiBTdHlsZVJlc29sdmVyOjps
b2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQ291
bgogICAgIHJldHVybiAwOwogfQogCi1ib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0Nh
bmRpZGF0ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqIHJ1bGVTZXQpCitib29sIFN0eWxlUmVzb2x2
ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KEVsZW1lbnQqIGVsZW1lbnQs
IFJ1bGVTZXQqIHJ1bGVTZXQpCiB7CiAgICAgaWYgKCFydWxlU2V0KQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKIAogICAgIGludCBmaXJzdFJ1bGVJ
bmRleCA9IC0xLCBsYXN0UnVsZUluZGV4ID0gLTE7Ci0gICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0
TW9kZShTZWxlY3RvckNoZWNrZXI6OlNoYXJpbmdSdWxlcyk7Ci0gICAgY29sbGVjdE1hdGNoaW5n
UnVsZXMoTWF0Y2hSZXF1ZXN0KHJ1bGVTZXQpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRl
eCk7Ci0gICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlJlc29s
dmluZ1N0eWxlKTsKLSAgICBpZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICBTdHlsZVJlc29sdmVTdGF0ZSBzdGF0ZTsKKyAgICBzdGF0ZS5zZXRFbGVtZW50KGVs
ZW1lbnQpOworICAgIHN0YXRlLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpTaGFyaW5nUnVsZXMp
OworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVTZXQsIHN0YXRlLCBmaXJzdFJ1bGVJbmRl
eCwgbGFzdFJ1bGVJbmRleCk7CisgICAgcmV0dXJuICFzdGF0ZS5tYXRjaGVkUnVsZXMoKS5pc0Vt
cHR5KCk7CiB9CiAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9s
KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Citib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNo
YXJlU3R5bGVXaXRoQ29udHJvbChFbGVtZW50KiBlbGVtZW50LCBTdHlsZWRFbGVtZW50KiBzaGFy
aW5nQ2FuZGlkYXRlKSBjb25zdAogewotICAgIEhUTUxJbnB1dEVsZW1lbnQqIHRoaXNJbnB1dEVs
ZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQq
IG90aGVySW5wdXRFbGVtZW50ID0gbV9lbGVtZW50LT50b0lucHV0RWxlbWVudCgpOworICAgIEhU
TUxJbnB1dEVsZW1lbnQqIHRoaXNJbnB1dEVsZW1lbnQgPSBzaGFyaW5nQ2FuZGlkYXRlLT50b0lu
cHV0RWxlbWVudCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIG90aGVySW5wdXRFbGVtZW50ID0g
ZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKIAogICAgIGlmICghdGhpc0lucHV0RWxlbWVudCB8
fCAhb3RoZXJJbnB1dEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwOTQsMjUg
KzEwNjIsMjUgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2wo
U3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+
aXNSZXF1aXJlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LT5pc1JlcXVpcmVkKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgp
ICE9IG1fZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSkKKyAgICBpZiAoc2hhcmluZ0Nh
bmRpZGF0ZS0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSAhPSBlbGVtZW50LT5pc0VuYWJsZWRGb3Jt
Q29udHJvbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNE
ZWZhdWx0QnV0dG9uRm9yRm9ybSgpICE9IG1fZWxlbWVudC0+aXNEZWZhdWx0QnV0dG9uRm9yRm9y
bSgpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkg
IT0gZWxlbWVudC0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAobV9lbGVtZW50LT5kb2N1bWVudCgpLT5jb250YWluc1ZhbGlkaXR5U3R5
bGVSdWxlcygpKSB7Ci0gICAgICAgIGJvb2wgd2lsbFZhbGlkYXRlID0gZWxlbWVudC0+d2lsbFZh
bGlkYXRlKCk7CisgICAgaWYgKGVsZW1lbnQtPmRvY3VtZW50KCktPmNvbnRhaW5zVmFsaWRpdHlT
dHlsZVJ1bGVzKCkpIHsKKyAgICAgICAgYm9vbCB3aWxsVmFsaWRhdGUgPSBzaGFyaW5nQ2FuZGlk
YXRlLT53aWxsVmFsaWRhdGUoKTsKIAotICAgICAgICBpZiAod2lsbFZhbGlkYXRlICE9IG1fZWxl
bWVudC0+d2lsbFZhbGlkYXRlKCkpCisgICAgICAgIGlmICh3aWxsVmFsaWRhdGUgIT0gZWxlbWVu
dC0+d2lsbFZhbGlkYXRlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAg
aWYgKHdpbGxWYWxpZGF0ZSAmJiAoZWxlbWVudC0+aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgp
ICE9IG1fZWxlbWVudC0+aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpKSkKKyAgICAgICAgaWYg
KHdpbGxWYWxpZGF0ZSAmJiAoc2hhcmluZ0NhbmRpZGF0ZS0+aXNWYWxpZEZvcm1Db250cm9sRWxl
bWVudCgpICE9IGVsZW1lbnQtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKGVsZW1lbnQtPmlzSW5SYW5nZSgpICE9
IG1fZWxlbWVudC0+aXNJblJhbmdlKCkpCisgICAgICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5p
c0luUmFuZ2UoKSAhPSBlbGVtZW50LT5pc0luUmFuZ2UoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgICAgICBpZiAoZWxlbWVudC0+aXNPdXRPZlJhbmdlKCkgIT0gbV9lbGVtZW50
LT5pc091dE9mUmFuZ2UoKSkKKyAgICAgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmlzT3V0T2ZS
YW5nZSgpICE9IGVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIApAQCAtMTEyNSwyNyArMTA5MywyNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
ZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oRWxlbWVudCogZWxlbWVudCkKICAgICByZXR1cm4gZWxl
bWVudC0+aXNIVE1MRWxlbWVudCgpICYmIHRvSFRNTEVsZW1lbnQoZWxlbWVudCktPmhhc0RpcmVj
dGlvbkF1dG8oKTsKIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFz
SWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdD
YW5kaWRhdGUpIGNvbnN0Citib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJ
ZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRl
LCBFbGVtZW50KiBlbGVtZW50LCBTdHlsZWRFbGVtZW50KiBzaGFyaW5nQ2FuZGlkYXRlKSBjb25z
dAogewotICAgIGlmIChtX2VsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKSA9PSBzaGFyaW5nQ2FuZGlk
YXRlLT5hdHRyaWJ1dGVEYXRhKCkpCisgICAgaWYgKGVsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKSA9
PSBzaGFyaW5nQ2FuZGlkYXRlLT5hdHRyaWJ1dGVEYXRhKCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIGlmIChtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRy
KSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0
cikpCisgICAgaWYgKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRy
KSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0
cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9lbGVtZW50LT5mYXN0R2V0QXR0
cmlidXRlKGxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0cmlidXRlKGxh
bmdBdHRyKSkKKyAgICBpZiAoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikgIT0g
c2hhcmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmICghbV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMpIHsK
KyAgICBpZiAoIXN0YXRlLmVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcygpKSB7CiAgICAgICAg
IGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5oYXNDbGFzcygpICYmIGNsYXNzTmFtZXNBZmZlY3RlZEJ5
UnVsZXMoc2hhcmluZ0NhbmRpZGF0ZS0+Y2xhc3NOYW1lcygpKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9IGVsc2UgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmhhc0NsYXNzKCkpIHsK
ICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICAvLyBTVkcgZWxlbWVudHMgcmVxdWlyZSBhIChzbG93
ISkgZ2V0QXR0cmlidXRlIGNvbXBhcmlzaW9uIGJlY2F1c2UgImNsYXNzIiBpcyBhbiBhbmltYXRh
YmxlIGF0dHJpYnV0ZSBmb3IgU1ZHLgotICAgICAgICBpZiAobV9lbGVtZW50LT5pc1NWR0VsZW1l
bnQoKSkgewotICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0
cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikpCisgICAgICAg
IGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKGVsZW1lbnQt
PmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmdldEF0dHJpYnV0
ZShjbGFzc0F0dHIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBl
bHNlIHsKICNlbmRpZgotICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+Y2xhc3NOYW1lcygpICE9
IHNoYXJpbmdDYW5kaWRhdGUtPmNsYXNzTmFtZXMoKSkKKyAgICAgICAgICAgIGlmIChlbGVtZW50
LT5jbGFzc05hbWVzKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Y2xhc3NOYW1lcygpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICB9CkBAIC0x
MTUzLDEyICsxMTIxLDEyIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhh
c0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFCiAgICAgfSBlbHNlCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPnByZXNlbnRh
dGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+cHJlc2VudGF0aW9uQXR0
cmlidXRlU3R5bGUoKSkKKyAgICBpZiAodG9TdHlsZWRFbGVtZW50KGVsZW1lbnQpLT5wcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUtPnByZXNlbnRhdGlvbkF0
dHJpYnV0ZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIEVOQUJMRShQUk9H
UkVTU19FTEVNRU5UKQotICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcp
KSB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50Kj4obV9lbGVt
ZW50KS0+aXNEZXRlcm1pbmF0ZSgpICE9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQq
PihzaGFyaW5nQ2FuZGlkYXRlKS0+aXNEZXRlcm1pbmF0ZSgpKQorICAgIGlmIChlbGVtZW50LT5o
YXNUYWdOYW1lKHByb2dyZXNzVGFnKSkgeworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8SFRNTFBy
b2dyZXNzRWxlbWVudCo+KGVsZW1lbnQpLT5pc0RldGVybWluYXRlKCkgIT0gc3RhdGljX2Nhc3Q8
SFRNTFByb2dyZXNzRWxlbWVudCo+KHNoYXJpbmdDYW5kaWRhdGUpLT5pc0RldGVybWluYXRlKCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogI2VuZGlmCkBAIC0xMTY2LDU4ICsx
MTM0LDU5IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNh
bFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1l
bnQqIGVsZW1lbnQpIGNvbnN0Citib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRo
RWxlbWVudChTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdD
YW5kaWRhdGUpIGNvbnN0CiB7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC0+cmVu
ZGVyU3R5bGUoKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGUuZWxlbWVudCgpOworICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IHNoYXJpbmdDYW5kaWRhdGUtPnJlbmRlclN0eWxlKCk7CiAK
ICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKHN0eWxlLT51
bmlxdWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT50YWdRTmFt
ZSgpICE9IG1fZWxlbWVudC0+dGFnUU5hbWUoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+
dGFnUU5hbWUoKSAhPSBlbGVtZW50LT50YWdRTmFtZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKGVsZW1lbnQtPmlubGluZVN0eWxlKCkpCisgICAgaWYgKHNoYXJpbmdDYW5kaWRh
dGUtPmlubGluZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVu
dC0+bmVlZHNTdHlsZVJlY2FsYygpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5uZWVkc1N0
eWxlUmVjYWxjKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNpZiBFTkFCTEUoU1ZHKQotICAg
IGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4o
ZWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQorICAgIGlmIChzaGFyaW5n
Q2FuZGlkYXRlLT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oZWxl
bWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAjZW5kaWYKLSAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkgIT0gbV9lbGVtZW50LT5pc0xp
bmsoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aXNMaW5rKCkgIT0gZWxlbWVudC0+aXNM
aW5rKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+aG92ZXJlZCgp
ICE9IG1fZWxlbWVudC0+aG92ZXJlZCgpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5ob3Zl
cmVkKCkgIT0gZWxlbWVudC0+aG92ZXJlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKGVsZW1lbnQtPmFjdGl2ZSgpICE9IG1fZWxlbWVudC0+YWN0aXZlKCkpCisgICAgaWYgKHNo
YXJpbmdDYW5kaWRhdGUtPmFjdGl2ZSgpICE9IGVsZW1lbnQtPmFjdGl2ZSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmZvY3VzZWQoKSAhPSBtX2VsZW1lbnQtPmZv
Y3VzZWQoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+Zm9jdXNlZCgpICE9IGVsZW1lbnQt
PmZvY3VzZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5zaGFk
b3dQc2V1ZG9JZCgpICE9IG1fZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKSkKKyAgICBpZiAoc2hh
cmluZ0NhbmRpZGF0ZS0+c2hhZG93UHNldWRvSWQoKSAhPSBlbGVtZW50LT5zaGFkb3dQc2V1ZG9J
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+
ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCisgICAgaWYgKGVsZW1lbnQgPT0gc2hhcmluZ0NhbmRp
ZGF0ZS0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoIXNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0
ZXMoZWxlbWVudCkpCisgICAgaWYgKCFzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVB
ZmZlY3RpbmdBdHRyaWJ1dGVzKHN0YXRlLCBlbGVtZW50LCBzaGFyaW5nQ2FuZGlkYXRlKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0
aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBtX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5hZGRpdGlv
bmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzdGF0ZS5zdHlsZWRFbGVtZW50KCkt
PmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVs
ZXMuY29udGFpbnMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQorICAg
IGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5j
b250YWlucyhzaGFyaW5nQ2FuZGlkYXRlLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0
eWxlQ2hpbGQoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aGFzU2NvcGVkSFRNTFN0eWxl
Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBzaGFyZSBzdHlsZSBmb3Igb3B0aW9uIGFuZCBvcHRncm91cCB3aGVuZXZlciBwb3NzaWJsZS4K
ICAgICAvLyBCZWZvcmUgZG9pbmcgc28sIHdlIG5lZWQgdG8gcmVzb2x2ZSBpc3N1ZXMgaW4gSFRN
TFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcwogICAgIC8vIGFuZCBSZW5kZXJNZW51TGlz
dDo6c2V0VGV4dC4gU2VlIGFsc28gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg4NDA1Ci0gICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUob3B0aW9uVGFnKSB8fCBlbGVt
ZW50LT5oYXNUYWdOYW1lKG9wdGdyb3VwVGFnKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+
aGFzVGFnTmFtZShvcHRpb25UYWcpIHx8IHNoYXJpbmdDYW5kaWRhdGUtPmhhc1RhZ05hbWUob3B0
Z3JvdXBUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBib29sIGlzQ29udHJvbCA9
IGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CisgICAgYm9vbCBpc0NvbnRyb2wgPSBz
aGFyaW5nQ2FuZGlkYXRlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpOwogCi0gICAgaWYgKGlzQ29u
dHJvbCAhPSBtX2VsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgaWYgKGlzQ29u
dHJvbCAhPSBlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBpZiAoaXNDb250cm9sICYmICFjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2wo
ZWxlbWVudCkpCisgICAgaWYgKGlzQ29udHJvbCAmJiAhY2FuU2hhcmVTdHlsZVdpdGhDb250cm9s
KGVsZW1lbnQsIHNoYXJpbmdDYW5kaWRhdGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBpZiAoc3R5bGUtPnRyYW5zaXRpb25zKCkgfHwgc3R5bGUtPmFuaW1hdGlvbnMoKSkKQEAgLTEy
MjYsMTAgKzExOTUsMTAgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVs
ZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCiAgICAgLy8gVHVybiBvZmYgc3R5bGUgc2hhcmluZyBmb3IgZWxlbWVudHMg
dGhhdCBjYW4gZ2FpbiBsYXllcnMgZm9yIHJlYXNvbnMgb3V0c2lkZSBvZiB0aGUgc3R5bGUgc3lz
dGVtLgogICAgIC8vIFNlZSBjb21tZW50cyBpbiBSZW5kZXJPYmplY3Q6OnNldFN0eWxlKCkuCi0g
ICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdO
YW1lKGZyYW1lVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBlbGVtZW50
LT5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcp
IHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoY2FudmFzVGFnKQorICAgIGlmIChzaGFyaW5nQ2FuZGlk
YXRlLT5oYXNUYWdOYW1lKGlmcmFtZVRhZykgfHwgc2hhcmluZ0NhbmRpZGF0ZS0+aGFzVGFnTmFt
ZShmcmFtZVRhZykgfHwgc2hhcmluZ0NhbmRpZGF0ZS0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwg
c2hhcmluZ0NhbmRpZGF0ZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpIHx8IHNoYXJpbmdDYW5kaWRh
dGUtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBzaGFyaW5nQ2FuZGlkYXRlLT5oYXNUYWdOYW1l
KGNhbnZhc1RhZykKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKICAgICAgICAg
Ly8gV2l0aCBwcm94eWluZywgdGhlIG1lZGlhIGVsZW1lbnRzIGFyZSBiYWNrZWQgYnkgYSBSZW5k
ZXJFbWJlZGRlZE9iamVjdC4KLSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZSh2aWRlb1Rh
ZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShhdWRpb1RhZykKKyAgICAgICAgfHwgc2hhcmluZ0Nh
bmRpZGF0ZS0+aGFzVGFnTmFtZSh2aWRlb1RhZykgfHwgc2hhcmluZ0NhbmRpZGF0ZS0+aGFzVGFn
TmFtZShhdWRpb1RhZykKICNlbmRpZgogICAgICAgICApCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTEyMzgsMzEgKzEyMDcsMzEgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxl
V2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICBpZiAoZWxlbWVu
dEhhc0RpcmVjdGlvbkF1dG8oZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmIChlbGVtZW50LT5pc0xpbmsoKSAmJiBtX2VsZW1lbnRMaW5rU3RhdGUgIT0gc3R5bGUtPmlu
c2lkZUxpbmsoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aXNMaW5rKCkgJiYgc3RhdGUu
ZWxlbWVudExpbmtTdGF0ZSgpICE9IHN0eWxlLT5pbnNpZGVMaW5rKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICAvLyBEZW55IHNoYXJpbmcg
c3R5bGVzIGJldHdlZW4gV2ViVlRUIGFuZCBub24tV2ViVlRUIG5vZGVzLgotICAgIGlmIChlbGVt
ZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAhPSBtX2VsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpKQor
ICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5pc1dlYlZUVEVsZW1lbnQoKSAhPSBlbGVtZW50LT5p
c1dlYlZUVEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1l
bnQtPmlzV2ViVlRURWxlbWVudCgpICYmIG1fZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYg
dG9XZWJWVFRFbGVtZW50KGVsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpICE9IHRvV2ViVlRURWxl
bWVudChtX2VsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlk
YXRlLT5pc1dlYlZUVEVsZW1lbnQoKSAmJiBlbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiB0
b1dlYlZUVEVsZW1lbnQoZWxlbWVudCktPndlYlZUVE5vZGVUeXBlKCkgIT0gdG9XZWJWVFRFbGVt
ZW50KGVsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBpZiAoZWxlbWVudCA9PSBl
bGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSB8fCBt
X2VsZW1lbnQgPT0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVl
bkVsZW1lbnQoKSkKKyAgICBpZiAoZWxlbWVudCA9PSBzaGFyaW5nQ2FuZGlkYXRlLT5kb2N1bWVu
dCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSB8fCBlbGVtZW50ID09IGVsZW1l
bnQtPmRvY3VtZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIFN0
eWxlZEVsZW1lbnQqIFN0eWxlUmVzb2x2ZXI6OmZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5v
ZGUqIG5vZGUsIHVuc2lnbmVkJiBjb3VudCkgY29uc3QKK2lubGluZSBTdHlsZWRFbGVtZW50KiBT
dHlsZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhTdHlsZVJlc29sdmVTdGF0
ZSYgc3RhdGUsIE5vZGUqIG5vZGUsIHVuc2lnbmVkJiBjb3VudCkgY29uc3QKIHsKICAgICBmb3Ig
KDsgbm9kZTsgbm9kZSA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgIGlmICgh
bm9kZS0+aXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
aWYgKGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4o
bm9kZSkpKQorICAgICAgICBpZiAoY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KHN0YXRlLCBzdGF0
aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGlmIChjb3VudCsrID09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkKICAgICAgICAgICAgIHJl
dHVybiAwOwpAQCAtMTI4MCw0MCArMTI0OSw0MSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGFyZW50
RWxlbWVudFByZXZlbnRzU2hhcmluZyhjb25zdCBFbGVtZW50KiBwYXJlbnRFbGVtZW50KQogICAg
ICAgICB8fCBwYXJlbnRFbGVtZW50LT5jaGlsZHJlbkFmZmVjdGVkQnlEaXJlY3RBZGphY2VudFJ1
bGVzKCk7CiB9CiAKLVJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHls
ZSgpCitSZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoU3R5bGVS
ZXNvbHZlU3RhdGUmIHN0YXRlKQogewotICAgIGlmICghbV9zdHlsZWRFbGVtZW50IHx8ICFtX3Bh
cmVudFN0eWxlKQorICAgIGlmICghc3RhdGUuc3R5bGVkRWxlbWVudCgpIHx8ICFzdGF0ZS5wYXJl
bnRTdHlsZSgpKQogICAgICAgICByZXR1cm4gMDsKKwogICAgIC8vIElmIHRoZSBlbGVtZW50IGhh
cyBpbmxpbmUgc3R5bGUgaXQgaXMgcHJvYmFibHkgdW5pcXVlLgotICAgIGlmIChtX3N0eWxlZEVs
ZW1lbnQtPmlubGluZVN0eWxlKCkpCisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aW5s
aW5lU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAjaWYgRU5BQkxFKFNWRykKLSAgICBpZiAo
bV9zdHlsZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50
Kj4obV9zdHlsZWRFbGVtZW50KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCisgICAg
aWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8
U1ZHRWxlbWVudCo+KHN0YXRlLnN0eWxlZEVsZW1lbnQoKSktPmFuaW1hdGVkU01JTFN0eWxlUHJv
cGVydGllcygpKQogICAgICAgICByZXR1cm4gMDsKICNlbmRpZgogICAgIC8vIElkcyBzdG9wIHN0
eWxlIHNoYXJpbmcgaWYgdGhleSBzaG93IHVwIGluIHRoZSBzdHlsZXNoZWV0cy4KLSAgICBpZiAo
bV9zdHlsZWRFbGVtZW50LT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlu
cyhtX3N0eWxlZEVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKKyAgICBp
ZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxl
cy5jb250YWlucyhzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCku
aW1wbCgpKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50
c1NoYXJpbmcobV9lbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpKQorICAgIGlmIChwYXJlbnRFbGVt
ZW50UHJldmVudHNTaGFyaW5nKHN0YXRlLmVsZW1lbnQoKS0+cGFyZW50RWxlbWVudCgpKSkKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0
eWxlQ2hpbGQoKSkKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5oYXNTY29wZWRIVE1M
U3R5bGVDaGlsZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAobV9lbGVtZW50ID09IG1f
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCisgICAgaWYgKHN0YXRlLmVsZW1lbnQo
KSA9PSBzdGF0ZS5kb2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKG1fZWxlbWVudCkpCisgICAgaWYgKGVsZW1l
bnRIYXNEaXJlY3Rpb25BdXRvKHN0YXRlLmVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiAwOwog
CiAgICAgLy8gQ2FjaGUgd2hldGhlciBtX2VsZW1lbnQgaXMgYWZmZWN0ZWQgYnkgYW55IGtub3du
IGNsYXNzIHNlbGVjdG9ycy4KICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgYSBtZW1i
ZXIgdmFyaWFibGUuIFRoZSBzdHlsZSBzaGFyaW5nIGNvZGUgY291bGQgYmUgZmFjdG9yZWQgb3V0
IG9mIFN0eWxlUmVzb2x2ZXIuCi0gICAgbV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMgPSBt
X2VsZW1lbnQgJiYgbV9lbGVtZW50LT5oYXNDbGFzcygpICYmIGNsYXNzTmFtZXNBZmZlY3RlZEJ5
UnVsZXMobV9lbGVtZW50LT5jbGFzc05hbWVzKCkpOworICAgIHN0YXRlLnNldEVsZW1lbnRBZmZl
Y3RlZEJ5Q2xhc3NSdWxlcyhzdGF0ZS5lbGVtZW50KCkgJiYgc3RhdGUuZWxlbWVudCgpLT5oYXND
bGFzcygpICYmIGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMoc3RhdGUuZWxlbWVudCgpLT5jbGFz
c05hbWVzKCkpKTsKIAogICAgIC8vIENoZWNrIHByZXZpb3VzIHNpYmxpbmdzIGFuZCB0aGVpciBj
b3VzaW5zLgogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICB1bnNpZ25lZCB2aXNpdGVkTm9k
ZUNvdW50ID0gMDsKICAgICBTdHlsZWRFbGVtZW50KiBzaGFyZUVsZW1lbnQgPSAwOwotICAgIE5v
ZGUqIGNvdXNpbkxpc3QgPSBtX3N0eWxlZEVsZW1lbnQtPnByZXZpb3VzU2libGluZygpOworICAg
IE5vZGUqIGNvdXNpbkxpc3QgPSBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPnByZXZpb3VzU2libGlu
ZygpOwogICAgIHdoaWxlIChjb3VzaW5MaXN0KSB7Ci0gICAgICAgIHNoYXJlRWxlbWVudCA9IGZp
bmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKGNvdXNpbkxpc3QsIGNvdW50KTsKKyAgICAgICAgc2hh
cmVFbGVtZW50ID0gZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoc3RhdGUsIGNvdXNpbkxpc3Qs
IGNvdW50KTsKICAgICAgICAgaWYgKHNoYXJlRWxlbWVudCkKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjb3VzaW5MaXN0ID0gbG9jYXRlQ291c2luTGlzdChjb3VzaW5MaXN0LT5wYXJlbnRF
bGVtZW50KCksIHZpc2l0ZWROb2RlQ291bnQpOwpAQCAtMTMyNCwyMSArMTI5NCwyMSBAQCBSZW5k
ZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQogICAgICAgICByZXR1
cm4gMDsKIAogICAgIC8vIENhbid0IHNoYXJlIGlmIHNpYmxpbmcgcnVsZXMgYXBwbHkuIFRoaXMg
aXMgY2hlY2tlZCBhdCB0aGUgZW5kIGFzIGl0IHNob3VsZCByYXJlbHkgZmFpbC4KLSAgICBpZiAo
c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQobV9zaWJsaW5nUnVsZVNldC5nZXQo
KSkpCisgICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KHN0YXRlLmVs
ZW1lbnQoKSwgbV9zaWJsaW5nUnVsZVNldC5nZXQoKSkpCiAgICAgICAgIHJldHVybiAwOwogICAg
IC8vIENhbid0IHNoYXJlIGlmIGF0dHJpYnV0ZSBydWxlcyBhcHBseS4KLSAgICBpZiAoc3R5bGVT
aGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQobV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQu
Z2V0KCkpKQorICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChzdGF0
ZS5lbGVtZW50KCksIG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0LmdldCgpKSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgQGhvc3QgQC1ydWxlcyBhcHBseS4KLSAg
ICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcygpKQorICAgIGlmIChz
dHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKHN0YXRlLmVsZW1lbnQoKSkpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIC8vIFRyYWNraW5nIGNoaWxkIGluZGV4IHJlcXVpcmVzIHVu
aXF1ZSBzdHlsZSBmb3IgZWFjaCBub2RlLiBUaGlzIG1heSBnZXQgc2V0IGJ5IHRoZSBzaWJsaW5n
IHJ1bGUgbWF0Y2ggYWJvdmUuCi0gICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmco
bV9lbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpKQorICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVu
dHNTaGFyaW5nKHN0YXRlLmVsZW1lbnQoKS0+cGFyZW50RWxlbWVudCgpKSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgcmV0dXJuIHNoYXJlRWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKIH0KIAotdm9p
ZCBTdHlsZVJlc29sdmVyOjptYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKK3ZvaWQg
U3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgTWF0
Y2hSZXN1bHQmIHJlc3VsdCkKIHsKICAgICBNYXRjaGluZ1VBUnVsZXNTY29wZSBzY29wZTsKIApA
QCAtMTM0NywxNSArMTMxNywxNSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhN
YXRjaFJlc3VsdCYgcmVzdWx0KQogICAgICAgICByZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsK
ICAgICBSdWxlU2V0KiB1c2VyQWdlbnRTdHlsZVNoZWV0ID0gbV9tZWRpdW0tPm1lZGlhVHlwZU1h
dGNoU3BlY2lmaWMoInByaW50IikKICAgICAgICAgPyBkZWZhdWx0UHJpbnRTdHlsZSA6IGRlZmF1
bHRTdHlsZTsKLSAgICBtYXRjaFVBUnVsZXMocmVzdWx0LCB1c2VyQWdlbnRTdHlsZVNoZWV0KTsK
KyAgICBtYXRjaFVBUnVsZXMoc3RhdGUsIHJlc3VsdCwgdXNlckFnZW50U3R5bGVTaGVldCk7CiAK
ICAgICAvLyBJbiBxdWlya3MgbW9kZSwgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgcXVpcmtzIHVz
ZXIgYWdlbnQgc2hlZXQuCi0gICAgaWYgKCFtX3NlbGVjdG9yQ2hlY2tlci5zdHJpY3RQYXJzaW5n
KCkpCi0gICAgICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQsIGRlZmF1bHRRdWlya3NTdHlsZSk7Cisg
ICAgaWYgKGRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKQorICAgICAgICBtYXRjaFVBUnVsZXMo
c3RhdGUsIHJlc3VsdCwgZGVmYXVsdFF1aXJrc1N0eWxlKTsKIAogICAgIC8vIElmIGRvY3VtZW50
IHVzZXMgdmlldyBzb3VyY2Ugc3R5bGVzIChpbiB2aWV3IHNvdXJjZSBtb2RlIG9yIGluIHhtbCB2
aWV3ZXIgbW9kZSksIHRoZW4gd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdmlldyBzb3VyY2Ugc3R5
bGUgc2hlZXQuCiAgICAgaWYgKGRvY3VtZW50KCktPmlzVmlld1NvdXJjZSgpKQotICAgICAgICBt
YXRjaFVBUnVsZXMocmVzdWx0LCB2aWV3U291cmNlU3R5bGUoKSk7CisgICAgICAgIG1hdGNoVUFS
dWxlcyhzdGF0ZSwgcmVzdWx0LCB2aWV3U291cmNlU3R5bGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lk
IHNldFN0eWxlc0ZvclBhZ2luYXRpb25Nb2RlKFBhZ2luYXRpb246Ok1vZGUgcGFnaW5hdGlvbk1v
ZGUsIFJlbmRlclN0eWxlKiBzdHlsZSkKQEAgLTE1NTMsMTA2ICsxNTIzLDEwNCBAQCBQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCwgUmVuZGVyUwogICAgICAgICByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsK
ICAgICB9CiAKLSAgICBpbml0RWxlbWVudChlbGVtZW50KTsKLSAgICBpbml0Rm9yU3R5bGVSZXNv
bHZlKGVsZW1lbnQsIGRlZmF1bHRQYXJlbnQpOwotICAgIG1fcmVnaW9uRm9yU3R5bGluZyA9IHJl
Z2lvbkZvclN0eWxpbmc7Ci0gICAgaWYgKHNoYXJpbmdCZWhhdmlvciA9PSBBbGxvd1N0eWxlU2hh
cmluZyAmJiAhbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQpIHsKLSAgICAgICAgUmVuZGVy
U3R5bGUqIHNoYXJlZFN0eWxlID0gbG9jYXRlU2hhcmVkU3R5bGUoKTsKKyAgICBTdHlsZVJlc29s
dmVTdGF0ZSBzdGF0ZTsKKyAgICBpbml0RWxlbWVudChzdGF0ZSwgZWxlbWVudCk7CisgICAgaW5p
dEZvclN0eWxlUmVzb2x2ZShzdGF0ZSwgZWxlbWVudCwgZGVmYXVsdFBhcmVudCk7CisgICAgc3Rh
dGUuc2V0UmVnaW9uRm9yU3R5bGluZyhyZWdpb25Gb3JTdHlsaW5nKTsKKworICAgIGlmIChzaGFy
aW5nQmVoYXZpb3IgPT0gQWxsb3dTdHlsZVNoYXJpbmcgJiYgIXN0YXRlLmRpc3RyaWJ1dGVkVG9J
bnNlcnRpb25Qb2ludCgpKSB7CisgICAgICAgIFJlbmRlclN0eWxlKiBzaGFyZWRTdHlsZSA9IGxv
Y2F0ZVNoYXJlZFN0eWxlKHN0YXRlKTsKICAgICAgICAgaWYgKHNoYXJlZFN0eWxlKQogICAgICAg
ICAgICAgcmV0dXJuIHNoYXJlZFN0eWxlOwogICAgIH0KIAogICAgIFJlZlB0cjxSZW5kZXJTdHls
ZT4gY2xvbmVGb3JQYXJlbnQ7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZTsKIAotICAg
IGlmIChtX3BhcmVudFN0eWxlKSB7Ci0gICAgICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3Jl
YXRlKCk7Ci0gICAgICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKG1fcGFyZW50U3R5bGUsIGlzQXRT
aGFkb3dCb3VuZGFyeShlbGVtZW50KSA/IFJlbmRlclN0eWxlOjpBdFNoYWRvd0JvdW5kYXJ5IDog
UmVuZGVyU3R5bGU6Ok5vdEF0U2hhZG93Qm91bmRhcnkpOworICAgIGlmIChzdGF0ZS5wYXJlbnRT
dHlsZSgpKSB7CisgICAgICAgIHN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgICAg
ICBzdHlsZS0+aW5oZXJpdEZyb20oc3RhdGUucGFyZW50U3R5bGUoKSwgaXNBdFNoYWRvd0JvdW5k
YXJ5KGVsZW1lbnQpID8gUmVuZGVyU3R5bGU6OkF0U2hhZG93Qm91bmRhcnkgOiBSZW5kZXJTdHls
ZTo6Tm90QXRTaGFkb3dCb3VuZGFyeSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9zdHlsZSA9
IGRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKTsKLSAgICAgICAgY2xvbmVGb3JQYXJlbnQgPSBSZW5k
ZXJTdHlsZTo6Y2xvbmUoc3R5bGUoKSk7Ci0gICAgICAgIG1fcGFyZW50U3R5bGUgPSBjbG9uZUZv
clBhcmVudC5nZXQoKTsKKyAgICAgICAgc3R5bGUgPSBkZWZhdWx0U3R5bGVGb3JFbGVtZW50KCk7
CisgICAgICAgIGNsb25lRm9yUGFyZW50ID0gUmVuZGVyU3R5bGU6OmNsb25lKHN0eWxlLmdldCgp
KTsKKyAgICAgICAgc3RhdGUuc2V0UGFyZW50U3R5bGUoY2xvbmVGb3JQYXJlbnQuZ2V0KCkpOwog
ICAgIH0KICAgICAvLyBjb250ZW50ZWRpdGFibGUgYXR0cmlidXRlIChpbXBsZW1lbnRlZCBieSAt
d2Via2l0LXVzZXItbW9kaWZ5KSBzaG91bGQKICAgICAvLyBiZSBwcm9wYWdhdGVkIGZyb20gc2hh
ZG93IGhvc3QgdG8gZGlzdHJpYnV0ZWQgbm9kZS4KLSAgICBpZiAobV9kaXN0cmlidXRlZFRvSW5z
ZXJ0aW9uUG9pbnQpIHsKKyAgICBpZiAoc3RhdGUuZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50
KCkpIHsKICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1l
bnQoKSkgewogICAgICAgICAgICAgaWYgKFJlbmRlclN0eWxlKiBzdHlsZU9mU2hhZG93SG9zdCA9
IHBhcmVudC0+cmVuZGVyU3R5bGUoKSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRVc2Vy
TW9kaWZ5KHN0eWxlT2ZTaGFkb3dIb3N0LT51c2VyTW9kaWZ5KCkpOworICAgICAgICAgICAgICAg
IHN0eWxlLT5zZXRVc2VyTW9kaWZ5KHN0eWxlT2ZTaGFkb3dIb3N0LT51c2VyTW9kaWZ5KCkpOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpKSB7Ci0gICAgICAg
IG1fc3R5bGUtPnNldElzTGluayh0cnVlKTsKLSAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXRl
ID0gbV9lbGVtZW50TGlua1N0YXRlOwotICAgICAgICBpZiAobV9lbGVtZW50TGlua1N0YXRlICE9
IE5vdEluc2lkZUxpbmspIHsKKyAgICAgICAgc3R5bGUtPnNldElzTGluayh0cnVlKTsKKyAgICAg
ICAgRUluc2lkZUxpbmsgbGlua1N0YXRlID0gc3RhdGUuZWxlbWVudExpbmtTdGF0ZSgpOworICAg
ICAgICBpZiAobGlua1N0YXRlICE9IE5vdEluc2lkZUxpbmspIHsKICAgICAgICAgICAgIGJvb2wg
Zm9yY2VWaXNpdGVkID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRl
KGVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkKTsKICAgICAgICAgICAgIGlmIChm
b3JjZVZpc2l0ZWQpCiAgICAgICAgICAgICAgICAgbGlua1N0YXRlID0gSW5zaWRlVmlzaXRlZExp
bms7CiAgICAgICAgIH0KLQotICAgICAgICBtX3N0eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0
ZSk7CisgICAgICAgIHN0eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0ZSk7CiAgICAgfQogCiAg
ICAgZW5zdXJlRGVmYXVsdFN0eWxlU2hlZXRzRm9yRWxlbWVudChlbGVtZW50KTsKIAorICAgIHN0
YXRlLnNldFN0eWxlKHN0eWxlLmdldCgpKTsKKwogICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0
OwogICAgIGlmIChtYXRjaGluZ0JlaGF2aW9yID09IE1hdGNoT25seVVzZXJBZ2VudFJ1bGVzKQot
ICAgICAgICBtYXRjaFVBUnVsZXMobWF0Y2hSZXN1bHQpOworICAgICAgICBtYXRjaFVBUnVsZXMo
c3RhdGUsIG1hdGNoUmVzdWx0KTsKICAgICBlbHNlCi0gICAgICAgIG1hdGNoQWxsUnVsZXMobWF0
Y2hSZXN1bHQsIG1hdGNoaW5nQmVoYXZpb3IgIT0gTWF0Y2hBbGxSdWxlc0V4Y2x1ZGluZ1NNSUwp
OworICAgICAgICBtYXRjaEFsbFJ1bGVzKHN0YXRlLCBtYXRjaFJlc3VsdCwgbWF0Y2hpbmdCZWhh
dmlvciAhPSBNYXRjaEFsbFJ1bGVzRXhjbHVkaW5nU01JTCk7CiAKLSAgICBhcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBlbGVtZW50KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0
aWVzKHN0YXRlLCBtYXRjaFJlc3VsdCwgZWxlbWVudCk7CiAKICAgICAvLyBDbGVhbiB1cCBvdXIg
c3R5bGUgb2JqZWN0J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIg
Zml4dXBzKS4KLSAgICBhZGp1c3RSZW5kZXJTdHlsZShzdHlsZSgpLCBtX3BhcmVudFN0eWxlLCBl
bGVtZW50KTsKLQotICAgIGluaXRFbGVtZW50KDApOyAvLyBDbGVhciBvdXQgZm9yIHRoZSBuZXh0
IHJlc29sdmUuCi0KLSAgICBpZiAoY2xvbmVGb3JQYXJlbnQpCi0gICAgICAgIG1fcGFyZW50U3R5
bGUgPSAwOworICAgIGFkanVzdFJlbmRlclN0eWxlKHN0YXRlLCBzdHlsZS5nZXQoKSwgc3RhdGUu
cGFyZW50U3R5bGUoKSwgZWxlbWVudCk7CiAKICAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHls
ZVJlc29sdmVyKCk7CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4g
bV9zdHlsZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHN0eWxlLnJlbGVhc2UoKTsKIH0KIAotUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25z
dCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFt
ZSwgS2V5ZnJhbWVWYWx1ZSYga2V5ZnJhbWVWYWx1ZSkKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRl
LCBjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBjb25zdCBTdHlsZUtleWZyYW1lKiBr
ZXlmcmFtZSwgS2V5ZnJhbWVWYWx1ZSYga2V5ZnJhbWVWYWx1ZSkKIHsKICAgICBNYXRjaFJlc3Vs
dCByZXN1bHQ7CiAgICAgaWYgKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpCiAgICAgICAgIGFkZE1h
dGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwga2V5ZnJhbWUtPnByb3BlcnRpZXMoKSk7CiAKLSAgICBB
U1NFUlQoIW1fc3R5bGUpOwotCiAgICAgLy8gQ3JlYXRlIHRoZSBzdHlsZQotICAgIG1fc3R5bGUg
PSBSZW5kZXJTdHlsZTo6Y2xvbmUoZWxlbWVudFN0eWxlKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IHN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKGVsZW1lbnRTdHlsZSk7CiAKLSAgICBtX2xp
bmVIZWlnaHRWYWx1ZSA9IDA7CisgICAgc3RhdGUuc2V0U3R5bGUoc3R5bGUuZ2V0KCkpOworICAg
IHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKIAogICAgIC8vIFdlIGRvbid0IG5lZWQgdG8g
Ym90aGVyIHdpdGggIWltcG9ydGFudC4gU2luY2UgdGhlcmUgaXMgb25seSBldmVyIG9uZQogICAg
IC8vIGRlY2wsIHRoZXJlJ3Mgbm90aGluZyB0byBvdmVycmlkZS4gU28ganVzdCBhZGQgdGhlIGZp
cnN0IHByb3BlcnRpZXMuCiAgICAgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAgICAgaWYg
KGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpCi0gICAgICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8
SGlnaFByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQ
cm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworICAgICAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCByZXN1bHQsIGZhbHNl
LCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7
CiAKICAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgZ28gYWhlYWQgYW5kIHVwZGF0ZSBp
dCBub3cuCi0gICAgdXBkYXRlRm9udCgpOworICAgIHVwZGF0ZUZvbnQoc3RhdGUpOwogCiAgICAg
Ly8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUg
Zm9udC1zaXplCi0gICAgaWYgKG1fbGluZUhlaWdodFZhbHVlKQotICAgICAgICBhcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOworICAgIGlmIChz
dGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NT
UHJvcGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7CiAKICAgICAvLyBO
b3cgZG8gcmVzdCBvZiB0aGUgcHJvcGVydGllcy4KICAgICBpZiAoa2V5ZnJhbWUtPnByb3BlcnRp
ZXMoKSkKLSAgICAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRp
ZXM+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAx
LCBpbmhlcml0ZWRPbmx5KTsKKyAgICAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlv
cml0eVByb3BlcnRpZXM+KHN0YXRlLCByZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFBy
b3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CiAKICAgICAvLyBJZiBvdXIgZm9u
dCBnb3QgZGlydGllZCBieSBvbmUgb2YgdGhlIG5vbi1lc3NlbnRpYWwgZm9udCBwcm9wcywKICAg
ICAvLyBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IGEgc2Vjb25kIHRpbWUuCi0gICAgdXBkYXRlRm9u
dCgpOworICAgIHVwZGF0ZUZvbnQoc3RhdGUpOwogCiAgICAgLy8gU3RhcnQgbG9hZGluZyByZXNv
dXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nUmVzb3VyY2Vz
KCk7CisgICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoc3RhdGUpOwogICAgIAogICAgIC8vIEFkZCBh
bGwgdGhlIGFuaW1hdGluZyBwcm9wZXJ0aWVzIHRvIHRoZSBrZXlmcmFtZS4KICAgICBpZiAoY29u
c3QgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGVEZWNsYXJhdGlvbiA9IGtleWZyYW1lLT5wcm9wZXJ0
aWVzKCkpIHsKQEAgLTE2NjgsNyArMTYzNiw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0
eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lCiAK
ICAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7CiAKLSAgICByZXR1cm4g
bV9zdHlsZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHN0eWxlLnJlbGVhc2UoKTsKIH0KIAogdm9p
ZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBj
b25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBLZXlmcmFtZUxpc3QmIGxpc3QpCkBAIC0x
Njg5LDE1ICsxNjU3LDE2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JB
bmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsCiAKICAgICAvLyBDb25z
dHJ1Y3QgYW5kIHBvcHVsYXRlIHRoZSBzdHlsZSBmb3IgZWFjaCBrZXlmcmFtZQogICAgIGNvbnN0
IFZlY3RvcjxSZWZQdHI8U3R5bGVLZXlmcmFtZT4gPiYga2V5ZnJhbWVzID0ga2V5ZnJhbWVzUnVs
ZS0+a2V5ZnJhbWVzKCk7CisgICAgU3R5bGVSZXNvbHZlU3RhdGUgc3RhdGU7CisgICAgaW5pdEVs
ZW1lbnQoc3RhdGUsIGUpOworICAgIGluaXRGb3JTdHlsZVJlc29sdmUoc3RhdGUsIGUpOworICAg
IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlmcmFtZXMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgLy8gQXBwbHkgdGhlIGRlY2xhcmF0aW9uIHRvIHRoZSBzdHlsZS4gVGhpcyBpcyBh
IHNpbXBsaWZpZWQgdmVyc2lvbiBvZiB0aGUgbG9naWMgaW4gc3R5bGVGb3JFbGVtZW50Ci0gICAg
ICAgIGluaXRFbGVtZW50KGUpOwotICAgICAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGUpOwotCiAg
ICAgICAgIGNvbnN0IFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1lID0ga2V5ZnJhbWVzW2ldLmdldCgp
OwogCiAgICAgICAgIEtleWZyYW1lVmFsdWUga2V5ZnJhbWVWYWx1ZSgwLCAwKTsKLSAgICAgICAg
a2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKGVsZW1lbnRTdHlsZSwga2V5
ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKKyAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShz
dHlsZUZvcktleWZyYW1lKHN0YXRlLCBlbGVtZW50U3R5bGUsIGtleWZyYW1lLCBrZXlmcmFtZVZh
bHVlKSk7CiAKICAgICAgICAgLy8gQWRkIHRoaXMga2V5ZnJhbWUgc3R5bGUgdG8gYWxsIHRoZSBp
bmRpY2F0ZWQga2V5IHRpbWVzCiAgICAgICAgIFZlY3RvcjxmbG9hdD4ga2V5czsKQEAgLTE3MTcs
NyArMTY4Niw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRp
b24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsCiAgICAgICAgICAgICB6ZXJvUGVy
Y2VudEtleWZyYW1lLT5zZXRLZXlUZXh0KCIwJSIpOwogICAgICAgICB9CiAgICAgICAgIEtleWZy
YW1lVmFsdWUga2V5ZnJhbWVWYWx1ZSgwLCAwKTsKLSAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRT
dHlsZShzdHlsZUZvcktleWZyYW1lKGVsZW1lbnRTdHlsZSwgemVyb1BlcmNlbnRLZXlmcmFtZSwg
a2V5ZnJhbWVWYWx1ZSkpOworICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9y
S2V5ZnJhbWUoc3RhdGUsIGVsZW1lbnRTdHlsZSwgemVyb1BlcmNlbnRLZXlmcmFtZSwga2V5ZnJh
bWVWYWx1ZSkpOwogICAgICAgICBsaXN0Lmluc2VydChrZXlmcmFtZVZhbHVlKTsKICAgICB9CiAK
QEAgLTE3MjksNjIgKzE2OTgsNjggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxl
c0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSogZWwKICAgICAgICAg
ICAgIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUtPnNldEtleVRleHQoIjEwMCUiKTsKICAgICAgICAg
fQogICAgICAgICBLZXlmcmFtZVZhbHVlIGtleWZyYW1lVmFsdWUoMSwgMCk7Ci0gICAgICAgIGtl
eWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShlbGVtZW50U3R5bGUsIGh1bmRy
ZWRQZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKKyAgICAgICAga2V5ZnJhbWVWYWx1
ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKHN0YXRlLCBlbGVtZW50U3R5bGUsIGh1bmRyZWRQ
ZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKICAgICAgICAgbGlzdC5pbnNlcnQoa2V5
ZnJhbWVWYWx1ZSk7CiAgICAgfQogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJl
c29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBl
LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7Ci0gICAgQVNTRVJUKG1fcGFyZW50U3R5bGUp
OwogICAgIGlmICghZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbml0RWxlbWVudChlKTsK
KyAgICBTdHlsZVJlc29sdmVTdGF0ZSBzdGF0ZTsKKyAgICBpbml0RWxlbWVudChzdGF0ZSwgZSk7
CisgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShzdGF0ZSwgZSwgcGFyZW50U3R5bGUpOwogCi0gICAg
aW5pdEZvclN0eWxlUmVzb2x2ZShlLCBwYXJlbnRTdHlsZSwgcHNldWRvKTsKLSAgICBtX3N0eWxl
ID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKG1fcGFy
ZW50U3R5bGUpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y3JlYXRlKCk7CisgICAgc3R5bGUtPmluaGVyaXRGcm9tKHN0YXRlLnBhcmVudFN0eWxlKCkpOwor
ICAgIHN0YXRlLnNldFBzZXVkb1N0eWxlKHBzZXVkbyk7CisgICAgc3RhdGUuc2V0U3R5bGUoc3R5
bGUuZ2V0KCkpOwogCiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgdXNlIHBzZXVkby1lbGVtZW50cyBp
biBhbnkgb2Ygb3VyIHF1aXJrL3ByaW50IHVzZXIgYWdlbnQgcnVsZXMsIGRvbid0IHdhc3RlIHRp
bWUgd2Fsa2luZwogICAgIC8vIHRob3NlIHJ1bGVzLgogCiAgICAgLy8gQ2hlY2sgVUEsIHVzZXIg
YW5kIGF1dGhvciBydWxlcy4KKwogICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0OwotICAgIG1h
dGNoVUFSdWxlcyhtYXRjaFJlc3VsdCk7CisgICAgbWF0Y2hVQVJ1bGVzKHN0YXRlLCBtYXRjaFJl
c3VsdCk7CiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpIHsKLSAgICAgICAg
bWF0Y2hVc2VyUnVsZXMobWF0Y2hSZXN1bHQsIGZhbHNlKTsKLSAgICAgICAgbWF0Y2hBdXRob3JS
dWxlcyhtYXRjaFJlc3VsdCwgZmFsc2UpOworICAgICAgICBtYXRjaFVzZXJSdWxlcyhzdGF0ZSwg
bWF0Y2hSZXN1bHQpOworICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHN0YXRlLCBtYXRjaFJlc3Vs
dCk7CiAgICAgfQogCiAgICAgaWYgKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBtX3N0eWxlLT5zZXRTdHlsZVR5cGUocHNl
dWRvKTsKKyAgICBzdHlsZS0+c2V0U3R5bGVUeXBlKHBzZXVkbyk7CiAKLSAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBlKTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
KHN0YXRlLCBtYXRjaFJlc3VsdCwgZSk7CiAKICAgICAvLyBDbGVhbiB1cCBvdXIgc3R5bGUgb2Jq
ZWN0J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIgZml4dXBzKS4K
LSAgICBhZGp1c3RSZW5kZXJTdHlsZShzdHlsZSgpLCBwYXJlbnRTdHlsZSwgMCk7CisgICAgYWRq
dXN0UmVuZGVyU3R5bGUoc3RhdGUsIHN0eWxlLmdldCgpLCBzdGF0ZS5wYXJlbnRTdHlsZSgpLCAw
KTsKIAogICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBz
dHlsZS4KLSAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOworICAgIGxvYWRQZW5kaW5nUmVzb3Vy
Y2VzKHN0YXRlKTsKIAogICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsK
IAogICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgotICAgIHJldHVybiBtX3N0eWxlLnJlbGVh
c2UoKTsKKyAgICByZXR1cm4gc3R5bGUucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKIHsKLSAg
ICBpbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKTsgLy8g
bV9yb290RWxlbWVudFN0eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBkb2N1bWVudCBzdHlsZS4KKyAg
ICBTdHlsZVJlc29sdmVTdGF0ZSBzdGF0ZTsKKyAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKHN0YXRl
LCBkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSk7IC8vIG1fcm9vdEVsZW1lbnRTdHlsZSB3
aWxsIGJlIHNldCB0byB0aGUgZG9jdW1lbnQgc3R5bGUuCiAKLSAgICBtX3N0eWxlID0gUmVuZGVy
U3R5bGU6OmNyZWF0ZSgpOwotICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKG1fcm9vdEVsZW1lbnRT
dHlsZSk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVh
dGUoKTsKKyAgICBzdHlsZS0+aW5oZXJpdEZyb20oc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsK
KyAgICBzdGF0ZS5zZXRFbGVtZW50KGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKTsKKyAg
ICBzdGF0ZS5zZXRTdHlsZShzdHlsZS5nZXQoKSk7CiAKLSAgICBjb25zdCBib29sIGlzTGVmdCA9
IGlzTGVmdFBhZ2UocGFnZUluZGV4KTsKKyAgICBjb25zdCBib29sIGlzTGVmdCA9IGlzTGVmdFBh
Z2Uoc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBwYWdlSW5kZXgpOwogICAgIGNvbnN0IGJvb2wg
aXNGaXJzdCA9IGlzRmlyc3RQYWdlKHBhZ2VJbmRleCk7CiAgICAgY29uc3QgU3RyaW5nIHBhZ2Ug
PSBwYWdlTmFtZShwYWdlSW5kZXgpOwogICAgIApAQCAtMTc5Myw0MiArMTc2OCw0NSBAQCBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJ
bmRleCkKICAgICBtYXRjaFBhZ2VSdWxlcyhyZXN1bHQsIG1fdXNlclN0eWxlLmdldCgpLCBpc0xl
ZnQsIGlzRmlyc3QsIHBhZ2UpOwogICAgIC8vIE9ubHkgY29uc2lkZXIgdGhlIGdsb2JhbCBhdXRo
b3IgUnVsZVNldCBmb3IgQHBhZ2UgcnVsZXMsIGFzIHBlciB0aGUgSFRNTDUgc3BlYy4KICAgICBt
YXRjaFBhZ2VSdWxlcyhyZXN1bHQsIG1fYXV0aG9yU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJz
dCwgcGFnZSk7Ci0gICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOworICAgIHN0YXRlLnNldExpbmVI
ZWlnaHRWYWx1ZSgwKTsKICAgICBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZTsKICNpZiBFTkFC
TEUoQ1NTX1ZBUklBQkxFUykKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVm
aW5pdGlvbnM+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXpl
KCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlh
YmxlRGVmaW5pdGlvbnM+KHN0YXRlLCByZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFBy
b3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CiAjZW5kaWYKLSAgICBhcHBseU1h
dGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHJlc3VsdCwgZmFsc2UsIDAs
IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKKyAg
ICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBy
ZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5o
ZXJpdGVkT25seSk7CiAKICAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgZ28gYWhlYWQg
YW5kIHVwZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRlRm9udCgpOworICAgIHVwZGF0ZUZvbnQoc3Rh
dGUpOwogCiAgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVj
aWRlZCBvbiB0aGUgZm9udC1zaXplLgotICAgIGlmIChtX2xpbmVIZWlnaHRWYWx1ZSkKLSAgICAg
ICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fbGluZUhlaWdodFZhbHVl
KTsKKyAgICBpZiAoc3RhdGUubGluZUhlaWdodFZhbHVlKCkpCisgICAgICAgIGFwcGx5UHJvcGVy
dHkoc3RhdGUsIENTU1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZhbHVlKCkp
OwogCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHJl
c3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhl
cml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVy
dGllcz4oc3RhdGUsIHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5z
aXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKIAogICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3Vy
Y2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygp
OworICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKHN0YXRlKTsKIAogICAgIGRvY3VtZW50KCktPmRp
ZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIAogICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgot
ICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3R5bGUucmVsZWFzZSgp
OwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpkZWZhdWx0U3R5
bGVGb3JFbGVtZW50KCkKIHsKLSAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Cisg
ICAgU3R5bGVSZXNvbHZlU3RhdGUgc3RhdGU7CisgICAgc3RhdGUuc2V0RWxlbWVudChkb2N1bWVu
dCgpLT5kb2N1bWVudEVsZW1lbnQoKSk7CisgICAgc3RhdGUuc2V0U3R5bGUoc3R5bGUuZ2V0KCkp
OwogICAgIC8vIE1ha2Ugc3VyZSBvdXIgZm9udHMgYXJlIGluaXRpYWxpemVkIGlmIHdlIGRvbid0
IGluaGVyaXQgdGhlbSBmcm9tIG91ciBwYXJlbnQgc3R5bGUuCiAgICAgaWYgKFNldHRpbmdzKiBz
ZXR0aW5ncyA9IGRvY3VtZW50U2V0dGluZ3MoKSkgewotICAgICAgICBpbml0aWFsaXplRm9udFN0
eWxlKHNldHRpbmdzKTsKLSAgICAgICAgbV9zdHlsZS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0
b3IoKSk7CisgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc3RhdGUsIHNldHRpbmdzKTsKKyAg
ICAgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogICAgIH0gZWxzZQot
ICAgICAgICBtX3N0eWxlLT5mb250KCkudXBkYXRlKDApOworICAgICAgICBzdHlsZS0+Zm9udCgp
LnVwZGF0ZSgwKTsKIAotICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
c3R5bGUucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29s
dmVyOjpzdHlsZUZvclRleHQoVGV4dCogdGV4dE5vZGUpCkBAIC0xOTIzLDcgKzE5MDEsNyBAQCBz
dGF0aWMgYm9vbCBpc0Rpc3BsYXlGbGV4aWJsZUJveChFRGlzcGxheSBkaXNwbGF5KQogICAgIHJl
dHVybiBkaXNwbGF5ID09IEZMRVggfHwgZGlzcGxheSA9PSBJTkxJTkVfRkxFWDsKIH0KIAotdm9p
ZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVudCAqZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6
YWRqdXN0UmVuZGVyU3R5bGUoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBSZW5kZXJTdHlsZSog
c3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVudCAqZSkKIHsKICAgICBBU1NF
UlQocGFyZW50U3R5bGUpOwogCkBAIC0xOTM1LDcgKzE5MTMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eQogICAgICAgICAvLyBwcm9wZXJ0eS4KICAgICAgICAgLy8gU2l0ZXMgYWxzbyBjb21t
b25seSB1c2UgZGlzcGxheTppbmxpbmUvYmxvY2sgb24gPHRkPnMgYW5kIDx0YWJsZT5zLiBJbiBx
dWlya3MgbW9kZSB3ZSBmb3JjZQogICAgICAgICAvLyB0aGVzZSB0YWdzIHRvIHJldGFpbiB0aGVp
ciBkaXNwbGF5IHR5cGVzLgotICAgICAgICBpZiAoIW1fc2VsZWN0b3JDaGVja2VyLnN0cmljdFBh
cnNpbmcoKSAmJiBlKSB7CisgICAgICAgIGlmIChkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSAm
JiBlKSB7CiAgICAgICAgICAgICBpZiAoZS0+aGFzVGFnTmFtZSh0ZFRhZykpIHsKICAgICAgICAg
ICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShUQUJMRV9DRUxMKTsKICAgICAgICAgICAgICAgICBz
dHlsZS0+c2V0RmxvYXRpbmcoTm9GbG9hdCk7CkBAIC0xOTgyLDcgKzE5NjAsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eQogCiAgICAgICAgIC8vIEFic29sdXRlL2ZpeGVkIHBvc2l0aW9uZWQg
ZWxlbWVudHMsIGZsb2F0aW5nIGVsZW1lbnRzIGFuZCB0aGUgZG9jdW1lbnQgZWxlbWVudCBuZWVk
IGJsb2NrLWxpa2Ugb3V0c2lkZSBkaXNwbGF5LgogICAgICAgICBpZiAoc3R5bGUtPmhhc091dE9m
Rmxvd1Bvc2l0aW9uKCkgfHwgc3R5bGUtPmlzRmxvYXRpbmcoKSB8fCAoZSAmJiBlLT5kb2N1bWVu
dCgpLT5kb2N1bWVudEVsZW1lbnQoKSA9PSBlKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXREaXNw
bGF5KGVxdWl2YWxlbnRCbG9ja0Rpc3BsYXkoc3R5bGUtPmRpc3BsYXkoKSwgc3R5bGUtPmlzRmxv
YXRpbmcoKSwgbV9zZWxlY3RvckNoZWNrZXIuc3RyaWN0UGFyc2luZygpKSk7CisgICAgICAgICAg
ICBzdHlsZS0+c2V0RGlzcGxheShlcXVpdmFsZW50QmxvY2tEaXNwbGF5KHN0eWxlLT5kaXNwbGF5
KCksIHN0eWxlLT5pc0Zsb2F0aW5nKCksICFkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkpOwog
CiAgICAgICAgIC8vIEZJWE1FOiBEb24ndCBzdXBwb3J0IHRoaXMgbXV0YXRpb24gZm9yIHBzZXVk
byBzdHlsZXMgbGlrZSBmaXJzdC1sZXR0ZXIgb3IgZmlyc3QtbGluZSwgc2luY2UgaXQncyBub3Qg
Y29tcGxldGVseQogICAgICAgICAvLyBjbGVhciBob3cgdGhhdCBzaG91bGQgd29yay4KQEAgLTIw
MTIsNyArMTk5MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVu
ZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5CiAKICAgICAgICAgaWYgKGlz
RGlzcGxheUZsZXhpYmxlQm94KHBhcmVudFN0eWxlLT5kaXNwbGF5KCkpKSB7CiAgICAgICAgICAg
ICBzdHlsZS0+c2V0RmxvYXRpbmcoTm9GbG9hdCk7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0RGlz
cGxheShlcXVpdmFsZW50QmxvY2tEaXNwbGF5KHN0eWxlLT5kaXNwbGF5KCksIHN0eWxlLT5pc0Zs
b2F0aW5nKCksIG1fc2VsZWN0b3JDaGVja2VyLnN0cmljdFBhcnNpbmcoKSkpOworICAgICAgICAg
ICAgc3R5bGUtPnNldERpc3BsYXkoZXF1aXZhbGVudEJsb2NrRGlzcGxheShzdHlsZS0+ZGlzcGxh
eSgpLCBzdHlsZS0+aXNGbG9hdGluZygpLCAhZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpKTsK
ICAgICAgICAgfQogCiAjaWYgRU5BQkxFKERJQUxPR19FTEVNRU5UKQpAQCAtMjExNiw3ICsyMDk0
LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSog
c3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHkKIAogICAgIC8vIExldCB0aGUgdGhlbWUgYWxz
byBoYXZlIGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBzdHlsZS4KICAgICBpZiAoc3R5bGUtPmhh
c0FwcGVhcmFuY2UoKSkKLSAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1
c3RTdHlsZSh0aGlzLCBzdHlsZSwgZSwgbV9oYXNVQUFwcGVhcmFuY2UsIG1fYm9yZGVyRGF0YSwg
bV9iYWNrZ3JvdW5kRGF0YSwgbV9iYWNrZ3JvdW5kQ29sb3IpOworICAgICAgICBSZW5kZXJUaGVt
ZTo6ZGVmYXVsdFRoZW1lKCktPmFkanVzdFN0eWxlKHRoaXMsIHN0eWxlLCBlLCBzdGF0ZS5oYXNV
QUFwcGVhcmFuY2UoKSwgc3RhdGUuYm9yZGVyRGF0YSgpLCBzdGF0ZS5iYWNrZ3JvdW5kRGF0YSgp
LCBzdGF0ZS5iYWNrZ3JvdW5kQ29sb3IoKSk7CiAKICAgICAvLyBJZiB3ZSBoYXZlIGZpcnN0LWxl
dHRlciBwc2V1ZG8gc3R5bGUsIGRvIG5vdCBzaGFyZSB0aGlzIHN0eWxlLgogICAgIGlmIChzdHls
ZS0+aGFzUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSKSkKQEAgLTIxOTcsMjcgKzIxNzUsMTcgQEAg
c3RhdGljIHZvaWQgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUp
CiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwogfQog
Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQordm9pZCBTdHlsZVJlc29sdmVyOjp1
cGRhdGVGb250KFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoIW1fZm9udERp
cnR5KQorICAgIGlmICghc3RhdGUuZm9udERpcnR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKTsKLSAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFu
Z2Uoc3R5bGUoKSwgbV9wYXJlbnRTdHlsZSk7Ci0gICAgY2hlY2tGb3Jab29tQ2hhbmdlKHN0eWxl
KCksIG1fcGFyZW50U3R5bGUpOwotICAgIGNoZWNrRm9yT3JpZW50YXRpb25DaGFuZ2Uoc3R5bGUo
KSk7Ci0gICAgbV9zdHlsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7Ci0gICAgbV9m
b250RGlydHkgPSBmYWxzZTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpjYWNoZUJvcmRlckFu
ZEJhY2tncm91bmQoKQotewotICAgIG1faGFzVUFBcHBlYXJhbmNlID0gbV9zdHlsZS0+aGFzQXBw
ZWFyYW5jZSgpOwotICAgIGlmIChtX2hhc1VBQXBwZWFyYW5jZSkgewotICAgICAgICBtX2JvcmRl
ckRhdGEgPSBtX3N0eWxlLT5ib3JkZXIoKTsKLSAgICAgICAgbV9iYWNrZ3JvdW5kRGF0YSA9ICpt
X3N0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAgIG1fYmFja2dyb3VuZENvbG9yID0g
bV9zdHlsZS0+YmFja2dyb3VuZENvbG9yKCk7Ci0gICAgfQorICAgIGNoZWNrRm9yVGV4dFNpemVB
ZGp1c3Qoc3RhdGUuc3R5bGUoKSk7CisgICAgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKHN0
YXRlLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5wYXJlbnRTdHlsZSgpKTsKKyAgICBjaGVja0Zvclpv
b21DaGFuZ2Uoc3RhdGUsIHN0YXRlLnN0eWxlKCksIHN0YXRlLnBhcmVudFN0eWxlKCkpOworICAg
IGNoZWNrRm9yT3JpZW50YXRpb25DaGFuZ2Uoc3RhdGUuc3R5bGUoKSk7CisgICAgc3RhdGUuc3R5
bGUoKS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7CisgICAgc3RhdGUuc2V0Rm9udERp
cnR5KGZhbHNlKTsKIH0KIAogUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6
c3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUp
CkBAIC0yMjMwLDY2ICsyMTk4LDcwIEBAIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IFN0eWxlUmVz
b2x2ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsIFBzCiAgICAgaWYg
KCFlIHx8ICFlLT5kb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSkKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICBtX3NlbGVjdG9yQ2hlY2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tl
cjo6Q29sbGVjdGluZ1J1bGVzKTsKLQotICAgIGluaXRFbGVtZW50KGUpOwotICAgIGluaXRGb3JT
dHlsZVJlc29sdmUoZSwgMCwgcHNldWRvSWQpOworICAgIFN0eWxlUmVzb2x2ZVN0YXRlIHN0YXRl
OworICAgIGluaXRFbGVtZW50KHN0YXRlLCBlKTsKKyAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKHN0
YXRlLCBlKTsKKyAgICBzdGF0ZS5zZXRQc2V1ZG9TdHlsZShwc2V1ZG9JZCk7CisgICAgc3RhdGUu
c2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7CiAKICAgICBNYXRjaFJl
c3VsdCBkdW1teTsKICAgICBpZiAocnVsZXNUb0luY2x1ZGUgJiBVQUFuZFVzZXJDU1NSdWxlcykg
ewogICAgICAgICAvLyBGaXJzdCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB1c2VyIGFnZW50IHNo
ZWV0LgotICAgICAgICBtYXRjaFVBUnVsZXMoZHVtbXkpOworICAgICAgICBtYXRjaFVBUnVsZXMo
c3RhdGUsIGR1bW15KTsKIAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sgdXNlciBzaGVldCBydWxl
cy4KLSAgICAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICAgICAg
bWF0Y2hVc2VyUnVsZXMoZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7Cisg
ICAgICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykgeworICAgICAgICAgICAgc3Rh
dGUuc2V0SW5jbHVkZUVtcHR5UnVsZXMocnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsK
KyAgICAgICAgICAgIG1hdGNoVXNlclJ1bGVzKHN0YXRlLCBkdW1teSk7CisgICAgICAgIH0KICAg
ICB9CiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgKHJ1bGVzVG9JbmNs
dWRlICYgQXV0aG9yQ1NTUnVsZXMpKSB7Ci0gICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSAhKHJ1
bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcyk7Ci0KKyAgICAgICAgc3RhdGUuc2V0
U2FtZU9yaWdpbk9ubHkoIShydWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2luQ1NTUnVsZXMpKTsK
KyAgICAgICAgc3RhdGUuc2V0SW5jbHVkZUVtcHR5UnVsZXMocnVsZXNUb0luY2x1ZGUgJiBFbXB0
eUNTU1J1bGVzKTsKKyAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRo
b3Igc2hlZXRzLgotICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKGR1bW15LCBydWxlc1RvSW5jbHVk
ZSAmIEVtcHR5Q1NTUnVsZXMpOwotCi0gICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSBmYWxzZTsK
KyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhzdGF0ZSwgZHVtbXkpOwogICAgIH0KLQotICAgIG1f
c2VsZWN0b3JDaGVja2VyLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpSZXNvbHZpbmdTdHlsZSk7
Ci0KLSAgICByZXR1cm4gbV9ydWxlTGlzdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHN0YXRlLnJ1
bGVMaXN0KCkucmVsZWFzZSgpOwogfQogCi1pbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpydWxl
TWF0Y2hlcyhjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNj
b3BlKQoraW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6cnVsZU1hdGNoZXMoU3R5bGVSZXNvbHZl
U3RhdGUmIHN0YXRlLCBjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENvbnRhaW5lck5v
ZGUqIHNjb3BlLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbykKIHsKLSAgICBtX2R5bmFtaWNQc2V1
ZG8gPSBOT1BTRVVETzsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGUuZWxlbWVudCgpOwog
CiAgICAgaWYgKHJ1bGVEYXRhLmhhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigpKSB7CiAgICAgICAg
IC8vIFdlIGtub3cgdGhpcyBzZWxlY3RvciBkb2VzIG5vdCBpbmNsdWRlIGFueSBwc2V1ZG8gZWxl
bWVudHMuCi0gICAgICAgIGlmIChtX3BzZXVkb1N0eWxlICE9IE5PUFNFVURPKQorICAgICAgICBp
ZiAoc3RhdGUucHNldWRvU3R5bGUoKSAhPSBOT1BTRVVETykKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgLy8gV2Uga25vdyBhIHN1ZmZpY2llbnRseSBzaW1wbGUgc2luZ2xlIHBh
cnQgc2VsZWN0b3IgbWF0Y2hlcyBzaW1wbHkgYmVjYXVzZSB3ZSBmb3VuZCBpdCBmcm9tIHRoZSBy
dWxlIGhhc2guCiAgICAgICAgIC8vIFRoaXMgaXMgbGltaXRlZCB0byBIVE1MIG9ubHkgc28gd2Ug
ZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgbmFtZXNwYWNlLgotICAgICAgICBpZiAocnVsZURhdGEu
aGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goKSAmJiBtX2Vs
ZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBpZiAocnVsZURhdGEuaGFzUmlnaHRt
b3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goKSAmJiBlbGVtZW50LT5pc0hU
TUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGlmICghcnVsZURhdGEuaGFzTXVsdGlwYXJ0U2Vs
ZWN0b3IoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAg
ICBpZiAocnVsZURhdGEuc2VsZWN0b3IoKS0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6VGFnICYm
ICFTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMobV9lbGVtZW50LCBydWxlRGF0YS5zZWxlY3Rv
cigpLT50YWdRTmFtZSgpKSkKKyAgICAgICAgaWYgKHJ1bGVEYXRhLnNlbGVjdG9yKCktPm1fbWF0
Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZyAmJiAhU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKGVs
ZW1lbnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCktPnRhZ1FOYW1lKCkpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpZiAoIVNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrUmlnaHRt
b3N0QXR0cmlidXRlU2VsZWN0b3IobV9lbGVtZW50LCBydWxlRGF0YS5zZWxlY3RvcigpKSkKKyAg
ICAgICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdEF0dHJpYnV0ZVNl
bGVjdG9yKGVsZW1lbnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCkpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICByZXR1cm4gbV9zZWxlY3RvckNoZWNrZXIuZmFzdENoZWNrKHJ1bGVE
YXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCk7CisKKyAgICAgICAgcmV0dXJuIFNlbGVjdG9yQ2hl
Y2tlcjo6ZmFzdENoZWNrKHJ1bGVEYXRhLnNlbGVjdG9yKCksIGVsZW1lbnQpOwogICAgIH0KIAog
ICAgIC8vIFNsb3cgcGF0aC4KLSAgICBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdD
b250ZXh0IGNvbnRleHQocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50LCBTZWxlY3RvckNo
ZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQpOwotICAgIGNvbnRleHQuZWxlbWVudFN0eWxlID0g
c3R5bGUoKTsKLSAgICBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA9IG1fcGFyZW50Tm9kZSA/
IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDA7CisgICAgU2VsZWN0b3JDaGVja2VyOjpT
ZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVEYXRhLnNlbGVjdG9yKCksIGVsZW1l
bnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRW5hYmxlZCk7CisgICAgY29udGV4dC5l
bGVtZW50U3R5bGUgPSBzdGF0ZS5zdHlsZSgpOworICAgIGNvbnRleHQuZWxlbWVudFBhcmVudFN0
eWxlID0gMDsKICAgICBjb250ZXh0LnNjb3BlID0gc2NvcGU7Ci0gICAgY29udGV4dC5wc2V1ZG9T
dHlsZSA9IG1fcHNldWRvU3R5bGU7Ci0gICAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBtYXRjaCA9
IG1fc2VsZWN0b3JDaGVja2VyLm1hdGNoKGNvbnRleHQsIG1fZHluYW1pY1BzZXVkbywgRE9NU2li
bGluZ1RyYXZlcnNhbFN0cmF0ZWd5KCkpOworICAgIGNvbnRleHQucHNldWRvU3R5bGUgPSBzdGF0
ZS5wc2V1ZG9TdHlsZSgpOworCisgICAgLy8gb24tc3RhY2sKKyAgICBTZWxlY3RvckNoZWNrZXIg
c2VsZWN0b3JDaGVja2VyKGRvY3VtZW50KCkpOworICAgIHNlbGVjdG9yQ2hlY2tlci5zZXRNb2Rl
KHN0YXRlLm1vZGUoKSk7CisgICAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBtYXRjaCA9IHNlbGVj
dG9yQ2hlY2tlci5tYXRjaChjb250ZXh0LCBkeW5hbWljUHNldWRvLCBET01TaWJsaW5nVHJhdmVy
c2FsU3RyYXRlZ3koKSk7CiAgICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0
b3JNYXRjaGVzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fcHNldWRvU3R5bGUg
IT0gTk9QU0VVRE8gJiYgbV9wc2V1ZG9TdHlsZSAhPSBtX2R5bmFtaWNQc2V1ZG8pCisgICAgaWYg
KHN0YXRlLnBzZXVkb1N0eWxlKCkgIT0gTk9QU0VVRE8gJiYgc3RhdGUucHNldWRvU3R5bGUoKSAh
PSBkeW5hbWljUHNldWRvKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7
CiB9CkBAIC0yMjk5LDEwICsyMjcxLDkgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lv
blNlbGVjdG9yKENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3RvciwgRWxlbWVudCogcmUKICAgICBp
ZiAoIXJlZ2lvblNlbGVjdG9yIHx8ICFyZWdpb25FbGVtZW50KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBtX3BzZXVkb1N0eWxlID0gTk9QU0VVRE87Ci0KKyAgICBTZWxlY3RvckNoZWNr
ZXIgc2VsZWN0b3JDaGVja2VyKGRvY3VtZW50KCkpOwogICAgIGZvciAoQ1NTU2VsZWN0b3IqIHMg
PSByZWdpb25TZWxlY3RvcjsgczsgcyA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzKSkKLSAgICAg
ICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1hdGNoZXMocywgcmVnaW9uRWxlbWVudCkpCisgICAg
ICAgIGlmIChzZWxlY3RvckNoZWNrZXIubWF0Y2hlcyhzLCByZWdpb25FbGVtZW50KSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjMyMiw5ICsyMjkz
LDkgQEAgTGVuZ3RoIFN0eWxlUmVzb2x2ZXI6OmNvbnZlcnRUb0Zsb2F0TGVuZ3RoKENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgUmUKIH0KIAogdGVtcGxhdGUgPFN0eWxlUmVzb2x2
ZXI6OlN0eWxlQXBwbGljYXRpb25QYXNzIHBhc3M+Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUq
IHJ1bGUsIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJvcGVydHlXaGl0
ZWxpc3RUeXBlIHByb3BlcnR5V2hpdGVsaXN0VHlwZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0aWVzKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgY29uc3QgU3R5bGVQcm9wZXJ0
eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiBydWxlLCBib29sIGlzSW1wb3J0YW50LCBib29s
IGluaGVyaXRlZE9ubHksIFByb3BlcnR5V2hpdGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5
cGUpCiB7Ci0gICAgQVNTRVJUKChwcm9wZXJ0eVdoaXRlbGlzdFR5cGUgIT0gUHJvcGVydHlXaGl0
ZWxpc3RSZWdpb24pIHx8IG1fcmVnaW9uRm9yU3R5bGluZyk7CisgICAgQVNTRVJUKChwcm9wZXJ0
eVdoaXRlbGlzdFR5cGUgIT0gUHJvcGVydHlXaGl0ZWxpc3RSZWdpb24pIHx8IHN0YXRlLnJlZ2lv
bkZvclN0eWxpbmcoKSk7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tp
ZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFByb2Nlc3NSdWxlKGRvY3VtZW50KCks
IHJ1bGUsIHRoaXMpOwogCiAgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IHByb3BlcnRpZXMt
PnByb3BlcnR5Q291bnQoKTsKQEAgLTIzNTIsNyArMjMyMyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0
eWxlUnVsCiAgICAgICAgIGNhc2UgVmFyaWFibGVEZWZpbml0aW9uczoKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKENTU1Byb3BlcnR5VmFyaWFibGUgPCBmaXJzdENTU1Byb3BlcnR5LCBDU1Nf
dmFyaWFibGVfaXNfYmVmb3JlX2ZpcnN0X3Byb3BlcnR5KTsKICAgICAgICAgICAgIGlmIChwcm9w
ZXJ0eSA9PSBDU1NQcm9wZXJ0eVZhcmlhYmxlKQotICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVy
dHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGFwcGx5
UHJvcGVydHkoc3RhdGUsIGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogI2VuZGlmCiAgICAgICAgIGNhc2UgSGlnaFByaW9yaXR5UHJvcGVydGllczoK
QEAgLTIzNjUsNDIgKzIzMzYsNDMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnRp
ZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWwKICNlbmRpZgog
ICAgICAgICAgICAgLy8gZ2l2ZSBzcGVjaWFsIHByaW9yaXR5IHRvIGZvbnQteHh4LCBjb2xvciBw
cm9wZXJ0aWVzLCBldGMKICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA8IENTU1Byb3BlcnR5TGlu
ZUhlaWdodCkKLSAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KGN1cnJlbnQuaWQoKSwgY3Vy
cmVudC52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBjdXJy
ZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CiAgICAgICAgICAgICAvLyB3ZSBhcHBseSBsaW5l
LWhlaWdodCBsYXRlcgogICAgICAgICAgICAgZWxzZSBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVy
dHlMaW5lSGVpZ2h0KQotICAgICAgICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gY3VycmVu
dC52YWx1ZSgpOworICAgICAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZShjdXJy
ZW50LnZhbHVlKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG93UHJpb3Jp
dHlQcm9wZXJ0aWVzOgogICAgICAgICAgICAgaWYgKHByb3BlcnR5ID4gQ1NTUHJvcGVydHlMaW5l
SGVpZ2h0KQotICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJy
ZW50LnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIGN1cnJl
bnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKICAgICAgICAgfQogICAgIH0KICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZFByb2Nlc3NSdWxlKGNvb2tpZSk7CiB9CiAKIHRlbXBsYXRl
IDxTdHlsZVJlc29sdmVyOjpTdHlsZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgotdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJl
c3VsdCwgYm9vbCBpc0ltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9v
bCBpbmhlcml0ZWRPbmx5KQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0
aWVzKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVz
dWx0LCBib29sIGlzSW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29s
IGluaGVyaXRlZE9ubHkpCiB7CiAgICAgaWYgKHN0YXJ0SW5kZXggPT0gLTEpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChtX3N0eWxlLT5pbnNpZGVMaW5rKCkgIT0gTm90SW5zaWRlTGluaykg
eworICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5pbnNpZGVMaW5rKCkgIT0gTm90SW5zaWRlTGluaykg
ewogICAgICAgICBmb3IgKGludCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgKytpKSB7
CiAgICAgICAgICAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hlZFByb3BlcnRpZXMg
PSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllc1tpXTsKICAgICAgICAgICAgIHVuc2lnbmVk
IGxpbmtNYXRjaFR5cGUgPSBtYXRjaGVkUHJvcGVydGllcy5saW5rTWF0Y2hUeXBlOwogICAgICAg
ICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2VyIHRvIHBhc3MgdGhlc2UgYXMgYXJndW1l
bnRzIGJ1dCB0aGF0IHJlcXVpcmVzIGNoYW5nZXMgaW4gbWFueSBwbGFjZXMuCi0gICAgICAgICAg
ICBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IGxpbmtNYXRjaFR5cGUgJiBTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoTGluazsKLSAgICAgICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRl
ZExpbmtTdHlsZSA9IGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRl
ZDsKKyAgICAgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZShsaW5r
TWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmspOworICAgICAgICAgICAgc3Rh
dGUuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShsaW5rTWF0Y2hUeXBlICYgU2Vs
ZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQpOwogCi0gICAgICAgICAgICBhcHBseVByb3BlcnRp
ZXM8cGFzcz4obWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQu
bWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFudCwgaW5oZXJpdGVkT25seSwgc3RhdGljX2Nhc3Q8
UHJvcGVydHlXaGl0ZWxpc3RUeXBlPihtYXRjaGVkUHJvcGVydGllcy53aGl0ZWxpc3RUeXBlKSk7
CisgICAgICAgICAgICBhcHBseVByb3BlcnRpZXM8cGFzcz4oc3RhdGUsIG1hdGNoZWRQcm9wZXJ0
aWVzLnByb3BlcnRpZXMuZ2V0KCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRSdWxlc1tpXSwgaXNJbXBv
cnRhbnQsIGluaGVyaXRlZE9ubHksIHN0YXRpY19jYXN0PFByb3BlcnR5V2hpdGVsaXN0VHlwZT4o
bWF0Y2hlZFByb3BlcnRpZXMud2hpdGVsaXN0VHlwZSkpOwogICAgICAgICB9Ci0gICAgICAgIG1f
YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlID0gdHJ1ZTsKLSAgICAgICAgbV9hcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlID0gZmFsc2U7CisgICAgICAgIC8vIG5lZWQgdG8gcmV2ZXJ0
PyBJIHRoaW5rLCB3ZSBkb24ndCBuZWVkLi4uCisgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVy
dHlUb1JlZ3VsYXJTdHlsZSh0cnVlKTsKKyAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRv
VmlzaXRlZExpbmtTdHlsZShmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgZm9y
IChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewogICAgICAgICBjb25z
dCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hlZFByb3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRj
aGVkUHJvcGVydGllc1tpXTsKLSAgICAgICAgYXBwbHlQcm9wZXJ0aWVzPHBhc3M+KG1hdGNoZWRQ
cm9wZXJ0aWVzLnByb3BlcnRpZXMuZ2V0KCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRSdWxlc1tpXSwg
aXNJbXBvcnRhbnQsIGluaGVyaXRlZE9ubHksIHN0YXRpY19jYXN0PFByb3BlcnR5V2hpdGVsaXN0
VHlwZT4obWF0Y2hlZFByb3BlcnRpZXMud2hpdGVsaXN0VHlwZSkpOworICAgICAgICBhcHBseVBy
b3BlcnRpZXM8cGFzcz4oc3RhdGUsIG1hdGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMuZ2V0KCks
IG1hdGNoUmVzdWx0Lm1hdGNoZWRSdWxlc1tpXSwgaXNJbXBvcnRhbnQsIGluaGVyaXRlZE9ubHks
IHN0YXRpY19jYXN0PFByb3BlcnR5V2hpdGVsaXN0VHlwZT4obWF0Y2hlZFByb3BlcnRpZXMud2hp
dGVsaXN0VHlwZSkpOwogICAgIH0KIH0KIApAQCAtMjQ5OSw5ICsyNDcxLDExIEBAIHN0YXRpYyBi
b29sIGlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKGNvbnN0IEVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IFJlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQs
IGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hl
ZFByb3BlcnRpZXMoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBjb25zdCBNYXRjaFJlc3VsdCYg
bWF0Y2hSZXN1bHQsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKGVsZW1l
bnQpOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHN0YXRlLnN0eWxlKCk7CisgICAgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gc3RhdGUucGFyZW50U3R5bGUoKTsKICAgICB1bnNpZ25lZCBj
YWNoZUhhc2ggPSBtYXRjaFJlc3VsdC5pc0NhY2hlYWJsZSA/IGNvbXB1dGVNYXRjaGVkUHJvcGVy
dGllc0hhc2gobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuZGF0YSgpLCBtYXRjaFJlc3Vs
dC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkpIDogMDsKICAgICBib29sIGFwcGx5SW5oZXJpdGVk
T25seSA9IGZhbHNlOwogICAgIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKiBjYWNo
ZUl0ZW0gPSAwOwpAQCAtMjUwOSwxNSArMjQ4MywxNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25z
dAogICAgICAgICAvLyBXZSBjYW4gYnVpbGQgdXAgdGhlIHN0eWxlIGJ5IGNvcHlpbmcgbm9uLWlu
aGVyaXRlZCBwcm9wZXJ0aWVzIGZyb20gYW4gZWFybGllciBzdHlsZSBvYmplY3QgYnVpbHQgdXNp
bmcgdGhlIHNhbWUgZXhhY3QKICAgICAgICAgLy8gc3R5bGUgZGVjbGFyYXRpb25zLiBXZSB0aGVu
IG9ubHkgbmVlZCB0byBhcHBseSB0aGUgaW5oZXJpdGVkIHByb3BlcnRpZXMsIGlmIGFueSwgYXMg
dGhlaXIgdmFsdWVzIGNhbiBkZXBlbmQgb24gdGhlIAogICAgICAgICAvLyBlbGVtZW50IGNvbnRl
eHQuIFRoaXMgaXMgZmFzdCBhbmQgc2F2ZXMgbWVtb3J5IGJ5IHJldXNpbmcgdGhlIHN0eWxlIGRh
dGEgc3RydWN0dXJlcy4KLSAgICAgICAgbV9zdHlsZS0+Y29weU5vbkluaGVyaXRlZEZyb20oY2Fj
aGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7Ci0gICAgICAgIGlmIChtX3BhcmVudFN0eWxlLT5p
bmhlcml0ZWREYXRhU2hhcmVkKGNhY2hlSXRlbS0+cGFyZW50UmVuZGVyU3R5bGUuZ2V0KCkpICYm
ICFpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkpIHsKLSAgICAgICAgICAgIEVJbnNpZGVMaW5r
IGxpbmtTdGF0dXMgPSBtX3N0eWxlLT5pbnNpZGVMaW5rKCk7CisgICAgICAgIHN0eWxlLT5jb3B5
Tm9uSW5oZXJpdGVkRnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKKyAgICAgICAg
Ly8gb3J6CisgICAgICAgIGlmIChwYXJlbnRTdHlsZS0+aW5oZXJpdGVkRGF0YVNoYXJlZChjYWNo
ZUl0ZW0tPnBhcmVudFJlbmRlclN0eWxlLmdldCgpKSAmJiAhaXNBdFNoYWRvd0JvdW5kYXJ5KGVs
ZW1lbnQpKSB7CisgICAgICAgICAgICBFSW5zaWRlTGluayBsaW5rU3RhdHVzID0gc3R5bGUtPmlu
c2lkZUxpbmsoKTsKICAgICAgICAgICAgIC8vIElmIHRoZSBjYWNoZSBpdGVtIHBhcmVudCBzdHls
ZSBoYXMgaWRlbnRpY2FsIGluaGVyaXRlZCBwcm9wZXJ0aWVzIHRvIHRoZSBjdXJyZW50IHBhcmVu
dCBzdHlsZSB0aGVuIHRoZQogICAgICAgICAgICAgLy8gcmVzdWx0aW5nIHN0eWxlIHdpbGwgYmUg
aWRlbnRpY2FsIHRvby4gV2UgY29weSB0aGUgaW5oZXJpdGVkIHByb3BlcnRpZXMgb3ZlciBmcm9t
IHRoZSBjYWNoZSBhbmQgYXJlIGRvbmUuCi0gICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0RnJv
bShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIHN0eWxlLT5pbmhl
cml0RnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKIAogICAgICAgICAgICAgLy8g
VW5mb3J0dW5hdGVseSB0aGUgbGluayBzdGF0dXMgaXMgdHJlYXRlZCBsaWtlIGFuIGluaGVyaXRl
ZCBwcm9wZXJ0eS4gV2UgbmVlZCB0byBleHBsaWNpdGx5IHJlc3RvcmUgaXQuCi0gICAgICAgICAg
ICBtX3N0eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0dXMpOworICAgICAgICAgICAgc3R5bGUt
PnNldEluc2lkZUxpbmsobGlua1N0YXR1cyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5ID0gdHJ1ZTsgCkBAIC0yNTI1LDYwICsyNTAw
LDYwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBN
YXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAKICNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxF
UykKICAgICAvLyBGaXJzdCBhcHBseSBhbGwgdmFyaWFibGUgZGVmaW5pdGlvbnMsIGFzIHRoZXkg
bWF5IGJlIHVzZWQgZHVyaW5nIGFwcGxpY2F0aW9uIG9mIGxhdGVyIHByb3BlcnRpZXMuCi0gICAg
YXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihtYXRjaFJlc3VsdCwg
ZmFsc2UsIDAsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5
SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmlu
aXRpb25zPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9y
UnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9u
bHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4obWF0
Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJl
c3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5
TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4obWF0Y2hSZXN1bHQsIHRydWUs
IG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RV
QVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxW
YXJpYWJsZURlZmluaXRpb25zPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIGZhbHNlLCAwLCBtYXRjaFJl
c3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOwor
ICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4oc3RhdGUsIG1h
dGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRj
aFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAg
YXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihzdGF0ZSwgbWF0Y2hS
ZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0
Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0
cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5s
YXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwogI2VuZGlmCiAKICAgICAvLyBOb3cgd2Ug
aGF2ZSBhbGwgb2YgdGhlIG1hdGNoZWQgcnVsZXMgaW4gdGhlIGFwcHJvcHJpYXRlIG9yZGVyLiBX
YWxrIHRoZSBydWxlcyBhbmQgYXBwbHkKICAgICAvLyBoaWdoLXByaW9yaXR5IHByb3BlcnRpZXMg
Zmlyc3QsIGkuZS4sIHRob3NlIHByb3BlcnRpZXMgdGhhdCBvdGhlciBwcm9wZXJ0aWVzIGRlcGVu
ZCBvbi4KICAgICAvLyBUaGUgb3JkZXIgaXMgKDEpIGhpZ2gtcHJpb3JpdHkgbm90IGltcG9ydGFu
dCwgKDIpIGhpZ2gtcHJpb3JpdHkgaW1wb3J0YW50LCAoMykgbm9ybWFsIG5vdCBpbXBvcnRhbnQK
ICAgICAvLyBhbmQgKDQpIG5vcm1hbCBpbXBvcnRhbnQuCi0gICAgbV9saW5lSGVpZ2h0VmFsdWUg
PSAwOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4o
bWF0Y2hSZXN1bHQsIGZhbHNlLCAwLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXpl
KCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8
SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJh
bmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlv
cml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmly
c3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0
ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRp
ZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1h
dGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotCi0gICAg
aWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCkg
IT0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKSB7Ci0gICAgICAgIG1fZm9udERpcnR5ID0gdHJ1
ZTsKKyAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CisgICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIGZhbHNl
LCAwLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVy
aXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVy
dGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RB
dXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJp
dGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0
aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVz
ZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9u
bHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4o
c3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUs
IG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworCisg
ICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29t
KCkgIT0gc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSkgeworICAgICAgICBzdGF0ZS5zZXRGb250RGly
dHkodHJ1ZSk7CiAgICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwogICAgIH0KIAog
ICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IG5v
dy4KLSAgICB1cGRhdGVGb250KCk7CisgICAgdXBkYXRlRm9udChzdGF0ZSk7CiAKICAgICAvLyBM
aW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250
LXNpemUuCi0gICAgaWYgKG1fbGluZUhlaWdodFZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOworICAgIGlmIChzdGF0
ZS5saW5lSGVpZ2h0VmFsdWUoKSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJv
cGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7CiAKICAgICAvLyBNYW55
IHByb3BlcnRpZXMgZGVwZW5kIG9uIHRoZSBmb250LiBJZiBpdCBjaGFuZ2VzIHdlIGp1c3QgYXBw
bHkgYWxsIHByb3BlcnRpZXMuCi0gICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRl
clN0eWxlLT5mb250RGVzY3JpcHRpb24oKSAhPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKSkK
KyAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpICE9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKSkKICAgICAgICAgYXBwbHlJbmhlcml0
ZWRPbmx5ID0gZmFsc2U7CiAKICAgICAvLyBOb3cgZG8gdGhlIG5vcm1hbCBwcmlvcml0eSBVQSBw
cm9wZXJ0aWVzLgotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0
aWVzPihtYXRjaFJlc3VsdCwgZmFsc2UsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwg
bWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAg
YXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRj
aFJlc3VsdCwgZmFsc2UsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1
bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAgICAgCiAgICAgLy8g
Q2FjaGUgb3VyIGJvcmRlciBhbmQgYmFja2dyb3VuZCBzbyB0aGF0IHdlIGNhbiBleGFtaW5lIHRo
ZW0gbGF0ZXIuCi0gICAgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CisgICAgc3RhdGUuY2Fj
aGVCb3JkZXJBbmRCYWNrZ3JvdW5kKHN0YXRlLnN0eWxlKCkpOwogICAgIAogICAgIC8vIE5vdyBk
byB0aGUgYXV0aG9yIGFuZCB1c2VyIG5vcm1hbCBwcmlvcml0eSBwcm9wZXJ0aWVzIGFuZCBhbGwg
dGhlICFpbXBvcnRhbnQgcHJvcGVydGllcy4KLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExv
d1ByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIGZhbHNlLCBtYXRjaFJlc3VsdC5yYW5n
ZXMubGFzdFVBUnVsZSArIDEsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAt
IDEsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQ
cmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMu
Zmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5
SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVBy
b3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2Vy
UnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5
KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0
Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1
bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRj
aGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwg
ZmFsc2UsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlICsgMSwgbWF0Y2hSZXN1bHQubWF0
Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVz
dWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlN
YXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJlc3Vs
dCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJh
bmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVk
UHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgdHJ1
ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFz
dFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgIAogICAgIC8vIFN0YXJ0IGxvYWRpbmcg
cmVzb3VyY2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ1Jlc291
cmNlcygpOworICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKHN0YXRlKTsKICAgICAKLSAgICBBU1NF
UlQoIW1fZm9udERpcnR5KTsKKyAgICBBU1NFUlQoIXN0YXRlLmZvbnREaXJ0eSgpKTsKICAgICAK
ICAgICBpZiAoY2FjaGVJdGVtIHx8ICFjYWNoZUhhc2gpCiAgICAgICAgIHJldHVybjsKLSAgICBp
ZiAoIWlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKG1fZWxlbWVudCwgbV9zdHls
ZS5nZXQoKSwgbV9wYXJlbnRTdHlsZSkpCisgICAgaWYgKCFpc0NhY2hlYWJsZUluTWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZShlbGVtZW50LCBzdHlsZSwgcGFyZW50U3R5bGUpKQogICAgICAgICByZXR1
cm47Ci0gICAgYWRkVG9NYXRjaGVkUHJvcGVydGllc0NhY2hlKG1fc3R5bGUuZ2V0KCksIG1fcGFy
ZW50U3R5bGUsIGNhY2hlSGFzaCwgbWF0Y2hSZXN1bHQpOworICAgIGFkZFRvTWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZShzdHlsZSwgcGFyZW50U3R5bGUsIGNhY2hlSGFzaCwgbWF0Y2hSZXN1bHQpOwog
fQogCiBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVBhZ2VSdWxlcyhjb25zdCBTdHlsZVJ1bGVQ
YWdlKiByMSwgY29uc3QgU3R5bGVSdWxlUGFnZSogcjIpCkBAIC0yNjQwLDEwICsyNjE1LDEwIEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hQYWdlUnVsZXNGb3JMaXN0KFZlY3RvcjxTdHlsZVJ1
bGVQYWdlKj4mIG1hdGNoZWRSdWxlcywKICAgICB9CiB9CiAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6
aXNMZWZ0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdAorYm9vbCBTdHlsZVJlc29sdmVyOjppc0xl
ZnRQYWdlKFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlLCBpbnQgcGFnZUluZGV4KSBjb25z
dAogewogICAgIGJvb2wgaXNGaXJzdFBhZ2VMZWZ0ID0gZmFsc2U7Ci0gICAgaWYgKCFtX3Jvb3RF
bGVtZW50U3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAgICBpZiAoIXJvb3RFbGVt
ZW50U3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgaXNGaXJzdFBhZ2VM
ZWZ0ID0gdHJ1ZTsKIAogICAgIHJldHVybiAocGFnZUluZGV4ICsgKGlzRmlyc3RQYWdlTGVmdCA/
IDEgOiAwKSkgJSAyOwpAQCAtMjczOSwxOCArMjcxNCwzMiBAQCBDU1NTdHlsZVJ1bGUqIFN0eWxl
UmVzb2x2ZXI6OmVuc3VyZUZ1bGxDU1NPTVdyYXBwZXJGb3JJbnNwZWN0b3IoU3R5bGVSdWxlKiBy
dWxlKQogICAgIHJldHVybiBtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLmdldChydWxlKS5n
ZXQoKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9TdHlsZShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSkKK3ZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVdpdGhWYWx1ZUNoZWNraW5nKFN0eWxlUmVzb2x2
ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogewotICAg
IGluaXRFbGVtZW50KDApOwotICAgIGluaXRGb3JTdHlsZVJlc29sdmUoMCwgc3R5bGUpOwotICAg
IG1fc3R5bGUgPSBzdHlsZTsKLSAgICBhcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoaWQsIHZh
bHVlKTsKKyAgICBpZiAodmFsdWUpCisgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIGlkLCB2
YWx1ZSk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0
eWxlKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlGb250UHJvcGVydHlUb1N0eWxlKFJlbmRlclN0eWxlKiB0YXJnZXQsIGNvbnN0IFN0
eWxlUHJvcGVydHlTZXQqIHJlZmVyZW5jZSkKIHsKLSAgICBpZiAodmFsdWUpCi0gICAgICAgIGFw
cGx5UHJvcGVydHkoaWQsIHZhbHVlKTsKKyAgICBTdHlsZVJlc29sdmVTdGF0ZSBzdGF0ZTsKKyAg
ICBpbml0RWxlbWVudChzdGF0ZSwgMCk7CisgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShzdGF0ZSwg
MCwgdGFyZ2V0KTsKKyAgICBzdGF0ZS5zZXRFbGVtZW50KGRvY3VtZW50KCktPmRvY3VtZW50RWxl
bWVudCgpKTsKKyAgICBzdGF0ZS5zZXRTdHlsZSh0YXJnZXQpOworCisgICAgYXBwbHlQcm9wZXJ0
eVdpdGhWYWx1ZUNoZWNraW5nKHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIHJlZmVyZW5j
ZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpLmdldCgpKTsKKyAg
ICBhcHBseVByb3BlcnR5V2l0aFZhbHVlQ2hlY2tpbmcoc3RhdGUsIENTU1Byb3BlcnR5Rm9udFN0
eWxlLCByZWZlcmVuY2UtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUp
LmdldCgpKTsKKyAgICBhcHBseVByb3BlcnR5V2l0aFZhbHVlQ2hlY2tpbmcoc3RhdGUsIENTU1By
b3BlcnR5Rm9udFZhcmlhbnQsIHJlZmVyZW5jZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9w
ZXJ0eUZvbnRWYXJpYW50KS5nZXQoKSk7CisgICAgYXBwbHlQcm9wZXJ0eVdpdGhWYWx1ZUNoZWNr
aW5nKHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIHJlZmVyZW5jZS0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpLmdldCgpKTsKKworICAgIC8vIEFzIGRlc2Ny
aWJlZCBpbiBCVUc2NjI5MSwgc2V0dGluZyBmb250LXNpemUgYW5kIGxpbmUtaGVpZ2h0IG9uIGEg
Zm9udCBtYXkgZW50YWlsIGEgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhEb3VibGUg
Y2FsbCwKKyAgICAvLyB3aGljaCBhc3N1bWVzIHRoZSBmb250TWV0cmljcyBhcmUgYXZhaWxhYmxl
IGZvciB0aGUgYWZmZWN0ZWQgZm9udCwgb3RoZXJ3aXNlIGEgY3Jhc2ggb2NjdXJzIChzZWUgaHR0
cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvOTYxMjIpLgorICAgIC8vIFRoZSB1cGRhdGVG
b250KCkgY2FsbHMgYmVsb3cgdXBkYXRlIHRoZSBmb250TWV0cmljcyBhbmQgZW5zdXJlIHRoZSBw
cm9wZXIgc2V0dGluZyBvZiBmb250LXNpemUgYW5kIGxpbmUtaGVpZ2h0LgorICAgIHVwZGF0ZUZv
bnQoc3RhdGUpOworICAgIGFwcGx5UHJvcGVydHlXaXRoVmFsdWVDaGVja2luZyhzdGF0ZSwgQ1NT
UHJvcGVydHlGb250U2l6ZSwgcmVmZXJlbmNlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3Bl
cnR5Rm9udFNpemUpLmdldCgpKTsKKyAgICB1cGRhdGVGb250KHN0YXRlKTsKKyAgICBhcHBseVBy
b3BlcnR5V2l0aFZhbHVlQ2hlY2tpbmcoc3RhdGUsIENTU1Byb3BlcnR5TGluZUhlaWdodCwgcmVm
ZXJlbmNlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5TGluZUhlaWdodCkuZ2V0KCkp
OwogfQogCiBpbmxpbmUgYm9vbCBpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkKQpAQCAtMjg0NSwyMCArMjgzNCw3IEBAIGlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6
OmlzVmFsaWRDdWVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogI2VuZGlmCi0vLyBTVkcgaGFuZGxlcyB6b29taW5nIGluIGEgZGlmZmVyZW50IHdh
eSBjb21wYXJlZCB0byBDU1MuIFRoZSB3aG9sZSBkb2N1bWVudCBpcyBzY2FsZWQgaW5zdGVhZAot
Ly8gb2YgZWFjaCBpbmRpdmlkdWFsIGxlbmd0aCB2YWx1ZSBpbiB0aGUgcmVuZGVyIHN0eWxlIC8g
dHJlZS4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGgqKCkKLS8vIG11bHRpcGxpZXMg
ZWFjaCByZXNvbHZlZCBsZW5ndGggd2l0aCB0aGUgem9vbSBtdWx0aXBsaWVyIC0gc28gZm9yIFNW
RyB3ZSBuZWVkIHRvIGRpc2FibGUgdGhhdC4KLS8vIFRob3VnaCBhbGwgQ1NTIHZhbHVlcyB0aGF0
IGNhbiBiZSBhcHBsaWVkIHRvIG91dGVybW9zdCA8c3ZnPiBlbGVtZW50cyAod2lkdGgvaGVpZ2h0
L2JvcmRlci9wYWRkaW5nLi4uKQotLy8gbmVlZCB0byByZXNwZWN0IHRoZSBzY2FsaW5nLiBSZW5k
ZXJCb3ggKHRoZSBwYXJlbnQgY2xhc3Mgb2YgUmVuZGVyU1ZHUm9vdCkgZ3JhYnMgdmFsdWVzIGxp
a2UKLS8vIHdpZHRoL2hlaWdodC9ib3JkZXIvcGFkZGluZy8uLi4gZnJvbSB0aGUgUmVuZGVyU3R5
bGUgLT4gZm9yIFNWRyB0aGVzZSB2YWx1ZXMgd291bGQgbmV2ZXIgc2NhbGUsCi0vLyBpZiB3ZSdk
IHBhc3MgYSAxLjAgem9vbSBmYWN0b3IgZXZlcnlod2VyZS4gU28gd2Ugb25seSBwYXNzIGEgem9v
bSBmYWN0b3Igb2YgMS4wIGZvciBzcGVjaWZpYwotLy8gcHJvcGVydGllcyB0aGF0IGFyZSBOT1Qg
YWxsb3dlZCB0byBzY2FsZSB3aXRoaW4gYSB6b29tZWQgU1ZHIGRvY3VtZW50IChsZXR0ZXIvd29y
ZC1zcGFjaW5nL2ZvbnQtc2l6ZSkuCi1ib29sIFN0eWxlUmVzb2x2ZXI6OnVzZVNWR1pvb21SdWxl
cygpCi17Ci0gICAgcmV0dXJuIG1fZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlzU1ZHRWxlbWVudCgp
OwotfQotCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSwgU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIExlbmd0aCYgd29y
a2luZ0xlbmd0aCkKK3N0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIExlbmd0
aCYgd29ya2luZ0xlbmd0aCkKIHsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50KSB7CiAgICAgICAgIHdvcmtpbmdMZW5ndGggPSBM
ZW5ndGgoTWluQ29udGVudCk7CkBAIC0yODcwLDcgKzI4NDYsNyBAQCBzdGF0aWMgYm9vbCBjcmVh
dGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgU3R5
bGVSZXNvbAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB3b3JraW5nTGVuZ3Ro
ID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9u
IHwgUGVyY2VudENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uIHwgQXV0
b0NvbnZlcnNpb24+KHNlbGVjdG9yLT5zdHlsZSgpLCBzZWxlY3Rvci0+cm9vdEVsZW1lbnRTdHls
ZSgpLCBzZWxlY3Rvci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICB3b3JraW5nTGVu
Z3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJz
aW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uIHwg
QXV0b0NvbnZlcnNpb24+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwg
c3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICBpZiAod29ya2luZ0xlbmd0aC5p
c1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI4ODAsMTIgKzI4NTYs
MTIgQEAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUsIFN0eWxlUmVzb2wKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3Rh
dGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrTWluTWF4KENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSwgU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIEdyaWRUcmFja1NpemUmIHRyYWNrU2l6
ZSkKK3N0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja01pbk1heChDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgR3JpZFRyYWNrU2l6ZSYg
dHJhY2tTaXplKQogewogICAgIFBhaXIqIG1pbk1heFRyYWNrQnJlYWR0aCA9IHByaW1pdGl2ZVZh
bHVlLT5nZXRQYWlyVmFsdWUoKTsKICAgICBpZiAoIW1pbk1heFRyYWNrQnJlYWR0aCkgewogICAg
ICAgICBMZW5ndGggd29ya2luZ0xlbmd0aDsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tC
cmVhZHRoKHByaW1pdGl2ZVZhbHVlLCBzZWxlY3Rvciwgd29ya2luZ0xlbmd0aCkpCisgICAgICAg
IGlmICghY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChwcmltaXRpdmVWYWx1ZSwgc3RhdGUsIHdvcmtp
bmdMZW5ndGgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHRyYWNrU2l6
ZS5zZXRMZW5ndGgod29ya2luZ0xlbmd0aCk7CkBAIC0yODk0LDE0ICsyODcwLDE0IEBAIHN0YXRp
YyBib29sIGNyZWF0ZUdyaWRUcmFja01pbk1heChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUsIFN0eWxlUmVzb2x2CiAKICAgICBMZW5ndGggbWluVHJhY2tCcmVhZHRoOwogICAgIExl
bmd0aCBtYXhUcmFja0JyZWFkdGg7Ci0gICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKG1p
bk1heFRyYWNrQnJlYWR0aC0+Zmlyc3QoKSwgc2VsZWN0b3IsIG1pblRyYWNrQnJlYWR0aCkgfHwg
IWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgobWluTWF4VHJhY2tCcmVhZHRoLT5zZWNvbmQoKSwgc2Vs
ZWN0b3IsIG1heFRyYWNrQnJlYWR0aCkpCisgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tCcmVhZHRo
KG1pbk1heFRyYWNrQnJlYWR0aC0+Zmlyc3QoKSwgc3RhdGUsIG1pblRyYWNrQnJlYWR0aCkgfHwg
IWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgobWluTWF4VHJhY2tCcmVhZHRoLT5zZWNvbmQoKSwgc3Rh
dGUsIG1heFRyYWNrQnJlYWR0aCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHRyYWNr
U2l6ZS5zZXRNaW5NYXgobWluVHJhY2tCcmVhZHRoLCBtYXhUcmFja0JyZWFkdGgpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tHcm91cChDU1NWYWx1
ZSogdmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4m
IHRyYWNrU2l6ZXMpCitzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tHcm91cChDU1NWYWx1ZSog
dmFsdWUsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0
cmFja1NpemVzKQogewogICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTI5MTIsNyArMjg4OCw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRU
cmFja0dyb3VwKENTU1ZhbHVlKiB2YWx1ZSwgU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFZlY3Rv
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgR3JpZFRyYWNrU2l6ZSB0cmFj
a1NpemU7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTWluTWF4KHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4oY3VyclZhbHVlKSwgc2VsZWN0b3IsIHRyYWNrU2l6ZSkpCisgICAg
ICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTWluTWF4KHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4oY3VyclZhbHVlKSwgc3RhdGUsIHRyYWNrU2l6ZSkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAgICAgdHJhY2tTaXplcy5hcHBlbmQodHJhY2tTaXplKTsKQEAgLTI5MjAs
NyArMjg5Niw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0dyb3VwKENTU1ZhbHVlKiB2
YWx1ZSwgU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFZlY3RvCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3QoQ1NTVmFsdWUqIHZhbHVlLCBWZWN0
b3I8R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6ZXMsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yKQor
c3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrTGlzdChDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxH
cmlkVHJhY2tTaXplPiYgdHJhY2tTaXplcywgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogewog
ICAgIC8vIEhhbmRsZSAnbm9uZScuCiAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
IHsKQEAgLTI5MjgsNyArMjkwNCw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3Qo
Q1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6CiAgICAgICAg
IHJldHVybiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmU7CiAgICAg
fQogCi0gICAgcmV0dXJuIGNyZWF0ZUdyaWRUcmFja0dyb3VwKHZhbHVlLCBzZWxlY3RvciwgdHJh
Y2tTaXplcyk7CisgICAgcmV0dXJuIGNyZWF0ZUdyaWRUcmFja0dyb3VwKHZhbHVlLCBzdGF0ZSwg
dHJhY2tTaXplcyk7CiB9CiAKIApAQCAtMjk2Niw5ICsyOTQyLDkgQEAgc3RhdGljIGJvb2wgaGFz
VmFyaWFibGVSZWZlcmVuY2UoQ1NTVmFsdWUqIHZhbHVlKQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFibGVzKENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+
ID4mIGtub3duRXhwcmVzc2lvbnMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJs
ZXMoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUsIFZlY3RvcjxzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiA+JiBrbm93bkV4
cHJlc3Npb25zKQogewotICAgIHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+IGV4cHJl
c3Npb24oaWQsIHZhbHVlLT5zZXJpYWxpemVSZXNvbHZpbmdWYXJpYWJsZXMoKnN0eWxlKCktPnZh
cmlhYmxlcygpKSk7CisgICAgc3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gZXhwcmVz
c2lvbihpZCwgdmFsdWUtPnNlcmlhbGl6ZVJlc29sdmluZ1ZhcmlhYmxlcygqc3RhdGUuc3R5bGUo
KS0+dmFyaWFibGVzKCkpKTsKIAogICAgIGlmIChrbm93bkV4cHJlc3Npb25zLmNvbnRhaW5zKGV4
cHJlc3Npb24pKQogICAgICAgICByZXR1cm47IC8vIGN5Y2xlIGRldGVjdGVkLgpAQCAtMjk4Mywz
NiArMjk1OSwzNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJsZXMoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8cwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByZXN1bHRTZXQtPnByb3BlcnR5Q291bnQoKTsgaSsrKSB7CiAgICAgICAgIFN0
eWxlUHJvcGVydHlTZXQ6OlByb3BlcnR5UmVmZXJlbmNlIHByb3BlcnR5ID0gcmVzdWx0U2V0LT5w
cm9wZXJ0eUF0KGkpOwogICAgICAgICBpZiAocHJvcGVydHkuaWQoKSAhPSBDU1NQcm9wZXJ0eVZh
cmlhYmxlICYmIGhhc1ZhcmlhYmxlUmVmZXJlbmNlKHByb3BlcnR5LnZhbHVlKCkpKQotICAgICAg
ICAgICAgcmVzb2x2ZVZhcmlhYmxlcyhwcm9wZXJ0eS5pZCgpLCBwcm9wZXJ0eS52YWx1ZSgpLCBr
bm93bkV4cHJlc3Npb25zKTsKKyAgICAgICAgICAgIHJlc29sdmVWYXJpYWJsZXMoc3RhdGUsIHBy
b3BlcnR5LmlkKCksIHByb3BlcnR5LnZhbHVlKCksIGtub3duRXhwcmVzc2lvbnMpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBhcHBseVByb3BlcnR5KHByb3BlcnR5LmlkKCksIHByb3BlcnR5
LnZhbHVlKCkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgcHJvcGVydHkuaWQo
KSwgcHJvcGVydHkudmFsdWUoKSk7CiAgICAgfQogfQogI2VuZGlmCiAKLXZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCit2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRl
LCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAjaWYgRU5BQkxFKENTU19W
QVJJQUJMRVMpCiAgICAgaWYgKGlkICE9IENTU1Byb3BlcnR5VmFyaWFibGUgJiYgaGFzVmFyaWFi
bGVSZWZlcmVuY2UodmFsdWUpKSB7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q1NTUHJvcGVy
dHlJRCwgU3RyaW5nPiA+IGtub3duRXhwcmVzc2lvbnM7Ci0gICAgICAgIHJlc29sdmVWYXJpYWJs
ZXMoaWQsIHZhbHVlLCBrbm93bkV4cHJlc3Npb25zKTsKKyAgICAgICAgcmVzb2x2ZVZhcmlhYmxl
cyhzdGF0ZSwgaWQsIHZhbHVlLCBrbm93bkV4cHJlc3Npb25zKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICNlbmRpZgogCi0gICAgYm9vbCBpc0luaGVyaXQgPSBtX3BhcmVudE5vZGUgJiYgdmFs
dWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKLSAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5pc0lu
aXRpYWxWYWx1ZSgpIHx8ICghbV9wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVl
KCkpOworICAgIGJvb2wgaXNJbmhlcml0ID0gc3RhdGUucGFyZW50Tm9kZSgpICYmIHZhbHVlLT5p
c0luaGVyaXRlZFZhbHVlKCk7CisgICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFs
VmFsdWUoKSB8fCAoIXN0YXRlLnBhcmVudE5vZGUoKSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1
ZSgpKTsKIAotICAgIEFTU0VSVCghaXNJbmhlcml0IHx8ICFpc0luaXRpYWwpOyAvLyBpc0luaGVy
aXQgLT4gIWlzSW5pdGlhbCAmJiBpc0luaXRpYWwgLT4gIWlzSW5oZXJpdAotICAgIEFTU0VSVCgh
aXNJbmhlcml0IHx8IChtX3BhcmVudE5vZGUgJiYgbV9wYXJlbnRTdHlsZSkpOyAvLyBpc0luaGVy
aXQgLT4gKG1fcGFyZW50Tm9kZSAmJiBtX3BhcmVudFN0eWxlKQorICAgIEFTU0VSVCghaXNJbmhl
cml0IHx8ICFpc0luaXRpYWwpOworICAgIEFTU0VSVCghaXNJbmhlcml0IHx8IChzdGF0ZS5wYXJl
bnROb2RlKCkgJiYgc3RhdGUucGFyZW50U3R5bGUoKSkpOwogCi0gICAgaWYgKCFhcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUoKSAmJiAoIWFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUo
KSB8fCAhaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSkgeworICAgIGlmICghc3RhdGUu
YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgJiYgKCFzdGF0ZS5hcHBseVByb3BlcnR5VG9W
aXNpdGVkTGlua1N0eWxlKCkgfHwgIWlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KGlkKSkpIHsK
ICAgICAgICAgLy8gTGltaXQgdGhlIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBv
bmx5IHRoZSBvbmVzIGhvbm9yZWQgYnkgOnZpc2l0ZWQuCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoaXNJbmhlcml0ICYmICFtX3BhcmVudFN0eWxlLT5oYXNFeHBsaWNpdGx5SW5o
ZXJpdGVkUHJvcGVydGllcygpICYmICFDU1NQcm9wZXJ0eTo6aXNJbmhlcml0ZWRQcm9wZXJ0eShp
ZCkpCi0gICAgICAgIG1fcGFyZW50U3R5bGUtPnNldEhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9w
ZXJ0aWVzKCk7CisgICAgaWYgKGlzSW5oZXJpdCAmJiAhc3RhdGUucGFyZW50U3R5bGUoKS0+aGFz
RXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKSAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJp
dGVkUHJvcGVydHkoaWQpKQorICAgICAgICBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5zZXRIYXNFeHBs
aWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpOwogCiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMp
CiAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5VmFyaWFibGUpIHsKQEAgLTMwMjAsNyArMjk5Niw3
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIENTU1ZhcmlhYmxlVmFsdWUqIHZhcmlhYmxlID0gc3Rh
dGljX2Nhc3Q8Q1NTVmFyaWFibGVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgQVNTRVJUKCF2YXJp
YWJsZS0+bmFtZSgpLmlzRW1wdHkoKSk7CiAgICAgICAgIEFTU0VSVCghdmFyaWFibGUtPnZhbHVl
KCkuaXNFbXB0eSgpKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0VmFyaWFibGUodmFyaWFibGUtPm5h
bWUoKSwgdmFyaWFibGUtPnZhbHVlKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRWYXJp
YWJsZSh2YXJpYWJsZS0+bmFtZSgpLCB2YXJpYWJsZS0+dmFsdWUoKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYKQEAgLTMwMjksMTcgKzMwMDUsMTcgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICBjb25zdCBQcm9wZXJ0eUhhbmRsZXImIGhhbmRsZXIgPSBtX3N0eWxlQnVpbGRlci5wcm9wZXJ0
eUhhbmRsZXIoaWQpOwogICAgIGlmIChoYW5kbGVyLmlzVmFsaWQoKSkgewogICAgICAgICBpZiAo
aXNJbmhlcml0KQotICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaGVyaXRWYWx1ZShpZCwgdGhp
cyk7CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5oZXJpdFZhbHVlKGlkLCBzdGF0ZSk7CiAg
ICAgICAgIGVsc2UgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbml0
aWFsVmFsdWUoaWQsIHRoaXMpOworICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaXRpYWxWYWx1
ZShpZCwgc3RhdGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5VmFs
dWUoaWQsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlWYWx1ZShpZCwg
c3RhdGUsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgPyBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKSA6IDA7CiAKLSAgICBmbG9hdCB6b29t
RmFjdG9yID0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIGZsb2F0IHpvb21GYWN0b3Ig
PSBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CiAKICAgICAvLyBXaGF0IGZvbGxvd3Mg
aXMgYSBsaXN0IHRoYXQgbWFwcyB0aGUgQ1NTIHByb3BlcnRpZXMgaW50byB0aGVpciBjb3JyZXNw
b25kaW5nIGZyb250LWVuZAogICAgIC8vIFJlbmRlclN0eWxlIHZhbHVlcy4gU2hvcnRoYW5kcyAo
ZS5nLiBib3JkZXIsIGJhY2tncm91bmQpIG9jY3VyIGluIHRoaXMgbGlzdCBhcyB3ZWxsIGFuZApA
QCAtMzA1Myw3ICszMDI5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIC8vIG5vdGUgaXMg
YSByZW1pbmRlciB0aGF0IGV2ZW50dWFsbHkgImluaGVyaXQiIG5lZWRzIHRvIGJlIHN1cHBvcnRl
ZC4KIAogICAgICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgICAgIG1fc3R5
bGUtPmNsZWFyQ29udGVudCgpOworICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFy
Q29udGVudCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAt
MzA2NSwxOSArMzA0MSwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIENTU1ZhbHVl
KiBpdGVtID0gaS52YWx1ZSgpOwogICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc0ltYWdlR2Vu
ZXJhdG9yVmFsdWUoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNHcmFkaWVu
dFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KFN0
eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NHcmFkaWVudFZhbHVlKj4o
aXRlbSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpLmdldCgpKSwgZGlkU2V0KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVH
ZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPihpdGVt
KS0+Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoc3RhdGUpLmdldCgpKSwgZGlkU2V0KTsKICAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRl
KHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CiAg
ICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9T
RVQpCiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc0ltYWdlU2V0VmFsdWUoKSkg
ewotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zy
b21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUq
PihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dENvbnRlbnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRlLCBDU1NQcm9wZXJ0eUNvbnRlbnQs
IHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPihpdGVtKSksIGRpZFNldCk7CiAgICAgICAg
ICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NT
UHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4oaXRlbSkpLCBkaWRT
ZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KGNhY2hl
ZE9yUGVuZGluZ0Zyb21WYWx1ZShzdGF0ZSwgQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2Fz
dDxDU1NJbWFnZVZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBk
aWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICB9CkBAIC0zMDg4LDE3ICszMDY0LDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNvbnRlbnRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4oaXRlbSk7CiAKICAgICAgICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLT5p
c1N0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoY29u
dGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwoKSwgZGlkU2V0KTsKKyAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChjb250ZW50VmFsdWUtPmdldFN0cmlu
Z1ZhbHVlKCkuaW1wbCgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0
cnVlOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGVudFZhbHVlLT5pc0F0dHIoKSkg
ewogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ2FuIGEgbmFtZXNwYWNlIGJlIHNwZWNp
ZmllZCBmb3IgYW4gYXR0cihmb28pPwotICAgICAgICAgICAgICAgICAgICBpZiAobV9zdHlsZS0+
c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnN0eWxlKCktPnN0
eWxlVHlwZSgpID09IE5PUFNFVURPKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0VW5pcXVlKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fcGFyZW50U3R5bGUtPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGUucGFyZW50U3R5bGUoKS0+c2V0VW5pcXVlKCk7CiAgICAgICAgICAgICAg
ICAgICAgIFF1YWxpZmllZE5hbWUgYXR0cihudWxsQXRvbSwgY29udGVudFZhbHVlLT5nZXRTdHJp
bmdWYWx1ZSgpLmltcGwoKSwgbnVsbEF0b20pOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlID0gbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoYXR0cik7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQodmFsdWUuaXNOdWxsKCkgPyBlbXB0
eUF0b20gOiB2YWx1ZS5pbXBsKCksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUgPSBzdGF0ZS5lbGVtZW50KCktPmdldEF0dHJpYnV0ZShhdHRy
KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudCh2YWx1ZS5p
c051bGwoKSA/IGVtcHR5QXRvbSA6IHZhbHVlLmltcGwoKSwgZGlkU2V0KTsKICAgICAgICAgICAg
ICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIg
dGhlIGZhY3QgdGhhdCB0aGUgYXR0cmlidXRlIHZhbHVlIGFmZmVjdHMgdGhlIHN0eWxlCiAgICAg
ICAgICAgICAgICAgICAgIG1fZmVhdHVyZXMuYXR0cnNJblJ1bGVzLmFkZChhdHRyLmxvY2FsTmFt
ZSgpLmltcGwoKSk7CkBAIC0zMTA5LDI0ICszMDg1LDI0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAg
ICAgICAgICAgICAgIGlmIChsaXN0U3R5bGVJZGVudCAhPSBDU1NWYWx1ZU5vbmUpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBsaXN0U3R5bGVUeXBlID0gc3RhdGljX2Nhc3Q8RUxpc3RTdHlsZVR5
cGU+KGxpc3RTdHlsZUlkZW50IC0gQ1NTVmFsdWVEaXNjKTsKICAgICAgICAgICAgICAgICAgICAg
T3duUHRyPENvdW50ZXJDb250ZW50PiBjb3VudGVyID0gYWRvcHRQdHIobmV3IENvdW50ZXJDb250
ZW50KGNvdW50ZXJWYWx1ZS0+aWRlbnRpZmllcigpLCBsaXN0U3R5bGVUeXBlLCBjb3VudGVyVmFs
dWUtPnNlcGFyYXRvcigpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRl
bnQoY291bnRlci5yZWxlYXNlKCksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldENvbnRlbnQoY291bnRlci5yZWxlYXNlKCksIGRpZFNldCk7CiAgICAgICAg
ICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb250ZW50VmFsdWUtPmdldElkZW50KCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU9wZW5RdW90ZToKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoT1BFTl9RVU9URSwgZGlkU2V0KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoT1BFTl9RVU9URSwg
ZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZUNsb3NlUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50
KENMT1NFX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0Q29udGVudChDTE9TRV9RVU9URSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vT3BlblF1b3RlOgotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChOT19PUEVOX1FVT1RFLCBkaWRTZXQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChOT19PUEVO
X1FVT1RFLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlTm9DbG9zZVF1b3RlOgotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0Q29udGVudChOT19DTE9TRV9RVU9URSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoTk9fQ0xPU0VfUVVPVEUsIGRpZFNldCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0zMTM2LDE2ICsz
MTEyLDE2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKCFkaWRTZXQpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJD
b250ZW50KCk7CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJDb250ZW50KCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5UXVv
dGVzOgogICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRR
dW90ZXMobV9wYXJlbnRTdHlsZS0+cXVvdGVzKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0UXVvdGVzKHN0YXRlLnBhcmVudFN0eWxlKCktPnF1b3RlcygpKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAg
ICBtX3N0eWxlLT5zZXRRdW90ZXMoMCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRR
dW90ZXMoMCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZh
bHVlLT5pc1ZhbHVlTGlzdCgpKSB7CkBAIC0zMTYzLDQzICszMTM5LDQzIEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgICAgICAgICAgICAgU3RyaW5nIGVuZFF1b3RlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPihzZWNvbmQpLT5nZXRTdHJpbmdWYWx1ZSgpOwogICAgICAgICAgICAgICAgIHF1
b3Rlcy0+YWRkUGFpcihzdGQ6Om1ha2VfcGFpcihzdGFydFF1b3RlLCBlbmRRdW90ZSkpOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKHF1b3Rlcyk7CisgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRRdW90ZXMocXVvdGVzKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUpIHsKICAgICAgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpCi0gICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKFF1b3Rlc0RhdGE6OmNyZWF0ZSgpKTsKKyAg
ICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRRdW90ZXMoUXVvdGVzRGF0YTo6Y3JlYXRl
KCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5Rm9u
dEZhbWlseTogewogICAgICAgICAvLyBsaXN0IG9mIHN0cmluZ3MgYW5kIGlkcwogICAgICAgICBp
ZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gcGFyZW50Rm9udERl
c2NyaXB0aW9uID0gbV9wYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCk7CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gcGFyZW50Rm9udERlc2NyaXB0aW9u
ID0gc3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShwYXJlbnRGb250RGVzY3JpcHRp
b24uZ2VuZXJpY0ZhbWlseSgpKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1p
bHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkpOwogICAgICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldElzU3BlY2lmaWVkRm9udChwYXJlbnRGb250RGVzY3JpcHRpb24uaXNT
cGVjaWZpZWRGb250KCkpOwotICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7CisgICAgICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChp
c0luaXRpYWwpIHsKICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBpbml0aWFsRGVzYyA9IEZv
bnREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlw
dGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgRm9udERlc2Ny
aXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAgICAg
ICAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIHNpemUgdG8gYWNjb3VudCBmb3IgdGhlIGdl
bmVyaWMgZmFtaWx5IGNoYW5nZSBmcm9tIG1vbm9zcGFjZQogICAgICAgICAgICAgLy8gdG8gbm9u
LW1vbm9zcGFjZS4KICAgICAgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUo
KSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKQotICAgICAgICAgICAg
ICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKGRvY3Vt
ZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0g
MSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICBzZXRGb250U2l6ZShzdGF0ZSwgZm9udERlc2Ny
aXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsg
Zm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCBmYWxzZSkpOwogICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoaW5pdGlhbERlc2MuZ2VuZXJpY0ZhbWls
eSgpKTsKICAgICAgICAgICAgIGlmICghaW5pdGlhbERlc2MuZmlyc3RGYW1pbHkoKS5mYW1pbHlJ
c0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShpbml0
aWFsRGVzYy5maXJzdEZhbWlseSgpKTsKLSAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihm
b250RGVzY3JpcHRpb24pOworICAgICAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5m
b250RGVzY3JpcHRpb24oKTsKICAgICAgICAgRm9udEZhbWlseSYgZmlyc3RGYW1pbHkgPSBmb250
RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKTsKICAgICAgICAgRm9udEZhbWlseSogY3VyckZhbWls
eSA9IDA7CiAKQEAgLTMyNjgsNDMgKzMyNDQsNDMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgLy8g
SWYgY3VyckZhbWlseSBpcyBub24temVybyB0aGVuIHdlIHNldCBhdCBsZWFzdCBvbmUgZmFtaWx5
IG9uIHRoaXMgZGVzY3JpcHRpb24uCiAgICAgICAgIGlmIChjdXJyRmFtaWx5KSB7CiAgICAgICAg
ICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgJiYgZm9udERlc2NyaXB0aW9u
LnVzZUZpeGVkRGVmYXVsdFNpemUoKSAhPSBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkK
LSAgICAgICAgICAgICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9y
S2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24ua2V5
d29yZFNpemUoKSAtIDEsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkpOworICAgICAg
ICAgICAgICAgIHNldEZvbnRTaXplKHN0YXRlLCBmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9y
S2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24ua2V5
d29yZFNpemUoKSAtIDEsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkpOwogCi0gICAg
ICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgICAg
IHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAvLyBzaG9ydGhhbmQgcHJvcGVydGllcwogICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kOgogICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAg
ICAgICBtX3N0eWxlLT5jbGVhckJhY2tncm91bmRMYXllcnMoKTsKLSAgICAgICAgICAgIG1fc3R5
bGUtPnNldEJhY2tncm91bmRDb2xvcihDb2xvcigpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPmNsZWFyQmFja2dyb3VuZExheWVycygpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0QmFja2dyb3VuZENvbG9yKENvbG9yKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5oZXJp
dCkgewotICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEJhY2tncm91bmRMYXllcnMoKm1fcGFy
ZW50U3R5bGUtPmJhY2tncm91bmRMYXllcnMoKSk7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRC
YWNrZ3JvdW5kQ29sb3IobV9wYXJlbnRTdHlsZS0+YmFja2dyb3VuZENvbG9yKCkpOworICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEJhY2tncm91bmRMYXllcnMoKnN0YXRlLnBhcmVu
dFN0eWxlKCktPmJhY2tncm91bmRMYXllcnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRCYWNrZ3JvdW5kQ29sb3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+YmFja2dyb3VuZENvbG9y
KCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFzazoKICAgICAgICAgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIG1fc3R5bGUtPmNs
ZWFyTWFza0xheWVycygpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJNYXNrTGF5
ZXJzKCk7CiAgICAgICAgIGVsc2UgaWYgKGlzSW5oZXJpdCkKLSAgICAgICAgICAgIG1fc3R5bGUt
PmluaGVyaXRNYXNrTGF5ZXJzKCptX3BhcmVudFN0eWxlLT5tYXNrTGF5ZXJzKCkpOworICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdE1hc2tMYXllcnMoKnN0YXRlLnBhcmVudFN0eWxl
KCktPm1hc2tMYXllcnMoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5
Rm9udDoKICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwot
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodChtX3BhcmVudFN0eWxlLT5zcGVjaWZp
ZWRMaW5lSGVpZ2h0KCkpOwotICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwotICAg
ICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgICAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUucGFyZW50Rm9udERlc2Ny
aXB0aW9uKCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KHN0YXRl
LnBhcmVudFN0eWxlKCktPnNwZWNpZmllZExpbmVIZWlnaHQoKSk7CisgICAgICAgICAgICBzdGF0
ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CisgICAgICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3Jp
cHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0luaXRpYWwpIHsK
ICAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50U2V0dGluZ3MoKTsKICAg
ICAgICAgICAgIEFTU0VSVChzZXR0aW5ncyk7IC8vIElmIHdlJ3JlIGRvaW5nIHN0eWxlIHJlc29s
dXRpb24sIHRoaXMgZG9jdW1lbnQgc2hvdWxkIGFsd2F5cyBiZSBpbiBhIGZyYW1lIGFuZCB0aHVz
IGhhdmUgc2V0dGluZ3MKICAgICAgICAgICAgIGlmICghc2V0dGluZ3MpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgaW5pdGlhbGl6ZUZvbnRTdHlsZShzZXR0aW5ncyk7Cisg
ICAgICAgICAgICBpbml0aWFsaXplRm9udFN0eWxlKHN0YXRlLCBzZXR0aW5ncyk7CiAgICAgICAg
IH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldExp
bmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwotICAgICAgICAgICAg
bV9saW5lSGVpZ2h0VmFsdWUgPSAwOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGlu
ZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgICAgICAgICBz
dGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CiAKICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlv
biBmb250RGVzY3JpcHRpb247CiAgICAgICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1l
KCktPnN5c3RlbUZvbnQocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCksIGZvbnREZXNjcmlwdGlv
bik7CkBAIC0zMzIwLDI3ICszMjk2LDI3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KGRvY3VtZW50KCktPnByaW50aW5nKCkg
fHwgIXNldHRpbmdzLT5zY3JlZW5Gb250U3Vic3RpdHV0aW9uRW5hYmxlZCgpKTsKIAogICAgICAg
ICAgICAgICAgIC8vIEhhbmRsZSB0aGUgem9vbSBmYWN0b3IuCi0gICAgICAgICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVk
U2l6ZShkb2N1bWVudCgpLCBtX3N0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0
ZVNpemUoKSwgZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVz
KCkpKTsKLSAgICAgICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsKKyAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENv
bXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50KCksIHN0YXRlLnN0eWxlKCksIGZv
bnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVk
U2l6ZSgpLCBzdGF0ZS51c2VTVkdab29tUnVsZXMoKSkpOworICAgICAgICAgICAgICAgIHN0YXRl
LnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ZvbnRWYWx1ZSgpKSB7CiAgICAgICAgICAgICBGb250
VmFsdWUqIGZvbnQgPSBzdGF0aWNfY2FzdDxGb250VmFsdWUqPih2YWx1ZSk7CiAgICAgICAgICAg
ICBpZiAoIWZvbnQtPnN0eWxlIHx8ICFmb250LT52YXJpYW50IHx8ICFmb250LT53ZWlnaHQKICAg
ICAgICAgICAgICAgICB8fCAhZm9udC0+c2l6ZSB8fCAhZm9udC0+bGluZUhlaWdodCB8fCAhZm9u
dC0+ZmFtaWx5KQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlGb250U3R5bGUsIGZvbnQtPnN0eWxlLmdldCgpKTsKLSAgICAgICAg
ICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudCwgZm9udC0+dmFyaWFudC5n
ZXQoKSk7Ci0gICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCwg
Zm9udC0+d2VpZ2h0LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIENT
U1Byb3BlcnR5Rm9udFN0eWxlLCBmb250LT5zdHlsZS5nZXQoKSk7CisgICAgICAgICAgICBhcHBs
eVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBmb250LT52YXJpYW50Lmdl
dCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIENTU1Byb3BlcnR5Rm9udFdl
aWdodCwgZm9udC0+d2VpZ2h0LmdldCgpKTsKICAgICAgICAgICAgIC8vIFRoZSBwcmV2aW91cyBw
cm9wZXJ0aWVzIGNhbiBkaXJ0eSBvdXIgZm9udCBidXQgdGhleSBkb24ndCB0cnkgdG8gcmVhZCB0
aGUgZm9udCdzCiAgICAgICAgICAgICAvLyBwcm9wZXJ0aWVzIGJhY2ssIHdoaWNoIGlzIHNhZmUu
IEhvd2V2ZXIgaWYgZm9udC1zaXplIGlzIHVzaW5nIHRoZSAnZXgnIHVuaXQsIGl0IHdpbGwKICAg
ICAgICAgICAgIC8vIG5lZWQgcXVlcnkgdGhlIGRpcnRpZWQgZm9udCdzIHgtaGVpZ2h0IHRvIGdl
dCB0aGUgY29tcHV0ZWQgc2l6ZS4gVG8gYmUgc2FmZSBpbiB0aGlzCiAgICAgICAgICAgICAvLyBj
YXNlLCBsZXQncyBqdXN0IHVwZGF0ZSB0aGUgZm9udCBub3cuCi0gICAgICAgICAgICB1cGRhdGVG
b250KCk7Ci0gICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUsIGZv
bnQtPnNpemUuZ2V0KCkpOworICAgICAgICAgICAgdXBkYXRlRm9udChzdGF0ZSk7CisgICAgICAg
ICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRTaXplLCBmb250LT5zaXpl
LmdldCgpKTsKIAotICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSBmb250LT5saW5lSGVp
Z2h0LmdldCgpOworICAgICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKGZvbnQtPmxp
bmVIZWlnaHQuZ2V0KCkpOwogCi0gICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
Rm9udEZhbWlseSwgZm9udC0+ZmFtaWx5LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVy
dHkoc3RhdGUsIENTU1Byb3BlcnR5Rm9udEZhbWlseSwgZm9udC0+ZmFtaWx5LmdldCgpKTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm47CiAKQEAgLTMzNTAsMTEgKzMzMjYsMTEgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93OiB7CiAgICAgICAgIGlm
IChpc0luaGVyaXQpIHsKICAgICAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFk
b3cpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fc3R5bGUtPnNldFRleHRTaGFkb3cobV9wYXJl
bnRTdHlsZS0+dGV4dFNoYWRvdygpID8gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoKm1fcGFyZW50
U3R5bGUtPnRleHRTaGFkb3coKSkpIDogbnVsbHB0cik7Ci0gICAgICAgICAgICByZXR1cm4gbV9z
dHlsZS0+c2V0Qm94U2hhZG93KG1fcGFyZW50U3R5bGUtPmJveFNoYWRvdygpID8gYWRvcHRQdHIo
bmV3IFNoYWRvd0RhdGEoKm1fcGFyZW50U3R5bGUtPmJveFNoYWRvdygpKSkgOiBudWxscHRyKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUoKS0+c2V0VGV4dFNoYWRvdyhzdGF0
ZS5wYXJlbnRTdHlsZSgpLT50ZXh0U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgq
c3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dFNoYWRvdygpKSkgOiBudWxscHRyKTsKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hTaGFkb3coc3RhdGUucGFyZW50U3R5bGUo
KS0+Ym94U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqc3RhdGUucGFyZW50U3R5
bGUoKS0+Ym94U2hhZG93KCkpKSA6IG51bGxwdHIpOwogICAgICAgICB9CiAgICAgICAgIGlmIChp
c0luaXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUpIC8vIGluaXRpYWwgfCBub25lCi0gICAgICAgICAg
ICByZXR1cm4gaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93ID8gbV9zdHlsZS0+c2V0VGV4dFNo
YWRvdyhudWxscHRyKSA6IG1fc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICAgICAg
ICAgIHJldHVybiBpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cgPyBzdGF0ZS5zdHlsZSgpLT5z
ZXRUZXh0U2hhZG93KG51bGxwdHIpIDogc3RhdGUuc3R5bGUoKS0+c2V0Qm94U2hhZG93KG51bGxw
dHIpOwogCiAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0zMzY0LDI5ICszMzQwLDI5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBp
ZiAoIWN1cnJWYWx1ZS0+aXNTaGFkb3dWYWx1ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgU2hhZG93VmFsdWUqIGl0ZW0gPSBzdGF0aWNfY2FzdDxTaGFkb3dWYWx1
ZSo+KGN1cnJWYWx1ZSk7Ci0gICAgICAgICAgICBpbnQgeCA9IGl0ZW0tPngtPmNvbXB1dGVMZW5n
dGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAg
ICAgICAgaW50IHkgPSBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290
RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+
Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVt
ZW50U3R5bGUsIHpvb21GYWN0b3IpIDogMDsKLSAgICAgICAgICAgIGludCBzcHJlYWQgPSBpdGVt
LT5zcHJlYWQgPyBpdGVtLT5zcHJlYWQtPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jv
b3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpIDogMDsKKyAgICAgICAgICAgIGludCB4ID0gaXRl
bS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50
U3R5bGUoKSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICBpbnQgeSA9IGl0ZW0tPnktPmNvbXB1
dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpv
b21GYWN0b3IpOworICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1
ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5
bGUoKSwgem9vbUZhY3RvcikgOiAwOworICAgICAgICAgICAgaW50IHNwcmVhZCA9IGl0ZW0tPnNw
cmVhZCA/IGl0ZW0tPnNwcmVhZC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0
YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3RvcikgOiAwOwogICAgICAgICAgICAgU2hh
ZG93U3R5bGUgc2hhZG93U3R5bGUgPSBpdGVtLT5zdHlsZSAmJiBpdGVtLT5zdHlsZS0+Z2V0SWRl
bnQoKSA9PSBDU1NWYWx1ZUluc2V0ID8gSW5zZXQgOiBOb3JtYWw7CiAgICAgICAgICAgICBDb2xv
ciBjb2xvcjsKICAgICAgICAgICAgIGlmIChpdGVtLT5jb2xvcikKLSAgICAgICAgICAgICAgICBj
b2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKG1fc3R5bGUpCi0gICAgICAgICAgICAgICAgY29sb3IgPSBtX3N0eWxl
LT5jb2xvcigpOworICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFs
dWUoc3RhdGUsIGl0ZW0tPmNvbG9yLmdldCgpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRl
LnN0eWxlKCkpCisgICAgICAgICAgICAgICAgY29sb3IgPSBzdGF0ZS5zdHlsZSgpLT5jb2xvcigp
OwogCiAgICAgICAgICAgICBPd25QdHI8U2hhZG93RGF0YT4gc2hhZG93RGF0YSA9IGFkb3B0UHRy
KG5ldyBTaGFkb3dEYXRhKEludFBvaW50KHgsIHkpLCBibHVyLCBzcHJlYWQsIHNoYWRvd1N0eWxl
LCBpZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdywgY29sb3IuaXNWYWxpZCgpID8gY29s
b3IgOiBDb2xvcjo6dHJhbnNwYXJlbnQpKTsKICAgICAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9w
ZXJ0eVRleHRTaGFkb3cpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0VGV4dFNoYWRvdyhz
aGFkb3dEYXRhLnJlbGVhc2UoKSwgaS5pbmRleCgpKTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRo
aXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldFRleHRTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0
byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3hTaGFkb3coc2hhZG93RGF0YS5yZWxl
YXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUg
Zmlyc3QgZW50cnkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hTaGFkb3co
c2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0
aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0OiB7CiAgICAgICAgIEhB
TkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGJveFJlZmxlY3QsIEJveFJlZmxlY3QpCiAgICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZSkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm94UmVmbGVj
dChSZW5kZXJTdHlsZTo6aW5pdGlhbEJveFJlZmxlY3QoKSk7CisgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRCb3hSZWZsZWN0KFJlbmRlclN0eWxlOjppbml0aWFsQm94UmVmbGVjdCgpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0zMzk3LDEzICszMzczLDE0IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgICAgIFJlZlB0cjxTdHlsZVJlZmxlY3Rpb24+IHJlZmxlY3Rpb24g
PSBTdHlsZVJlZmxlY3Rpb246OmNyZWF0ZSgpOwogICAgICAgICByZWZsZWN0aW9uLT5zZXREaXJl
Y3Rpb24ocmVmbGVjdFZhbHVlLT5kaXJlY3Rpb24oKSk7CiAgICAgICAgIGlmIChyZWZsZWN0VmFs
dWUtPm9mZnNldCgpKQotICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RW
YWx1ZS0+b2Zmc2V0KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwg
UGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3R5bGUoKSwgbV9yb290
RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSk7CisgICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRP
ZmZzZXQocmVmbGVjdFZhbHVlLT5vZmZzZXQoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdl
ckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihz
dGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpKTsKICAg
ICAgICAgTmluZVBpZWNlSW1hZ2UgbWFzazsKICAgICAgICAgbWFzay5zZXRNYXNrRGVmYXVsdHMo
KTsKLSAgICAgICAgbV9zdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZShpZCwgcmVmbGVjdFZhbHVl
LT5tYXNrKCksIG1hc2spOworICAgICAgICAvLyBtX3N0eWxlTWFwLgorICAgICAgICBDU1NUb1N0
eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZShzdGF0ZSwgaWQsIHJlZmxlY3RWYWx1ZS0+bWFzaygp
LCBtYXNrKTsKICAgICAgICAgcmVmbGVjdGlvbi0+c2V0TWFzayhtYXNrKTsKIAotICAgICAgICBt
X3N0eWxlLT5zZXRCb3hSZWZsZWN0KHJlZmxlY3Rpb24ucmVsZWFzZSgpKTsKKyAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0Qm94UmVmbGVjdChyZWZsZWN0aW9uLnJlbGVhc2UoKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVNyYzogLy8gT25seSB1c2VkIGlu
IEBmb250LWZhY2UgcnVsZXMuCkBAIC0zNDEyLDI5ICszMzg5LDI5IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZToKICAg
ICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVs
ZUNvbG9yKG1fcGFyZW50U3R5bGUtPmNvbHVtblJ1bGVDb2xvcigpLmlzVmFsaWQoKSA/IG1fcGFy
ZW50U3R5bGUtPmNvbHVtblJ1bGVDb2xvcigpIDogbV9wYXJlbnRTdHlsZS0+Y29sb3IoKSk7Ci0g
ICAgICAgICAgICBtX3N0eWxlLT5zZXRDb2x1bW5SdWxlU3R5bGUobV9wYXJlbnRTdHlsZS0+Y29s
dW1uUnVsZVN0eWxlKCkpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVsZVdpZHRo
KG1fcGFyZW50U3R5bGUtPmNvbHVtblJ1bGVXaWR0aCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldENvbHVtblJ1bGVDb2xvcihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jb2x1bW5SdWxl
Q29sb3IoKS5pc1ZhbGlkKCkgPyBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jb2x1bW5SdWxlQ29sb3Io
KSA6IHN0YXRlLnBhcmVudFN0eWxlKCktPmNvbG9yKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0Q29sdW1uUnVsZVN0eWxlKHN0YXRlLnBhcmVudFN0eWxlKCktPmNvbHVtblJ1bGVT
dHlsZSgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbHVtblJ1bGVXaWR0aChz
dGF0ZS5wYXJlbnRTdHlsZSgpLT5jb2x1bW5SdWxlV2lkdGgoKSk7CiAgICAgICAgIH0gZWxzZSBp
ZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgbV9zdHlsZS0+cmVzZXRDb2x1bW5SdWxlKCk7Cisg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5yZXNldENvbHVtblJ1bGUoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlOgogICAgICAgICBpZiAoIWlz
SW5oZXJpdCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVl
ZURpcmVjdGlvbihtX3BhcmVudFN0eWxlLT5tYXJxdWVlRGlyZWN0aW9uKCkpOwotICAgICAgICBt
X3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KG1fcGFyZW50U3R5bGUtPm1hcnF1ZWVJbmNyZW1l
bnQoKSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChtX3BhcmVudFN0eWxlLT5t
YXJxdWVlU3BlZWQoKSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQobV9w
YXJlbnRTdHlsZS0+bWFycXVlZUxvb3BDb3VudCgpKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TWFy
cXVlZUJlaGF2aW9yKG1fcGFyZW50U3R5bGUtPm1hcnF1ZWVCZWhhdmlvcigpKTsKKyAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZURpcmVjdGlvbihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5t
YXJxdWVlRGlyZWN0aW9uKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlSW5j
cmVtZW50KHN0YXRlLnBhcmVudFN0eWxlKCktPm1hcnF1ZWVJbmNyZW1lbnQoKSk7CisgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5tYXJx
dWVlU3BlZWQoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVMb29wQ291bnQo
c3RhdGUucGFyZW50U3R5bGUoKS0+bWFycXVlZUxvb3BDb3VudCgpKTsKKyAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0TWFycXVlZUJlaGF2aW9yKHN0YXRlLnBhcmVudFN0eWxlKCktPm1hcnF1ZWVC
ZWhhdmlvcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXJxdWVlUmVwZXRpdGlvbjogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCht
YXJxdWVlTG9vcENvdW50LCBNYXJxdWVlTG9vcENvdW50KQogICAgICAgICBpZiAoIXByaW1pdGl2
ZVZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKLSAgICAgICAgICAgIG1fc3R5bGUtPnNl
dE1hcnF1ZWVMb29wQ291bnQoLTEpOyAvLyAtMSBtZWFucyByZXBlYXQgZm9yZXZlci4KKyAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVMb29wQ291bnQoLTEpOyAvLyAtMSBtZWFu
cyByZXBlYXQgZm9yZXZlci4KICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVt
YmVyKCkpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KHByaW1pdGl2
ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1h
cnF1ZWVMb29wQ291bnQocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlU3BlZWQ6IHsK
QEAgLTM0NDQsMTkgKzM0MjEsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgaWYgKGludCBpZGVu
dCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGlk
ZW50KSB7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2xvdzoKLSAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoNTAwKTsgLy8gNTAwIG1zZWMuCisgICAgICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKDUwMCk7IC8vIDUwMCBtc2VjLgogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAg
ICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoODUpOyAvLyA4NW1zZWMuIFRo
ZSBXaW5JRSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1
ZWVTcGVlZCg4NSk7IC8vIDg1bXNlYy4gVGhlIFdpbklFIGRlZmF1bHQuCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlRmFzdDoKLSAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoMTApOyAvLyAxMG1zZWMuIFN1cGVyIGZhc3QuCisg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKDEwKTsgLy8gMTBt
c2VjLiBTdXBlciBmYXN0LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1RpbWUoKSkKLSAgICAgICAgICAg
IG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZVRpbWU8aW50
LCBDU1NQcmltaXRpdmVWYWx1ZTo6TWlsbGlzZWNvbmRzPigpKTsKKyAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZVRpbWU8aW50
LCBDU1NQcmltaXRpdmVWYWx1ZTo6TWlsbGlzZWNvbmRzPigpKTsKICAgICAgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIC8vIEZvciBzY3JvbGxhbW91bnQgc3VwcG9ydC4K
LSAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Z2V0
SW50VmFsdWUoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQo
cHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlSW5jcmVtZW50OiB7CkBAIC0zNDY2LDE5
ICszNDQzLDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSkgewogICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSkgewogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsOgotICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDEsIEZpeGVkKSk7IC8vIDFweC4KKyAg
ICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgx
LCBGaXhlZCkpOyAvLyAxcHguCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlTm9ybWFsOgotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJ
bmNyZW1lbnQoTGVuZ3RoKDYsIEZpeGVkKSk7IC8vIDZweC4gVGhlIFdpbklFIGRlZmF1bHQuCisg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgo
NiwgRml4ZWQpKTsgLy8gNnB4LiBUaGUgV2luSUUgZGVmYXVsdC4KICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMYXJnZToKLSAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgzNiwgRml4ZWQpKTsgLy8gMzZweC4K
KyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0
aCgzNiwgRml4ZWQpKTsgLy8gMzZweC4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIExlbmd0aCBtYXJxdWVlTGVuZ3Ro
ID0gY29udmVydFRvSW50TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLCBzdHlsZSgpLCBtX3Jvb3RFbGVt
ZW50U3R5bGUpOworICAgICAgICAgICAgTGVuZ3RoIG1hcnF1ZWVMZW5ndGggPSBjb252ZXJ0VG9J
bnRMZW5ndGgocHJpbWl0aXZlVmFsdWUsIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50
U3R5bGUoKSk7CiAgICAgICAgICAgICBpZiAoIW1hcnF1ZWVMZW5ndGguaXNVbmRlZmluZWQoKSkK
LSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KG1hcnF1ZWVMZW5n
dGgpOworICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVJbmNyZW1lbnQo
bWFycXVlZUxlbmd0aCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0
ODcsMTkgKzM0NjQsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1
ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldExvY2FsZShu
dWxsQXRvbSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMb2NhbGUobnVsbEF0b20p
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRMb2NhbGUocHJpbWl0aXZl
VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRTY3JpcHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihtX3N0
eWxlLT5sb2NhbGUoKSkpOwotICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExvY2FsZShwcmltaXRpdmVWYWx1
ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldFNjcmlwdChsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKHN0YXRlLnN0eWxl
KCktPmxvY2FsZSgpKSk7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVz
Y3JpcHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRUZXh0U2l6ZUFkanVzdDogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElB
TCh0ZXh0U2l6ZUFkanVzdCwgVGV4dFNpemVBZGp1c3QpCiAgICAgICAgIGlmICghcHJpbWl0aXZl
VmFsdWUgfHwgIXByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBzZXRUZXh0U2l6ZUFkanVzdChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZUF1dG8pOworICAgICAgICBzdGF0ZS5zZXRUZXh0U2l6ZUFkanVzdChwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKQEAgLTM1MTAsNyArMzQ4Nyw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAgbV9zdHls
ZS0+c2V0RGFzaGJvYXJkUmVnaW9ucyhSZW5kZXJTdHlsZTo6bm9uZURhc2hib2FyZFJlZ2lvbnMo
KSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREYXNoYm9hcmRSZWdpb25zKFJlbmRl
clN0eWxlOjpub25lRGFzaGJvYXJkUmVnaW9ucygpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCkBAIC0zNTM1LDkgKzM1MTIsOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAg
ICAgIGxlZnQgPSBMZW5ndGgoKTsKIAogICAgICAgICAgICAgaWYgKHJlZ2lvbi0+bV9pc0NpcmNs
ZSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNo
Ym9hcmRSZWdpb246OkNpcmNsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20s
IGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CisgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpD
aXJjbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24g
PT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwogICAgICAgICAgICAgZWxzZSBpZiAocmVnaW9uLT5t
X2lzUmVjdGFuZ2xlKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hib2FyZFJlZ2lv
bihTdHlsZURhc2hib2FyZFJlZ2lvbjo6UmVjdGFuZ2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwg
cmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKKyAg
ICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNo
Ym9hcmRSZWdpb246OlJlY3RhbmdsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0
b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CiAgICAgICAgICAgICBy
ZWdpb24gPSByZWdpb24tPm1fbmV4dC5nZXQoKTsKICAgICAgICAgfQogCkBAIC0zNTUwLDggKzM1
MjcsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBcHBSZWdpb246
IHsKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSB8fCAhcHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5bGUtPnNldERyYWdnYWJs
ZVJlZ2lvbk1vZGUocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVEcmFnID8g
RHJhZ2dhYmxlUmVnaW9uRHJhZyA6IERyYWdnYWJsZVJlZ2lvbk5vRHJhZyk7Ci0gICAgICAgIG1f
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0SGFzQW5ub3RhdGVkUmVnaW9ucyh0cnVlKTsKKyAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0RHJhZ2dhYmxlUmVnaW9uTW9kZShwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZURyYWcgPyBEcmFnZ2FibGVSZWdpb25EcmFnIDogRHJhZ2dh
YmxlUmVnaW9uTm9EcmFnKTsKKyAgICAgICAgc3RhdGUuZG9jdW1lbnQoKS0+c2V0SGFzQW5ub3Rh
dGVkUmVnaW9ucyh0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzU2
NywyMSArMzU0NCwyMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIHJlc3VsdCAqPSAz
OwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NT
VmFsdWVUaGljaykKICAgICAgICAgICAgICAgICByZXN1bHQgKj0gNTsKLSAgICAgICAgICAgIHdp
ZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0
eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0
aDxmbG9hdD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFj
dG9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICB3aWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0Pihz
dHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgd2lk
dGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUoKSwg
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIG1fc3R5bGUtPnNldFRleHRTdHJva2VXaWR0aCh3aWR0aCk7
CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRTdHJva2VXaWR0aCh3aWR0aCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybTog
ewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0cmFuc2Zvcm0sIFRyYW5zZm9y
bSk7CiAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICAgICAgY3Jl
YXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxl
LCBvcGVyYXRpb25zKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0VHJhbnNmb3JtKG9wZXJhdGlvbnMp
OworICAgICAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlLCBzdGF0ZS5zdHlsZSgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIG9wZXJhdGlvbnMpOworICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRUcmFuc2Zvcm0ob3BlcmF0aW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBlcnNwZWN0aXZlOiB7CkBAIC0zNTkxLDM0ICsz
NTY4LDM0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0UGVyc3BlY3RpdmUoMCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRQZXJzcGVjdGl2ZSgwKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg
ICAgICAgIGZsb2F0IHBlcnNwZWN0aXZlVmFsdWU7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+aXNMZW5ndGgoKSkKLSAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6
b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBwcmltaXRpdmVWYWx1
ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRT
dHlsZSgpLCB6b29tRmFjdG9yKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlz
TnVtYmVyKCkpIHsKICAgICAgICAgICAgIC8vIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0
cmVhdCB2YWx1ZWxlc3MgbnVtYmVycyBhcyBweC4KLSAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFs
dWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVW
YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4o
c3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHBl
cnNwZWN0aXZlVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByaW1pdGl2ZVZhbHVl
LT5nZXREb3VibGVWYWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKS0+Y29tcHV0ZUxl
bmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29t
RmFjdG9yKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
aWYgKHBlcnNwZWN0aXZlVmFsdWUgPj0gMC4wZikKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFBl
cnNwZWN0aXZlKHBlcnNwZWN0aXZlVmFsdWUpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0UGVyc3BlY3RpdmUocGVyc3BlY3RpdmVWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbjoKICAgICAgICAgaWYgKGlzSW5p
dGlhbCkKLSAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyQW5pbWF0aW9ucygpOworICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJBbmltYXRpb25zKCk7CiAgICAgICAgIGVsc2UgaWYgKGlz
SW5oZXJpdCkKLSAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRBbmltYXRpb25zKG1fcGFyZW50
U3R5bGUtPmFuaW1hdGlvbnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0
QW5pbWF0aW9ucyhzdGF0ZS5wYXJlbnRTdHlsZSgpLT5hbmltYXRpb25zKCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246CiAgICAgICAgIGlm
IChpc0luaXRpYWwpCi0gICAgICAgICAgICBtX3N0eWxlLT5jbGVhclRyYW5zaXRpb25zKCk7Cisg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhclRyYW5zaXRpb25zKCk7CiAgICAgICAgIGVs
c2UgaWYgKGlzSW5oZXJpdCkKLSAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRUcmFuc2l0aW9u
cyhtX3BhcmVudFN0eWxlLT50cmFuc2l0aW9ucygpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPmluaGVyaXRUcmFuc2l0aW9ucyhzdGF0ZS5wYXJlbnRTdHlsZSgpLT50cmFuc2l0aW9ucygp
KTsKICAgICAgICAgcmV0dXJuOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiB7CkBAIC0zNjI2LDggKzM2MDMsOCBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAg
YnJlYWs7CiAKLSAgICAgICAgQ29sb3IgY29sID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJp
bWl0aXZlVmFsdWUpOwotICAgICAgICBtX3N0eWxlLT5zZXRUYXBIaWdobGlnaHRDb2xvcihjb2wp
OworICAgICAgICBDb2xvciBjb2wgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShzdGF0ZSwgcHJp
bWl0aXZlVmFsdWUpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUYXBIaWdobGlnaHRDb2xv
cihjb2wpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zNjM2LDcgKzM2MTMs
NyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh1c2VU
b3VjaE92ZXJmbG93U2Nyb2xsaW5nLCBVc2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKTsKICAgICAg
ICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBtX3N0
eWxlLT5zZXRVc2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlVG91Y2gpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRVc2VUb3Vj
aE92ZXJmbG93U2Nyb2xsaW5nKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
VG91Y2gpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zNjc5LDkgKzM2NTYs
OSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dpY2FsV2lk
dGg6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxIZWlnaHQ6CiAgICAgewot
ICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rp
b25Bd2FyZVByb3BlcnR5KGlkLCBtX3N0eWxlLT5kaXJlY3Rpb24oKSwgbV9zdHlsZS0+d3JpdGlu
Z01vZGUoKSk7CisgICAgICAgIENTU1Byb3BlcnR5SUQgbmV3SWQgPSBDU1NQcm9wZXJ0eTo6cmVz
b2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoaWQsIHN0YXRlLnN0eWxlKCktPmRpcmVjdGlvbigp
LCBzdGF0ZS5zdHlsZSgpLT53cml0aW5nTW9kZSgpKTsKICAgICAgICAgQVNTRVJUKG5ld0lkICE9
IGlkKTsKLSAgICAgICAgcmV0dXJuIGFwcGx5UHJvcGVydHkobmV3SWQsIHZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuIGFwcGx5UHJvcGVydHkoc3RhdGUsIG5ld0lkLCB2YWx1ZSk7CiAgICAgfQogICAg
IGNhc2UgQ1NTUHJvcGVydHlGb250U3RyZXRjaDoKICAgICBjYXNlIENTU1Byb3BlcnR5UGFnZToK
QEAgLTM3MTEsMTIgKzM2ODgsMTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgSEFORExFX0lOSEVS
SVRfQU5EX0lOSVRJQUwod3JpdGluZ01vZGUsIFdyaXRpbmdNb2RlKTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHNldFdyaXRpbmdNb2RlKCpwcmlt
aXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBzdGF0ZS5zZXRXcml0aW5nTW9kZSgqcHJpbWl0aXZl
VmFsdWUpOwogCiAgICAgICAgIC8vIEZJWE1FOiBJdCBpcyBub3Qgb2sgdG8gbW9kaWZ5IGRvY3Vt
ZW50IHN0YXRlIHdoaWxlIGFwcGx5aW5nIHN0eWxlLgotICAgICAgICBpZiAobV9lbGVtZW50ICYm
IG1fZWxlbWVudCA9PSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQot
ICAgICAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNldE9uRG9j
dW1lbnRFbGVtZW50KHRydWUpOwotCisgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCkgJiYgc3Rh
dGUuZWxlbWVudCgpID09IHN0YXRlLmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQorICAg
ICAgICAgICAgc3RhdGUuZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxl
bWVudCh0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzcyNCw3ICszNzAwLDcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodGV4dE9y
aWVudGF0aW9uLCBUZXh0T3JpZW50YXRpb24pOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZSkKLSAgICAgICAgICAgIHNldFRleHRPcmllbnRhdGlvbigqcHJpbWl0aXZlVmFsdWUpOworICAg
ICAgICAgICAgc3RhdGUuc2V0VGV4dE9yaWVudGF0aW9uKCpwcmltaXRpdmVWYWx1ZSk7CiAKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3MzIsNyArMzcwOCw3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVCb3hDb250YWluOiB7CiAgICAgICAgIEhBTkRM
RV9JTkhFUklUX0FORF9JTklUSUFMKGxpbmVCb3hDb250YWluLCBMaW5lQm94Q29udGFpbikKICAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUJveENvbnRhaW4o
TGluZUJveENvbnRhaW5Ob25lKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVC
b3hDb250YWluKExpbmVCb3hDb250YWluTm9uZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIApAQCAtMzc0MCwyMSArMzcxNiwyMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgIENTU0xpbmVCb3hDb250YWluVmFsdWUqIGxpbmVCb3hDb250YWlu
VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NMaW5lQm94Q29udGFpblZhbHVlKj4odmFsdWUpOwotICAg
ICAgICBtX3N0eWxlLT5zZXRMaW5lQm94Q29udGFpbihsaW5lQm94Q29udGFpblZhbHVlLT52YWx1
ZSgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUJveENvbnRhaW4obGluZUJveENv
bnRhaW5WYWx1ZS0+dmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBD
U1MgRm9udHMgTW9kdWxlIExldmVsIDMKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udEZl
YXR1cmVTZXR0aW5nczogewogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKLSAgICAgICAgICAgIHNldEZv
bnREZXNjcmlwdGlvbihtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKS5tYWtlTm9ybWFsRmVhdHVy
ZVNldHRpbmdzKCkpOworICAgICAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKHN0YXRl
LmZvbnREZXNjcmlwdGlvbigpLm1ha2VOb3JtYWxGZWF0dXJlU2V0dGluZ3MoKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlz
dCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAg
ICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1
ZSk7CiAgICAgICAgIFJlZlB0cjxGb250RmVhdHVyZVNldHRpbmdzPiBzZXR0aW5ncyA9IEZvbnRG
ZWF0dXJlU2V0dGluZ3M6OmNyZWF0ZSgpOwogICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3Ro
KCk7CkBAIC0zNzY2LDcgKzM3NDIsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgc2V0dGlu
Z3MtPmFwcGVuZChGb250RmVhdHVyZShmZWF0dXJlLT50YWcoKSwgZmVhdHVyZS0+dmFsdWUoKSkp
OwogICAgICAgICB9CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGZWF0dXJlU2V0dGluZ3Mo
c2V0dGluZ3MucmVsZWFzZSgpKTsKLSAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNzc0LDIzICszNzUwLDIzIEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZpbHRlcjogewogICAgICAgICBI
QU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChmaWx0ZXIsIEZpbHRlcik7CiAgICAgICAgIEZpbHRl
ck9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICAgICAgaWYgKGNyZWF0ZUZpbHRlck9wZXJhdGlv
bnModmFsdWUsIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgb3BlcmF0aW9ucykpCi0gICAg
ICAgICAgICBtX3N0eWxlLT5zZXRGaWx0ZXIob3BlcmF0aW9ucyk7CisgICAgICAgIGlmIChjcmVh
dGVGaWx0ZXJPcGVyYXRpb25zKHN0YXRlLCB2YWx1ZSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9v
dEVsZW1lbnRTdHlsZSgpLCBvcGVyYXRpb25zKSkKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldEZpbHRlcihvcGVyYXRpb25zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgog
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkQ29sdW1uczogewogICAgICAgICBWZWN0b3I8
R3JpZFRyYWNrU2l6ZT4gdHJhY2tTaXplczsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tM
aXN0KHZhbHVlLCB0cmFja1NpemVzLCB0aGlzKSkKKyAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJh
Y2tMaXN0KHZhbHVlLCB0cmFja1NpemVzLCBzdGF0ZSkpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIG1fc3R5bGUtPnNldEdyaWRDb2x1bW5zKHRyYWNrU2l6ZXMpOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRHcmlkQ29sdW1ucyh0cmFja1NpemVzKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZFJvd3M6IHsKICAgICAgICAgVmVj
dG9yPEdyaWRUcmFja1NpemU+IHRyYWNrU2l6ZXM7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRy
YWNrTGlzdCh2YWx1ZSwgdHJhY2tTaXplcywgdGhpcykpCisgICAgICAgIGlmICghY3JlYXRlR3Jp
ZFRyYWNrTGlzdCh2YWx1ZSwgdHJhY2tTaXplcywgc3RhdGUpKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBtX3N0eWxlLT5zZXRHcmlkUm93cyh0cmFja1NpemVzKTsKKyAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0R3JpZFJvd3ModHJhY2tTaXplcyk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTM3OTgsMTQgKzM3NzQsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgR3JpZFBv
c2l0aW9uIGNvbHVtbjsKICAgICAgICAgaWYgKCFjcmVhdGVHcmlkUG9zaXRpb24odmFsdWUsIGNv
bHVtbikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5bGUtPnNldEdyaWRJdGVt
Q29sdW1uKGNvbHVtbik7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEdyaWRJdGVtQ29sdW1u
KGNvbHVtbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEdyaWRSb3c6IHsKICAgICAgICAgR3JpZFBvc2l0aW9uIHJvdzsKICAgICAgICAgaWYgKCFj
cmVhdGVHcmlkUG9zaXRpb24odmFsdWUsIHJvdykpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIG1fc3R5bGUtPnNldEdyaWRJdGVtUm93KHJvdyk7CisgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldEdyaWRJdGVtUm93KHJvdyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gVGhl
c2UgcHJvcGVydGllcyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIFN0eWxlQnVpbGRlciBsb29rdXAg
dGFibGUuCkBAIC00MDk1LDkxICs0MDcxLDkxIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAjaWYgRU5BQkxFKFNW
RykKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBUcnkgdGhlIFNWRyBwcm9wZXJ0aWVzCi0gICAg
ICAgIGFwcGx5U1ZHUHJvcGVydHkoaWQsIHZhbHVlKTsKKyAgICAgICAgYXBwbHlTVkdQcm9wZXJ0
eShzdGF0ZSwgaWQsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgfQogfQog
Ci1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdl
PiBTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+
aXNJbWFnZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUo
cHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPih2YWx1ZSkpOworICAgICAgICBy
ZXR1cm4gY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRlLCBwcm9wZXJ0eSwgc3RhdGljX2Nh
c3Q8Q1NTSW1hZ2VWYWx1ZSo+KHZhbHVlKSk7CiAKICAgICBpZiAodmFsdWUtPmlzSW1hZ2VHZW5l
cmF0b3JWYWx1ZSgpKSB7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNHcmFkaWVudFZhbHVlKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBz
dGF0aWNfY2FzdDxDU1NHcmFkaWVudFZhbHVlKj4odmFsdWUpLT5ncmFkaWVudFdpdGhTdHlsZXNS
ZXNvbHZlZCh0aGlzKS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBlbmRpbmdG
cm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPih2
YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShz
dGF0ZSwgcHJvcGVydHksIHN0YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPih2YWx1ZSktPmdy
YWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHN0YXRlKS5nZXQoKSk7CisgICAgICAgIHJldHVybiBn
ZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoc3RhdGUsIHByb3BlcnR5LCBzdGF0aWNfY2FzdDxD
U1NJbWFnZUdlbmVyYXRvclZhbHVlKj4odmFsdWUpKTsKICAgICB9CiAKICNpZiBFTkFCTEUoQ1NT
X0lNQUdFX1NFVCkKICAgICBpZiAodmFsdWUtPmlzSW1hZ2VTZXRWYWx1ZSgpKQotICAgICAgICBy
ZXR1cm4gc2V0T3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFn
ZVNldFZhbHVlKj4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHNldE9yUGVuZGluZ0Zyb21WYWx1
ZShzdGF0ZSwgcHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPih2YWx1ZSkp
OwogI2VuZGlmCiAKICAgICBpZiAodmFsdWUtPmlzQ3Vyc29ySW1hZ2VWYWx1ZSgpKQotICAgICAg
ICByZXR1cm4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0aWNfY2FzdDxD
U1NDdXJzb3JJbWFnZVZhbHVlKj4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGN1cnNvck9yUGVu
ZGluZ0Zyb21WYWx1ZShzdGF0ZSwgcHJvcGVydHksIHN0YXRpY19jYXN0PENTU0N1cnNvckltYWdl
VmFsdWUqPih2YWx1ZSkpOwogCiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIENTU0ltYWdlVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdl
PiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoU3R5bGVSZXNvbHZlU3Rh
dGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVZhbHVlKiB2YWx1ZSkK
IHsKICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5n
SW1hZ2UoKTsKICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAg
ICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICAg
ICAgc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOwog
ICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4g
U3R5bGVSZXNvbHZlcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHksIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHls
ZUltYWdlPiBTdHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoU3R5bGVS
ZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZUdlbmVy
YXRvclZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzUGVuZGluZygpKSB7Ci0gICAg
ICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICAg
ICAgc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOwog
ICAgICAgICByZXR1cm4gU3R5bGVQZW5kaW5nSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7CiAgICAgfQog
ICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUodmFsdWUpOwogfQogCiAjaWYg
RU5BQkxFKENTU19JTUFHRV9TRVQpCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2
ZXI6OnNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFn
ZVNldFZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6
c2V0T3JQZW5kaW5nRnJvbVZhbHVlKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VTZXRWYWx1ZSogdmFsdWUpCiB7Ci0gICAgUmVmUHRyPFN0
eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50
KCkpOworICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRp
bmdJbWFnZVNldChzdGF0ZS5kb2N1bWVudCgpKTsKICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlz
UGVuZGluZ0ltYWdlKCkpCi0gICAgICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJv
cGVydHksIHZhbHVlKTsKKyAgICAgICAgc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNl
dChwcm9wZXJ0eSwgdmFsdWUpOwogICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CiB9CiAjZW5k
aWYKIAotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpjdXJzb3JPclBlbmRp
bmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSog
dmFsdWUpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmN1cnNvck9yUGVu
ZGluZ0Zyb21WYWx1ZShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgcHJv
cGVydHksIENTU0N1cnNvckltYWdlVmFsdWUqIHZhbHVlKQogewotICAgIFJlZlB0cjxTdHlsZUlt
YWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZShkb2N1bWVudCgpKTsKKyAg
ICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2Uo
c3RhdGUuZG9jdW1lbnQoKSk7CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFn
ZSgpKQotICAgICAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1
ZSk7CisgICAgICAgIHN0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHks
IHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogCi12b2lkIFN0eWxlUmVz
b2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKQordm9pZCBTdHlsZVJlc29sdmVyOjpjaGVj
a0ZvclRleHRTaXplQWRqdXN0KFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKLSAgICBpZiAobV9zdHls
ZS0+dGV4dFNpemVBZGp1c3QoKSkKKyAgICBpZiAoc3R5bGUtPnRleHRTaXplQWRqdXN0KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24o
bV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkpOworICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250
RGVzY3JpcHRpb24oc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKTsKICAgICBuZXdGb250RGVzY3Jp
cHRpb24uc2V0Q29tcHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkp
OwotICAgIG1fc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwor
ICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKIH0KIAot
dm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxl
LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9y
Wm9vbUNoYW5nZShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIFJlbmRlclN0eWxlKiBzdHlsZSwg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewogICAgIGlmIChzdHlsZS0+ZWZmZWN0aXZlWm9v
bSgpID09IHBhcmVudFN0eWxlLT5lZmZlY3RpdmVab29tKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgY2hpbGRGb250ID0gc3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpOwogICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24oY2hpbGRGb250
KTsKLSAgICBzZXRGb250U2l6ZShuZXdGb250RGVzY3JpcHRpb24sIGNoaWxkRm9udC5zcGVjaWZp
ZWRTaXplKCkpOworICAgIHNldEZvbnRTaXplKHN0YXRlLCBuZXdGb250RGVzY3JpcHRpb24sIGNo
aWxkRm9udC5zcGVjaWZpZWRTaXplKCkpOwogICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24o
bmV3Rm9udERlc2NyaXB0aW9uKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0Zvckdl
bmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShT
dHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKQogewogICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgY2hpbGRGb250ID0g
c3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogCkBAIC00MjEzLDExICs0MTg5LDExIEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiBz
dHlsZSwgUmVuZGVyU3R5bGUqCiAgICAgfQogCiAgICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnRE
ZXNjcmlwdGlvbihjaGlsZEZvbnQpOwotICAgIHNldEZvbnRTaXplKG5ld0ZvbnREZXNjcmlwdGlv
biwgc2l6ZSk7CisgICAgc2V0Rm9udFNpemUoc3RhdGUsIG5ld0ZvbnREZXNjcmlwdGlvbiwgc2l6
ZSk7CiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwog
fQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUoU2V0dGluZ3MqIHNl
dHRpbmdzKQordm9pZCBTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKFN0eWxlUmVz
b2x2ZVN0YXRlJiBzdGF0ZSwgU2V0dGluZ3MqIHNldHRpbmdzKQogewogICAgIEZvbnREZXNjcmlw
dGlvbiBmb250RGVzY3JpcHRpb247CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1p
bHkoRm9udERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseSk7CkBAIC00MjI5LDE2ICs0MjA1LDE3
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0aW5ncyogc2V0
dGluZ3MpCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLmFwcGVuZEZhbWls
eSgwKTsKICAgICB9CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVl
TWVkaXVtIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7Ci0gICAgc2V0Rm9udFNpemUoZm9udERlc2Ny
aXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZh
bHNlKSk7Ci0gICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExp
bmVIZWlnaHQoKSk7Ci0gICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwotICAgIHNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgIHNldEZvbnRTaXplKHN0YXRlLCBmb250RGVz
Y3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwg
ZmFsc2UpKTsKKyAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjpp
bml0aWFsTGluZUhlaWdodCgpKTsKKyAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7Cisg
ICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQg
U3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGZsb2F0IHNpemUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKFN0eWxlUmVz
b2x2ZVN0YXRlJiBzdGF0ZSwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0
IHNpemUpCiB7CisgICAgQVNTRVJUKHN0YXRlLmVsZW1lbnQoKSk7CiAgICAgZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1
dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBtX3N0
eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwgdXNlU1ZH
Wm9vbVJ1bGVzKCkpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENv
bXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKHN0YXRlLmRvY3VtZW50KCksIHN0YXRlLnN0eWxl
KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXplLCBzdGF0ZS51c2VTVkda
b29tUnVsZXMoKSkpOwogfQogCiBmbG9hdCBTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVG
cm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIFJlbmRlclN0eWxlKiBzdHlsZSwg
Ym9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkdab29t
UnVsZXMpCkBAIC00NDM2LDcgKzQ0MTMsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJv
bVByaW1pdGl2ZVZhbHVlSXNEZXJpdmVkRnJvbUVsZW1lbnQoQ1NTUHJpbWl0aXZlVmFsdQogICAg
IH0KIH0KIAotQ29sb3IgU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoQ1NT
UHJpbWl0aXZlVmFsdWUqIHZhbHVlLCBib29sIGZvclZpc2l0ZWRMaW5rKSBjb25zdAorQ29sb3Ig
U3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoU3R5bGVSZXNvbHZlU3RhdGUm
IHN0YXRlLCBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUsIGJvb2wgZm9yVmlzaXRlZExpbmspCiB7
CiAgICAgaWYgKHZhbHVlLT5pc1JHQkNvbG9yKCkpCiAgICAgICAgIHJldHVybiBDb2xvcih2YWx1
ZS0+Z2V0UkdCQTMyVmFsdWUoKSk7CkBAIC00NDQ2LDE1ICs0NDIzLDE1IEBAIENvbG9yIFN0eWxl
UmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1
ZSwgYm9vbCBmb3JWCiAgICAgY2FzZSAwOgogICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICBj
YXNlIENTU1ZhbHVlV2Via2l0VGV4dDoKLSAgICAgICAgcmV0dXJuIG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS0+dGV4dENvbG9yKCk7CisgICAgICAgIHJldHVybiBzdGF0ZS5kb2N1bWVudCgpLT50ZXh0
Q29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0TGluazoKLSAgICAgICAgcmV0dXJuICht
X2VsZW1lbnQtPmlzTGluaygpICYmIGZvclZpc2l0ZWRMaW5rKSA/IG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS0+dmlzaXRlZExpbmtDb2xvcigpIDogbV9lbGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29s
b3IoKTsKKyAgICAgICAgcmV0dXJuIChzdGF0ZS5lbGVtZW50KCktPmlzTGluaygpICYmIGZvclZp
c2l0ZWRMaW5rKSA/IHN0YXRlLmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rQ29sb3IoKSA6IHN0YXRl
LmRvY3VtZW50KCktPmxpbmtDb2xvcigpOwogICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRBY3RpdmVs
aW5rOgotICAgICAgICByZXR1cm4gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5hY3RpdmVMaW5rQ29s
b3IoKTsKKyAgICAgICAgcmV0dXJuIHN0YXRlLmRvY3VtZW50KCktPmFjdGl2ZUxpbmtDb2xvcigp
OwogICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvcjoKICAgICAgICAgcmV0dXJu
IFJlbmRlclRoZW1lOjpmb2N1c1JpbmdDb2xvcigpOwogICAgIGNhc2UgQ1NTVmFsdWVDdXJyZW50
Y29sb3I6Ci0gICAgICAgIHJldHVybiBtX3N0eWxlLT5jb2xvcigpOworICAgICAgICByZXR1cm4g
c3RhdGUuc3R5bGUoKS0+Y29sb3IoKTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gY29s
b3JGb3JDU1NWYWx1ZShpZGVudCk7CiAgICAgfQpAQCAtNDc4NiwxOSArNDc2MywxOSBAQCBzdGF0
aWMgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGZpbHRlck9wZXJhdGlvbkZvclR5cGUo
V2ViS2l0Q1NTRmlsdGVyVmFsdQogfQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFC
TEUoU1ZHKQotdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cygpCit2
b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKFN0eWxlUmVzb2x2ZVN0
YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoIW1fc3R5bGUtPmhhc0ZpbHRlcigpIHx8IG1fcGVuZGlu
Z1NWR0RvY3VtZW50cy5pc0VtcHR5KCkpCisgICAgaWYgKCFzdGF0ZS5zdHlsZSgpLT5oYXNGaWx0
ZXIoKSB8fCBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzKCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIg
PSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7Ci0gICAgVmVj
dG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBtX3N0eWxl
LT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVy
KiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IHN0YXRlLmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNl
TG9hZGVyKCk7CisgICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9w
ZXJhdGlvbnMgPSBzdGF0ZS5zdHlsZSgpLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJPcGVyYXRpb25zLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRlck9wZXJhdGlvbiA9IGZp
bHRlck9wZXJhdGlvbnMuYXQoaSk7CiAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24tPmdldE9w
ZXJhdGlvblR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkgewogICAgICAgICAg
ICAgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKiByZWZlcmVuY2VGaWx0ZXIgPSBzdGF0aWNfY2Fz
dDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24uZ2V0KCkpOwogCi0g
ICAgICAgICAgICBXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKiB2YWx1ZSA9IG1fcGVuZGluZ1NW
R0RvY3VtZW50cy5nZXQocmVmZXJlbmNlRmlsdGVyKS5nZXQoKTsKKyAgICAgICAgICAgIFdlYktp
dENTU1NWR0RvY3VtZW50VmFsdWUqIHZhbHVlID0gc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cygp
LmdldChyZWZlcmVuY2VGaWx0ZXIpLmdldCgpOwogICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIENhY2hlZFNWR0RvY3VtZW50KiBj
YWNoZWREb2N1bWVudCA9IHZhbHVlLT5sb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKQEAgLTQ4
MDksMzQgKzQ3ODYsMzQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0RvY3Vt
ZW50cygpCiAgICAgICAgICAgICByZWZlcmVuY2VGaWx0ZXItPnNldENhY2hlZFNWR0RvY3VtZW50
UmVmZXJlbmNlKGFkb3B0UHRyKG5ldyBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShjYWNoZWRE
b2N1bWVudCkpKTsKICAgICAgICAgfQogICAgIH0KLSAgICBtX3BlbmRpbmdTVkdEb2N1bWVudHMu
Y2xlYXIoKTsKKyAgICBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzKCkuY2xlYXIoKTsKIH0KICNl
bmRpZgogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQotU3R5bGVTaGFkZXIqIFN0eWxlUmVzb2x2
ZXI6OnN0eWxlU2hhZGVyKENTU1ZhbHVlKiB2YWx1ZSkKK1N0eWxlU2hhZGVyKiBTdHlsZVJlc29s
dmVyOjpzdHlsZVNoYWRlcihTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1
ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzV2ViS2l0Q1NTU2hhZGVyVmFsdWUoKSkKLSAgICAgICAg
cmV0dXJuIGNhY2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKHN0YXRpY19jYXN0PFdl
YktpdENTU1NoYWRlclZhbHVlKj4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGNhY2hlZE9yUGVu
ZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKHN0YXRlLCBzdGF0aWNfY2FzdDxXZWJLaXRDU1NTaGFk
ZXJWYWx1ZSo+KHZhbHVlKSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVN0eWxlU2hhZGVyKiBTdHls
ZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShXZWJLaXRDU1NT
aGFkZXJWYWx1ZSogdmFsdWUpCitTdHlsZVNoYWRlciogU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQ
ZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBXZWJL
aXRDU1NTaGFkZXJWYWx1ZSogdmFsdWUpCiB7CiAgICAgU3R5bGVTaGFkZXIqIHNoYWRlciA9IHZh
bHVlLT5jYWNoZWRPclBlbmRpbmdTaGFkZXIoKTsKICAgICBpZiAoc2hhZGVyICYmIHNoYWRlci0+
aXNQZW5kaW5nU2hhZGVyKCkpCi0gICAgICAgIG1faGFzUGVuZGluZ1NoYWRlcnMgPSB0cnVlOwor
ICAgICAgICBzdGF0ZS5zZXRIYXNQZW5kaW5nU2hhZGVycyh0cnVlKTsKICAgICByZXR1cm4gc2hh
ZGVyOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycygpCit2b2lk
IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycyhTdHlsZVJlc29sdmVTdGF0ZSYgc3Rh
dGUpCiB7Ci0gICAgaWYgKCFtX3N0eWxlLT5oYXNGaWx0ZXIoKSB8fCAhbV9oYXNQZW5kaW5nU2hh
ZGVycykKKyAgICBpZiAoIXN0YXRlLnN0eWxlKCktPmhhc0ZpbHRlcigpIHx8ICFzdGF0ZS5oYXNQ
ZW5kaW5nU2hhZGVycygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDYWNoZWRSZXNvdXJjZUxv
YWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hl
ZFJlc291cmNlTG9hZGVyKCk7CisgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291
cmNlTG9hZGVyID0gc3RhdGUuZWxlbWVudCgpLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxv
YWRlcigpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9w
ZXJhdGlvbnMgPSBtX3N0eWxlLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOworICAgIFZl
Y3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJPcGVyYXRpb25zID0gc3RhdGUu
c3R5bGUoKS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZmlsdGVyT3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICBSZWZQ
dHI8RmlsdGVyT3BlcmF0aW9uPiBmaWx0ZXJPcGVyYXRpb24gPSBmaWx0ZXJPcGVyYXRpb25zLmF0
KGkpOwogICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkgPT0g
RmlsdGVyT3BlcmF0aW9uOjpDVVNUT00pIHsKQEAgLTQ4NTMsNyArNDgzMCw3IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJzKCkKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KLSAgICBtX2hhc1BlbmRpbmdTaGFkZXJzID0gZmFsc2U7CisgICAgc3RhdGUuc2V0
SGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpOwogfQogCiBzdGF0aWMgYm9vbCBzb3J0UGFyYW1ldGVy
c0J5TmFtZUNvbXBhcmF0b3IoY29uc3QgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4mIGEs
IGNvbnN0IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+JiBiKQpAQCAtNDg5MSwxNiArNDg2
OCwxNiBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6
cGFyc2VDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZQogICAgIHJldHVybiBudW1iZXJQYXJhbWV0
ZXIucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5
bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIoY29uc3QgU3Ry
aW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqIHZhbHVlcykKK1Bhc3NSZWZQdHI8Q3VzdG9tRmlsdGVy
UGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFt
ZXRlcihTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFs
dWVMaXN0KiB2YWx1ZXMpCiB7CiAgICAgUmVmUHRyPEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFt
ZXRlcj4gdHJhbnNmb3JtUGFyYW1ldGVyID0gQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVy
OjpjcmVhdGUobmFtZSk7CiAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAg
IGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWVzLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50
U3R5bGUsIG9wZXJhdGlvbnMpOworICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWVz
LCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIG9wZXJhdGlvbnMpOwog
ICAgIHRyYW5zZm9ybVBhcmFtZXRlci0+c2V0T3BlcmF0aW9ucyhvcGVyYXRpb25zKTsKICAgICBy
ZXR1cm4gdHJhbnNmb3JtUGFyYW1ldGVyLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxDdXN0
b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1l
dGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWUqIHBhcmFtZXRlclZhbHVlKQorUGFzc1Jl
ZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmls
dGVyUGFyYW1ldGVyKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiBuYW1l
LCBDU1NWYWx1ZSogcGFyYW1ldGVyVmFsdWUpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBv
dGhlciBwYXJhbWV0ZXJzIHR5cGVzIHBhcnNpbmcuCiAgICAgLy8gYm9vbGVhbnM6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjQzOApAQCAtNDkyMyw3ICs0OTAwLDcg
QEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNl
Q3VzdG9tRmlsdGVyUGFyYW1ldGVyKGNvbnMKICAgICAvLyBhcmUgdHJhbnNmb3Jtcy4gcGFyc2VD
dXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIgd2lsbAogICAgIC8vIHJldHVybiAwIGlmIHRo
YXQgYXNzdW1wdGlvbiBpcyBpbmNvcnJlY3QuCiAgICAgaWYgKHZhbHVlcy0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygwKS0+aXNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSgpKQotICAgICAgICByZXR1
cm4gcGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIobmFtZSwgdmFsdWVzKTsKKyAg
ICAgICAgcmV0dXJuIHBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKHN0YXRlLCBu
YW1lLCB2YWx1ZXMpOwogCiAgICAgLy8gV2UgY2FuIGhhdmUgb25seSBhcnJheXMgb2YgYm9vbGVh
bnMgb3IgbnVtYmVycywgc28gdXNlIHRoZSBmaXJzdCB2YWx1ZSB0byBjaG9vc2UgYmV0d2VlbiB0
aG9zZSB0d28uCiAgICAgLy8gV2UgbmVlZCB1cCB0byA0IHZhbHVlcyAoYWxsIGJvb2xlYW5zIG9y
IGFsbCBudW1iZXJzKS4KQEAgLTQ5NDAsNyArNDkxNyw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmls
dGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihj
b25zCiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21G
aWx0ZXJQYXJhbWV0ZXJMaXN0KENTU1ZhbHVlKiBwYXJhbWV0ZXJzVmFsdWUsIEN1c3RvbUZpbHRl
clBhcmFtZXRlckxpc3QmIHBhcmFtZXRlckxpc3QpCitib29sIFN0eWxlUmVzb2x2ZXI6OnBhcnNl
Q3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1Zh
bHVlKiBwYXJhbWV0ZXJzVmFsdWUsIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHBhcmFtZXRl
ckxpc3QpCiB7CiAgICAgSGFzaFNldDxTdHJpbmc+IGtub3duUGFyYW1ldGVyTmFtZXM7CiAgICAg
Q1NTVmFsdWVMaXN0SXRlcmF0b3IgcGFyYW1ldGVySXRlcmF0b3IocGFyYW1ldGVyc1ZhbHVlKTsK
QEAgLTQ5NjUsNyArNDk0Miw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0
ZXJQYXJhbWV0ZXJMaXN0KENTU1ZhbHVlKiBwYXJhbWV0ZXJzVmFsdWUsIEN1CiAgICAgICAgIGlm
ICghaXRlcmF0b3IuaGFzTW9yZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAKLSAgICAgICAgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyYW1ldGVyID0gcGFy
c2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIobmFtZSwgaXRlcmF0b3IudmFsdWUoKSk7CisgICAgICAg
IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcmFtZXRlciA9IHBhcnNlQ3VzdG9tRmls
dGVyUGFyYW1ldGVyKHN0YXRlLCBuYW1lLCBpdGVyYXRvci52YWx1ZSgpKTsKICAgICAgICAgaWYg
KCFwYXJhbWV0ZXIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHBhcmFtZXRl
ckxpc3QuYXBwZW5kKHBhcmFtZXRlci5yZWxlYXNlKCkpOwpAQCAtNDk3Nyw3ICs0OTU0LDcgQEAg
Ym9vbCBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QoQ1NTVmFs
dWUqIHBhcmFtZXRlcnNWYWx1ZSwgQ3UKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUGFzc1JlZlB0
cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRl
ck9wZXJhdGlvbihXZWJLaXRDU1NGaWx0ZXJWYWx1ZSogZmlsdGVyVmFsdWUpCitQYXNzUmVmUHRy
PEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgV2ViS2l0Q1NTRmlsdGVyVmFsdWUq
IGZpbHRlclZhbHVlKQogewogICAgIEFTU0VSVChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkpOwogCkBA
IC00OTg4LDcgKzQ5NjUsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5
bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFdlYgogICAgIHVuc2lnbmVk
IHNoYWRlcnNMaXN0TGVuZ3RoID0gc2hhZGVyc0xpc3QtPmxlbmd0aCgpOwogICAgIEFTU0VSVChz
aGFkZXJzTGlzdExlbmd0aCk7CiAKLSAgICBSZWZQdHI8U3R5bGVTaGFkZXI+IHZlcnRleFNoYWRl
ciA9IHN0eWxlU2hhZGVyKHNoYWRlcnNMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsK
KyAgICBSZWZQdHI8U3R5bGVTaGFkZXI+IHZlcnRleFNoYWRlciA9IHN0eWxlU2hhZGVyKHN0YXRl
LCBzaGFkZXJzTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7CiAgICAgUmVmUHRyPFN0
eWxlU2hhZGVyPiBmcmFnbWVudFNoYWRlcjsKICAgICBDdXN0b21GaWx0ZXJQcm9ncmFtVHlwZSBw
cm9ncmFtVHlwZSA9IFBST0dSQU1fVFlQRV9CTEVORFNfRUxFTUVOVF9URVhUVVJFOwogICAgIEN1
c3RvbUZpbHRlclByb2dyYW1NaXhTZXR0aW5ncyBtaXhTZXR0aW5nczsKQEAgLTUwMDEsNyArNDk3
OCw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVyOjpj
cmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oV2ViCiAgICAgICAgICAgICBDU1NWYWx1ZUxpc3RJ
dGVyYXRvciBpdGVyYXRvcihtaXhGdW5jdGlvbik7CiAKICAgICAgICAgICAgIEFTU0VSVChtaXhG
dW5jdGlvbi0+bGVuZ3RoKCkpOwotICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXIgPSBzdHlsZVNo
YWRlcihpdGVyYXRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyID0gc3R5
bGVTaGFkZXIoc3RhdGUsIGl0ZXJhdG9yLnZhbHVlKCkpOwogICAgICAgICAgICAgaXRlcmF0b3Iu
YWR2YW5jZSgpOwogCiAgICAgICAgICAgICBBU1NFUlQobWl4RnVuY3Rpb24tPmxlbmd0aCgpIDw9
IDMpOwpAQCAtNTAxNyw3ICs0OTk0LDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRp
b24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWIKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHByb2dyYW1UeXBlID0gUFJP
R1JBTV9UWVBFX05PX0VMRU1FTlRfVEVYVFVSRTsKLSAgICAgICAgICAgIGZyYWdtZW50U2hhZGVy
ID0gc3R5bGVTaGFkZXIoZnJhZ21lbnRTaGFkZXJPck1peEZ1bmN0aW9uKTsKKyAgICAgICAgICAg
IGZyYWdtZW50U2hhZGVyID0gc3R5bGVTaGFkZXIoc3RhdGUsIGZyYWdtZW50U2hhZGVyT3JNaXhG
dW5jdGlvbik7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC01MDczLDcgKzUwNTAsNyBAQCBQ
YXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uKFdlYgogICAgICAgICBwYXJhbWV0ZXJzVmFsdWUgPSBmaWx0ZXJW
YWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKTsKICAgICAKICAgICBDdXN0b21GaWx0ZXJQ
YXJhbWV0ZXJMaXN0IHBhcmFtZXRlckxpc3Q7Ci0gICAgaWYgKHBhcmFtZXRlcnNWYWx1ZSAmJiAh
cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KHBhcmFtZXRlcnNWYWx1ZSwgcGFyYW1ldGVy
TGlzdCkpCisgICAgaWYgKHBhcmFtZXRlcnNWYWx1ZSAmJiAhcGFyc2VDdXN0b21GaWx0ZXJQYXJh
bWV0ZXJMaXN0KHN0YXRlLCBwYXJhbWV0ZXJzVmFsdWUsIHBhcmFtZXRlckxpc3QpKQogICAgICAg
ICByZXR1cm4gMDsKICAgICAKICAgICBSZWZQdHI8U3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtPiBw
cm9ncmFtID0gU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUodmVydGV4U2hhZGVyLnJl
bGVhc2UoKSwgZnJhZ21lbnRTaGFkZXIucmVsZWFzZSgpLCBwcm9ncmFtVHlwZSwgbWl4U2V0dGlu
Z3MsIG1lc2hUeXBlKTsKQEAgLTUwODEsNyArNTA1OCw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmls
dGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24o
V2ViCiB9CiAjZW5kaWYKIAotYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRp
b25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBy
b290U3R5bGUsIEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpCitib29sIFN0eWxlUmVz
b2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBD
U1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0
eWxlLCBGaWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKQogewogICAgIEFTU0VSVChvdXRP
cGVyYXRpb25zLmlzRW1wdHkoKSk7CiAgICAgCkBAIC01MTE0LDcgKzUwOTEsNyBAQCBib29sIFN0
eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJl
bmRlclN0eWxlKiBzdHlsZQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKG9wZXJhdGlvblR5cGUgPT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT00pIHsKLSAgICAg
ICAgICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IG9wZXJhdGlvbiA9IGNyZWF0ZUN1
c3RvbUZpbHRlck9wZXJhdGlvbihmaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBSZWZQdHI8Q3Vz
dG9tRmlsdGVyT3BlcmF0aW9uPiBvcGVyYXRpb24gPSBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRp
b24oc3RhdGUsIGZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGlmICghb3BlcmF0aW9uKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIApAQCAtNTEzMiwxMiArNTEw
OSwxMiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFs
dWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgICAgICBXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKiBzdmdEb2N1bWVudFZh
bHVlID0gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSo+KGFyZ3VtZW50KTsK
LSAgICAgICAgICAgIEtVUkwgdXJsID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVS
TChzdmdEb2N1bWVudFZhbHVlLT51cmwoKSk7CisgICAgICAgICAgICBLVVJMIHVybCA9IC8qbV9l
bGVtZW50LT4qL2RvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgp
KTsKIAogICAgICAgICAgICAgUmVmUHRyPFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4gb3BlcmF0
aW9uID0gUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoc3ZnRG9jdW1lbnRWYWx1ZS0+
dXJsKCksIHVybC5mcmFnbWVudElkZW50aWZpZXIoKSwgb3BlcmF0aW9uVHlwZSk7Ci0gICAgICAg
ICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0V4dGVybmFsVVJJUmVmZXJlbmNlKHN2Z0RvY3Vt
ZW50VmFsdWUtPnVybCgpLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkpKSB7CisgICAgICAgICAgICBp
ZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0V4dGVybmFsVVJJUmVmZXJlbmNlKHN2Z0RvY3VtZW50VmFs
dWUtPnVybCgpLCBzdGF0ZS5kb2N1bWVudCgpKSkgewogICAgICAgICAgICAgICAgIGlmICghc3Zn
RG9jdW1lbnRWYWx1ZS0+bG9hZFJlcXVlc3RlZCgpKQotICAgICAgICAgICAgICAgICAgICBtX3Bl
bmRpbmdTVkdEb2N1bWVudHMuc2V0KG9wZXJhdGlvbi5nZXQoKSwgc3ZnRG9jdW1lbnRWYWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMoKS5zZXQob3Bl
cmF0aW9uLmdldCgpLCBzdmdEb2N1bWVudFZhbHVlKTsKICAgICAgICAgICAgICAgICBlbHNlIGlm
IChzdmdEb2N1bWVudFZhbHVlLT5jYWNoZWRTVkdEb2N1bWVudCgpKQogICAgICAgICAgICAgICAg
ICAgICBvcGVyYXRpb24tPnNldENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGFkb3B0UHRyKG5l
dyBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShzdmdEb2N1bWVudFZhbHVlLT5jYWNoZWRTVkdE
b2N1bWVudCgpKSkpOwogICAgICAgICAgICAgfQpAQCAtNTIyMSw3ICs1MTk4LDcgQEAgYm9vbCBT
dHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBS
ZW5kZXJTdHlsZSogc3R5bGUKICAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0
ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9y
KSA6IDA7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKICAgICAgICAgICAgIGlmIChpdGVtLT5j
b2xvcikKLSAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGl0
ZW0tPmNvbG9yLmdldCgpKTsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1p
dGl2ZVZhbHVlKHN0YXRlLCBpdGVtLT5jb2xvci5nZXQoKSk7CiAKICAgICAgICAgICAgIG9wZXJh
dGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOjpjcmVh
dGUobG9jYXRpb24sIGJsdXIsIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRyYW5z
cGFyZW50LCBvcGVyYXRpb25UeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTUyNDEsNyAr
NTIxOCw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NW
YWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlCiAKIFBhc3NSZWZQdHI8U3R5bGVJbWFn
ZT4gU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSogcGVu
ZGluZ0ltYWdlKQogewotICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxv
YWRlciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKKyAg
ICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBkb2N1bWVudCgp
LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogCiAgICAgaWYgKHBlbmRpbmdJbWFnZS0+Y3NzSW1h
Z2VWYWx1ZSgpKSB7CiAgICAgICAgIENTU0ltYWdlVmFsdWUqIGltYWdlVmFsdWUgPSBwZW5kaW5n
SW1hZ2UtPmNzc0ltYWdlVmFsdWUoKTsKQEAgLTUyNjksMjUgKzUyNDYsMjUgQEAgUGFzc1JlZlB0
cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGlu
Z0ltYWdlKiBwZW5kaW4KICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjps
b2FkUGVuZGluZ0ltYWdlcygpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2Vz
KFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAobV9wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzLmlzRW1wdHkoKSkKKyAgICBpZiAoc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygp
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUGVuZGluZ0ltYWdlUHJvcGVydHlN
YXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGVuZCA9IG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5l
bmQoKS5rZXlzKCk7Ci0gICAgZm9yIChQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRl
cmF0b3I6OktleXMgaXQgPSBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuYmVnaW4oKS5rZXlzKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9p
dGVyYXRvcjo6S2V5cyBlbmQgPSBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuZW5kKCku
a2V5cygpOworICAgIGZvciAoUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9y
OjpLZXlzIGl0ID0gc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmJlZ2luKCkua2V5cygp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgQ1NTUHJvcGVydHlJRCBjdXJyZW50UHJvcGVy
dHkgPSAqaXQ7CiAKICAgICAgICAgc3dpdGNoIChjdXJyZW50UHJvcGVydHkpIHsKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZTogewotICAgICAgICAgICAgZm9yIChGaWxs
TGF5ZXIqIGJhY2tncm91bmRMYXllciA9IG1fc3R5bGUtPmFjY2Vzc0JhY2tncm91bmRMYXllcnMo
KTsgYmFja2dyb3VuZExheWVyOyBiYWNrZ3JvdW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5l
eHQoKSkgeworICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIGJhY2tncm91bmRMYXllciA9IHN0
YXRlLnN0eWxlKCktPmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKTsgYmFja2dyb3VuZExheWVyOyBi
YWNrZ3JvdW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAg
ICAgIGlmIChiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkgJiYgYmFja2dyb3VuZExheWVyLT5pbWFn
ZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQogICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kTGF5
ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1h
Z2UqPihiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q29udGVudDog
ewotICAgICAgICAgICAgZm9yIChDb250ZW50RGF0YSogY29udGVudERhdGEgPSBjb25zdF9jYXN0
PENvbnRlbnREYXRhKj4obV9zdHlsZS0+Y29udGVudERhdGEoKSk7IGNvbnRlbnREYXRhOyBjb250
ZW50RGF0YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoQ29udGVu
dERhdGEqIGNvbnRlbnREYXRhID0gY29uc3RfY2FzdDxDb250ZW50RGF0YSo+KHN0YXRlLnN0eWxl
KCktPmNvbnRlbnREYXRhKCkpOyBjb250ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50RGF0
YS0+bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnREYXRhLT5pc0ltYWdlKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxJ
bWFnZUNvbnRlbnREYXRhKj4oY29udGVudERhdGEpLT5pbWFnZSgpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpIHsKQEAgLTUzMDAsNyArNTI3Nyw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUN1cnNvcjogewotICAgICAg
ICAgICAgaWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBtX3N0eWxlLT5jdXJzb3JzKCkpIHsK
KyAgICAgICAgICAgIGlmIChDdXJzb3JMaXN0KiBjdXJzb3JMaXN0ID0gc3RhdGUuc3R5bGUoKS0+
Y3Vyc29ycygpKSB7CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjdXJz
b3JMaXN0LT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgICAgICBDdXJzb3JEYXRhJiBj
dXJyZW50Q3Vyc29yID0gY3Vyc29yTGlzdC0+YXQoaSk7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChTdHlsZUltYWdlKiBpbWFnZSA9IGN1cnJlbnRDdXJzb3IuaW1hZ2UoKSkgewpAQCAtNTMxMiwx
NyArNTI4OSwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0
U3R5bGVJbWFnZTogewotICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkg
JiYgbV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRp
Y19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSkpKTsK
KyAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpICYmIHN0YXRl
LnN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGlzdFN0eWxlSW1hZ2UobG9hZFBlbmRpbmdJbWFnZShz
dGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KHN0YXRlLnN0eWxlKCktPmxpc3RTdHlsZUlt
YWdlKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAgIGlmIChtX3N0eWxlLT5i
b3JkZXJJbWFnZVNvdXJjZSgpICYmIG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCktPmlzUGVu
ZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVySW1hZ2VTb3Vy
Y2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5
bGUtPmJvcmRlckltYWdlU291cmNlKCkpKSk7CisgICAgICAgICAgICBpZiAoc3RhdGUuc3R5bGUo
KS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBzdGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNvdXJj
ZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dEJvcmRlckltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5k
aW5nSW1hZ2UqPihzdGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJv
eFJlZmxlY3Q6IHsKLSAgICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24g
PSBtX3N0eWxlLT5ib3hSZWZsZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rp
b24qIHJlZmxlY3Rpb24gPSBzdGF0ZS5zdHlsZSgpLT5ib3hSZWZsZWN0KCkpIHsKICAgICAgICAg
ICAgICAgICBjb25zdCBOaW5lUGllY2VJbWFnZSYgbWFza0ltYWdlID0gcmVmbGVjdGlvbi0+bWFz
aygpOwogICAgICAgICAgICAgICAgIGlmIChtYXNrSW1hZ2UuaW1hZ2UoKSAmJiBtYXNrSW1hZ2Uu
aW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkgewogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8
U3R5bGVJbWFnZT4gbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0
eWxlUGVuZGluZ0ltYWdlKj4obWFza0ltYWdlLmltYWdlKCkpKTsKQEAgLTUzMzIsMTIgKzUzMDks
MTIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0Jv
eEltYWdlU291cmNlOiB7Ci0gICAgICAgICAgICBpZiAobV9zdHlsZS0+bWFza0JveEltYWdlU291
cmNlKCkgJiYgbV9zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkp
Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFza0JveEltYWdlU291cmNlKGxvYWRQZW5k
aW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0eWxlLT5tYXNrQm94
SW1hZ2VTb3VyY2UoKSkpKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5tYXNrQm94
SW1hZ2VTb3VyY2UoKSAmJiBzdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQ
ZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXNrQm94
SW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFn
ZSo+KHN0YXRlLnN0eWxlKCktPm1hc2tCb3hJbWFnZVNvdXJjZSgpKSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFn
ZTogewotICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IG1fc3R5bGUtPmFj
Y2Vzc01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQo
KSkgeworICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IHN0YXRlLnN0eWxl
KCktPmFjY2Vzc01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXIt
Pm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChtYXNrTGF5ZXItPmltYWdlKCkgJiYgbWFz
a0xheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQogICAgICAgICAgICAgICAgICAgICBt
YXNrTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5k
aW5nSW1hZ2UqPihtYXNrTGF5ZXItPmltYWdlKCkpKSk7CiAgICAgICAgICAgICB9CkBAIC01MzQ4
LDIyICs1MzI1LDIyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmNsZWFyKCk7
CisgICAgc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmNsZWFyKCk7CiB9CiAKLXZvaWQg
U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdSZXNvdXJjZXMoKQordm9pZCBTdHlsZVJlc29sdmVy
Ojpsb2FkUGVuZGluZ1Jlc291cmNlcyhTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiB7CiAgICAg
Ly8gU3RhcnQgbG9hZGluZyBpbWFnZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxv
YWRQZW5kaW5nSW1hZ2VzKCk7CisgICAgbG9hZFBlbmRpbmdJbWFnZXMoc3RhdGUpOwogCiAjaWYg
RU5BQkxFKENTU19TSEFERVJTKQogICAgIC8vIFN0YXJ0IGxvYWRpbmcgdGhlIHNoYWRlcnMgcmVm
ZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nU2hhZGVycygpOworICAgIGxv
YWRQZW5kaW5nU2hhZGVycyhzdGF0ZSk7CiAjZW5kaWYKICAgICAKICNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpICYmIEVOQUJMRShTVkcpCiAgICAgLy8gU3RhcnQgbG9hZGluZyB0aGUgU1ZHIERvY3Vt
ZW50cyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdTVkdEb2N1bWVu
dHMoKTsKKyAgICBsb2FkUGVuZGluZ1NWR0RvY3VtZW50cyhzdGF0ZSk7CiAjZW5kaWYKIH0KIApA
QCAtNTQxMSw3ICs1Mzg4LDYgQEAgdm9pZCBNZWRpYVF1ZXJ5UmVzdWx0OjpyZXBvcnRNZW1vcnlV
c2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb24KIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0
SW5mbykgY29uc3QKIHsKICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZv
LCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9z
dHlsZSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9hdXRob3JTdHlsZSk7CiAgICAgaW5mby5hZGRN
ZW1iZXIobV91c2VyU3R5bGUpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fZmVhdHVyZXMpOwpAQCAt
NTQyMCwzMSArNTM5NiwxNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdl
KE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiAgICAgaW5mby5hZGRN
ZW1iZXIobV9rZXlmcmFtZXNSdWxlTWFwKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX21hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fbWF0Y2hlZFByb3BlcnRpZXND
YWNoZVN3ZWVwVGltZXIpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fbWF0Y2hlZFJ1bGVzKTsKIAot
ICAgIGluZm8uYWRkTWVtYmVyKG1fcnVsZUxpc3QpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fcGVu
ZGluZ0ltYWdlUHJvcGVydGllcyk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9tZWRpdW0pOwogICAg
IGluZm8uYWRkTWVtYmVyKG1fcm9vdERlZmF1bHRTdHlsZSk7CiAgICAgaW5mby5hZGRNZW1iZXIo
bV9kb2N1bWVudCk7CiAKLSAgICAvLyBGSVhNRTogcG9pbnRlciB0byBSZW5kZXJTdHlsZSBjb3Vs
ZCBwb2ludCB0byBhbiBhbHJlYWR5IGRlbGV0ZWQgb2JqZWN0LgotICAgIGluZm8uaWdub3JlTWVt
YmVyKG1fcGFyZW50U3R5bGUpOwotICAgIGluZm8uaWdub3JlTWVtYmVyKG1fcm9vdEVsZW1lbnRT
dHlsZSk7Ci0KLSAgICBpbmZvLmFkZE1lbWJlcihtX2VsZW1lbnQpOwotICAgIGluZm8uYWRkTWVt
YmVyKG1fc3R5bGVkRWxlbWVudCk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9yZWdpb25Gb3JTdHls
aW5nKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3BhcmVudE5vZGUpOwotICAgIGluZm8uYWRkTWVt
YmVyKG1fbGluZUhlaWdodFZhbHVlKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2ZvbnRTZWxlY3Rv
cik7CiAgICAgaW5mby5hZGRNZW1iZXIobV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1
bHRzKTsKICAgICBpbmZvLmlnbm9yZU1lbWJlcihtX3N0eWxlQnVpbGRlcik7CiAgICAgaW5mby5h
ZGRNZW1iZXIobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCk7CiAgICAgaW5mby5hZGRNZW1i
ZXIobV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0KTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
ICYmIEVOQUJMRShTVkcpCi0gICAgaW5mby5hZGRNZW1iZXIobV9wZW5kaW5nU1ZHRG9jdW1lbnRz
KTsKLSNlbmRpZgogICAgIGluZm8uYWRkTWVtYmVyKG1fc2NvcGVSZXNvbHZlcik7CiAKICAgICAv
LyBGSVhNRTogbW92ZSB0aGlzIHRvIGEgcGxhY2Ugd2hlcmUgaXQgd291bGQgYmUgY2FsbGVkIG9u
bHkgb25jZT8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCmluZGV4IDNjNDM0ZjI0NDY4ODMy
MDVhNDNmNTc0YTdkMGI4OTJkZDExM2UxOWMuLjhiNjhjNzg3OWEwMGQ0Mzg2YzU3OTBjZjE1MjJk
YWRjM2RhYzc5NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAtMjMsNiArMjMs
NyBAQAogI2RlZmluZSBTdHlsZVJlc29sdmVyX2gKIAogI2luY2x1ZGUgIkNTU1J1bGUuaCIKKyNp
bmNsdWRlICJDU1NSdWxlTGlzdC5oIgogI2luY2x1ZGUgIkNTU1RvU3R5bGVNYXAuaCIKICNpbmNs
dWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJMaW5rSGFzaC5oIgpAQCAtMzQsOCArMzUs
MTIgQEAKICNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKICNpbmNsdWRlICJTZWxlY3RvckZp
bHRlci5oIgogI2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgorI2luY2x1ZGUgIlN0eWxl
UmVzb2x2ZVN0YXRlLmgiCiAjaW5jbHVkZSAiU3R5bGVTY29wZVJlc29sdmVyLmgiCiAjaW5jbHVk
ZSAiVmlld3BvcnRTdHlsZVJlc29sdmVyLmgiCisjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBF
TkFCTEUoU1ZHKQorI2luY2x1ZGUgIldlYktpdENTU1NWR0RvY3VtZW50VmFsdWUuaCIKKyNlbmRp
ZgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC04Niw2ICs5MSw3IEBAIGNsYXNzIFN0eWxlSW1hZ2U7
CiBjbGFzcyBTdHlsZUtleWZyYW1lOwogY2xhc3MgU3R5bGVQZW5kaW5nSW1hZ2U7CiBjbGFzcyBT
dHlsZVByb3BlcnR5U2V0OworY2xhc3MgU3R5bGVSZXNvbHZlU3RhdGU7CiBjbGFzcyBTdHlsZVJ1
bGU7CiAjaWYgRU5BQkxFKFNIQURPV19ET00pCiBjbGFzcyBTdHlsZVJ1bGVIb3N0OwpAQCAtMTMy
LDYgKzEzOCw5IEBAIGVudW0gUnVsZU1hdGNoaW5nQmVoYXZpb3IgewogICAgIE1hdGNoT25seVVz
ZXJBZ2VudFJ1bGVzLAogfTsKIAorI2lmbmRlZiBUQVNBSworI2VuZGlmCisKIC8vIFRoaXMgY2xh
c3Mgc2VsZWN0cyBhIFJlbmRlclN0eWxlIGZvciBhIGdpdmVuIGVsZW1lbnQgYmFzZWQgb24gYSBj
b2xsZWN0aW9uIG9mIHN0eWxlc2hlZXRzLgogY2xhc3MgU3R5bGVSZXNvbHZlciB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoU3R5bGVSZXNvbHZlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwpAQCAtMTYxLDIwICsxNzAsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gc3R5bGVGb3JEb2N1bWVudChEb2N1bWVudCosIENTU0ZvbnRTZWxlY3Rvciog
PSAwKTsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUu
Z2V0KCk7IH0KLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X3BhcmVudFN0eWxlOyB9Ci0gICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3Jvb3RFbGVtZW50U3R5bGU7IH0KLSAgICBFbGVtZW50KiBlbGVtZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uKCkgeyByZXR1cm4gc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAg
ICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJu
IHBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAgdm9pZCBzZXRGb250RGVz
Y3JpcHRpb24oY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9mb250
RGlydHkgfD0gc3R5bGUoKS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0K
LSAgICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRa
b29tKGYpOyB9Ci0gICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9mb250RGly
dHkgfD0gc3R5bGUoKS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQotICAgIHZvaWQgc2V0VGV4dFNp
emVBZGp1c3QoYm9vbCBiKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRTaXplQWRq
dXN0KGIpOyB9Ci0gICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9k
ZSkgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7
IH0KLSAgICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRpb24gdGV4dE9yaWVu
dGF0aW9uKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRPcmllbnRhdGlvbih0ZXh0
T3JpZW50YXRpb24pOyB9Ci0gICAgYm9vbCBoYXNQYXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9wYXJlbnROb2RlOyB9CiAKICAgICB2b2lkIHJlc2V0QXV0aG9yU3R5bGUoKTsKICAgICB2b2lk
IGFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8
UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mKTsKQEAgLTE5OCwxNyArMTk0LDE3IEBAIHByaXZhdGU6
CiAgICAgfQogI2VuZGlmCiAKLSAgICB2b2lkIGluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCos
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VVRE8pOwotICAg
IHZvaWQgaW5pdEVsZW1lbnQoRWxlbWVudCopOworICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2
ZShTdHlsZVJlc29sdmVTdGF0ZSYsIEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUg
PSAwKTsKKyAgICB2b2lkIGluaXRFbGVtZW50KFN0eWxlUmVzb2x2ZVN0YXRlJiwgRWxlbWVudCop
OwogICAgIHZvaWQgY29sbGVjdEZlYXR1cmVzKCk7Ci0gICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNo
YXJlZFN0eWxlKCk7Ci0gICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNl
dChSdWxlU2V0Kik7Ci0gICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1
bGVzKCk7CisgICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKFN0eWxlUmVzb2x2ZVN0
YXRlJik7CisgICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChFbGVt
ZW50KiwgUnVsZVNldCopOworICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hv
c3RSdWxlcyhFbGVtZW50Kik7CiAgICAgTm9kZSogbG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBw
YXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdDsKLSAgICBTdHlsZWRFbGVt
ZW50KiBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiwgdW5zaWduZWQmIGNvdW50KSBj
b25zdDsKLSAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50Kikg
Y29uc3Q7CisgICAgU3R5bGVkRWxlbWVudCogZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoU3R5
bGVSZXNvbHZlU3RhdGUmLCBOb2RlKiwgdW5zaWduZWQmIGNvdW50KSBjb25zdDsKKyAgICBib29s
IGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZVJlc29sdmVTdGF0ZSYsIFN0eWxlZEVsZW1l
bnQqKSBjb25zdDsKIAotICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5ZnJh
bWUoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBTdHlsZUtleWZyYW1lKiwgS2V5ZnJhbWVWYWx1
ZSYpOworICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5ZnJhbWUoU3R5bGVS
ZXNvbHZlU3RhdGUmLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFN0eWxlS2V5ZnJhbWUqLCBL
ZXlmcmFtZVZhbHVlJik7CiAKIHB1YmxpYzoKICAgICAvLyBUaGVzZSBtZXRob2RzIHdpbGwgZ2l2
ZSBiYWNrIHRoZSBzZXQgb2YgcnVsZXMgdGhhdCBtYXRjaGVkIGZvciBhIGdpdmVuIGVsZW1lbnQg
KG9yIGEgcHNldWRvLWVsZW1lbnQpLgpAQCAtMjMxLDI1ICsyMjcsMjggQEAgcHVibGljOgogICAg
IHN0YXRpYyBpbnQgbGVnYWN5Rm9udFNpemUoRG9jdW1lbnQqLCBpbnQgcGl4ZWxGb250U2l6ZSwg
Ym9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplKTsKIAogcHVibGljOgorICAgIHZvaWQgYXBw
bHlQcm9wZXJ0eVdpdGhWYWx1ZUNoZWNraW5nKFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVy
dHlJRCwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIGFwcGx5Rm9udFByb3BlcnR5VG9TdHlsZShSZW5k
ZXJTdHlsZSogdGFyZ2V0LCBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiByZWZlcmVuY2UpOworI2lm
IDAKKyAgICAvLyBiYWQgbWV0aG9kcyAuLi4gSSB0aGluay4KICAgICB2b2lkIGFwcGx5UHJvcGVy
dHlUb1N0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgUmVuZGVyU3R5bGUqKTsKIAogICAg
IHZvaWQgYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVl
Kik7CisjZW5kaWYKIAotICAgIHZvaWQgdXBkYXRlRm9udCgpOwotICAgIHZvaWQgaW5pdGlhbGl6
ZUZvbnRTdHlsZShTZXR0aW5ncyopOworICAgIHZvaWQgdXBkYXRlRm9udChTdHlsZVJlc29sdmVT
dGF0ZSYpOworICAgIHZvaWQgaW5pdGlhbGl6ZUZvbnRTdHlsZShTdHlsZVJlc29sdmVTdGF0ZSYs
IFNldHRpbmdzKik7CiAKICAgICBzdGF0aWMgZmxvYXQgZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNp
ZmllZFNpemUoRG9jdW1lbnQqLCBmbG9hdCB6b29tRmFjdG9yLCBib29sIGlzQWJzb2x1dGVTaXpl
LCBmbG9hdCBzcGVjaWZpZWRTaXplLCBFU21hcnRNaW5pbXVtRm9yRm9udFNpemUgPSBVc2VTbWFy
dE1pbmltdW1Gb3JGb250Rml6ZSk7CiAKLSAgICB2b2lkIHNldEZvbnRTaXplKEZvbnREZXNjcmlw
dGlvbiYsIGZsb2F0IHNpemUpOworICAgIHN0YXRpYyB2b2lkIHNldEZvbnRTaXplKFN0eWxlUmVz
b2x2ZVN0YXRlJiwgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2l6ZSk7CiAKIHByaXZhdGU6CiAg
ICAgc3RhdGljIGZsb2F0IGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50
KiwgUmVuZGVyU3R5bGUqLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXpl
LCBib29sIHVzZVNWR1pvb21SdWxlcyk7CiAKIHB1YmxpYzoKLSAgICBib29sIHVzZVNWR1pvb21S
dWxlcygpOwotCiAgICAgc3RhdGljIGJvb2wgY29sb3JGcm9tUHJpbWl0aXZlVmFsdWVJc0Rlcml2
ZWRGcm9tRWxlbWVudChDU1NQcmltaXRpdmVWYWx1ZSopOwotICAgIENvbG9yIGNvbG9yRnJvbVBy
aW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiwgYm9vbCBmb3JWaXNpdGVkTGluayA9IGZh
bHNlKSBjb25zdDsKKyAgICBzdGF0aWMgQ29sb3IgY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoU3R5
bGVSZXNvbHZlU3RhdGUmLCBDU1NQcmltaXRpdmVWYWx1ZSosIGJvb2wgZm9yVmlzaXRlZExpbmsg
PSBmYWxzZSk7CiAKICAgICBib29sIGhhc1NlbGVjdG9yRm9ySWQoY29uc3QgQXRvbWljU3RyaW5n
JikgY29uc3Q7CiAgICAgYm9vbCBoYXNTZWxlY3RvckZvckNsYXNzKGNvbnN0IEF0b21pY1N0cmlu
ZyYpIGNvbnN0OwpAQCAtMjgxLDM0ICsyODAsMzQgQEAgcHVibGljOgogICAgIENTU1N0eWxlUnVs
ZSogZW5zdXJlRnVsbENTU09NV3JhcHBlckZvckluc3BlY3RvcihTdHlsZVJ1bGUqKTsKIAogI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBib29sIGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NT
VmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBpblN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0
eWxlLCBGaWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKTsKKyAgICBib29sIGNyZWF0ZUZp
bHRlck9wZXJhdGlvbnMoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NWYWx1ZSogaW5WYWx1ZSwgUmVu
ZGVyU3R5bGUqIGluU3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIEZpbHRlck9wZXJhdGlv
bnMmIG91dE9wZXJhdGlvbnMpOwogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBTdHlsZVNo
YWRlciogc3R5bGVTaGFkZXIoQ1NTVmFsdWUqKTsKLSAgICBTdHlsZVNoYWRlciogY2FjaGVkT3JQ
ZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NTU2hhZGVyVmFsdWUqKTsKLSAgICBi
b29sIHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChDU1NWYWx1ZSosIEN1c3RvbUZpbHRl
clBhcmFtZXRlckxpc3QmKTsKLSAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4g
cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZSop
OworICAgIFN0eWxlU2hhZGVyKiBzdHlsZVNoYWRlcihTdHlsZVJlc29sdmVTdGF0ZSYsIENTU1Zh
bHVlKik7CisgICAgU3R5bGVTaGFkZXIqIGNhY2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZh
bHVlKFN0eWxlUmVzb2x2ZVN0YXRlJiwgV2ViS2l0Q1NTU2hhZGVyVmFsdWUqKTsKKyAgICBib29s
IHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChTdHlsZVJlc29sdmVTdGF0ZSYsIENTU1Zh
bHVlKiwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYpOworICAgIFBhc3NSZWZQdHI8Q3VzdG9t
RmlsdGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihTdHlsZVJlc29sdmVT
dGF0ZSYsIGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWUqKTsKICAgICBQYXNzUmVmUHRyPEN1
c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyc2VDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlcihjb25z
dCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlTGlzdCopOwogICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmls
dGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlcihjb25zdCBTdHJp
bmcmIG5hbWUsIENTU1ZhbHVlTGlzdCopOwotICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFy
YW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcihjb25zdCBTdHJpbmcm
IG5hbWUsIENTU1ZhbHVlTGlzdCopOwotICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0
aW9uPiBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oV2ViS2l0Q1NTRmlsdGVyVmFsdWUqKTsK
LSAgICB2b2lkIGxvYWRQZW5kaW5nU2hhZGVycygpOworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmls
dGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcihTdHlsZVJl
c29sdmVTdGF0ZSYsIGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0Kik7CisgICAgUGFz
c1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlv
bihTdHlsZVJlc29sdmVTdGF0ZSYsIFdlYktpdENTU0ZpbHRlclZhbHVlKik7CisgICAgdm9pZCBs
b2FkUGVuZGluZ1NoYWRlcnMoU3R5bGVSZXNvbHZlU3RhdGUmKTsKICNlbmRpZgogI2lmIEVOQUJM
RShTVkcpCi0gICAgdm9pZCBsb2FkUGVuZGluZ1NWR0RvY3VtZW50cygpOworICAgIHZvaWQgbG9h
ZFBlbmRpbmdTVkdEb2N1bWVudHMoU3R5bGVSZXNvbHZlU3RhdGUmKTsKICNlbmRpZgogI2VuZGlm
IC8vIEVOQUJMRShDU1NfRklMVEVSUykKIAotICAgIHZvaWQgbG9hZFBlbmRpbmdSZXNvdXJjZXMo
KTsKKyAgICB2b2lkIGxvYWRQZW5kaW5nUmVzb3VyY2VzKFN0eWxlUmVzb2x2ZVN0YXRlJik7CiAK
IHByaXZhdGU6CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBmaXhlcyB1cCB0aGUgZGVmYXVsdCBmb250
IHNpemUgaWYgaXQgZGV0ZWN0cyB0aGF0IHRoZSBjdXJyZW50IGdlbmVyaWMgZm9udCBmYW1pbHkg
aGFzIGNoYW5nZWQuIC1kd2gKLSAgICB2b2lkIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShS
ZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7Ci0gICAgdm9pZCBjaGVja0Zv
clpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwotICAg
IHZvaWQgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgpOworICAgIHZvaWQgY2hlY2tGb3JHZW5lcmlj
RmFtaWx5Q2hhbmdlKFN0eWxlUmVzb2x2ZVN0YXRlJiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUpOworICAgIHZvaWQgY2hlY2tGb3Jab29tQ2hhbmdlKFN0eWxlUmVzb2x2
ZVN0YXRlJiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAgIHZv
aWQgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdChSZW5kZXJTdHlsZSopOwogCi0gICAgdm9pZCBhZGp1
c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGVUb0FkanVzdCwgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlLCBFbGVtZW50Kik7CisgICAgdm9pZCBhZGp1c3RSZW5kZXJTdHlsZShTdHlsZVJl
c29sdmVTdGF0ZSYsIFJlbmRlclN0eWxlKiBzdHlsZVRvQWRqdXN0LCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUsIEVsZW1lbnQqKTsKIAotICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29uc3QgUnVs
ZURhdGEqIHJ1bGUpIHsgbV9tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOyB9CisgICAgdm9pZCBh
ZGRNYXRjaGVkUnVsZShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIGNvbnN0IFJ1bGVEYXRhKiBy
dWxlKSB7IHN0YXRlLm1hdGNoZWRSdWxlcygpLmFwcGVuZChydWxlKTsgfQogCiAgICAgc3RydWN0
IE1hdGNoUmFuZ2VzIHsKICAgICAgICAgTWF0Y2hSYW5nZXMoKSA6IGZpcnN0VUFSdWxlKC0xKSwg
bGFzdFVBUnVsZSgtMSksIGZpcnN0QXV0aG9yUnVsZSgtMSksIGxhc3RBdXRob3JSdWxlKC0xKSwg
Zmlyc3RVc2VyUnVsZSgtMSksIGxhc3RVc2VyUnVsZSgtMSkgeyB9CkBAIC0zNDMsMzggKzM0Miwy
OCBAQCBwcml2YXRlOgogICAgICAgICBib29sIGlzQ2FjaGVhYmxlOwogICAgIH07CiAKLSAgICBz
dHJ1Y3QgTWF0Y2hSZXF1ZXN0IHsKLSAgICAgICAgTWF0Y2hSZXF1ZXN0KFJ1bGVTZXQqIHJ1bGVT
ZXQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMgPSBmYWxzZSwgY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGUgPSAwKQotICAgICAgICAgICAgOiBydWxlU2V0KHJ1bGVTZXQpCi0gICAgICAgICAgICAs
IGluY2x1ZGVFbXB0eVJ1bGVzKGluY2x1ZGVFbXB0eVJ1bGVzKQotICAgICAgICAgICAgLCBzY29w
ZShzY29wZSkgeyB9Ci0gICAgICAgIGNvbnN0IFJ1bGVTZXQqIHJ1bGVTZXQ7Ci0gICAgICAgIGNv
bnN0IGJvb2wgaW5jbHVkZUVtcHR5UnVsZXM7Ci0gICAgICAgIGNvbnN0IENvbnRhaW5lck5vZGUq
IHNjb3BlOwotICAgIH07Ci0KICAgICBzdGF0aWMgdm9pZCBhZGRNYXRjaGVkUHJvcGVydGllcyhN
YXRjaFJlc3VsdCYsIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVs
ZSogPSAwLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFs
bCwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlID0gUHJvcGVydHlXaGl0ZWxpc3ROb25lKTsKICAgICB2
b2lkIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMoTWF0Y2hSZXN1bHQmLCBjb25zdCBTdHlsZVBy
b3BlcnR5U2V0KiwgYm9vbCBpc0NhY2hlYWJsZSA9IHRydWUpOwogCi0gICAgdm9pZCBtYXRjaEFs
bFJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZXMpOwotICAgIHZv
aWQgbWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0Jik7Ci0gICAgdm9pZCBtYXRjaFVBUnVsZXMoTWF0
Y2hSZXN1bHQmLCBSdWxlU2V0Kik7Ci0gICAgdm9pZCBtYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVz
dWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgdm9pZCBtYXRjaFVzZXJSdWxlcyhN
YXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwotICAgIHZvaWQgbWF0Y2hTY29w
ZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwotICAg
IHZvaWQgbWF0Y2hIb3N0UnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVz
KTsKKyAgICB2b2lkIG1hdGNoQWxsUnVsZXMoU3R5bGVSZXNvbHZlU3RhdGUmIHJlcXVlc3QsIE1h
dGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZXMpOworICAgIHZvaWQgbWF0Y2hV
QVJ1bGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiwgTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIG1hdGNo
VUFSdWxlcyhTdHlsZVJlc29sdmVTdGF0ZSYsIE1hdGNoUmVzdWx0JiwgUnVsZVNldCopOworICAg
IHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhTdHlsZVJlc29sdmVTdGF0ZSYsIE1hdGNoUmVzdWx0Jik7
CisgICAgdm9pZCBtYXRjaFVzZXJSdWxlcyhTdHlsZVJlc29sdmVTdGF0ZSYsIE1hdGNoUmVzdWx0
Jik7CisgICAgdm9pZCBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiwg
TWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIG1hdGNoSG9zdFJ1bGVzKFN0eWxlUmVzb2x2ZVN0YXRl
JiwgTWF0Y2hSZXN1bHQmKTsKIAotICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXMoY29uc3Qg
TWF0Y2hSZXF1ZXN0JiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4KTsK
LSAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKGNvbnN0IE1hdGNoUmVxdWVz
dCYsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCk7Ci0gICAgdm9pZCBj
b2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGNvbnN0
IE1hdGNoUmVxdWVzdCYsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCk7
CisgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiwgU3R5bGVSZXNvbHZlU3Rh
dGUmLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IENvbnRh
aW5lck5vZGUqIHNjb3BlID0gMCk7CisgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJl
Z2lvbihSdWxlU2V0KiwgU3R5bGVSZXNvbHZlU3RhdGUmLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBp
bnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0gMCk7CisgICAg
dm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPios
IFN0eWxlUmVzb2x2ZVN0YXRlJiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUlu
ZGV4LCBjb25zdCBDb250YWluZXJOb2RlKik7CiAKICAgICBib29sIGZhc3RSZWplY3RTZWxlY3Rv
cihjb25zdCBSdWxlRGF0YSYpIGNvbnN0OwotICAgIHZvaWQgc29ydE1hdGNoZWRSdWxlcygpOwot
ICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0Jik7CisgICAg
dm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiYgbWF0Y2hl
ZFJ1bGVzKTsKKyAgICB2b2lkIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhTdHlsZVJlc29s
dmVTdGF0ZSYsIE1hdGNoUmVzdWx0Jik7CiAKLSAgICBib29sIHJ1bGVNYXRjaGVzKGNvbnN0IFJ1
bGVEYXRhJiwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpOworICAgIGJvb2wgcnVsZU1hdGNo
ZXMoU3R5bGVSZXNvbHZlU3RhdGUmLCBjb25zdCBSdWxlRGF0YSYsIGNvbnN0IENvbnRhaW5lck5v
ZGUqIHNjb3BlLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbyk7CiAgICAgYm9vbCBjaGVja1JlZ2lv
blNlbGVjdG9yKENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3RvciwgRWxlbWVudCogcmVnaW9uRWxl
bWVudCk7Ci0gICAgdm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0
JiwgY29uc3QgRWxlbWVudCopOworICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhTdHls
ZVJlc29sdmVTdGF0ZSYsIGNvbnN0IE1hdGNoUmVzdWx0JiwgY29uc3QgRWxlbWVudCopOwogICAg
IGVudW0gU3R5bGVBcHBsaWNhdGlvblBhc3MgewogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQog
ICAgICAgICBWYXJpYWJsZURlZmluaXRpb25zLApAQCAtMzgzLDExICszNzIsMTEgQEAgcHJpdmF0
ZToKICAgICAgICAgTG93UHJpb3JpdHlQcm9wZXJ0aWVzCiAgICAgfTsKICAgICB0ZW1wbGF0ZSA8
U3R5bGVBcHBsaWNhdGlvblBhc3MgcGFzcz4KLSAgICB2b2lkIGFwcGx5TWF0Y2hlZFByb3BlcnRp
ZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBib29sIGltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGlu
dCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5KTsKKyAgICB2b2lkIGFwcGx5TWF0Y2hlZFBy
b3BlcnRpZXMoU3R5bGVSZXNvbHZlU3RhdGUmLCBjb25zdCBNYXRjaFJlc3VsdCYsIGJvb2wgaW1w
b3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkp
OwogICAgIHRlbXBsYXRlIDxTdHlsZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgotICAgIHZvaWQgYXBw
bHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVs
ZSosIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJvcGVydHlXaGl0ZWxp
c3RUeXBlID0gUHJvcGVydHlXaGl0ZWxpc3ROb25lKTsKKyAgICB2b2lkIGFwcGx5UHJvcGVydGll
cyhTdHlsZVJlc29sdmVTdGF0ZSYsIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMs
IFN0eWxlUnVsZSosIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJvcGVy
dHlXaGl0ZWxpc3RUeXBlID0gUHJvcGVydHlXaGl0ZWxpc3ROb25lKTsKICNpZiBFTkFCTEUoQ1NT
X1ZBUklBQkxFUykKLSAgICB2b2lkIHJlc29sdmVWYXJpYWJsZXMoQ1NTUHJvcGVydHlJRCwgQ1NT
VmFsdWUqLCBWZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiYga25vd25F
eHByZXNzaW9ucyk7CisgICAgdm9pZCByZXNvbHZlVmFyaWFibGVzKFN0eWxlUmVzb2x2ZVN0YXRl
JiwgQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBWZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5
SUQsIFN0cmluZz4gPiYga25vd25FeHByZXNzaW9ucyk7CiAjZW5kaWYKICAgICBzdGF0aWMgYm9v
bCBpc1ZhbGlkUmVnaW9uU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsKICNpZiBFTkFCTEUo
VklERU9fVFJBQ0spCkBAIC0zOTcsOCArMzg2LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIG1hdGNo
UGFnZVJ1bGVzRm9yTGlzdChWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBtYXRjaGVkUnVsZXMsIGNv
bnN0IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJz
dFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwogICAgIFNldHRpbmdzKiBkb2N1bWVudFNl
dHRpbmdzKCkgeyByZXR1cm4gbV9kb2N1bWVudC0+c2V0dGluZ3MoKTsgfQogCi0gICAgYm9vbCBp
c0xlZnRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OwotICAgIGJvb2wgaXNSaWdodFBhZ2UoaW50
IHBhZ2VJbmRleCkgY29uc3QgeyByZXR1cm4gIWlzTGVmdFBhZ2UocGFnZUluZGV4KTsgfQorICAg
IGJvb2wgaXNMZWZ0UGFnZShSZW5kZXJTdHlsZSosIGludCBwYWdlSW5kZXgpIGNvbnN0OworICAg
IGJvb2wgaXNSaWdodFBhZ2UoUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUsIGludCBwYWdl
SW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0xlZnRQYWdlKHJvb3RFbGVtZW50U3R5bGUsIHBhZ2VJ
bmRleCk7IH0KICAgICBib29sIGlzRmlyc3RQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OwogICAg
IFN0cmluZyBwYWdlTmFtZShpbnQgcGFnZUluZGV4KSBjb25zdDsKIApAQCAtNDA5LDMzICszOTgs
MjMgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8UnVsZVNldD4gbV9zaWJsaW5nUnVsZVNldDsKICAg
ICBPd25QdHI8UnVsZVNldD4gbV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQ7CiAKLSAgICBib29s
IG1faGFzVUFBcHBlYXJhbmNlOwotICAgIEJvcmRlckRhdGEgbV9ib3JkZXJEYXRhOwotICAgIEZp
bGxMYXllciBtX2JhY2tncm91bmREYXRhOwotICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOwot
CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBSZWZQdHI8U3R5bGVSdWxl
S2V5ZnJhbWVzPiA+IEtleWZyYW1lc1J1bGVNYXA7CiAgICAgS2V5ZnJhbWVzUnVsZU1hcCBtX2tl
eWZyYW1lc1J1bGVNYXA7CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxl
Tm90WWV0QXZhaWxhYmxlKCkgeyByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsgfQogCi0g
ICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1Zh
bHVlKik7Ci0gICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBjYWNoZWRPclBlbmRpbmdGcm9tVmFs
dWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VWYWx1ZSopOwotICAgIFBhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdl
R2VuZXJhdG9yVmFsdWUqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzdHls
ZUltYWdlKFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUo
U3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVZhbHVlKik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVl
KFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZSopOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQotICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFn
ZT4gc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdlU2V0VmFsdWUq
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzZXRPclBlbmRpbmdGcm9tVmFs
dWUoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVNldFZhbHVlKik7
CiAjZW5kaWYKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGN1cnNvck9yUGVuZGluZ0Zyb21W
YWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NDdXJzb3JJbWFnZVZhbHVlKik7Ci0KLSAgICBib29sIGFw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlOyB9Ci0gICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOyB9
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gY3Vyc29yT3JQZW5kaW5nRnJvbVZh
bHVlKFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZSopOwogCiAgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9JbnRMZW5ndGgoQ1NTUHJpbWl0aXZl
VmFsdWUqLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0
aXBsaWVyID0gMSk7CiAgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9GbG9hdExlbmd0aChDU1NQ
cmltaXRpdmVWYWx1ZSosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91
YmxlIG11bHRpcGxpZXIgPSAxKTsKIAotICAgIENTU1RvU3R5bGVNYXAqIHN0eWxlTWFwKCkgeyBy
ZXR1cm4gJm1fc3R5bGVNYXA7IH0KLQogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5
T2JqZWN0SW5mbyopIGNvbnN0OwogICAgIAogcHJpdmF0ZToKQEAgLTQ0MywxOSArNDIyLDE5IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoY29u
c3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+JiwgUnVsZVNldCYgdXNlclN0eWxlKTsK
IAotICAgIHZvaWQgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CisgICAgdm9pZCBjYWNoZUJv
cmRlckFuZEJhY2tncm91bmQoU3R5bGVSZXNvbHZlU3RhdGUmLCBSZW5kZXJTdHlsZSopOwogCiBw
cml2YXRlOgotICAgIGJvb2wgY2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKFN0eWxlZEVsZW1lbnQq
KSBjb25zdDsKKyAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChFbGVtZW50KiwgU3R5
bGVkRWxlbWVudCopIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
SUQsIENTU1ZhbHVlKik7CisgICAgdm9pZCBhcHBseVByb3BlcnR5KFN0eWxlUmVzb2x2ZVN0YXRl
JiwgQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKIAogI2lmIEVOQUJMRShTVkcpCi0gICAgdm9p
ZCBhcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CisgICAgdm9pZCBh
cHBseVNWR1Byb3BlcnR5KFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTVmFs
dWUqKTsKICNlbmRpZgogCiAgICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBsb2FkUGVuZGluZ0lt
YWdlKFN0eWxlUGVuZGluZ0ltYWdlKik7Ci0gICAgdm9pZCBsb2FkUGVuZGluZ0ltYWdlcygpOwor
ICAgIHZvaWQgbG9hZFBlbmRpbmdJbWFnZXMoU3R5bGVSZXNvbHZlU3RhdGUmKTsKIAogICAgIHN0
YXRpYyB1bnNpZ25lZCBjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKGNvbnN0IE1hdGNoZWRQ
cm9wZXJ0aWVzKiwgdW5zaWduZWQgc2l6ZSk7CiAgICAgc3RydWN0IE1hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGVJdGVtIHsKQEAgLTQ3Myw3ICs0NTIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3dlZXBN
YXRjaGVkUHJvcGVydGllc0NhY2hlKFRpbWVyPFN0eWxlUmVzb2x2ZXI+Kik7CiAKICAgICBib29s
IGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMoY29uc3QgU3BhY2VTcGxpdFN0cmluZyYpIGNvbnN0
OwotICAgIGJvb2wgc2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0
cmlidXRlcyhTdHlsZWRFbGVtZW50KikgY29uc3Q7CisgICAgYm9vbCBzaGFyaW5nQ2FuZGlkYXRl
SGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiwg
RWxlbWVudCosIFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKIAogICAgIHVuc2lnbmVkIG1fbWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwOwogCkBAIC00ODIsMzkgKzQ2
MSwxMyBAQCBwcml2YXRlOgogCiAgICAgVGltZXI8U3R5bGVSZXNvbHZlcj4gbV9tYXRjaGVkUHJv
cGVydGllc0NhY2hlU3dlZXBUaW1lcjsKIAotICAgIC8vIEEgYnVmZmVyIHVzZWQgdG8gaG9sZCB0
aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgZm9yIGFuIGVsZW1lbnQsIGFuZCBhIHRlbXBvcmFyeSBi
dWZmZXIgdXNlZCBmb3IKLSAgICAvLyBtZXJnZSBzb3J0aW5nLgotICAgIFZlY3Rvcjxjb25zdCBS
dWxlRGF0YSosIDMyPiBtX21hdGNoZWRSdWxlczsKLQotICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxl
TGlzdD4gbV9ydWxlTGlzdDsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NQcm9wZXJ0eUlELCBS
ZWZQdHI8Q1NTVmFsdWU+ID4gUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA7Ci0gICAgUGVuZGluZ0lt
YWdlUHJvcGVydHlNYXAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzOwotCiAgICAgT3duUHRyPE1l
ZGlhUXVlcnlFdmFsdWF0b3I+IG1fbWVkaXVtOwogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9y
b290RGVmYXVsdFN0eWxlOwogCi0gICAgUHNldWRvSWQgbV9keW5hbWljUHNldWRvOwotICAgIFBz
ZXVkb0lkIG1fcHNldWRvU3R5bGU7Ci0KICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKLSAgICBT
ZWxlY3RvckNoZWNrZXIgbV9zZWxlY3RvckNoZWNrZXI7CiAgICAgU2VsZWN0b3JGaWx0ZXIgbV9z
ZWxlY3RvckZpbHRlcjsKIAotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKLSAgICBS
ZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZTsKLSAgICBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVu
dFN0eWxlOwotICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKLSAgICBTdHlsZWRFbGVtZW50KiBtX3N0
eWxlZEVsZW1lbnQ7Ci0gICAgUmVuZGVyUmVnaW9uKiBtX3JlZ2lvbkZvclN0eWxpbmc7Ci0gICAg
RUluc2lkZUxpbmsgbV9lbGVtZW50TGlua1N0YXRlOwotICAgIGJvb2wgbV9lbGVtZW50QWZmZWN0
ZWRCeUNsYXNzUnVsZXM7Ci0gICAgQ29udGFpbmVyTm9kZSogbV9wYXJlbnROb2RlOwotICAgIENT
U1ZhbHVlKiBtX2xpbmVIZWlnaHRWYWx1ZTsKLSAgICBib29sIG1fZm9udERpcnR5OwogICAgIGJv
b2wgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXM7Ci0gICAgYm9vbCBtX3NhbWVPcmlnaW5Pbmx5
OwotICAgIGJvb2wgbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQ7CiAKICAgICBSZWZQdHI8
Q1NTRm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKICAgICBWZWN0b3I8T3duUHRyPE1lZGlh
UXVlcnlSZXN1bHQ+ID4gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzOwpAQCAt
NTIzLDIzICs0NzYsMTIgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Vmlld3BvcnRTdHlsZVJlc29s
dmVyPiBtX3ZpZXdwb3J0U3R5bGVSZXNvbHZlcjsKICNlbmRpZgogCi0gICAgYm9vbCBtX2FwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsKLSAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRl
ZExpbmtTdHlsZTsKICAgICBjb25zdCBTdHlsZUJ1aWxkZXImIG1fc3R5bGVCdWlsZGVyOwogICAg
IAogICAgIEhhc2hNYXA8U3R5bGVSdWxlKiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiBtX3N0eWxl
UnVsZVRvQ1NTT01XcmFwcGVyTWFwOwogICAgIEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hlZXQ+
ID4gbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0OwogCi0jaWYgRU5BQkxFKENTU19TSEFERVJT
KQotICAgIGJvb2wgbV9oYXNQZW5kaW5nU2hhZGVyczsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKENT
U19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQotICAgIEhhc2hNYXA8RmlsdGVyT3BlcmF0aW9uKiwg
UmVmUHRyPFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWU+ID4gbV9wZW5kaW5nU1ZHRG9jdW1lbnRz
OwotI2VuZGlmCi0KICAgICBPd25QdHI8U3R5bGVTY29wZVJlc29sdmVyPiBtX3Njb3BlUmVzb2x2
ZXI7Ci0gICAgQ1NTVG9TdHlsZU1hcCBtX3N0eWxlTWFwOwogCiAgICAgZnJpZW5kIGNsYXNzIFN0
eWxlQnVpbGRlcjsKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1hdGNoZWRQcm9w
ZXJ0aWVzJiwgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxl
bWVudC5oCmluZGV4IGU0MWFhZWY0YTFlYjUwOGU4YjU2M2FhODViYmVmZjM5ODMyOTBlN2QuLmY1
ODQwMmZhOWZhZDNiMjFmNzBiMWRlYmE4Mzg1YmY5Y2U4YmU1MTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0
eWxlZEVsZW1lbnQuaApAQCAtOTksNiArOTksMTggQEAgaW5saW5lIGNvbnN0IFN0eWxlUHJvcGVy
dHlTZXQqIFN0eWxlZEVsZW1lbnQ6OnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkKICAgICBy
ZXR1cm4gYXR0cmlidXRlRGF0YSgpLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpOwogfQog
CitpbmxpbmUgU3R5bGVkRWxlbWVudCogdG9TdHlsZWRFbGVtZW50KE5vZGUqIG5vZGUpCit7Cisg
ICAgQVNTRVJUKCFub2RlIHx8IG5vZGUtPmlzU3R5bGVkRWxlbWVudCgpKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpOworfQorCitpbmxpbmUgY29uc3QgU3R5
bGVkRWxlbWVudCogdG9TdHlsZWRFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgQVNT
RVJUKCFub2RlIHx8IG5vZGUtPmlzU3R5bGVkRWxlbWVudCgpKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgU3R5bGVkRWxlbWVudCo+KG5vZGUpOworfQorCiB9IC8vbmFtZXNwYWNlCiAK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAKaW5kZXggNzA5OGYwMTJkYjcyYzQ1NTBiNGY2NzA5MDgzOGNl
Y2M5ZTE4YmM0Ni4uN2I4MzQxNGYzODE5ZTFlNjIxMzM2ZmZkZDRjNGNmNDg2ZWNiY2JkMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwCkBAIC0yMTQ0LDE5ICsyMTQ0LDkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnNldEZvbnQoY29uc3QgU3RyaW5nJiBuZXdGb250KQogCiAgICAgLy8gTm93IG1h
cCB0aGUgZm9udCBwcm9wZXJ0eSBsb25naGFuZHMgaW50byB0aGUgc3R5bGUuCiAgICAgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciA9IGNhbnZhcygpLT5zdHlsZVJlc29sdmVyKCk7Ci0gICAg
c3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlGb250RmFtaWx5
LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkp
LmdldCgpLCBuZXdTdHlsZS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0
eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFN0eWxlLCBwYXJzZWRTdHlsZS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSkuZ2V0KCkpOwotICAgIHN0eWxlUmVz
b2x2ZXItPmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50
LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50
KS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxl
KENTU1Byb3BlcnR5Rm9udFdlaWdodCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTUHJvcGVydHlGb250V2VpZ2h0KS5nZXQoKSk7Ci0KLSAgICAvLyBBcyBkZXNjcmliZWQgaW4g
QlVHNjYyOTEsIHNldHRpbmcgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdodCBvbiBhIGZvbnQgbWF5
IGVudGFpbCBhIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoRG91YmxlIGNhbGwsCi0g
ICAgLy8gd2hpY2ggYXNzdW1lcyB0aGUgZm9udE1ldHJpY3MgYXJlIGF2YWlsYWJsZSBmb3IgdGhl
IGFmZmVjdGVkIGZvbnQsIG90aGVyd2lzZSBhIGNyYXNoIG9jY3VycyAoc2VlIGh0dHA6Ly90cmFj
LndlYmtpdC5vcmcvY2hhbmdlc2V0Lzk2MTIyKS4KLSAgICAvLyBUaGUgdXBkYXRlRm9udCgpIGNh
bGxzIGJlbG93IHVwZGF0ZSB0aGUgZm9udE1ldHJpY3MgYW5kIGVuc3VyZSB0aGUgcHJvcGVyIHNl
dHRpbmcgb2YgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdodC4KLSAgICBzdHlsZVJlc29sdmVyLT51
cGRhdGVGb250KCk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0
eWxlKENTU1Byb3BlcnR5Rm9udFNpemUsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KENTU1Byb3BlcnR5Rm9udFNpemUpLmdldCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLT51cGRhdGVG
b250KCk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENT
U1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NT
UHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQoKSk7CisgICAgc3R5bGVSZXNvbHZlci0+YXBwbHlGb250
UHJvcGVydHlUb1N0eWxlKG5ld1N0eWxlLmdldCgpLCBwYXJzZWRTdHlsZS5nZXQoKSk7CiAKKyAg
ICAvLyBvawogICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fZm9udCA9IG5ld1N0eWxlLT5mb250KCk7
CiAgICAgbW9kaWZpYWJsZVN0YXRlKCkubV9mb250LnVwZGF0ZShzdHlsZVJlc29sdmVyLT5mb250
U2VsZWN0b3IoKSk7CiAgICAgbW9kaWZpYWJsZVN0YXRlKCkubV9yZWFsaXplZEZvbnQgPSB0cnVl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAppbmRleCBk
MDlhNTUxNWQ4MzA1Y2U3YWU2MDhhOTBkZjdmODg0ZjQ1ZDRlNTBkLi43M2E3MzVlODBjODcwYzE4
ZjE4NjJjMWYwNzU2ZjRiZTJkNGY3MmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuaApAQCAtMTMwLDYgKzEzMCw3IEBAIGNsYXNzIFJlbmRlclN0eWxl
OiBwdWJsaWMgUmVmQ291bnRlZDxSZW5kZXJTdHlsZT4gewogICAgIGZyaWVuZCBjbGFzcyBSZW5k
ZXJTVkdSZXNvdXJjZTsgLy8gRklYTUU6IE5lZWRzIHRvIGFsdGVyIHRoZSB2aXNpdGVkIHN0YXRl
IGJ5IGhhbmQuIFNob3VsZCBjbGVhbiB0aGUgU1ZHIGNvZGUgdXAgYW5kIG1vdmUgaXQgaW50byBS
ZW5kZXJTdHlsZSBwZXJoYXBzLgogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJUcmVlQXNUZXh0OyAv
LyBGSVhNRTogT25seSBuZWVkZWQgc28gdGhlIHJlbmRlciB0cmVlIGNhbiBrZWVwIGx5aW5nIGFu
ZCBkdW1wIHRoZSB3cm9uZyBjb2xvcnMuICBSZWJhc2VsaW5pbmcgd291bGQgYWxsb3cgdGhpcyB0
byBiZSB5YW5rZWQuCiAgICAgZnJpZW5kIGNsYXNzIFN0eWxlQnVpbGRlcjsgLy8gU2V0cyBtZW1i
ZXJzIGRpcmVjdGx5LgorICAgIGZyaWVuZCBjbGFzcyBTdHlsZVJlc29sdmVTdGF0ZTsgLy8gU2V0
cyBtZW1iZXJzIGRpcmVjdGx5LgogICAgIGZyaWVuZCBjbGFzcyBTdHlsZVJlc29sdmVyOyAvLyBT
ZXRzIG1lbWJlcnMgZGlyZWN0bHkuCiBwcm90ZWN0ZWQ6CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184684</attachid>
            <date>2013-01-25 00:08:55 -0800</date>
            <delta_ts>2013-01-25 01:16:59 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-96421-20130125170546.patch</filename>
            <type>text/plain</type>
            <size>358091</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGIyMjYzZjgwZWQ0N2I3
ZDVlOWFlMzgyYWFjNDZkNGM5NjEzNGZlMi4uMDM3YmFmYjczOWNkYWIzMmY2NTVmYmFjN2JiYWYz
YmUwOTA4OTdkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwNyBAQAorMjAxMy0wMS0yNCAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgU3BsaXQgcGVyLXJl
c29sdmUgbG9naWMgb3V0IGZyb20gU3R5bGVSZXNvbHZlci4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NDIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50ZWQgY2xhc3MgU3R5bGVSZXNvbHZl
U3RhdGUgYW5kIG1vdmVkIGFsbCBtZW1iZXIgdmFyaWFibGVzCisgICAgICAgIHVzZWQgb25seSBm
b3IgcGVyLXJlc29sdmUgbG9naWMuCisgICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgdG8g
ZW5hYmxlIFN0eWxlUmVzb2x2ZXIgdG8gcmVzb2x2ZSBzdHlsZXMgb2YKKyAgICAgICAgbXVsdGlw
bGUgZWxlbWVudHMgaW4gcGFyYWxsZWwuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNhdXNl
IGp1c3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICBBZGRl
ZCBTdHlsZVJlc29sdmVTdGF0ZS5oLgorICAgICAgICAqIGNzcy9CYXNpY1NoYXBlRnVuY3Rpb25z
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0xlbmd0aCk6CisgICAgICAgIChXZWJD
b3JlOjpiYXNpY1NoYXBlRm9yVmFsdWUpOgorICAgICAgICAqIGNzcy9CYXNpY1NoYXBlRnVuY3Rp
b25zLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhT
dHlsZXNSZXNvbHZlZCk6CisgICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFsdWUuaDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoQ1NTR3JhZGllbnRWYWx1ZSk6CisgICAgICAgICogY3Nz
L0NTU1RvU3R5bGVNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFw
RmlsbEF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmls
bENsaXApOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbENvbXBvc2l0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBGaWxsT3JpZ2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjptYXBGaWxsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFw
OjptYXBGaWxsWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6Om1h
cEZpbGxZUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwTmlu
ZVBpZWNlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwTmluZVBp
ZWNlSW1hZ2VTbGljZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBOaW5l
UGllY2VJbWFnZVF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwTmlu
ZVBpZWNlSW1hZ2VSZXBlYXQpOgorICAgICAgICAqIGNzcy9DU1NUb1N0eWxlTWFwLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKENTU1RvU3R5bGVNYXApOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVG9TdHlsZU1hcDo6Q1NTVG9TdHlsZU1hcCk6CisgICAgICAgICogY3NzL1NWR0NTU1N0
eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlT
VkdQcm9wZXJ0eSk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hl
Y2thYmxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjptYXRj
aGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrKToKKyAg
ICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChTZWxlY3RvckNoZWNrZXIp
OgorICAgICAgICAoV2ViQ29yZTo6aXNGcmFtZUZvY3VzZWQpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjptYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyk6CisgICAgICAgICog
Y3NzL1N0eWxlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RXhw
YW5kaW5nOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5RXhwYW5kaW5nOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5RXhwYW5kaW5nOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlEZWZhdWx0QmFzZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U6OmFwcGx5VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU51bWJlcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5U3R5bGVJbWFnZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5QXV0bzo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eUF1dG86OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlBdXRvOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlDbGlwOjpjb252ZXJ0VG9MZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUNsaXA6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlDbGlwOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5Q2xpcDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5Q29sb3I6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlDb2xvcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUNvbG9yOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlDb2xvcjo6YXBwbHlDb2xvclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlEaXJlY3Rpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUxlbmd0aDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5U3RyaW5nOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlC
b3JkZXJSYWRpdXM6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eUZpbGxMYXllcjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5Rm9udDo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUZvbnQ6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlGb250OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlGb250U2l6ZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFNpemU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRXZWlnaHQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzOjphcHBseUluaGVyaXRWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVyZXM6
OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250
VmFyaWFudExpZ2F0dXJlczo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5Qm9yZGVySW1hZ2U6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyOjphcHBseUluaXRpYWxW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmll
cjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1h
Z2VTb3VyY2U6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNv
dW50ZXI6OmVtcHR5RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNv
dW50ZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlDb3VudGVyOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlD
dXJzb3I6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlDdXJzb3I6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJv
cGVydHlDdXJzb3I6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eVRleHRBbGlnbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
VGV4dERlY29yYXRpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eUxpbmVIZWlnaHQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eVBhZ2VTaXplOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5UGFnZVNpemU6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlQYWdlU2l6ZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5VGV4dEVtcGhhc2lzU3R5bGU6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RW1waGFzaXNTdHlsZTo6YXBwbHlJbml0aWFs
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRFbXBoYXNpc1N0eWxl
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eUFuaW1hdGlvbjo6bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlBbmltYXRpb246OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlBbmltYXRpb246OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlBbmltYXRpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6YXBwbHlJbml0aWFsVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6YXBwbHlWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5UmVzaXplOjphcHBseVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlWZXJ0aWNhbEFsaWduOjphcHBseVZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBc3BlY3RSYXRpbzo6YXBwbHlJbmhlcml0
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlvOjphcHBs
eUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QXNwZWN0UmF0
aW86OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVpvb206OnJl
c2V0RWZmZWN0aXZlWm9vbSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Wm9vbTo6
YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVpvb206
OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlab29t
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEaXNwbGF5Ojpp
c1ZhbGlkRGlzcGxheVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEaXNw
bGF5OjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
RGlzcGxheTo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eURpc3BsYXk6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eUNsaXBQYXRoOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlF
eGNsdXNpb25TaGFwZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5SW1hZ2VSZXNvbHV0aW9uOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5SW1hZ2VSZXNvbHV0aW9uOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5SW1hZ2VSZXNvbHV0aW9uOjphcHBseVZhbHVlKToK
KyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFByb3BlcnR5SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eUhhbmRsZXI6
OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5SGFuZGxlcjo6
YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlIYW5kbGVyOjph
cHBseVZhbHVlKToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlU3RhdGUuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFN0eWxlUmVzb2x2ZVN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpTdHlsZVJlc29sdmVTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlU3RhdGU6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZVN0YXRlOjpyb290RWxlbWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZVN0YXRlOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0
YXRlOjpzdHlsZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRl
Ojpkb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6cmVnaW9u
Rm9yU3R5bGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6bW9kZSk6
CisgICAgICAgIE1vdmVkIFN0eWxlUmVzb2x2ZXIncyBtb2RlIGZyb20gbV9zZWxlY3RvckNoZWNr
ZXIgdG8gU3R5bGVSZXNvbHZlU3RhdGUuCisgICAgICAgIFNvIHdlIGRvbid0IG5lZWQgdG8ga2Vl
cCBTZWxlY3RvckNoZWNrZXIgYXMgYSBtZW1iZXIgdmFyaWFibGUgb2YKKyAgICAgICAgU3R5bGVS
ZXNvbHZlci4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpwc2V1ZG9TdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6cGFyZW50Tm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6ZWxlbWVudExpbmtTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6ZGlzdHJpYnV0ZWRUb0luc2VydGlv
blBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRDYW5Vc2VG
YXN0UmVqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpjYW5Vc2VG
YXN0UmVqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0Um9vdEVsZW1lbnRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0RWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0RWxlbWVudExpbmtTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0UGFyZW50Tm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0UGFyZW50U3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNldERpc3RyaWJ1dGVkVG9JbnNl
cnRpb25Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0TW9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0UmVnaW9uRm9yU3R5
bGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0UHNldWRvU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OmZvbnREZXNjcmlwdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6cGFyZW50Rm9udERlc2Ny
aXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRGb250RGVz
Y3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNldFpvb20p
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNldEVmZmVjdGl2ZVpvb20p
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNldFRleHRTaXplQWRqdXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRXcml0aW5nTW9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0VGV4dE9yaWVudGF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRBcHBseVByb3BlcnR5
VG9SZWd1bGFyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNl
dEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlU3RhdGU6OmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6bWF0Y2hlZFJ1bGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRFbGVtZW50QWZmZWN0ZWRC
eUNsYXNzUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OmVsZW1l
bnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVT
dGF0ZTo6Y2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZVN0YXRlOjpwZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZVN0YXRlOjpwZW5kaW5nU1ZHRG9jdW1lbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRMaW5lSGVpZ2h0VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OmxpbmVIZWlnaHRWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6aGFzUGFyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0Rm9udERpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZVN0YXRlOjpmb250RGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlU3RhdGU6OmVuc3VyZVJ1bGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZVN0YXRlOjpydWxlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6
c2V0SGFzUGVuZGluZ1NoYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3Rh
dGU6Omhhc1BlbmRpbmdTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0
YXRlOjp1c2VTVkdab29tUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3Rh
dGU6Omhhc1VBQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0
ZTo6Ym9yZGVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6YmFj
a2dyb3VuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OmJhY2tn
cm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0SW5j
bHVkZUVtcHR5UnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNl
dFNhbWVPcmlnaW5Pbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpp
bmNsdWRlRW1wdHlSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6
c2FtZU9yaWdpbk9ubHkpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNv
bHZlcik6CisgICAgICAgIFNpbmNlIFN0eWxlUmVzb2x2ZVN0YXRlIHByb3ZpZGVzIGFsbCBpbmZv
cm1hdGlvbiwgbm8gbmVlZCB0byBoYXZlCisgICAgICAgIGFueSBpbnN0YW5jZSBvZiBDU1NUb1N0
eWxlTWFwIGFuZCBubyBuZWVkIHRvIG1ha2UgU2VsZWN0b3JDaGVja2VyCisgICAgICAgIGEgbWVt
YmVyIHZhcmlhYmxlIG9mIFN0eWxlUmVzb2x2ZXIuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9z
dFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzb3J0TWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6aW5pdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6aW5pdEZvclN0eWxlUmVzb2x2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2wpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxl
QWZmZWN0aW5nQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpj
YW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6ZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnN0eWxlRm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6a2V5
ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnN0eWxlRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpkZWZh
dWx0U3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFk
anVzdFJlbmRlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnVwZGF0
ZUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxl
c0ZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cnVsZU1hdGNo
ZXMpOgorICAgICAgICBtX2R5bmFtaWNQc2V1ZG8gaXMgdXNlZCBiZXR3ZWVuIHRoaXMgcnVsZU1h
dGNoZXMgYW5kCisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdC4gU28gYWRkZWQg
b25lIHBhcmFtZXRlciB0byByZXR1cm4KKyAgICAgICAgd2hhdCBkeW5hbWljIHBzZXVkbyBhbiBl
bGVtZW50IG1hdGNoZXMuIFJlbW92ZWQgbV9keW5hbWljUHNldWRvCisgICAgICAgIGZyb20gU3R5
bGVSZXNvbHZlci4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9u
U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6aXNMZWZ0UGFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5V2l0aFZhbHVlQ2hl
Y2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlGb250UHJvcGVy
dHlUb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0JyZWFkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR3JpZFRyYWNrTWluTWF4KToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUdyaWRUcmFja0dyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRU
cmFja0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlh
Ymxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdGcm9tVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVB
ZGp1c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3Jab29tQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0Zh
bWlseUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjppbml0aWFsaXpl
Rm9udFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9j
dW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ1N0eWxlU2hh
ZGVyRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5k
aW5nU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3Rv
bUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1Jlc291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3Nz
L1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6YWRkTWF0Y2hlZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6aXNSaWdodFBhZ2UpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjp0b1N0eWxlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisKIDIwMTMtMDEtMjIgIEpv
c2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbmRleGVkREI6IFJl
bW92ZSBJREJLZXkgZnJvbSBXZWJLaXRJREwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmlu
ZGV4IGZmYTM5YWE0MzNkNDM2NzgwZTEzZTliYTRlOTg1ZDViYTEyMTJiMTcuLjQ3YzNkMDMwN2Yw
ZTY2YzhjZDQyNDAxNWU4MTBiZDkyODE4YzYzMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQpAQCAtMjY2OCw2ICsyNjY4LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVQcm9wZXJ0eVNob3J0aGFuZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3Bl
cnR5U2hvcnRoYW5kLmggXAorCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVTdGF0ZS5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUu
Y3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCmluZGV4IDlhNDg5ZTUxZTNmOTM5ODFlODIxMTQzOTZlNWJkNWVlMzk5
ZGFkM2YuLmQ1NDZhNjVmMGFhYTBkNTBjNDMzMTJhZDgxNjU4ZjQzYjQ0NmFjODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQpAQCAtMTUyOCw2ICsxNTI4LDcgQEAgSEVBREVSUyArPSBcCiAgICAgY3NzL1N0eWxlSW52
YWxpZGF0aW9uQW5hbHlzaXMuaCBcCiAgICAgY3NzL1N0eWxlUHJvcGVydHlTZXQuaCBcCiAgICAg
Y3NzL1N0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCBcCisgICAgY3NzL1N0eWxlUmVzb2x2ZVN0YXRl
LmggXAogICAgIGNzcy9TdHlsZVJlc29sdmVyLmggXAogICAgIGNzcy9TdHlsZVJ1bGUuaCBcCiAg
ICAgY3NzL1N0eWxlUnVsZUltcG9ydC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhYzIzNjRjMTg3
MTNkNzk5YTEzZTNjNWVlOTU2NmRiZWI2ZmQ1Zjc0Li44NGQwYzE5YzgxN2Y5YzkwN2IzNTllYmFh
MTI2ZWJjOWJhZGU0YWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xNTg4LDYgKzE1ODgsNyBAQAog
ICAgICAgICAgICAgJ2Nzcy9TdHlsZVByb3BlcnR5U2V0LmgnLAogICAgICAgICAgICAgJ2Nzcy9T
dHlsZVByb3BlcnR5U2hvcnRoYW5kLmNwcCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlUHJvcGVy
dHlTaG9ydGhhbmQuaCcsCisgICAgICAgICAgICAnY3NzL1N0eWxlUmVzb2x2ZVN0YXRlLmgnLAog
ICAgICAgICAgICAgJ2Nzcy9TdHlsZVJlc29sdmVyLmNwcCcsCiAgICAgICAgICAgICAnY3NzL1N0
eWxlUmVzb2x2ZXIuaCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlUnVsZS5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwCmluZGV4IDNhOGY3OTUzYjZmOTZi
MDEyZjg0MzIzN2EyZTEyYTBmZGY0Y2IxMjEuLjFiMzU5OTllZTE5M2Q2NDQxZTg5Y2JiMDk0NGRm
NjgxZjU4ZWY2ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVu
Y3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5j
cHAKQEAgLTEwMCwxMiArMTAwLDEyIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlRm9yQmFz
aWNTaGFwZShjb25zdCBCYXNpY1NoYXBlKiBiYXNpY1NoYXBlKQogICAgIHJldHVybiBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZTxQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+ID4oYmFzaWNTaGFw
ZVZhbHVlLnJlbGVhc2UoKSk7CiB9CiAKLXN0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKGNv
bnN0IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1
ZSkKK3N0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0
ZSwgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlKQogewotICAgIHJldHVybiB2YWx1ZS0+Y29udmVy
dFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBGaXhlZEZsb2F0Q29udmVyc2lvbiB8
IFBlcmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4oc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAgIHJldHVybiB2YWx1ZS0+
Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBGaXhlZEZsb2F0Q29udmVy
c2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4o
c3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCkpOwogfQogCi1QYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVG
b3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NCYXNp
Y1NoYXBlKiBiYXNpY1NoYXBlVmFsdWUpCitQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hh
cGVGb3JWYWx1ZShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIGNvbnN0IENTU0Jhc2ljU2hhcGUq
IGJhc2ljU2hhcGVWYWx1ZSkKIHsKICAgICBSZWZQdHI8QmFzaWNTaGFwZT4gYmFzaWNTaGFwZTsK
IApAQCAtMTE0LDE0ICsxMTQsMTQgQEAgUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBl
Rm9yVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgY28KICAgICAgICAg
Y29uc3QgQ1NTQmFzaWNTaGFwZVJlY3RhbmdsZSogcmVjdFZhbHVlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQ1NTQmFzaWNTaGFwZVJlY3RhbmdsZSAqPihiYXNpY1NoYXBlVmFsdWUpOwogICAgICAgICBS
ZWZQdHI8QmFzaWNTaGFwZVJlY3RhbmdsZT4gcmVjdCA9IEJhc2ljU2hhcGVSZWN0YW5nbGU6OmNy
ZWF0ZSgpOwogCi0gICAgICAgIHJlY3QtPnNldFgoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2
ZXIsIHJlY3RWYWx1ZS0+eCgpKSk7Ci0gICAgICAgIHJlY3QtPnNldFkoY29udmVydFRvTGVuZ3Ro
KHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+eSgpKSk7Ci0gICAgICAgIHJlY3QtPnNldFdpZHRo
KGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0VmFsdWUtPndpZHRoKCkpKTsKLSAg
ICAgICAgcmVjdC0+c2V0SGVpZ2h0KGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0
VmFsdWUtPmhlaWdodCgpKSk7CisgICAgICAgIHJlY3QtPnNldFgoY29udmVydFRvTGVuZ3RoKHN0
YXRlLCByZWN0VmFsdWUtPngoKSkpOworICAgICAgICByZWN0LT5zZXRZKGNvbnZlcnRUb0xlbmd0
aChzdGF0ZSwgcmVjdFZhbHVlLT55KCkpKTsKKyAgICAgICAgcmVjdC0+c2V0V2lkdGgoY29udmVy
dFRvTGVuZ3RoKHN0YXRlLCByZWN0VmFsdWUtPndpZHRoKCkpKTsKKyAgICAgICAgcmVjdC0+c2V0
SGVpZ2h0KGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdFZhbHVlLT5oZWlnaHQoKSkpOwogICAg
ICAgICBpZiAocmVjdFZhbHVlLT5yYWRpdXNYKCkpIHsKLSAgICAgICAgICAgIHJlY3QtPnNldENv
cm5lclJhZGl1c1goY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+cmFk
aXVzWCgpKSk7CisgICAgICAgICAgICByZWN0LT5zZXRDb3JuZXJSYWRpdXNYKGNvbnZlcnRUb0xl
bmd0aChzdGF0ZSwgcmVjdFZhbHVlLT5yYWRpdXNYKCkpKTsKICAgICAgICAgICAgIGlmIChyZWN0
VmFsdWUtPnJhZGl1c1koKSkKLSAgICAgICAgICAgICAgICByZWN0LT5zZXRDb3JuZXJSYWRpdXNZ
KGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0VmFsdWUtPnJhZGl1c1koKSkpOwor
ICAgICAgICAgICAgICAgIHJlY3QtPnNldENvcm5lclJhZGl1c1koY29udmVydFRvTGVuZ3RoKHN0
YXRlLCByZWN0VmFsdWUtPnJhZGl1c1koKSkpOwogICAgICAgICB9CiAgICAgICAgIGJhc2ljU2hh
cGUgPSByZWN0LnJlbGVhc2UoKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMzAsOSArMTMwLDkgQEAg
UGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUoY29uc3QgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlciwgY28KICAgICAgICAgY29uc3QgQ1NTQmFzaWNTaGFwZUNpcmNs
ZSogY2lyY2xlVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBDU1NCYXNpY1NoYXBlQ2lyY2xlICo+
KGJhc2ljU2hhcGVWYWx1ZSk7CiAgICAgICAgIFJlZlB0cjxCYXNpY1NoYXBlQ2lyY2xlPiBjaXJj
bGUgPSBCYXNpY1NoYXBlQ2lyY2xlOjpjcmVhdGUoKTsKIAotICAgICAgICBjaXJjbGUtPnNldENl
bnRlclgoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIGNpcmNsZVZhbHVlLT5jZW50ZXJY
KCkpKTsKLSAgICAgICAgY2lyY2xlLT5zZXRDZW50ZXJZKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJl
c29sdmVyLCBjaXJjbGVWYWx1ZS0+Y2VudGVyWSgpKSk7Ci0gICAgICAgIGNpcmNsZS0+c2V0UmFk
aXVzKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBjaXJjbGVWYWx1ZS0+cmFkaXVzKCkp
KTsKKyAgICAgICAgY2lyY2xlLT5zZXRDZW50ZXJYKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgY2ly
Y2xlVmFsdWUtPmNlbnRlclgoKSkpOworICAgICAgICBjaXJjbGUtPnNldENlbnRlclkoY29udmVy
dFRvTGVuZ3RoKHN0YXRlLCBjaXJjbGVWYWx1ZS0+Y2VudGVyWSgpKSk7CisgICAgICAgIGNpcmNs
ZS0+c2V0UmFkaXVzKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgY2lyY2xlVmFsdWUtPnJhZGl1cygp
KSk7CiAKICAgICAgICAgYmFzaWNTaGFwZSA9IGNpcmNsZS5yZWxlYXNlKCk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtMTQxLDEwICsxNDEsMTAgQEAgUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1No
YXBlRm9yVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgY28KICAgICAg
ICAgY29uc3QgQ1NTQmFzaWNTaGFwZUVsbGlwc2UqIGVsbGlwc2VWYWx1ZSA9IHN0YXRpY19jYXN0
PGNvbnN0IENTU0Jhc2ljU2hhcGVFbGxpcHNlICo+KGJhc2ljU2hhcGVWYWx1ZSk7CiAgICAgICAg
IFJlZlB0cjxCYXNpY1NoYXBlRWxsaXBzZT4gZWxsaXBzZSA9IEJhc2ljU2hhcGVFbGxpcHNlOjpj
cmVhdGUoKTsKIAotICAgICAgICBlbGxpcHNlLT5zZXRDZW50ZXJYKGNvbnZlcnRUb0xlbmd0aChz
dHlsZVJlc29sdmVyLCBlbGxpcHNlVmFsdWUtPmNlbnRlclgoKSkpOwotICAgICAgICBlbGxpcHNl
LT5zZXRDZW50ZXJZKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBlbGxpcHNlVmFsdWUt
PmNlbnRlclkoKSkpOwotICAgICAgICBlbGxpcHNlLT5zZXRSYWRpdXNYKGNvbnZlcnRUb0xlbmd0
aChzdHlsZVJlc29sdmVyLCBlbGxpcHNlVmFsdWUtPnJhZGl1c1goKSkpOwotICAgICAgICBlbGxp
cHNlLT5zZXRSYWRpdXNZKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBlbGxpcHNlVmFs
dWUtPnJhZGl1c1koKSkpOworICAgICAgICBlbGxpcHNlLT5zZXRDZW50ZXJYKGNvbnZlcnRUb0xl
bmd0aChzdGF0ZSwgZWxsaXBzZVZhbHVlLT5jZW50ZXJYKCkpKTsKKyAgICAgICAgZWxsaXBzZS0+
c2V0Q2VudGVyWShjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIGVsbGlwc2VWYWx1ZS0+Y2VudGVyWSgp
KSk7CisgICAgICAgIGVsbGlwc2UtPnNldFJhZGl1c1goY29udmVydFRvTGVuZ3RoKHN0YXRlLCBl
bGxpcHNlVmFsdWUtPnJhZGl1c1goKSkpOworICAgICAgICBlbGxpcHNlLT5zZXRSYWRpdXNZKGNv
bnZlcnRUb0xlbmd0aChzdGF0ZSwgZWxsaXBzZVZhbHVlLT5yYWRpdXNZKCkpKTsKIAogICAgICAg
ICBiYXNpY1NoYXBlID0gZWxsaXBzZS5yZWxlYXNlKCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTU2
LDcgKzE1Niw3IEBAIFBhc3NSZWZQdHI8QmFzaWNTaGFwZT4gYmFzaWNTaGFwZUZvclZhbHVlKGNv
bnN0IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIGNvCiAgICAgICAgIHBvbHlnb24tPnNl
dFdpbmRSdWxlKHBvbHlnb25WYWx1ZS0+d2luZFJ1bGUoKSk7CiAgICAgICAgIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+ID4mIHZhbHVlcyA9IHBvbHlnb25WYWx1ZS0+dmFs
dWVzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyBp
ICs9IDIpCi0gICAgICAgICAgICBwb2x5Z29uLT5hcHBlbmRQb2ludChjb252ZXJ0VG9MZW5ndGgo
c3R5bGVSZXNvbHZlciwgdmFsdWVzLmF0KGkpLmdldCgpKSwgY29udmVydFRvTGVuZ3RoKHN0eWxl
UmVzb2x2ZXIsIHZhbHVlcy5hdChpICsgMSkuZ2V0KCkpKTsKKyAgICAgICAgICAgIHBvbHlnb24t
PmFwcGVuZFBvaW50KGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgdmFsdWVzLmF0KGkpLmdldCgpKSwg
Y29udmVydFRvTGVuZ3RoKHN0YXRlLCB2YWx1ZXMuYXQoaSArIDEpLmdldCgpKSk7CiAKICAgICAg
ICAgYmFzaWNTaGFwZSA9IHBvbHlnb24ucmVsZWFzZSgpOwogICAgICAgICBicmVhazsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25zLmggYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5oCmluZGV4IGQzNjA3ZTkwOTkyOWMzNDFi
MGMwNjlkM2U1Y2ViNjFmMTNmMTE3MTkuLjgxYjJjYWEzNTdiNzQxZmEyMzg0NjFmMDcyOTNhMDZk
OThjYzljNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rp
b25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuaApAQCAt
MzcsMTAgKzM3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEJhc2ljU2hhcGU7CiBj
bGFzcyBDU1NCYXNpY1NoYXBlOwogY2xhc3MgQ1NTVmFsdWU7Ci1jbGFzcyBTdHlsZVJlc29sdmVy
OworY2xhc3MgU3R5bGVSZXNvbHZlU3RhdGU7CiAKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVl
Rm9yQmFzaWNTaGFwZShjb25zdCBCYXNpY1NoYXBlKik7Ci1QYXNzUmVmUHRyPEJhc2ljU2hhcGU+
IGJhc2ljU2hhcGVGb3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyKiwgY29uc3QgQ1NTQmFzaWNT
aGFwZSopOworUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUoU3R5bGVS
ZXNvbHZlU3RhdGUmLCBjb25zdCBDU1NCYXNpY1NoYXBlKik7CiAKIH0KICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCmluZGV4IGYxNTE4ZDhkYWM3NDgwYzRlMjM5
N2U1MmRmYTk0MmJjZThkYzZhODEuLmMyY2U5MjA3MGMxZjFmYjgxMjBiYjNmOTJmZWU4Y2VhNjk3
YzI2MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKQEAgLTExNSwx
MSArMTE1LDExIEBAIHN0cnVjdCBHcmFkaWVudFN0b3AgewogICAgIHsgfQogfTsKIAotUGFzc1Jl
ZlB0cjxDU1NHcmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhTdHls
ZXNSZXNvbHZlZChTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorUGFzc1JlZlB0cjxDU1NH
cmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZl
ZChTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiB7CiAgICAgYm9vbCBkZXJpdmVkID0gZmFsc2U7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RvcHMuc2l6ZSgpOyBpKyspCi0gICAg
ICAgIGlmIChzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZUlzRGVyaXZlZEZy
b21FbGVtZW50KG1fc3RvcHNbaV0ubV9jb2xvci5nZXQoKSkpIHsKKyAgICAgICAgaWYgKFN0eWxl
UmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlSXNEZXJpdmVkRnJvbUVsZW1lbnQobV9z
dG9wc1tpXS5tX2NvbG9yLmdldCgpKSkgewogICAgICAgICAgICAgbV9zdG9wc1tpXS5tX2NvbG9y
SXNEZXJpdmVkRnJvbUVsZW1lbnQgPSB0cnVlOwogICAgICAgICAgICAgZGVyaXZlZCA9IHRydWU7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTEzOCw3ICsxMzgsNyBAQCBQYXNzUmVmUHRyPENTU0dy
YWRpZW50VmFsdWU+IENTU0dyYWRpZW50VmFsdWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVk
KFN0eWxlUgogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHQtPm1f
c3RvcHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHJlc3VsdC0+bV9zdG9wc1tpXS5tX3Jlc29sdmVk
Q29sb3IgPSBzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShyZXN1bHQtPm1f
c3RvcHNbaV0ubV9jb2xvci5nZXQoKSk7CisgICAgICAgIHJlc3VsdC0+bV9zdG9wc1tpXS5tX3Jl
c29sdmVkQ29sb3IgPSBTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShzdGF0
ZSwgcmVzdWx0LT5tX3N0b3BzW2ldLm1fY29sb3IuZ2V0KCkpOwogCiAgICAgcmV0dXJuIHJlc3Vs
dC5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGll
bnRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAppbmRleCA2
ZjAwNTM1OTA3ZTE1Nzc5YTA4MDI3MmM4ODZmZDZiODA5N2M4MDBkLi4wYjcyZTJhZTYyZGEwODIz
ZjZkM2ZiZTYxNmE3YTUxMzgyNTllMmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTR3JhZGllbnRWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZh
bHVlLmgKQEAgLTM1LDYgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGbG9h
dFBvaW50OwogY2xhc3MgR3JhZGllbnQ7CitjbGFzcyBTdHlsZVJlc29sdmVTdGF0ZTsKIAogZW51
bSBDU1NHcmFkaWVudFR5cGUgewogICAgIENTU0RlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudCwKQEAg
LTg0LDcgKzg1LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzQWxwaGEoY29uc3QgUmVuZGVyT2Jq
ZWN0KikgY29uc3Q7CiAKICAgICB2b2lkIGxvYWRTdWJpbWFnZXMoQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIqKSB7IH0KLSAgICBQYXNzUmVmUHRyPENTU0dyYWRpZW50VmFsdWU+IGdyYWRpZW50V2l0aFN0
eWxlc1Jlc29sdmVkKFN0eWxlUmVzb2x2ZXIqKTsKKyAgICBQYXNzUmVmUHRyPENTU0dyYWRpZW50
VmFsdWU+IGdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlUmVzb2x2ZVN0YXRlJik7CiAK
IHByb3RlY3RlZDoKICAgICBDU1NHcmFkaWVudFZhbHVlKENsYXNzVHlwZSBjbGFzc1R5cGUsIENT
U0dyYWRpZW50UmVwZWF0IHJlcGVhdCwgQ1NTR3JhZGllbnRUeXBlIGdyYWRpZW50VHlwZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAppbmRleCAwMjQ0ZDhhM2FkNTc4ZjZlMTNmNmNk
MWRiZTZhOGQyNDNlZDgwN2IwLi4yY2RjZWM3ZDExMDQyNmJkYzEyOWEzMjM5MTAzOWFmMTU2ZTQ0
MGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCkBAIC00MSwyNyArNDEsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpz
dHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVzb2x2ZXItPnN0eWxlKCk7Ci19Ci0gICAg
Ci1SZW5kZXJTdHlsZSogQ1NTVG9TdHlsZU1hcDo6cm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fcmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKTsKLX0KLQotYm9vbCBD
U1NUb1N0eWxlTWFwOjp1c2VTVkdab29tUnVsZXMoKSBjb25zdAotewotICAgIHJldHVybiBtX3Jl
c29sdmVyLT51c2VTVkdab29tUnVsZXMoKTsKLX0KLSAgICAKLVBhc3NSZWZQdHI8U3R5bGVJbWFn
ZT4gQ1NTVG9TdHlsZU1hcDo6c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQsIENT
U1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+c3R5bGVJbWFnZShwcm9w
ZXJ0eUlkLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEF0dGFjaG1l
bnQoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9p
ZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsQXR0YWNobWVudChTdHlsZVJlc29sdmVTdGF0ZSYsIENT
U1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBp
ZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKICAgICAgICAgbGF5ZXItPnNldEF0dGFjaG1l
bnQoRmlsbExheWVyOjppbml0aWFsRmlsbEF0dGFjaG1lbnQobGF5ZXItPnR5cGUoKSkpOwpAQCAt
ODcsNyArNjcsNyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxBdHRhY2htZW50KENTU1By
b3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKgogICAgIH0KIH0KIAotdm9pZCBD
U1NUb1N0eWxlTWFwOjptYXBGaWxsQ2xpcChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVy
LCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxDbGlwKFN0eWxl
UmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUq
IHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewogICAgICAgICBs
YXllci0+c2V0Q2xpcChGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQ2xpcChsYXllci0+dHlwZSgpKSk7
CkBAIC0xMDEsNyArODEsNyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxDbGlwKENTU1By
b3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZQogICAgIGxheWVyLT5z
ZXRDbGlwKCpwcmltaXRpdmVWYWx1ZSk7CiB9CiAKLXZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmls
bENvbXBvc2l0ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFs
dWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxDb21wb3NpdGUoU3R5bGVSZXNvbHZlU3Rh
dGUmLCBDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiB7
CiAgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CiAgICAgICAgIGxheWVyLT5zZXRD
b21wb3NpdGUoRmlsbExheWVyOjppbml0aWFsRmlsbENvbXBvc2l0ZShsYXllci0+dHlwZSgpKSk7
CkBAIC0xMTUsNyArOTUsNyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxDb21wb3NpdGUo
Q1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqCiAgICAgbGF5ZXItPnNl
dENvbXBvc2l0ZSgqcHJpbWl0aXZlVmFsdWUpOwogfQogCi12b2lkIENTU1RvU3R5bGVNYXA6Om1h
cEZpbGxPcmlnaW4oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZh
bHVlKQordm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsT3JpZ2luKFN0eWxlUmVzb2x2ZVN0YXRl
JiwgQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogewog
ICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewogICAgICAgICBsYXllci0+c2V0T3Jp
Z2luKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxPcmlnaW4obGF5ZXItPnR5cGUoKSkpOwpAQCAtMTMw
LDE3ICsxMTAsMTcgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsT3JpZ2luKENTU1Byb3Bl
cnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWwKIH0KIAogCi12b2lkIENTU1Rv
U3R5bGVNYXA6Om1hcEZpbGxJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBGaWxsTGF5ZXIq
IGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxJbWFn
ZShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIEZpbGxM
YXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzSW5pdGlh
bFZhbHVlKCkpIHsKICAgICAgICAgbGF5ZXItPnNldEltYWdlKEZpbGxMYXllcjo6aW5pdGlhbEZp
bGxJbWFnZShsYXllci0+dHlwZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBs
YXllci0+c2V0SW1hZ2Uoc3R5bGVJbWFnZShwcm9wZXJ0eSwgdmFsdWUpKTsKKyAgICBsYXllci0+
c2V0SW1hZ2UoU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShzdGF0ZSwgcHJvcGVydHksIHZhbHVl
KSk7CiB9CiAKLXZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFJlcGVhdFgoQ1NTUHJvcGVydHlJ
RCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBDU1NUb1N0eWxlTWFw
OjptYXBGaWxsUmVwZWF0WChTdHlsZVJlc29sdmVTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIEZpbGxM
YXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzSW5pdGlh
bFZhbHVlKCkpIHsKICAgICAgICAgbGF5ZXItPnNldFJlcGVhdFgoRmlsbExheWVyOjppbml0aWFs
RmlsbFJlcGVhdFgobGF5ZXItPnR5cGUoKSkpOwpAQCAtMTU0LDcgKzEzNCw3IEBAIHZvaWQgQ1NT
VG9TdHlsZU1hcDo6bWFwRmlsbFJlcGVhdFgoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXll
ciwgQ1NTVmFsdWUqIHZhCiAgICAgbGF5ZXItPnNldFJlcGVhdFgoKnByaW1pdGl2ZVZhbHVlKTsK
IH0KIAotdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WShDU1NQcm9wZXJ0eUlELCBG
aWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1h
cEZpbGxSZXBlYXRZKFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgRmlsbExheWVy
KiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFs
dWUoKSkgewogICAgICAgICBsYXllci0+c2V0UmVwZWF0WShGaWxsTGF5ZXI6OmluaXRpYWxGaWxs
UmVwZWF0WShsYXllci0+dHlwZSgpKSk7CkBAIC0xNjgsNyArMTQ4LDcgQEAgdm9pZCBDU1NUb1N0
eWxlTWFwOjptYXBGaWxsUmVwZWF0WShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBD
U1NWYWx1ZSogdmEKICAgICBsYXllci0+c2V0UmVwZWF0WSgqcHJpbWl0aXZlVmFsdWUpOwogfQog
Ci12b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxTaXplKENTU1Byb3BlcnR5SUQsIEZpbGxMYXll
ciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFNp
emUoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxh
eWVyLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKSB7CiAgICAgICAgIGxheWVyLT5zZXRTaXplVHlwZShTaXplTm9uZSk7CkBAIC0xOTAsNyAr
MTcwLDcgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsU2l6ZShDU1NQcm9wZXJ0eUlELCBG
aWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisgICAg
ZmxvYXQgem9vbUZhY3RvciA9IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKIAogICAg
IExlbmd0aCBmaXJzdExlbmd0aDsKICAgICBMZW5ndGggc2Vjb25kTGVuZ3RoOwpAQCAtMTk4LDEw
ICsxNzgsMTAgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsU2l6ZShDU1NQcm9wZXJ0eUlE
LCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUKICAgICBpZiAoUGFpciogcGFpciA9
IHByaW1pdGl2ZVZhbHVlLT5nZXRQYWlyVmFsdWUoKSkgewogICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogZmlyc3QgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBhaXItPmZpcnN0
KCkpOwogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPihwYWlyLT5zZWNvbmQoKSk7Ci0gICAgICAgIGZpcnN0TGVuZ3RoID0g
Zmlyc3QtPmNvbnZlcnRUb0xlbmd0aDxBbnlDb252ZXJzaW9uPihzdHlsZSgpLCByb290RWxlbWVu
dFN0eWxlKCksIHpvb21GYWN0b3IpOwotICAgICAgICBzZWNvbmRMZW5ndGggPSBzZWNvbmQtPmNv
bnZlcnRUb0xlbmd0aDxBbnlDb252ZXJzaW9uPihzdHlsZSgpLCByb290RWxlbWVudFN0eWxlKCks
IHpvb21GYWN0b3IpOworICAgICAgICBmaXJzdExlbmd0aCA9IGZpcnN0LT5jb252ZXJ0VG9MZW5n
dGg8QW55Q29udmVyc2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgp
LCB6b29tRmFjdG9yKTsKKyAgICAgICAgc2Vjb25kTGVuZ3RoID0gc2Vjb25kLT5jb252ZXJ0VG9M
ZW5ndGg8QW55Q29udmVyc2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHls
ZSgpLCB6b29tRmFjdG9yKTsKICAgICB9IGVsc2UgewotICAgICAgICBmaXJzdExlbmd0aCA9IHBy
aW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8QW55Q29udmVyc2lvbj4oc3R5bGUoKSwgcm9v
dEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgZmlyc3RMZW5ndGggPSBwcmlt
aXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KHN0YXRlLnN0eWxlKCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CiAgICAgICAgIHNlY29uZExl
bmd0aCA9IExlbmd0aCgpOwogICAgIH0KIApAQCAtMjEzLDcgKzE5Myw3IEBAIHZvaWQgQ1NTVG9T
dHlsZU1hcDo6bWFwRmlsbFNpemUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NT
VmFsdWUqIHZhbHVlCiAgICAgbGF5ZXItPnNldFNpemVMZW5ndGgoYik7CiB9CiAKLXZvaWQgQ1NT
VG9TdHlsZU1hcDo6bWFwRmlsbFhQb3NpdGlvbihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEZp
bGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFw
RmlsbFhQb3NpdGlvbihTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2
YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewogICAgICAgICBsYXllci0+c2V0WFBvc2l0aW9uKEZp
bGxMYXllcjo6aW5pdGlhbEZpbGxYUG9zaXRpb24obGF5ZXItPnR5cGUoKSkpOwpAQCAtMjIzLDcg
KzIwMyw3IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFhQb3NpdGlvbihDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsCiAgICAgaWYgKCF2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmbG9hdCB6b29tRmFjdG9yID0g
c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdGF0ZS5z
dHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CiAKICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICBQ
YWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1ZSgpOwpAQCAtMjM0LDExICsy
MTQsMTEgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsWFBvc2l0aW9uKENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwKIAogICAgIExlbmd0aCBsZW5ndGg7CiAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQotICAgICAgICBsZW5ndGggPSBwcmlt
aXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIHJvb3RFbGVtZW50U3R5
bGUoKSwgem9vbUZhY3Rvcik7CisgICAgICAgIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21w
dXRlTGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgp
LCB6b29tRmFjdG9yKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdl
KCkpCiAgICAgICAgIGxlbmd0aCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFs
dWUoKSwgUGVyY2VudCk7CiAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRl
ZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgIGxlbmd0aCA9IExlbmd0aChwcmltaXRp
dmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxlKCksIHJvb3RFbGVtZW50
U3R5bGUoKSwgem9vbUZhY3RvcikpOworICAgICAgICBsZW5ndGggPSBMZW5ndGgocHJpbWl0aXZl
VmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5y
b290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKICAgICAgICAgbGVuZ3RoID0gcHJp
bWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpOwogICAgIGVsc2UKQEAgLTI0
OSw3ICsyMjksNyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxYUG9zaXRpb24oQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLAogICAgICAgICBsYXllci0+c2V0
QmFja2dyb3VuZFhPcmlnaW4oKihwYWlyLT5maXJzdCgpKSk7CiB9CiAKLXZvaWQgQ1NTVG9TdHls
ZU1hcDo6bWFwRmlsbFlQb3NpdGlvbihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEZpbGxMYXll
ciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFlQ
b3NpdGlvbihTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+
aXNJbml0aWFsVmFsdWUoKSkgewogICAgICAgICBsYXllci0+c2V0WVBvc2l0aW9uKEZpbGxMYXll
cjo6aW5pdGlhbEZpbGxZUG9zaXRpb24obGF5ZXItPnR5cGUoKSkpOwpAQCAtMjU5LDcgKzIzOSw3
IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFlQb3NpdGlvbihDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsCiAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmbG9hdCB6b29tRmFjdG9yID0gc3R5bGUo
KS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdGF0ZS5zdHlsZSgp
LT5lZmZlY3RpdmVab29tKCk7CiAKICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICBQYWlyKiBw
YWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1ZSgpOwpAQCAtMjcwLDExICsyNTAsMTEg
QEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsWVBvc2l0aW9uKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgRmlsbExheWVyKiBsYXllciwKIAogICAgIExlbmd0aCBsZW5ndGg7CiAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQotICAgICAgICBsZW5ndGggPSBwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUoKSwg
em9vbUZhY3Rvcik7CisgICAgICAgIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVu
Z3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29t
RmFjdG9yKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCiAg
ICAgICAgIGxlbmd0aCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwg
UGVyY2VudCk7CiAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNl
bnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgIGxlbmd0aCA9IExlbmd0aChwcmltaXRpdmVWYWx1
ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUo
KSwgem9vbUZhY3RvcikpOworICAgICAgICBsZW5ndGggPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUt
PmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlKCksIHpvb21GYWN0b3IpKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+
aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKICAgICAgICAgbGVuZ3RoID0gcHJpbWl0aXZl
VmFsdWUtPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpOwogICAgIGVsc2UKQEAgLTQ4NSw3ICs0
NjUsNyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKEFu
aW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdgogICAgICAgICBhbmltYXRpb24tPnNldFRp
bWluZ0Z1bmN0aW9uKExpbmVhclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CiB9CiAKLXZvaWQg
Q1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwg
Q1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCit2b2lkIENTU1RvU3R5bGVN
YXA6Om1hcE5pbmVQaWVjZUltYWdlKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCiB7
CiAgICAgLy8gSWYgd2UncmUgbm90IGEgdmFsdWUgbGlzdCwgdGhlbiB3ZSBhcmUgIm5vbmUiIGFu
ZCBkb24ndCBuZWVkIHRvIGFsdGVyIHRoZSBlbXB0eSBpbWFnZSBhdCBhbGwuCiAgICAgaWYgKCF2
YWx1ZSB8fCAhdmFsdWUtPmlzVmFsdWVMaXN0KCkpCkBAIC01MTEsMjUgKzQ5MSwyNSBAQCB2b2lk
IENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHks
IENTU1ZhbHVlKiB2YWx1ZSwgTgogICAgICAgICAgICAgfHwgY3VycmVudC0+aXNJbWFnZVNldFZh
bHVlKCkKICNlbmRpZgogICAgICAgICAgICAgKQotICAgICAgICAgICAgaW1hZ2Uuc2V0SW1hZ2Uo
c3R5bGVJbWFnZShpbWFnZVByb3BlcnR5LCBjdXJyZW50KSk7CisgICAgICAgICAgICBpbWFnZS5z
ZXRJbWFnZShTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKHN0YXRlLCBpbWFnZVByb3BlcnR5LCBj
dXJyZW50KSk7CiAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnQtPmlzQm9yZGVySW1hZ2VTbGljZVZh
bHVlKCkpCi0gICAgICAgICAgICBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKGN1cnJlbnQsIGltYWdl
KTsKKyAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlU2xpY2Uoc3RhdGUsIGN1cnJlbnQsIGlt
YWdlKTsKICAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aXNWYWx1ZUxpc3QoKSkgewogICAgICAg
ICAgICAgQ1NTVmFsdWVMaXN0KiBzbGFzaExpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3Qq
PihjdXJyZW50KTsKICAgICAgICAgICAgIC8vIE1hcCBpbiB0aGUgaW1hZ2Ugc2xpY2VzLgogICAg
ICAgICAgICAgaWYgKHNsYXNoTGlzdC0+aXRlbSgwKSAmJiBzbGFzaExpc3QtPml0ZW0oMCktPmlz
Qm9yZGVySW1hZ2VTbGljZVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgbWFwTmluZVBpZWNlSW1h
Z2VTbGljZShzbGFzaExpc3QtPml0ZW0oMCksIGltYWdlKTsKKyAgICAgICAgICAgICAgICBtYXBO
aW5lUGllY2VJbWFnZVNsaWNlKHN0YXRlLCBzbGFzaExpc3QtPml0ZW0oMCksIGltYWdlKTsKIAog
ICAgICAgICAgICAgLy8gTWFwIGluIHRoZSBib3JkZXIgc2xpY2VzLgogICAgICAgICAgICAgaWYg
KHNsYXNoTGlzdC0+aXRlbSgxKSkKLSAgICAgICAgICAgICAgICBpbWFnZS5zZXRCb3JkZXJTbGlj
ZXMobWFwTmluZVBpZWNlSW1hZ2VRdWFkKHNsYXNoTGlzdC0+aXRlbSgxKSkpOworICAgICAgICAg
ICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyhtYXBOaW5lUGllY2VJbWFnZVF1YWQoc3RhdGUs
IHNsYXNoTGlzdC0+aXRlbSgxKSkpOwogCiAgICAgICAgICAgICAvLyBNYXAgaW4gdGhlIG91dHNl
dC4KICAgICAgICAgICAgIGlmIChzbGFzaExpc3QtPml0ZW0oMikpCi0gICAgICAgICAgICAgICAg
aW1hZ2Uuc2V0T3V0c2V0KG1hcE5pbmVQaWVjZUltYWdlUXVhZChzbGFzaExpc3QtPml0ZW0oMikp
KTsKKyAgICAgICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQobWFwTmluZVBpZWNlSW1hZ2VRdWFk
KHN0YXRlLCBzbGFzaExpc3QtPml0ZW0oMikpKTsKICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAgICAgIC8vIFNldCB0aGUgYXBwcm9wcmlh
dGUgcnVsZXMgZm9yIHN0cmV0Y2gvcm91bmQvcmVwZWF0IG9mIHRoZSBzbGljZXMuCi0gICAgICAg
ICAgICBtYXBOaW5lUGllY2VJbWFnZVJlcGVhdChjdXJyZW50LCBpbWFnZSk7CisgICAgICAgICAg
ICBtYXBOaW5lUGllY2VJbWFnZVJlcGVhdChzdGF0ZSwgY3VycmVudCwgaW1hZ2UpOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC01MzgsMTcgKzUxOCwxNyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1h
cE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSwg
TgogICAgICAgICAvLyBhbHNvIHNldCB0aGUgYm9yZGVyIHdpZHRocy4gV2UgZG9uJ3QgbmVlZCB0
byB3b3JyeSBhYm91dCBwZXJjZW50YWdlcywgc2luY2Ugd2UgZG9uJ3QgZXZlbiBzdXBwb3J0CiAg
ICAgICAgIC8vIHRob3NlIG9uIHJlYWwgYm9yZGVycyB5ZXQuCiAgICAgICAgIGlmIChpbWFnZS5i
b3JkZXJTbGljZXMoKS50b3AoKS5pc0ZpeGVkKCkpCi0gICAgICAgICAgICBzdHlsZSgpLT5zZXRC
b3JkZXJUb3BXaWR0aChpbWFnZS5ib3JkZXJTbGljZXMoKS50b3AoKS52YWx1ZSgpKTsKKyAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJvcmRlclRvcFdpZHRoKGltYWdlLmJvcmRlclNsaWNl
cygpLnRvcCgpLnZhbHVlKCkpOwogICAgICAgICBpZiAoaW1hZ2UuYm9yZGVyU2xpY2VzKCkucmln
aHQoKS5pc0ZpeGVkKCkpCi0gICAgICAgICAgICBzdHlsZSgpLT5zZXRCb3JkZXJSaWdodFdpZHRo
KGltYWdlLmJvcmRlclNsaWNlcygpLnJpZ2h0KCkudmFsdWUoKSk7CisgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRCb3JkZXJSaWdodFdpZHRoKGltYWdlLmJvcmRlclNsaWNlcygpLnJpZ2h0
KCkudmFsdWUoKSk7CiAgICAgICAgIGlmIChpbWFnZS5ib3JkZXJTbGljZXMoKS5ib3R0b20oKS5p
c0ZpeGVkKCkpCi0gICAgICAgICAgICBzdHlsZSgpLT5zZXRCb3JkZXJCb3R0b21XaWR0aChpbWFn
ZS5ib3JkZXJTbGljZXMoKS5ib3R0b20oKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldEJvcmRlckJvdHRvbVdpZHRoKGltYWdlLmJvcmRlclNsaWNlcygpLmJvdHRvbSgp
LnZhbHVlKCkpOwogICAgICAgICBpZiAoaW1hZ2UuYm9yZGVyU2xpY2VzKCkubGVmdCgpLmlzRml4
ZWQoKSkKLSAgICAgICAgICAgIHN0eWxlKCktPnNldEJvcmRlckxlZnRXaWR0aChpbWFnZS5ib3Jk
ZXJTbGljZXMoKS5sZWZ0KCkudmFsdWUoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRCb3JkZXJMZWZ0V2lkdGgoaW1hZ2UuYm9yZGVyU2xpY2VzKCkubGVmdCgpLnZhbHVlKCkpOwog
ICAgIH0KIH0KIAotdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVNsaWNlKENT
U1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQordm9pZCBDU1NUb1N0eWxlTWFw
OjptYXBOaW5lUGllY2VJbWFnZVNsaWNlKFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTVmFsdWUqIHZh
bHVlLCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCiB7CiAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUt
PmlzQm9yZGVySW1hZ2VTbGljZVZhbHVlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTU4MSwxMyAr
NTYxLDEzIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VTbGljZShDU1NW
YWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnCiAgICAgaW1hZ2Uuc2V0RmlsbChib3Jk
ZXJJbWFnZVNsaWNlLT5tX2ZpbGwpOwogfQogCi1MZW5ndGhCb3ggQ1NTVG9TdHlsZU1hcDo6bWFw
TmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlKiB2YWx1ZSkKK0xlbmd0aEJveCBDU1NUb1N0eWxl
TWFwOjptYXBOaW5lUGllY2VJbWFnZVF1YWQoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NW
YWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUtPmlzUHJpbWl0aXZlVmFs
dWUoKSkKICAgICAgICAgcmV0dXJuIExlbmd0aEJveCgpOwogCiAgICAgLy8gR2V0IG91ciB6b29t
IHZhbHVlLgotICAgIGZsb2F0IHpvb20gPSB1c2VTVkdab29tUnVsZXMoKSA/IDEuMGYgOiBzdHls
ZSgpLT5lZmZlY3RpdmVab29tKCk7CisgICAgZmxvYXQgem9vbSA9IHN0YXRlLnVzZVNWR1pvb21S
dWxlcygpID8gMS4wZiA6IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKIAogICAgIC8v
IFJldHJpZXZlIHRoZSBwcmltaXRpdmUgdmFsdWUuCiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGJv
cmRlcldpZHRocyA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwpAQCAt
NjAwLDMzICs1ODAsMzMgQEAgTGVuZ3RoQm94IENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUlt
YWdlUXVhZChDU1NWYWx1ZSogdmFsdWUpCiAgICAgZWxzZSBpZiAoc2xpY2VzLT50b3AoKS0+aXNQ
ZXJjZW50YWdlKCkpCiAgICAgICAgIGJveC5tX3RvcCA9IExlbmd0aChzbGljZXMtPnRvcCgpLT5n
ZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpLCBQZXJjZW50
KTsKICAgICBlbHNlIGlmIChzbGljZXMtPnRvcCgpLT5nZXRJZGVudCgpICE9IENTU1ZhbHVlQXV0
bykKLSAgICAgICAgYm94Lm1fdG9wID0gc2xpY2VzLT50b3AoKS0+Y29tcHV0ZUxlbmd0aDxMZW5n
dGg+KHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7CisgICAgICAgIGJveC5tX3Rv
cCA9IHNsaWNlcy0+dG9wKCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBz
dGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb20pOwogCiAgICAgaWYgKHNsaWNlcy0+cmlnaHQo
KS0+aXNOdW1iZXIoKSkKICAgICAgICAgYm94Lm1fcmlnaHQgPSBMZW5ndGgoc2xpY2VzLT5yaWdo
dCgpLT5nZXRJbnRWYWx1ZSgpLCBSZWxhdGl2ZSk7CiAgICAgZWxzZSBpZiAoc2xpY2VzLT5yaWdo
dCgpLT5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgYm94Lm1fcmlnaHQgPSBMZW5ndGgoc2xpY2Vz
LT5yaWdodCgpLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRB
R0UpLCBQZXJjZW50KTsKICAgICBlbHNlIGlmIChzbGljZXMtPnJpZ2h0KCktPmdldElkZW50KCkg
IT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICBib3gubV9yaWdodCA9IHNsaWNlcy0+cmlnaHQoKS0+
Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7
CisgICAgICAgIGJveC5tX3JpZ2h0ID0gc2xpY2VzLT5yaWdodCgpLT5jb21wdXRlTGVuZ3RoPExl
bmd0aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tKTsKIAog
ICAgIGlmIChzbGljZXMtPmJvdHRvbSgpLT5pc051bWJlcigpKQogICAgICAgICBib3gubV9ib3R0
b20gPSBMZW5ndGgoc2xpY2VzLT5ib3R0b20oKS0+Z2V0SW50VmFsdWUoKSwgUmVsYXRpdmUpOwog
ICAgIGVsc2UgaWYgKHNsaWNlcy0+Ym90dG9tKCktPmlzUGVyY2VudGFnZSgpKQogICAgICAgICBi
b3gubV9ib3R0b20gPSBMZW5ndGgoc2xpY2VzLT5ib3R0b20oKS0+Z2V0RG91YmxlVmFsdWUoQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKSwgUGVyY2VudCk7CiAgICAgZWxzZSBpZiAo
c2xpY2VzLT5ib3R0b20oKS0+Z2V0SWRlbnQoKSAhPSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgIGJv
eC5tX2JvdHRvbSA9IHNsaWNlcy0+Ym90dG9tKCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHls
ZSgpLCByb290RWxlbWVudFN0eWxlKCksIHpvb20pOworICAgICAgICBib3gubV9ib3R0b20gPSBz
bGljZXMtPmJvdHRvbSgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwgc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tKTsKIAogICAgIGlmIChzbGljZXMtPmxlZnQoKS0+
aXNOdW1iZXIoKSkKICAgICAgICAgYm94Lm1fbGVmdCA9IExlbmd0aChzbGljZXMtPmxlZnQoKS0+
Z2V0SW50VmFsdWUoKSwgUmVsYXRpdmUpOwogICAgIGVsc2UgaWYgKHNsaWNlcy0+bGVmdCgpLT5p
c1BlcmNlbnRhZ2UoKSkKICAgICAgICAgYm94Lm1fbGVmdCA9IExlbmd0aChzbGljZXMtPmxlZnQo
KS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKSwgUGVy
Y2VudCk7CiAgICAgZWxzZSBpZiAoc2xpY2VzLT5sZWZ0KCktPmdldElkZW50KCkgIT0gQ1NTVmFs
dWVBdXRvKQotICAgICAgICBib3gubV9sZWZ0ID0gc2xpY2VzLT5sZWZ0KCktPmNvbXB1dGVMZW5n
dGg8TGVuZ3RoPihzdHlsZSgpLCByb290RWxlbWVudFN0eWxlKCksIHpvb20pOworICAgICAgICBi
b3gubV9sZWZ0ID0gc2xpY2VzLT5sZWZ0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5z
dHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb20pOwogCiAgICAgcmV0dXJuIGJv
eDsKIH0KIAotdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVJlcGVhdChDU1NW
YWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6
bWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NWYWx1ZSogdmFs
dWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKIHsKICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5
bGVNYXAuaAppbmRleCA2YmFiNDBiZmNkNzdlMTI1YWIwOGYwMDhmMTBlN2EzZTY4Mjc5MTRlLi44
YTU1YzRmMjg2OTcxYTkyNTAxNTk3M2VjNGFmNDI5NTFkZDkzOTEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NUb1N0eWxlTWFwLmgKQEAgLTMyLDU2ICszMiw0MSBAQCBjbGFzcyBDU1NWYWx1ZTsKIGNsYXNz
IEFuaW1hdGlvbjsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgU3R5bGVJbWFnZTsKLWNsYXNz
IFN0eWxlUmVzb2x2ZXI7CitjbGFzcyBTdHlsZVJlc29sdmVTdGF0ZTsKIGNsYXNzIE5pbmVQaWVj
ZUltYWdlOwogCiBjbGFzcyBDU1NUb1N0eWxlTWFwIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShDU1NUb1N0eWxlTWFwKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLQogcHVibGlj
OgotICAgIENTU1RvU3R5bGVNYXAoU3R5bGVSZXNvbHZlciogcmVzb2x2ZXIpIDogbV9yZXNvbHZl
cihyZXNvbHZlcikgeyB9Ci0KLSAgICB2b2lkIG1hcEZpbGxBdHRhY2htZW50KENTU1Byb3BlcnR5
SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBGaWxsQ2xpcChDU1NQcm9w
ZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwRmlsbENvbXBvc2l0
ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwRmls
bE9yaWdpbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgIHZvaWQg
bWFwRmlsbEltYWdlKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAg
dm9pZCBtYXBGaWxsUmVwZWF0WChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSop
OwotICAgIHZvaWQgbWFwRmlsbFJlcGVhdFkoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NT
VmFsdWUqKTsKLSAgICB2b2lkIG1hcEZpbGxTaXplKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllcios
IENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBGaWxsWFBvc2l0aW9uKENTU1Byb3BlcnR5SUQsIEZp
bGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBGaWxsWVBvc2l0aW9uKENTU1Byb3Bl
cnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgc3RhdGljIHZvaWQgbWFwRmlsbEF0
dGFjaG1lbnQoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBD
U1NWYWx1ZSopOworICAgIHN0YXRpYyB2b2lkIG1hcEZpbGxDbGlwKFN0eWxlUmVzb2x2ZVN0YXRl
JiwgQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICBzdGF0aWMgdm9p
ZCBtYXBGaWxsQ29tcG9zaXRlKFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgRmls
bExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICBzdGF0aWMgdm9pZCBtYXBGaWxsT3JpZ2luKFN0eWxl
UmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAg
ICBzdGF0aWMgdm9pZCBtYXBGaWxsSW1hZ2UoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0
eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAgIHN0YXRpYyB2b2lkIG1hcEZpbGxSZXBl
YXRYKFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFs
dWUqKTsKKyAgICBzdGF0aWMgdm9pZCBtYXBGaWxsUmVwZWF0WShTdHlsZVJlc29sdmVTdGF0ZSYs
IENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgc3RhdGljIHZvaWQg
bWFwRmlsbFNpemUoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIq
LCBDU1NWYWx1ZSopOworICAgIHN0YXRpYyB2b2lkIG1hcEZpbGxYUG9zaXRpb24oU3R5bGVSZXNv
bHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAgIHN0
YXRpYyB2b2lkIG1hcEZpbGxZUG9zaXRpb24oU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0
eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwogCi0gICAgdm9pZCBtYXBBbmltYXRpb25EZWxh
eShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwQW5pbWF0aW9uRGlyZWN0aW9u
KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBBbmltYXRpb25EdXJhdGlvbihB
bmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwQW5pbWF0aW9uRmlsbE1vZGUoQW5p
bWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50
KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBBbmltYXRpb25OYW1lKEFuaW1h
dGlvbiosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBBbmltYXRpb25QbGF5U3RhdGUoQW5pbWF0
aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1hdGlvblByb3BlcnR5KEFuaW1hdGlv
biosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBBbmltYXRpb25UaW1pbmdGdW5jdGlvbihBbmlt
YXRpb24qLCBDU1NWYWx1ZSopOworICAgIHN0YXRpYyB2b2lkIG1hcEFuaW1hdGlvbkRlbGF5KEFu
aW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgc3RhdGljIHZvaWQgbWFwQW5pbWF0aW9uRGlyZWN0
aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgc3RhdGljIHZvaWQgbWFwQW5pbWF0aW9u
RHVyYXRpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICBzdGF0aWMgdm9pZCBtYXBBbmlt
YXRpb25GaWxsTW9kZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAgIHN0YXRpYyB2b2lkIG1h
cEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgc3Rh
dGljIHZvaWQgbWFwQW5pbWF0aW9uTmFtZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAgIHN0
YXRpYyB2b2lkIG1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwor
ICAgIHN0YXRpYyB2b2lkIG1hcEFuaW1hdGlvblByb3BlcnR5KEFuaW1hdGlvbiosIENTU1ZhbHVl
Kik7CisgICAgc3RhdGljIHZvaWQgbWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9u
KiwgQ1NTVmFsdWUqKTsKIAotICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJ
RCwgQ1NTVmFsdWUqLCBOaW5lUGllY2VJbWFnZSYpOwotICAgIHZvaWQgbWFwTmluZVBpZWNlSW1h
Z2VTbGljZShDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7Ci0gICAgTGVuZ3RoQm94IG1hcE5p
bmVQaWVjZUltYWdlUXVhZChDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2VS
ZXBlYXQoQ1NTVmFsdWUqLCBOaW5lUGllY2VJbWFnZSYpOworICAgIHN0YXRpYyB2b2lkIG1hcE5p
bmVQaWVjZUltYWdlKFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUq
LCBOaW5lUGllY2VJbWFnZSYpOworICAgIHN0YXRpYyB2b2lkIG1hcE5pbmVQaWVjZUltYWdlU2xp
Y2UoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7CisgICAg
c3RhdGljIExlbmd0aEJveCBtYXBOaW5lUGllY2VJbWFnZVF1YWQoU3R5bGVSZXNvbHZlU3RhdGUm
LCBDU1NWYWx1ZSopOworICAgIHN0YXRpYyB2b2lkIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KFN0
eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTVmFsdWUqLCBOaW5lUGllY2VJbWFnZSYpOwogCiBwcml2YXRl
OgotICAgIC8vIEZJWE1FOiBUaGVzZSBhY2Nlc3NvcnMgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEg
UmVzb2x2ZVN0YXRlIG9iamVjdAotICAgIC8vIHNpbWlsYXIgdG8gaG93IFBhaW50SW5mby9MYXlv
dXRTdGF0ZSBjYWNoZSB2YWx1ZXMgbmVlZGVkIGZvcgotICAgIC8vIHRoZSBjdXJyZW50IHBhaW50
L2xheW91dC4KLSAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdDsKLSAgICBSZW5kZXJTdHls
ZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0OwotICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCkg
Y29uc3Q7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcGFydCBvZiBzb21lIHNvcnQg
b2YgU3R5bGVJbWFnZUNhY2hlIG9iamVjdCB3aGljaAotICAgIC8vIGlzIGhlbGQgYnkgdGhlIFN0
eWxlUmVzb2x2ZXIsIGFuZCBsaWtlbHkgcHJvdmlkZWQgdG8gdGhpcyBvYmplY3QKLSAgICAvLyBk
dXJpbmcgdGhlIHJlc29sdmUuCi0gICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdl
KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7Ci0KLSAgICBTdHlsZVJlc29sdmVyKiBtX3Jlc29s
dmVyOworICAgIENTU1RvU3R5bGVNYXAoKSB7IH0KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCA2MTQ1YmIxZjE2MjViOGZlNGQxNjc2MDdi
YmJhOGJmZDlhMWIwMTE5Li5kYjIzZTk5NDAyZTczNzQzMGQ5NWYxMmE4YmFjNjA3Y2UzMTczNjdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC00OSw3
ICs0OSw3IEBACiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlmIChpc0lu
aGVyaXQpIFwKIHsgXAotICAgIHN2Z3N0eWxlLT5zZXQjI1Byb3AobV9wYXJlbnRTdHlsZS0+c3Zn
U3R5bGUoKS0+cHJvcCgpKTsgXAorICAgIHN2Z3N0eWxlLT5zZXQjI1Byb3Aoc3RhdGUucGFyZW50
U3R5bGUoKS0+c3ZnU3R5bGUoKS0+cHJvcCgpKTsgXAogICAgIHJldHVybjsgXAogfQogCkBAIC0x
MDIsMTcgKzEwMiwxNyBAQCBzdGF0aWMgQ29sb3IgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShT
VkdDb2xvciogc3ZnQ29sb3IsIGNvbnN0IENvbG9yJiBmZ0NvbG9yKQogICAgIHJldHVybiBjb2xv
cjsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9w
ZXJ0eShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKIHsKICAgICBBU1NFUlQodmFsdWUpOwogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSA9IDA7CiAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAg
ICAgICAgIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2
YWx1ZSk7CiAKLSAgICBTVkdSZW5kZXJTdHlsZSogc3Znc3R5bGUgPSBtX3N0eWxlLT5hY2Nlc3NT
VkdTdHlsZSgpOworICAgIFNWR1JlbmRlclN0eWxlKiBzdmdzdHlsZSA9IHN0YXRlLnN0eWxlKCkt
PmFjY2Vzc1NWR1N0eWxlKCk7CiAKLSAgICBib29sIGlzSW5oZXJpdCA9IG1fcGFyZW50Tm9kZSAm
JiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpOwotICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUt
PmlzSW5pdGlhbFZhbHVlKCkgfHwgKCFtX3BhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVk
VmFsdWUoKSk7CisgICAgYm9vbCBpc0luaGVyaXQgPSBzdGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFs
dWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKKyAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5pc0lu
aXRpYWxWYWx1ZSgpIHx8ICghc3RhdGUucGFyZW50Tm9kZSgpICYmIHZhbHVlLT5pc0luaGVyaXRl
ZFZhbHVlKCkpOwogCiAgICAgLy8gV2hhdCBmb2xsb3dzIGlzIGEgbGlzdCB0aGF0IG1hcHMgdGhl
IENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIKICAgICAvLyBjb3JyZXNwb25kaW5nIGZyb250LWVu
ZCBSZW5kZXJTdHlsZSB2YWx1ZXMuIFNob3J0aGFuZHMoZS5nLiBib3JkZXIsCkBAIC0yMjksMzQg
KzIyOSwzNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5RmlsbDoK
ICAgICAgICAgewogICAgICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgICAg
IGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQYXJlbnRTdHlsZSA9IG1fcGFyZW50U3R5bGUtPnN2
Z1N0eWxlKCk7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChzdmdQYXJl
bnRTdHlsZS0+ZmlsbFBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50Q29sb3Io
KSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFy
U3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRT
dHlsZSgpLT5zdmdTdHlsZSgpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFp
bnQoc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQ
YWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRVcmkoKSwgc3RhdGUuYXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5r
U3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxs
UGFpbnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0
eWxlOjppbml0aWFsRmlsbFBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxs
UGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlU
b1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CisgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQ
YWludChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludFR5cGUoKSwgU1ZHUmVuZGVyU3R5
bGU6OmluaXRpYWxGaWxsUGFpbnRDb2xvcigpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQ
YWludFVyaSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3RhdGUuYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkgewog
ICAgICAgICAgICAgICAgIFNWR1BhaW50KiBzdmdQYWludCA9IHN0YXRpY19jYXN0PFNWR1BhaW50
Kj4odmFsdWUpOwotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFp
bnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBtX3N0
eWxlLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAg
ICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29sb3JGcm9t
U1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSksIHN2Z1Bh
aW50LT51cmkoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0YXRlLmFw
cGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlOgog
ICAgICAgICB7CiAgICAgICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1BhcmVudFN0eWxlID0gbV9wYXJlbnRTdHlsZS0+c3Zn
U3R5bGUoKTsKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFy
ZW50U3R5bGUtPnN0cm9rZVBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRD
b2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CisgICAg
ICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1BhcmVudFN0eWxlID0gc3RhdGUu
cGFyZW50U3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0
U3Ryb2tlUGFpbnQoc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50VHlwZSgpLCBzdmdQYXJlbnRT
dHlsZS0+c3Ryb2tlUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRVcmko
KSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0YXRlLmFwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgICAgIHN2
Z3N0eWxlLT5zZXRTdHJva2VQYWludChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50
VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50Q29sb3IoKSwgU1ZHUmVu
ZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFy
U3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAg
ICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJv
a2VQYWludFR5cGUoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludENvbG9yKCks
IFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRVcmkoKSwgc3RhdGUuYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5
bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKHZhbHVlLT5pc1NWR1BhaW50KCkpIHsKICAgICAgICAgICAgICAgICBTVkdQYWludCog
c3ZnUGFpbnQgPSBzdGF0aWNfY2FzdDxTVkdQYWludCo+KHZhbHVlKTsKLSAgICAgICAgICAgICAg
ICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZy
b21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBtX3N0eWxlLT5jb2xvcigpKSwgc3ZnUGFpbnQt
PnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlz
aXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFp
bnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1Bh
aW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBzdGF0ZS5hcHBs
eVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkBAIC0zNjMsNyArMzYzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBl
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmlt
aXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dE1hcmtlclN0YXJ0UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJG
cm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Zn
c3R5bGUtPnNldE1hcmtlclN0YXJ0UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElk
ZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50KCkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJrZXJNaWQ6CkBA
IC0zNzcsNyArMzc3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBlID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmltaXRp
dmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1h
cmtlck1pZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlS
SVN0cmluZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxl
LT5zZXRNYXJrZXJNaWRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmll
ckZyb21JUklTdHJpbmcocywgc3RhdGUuZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmtlckVuZDoKQEAgLTM5MSw3
ICszOTEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVl
LT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFya2VyRW5k
UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5n
KHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1h
cmtlckVuZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlS
SVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlTGluZWNhcDoKQEAgLTQyOCw3ICs0
MjgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5n
ZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsdGVyUmVzb3Vy
Y2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1f
ZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbHRlclJl
c291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhz
LCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5TWFzazoKQEAgLTQ0Miw3ICs0NDIsNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkp
CiAgICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwog
Ci0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFza2VyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNl
OjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQo
KSkpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hc2tlclJlc291cmNlKFNWR1VSSVJlZmVy
ZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Q2xpcFBhdGg6CkBAIC00NTYsNyArNDU2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
ICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAg
ICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAg
c3Znc3R5bGUtPnNldENsaXBwZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRl
bnRpZmllckZyb21JUklTdHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAg
ICAgICBzdmdzdHlsZS0+c2V0Q2xpcHBlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21l
bnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dEFuY2hv
cjoKQEAgLTQ3NywxNCArNDc3LDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHN0b3BDb2xvciwgU3RvcENvbG9yKTsK
ICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAgICAgICAgIHN2
Z3N0eWxlLT5zZXRTdG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2Fz
dDxTVkdDb2xvcio+KHZhbHVlKSwgbV9zdHlsZS0+Y29sb3IoKSkpOworICAgICAgICAgICAgICAg
IHN2Z3N0eWxlLT5zZXRTdG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNf
Y2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlnaHRpbmdD
b2xvcjoKICAgICAgICAgewogICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwo
bGlnaHRpbmdDb2xvciwgTGlnaHRpbmdDb2xvcik7CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlz
U1ZHQ29sb3IoKSkKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TGlnaHRpbmdDb2xvcihj
b2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBt
X3N0eWxlLT5jb2xvcigpKSk7CisgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldExpZ2h0aW5n
Q29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2FzdDxTVkdDb2xvcio+KHZh
bHVlKSwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZsb29kT3BhY2l0eToKQEAgLTUwOSw3ICs1
MDksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChmbG9vZENvbG9yLCBGbG9vZENvbG9yKTsKICAgICAgICAgICAgIGlm
ICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGbG9v
ZENvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2
YWx1ZSksIG1fc3R5bGUtPmNvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0
Rmxvb2RDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9y
Kj4odmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5R2x5cGhPcmllbnRhdGlvbkhvcml6
b250YWw6CkBAIC01NDksNyArNTQ5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1By
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U3ZnU2hhZG93OiB7CiAgICAgICAg
ICAgICBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgICAgIHJldHVybiBzdmdzdHlsZS0+c2V0
U2hhZG93KGFkb3B0UHRyKG1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRvdygpID8gbmV3
IFNoYWRvd0RhdGEoKm1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRvdygpKSA6IDApKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gc3Znc3R5bGUtPnNldFNoYWRvdyhhZG9wdFB0cihzdGF0
ZS5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpLT5zaGFkb3coKSA/IG5ldyBTaGFkb3dEYXRhKCpz
dGF0ZS5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpLT5zaGFkb3coKSkgOiAwKSk7CiAgICAgICAg
ICAgICBpZiAoaXNJbml0aWFsIHx8IHByaW1pdGl2ZVZhbHVlKSAvLyBpbml0aWFsIHwgbm9uZQog
ICAgICAgICAgICAgICAgIHJldHVybiBzdmdzdHlsZS0+c2V0U2hhZG93KG51bGxwdHIpOwogCkBA
IC01NjQsMTIgKzU2NCwxMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKCFmaXJz
dFZhbHVlLT5pc1NoYWRvd1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgU2hhZG93VmFsdWUqIGl0ZW0gPSBzdGF0aWNfY2FzdDxTaGFkb3dWYWx1ZSo+KGZpcnN0
VmFsdWUpOwotICAgICAgICAgICAgSW50UG9pbnQgbG9jYXRpb24oaXRlbS0+eC0+Y29tcHV0ZUxl
bmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290
RWxlbWVudFN0eWxlKSk7Ci0gICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVt
LT5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKSA6
IDA7CisgICAgICAgICAgICBJbnRQb2ludCBsb2NhdGlvbihpdGVtLT54LT5jb21wdXRlTGVuZ3Ro
PGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKSwKKyAgICAgICAg
ICAgICAgICBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUu
cm9vdEVsZW1lbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIg
PyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9v
dEVsZW1lbnRTdHlsZSgpKSA6IDA7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKICAgICAgICAg
ICAgIGlmIChpdGVtLT5jb2xvcikKLSAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVBy
aW1pdGl2ZVZhbHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKKyAgICAgICAgICAgICAgICBjb2xvciA9
IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCBpdGVtLT5jb2xvci5nZXQoKSk7CiAKICAg
ICAgICAgICAgIC8vIC13ZWJraXQtc3ZnLXNoYWRvdyBkb2VzIHNob3VsZCBub3QgaGF2ZSBhIHNw
cmVhZCBvciBzdHlsZQogICAgICAgICAgICAgQVNTRVJUKCFpdGVtLT5zcHJlYWQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCA3ZjljMDk3YjFiOGRlNDM1Nzg1NWU2
ZWQ4NjhmMTVkM2Y0ZjNjODNjLi4xNzFkNWNmMjRjOWViMTU4NDYxYWY2MjhmOTNhMDdmZGY3ODFk
NGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtNjksMTkgKzY5
LDkwIEBAIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2VyKERvY3VtZW50KiBkb2N1bWVu
dCkKIHsKIH0KIAotYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoZXMoQ1NTU2VsZWN0b3IqIHNl
bCwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBpc0Zhc3RDaGVja2FibGVTZWxlY3RvcikgY29uc3QK
K25hbWVzcGFjZSB7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0Zhc3RDaGVja2FibGVSZWxhdGlv
bihDU1NTZWxlY3Rvcjo6UmVsYXRpb24gcmVsYXRpb24pCiB7Ci0gICAgaWYgKGlzRmFzdENoZWNr
YWJsZVNlbGVjdG9yICYmICFlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkgewotICAgICAgICBpZiAo
IWZhc3RDaGVja1JpZ2h0bW9zdFNlbGVjdG9yKHNlbCwgZWxlbWVudCwgVmlzaXRlZE1hdGNoRGlz
YWJsZWQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gZmFzdENo
ZWNrKHNlbCwgZWxlbWVudCk7CisgICAgcmV0dXJuIHJlbGF0aW9uID09IENTU1NlbGVjdG9yOjpE
ZXNjZW5kYW50IHx8IHJlbGF0aW9uID09IENTU1NlbGVjdG9yOjpDaGlsZCB8fCByZWxhdGlvbiA9
PSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3I7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0Zh
c3RDaGVja2FibGVNYXRjaChjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgaWYg
KHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpTZXQpIHsKKyAgICAgICAgLy8gU3R5
bGUgYXR0cmlidXRlIGlzIGdlbmVyYXRlZCBsYXppbHkgYnV0IHRoZSBmYXN0IHBhdGggZG9lc24n
dCB0cmlnZ2VyIGl0LgorICAgICAgICAvLyBEaXNhbGxvdyB0aGVtIGhlcmUgcmF0aGVyIHRoYW4g
bWFraW5nIHRoZSBmYXN0IHBhdGggbW9yZSBicmFuY2h5LgorICAgICAgICByZXR1cm4gc2VsZWN0
b3ItPmF0dHJpYnV0ZSgpICE9IHN0eWxlQXR0cjsKICAgICB9CisgICAgaWYgKHNlbGVjdG9yLT5t
X21hdGNoID09IENTU1NlbGVjdG9yOjpFeGFjdCkKKyAgICAgICAgcmV0dXJuIHNlbGVjdG9yLT5h
dHRyaWJ1dGUoKSAhPSBzdHlsZUF0dHIgJiYgSFRNTERvY3VtZW50Ojppc0Nhc2VTZW5zaXRpdmVB
dHRyaWJ1dGUoc2VsZWN0b3ItPmF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gc2VsZWN0b3ItPm1f
bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZyB8fCBzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxl
Y3Rvcjo6SWQgfHwgc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzOworfQog
Ci0gICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwotICAgIHJldHVy
biBtYXRjaChTZWxlY3RvckNoZWNraW5nQ29udGV4dChzZWwsIGVsZW1lbnQsIFNlbGVjdG9yQ2hl
Y2tlcjo6VmlzaXRlZE1hdGNoRGlzYWJsZWQpLCBpZ25vcmVEeW5hbWljUHNldWRvLCBET01TaWJs
aW5nVHJhdmVyc2FsU3RyYXRlZ3koKSkgPT0gU2VsZWN0b3JNYXRjaGVzOworc3RhdGljIGlubGlu
ZSBib29sIGlzRmFzdENoZWNrYWJsZVJpZ2h0bW9zdFNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9y
KiBzZWxlY3RvcikKK3sKKyAgICBpZiAoIWlzRmFzdENoZWNrYWJsZVJlbGF0aW9uKHNlbGVjdG9y
LT5yZWxhdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBpc0Zhc3RD
aGVja2FibGVNYXRjaChzZWxlY3RvcikgfHwgU2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVk
b0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IpOwogfQogCi1uYW1lc3BhY2UgeworaW5saW5lIGJvb2wg
Y2hlY2tUYWdWYWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciog
c2VsZWN0b3IpCit7CisgICAgcmV0dXJuIFNlbGVjdG9yQ2hlY2tlcjo6dGFnTWF0Y2hlcyhlbGVt
ZW50LCBzZWxlY3Rvci0+dGFnUU5hbWUoKSk7Cit9CisKK2lubGluZSBib29sIGNoZWNrQ2xhc3NW
YWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3Ip
Cit7CisgICAgcmV0dXJuIGVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgc3RhdGljX2Nhc3Q8Y29uc3Qg
U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5jbGFzc05hbWVzKCkuY29udGFpbnMoc2VsZWN0b3It
PnZhbHVlKCkuaW1wbCgpKTsKK30KKworaW5saW5lIGJvb2wgY2hlY2tJRFZhbHVlKGNvbnN0IEVs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICByZXR1
cm4gZWxlbWVudC0+aGFzSUQoKSAmJiBlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmlt
cGwoKSA9PSBzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCk7Cit9CisKK2lubGluZSBib29sIGNoZWNr
RXhhY3RBdHRyaWJ1dGVWYWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxl
Y3Rvciogc2VsZWN0b3IpCit7CisgICAgcmV0dXJuIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tFeGFj
dEF0dHJpYnV0ZShlbGVtZW50LCBzZWxlY3Rvci0+YXR0cmlidXRlKCksIHNlbGVjdG9yLT52YWx1
ZSgpLmltcGwoKSk7Cit9CisKK2lubGluZSBib29sIGNvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3JN
YXRjaGVzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3Rv
ciwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGUpCit7
CisgICAgQVNTRVJUKFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9y
KHNlbGVjdG9yKSk7CisgICAgc3dpdGNoIChzZWxlY3Rvci0+cHNldWRvVHlwZSgpKSB7CisgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGluazoKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9BbnlMaW5rOgorICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNMaW5rKCk7CisgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZDoKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmlzTGlu
aygpICYmIHZpc2l0ZWRNYXRjaFR5cGUgPT0gU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hF
bmFibGVkOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZvY3VzOgorICAgICAgICByZXR1
cm4gbWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MoZWxlbWVudCk7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitp
bmxpbmUgYm9vbCBmYXN0Q2hlY2tSaWdodG1vc3RTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciog
c2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRl
ZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlKQoreworICAgIEFTU0VSVChTZWxlY3RvckNoZWNr
ZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKHNlbGVjdG9yKSk7CisKKyAgICBzd2l0Y2ggKHNl
bGVjdG9yLT5tX21hdGNoKSB7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6VGFnOgorICAgICAgICBy
ZXR1cm4gY2hlY2tUYWdWYWx1ZShlbGVtZW50LCBzZWxlY3Rvcik7CisgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6Q2xhc3M6CisgICAgICAgIHJldHVybiBjaGVja0NsYXNzVmFsdWUoZWxlbWVudCwgc2Vs
ZWN0b3IpOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OklkOgorICAgICAgICByZXR1cm4gY2hlY2tJ
RFZhbHVlKGVsZW1lbnQsIHNlbGVjdG9yKTsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpFeGFjdDoK
KyAgICBjYXNlIENTU1NlbGVjdG9yOjpTZXQ6CisgICAgICAgIHJldHVybiBjaGVja0V4YWN0QXR0
cmlidXRlVmFsdWUoZWxlbWVudCwgc2VsZWN0b3IpOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0NsYXNzOgorICAgICAgICByZXR1cm4gY29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvck1hdGNo
ZXMoZWxlbWVudCwgc2VsZWN0b3IsIHZpc2l0ZWRNYXRjaFR5cGUpOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CiAKIHRlbXBsYXRlIDxib29sIGNoZWNrVmFsdWUoY29uc3QgRWxlbWVudCosIGNvbnN0IENTU1Nl
bGVjdG9yKik+CiBpbmxpbmUgYm9vbCBmYXN0Q2hlY2tTaW5nbGVTZWxlY3Rvcihjb25zdCBDU1NT
ZWxlY3RvciomIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiYgZWxlbWVudCwgY29uc3QgQ1NTU2Vs
ZWN0b3IqJiB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqJiB0b3BDaGlsZE9y
U3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpCkBAIC0xMTcsNTEgKzE4OCwzNCBAQCBpbmxpbmUgYm9v
bCBmYXN0Q2hlY2tTaW5nbGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciomIHNlbGVjdG9yLCBj
b25zdCBFbGVtZW50KgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW5saW5lIGJvb2wgY2hlY2tD
bGFzc1ZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxl
Y3RvcikKLXsKLSAgICByZXR1cm4gZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBzdGF0aWNfY2FzdDxj
b25zdCBTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmNsYXNzTmFtZXMoKS5jb250YWlucyhzZWxl
Y3Rvci0+dmFsdWUoKS5pbXBsKCkpOwogfQogCi1pbmxpbmUgYm9vbCBjaGVja0lEVmFsdWUoY29u
c3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAg
IHJldHVybiBlbGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9u
KCkuaW1wbCgpID09IHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKTsKLX0KLQotaW5saW5lIGJvb2wg
Y2hlY2tFeGFjdEF0dHJpYnV0ZVZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICByZXR1cm4gU2VsZWN0b3JDaGVja2VyOjpjaGVj
a0V4YWN0QXR0cmlidXRlKGVsZW1lbnQsIHNlbGVjdG9yLT5hdHRyaWJ1dGUoKSwgc2VsZWN0b3It
PnZhbHVlKCkuaW1wbCgpKTsKLX0KLQotaW5saW5lIGJvb2wgY2hlY2tUYWdWYWx1ZShjb25zdCBF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCitib29sIFNlbGVj
dG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yKQogewotICAgIHJldHVybiBTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMoZWxlbWVu
dCwgc2VsZWN0b3ItPnRhZ1FOYW1lKCkpOwotfQotCisgICAgaWYgKCFpc0Zhc3RDaGVja2FibGVS
aWdodG1vc3RTZWxlY3RvcihzZWxlY3RvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBm
b3IgKHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsgc2VsZWN0b3I7IHNlbGVjdG9y
ID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgeworICAgICAgICBpZiAoIWlzRmFzdENoZWNrYWJs
ZVJlbGF0aW9uKHNlbGVjdG9yLT5yZWxhdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKCFpc0Zhc3RDaGVja2FibGVNYXRjaChzZWxlY3RvcikpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUg
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdFNlbGVjdG9yKGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvciwgY29uc3QgRWxlbWVudCogZWxlbWVudCwgVmlzaXRlZE1hdGNo
VHlwZSB2aXNpdGVkTWF0Y2hUeXBlKSBjb25zdAorYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNo
ZXMoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBpc0Zhc3RDaGVja2Fi
bGVTZWxlY3RvcikgY29uc3QKIHsKLSAgICBBU1NFUlQoaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Io
c2VsZWN0b3IpKTsKLQotICAgIHN3aXRjaCAoc2VsZWN0b3ItPm1fbWF0Y2gpIHsKLSAgICBjYXNl
IENTU1NlbGVjdG9yOjpUYWc6Ci0gICAgICAgIHJldHVybiBjaGVja1RhZ1ZhbHVlKGVsZW1lbnQs
IHNlbGVjdG9yKTsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpDbGFzczoKLSAgICAgICAgcmV0dXJu
IGNoZWNrQ2xhc3NWYWx1ZShlbGVtZW50LCBzZWxlY3Rvcik7Ci0gICAgY2FzZSBDU1NTZWxlY3Rv
cjo6SWQ6Ci0gICAgICAgIHJldHVybiBjaGVja0lEVmFsdWUoZWxlbWVudCwgc2VsZWN0b3IpOwot
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkV4YWN0OgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNldDoK
LSAgICAgICAgcmV0dXJuIGNoZWNrRXhhY3RBdHRyaWJ1dGVWYWx1ZShlbGVtZW50LCBzZWxlY3Rv
cik7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3M6Ci0gICAgICAgIHJldHVybiBj
b21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yTWF0Y2hlcyhlbGVtZW50LCBzZWxlY3RvciwgdmlzaXRl
ZE1hdGNoVHlwZSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgaWYgKGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yICYmICFlbGVtZW50LT5pc1NWR0VsZW1l
bnQoKSkgeworICAgICAgICBpZiAoIWZhc3RDaGVja1JpZ2h0bW9zdFNlbGVjdG9yKHNlbCwgZWxl
bWVudCwgVmlzaXRlZE1hdGNoRGlzYWJsZWQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gZmFzdENoZWNrKHNlbCwgZWxlbWVudCk7CiAgICAgfQotICAgIHJldHVy
biBmYWxzZTsKKworICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsK
KyAgICByZXR1cm4gbWF0Y2goU2VsZWN0b3JDaGVja2luZ0NvbnRleHQoc2VsLCBlbGVtZW50LCBT
ZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaERpc2FibGVkKSwgaWdub3JlRHluYW1pY1BzZXVk
bywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KCkpID09IFNlbGVjdG9yTWF0Y2hlczsKIH0K
IAotYm9vbCBTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVjayhjb25zdCBDU1NTZWxlY3Rvciogc2Vs
ZWN0b3IsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Citib29sIFNlbGVjdG9yQ2hlY2tl
cjo6ZmFzdENoZWNrKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgY29uc3QgRWxlbWVudCog
ZWxlbWVudCkKIHsKICAgICBBU1NFUlQoZmFzdENoZWNrUmlnaHRtb3N0U2VsZWN0b3Ioc2VsZWN0
b3IsIGVsZW1lbnQsIFZpc2l0ZWRNYXRjaEVuYWJsZWQpKTsKIApAQCAtMjAyLDQzICsyNTYsNiBA
QCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxl
Y3RvciwgY29uc3QgRWxlbWVudCogZWxlbQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMg
aW5saW5lIGJvb2wgaXNGYXN0Q2hlY2thYmxlUmVsYXRpb24oQ1NTU2VsZWN0b3I6OlJlbGF0aW9u
IHJlbGF0aW9uKQotewotICAgIHJldHVybiByZWxhdGlvbiA9PSBDU1NTZWxlY3Rvcjo6RGVzY2Vu
ZGFudCB8fCByZWxhdGlvbiA9PSBDU1NTZWxlY3Rvcjo6Q2hpbGQgfHwgcmVsYXRpb24gPT0gQ1NT
U2VsZWN0b3I6OlN1YlNlbGVjdG9yOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNGYXN0Q2hl
Y2thYmxlTWF0Y2goY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIGlmIChzZWxl
Y3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6U2V0KSB7Ci0gICAgICAgIC8vIFN0eWxlIGF0
dHJpYnV0ZSBpcyBnZW5lcmF0ZWQgbGF6aWx5IGJ1dCB0aGUgZmFzdCBwYXRoIGRvZXNuJ3QgdHJp
Z2dlciBpdC4KLSAgICAgICAgLy8gRGlzYWxsb3cgdGhlbSBoZXJlIHJhdGhlciB0aGFuIG1ha2lu
ZyB0aGUgZmFzdCBwYXRoIG1vcmUgYnJhbmNoeS4KLSAgICAgICAgcmV0dXJuIHNlbGVjdG9yLT5h
dHRyaWJ1dGUoKSAhPSBzdHlsZUF0dHI7Ci0gICAgfQotICAgIGlmIChzZWxlY3Rvci0+bV9tYXRj
aCA9PSBDU1NTZWxlY3Rvcjo6RXhhY3QpCi0gICAgICAgIHJldHVybiBzZWxlY3Rvci0+YXR0cmli
dXRlKCkgIT0gc3R5bGVBdHRyICYmIEhUTUxEb2N1bWVudDo6aXNDYXNlU2Vuc2l0aXZlQXR0cmli
dXRlKHNlbGVjdG9yLT5hdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIHNlbGVjdG9yLT5tX21hdGNo
ID09IENTU1NlbGVjdG9yOjpUYWcgfHwgc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6
OklkIHx8IHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzczsKLX0KLQotc3Rh
dGljIGlubGluZSBib29sIGlzRmFzdENoZWNrYWJsZVJpZ2h0bW9zdFNlbGVjdG9yKGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICBpZiAoIWlzRmFzdENoZWNrYWJsZVJlbGF0aW9u
KHNlbGVjdG9yLT5yZWxhdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVy
biBpc0Zhc3RDaGVja2FibGVNYXRjaChzZWxlY3RvcikgfHwgU2VsZWN0b3JDaGVja2VyOjppc0Nv
bW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IpOwotfQotCi1ib29sIFNlbGVjdG9yQ2hl
Y2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
KQotewotICAgIGlmICghaXNGYXN0Q2hlY2thYmxlUmlnaHRtb3N0U2VsZWN0b3Ioc2VsZWN0b3Ip
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChzZWxlY3RvciA9IHNlbGVjdG9yLT50
YWdIaXN0b3J5KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkp
IHsKLSAgICAgICAgaWYgKCFpc0Zhc3RDaGVja2FibGVSZWxhdGlvbihzZWxlY3Rvci0+cmVsYXRp
b24oKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghaXNGYXN0Q2hl
Y2thYmxlTWF0Y2goc2VsZWN0b3IpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogLy8gUmVjdXJzaXZlIGNoZWNrIG9mIHNlbGVjdG9ycyBh
bmQgY29tYmluYXRvcnMKIC8vIEl0IGNhbiByZXR1cm4gNCBkaWZmZXJlbnQgdmFsdWVzOgogLy8g
KiBTZWxlY3Rvck1hdGNoZXMgICAgICAgICAgLSB0aGUgc2VsZWN0b3IgbWF0Y2hlcyB0aGUgZWxl
bWVudCBlCkBAIC05OTYsMjMgKzEwMTMsNiBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tT
Y3JvbGxiYXJQc2V1ZG9DbGFzcyhEb2N1bWVudCogZG9jdW1lbnQsIENTU1NlbGVjdG9yKgogICAg
IH0KIH0KIAotYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3JN
YXRjaGVzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3Rv
ciwgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlKSBjb25zdAotewotICAgIEFTU0VS
VChpc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IpKTsKLSAgICBzd2l0Y2ggKHNl
bGVjdG9yLT5wc2V1ZG9UeXBlKCkpIHsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5r
OgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FueUxpbms6Ci0gICAgICAgIHJldHVybiBl
bGVtZW50LT5pc0xpbmsoKTsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkOgot
ICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNMaW5rKCkgJiYgdmlzaXRlZE1hdGNoVHlwZSA9PSBW
aXNpdGVkTWF0Y2hFbmFibGVkOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZvY3VzOgot
ICAgICAgICByZXR1cm4gbWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MoZWxlbWVudCk7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCiB1bnNpZ25lZCBTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtNYXRjaFR5
cGUoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQogewogICAgIHVuc2lnbmVkIGxpbmtNYXRj
aFR5cGUgPSBNYXRjaEFsbDsKQEAgLTEwNTgsMTEgKzEwNTgsNiBAQCB1bnNpZ25lZCBTZWxlY3Rv
ckNoZWNrZXI6OmRldGVybWluZUxpbmtNYXRjaFR5cGUoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yKQogICAgIHJldHVybiBsaW5rTWF0Y2hUeXBlOwogfQogCi1ib29sIFNlbGVjdG9yQ2hlY2tl
cjo6aXNGcmFtZUZvY3VzZWQoY29uc3QgRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICByZXR1cm4g
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiBlbGVtZW50LT5kb2N1bWVudCgpLT5mcmFt
ZSgpLT5zZWxlY3Rpb24oKS0+aXNGb2N1c2VkQW5kQWN0aXZlKCk7Ci19Ci0KIHRlbXBsYXRlCiBT
ZWxlY3RvckNoZWNrZXI6Ok1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2goY29uc3QgU2VsZWN0
b3JDaGVja2luZ0NvbnRleHQmLCBQc2V1ZG9JZCYsIGNvbnN0IERPTVNpYmxpbmdUcmF2ZXJzYWxT
dHJhdGVneSYpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0
b3JDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKaW5kZXgg
OTJmODYyMTZjYWU3MjA2MTYyOGI2NzE0ZmIzM2FiN2RkNjhlNGUxMC4uYjM1NzIwNTNjODEwYjVk
ZWVmYzUyZjMxYTE1OWE4OTE3ZGUyODg0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L1NlbGVjdG9yQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuaApAQCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjaGVja09uZShjb25zdCBT
ZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIGNvbnN0IFNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSYp
IGNvbnN0OwogCiAgICAgc3RhdGljIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3Qg
Q1NTU2VsZWN0b3IqKTsKLSAgICBib29sIGZhc3RDaGVjayhjb25zdCBDU1NTZWxlY3RvciosIGNv
bnN0IEVsZW1lbnQqKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBmYXN0Q2hlY2soY29uc3QgQ1NT
U2VsZWN0b3IqLCBjb25zdCBFbGVtZW50Kik7CiAKICAgICBib29sIHN0cmljdFBhcnNpbmcoKSBj
b25zdCB7IHJldHVybiBtX3N0cmljdFBhcnNpbmc7IH0KIApAQCAtOTMsNyArOTMsNiBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgYm9vbCB0YWdNYXRjaGVzKGNvbnN0IEVsZW1lbnQqLCBjb25zdCBR
dWFsaWZpZWROYW1lJik7CiAgICAgc3RhdGljIGJvb2wgaXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVj
dG9yKGNvbnN0IENTU1NlbGVjdG9yKik7Ci0gICAgYm9vbCBtYXRjaGVzRm9jdXNQc2V1ZG9DbGFz
cyhjb25zdCBFbGVtZW50KikgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wgZmFzdENoZWNrUmlnaHRt
b3N0QXR0cmlidXRlU2VsZWN0b3IoY29uc3QgRWxlbWVudCosIGNvbnN0IENTU1NlbGVjdG9yKik7
CiAgICAgc3RhdGljIGJvb2wgY2hlY2tFeGFjdEF0dHJpYnV0ZShjb25zdCBFbGVtZW50KiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgc2VsZWN0b3JBdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNTdHJp
bmdJbXBsKiB2YWx1ZSk7CiAKQEAgLTEwMiwxMCArMTAxLDYgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIGJvb2wgY2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhEb2N1bWVudCosIENTU1NlbGVj
dG9yKikgY29uc3Q7Ci0gICAgc3RhdGljIGJvb2wgaXNGcmFtZUZvY3VzZWQoY29uc3QgRWxlbWVu
dCopOwotCi0gICAgYm9vbCBmYXN0Q2hlY2tSaWdodG1vc3RTZWxlY3Rvcihjb25zdCBDU1NTZWxl
Y3RvciosIGNvbnN0IEVsZW1lbnQqLCBWaXNpdGVkTWF0Y2hUeXBlKSBjb25zdDsKLSAgICBib29s
IGNvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3JNYXRjaGVzKGNvbnN0IEVsZW1lbnQqLCBjb25zdCBD
U1NTZWxlY3RvciosIFZpc2l0ZWRNYXRjaFR5cGUpIGNvbnN0OwogCiAgICAgYm9vbCBtX3N0cmlj
dFBhcnNpbmc7CiAgICAgYm9vbCBtX2RvY3VtZW50SXNIVE1MOwpAQCAtMTIzLDcgKzExOCwxMiBA
QCBpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rv
cihjb25zdCBDU1NTZWxlY3Rvciogc2VsZQogICAgICAgICB8fCBwc2V1ZG9UeXBlID09IENTU1Nl
bGVjdG9yOjpQc2V1ZG9Gb2N1czsKIH0KIAotaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpt
YXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhjb25zdCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAoraW5s
aW5lIGJvb2wgaXNGcmFtZUZvY3VzZWQoY29uc3QgRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBy
ZXR1cm4gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiBlbGVtZW50LT5kb2N1bWVudCgp
LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+aXNGb2N1c2VkQW5kQWN0aXZlKCk7Cit9CisKK2lubGlu
ZSBib29sIG1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiB7
CiAgICAgaWYgKEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShjb25z
dF9jYXN0PEVsZW1lbnQqPihlbGVtZW50KSwgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZvY3VzKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVC
dWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCmluZGV4IDZk
NzhjNjg0NDQyY2M3ZTI0ZWJmOWE2Mjg2N2JkODg5OWZlNzk4ZTYuLmMzMzY1ZWE4MGVhOWJkYTdm
ZGU0MTg0MTk3OTQ2ZWY5Y2NiMzA1MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3Bw
CkBAIC02MSw3ICs2MSw3IEBAIGNsYXNzIEFwcGx5UHJvcGVydHlFeHBhbmRpbmcgewogcHVibGlj
OgogCiAgICAgdGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQ+Ci0gICAgc3RhdGljIGlubGluZSB2
b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlJbmhlcml0
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUp
CiAgICAgewogICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtNjksMjAgKzY5LDIwIEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgU3R5
bGVCdWlsZGVyJiB0YWJsZSA9IFN0eWxlQnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVyKCk7CiAg
ICAgICAgIGNvbnN0IFByb3BlcnR5SGFuZGxlciYgaGFuZGxlciA9IHRhYmxlLnByb3BlcnR5SGFu
ZGxlcihpZCk7CiAgICAgICAgIGlmIChoYW5kbGVyLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIGhh
bmRsZXIuYXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAg
ICAgICAgICBoYW5kbGVyLmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQg
YXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVT
dGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTxvbmU+KHByb3Bl
cnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTx0d28+KHBy
b3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTx0aHJl
ZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5oZXJpdFZhbHVl
PGZvdXI+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaGVyaXRW
YWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJbmhl
cml0VmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5oZXJpdFZh
bHVlPHR3bz4ocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTx0
aHJlZT4ocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTxmb3Vy
Pihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPGZpdmU+KHBy
b3BlcnR5SUQsIHN0YXRlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJRCBp
ZD4KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7CiAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9w
ZXJ0eUludmFsaWQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC05MCwyMCArOTAsMjAgQEAgcHVi
bGljOgogICAgICAgICBjb25zdCBTdHlsZUJ1aWxkZXImIHRhYmxlID0gU3R5bGVCdWlsZGVyOjpz
aGFyZWRTdHlsZUJ1aWxkZXIoKTsKICAgICAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5k
bGVyID0gdGFibGUucHJvcGVydHlIYW5kbGVyKGlkKTsKICAgICAgICAgaWYgKGhhbmRsZXIuaXNW
YWxpZCgpKQotICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlE
LCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbml0aWFsVmFsdWUo
cHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlh
bFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIGFwcGx5
SW5pdGlhbFZhbHVlPG9uZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFw
cGx5SW5pdGlhbFZhbHVlPHR3bz4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAg
IGFwcGx5SW5pdGlhbFZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAg
ICAgICAgYXBwbHlJbml0aWFsVmFsdWU8Zm91cj4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7
Ci0gICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPGZpdmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2
ZXIpOworICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0YXRlKTsK
KyAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAg
ICAgIGFwcGx5SW5pdGlhbFZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAg
IGFwcGx5SW5pdGlhbFZhbHVlPGZvdXI+KHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgYXBw
bHlJbml0aWFsVmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAogICAgIHRl
bXBsYXRlIDxDU1NQcm9wZXJ0eUlEIGlkPgotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKQog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTExLDE5ICsxMTEsMTkgQEAgcHVibGljOgogICAgICAg
ICBjb25zdCBTdHlsZUJ1aWxkZXImIHRhYmxlID0gU3R5bGVCdWlsZGVyOjpzaGFyZWRTdHlsZUJ1
aWxkZXIoKTsKICAgICAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0gdGFibGUu
cHJvcGVydHlIYW5kbGVyKGlkKTsKICAgICAgICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgaGFuZGxlci5hcHBseVZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZh
bHVlKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSwg
dmFsdWUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFs
dWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAg
ICAgaWYgKCFleHBhbmRWYWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBhcHBs
eVZhbHVlPG9uZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBh
cHBseVZhbHVlPHR3bz4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAg
ICBhcHBseVZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7Ci0g
ICAgICAgIGFwcGx5VmFsdWU8Zm91cj4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUp
OwotICAgICAgICBhcHBseVZhbHVlPGZpdmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZh
bHVlKTsKKyAgICAgICAgYXBwbHlWYWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIGFwcGx5VmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAg
ICAgICBhcHBseVZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAgICAg
ICBhcHBseVZhbHVlPGZvdXI+KHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGFw
cGx5VmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKICAgICB9CiAgICAgc3Rh
dGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5k
bGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7
IH0KIH07CkBAIC0xMzQsOSArMTM0LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZh
bHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgU2V0dGVyVHlwZSB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0
ZXJGdW5jdGlvbikodmFsdWUpOyB9CiAgICAgc3RhdGljIEdldHRlclR5cGUgdmFsdWUoUmVuZGVy
U3R5bGUqIHN0eWxlKSB7IHJldHVybiAoc3R5bGUtPipnZXR0ZXJGdW5jdGlvbikoKTsgfQogICAg
IHN0YXRpYyBJbml0aWFsVHlwZSBpbml0aWFsKCkgeyByZXR1cm4gKCppbml0aWFsRnVuY3Rpb24p
KCk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKSB7IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCksIHZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsgfQotICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIpIHsgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgaW5pdGlhbCgp
KTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciosIENTU1ZhbHVlKikgeyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKSB7IHNldFZhbHVlKHN0YXRl
LnN0eWxlKCksIHZhbHVlKHN0YXRlLnBhcmVudFN0eWxlKCkpKTsgfQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0
ZSkgeyBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBpbml0aWFsKCkpOyB9CisgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYsIENTU1ZhbHVl
KikgeyB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1
cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVl
LCAmYXBwbHlWYWx1ZSk7IH0KIH07CiAKQEAgLTE0NCwxMCArMTQ0LDEwIEBAIHRlbXBsYXRlIDx0
eXBlbmFtZSBHZXR0ZXJUeXBlLCBHZXR0ZXJUeXBlIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0
aW9uKSgpIGNvbnN0CiBjbGFzcyBBcHBseVByb3BlcnR5RGVmYXVsdCB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBTZXR0ZXJUeXBlIHZhbHVl
KSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAg
ICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICBzZXRWYWx1ZShz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCAqc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2
YWx1ZSkpOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgKnN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5
SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xNjAsMTYgKzE2MCwxNiBAQCB0ZW1w
bGF0ZSA8dHlwZW5hbWUgTnVtYmVyVHlwZSwgTnVtYmVyVHlwZSAoUmVuZGVyU3R5bGU6OipnZXR0
ZXJGdW5jdGlvbikoKSBjb25zdAogY2xhc3MgQXBwbHlQcm9wZXJ0eU51bWJlciB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBOdW1iZXJUeXBl
IHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsK
ICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0
dXJuOwogCiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gaWRNYXBzVG9NaW51c09uZSkKLSAgICAgICAgICAgIHNldFZh
bHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIC0xKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0
YXRlLnN0eWxlKCksIC0xKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlPE51bWJlclR5cGU+
KENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShz
dGF0ZS5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWU8TnVtYmVyVHlwZT4oQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFu
ZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xODEsNyArMTgxLDcgQEAgcHVibGljOgog
dGVtcGxhdGUgPFN0eWxlSW1hZ2UqIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNv
bnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShQYXNzUmVmUHRyPFN0eWxl
SW1hZ2U+KSwgU3R5bGVJbWFnZSogKCppbml0aWFsRnVuY3Rpb24pKCksIENTU1Byb3BlcnR5SUQg
cHJvcGVydHk+CiBjbGFzcyBBcHBseVByb3BlcnR5U3R5bGVJbWFnZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpIHsgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPipz
ZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShwcm9wZXJ0eSwgdmFsdWUp
KTsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpIHsgKHN0YXRlLnN0eWxlKCktPipzZXR0
ZXJGdW5jdGlvbikoU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShzdGF0ZSwgcHJvcGVydHksIHZh
bHVlKSk7IH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAg
IHsKICAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVmYXVs
dEJhc2U8U3R5bGVJbWFnZSosIGdldHRlckZ1bmN0aW9uLCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
LCBzZXR0ZXJGdW5jdGlvbiwgU3R5bGVJbWFnZSosIGluaXRpYWxGdW5jdGlvbj46OmNyZWF0ZUhh
bmRsZXIoKTsKQEAgLTE5OCwyOCArMTk4LDI4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBo
YXNBdXRvKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gKHN0eWxlLT4qaGFzQXV0b0Z1bmN0
aW9uKSgpOyB9CiAgICAgc3RhdGljIHZvaWQgc2V0QXV0byhSZW5kZXJTdHlsZSogc3R5bGUpIHsg
KHN0eWxlLT4qc2V0QXV0b0Z1bmN0aW9uKSgpOyB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIGlmIChoYXNBdXRvKHN0eWxlUmVzb2x2
ZXItPnBhcmVudFN0eWxlKCkpKQotICAgICAgICAgICAgc2V0QXV0byhzdHlsZVJlc29sdmVyLT5z
dHlsZSgpKTsKKyAgICAgICAgaWYgKGhhc0F1dG8oc3RhdGUucGFyZW50U3R5bGUoKSkpCisgICAg
ICAgICAgICBzZXRBdXRvKHN0YXRlLnN0eWxlKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCB2YWx1ZShzdHlsZVJlc29sdmVyLT5w
YXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCB2YWx1
ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJ
bml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikg
eyBzZXRBdXRvKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpOyB9CisgICAgc3RhdGljIHZvaWQgYXBw
bHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKSB7
IHNldEF1dG8oc3RhdGUuc3R5bGUoKSk7IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZh
bHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBhdXRvSWRlbnRpdHkpCi0gICAgICAgICAgICBzZXRBdXRvKHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCkpOworICAgICAgICAgICAgc2V0QXV0byhzdGF0ZS5zdHlsZSgpKTsKICAgICAgICAgZWxz
ZSBpZiAodmFsdWVUeXBlID09IE51bWJlcikKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksICpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBzZXRWYWx1ZShz
dGF0ZS5zdHlsZSgpLCAqcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICBlbHNlIGlmICh2YWx1ZVR5
cGUgPT0gQ29tcHV0ZUxlbmd0aCkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0
ZS5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdGF0ZS5zdHlsZSgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigp
IHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRp
YWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBAIC0yMjcsMjcgKzIyNywyNyBAQCBwdWJsaWM6CiAK
IGNsYXNzIEFwcGx5UHJvcGVydHlDbGlwIHsKIHByaXZhdGU6Ci0gICAgc3RhdGljIExlbmd0aCBj
b252ZXJ0VG9MZW5ndGgoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTUHJpbWl0aXZl
VmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKFN0eWxlUmVz
b2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8
IFBlcmNlbnRDb252ZXJzaW9uIHwgRnJhY3Rpb25Db252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUo
KSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgcmV0
dXJuIHZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNl
bnRDb252ZXJzaW9uIHwgRnJhY3Rpb25Db252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KHN0YXRl
LnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0
aXZlWm9vbSgpKTsKICAgICB9CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKTsKKyAgICAg
ICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gc3RhdGUucGFyZW50U3R5bGUoKTsKICAgICAg
ICAgaWYgKCFwYXJlbnRTdHlsZS0+aGFzQ2xpcCgpKQotICAgICAgICAgICAgcmV0dXJuIGFwcGx5
SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRDbGlwKHBhcmVudFN0eWxlLT5jbGlwVG9wKCksIHBhcmVudFN0
eWxlLT5jbGlwUmlnaHQoKSwgcGFyZW50U3R5bGUtPmNsaXBCb3R0b20oKSwgcGFyZW50U3R5bGUt
PmNsaXBMZWZ0KCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlw
KHRydWUpOworICAgICAgICAgICAgcmV0dXJuIGFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQs
IHN0YXRlKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q2xpcChwYXJlbnRTdHlsZS0+Y2xp
cFRvcCgpLCBwYXJlbnRTdHlsZS0+Y2xpcFJpZ2h0KCksIHBhcmVudFN0eWxlLT5jbGlwQm90dG9t
KCksIHBhcmVudFN0eWxlLT5jbGlwTGVmdCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
SGFzQ2xpcCh0cnVlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRl
JiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENsaXAo
TGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCkpOwotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKGZhbHNlKTsKKyAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSk7CisgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc0NsaXAoZmFsc2UpOwogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0yNTUsMTUgKzI1NSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsdWUpOwogCiAgICAgICAgIGlmIChSZWN0KiByZWN0ID0gcHJpbWl0aXZlVmFsdWUtPmdldFJl
Y3RWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBMZW5ndGggdG9wID0gY29udmVydFRvTGVuZ3RoKHN0
eWxlUmVzb2x2ZXIsIHJlY3QtPnRvcCgpKTsKLSAgICAgICAgICAgIExlbmd0aCByaWdodCA9IGNv
bnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0LT5yaWdodCgpKTsKLSAgICAgICAgICAg
IExlbmd0aCBib3R0b20gPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+Ym90
dG9tKCkpOwotICAgICAgICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVS
ZXNvbHZlciwgcmVjdC0+bGVmdCgpKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldENsaXAodG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsKLSAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0NsaXAodHJ1ZSk7CisgICAgICAgICAgICBMZW5ndGgg
dG9wID0gY29udmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0LT50b3AoKSk7CisgICAgICAgICAgICBM
ZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3QtPnJpZ2h0KCkpOworICAg
ICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdC0+Ym90
dG9tKCkpOworICAgICAgICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgoc3RhdGUs
IHJlY3QtPmxlZnQoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDbGlwKHRvcCwg
cmlnaHQsIGJvdHRvbSwgbGVmdCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXND
bGlwKHRydWUpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlQXV0bykgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSk7Ci0gICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKGZhbHNlKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldENsaXAoTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSwg
TGVuZ3RoKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQ2xpcChmYWxzZSk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI4MSw0MCArMjgxLDQwIEBAIHRlbXBsYXRlIDxDb2xv
ckluaGVyaXQgaW5oZXJpdENvbG9yRnJvbVBhcmVudCwKICAgICAgICAgICBDb2xvciAoKmluaXRp
YWxGdW5jdGlvbikoKSA9ICZkZWZhdWx0SW5pdGlhbENvbG9yPgogY2xhc3MgQXBwbHlQcm9wZXJ0
eUNvbG9yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0
ZSkKICAgICB7CiAgICAgICAgIC8vIFZpc2l0ZWQgbGluayBzdHlsZSBjYW4gbmV2ZXIgZXhwbGlj
aXRseSBpbmhlcml0IGZyb20gcGFyZW50IHZpc2l0ZWQgbGluayBzdHlsZSBzbyBubyBzZXBhcmF0
ZSBnZXR0ZXJzIGFyZSBuZWVkZWQuCi0gICAgICAgIENvbG9yIGNvbG9yID0gKHN0eWxlUmVzb2x2
ZXItPnBhcmVudFN0eWxlKCktPipnZXR0ZXJGdW5jdGlvbikoKTsKLSAgICAgICAgYXBwbHlDb2xv
clZhbHVlKHN0eWxlUmVzb2x2ZXIsIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogKHN0eWxlUmVz
b2x2ZXItPnBhcmVudFN0eWxlKCktPipkZWZhdWx0RnVuY3Rpb24pKCkpOworICAgICAgICBDb2xv
ciBjb2xvciA9IChzdGF0ZS5wYXJlbnRTdHlsZSgpLT4qZ2V0dGVyRnVuY3Rpb24pKCk7CisgICAg
ICAgIGFwcGx5Q29sb3JWYWx1ZShzdGF0ZSwgY29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiAoc3Rh
dGUucGFyZW50U3R5bGUoKS0+KmRlZmF1bHRGdW5jdGlvbikoKSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBhcHBseUNv
bG9yVmFsdWUoc3R5bGVSZXNvbHZlciwgaW5pdGlhbEZ1bmN0aW9uKCkpOworICAgICAgICBhcHBs
eUNvbG9yVmFsdWUoc3RhdGUsIGluaXRpYWxGdW5jdGlvbigpKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVl
KTsKICAgICAgICAgaWYgKGluaGVyaXRDb2xvckZyb21QYXJlbnQgJiYgcHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCi0gICAgICAgICAgICBhcHBseUlu
aGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgICAgIGFwcGx5
SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBpZiAoc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpCi0g
ICAgICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbiko
c3R5bGVSZXNvbHZlci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUpKTsK
LSAgICAgICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlKCkpCi0gICAgICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPip2aXNp
dGVkTGlua1NldHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVW
YWx1ZShwcmltaXRpdmVWYWx1ZSwgLyogZm9yVmlzaXRlZExpbmsgKi8gdHJ1ZSkpOworICAgICAg
ICAgICAgaWYgKHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKQorICAgICAgICAg
ICAgICAgIChzdGF0ZS5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKFN0eWxlUmVzb2x2ZXI6OmNv
bG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCBwcmltaXRpdmVWYWx1ZSkpOworICAgICAgICAg
ICAgaWYgKHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSkKKyAgICAgICAg
ICAgICAgICAoc3RhdGUuc3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0dGVyRnVuY3Rpb24pKFN0eWxl
UmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCBwcmltaXRpdmVWYWx1ZSwg
LyogZm9yVmlzaXRlZExpbmsgKi8gdHJ1ZSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlDb2xvclZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIGNv
bnN0IENvbG9yJiBjb2xvcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUNvbG9yVmFsdWUoU3R5bGVS
ZXNvbHZlU3RhdGUmIHN0YXRlLCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgewotICAgICAgICBp
ZiAoc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpCi0gICAgICAg
ICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShjb2xvcik7Ci0g
ICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KCkpCi0gICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0
dGVyRnVuY3Rpb24pKGNvbG9yKTsKKyAgICAgICAgaWYgKHN0YXRlLmFwcGx5UHJvcGVydHlUb1Jl
Z3VsYXJTdHlsZSgpKQorICAgICAgICAgICAgKHN0YXRlLnN0eWxlKCktPipzZXR0ZXJGdW5jdGlv
bikoY29sb3IpOworICAgICAgICBpZiAoc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtT
dHlsZSgpKQorICAgICAgICAgICAgKHN0YXRlLnN0eWxlKCktPip2aXNpdGVkTGlua1NldHRlckZ1
bmN0aW9uKShjb2xvcik7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVh
dGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwg
JmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KQEAgLTMyMywxMSArMzIzLDExIEBA
IHB1YmxpYzoKIHRlbXBsYXRlIDxUZXh0RGlyZWN0aW9uIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1
bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShUZXh0
RGlyZWN0aW9uKSwgVGV4dERpcmVjdGlvbiAoKmluaXRpYWxGdW5jdGlvbikoKT4KIGNsYXNzIEFw
cGx5UHJvcGVydHlEaXJlY3Rpb24gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgIHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8VGV4dERpcmVjdGlvbiwgZ2V0
dGVyRnVuY3Rpb24sIFRleHREaXJlY3Rpb24sIHNldHRlckZ1bmN0aW9uLCBUZXh0RGlyZWN0aW9u
LCBpbml0aWFsRnVuY3Rpb24+OjphcHBseVZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIs
IHZhbHVlKTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0eWxlUmVzb2x2ZXItPmVsZW1l
bnQoKTsKLSAgICAgICAgaWYgKGVsZW1lbnQgJiYgc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpID09
IGVsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQorICAgICAgICBBcHBseVBy
b3BlcnR5RGVmYXVsdDxUZXh0RGlyZWN0aW9uLCBnZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlv
biwgc2V0dGVyRnVuY3Rpb24sIFRleHREaXJlY3Rpb24sIGluaXRpYWxGdW5jdGlvbj46OmFwcGx5
VmFsdWUocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVu
dCA9IHN0YXRlLmVsZW1lbnQoKTsKKyAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudCA9PSBl
bGVtZW50LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKICAgICAgICAgICAgIGVsZW1l
bnQtPmRvY3VtZW50KCktPnNldERpcmVjdGlvblNldE9uRG9jdW1lbnRFbGVtZW50KHRydWUpOwog
ICAgIH0KIApAQCAtMzU0LDcgKzM1NCw3IEBAIHRlbXBsYXRlIDxMZW5ndGggKFJlbmRlclN0eWxl
OjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsCiBjbGFzcyBBcHBseVByb3BlcnR5TGVuZ3RoIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIExl
bmd0aCB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTM2MiwzOSArMzYyLDM5IEBAIHB1YmxpYzoKICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih2YWx1ZSk7CiAgICAgICAgIGlmIChub25lRW5hYmxlZCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKICAgICAgICAgICAgIGlmIChub25lVW5kZWZpbmVk
KQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0
aChVbmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBM
ZW5ndGgoVW5kZWZpbmVkKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0
VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKCkpOworICAgICAgICAgICAgICAg
IHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aCgpKTsKICAgICAgICAgfQogICAgICAgICBp
ZiAobGVnYWN5SW50cmluc2ljRW5hYmxlZCkgewogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlSW50cmluc2ljKQotICAgICAgICAgICAgICAgIHNl
dFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChJbnRyaW5zaWMpKTsKKyAgICAg
ICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoSW50cmluc2ljKSk7CiAg
ICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZU1pbkludHJpbnNpYykKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLCBMZW5ndGgoTWluSW50cmluc2ljKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUo
c3RhdGUuc3R5bGUoKSwgTGVuZ3RoKE1pbkludHJpbnNpYykpOwogICAgICAgICB9CiAgICAgICAg
IGlmIChpbnRyaW5zaWNFbmFibGVkKSB7CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50KQotICAgICAgICAgICAgICAg
IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChNaW5Db250ZW50KSk7Cisg
ICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKE1pbkNvbnRlbnQp
KTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENT
U1ZhbHVlV2Via2l0TWF4Q29udGVudCkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoTWF4Q29udGVudCkpOworICAgICAgICAgICAgICAgIHNl
dFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aChNYXhDb250ZW50KSk7CiAgICAgICAgICAgICBl
bHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdEZpbGxB
dmFpbGFibGUpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgTGVuZ3RoKEZpbGxBdmFpbGFibGUpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0
ZS5zdHlsZSgpLCBMZW5ndGgoRmlsbEF2YWlsYWJsZSkpOwogICAgICAgICAgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVXZWJraXRGaXRDb250ZW50KQot
ICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChG
aXRDb250ZW50KSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVu
Z3RoKEZpdENvbnRlbnQpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChhdXRvRW5hYmxlZCAm
JiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoKSk7CisgICAgICAgICAg
ICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoKSk7CiAgICAgICAgIGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7Ci0gICAgICAgICAgICBMZW5ndGggbGVuZ3RoID0g
cHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgICAgICBMZW5ndGggbGVuZ3RoID0gcHJp
bWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5y
b290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAg
ICAgICAgICBsZW5ndGguc2V0UXVpcmsocHJpbWl0aXZlVmFsdWUtPmlzUXVpcmtWYWx1ZSgpKTsK
LSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGxlbmd0aCk7Cisg
ICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBsZW5ndGgpOwogICAgICAgICB9IGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgICAgIHNldFZh
bHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91
YmxlVmFsdWUoKSwgUGVyY2VudCkpOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUo
KSwgTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KSk7CiAg
ICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0
aExlbmd0aCgpKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CisgICAgICAgICAgICBzZXRW
YWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgp
LT50b0NhbGNWYWx1ZShzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0
YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0
aXZlVmFsdWUtPmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCi0gICAgICAgICAgICBzZXRW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJj
ZW50YWdlTGVuZ3RoKCkpOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgcHJp
bWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKTsKICAgICB9CiAKICAgICBz
dGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtNDA5LDE2ICs0MDksMTYg
QEAgdGVtcGxhdGUgPFN0cmluZ0lkZW50QmVoYXZpb3IgaWRlbnRCZWhhdmlvciwgY29uc3QgQXRv
bWljU3RyaW5nJiAoUmVuZGVyU3R5bGU6OioKIGNsYXNzIEFwcGx5UHJvcGVydHlTdHJpbmcgewog
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgY29u
c3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUp
OyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAg
IGlmICgoaWRlbnRCZWhhdmlvciA9PSBNYXBOb25lVG9OdWxsICYmIHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgIHx8IChpZGVudEJlaGF2aW9y
ID09IE1hcEF1dG9Ub051bGwgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVBdXRvKSkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIG51
bGxBdG9tKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIG51bGxBdG9tKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICAgICAgc2V0VmFs
dWUoc3RhdGUuc3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwogICAg
IH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAg
LTQzMSw3ICs0MzEsNyBAQCB0ZW1wbGF0ZSA8TGVuZ3RoU2l6ZSAoUmVuZGVyU3R5bGU6OipnZXR0
ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OgogY2xhc3MgQXBwbHlQcm9w
ZXJ0eUJvcmRlclJhZGl1cyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVu
ZGVyU3R5bGUqIHN0eWxlLCBMZW5ndGhTaXplIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0
aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0
ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDQ4LDE3ICs0NDgsMTcgQEAgcHVi
bGljOgogICAgICAgICBlbHNlIGlmIChwYWlyLT5maXJzdCgpLT5pc1ZpZXdwb3J0UGVyY2VudGFn
ZUxlbmd0aCgpKQogICAgICAgICAgICAgcmFkaXVzV2lkdGggPSBwYWlyLT5maXJzdCgpLT52aWV3
cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKICAgICAgICAgZWxzZSBpZiAocGFpci0+Zmlyc3QoKS0+
aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKLSAgICAgICAgICAgIHJhZGl1c1dp
ZHRoID0gTGVuZ3RoKChwYWlyLT5maXJzdCgpLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgp
LCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CisgICAgICAgICAg
ICByYWRpdXNXaWR0aCA9IExlbmd0aCgocGFpci0+Zmlyc3QoKS0+Y3NzQ2FsY1ZhbHVlKCktPnRv
Q2FsY1ZhbHVlKHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUu
c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBy
YWRpdXNXaWR0aCA9IHBhaXItPmZpcnN0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgICAgICByYWRpdXNX
aWR0aCA9IHBhaXItPmZpcnN0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSk7CiAgICAgICAgIGlmIChwYWlyLT5zZWNvbmQoKS0+aXNQZXJjZW50YWdlKCkpCiAgICAgICAg
ICAgICByYWRpdXNIZWlnaHQgPSBMZW5ndGgocGFpci0+c2Vjb25kKCktPmdldERvdWJsZVZhbHVl
KCksIFBlcmNlbnQpOwogICAgICAgICBlbHNlIGlmIChwYWlyLT5zZWNvbmQoKS0+aXNWaWV3cG9y
dFBlcmNlbnRhZ2VMZW5ndGgoKSkKICAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IHBhaXItPnNl
Y29uZCgpLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKICAgICAgICAgZWxzZSBpZiAocGFp
ci0+c2Vjb25kKCktPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAg
ICAgICByYWRpdXNIZWlnaHQgPSBMZW5ndGgoKHBhaXItPnNlY29uZCgpLT5jc3NDYWxjVmFsdWUo
KS0+dG9DYWxjVmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9v
dEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkp
KSk7CisgICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBMZW5ndGgoKHBhaXItPnNlY29uZCgpLT5j
c3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1l
bnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IHBhaXItPnNlY29uZCgpLT5jb21wdXRlTGVu
Z3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVs
ZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwor
ICAgICAgICAgICAgcmFkaXVzSGVpZ2h0ID0gcGFpci0+c2Vjb25kKCktPmNvbXB1dGVMZW5ndGg8
TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIGludCB3aWR0aCA9IHJhZGl1c1dpZHRo
LnZhbHVlKCk7CiAgICAgICAgIGludCBoZWlnaHQgPSByYWRpdXNIZWlnaHQudmFsdWUoKTsKICAg
ICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQpAQCAtNDY5LDcgKzQ2OSw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gcmFkaXVzSGVpZ2h0OyAvLyBOdWxsIG91
dCB0aGUgb3RoZXIgdmFsdWUuCiAKICAgICAgICAgTGVuZ3RoU2l6ZSBzaXplKHJhZGl1c1dpZHRo
LCByYWRpdXNIZWlnaHQpOwotICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBzaXplKTsKKyAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgc2l6ZSk7CiAgICAgfQog
ICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtNDkx
LDIzICs0OTEsMjMgQEAgc3RydWN0IEZpbGxMYXllckFjY2Vzc29yVHlwZXM8U3R5bGVJbWFnZSo+
IHsKIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBULAotICAgICAgICAgIENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJZCwKLSAgICAgICAgICBFRmlsbExheWVyVHlwZSBmaWxsTGF5ZXJUeXBlLAotICAg
ICAgICAgIEZpbGxMYXllciogKFJlbmRlclN0eWxlOjoqYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCks
Ci0gICAgICAgICAgY29uc3QgRmlsbExheWVyKiAoUmVuZGVyU3R5bGU6OipsYXllcnNGdW5jdGlv
bikoKSBjb25zdCwKLSAgICAgICAgICBib29sIChGaWxsTGF5ZXI6Oip0ZXN0RnVuY3Rpb24pKCkg
Y29uc3QsCi0gICAgICAgICAgdHlwZW5hbWUgRmlsbExheWVyQWNjZXNzb3JUeXBlczxUPjo6R2V0
dGVyIChGaWxsTGF5ZXI6OipnZXRGdW5jdGlvbikoKSBjb25zdCwKLSAgICAgICAgICB2b2lkIChG
aWxsTGF5ZXI6OipzZXRGdW5jdGlvbikodHlwZW5hbWUgRmlsbExheWVyQWNjZXNzb3JUeXBlczxU
Pjo6U2V0dGVyKSwKLSAgICAgICAgICB2b2lkIChGaWxsTGF5ZXI6OipjbGVhckZ1bmN0aW9uKSgp
LAotICAgICAgICAgIHR5cGVuYW1lIEZpbGxMYXllckFjY2Vzc29yVHlwZXM8VD46OkdldHRlciAo
KmluaXRpYWxGdW5jdGlvbikoRUZpbGxMYXllclR5cGUpLAotICAgICAgICAgIHZvaWQgKENTU1Rv
U3R5bGVNYXA6OiptYXBGaWxsRnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENT
U1ZhbHVlKik+CisgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLAorICAgIEVGaWxsTGF5ZXJU
eXBlIGZpbGxMYXllclR5cGUsCisgICAgRmlsbExheWVyKiAoUmVuZGVyU3R5bGU6OiphY2Nlc3NM
YXllcnNGdW5jdGlvbikoKSwKKyAgICBjb25zdCBGaWxsTGF5ZXIqIChSZW5kZXJTdHlsZTo6Kmxh
eWVyc0Z1bmN0aW9uKSgpIGNvbnN0LAorICAgIGJvb2wgKEZpbGxMYXllcjo6KnRlc3RGdW5jdGlv
bikoKSBjb25zdCwKKyAgICB0eXBlbmFtZSBGaWxsTGF5ZXJBY2Nlc3NvclR5cGVzPFQ+OjpHZXR0
ZXIgKEZpbGxMYXllcjo6KmdldEZ1bmN0aW9uKSgpIGNvbnN0LAorICAgIHZvaWQgKEZpbGxMYXll
cjo6KnNldEZ1bmN0aW9uKSh0eXBlbmFtZSBGaWxsTGF5ZXJBY2Nlc3NvclR5cGVzPFQ+OjpTZXR0
ZXIpLAorICAgIHZvaWQgKEZpbGxMYXllcjo6KmNsZWFyRnVuY3Rpb24pKCksCisgICAgdHlwZW5h
bWUgRmlsbExheWVyQWNjZXNzb3JUeXBlczxUPjo6R2V0dGVyICgqaW5pdGlhbEZ1bmN0aW9uKShF
RmlsbExheWVyVHlwZSksCisgICAgdm9pZCAoKm1hcEZpbGxGdW5jdGlvbikoU3R5bGVSZXNvbHZl
U3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopPgogY2xhc3MgQXBw
bHlQcm9wZXJ0eUZpbGxMYXllciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhl
cml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7CisgICAgICAg
IEZpbGxMYXllciogY3VyckNoaWxkID0gKHN0YXRlLnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5j
dGlvbikoKTsKICAgICAgICAgRmlsbExheWVyKiBwcmV2Q2hpbGQgPSAwOwotICAgICAgICBjb25z
dCBGaWxsTGF5ZXIqIGN1cnJQYXJlbnQgPSAoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+
KmxheWVyc0Z1bmN0aW9uKSgpOworICAgICAgICBjb25zdCBGaWxsTGF5ZXIqIGN1cnJQYXJlbnQg
PSAoc3RhdGUucGFyZW50U3R5bGUoKS0+KmxheWVyc0Z1bmN0aW9uKSgpOwogICAgICAgICB3aGls
ZSAoY3VyclBhcmVudCAmJiAoY3VyclBhcmVudC0+KnRlc3RGdW5jdGlvbikoKSkgewogICAgICAg
ICAgICAgaWYgKCFjdXJyQ2hpbGQpIHsKICAgICAgICAgICAgICAgICAvKiBOZWVkIHRvIG1ha2Ug
YSBuZXcgbGF5ZXIuKi8KQEAgLTUyNywxNyArNTI3LDE3IEBAIHB1YmxpYzoKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0
aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsK
LSAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOworICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9
IChzdGF0ZS5zdHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7CiAgICAgICAgIChjdXJy
Q2hpbGQtPipzZXRGdW5jdGlvbikoKCppbml0aWFsRnVuY3Rpb24pKGZpbGxMYXllclR5cGUpKTsK
ICAgICAgICAgZm9yIChjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgY3VyckNoaWxkOyBj
dXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKSkKICAgICAgICAgICAgIChjdXJyQ2hpbGQtPipj
bGVhckZ1bmN0aW9uKSgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVl
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBGaWxsTGF5ZXIq
IGN1cnJDaGlsZCA9IChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rp
b24pKCk7CisgICAgICAgIEZpbGxMYXllciogY3VyckNoaWxkID0gKHN0YXRlLnN0eWxlKCktPiph
Y2Nlc3NMYXllcnNGdW5jdGlvbikoKTsKICAgICAgICAgRmlsbExheWVyKiBwcmV2Q2hpbGQgPSAw
OwogICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkKICNpZiBFTkFCTEUoQ1NTX0lNQUdF
X1NFVCkKQEAgLTU1MiwxMiArNTUyLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
Y3VyckNoaWxkID0gbmV3IEZpbGxMYXllcihmaWxsTGF5ZXJUeXBlKTsKICAgICAgICAgICAgICAg
ICAgICAgcHJldkNoaWxkLT5zZXROZXh0KGN1cnJDaGlsZCk7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT4qbWFwRmlsbEZ1bmN0
aW9uKShwcm9wZXJ0eUlkLCBjdXJyQ2hpbGQsIHZhbHVlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjayhpKSk7CisgICAgICAgICAgICAgICAgKCptYXBGaWxsRnVuY3Rpb24pKHN0YXRlLCBwcm9w
ZXJ0eUlkLCBjdXJyQ2hpbGQsIHZhbHVlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7
CiAgICAgICAgICAgICAgICAgcHJldkNoaWxkID0gY3VyckNoaWxkOwogICAgICAgICAgICAgICAg
IGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPiptYXBGaWxs
RnVuY3Rpb24pKHByb3BlcnR5SWQsIGN1cnJDaGlsZCwgdmFsdWUpOworICAgICAgICAgICAgKCpt
YXBGaWxsRnVuY3Rpb24pKHN0YXRlLCBwcm9wZXJ0eUlkLCBjdXJyQ2hpbGQsIHZhbHVlKTsKICAg
ICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOwogICAgICAgICB9CiAgICAg
ICAgIHdoaWxlIChjdXJyQ2hpbGQpIHsKQEAgLTU4Myw3ICs1ODMsNyBAQCB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwKIGNsYXNzIEFwcGx5UHJvcGVydHlDb21wdXRlTGVuZ3RoIHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIFQgdmFsdWUpIHsgKHN0
eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICAvLyBu
b3RlOiBDU1NQcm9wZXJ0eUxldHRlci9Xb3JkU3BhY2luZyByaWdodCBub3cgc2V0cyB0byB6ZXJv
IGlmIGl0J3Mgbm90IGEgcHJpbWl0aXZlIHZhbHVlIGZvciBzb21lIHJlYXNvbi4uLgogICAgICAg
ICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCkBAIC02MDIsMTMgKzYwMiwxMyBAQCBw
dWJsaWM6CiAgICAgICAgIH0gZWxzZSBpZiAodGhpY2tuZXNzRW5hYmxlZCAmJiBpZGVudCA9PSBD
U1NWYWx1ZVRoaWNrKSB7CiAgICAgICAgICAgICBsZW5ndGggPSA1OwogICAgICAgICB9IGVsc2Ug
aWYgKGlkZW50ID09IENTU1ZhbHVlSW52YWxpZCkgewotICAgICAgICAgICAgZmxvYXQgem9vbSA9
IChzdmdab29tRW5hYmxlZCAmJiBzdHlsZVJlc29sdmVyLT51c2VTVkdab29tUnVsZXMoKSkgPyAx
LjBmIDogc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICAg
ICAgZmxvYXQgem9vbSA9IChzdmdab29tRW5hYmxlZCAmJiBzdGF0ZS51c2VTVkdab29tUnVsZXMo
KSkgPyAxLjBmIDogc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwogCiAgICAgICAgICAg
ICAvLyBBbnkgb3JpZ2luYWwgcmVzdWx0IHRoYXQgd2FzID49IDEgc2hvdWxkIG5vdCBiZSBhbGxv
d2VkIHRvIGZhbGwgYmVsb3cgMS4KICAgICAgICAgICAgIC8vIFRoaXMga2VlcHMgYm9yZGVyIGxp
bmVzIGZyb20gdmFuaXNoaW5nLgotICAgICAgICAgICAgbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUt
PmNvbXB1dGVMZW5ndGg8VD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+
cm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tKTsKKyAgICAgICAgICAgIGxlbmd0aCA9IHByaW1pdGl2
ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50
U3R5bGUoKSwgem9vbSk7CiAgICAgICAgICAgICBpZiAoem9vbSA8IDEuMGYgJiYgbGVuZ3RoIDwg
MS4wKSB7Ci0gICAgICAgICAgICAgICAgVCBvcmlnaW5hbExlbmd0aCA9IHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXIt
PnJvb3RFbGVtZW50U3R5bGUoKSwgMS4wKTsKKyAgICAgICAgICAgICAgICBUIG9yaWdpbmFsTGVu
Z3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4oc3RhdGUuc3R5bGUoKSwgc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSgpLCAxLjApOwogICAgICAgICAgICAgICAgIGlmIChvcmlnaW5h
bExlbmd0aCA+PSAxLjApCiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IDEuMDsKICAgICAg
ICAgICAgIH0KQEAgLTYxOCw3ICs2MTgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBsZW5ndGgg
PSAwOwogICAgICAgICB9CiAKLSAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgbGVuZ3RoKTsKKyAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgbGVuZ3RoKTsKICAg
ICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBA
IC02MzAsMjggKzYzMCwyOCBAQCBwdWJsaWM6CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgVCAoRm9u
dERlc2NyaXB0aW9uOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKEZvbnREZXNjcmlw
dGlvbjo6KnNldHRlckZ1bmN0aW9uKShUKSwgVCBpbml0aWFsVmFsdWU+CiBjbGFzcyBBcHBseVBy
b3BlcnR5Rm9udCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMg
dm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYg
c3RhdGUpCiAgICAgewotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0g
c3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIChmb250RGVzY3JpcHRp
b24uKnNldHRlckZ1bmN0aW9uKSgoc3R5bGVSZXNvbHZlci0+cGFyZW50Rm9udERlc2NyaXB0aW9u
KCkuKmdldHRlckZ1bmN0aW9uKSgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgKGZvbnREZXNj
cmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24pKChzdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS4q
Z2V0dGVyRnVuY3Rpb24pKCkpOworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRl
JiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24g
PSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAo
Zm9udERlc2NyaXB0aW9uLipzZXR0ZXJGdW5jdGlvbikoaW5pdGlhbFZhbHVlKTsKLSAgICAgICAg
c3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAg
ICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KIAot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICBGb250
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0
aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5m
b250RGVzY3JpcHRpb24oKTsKICAgICAgICAgKGZvbnREZXNjcmlwdGlvbi4qc2V0dGVyRnVuY3Rp
b24pKCpwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRp
b24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVy
IGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZh
bHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQpAQCAtNjc2LDUwICs2NzYs
NTAgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNpemUgLyAxLjJmOwogICAgIH0KIHB1Ymxp
YzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAg
ICAgIGZsb2F0IHNpemUgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3Jp
cHRpb24oKS5zcGVjaWZpZWRTaXplKCk7CisgICAgICAgIGZsb2F0IHNpemUgPSBzdGF0ZS5wYXJl
bnRGb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCk7CiAKICAgICAgICAgaWYgKHNpemUg
PCAwKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsK
LSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKHN0eWxlUmVzb2x2ZXItPnBh
cmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmtleXdvcmRTaXplKCkpOwotICAgICAgICBz
dHlsZVJlc29sdmVyLT5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOwotICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlw
dGlvbigpOworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoc3RhdGUucGFy
ZW50Rm9udERlc2NyaXB0aW9uKCkua2V5d29yZFNpemUoKSk7CisgICAgICAgIFN0eWxlUmVzb2x2
ZXI6OnNldEZvbnRTaXplKHN0YXRlLCBmb250RGVzY3JpcHRpb24sIHNpemUpOworICAgICAgICBz
dGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJ
bml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAg
IHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBmbG9hdCBzaXplID0gc3R5
bGVSZXNvbHZlci0+Zm9udFNpemVGb3JLZXl3b3JkKHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCks
IENTU1ZhbHVlTWVkaXVtLCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsK
KyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNj
cmlwdGlvbigpOworICAgICAgICBmbG9hdCBzaXplID0gU3R5bGVSZXNvbHZlcjo6Zm9udFNpemVG
b3JLZXl3b3JkKHN0YXRlLmRvY3VtZW50KCksIENTU1ZhbHVlTWVkaXVtLCBmb250RGVzY3JpcHRp
b24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsKIAogICAgICAgICBpZiAoc2l6ZSA8IDApCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXpl
KENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7Ci0gICAgICAgIHN0eWxlUmVz
b2x2ZXItPnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7Ci0gICAgICAgIHN0eWxl
UmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBT
dHlsZVJlc29sdmVyOjpzZXRGb250U2l6ZShzdGF0ZSwgZm9udERlc2NyaXB0aW9uLCBzaXplKTsK
KyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRl
JiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odmFsdWUpOwogCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoMCk7CiAgICAgICAgIGZsb2F0IHBh
cmVudFNpemUgPSAwOwogICAgICAgICBib29sIHBhcmVudElzQWJzb2x1dGVTaXplID0gZmFsc2U7
CiAgICAgICAgIGZsb2F0IHNpemUgPSAwOwogCi0gICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5w
YXJlbnRTdHlsZSgpKSB7Ci0gICAgICAgICAgICBwYXJlbnRTaXplID0gc3R5bGVSZXNvbHZlci0+
cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOwotICAgICAg
ICAgICAgcGFyZW50SXNBYnNvbHV0ZVNpemUgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgp
LT5mb250RGVzY3JpcHRpb24oKS5pc0Fic29sdXRlU2l6ZSgpOworICAgICAgICBpZiAoc3RhdGUu
cGFyZW50U3R5bGUoKSkgeworICAgICAgICAgICAgcGFyZW50U2l6ZSA9IHN0YXRlLnBhcmVudEZv
bnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKKyAgICAgICAgICAgIHBhcmVudElzQWJz
b2x1dGVTaXplID0gc3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkuaXNBYnNvbHV0ZVNpemUo
KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpbnQgaWRlbnQgPSBwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSkgewpAQCAtNzMzLDcgKzczMyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVYTGFyZ2U6CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlWHhMYXJnZToKICAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRYeHhMYXJnZToKLSAgICAgICAgICAgICAgICBz
aXplID0gc3R5bGVSZXNvbHZlci0+Zm9udFNpemVGb3JLZXl3b3JkKHN0eWxlUmVzb2x2ZXItPmRv
Y3VtZW50KCksIGlkZW50LCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsK
KyAgICAgICAgICAgICAgICBzaXplID0gU3R5bGVSZXNvbHZlcjo6Zm9udFNpemVGb3JLZXl3b3Jk
KHN0YXRlLmRvY3VtZW50KCksIGlkZW50LCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0
U2l6ZSgpKTsKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUo
aWRlbnQgLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMYXJnZXI6CkBAIC03NTEsMTMgKzc1MSwxMyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUocGFyZW50
SXNBYnNvbHV0ZVNpemUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCAhKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSB8fCBwcmltaXRpdmVWYWx1
ZS0+aXNGb250UmVsYXRpdmVMZW5ndGgoKSkpOwogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc0xlbmd0aCgpKQotICAgICAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+
Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5bGVS
ZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCAxLjAsIHRydWUpOworICAgICAgICAgICAgICAg
IHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUucGFyZW50
U3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCAxLjAsIHRydWUpOwogICAgICAgICAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKQogICAgICAgICAgICAg
ICAgIHNpemUgPSAocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSAqIHBhcmVudFNpemUp
IC8gMTAwLjBmOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3Vs
YXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgc2l6ZSA9IHByaW1p
dGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGVSZXNvbHZlci0+cGFy
ZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpKS0+ZXZhbHVhdGUo
cGFyZW50U2l6ZSk7CisgICAgICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLT5jc3ND
YWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSwgc3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSgpKS0+ZXZhbHVhdGUocGFyZW50U2l6ZSk7CiAgICAgICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKLSAgICAgICAg
ICAgICAgICBzaXplID0gdmFsdWVGb3JMZW5ndGgocHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVy
Y2VudGFnZUxlbmd0aCgpLCAwLCBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3
KCkpOworICAgICAgICAgICAgICAgIHNpemUgPSB2YWx1ZUZvckxlbmd0aChwcmltaXRpdmVWYWx1
ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCksIDAsIHN0YXRlLmRvY3VtZW50KCktPnJlbmRl
clZpZXcoKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CkBAIC03NjksOCArNzY5LDggQEAgcHVibGljOgogICAgICAgICAvLyBDYXAgZm9udCBz
aXplIGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgZG9lc24ndCBoYXBwZW4uCiAgICAgICAgIHNpemUg
PSBtaW4obWF4aW11bUFsbG93ZWRGb250U2l6ZSwgc2l6ZSk7CiAKLSAgICAgICAgc3R5bGVSZXNv
bHZlci0+c2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIFN0
eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKHN0YXRlLCBmb250RGVzY3JpcHRpb24sIHNpemUpOwor
ICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzc5LDEyICs3NzksMTIgQEAgcHVibGljOgogCiBjbGFz
cyBBcHBseVByb3BlcnR5Rm9udFdlaWdodCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwog
ICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgIGNh
c2UgQ1NTVmFsdWVJbnZhbGlkOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBA
IC03OTgsNyArNzk4LDcgQEAgcHVibGljOgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgqcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICB9Ci0g
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAg
ICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBA
IC04MDksMzAgKzgwOSwzMCBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlGb250VmFy
aWFudExpZ2F0dXJlcyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0
aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0
ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZv
bnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudEZvbnREZXNjcmlwdGlvbigpOwot
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+
Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50
Rm9udERlc2NyaXB0aW9uID0gc3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCk7CisgICAgICAg
IEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24o
KTsKIAogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tbW9uTGlnYXR1cmVzU3RhdGUocGFy
ZW50Rm9udERlc2NyaXB0aW9uLmNvbW1vbkxpZ2F0dXJlc1N0YXRlKCkpOwogICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKHBhcmVudEZvbnREZXNj
cmlwdGlvbi5kaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoKSk7CiAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRIaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUocGFyZW50Rm9udERlc2NyaXB0aW9u
Lmhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSgpKTsKIAotICAgICAgICBzdHlsZVJlc29sdmVyLT5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAg
ICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRp
b24oKTsKIAogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tbW9uTGlnYXR1cmVzU3RhdGUo
Rm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSk7CiAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoRm9udERlc2NyaXB0aW9uOjpO
b3JtYWxMaWdhdHVyZXNTdGF0ZSk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRIaXN0b3Jp
Y2FsTGlnYXR1cmVzU3RhdGUoRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSk7
CiAKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbik7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBGb250RGVzY3JpcHRpb246OkxpZ2F0dXJl
c1N0YXRlIGNvbW1vbkxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdh
dHVyZXNTdGF0ZTsKICAgICAgICAgRm9udERlc2NyaXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBkaXNj
cmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJl
c1N0YXRlOwpAQCAtODc4LDExICs4NzgsMTEgQEAgcHVibGljOgogICAgICAgICB9CiAjZW5kaWYK
IAotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZl
ci0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldENvbW1vbkxpZ2F0dXJlc1N0YXRlKGNvbW1vbkxpZ2F0dXJlc1N0YXRlKTsKICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldERpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZShkaXNjcmV0aW9u
YXJ5TGlnYXR1cmVzU3RhdGUpOwogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SGlzdG9yaWNh
bExpZ2F0dXJlc1N0YXRlKGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSk7Ci0gICAgICAgIHN0eWxl
UmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBz
dGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKICAgICBz
dGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtODk4LDEzICs4OTgsMTMg
QEAgdGVtcGxhdGUgPEJvcmRlckltYWdlVHlwZSBib3JkZXJJbWFnZVR5cGUsCiAgICAgICAgICAg
dm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoY29uc3QgTmluZVBpZWNlSW1hZ2Um
KT4KIGNsYXNzIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7
CiAgICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlOwogICAgICAgICBpZiAoYm9yZGVySW1hZ2VU
eXBlID09IEJvcmRlck1hc2spCiAgICAgICAgICAgICBpbWFnZS5zZXRNYXNrRGVmYXVsdHMoKTsK
LSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2UocHJv
cGVydHksIHZhbHVlLCBpbWFnZSk7Ci0gICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4q
c2V0dGVyRnVuY3Rpb24pKGltYWdlKTsKKyAgICAgICAgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBp
ZWNlSW1hZ2Uoc3RhdGUsIHByb3BlcnR5LCB2YWx1ZSwgaW1hZ2UpOworICAgICAgICAoc3RhdGUu
c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShpbWFnZSk7CiAgICAgfQogCiAgICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTkyMSwyOSArOTIxLDI5IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIGlubGluZSBjb25zdCBOaW5lUGllY2VJbWFnZSYgZ2V0VmFsdWUoUmVu
ZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiB0eXBlID09IEJvcmRlckltYWdlID8gc3R5bGUtPmJv
cmRlckltYWdlKCkgOiBzdHlsZS0+bWFza0JveEltYWdlKCk7IH0KICAgICBzdGF0aWMgaW5saW5l
IHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBOaW5lUGllY2VJbWFnZSYg
dmFsdWUpIHsgcmV0dXJuIHR5cGUgPT0gQm9yZGVySW1hZ2UgPyBzdHlsZS0+c2V0Qm9yZGVySW1h
Z2UodmFsdWUpIDogc3R5bGUtPnNldE1hc2tCb3hJbWFnZSh2YWx1ZSk7IH0KIHB1YmxpYzoKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIE5p
bmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpKTsKKyAg
ICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3RhdGUuc3R5bGUoKSkpOwogICAg
ICAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7CiAgICAgICAgIGNhc2UgT3V0c2V0OgotICAgICAgICAg
ICAgaW1hZ2UuY29weU91dHNldEZyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5
bGUoKSkpOworICAgICAgICAgICAgaW1hZ2UuY29weU91dHNldEZyb20oZ2V0VmFsdWUoc3RhdGUu
cGFyZW50U3R5bGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVwZWF0
OgotICAgICAgICAgICAgaW1hZ2UuY29weVJlcGVhdEZyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZl
ci0+cGFyZW50U3R5bGUoKSkpOworICAgICAgICAgICAgaW1hZ2UuY29weVJlcGVhdEZyb20oZ2V0
VmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgU2xpY2U6Ci0gICAgICAgICAgICBpbWFnZS5jb3B5SW1hZ2VTbGljZXNGcm9tKGdldFZh
bHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGltYWdlLmNv
cHlJbWFnZVNsaWNlc0Zyb20oZ2V0VmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2lkdGg6Ci0gICAgICAgICAgICBpbWFnZS5jb3B5
Qm9yZGVyU2xpY2VzRnJvbShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSk7
CisgICAgICAgICAgICBpbWFnZS5jb3B5Qm9yZGVyU2xpY2VzRnJvbShnZXRWYWx1ZShzdGF0ZS5w
YXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBz
ZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBpbWFnZSk7CisgICAgICAgIHNldFZhbHVl
KHN0YXRlLnN0eWxlKCksIGltYWdlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdl
dFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpKTsKKyAgICAgICAgTmluZVBpZWNlSW1hZ2Ug
aW1hZ2UoZ2V0VmFsdWUoc3RhdGUuc3R5bGUoKSkpOwogICAgICAgICBzd2l0Y2ggKG1vZGlmaWVy
KSB7CiAgICAgICAgIGNhc2UgT3V0c2V0OgogICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KExl
bmd0aEJveCgwKSk7CkBAIC05NjIsMjcgKzk2MiwyNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBp
bWFnZS5zZXRCb3JkZXJTbGljZXModHlwZSA9PSBCb3JkZXJJbWFnZSA/IExlbmd0aEJveChMZW5n
dGgoMSwgUmVsYXRpdmUpLCBMZW5ndGgoMSwgUmVsYXRpdmUpLCBMZW5ndGgoMSwgUmVsYXRpdmUp
LCBMZW5ndGgoMSwgUmVsYXRpdmUpKSA6IExlbmd0aEJveCgpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGlt
YWdlKTsKKyAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgaW1hZ2UpOwogICAgIH0KIAot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgewotICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpKSk7CisgICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVl
KHN0YXRlLnN0eWxlKCkpKTsKICAgICAgICAgc3dpdGNoIChtb2RpZmllcikgewogICAgICAgICBj
YXNlIE91dHNldDoKLSAgICAgICAgICAgIGltYWdlLnNldE91dHNldChzdHlsZVJlc29sdmVyLT5z
dHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVF1YWQodmFsdWUpKTsKKyAgICAgICAgICAgIGlt
YWdlLnNldE91dHNldChDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVF1YWQoc3RhdGUs
IHZhbHVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXBlYXQ6Ci0gICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVJlcGVh
dCh2YWx1ZSwgaW1hZ2UpOworICAgICAgICAgICAgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNl
SW1hZ2VSZXBlYXQoc3RhdGUsIHZhbHVlLCBpbWFnZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBTbGljZToKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCkt
Pm1hcE5pbmVQaWVjZUltYWdlU2xpY2UodmFsdWUsIGltYWdlKTsKKyAgICAgICAgICAgIENTU1Rv
U3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlU2xpY2Uoc3RhdGUsIHZhbHVlLCBpbWFnZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXaWR0aDoKLSAgICAgICAgICAgIGltYWdl
LnNldEJvcmRlclNsaWNlcyhzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJ
bWFnZVF1YWQodmFsdWUpKTsKKyAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyhDU1NU
b1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVF1YWQoc3RhdGUsIHZhbHVlKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLCBpbWFnZSk7CisgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIGltYWdlKTsK
ICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJl
dHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFs
dWUsICZhcHBseVZhbHVlKTsgfQpAQCAtOTkxLDcgKzk5MSw3IEBAIHB1YmxpYzoKIHRlbXBsYXRl
IDxDU1NQcm9wZXJ0eUlEIGlkLCBTdHlsZUltYWdlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5j
dGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoUGFzc1Jl
ZlB0cjxTdHlsZUltYWdlPiksIFN0eWxlSW1hZ2UqICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgogY2xh
c3MgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1
bmN0aW9uKShzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKGlkLCB2YWx1ZSkpOyB9CisgICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3Rh
dGUsIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3RhdGUuc3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShT
dHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKHN0YXRlLCBpZCwgdmFsdWUpKTsgfQogICAgIHN0YXRp
YyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewogICAgICAgICBQcm9wZXJ0
eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxTdHlsZUltYWdlKiwg
Z2V0dGVyRnVuY3Rpb24sIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4sIHNldHRlckZ1bmN0aW9uLCBT
dHlsZUltYWdlKiwgaW5pdGlhbEZ1bmN0aW9uPjo6Y3JlYXRlSGFuZGxlcigpOwpAQCAtMTAwMywx
MSArMTAwMywxMSBAQCBlbnVtIENvdW50ZXJCZWhhdmlvciB7SW5jcmVtZW50ID0gMCwgUmVzZXR9
OwogdGVtcGxhdGUgPENvdW50ZXJCZWhhdmlvciBjb3VudGVyQmVoYXZpb3I+CiBjbGFzcyBBcHBs
eVByb3BlcnR5Q291bnRlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgZW1wdHlGdW5jdGlv
bihDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKikgeyB9Ci0gICAgc3RhdGljIHZvaWQgYXBw
bHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
cikKKyAgICBzdGF0aWMgdm9pZCBlbXB0eUZ1bmN0aW9uKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZVN0YXRlJikgeyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgQ291bnRl
ckRpcmVjdGl2ZU1hcCYgbWFwID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+YWNjZXNzQ291bnRl
ckRpcmVjdGl2ZXMoKTsKLSAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgcGFyZW50TWFwID0g
c3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsK
KyAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3RhdGUuc3R5bGUoKS0+YWNjZXNz
Q291bnRlckRpcmVjdGl2ZXMoKTsKKyAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgcGFyZW50
TWFwID0gc3RhdGUucGFyZW50U3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKIAog
ICAgICAgICB0eXBlZGVmIENvdW50ZXJEaXJlY3RpdmVNYXA6Oml0ZXJhdG9yIEl0ZXJhdG9yOwog
ICAgICAgICBJdGVyYXRvciBlbmQgPSBwYXJlbnRNYXAuZW5kKCk7CkBAIC0xMDIwLDE0ICsxMDIw
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
IHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxp
c3QqPih2YWx1ZSk7CiAKLSAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKKyAgICAgICAgQ291
bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3RhdGUuc3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVj
dGl2ZXMoKTsKICAgICAgICAgdHlwZWRlZiBDb3VudGVyRGlyZWN0aXZlTWFwOjppdGVyYXRvciBJ
dGVyYXRvcjsKIAogICAgICAgICBJdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CkBAIC0xMDYzLDQy
ICsxMDYzLDQyIEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUN1cnNvciB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3Ioc3R5bGVSZXNvbHZlci0+cGFy
ZW50U3R5bGUoKS0+Y3Vyc29yKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRDdXJzb3JMaXN0KHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmN1cnNvcnMoKSk7Cisg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEN1cnNvcihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jdXJz
b3IoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEN1cnNvckxpc3Qoc3RhdGUucGFyZW50
U3R5bGUoKS0+Y3Vyc29ycygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRp
YWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmNs
ZWFyQ3Vyc29yTGlzdCgpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJz
b3IoUmVuZGVyU3R5bGU6OmluaXRpYWxDdXJzb3IoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCkt
PmNsZWFyQ3Vyc29yTGlzdCgpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDdXJzb3IoUmVu
ZGVyU3R5bGU6OmluaXRpYWxDdXJzb3IoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmNsZWFyQ3Vyc29yTGlzdCgpOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5jbGVhckN1cnNvckxpc3QoKTsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVl
TGlzdCgpKSB7CiAgICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxD
U1NWYWx1ZUxpc3QqPih2YWx1ZSk7CiAgICAgICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3Ro
KCk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3IoQ1VSU09S
X0FVVE8pOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q3Vyc29yKENVUlNPUl9BVVRP
KTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAg
ICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7
CiAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzQ3Vyc29ySW1hZ2VWYWx1ZSgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIENTU0N1cnNvckltYWdlVmFsdWUqIGltYWdlID0gc3RhdGljX2Nhc3Q8
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSo+KGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW1h
Z2UtPnVwZGF0ZUlmU1ZHQ3Vyc29ySXNVc2VkKHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKSkpIC8v
IEVsZW1lbnRzIHdpdGggU1ZHIGN1cnNvcnMgYXJlIG5vdCBhbGxvd2VkIHRvIHNoYXJlIHN0eWxl
LgotICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VW5p
cXVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmFkZEN1
cnNvcihzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKENTU1Byb3BlcnR5Q3Vyc29yLCBpbWFnZSks
IGltYWdlLT5ob3RTcG90KCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPnVwZGF0
ZUlmU1ZHQ3Vyc29ySXNVc2VkKHN0YXRlLmVsZW1lbnQoKSkpIC8vIEVsZW1lbnRzIHdpdGggU1ZH
IGN1cnNvcnMgYXJlIG5vdCBhbGxvd2VkIHRvIHNoYXJlIHN0eWxlLgorICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPmFkZEN1cnNvcihTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKHN0YXRl
LCBDU1NQcm9wZXJ0eUN1cnNvciwgaW1hZ2UpLCBpbWFnZS0+aG90U3BvdCgpKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkgewogICAgICAgICAg
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwogICAgICAgICAgICAgICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzSWRlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q3Vyc29yKCpwcmltaXRpdmVWYWx1ZSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwot
ICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0lkZW50KCkgJiYgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+Y3Vyc29yKCkgIT0gRUN1cnNvcigqcHJpbWl0aXZlVmFsdWUpKQotICAgICAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcigqcHJpbWl0aXZlVmFs
dWUpOworICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0lkZW50KCkgJiYgc3RhdGUu
c3R5bGUoKS0+Y3Vyc29yKCkgIT0gRUN1cnNvcigqcHJpbWl0aXZlVmFsdWUpKQorICAgICAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC0xMTA3LDcgKzExMDcsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5
UHJvcGVydHlUZXh0QWxpZ24gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZh
bHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTE1LDEz
ICsxMTE1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKICAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpICE9IENTU1ZhbHVlV2Via2l0TWF0Y2hQ
YXJlbnQpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0QWxpZ24o
KnByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoc3R5bGVSZXNvbHZlci0+cGFyZW50
U3R5bGUoKS0+dGV4dEFsaWduKCkgPT0gVEFTVEFSVCkKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbihzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBMRUZUIDogUklHSFQpOwotICAgICAgICBlbHNlIGlm
IChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBUQUVORCkKLSAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbihzdHlsZVJlc29s
dmVyLT5wYXJlbnRTdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBSSUdIVCA6IExF
RlQpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEFsaWduKCpwcmltaXRpdmVW
YWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKHN0YXRlLnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigp
ID09IFRBU1RBUlQpCisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oc3Rh
dGUucGFyZW50U3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gTEVGVCA6IFJJR0hU
KTsKKyAgICAgICAgZWxzZSBpZiAoc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dEFsaWduKCkgPT0g
VEFFTkQpCisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oc3RhdGUucGFy
ZW50U3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gUklHSFQgOiBMRUZUKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEFs
aWduKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigpKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRBbGlnbihzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0
QWxpZ24oKSk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxl
cigpCiAgICAgewpAQCAtMTEzMiw3ICsxMTMyLDcgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVBy
b3BlcnR5VGV4dERlY29yYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBFVGV4
dERlY29yYXRpb24gdCA9IFJlbmRlclN0eWxlOjppbml0aWFsVGV4dERlY29yYXRpb24oKTsKICAg
ICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpKHZhbHVlKTsgaS5oYXNNb3JlKCk7IGku
YWR2YW5jZSgpKSB7CkBAIC0xMTQwLDcgKzExNDAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBB
U1NFUlQoaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKICAgICAgICAgICAgIHQgfD0gKnN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CiAgICAgICAgIH0KLSAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dERlY29yYXRpb24odCk7CisgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldFRleHREZWNvcmF0aW9uKHQpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVy
dHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTExNTEsNyArMTE1MSw3IEBAIHB1
YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUxpbmVIZWlnaHQgewogcHVibGljOgotICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0xMTYyLDE1ICsxMTYyLDE1IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICAgICAg
bGluZUhlaWdodCA9IFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpOwogICAgICAgICBl
bHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewotICAgICAgICAgICAgZG91Ymxl
IG11bHRpcGxpZXIgPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0g
ICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+dGV4dFNpemVBZGp1c3QoKSkg
ewotICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBzdHlsZVJlc29sdmVyLT5kb2N1
bWVudCgpLT5mcmFtZSgpKQorICAgICAgICAgICAgZG91YmxlIG11bHRpcGxpZXIgPSBzdGF0ZS5z
dHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAgICAgICBpZiAoc3RhdGUuc3R5bGUoKS0+
dGV4dFNpemVBZGp1c3QoKSkgeworICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBz
dGF0ZS5kb2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICAgICAgICAgICAgICBtdWx0aXBsaWVy
ICo9IGZyYW1lLT50ZXh0Wm9vbUZhY3RvcigpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
bGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBtdWx0
aXBsaWVyKTsKKyAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0
ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwg
bXVsdGlwbGllcik7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2Vu
dGFnZSgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogcGVyY2VudGFnZSBzaG91bGQgbm90IGJl
IHJlc3RyaWN0ZWQgdG8gYW4gaW50ZWdlciBoZXJlLgotICAgICAgICAgICAgbGluZUhlaWdodCA9
IExlbmd0aCgoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udFNpemUoKSAqIHByaW1pdGl2ZVZh
bHVlLT5nZXRJbnRWYWx1ZSgpKSAvIDEwMCwgRml4ZWQpOworICAgICAgICAgICAgbGluZUhlaWdo
dCA9IExlbmd0aCgoc3RhdGUuc3R5bGUoKS0+Zm9udFNpemUoKSAqIHByaW1pdGl2ZVZhbHVlLT5n
ZXRJbnRWYWx1ZSgpKSAvIDEwMCwgRml4ZWQpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2
ZVZhbHVlLT5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogbnVtYmVyIGFuZCBw
ZXJjZW50YWdlIHZhbHVlcyBzaG91bGQgcHJvZHVjZSB0aGUgc2FtZSB0eXBlIG9mIExlbmd0aCAo
aWUuIEZpeGVkIG9yIFBlcmNlbnQpLgogICAgICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0aChw
cmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSAqIDEwMC4wLCBQZXJjZW50KTsKQEAgLTEx
NzgsNyArMTE3OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBwcmltaXRp
dmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TGluZUhl
aWdodChsaW5lSGVpZ2h0KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUhlaWdodChs
aW5lSGVpZ2h0KTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5k
bGVyKCkKICAgICB7CkBAIC0xMjY1LDExICsxMjY1LDExIEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKikgeyB9Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciopIHsgfQotICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJp
dFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJikgeyB9CisgICAgc3RhdGlj
IHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUm
KSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+cmVzZXRQYWdlU2l6ZVR5cGUoKTsKKyAgICAgICAgc3RhdGUuc3R5
bGUoKS0+cmVzZXRQYWdlU2l6ZVR5cGUoKTsKICAgICAgICAgTGVuZ3RoIHdpZHRoOwogICAgICAg
ICBMZW5ndGggaGVpZ2h0OwogICAgICAgICBQYWdlU2l6ZVR5cGUgcGFnZVNpemVUeXBlID0gUEFH
RV9TSVpFX0FVVE87CkBAIC0xMjg1LDggKzEyODUsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgLy8gPGxlbmd0aD57Mn0KICAgICAgICAgICAgICAgICBpZiAoIXNlY29uZC0+aXNMZW5ndGgo
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIHdpZHRoID0g
Zmlyc3QtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHls
ZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkpOwotICAgICAgICAgICAgICAgIGhlaWdodCA9
IHNlY29uZC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0
eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSk7CisgICAgICAgICAgICAgICAgd2lkdGgg
PSBmaXJzdC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RF
bGVtZW50U3R5bGUoKSk7CisgICAgICAgICAgICAgICAgaGVpZ2h0ID0gc2Vjb25kLT5jb21wdXRl
TGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gPHBhZ2Utc2l6ZT4gPG9y
aWVudGF0aW9uPgogICAgICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBvcmRlciBpcyBndWFyYW50
ZWVkLiBTZWUgQ1NTUGFyc2VyOjpwYXJzZVNpemVQYXJhbWV0ZXIuCkBAIC0xMzA0LDcgKzEzMDQs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkp
IHsKICAgICAgICAgICAgICAgICAvLyA8bGVuZ3RoPgogICAgICAgICAgICAgICAgIHBhZ2VTaXpl
VHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsKLSAgICAgICAgICAgICAgICB3aWR0aCA9IGhlaWdo
dCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAg
ICAgICB3aWR0aCA9IGhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0
aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgMDoKQEAgLTEzMzAsMjkgKzEzMzAsMjkgQEAg
cHVibGljOgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFBhZ2VTaXplVHlwZShwYWdlU2l6
ZVR5cGUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRQYWdlU2l6ZShMZW5n
dGhTaXplKHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UGFnZVNp
emVUeXBlKHBhZ2VTaXplVHlwZSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFBhZ2VTaXpl
KExlbmd0aFNpemUod2lkdGgsIGhlaWdodCkpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlI
YW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5o
ZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQogfTsKIAogY2xh
c3MgQXBwbHlQcm9wZXJ0eVRleHRFbXBoYXNpc1N0eWxlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
dm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5
bGUoKS0+dGV4dEVtcGhhc2lzRmlsbCgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0VGV4dEVtcGhhc2lzTWFyayhzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0
RW1waGFzaXNNYXJrKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0
RW1waGFzaXNDdXN0b21NYXJrKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRFbXBo
YXNpc0N1c3RvbU1hcmsoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNp
c0ZpbGwoc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzRmlsbCgpKTsKKyAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhzdGF0ZS5wYXJlbnRTdHlsZSgpLT50
ZXh0RW1waGFzaXNNYXJrKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFz
aXNDdXN0b21NYXJrKHN0YXRlLnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNpc0N1c3RvbU1hcmso
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiAg
ICAgewotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxs
KFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzRmlsbCgpKTsKLSAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlh
bFRleHRFbXBoYXNpc01hcmsoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXND
dXN0b21NYXJrKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxs
KFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzRmlsbCgpKTsKKyAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBo
YXNpc01hcmsoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3Rv
bU1hcmsoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNDdXN0b21NYXJrKCkpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKICAg
ICAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+
KHZhbHVlKTsKQEAgLTEzNjYsMTEgKzEzNjYsMTEgQEAgcHVibGljOgogCiAgICAgICAgICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPihpdGVtKTsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPmdldElkZW50KCkgPT0gQ1NT
VmFsdWVGaWxsZWQgfHwgdmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVPcGVuKQotICAgICAg
ICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxs
KCp2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBo
YXNpc0ZpbGwoKnZhbHVlKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoKnZhbHVlKTsK
KyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyaygq
dmFsdWUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhudWxsQXRvbSk7CisgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0xMzc5LDIwICsxMzc5LDIwIEBAIHB1YmxpYzoK
ICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRU
ZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQpOwotICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJr
Q3VzdG9tKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBo
YXNpc0N1c3RvbU1hcmsocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChUZXh0RW1waGFzaXNGaWxs
RmlsbGVkKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmso
VGV4dEVtcGhhc2lzTWFya0N1c3RvbSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRU
ZXh0RW1waGFzaXNDdXN0b21NYXJrKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsobnVsbEF0b20pOworICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKTsKIAogICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVGaWxsZWQgfHwg
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVPcGVuKSB7Ci0gICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKCpwcmltaXRpdmVW
YWx1ZSk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFz
aXNNYXJrKFRleHRFbXBoYXNpc01hcmtBdXRvKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldFRleHRFbXBoYXNpc0ZpbGwoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFya0F1dG8pOwogICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4
dEVtcGhhc2lzRmlsbChUZXh0RW1waGFzaXNGaWxsRmlsbGVkKTsKLSAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoKnByaW1pdGl2ZVZhbHVlKTsK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoVGV4dEVtcGhh
c2lzRmlsbEZpbGxlZCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFz
aXNNYXJrKCpwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE0MDAsMTQg
KzE0MDAsMTQgQEAgcHVibGljOgogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQsCi0gICAgICAg
ICAgVCAoQW5pbWF0aW9uOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsCi0gICAgICAgICAgdm9p
ZCAoQW5pbWF0aW9uOjoqc2V0dGVyRnVuY3Rpb24pKFQpLAotICAgICAgICAgIGJvb2wgKEFuaW1h
dGlvbjo6KnRlc3RGdW5jdGlvbikoKSBjb25zdCwKLSAgICAgICAgICB2b2lkIChBbmltYXRpb246
OipjbGVhckZ1bmN0aW9uKSgpLAotICAgICAgICAgIFQgKCppbml0aWFsRnVuY3Rpb24pKCksCi0g
ICAgICAgICAgdm9pZCAoQ1NTVG9TdHlsZU1hcDo6Km1hcEZ1bmN0aW9uKShBbmltYXRpb24qLCBD
U1NWYWx1ZSopLAotICAgICAgICAgIEFuaW1hdGlvbkxpc3QqIChSZW5kZXJTdHlsZTo6KmFuaW1h
dGlvbkdldHRlckZ1bmN0aW9uKSgpLAotICAgICAgICAgIGNvbnN0IEFuaW1hdGlvbkxpc3QqIChS
ZW5kZXJTdHlsZTo6KmltbXV0YWJsZUFuaW1hdGlvbkdldHRlckZ1bmN0aW9uKSgpIGNvbnN0Pgor
ICAgIFQgKEFuaW1hdGlvbjo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LAorICAgIHZvaWQgKEFu
aW1hdGlvbjo6KnNldHRlckZ1bmN0aW9uKShUKSwKKyAgICBib29sIChBbmltYXRpb246Oip0ZXN0
RnVuY3Rpb24pKCkgY29uc3QsCisgICAgdm9pZCAoQW5pbWF0aW9uOjoqY2xlYXJGdW5jdGlvbiko
KSwKKyAgICBUICgqaW5pdGlhbEZ1bmN0aW9uKSgpLAorICAgIHZvaWQgKCptYXBGdW5jdGlvbiko
QW5pbWF0aW9uKiwgQ1NTVmFsdWUqKSwKKyAgICBBbmltYXRpb25MaXN0KiAoUmVuZGVyU3R5bGU6
OiphbmltYXRpb25HZXR0ZXJGdW5jdGlvbikoKSwKKyAgICBjb25zdCBBbmltYXRpb25MaXN0KiAo
UmVuZGVyU3R5bGU6OippbW11dGFibGVBbmltYXRpb25HZXR0ZXJGdW5jdGlvbikoKSBjb25zdD4K
IGNsYXNzIEFwcGx5UHJvcGVydHlBbmltYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IHNldFZhbHVlKEFuaW1hdGlvbiogYW5pbWF0aW9uLCBUIHZhbHVlKSB7IChhbmltYXRpb24tPipz
ZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9CkBAIC0xNDE1LDE0ICsxNDE1LDE0IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgYm9vbCB0ZXN0KGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uKSB7IHJldHVy
biAoYW5pbWF0aW9uLT4qdGVzdEZ1bmN0aW9uKSgpOyB9CiAgICAgc3RhdGljIHZvaWQgY2xlYXIo
QW5pbWF0aW9uKiBhbmltYXRpb24pIHsgKGFuaW1hdGlvbi0+KmNsZWFyRnVuY3Rpb24pKCk7IH0K
ICAgICBzdGF0aWMgVCBpbml0aWFsKCkgeyByZXR1cm4gKCppbml0aWFsRnVuY3Rpb24pKCk7IH0K
LSAgICBzdGF0aWMgdm9pZCBtYXAoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQW5pbWF0
aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3R5bGVSZXNvbHZlci0+c3R5bGVN
YXAoKS0+Km1hcEZ1bmN0aW9uKShhbmltYXRpb24sIHZhbHVlKTsgfQorICAgIHN0YXRpYyB2b2lk
IG1hcChTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NW
YWx1ZSogdmFsdWUpIHsgKCptYXBGdW5jdGlvbikoYW5pbWF0aW9uLCB2YWx1ZSk7IH0KICAgICBz
dGF0aWMgQW5pbWF0aW9uTGlzdCogYWNjZXNzQW5pbWF0aW9ucyhSZW5kZXJTdHlsZSogc3R5bGUp
IHsgcmV0dXJuIChzdHlsZS0+KmFuaW1hdGlvbkdldHRlckZ1bmN0aW9uKSgpOyB9CiAgICAgc3Rh
dGljIGNvbnN0IEFuaW1hdGlvbkxpc3QqIGFuaW1hdGlvbnMoUmVuZGVyU3R5bGUqIHN0eWxlKSB7
IHJldHVybiAoc3R5bGUtPippbW11dGFibGVBbmltYXRpb25HZXR0ZXJGdW5jdGlvbikoKTsgfQog
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAg
ICBBbmltYXRpb25MaXN0KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9ucyhzdHlsZVJlc29sdmVyLT5z
dHlsZSgpKTsKLSAgICAgICAgY29uc3QgQW5pbWF0aW9uTGlzdCogcGFyZW50TGlzdCA9IGFuaW1h
dGlvbnMoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSk7CisgICAgICAgIEFuaW1hdGlvbkxp
c3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0YXRlLnN0eWxlKCkpOworICAgICAgICBjb25z
dCBBbmltYXRpb25MaXN0KiBwYXJlbnRMaXN0ID0gYW5pbWF0aW9ucyhzdGF0ZS5wYXJlbnRTdHls
ZSgpKTsKICAgICAgICAgc2l6ZV90IGkgPSAwLCBwYXJlbnRTaXplID0gcGFyZW50TGlzdCA/IHBh
cmVudExpc3QtPnNpemUoKSA6IDA7CiAgICAgICAgIGZvciAoIDsgaSA8IHBhcmVudFNpemUgJiYg
dGVzdChwYXJlbnRMaXN0LT5hbmltYXRpb24oaSkpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChs
aXN0LT5zaXplKCkgPD0gaSkKQEAgLTE0MzYsOSArMTQzNiw5IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGNsZWFyKGxpc3QtPmFuaW1hdGlvbihpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAg
ICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMoc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKSk7CisgICAgICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRp
b25zKHN0YXRlLnN0eWxlKCkpOwogICAgICAgICBpZiAobGlzdC0+aXNFbXB0eSgpKQogICAgICAg
ICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOwogICAgICAgICBzZXRWYWx1
ZShsaXN0LT5hbmltYXRpb24oMCksIGluaXRpYWwoKSk7CkBAIC0xNDQ4LDIyICsxNDQ4LDIyIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGNsZWFyKGxpc3QtPmFuaW1hdGlvbihpKSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRp
b25zKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpOworICAgICAgICBBbmltYXRpb25MaXN0KiBsaXN0
ID0gYWNjZXNzQW5pbWF0aW9ucyhzdGF0ZS5zdHlsZSgpKTsKICAgICAgICAgc2l6ZV90IGNoaWxk
SW5kZXggPSAwOwogICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKICAgICAgICAg
ICAgIC8qIFdhbGsgZWFjaCB2YWx1ZSBhbmQgcHV0IGl0IGludG8gYW4gYW5pbWF0aW9uLCBjcmVh
dGluZyBuZXcgYW5pbWF0aW9ucyBhcyBuZWVkZWQuICovCiAgICAgICAgICAgICBmb3IgKENTU1Zh
bHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKGNoaWxkSW5kZXggPD0gbGlzdC0+c2l6ZSgpKQogICAgICAgICAg
ICAgICAgICAgICBsaXN0LT5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7Ci0gICAgICAgICAg
ICAgICAgbWFwKHN0eWxlUmVzb2x2ZXIsIGxpc3QtPmFuaW1hdGlvbihjaGlsZEluZGV4KSwgaS52
YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBtYXAoc3RhdGUsIGxpc3QtPmFuaW1hdGlvbihjaGls
ZEluZGV4KSwgaS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICArK2NoaWxkSW5kZXg7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobGlzdC0+aXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChBbmltYXRpb246OmNyZWF0ZSgpKTsK
LSAgICAgICAgICAgIG1hcChzdHlsZVJlc29sdmVyLCBsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRl
eCksIHZhbHVlKTsKKyAgICAgICAgICAgIG1hcChzdGF0ZSwgbGlzdC0+YW5pbWF0aW9uKGNoaWxk
SW5kZXgpLCB2YWx1ZSk7CiAgICAgICAgICAgICBjaGlsZEluZGV4ID0gMTsKICAgICAgICAgfQog
ICAgICAgICBmb3IgKCA7IGNoaWxkSW5kZXggPCBsaXN0LT5zaXplKCk7ICsrY2hpbGRJbmRleCkg
ewpAQCAtMTQ3NywyMiArMTQ3NywyMiBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlP
dXRsaW5lU3R5bGUgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikK
KyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEFwcGx5UHJvcGVy
dHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlz
QXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8s
IE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46
OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBB
cHBseVByb3BlcnR5RGVmYXVsdEJhc2U8RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6Om91dGxp
bmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZSwgRUJv
cmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46OmFwcGx5SW5oZXJp
dFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBBcHBseVByb3BlcnR5
RGVmYXVsdEJhc2U8T3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGVJc0F1
dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRvLCBP
dXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8+Ojph
cHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIEFwcGx5UHJvcGVy
dHlEZWZhdWx0QmFzZTxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBF
Qm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUs
ICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlJbmhlcml0VmFsdWUocHJv
cGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
cikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEFwcGx5UHJv
cGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHls
ZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1
dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0
bz46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAg
ICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6Om91
dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZSwg
RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46OmFwcGx5SW5p
dGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBBcHBseVByb3Bl
cnR5RGVmYXVsdEJhc2U8T3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGVJ
c0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRv
LCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8+
OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIEFwcGx5UHJv
cGVydHlEZWZhdWx0QmFzZTxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxl
LCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5
bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlJbml0aWFsVmFsdWUo
cHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgIHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8T3V0bGluZUlzQXV0bywgJlJlbmRl
clN0eWxlOjpvdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6
c2V0T3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OmluaXRp
YWxPdXRsaW5lU3R5bGVJc0F1dG8+OjphcHBseVZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2
ZXIsIHZhbHVlKTsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUJvcmRlclN0eWxlLCAm
UmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNl
dE91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJT
dHlsZT46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAg
ICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91
dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5l
U3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVT
dHlsZUlzQXV0bz46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6Om91dGxp
bmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZSwgRUJv
cmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46OmFwcGx5VmFsdWUo
cHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlI
YW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5o
ZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQpAQCAtMTUwMCw3
ICsxNTAwLDcgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5UmVzaXplIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTUxMiwxMyArMTUxMiwxMyBAQCBwdWJsaWM6CiAgICAg
ICAgIGNhc2UgMDoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBDU1NWYWx1ZUF1
dG86Ci0gICAgICAgICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gc3R5bGVSZXNvbHZlci0+
ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKSkKKyAgICAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGlu
Z3MgPSBzdGF0ZS5kb2N1bWVudCgpLT5zZXR0aW5ncygpKQogICAgICAgICAgICAgICAgIHIgPSBz
ZXR0aW5ncy0+dGV4dEFyZWFzQXJlUmVzaXphYmxlKCkgPyBSRVNJWkVfQk9USCA6IFJFU0laRV9O
T05FOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBy
ID0gKnByaW1pdGl2ZVZhbHVlOwogICAgICAgICB9Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldFJlc2l6ZShyKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UmVzaXplKHIp
OwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBA
IC0xNTMwLDcgKzE1MzAsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlWZXJ0aWNh
bEFsaWduIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBz
dGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTUzOCw5ICsxNTM4LDkgQEAg
cHVibGljOgogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAogICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAg
cmV0dXJuIHN0YXRlLnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ24oKnByaW1pdGl2ZVZhbHVlKTsK
IAotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFsaWduTGVuZ3Ro
KHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8
IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNl
bnRhZ2VDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5y
b290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFsaWduTGVuZ3RoKHByaW1p
dGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNl
bnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VD
b252ZXJzaW9uPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRl
LnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0
eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC0xNTUyLDMyICsxNTUyLDMyIEBAIHB1YmxpYzoK
IAogY2xhc3MgQXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlvIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
dm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIGlmICghc3R5bGVS
ZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+aGFzQXNwZWN0UmF0aW8oKSkKKyAgICAgICAgaWYgKCFz
dGF0ZS5wYXJlbnRTdHlsZSgpLT5oYXNBc3BlY3RSYXRpbygpKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0cnVl
KTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWlu
YXRvcihzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb0Rlbm9taW5hdG9y
KCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVy
YXRvcihzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb051bWVyYXRvcigp
KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8odHJ1ZSk7CisgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldEFzcGVjdFJhdGlvRGVub21pbmF0b3Ioc3RhdGUucGFyZW50
U3R5bGUoKS0+YXNwZWN0UmF0aW9EZW5vbWluYXRvcigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+YXNwZWN0UmF0
aW9OdW1lcmF0b3IoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0
aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0
ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNB
c3BlY3RSYXRpbyhSZW5kZXJTdHlsZTo6aW5pdGlhbEhhc0FzcGVjdFJhdGlvKCkpOwotICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKFJlbmRl
clN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9EZW5vbWluYXRvcigpKTsKLSAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3IoUmVuZGVyU3R5bGU6Omlu
aXRpYWxBc3BlY3RSYXRpb051bWVyYXRvcigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
SGFzQXNwZWN0UmF0aW8oUmVuZGVyU3R5bGU6OmluaXRpYWxIYXNBc3BlY3RSYXRpbygpKTsKKyAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihSZW5kZXJTdHls
ZTo6aW5pdGlhbEFzcGVjdFJhdGlvRGVub21pbmF0b3IoKSk7CisgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldEFzcGVjdFJhdGlvTnVtZXJhdG9yKFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0
aW9OdW1lcmF0b3IoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUp
CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVT
dGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUt
PmlzQXNwZWN0UmF0aW9WYWx1ZSgpKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyhmYWxzZSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRIYXNBc3BlY3RSYXRpbyhmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgQ1NTQXNwZWN0UmF0aW9WYWx1ZSogYXNwZWN0UmF0aW9WYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU0FzcGVjdFJhdGlvVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKHRydWUpOwotICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKGFzcGVjdFJhdGlvVmFsdWUt
PmRlbm9taW5hdG9yVmFsdWUoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dEFzcGVjdFJhdGlvTnVtZXJhdG9yKGFzcGVjdFJhdGlvVmFsdWUtPm51bWVyYXRvclZhbHVlKCkp
OworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0cnVlKTsKKyAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihhc3BlY3RSYXRpb1Zh
bHVlLT5kZW5vbWluYXRvclZhbHVlKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRBc3Bl
Y3RSYXRpb051bWVyYXRvcihhc3BlY3RSYXRpb1ZhbHVlLT5udW1lcmF0b3JWYWx1ZSgpKTsKICAg
ICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtMTU4
OCw0OCArMTU4OCw0OCBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlab29tIHsKIHBy
aXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcmVzZXRFZmZlY3RpdmVab29tKFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgcmVzZXRFZmZlY3RpdmVab29tKFN0eWxl
UmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7CiAgICAgICAgIC8vIFJlc2V0IHRoZSB6b29tIGlu
IGVmZmVjdC4gVGhpcyBhbGxvd3MgdGhlIHNldFpvb20gbWV0aG9kIHRvIGFjY3VyYXRlbHkgY29t
cHV0ZSBhIG5ldyB6b29tIGluIGVmZmVjdC4KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0RWZm
ZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpID8gc3R5bGVSZXNvbHZlci0+
cGFyZW50U3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpIDogUmVuZGVyU3R5bGU6OmluaXRpYWxab29t
KCkpOworICAgICAgICBzdGF0ZS5zZXRFZmZlY3RpdmVab29tKHN0YXRlLnBhcmVudFN0eWxlKCkg
PyBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5lZmZlY3RpdmVab29tKCkgOiBSZW5kZXJTdHlsZTo6aW5p
dGlhbFpvb20oKSk7CiAgICAgfQogCiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhl
cml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVS
ZXNvbHZlcik7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oc3R5bGVSZXNvbHZlci0+
cGFyZW50U3R5bGUoKS0+em9vbSgpKTsKKyAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0YXRl
KTsKKyAgICAgICAgc3RhdGUuc2V0Wm9vbShzdGF0ZS5wYXJlbnRTdHlsZSgpLT56b29tKCkpOwog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0
aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsK
LSAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBzdHls
ZVJlc29sdmVyLT5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICAgICAg
cmVzZXRFZmZlY3RpdmVab29tKHN0YXRlKTsKKyAgICAgICAgc3RhdGUuc2V0Wm9vbShSZW5kZXJT
dHlsZTo6aW5pdGlhbFpvb20oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSog
dmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VS
VCh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7
CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9y
bWFsKSB7Ci0gICAgICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7Ci0g
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9v
bSgpKTsKKyAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdGF0ZSk7CisgICAgICAgICAg
ICBzdGF0ZS5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKICAgICAgICAgfSBl
bHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVJlc2V0KSB7Ci0g
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxlOjpp
bml0aWFsWm9vbSgpKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oUmVuZGVy
U3R5bGU6OmluaXRpYWxab29tKCkpOworICAgICAgICAgICAgc3RhdGUuc2V0RWZmZWN0aXZlWm9v
bShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAgICAgICAgICBzdGF0ZS5zZXRab29t
KFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZURvY3VtZW50KSB7Ci0gICAgICAgICAgICBm
bG9hdCBkb2Nab29tID0gc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpID8gc3R5bGVS
ZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLT56b29tKCkgOiBSZW5kZXJTdHlsZTo6aW5pdGlh
bFpvb20oKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEVmZmVjdGl2ZVpvb20oZG9j
Wm9vbSk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKGRvY1pvb20pOworICAg
ICAgICAgICAgZmxvYXQgZG9jWm9vbSA9IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSA/IHN0YXRl
LnJvb3RFbGVtZW50U3R5bGUoKS0+em9vbSgpIDogUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCk7
CisgICAgICAgICAgICBzdGF0ZS5zZXRFZmZlY3RpdmVab29tKGRvY1pvb20pOworICAgICAgICAg
ICAgc3RhdGUuc2V0Wm9vbShkb2Nab29tKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+aXNQZXJjZW50YWdlKCkpIHsKLSAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShz
dHlsZVJlc29sdmVyKTsKKyAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdGF0ZSk7CiAg
ICAgICAgICAgICBpZiAoZmxvYXQgcGVyY2VudCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZh
bHVlKCkpCi0gICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9vbShwZXJjZW50IC8g
MTAwLjBmKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zZXRab29tKHBlcmNlbnQgLyAxMDAuMGYp
OwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7Ci0gICAg
ICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7CisgICAgICAgICAgICBy
ZXNldEVmZmVjdGl2ZVpvb20oc3RhdGUpOwogICAgICAgICAgICAgaWYgKGZsb2F0IG51bWJlciA9
IHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c2V0Wm9vbShudW1iZXIpOworICAgICAgICAgICAgICAgIHN0YXRlLnNldFpvb20o
bnVtYmVyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTY0MSw0MiArMTY0MSw0MiBAQCBwdWJs
aWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlEaXNwbGF5IHsKIHByaXZhdGU6Ci0gICAgc3RhdGlj
IGlubGluZSBib29sIGlzVmFsaWREaXNwbGF5VmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgRURpc3BsYXkgZGlzcGxheVByb3BlcnR5VmFsdWUpCisgICAgc3RhdGljIGlubGluZSBi
b29sIGlzVmFsaWREaXNwbGF5VmFsdWUoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBFRGlzcGxh
eSBkaXNwbGF5UHJvcGVydHlWYWx1ZSkKICAgICB7CiAjaWYgRU5BQkxFKFNWRykKLSAgICAgICAg
aWYgKHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKSAmJiBzdHlsZVJlc29sdmVyLT5lbGVtZW50KCkt
PmlzU1ZHRWxlbWVudCgpICYmIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnN0eWxlVHlwZSgpID09
IE5PUFNFVURPKQorICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpICYmIHN0YXRlLmVsZW1lbnQo
KS0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGUuc3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VV
RE8pCiAgICAgICAgICAgICByZXR1cm4gKGRpc3BsYXlQcm9wZXJ0eVZhbHVlID09IElOTElORSB8
fCBkaXNwbGF5UHJvcGVydHlWYWx1ZSA9PSBCTE9DSyB8fCBkaXNwbGF5UHJvcGVydHlWYWx1ZSA9
PSBOT05FKTsKICNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShzdHlsZVJlc29sdmVyKTsKKyAg
ICAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICAgICAgVU5VU0VEX1BBUkFNKGRpc3BsYXlQ
cm9wZXJ0eVZhbHVlKTsKICNlbmRpZgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiBwdWJs
aWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAg
ICAgICBFRGlzcGxheSBkaXNwbGF5ID0gc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+ZGlz
cGxheSgpOwotICAgICAgICBpZiAoIWlzVmFsaWREaXNwbGF5VmFsdWUoc3R5bGVSZXNvbHZlciwg
ZGlzcGxheSkpCisgICAgICAgIEVEaXNwbGF5IGRpc3BsYXkgPSBzdGF0ZS5wYXJlbnRTdHlsZSgp
LT5kaXNwbGF5KCk7CisgICAgICAgIGlmICghaXNWYWxpZERpc3BsYXlWYWx1ZShzdGF0ZSwgZGlz
cGxheSkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldERpc3BsYXkoZGlzcGxheSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldERpc3Bs
YXkoZGlzcGxheSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMg
dm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYg
c3RhdGUpCiAgICAgewotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXREaXNwbGF5
KFJlbmRlclN0eWxlOjppbml0aWFsRGlzcGxheSgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0RGlzcGxheShSZW5kZXJTdHlsZTo6aW5pdGlhbERpc3BsYXkoKSk7CiAgICAgfQogCi0gICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICBFRGlzcGxheSBkaXNwbGF5ID0gKnN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCi0gICAgICAgIGlmICghaXNWYWxpZERpc3BsYXlW
YWx1ZShzdHlsZVJlc29sdmVyLCBkaXNwbGF5KSkKKyAgICAgICAgaWYgKCFpc1ZhbGlkRGlzcGxh
eVZhbHVlKHN0YXRlLCBkaXNwbGF5KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXREaXNwbGF5KGRpc3BsYXkpOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXREaXNwbGF5KGRpc3BsYXkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9w
ZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC0xNjg5LDIxICsxNjg5LDIxIEBAIHRlbXBs
YXRlIDxDbGlwUGF0aE9wZXJhdGlvbiogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkg
Y29uc3QsIHZvaWQgKFJlbmRlCiBjbGFzcyBBcHBseVByb3BlcnR5Q2xpcFBhdGggewogcHVibGlj
OgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgUGFzc1JlZlB0
cjxDbGlwUGF0aE9wZXJhdGlvbj4gdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZh
bHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkgewogICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAg
IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIDApOworICAgICAgICAgICAgICAgIHNl
dFZhbHVlKHN0YXRlLnN0eWxlKCksIDApOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZl
VmFsdWUtPmlzU2hhcGUoKSkgewotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCksIFNoYXBlQ2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZShiYXNpY1NoYXBlRm9y
VmFsdWUoc3R5bGVSZXNvbHZlciwgcHJpbWl0aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUoKSkpKTsK
KyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBTaGFwZUNsaXBQYXRoT3Bl
cmF0aW9uOjpjcmVhdGUoYmFzaWNTaGFwZUZvclZhbHVlKHN0YXRlLCBwcmltaXRpdmVWYWx1ZS0+
Z2V0U2hhcGVWYWx1ZSgpKSkpOwogICAgICAgICAgICAgfQogI2lmIEVOQUJMRShTVkcpCiAgICAg
ICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGNzc1VSTFZh
bHVlID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7Ci0gICAgICAgICAgICAgICAg
S1VSTCB1cmwgPSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChjc3NVUkxW
YWx1ZSk7CisgICAgICAgICAgICAgICAgS1VSTCB1cmwgPSBzdGF0ZS5kb2N1bWVudCgpLT5jb21w
bGV0ZVVSTChjc3NVUkxWYWx1ZSk7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0IGRvZXNu
J3Qgd29yayB3aXRoIGZvcndhcmQgb3IgZXh0ZXJuYWwgU1ZHIHJlZmVyZW5jZXMgKHNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA0MDUpCi0gICAgICAgICAgICAg
ICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgUmVmZXJlbmNlQ2xpcFBhdGhPcGVy
YXRpb246OmNyZWF0ZShjc3NVUkxWYWx1ZSwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigpKSk7Cisg
ICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgUmVmZXJlbmNlQ2xpcFBhdGhP
cGVyYXRpb246OmNyZWF0ZShjc3NVUkxWYWx1ZSwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigpKSk7
CiAgICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgfQpAQCAtMTcyMCwxOCArMTcyMCwxOCBA
QCB0ZW1wbGF0ZSA8RXhjbHVzaW9uU2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVu
Y3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbgogY2xhc3MgQXBwbHlQcm9wZXJ0eUV4Y2x1c2lvblNo
YXBlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5
bGUsIFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gdmFsdWUpIHsgKHN0eWxlLT4qc2V0
dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3Rh
dGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkgewogICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAg
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKQot
ICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIDApOworICAg
ICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIDApOwogICAgICAgICAgICAgLy8g
RklYTUUgQnVnIDEwMjU3MTogTGF5b3V0IGZvciB0aGUgdmFsdWUgJ291dHNpZGUtc2hhcGUnIGlz
IG5vdCB5ZXQgaW1wbGVtZW50ZWQKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlT3V0c2lkZVNoYXBlKQotICAgICAgICAgICAgICAgIHNl
dFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0
ZU91dHNpZGVWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgp
LCBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVPdXRzaWRlVmFsdWUoKSk7CiAgICAgICAgICAg
ICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNTaGFwZSgpKSB7Ci0gICAgICAgICAgICAgICAg
UmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHNoYXBlID0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6
Y3JlYXRlU2hhcGVWYWx1ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3R5bGVSZXNvbHZlciwgcHJpbWl0
aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUoKSkpOwotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIHNoYXBlLnJlbGVhc2UoKSk7CisgICAgICAgICAgICAgICAg
UmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHNoYXBlID0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6
Y3JlYXRlU2hhcGVWYWx1ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3RhdGUsIHByaW1pdGl2ZVZhbHVl
LT5nZXRTaGFwZVZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHls
ZSgpLCBzaGFwZS5yZWxlYXNlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtMTc0NiwyMSArMTc0NiwyMSBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKENTU19JTUFHRV9SRVNP
TFVUSU9OKQogY2xhc3MgQXBwbHlQcm9wZXJ0eUltYWdlUmVzb2x1dGlvbiB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5o
ZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0
YXRlKQogICAgIHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1
dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVz
b2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UsIElt
YWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9u
U291cmNlPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0g
ICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVu
ZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5k
ZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJl
bmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU25hcD46OmFwcGx5SW5oZXJpdFZhbHVl
KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVs
dEJhc2U8ZmxvYXQsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRl
clN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJ
bWFnZVJlc29sdXRpb24+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29s
dmVyKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNv
dXJjZSwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlv
blNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVz
b2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNl
Pjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBBcHBseVBy
b3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbWFn
ZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OnNldElt
YWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW5p
dGlhbEltYWdlUmVzb2x1dGlvblNuYXA+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBz
dGF0ZSk7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxmbG9hdCwgJlJlbmRlclN0
eWxlOjppbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1
dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvbj46OmFwcGx5
SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewot
ICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU291cmNlLCAm
UmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNl
LCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9u
U291cmNlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25Tb3VyY2U+OjphcHBs
eUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgQXBwbHlQ
cm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW1h
Z2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjpzZXRJ
bWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6Omlu
aXRpYWxJbWFnZVJlc29sdXRpb25TbmFwPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwg
c3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxmbG9hdCwg
JlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OnNldElt
YWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlv
bj46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAg
ICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVy
U3R5bGU6OmltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVu
ZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNl
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25Tb3VyY2U+OjphcHBseUluaXRp
YWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0
QmFzZTxJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNu
YXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9u
U25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNv
bHV0aW9uU25hcD46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAg
ICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPGZsb2F0LCAmUmVuZGVyU3R5bGU6OmltYWdlUmVz
b2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwg
JlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uPjo6YXBwbHlJbml0aWFsVmFsdWUo
cHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZh
bHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZh
bHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTc4MCw5ICsxNzgw
LDkgQEAgcHVibGljOgogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJlc29sdXRp
b24gPSBwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19EUFBYKTsKICAgICAgICAgfQotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRJ
bWFnZVJlc29sdXRpb25Tb3VyY2Uoc291cmNlKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU25hcChzbmFwKTsKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uKHJlc29sdXRpb24pOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25Tb3VyY2Uoc291cmNlKTsKKyAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU25hcChzbmFwKTsKKyAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uKHJlc29sdXRpb24pOwogICAgIH0KIAogICAgIHN0
YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWls
ZGVyLmgKaW5kZXggNGZmZTg1MjM0YzEzZDBmYmIxNDQ2ZTA2ODgxYzlmN2ZlZmM3MDY3Yi4uNTkx
ZGRhOWI2MjhlMTc1OTMwZjg1ZjY0Y2E0ZDljOGU4ZTgyOWZmNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZUJ1aWxkZXIuaApAQCAtMzMsMTggKzMzLDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQ1NTVmFsdWU7CiBjbGFzcyBTdHlsZUJ1aWxkZXI7CitjbGFzcyBTdHlsZVJlc29sdmVTdGF0
ZTsKIGNsYXNzIFN0eWxlUmVzb2x2ZXI7CiAKIGNsYXNzIFByb3BlcnR5SGFuZGxlciB7CiBwdWJs
aWM6Ci0gICAgdHlwZWRlZiB2b2lkICgqSW5oZXJpdEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKik7Ci0gICAgdHlwZWRlZiB2b2lkICgqSW5pdGlhbEZ1bmN0aW9uKShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKik7Ci0gICAgdHlwZWRlZiB2b2lkICgqQXBwbHlGdW5j
dGlvbikoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciosIENTU1ZhbHVlKik7CisgICAgdHlw
ZWRlZiB2b2lkICgqSW5oZXJpdEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVT
dGF0ZSYpOworICAgIHR5cGVkZWYgdm9pZCAoKkluaXRpYWxGdW5jdGlvbikoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlU3RhdGUmKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpBcHBseUZ1bmN0aW9u
KShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYsIENTU1ZhbHVlKik7CiAgICAgUHJv
cGVydHlIYW5kbGVyKCkgOiBtX2luaGVyaXQoMCksIG1faW5pdGlhbCgwKSwgbV9hcHBseSgwKSB7
IH0KICAgICBQcm9wZXJ0eUhhbmRsZXIoSW5oZXJpdEZ1bmN0aW9uIGluaGVyaXQsIEluaXRpYWxG
dW5jdGlvbiBpbml0aWFsLCBBcHBseUZ1bmN0aW9uIGFwcGx5KSA6IG1faW5oZXJpdChpbmhlcml0
KSwgbV9pbml0aWFsKGluaXRpYWwpLCBtX2FwcGx5KGFwcGx5KSB7IH0KLSAgICB2b2lkIGFwcGx5
SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlcikgY29uc3QgeyBBU1NFUlQobV9pbmhlcml0KTsgKCptX2luaGVyaXQpKHByb3Bl
cnR5SUQsIHN0eWxlUmVzb2x2ZXIpOyB9Ci0gICAgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIGNvbnN0
IHsgQVNTRVJUKG1faW5pdGlhbCk7ICgqbV9pbml0aWFsKShwcm9wZXJ0eUlELCBzdHlsZVJlc29s
dmVyKTsgfQotICAgIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkgY29uc3QgeyBBU1NF
UlQobV9hcHBseSk7ICgqbV9hcHBseSkocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUp
OyB9CisgICAgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkgY29uc3QgeyBBU1NFUlQobV9pbmhlcml0KTsgKCpt
X2luaGVyaXQpKHByb3BlcnR5SUQsIHN0YXRlKTsgfQorICAgIHZvaWQgYXBwbHlJbml0aWFsVmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpIGNv
bnN0IHsgQVNTRVJUKG1faW5pdGlhbCk7ICgqbV9pbml0aWFsKShwcm9wZXJ0eUlELCBzdGF0ZSk7
IH0KKyAgICB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkgY29uc3QgeyBBU1NFUlQobV9hcHBs
eSk7ICgqbV9hcHBseSkocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsgfQogICAgIGJvb2wgaXNW
YWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5oZXJpdCAmJiBtX2luaXRpYWwgJiYgbV9hcHBseTsg
fQogICAgIEluaGVyaXRGdW5jdGlvbiBpbmhlcml0RnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBt
X2luaGVyaXQ7IH0KICAgICBJbml0aWFsRnVuY3Rpb24gaW5pdGlhbEZ1bmN0aW9uKCkgeyByZXR1
cm4gbV9pbml0aWFsOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVTdGF0ZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjg1ZWZkOTRmZjhjZDNlYWU4ZGZhNjdlMGI1MzcyZWJjYTE3YjhiZjMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlU3RhdGUuaApAQCAtMCww
ICsxLDIzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpZm5kZWYgU3R5bGVSZXNvbHZlU3RhdGVfaAorI2RlZmluZSBTdHlsZVJlc29sdmVTdGF0ZV9o
CisKKyNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNs
dWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgorI2lmIEVO
QUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJXZWJLaXRDU1NTVkdE
b2N1bWVudFZhbHVlLmgiCisjZW5kaWYKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordHlwZWRlZiBIYXNoTWFwPENTU1Byb3BlcnR5SUQsIFJlZlB0cjxDU1NWYWx1
ZT4gPiBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYm
IEVOQUJMRShTVkcpCit0eXBlZGVmIEhhc2hNYXA8RmlsdGVyT3BlcmF0aW9uKiwgUmVmUHRyPFdl
YktpdENTU1NWR0RvY3VtZW50VmFsdWU+ID4gUGVuZGluZ1NWR0RvY3VtZW50TWFwOworI2VuZGlm
CisKK2NsYXNzIFJlbmRlclJlZ2lvbjsKK2NsYXNzIFJ1bGVEYXRhOworCitjbGFzcyBTdHlsZVJl
c29sdmVTdGF0ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3R5bGVSZXNvbHZlU3RhdGUp
OworcHVibGljOgorICAgIFN0eWxlUmVzb2x2ZVN0YXRlKCkKKyAgICA6IG1fZWxlbWVudCgwKQor
ICAgICwgbV9zdHlsZSgwKQorICAgICwgbV9pbmNsdWRlRW1wdHlSdWxlcyhmYWxzZSkKKyAgICAs
IG1fc2FtZU9yaWdpbk9ubHkoZmFsc2UpCisgICAgLCBtX3BzZXVkb1N0eWxlKE5PUFNFVURPKQor
ICAgICwgbV9tb2RlKFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpCisgICAgLCBtX3Jl
Z2lvbkZvclN0eWxpbmcoMCkKKyAgICAsIG1fZWxlbWVudExpbmtTdGF0ZShOb3RJbnNpZGVMaW5r
KQorICAgICwgbV9wYXJlbnROb2RlKDApCisgICAgLCBtX3BhcmVudFN0eWxlKDApCisgICAgLCBt
X2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludChmYWxzZSkKKyAgICAsIG1fcm9vdEVsZW1lbnRT
dHlsZSgwKQorICAgICwgbV9jYW5Vc2VGYXN0UmVqZWN0KGZhbHNlKQorICAgICwgbV9lbGVtZW50
QWZmZWN0ZWRCeUNsYXNzUnVsZXMoZmFsc2UpCisgICAgLCBtX2FwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSh0cnVlKQorICAgICwgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZh
bHNlKQorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICAsIG1faGFzUGVuZGluZ1NoYWRlcnMo
ZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fbGluZUhlaWdodFZhbHVlKDApCisgICAgLCBtX2ZvbnRE
aXJ0eShmYWxzZSkKKyAgICAsIG1faGFzVUFBcHBlYXJhbmNlKGZhbHNlKQorICAgICwgbV9iYWNr
Z3JvdW5kRGF0YShCYWNrZ3JvdW5kRmlsbExheWVyKSB7IH0KKworcHVibGljOgorICAgIFJlbmRl
clN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KKyAgICBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9CisgICAgUmVu
ZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50
U3R5bGU7IH0KKyAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50
OyB9CisgICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3R5bGVkRWxlbWVudDsgfQorICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKTsgfQorICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5
bGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaW9uRm9yU3R5bGluZzsgfQorICAgIFNlbGVjdG9y
Q2hlY2tlcjo6TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgUHNldWRv
SWQgcHNldWRvU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3BzZXVkb1N0eWxlOyB9CisgICAgY29u
c3QgQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50Tm9k
ZTsgfQorICAgIEVJbnNpZGVMaW5rIGVsZW1lbnRMaW5rU3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X2VsZW1lbnRMaW5rU3RhdGU7IH0KKyAgICBib29sIGRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2lu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50OyB9CisKKyAg
ICB2b2lkIHNldENhblVzZUZhc3RSZWplY3QoYm9vbCBjYW5Vc2VGYXN0UmVqZWN0KSB7IG1fY2Fu
VXNlRmFzdFJlamVjdCA9IGNhblVzZUZhc3RSZWplY3Q7IH0KKyAgICBib29sIGNhblVzZUZhc3RS
ZWplY3QoKSBjb25zdCB7IHJldHVybiBtX2NhblVzZUZhc3RSZWplY3Q7IH0KKworICAgIHZvaWQg
c2V0U3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKSB7IG1fc3R5bGUgPSBzdHlsZTsgfQorICAgIHZv
aWQgc2V0Um9vdEVsZW1lbnRTdHlsZShSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSkgeyBt
X3Jvb3RFbGVtZW50U3R5bGUgPSByb290RWxlbWVudFN0eWxlOyB9CisgICAgdm9pZCBzZXRFbGVt
ZW50KEVsZW1lbnQqIGUpIHsgbV9lbGVtZW50ID0gZTsgbV9zdHlsZWRFbGVtZW50ID0gZSAmJiBl
LT5pc1N0eWxlZEVsZW1lbnQoKSA/IHRvU3R5bGVkRWxlbWVudChlKSA6IDA7IH0KKyAgICB2b2lk
IHNldEVsZW1lbnRMaW5rU3RhdGUoRUluc2lkZUxpbmsgZWxlbWVudExpbmtTdGF0ZSkgeyBtX2Vs
ZW1lbnRMaW5rU3RhdGUgPSBlbGVtZW50TGlua1N0YXRlOyB9CisgICAgdm9pZCBzZXRQYXJlbnRO
b2RlKENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUpIHsgbV9wYXJlbnROb2RlID0gcGFyZW50Tm9k
ZTsgfQorICAgIHZvaWQgc2V0UGFyZW50U3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSB7
IG1fcGFyZW50U3R5bGUgPSBwYXJlbnRTdHlsZTsgfQorICAgIHZvaWQgc2V0RGlzdHJpYnV0ZWRU
b0luc2VydGlvblBvaW50KGJvb2wgZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KSB7IG1fZGlz
dHJpYnV0ZWRUb0luc2VydGlvblBvaW50ID0gZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50OyB9
CisgICAgdm9pZCBzZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSBtb2RlKSB7IG1fbW9kZSA9
IG1vZGU7IH0KKyAgICB2b2lkIHNldFJlZ2lvbkZvclN0eWxpbmcoUmVuZGVyUmVnaW9uKiByZWdp
b25Gb3JTdHlsaW5nKSB7IG1fcmVnaW9uRm9yU3R5bGluZyA9IHJlZ2lvbkZvclN0eWxpbmc7IH0K
KyAgICB2b2lkIHNldFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkb1N0eWxlKSB7IG1fcHNldWRv
U3R5bGUgPSBwc2V1ZG9TdHlsZTsgfQorCisgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24oKSB7IHJldHVybiBzdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsgfQorICAg
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4g
cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KKworICAgIHZvaWQgc2V0Rm9udERl
c2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fZm9u
dERpcnR5IHw9IHN0eWxlKCktPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9
CisKKyAgICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5z
ZXRab29tKGYpOyB9CisgICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9mb250
RGlydHkgfD0gc3R5bGUoKS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQorCisgICAgdm9pZCBzZXRU
ZXh0U2l6ZUFkanVzdChib29sIGIpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0VGV4dFNp
emVBZGp1c3QoYik7IH0KKyAgICB2b2lkIHNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRp
bmdNb2RlKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFdyaXRpbmdNb2RlKHdyaXRpbmdN
b2RlKTsgfQorICAgIHZvaWQgc2V0VGV4dE9yaWVudGF0aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0
T3JpZW50YXRpb24pIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0VGV4dE9yaWVudGF0aW9u
KHRleHRPcmllbnRhdGlvbik7IH0KKworICAgIHZvaWQgc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxh
clN0eWxlKGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKSB7IG1fYXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlID0gYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOyB9CisgICAgdm9p
ZCBzZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGJvb2wgYXBwbHlQcm9wZXJ0eVRv
VmlzaXRlZExpbmtTdHlsZSkgeyBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBh
cHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOyB9CisgICAgYm9vbCBhcHBseVByb3BlcnR5
VG9SZWd1bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZTsgfQorICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsgfQorCisgICAgVmVj
dG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+JiBtYXRjaGVkUnVsZXMoKSB7IHJldHVybiBtX21hdGNo
ZWRSdWxlczsgfQorICAgIGNvbnN0IFJ1bGVEYXRhKiBtYXRjaGVkUnVsZUF0KGludCBpbmRleCkg
eyByZXR1cm4gbV9tYXRjaGVkUnVsZXNbaW5kZXhdOyB9CisKKyAgICB2b2lkIHNldEVsZW1lbnRB
ZmZlY3RlZEJ5Q2xhc3NSdWxlcyhib29sIGFmZmVjdGVkQnlDbGFzc1J1bGVzKSB7IG1fZWxlbWVu
dEFmZmVjdGVkQnlDbGFzc1J1bGVzID0gYWZmZWN0ZWRCeUNsYXNzUnVsZXM7IH0KKyAgICBib29s
IGVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudEFm
ZmVjdGVkQnlDbGFzc1J1bGVzOyB9CisgICAgCisgICAgdm9pZCBjYWNoZUJvcmRlckFuZEJhY2tn
cm91bmQoUmVuZGVyU3R5bGUqIHN0eWxlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0eWxlKTsK
KyAgICAgICAgbV9oYXNVQUFwcGVhcmFuY2UgPSBzdHlsZS0+aGFzQXBwZWFyYW5jZSgpOworICAg
ICAgICBpZiAobV9oYXNVQUFwcGVhcmFuY2UpIHsKKyAgICAgICAgICAgIG1fYm9yZGVyRGF0YSA9
IHN0eWxlLT5ib3JkZXIoKTsKKyAgICAgICAgICAgIG1fYmFja2dyb3VuZERhdGEgPSAqc3R5bGUt
PmJhY2tncm91bmRMYXllcnMoKTsKKyAgICAgICAgICAgIG1fYmFja2dyb3VuZENvbG9yID0gc3R5
bGUtPmJhY2tncm91bmRDb2xvcigpOworICAgICAgICB9CisgICAgfQorCisgICAgUGVuZGluZ0lt
YWdlUHJvcGVydHlNYXAmIHBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKSB7IHJldHVybiBtX3BlbmRp
bmdJbWFnZVByb3BlcnRpZXM7IH0KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxF
KFNWRykKKyAgICBQZW5kaW5nU1ZHRG9jdW1lbnRNYXAmIHBlbmRpbmdTVkdEb2N1bWVudHMoKSB7
IHJldHVybiBtX3BlbmRpbmdTVkdEb2N1bWVudHM7IH0KKyNlbmRpZgorCisgICAgdm9pZCBzZXRM
aW5lSGVpZ2h0VmFsdWUoQ1NTVmFsdWUqIHZhbHVlKSB7IG1fbGluZUhlaWdodFZhbHVlID0gdmFs
dWU7IH0KKyAgICBDU1NWYWx1ZSogbGluZUhlaWdodFZhbHVlKCkgeyByZXR1cm4gbV9saW5lSGVp
Z2h0VmFsdWU7IH0KKworICAgIGJvb2wgaGFzUGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cGFyZW50Tm9kZTsgfQorCisgICAgdm9pZCBzZXRGb250RGlydHkoYm9vbCBkaXJ0eSkgeyBtX2Zv
bnREaXJ0eSA9IGRpcnR5OyB9CisgICAgYm9vbCBmb250RGlydHkoKSBjb25zdCB7IHJldHVybiBt
X2ZvbnREaXJ0eTsgfQorCisgICAgU3RhdGljQ1NTUnVsZUxpc3QqIGVuc3VyZVJ1bGVMaXN0KCkK
KyAgICB7CisgICAgICAgIGlmICghbV9ydWxlTGlzdCkKKyAgICAgICAgICAgIG1fcnVsZUxpc3Qg
PSBTdGF0aWNDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7CisgICAgICAgIHJldHVybiBtX3J1bGVMaXN0
LmdldCgpOworICAgIH0KKworICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4mIHJ1bGVMaXN0
KCkgeyByZXR1cm4gbV9ydWxlTGlzdDsgfQorCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAg
IHZvaWQgc2V0SGFzUGVuZGluZ1NoYWRlcnMoYm9vbCBoYXNQZW5kaW5nU2hhZGVycykgeyBtX2hh
c1BlbmRpbmdTaGFkZXJzID0gaGFzUGVuZGluZ1NoYWRlcnM7IH0KKyAgICBib29sIGhhc1BlbmRp
bmdTaGFkZXJzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNQZW5kaW5nU2hhZGVyczsgfQorI2VuZGlm
CisKKy8vIFNWRyBoYW5kbGVzIHpvb21pbmcgaW4gYSBkaWZmZXJlbnQgd2F5IGNvbXBhcmVkIHRv
IENTUy4gVGhlIHdob2xlIGRvY3VtZW50IGlzIHNjYWxlZCBpbnN0ZWFkCisvLyBvZiBlYWNoIGlu
ZGl2aWR1YWwgbGVuZ3RoIHZhbHVlIGluIHRoZSByZW5kZXIgc3R5bGUgLyB0cmVlLiBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aCooKQorLy8gbXVsdGlwbGllcyBlYWNoIHJlc29sdmVk
IGxlbmd0aCB3aXRoIHRoZSB6b29tIG11bHRpcGxpZXIgLSBzbyBmb3IgU1ZHIHdlIG5lZWQgdG8g
ZGlzYWJsZSB0aGF0LgorLy8gVGhvdWdoIGFsbCBDU1MgdmFsdWVzIHRoYXQgY2FuIGJlIGFwcGxp
ZWQgdG8gb3V0ZXJtb3N0IDxzdmc+IGVsZW1lbnRzICh3aWR0aC9oZWlnaHQvYm9yZGVyL3BhZGRp
bmcuLi4pCisvLyBuZWVkIHRvIHJlc3BlY3QgdGhlIHNjYWxpbmcuIFJlbmRlckJveCAodGhlIHBh
cmVudCBjbGFzcyBvZiBSZW5kZXJTVkdSb290KSBncmFicyB2YWx1ZXMgbGlrZQorLy8gd2lkdGgv
aGVpZ2h0L2JvcmRlci9wYWRkaW5nLy4uLiBmcm9tIHRoZSBSZW5kZXJTdHlsZSAtPiBmb3IgU1ZH
IHRoZXNlIHZhbHVlcyB3b3VsZCBuZXZlciBzY2FsZSwKKy8vIGlmIHdlJ2QgcGFzcyBhIDEuMCB6
b29tIGZhY3RvciBldmVyeWh3ZXJlLiBTbyB3ZSBvbmx5IHBhc3MgYSB6b29tIGZhY3RvciBvZiAx
LjAgZm9yIHNwZWNpZmljCisvLyBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5PVCBhbGxvd2VkIHRvIHNj
YWxlIHdpdGhpbiBhIHpvb21lZCBTVkcgZG9jdW1lbnQgKGxldHRlci93b3JkLXNwYWNpbmcvZm9u
dC1zaXplKS4KKyAgICBib29sIHVzZVNWR1pvb21SdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZWxl
bWVudCAmJiBtX2VsZW1lbnQtPmlzU1ZHRWxlbWVudCgpOyB9CisKKyAgICBib29sIGhhc1VBQXBw
ZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVUFBcHBlYXJhbmNlOyB9CisgICAgY29uc3Qg
Qm9yZGVyRGF0YSYgYm9yZGVyRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyRGF0YTsgfQor
ICAgIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZERhdGEoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tncm91bmREYXRhOyB9CisgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNrZ3JvdW5kQ29sb3I7IH0KKworICAgIHZvaWQgc2V0SW5jbHVkZUVtcHR5UnVsZXMo
Ym9vbCBpbmNsdWRlRW1wdHlSdWxlcykgeyBtX2luY2x1ZGVFbXB0eVJ1bGVzID0gaW5jbHVkZUVt
cHR5UnVsZXM7IH0KKyAgICB2b2lkIHNldFNhbWVPcmlnaW5Pbmx5KGJvb2wgc2FtZU9yaWdpbk9u
bHkpIHsgbV9zYW1lT3JpZ2luT25seSA9IHNhbWVPcmlnaW5Pbmx5OyB9CisgICAgYm9vbCBpbmNs
dWRlRW1wdHlSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1faW5jbHVkZUVtcHR5UnVsZXM7IH0KKyAg
ICBib29sIHNhbWVPcmlnaW5Pbmx5KCkgY29uc3QgeyByZXR1cm4gbV9zYW1lT3JpZ2luT25seTsg
fQorCitwcml2YXRlOgorICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICBSZW5kZXJTdHlsZSog
bV9zdHlsZTsKKyAgICBTdHlsZWRFbGVtZW50KiBtX3N0eWxlZEVsZW1lbnQ7CisKKyAgICBib29s
IG1faW5jbHVkZUVtcHR5UnVsZXM7IC8vIHNob3VsZCBiZSBtb3ZlZCB0byBNYXRjaFJlcXVlc3Q/
CisgICAgYm9vbCBtX3NhbWVPcmlnaW5Pbmx5OyAvLyBzaG91bGQgYmUgbW92ZWQgdG8gTWF0Y2hS
ZXF1ZXN0PworICAgIFBzZXVkb0lkIG1fcHNldWRvU3R5bGU7IC8vIHNob3VsZCBiZSBtb3ZlZCB0
byBNYXRjaFJlcXVlc3Q/CisgICAgU2VsZWN0b3JDaGVja2VyOjpNb2RlIG1fbW9kZTsKKworICAg
IFJlbmRlclJlZ2lvbiogbV9yZWdpb25Gb3JTdHlsaW5nOworICAgIEVJbnNpZGVMaW5rIG1fZWxl
bWVudExpbmtTdGF0ZTsKKworICAgIENvbnRhaW5lck5vZGUqIG1fcGFyZW50Tm9kZTsKKyAgICBS
ZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZTsKKyAgICBib29sIG1fZGlzdHJpYnV0ZWRUb0luc2Vy
dGlvblBvaW50OyAvLyBvbmx5IHN0eWxlRm9yRWxlbWVudCBuZWVkcy4KKyAgICBSZW5kZXJTdHls
ZSogbV9yb290RWxlbWVudFN0eWxlOyAvLyBhcHBseVByb3BlcnR5IG5lZWRzLgorCisgICAgYm9v
bCBtX2NhblVzZUZhc3RSZWplY3Q7IC8vIGNvbGxlY3RNYXRjaGVkUnVsZXNGb3JMaXN0IHVzZXMu
CisgICAgYm9vbCBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlczsgLy8gc2libGluZyBzdHls
ZSBzaGFyaW5nIG5lZWRzLgorCisgICAgLy8gQSBidWZmZXIgdXNlZCB0byBob2xkIHRoZSBzZXQg
b2YgbWF0Y2hlZCBydWxlcyBmb3IgYW4gZWxlbWVudCwKKyAgICAvLyBhbmQgYSB0ZW1wb3Jhcnkg
YnVmZmVyIHVzZWQgZm9yIG1lcmdlIHNvcnRpbmcuCisgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRh
KiwgMzI+IG1fbWF0Y2hlZFJ1bGVzOworICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4gbV9y
dWxlTGlzdDsKKworICAgIC8vIGFwcGx5UHJvcGVydHkgbmVlZHMuCisgICAgYm9vbCBtX2FwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsKKyAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRl
ZExpbmtTdHlsZTsKKworICAgIC8vIFBlbmRpbmdJbWFnZVByb3BlcnRpZXMgYXJlIHBlci1yZXNv
bHZpbmcgbWVtYmVyLgorICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwIG1fcGVuZGluZ0ltYWdl
UHJvcGVydGllczsKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgYm9vbCBtX2hhc1BlbmRp
bmdTaGFkZXJzOworI2VuZGlmCisjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZH
KQorICAgIFBlbmRpbmdTVkdEb2N1bWVudE1hcCBtX3BlbmRpbmdTVkdEb2N1bWVudHM7CisjZW5k
aWYKKyAgICBDU1NWYWx1ZSogbV9saW5lSGVpZ2h0VmFsdWU7IC8vIGNhY2hlOyB1cGRhdGVkIGlu
IGFwcGx5UHJvcGVydHkuCisgICAgYm9vbCBtX2ZvbnREaXJ0eTsKKworICAgIC8vIGJvcmRlci1h
bmQtYmFja2dyb3VuZCBjYWNoZSwgaXQgaXMgYmV0dGVyIHRvIG1vdmUgdG8gYW5vdGhlciBwbGFj
ZT8KKyAgICBib29sIG1faGFzVUFBcHBlYXJhbmNlOworICAgIEJvcmRlckRhdGEgbV9ib3JkZXJE
YXRhOworICAgIEZpbGxMYXllciBtX2JhY2tncm91bmREYXRhOworICAgIENvbG9yIG1fYmFja2dy
b3VuZENvbG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3R5
bGVSZXNvbHZlU3RhdGVfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXgg
ZDhkNjljMzJmYzUxY2I2ZjRhYmU4OGYwMTJkZmMyYTk1ZjA2ZDdkOS4uYmI4YTc1MjY4NGVkMzhj
MWI2OGNiMmNkOGRjZTA1YTMxMDMxM2Q0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcApAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGlu
Z3MuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTUmVmbGVj
dFZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKICNpbmNsdWRlICJDU1NTZWxlY3Rv
ci5oIgogI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgogI2luY2x1ZGUgIkNTU1N0eWxlUnVs
ZS5oIgpAQCAtMTIwLDYgKzExOSw3IEBACiAjaW5jbHVkZSAiU3R5bGVSdWxlSW1wb3J0LmgiCiAj
aW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3Qu
aCIKKyNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1
ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uLmgiCkBAIC0xOTgsMTQgKzE5OCwxNCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwogCiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlmIChpc0luaGVy
aXQpIHsgXAotICAgIG1fc3R5bGUtPnNldCMjUHJvcChtX3BhcmVudFN0eWxlLT5wcm9wKCkpOyBc
CisgICAgc3RhdGUuc3R5bGUoKS0+c2V0IyNQcm9wKHN0YXRlLnBhcmVudFN0eWxlKCktPnByb3Ao
KSk7ICAgICAgXAogICAgIHJldHVybjsgXAogfQogCiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUX0FO
RF9JTklUSUFMKHByb3AsIFByb3ApIFwKIEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlm
IChpc0luaXRpYWwpIHsgXAotICAgIG1fc3R5bGUtPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5p
dGlhbCMjUHJvcCgpKTsgXAorICAgIHN0YXRlLnN0eWxlKCktPnNldCMjUHJvcChSZW5kZXJTdHls
ZTo6aW5pdGlhbCMjUHJvcCgpKTsgICAgIFwKICAgICByZXR1cm47IFwKIH0KIApAQCAtMjY2LDM1
ICsyNjYsMTUgQEAgc3RhdGljIFN0eWxlUHJvcGVydHlTZXQqIHJpZ2h0VG9MZWZ0RGVjbGFyYXRp
b24oKQogCiAKIFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQqIGRvY3VtZW50
LCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICA6IG1faGFzVUFBcHBlYXJhbmNl
KGZhbHNlKQotICAgICwgbV9iYWNrZ3JvdW5kRGF0YShCYWNrZ3JvdW5kRmlsbExheWVyKQotICAg
ICwgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VMYXN0U3dlZXAoMCkKKyAg
ICA6IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwKDApCiAg
ICAgLCBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyKHRoaXMsICZTdHlsZVJlc29s
dmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpCiAgICAgLCBtX2RvY3VtZW50KGRvY3Vt
ZW50KQotICAgICwgbV9zZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQpCi0gICAgLCBtX3BhcmVudFN0
eWxlKDApCi0gICAgLCBtX3Jvb3RFbGVtZW50U3R5bGUoMCkKLSAgICAsIG1fZWxlbWVudCgwKQot
ICAgICwgbV9zdHlsZWRFbGVtZW50KDApCi0gICAgLCBtX3JlZ2lvbkZvclN0eWxpbmcoMCkKLSAg
ICAsIG1fZWxlbWVudExpbmtTdGF0ZShOb3RJbnNpZGVMaW5rKQotICAgICwgbV9wYXJlbnROb2Rl
KDApCi0gICAgLCBtX2xpbmVIZWlnaHRWYWx1ZSgwKQotICAgICwgbV9mb250RGlydHkoZmFsc2Up
CiAgICAgLCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyhtYXRjaEF1dGhvckFuZFVzZXJTdHls
ZXMpCi0gICAgLCBtX3NhbWVPcmlnaW5Pbmx5KGZhbHNlKQotICAgICwgbV9kaXN0cmlidXRlZFRv
SW5zZXJ0aW9uUG9pbnQoZmFsc2UpCiAgICAgLCBtX2ZvbnRTZWxlY3RvcihDU1NGb250U2VsZWN0
b3I6OmNyZWF0ZShkb2N1bWVudCkpCiAjaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikK
ICAgICAsIG1fdmlld3BvcnRTdHlsZVJlc29sdmVyKFZpZXdwb3J0U3R5bGVSZXNvbHZlcjo6Y3Jl
YXRlKGRvY3VtZW50KSkKICNlbmRpZgotICAgICwgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGUodHJ1ZSkKLSAgICAsIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSkK
ICAgICAsIG1fc3R5bGVCdWlsZGVyKFN0eWxlQnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVyKCkp
Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgICwgbV9oYXNQZW5kaW5nU2hhZGVycyhmYWxz
ZSkKLSNlbmRpZgotICAgICwgbV9zdHlsZU1hcCh0aGlzKQogewogICAgIEVsZW1lbnQqIHJvb3Qg
PSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CiAKQEAgLTY0OCwxMDAgKzYyOCwxMDIgQEAg
aW5saW5lIGJvb2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKIAog
Ym9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6bV9tYXRjaGluZ1VBUnVsZXMgPSBmYWxzZTsKIAot
dm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBNYXRjaFJlcXVl
c3QmIG1hdGNoUmVxdWVzdCwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4
KQordm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiBydWxl
U2V0LCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYg
bGFzdFJ1bGVJbmRleCwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCiB7Ci0gICAgQVNTRVJU
KG1hdGNoUmVxdWVzdC5ydWxlU2V0KTsKLSAgICBBU1NFUlQobV9lbGVtZW50KTsKKyAgICBBU1NF
UlQocnVsZVNldCk7CisgICAgQVNTRVJUKHN0YXRlLmVsZW1lbnQoKSk7CiAKLSAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHBzZXVkb0lkID0gbV9lbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpOworICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50KCk7CisgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBwc2V1ZG9JZCA9IGVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCk7CiAgICAgaWYgKCFwc2V1
ZG9JZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgQVNTRVJUKG1fc3R5bGVkRWxlbWVudCk7Ci0gICAg
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+c2hh
ZG93UHNldWRvRWxlbWVudFJ1bGVzKHBzZXVkb0lkLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgZmly
c3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOworICAgICAgICBBU1NFUlQoZWxlbWVudC0+aXNT
dHlsZWRFbGVtZW50KCkpOworICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVs
ZVNldC0+c2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKHBzZXVkb0lkLmltcGwoKSksIHN0YXRlLCBm
aXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgc2NvcGUpOwogICAgIH0KIAogI2lmIEVOQUJM
RShWSURFT19UUkFDSykKLSAgICBpZiAobV9lbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiB0
b1dlYlZUVEVsZW1lbnQobV9lbGVtZW50KS0+d2ViVlRUTm9kZVR5cGUoKSkKLSAgICAgICAgY29s
bGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5jdWVQc2V1ZG9S
dWxlcygpLCBtYXRjaFJlcXVlc3QsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKKyAg
ICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYgdG9XZWJWVFRFbGVtZW50KGVsZW1l
bnQpLT53ZWJWVFROb2RlVHlwZSgpKQorICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxp
c3QocnVsZVNldC0+Y3VlUHNldWRvUnVsZXMoKSwgc3RhdGUsIGZpcnN0UnVsZUluZGV4LCBsYXN0
UnVsZUluZGV4LCBzY29wZSk7CiAjZW5kaWYKICAgICAvLyBDaGVjayB3aGV0aGVyIG90aGVyIHR5
cGVzIG9mIHJ1bGVzIGFyZSBhcHBsaWNhYmxlIGluIHRoZSBjdXJyZW50IHRyZWUgc2NvcGUuIENy
aXRlcmlhIGZvciB0aGlzOgogICAgIC8vIGEpIGl0J3MgYSBVQSBydWxlCiAgICAgLy8gYikgdGhl
IHRyZWUgc2NvcGUgYWxsb3dzIGF1dGhvciBydWxlcwogICAgIC8vIGMpIHRoZSBydWxlcyBjb21l
cyBmcm9tIGEgc2NvcGVkIHN0eWxlIHNoZWV0IHdpdGhpbiB0aGUgc2FtZSB0cmVlIHNjb3BlCi0g
ICAgVHJlZVNjb3BlKiB0cmVlU2NvcGUgPSBtX2VsZW1lbnQtPnRyZWVTY29wZSgpOworICAgIFRy
ZWVTY29wZSogdHJlZVNjb3BlID0gZWxlbWVudC0+dHJlZVNjb3BlKCk7CiAgICAgaWYgKCFNYXRj
aGluZ1VBUnVsZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQogICAgICAgICAmJiAhdHJlZVNj
b3BlLT5hcHBseUF1dGhvclN0eWxlcygpCi0gICAgICAgICYmICghbWF0Y2hSZXF1ZXN0LnNjb3Bl
IHx8IG1hdGNoUmVxdWVzdC5zY29wZS0+dHJlZVNjb3BlKCkgIT0gdHJlZVNjb3BlKSkKKyAgICAg
ICAgJiYgKCFzY29wZSB8fCBzY29wZS0+dHJlZVNjb3BlKCkgIT0gdHJlZVNjb3BlKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gV2UgbmVlZCB0byBjb2xsZWN0IHRoZSBydWxlcyBmb3IgaWQs
IGNsYXNzLCB0YWcsIGFuZCBldmVyeXRoaW5nIGVsc2UgaW50byBhIGJ1ZmZlciBhbmQKICAgICAv
LyB0aGVuIHNvcnQgdGhlIGJ1ZmZlci4KLSAgICBpZiAobV9lbGVtZW50LT5oYXNJRCgpKQotICAg
ICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmlk
UnVsZXMobV9lbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSksIG1hdGNoUmVx
dWVzdCwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwotICAgIGlmIChtX3N0eWxlZEVs
ZW1lbnQgJiYgbV9zdHlsZWRFbGVtZW50LT5oYXNDbGFzcygpKSB7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9zdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKCkuc2l6ZSgpOyArK2kp
Ci0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1
bGVTZXQtPmNsYXNzUnVsZXMobV9zdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKClbaV0uaW1wbCgp
KSwgbWF0Y2hSZXF1ZXN0LCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7CisgICAgaWYg
KGVsZW1lbnQtPmhhc0lEKCkpCisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChy
dWxlU2V0LT5pZFJ1bGVzKGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSwg
c3RhdGUsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBzY29wZSk7CisgICAgaWYgKGVs
ZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpICYmIHRvU3R5bGVkRWxlbWVudChlbGVtZW50KS0+aGFz
Q2xhc3MoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvU3R5bGVkRWxlbWVu
dChlbGVtZW50KS0+Y2xhc3NOYW1lcygpLnNpemUoKTsgKytpKQorICAgICAgICAgICAgY29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVTZXQtPmNsYXNzUnVsZXModG9TdHlsZWRFbGVtZW50
KGVsZW1lbnQpLT5jbGFzc05hbWVzKClbaV0uaW1wbCgpKSwgc3RhdGUsIGZpcnN0UnVsZUluZGV4
LCBsYXN0UnVsZUluZGV4LCBzY29wZSk7CiAgICAgfQogCi0gICAgaWYgKG1fZWxlbWVudC0+aXNM
aW5rKCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3Qu
cnVsZVNldC0+bGlua1BzZXVkb0NsYXNzUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBmaXJzdFJ1bGVJ
bmRleCwgbGFzdFJ1bGVJbmRleCk7Ci0gICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1hdGNoZXNG
b2N1c1BzZXVkb0NsYXNzKG1fZWxlbWVudCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCksIG1h
dGNoUmVxdWVzdCwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwotICAgIGNvbGxlY3RN
YXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+dGFnUnVsZXMobV9lbGVt
ZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIGZpcnN0UnVsZUluZGV4LCBs
YXN0UnVsZUluZGV4KTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1
ZXN0LnJ1bGVTZXQtPnVuaXZlcnNhbFJ1bGVzKCksIG1hdGNoUmVxdWVzdCwgZmlyc3RSdWxlSW5k
ZXgsIGxhc3RSdWxlSW5kZXgpOworICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSkKKyAgICAgICAg
Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVTZXQtPmxpbmtQc2V1ZG9DbGFzc1J1bGVz
KCksIHN0YXRlLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgc2NvcGUpOworICAgIGlm
IChtYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhlbGVtZW50KSkKKyAgICAgICAgY29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JMaXN0KHJ1bGVTZXQtPmZvY3VzUHNldWRvQ2xhc3NSdWxlcygpLCBzdGF0ZSwg
Zmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIHNjb3BlKTsKKyAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0Zvckxpc3QocnVsZVNldC0+dGFnUnVsZXMoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1w
bCgpKSwgc3RhdGUsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBzY29wZSk7CisgICAg
Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVTZXQtPnVuaXZlcnNhbFJ1bGVzKCksIHN0
YXRlLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgc2NvcGUpOwogfQogCi12b2lkIFN0
eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKGNvbnN0IE1hdGNoUmVx
dWVzdCYgbWF0Y2hSZXF1ZXN0LCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5k
ZXgpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1
bGVTZXQqIHJ1bGVTZXQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgaW50JiBmaXJzdFJ1bGVJ
bmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKIHsK
LSAgICBpZiAoIW1fcmVnaW9uRm9yU3R5bGluZykKKyAgICBpZiAoIXN0YXRlLnJlZ2lvbkZvclN0
eWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdW5zaWduZWQgc2l6ZSA9IG1hdGNoUmVx
dWVzdC5ydWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKKyAgICBF
bGVtZW50KiByZWdpb25TdHlsaW5nRWxlbWVudCA9IHRvRWxlbWVudChzdGF0ZS5yZWdpb25Gb3JT
dHlsaW5nKCktPm5vZGUoKSk7CisgICAgdW5zaWduZWQgc2l6ZSA9IHJ1bGVTZXQtPm1fcmVnaW9u
U2VsZWN0b3JzQW5kUnVsZVNldHMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yID0gbWF0
Y2hSZXF1ZXN0LnJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkuc2Vs
ZWN0b3I7Ci0gICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKHJlZ2lvblNlbGVjdG9yLCBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obV9yZWdpb25Gb3JTdHlsaW5nLT5ub2RlKCkpKSkgewotICAg
ICAgICAgICAgUnVsZVNldCogcmVnaW9uUnVsZXMgPSBtYXRjaFJlcXVlc3QucnVsZVNldC0+bV9y
ZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5ydWxlU2V0LmdldCgpOworICAgICAgICBD
U1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IgPSBydWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0Fu
ZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9yOworICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3Rv
cihyZWdpb25TZWxlY3RvciwgcmVnaW9uU3R5bGluZ0VsZW1lbnQpKSB7CisgICAgICAgICAgICBS
dWxlU2V0KiByZWdpb25SdWxlcyA9IHJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNl
dHMuYXQoaSkucnVsZVNldC5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVChyZWdpb25SdWxlcyk7
Ci0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QocmVnaW9uUnVs
ZXMsIG1hdGNoUmVxdWVzdC5pbmNsdWRlRW1wdHlSdWxlcywgbWF0Y2hSZXF1ZXN0LnNjb3BlKSwg
Zmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOworICAgICAgICAgICAgY29sbGVjdE1hdGNo
aW5nUnVsZXMocmVnaW9uUnVsZXMsIHN0YXRlLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRl
eCwgc2NvcGUpOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnNv
cnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQordm9pZCBTdHls
ZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoU3R5bGVSZXNvbHZlU3RhdGUm
IHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0KQogewotICAgIGlmIChtX21hdGNoZWRSdWxlcy5p
c0VtcHR5KCkpCisgICAgaWYgKHN0YXRlLm1hdGNoZWRSdWxlcygpLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgc29ydE1hdGNoZWRSdWxlcygpOworICAgIHNvcnRNYXRjaGVkUnVs
ZXMoc3RhdGUubWF0Y2hlZFJ1bGVzKCkpOwogCi0gICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1v
ZGUoKSA9PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcykgewotICAgICAgICBpZiAo
IW1fcnVsZUxpc3QpCi0gICAgICAgICAgICBtX3J1bGVMaXN0ID0gU3RhdGljQ1NTUnVsZUxpc3Q6
OmNyZWF0ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVs
ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX3J1bGVMaXN0LT5ydWxlcygpLmFwcGVuZCht
X21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5jcmVhdGVDU1NPTVdyYXBwZXIoKSk7CisgICAgaWYg
KHN0YXRlLm1vZGUoKSA9PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcykgeworICAg
ICAgICAvLyBTaG91bGQgbW92ZSBydWxlTGlzdCBmcm9tIHN0YXRlIHRvIHJlc3VsdD8KKyAgICAg
ICAgU3RhdGljQ1NTUnVsZUxpc3QqIHJ1bGVMaXN0ID0gc3RhdGUuZW5zdXJlUnVsZUxpc3QoKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLm1hdGNoZWRSdWxlcygpLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgcnVsZUxpc3QtPnJ1bGVzKCkuYXBwZW5kKHN0YXRlLm1h
dGNoZWRSdWxlQXQoaSktPnJ1bGUoKS0+Y3JlYXRlQ1NTT01XcmFwcGVyKCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgLy8gTm93IHRyYW5zZmVyIHRoZSBzZXQgb2YgbWF0Y2hlZCBy
dWxlcyBvdmVyIHRvIG91ciBsaXN0IG9mIGRlY2xhcmF0aW9ucy4KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKG1f
c3R5bGUgJiYgbV9tYXRjaGVkUnVsZXNbaV0tPmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxl
Y3RvcigpKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0VW5pcXVlKCk7Ci0gICAgICAgIGFkZE1h
dGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgbV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+cHJvcGVy
dGllcygpLCBtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLCBtX21hdGNoZWRSdWxlc1tpXS0+bGlu
a01hdGNoVHlwZSgpLCBtX21hdGNoZWRSdWxlc1tpXS0+cHJvcGVydHlXaGl0ZWxpc3RUeXBlKCkp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5tYXRjaGVkUnVsZXMoKS5zaXpl
KCk7IGkrKykgeworICAgICAgICBpZiAoc3RhdGUuc3R5bGUoKSAmJiBzdGF0ZS5tYXRjaGVkUnVs
ZUF0KGkpLT5jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKKyAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldFVuaXF1ZSgpOworICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGll
cyhyZXN1bHQsIHN0YXRlLm1hdGNoZWRSdWxlQXQoaSktPnJ1bGUoKS0+cHJvcGVydGllcygpLCBz
dGF0ZS5tYXRjaGVkUnVsZUF0KGkpLT5ydWxlKCksIHN0YXRlLm1hdGNoZWRSdWxlQXQoaSktPmxp
bmtNYXRjaFR5cGUoKSwgc3RhdGUubWF0Y2hlZFJ1bGVBdChpKS0+cHJvcGVydHlXaGl0ZWxpc3RU
eXBlKCkpOwogICAgIH0KIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhv
clJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit2b2lk
IFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoU3R5bGVSZXNvbHZlU3RhdGUm
IHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0KQogewogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQp
IHx8IEVOQUJMRShTSEFET1dfRE9NKQogICAgIGlmICghbV9zY29wZVJlc29sdmVyKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBNYXRjaCBzY29wZWQgYXV0aG9yIHJ1bGVzIGJ5IHRyYXZlcnNp
bmcgdGhlIHNjb3BlZCBlbGVtZW50IHN0YWNrIChyZWJ1aWxkIGl0IGlmIGl0IGdvdCBpbmNvbnNp
c3RlbnQpLgotICAgIGlmIChtX3Njb3BlUmVzb2x2ZXItPmhhc1Njb3BlZFN0eWxlcygpICYmIG1f
c2NvcGVSZXNvbHZlci0+ZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShtX2VsZW1lbnQpKSB7Ci0gICAg
ICAgIGJvb2wgYXBwbHlBdXRob3JTdHlsZXMgPSBtX2VsZW1lbnQtPnRyZWVTY29wZSgpLT5hcHBs
eUF1dGhvclN0eWxlcygpOworICAgIGlmIChtX3Njb3BlUmVzb2x2ZXItPmhhc1Njb3BlZFN0eWxl
cygpICYmIG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShzdGF0ZS5lbGVt
ZW50KCkpKSB7CisgICAgICAgIGJvb2wgYXBwbHlBdXRob3JTdHlsZXMgPSBzdGF0ZS5lbGVtZW50
KCktPnRyZWVTY29wZSgpLT5hcHBseUF1dGhvclN0eWxlcygpOwogICAgICAgICBib29sIGRvY3Vt
ZW50U2NvcGUgPSB0cnVlOwogICAgICAgICB1bnNpZ25lZCBzY29wZVNpemUgPSBtX3Njb3BlUmVz
b2x2ZXItPnN0YWNrU2l6ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2Nv
cGVTaXplOyArK2kpIHsKLSAgICAgICAgICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAg
ICAgICAgICBzdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOwogICAgICAgICAgICAgcmVzdWx0
LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkg
LSAxOwogCiAgICAgICAgICAgICBjb25zdCBTdHlsZVNjb3BlUmVzb2x2ZXI6OlN0YWNrRnJhbWUm
IGZyYW1lID0gbV9zY29wZVJlc29sdmVyLT5zdGFja0ZyYW1lQXQoaSk7CkBAIC03NTQsMTMxICs3
MzYsMTI4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRj
aFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0CiAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBNYXRjaFJlcXVlc3QgbWF0Y2hS
ZXF1ZXN0KGZyYW1lLm1fcnVsZVNldCwgaW5jbHVkZUVtcHR5UnVsZXMsIGZyYW1lLm1fc2NvcGUp
OwotICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0Y2hSZXF1ZXN0LCByZXN1bHQu
cmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSk7Ci0g
ICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihtYXRjaFJlcXVlc3QsIHJl
c3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxl
KTsKLSAgICAgICAgICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworICAg
ICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoZnJhbWUubV9ydWxlU2V0LCBzdGF0ZSwgcmVz
dWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUs
IGZyYW1lLm1fc2NvcGUpOworICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdp
b24oZnJhbWUubV9ydWxlU2V0LCBzdGF0ZSwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUs
IHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGZyYW1lLm1fc2NvcGUpOworICAgICAgICAg
ICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHN0YXRlLCByZXN1bHQpOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgbWF0Y2hIb3N0UnVsZXMocmVzdWx0LCBpbmNsdWRlRW1wdHlSdWxlcyk7
CisgICAgbWF0Y2hIb3N0UnVsZXMoc3RhdGUsIHJlc3VsdCk7CiAjZWxzZQogICAgIFVOVVNFRF9Q
QVJBTShyZXN1bHQpOwogICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlRW1wdHlSdWxlcyk7CiAjZW5k
aWYKIH0KIAotaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRl
TWF0Y2hlc0hvc3RSdWxlcygpCitpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJp
bmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAjaWYgRU5B
QkxFKFNIQURPV19ET00pCi0gICAgcmV0dXJuIG1fc2NvcGVSZXNvbHZlciAmJiBtX3Njb3BlUmVz
b2x2ZXItPnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMobV9lbGVtZW50KTsK
KyAgICByZXR1cm4gbV9zY29wZVJlc29sdmVyICYmIG1fc2NvcGVSZXNvbHZlci0+c3R5bGVTaGFy
aW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhlbGVtZW50KTsKICNlbHNlCiAgICAgcmV0dXJu
IGZhbHNlOwogI2VuZGlmCiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMo
TWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3ZvaWQgU3R5bGVS
ZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBNYXRjaFJl
c3VsdCYgcmVzdWx0KQogewogI2lmIEVOQUJMRShTSEFET1dfRE9NKQogICAgIEFTU0VSVChtX3Nj
b3BlUmVzb2x2ZXIpOwogCi0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICBzdGF0ZS5t
YXRjaGVkUnVsZXMoKS5jbGVhcigpOwogICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUg
PSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKIAogICAgIFZlY3RvcjxSdWxl
U2V0Kj4gbWF0Y2hlZFJ1bGVzOwotICAgIG1fc2NvcGVSZXNvbHZlci0+bWF0Y2hIb3N0UnVsZXMo
bV9lbGVtZW50LCBtYXRjaGVkUnVsZXMpOworICAgIG1fc2NvcGVSZXNvbHZlci0+bWF0Y2hIb3N0
UnVsZXMoc3RhdGUuZWxlbWVudCgpLCBtYXRjaGVkUnVsZXMpOwogICAgIGlmIChtYXRjaGVkUnVs
ZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
YXRjaGVkUnVsZXMuc2l6ZSgpOyBpID4gMDsgLS1pKQotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdS
dWxlcyhNYXRjaFJlcXVlc3QobWF0Y2hlZFJ1bGVzLmF0KGktMSksIGluY2x1ZGVFbXB0eVJ1bGVz
LCBtX2VsZW1lbnQpLCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdl
cy5sYXN0QXV0aG9yUnVsZSk7Ci0gICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3Vs
dCk7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1hdGNoZWRSdWxlcy5hdChpLTEpLCBz
dGF0ZSwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1
dGhvclJ1bGUsIHN0YXRlLmVsZW1lbnQoKSk7CisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1
bGVzKHN0YXRlLCByZXN1bHQpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKICAg
ICBVTlVTRURfUEFSQU0oaW5jbHVkZUVtcHR5UnVsZXMpOwogI2VuZGlmCiB9CiAKLXZvaWQgU3R5
bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGlu
Y2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKFN0
eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCkKIHsKLSAgICBtX21h
dGNoZWRSdWxlcy5jbGVhcigpOworICAgIHN0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAg
ICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGll
cy5zaXplKCkgLSAxOwogCi0gICAgaWYgKCFtX2VsZW1lbnQpCisgICAgaWYgKCFzdGF0ZS5lbGVt
ZW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE1hdGNoIGdsb2JhbCBhdXRob3IgcnVs
ZXMuCi0gICAgTWF0Y2hSZXF1ZXN0IG1hdGNoUmVxdWVzdChtX2F1dGhvclN0eWxlLmdldCgpLCBp
bmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0Y2hSZXF1ZXN0
LCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9y
UnVsZSk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obWF0Y2hSZXF1ZXN0LCBy
ZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVs
ZSk7Ci0gICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7CisgICAgY29sbGVj
dE1hdGNoaW5nUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgc3RhdGUsIHJlc3VsdC5yYW5nZXMu
Zmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlKTsKKyAgICBjb2xs
ZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihtX2F1dGhvclN0eWxlLmdldCgpLCBzdGF0ZSwgcmVz
dWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUp
OworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKIAotICAg
IG1hdGNoU2NvcGVkQXV0aG9yUnVsZXMocmVzdWx0LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAg
bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKIH0KIAotdm9pZCBTdHlsZVJl
c29sdmVyOjptYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVF
bXB0eVJ1bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVzZXJSdWxlcyhTdHlsZVJlc29s
dmVTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQpCiB7CiAgICAgaWYgKCFtX3VzZXJT
dHlsZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7
CisgICAgc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKIAogICAgIHJlc3VsdC5yYW5nZXMu
bGFzdFVzZXJSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7Ci0gICAg
TWF0Y2hSZXF1ZXN0IG1hdGNoUmVxdWVzdChtX3VzZXJTdHlsZS5nZXQoKSwgaW5jbHVkZUVtcHR5
UnVsZXMpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1hdGNoUmVxdWVzdCwgcmVzdWx0LnJh
bmdlcy5maXJzdFVzZXJSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSk7Ci0gICAgY29s
bGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obWF0Y2hSZXF1ZXN0LCByZXN1bHQucmFuZ2VzLmZp
cnN0VXNlclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlKTsKKyAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlcyhtX3VzZXJTdHlsZS5nZXQoKSwgc3RhdGUsIHJlc3VsdC5yYW5nZXMuZmlyc3RV
c2VyUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUpOworICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzRm9yUmVnaW9uKG1fdXNlclN0eWxlLmdldCgpLCBzdGF0ZSwgcmVzdWx0LnJhbmdlcy5m
aXJzdFVzZXJSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSk7CiAKLSAgICBzb3J0QW5k
VHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVk
UnVsZXMoc3RhdGUsIHJlc3VsdCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1
bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIFJ1bGVTZXQqIHJ1bGVzKQordm9pZCBTdHlsZVJlc29s
dmVyOjptYXRjaFVBUnVsZXMoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYg
cmVzdWx0LCBSdWxlU2V0KiBydWxlcykKIHsKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwor
ICAgIHN0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAgICAgCiAgICAgcmVzdWx0LnJhbmdl
cy5sYXN0VUFSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7Ci0gICAg
Y29sbGVjdE1hdGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KHJ1bGVzKSwgcmVzdWx0LnJhbmdlcy5m
aXJzdFVBUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlKTsKKyAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlcyhydWxlcywgc3RhdGUsIHJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIHJlc3VsdC5y
YW5nZXMubGFzdFVBUnVsZSk7CiAKLSAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMocmVz
dWx0KTsKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoc3RhdGUsIHJlc3VsdCk7CiB9
CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0
IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVz
dCwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4KQorLy8gc2NvcGUuLi5v
cnoKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0
IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIGludCYg
Zmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGUpCiB7CiAgICAgaWYgKCFydWxlcykKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSW4g
c29tZSBjYXNlcyB3ZSBtYXkgZW5kIHVwIGxvb2tpbmcgdXAgc3R5bGUgZm9yIHJhbmRvbSBlbGVt
ZW50cyBpbiB0aGUgbWlkZGxlIG9mIGEgcmVjdXJzaXZlIHRyZWUgcmVzb2x2ZS4KICAgICAvLyBB
bmNlc3RvciBpZGVudGlmaWVyIGZpbHRlciB3b24ndCBiZSB1cC10by1kYXRlIGluIHRoYXQgY2Fz
ZSBhbmQgd2UgY2FuJ3QgdXNlIHRoZSBmYXN0IHBhdGguCi0gICAgYm9vbCBjYW5Vc2VGYXN0UmVq
ZWN0ID0gbV9zZWxlY3RvckZpbHRlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChtX3BhcmVudE5v
ZGUpOwotCiAgICAgdW5zaWduZWQgc2l6ZSA9IHJ1bGVzLT5zaXplKCk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBjb25zdCBSdWxlRGF0YSYgcnVs
ZURhdGEgPSBydWxlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChjYW5Vc2VGYXN0UmVqZWN0ICYmIG1f
c2VsZWN0b3JGaWx0ZXIuZmFzdFJlamVjdFNlbGVjdG9yPFJ1bGVEYXRhOjptYXhpbXVtSWRlbnRp
ZmllckNvdW50PihydWxlRGF0YS5kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCkp
KQorICAgICAgICBpZiAoc3RhdGUuY2FuVXNlRmFzdFJlamVjdCgpICYmIG1fc2VsZWN0b3JGaWx0
ZXIuZmFzdFJlamVjdFNlbGVjdG9yPFJ1bGVEYXRhOjptYXhpbXVtSWRlbnRpZmllckNvdW50Pihy
dWxlRGF0YS5kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCkpKQogICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgU3R5bGVSdWxlKiBydWxlID0gcnVsZURhdGEucnVsZSgp
OwogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTWF0Y2hSdWxlKGRvY3VtZW50KCksIHJ1bGUsIHRoaXMp
OwotICAgICAgICBpZiAocnVsZU1hdGNoZXMocnVsZURhdGEsIG1hdGNoUmVxdWVzdC5zY29wZSkp
IHsKKyAgICAgICAgUHNldWRvSWQgZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAgICAgICBp
ZiAocnVsZU1hdGNoZXMoc3RhdGUsIHJ1bGVEYXRhLCBzY29wZSwgZHluYW1pY1BzZXVkbykpIHsK
ICAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBwcm9wZXJ0aWVzIHRvIGFwcGx5LCB0
aGVuIGlnbm9yZSBpdCBpbiB0aGUgbm9uLWRlYnVnIG1vZGUuCiAgICAgICAgICAgICBjb25zdCBT
dHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzID0gcnVsZS0+cHJvcGVydGllcygpOwotICAgICAg
ICAgICAgaWYgKCFwcm9wZXJ0aWVzIHx8IChwcm9wZXJ0aWVzLT5pc0VtcHR5KCkgJiYgIW1hdGNo
UmVxdWVzdC5pbmNsdWRlRW1wdHlSdWxlcykpIHsKKyAgICAgICAgICAgIGlmICghcHJvcGVydGll
cyB8fCAocHJvcGVydGllcy0+aXNFbXB0eSgpICYmICFzdGF0ZS5pbmNsdWRlRW1wdHlSdWxlcygp
KSkgewogICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hS
dWxlKGNvb2tpZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgLy8gRklYTUU6IEV4cG9zaW5nIHRoZSBub24tc3RhbmRhcmQgZ2V0
TWF0Y2hlZENTU1J1bGVzIEFQSSB0byB3ZWIgaXMgdGhlIG9ubHkgcmVhc29uIHRoaXMgaXMgbmVl
ZGVkLgotICAgICAgICAgICAgaWYgKG1fc2FtZU9yaWdpbk9ubHkgJiYgIXJ1bGVEYXRhLmhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4oKSkgeworICAgICAgICAgICAgaWYgKHN0YXRlLnNhbWVPcmln
aW5Pbmx5KCkgJiYgIXJ1bGVEYXRhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSkgewogICAg
ICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tp
ZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgLy8gSWYgd2UncmUgbWF0Y2hpbmcgbm9ybWFsIHJ1bGVzLCBzZXQgYSBwc2V1ZG8g
Yml0IGlmCiAgICAgICAgICAgICAvLyB3ZSByZWFsbHkganVzdCBtYXRjaGVkIGEgcHNldWRvLWVs
ZW1lbnQuCi0gICAgICAgICAgICBpZiAobV9keW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIG1f
cHNldWRvU3R5bGUgPT0gTk9QU0VVRE8pIHsKLSAgICAgICAgICAgICAgICBpZiAobV9zZWxlY3Rv
ckNoZWNrZXIubW9kZSgpID09IFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7Cisg
ICAgICAgICAgICBpZiAoZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiBzdGF0ZS5wc2V1ZG9T
dHlsZSgpID09IE5PUFNFVURPKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRlLm1vZGUoKSA9
PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcykgewogICAgICAgICAgICAgICAgICAg
ICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGlmIChtX2R5bmFtaWNQc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkK
LSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0SGFzUHNldWRvU3R5bGUobV9keW5hbWlj
UHNldWRvKTsKKyAgICAgICAgICAgICAgICBpZiAoZHluYW1pY1BzZXVkbyA8IEZJUlNUX0lOVEVS
TkFMX1BTRVVET0lEKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXNQ
c2V1ZG9TdHlsZShkeW5hbWljUHNldWRvKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgLy8gVXBkYXRlIG91ciBmaXJzdC9sYXN0IHJ1bGUgaW5kaWNlcyBpbiB0aGUgbWF0
Y2hlZCBydWxlcyBhcnJheS4KICAgICAgICAgICAgICAgICArK2xhc3RSdWxlSW5kZXg7CkBAIC04
ODYsNyArODY1LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zv
ckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGMKICAgICAgICAgICAgICAgICAg
ICAgZmlyc3RSdWxlSW5kZXggPSBsYXN0UnVsZUluZGV4OwogCiAgICAgICAgICAgICAgICAgLy8g
QWRkIHRoaXMgcnVsZSB0byBvdXIgbGlzdCBvZiBtYXRjaGVkIHJ1bGVzLgotICAgICAgICAgICAg
ICAgIGFkZE1hdGNoZWRSdWxlKCZydWxlRGF0YSk7CisgICAgICAgICAgICAgICAgYWRkTWF0Y2hl
ZFJ1bGUoc3RhdGUsICZydWxlRGF0YSk7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCB0cnVlKTsKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTkwMiwzMSArODgxLDMzIEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBjb21wYXJlUnVsZXMoY29uc3QgUnVsZURhdGEqIHIxLCBjb25zdCBSdWxlRGF0YSog
cjIpCiAgICAgcmV0dXJuIChzcGVjaWZpY2l0eTEgPT0gc3BlY2lmaWNpdHkyKSA/IHIxLT5wb3Np
dGlvbigpIDwgcjItPnBvc2l0aW9uKCkgOiBzcGVjaWZpY2l0eTEgPCBzcGVjaWZpY2l0eTI7CiB9
CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRSdWxlcygpCit2b2lkIFN0eWxlUmVz
b2x2ZXI6OnNvcnRNYXRjaGVkUnVsZXMoVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+JiBtYXRj
aGVkUnVsZXMpCiB7Ci0gICAgc3RkOjpzb3J0KG1fbWF0Y2hlZFJ1bGVzLmJlZ2luKCksIG1fbWF0
Y2hlZFJ1bGVzLmVuZCgpLCBjb21wYXJlUnVsZXMpOworICAgIHN0ZDo6c29ydChtYXRjaGVkUnVs
ZXMuYmVnaW4oKSwgbWF0Y2hlZFJ1bGVzLmVuZCgpLCBjb21wYXJlUnVsZXMpOwogfQogCi12b2lk
IFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBp
bmNsdWRlU01JTFByb3BlcnRpZXMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMo
U3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1
ZGVTTUlMUHJvcGVydGllcykKIHsKLSAgICBtYXRjaFVBUnVsZXMocmVzdWx0KTsKKyAgICBtYXRj
aFVBUnVsZXMoc3RhdGUsIHJlc3VsdCk7CisgICAgLy8gLi4uLiBiYWQ/CisgICAgc3RhdGUuc2V0
SW5jbHVkZUVtcHR5UnVsZXMoZmFsc2UpOwogCiAgICAgLy8gTm93IHdlIGNoZWNrIHVzZXIgc2hl
ZXQgcnVsZXMuCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICBt
YXRjaFVzZXJSdWxlcyhyZXN1bHQsIGZhbHNlKTsKLSAgICAgICAgCisgICAgICAgIG1hdGNoVXNl
clJ1bGVzKHN0YXRlLCByZXN1bHQpOworCiAgICAgLy8gTm93IGNoZWNrIGF1dGhvciBydWxlcywg
YmVnaW5uaW5nIGZpcnN0IHdpdGggcHJlc2VudGF0aW9uYWwgYXR0cmlidXRlcyBtYXBwZWQgZnJv
bSBIVE1MLgotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQpIHsKLSAgICAgICAgYWRkRWxlbWVudFN0
eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3R5bGVkRWxlbWVudC0+cHJlc2VudGF0aW9uQXR0cmli
dXRlU3R5bGUoKSk7CisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQoKSkgeworICAgICAgICBh
ZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5w
cmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKIAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sg
YWRkaXRpb25hbCBtYXBwZWQgZGVjbGFyYXRpb25zLgogICAgICAgICAvLyBUYWJsZXMgYW5kIHRh
YmxlIGNlbGxzIHNoYXJlIGFuIGFkZGl0aW9uYWwgbWFwcGVkIHJ1bGUgdGhhdCBtdXN0IGJlIGFw
cGxpZWQKICAgICAgICAgLy8gYWZ0ZXIgYWxsIGF0dHJpYnV0ZXMsIHNpbmNlIHRoZWlyIG1hcHBl
ZCBzdHlsZSBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgb2YgbXVsdGlwbGUgYXR0cmlidXRlcy4KLSAg
ICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3R5bGVkRWxlbWVudC0+
YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOworICAgICAgICBhZGRFbGVt
ZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5hZGRpdGlv
bmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CiAKLSAgICAgICAgaWYgKG1fc3R5bGVk
RWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCkt
PmlzSFRNTEVsZW1lbnQoKSkgewogICAgICAgICAgICAgYm9vbCBpc0F1dG87Ci0gICAgICAgICAg
ICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSB0b0hUTUxFbGVtZW50KG1fc3R5bGVkRWxl
bWVudCktPmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CisgICAg
ICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSB0b0hUTUxFbGVtZW50KHN0YXRl
LmVsZW1lbnQoKSktPmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7
CiAgICAgICAgICAgICBpZiAoaXNBdXRvKQogICAgICAgICAgICAgICAgIGFkZE1hdGNoZWRQcm9w
ZXJ0aWVzKHJlc3VsdCwgdGV4dERpcmVjdGlvbiA9PSBMVFIgPyBsZWZ0VG9SaWdodERlY2xhcmF0
aW9uKCkgOiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkpOwogICAgICAgICB9CkBAIC05MzQsMjEg
KzkxNSwyMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQm
IHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZQogICAgIAogICAgIC8vIENoZWNrIHRo
ZSBydWxlcyBpbiBhdXRob3Igc2hlZXRzIG5leHQuCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRV
c2VyU3R5bGVzKQotICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHJlc3VsdCwgZmFsc2UpOworICAg
ICAgICBtYXRjaEF1dGhvclJ1bGVzKHN0YXRlLCByZXN1bHQpOwogCiAgICAgLy8gTm93IGNoZWNr
IG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRlLgotICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNl
clN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQgJiYgbV9zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHls
ZSgpKSB7CisgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIHN0YXRlLnN0eWxl
ZEVsZW1lbnQoKSAmJiBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlubGluZVN0eWxlKCkpIHsKICAg
ICAgICAgLy8gSW5saW5lIHN0eWxlIGlzIGltbXV0YWJsZSBhcyBsb25nIGFzIHRoZXJlIGlzIG5v
IENTU09NIHdyYXBwZXIuCiAgICAgICAgIC8vIEZJWE1FOiBNZWRpYSBjb250cm9sIHNoYWRvdyB0
cmVlcyBzZWVtIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCBjYWNoaW5nLgotICAgICAgICBib29sIGlz
SW5saW5lU3R5bGVDYWNoZWFibGUgPSAhbV9zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpLT5p
c011dGFibGUoKSAmJiAhbV9zdHlsZWRFbGVtZW50LT5pc0luU2hhZG93VHJlZSgpOworICAgICAg
ICBib29sIGlzSW5saW5lU3R5bGVDYWNoZWFibGUgPSAhc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5p
bmxpbmVTdHlsZSgpLT5pc011dGFibGUoKSAmJiAhc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pc0lu
U2hhZG93VHJlZSgpOwogICAgICAgICAvLyBGSVhNRTogQ29uc3RpZnkuCi0gICAgICAgIGFkZEVs
ZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxl
KCksIGlzSW5saW5lU3R5bGVDYWNoZWFibGUpOworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9w
ZXJ0aWVzKHJlc3VsdCwgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpLCBpc0lu
bGluZVN0eWxlQ2FjaGVhYmxlKTsKICAgICB9CiAKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8vIE5v
dyBjaGVjayBTTUlMIGFuaW1hdGlvbiBvdmVycmlkZSBzdHlsZS4KLSAgICBpZiAoaW5jbHVkZVNN
SUxQcm9wZXJ0aWVzICYmIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3R5bGVkRWxl
bWVudCAmJiBtX3N0eWxlZEVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKQotICAgICAgICBhZGRFbGVt
ZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3R5
bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpLCBmYWxzZSAvKiBpc0Nh
Y2hlYWJsZSAqLyk7CisgICAgaWYgKGluY2x1ZGVTTUlMUHJvcGVydGllcyAmJiBtX21hdGNoQXV0
aG9yQW5kVXNlclN0eWxlcyAmJiBzdGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgc3RhdGUuZWxlbWVu
dCgpLT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhy
ZXN1bHQsIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihzdGF0ZS5lbGVtZW50KCkpLT5hbmltYXRl
ZFNNSUxTdHlsZVByb3BlcnRpZXMoKSwgZmFsc2UgLyogaXNDYWNoZWFibGUgKi8pOwogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0oaW5jbHVkZVNNSUxQcm9wZXJ0aWVzKTsKICNlbmRpZgpAQCAtOTYz
LDQ3ICs5NDQsMzYgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1
bGVzKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXMKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KEVsZW1lbnQqIGUp
CitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0RWxlbWVudChTdHlsZVJlc29sdmVTdGF0
ZSYgc3RhdGUsIEVsZW1lbnQqIGUpCiB7Ci0gICAgaWYgKG1fZWxlbWVudCAhPSBlKSB7Ci0gICAg
ICAgIG1fZWxlbWVudCA9IGU7Ci0gICAgICAgIG1fc3R5bGVkRWxlbWVudCA9IG1fZWxlbWVudCAm
JiBtX2VsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVu
dCo+KG1fZWxlbWVudCkgOiAwOwotICAgICAgICBtX2VsZW1lbnRMaW5rU3RhdGUgPSBkb2N1bWVu
dCgpLT52aXNpdGVkTGlua1N0YXRlKCktPmRldGVybWluZUxpbmtTdGF0ZShtX2VsZW1lbnQpOwot
ICAgICAgICBpZiAoZSAmJiBlID09IGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKSB7
Ci0gICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXREaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxl
bWVudChmYWxzZSk7Ci0gICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNl
dE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsKLSAgICAgICAgfQorICAgIHN0YXRlLnNldEVsZW1l
bnQoZSk7CisgICAgc3RhdGUuc2V0RWxlbWVudExpbmtTdGF0ZShkb2N1bWVudCgpLT52aXNpdGVk
TGlua1N0YXRlKCktPmRldGVybWluZUxpbmtTdGF0ZShlKSk7CisgICAgaWYgKGUgJiYgZSA9PSBl
LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkgeworICAgICAgICBlLT5kb2N1bWVudCgp
LT5zZXREaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudChmYWxzZSk7CisgICAgICAgIGUtPmRv
Y3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOwogICAg
IH0KIH0KIAotaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEZvclN0eWxlUmVzb2x2ZShF
bGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFBzZXVkb0lkIHBzZXVkb0lEKQor
aW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEZvclN0eWxlUmVzb2x2ZShTdHlsZVJlc29s
dmVTdGF0ZSYgc3RhdGUsIEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsK
LSAgICBtX3BzZXVkb1N0eWxlID0gcHNldWRvSUQ7Ci0KICAgICBpZiAoZSkgewogICAgICAgICBO
b2RlUmVuZGVyaW5nQ29udGV4dCBjb250ZXh0KGUpOwotICAgICAgICBtX3BhcmVudE5vZGUgPSBj
b250ZXh0LnBhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHlsZSgpOwotICAgICAgICBtX3BhcmVu
dFN0eWxlID0gY29udGV4dC5yZXNldFN0eWxlSW5oZXJpdGFuY2UoKSA/IDAgOgorICAgICAgICBz
dGF0ZS5zZXRQYXJlbnROb2RlKGNvbnRleHQucGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxl
KCkpOworICAgICAgICBzdGF0ZS5zZXRQYXJlbnRTdHlsZShjb250ZXh0LnJlc2V0U3R5bGVJbmhl
cml0YW5jZSgpID8gMCA6CiAgICAgICAgICAgICBwYXJlbnRTdHlsZSA/IHBhcmVudFN0eWxlIDoK
LSAgICAgICAgICAgIG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6
IDA7Ci0gICAgICAgIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50ID0gY29udGV4dC5pbnNl
cnRpb25Qb2ludCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fcGFyZW50Tm9kZSA9IDA7Ci0g
ICAgICAgIG1fcGFyZW50U3R5bGUgPSBwYXJlbnRTdHlsZTsKLSAgICAgICAgbV9kaXN0cmlidXRl
ZFRvSW5zZXJ0aW9uUG9pbnQgPSBmYWxzZTsKLSAgICB9CisgICAgICAgICAgICBzdGF0ZS5wYXJl
bnROb2RlKCkgPyBzdGF0ZS5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCkgOiAwKTsKKyAgICAg
ICAgc3RhdGUuc2V0RGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KGNvbnRleHQuaW5zZXJ0aW9u
UG9pbnQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIHN0YXRlLnNldFBhcmVudFN0eWxlKHBhcmVu
dFN0eWxlKTsKIAorICAgIHN0YXRlLnNldENhblVzZUZhc3RSZWplY3QobV9zZWxlY3RvckZpbHRl
ci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChzdGF0ZS5wYXJlbnROb2RlKCkpKTsKKyAgICAKICAg
ICBOb2RlKiBkb2NFbGVtZW50ID0gZSA/IGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgp
IDogMDsKICAgICBSZW5kZXJTdHlsZSogZG9jU3R5bGUgPSBkb2N1bWVudCgpLT5yZW5kZXJTdHls
ZSgpOwotICAgIG1fcm9vdEVsZW1lbnRTdHlsZSA9IGRvY0VsZW1lbnQgJiYgZSAhPSBkb2NFbGVt
ZW50ID8gZG9jRWxlbWVudC0+cmVuZGVyU3R5bGUoKSA6IGRvY1N0eWxlOwotCi0gICAgbV9zdHls
ZSA9IDA7Ci0KLSAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuY2xlYXIoKTsKLQotICAgIG1f
cnVsZUxpc3QgPSAwOworICAgIHN0YXRlLnNldFJvb3RFbGVtZW50U3R5bGUoZG9jRWxlbWVudCAm
JiBlICE9IGRvY0VsZW1lbnQgPyBkb2NFbGVtZW50LT5yZW5kZXJTdHlsZSgpIDogZG9jU3R5bGUp
OwogCi0gICAgbV9mb250RGlydHkgPSBmYWxzZTsKKyAgICBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzKCkuY2xlYXIoKTsKKyAgICBzdGF0ZS5zZXRGb250RGlydHkoZmFsc2UpOwogfQogCiBz
dGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoVGhyZXNob2xkID0gMTA7CkBAIC0xMDU0
LDI2ICsxMDI0LDIzIEBAIE5vZGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZUNvdXNpbkxpc3QoRWxl
bWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VuCiAgICAgcmV0dXJuIDA7CiB9
CiAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVT
ZXQoUnVsZVNldCogcnVsZVNldCkKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2Fu
ZGlkYXRlTWF0Y2hlc1J1bGVTZXQoRWxlbWVudCogZWxlbWVudCwgUnVsZVNldCogcnVsZVNldCkK
IHsKICAgICBpZiAoIXJ1bGVTZXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX21hdGNo
ZWRSdWxlcy5jbGVhcigpOwogCiAgICAgaW50IGZpcnN0UnVsZUluZGV4ID0gLTEsIGxhc3RSdWxl
SW5kZXggPSAtMTsKLSAgICBtX3NlbGVjdG9yQ2hlY2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tl
cjo6U2hhcmluZ1J1bGVzKTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3Qo
cnVsZVNldCksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKLSAgICBtX3NlbGVjdG9y
Q2hlY2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpOwotICAgIGlm
IChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBt
X21hdGNoZWRSdWxlcy5jbGVhcigpOwotICAgIHJldHVybiB0cnVlOworICAgIFN0eWxlUmVzb2x2
ZVN0YXRlIHN0YXRlOworICAgIHN0YXRlLnNldEVsZW1lbnQoZWxlbWVudCk7CisgICAgc3RhdGUu
c2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlNoYXJpbmdSdWxlcyk7CisgICAgY29sbGVjdE1hdGNo
aW5nUnVsZXMocnVsZVNldCwgc3RhdGUsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsK
KyAgICByZXR1cm4gIXN0YXRlLm1hdGNoZWRSdWxlcygpLmlzRW1wdHkoKTsKIH0KIAotYm9vbCBT
dHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCogZWxl
bWVudCkgY29uc3QKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9s
KEVsZW1lbnQqIGVsZW1lbnQsIFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdDYW5kaWRhdGUpIGNvbnN0
CiB7Ci0gICAgSFRNTElucHV0RWxlbWVudCogdGhpc0lucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRv
SW5wdXRFbGVtZW50KCk7Ci0gICAgSFRNTElucHV0RWxlbWVudCogb3RoZXJJbnB1dEVsZW1lbnQg
PSBtX2VsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogdGhp
c0lucHV0RWxlbWVudCA9IHNoYXJpbmdDYW5kaWRhdGUtPnRvSW5wdXRFbGVtZW50KCk7CisgICAg
SFRNTElucHV0RWxlbWVudCogb3RoZXJJbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxl
bWVudCgpOwogCiAgICAgaWYgKCF0aGlzSW5wdXRFbGVtZW50IHx8ICFvdGhlcklucHV0RWxlbWVu
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA5NCwyNSArMTA2MSwyNSBAQCBib29sIFN0
eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KiBlbGVt
ZW50KSBjb25zdAogICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5pc1JlcXVpcmVkKCkgIT0gb3Ro
ZXJJbnB1dEVsZW1lbnQtPmlzUmVxdWlyZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWYgKGVsZW1lbnQtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkgIT0gbV9lbGVtZW50LT5pc0Vu
YWJsZWRGb3JtQ29udHJvbCgpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5pc0VuYWJsZWRG
b3JtQ29udHJvbCgpICE9IGVsZW1lbnQtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5pc0RlZmF1bHRCdXR0b25Gb3JGb3Jt
KCkgIT0gbV9lbGVtZW50LT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkpCisgICAgaWYgKHNoYXJp
bmdDYW5kaWRhdGUtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSAhPSBlbGVtZW50LT5pc0RlZmF1
bHRCdXR0b25Gb3JGb3JtKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2Vs
ZW1lbnQtPmRvY3VtZW50KCktPmNvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCkpIHsKLSAgICAg
ICAgYm9vbCB3aWxsVmFsaWRhdGUgPSBlbGVtZW50LT53aWxsVmFsaWRhdGUoKTsKKyAgICBpZiAo
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKSkgeworICAg
ICAgICBib29sIHdpbGxWYWxpZGF0ZSA9IHNoYXJpbmdDYW5kaWRhdGUtPndpbGxWYWxpZGF0ZSgp
OwogCi0gICAgICAgIGlmICh3aWxsVmFsaWRhdGUgIT0gbV9lbGVtZW50LT53aWxsVmFsaWRhdGUo
KSkKKyAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAhPSBlbGVtZW50LT53aWxsVmFsaWRhdGUoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAod2lsbFZhbGlkYXRlICYm
IChlbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkgIT0gbV9lbGVtZW50LT5pc1Zh
bGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpKQorICAgICAgICBpZiAod2lsbFZhbGlkYXRlICYmIChz
aGFyaW5nQ2FuZGlkYXRlLT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkgIT0gZWxlbWVudC0+
aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICBpZiAoZWxlbWVudC0+aXNJblJhbmdlKCkgIT0gbV9lbGVtZW50LT5pc0luUmFu
Z2UoKSkKKyAgICAgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmlzSW5SYW5nZSgpICE9IGVsZW1l
bnQtPmlzSW5SYW5nZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlm
IChlbGVtZW50LT5pc091dE9mUmFuZ2UoKSAhPSBtX2VsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpKQor
ICAgICAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aXNPdXRPZlJhbmdlKCkgIT0gZWxlbWVudC0+
aXNPdXRPZlJhbmdlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0x
MTI1LDI3ICsxMDkyLDI3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50SGFzRGlyZWN0aW9u
QXV0byhFbGVtZW50KiBlbGVtZW50KQogICAgIHJldHVybiBlbGVtZW50LT5pc0hUTUxFbGVtZW50
KCkgJiYgdG9IVE1MRWxlbWVudChlbGVtZW50KS0+aGFzRGlyZWN0aW9uQXV0bygpOwogfQogCi1i
b29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVj
dGluZ0F0dHJpYnV0ZXMoU3R5bGVkRWxlbWVudCogc2hhcmluZ0NhbmRpZGF0ZSkgY29uc3QKK2Jv
b2wgU3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0
aW5nQXR0cmlidXRlcyhTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIEVsZW1lbnQqIGVsZW1lbnQs
IFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdDYW5kaWRhdGUpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZWxl
bWVudC0+YXR0cmlidXRlRGF0YSgpID09IHNoYXJpbmdDYW5kaWRhdGUtPmF0dHJpYnV0ZURhdGEo
KSkKKyAgICBpZiAoZWxlbWVudC0+YXR0cmlidXRlRGF0YSgpID09IHNoYXJpbmdDYW5kaWRhdGUt
PmF0dHJpYnV0ZURhdGEoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKG1fZWxlbWVu
dC0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRh
dGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSkKKyAgICBpZiAoZWxlbWVu
dC0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRh
dGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIpICE9
IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIpKQorICAgIGlmIChl
bGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5m
YXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKCFtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcykgeworICAgIGlmICghc3RhdGUuZWxl
bWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKCkpIHsKICAgICAgICAgaWYgKHNoYXJpbmdDYW5kaWRh
dGUtPmhhc0NsYXNzKCkgJiYgY2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhzaGFyaW5nQ2FuZGlk
YXRlLT5jbGFzc05hbWVzKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxz
ZSBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aGFzQ2xhc3MoKSkgewogI2lmIEVOQUJMRShTVkcpCiAg
ICAgICAgIC8vIFNWRyBlbGVtZW50cyByZXF1aXJlIGEgKHNsb3chKSBnZXRBdHRyaWJ1dGUgY29t
cGFyaXNpb24gYmVjYXVzZSAiY2xhc3MiIGlzIGFuIGFuaW1hdGFibGUgYXR0cmlidXRlIGZvciBT
VkcuCi0gICAgICAgIGlmIChtX2VsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKSB7Ci0gICAgICAgICAg
ICBpZiAobV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSAhPSBzaGFyaW5nQ2FuZGlk
YXRlLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSkKKyAgICAgICAgaWYgKGVsZW1lbnQtPmlzU1ZH
RWxlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudC0+Z2V0QXR0cmlidXRlKGNsYXNz
QXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGVsc2UgewogI2VuZGlmCi0gICAg
ICAgICAgICBpZiAobV9lbGVtZW50LT5jbGFzc05hbWVzKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+
Y2xhc3NOYW1lcygpKQorICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmNsYXNzTmFtZXMoKSAhPSBz
aGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05hbWVzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIH0KQEAgLTExNTMsMTIgKzExMjAsMTIgQEAg
Ym9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZl
Y3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEUKICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUo
KSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQorICAg
IGlmICh0b1N0eWxlZEVsZW1lbnQoZWxlbWVudCktPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
KCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAg
aWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShwcm9ncmVzc1RhZykpIHsKLSAgICAgICAgaWYgKHN0
YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihtX2VsZW1lbnQpLT5pc0RldGVybWluYXRl
KCkgIT0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KHNoYXJpbmdDYW5kaWRhdGUp
LT5pc0RldGVybWluYXRlKCkpCisgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUocHJvZ3Jlc3NU
YWcpKSB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50Kj4oZWxl
bWVudCktPmlzRGV0ZXJtaW5hdGUoKSAhPSBzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50
Kj4oc2hhcmluZ0NhbmRpZGF0ZSktPmlzRGV0ZXJtaW5hdGUoKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAjZW5kaWYKQEAgLTExNjYsNTggKzExMzMsNTkgQEAgYm9vbCBTdHls
ZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRy
aWJ1dGVzKFN0eWxlZEUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTdHlsZVJlc29sdmVy
OjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QK
K2Jvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlUmVzb2x2
ZVN0YXRlJiBzdGF0ZSwgU3R5bGVkRWxlbWVudCogc2hhcmluZ0NhbmRpZGF0ZSkgY29uc3QKIHsK
LSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50KCk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gc2hhcmluZ0NhbmRpZGF0ZS0+cmVuZGVyU3R5bGUoKTsKIAogICAgIGlmICghc3R5bGUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoc3R5bGUtPnVuaXF1ZSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPnRhZ1FOYW1lKCkgIT0gbV9lbGVtZW50LT50
YWdRTmFtZSgpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT50YWdRTmFtZSgpICE9IGVsZW1l
bnQtPnRhZ1FOYW1lKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+
aW5saW5lU3R5bGUoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aW5saW5lU3R5bGUoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5uZWVkc1N0eWxlUmVjYWxj
KCkpCisgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPm5lZWRzU3R5bGVSZWNhbGMoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKGVsZW1lbnQtPmlzU1ZH
RWxlbWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihlbGVtZW50KS0+YW5pbWF0ZWRT
TUlMU3R5bGVQcm9wZXJ0aWVzKCkpCisgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmlzU1ZHRWxl
bWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihlbGVtZW50KS0+YW5pbWF0ZWRTTUlM
U3R5bGVQcm9wZXJ0aWVzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgotICAgIGlm
IChlbGVtZW50LT5pc0xpbmsoKSAhPSBtX2VsZW1lbnQtPmlzTGluaygpKQorICAgIGlmIChzaGFy
aW5nQ2FuZGlkYXRlLT5pc0xpbmsoKSAhPSBlbGVtZW50LT5pc0xpbmsoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5ob3ZlcmVkKCkgIT0gbV9lbGVtZW50LT5ob3Zl
cmVkKCkpCisgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmhvdmVyZWQoKSAhPSBlbGVtZW50LT5o
b3ZlcmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+YWN0aXZl
KCkgIT0gbV9lbGVtZW50LT5hY3RpdmUoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+YWN0
aXZlKCkgIT0gZWxlbWVudC0+YWN0aXZlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoZWxlbWVudC0+Zm9jdXNlZCgpICE9IG1fZWxlbWVudC0+Zm9jdXNlZCgpKQorICAgIGlmIChz
aGFyaW5nQ2FuZGlkYXRlLT5mb2N1c2VkKCkgIT0gZWxlbWVudC0+Zm9jdXNlZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCkgIT0gbV9l
bGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5zaGFk
b3dQc2V1ZG9JZCgpICE9IGVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5kb2N1bWVudCgpLT5jc3NUYXJn
ZXQoKSkKKyAgICBpZiAoZWxlbWVudCA9PSBzaGFyaW5nQ2FuZGlkYXRlLT5kb2N1bWVudCgpLT5j
c3NUYXJnZXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghc2hhcmluZ0NhbmRp
ZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhlbGVtZW50KSkKKyAgICBp
ZiAoIXNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMo
c3RhdGUsIGVsZW1lbnQsIHNoYXJpbmdDYW5kaWRhdGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKGVsZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgp
ICE9IG1fc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
KCkpCisgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZSgpICE9IHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+YWRkaXRpb25hbFByZXNlbnRh
dGlvbkF0dHJpYnV0ZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChl
bGVtZW50LT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhlbGVtZW50
LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAgaWYgKHNoYXJpbmdDYW5kaWRh
dGUtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKHNoYXJpbmdDYW5k
aWRhdGUtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChlbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgIGlm
IChzaGFyaW5nQ2FuZGlkYXRlLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHNoYXJlIHN0eWxlIGZvciBv
cHRpb24gYW5kIG9wdGdyb3VwIHdoZW5ldmVyIHBvc3NpYmxlLgogICAgIC8vIEJlZm9yZSBkb2lu
ZyBzbywgd2UgbmVlZCB0byByZXNvbHZlIGlzc3VlcyBpbiBIVE1MU2VsZWN0RWxlbWVudDo6cmVj
YWxjTGlzdEl0ZW1zCiAgICAgLy8gYW5kIFJlbmRlck1lbnVMaXN0OjpzZXRUZXh0LiBTZWUgYWxz
byBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg0MDUKLSAgICBpZiAo
ZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUob3B0
Z3JvdXBUYWcpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5oYXNUYWdOYW1lKG9wdGlvblRh
ZykgfHwgc2hhcmluZ0NhbmRpZGF0ZS0+aGFzVGFnTmFtZShvcHRncm91cFRhZykpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wgaXNDb250cm9sID0gZWxlbWVudC0+aXNGb3JtQ29u
dHJvbEVsZW1lbnQoKTsKKyAgICBib29sIGlzQ29udHJvbCA9IHNoYXJpbmdDYW5kaWRhdGUtPmlz
Rm9ybUNvbnRyb2xFbGVtZW50KCk7CiAKLSAgICBpZiAoaXNDb250cm9sICE9IG1fZWxlbWVudC0+
aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICBpZiAoaXNDb250cm9sICE9IGVsZW1lbnQtPmlz
Rm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChp
c0NvbnRyb2wgJiYgIWNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChlbGVtZW50KSkKKyAgICBpZiAo
aXNDb250cm9sICYmICFjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woZWxlbWVudCwgc2hhcmluZ0Nh
bmRpZGF0ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChzdHlsZS0+dHJhbnNp
dGlvbnMoKSB8fCBzdHlsZS0+YW5pbWF0aW9ucygpKQpAQCAtMTIyNiwxMCArMTE5NCwxMCBAQCBi
b29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50
KiBlbGVtZW50KSBjb25zdAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICAv
LyBUdXJuIG9mZiBzdHlsZSBzaGFyaW5nIGZvciBlbGVtZW50cyB0aGF0IGNhbiBnYWluIGxheWVy
cyBmb3IgcmVhc29ucyBvdXRzaWRlIG9mIHRoZSBzdHlsZSBzeXN0ZW0uCiAgICAgLy8gU2VlIGNv
bW1lbnRzIGluIFJlbmRlck9iamVjdDo6c2V0U3R5bGUoKS4KLSAgICBpZiAoZWxlbWVudC0+aGFz
VGFnTmFtZShpZnJhbWVUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoZnJhbWVUYWcpIHx8IGVs
ZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0
VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgZWxlbWVudC0+aGFzVGFn
TmFtZShjYW52YXNUYWcpCisgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmhhc1RhZ05hbWUoaWZy
YW1lVGFnKSB8fCBzaGFyaW5nQ2FuZGlkYXRlLT5oYXNUYWdOYW1lKGZyYW1lVGFnKSB8fCBzaGFy
aW5nQ2FuZGlkYXRlLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBzaGFyaW5nQ2FuZGlkYXRlLT5o
YXNUYWdOYW1lKG9iamVjdFRhZykgfHwgc2hhcmluZ0NhbmRpZGF0ZS0+aGFzVGFnTmFtZShhcHBs
ZXRUYWcpIHx8IHNoYXJpbmdDYW5kaWRhdGUtPmhhc1RhZ05hbWUoY2FudmFzVGFnKQogI2lmIEVO
QUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQogICAgICAgICAvLyBXaXRoIHByb3h5aW5nLCB0
aGUgbWVkaWEgZWxlbWVudHMgYXJlIGJhY2tlZCBieSBhIFJlbmRlckVtYmVkZGVkT2JqZWN0Lgot
ICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHZpZGVvVGFnKSB8fCBlbGVtZW50LT5oYXNU
YWdOYW1lKGF1ZGlvVGFnKQorICAgICAgICB8fCBzaGFyaW5nQ2FuZGlkYXRlLT5oYXNUYWdOYW1l
KHZpZGVvVGFnKSB8fCBzaGFyaW5nQ2FuZGlkYXRlLT5oYXNUYWdOYW1lKGF1ZGlvVGFnKQogI2Vu
ZGlmCiAgICAgICAgICkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTIzOCwzMSArMTIwNiwz
MSBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRF
bGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgIGlmIChlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhl
bGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQtPmlzTGlu
aygpICYmIG1fZWxlbWVudExpbmtTdGF0ZSAhPSBzdHlsZS0+aW5zaWRlTGluaygpKQorICAgIGlm
IChzaGFyaW5nQ2FuZGlkYXRlLT5pc0xpbmsoKSAmJiBzdGF0ZS5lbGVtZW50TGlua1N0YXRlKCkg
IT0gc3R5bGUtPmluc2lkZUxpbmsoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQogICAgIC8vIERlbnkgc2hhcmluZyBzdHlsZXMgYmV0d2VlbiBXZWJW
VFQgYW5kIG5vbi1XZWJWVFQgbm9kZXMuCi0gICAgaWYgKGVsZW1lbnQtPmlzV2ViVlRURWxlbWVu
dCgpICE9IG1fZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkpCisgICAgaWYgKHNoYXJpbmdDYW5k
aWRhdGUtPmlzV2ViVlRURWxlbWVudCgpICE9IGVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50
KCkgJiYgbV9lbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiB0b1dlYlZUVEVsZW1lbnQoZWxl
bWVudCktPndlYlZUVE5vZGVUeXBlKCkgIT0gdG9XZWJWVFRFbGVtZW50KG1fZWxlbWVudCktPndl
YlZUVE5vZGVUeXBlKCkpCisgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmlzV2ViVlRURWxlbWVu
dCgpICYmIGVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpICYmIHRvV2ViVlRURWxlbWVudChlbGVt
ZW50KS0+d2ViVlRUTm9kZVR5cGUoKSAhPSB0b1dlYlZUVEVsZW1lbnQoZWxlbWVudCktPndlYlZU
VE5vZGVUeXBlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQotICAgIGlmIChlbGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCkt
PndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpIHx8IG1fZWxlbWVudCA9PSBtX2VsZW1l
bnQtPmRvY3VtZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKQorICAgIGlm
IChlbGVtZW50ID09IHNoYXJpbmdDYW5kaWRhdGUtPmRvY3VtZW50KCktPndlYmtpdEN1cnJlbnRG
dWxsU2NyZWVuRWxlbWVudCgpIHx8IGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Vi
a2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNl
bmRpZgogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgU3R5bGVkRWxlbWVudCogU3R5bGVS
ZXNvbHZlcjo6ZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoTm9kZSogbm9kZSwgdW5zaWduZWQm
IGNvdW50KSBjb25zdAoraW5saW5lIFN0eWxlZEVsZW1lbnQqIFN0eWxlUmVzb2x2ZXI6OmZpbmRT
aWJsaW5nRm9yU3R5bGVTaGFyaW5nKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgTm9kZSogbm9k
ZSwgdW5zaWduZWQmIGNvdW50KSBjb25zdAogewogICAgIGZvciAoOyBub2RlOyBub2RlID0gbm9k
ZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKCFub2RlLT5pc1N0eWxlZEVsZW1l
bnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoY2FuU2hhcmVTdHlsZVdp
dGhFbGVtZW50KHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihub2RlKSkpCisgICAgICAgIGlm
IChjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoc3RhdGUsIHN0YXRpY19jYXN0PFN0eWxlZEVsZW1l
bnQqPihub2RlKSkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKGNvdW50KysgPT0g
Y1N0eWxlU2VhcmNoVGhyZXNob2xkKQogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMjgwLDQw
ICsxMjQ4LDQxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwYXJlbnRFbGVtZW50UHJldmVudHNTaGFy
aW5nKGNvbnN0IEVsZW1lbnQqIHBhcmVudEVsZW1lbnQpCiAgICAgICAgIHx8IHBhcmVudEVsZW1l
bnQtPmNoaWxkcmVuQWZmZWN0ZWRCeURpcmVjdEFkamFjZW50UnVsZXMoKTsKIH0KIAotUmVuZGVy
U3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKK1JlbmRlclN0eWxlKiBT
dHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUp
CiB7Ci0gICAgaWYgKCFtX3N0eWxlZEVsZW1lbnQgfHwgIW1fcGFyZW50U3R5bGUpCisgICAgaWYg
KCFzdGF0ZS5zdHlsZWRFbGVtZW50KCkgfHwgIXN0YXRlLnBhcmVudFN0eWxlKCkpCiAgICAgICAg
IHJldHVybiAwOworCiAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaGFzIGlubGluZSBzdHlsZSBpdCBp
cyBwcm9iYWJseSB1bmlxdWUuCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUo
KSkKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpKQogICAgICAg
ICByZXR1cm4gMDsKICNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmlz
U1ZHRWxlbWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihtX3N0eWxlZEVsZW1lbnQp
LT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxl
bWVudCgpLT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oc3RhdGUu
c3R5bGVkRWxlbWVudCgpKS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCiAgICAgICAg
IHJldHVybiAwOwogI2VuZGlmCiAgICAgLy8gSWRzIHN0b3Agc3R5bGUgc2hhcmluZyBpZiB0aGV5
IHNob3cgdXAgaW4gdGhlIHN0eWxlc2hlZXRzLgotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmhh
c0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKG1fc3R5bGVkRWxlbWVudC0+
aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQorICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVt
ZW50KCktPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKHN0YXRlLnN0
eWxlZEVsZW1lbnQoKS0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhtX2VsZW1lbnQt
PnBhcmVudEVsZW1lbnQoKSkpCisgICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmco
c3RhdGUuZWxlbWVudCgpLT5wYXJlbnRFbGVtZW50KCkpKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICBpZiAobV9zdHlsZWRFbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgIGlm
IChzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIGlmIChtX2VsZW1lbnQgPT0gbV9lbGVtZW50LT5kb2N1bWVudCgp
LT5jc3NUYXJnZXQoKSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudCgpID09IHN0YXRlLmRvY3VtZW50
KCktPmNzc1RhcmdldCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoZWxlbWVudEhhc0Rp
cmVjdGlvbkF1dG8obV9lbGVtZW50KSkKKyAgICBpZiAoZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8o
c3RhdGUuZWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBDYWNoZSB3aGV0
aGVyIG1fZWxlbWVudCBpcyBhZmZlY3RlZCBieSBhbnkga25vd24gY2xhc3Mgc2VsZWN0b3JzLgog
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBhIG1lbWJlciB2YXJpYWJsZS4gVGhlIHN0
eWxlIHNoYXJpbmcgY29kZSBjb3VsZCBiZSBmYWN0b3JlZCBvdXQgb2YgU3R5bGVSZXNvbHZlci4K
LSAgICBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyA9IG1fZWxlbWVudCAmJiBtX2VsZW1l
bnQtPmhhc0NsYXNzKCkgJiYgY2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhtX2VsZW1lbnQtPmNs
YXNzTmFtZXMoKSk7CisgICAgc3RhdGUuc2V0RWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKHN0
YXRlLmVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50KCktPmhhc0NsYXNzKCkgJiYgY2xhc3NOYW1l
c0FmZmVjdGVkQnlSdWxlcyhzdGF0ZS5lbGVtZW50KCktPmNsYXNzTmFtZXMoKSkpOwogCiAgICAg
Ly8gQ2hlY2sgcHJldmlvdXMgc2libGluZ3MgYW5kIHRoZWlyIGNvdXNpbnMuCiAgICAgdW5zaWdu
ZWQgY291bnQgPSAwOwogICAgIHVuc2lnbmVkIHZpc2l0ZWROb2RlQ291bnQgPSAwOwogICAgIFN0
eWxlZEVsZW1lbnQqIHNoYXJlRWxlbWVudCA9IDA7Ci0gICAgTm9kZSogY291c2luTGlzdCA9IG1f
c3R5bGVkRWxlbWVudC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgTm9kZSogY291c2luTGlzdCA9
IHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgd2hpbGUgKGNv
dXNpbkxpc3QpIHsKLSAgICAgICAgc2hhcmVFbGVtZW50ID0gZmluZFNpYmxpbmdGb3JTdHlsZVNo
YXJpbmcoY291c2luTGlzdCwgY291bnQpOworICAgICAgICBzaGFyZUVsZW1lbnQgPSBmaW5kU2li
bGluZ0ZvclN0eWxlU2hhcmluZyhzdGF0ZSwgY291c2luTGlzdCwgY291bnQpOwogICAgICAgICBp
ZiAoc2hhcmVFbGVtZW50KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNvdXNpbkxpc3Qg
PSBsb2NhdGVDb3VzaW5MaXN0KGNvdXNpbkxpc3QtPnBhcmVudEVsZW1lbnQoKSwgdmlzaXRlZE5v
ZGVDb3VudCk7CkBAIC0xMzI0LDIxICsxMjkzLDIxIEBAIFJlbmRlclN0eWxlKiBTdHlsZVJlc29s
dmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQ2Fu
J3Qgc2hhcmUgaWYgc2libGluZyBydWxlcyBhcHBseS4gVGhpcyBpcyBjaGVja2VkIGF0IHRoZSBl
bmQgYXMgaXQgc2hvdWxkIHJhcmVseSBmYWlsLgotICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRh
dGVNYXRjaGVzUnVsZVNldChtX3NpYmxpbmdSdWxlU2V0LmdldCgpKSkKKyAgICBpZiAoc3R5bGVT
aGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoc3RhdGUuZWxlbWVudCgpLCBtX3NpYmxpbmdS
dWxlU2V0LmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYg
YXR0cmlidXRlIHJ1bGVzIGFwcGx5LgotICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRj
aGVzUnVsZVNldChtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldC5nZXQoKSkpCisgICAgaWYgKHN0
eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KHN0YXRlLmVsZW1lbnQoKSwgbV91bmNv
bW1vbkF0dHJpYnV0ZVJ1bGVTZXQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICAvLyBD
YW4ndCBzaGFyZSBpZiBAaG9zdCBALXJ1bGVzIGFwcGx5LgotICAgIGlmIChzdHlsZVNoYXJpbmdD
YW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCkpCisgICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0
ZU1hdGNoZXNIb3N0UnVsZXMoc3RhdGUuZWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgLy8gVHJhY2tpbmcgY2hpbGQgaW5kZXggcmVxdWlyZXMgdW5pcXVlIHN0eWxlIGZvciBlYWNo
IG5vZGUuIFRoaXMgbWF5IGdldCBzZXQgYnkgdGhlIHNpYmxpbmcgcnVsZSBtYXRjaCBhYm92ZS4K
LSAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhtX2VsZW1lbnQtPnBhcmVudEVs
ZW1lbnQoKSkpCisgICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcoc3RhdGUuZWxl
bWVudCgpLT5wYXJlbnRFbGVtZW50KCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4g
c2hhcmVFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1h
dGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRj
aFVBUnVsZXMoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0KQog
ewogICAgIE1hdGNoaW5nVUFSdWxlc1Njb3BlIHNjb3BlOwogCkBAIC0xMzQ3LDE1ICsxMzE2LDE1
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQp
CiAgICAgICAgIHJlc3VsdC5pc0NhY2hlYWJsZSA9IGZhbHNlOwogICAgIFJ1bGVTZXQqIHVzZXJB
Z2VudFN0eWxlU2hlZXQgPSBtX21lZGl1bS0+bWVkaWFUeXBlTWF0Y2hTcGVjaWZpYygicHJpbnQi
KQogICAgICAgICA/IGRlZmF1bHRQcmludFN0eWxlIDogZGVmYXVsdFN0eWxlOwotICAgIG1hdGNo
VUFSdWxlcyhyZXN1bHQsIHVzZXJBZ2VudFN0eWxlU2hlZXQpOworICAgIG1hdGNoVUFSdWxlcyhz
dGF0ZSwgcmVzdWx0LCB1c2VyQWdlbnRTdHlsZVNoZWV0KTsKIAogICAgIC8vIEluIHF1aXJrcyBt
b2RlLCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSBxdWlya3MgdXNlciBhZ2VudCBzaGVldC4KLSAg
ICBpZiAoIW1fc2VsZWN0b3JDaGVja2VyLnN0cmljdFBhcnNpbmcoKSkKLSAgICAgICAgbWF0Y2hV
QVJ1bGVzKHJlc3VsdCwgZGVmYXVsdFF1aXJrc1N0eWxlKTsKKyAgICBpZiAoZG9jdW1lbnQoKS0+
aW5RdWlya3NNb2RlKCkpCisgICAgICAgIG1hdGNoVUFSdWxlcyhzdGF0ZSwgcmVzdWx0LCBkZWZh
dWx0UXVpcmtzU3R5bGUpOwogCiAgICAgLy8gSWYgZG9jdW1lbnQgdXNlcyB2aWV3IHNvdXJjZSBz
dHlsZXMgKGluIHZpZXcgc291cmNlIG1vZGUgb3IgaW4geG1sIHZpZXdlciBtb2RlKSwgdGhlbiB3
ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB2aWV3IHNvdXJjZSBzdHlsZSBzaGVldC4KICAgICBpZiAo
ZG9jdW1lbnQoKS0+aXNWaWV3U291cmNlKCkpCi0gICAgICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQs
IHZpZXdTb3VyY2VTdHlsZSgpKTsKKyAgICAgICAgbWF0Y2hVQVJ1bGVzKHN0YXRlLCByZXN1bHQs
IHZpZXdTb3VyY2VTdHlsZSgpKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0U3R5bGVzRm9yUGFnaW5h
dGlvbk1vZGUoUGFnaW5hdGlvbjo6TW9kZSBwYWdpbmF0aW9uTW9kZSwgUmVuZGVyU3R5bGUqIHN0
eWxlKQpAQCAtMTU1MywxMDYgKzE1MjIsMTA0IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0
eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBSZW5kZXJTCiAg
ICAgICAgIHJldHVybiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOwogICAgIH0KIAotICAgIGluaXRF
bGVtZW50KGVsZW1lbnQpOwotICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZWxlbWVudCwgZGVmYXVs
dFBhcmVudCk7Ci0gICAgbV9yZWdpb25Gb3JTdHlsaW5nID0gcmVnaW9uRm9yU3R5bGluZzsKLSAg
ICBpZiAoc2hhcmluZ0JlaGF2aW9yID09IEFsbG93U3R5bGVTaGFyaW5nICYmICFtX2Rpc3RyaWJ1
dGVkVG9JbnNlcnRpb25Qb2ludCkgewotICAgICAgICBSZW5kZXJTdHlsZSogc2hhcmVkU3R5bGUg
PSBsb2NhdGVTaGFyZWRTdHlsZSgpOworICAgIFN0eWxlUmVzb2x2ZVN0YXRlIHN0YXRlOworICAg
IGluaXRFbGVtZW50KHN0YXRlLCBlbGVtZW50KTsKKyAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKHN0
YXRlLCBlbGVtZW50LCBkZWZhdWx0UGFyZW50KTsKKyAgICBzdGF0ZS5zZXRSZWdpb25Gb3JTdHls
aW5nKHJlZ2lvbkZvclN0eWxpbmcpOworCisgICAgaWYgKHNoYXJpbmdCZWhhdmlvciA9PSBBbGxv
d1N0eWxlU2hhcmluZyAmJiAhc3RhdGUuZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KCkpIHsK
KyAgICAgICAgUmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0gbG9jYXRlU2hhcmVkU3R5bGUoc3Rh
dGUpOwogICAgICAgICBpZiAoc2hhcmVkU3R5bGUpCiAgICAgICAgICAgICByZXR1cm4gc2hhcmVk
U3R5bGU7CiAgICAgfQogCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjbG9uZUZvclBhcmVudDsK
KyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlOwogCi0gICAgaWYgKG1fcGFyZW50U3R5bGUp
IHsKLSAgICAgICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLSAgICAgICAgbV9z
dHlsZS0+aW5oZXJpdEZyb20obV9wYXJlbnRTdHlsZSwgaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1l
bnQpID8gUmVuZGVyU3R5bGU6OkF0U2hhZG93Qm91bmRhcnkgOiBSZW5kZXJTdHlsZTo6Tm90QXRT
aGFkb3dCb3VuZGFyeSk7CisgICAgaWYgKHN0YXRlLnBhcmVudFN0eWxlKCkpIHsKKyAgICAgICAg
c3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgICAgIHN0eWxlLT5pbmhlcml0RnJv
bShzdGF0ZS5wYXJlbnRTdHlsZSgpLCBpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkgPyBSZW5k
ZXJTdHlsZTo6QXRTaGFkb3dCb3VuZGFyeSA6IFJlbmRlclN0eWxlOjpOb3RBdFNoYWRvd0JvdW5k
YXJ5KTsKICAgICB9IGVsc2UgewotICAgICAgICBtX3N0eWxlID0gZGVmYXVsdFN0eWxlRm9yRWxl
bWVudCgpOwotICAgICAgICBjbG9uZUZvclBhcmVudCA9IFJlbmRlclN0eWxlOjpjbG9uZShzdHls
ZSgpKTsKLSAgICAgICAgbV9wYXJlbnRTdHlsZSA9IGNsb25lRm9yUGFyZW50LmdldCgpOworICAg
ICAgICBzdHlsZSA9IGRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKTsKKyAgICAgICAgY2xvbmVGb3JQ
YXJlbnQgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoc3R5bGUuZ2V0KCkpOworICAgICAgICBzdGF0ZS5z
ZXRQYXJlbnRTdHlsZShjbG9uZUZvclBhcmVudC5nZXQoKSk7CiAgICAgfQogICAgIC8vIGNvbnRl
bnRlZGl0YWJsZSBhdHRyaWJ1dGUgKGltcGxlbWVudGVkIGJ5IC13ZWJraXQtdXNlci1tb2RpZnkp
IHNob3VsZAogICAgIC8vIGJlIHByb3BhZ2F0ZWQgZnJvbSBzaGFkb3cgaG9zdCB0byBkaXN0cmli
dXRlZCBub2RlLgotICAgIGlmIChtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCkgeworICAg
IGlmIChzdGF0ZS5kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQoKSkgewogICAgICAgICBpZiAo
RWxlbWVudCogcGFyZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAg
ICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlT2ZTaGFkb3dIb3N0ID0gcGFyZW50LT5yZW5kZXJTdHls
ZSgpKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFVzZXJNb2RpZnkoc3R5bGVPZlNoYWRv
d0hvc3QtPnVzZXJNb2RpZnkoKSk7CisgICAgICAgICAgICAgICAgc3R5bGUtPnNldFVzZXJNb2Rp
Znkoc3R5bGVPZlNoYWRvd0hvc3QtPnVzZXJNb2RpZnkoKSk7CiAgICAgICAgIH0KICAgICB9CiAK
ICAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkpIHsKLSAgICAgICAgbV9zdHlsZS0+c2V0SXNMaW5r
KHRydWUpOwotICAgICAgICBFSW5zaWRlTGluayBsaW5rU3RhdGUgPSBtX2VsZW1lbnRMaW5rU3Rh
dGU7Ci0gICAgICAgIGlmIChtX2VsZW1lbnRMaW5rU3RhdGUgIT0gTm90SW5zaWRlTGluaykgewor
ICAgICAgICBzdHlsZS0+c2V0SXNMaW5rKHRydWUpOworICAgICAgICBFSW5zaWRlTGluayBsaW5r
U3RhdGUgPSBzdGF0ZS5lbGVtZW50TGlua1N0YXRlKCk7CisgICAgICAgIGlmIChsaW5rU3RhdGUg
IT0gTm90SW5zaWRlTGluaykgewogICAgICAgICAgICAgYm9vbCBmb3JjZVZpc2l0ZWQgPSBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZWxlbWVudCwgQ1NTU2VsZWN0
b3I6OlBzZXVkb1Zpc2l0ZWQpOwogICAgICAgICAgICAgaWYgKGZvcmNlVmlzaXRlZCkKICAgICAg
ICAgICAgICAgICBsaW5rU3RhdGUgPSBJbnNpZGVWaXNpdGVkTGluazsKICAgICAgICAgfQotCi0g
ICAgICAgIG1fc3R5bGUtPnNldEluc2lkZUxpbmsobGlua1N0YXRlKTsKKyAgICAgICAgc3R5bGUt
PnNldEluc2lkZUxpbmsobGlua1N0YXRlKTsKICAgICB9CiAKICAgICBlbnN1cmVEZWZhdWx0U3R5
bGVTaGVldHNGb3JFbGVtZW50KGVsZW1lbnQpOwogCisgICAgc3RhdGUuc2V0U3R5bGUoc3R5bGUu
Z2V0KCkpOworCiAgICAgTWF0Y2hSZXN1bHQgbWF0Y2hSZXN1bHQ7CiAgICAgaWYgKG1hdGNoaW5n
QmVoYXZpb3IgPT0gTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpCi0gICAgICAgIG1hdGNoVUFSdWxl
cyhtYXRjaFJlc3VsdCk7CisgICAgICAgIG1hdGNoVUFSdWxlcyhzdGF0ZSwgbWF0Y2hSZXN1bHQp
OwogICAgIGVsc2UKLSAgICAgICAgbWF0Y2hBbGxSdWxlcyhtYXRjaFJlc3VsdCwgbWF0Y2hpbmdC
ZWhhdmlvciAhPSBNYXRjaEFsbFJ1bGVzRXhjbHVkaW5nU01JTCk7CisgICAgICAgIG1hdGNoQWxs
UnVsZXMoc3RhdGUsIG1hdGNoUmVzdWx0LCBtYXRjaGluZ0JlaGF2aW9yICE9IE1hdGNoQWxsUnVs
ZXNFeGNsdWRpbmdTTUlMKTsKIAotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1
bHQsIGVsZW1lbnQpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoc3RhdGUsIG1hdGNoUmVz
dWx0LCBlbGVtZW50KTsKIAogICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNw
bGF5IGFuZCB0ZXh0IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVz
dFJlbmRlclN0eWxlKHN0eWxlKCksIG1fcGFyZW50U3R5bGUsIGVsZW1lbnQpOwotCi0gICAgaW5p
dEVsZW1lbnQoMCk7IC8vIENsZWFyIG91dCBmb3IgdGhlIG5leHQgcmVzb2x2ZS4KLQotICAgIGlm
IChjbG9uZUZvclBhcmVudCkKLSAgICAgICAgbV9wYXJlbnRTdHlsZSA9IDA7CisgICAgYWRqdXN0
UmVuZGVyU3R5bGUoc3RhdGUsIHN0eWxlLmdldCgpLCBzdGF0ZS5wYXJlbnRTdHlsZSgpLCBlbGVt
ZW50KTsKIAogICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIAogICAg
IC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgotICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsK
KyAgICByZXR1cm4gc3R5bGUucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbGVt
ZW50U3R5bGUsIGNvbnN0IFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1lLCBLZXlmcmFtZVZhbHVlJiBr
ZXlmcmFtZVZhbHVlKQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5
bGVGb3JLZXlmcmFtZShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIGNvbnN0IFJlbmRlclN0eWxl
KiBlbGVtZW50U3R5bGUsIGNvbnN0IFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1lLCBLZXlmcmFtZVZh
bHVlJiBrZXlmcmFtZVZhbHVlKQogewogICAgIE1hdGNoUmVzdWx0IHJlc3VsdDsKICAgICBpZiAo
a2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkKICAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVz
dWx0LCBrZXlmcmFtZS0+cHJvcGVydGllcygpKTsKIAotICAgIEFTU0VSVCghbV9zdHlsZSk7Ci0K
ICAgICAvLyBDcmVhdGUgdGhlIHN0eWxlCi0gICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9u
ZShlbGVtZW50U3R5bGUpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBSZW5kZXJT
dHlsZTo6Y2xvbmUoZWxlbWVudFN0eWxlKTsKIAotICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsK
KyAgICBzdGF0ZS5zZXRTdHlsZShzdHlsZS5nZXQoKSk7CisgICAgc3RhdGUuc2V0TGluZUhlaWdo
dFZhbHVlKDApOwogCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgd2l0aCAhaW1wb3J0
YW50LiBTaW5jZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8gZGVjbCwgdGhlcmUncyBu
b3RoaW5nIHRvIG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3QgcHJvcGVydGllcy4KICAg
ICBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZTsKICAgICBpZiAoa2V5ZnJhbWUtPnByb3BlcnRp
ZXMoKSkKLSAgICAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0
aWVzPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0g
MSwgaW5oZXJpdGVkT25seSk7CisgICAgICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFBy
aW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVk
UHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKIAogICAgIC8vIElmIG91ciBm
b250IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4KLSAgICB1cGRhdGVG
b250KCk7CisgICAgdXBkYXRlRm9udChzdGF0ZSk7CiAKICAgICAvLyBMaW5lLWhlaWdodCBpcyBz
ZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUKLSAgICBpZiAo
bV9saW5lSGVpZ2h0VmFsdWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5l
SGVpZ2h0LCBtX2xpbmVIZWlnaHRWYWx1ZSk7CisgICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1
ZSgpKQorICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQs
IHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKTsKIAogICAgIC8vIE5vdyBkbyByZXN0IG9mIHRoZSBw
cm9wZXJ0aWVzLgogICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQotICAgICAgICBhcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwg
MCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwor
ICAgICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3Rh
dGUsIHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAx
LCBpbmhlcml0ZWRPbmx5KTsKIAogICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkIGJ5IG9u
ZSBvZiB0aGUgbm9uLWVzc2VudGlhbCBmb250IHByb3BzLAogICAgIC8vIGdvIGFoZWFkIGFuZCB1
cGRhdGUgaXQgYSBzZWNvbmQgdGltZS4KLSAgICB1cGRhdGVGb250KCk7CisgICAgdXBkYXRlRm9u
dChzdGF0ZSk7CiAKICAgICAvLyBTdGFydCBsb2FkaW5nIHJlc291cmNlcyByZWZlcmVuY2VkIGJ5
IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoKTsKKyAgICBsb2FkUGVuZGlu
Z1Jlc291cmNlcyhzdGF0ZSk7CiAgICAgCiAgICAgLy8gQWRkIGFsbCB0aGUgYW5pbWF0aW5nIHBy
b3BlcnRpZXMgdG8gdGhlIGtleWZyYW1lLgogICAgIGlmIChjb25zdCBTdHlsZVByb3BlcnR5U2V0
KiBzdHlsZURlY2xhcmF0aW9uID0ga2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkgewpAQCAtMTY2OCw3
ICsxNjM1LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVG
b3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSogZWxlbWUKIAogICAgIGRvY3VtZW50KCktPmRp
ZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIAotICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsK
KyAgICByZXR1cm4gc3R5bGUucmVsZWFzZSgpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Omtl
eWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBl
bGVtZW50U3R5bGUsIEtleWZyYW1lTGlzdCYgbGlzdCkKQEAgLTE2ODksMTUgKzE2NTYsMTYgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBl
LCBjb25zdCBSZW5kZXJTdHlsZSogZWwKIAogICAgIC8vIENvbnN0cnVjdCBhbmQgcG9wdWxhdGUg
dGhlIHN0eWxlIGZvciBlYWNoIGtleWZyYW1lCiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHls
ZUtleWZyYW1lPiA+JiBrZXlmcmFtZXMgPSBrZXlmcmFtZXNSdWxlLT5rZXlmcmFtZXMoKTsKKyAg
ICBTdHlsZVJlc29sdmVTdGF0ZSBzdGF0ZTsKKyAgICBpbml0RWxlbWVudChzdGF0ZSwgZSk7Cisg
ICAgaW5pdEZvclN0eWxlUmVzb2x2ZShzdGF0ZSwgZSk7CisgICAgCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGtleWZyYW1lcy5zaXplKCk7ICsraSkgewogICAgICAgICAvLyBBcHBseSB0
aGUgZGVjbGFyYXRpb24gdG8gdGhlIHN0eWxlLiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9u
IG9mIHRoZSBsb2dpYyBpbiBzdHlsZUZvckVsZW1lbnQKLSAgICAgICAgaW5pdEVsZW1lbnQoZSk7
Ci0gICAgICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSk7Ci0KICAgICAgICAgY29uc3QgU3R5bGVL
ZXlmcmFtZSoga2V5ZnJhbWUgPSBrZXlmcmFtZXNbaV0uZ2V0KCk7CiAKICAgICAgICAgS2V5ZnJh
bWVWYWx1ZSBrZXlmcmFtZVZhbHVlKDAsIDApOwotICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0
eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCBrZXlmcmFtZSwga2V5ZnJhbWVWYWx1
ZSkpOworICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoc3Rh
dGUsIGVsZW1lbnRTdHlsZSwga2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKIAogICAgICAgICAv
LyBBZGQgdGhpcyBrZXlmcmFtZSBzdHlsZSB0byBhbGwgdGhlIGluZGljYXRlZCBrZXkgdGltZXMK
ICAgICAgICAgVmVjdG9yPGZsb2F0PiBrZXlzOwpAQCAtMTcxNyw3ICsxNjg1LDcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25z
dCBSZW5kZXJTdHlsZSogZWwKICAgICAgICAgICAgIHplcm9QZXJjZW50S2V5ZnJhbWUtPnNldEtl
eVRleHQoIjAlIik7CiAgICAgICAgIH0KICAgICAgICAgS2V5ZnJhbWVWYWx1ZSBrZXlmcmFtZVZh
bHVlKDAsIDApOwotICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJh
bWUoZWxlbWVudFN0eWxlLCB6ZXJvUGVyY2VudEtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7Cisg
ICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShzdGF0ZSwgZWxl
bWVudFN0eWxlLCB6ZXJvUGVyY2VudEtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7CiAgICAgICAg
IGxpc3QuaW5zZXJ0KGtleWZyYW1lVmFsdWUpOwogICAgIH0KIApAQCAtMTcyOSw2MiArMTY5Nyw2
OCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1l
bnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbAogICAgICAgICAgICAgaHVuZHJlZFBlcmNlbnRL
ZXlmcmFtZS0+c2V0S2V5VGV4dCgiMTAwJSIpOwogICAgICAgICB9CiAgICAgICAgIEtleWZyYW1l
VmFsdWUga2V5ZnJhbWVWYWx1ZSgxLCAwKTsKLSAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHls
ZShzdHlsZUZvcktleWZyYW1lKGVsZW1lbnRTdHlsZSwgaHVuZHJlZFBlcmNlbnRLZXlmcmFtZSwg
a2V5ZnJhbWVWYWx1ZSkpOworICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9y
S2V5ZnJhbWUoc3RhdGUsIGVsZW1lbnRTdHlsZSwgaHVuZHJlZFBlcmNlbnRLZXlmcmFtZSwga2V5
ZnJhbWVWYWx1ZSkpOwogICAgICAgICBsaXN0Lmluc2VydChrZXlmcmFtZVZhbHVlKTsKICAgICB9
CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxl
Rm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sIEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSkKIHsKLSAgICBBU1NFUlQobV9wYXJlbnRTdHlsZSk7CiAgICAgaWYgKCFlKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIGluaXRFbGVtZW50KGUpOworICAgIFN0eWxlUmVzb2x2ZVN0
YXRlIHN0YXRlOworICAgIGluaXRFbGVtZW50KHN0YXRlLCBlKTsKKyAgICBpbml0Rm9yU3R5bGVS
ZXNvbHZlKHN0YXRlLCBlLCBwYXJlbnRTdHlsZSk7CiAKLSAgICBpbml0Rm9yU3R5bGVSZXNvbHZl
KGUsIHBhcmVudFN0eWxlLCBwc2V1ZG8pOwotICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3Jl
YXRlKCk7Ci0gICAgbV9zdHlsZS0+aW5oZXJpdEZyb20obV9wYXJlbnRTdHlsZSk7CisgICAgUmVm
UHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBzdHls
ZS0+aW5oZXJpdEZyb20oc3RhdGUucGFyZW50U3R5bGUoKSk7CisgICAgc3RhdGUuc2V0UHNldWRv
U3R5bGUocHNldWRvKTsKKyAgICBzdGF0ZS5zZXRTdHlsZShzdHlsZS5nZXQoKSk7CiAKICAgICAv
LyBTaW5jZSB3ZSBkb24ndCB1c2UgcHNldWRvLWVsZW1lbnRzIGluIGFueSBvZiBvdXIgcXVpcmsv
cHJpbnQgdXNlciBhZ2VudCBydWxlcywgZG9uJ3Qgd2FzdGUgdGltZSB3YWxraW5nCiAgICAgLy8g
dGhvc2UgcnVsZXMuCiAKICAgICAvLyBDaGVjayBVQSwgdXNlciBhbmQgYXV0aG9yIHJ1bGVzLgor
CiAgICAgTWF0Y2hSZXN1bHQgbWF0Y2hSZXN1bHQ7Ci0gICAgbWF0Y2hVQVJ1bGVzKG1hdGNoUmVz
dWx0KTsKKyAgICBtYXRjaFVBUnVsZXMoc3RhdGUsIG1hdGNoUmVzdWx0KTsKIAogICAgIGlmICht
X21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykgewotICAgICAgICBtYXRjaFVzZXJSdWxlcyhtYXRj
aFJlc3VsdCwgZmFsc2UpOwotICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKG1hdGNoUmVzdWx0LCBm
YWxzZSk7CisgICAgICAgIG1hdGNoVXNlclJ1bGVzKHN0YXRlLCBtYXRjaFJlc3VsdCk7CisgICAg
ICAgIG1hdGNoQXV0aG9yUnVsZXMoc3RhdGUsIG1hdGNoUmVzdWx0KTsKICAgICB9CiAKICAgICBp
ZiAobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIG1fc3R5bGUtPnNldFN0eWxlVHlwZShwc2V1ZG8pOworICAgIHN0eWxlLT5z
ZXRTdHlsZVR5cGUocHNldWRvKTsKIAotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hS
ZXN1bHQsIGUpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoc3RhdGUsIG1hdGNoUmVzdWx0
LCBlKTsKIAogICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0
ZXh0IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRlclN0
eWxlKHN0eWxlKCksIHBhcmVudFN0eWxlLCAwKTsKKyAgICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0
ZSwgc3R5bGUuZ2V0KCksIHN0YXRlLnBhcmVudFN0eWxlKCksIDApOwogCiAgICAgLy8gU3RhcnQg
bG9hZGluZyByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5k
aW5nUmVzb3VyY2VzKCk7CisgICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoc3RhdGUpOwogCiAgICAg
ZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCiAgICAgLy8gTm93IHJldHVy
biB0aGUgc3R5bGUuCi0gICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOworICAgIHJldHVybiBz
dHlsZS5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2
ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogewotICAgIGluaXRGb3JTdHlsZVJlc29s
dmUoZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpOyAvLyBtX3Jvb3RFbGVtZW50U3R5bGUg
d2lsbCBiZSBzZXQgdG8gdGhlIGRvY3VtZW50IHN0eWxlLgorICAgIFN0eWxlUmVzb2x2ZVN0YXRl
IHN0YXRlOworICAgIGluaXRGb3JTdHlsZVJlc29sdmUoc3RhdGUsIGRvY3VtZW50KCktPmRvY3Vt
ZW50RWxlbWVudCgpKTsgLy8gbV9yb290RWxlbWVudFN0eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBk
b2N1bWVudCBzdHlsZS4KIAotICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0g
ICAgbV9zdHlsZS0+aW5oZXJpdEZyb20obV9yb290RWxlbWVudFN0eWxlKTsKKyAgICBSZWZQdHI8
UmVuZGVyU3R5bGU+IHN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgIHN0eWxlLT5p
bmhlcml0RnJvbShzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOworICAgIHN0YXRlLnNldEVsZW1l
bnQoZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpOworICAgIHN0YXRlLnNldFN0eWxlKHN0
eWxlLmdldCgpKTsKIAotICAgIGNvbnN0IGJvb2wgaXNMZWZ0ID0gaXNMZWZ0UGFnZShwYWdlSW5k
ZXgpOworICAgIGNvbnN0IGJvb2wgaXNMZWZ0ID0gaXNMZWZ0UGFnZShzdGF0ZS5yb290RWxlbWVu
dFN0eWxlKCksIHBhZ2VJbmRleCk7CiAgICAgY29uc3QgYm9vbCBpc0ZpcnN0ID0gaXNGaXJzdFBh
Z2UocGFnZUluZGV4KTsKICAgICBjb25zdCBTdHJpbmcgcGFnZSA9IHBhZ2VOYW1lKHBhZ2VJbmRl
eCk7CiAgICAgCkBAIC0xNzkzLDQyICsxNzY3LDQ1IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogICAgIG1hdGNoUGFn
ZVJ1bGVzKHJlc3VsdCwgbV91c2VyU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7
CiAgICAgLy8gT25seSBjb25zaWRlciB0aGUgZ2xvYmFsIGF1dGhvciBSdWxlU2V0IGZvciBAcGFn
ZSBydWxlcywgYXMgcGVyIHRoZSBIVE1MNSBzcGVjLgogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3Vs
dCwgbV9hdXRob3JTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKLSAgICBtX2xp
bmVIZWlnaHRWYWx1ZSA9IDA7CisgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwogICAg
IGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOwogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQot
ICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4ocmVzdWx0LCBm
YWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9u
bHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4oc3Rh
dGUsIHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAx
LCBpbmhlcml0ZWRPbmx5KTsKICNlbmRpZgotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGln
aFByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9w
ZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIHJlc3VsdCwgZmFsc2UsIDAsIHJl
c3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKIAogICAg
IC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4K
LSAgICB1cGRhdGVGb250KCk7CisgICAgdXBkYXRlRm9udChzdGF0ZSk7CiAKICAgICAvLyBMaW5l
LWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNp
emUuCi0gICAgaWYgKG1fbGluZUhlaWdodFZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOworICAgIGlmIChzdGF0ZS5s
aW5lSGVpZ2h0VmFsdWUoKSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVy
dHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7CiAKLSAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVz
dWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworICAgIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgcmVzdWx0
LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRl
ZE9ubHkpOwogCiAgICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0
aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CisgICAgbG9hZFBlbmRpbmdS
ZXNvdXJjZXMoc3RhdGUpOwogCiAgICAgZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZl
cigpOwogCiAgICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUuCi0gICAgcmV0dXJuIG1fc3R5bGUu
cmVsZWFzZSgpOworICAgIHJldHVybiBzdHlsZS5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKQogewot
ICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFJlbmRlclN0
eWxlPiBzdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBTdHlsZVJlc29sdmVTdGF0
ZSBzdGF0ZTsKKyAgICBzdGF0ZS5zZXRFbGVtZW50KGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVu
dCgpKTsKKyAgICBzdGF0ZS5zZXRTdHlsZShzdHlsZS5nZXQoKSk7CiAgICAgLy8gTWFrZSBzdXJl
IG91ciBmb250cyBhcmUgaW5pdGlhbGl6ZWQgaWYgd2UgZG9uJ3QgaW5oZXJpdCB0aGVtIGZyb20g
b3VyIHBhcmVudCBzdHlsZS4KICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnRT
ZXR0aW5ncygpKSB7Ci0gICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOwotICAg
ICAgICBtX3N0eWxlLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgaW5p
dGlhbGl6ZUZvbnRTdHlsZShzdGF0ZSwgc2V0dGluZ3MpOworICAgICAgICBzdHlsZS0+Zm9udCgp
LnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fc3R5bGUtPmZv
bnQoKS51cGRhdGUoMCk7CisgICAgICAgIHN0eWxlLT5mb250KCkudXBkYXRlKDApOwogCi0gICAg
cmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOworICAgIHJldHVybiBzdHlsZS5yZWxlYXNlKCk7CiB9
CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yVGV4dChU
ZXh0KiB0ZXh0Tm9kZSkKQEAgLTE5MjMsNyArMTkwMCw3IEBAIHN0YXRpYyBib29sIGlzRGlzcGxh
eUZsZXhpYmxlQm94KEVEaXNwbGF5IGRpc3BsYXkpCiAgICAgcmV0dXJuIGRpc3BsYXkgPT0gRkxF
WCB8fCBkaXNwbGF5ID09IElOTElORV9GTEVYOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFk
anVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlLCBFbGVtZW50ICplKQordm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShT
dHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlLCBFbGVtZW50ICplKQogewogICAgIEFTU0VSVChwYXJlbnRTdHlsZSk7CiAK
QEAgLTE5MzUsNyArMTkxMiw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5
bGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5CiAgICAgICAgIC8v
IHByb3BlcnR5LgogICAgICAgICAvLyBTaXRlcyBhbHNvIGNvbW1vbmx5IHVzZSBkaXNwbGF5Omlu
bGluZS9ibG9jayBvbiA8dGQ+cyBhbmQgPHRhYmxlPnMuIEluIHF1aXJrcyBtb2RlIHdlIGZvcmNl
CiAgICAgICAgIC8vIHRoZXNlIHRhZ3MgdG8gcmV0YWluIHRoZWlyIGRpc3BsYXkgdHlwZXMuCi0g
ICAgICAgIGlmICghbV9zZWxlY3RvckNoZWNrZXIuc3RyaWN0UGFyc2luZygpICYmIGUpIHsKKyAg
ICAgICAgaWYgKGRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpICYmIGUpIHsKICAgICAgICAgICAg
IGlmIChlLT5oYXNUYWdOYW1lKHRkVGFnKSkgewogICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRE
aXNwbGF5KFRBQkxFX0NFTEwpOwogICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRGbG9hdGluZyhO
b0Zsb2F0KTsKQEAgLTE5ODIsNyArMTk1OSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0
UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5CiAK
ICAgICAgICAgLy8gQWJzb2x1dGUvZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cywgZmxvYXRpbmcg
ZWxlbWVudHMgYW5kIHRoZSBkb2N1bWVudCBlbGVtZW50IG5lZWQgYmxvY2stbGlrZSBvdXRzaWRl
IGRpc3BsYXkuCiAgICAgICAgIGlmIChzdHlsZS0+aGFzT3V0T2ZGbG93UG9zaXRpb24oKSB8fCBz
dHlsZS0+aXNGbG9hdGluZygpIHx8IChlICYmIGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVu
dCgpID09IGUpKQotICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoZXF1aXZhbGVudEJsb2Nr
RGlzcGxheShzdHlsZS0+ZGlzcGxheSgpLCBzdHlsZS0+aXNGbG9hdGluZygpLCBtX3NlbGVjdG9y
Q2hlY2tlci5zdHJpY3RQYXJzaW5nKCkpKTsKKyAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5
KGVxdWl2YWxlbnRCbG9ja0Rpc3BsYXkoc3R5bGUtPmRpc3BsYXkoKSwgc3R5bGUtPmlzRmxvYXRp
bmcoKSwgIWRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKSk7CiAKICAgICAgICAgLy8gRklYTUU6
IERvbid0IHN1cHBvcnQgdGhpcyBtdXRhdGlvbiBmb3IgcHNldWRvIHN0eWxlcyBsaWtlIGZpcnN0
LWxldHRlciBvciBmaXJzdC1saW5lLCBzaW5jZSBpdCdzIG5vdCBjb21wbGV0ZWx5CiAgICAgICAg
IC8vIGNsZWFyIGhvdyB0aGF0IHNob3VsZCB3b3JrLgpAQCAtMjAxMiw3ICsxOTg5LDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHkKIAogICAgICAgICBpZiAoaXNEaXNwbGF5RmxleGlibGVCb3go
cGFyZW50U3R5bGUtPmRpc3BsYXkoKSkpIHsKICAgICAgICAgICAgIHN0eWxlLT5zZXRGbG9hdGlu
ZyhOb0Zsb2F0KTsKLSAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KGVxdWl2YWxlbnRCbG9j
a0Rpc3BsYXkoc3R5bGUtPmRpc3BsYXkoKSwgc3R5bGUtPmlzRmxvYXRpbmcoKSwgbV9zZWxlY3Rv
ckNoZWNrZXIuc3RyaWN0UGFyc2luZygpKSk7CisgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxh
eShlcXVpdmFsZW50QmxvY2tEaXNwbGF5KHN0eWxlLT5kaXNwbGF5KCksIHN0eWxlLT5pc0Zsb2F0
aW5nKCksICFkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkpOwogICAgICAgICB9CiAKICNpZiBF
TkFCTEUoRElBTE9HX0VMRU1FTlQpCkBAIC0yMTE2LDcgKzIwOTMsNyBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eQogCiAgICAgLy8gTGV0IHRoZSB0aGVtZSBhbHNvIGhhdmUgYSBjcmFjayBhdCBh
ZGp1c3RpbmcgdGhlIHN0eWxlLgogICAgIGlmIChzdHlsZS0+aGFzQXBwZWFyYW5jZSgpKQotICAg
ICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmFkanVzdFN0eWxlKHRoaXMsIHN0eWxl
LCBlLCBtX2hhc1VBQXBwZWFyYW5jZSwgbV9ib3JkZXJEYXRhLCBtX2JhY2tncm91bmREYXRhLCBt
X2JhY2tncm91bmRDb2xvcik7CisgICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+
YWRqdXN0U3R5bGUodGhpcywgc3R5bGUsIGUsIHN0YXRlLmhhc1VBQXBwZWFyYW5jZSgpLCBzdGF0
ZS5ib3JkZXJEYXRhKCksIHN0YXRlLmJhY2tncm91bmREYXRhKCksIHN0YXRlLmJhY2tncm91bmRD
b2xvcigpKTsKIAogICAgIC8vIElmIHdlIGhhdmUgZmlyc3QtbGV0dGVyIHBzZXVkbyBzdHlsZSwg
ZG8gbm90IHNoYXJlIHRoaXMgc3R5bGUuCiAgICAgaWYgKHN0eWxlLT5oYXNQc2V1ZG9TdHlsZShG
SVJTVF9MRVRURVIpKQpAQCAtMjE5NywyNyArMjE3NCwxNyBAQCBzdGF0aWMgdm9pZCBjaGVja0Zv
ck9yaWVudGF0aW9uQ2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSkKICAgICBzdHlsZS0+c2V0Rm9u
dERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZl
cjo6dXBkYXRlRm9udCgpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoU3R5bGVSZXNv
bHZlU3RhdGUmIHN0YXRlKQogewotICAgIGlmICghbV9mb250RGlydHkpCisgICAgaWYgKCFzdGF0
ZS5mb250RGlydHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2hlY2tGb3JUZXh0U2l6ZUFk
anVzdCgpOwotICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShzdHlsZSgpLCBtX3BhcmVu
dFN0eWxlKTsKLSAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3R5bGUoKSwgbV9wYXJlbnRTdHlsZSk7
Ci0gICAgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShzdHlsZSgpKTsKLSAgICBtX3N0eWxlLT5m
b250KCkudXBkYXRlKG1fZm9udFNlbGVjdG9yKTsKLSAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOwot
fQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpCi17Ci0g
ICAgbV9oYXNVQUFwcGVhcmFuY2UgPSBtX3N0eWxlLT5oYXNBcHBlYXJhbmNlKCk7Ci0gICAgaWYg
KG1faGFzVUFBcHBlYXJhbmNlKSB7Ci0gICAgICAgIG1fYm9yZGVyRGF0YSA9IG1fc3R5bGUtPmJv
cmRlcigpOwotICAgICAgICBtX2JhY2tncm91bmREYXRhID0gKm1fc3R5bGUtPmJhY2tncm91bmRM
YXllcnMoKTsKLSAgICAgICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBtX3N0eWxlLT5iYWNrZ3JvdW5k
Q29sb3IoKTsKLSAgICB9CisgICAgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdChzdGF0ZS5zdHlsZSgp
KTsKKyAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uoc3RhdGUsIHN0YXRlLnN0eWxlKCks
IHN0YXRlLnBhcmVudFN0eWxlKCkpOworICAgIGNoZWNrRm9yWm9vbUNoYW5nZShzdGF0ZSwgc3Rh
dGUuc3R5bGUoKSwgc3RhdGUucGFyZW50U3R5bGUoKSk7CisgICAgY2hlY2tGb3JPcmllbnRhdGlv
bkNoYW5nZShzdGF0ZS5zdHlsZSgpKTsKKyAgICBzdGF0ZS5zdHlsZSgpLT5mb250KCkudXBkYXRl
KG1fZm9udFNlbGVjdG9yKTsKKyAgICBzdGF0ZS5zZXRGb250RGlydHkoZmFsc2UpOwogfQogCiBQ
YXNzUmVmUHRyPENTU1J1bGVMaXN0PiBTdHlsZVJlc29sdmVyOjpzdHlsZVJ1bGVzRm9yRWxlbWVu
dChFbGVtZW50KiBlLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKQEAgLTIyMzAsNjYgKzIxOTcs
NzAgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVS
dWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgUHMKICAgICBpZiAoIWUgfHwgIWUtPmRvY3VtZW50
KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1f
c2VsZWN0b3JDaGVja2VyLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMp
OwotCi0gICAgaW5pdEVsZW1lbnQoZSk7Ci0gICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlLCAwLCBw
c2V1ZG9JZCk7CisgICAgU3R5bGVSZXNvbHZlU3RhdGUgc3RhdGU7CisgICAgaW5pdEVsZW1lbnQo
c3RhdGUsIGUpOworICAgIGluaXRGb3JTdHlsZVJlc29sdmUoc3RhdGUsIGUpOworICAgIHN0YXRl
LnNldFBzZXVkb1N0eWxlKHBzZXVkb0lkKTsKKyAgICBzdGF0ZS5zZXRNb2RlKFNlbGVjdG9yQ2hl
Y2tlcjo6Q29sbGVjdGluZ1J1bGVzKTsKIAogICAgIE1hdGNoUmVzdWx0IGR1bW15OwogICAgIGlm
IChydWxlc1RvSW5jbHVkZSAmIFVBQW5kVXNlckNTU1J1bGVzKSB7CiAgICAgICAgIC8vIEZpcnN0
IHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhlIHVzZXIgYWdlbnQgc2hlZXQuCi0gICAgICAgIG1hdGNo
VUFSdWxlcyhkdW1teSk7CisgICAgICAgIG1hdGNoVUFSdWxlcyhzdGF0ZSwgZHVtbXkpOwogCiAg
ICAgICAgIC8vIE5vdyB3ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVzLgotICAgICAgICBpZiAobV9t
YXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAgICAgICAgICBtYXRjaFVzZXJSdWxlcyhkdW1t
eSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKKyAgICAgICAgaWYgKG1fbWF0Y2hB
dXRob3JBbmRVc2VyU3R5bGVzKSB7CisgICAgICAgICAgICBzdGF0ZS5zZXRJbmNsdWRlRW1wdHlS
dWxlcyhydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOworICAgICAgICAgICAgbWF0Y2hV
c2VyUnVsZXMoc3RhdGUsIGR1bW15KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChtX21h
dGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiAocnVsZXNUb0luY2x1ZGUgJiBBdXRob3JDU1NSdWxl
cykpIHsKLSAgICAgICAgbV9zYW1lT3JpZ2luT25seSA9ICEocnVsZXNUb0luY2x1ZGUgJiBDcm9z
c09yaWdpbkNTU1J1bGVzKTsKLQorICAgICAgICBzdGF0ZS5zZXRTYW1lT3JpZ2luT25seSghKHJ1
bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcykpOworICAgICAgICBzdGF0ZS5zZXRJ
bmNsdWRlRW1wdHlSdWxlcyhydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOworICAgICAg
ICAKICAgICAgICAgLy8gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVldHMuCi0gICAgICAg
IG1hdGNoQXV0aG9yUnVsZXMoZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7
Ci0KLSAgICAgICAgbV9zYW1lT3JpZ2luT25seSA9IGZhbHNlOworICAgICAgICBtYXRjaEF1dGhv
clJ1bGVzKHN0YXRlLCBkdW1teSk7CiAgICAgfQotCi0gICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0
TW9kZShTZWxlY3RvckNoZWNrZXI6OlJlc29sdmluZ1N0eWxlKTsKLQotICAgIHJldHVybiBtX3J1
bGVMaXN0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3RhdGUucnVsZUxpc3QoKS5yZWxlYXNlKCk7
CiB9CiAKLWlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OnJ1bGVNYXRjaGVzKGNvbnN0IFJ1bGVE
YXRhJiBydWxlRGF0YSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCitpbmxpbmUgYm9vbCBT
dHlsZVJlc29sdmVyOjpydWxlTWF0Y2hlcyhTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIGNvbnN0
IFJ1bGVEYXRhJiBydWxlRGF0YSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIFBzZXVkb0lk
JiBkeW5hbWljUHNldWRvKQogewotICAgIG1fZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50KCk7CiAKICAgICBpZiAocnVsZURhdGEu
aGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKCkpIHsKICAgICAgICAgLy8gV2Uga25vdyB0aGlzIHNl
bGVjdG9yIGRvZXMgbm90IGluY2x1ZGUgYW55IHBzZXVkbyBlbGVtZW50cy4KLSAgICAgICAgaWYg
KG1fcHNldWRvU3R5bGUgIT0gTk9QU0VVRE8pCisgICAgICAgIGlmIChzdGF0ZS5wc2V1ZG9TdHls
ZSgpICE9IE5PUFNFVURPKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAvLyBX
ZSBrbm93IGEgc3VmZmljaWVudGx5IHNpbXBsZSBzaW5nbGUgcGFydCBzZWxlY3RvciBtYXRjaGVz
IHNpbXBseSBiZWNhdXNlIHdlIGZvdW5kIGl0IGZyb20gdGhlIHJ1bGUgaGFzaC4KICAgICAgICAg
Ly8gVGhpcyBpcyBsaW1pdGVkIHRvIEhUTUwgb25seSBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNr
IHRoZSBuYW1lc3BhY2UuCi0gICAgICAgIGlmIChydWxlRGF0YS5oYXNSaWdodG1vc3RTZWxlY3Rv
ck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaCgpICYmIG1fZWxlbWVudC0+aXNIVE1MRWxlbWVu
dCgpKSB7CisgICAgICAgIGlmIChydWxlRGF0YS5oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5n
SFRNTEJhc2VkT25SdWxlSGFzaCgpICYmIGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkgewogICAg
ICAgICAgICAgaWYgKCFydWxlRGF0YS5oYXNNdWx0aXBhcnRTZWxlY3RvcigpKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChydWxlRGF0YS5zZWxl
Y3RvcigpLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpUYWcgJiYgIVNlbGVjdG9yQ2hlY2tlcjo6
dGFnTWF0Y2hlcyhtX2VsZW1lbnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCktPnRhZ1FOYW1lKCkpKQor
ICAgICAgICBpZiAocnVsZURhdGEuc2VsZWN0b3IoKS0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6
VGFnICYmICFTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMoZWxlbWVudCwgcnVsZURhdGEuc2Vs
ZWN0b3IoKS0+dGFnUU5hbWUoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGlmICghU2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hlY2tSaWdodG1vc3RBdHRyaWJ1dGVTZWxlY3Rv
cihtX2VsZW1lbnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCkpKQorICAgICAgICBpZiAoIVNlbGVjdG9y
Q2hlY2tlcjo6ZmFzdENoZWNrUmlnaHRtb3N0QXR0cmlidXRlU2VsZWN0b3IoZWxlbWVudCwgcnVs
ZURhdGEuc2VsZWN0b3IoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJl
dHVybiBtX3NlbGVjdG9yQ2hlY2tlci5mYXN0Q2hlY2socnVsZURhdGEuc2VsZWN0b3IoKSwgbV9l
bGVtZW50KTsKKworICAgICAgICByZXR1cm4gU2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hlY2socnVs
ZURhdGEuc2VsZWN0b3IoKSwgZWxlbWVudCk7CiAgICAgfQogCiAgICAgLy8gU2xvdyBwYXRoLgot
ICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgY29udGV4dChydWxl
RGF0YS5zZWxlY3RvcigpLCBtX2VsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNo
RW5hYmxlZCk7Ci0gICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBzdHlsZSgpOwotICAgIGNvbnRl
eHQuZWxlbWVudFBhcmVudFN0eWxlID0gbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5yZW5k
ZXJTdHlsZSgpIDogMDsKKyAgICBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250
ZXh0IGNvbnRleHQocnVsZURhdGEuc2VsZWN0b3IoKSwgZWxlbWVudCwgU2VsZWN0b3JDaGVja2Vy
OjpWaXNpdGVkTWF0Y2hFbmFibGVkKTsKKyAgICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IHN0YXRl
LnN0eWxlKCk7CisgICAgY29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgPSAwOwogICAgIGNvbnRl
eHQuc2NvcGUgPSBzY29wZTsKLSAgICBjb250ZXh0LnBzZXVkb1N0eWxlID0gbV9wc2V1ZG9TdHls
ZTsKLSAgICBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gbV9zZWxlY3RvckNoZWNrZXIu
bWF0Y2goY29udGV4dCwgbV9keW5hbWljUHNldWRvLCBET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRl
Z3koKSk7CisgICAgY29udGV4dC5wc2V1ZG9TdHlsZSA9IHN0YXRlLnBzZXVkb1N0eWxlKCk7CisK
KyAgICAvLyBvbi1zdGFjaworICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZG9j
dW1lbnQoKSk7CisgICAgc2VsZWN0b3JDaGVja2VyLnNldE1vZGUoc3RhdGUubW9kZSgpKTsKKyAg
ICBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gc2VsZWN0b3JDaGVja2VyLm1hdGNoKGNv
bnRleHQsIGR5bmFtaWNQc2V1ZG8sIERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSgpKTsKICAg
ICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETyAmJiBtX3Bz
ZXVkb1N0eWxlICE9IG1fZHluYW1pY1BzZXVkbykKKyAgICBpZiAoc3RhdGUucHNldWRvU3R5bGUo
KSAhPSBOT1BTRVVETyAmJiBzdGF0ZS5wc2V1ZG9TdHlsZSgpICE9IGR5bmFtaWNQc2V1ZG8pCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIyOTksMTAgKzIy
NzAsOSBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9uU2VsZWN0b3IoQ1NTU2VsZWN0
b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZW50KiByZQogICAgIGlmICghcmVnaW9uU2VsZWN0b3Ig
fHwgIXJlZ2lvbkVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fcHNldWRv
U3R5bGUgPSBOT1BTRVVETzsKLQorICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIo
ZG9jdW1lbnQoKSk7CiAgICAgZm9yIChDU1NTZWxlY3RvciogcyA9IHJlZ2lvblNlbGVjdG9yOyBz
OyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKQotICAgICAgICBpZiAobV9zZWxlY3RvckNo
ZWNrZXIubWF0Y2hlcyhzLCByZWdpb25FbGVtZW50KSkKKyAgICAgICAgaWYgKHNlbGVjdG9yQ2hl
Y2tlci5tYXRjaGVzKHMsIHJlZ2lvbkVsZW1lbnQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzIyLDkgKzIyOTIsOSBAQCBMZW5ndGggU3R5bGVS
ZXNvbHZlcjo6Y29udmVydFRvRmxvYXRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlLCBSZQogfQogCiB0ZW1wbGF0ZSA8U3R5bGVSZXNvbHZlcjo6U3R5bGVBcHBsaWNhdGlv
blBhc3MgcGFzcz4KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0
eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgYm9vbCBpc0ltcG9y
dGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgcHJvcGVydHlX
aGl0ZWxpc3RUeXBlKQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnRpZXMoU3R5bGVS
ZXNvbHZlU3RhdGUmIHN0YXRlLCBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBT
dHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJv
cGVydHlXaGl0ZWxpc3RUeXBlIHByb3BlcnR5V2hpdGVsaXN0VHlwZSkKIHsKLSAgICBBU1NFUlQo
KHByb3BlcnR5V2hpdGVsaXN0VHlwZSAhPSBQcm9wZXJ0eVdoaXRlbGlzdFJlZ2lvbikgfHwgbV9y
ZWdpb25Gb3JTdHlsaW5nKTsKKyAgICBBU1NFUlQoKHByb3BlcnR5V2hpdGVsaXN0VHlwZSAhPSBQ
cm9wZXJ0eVdoaXRlbGlzdFJlZ2lvbikgfHwgc3RhdGUucmVnaW9uRm9yU3R5bGluZygpKTsKICAg
ICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsUHJvY2Vzc1J1bGUoZG9jdW1lbnQoKSwgcnVsZSwgdGhpcyk7CiAKICAg
ICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gcHJvcGVydGllcy0+cHJvcGVydHlDb3VudCgpOwpA
QCAtMjM1Miw3ICsyMzIyLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnRpZXMo
Y29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWwKICAgICAgICAgY2Fz
ZSBWYXJpYWJsZURlZmluaXRpb25zOgogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoQ1NTUHJv
cGVydHlWYXJpYWJsZSA8IGZpcnN0Q1NTUHJvcGVydHksIENTU192YXJpYWJsZV9pc19iZWZvcmVf
Zmlyc3RfcHJvcGVydHkpOwogICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5
VmFyaWFibGUpCi0gICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShjdXJyZW50LmlkKCksIGN1
cnJlbnQudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgY3Vy
cmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYK
ICAgICAgICAgY2FzZSBIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzOgpAQCAtMjM2NSw0MiArMjMzNSw0
MyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyhjb25zdCBTdHlsZVByb3Bl
cnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bAogI2VuZGlmCiAgICAgICAgICAgICAvLyBnaXZl
IHNwZWNpYWwgcHJpb3JpdHkgdG8gZm9udC14eHgsIGNvbG9yIHByb3BlcnRpZXMsIGV0YwogICAg
ICAgICAgICAgaWYgKHByb3BlcnR5IDwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQotICAgICAgICAg
ICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOworICAg
ICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIGN1cnJlbnQuaWQoKSwgY3VycmVudC52
YWx1ZSgpKTsKICAgICAgICAgICAgIC8vIHdlIGFwcGx5IGxpbmUtaGVpZ2h0IGxhdGVyCiAgICAg
ICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpCi0gICAg
ICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSBjdXJyZW50LnZhbHVlKCk7CisgICAgICAg
ICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKGN1cnJlbnQudmFsdWUoKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb3dQcmlvcml0eVByb3BlcnRpZXM6CiAgICAg
ICAgICAgICBpZiAocHJvcGVydHkgPiBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpCi0gICAgICAgICAg
ICAgICAgYXBwbHlQcm9wZXJ0eShjdXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CisgICAg
ICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgY3VycmVudC5pZCgpLCBjdXJyZW50LnZh
bHVlKCkpOwogICAgICAgICB9CiAgICAgfQogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkUHJvY2Vzc1J1bGUoY29va2llKTsKIH0KIAogdGVtcGxhdGUgPFN0eWxlUmVzb2x2ZXI6OlN0
eWxlQXBwbGljYXRpb25QYXNzIHBhc3M+Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hl
ZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBib29sIGlzSW1wb3J0
YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpCit2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoU3R5bGVSZXNvbHZlU3Rh
dGUmIHN0YXRlLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGJvb2wgaXNJbXBvcnRh
bnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25seSkKIHsK
ICAgICBpZiAoc3RhcnRJbmRleCA9PSAtMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1f
c3R5bGUtPmluc2lkZUxpbmsoKSAhPSBOb3RJbnNpZGVMaW5rKSB7CisgICAgaWYgKHN0YXRlLnN0
eWxlKCktPmluc2lkZUxpbmsoKSAhPSBOb3RJbnNpZGVMaW5rKSB7CiAgICAgICAgIGZvciAoaW50
IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0
IE1hdGNoZWRQcm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNo
ZWRQcm9wZXJ0aWVzW2ldOwogICAgICAgICAgICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9IG1h
dGNoZWRQcm9wZXJ0aWVzLmxpbmtNYXRjaFR5cGU7CiAgICAgICAgICAgICAvLyBGSVhNRTogSXQg
d291bGQgYmUgbmljZXIgdG8gcGFzcyB0aGVzZSBhcyBhcmd1bWVudHMgYnV0IHRoYXQgcmVxdWly
ZXMgY2hhbmdlcyBpbiBtYW55IHBsYWNlcy4KLSAgICAgICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlID0gbGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5r
OwotICAgICAgICAgICAgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlID0gbGlua01h
dGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOworICAgICAgICAgICAgc3Rh
dGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKGxpbmtNYXRjaFR5cGUgJiBTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoTGluayk7CisgICAgICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlKGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNo
VmlzaXRlZCk7CiAKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydGllczxwYXNzPihtYXRjaGVkUHJv
cGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlz
SW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5
cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUpKTsKKyAgICAgICAgICAgIGFwcGx5
UHJvcGVydGllczxwYXNzPihzdGF0ZSwgbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy5nZXQo
KSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFudCwgaW5oZXJpdGVkT25s
eSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPihtYXRjaGVkUHJvcGVydGllcy53
aGl0ZWxpc3RUeXBlKSk7CiAgICAgICAgIH0KLSAgICAgICAgbV9hcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUgPSB0cnVlOwotICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5
bGUgPSBmYWxzZTsKKyAgICAgICAgLy8gbmVlZCB0byByZXZlcnQ/IEkgdGhpbmssIHdlIGRvbid0
IG5lZWQuLi4KKyAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRy
dWUpOworICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZh
bHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBmb3IgKGludCBpID0gc3RhcnRJbmRl
eDsgaSA8PSBlbmRJbmRleDsgKytpKSB7CiAgICAgICAgIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVz
JiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzW2ldOwot
ICAgICAgICBhcHBseVByb3BlcnRpZXM8cGFzcz4obWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGll
cy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFudCwgaW5oZXJp
dGVkT25seSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPihtYXRjaGVkUHJvcGVy
dGllcy53aGl0ZWxpc3RUeXBlKSk7CisgICAgICAgIGFwcGx5UHJvcGVydGllczxwYXNzPihzdGF0
ZSwgbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0Y2hl
ZFJ1bGVzW2ldLCBpc0ltcG9ydGFudCwgaW5oZXJpdGVkT25seSwgc3RhdGljX2Nhc3Q8UHJvcGVy
dHlXaGl0ZWxpc3RUeXBlPihtYXRjaGVkUHJvcGVydGllcy53aGl0ZWxpc3RUeXBlKSk7CiAgICAg
fQogfQogCkBAIC0yNDk5LDkgKzI0NzAsMTEgQEAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVJbk1h
dGNoZWRQcm9wZXJ0aWVzQ2FjaGUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUmUKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QgRWxlbWVudCogZWxl
bWVudCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhTdHlsZVJl
c29sdmVTdGF0ZSYgc3RhdGUsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3Qg
RWxlbWVudCogZWxlbWVudCkKIHsKICAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgUmVuZGVyU3R5
bGUqIHN0eWxlID0gc3RhdGUuc3R5bGUoKTsKKyAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUg
PSBzdGF0ZS5wYXJlbnRTdHlsZSgpOwogICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9IG1hdGNoUmVz
dWx0LmlzQ2FjaGVhYmxlID8gY29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChtYXRjaFJlc3Vs
dC5tYXRjaGVkUHJvcGVydGllcy5kYXRhKCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVz
LnNpemUoKSkgOiAwOwogICAgIGJvb2wgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAgICAg
Y29uc3QgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0qIGNhY2hlSXRlbSA9IDA7CkBAIC0yNTA5
LDE1ICsyNDgyLDE2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGll
cyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIC8vIFdlIGNh
biBidWlsZCB1cCB0aGUgc3R5bGUgYnkgY29weWluZyBub24taW5oZXJpdGVkIHByb3BlcnRpZXMg
ZnJvbSBhbiBlYXJsaWVyIHN0eWxlIG9iamVjdCBidWlsdCB1c2luZyB0aGUgc2FtZSBleGFjdAog
ICAgICAgICAvLyBzdHlsZSBkZWNsYXJhdGlvbnMuIFdlIHRoZW4gb25seSBuZWVkIHRvIGFwcGx5
IHRoZSBpbmhlcml0ZWQgcHJvcGVydGllcywgaWYgYW55LCBhcyB0aGVpciB2YWx1ZXMgY2FuIGRl
cGVuZCBvbiB0aGUgCiAgICAgICAgIC8vIGVsZW1lbnQgY29udGV4dC4gVGhpcyBpcyBmYXN0IGFu
ZCBzYXZlcyBtZW1vcnkgYnkgcmV1c2luZyB0aGUgc3R5bGUgZGF0YSBzdHJ1Y3R1cmVzLgotICAg
ICAgICBtX3N0eWxlLT5jb3B5Tm9uSW5oZXJpdGVkRnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxl
LmdldCgpKTsKLSAgICAgICAgaWYgKG1fcGFyZW50U3R5bGUtPmluaGVyaXRlZERhdGFTaGFyZWQo
Y2FjaGVJdGVtLT5wYXJlbnRSZW5kZXJTdHlsZS5nZXQoKSkgJiYgIWlzQXRTaGFkb3dCb3VuZGFy
eShlbGVtZW50KSkgewotICAgICAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXR1cyA9IG1fc3R5
bGUtPmluc2lkZUxpbmsoKTsKKyAgICAgICAgc3R5bGUtPmNvcHlOb25Jbmhlcml0ZWRGcm9tKGNh
Y2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOworICAgICAgICAvLyBvcnoKKyAgICAgICAgaWYg
KHBhcmVudFN0eWxlLT5pbmhlcml0ZWREYXRhU2hhcmVkKGNhY2hlSXRlbS0+cGFyZW50UmVuZGVy
U3R5bGUuZ2V0KCkpICYmICFpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkpIHsKKyAgICAgICAg
ICAgIEVJbnNpZGVMaW5rIGxpbmtTdGF0dXMgPSBzdHlsZS0+aW5zaWRlTGluaygpOwogICAgICAg
ICAgICAgLy8gSWYgdGhlIGNhY2hlIGl0ZW0gcGFyZW50IHN0eWxlIGhhcyBpZGVudGljYWwgaW5o
ZXJpdGVkIHByb3BlcnRpZXMgdG8gdGhlIGN1cnJlbnQgcGFyZW50IHN0eWxlIHRoZW4gdGhlCiAg
ICAgICAgICAgICAvLyByZXN1bHRpbmcgc3R5bGUgd2lsbCBiZSBpZGVudGljYWwgdG9vLiBXZSBj
b3B5IHRoZSBpbmhlcml0ZWQgcHJvcGVydGllcyBvdmVyIGZyb20gdGhlIGNhY2hlIGFuZCBhcmUg
ZG9uZS4KLSAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKGNhY2hlSXRlbS0+cmVuZGVy
U3R5bGUuZ2V0KCkpOworICAgICAgICAgICAgc3R5bGUtPmluaGVyaXRGcm9tKGNhY2hlSXRlbS0+
cmVuZGVyU3R5bGUuZ2V0KCkpOwogCiAgICAgICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5IHRoZSBs
aW5rIHN0YXR1cyBpcyB0cmVhdGVkIGxpa2UgYW4gaW5oZXJpdGVkIHByb3BlcnR5LiBXZSBuZWVk
IHRvIGV4cGxpY2l0bHkgcmVzdG9yZSBpdC4KLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEluc2lk
ZUxpbmsobGlua1N0YXR1cyk7CisgICAgICAgICAgICBzdHlsZS0+c2V0SW5zaWRlTGluayhsaW5r
U3RhdHVzKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBhcHBseUlu
aGVyaXRlZE9ubHkgPSB0cnVlOyAKQEAgLTI1MjUsNjAgKzI0OTksNjAgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJl
c3VsdCwgY29uc3QKIAogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgIC8vIEZpcnN0IGFw
cGx5IGFsbCB2YXJpYWJsZSBkZWZpbml0aW9ucywgYXMgdGhleSBtYXkgYmUgdXNlZCBkdXJpbmcg
YXBwbGljYXRpb24gb2YgbGF0ZXIgcHJvcGVydGllcy4KLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0
aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KG1hdGNoUmVzdWx0LCBmYWxzZSwgMCwgbWF0Y2hSZXN1
bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAg
ICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KG1hdGNoUmVzdWx0
LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5y
YW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRj
aGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0
Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNl
clJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxW
YXJpYWJsZURlZmluaXRpb25zPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2Vz
LmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0
ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+
KHN0YXRlLCBtYXRjaFJlc3VsdCwgZmFsc2UsIDAsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0
aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1h
dGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0
QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0
aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1
bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJp
YWJsZURlZmluaXRpb25zPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJh
bmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5o
ZXJpdGVkT25seSk7CiAjZW5kaWYKIAogICAgIC8vIE5vdyB3ZSBoYXZlIGFsbCBvZiB0aGUgbWF0
Y2hlZCBydWxlcyBpbiB0aGUgYXBwcm9wcmlhdGUgb3JkZXIuIFdhbGsgdGhlIHJ1bGVzIGFuZCBh
cHBseQogICAgIC8vIGhpZ2gtcHJpb3JpdHkgcHJvcGVydGllcyBmaXJzdCwgaS5lLiwgdGhvc2Ug
cHJvcGVydGllcyB0aGF0IG90aGVyIHByb3BlcnRpZXMgZGVwZW5kIG9uLgogICAgIC8vIFRoZSBv
cmRlciBpcyAoMSkgaGlnaC1wcmlvcml0eSBub3QgaW1wb3J0YW50LCAoMikgaGlnaC1wcmlvcml0
eSBpbXBvcnRhbnQsICgzKSBub3JtYWwgbm90IGltcG9ydGFudAogICAgIC8vIGFuZCAoNCkgbm9y
bWFsIGltcG9ydGFudC4KLSAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7Ci0gICAgYXBwbHlNYXRj
aGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgZmFsc2Us
IDAsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJp
dGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0
aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVs
ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkp
OwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0
Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJl
c3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5
TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRy
dWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxh
c3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0KLSAgICBpZiAoY2FjaGVJdGVtICYmIGNh
Y2hlSXRlbS0+cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBtX3N0eWxlLT5lZmZlY3Rp
dmVab29tKCkpIHsKLSAgICAgICAgbV9mb250RGlydHkgPSB0cnVlOworICAgIHN0YXRlLnNldExp
bmVIZWlnaHRWYWx1ZSgwKTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0
eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgZmFsc2UsIDAsIG1hdGNoUmVzdWx0Lm1h
dGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hS
ZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVz
dWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJl
c3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0
LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRj
aGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQs
IHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2Vz
Lmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisKKyAgICBpZiAoY2FjaGVJdGVtICYm
IGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBzdHlsZS0+ZWZmZWN0
aXZlWm9vbSgpKSB7CisgICAgICAgIHN0YXRlLnNldEZvbnREaXJ0eSh0cnVlKTsKICAgICAgICAg
YXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gSWYgb3VyIGZvbnQg
Z290IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgotICAgIHVwZGF0ZUZvbnQo
KTsKKyAgICB1cGRhdGVGb250KHN0YXRlKTsKIAogICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3
aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZS4KLSAgICBpZiAobV9s
aW5lSGVpZ2h0VmFsdWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVp
Z2h0LCBtX2xpbmVIZWlnaHRWYWx1ZSk7CisgICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgp
KQorICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0
YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKTsKIAogICAgIC8vIE1hbnkgcHJvcGVydGllcyBkZXBlbmQg
b24gdGhlIGZvbnQuIElmIGl0IGNoYW5nZXMgd2UganVzdCBhcHBseSBhbGwgcHJvcGVydGllcy4K
LSAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpICE9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKQorICAgIGlmIChjYWNoZUl0ZW0g
JiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgIT0gc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpKQogICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkgPSBmYWxzZTsKIAog
ICAgIC8vIE5vdyBkbyB0aGUgbm9ybWFsIHByaW9yaXR5IFVBIHByb3BlcnRpZXMuCi0gICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCBm
YWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMu
bGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0
aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0
Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVs
ZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgICAKICAgICAvLyBDYWNoZSBvdXIgYm9yZGVyIGFu
ZCBiYWNrZ3JvdW5kIHNvIHRoYXQgd2UgY2FuIGV4YW1pbmUgdGhlbSBsYXRlci4KLSAgICBjYWNo
ZUJvcmRlckFuZEJhY2tncm91bmQoKTsKKyAgICBzdGF0ZS5jYWNoZUJvcmRlckFuZEJhY2tncm91
bmQoc3RhdGUuc3R5bGUoKSk7CiAgICAgCiAgICAgLy8gTm93IGRvIHRoZSBhdXRob3IgYW5kIHVz
ZXIgbm9ybWFsIHByaW9yaXR5IHByb3BlcnRpZXMgYW5kIGFsbCB0aGUgIWltcG9ydGFudCBwcm9w
ZXJ0aWVzLgotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVz
PihtYXRjaFJlc3VsdCwgZmFsc2UsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlICsgMSwg
bWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRP
bmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4o
bWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1h
dGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAg
ICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1
bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5y
YW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hl
ZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0
Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVs
ZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1By
aW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQu
cmFuZ2VzLmxhc3RVQVJ1bGUgKyAxLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXpl
KCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8
TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVz
dWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9y
UnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExv
d1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9y
aXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5n
ZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVy
aXRlZE9ubHkpOwogICAgCiAgICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVmZXJlbmNl
ZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CisgICAgbG9hZFBl
bmRpbmdSZXNvdXJjZXMoc3RhdGUpOwogICAgIAotICAgIEFTU0VSVCghbV9mb250RGlydHkpOwor
ICAgIEFTU0VSVCghc3RhdGUuZm9udERpcnR5KCkpOwogICAgIAogICAgIGlmIChjYWNoZUl0ZW0g
fHwgIWNhY2hlSGFzaCkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNDYWNoZWFibGVJbk1h
dGNoZWRQcm9wZXJ0aWVzQ2FjaGUobV9lbGVtZW50LCBtX3N0eWxlLmdldCgpLCBtX3BhcmVudFN0
eWxlKSkKKyAgICBpZiAoIWlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKGVsZW1l
bnQsIHN0eWxlLCBwYXJlbnRTdHlsZSkpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRUb01hdGNo
ZWRQcm9wZXJ0aWVzQ2FjaGUobV9zdHlsZS5nZXQoKSwgbV9wYXJlbnRTdHlsZSwgY2FjaGVIYXNo
LCBtYXRjaFJlc3VsdCk7CisgICAgYWRkVG9NYXRjaGVkUHJvcGVydGllc0NhY2hlKHN0eWxlLCBw
YXJlbnRTdHlsZSwgY2FjaGVIYXNoLCBtYXRjaFJlc3VsdCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBjb21wYXJlUGFnZVJ1bGVzKGNvbnN0IFN0eWxlUnVsZVBhZ2UqIHIxLCBjb25zdCBTdHls
ZVJ1bGVQYWdlKiByMikKQEAgLTI2NDAsMTAgKzI2MTQsMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjptYXRjaFBhZ2VSdWxlc0Zvckxpc3QoVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYgbWF0Y2hlZFJ1
bGVzLAogICAgIH0KIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjppc0xlZnRQYWdlKGludCBwYWdl
SW5kZXgpIGNvbnN0Citib29sIFN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2UoUmVuZGVyU3R5bGUq
IHJvb3RFbGVtZW50U3R5bGUsIGludCBwYWdlSW5kZXgpIGNvbnN0CiB7CiAgICAgYm9vbCBpc0Zp
cnN0UGFnZUxlZnQgPSBmYWxzZTsKLSAgICBpZiAoIW1fcm9vdEVsZW1lbnRTdHlsZS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpKQorICAgIGlmICghcm9vdEVsZW1lbnRTdHlsZS0+aXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpKQogICAgICAgICBpc0ZpcnN0UGFnZUxlZnQgPSB0cnVlOwogCiAgICAg
cmV0dXJuIChwYWdlSW5kZXggKyAoaXNGaXJzdFBhZ2VMZWZ0ID8gMSA6IDApKSAlIDI7CkBAIC0y
NzM5LDE4ICsyNzEzLDMyIEBAIENTU1N0eWxlUnVsZSogU3R5bGVSZXNvbHZlcjo6ZW5zdXJlRnVs
bENTU09NV3JhcHBlckZvckluc3BlY3RvcihTdHlsZVJ1bGUqIHJ1bGUpCiAgICAgcmV0dXJuIG1f
c3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAuZ2V0KHJ1bGUpLmdldCgpOwogfQogCi12b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlKQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5V2l0aFZhbHVlQ2hlY2tpbmcoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiB7Ci0gICAgaW5pdEVsZW1lbnQoMCk7Ci0g
ICAgaW5pdEZvclN0eWxlUmVzb2x2ZSgwLCBzdHlsZSk7Ci0gICAgbV9zdHlsZSA9IHN0eWxlOwot
ICAgIGFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShpZCwgdmFsdWUpOworICAgIGlmICh2YWx1
ZSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgaWQsIHZhbHVlKTsKIH0KIAotdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseUZvbnRQcm9wZXJ0
eVRvU3R5bGUoUmVuZGVyU3R5bGUqIHRhcmdldCwgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcmVm
ZXJlbmNlKQogewotICAgIGlmICh2YWx1ZSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShpZCwgdmFs
dWUpOworICAgIFN0eWxlUmVzb2x2ZVN0YXRlIHN0YXRlOworICAgIGluaXRFbGVtZW50KHN0YXRl
LCAwKTsKKyAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKHN0YXRlLCAwLCB0YXJnZXQpOworICAgIHN0
YXRlLnNldEVsZW1lbnQoZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpOworICAgIHN0YXRl
LnNldFN0eWxlKHRhcmdldCk7CisKKyAgICBhcHBseVByb3BlcnR5V2l0aFZhbHVlQ2hlY2tpbmco
c3RhdGUsIENTU1Byb3BlcnR5Rm9udEZhbWlseSwgcmVmZXJlbmNlLT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSkuZ2V0KCkpOworICAgIGFwcGx5UHJvcGVydHlXaXRo
VmFsdWVDaGVja2luZyhzdGF0ZSwgQ1NTUHJvcGVydHlGb250U3R5bGUsIHJlZmVyZW5jZS0+Z2V0
UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSkuZ2V0KCkpOworICAgIGFwcGx5
UHJvcGVydHlXaXRoVmFsdWVDaGVja2luZyhzdGF0ZSwgQ1NTUHJvcGVydHlGb250VmFyaWFudCwg
cmVmZXJlbmNlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFZhcmlhbnQpLmdl
dCgpKTsKKyAgICBhcHBseVByb3BlcnR5V2l0aFZhbHVlQ2hlY2tpbmcoc3RhdGUsIENTU1Byb3Bl
cnR5Rm9udFdlaWdodCwgcmVmZXJlbmNlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5
Rm9udFdlaWdodCkuZ2V0KCkpOworCisgICAgLy8gQXMgZGVzY3JpYmVkIGluIEJVRzY2MjkxLCBz
ZXR0aW5nIGZvbnQtc2l6ZSBhbmQgbGluZS1oZWlnaHQgb24gYSBmb250IG1heSBlbnRhaWwgYSBD
U1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aERvdWJsZSBjYWxsLAorICAgIC8vIHdoaWNo
IGFzc3VtZXMgdGhlIGZvbnRNZXRyaWNzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBhZmZlY3RlZCBm
b250LCBvdGhlcndpc2UgYSBjcmFzaCBvY2N1cnMgKHNlZSBodHRwOi8vdHJhYy53ZWJraXQub3Jn
L2NoYW5nZXNldC85NjEyMikuCisgICAgLy8gVGhlIHVwZGF0ZUZvbnQoKSBjYWxscyBiZWxvdyB1
cGRhdGUgdGhlIGZvbnRNZXRyaWNzIGFuZCBlbnN1cmUgdGhlIHByb3BlciBzZXR0aW5nIG9mIGZv
bnQtc2l6ZSBhbmQgbGluZS1oZWlnaHQuCisgICAgdXBkYXRlRm9udChzdGF0ZSk7CisgICAgYXBw
bHlQcm9wZXJ0eVdpdGhWYWx1ZUNoZWNraW5nKHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRTaXplLCBy
ZWZlcmVuY2UtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSkuZ2V0KCkp
OworICAgIHVwZGF0ZUZvbnQoc3RhdGUpOworICAgIGFwcGx5UHJvcGVydHlXaXRoVmFsdWVDaGVj
a2luZyhzdGF0ZSwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCByZWZlcmVuY2UtPmdldFByb3BlcnR5
Q1NTVmFsdWUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQoKSk7CiB9CiAKIGlubGluZSBib29s
IGlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpCkBAIC0yODQ1LDIw
ICsyODMzLDcgQEAgaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6aXNWYWxpZEN1ZVN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAjZW5kaWYKLS8v
IFNWRyBoYW5kbGVzIHpvb21pbmcgaW4gYSBkaWZmZXJlbnQgd2F5IGNvbXBhcmVkIHRvIENTUy4g
VGhlIHdob2xlIGRvY3VtZW50IGlzIHNjYWxlZCBpbnN0ZWFkCi0vLyBvZiBlYWNoIGluZGl2aWR1
YWwgbGVuZ3RoIHZhbHVlIGluIHRoZSByZW5kZXIgc3R5bGUgLyB0cmVlLiBDU1NQcmltaXRpdmVW
YWx1ZTo6Y29tcHV0ZUxlbmd0aCooKQotLy8gbXVsdGlwbGllcyBlYWNoIHJlc29sdmVkIGxlbmd0
aCB3aXRoIHRoZSB6b29tIG11bHRpcGxpZXIgLSBzbyBmb3IgU1ZHIHdlIG5lZWQgdG8gZGlzYWJs
ZSB0aGF0LgotLy8gVGhvdWdoIGFsbCBDU1MgdmFsdWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8g
b3V0ZXJtb3N0IDxzdmc+IGVsZW1lbnRzICh3aWR0aC9oZWlnaHQvYm9yZGVyL3BhZGRpbmcuLi4p
Ci0vLyBuZWVkIHRvIHJlc3BlY3QgdGhlIHNjYWxpbmcuIFJlbmRlckJveCAodGhlIHBhcmVudCBj
bGFzcyBvZiBSZW5kZXJTVkdSb290KSBncmFicyB2YWx1ZXMgbGlrZQotLy8gd2lkdGgvaGVpZ2h0
L2JvcmRlci9wYWRkaW5nLy4uLiBmcm9tIHRoZSBSZW5kZXJTdHlsZSAtPiBmb3IgU1ZHIHRoZXNl
IHZhbHVlcyB3b3VsZCBuZXZlciBzY2FsZSwKLS8vIGlmIHdlJ2QgcGFzcyBhIDEuMCB6b29tIGZh
Y3RvciBldmVyeWh3ZXJlLiBTbyB3ZSBvbmx5IHBhc3MgYSB6b29tIGZhY3RvciBvZiAxLjAgZm9y
IHNwZWNpZmljCi0vLyBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5PVCBhbGxvd2VkIHRvIHNjYWxlIHdp
dGhpbiBhIHpvb21lZCBTVkcgZG9jdW1lbnQgKGxldHRlci93b3JkLXNwYWNpbmcvZm9udC1zaXpl
KS4KLWJvb2wgU3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKCkKLXsKLSAgICByZXR1cm4g
bV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCk7Ci19Ci0KLXN0YXRpYyBib29s
IGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
LCBTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgTGVuZ3RoJiB3b3JraW5nTGVuZ3RoKQorc3RhdGlj
IGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgTGVuZ3RoJiB3b3JraW5nTGVuZ3RoKQog
ewogICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdE1p
bkNvbnRlbnQpIHsKICAgICAgICAgd29ya2luZ0xlbmd0aCA9IExlbmd0aChNaW5Db250ZW50KTsK
QEAgLTI4NzAsNyArMjg0NSw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgo
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBTdHlsZVJlc29sCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAotICAgIHdvcmtpbmdMZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+
Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lv
biB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oc2VsZWN0
b3ItPnN0eWxlKCksIHNlbGVjdG9yLT5yb290RWxlbWVudFN0eWxlKCksIHNlbGVjdG9yLT5zdHls
ZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAgIHdvcmtpbmdMZW5ndGggPSBwcmltaXRpdmVWYWx1
ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVy
c2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oc3Rh
dGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZl
Y3RpdmVab29tKCkpOwogICAgIGlmICh3b3JraW5nTGVuZ3RoLmlzVW5kZWZpbmVkKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjg4MCwxMiArMjg1NSwxMiBAQCBzdGF0aWMgYm9vbCBj
cmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwg
U3R5bGVSZXNvbAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlk
VHJhY2tNaW5NYXgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBTdHlsZVJlc29s
dmVyKiBzZWxlY3RvciwgR3JpZFRyYWNrU2l6ZSYgdHJhY2tTaXplKQorc3RhdGljIGJvb2wgY3Jl
YXRlR3JpZFRyYWNrTWluTWF4KENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgU3R5
bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBHcmlkVHJhY2tTaXplJiB0cmFja1NpemUpCiB7CiAgICAg
UGFpciogbWluTWF4VHJhY2tCcmVhZHRoID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1ZSgp
OwogICAgIGlmICghbWluTWF4VHJhY2tCcmVhZHRoKSB7CiAgICAgICAgIExlbmd0aCB3b3JraW5n
TGVuZ3RoOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgocHJpbWl0aXZlVmFs
dWUsIHNlbGVjdG9yLCB3b3JraW5nTGVuZ3RoKSkKKyAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJh
Y2tCcmVhZHRoKHByaW1pdGl2ZVZhbHVlLCBzdGF0ZSwgd29ya2luZ0xlbmd0aCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgdHJhY2tTaXplLnNldExlbmd0aCh3b3JraW5n
TGVuZ3RoKTsKQEAgLTI4OTQsMTQgKzI4NjksMTQgQEAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRy
YWNrTWluTWF4KENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgU3R5bGVSZXNvbHYK
IAogICAgIExlbmd0aCBtaW5UcmFja0JyZWFkdGg7CiAgICAgTGVuZ3RoIG1heFRyYWNrQnJlYWR0
aDsKLSAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgobWluTWF4VHJhY2tCcmVhZHRoLT5m
aXJzdCgpLCBzZWxlY3RvciwgbWluVHJhY2tCcmVhZHRoKSB8fCAhY3JlYXRlR3JpZFRyYWNrQnJl
YWR0aChtaW5NYXhUcmFja0JyZWFkdGgtPnNlY29uZCgpLCBzZWxlY3RvciwgbWF4VHJhY2tCcmVh
ZHRoKSkKKyAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgobWluTWF4VHJhY2tCcmVhZHRo
LT5maXJzdCgpLCBzdGF0ZSwgbWluVHJhY2tCcmVhZHRoKSB8fCAhY3JlYXRlR3JpZFRyYWNrQnJl
YWR0aChtaW5NYXhUcmFja0JyZWFkdGgtPnNlY29uZCgpLCBzdGF0ZSwgbWF4VHJhY2tCcmVhZHRo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgdHJhY2tTaXplLnNldE1pbk1heChtaW5U
cmFja0JyZWFkdGgsIG1heFRyYWNrQnJlYWR0aCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0
YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0dyb3VwKENTU1ZhbHVlKiB2YWx1ZSwgU3R5bGVSZXNv
bHZlciogc2VsZWN0b3IsIFZlY3RvcjxHcmlkVHJhY2tTaXplPiYgdHJhY2tTaXplcykKK3N0YXRp
YyBib29sIGNyZWF0ZUdyaWRUcmFja0dyb3VwKENTU1ZhbHVlKiB2YWx1ZSwgU3R5bGVSZXNvbHZl
U3RhdGUmIHN0YXRlLCBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6ZXMpCiB7CiAgICAg
aWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjkx
Miw3ICsyODg3LDcgQEAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrR3JvdXAoQ1NTVmFsdWUq
IHZhbHVlLCBTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgVmVjdG8KICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICBHcmlkVHJhY2tTaXplIHRyYWNrU2l6ZTsKLSAgICAgICAgaWYg
KCFjcmVhdGVHcmlkVHJhY2tNaW5NYXgoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihj
dXJyVmFsdWUpLCBzZWxlY3RvciwgdHJhY2tTaXplKSkKKyAgICAgICAgaWYgKCFjcmVhdGVHcmlk
VHJhY2tNaW5NYXgoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihjdXJyVmFsdWUpLCBz
dGF0ZSwgdHJhY2tTaXplKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICB0
cmFja1NpemVzLmFwcGVuZCh0cmFja1NpemUpOwpAQCAtMjkyMCw3ICsyODk1LDcgQEAgc3RhdGlj
IGJvb2wgY3JlYXRlR3JpZFRyYWNrR3JvdXAoQ1NTVmFsdWUqIHZhbHVlLCBTdHlsZVJlc29sdmVy
KiBzZWxlY3RvciwgVmVjdG8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgY3Jl
YXRlR3JpZFRyYWNrTGlzdChDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxHcmlkVHJhY2tTaXplPiYg
dHJhY2tTaXplcywgU3R5bGVSZXNvbHZlciogc2VsZWN0b3IpCitzdGF0aWMgYm9vbCBjcmVhdGVH
cmlkVHJhY2tMaXN0KENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0cmFj
a1NpemVzLCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiB7CiAgICAgLy8gSGFuZGxlICdub25l
Jy4KICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewpAQCAtMjkyOCw3ICsyOTAz
LDcgQEAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrTGlzdChDU1NWYWx1ZSogdmFsdWUsIFZl
Y3RvcjxHcmlkVHJhY2tTaXplPiYgdHJhY2tTaXoKICAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZTsKICAgICB9CiAKLSAgICByZXR1cm4gY3Jl
YXRlR3JpZFRyYWNrR3JvdXAodmFsdWUsIHNlbGVjdG9yLCB0cmFja1NpemVzKTsKKyAgICByZXR1
cm4gY3JlYXRlR3JpZFRyYWNrR3JvdXAodmFsdWUsIHN0YXRlLCB0cmFja1NpemVzKTsKIH0KIAog
CkBAIC0yOTY2LDkgKzI5NDEsOSBAQCBzdGF0aWMgYm9vbCBoYXNWYXJpYWJsZVJlZmVyZW5jZShD
U1NWYWx1ZSogdmFsdWUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFN0eWxlUmVzb2x2
ZXI6OnJlc29sdmVWYXJpYWJsZXMoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBW
ZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiYga25vd25FeHByZXNzaW9u
cykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyhTdHlsZVJlc29sdmVTdGF0
ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPHN0ZDo6
cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+ID4mIGtub3duRXhwcmVzc2lvbnMpCiB7Ci0gICAg
c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gZXhwcmVzc2lvbihpZCwgdmFsdWUtPnNl
cmlhbGl6ZVJlc29sdmluZ1ZhcmlhYmxlcygqc3R5bGUoKS0+dmFyaWFibGVzKCkpKTsKKyAgICBz
dGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiBleHByZXNzaW9uKGlkLCB2YWx1ZS0+c2Vy
aWFsaXplUmVzb2x2aW5nVmFyaWFibGVzKCpzdGF0ZS5zdHlsZSgpLT52YXJpYWJsZXMoKSkpOwog
CiAgICAgaWYgKGtub3duRXhwcmVzc2lvbnMuY29udGFpbnMoZXhwcmVzc2lvbikpCiAgICAgICAg
IHJldHVybjsgLy8gY3ljbGUgZGV0ZWN0ZWQuCkBAIC0yOTgzLDM2ICsyOTU4LDM2IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyhDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUsIFZlY3RvcjxzCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdFNl
dC0+cHJvcGVydHlDb3VudCgpOyBpKyspIHsKICAgICAgICAgU3R5bGVQcm9wZXJ0eVNldDo6UHJv
cGVydHlSZWZlcmVuY2UgcHJvcGVydHkgPSByZXN1bHRTZXQtPnByb3BlcnR5QXQoaSk7CiAgICAg
ICAgIGlmIChwcm9wZXJ0eS5pZCgpICE9IENTU1Byb3BlcnR5VmFyaWFibGUgJiYgaGFzVmFyaWFi
bGVSZWZlcmVuY2UocHJvcGVydHkudmFsdWUoKSkpCi0gICAgICAgICAgICByZXNvbHZlVmFyaWFi
bGVzKHByb3BlcnR5LmlkKCksIHByb3BlcnR5LnZhbHVlKCksIGtub3duRXhwcmVzc2lvbnMpOwor
ICAgICAgICAgICAgcmVzb2x2ZVZhcmlhYmxlcyhzdGF0ZSwgcHJvcGVydHkuaWQoKSwgcHJvcGVy
dHkudmFsdWUoKSwga25vd25FeHByZXNzaW9ucyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGFwcGx5UHJvcGVydHkocHJvcGVydHkuaWQoKSwgcHJvcGVydHkudmFsdWUoKSk7CisgICAgICAg
ICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBwcm9wZXJ0eS5pZCgpLCBwcm9wZXJ0eS52YWx1ZSgp
KTsKICAgICB9CiB9CiAjZW5kaWYKIAotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKIHsKICNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKICAgICBpZiAo
aWQgIT0gQ1NTUHJvcGVydHlWYXJpYWJsZSAmJiBoYXNWYXJpYWJsZVJlZmVyZW5jZSh2YWx1ZSkp
IHsKICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+ID4ga25v
d25FeHByZXNzaW9uczsKLSAgICAgICAgcmVzb2x2ZVZhcmlhYmxlcyhpZCwgdmFsdWUsIGtub3du
RXhwcmVzc2lvbnMpOworICAgICAgICByZXNvbHZlVmFyaWFibGVzKHN0YXRlLCBpZCwgdmFsdWUs
IGtub3duRXhwcmVzc2lvbnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAKLSAg
ICBib29sIGlzSW5oZXJpdCA9IG1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1
ZSgpOwotICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgKCFt
X3BhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7CisgICAgYm9vbCBpc0lu
aGVyaXQgPSBzdGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsK
KyAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICghc3RhdGUu
cGFyZW50Tm9kZSgpICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpOwogCi0gICAgQVNTRVJU
KCFpc0luaGVyaXQgfHwgIWlzSW5pdGlhbCk7IC8vIGlzSW5oZXJpdCAtPiAhaXNJbml0aWFsICYm
IGlzSW5pdGlhbCAtPiAhaXNJbmhlcml0Ci0gICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgKG1fcGFy
ZW50Tm9kZSAmJiBtX3BhcmVudFN0eWxlKSk7IC8vIGlzSW5oZXJpdCAtPiAobV9wYXJlbnROb2Rl
ICYmIG1fcGFyZW50U3R5bGUpCisgICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgIWlzSW5pdGlhbCk7
CisgICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgKHN0YXRlLnBhcmVudE5vZGUoKSAmJiBzdGF0ZS5w
YXJlbnRTdHlsZSgpKSk7CiAKLSAgICBpZiAoIWFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgp
ICYmICghYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIHx8ICFpc1ZhbGlkVmlzaXRl
ZExpbmtQcm9wZXJ0eShpZCkpKSB7CisgICAgaWYgKCFzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKSAmJiAoIXN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSB8
fCAhaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSkgewogICAgICAgICAvLyBMaW1pdCB0
aGUgcHJvcGVydGllcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIG9ubHkgdGhlIG9uZXMgaG9ub3Jl
ZCBieSA6dmlzaXRlZC4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChpc0luaGVy
aXQgJiYgIW1fcGFyZW50U3R5bGUtPmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkg
JiYgIUNTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkKLSAgICAgICAgbV9wYXJl
bnRTdHlsZS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKTsKKyAgICBpZiAo
aXNJbmhlcml0ICYmICFzdGF0ZS5wYXJlbnRTdHlsZSgpLT5oYXNFeHBsaWNpdGx5SW5oZXJpdGVk
UHJvcGVydGllcygpICYmICFDU1NQcm9wZXJ0eTo6aXNJbmhlcml0ZWRQcm9wZXJ0eShpZCkpCisg
ICAgICAgIHN0YXRlLnBhcmVudFN0eWxlKCktPnNldEhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9w
ZXJ0aWVzKCk7CiAKICNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKICAgICBpZiAoaWQgPT0gQ1NT
UHJvcGVydHlWYXJpYWJsZSkgewpAQCAtMzAyMCw3ICsyOTk1LDcgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICAgICAgQ1NTVmFyaWFibGVWYWx1ZSogdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxDU1NWYXJpYWJs
ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBBU1NFUlQoIXZhcmlhYmxlLT5uYW1lKCkuaXNFbXB0
eSgpKTsKICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZS0+dmFsdWUoKS5pc0VtcHR5KCkpOwotICAg
ICAgICBtX3N0eWxlLT5zZXRWYXJpYWJsZSh2YXJpYWJsZS0+bmFtZSgpLCB2YXJpYWJsZS0+dmFs
dWUoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFZhcmlhYmxlKHZhcmlhYmxlLT5uYW1l
KCksIHZhcmlhYmxlLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpA
QCAtMzAyOSwxNyArMzAwNCwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNvbnN0IFByb3BlcnR5SGFu
ZGxlciYgaGFuZGxlciA9IG1fc3R5bGVCdWlsZGVyLnByb3BlcnR5SGFuZGxlcihpZCk7CiAgICAg
aWYgKGhhbmRsZXIuaXNWYWxpZCgpKSB7CiAgICAgICAgIGlmIChpc0luaGVyaXQpCi0gICAgICAg
ICAgICBoYW5kbGVyLmFwcGx5SW5oZXJpdFZhbHVlKGlkLCB0aGlzKTsKKyAgICAgICAgICAgIGhh
bmRsZXIuYXBwbHlJbmhlcml0VmFsdWUoaWQsIHN0YXRlKTsKICAgICAgICAgZWxzZSBpZiAoaXNJ
bml0aWFsKQotICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaXRpYWxWYWx1ZShpZCwgdGhpcyk7
CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5pdGlhbFZhbHVlKGlkLCBzdGF0ZSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlWYWx1ZShpZCwgdGhpcywgdmFsdWUp
OworICAgICAgICAgICAgaGFuZGxlci5hcHBseVZhbHVlKGlkLCBzdGF0ZSwgdmFsdWUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZh
bHVlID0gdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSA/IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpIDogMDsKIAotICAgIGZsb2F0IHpvb21GYWN0b3IgPSBtX3N0eWxlLT5l
ZmZlY3RpdmVab29tKCk7CisgICAgZmxvYXQgem9vbUZhY3RvciA9IHN0YXRlLnN0eWxlKCktPmVm
ZmVjdGl2ZVpvb20oKTsKIAogICAgIC8vIFdoYXQgZm9sbG93cyBpcyBhIGxpc3QgdGhhdCBtYXBz
IHRoZSBDU1MgcHJvcGVydGllcyBpbnRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgZnJvbnQtZW5kCiAg
ICAgLy8gUmVuZGVyU3R5bGUgdmFsdWVzLiBTaG9ydGhhbmRzIChlLmcuIGJvcmRlciwgYmFja2dy
b3VuZCkgb2NjdXIgaW4gdGhpcyBsaXN0IGFzIHdlbGwgYW5kCkBAIC0zMDUzLDcgKzMwMjgsNyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgLy8gbm90ZSBpcyBhIHJlbWluZGVyIHRoYXQgZXZl
bnR1YWxseSAiaW5oZXJpdCIgbmVlZHMgdG8gYmUgc3VwcG9ydGVkLgogCiAgICAgICAgICAgICBp
ZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJDb250ZW50KCk7
CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJDb250ZW50KCk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCkBAIC0zMDY1LDE5ICszMDQwLDE5IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7
CiAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc0dyYWRpZW50VmFsdWUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6
Y3JlYXRlKHN0YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPihpdGVtKS0+Z3JhZGllbnRXaXRo
U3R5bGVzUmVzb2x2ZWQodGhpcykuZ2V0KCkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVh
dGUoc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+KGl0ZW0pLT5ncmFkaWVudFdpdGhTdHls
ZXNSZXNvbHZlZChzdGF0ZSkuZ2V0KCkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KFN0eWxlR2Vu
ZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlKj4o
aXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAg
ZGlkU2V0ID0gdHJ1ZTsKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGl0ZW0tPmlzSW1hZ2VTZXRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fc3R5bGUtPnNldENvbnRlbnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5
Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsK
KyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChzZXRPclBlbmRp
bmdGcm9tVmFsdWUoc3RhdGUsIENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1h
Z2VTZXRWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0
ID0gdHJ1ZTsKICNlbmRpZgogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlm
IChpdGVtLT5pc0ltYWdlVmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRDb250ZW50KGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0
YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVl
KHN0YXRlLCBDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPihp
dGVtKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTMwODgsMTcg
KzMwNjMsMTcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogY29udGVudFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsK
IAogICAgICAgICAgICAgICAgIGlmIChjb250ZW50VmFsdWUtPmlzU3RyaW5nKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChjb250ZW50VmFsdWUtPmdldFN0cmlu
Z1ZhbHVlKCkuaW1wbCgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRDb250ZW50KGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIGRp
ZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUtPmlzQXR0cigpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBDYW4gYSBuYW1lc3BhY2UgYmUgc3BlY2lmaWVkIGZvciBhbiBhdHRyKGZv
byk/Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3N0eWxlLT5zdHlsZVR5cGUoKSA9PSBOT1BT
RVVETykKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFVuaXF1ZSgpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VV
RE8pCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRVbmlxdWUoKTsK
ICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJl
bnRTdHlsZS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wYXJl
bnRTdHlsZSgpLT5zZXRVbmlxdWUoKTsKICAgICAgICAgICAgICAgICAgICAgUXVhbGlmaWVkTmFt
ZSBhdHRyKG51bGxBdG9tLCBjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBu
dWxsQXRvbSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUg
PSBtX2VsZW1lbnQtPmdldEF0dHJpYnV0ZShhdHRyKTsKLSAgICAgICAgICAgICAgICAgICAgbV9z
dHlsZS0+c2V0Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IHZhbHVlLmltcGwo
KSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSA9IHN0YXRlLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGF0dHIpOworICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9t
IDogdmFsdWUuaW1wbCgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciB0aGUgZmFjdCB0aGF0IHRoZSBh
dHRyaWJ1dGUgdmFsdWUgYWZmZWN0cyB0aGUgc3R5bGUKICAgICAgICAgICAgICAgICAgICAgbV9m
ZWF0dXJlcy5hdHRyc0luUnVsZXMuYWRkKGF0dHIubG9jYWxOYW1lKCkuaW1wbCgpKTsKQEAgLTMx
MDksMjQgKzMwODQsMjQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgaWYgKGxp
c3RTdHlsZUlkZW50ICE9IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGxp
c3RTdHlsZVR5cGUgPSBzdGF0aWNfY2FzdDxFTGlzdFN0eWxlVHlwZT4obGlzdFN0eWxlSWRlbnQg
LSBDU1NWYWx1ZURpc2MpOwogICAgICAgICAgICAgICAgICAgICBPd25QdHI8Q291bnRlckNvbnRl
bnQ+IGNvdW50ZXIgPSBhZG9wdFB0cihuZXcgQ291bnRlckNvbnRlbnQoY291bnRlclZhbHVlLT5p
ZGVudGlmaWVyKCksIGxpc3RTdHlsZVR5cGUsIGNvdW50ZXJWYWx1ZS0+c2VwYXJhdG9yKCkpKTsK
LSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChjb3VudGVyLnJlbGVhc2Uo
KSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVu
dChjb3VudGVyLnJlbGVhc2UoKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKGNvbnRlbnRWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlT3BlblF1b3RlOgotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0Q29udGVudChPUEVOX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChPUEVOX1FVT1RFLCBkaWRTZXQpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ2xvc2VRdW90ZToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoQ0xPU0VfUVVPVEUsIGRpZFNl
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KENM
T1NFX1FVT1RFLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlTm9PcGVuUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRDb250ZW50KE5PX09QRU5fUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KE5PX09QRU5fUVVPVEUsIGRpZFNldCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb0Nsb3NlUXVv
dGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KE5PX0NMT1NF
X1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0Q29udGVudChOT19DTE9TRV9RVU9URSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTMxMzYsMTYgKzMxMTEsMTYgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIWRp
ZFNldCkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5jbGVhckNvbnRlbnQoKTsKKyAgICAgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhckNvbnRlbnQoKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlRdW90ZXM6CiAgICAgICAgIGlmIChp
c0luaGVyaXQpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhtX3BhcmVudFN0eWxl
LT5xdW90ZXMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRRdW90ZXMoc3RhdGUu
cGFyZW50U3R5bGUoKS0+cXVvdGVzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3Rl
cygwKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFF1b3RlcygwKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkp
IHsKQEAgLTMxNjMsNDMgKzMxMzgsNDMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBT
dHJpbmcgZW5kUXVvdGUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHNlY29uZCkt
PmdldFN0cmluZ1ZhbHVlKCk7CiAgICAgICAgICAgICAgICAgcXVvdGVzLT5hZGRQYWlyKHN0ZDo6
bWFrZV9wYWlyKHN0YXJ0UXVvdGUsIGVuZFF1b3RlKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBtX3N0eWxlLT5zZXRRdW90ZXMocXVvdGVzKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldFF1b3RlcyhxdW90ZXMpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSkgewogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRRdW90ZXMoUXVvdGVzRGF0YTo6Y3JlYXRlKCkpOworICAgICAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpjcmVhdGUoKSk7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250RmFtaWx5OiB7CiAgICAgICAg
IC8vIGxpc3Qgb2Ygc3RyaW5ncyBhbmQgaWRzCiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAg
ICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBtX3BhcmVu
dFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBm
b250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAg
IEZvbnREZXNjcmlwdGlvbiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBzdGF0ZS5wYXJlbnRGb250
RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRHZW5lcmljRmFtaWx5KHBhcmVudEZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCkp
OwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShwYXJlbnRGb250RGVzY3Jp
cHRpb24uZmlyc3RGYW1pbHkoKSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNT
cGVjaWZpZWRGb250KHBhcmVudEZvbnREZXNjcmlwdGlvbi5pc1NwZWNpZmllZEZvbnQoKSk7Ci0g
ICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAg
ICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewogICAgICAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGluaXRpYWxEZXNjID0gRm9udERlc2NyaXB0aW9uKCk7Ci0g
ICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9u
dERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRv
IGFkanVzdCB0aGUgc2l6ZSB0byBhY2NvdW50IGZvciB0aGUgZ2VuZXJpYyBmYW1pbHkgY2hhbmdl
IGZyb20gbW9ub3NwYWNlCiAgICAgICAgICAgICAvLyB0byBub24tbW9ub3NwYWNlLgogICAgICAg
ICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNjcmlwdGlv
bi51c2VGaXhlZERlZmF1bHRTaXplKCkpCi0gICAgICAgICAgICAgICAgc2V0Rm9udFNpemUoZm9u
dERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNt
YWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCBmYWxzZSkpOworICAgICAg
ICAgICAgICAgIHNldEZvbnRTaXplKHN0YXRlLCBmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9y
S2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24ua2V5
d29yZFNpemUoKSAtIDEsIGZhbHNlKSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
R2VuZXJpY0ZhbWlseShpbml0aWFsRGVzYy5nZW5lcmljRmFtaWx5KCkpOwogICAgICAgICAgICAg
aWYgKCFpbml0aWFsRGVzYy5maXJzdEZhbWlseSgpLmZhbWlseUlzRW1wdHkoKSkKICAgICAgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KGluaXRpYWxEZXNjLmZpcnN0RmFtaWx5
KCkpOwotICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Cisg
ICAgICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghdmFsdWUtPmlzVmFs
dWVMaXN0KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBm
b250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwog
ICAgICAgICBGb250RmFtaWx5JiBmaXJzdEZhbWlseSA9IGZvbnREZXNjcmlwdGlvbi5maXJzdEZh
bWlseSgpOwogICAgICAgICBGb250RmFtaWx5KiBjdXJyRmFtaWx5ID0gMDsKIApAQCAtMzI2OCw0
MyArMzI0Myw0MyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAvLyBJZiBjdXJyRmFtaWx5IGlzIG5v
bi16ZXJvIHRoZW4gd2Ugc2V0IGF0IGxlYXN0IG9uZSBmYW1pbHkgb24gdGhpcyBkZXNjcmlwdGlv
bi4KICAgICAgICAgaWYgKGN1cnJGYW1pbHkpIHsKICAgICAgICAgICAgIGlmIChmb250RGVzY3Jp
cHRpb24ua2V5d29yZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6
ZSgpICE9IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKQotICAgICAgICAgICAgICAgIHNl
dEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKGRvY3VtZW50KCks
IENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0gMSwgIW9s
ZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSk7CisgICAgICAgICAgICAgICAgc2V0Rm9udFNp
emUoc3RhdGUsIGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKGRvY3VtZW50KCks
IENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0gMSwgIW9s
ZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSk7CiAKLSAgICAgICAgICAgIHNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICAgICAgc3RhdGUuc2V0Rm9udERlc2Ny
aXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIC8vIHNob3J0aGFuZCBwcm9wZXJ0aWVzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91
bmQ6CiAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFy
QmFja2dyb3VuZExheWVycygpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0QmFja2dyb3VuZENv
bG9yKENvbG9yKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJCYWNrZ3JvdW5k
TGF5ZXJzKCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCYWNrZ3JvdW5kQ29sb3Io
Q29sb3IoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBt
X3N0eWxlLT5pbmhlcml0QmFja2dyb3VuZExheWVycygqbV9wYXJlbnRTdHlsZS0+YmFja2dyb3Vu
ZExheWVycygpKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihtX3Bh
cmVudFN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5pbmhlcml0QmFja2dyb3VuZExheWVycygqc3RhdGUucGFyZW50U3R5bGUoKS0+YmFja2dyb3Vu
ZExheWVycygpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJhY2tncm91bmRDb2xv
cihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKSk7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrOgogICAgICAgICBp
ZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJNYXNrTGF5ZXJzKCk7Cisg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhck1hc2tMYXllcnMoKTsKICAgICAgICAgZWxz
ZSBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdE1hc2tMYXllcnMo
Km1fcGFyZW50U3R5bGUtPm1hc2tMYXllcnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5pbmhlcml0TWFza0xheWVycygqc3RhdGUucGFyZW50U3R5bGUoKS0+bWFza0xheWVycygpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250OgogICAgICAgICBpZiAo
aXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gbV9wYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBtX3N0eWxl
LT5zZXRMaW5lSGVpZ2h0KG1fcGFyZW50U3R5bGUtPnNwZWNpZmllZExpbmVIZWlnaHQoKSk7Ci0g
ICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7Ci0gICAgICAgICAgICBzZXRGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBm
b250RGVzY3JpcHRpb24gPSBzdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoc3RhdGUucGFyZW50U3R5bGUoKS0+c3Bl
Y2lmaWVkTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1
ZSgwKTsKKyAgICAgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkgewogICAgICAgICAgICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpOwogICAgICAgICAgICAgQVNTRVJUKHNl
dHRpbmdzKTsgLy8gSWYgd2UncmUgZG9pbmcgc3R5bGUgcmVzb2x1dGlvbiwgdGhpcyBkb2N1bWVu
dCBzaG91bGQgYWx3YXlzIGJlIGluIGEgZnJhbWUgYW5kIHRodXMgaGF2ZSBzZXR0aW5ncwogICAg
ICAgICAgICAgaWYgKCFzZXR0aW5ncykKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICBpbml0aWFsaXplRm9udFN0eWxlKHNldHRpbmdzKTsKKyAgICAgICAgICAgIGluaXRpYWxp
emVGb250U3R5bGUoc3RhdGUsIHNldHRpbmdzKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZSkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHls
ZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0gICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9
IDA7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxl
Ojppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRW
YWx1ZSgwKTsKIAogICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsK
ICAgICAgICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lzdGVtRm9udChwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSwgZm9udERlc2NyaXB0aW9uKTsKQEAgLTMzMjAsMjcgKzMy
OTUsMjcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSB8fCAhc2V0dGluZ3MtPnNjcmVl
bkZvbnRTdWJzdGl0dXRpb25FbmFibGVkKCkpOwogCiAgICAgICAgICAgICAgICAgLy8gSGFuZGxl
IHRoZSB6b29tIGZhY3Rvci4KLSAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29t
cHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50KCksIG1f
c3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3Jp
cHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSkpOwotICAgICAgICAgICAg
ICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICAgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNp
ZmllZFNpemUoZG9jdW1lbnQoKSwgc3RhdGUuc3R5bGUoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJz
b2x1dGVTaXplKCksIGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIHN0YXRlLnVzZVNW
R1pvb21SdWxlcygpKSk7CisgICAgICAgICAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9u
KGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAodmFs
dWUtPmlzRm9udFZhbHVlKCkpIHsKICAgICAgICAgICAgIEZvbnRWYWx1ZSogZm9udCA9IHN0YXRp
Y19jYXN0PEZvbnRWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgICAgIGlmICghZm9udC0+c3R5bGUg
fHwgIWZvbnQtPnZhcmlhbnQgfHwgIWZvbnQtPndlaWdodAogICAgICAgICAgICAgICAgIHx8ICFm
b250LT5zaXplIHx8ICFmb250LT5saW5lSGVpZ2h0IHx8ICFmb250LT5mYW1pbHkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZv
bnRTdHlsZSwgZm9udC0+c3R5bGUuZ2V0KCkpOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBmb250LT52YXJpYW50LmdldCgpKTsKLSAgICAgICAgICAg
IGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBmb250LT53ZWlnaHQuZ2V0KCkp
OworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlGb250U3R5bGUs
IGZvbnQtPnN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIENT
U1Byb3BlcnR5Rm9udFZhcmlhbnQsIGZvbnQtPnZhcmlhbnQuZ2V0KCkpOworICAgICAgICAgICAg
YXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBmb250LT53ZWlnaHQu
Z2V0KCkpOwogICAgICAgICAgICAgLy8gVGhlIHByZXZpb3VzIHByb3BlcnRpZXMgY2FuIGRpcnR5
IG91ciBmb250IGJ1dCB0aGV5IGRvbid0IHRyeSB0byByZWFkIHRoZSBmb250J3MKICAgICAgICAg
ICAgIC8vIHByb3BlcnRpZXMgYmFjaywgd2hpY2ggaXMgc2FmZS4gSG93ZXZlciBpZiBmb250LXNp
emUgaXMgdXNpbmcgdGhlICdleCcgdW5pdCwgaXQgd2lsbAogICAgICAgICAgICAgLy8gbmVlZCBx
dWVyeSB0aGUgZGlydGllZCBmb250J3MgeC1oZWlnaHQgdG8gZ2V0IHRoZSBjb21wdXRlZCBzaXpl
LiBUbyBiZSBzYWZlIGluIHRoaXMKICAgICAgICAgICAgIC8vIGNhc2UsIGxldCdzIGp1c3QgdXBk
YXRlIHRoZSBmb250IG5vdy4KLSAgICAgICAgICAgIHVwZGF0ZUZvbnQoKTsKLSAgICAgICAgICAg
IGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgZm9udC0+c2l6ZS5nZXQoKSk7Cisg
ICAgICAgICAgICB1cGRhdGVGb250KHN0YXRlKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHko
c3RhdGUsIENTU1Byb3BlcnR5Rm9udFNpemUsIGZvbnQtPnNpemUuZ2V0KCkpOwogCi0gICAgICAg
ICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IGZvbnQtPmxpbmVIZWlnaHQuZ2V0KCk7CisgICAgICAg
ICAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoZm9udC0+bGluZUhlaWdodC5nZXQoKSk7CiAK
LSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBmb250LT5m
YW1pbHkuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVy
dHlGb250RmFtaWx5LCBmb250LT5mYW1pbHkuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybjsKIApAQCAtMzM1MCwxMSArMzMyNSwxMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRCb3hTaGFkb3c6IHsKICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewogICAg
ICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdykKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbV9zdHlsZS0+c2V0VGV4dFNoYWRvdyhtX3BhcmVudFN0eWxlLT50ZXh0U2hhZG93
KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqbV9wYXJlbnRTdHlsZS0+dGV4dFNoYWRvdygp
KSkgOiBudWxscHRyKTsKLSAgICAgICAgICAgIHJldHVybiBtX3N0eWxlLT5zZXRCb3hTaGFkb3co
bV9wYXJlbnRTdHlsZS0+Ym94U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqbV9w
YXJlbnRTdHlsZS0+Ym94U2hhZG93KCkpKSA6IG51bGxwdHIpOworICAgICAgICAgICAgICAgIHJl
dHVybiBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0U2hhZG93KHN0YXRlLnBhcmVudFN0eWxlKCktPnRl
eHRTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCpzdGF0ZS5wYXJlbnRTdHlsZSgp
LT50ZXh0U2hhZG93KCkpKSA6IG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnN0
eWxlKCktPnNldEJveFNoYWRvdyhzdGF0ZS5wYXJlbnRTdHlsZSgpLT5ib3hTaGFkb3coKSA/IGFk
b3B0UHRyKG5ldyBTaGFkb3dEYXRhKCpzdGF0ZS5wYXJlbnRTdHlsZSgpLT5ib3hTaGFkb3coKSkp
IDogbnVsbHB0cik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzSW5pdGlhbCB8fCBwcmltaXRp
dmVWYWx1ZSkgLy8gaW5pdGlhbCB8IG5vbmUKLSAgICAgICAgICAgIHJldHVybiBpZCA9PSBDU1NQ
cm9wZXJ0eVRleHRTaGFkb3cgPyBtX3N0eWxlLT5zZXRUZXh0U2hhZG93KG51bGxwdHIpIDogbV9z
dHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuIGlkID09IENT
U1Byb3BlcnR5VGV4dFNoYWRvdyA/IHN0YXRlLnN0eWxlKCktPnNldFRleHRTaGFkb3cobnVsbHB0
cikgOiBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiAKICAgICAgICAgaWYg
KCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMzNjQsMjkg
KzMzMzksMjkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICghY3VyclZhbHVlLT5pc1No
YWRvd1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBTaGFk
b3dWYWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1ZhbHVlKj4oY3VyclZhbHVlKTsKLSAg
ICAgICAgICAgIGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1f
cm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICBpbnQgeSA9IGl0ZW0t
PnktPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21G
YWN0b3IpOwotICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+
Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rv
cikgOiAwOwotICAgICAgICAgICAgaW50IHNwcmVhZCA9IGl0ZW0tPnNwcmVhZCA/IGl0ZW0tPnNw
cmVhZC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9v
bUZhY3RvcikgOiAwOworICAgICAgICAgICAgaW50IHggPSBpdGVtLT54LT5jb21wdXRlTGVuZ3Ro
PGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9y
KTsKKyAgICAgICAgICAgIGludCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRl
LnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CisgICAgICAg
ICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3RoPGlu
dD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKSA6
IDA7CisgICAgICAgICAgICBpbnQgc3ByZWFkID0gaXRlbS0+c3ByZWFkID8gaXRlbS0+c3ByZWFk
LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHls
ZSgpLCB6b29tRmFjdG9yKSA6IDA7CiAgICAgICAgICAgICBTaGFkb3dTdHlsZSBzaGFkb3dTdHls
ZSA9IGl0ZW0tPnN0eWxlICYmIGl0ZW0tPnN0eWxlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlSW5z
ZXQgPyBJbnNldCA6IE5vcm1hbDsKICAgICAgICAgICAgIENvbG9yIGNvbG9yOwogICAgICAgICAg
ICAgaWYgKGl0ZW0tPmNvbG9yKQotICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJp
bWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAobV9z
dHlsZSkKLSAgICAgICAgICAgICAgICBjb2xvciA9IG1fc3R5bGUtPmNvbG9yKCk7CisgICAgICAg
ICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShzdGF0ZSwgaXRlbS0+Y29s
b3IuZ2V0KCkpOworICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUuc3R5bGUoKSkKKyAgICAgICAg
ICAgICAgICBjb2xvciA9IHN0YXRlLnN0eWxlKCktPmNvbG9yKCk7CiAKICAgICAgICAgICAgIE93
blB0cjxTaGFkb3dEYXRhPiBzaGFkb3dEYXRhID0gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoSW50
UG9pbnQoeCwgeSksIGJsdXIsIHNwcmVhZCwgc2hhZG93U3R5bGUsIGlkID09IENTU1Byb3BlcnR5
V2Via2l0Qm94U2hhZG93LCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IENvbG9yOjp0cmFuc3Bh
cmVudCkpOwogICAgICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdykKLSAg
ICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRUZXh0U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgp
LCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0
IGVudHJ5CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dFNoYWRvdyhzaGFk
b3dEYXRhLnJlbGVhc2UoKSwgaS5pbmRleCgpKTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMg
aXMgbm90IHRoZSBmaXJzdCBlbnRyeQogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG1fc3R5bGUtPnNldEJveFNoYWRvdyhzaGFkb3dEYXRhLnJlbGVhc2UoKSwgaS5pbmRleCgpKTsg
Ly8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQorICAgICAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJveFNoYWRvdyhzaGFkb3dEYXRhLnJlbGVhc2Uo
KSwgaS5pbmRleCgpKTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJz
dCBlbnRyeQogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUwoYm94UmVmbGVjdCwgQm94UmVmbGVjdCkKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
KSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3hSZWZsZWN0KFJlbmRlclN0eWxlOjppbml0
aWFsQm94UmVmbGVjdCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJveFJlZmxl
Y3QoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3hSZWZsZWN0KCkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKQEAgLTMzOTcsMTMgKzMzNzIsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAg
ICAgUmVmUHRyPFN0eWxlUmVmbGVjdGlvbj4gcmVmbGVjdGlvbiA9IFN0eWxlUmVmbGVjdGlvbjo6
Y3JlYXRlKCk7CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldERpcmVjdGlvbihyZWZsZWN0VmFsdWUt
PmRpcmVjdGlvbigpKTsKICAgICAgICAgaWYgKHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCkpCi0gICAg
ICAgICAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVjdFZhbHVlLT5vZmZzZXQoKS0+Y29u
dmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8
IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21G
YWN0b3IpKTsKKyAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChyZWZsZWN0VmFsdWUt
Pm9mZnNldCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNl
bnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0YXRlLnN0eWxlKCksIHN0YXRl
LnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3RvcikpOwogICAgICAgICBOaW5lUGllY2VJbWFn
ZSBtYXNrOwogICAgICAgICBtYXNrLnNldE1hc2tEZWZhdWx0cygpOwotICAgICAgICBtX3N0eWxl
TWFwLm1hcE5pbmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUtPm1hc2soKSwgbWFzayk7Cisg
ICAgICAgIC8vIG1fc3R5bGVNYXAuCisgICAgICAgIENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVj
ZUltYWdlKHN0YXRlLCBpZCwgcmVmbGVjdFZhbHVlLT5tYXNrKCksIG1hc2spOwogICAgICAgICBy
ZWZsZWN0aW9uLT5zZXRNYXNrKG1hc2spOwogCi0gICAgICAgIG1fc3R5bGUtPnNldEJveFJlZmxl
Y3QocmVmbGVjdGlvbi5yZWxlYXNlKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hS
ZWZsZWN0KHJlZmxlY3Rpb24ucmVsZWFzZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBjYXNlIENTU1Byb3BlcnR5U3JjOiAvLyBPbmx5IHVzZWQgaW4gQGZvbnQtZmFjZSBydWxlcy4K
QEAgLTM0MTIsMjkgKzMzODgsMjkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlOgogICAgICAgICBpZiAoaXNJbmhlcml0
KSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRDb2x1bW5SdWxlQ29sb3IobV9wYXJlbnRTdHls
ZS0+Y29sdW1uUnVsZUNvbG9yKCkuaXNWYWxpZCgpID8gbV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVs
ZUNvbG9yKCkgOiBtX3BhcmVudFN0eWxlLT5jb2xvcigpKTsKLSAgICAgICAgICAgIG1fc3R5bGUt
PnNldENvbHVtblJ1bGVTdHlsZShtX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlU3R5bGUoKSk7Ci0g
ICAgICAgICAgICBtX3N0eWxlLT5zZXRDb2x1bW5SdWxlV2lkdGgobV9wYXJlbnRTdHlsZS0+Y29s
dW1uUnVsZVdpZHRoKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29sdW1uUnVs
ZUNvbG9yKHN0YXRlLnBhcmVudFN0eWxlKCktPmNvbHVtblJ1bGVDb2xvcigpLmlzVmFsaWQoKSA/
IHN0YXRlLnBhcmVudFN0eWxlKCktPmNvbHVtblJ1bGVDb2xvcigpIDogc3RhdGUucGFyZW50U3R5
bGUoKS0+Y29sb3IoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb2x1bW5SdWxl
U3R5bGUoc3RhdGUucGFyZW50U3R5bGUoKS0+Y29sdW1uUnVsZVN0eWxlKCkpOworICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29sdW1uUnVsZVdpZHRoKHN0YXRlLnBhcmVudFN0eWxlKCkt
PmNvbHVtblJ1bGVXaWR0aCgpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0luaXRpYWwpCi0gICAg
ICAgICAgICBtX3N0eWxlLT5yZXNldENvbHVtblJ1bGUoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnJlc2V0Q29sdW1uUnVsZSgpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hcnF1ZWU6CiAgICAgICAgIGlmICghaXNJbmhlcml0KQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlRGlyZWN0aW9uKG1fcGFyZW50
U3R5bGUtPm1hcnF1ZWVEaXJlY3Rpb24oKSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJ
bmNyZW1lbnQobV9wYXJlbnRTdHlsZS0+bWFycXVlZUluY3JlbWVudCgpKTsKLSAgICAgICAgbV9z
dHlsZS0+c2V0TWFycXVlZVNwZWVkKG1fcGFyZW50U3R5bGUtPm1hcnF1ZWVTcGVlZCgpKTsKLSAg
ICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudChtX3BhcmVudFN0eWxlLT5tYXJxdWVl
TG9vcENvdW50KCkpOwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlQmVoYXZpb3IobV9wYXJl
bnRTdHlsZS0+bWFycXVlZUJlaGF2aW9yKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRN
YXJxdWVlRGlyZWN0aW9uKHN0YXRlLnBhcmVudFN0eWxlKCktPm1hcnF1ZWVEaXJlY3Rpb24oKSk7
CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVJbmNyZW1lbnQoc3RhdGUucGFyZW50
U3R5bGUoKS0+bWFycXVlZUluY3JlbWVudCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
TWFycXVlZVNwZWVkKHN0YXRlLnBhcmVudFN0eWxlKCktPm1hcnF1ZWVTcGVlZCgpKTsKKyAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUxvb3BDb3VudChzdGF0ZS5wYXJlbnRTdHlsZSgp
LT5tYXJxdWVlTG9vcENvdW50KCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVl
QmVoYXZpb3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+bWFycXVlZUJlaGF2aW9yKCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVSZXBldGl0aW9uOiB7
CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKG1hcnF1ZWVMb29wQ291bnQsIE1h
cnF1ZWVMb29wQ291bnQpCiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NW
YWx1ZUluZmluaXRlKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudCgt
MSk7IC8vIC0xIG1lYW5zIHJlcGVhdCBmb3JldmVyLgorICAgICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0TWFycXVlZUxvb3BDb3VudCgtMSk7IC8vIC0xIG1lYW5zIHJlcGVhdCBmb3JldmVyLgog
ICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkKLSAgICAgICAgICAg
IG1fc3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVl
KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmlt
aXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTcGVlZDogewpAQCAtMzQ0NCwxOSArMzQyMCwx
OSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBpZiAoaW50IGlkZW50ID0gcHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAoaWRlbnQpIHsKICAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVTbG93OgotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVT
cGVlZCg1MDApOyAvLyA1MDAgbXNlYy4KKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRNYXJxdWVlU3BlZWQoNTAwKTsgLy8gNTAwIG1zZWMuCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgotICAgICAgICAgICAgICAgIG1fc3R5
bGUtPnNldE1hcnF1ZWVTcGVlZCg4NSk7IC8vIDg1bXNlYy4gVGhlIFdpbklFIGRlZmF1bHQuCisg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKDg1KTsgLy8gODVt
c2VjLiBUaGUgV2luSUUgZGVmYXVsdC4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVGYXN0OgotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1
ZWVTcGVlZCgxMCk7IC8vIDEwbXNlYy4gU3VwZXIgZmFzdC4KKyAgICAgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQoMTApOyAvLyAxMG1zZWMuIFN1cGVyIGZhc3QuCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzVGltZSgpKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVl
ZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxpbnQsIENTU1ByaW1pdGl2ZVZhbHVl
OjpNaWxsaXNlY29uZHM+KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVl
ZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxpbnQsIENTU1ByaW1pdGl2ZVZhbHVl
OjpNaWxsaXNlY29uZHM+KCkpOwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNO
dW1iZXIoKSkgLy8gRm9yIHNjcm9sbGFtb3VudCBzdXBwb3J0LgotICAgICAgICAgICAgbV9zdHls
ZS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKKyAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Z2V0
SW50VmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdE1hcnF1ZWVJbmNyZW1lbnQ6IHsKQEAgLTM0NjYsMTkgKzM0NDIsMTkgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAg
ICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlU21hbGw6Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUlu
Y3JlbWVudChMZW5ndGgoMSwgRml4ZWQpKTsgLy8gMXB4LgorICAgICAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDEsIEZpeGVkKSk7IC8vIDFweC4K
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6
Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoNiwg
Rml4ZWQpKTsgLy8gNnB4LiBUaGUgV2luSUUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCg2LCBGaXhlZCkpOyAvLyA2cHgu
IFRoZSBXaW5JRSBkZWZhdWx0LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Y2FzZSBDU1NWYWx1ZUxhcmdlOgotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJ
bmNyZW1lbnQoTGVuZ3RoKDM2LCBGaXhlZCkpOyAvLyAzNnB4LgorICAgICAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDM2LCBGaXhlZCkpOyAvLyAz
NnB4LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgTGVuZ3RoIG1hcnF1ZWVMZW5ndGggPSBjb252ZXJ0VG9JbnRMZW5n
dGgocHJpbWl0aXZlVmFsdWUsIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7CisgICAgICAg
ICAgICBMZW5ndGggbWFycXVlZUxlbmd0aCA9IGNvbnZlcnRUb0ludExlbmd0aChwcmltaXRpdmVW
YWx1ZSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKICAgICAgICAg
ICAgIGlmICghbWFycXVlZUxlbmd0aC5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQobWFycXVlZUxlbmd0aCk7CisgICAgICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUluY3JlbWVudChtYXJxdWVlTGVuZ3RoKTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzQ4NywxOSArMzQ2MywxOSBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVB
dXRvKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TG9jYWxlKG51bGxBdG9tKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldExvY2FsZShudWxsQXRvbSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG1fc3R5bGUtPnNldExvY2FsZShwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFs
dWUoKSk7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxl
LT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNjcmlwdChs
b2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKG1fc3R5bGUtPmxvY2FsZSgpKSk7Ci0g
ICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0TG9jYWxlKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgp
KTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnRE
ZXNjcmlwdGlvbigpOworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0U2NyaXB0KGxvY2FsZVRv
U2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24oc3RhdGUuc3R5bGUoKS0+bG9jYWxlKCkpKTsKKyAg
ICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTaXplQWRqdXN0
OiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRleHRTaXplQWRqdXN0LCBU
ZXh0U2l6ZUFkanVzdCkKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSB8fCAhcHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHNldFRleHRT
aXplQWRqdXN0KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0byk7Cisg
ICAgICAgIHN0YXRlLnNldFRleHRTaXplQWRqdXN0KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlQXV0byk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjaWYgRU5BQkxFKERB
U0hCT0FSRF9TVVBQT1JUKQpAQCAtMzUxMCw3ICszNDg2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXREYXNoYm9hcmRSZWdp
b25zKFJlbmRlclN0eWxlOjpub25lRGFzaGJvYXJkUmVnaW9ucygpKTsKKyAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldERhc2hib2FyZFJlZ2lvbnMoUmVuZGVyU3R5bGU6Om5vbmVEYXNoYm9h
cmRSZWdpb25zKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM1MzUs
OSArMzUxMSw5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgbGVmdCA9IExlbmd0aCgp
OwogCiAgICAgICAgICAgICBpZiAocmVnaW9uLT5tX2lzQ2lyY2xlKQotICAgICAgICAgICAgICAg
IG1fc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hib2FyZFJlZ2lvbjo6Q2lyY2xl
LCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9uID09IGZp
cnN0ID8gZmFsc2UgOiB0cnVlKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRE
YXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246OkNpcmNsZSwgcmVnaW9uLT5tX2xh
YmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZhbHNlIDog
dHJ1ZSk7CiAgICAgICAgICAgICBlbHNlIGlmIChyZWdpb24tPm1faXNSZWN0YW5nbGUpCi0gICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVn
aW9uOjpSZWN0YW5nbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0
LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOworICAgICAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hib2FyZFJlZ2lvbjo6UmVjdGFu
Z2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9uID09
IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKICAgICAgICAgICAgIHJlZ2lvbiA9IHJlZ2lvbi0+bV9u
ZXh0LmdldCgpOwogICAgICAgICB9CiAKQEAgLTM1NTAsOCArMzUyNiw4IEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFwcFJlZ2lvbjogewogICAgICAgICBpZiAoIXBy
aW1pdGl2ZVZhbHVlIHx8ICFwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0RHJhZ2dhYmxlUmVnaW9uTW9kZShwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZURyYWcgPyBEcmFnZ2FibGVSZWdpb25EcmFn
IDogRHJhZ2dhYmxlUmVnaW9uTm9EcmFnKTsKLSAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgp
LT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXREcmFnZ2FibGVSZWdpb25Nb2RlKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlRHJhZyA/IERyYWdnYWJsZVJlZ2lvbkRyYWcgOiBEcmFnZ2FibGVSZWdpb25Ob0RyYWcpOwor
ICAgICAgICBzdGF0ZS5kb2N1bWVudCgpLT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zNTY3LDIxICszNTQzLDIxIEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgcmVzdWx0ICo9IDM7CiAgICAgICAgICAgICBlbHNl
IGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVRoaWNrKQogICAgICAg
ICAgICAgICAgIHJlc3VsdCAqPSA1OwotICAgICAgICAgICAgd2lkdGggPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKHJlc3VsdCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpLT5jb21wdXRl
TGVuZ3RoPGZsb2F0PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwor
ICAgICAgICAgICAgd2lkdGggPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlc3VsdCwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHls
ZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHdpZHRoID0g
cHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlKCksIG1fcm9vdEVsZW1l
bnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICB3aWR0aCA9IHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0
eWxlKCksIHpvb21GYWN0b3IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgbV9zdHlsZS0+c2V0VGV4dFN0cm9rZVdpZHRoKHdpZHRoKTsKKyAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0VGV4dFN0cm9rZVdpZHRoKHdpZHRoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtOiB7CiAgICAgICAgIEhBTkRMRV9J
TkhFUklUX0FORF9JTklUSUFMKHRyYW5zZm9ybSwgVHJhbnNmb3JtKTsKICAgICAgICAgVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgICAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRp
b25zKHZhbHVlLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIG9wZXJhdGlvbnMpOwotICAg
ICAgICBtX3N0eWxlLT5zZXRUcmFuc2Zvcm0ob3BlcmF0aW9ucyk7CisgICAgICAgIGNyZWF0ZVRy
YW5zZm9ybU9wZXJhdGlvbnModmFsdWUsIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50
U3R5bGUoKSwgb3BlcmF0aW9ucyk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRyYW5zZm9y
bShvcGVyYXRpb25zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0UGVyc3BlY3RpdmU6IHsKQEAgLTM1OTEsMzQgKzM1NjcsMzQgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRQZXJz
cGVjdGl2ZSgwKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFBlcnNwZWN0aXZlKDAp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgZmxvYXQgcGVyc3Bl
Y3RpdmVWYWx1ZTsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQotICAg
ICAgICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3Ro
PGZsb2F0PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAg
ICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZs
b2F0PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3Ip
OwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgewogICAgICAg
ICAgICAgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRyZWF0IHZhbHVlbGVzcyBudW1i
ZXJzIGFzIHB4LgotICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9IENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUFgpLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZSgpLCBtX3Jvb3RFbGVt
ZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9IENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCks
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5z
dHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOwogICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAocGVyc3BlY3RpdmVWYWx1
ZSA+PSAwLjBmKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UGVyc3BlY3RpdmUocGVyc3BlY3Rp
dmVWYWx1ZSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRQZXJzcGVjdGl2ZShwZXJz
cGVjdGl2ZVZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0QW5pbWF0aW9uOgogICAgICAgICBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAg
bV9zdHlsZS0+Y2xlYXJBbmltYXRpb25zKCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5j
bGVhckFuaW1hdGlvbnMoKTsKICAgICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQotICAgICAgICAg
ICAgbV9zdHlsZS0+aW5oZXJpdEFuaW1hdGlvbnMobV9wYXJlbnRTdHlsZS0+YW5pbWF0aW9ucygp
KTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRBbmltYXRpb25zKHN0YXRlLnBh
cmVudFN0eWxlKCktPmFuaW1hdGlvbnMoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbjoKICAgICAgICAgaWYgKGlzSW5pdGlhbCkKLSAgICAg
ICAgICAgIG1fc3R5bGUtPmNsZWFyVHJhbnNpdGlvbnMoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPmNsZWFyVHJhbnNpdGlvbnMoKTsKICAgICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQot
ICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdFRyYW5zaXRpb25zKG1fcGFyZW50U3R5bGUtPnRy
YW5zaXRpb25zKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdFRyYW5zaXRp
b25zKHN0YXRlLnBhcmVudFN0eWxlKCktPnRyYW5zaXRpb25zKCkpOwogICAgICAgICByZXR1cm47
CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGFw
SGlnaGxpZ2h0Q29sb3I6IHsKQEAgLTM2MjYsOCArMzYwMiw4IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBD
b2xvciBjb2wgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1ZSk7Ci0gICAg
ICAgIG1fc3R5bGUtPnNldFRhcEhpZ2hsaWdodENvbG9yKGNvbCk7CisgICAgICAgIENvbG9yIGNv
bCA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCBwcmltaXRpdmVWYWx1ZSk7CisgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldFRhcEhpZ2hsaWdodENvbG9yKGNvbCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTM2MzYsNyArMzYxMiw3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxp
bmcsIFVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcpOwogICAgICAgICBpZiAoIXByaW1pdGl2ZVZh
bHVlKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG1fc3R5bGUtPnNldFVzZVRvdWNoT3Zl
cmZsb3dTY3JvbGxpbmcocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVUb3Vj
aCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmco
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVUb3VjaCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTM2NzksOSArMzY1NSw5IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxXaWR0aDoKICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWF4TG9naWNhbEhlaWdodDoKICAgICB7Ci0gICAgICAgIENTU1Byb3BlcnR5
SUQgbmV3SWQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoaWQs
IG1fc3R5bGUtPmRpcmVjdGlvbigpLCBtX3N0eWxlLT53cml0aW5nTW9kZSgpKTsKKyAgICAgICAg
Q1NTUHJvcGVydHlJRCBuZXdJZCA9IENTU1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQ
cm9wZXJ0eShpZCwgc3RhdGUuc3R5bGUoKS0+ZGlyZWN0aW9uKCksIHN0YXRlLnN0eWxlKCktPndy
aXRpbmdNb2RlKCkpOwogICAgICAgICBBU1NFUlQobmV3SWQgIT0gaWQpOwotICAgICAgICByZXR1
cm4gYXBwbHlQcm9wZXJ0eShuZXdJZCwgdmFsdWUpOworICAgICAgICByZXR1cm4gYXBwbHlQcm9w
ZXJ0eShzdGF0ZSwgbmV3SWQsIHZhbHVlKTsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZv
bnRTdHJldGNoOgogICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlOgpAQCAtMzcxMSwxMiArMzY4Nywx
MSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh3cml0
aW5nTW9kZSwgV3JpdGluZ01vZGUpOwogICAgICAgICAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlKQotICAgICAgICAgICAgc2V0V3JpdGluZ01vZGUoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAg
ICAgICAgIHN0YXRlLnNldFdyaXRpbmdNb2RlKCpwcmltaXRpdmVWYWx1ZSk7CiAKICAgICAgICAg
Ly8gRklYTUU6IEl0IGlzIG5vdCBvayB0byBtb2RpZnkgZG9jdW1lbnQgc3RhdGUgd2hpbGUgYXBw
bHlpbmcgc3R5bGUuCi0gICAgICAgIGlmIChtX2VsZW1lbnQgJiYgbV9lbGVtZW50ID09IG1fZWxl
bWVudC0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCi0gICAgICAgICAgICBtX2VsZW1l
bnQtPmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQodHJ1ZSk7
Ci0KKyAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50KCkgPT0gc3Rh
dGUuZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgICAgICBzdGF0ZS5kb2N1
bWVudCgpLT5zZXRXcml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50KHRydWUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC0zNzI0LDcgKzM2OTksNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
ICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0ZXh0T3JpZW50YXRpb24sIFRleHRPcmll
bnRhdGlvbik7CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKQotICAgICAgICAgICAgc2V0
VGV4dE9yaWVudGF0aW9uKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBzdGF0ZS5zZXRU
ZXh0T3JpZW50YXRpb24oKnByaW1pdGl2ZVZhbHVlKTsKIAogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMzczMiw3ICszNzA3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TGluZUJveENvbnRhaW46IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJ
QUwobGluZUJveENvbnRhaW4sIExpbmVCb3hDb250YWluKQogICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0g
ICAgICAgICAgICBtX3N0eWxlLT5zZXRMaW5lQm94Q29udGFpbihMaW5lQm94Q29udGFpbk5vbmUp
OworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUJveENvbnRhaW4oTGluZUJveENv
bnRhaW5Ob25lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0zNzQwLDIx
ICszNzE1LDIxIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
Q1NTTGluZUJveENvbnRhaW5WYWx1ZSogbGluZUJveENvbnRhaW5WYWx1ZSA9IHN0YXRpY19jYXN0
PENTU0xpbmVCb3hDb250YWluVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldExp
bmVCb3hDb250YWluKGxpbmVCb3hDb250YWluVmFsdWUtPnZhbHVlKCkpOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRMaW5lQm94Q29udGFpbihsaW5lQm94Q29udGFpblZhbHVlLT52YWx1ZSgp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIENTUyBGb250cyBNb2R1bGUgTGV2
ZWwgMwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250RmVhdHVyZVNldHRpbmdzOiB7CiAg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZU5vcm1hbCkgewotICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKG1fc3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpLm1ha2VOb3JtYWxGZWF0dXJlU2V0dGluZ3MoKSk7CisgICAg
ICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oc3RhdGUuZm9udERlc2NyaXB0aW9uKCku
bWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2Ny
aXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIENTU1ZhbHVlTGlzdCog
bGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKICAgICAgICAgUmVmUHRy
PEZvbnRGZWF0dXJlU2V0dGluZ3M+IHNldHRpbmdzID0gRm9udEZlYXR1cmVTZXR0aW5nczo6Y3Jl
YXRlKCk7CiAgICAgICAgIGludCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKQEAgLTM3NjYsNyArMzc0
MSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBzZXR0aW5ncy0+YXBwZW5kKEZvbnRGZWF0
dXJlKGZlYXR1cmUtPnRhZygpLCBmZWF0dXJlLT52YWx1ZSgpKSk7CiAgICAgICAgIH0KICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEZlYXR1cmVTZXR0aW5ncyhzZXR0aW5ncy5yZWxlYXNlKCkp
OwotICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAg
c3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTM3NzQsMjMgKzM3NDksMjMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0RmlsdGVyOiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9J
TklUSUFMKGZpbHRlciwgRmlsdGVyKTsKICAgICAgICAgRmlsdGVyT3BlcmF0aW9ucyBvcGVyYXRp
b25zOwotICAgICAgICBpZiAoY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyh2YWx1ZSwgc3R5bGUoKSwg
bV9yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKSkKLSAgICAgICAgICAgIG1fc3R5bGUtPnNl
dEZpbHRlcihvcGVyYXRpb25zKTsKKyAgICAgICAgaWYgKGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMo
c3RhdGUsIHZhbHVlLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIG9w
ZXJhdGlvbnMpKQorICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RmlsdGVyKG9wZXJhdGlv
bnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEdyaWRDb2x1bW5zOiB7CiAgICAgICAgIFZlY3RvcjxHcmlkVHJhY2tTaXplPiB0cmFj
a1NpemVzOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRyYWNrU2l6
ZXMsIHRoaXMpKQorICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRyYWNr
U2l6ZXMsIHN0YXRlKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0
R3JpZENvbHVtbnModHJhY2tTaXplcyk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEdyaWRD
b2x1bW5zKHRyYWNrU2l6ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRHcmlkUm93czogewogICAgICAgICBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4g
dHJhY2tTaXplczsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tMaXN0KHZhbHVlLCB0cmFj
a1NpemVzLCB0aGlzKSkKKyAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tMaXN0KHZhbHVlLCB0
cmFja1NpemVzLCBzdGF0ZSkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5bGUt
PnNldEdyaWRSb3dzKHRyYWNrU2l6ZXMpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRHcmlk
Um93cyh0cmFja1NpemVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzc5OCwxNCAr
Mzc3MywxNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBHcmlkUG9zaXRpb24gY29sdW1uOwogICAg
ICAgICBpZiAoIWNyZWF0ZUdyaWRQb3NpdGlvbih2YWx1ZSwgY29sdW1uKSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0R3JpZEl0ZW1Db2x1bW4oY29sdW1uKTsKKyAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0R3JpZEl0ZW1Db2x1bW4oY29sdW1uKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZFJvdzogewogICAg
ICAgICBHcmlkUG9zaXRpb24gcm93OwogICAgICAgICBpZiAoIWNyZWF0ZUdyaWRQb3NpdGlvbih2
YWx1ZSwgcm93KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0R3Jp
ZEl0ZW1Sb3cocm93KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0R3JpZEl0ZW1Sb3cocm93
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIGFyZSBp
bXBsZW1lbnRlZCBpbiB0aGUgU3R5bGVCdWlsZGVyIGxvb2t1cCB0YWJsZS4KQEAgLTQwOTUsOTEg
KzQwNzAsOTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICNpZiBFTkFCTEUoU1ZHKQogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIC8vIFRyeSB0aGUgU1ZHIHByb3BlcnRpZXMKLSAgICAgICAgYXBwbHlTVkdQcm9wZXJ0
eShpZCwgdmFsdWUpOworICAgICAgICBhcHBseVNWR1Byb3BlcnR5KHN0YXRlLCBpZCwgdmFsdWUp
OwogICAgICAgICByZXR1cm47CiAjZW5kaWYKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBD
U1NWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnN0
eWxlSW1hZ2UoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
LCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc0ltYWdlVmFsdWUoKSkKLSAg
ICAgICAgcmV0dXJuIGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgc3RhdGljX2Nh
c3Q8Q1NTSW1hZ2VWYWx1ZSo+KHZhbHVlKSk7CisgICAgICAgIHJldHVybiBjYWNoZWRPclBlbmRp
bmdGcm9tVmFsdWUoc3RhdGUsIHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4o
dmFsdWUpKTsKIAogICAgIGlmICh2YWx1ZS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKICAg
ICAgICAgaWYgKHZhbHVlLT5pc0dyYWRpZW50VmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybiBn
ZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0dyYWRp
ZW50VmFsdWUqPih2YWx1ZSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpLmdldCgp
KTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwg
c3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KHZhbHVlKSk7CisgICAgICAgICAg
ICByZXR1cm4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRlLCBwcm9wZXJ0eSwgc3Rh
dGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+KHZhbHVlKS0+Z3JhZGllbnRXaXRoU3R5bGVzUmVz
b2x2ZWQoc3RhdGUpLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zy
b21WYWx1ZShzdGF0ZSwgcHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFs
dWUqPih2YWx1ZSkpOwogICAgIH0KIAogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQogICAgIGlm
ICh2YWx1ZS0+aXNJbWFnZVNldFZhbHVlKCkpCi0gICAgICAgIHJldHVybiBzZXRPclBlbmRpbmdG
cm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPih2YWx1ZSkp
OworICAgICAgICByZXR1cm4gc2V0T3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRlLCBwcm9wZXJ0eSwg
c3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KHZhbHVlKSk7CiAjZW5kaWYKIAogICAgIGlm
ICh2YWx1ZS0+aXNDdXJzb3JJbWFnZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBjdXJzb3JPclBl
bmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0N1cnNvckltYWdlVmFsdWUq
Pih2YWx1ZSkpOworICAgICAgICByZXR1cm4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRl
LCBwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSo+KHZhbHVlKSk7CiAK
ICAgICByZXR1cm4gMDsKIH0KIAotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVy
OjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1h
Z2VWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmNh
Y2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIENTU0ltYWdlVmFsdWUqIHZhbHVlKQogewogICAgIFJlZlB0cjxTdHls
ZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOwogICAgIGlmIChp
bWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9wZW5kaW5nSW1hZ2VQ
cm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBzdGF0ZS5wZW5kaW5nSW1h
Z2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgcmV0dXJuIGltYWdlLnJl
bGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpnZW5l
cmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2
ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUs
IENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqIHZhbHVlKQog
ewogICAgIGlmICh2YWx1ZS0+aXNQZW5kaW5nKCkpIHsKLSAgICAgICAgbV9wZW5kaW5nSW1hZ2VQ
cm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBzdGF0ZS5wZW5kaW5nSW1h
Z2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiBTdHls
ZVBlbmRpbmdJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKICAgICB9CiAgICAgcmV0dXJuIFN0eWxlR2Vu
ZXJhdGVkSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7CiB9CiAKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NF
VCkKLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJv
bVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlU2V0VmFsdWUqIHZhbHVlKQor
UGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdGcm9tVmFs
dWUoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJ
bWFnZVNldFZhbHVlKiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2
YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2VTZXQoZG9jdW1lbnQoKSk7CisgICAgUmVmUHRyPFN0
eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KHN0YXRlLmRv
Y3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAg
ICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAg
ICAgICBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7
CiAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKIH0KICNlbmRpZgogCi1QYXNzUmVmUHRyPFN0
eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBDU1NDdXJzb3JJbWFnZVZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8
U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKFN0eWxl
UmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTQ3Vyc29ySW1h
Z2VWYWx1ZSogdmFsdWUpCiB7Ci0gICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUt
PmNhY2hlZE9yUGVuZGluZ0ltYWdlKGRvY3VtZW50KCkpOworICAgIFJlZlB0cjxTdHlsZUltYWdl
PiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZShzdGF0ZS5kb2N1bWVudCgpKTsK
ICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgIG1fcGVu
ZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICAgICAgc3RhdGUu
cGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOwogICAgIHJldHVy
biBpbWFnZS5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JUZXh0
U2l6ZUFkanVzdCgpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1c3Qo
UmVuZGVyU3R5bGUqIHN0eWxlKQogewotICAgIGlmIChtX3N0eWxlLT50ZXh0U2l6ZUFkanVzdCgp
KQorICAgIGlmIChzdHlsZS0+dGV4dFNpemVBZGp1c3QoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihtX3N0eWxlLT5mb250RGVzY3Jp
cHRpb24oKSk7CisgICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihzdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCkpOwogICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNp
emUobmV3Rm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSk7Ci0gICAgbV9zdHlsZS0+c2V0
Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CisgICAgc3R5bGUtPnNldEZvbnRE
ZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6
OmNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3Jab29tQ2hhbmdlKFN0eWxlUmVz
b2x2ZVN0YXRlJiBzdGF0ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUpCiB7CiAgICAgaWYgKHN0eWxlLT5lZmZlY3RpdmVab29tKCkgPT0gcGFyZW50U3R5bGUt
PmVmZmVjdGl2ZVpvb20oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBjaGlsZEZvbnQgPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgRm9udERl
c2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihjaGlsZEZvbnQpOwotICAgIHNldEZvbnRTaXpl
KG5ld0ZvbnREZXNjcmlwdGlvbiwgY2hpbGRGb250LnNwZWNpZmllZFNpemUoKSk7CisgICAgc2V0
Rm9udFNpemUoc3RhdGUsIG5ld0ZvbnREZXNjcmlwdGlvbiwgY2hpbGRGb250LnNwZWNpZmllZFNp
emUoKSk7CiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24p
OwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShS
ZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK3ZvaWQgU3R5bGVS
ZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFN0eWxlUmVzb2x2ZVN0YXRlJiBz
dGF0ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7CiAg
ICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBjaGlsZEZvbnQgPSBzdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCk7CiAKQEAgLTQyMTMsMTEgKzQxODgsMTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVj
a0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSoK
ICAgICB9CiAKICAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGNoaWxkRm9u
dCk7Ci0gICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9uLCBzaXplKTsKKyAgICBzZXRG
b250U2l6ZShzdGF0ZSwgbmV3Rm9udERlc2NyaXB0aW9uLCBzaXplKTsKICAgICBzdHlsZS0+c2V0
Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQgU3R5bGVSZXNv
bHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0aW5ncyogc2V0dGluZ3MpCit2b2lkIFN0eWxl
UmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBT
ZXR0aW5ncyogc2V0dGluZ3MpCiB7CiAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
bjsKICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246
OlN0YW5kYXJkRmFtaWx5KTsKQEAgLTQyMjksMTYgKzQyMDQsMTcgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjppbml0aWFsaXplRm9udFN0eWxlKFNldHRpbmdzKiBzZXR0aW5ncykKICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuYXBwZW5kRmFtaWx5KDApOwogICAgIH0KICAgICBm
b250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4
U21hbGwgKyAxKTsKLSAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9y
S2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZmFsc2UpKTsKLSAgICBtX3N0eWxl
LT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLSAgICBt
X2xpbmVIZWlnaHRWYWx1ZSA9IDA7Ci0gICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbik7CisgICAgc2V0Rm9udFNpemUoc3RhdGUsIGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVG
b3JLZXl3b3JkKGRvY3VtZW50KCksIENTU1ZhbHVlTWVkaXVtLCBmYWxzZSkpOworICAgIHN0YXRl
LnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkp
OworICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKKyAgICBzdGF0ZS5zZXRGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpzZXRG
b250U2l6ZShGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkKK3Zv
aWQgU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkKIHsKKyAgICBBU1NF
UlQoc3RhdGUuZWxlbWVudCgpKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6
ZShzaXplKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVk
U2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50KCksIG1fc3R5bGUuZ2V0KCksIGZvbnREZXNj
cmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXplLCB1c2VTVkdab29tUnVsZXMoKSkpOworICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNp
ZmllZFNpemUoc3RhdGUuZG9jdW1lbnQoKSwgc3RhdGUuc3R5bGUoKSwgZm9udERlc2NyaXB0aW9u
LmlzQWJzb2x1dGVTaXplKCksIHNpemUsIHN0YXRlLnVzZVNWR1pvb21SdWxlcygpKSk7CiB9CiAK
IGZsb2F0IFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERv
Y3VtZW50KiBkb2N1bWVudCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBib29sIGlzQWJzb2x1dGVTaXpl
LCBmbG9hdCBzcGVjaWZpZWRTaXplLCBib29sIHVzZVNWR1pvb21SdWxlcykKQEAgLTQ0MzYsNyAr
NDQxMiw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWVJc0Rl
cml2ZWRGcm9tRWxlbWVudChDU1NQcmltaXRpdmVWYWx1CiAgICAgfQogfQogCi1Db2xvciBTdHls
ZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZSogdmFs
dWUsIGJvb2wgZm9yVmlzaXRlZExpbmspIGNvbnN0CitDb2xvciBTdHlsZVJlc29sdmVyOjpjb2xv
ckZyb21QcmltaXRpdmVWYWx1ZShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ByaW1pdGl2
ZVZhbHVlKiB2YWx1ZSwgYm9vbCBmb3JWaXNpdGVkTGluaykKIHsKICAgICBpZiAodmFsdWUtPmlz
UkdCQ29sb3IoKSkKICAgICAgICAgcmV0dXJuIENvbG9yKHZhbHVlLT5nZXRSR0JBMzJWYWx1ZSgp
KTsKQEAgLTQ0NDYsMTUgKzQ0MjIsMTUgQEAgQ29sb3IgU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9t
UHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlLCBib29sIGZvclYKICAgICBj
YXNlIDA6CiAgICAgICAgIHJldHVybiBDb2xvcigpOwogICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRU
ZXh0OgotICAgICAgICByZXR1cm4gbV9lbGVtZW50LT5kb2N1bWVudCgpLT50ZXh0Q29sb3IoKTsK
KyAgICAgICAgcmV0dXJuIHN0YXRlLmRvY3VtZW50KCktPnRleHRDb2xvcigpOwogICAgIGNhc2Ug
Q1NTVmFsdWVXZWJraXRMaW5rOgotICAgICAgICByZXR1cm4gKG1fZWxlbWVudC0+aXNMaW5rKCkg
JiYgZm9yVmlzaXRlZExpbmspID8gbV9lbGVtZW50LT5kb2N1bWVudCgpLT52aXNpdGVkTGlua0Nv
bG9yKCkgOiBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmxpbmtDb2xvcigpOworICAgICAgICByZXR1
cm4gKHN0YXRlLmVsZW1lbnQoKS0+aXNMaW5rKCkgJiYgZm9yVmlzaXRlZExpbmspID8gc3RhdGUu
ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtDb2xvcigpIDogc3RhdGUuZG9jdW1lbnQoKS0+bGlua0Nv
bG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEFjdGl2ZWxpbms6Ci0gICAgICAgIHJldHVy
biBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmFjdGl2ZUxpbmtDb2xvcigpOworICAgICAgICByZXR1
cm4gc3RhdGUuZG9jdW1lbnQoKS0+YWN0aXZlTGlua0NvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1
ZVdlYmtpdEZvY3VzUmluZ0NvbG9yOgogICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmZvY3Vz
UmluZ0NvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZUN1cnJlbnRjb2xvcjoKLSAgICAgICAgcmV0
dXJuIG1fc3R5bGUtPmNvbG9yKCk7CisgICAgICAgIHJldHVybiBzdGF0ZS5zdHlsZSgpLT5jb2xv
cigpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBjb2xvckZvckNTU1ZhbHVlKGlkZW50
KTsKICAgICB9CkBAIC00Nzg2LDE5ICs0NzYyLDE5IEBAIHN0YXRpYyBGaWx0ZXJPcGVyYXRpb246
Ok9wZXJhdGlvblR5cGUgZmlsdGVyT3BlcmF0aW9uRm9yVHlwZShXZWJLaXRDU1NGaWx0ZXJWYWx1
CiB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCi12b2lkIFN0eWxl
UmVzb2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6
bG9hZFBlbmRpbmdTVkdEb2N1bWVudHMoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogewotICAg
IGlmICghbV9zdHlsZS0+aGFzRmlsdGVyKCkgfHwgbV9wZW5kaW5nU1ZHRG9jdW1lbnRzLmlzRW1w
dHkoKSkKKyAgICBpZiAoIXN0YXRlLnN0eWxlKCktPmhhc0ZpbHRlcigpIHx8IHN0YXRlLnBlbmRp
bmdTVkdEb2N1bWVudHMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENhY2hl
ZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKLSAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9w
ZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9IG1fc3R5bGUtPm11dGFibGVGaWx0ZXIoKS5v
cGVyYXRpb25zKCk7CisgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9h
ZGVyID0gc3RhdGUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKKyAgICBWZWN0
b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9IHN0YXRlLnN0
eWxlKCktPm11dGFibGVGaWx0ZXIoKS5vcGVyYXRpb25zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGZpbHRlck9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVmUHRy
PEZpbHRlck9wZXJhdGlvbj4gZmlsdGVyT3BlcmF0aW9uID0gZmlsdGVyT3BlcmF0aW9ucy5hdChp
KTsKICAgICAgICAgaWYgKGZpbHRlck9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpID09IEZp
bHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFKSB7CiAgICAgICAgICAgICBSZWZlcmVuY2VGaWx0ZXJP
cGVyYXRpb24qIHJlZmVyZW5jZUZpbHRlciA9IHN0YXRpY19jYXN0PFJlZmVyZW5jZUZpbHRlck9w
ZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbi5nZXQoKSk7CiAKLSAgICAgICAgICAgIFdlYktpdENT
U1NWR0RvY3VtZW50VmFsdWUqIHZhbHVlID0gbV9wZW5kaW5nU1ZHRG9jdW1lbnRzLmdldChyZWZl
cmVuY2VGaWx0ZXIpLmdldCgpOworICAgICAgICAgICAgV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1
ZSogdmFsdWUgPSBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzKCkuZ2V0KHJlZmVyZW5jZUZpbHRl
cikuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgQ2FjaGVkU1ZHRG9jdW1lbnQqIGNhY2hlZERvY3VtZW50ID0gdmFs
dWUtPmxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwpAQCAtNDgwOSwzNCArNDc4NSwzNCBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCkKICAgICAgICAgICAg
IHJlZmVyZW5jZUZpbHRlci0+c2V0Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UoYWRvcHRQdHIo
bmV3IENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGNhY2hlZERvY3VtZW50KSkpOwogICAgICAg
ICB9CiAgICAgfQotICAgIG1fcGVuZGluZ1NWR0RvY3VtZW50cy5jbGVhcigpOworICAgIHN0YXRl
LnBlbmRpbmdTVkdEb2N1bWVudHMoKS5jbGVhcigpOwogfQogI2VuZGlmCiAKICNpZiBFTkFCTEUo
Q1NTX1NIQURFUlMpCi1TdHlsZVNoYWRlciogU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFkZXIoQ1NT
VmFsdWUqIHZhbHVlKQorU3R5bGVTaGFkZXIqIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhZGVyKFN0
eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1
ZS0+aXNXZWJLaXRDU1NTaGFkZXJWYWx1ZSgpKQotICAgICAgICByZXR1cm4gY2FjaGVkT3JQZW5k
aW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTU2hhZGVyVmFsdWUq
Pih2YWx1ZSkpOworICAgICAgICByZXR1cm4gY2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9t
VmFsdWUoc3RhdGUsIHN0YXRpY19jYXN0PFdlYktpdENTU1NoYWRlclZhbHVlKj4odmFsdWUpKTsK
ICAgICByZXR1cm4gMDsKIH0KIAotU3R5bGVTaGFkZXIqIFN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9y
UGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKFdlYktpdENTU1NoYWRlclZhbHVlKiB2YWx1ZSkK
K1N0eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZy
b21WYWx1ZShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIFdlYktpdENTU1NoYWRlclZhbHVlKiB2
YWx1ZSkKIHsKICAgICBTdHlsZVNoYWRlciogc2hhZGVyID0gdmFsdWUtPmNhY2hlZE9yUGVuZGlu
Z1NoYWRlcigpOwogICAgIGlmIChzaGFkZXIgJiYgc2hhZGVyLT5pc1BlbmRpbmdTaGFkZXIoKSkK
LSAgICAgICAgbV9oYXNQZW5kaW5nU2hhZGVycyA9IHRydWU7CisgICAgICAgIHN0YXRlLnNldEhh
c1BlbmRpbmdTaGFkZXJzKHRydWUpOwogICAgIHJldHVybiBzaGFkZXI7CiB9CiAKLXZvaWQgU3R5
bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJzKCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bG9h
ZFBlbmRpbmdTaGFkZXJzKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoIW1f
c3R5bGUtPmhhc0ZpbHRlcigpIHx8ICFtX2hhc1BlbmRpbmdTaGFkZXJzKQorICAgIGlmICghc3Rh
dGUuc3R5bGUoKS0+aGFzRmlsdGVyKCkgfHwgIXN0YXRlLmhhc1BlbmRpbmdTaGFkZXJzKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJj
ZUxvYWRlciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsK
KyAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBzdGF0ZS5l
bGVtZW50KCktPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAKLSAgICBWZWN0
b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9IG1fc3R5bGUt
Pm11dGFibGVGaWx0ZXIoKS5vcGVyYXRpb25zKCk7CisgICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJP
cGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBzdGF0ZS5zdHlsZSgpLT5tdXRhYmxlRmls
dGVyKCkub3BlcmF0aW9ucygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJP
cGVyYXRpb25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+
IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlck9wZXJhdGlvbnMuYXQoaSk7CiAgICAgICAgIGlmIChm
aWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OkNV
U1RPTSkgewpAQCAtNDg1Myw3ICs0ODI5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVu
ZGluZ1NoYWRlcnMoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIG1faGFz
UGVuZGluZ1NoYWRlcnMgPSBmYWxzZTsKKyAgICBzdGF0ZS5zZXRIYXNQZW5kaW5nU2hhZGVycyhm
YWxzZSk7CiB9CiAKIHN0YXRpYyBib29sIHNvcnRQYXJhbWV0ZXJzQnlOYW1lQ29tcGFyYXRvcihj
b25zdCBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiYgYSwgY29uc3QgUmVmUHRyPEN1c3Rv
bUZpbHRlclBhcmFtZXRlcj4mIGIpCkBAIC00ODkxLDE2ICs0ODY3LDE2IEBAIFBhc3NSZWZQdHI8
Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlck51
bWJlclBhcmFtZXRlCiAgICAgcmV0dXJuIG51bWJlclBhcmFtZXRlci5yZWxlYXNlKCk7CiB9CiAK
LVBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1
c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVl
TGlzdCogdmFsdWVzKQorUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVz
b2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKFN0eWxlUmVzb2x2ZVN0
YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqIHZhbHVlcykKIHsK
ICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyPiB0cmFuc2Zvcm1QYXJh
bWV0ZXIgPSBDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXI6OmNyZWF0ZShuYW1lKTsKICAg
ICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgY3JlYXRlVHJhbnNmb3JtT3Bl
cmF0aW9ucyh2YWx1ZXMsIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgb3BlcmF0aW9ucyk7
CisgICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZXMsIHN0YXRlLnN0eWxlKCksIHN0
YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgb3BlcmF0aW9ucyk7CiAgICAgdHJhbnNmb3JtUGFyYW1l
dGVyLT5zZXRPcGVyYXRpb25zKG9wZXJhdGlvbnMpOwogICAgIHJldHVybiB0cmFuc2Zvcm1QYXJh
bWV0ZXIucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4g
U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBu
YW1lLCBDU1NWYWx1ZSogcGFyYW1ldGVyVmFsdWUpCitQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBh
cmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIoU3R5bGVS
ZXNvbHZlU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlKiBwYXJhbWV0
ZXJWYWx1ZSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG90aGVyIHBhcmFtZXRlcnMgdHlw
ZXMgcGFyc2luZy4KICAgICAvLyBib29sZWFuczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc2NDM4CkBAIC00OTIzLDcgKzQ4OTksNyBAQCBQYXNzUmVmUHRyPEN1c3Rv
bUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0
ZXIoY29ucwogICAgIC8vIGFyZSB0cmFuc2Zvcm1zLiBwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9y
bVBhcmFtZXRlciB3aWxsCiAgICAgLy8gcmV0dXJuIDAgaWYgdGhhdCBhc3N1bXB0aW9uIGlzIGlu
Y29ycmVjdC4KICAgICBpZiAodmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApLT5pc1dl
YktpdENTU1RyYW5zZm9ybVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBwYXJzZUN1c3RvbUZpbHRl
clRyYW5zZm9ybVBhcmFtZXRlcihuYW1lLCB2YWx1ZXMpOworICAgICAgICByZXR1cm4gcGFyc2VD
dXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIoc3RhdGUsIG5hbWUsIHZhbHVlcyk7CiAKICAg
ICAvLyBXZSBjYW4gaGF2ZSBvbmx5IGFycmF5cyBvZiBib29sZWFucyBvciBudW1iZXJzLCBzbyB1
c2UgdGhlIGZpcnN0IHZhbHVlIHRvIGNob29zZSBiZXR3ZWVuIHRob3NlIHR3by4KICAgICAvLyBX
ZSBuZWVkIHVwIHRvIDQgdmFsdWVzIChhbGwgYm9vbGVhbnMgb3IgYWxsIG51bWJlcnMpLgpAQCAt
NDk0MCw3ICs0OTE2LDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxl
UmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKGNvbnMKICAgICByZXR1cm4gMDsK
IH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3Qo
Q1NTVmFsdWUqIHBhcmFtZXRlcnNWYWx1ZSwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYgcGFy
YW1ldGVyTGlzdCkKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0
ZXJMaXN0KFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHBhcmFtZXRlcnNWYWx1
ZSwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVyTGlzdCkKIHsKICAgICBIYXNo
U2V0PFN0cmluZz4ga25vd25QYXJhbWV0ZXJOYW1lczsKICAgICBDU1NWYWx1ZUxpc3RJdGVyYXRv
ciBwYXJhbWV0ZXJJdGVyYXRvcihwYXJhbWV0ZXJzVmFsdWUpOwpAQCAtNDk2NSw3ICs0OTQxLDcg
QEAgYm9vbCBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QoQ1NT
VmFsdWUqIHBhcmFtZXRlcnNWYWx1ZSwgQ3UKICAgICAgICAgaWYgKCFpdGVyYXRvci5oYXNNb3Jl
KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8
Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJhbWV0ZXIgPSBwYXJzZUN1c3RvbUZpbHRlclBhcmFt
ZXRlcihuYW1lLCBpdGVyYXRvci52YWx1ZSgpKTsKKyAgICAgICAgUmVmUHRyPEN1c3RvbUZpbHRl
clBhcmFtZXRlcj4gcGFyYW1ldGVyID0gcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIoc3RhdGUs
IG5hbWUsIGl0ZXJhdG9yLnZhbHVlKCkpOwogICAgICAgICBpZiAoIXBhcmFtZXRlcikKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcGFyYW1ldGVyTGlzdC5hcHBlbmQocGFyYW1l
dGVyLnJlbGVhc2UoKSk7CkBAIC00OTc3LDcgKzQ5NTMsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6
OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChDU1NWYWx1ZSogcGFyYW1ldGVyc1ZhbHVl
LCBDdQogICAgIHJldHVybiB0cnVlOwogfQogCi1QYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJh
dGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFdlYktpdENT
U0ZpbHRlclZhbHVlKiBmaWx0ZXJWYWx1ZSkKK1Bhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0
aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oU3R5bGVSZXNv
bHZlU3RhdGUmIHN0YXRlLCBXZWJLaXRDU1NGaWx0ZXJWYWx1ZSogZmlsdGVyVmFsdWUpCiB7CiAg
ICAgQVNTRVJUKGZpbHRlclZhbHVlLT5sZW5ndGgoKSk7CiAKQEAgLTQ5ODgsNyArNDk2NCw3IEBA
IFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVhdGVD
dXN0b21GaWx0ZXJPcGVyYXRpb24oV2ViCiAgICAgdW5zaWduZWQgc2hhZGVyc0xpc3RMZW5ndGgg
PSBzaGFkZXJzTGlzdC0+bGVuZ3RoKCk7CiAgICAgQVNTRVJUKHNoYWRlcnNMaXN0TGVuZ3RoKTsK
IAotICAgIFJlZlB0cjxTdHlsZVNoYWRlcj4gdmVydGV4U2hhZGVyID0gc3R5bGVTaGFkZXIoc2hh
ZGVyc0xpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOworICAgIFJlZlB0cjxTdHlsZVNo
YWRlcj4gdmVydGV4U2hhZGVyID0gc3R5bGVTaGFkZXIoc3RhdGUsIHNoYWRlcnNMaXN0LT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDApKTsKICAgICBSZWZQdHI8U3R5bGVTaGFkZXI+IGZyYWdtZW50
U2hhZGVyOwogICAgIEN1c3RvbUZpbHRlclByb2dyYW1UeXBlIHByb2dyYW1UeXBlID0gUFJPR1JB
TV9UWVBFX0JMRU5EU19FTEVNRU5UX1RFWFRVUkU7CiAgICAgQ3VzdG9tRmlsdGVyUHJvZ3JhbU1p
eFNldHRpbmdzIG1peFNldHRpbmdzOwpAQCAtNTAwMSw3ICs0OTc3LDcgQEAgUGFzc1JlZlB0cjxD
dXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9w
ZXJhdGlvbihXZWIKICAgICAgICAgICAgIENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGl0ZXJhdG9yKG1p
eEZ1bmN0aW9uKTsKIAogICAgICAgICAgICAgQVNTRVJUKG1peEZ1bmN0aW9uLT5sZW5ndGgoKSk7
Ci0gICAgICAgICAgICBmcmFnbWVudFNoYWRlciA9IHN0eWxlU2hhZGVyKGl0ZXJhdG9yLnZhbHVl
KCkpOworICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXIgPSBzdHlsZVNoYWRlcihzdGF0ZSwgaXRl
cmF0b3IudmFsdWUoKSk7CiAgICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7CiAKICAgICAg
ICAgICAgIEFTU0VSVChtaXhGdW5jdGlvbi0+bGVuZ3RoKCkgPD0gMyk7CkBAIC01MDE3LDcgKzQ5
OTMsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6
Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFdlYgogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgcHJvZ3JhbVR5cGUgPSBQUk9HUkFNX1RZUEVfTk9fRUxFTUVO
VF9URVhUVVJFOwotICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXIgPSBzdHlsZVNoYWRlcihmcmFn
bWVudFNoYWRlck9yTWl4RnVuY3Rpb24pOworICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXIgPSBz
dHlsZVNoYWRlcihzdGF0ZSwgZnJhZ21lbnRTaGFkZXJPck1peEZ1bmN0aW9uKTsKICAgICAgICAg
fQogICAgIH0KICAgICAKQEAgLTUwNzMsNyArNTA0OSw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmls
dGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24o
V2ViCiAgICAgICAgIHBhcmFtZXRlcnNWYWx1ZSA9IGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDIpOwogICAgIAogICAgIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QgcGFyYW1l
dGVyTGlzdDsKLSAgICBpZiAocGFyYW1ldGVyc1ZhbHVlICYmICFwYXJzZUN1c3RvbUZpbHRlclBh
cmFtZXRlckxpc3QocGFyYW1ldGVyc1ZhbHVlLCBwYXJhbWV0ZXJMaXN0KSkKKyAgICBpZiAocGFy
YW1ldGVyc1ZhbHVlICYmICFwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3Qoc3RhdGUsIHBh
cmFtZXRlcnNWYWx1ZSwgcGFyYW1ldGVyTGlzdCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAog
ICAgIFJlZlB0cjxTdHlsZUN1c3RvbUZpbHRlclByb2dyYW0+IHByb2dyYW0gPSBTdHlsZUN1c3Rv
bUZpbHRlclByb2dyYW06OmNyZWF0ZSh2ZXJ0ZXhTaGFkZXIucmVsZWFzZSgpLCBmcmFnbWVudFNo
YWRlci5yZWxlYXNlKCksIHByb2dyYW1UeXBlLCBtaXhTZXR0aW5ncywgbWVzaFR5cGUpOwpAQCAt
NTA4MSw3ICs1MDU3LDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxl
UmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWIKIH0KICNlbmRpZgogCi1i
b29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFs
dWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgRmlsdGVyT3Bl
cmF0aW9ucyYgb3V0T3BlcmF0aW9ucykKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVy
T3BlcmF0aW9ucyhTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiBpblZhbHVlLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIEZpbHRlck9wZXJhdGlv
bnMmIG91dE9wZXJhdGlvbnMpCiB7CiAgICAgQVNTRVJUKG91dE9wZXJhdGlvbnMuaXNFbXB0eSgp
KTsKICAgICAKQEAgLTUxMTQsNyArNTA5MCw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRl
RmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBpZiAob3BlcmF0aW9uVHlw
ZSA9PSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSkgewotICAgICAgICAgICAgUmVmUHRyPEN1c3Rv
bUZpbHRlck9wZXJhdGlvbj4gb3BlcmF0aW9uID0gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
KGZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+
IG9wZXJhdGlvbiA9IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihzdGF0ZSwgZmlsdGVyVmFs
dWUpOwogICAgICAgICAgICAgaWYgKCFvcGVyYXRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgCkBAIC01MTMyLDEyICs1MTA4LDEyIEBAIGJvb2wgU3R5bGVS
ZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVy
U3R5bGUqIHN0eWxlCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIFdl
YktpdENTU1NWR0RvY3VtZW50VmFsdWUqIHN2Z0RvY3VtZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxX
ZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKj4oYXJndW1lbnQpOwotICAgICAgICAgICAgS1VSTCB1
cmwgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN2Z0RvY3VtZW50VmFsdWUt
PnVybCgpKTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gLyptX2VsZW1lbnQtPiovZG9jdW1lbnQo
KS0+Y29tcGxldGVVUkwoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCkpOwogCiAgICAgICAgICAgICBS
ZWZQdHI8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPiBvcGVyYXRpb24gPSBSZWZlcmVuY2VGaWx0
ZXJPcGVyYXRpb246OmNyZWF0ZShzdmdEb2N1bWVudFZhbHVlLT51cmwoKSwgdXJsLmZyYWdtZW50
SWRlbnRpZmllcigpLCBvcGVyYXRpb25UeXBlKTsKLSAgICAgICAgICAgIGlmIChTVkdVUklSZWZl
cmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIG1f
ZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6
OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIHN0YXRlLmRv
Y3VtZW50KCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFzdmdEb2N1bWVudFZhbHVlLT5sb2Fk
UmVxdWVzdGVkKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fcGVuZGluZ1NWR0RvY3VtZW50cy5z
ZXQob3BlcmF0aW9uLmdldCgpLCBzdmdEb2N1bWVudFZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cygpLnNldChvcGVyYXRpb24uZ2V0KCksIHN2Z0Rv
Y3VtZW50VmFsdWUpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN2Z0RvY3VtZW50VmFsdWUt
PmNhY2hlZFNWR0RvY3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbi0+c2V0
Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UoYWRvcHRQdHIobmV3IENhY2hlZFNWR0RvY3VtZW50
UmVmZXJlbmNlKHN2Z0RvY3VtZW50VmFsdWUtPmNhY2hlZFNWR0RvY3VtZW50KCkpKSk7CiAgICAg
ICAgICAgICB9CkBAIC01MjIxLDcgKzUxOTcsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0
ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZQog
ICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxl
bmd0aDxpbnQ+KHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpIDogMDsKICAgICAgICAgICAg
IENvbG9yIGNvbG9yOwogICAgICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQotICAgICAgICAgICAg
ICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0KCkpOwor
ICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoc3RhdGUsIGl0
ZW0tPmNvbG9yLmdldCgpKTsKIAogICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCku
YXBwZW5kKERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShsb2NhdGlvbiwgYmx1ciwg
Y29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6dHJhbnNwYXJlbnQsIG9wZXJhdGlvblR5
cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTI0MSw3ICs1MjE3LDcgQEAgYm9vbCBTdHls
ZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5k
ZXJTdHlsZSogc3R5bGUKIAogUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjps
b2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW5nSW1hZ2UpCiB7Ci0gICAg
Q2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9lbGVtZW50LT5k
b2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworICAgIENhY2hlZFJlc291cmNlTG9h
ZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IGRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9h
ZGVyKCk7CiAKICAgICBpZiAocGVuZGluZ0ltYWdlLT5jc3NJbWFnZVZhbHVlKCkpIHsKICAgICAg
ICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VWYWx1ZSA9IHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VWYWx1
ZSgpOwpAQCAtNTI2OSwyNSArNTI0NSwyNSBAQCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxl
UmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2UqIHBlbmRpbgogICAg
IHJldHVybiAwOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkK
K3ZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoU3R5bGVSZXNvbHZlU3RhdGUm
IHN0YXRlKQogewotICAgIGlmIChtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuaXNFbXB0eSgpKQor
ICAgIGlmIChzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6
OktleXMgZW5kID0gbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmVuZCgpLmtleXMoKTsKLSAgICBm
b3IgKFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBpdCA9IG1f
cGVuZGluZ0ltYWdlUHJvcGVydGllcy5iZWdpbigpLmtleXMoKTsgaXQgIT0gZW5kOyArK2l0KSB7
CisgICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGVuZCA9
IHN0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5lbmQoKS5rZXlzKCk7CisgICAgZm9yIChQ
ZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQgPSBzdGF0ZS5w
ZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuYmVnaW4oKS5rZXlzKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewogICAgICAgICBDU1NQcm9wZXJ0eUlEIGN1cnJlbnRQcm9wZXJ0eSA9ICppdDsKIAogICAgICAg
ICBzd2l0Y2ggKGN1cnJlbnRQcm9wZXJ0eSkgewogICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFj
a2dyb3VuZEltYWdlOiB7Ci0gICAgICAgICAgICBmb3IgKEZpbGxMYXllciogYmFja2dyb3VuZExh
eWVyID0gbV9zdHlsZS0+YWNjZXNzQmFja2dyb3VuZExheWVycygpOyBiYWNrZ3JvdW5kTGF5ZXI7
IGJhY2tncm91bmRMYXllciA9IGJhY2tncm91bmRMYXllci0+bmV4dCgpKSB7CisgICAgICAgICAg
ICBmb3IgKEZpbGxMYXllciogYmFja2dyb3VuZExheWVyID0gc3RhdGUuc3R5bGUoKS0+YWNjZXNz
QmFja2dyb3VuZExheWVycygpOyBiYWNrZ3JvdW5kTGF5ZXI7IGJhY2tncm91bmRMYXllciA9IGJh
Y2tncm91bmRMYXllci0+bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGJhY2tncm91bmRM
YXllci0+aW1hZ2UoKSAmJiBiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCktPmlzUGVuZGluZ0ltYWdl
KCkpCiAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRMYXllci0+c2V0SW1hZ2UobG9hZFBl
bmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGJhY2tncm91bmRMYXll
ci0+aW1hZ2UoKSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDb250ZW50OiB7Ci0gICAgICAgICAgICBmb3Ig
KENvbnRlbnREYXRhKiBjb250ZW50RGF0YSA9IGNvbnN0X2Nhc3Q8Q29udGVudERhdGEqPihtX3N0
eWxlLT5jb250ZW50RGF0YSgpKTsgY29udGVudERhdGE7IGNvbnRlbnREYXRhID0gY29udGVudERh
dGEtPm5leHQoKSkgeworICAgICAgICAgICAgZm9yIChDb250ZW50RGF0YSogY29udGVudERhdGEg
PSBjb25zdF9jYXN0PENvbnRlbnREYXRhKj4oc3RhdGUuc3R5bGUoKS0+Y29udGVudERhdGEoKSk7
IGNvbnRlbnREYXRhOyBjb250ZW50RGF0YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoY29udGVudERhdGEtPmlzSW1hZ2UoKSkgewogICAgICAgICAgICAgICAg
ICAgICBTdHlsZUltYWdlKiBpbWFnZSA9IHN0YXRpY19jYXN0PEltYWdlQ29udGVudERhdGEqPihj
b250ZW50RGF0YSktPmltYWdlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+aXNQ
ZW5kaW5nSW1hZ2UoKSkgewpAQCAtNTMwMCw3ICs1Mjc2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
Ojpsb2FkUGVuZGluZ0ltYWdlcygpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5Q3Vyc29yOiB7Ci0gICAgICAgICAgICBpZiAoQ3Vyc29yTGlz
dCogY3Vyc29yTGlzdCA9IG1fc3R5bGUtPmN1cnNvcnMoKSkgeworICAgICAgICAgICAgaWYgKEN1
cnNvckxpc3QqIGN1cnNvckxpc3QgPSBzdGF0ZS5zdHlsZSgpLT5jdXJzb3JzKCkpIHsKICAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnNvckxpc3QtPnNpemUoKTsgKytp
KSB7CiAgICAgICAgICAgICAgICAgICAgIEN1cnNvckRhdGEmIGN1cnJlbnRDdXJzb3IgPSBjdXJz
b3JMaXN0LT5hdChpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKFN0eWxlSW1hZ2UqIGltYWdl
ID0gY3VycmVudEN1cnNvci5pbWFnZSgpKSB7CkBAIC01MzEyLDE3ICs1Mjg4LDE3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlOiB7Ci0gICAg
ICAgICAgICBpZiAobV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSAmJiBtX3N0eWxlLT5saXN0U3R5
bGVJbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dExpc3RTdHlsZUltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5n
SW1hZ2UqPihtX3N0eWxlLT5saXN0U3R5bGVJbWFnZSgpKSkpOworICAgICAgICAgICAgaWYgKHN0
YXRlLnN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCkgJiYgc3RhdGUuc3R5bGUoKS0+bGlzdFN0eWxl
SW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVu
ZGluZ0ltYWdlKj4oc3RhdGUuc3R5bGUoKS0+bGlzdFN0eWxlSW1hZ2UoKSkpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFn
ZVNvdXJjZTogewotICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCkg
JiYgbV9zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdl
KHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+Ym9yZGVySW1hZ2VTb3Vy
Y2UoKSkpKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNvdXJj
ZSgpICYmIHN0YXRlLnN0eWxlKCktPmJvcmRlckltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdl
KCkpCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Qm9yZGVySW1hZ2VTb3VyY2Uo
bG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KHN0YXRlLnN0
eWxlKCktPmJvcmRlckltYWdlU291cmNlKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewotICAgICAg
ICAgICAgaWYgKFN0eWxlUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1fc3R5bGUtPmJveFJlZmxl
Y3QoKSkgeworICAgICAgICAgICAgaWYgKFN0eWxlUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IHN0
YXRlLnN0eWxlKCktPmJveFJlZmxlY3QoKSkgewogICAgICAgICAgICAgICAgIGNvbnN0IE5pbmVQ
aWVjZUltYWdlJiBtYXNrSW1hZ2UgPSByZWZsZWN0aW9uLT5tYXNrKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKG1hc2tJbWFnZS5pbWFnZSgpICYmIG1hc2tJbWFnZS5pbWFnZSgpLT5pc1BlbmRpbmdJ
bWFnZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTdHlsZUltYWdlPiBsb2FkZWRJ
bWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPiht
YXNrSW1hZ2UuaW1hZ2UoKSkpOwpAQCAtNTMzMiwxMiArNTMwOCwxMiBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2U6IHsKLSAg
ICAgICAgICAgIGlmIChtX3N0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSAmJiBtX3N0eWxlLT5t
YXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRNYXNrQm94SW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2Fz
dDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpKSkpOwor
ICAgICAgICAgICAgaWYgKHN0YXRlLnN0eWxlKCktPm1hc2tCb3hJbWFnZVNvdXJjZSgpICYmIHN0
YXRlLnN0eWxlKCktPm1hc2tCb3hJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hc2tCb3hJbWFnZVNvdXJjZShsb2FkUGVu
ZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oc3RhdGUuc3R5bGUoKS0+
bWFza0JveEltYWdlU291cmNlKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlOiB7Ci0gICAgICAgICAgICBm
b3IgKEZpbGxMYXllciogbWFza0xheWVyID0gbV9zdHlsZS0+YWNjZXNzTWFza0xheWVycygpOyBt
YXNrTGF5ZXI7IG1hc2tMYXllciA9IG1hc2tMYXllci0+bmV4dCgpKSB7CisgICAgICAgICAgICBm
b3IgKEZpbGxMYXllciogbWFza0xheWVyID0gc3RhdGUuc3R5bGUoKS0+YWNjZXNzTWFza0xheWVy
cygpOyBtYXNrTGF5ZXI7IG1hc2tMYXllciA9IG1hc2tMYXllci0+bmV4dCgpKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKG1hc2tMYXllci0+aW1hZ2UoKSAmJiBtYXNrTGF5ZXItPmltYWdlKCktPmlz
UGVuZGluZ0ltYWdlKCkpCiAgICAgICAgICAgICAgICAgICAgIG1hc2tMYXllci0+c2V0SW1hZ2Uo
bG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tMYXll
ci0+aW1hZ2UoKSkpKTsKICAgICAgICAgICAgIH0KQEAgLTUzNDgsMjIgKzUzMjQsMjIgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuY2xlYXIoKTsKKyAgICBzdGF0ZS5wZW5kaW5n
SW1hZ2VQcm9wZXJ0aWVzKCkuY2xlYXIoKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpsb2Fk
UGVuZGluZ1Jlc291cmNlcygpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nUmVzb3Vy
Y2VzKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKIHsKICAgICAvLyBTdGFydCBsb2FkaW5nIGlt
YWdlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdJbWFnZXMoKTsK
KyAgICBsb2FkUGVuZGluZ0ltYWdlcyhzdGF0ZSk7CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMp
CiAgICAgLy8gU3RhcnQgbG9hZGluZyB0aGUgc2hhZGVycyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5
bGUuCi0gICAgbG9hZFBlbmRpbmdTaGFkZXJzKCk7CisgICAgbG9hZFBlbmRpbmdTaGFkZXJzKHN0
YXRlKTsKICNlbmRpZgogICAgIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNW
RykKICAgICAvLyBTdGFydCBsb2FkaW5nIHRoZSBTVkcgRG9jdW1lbnRzIHJlZmVyZW5jZWQgYnkg
dGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ1NWR0RvY3VtZW50cygpOworICAgIGxvYWRQZW5k
aW5nU1ZHRG9jdW1lbnRzKHN0YXRlKTsKICNlbmRpZgogfQogCkBAIC01NDExLDcgKzUzODcsNiBA
QCB2b2lkIE1lZGlhUXVlcnlSZXN1bHQ6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdElu
Zm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbgogdm9pZCBTdHlsZVJlc29sdmVyOjpyZXBvcnRNZW1v
cnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogewogICAg
IE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1v
cnlUeXBlczo6Q1NTKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3N0eWxlKTsKICAgICBpbmZvLmFk
ZE1lbWJlcihtX2F1dGhvclN0eWxlKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3VzZXJTdHlsZSk7
CiAgICAgaW5mby5hZGRNZW1iZXIobV9mZWF0dXJlcyk7CkBAIC01NDIwLDMxICs1Mzk1LDE2IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyog
bWVtb3J5T2JqZWN0SW5mbykgY29uc3QKICAgICBpbmZvLmFkZE1lbWJlcihtX2tleWZyYW1lc1J1
bGVNYXApOwogICAgIGluZm8uYWRkTWVtYmVyKG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZSk7CiAg
ICAgaW5mby5hZGRNZW1iZXIobV9tYXRjaGVkUHJvcGVydGllc0NhY2hlU3dlZXBUaW1lcik7Ci0g
ICAgaW5mby5hZGRNZW1iZXIobV9tYXRjaGVkUnVsZXMpOwogCi0gICAgaW5mby5hZGRNZW1iZXIo
bV9ydWxlTGlzdCk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVz
KTsKICAgICBpbmZvLmFkZE1lbWJlcihtX21lZGl1bSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9y
b290RGVmYXVsdFN0eWxlKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2RvY3VtZW50KTsKIAotICAg
IC8vIEZJWE1FOiBwb2ludGVyIHRvIFJlbmRlclN0eWxlIGNvdWxkIHBvaW50IHRvIGFuIGFscmVh
ZHkgZGVsZXRlZCBvYmplY3QuCi0gICAgaW5mby5pZ25vcmVNZW1iZXIobV9wYXJlbnRTdHlsZSk7
Ci0gICAgaW5mby5pZ25vcmVNZW1iZXIobV9yb290RWxlbWVudFN0eWxlKTsKLQotICAgIGluZm8u
YWRkTWVtYmVyKG1fZWxlbWVudCk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9zdHlsZWRFbGVtZW50
KTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3JlZ2lvbkZvclN0eWxpbmcpOwotICAgIGluZm8uYWRk
TWVtYmVyKG1fcGFyZW50Tm9kZSk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9saW5lSGVpZ2h0VmFs
dWUpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fZm9udFNlbGVjdG9yKTsKICAgICBpbmZvLmFkZE1l
bWJlcihtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMpOwogICAgIGluZm8uaWdu
b3JlTWVtYmVyKG1fc3R5bGVCdWlsZGVyKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3N0eWxlUnVs
ZVRvQ1NTT01XcmFwcGVyTWFwKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3N0eWxlU2hlZXRDU1NP
TVdyYXBwZXJTZXQpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKLSAg
ICBpbmZvLmFkZE1lbWJlcihtX3BlbmRpbmdTVkdEb2N1bWVudHMpOwotI2VuZGlmCiAgICAgaW5m
by5hZGRNZW1iZXIobV9zY29wZVJlc29sdmVyKTsKIAogICAgIC8vIEZJWE1FOiBtb3ZlIHRoaXMg
dG8gYSBwbGFjZSB3aGVyZSBpdCB3b3VsZCBiZSBjYWxsZWQgb25seSBvbmNlPwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmgKaW5kZXggM2M0MzRmMjQ0Njg4MzIwNWE0M2Y1NzRhN2QwYjg5MmRk
MTEzZTE5Yy4uOGI2OGM3ODc5YTAwZDQzODZjNTc5MGNmMTUyMmRhZGMzZGFjNzk2ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0yMyw2ICsyMyw3IEBACiAjZGVmaW5lIFN0eWxl
UmVzb2x2ZXJfaAogCiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgIkNTU1J1bGVMaXN0
LmgiCiAjaW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5o
IgogI2luY2x1ZGUgIkxpbmtIYXNoLmgiCkBAIC0zNCw4ICszNSwxMiBAQAogI2luY2x1ZGUgIlNl
bGVjdG9yQ2hlY2tlci5oIgogI2luY2x1ZGUgIlNlbGVjdG9yRmlsdGVyLmgiCiAjaW5jbHVkZSAi
U3R5bGVJbmhlcml0ZWREYXRhLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlU3RhdGUuaCIKICNp
bmNsdWRlICJTdHlsZVNjb3BlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJWaWV3cG9ydFN0eWxlUmVz
b2x2ZXIuaCIKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCisjaW5jbHVk
ZSAiV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZS5oIgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KQEAgLTg2LDYgKzkxLDcgQEAgY2xhc3MgU3R5bGVJbWFnZTsKIGNsYXNzIFN0eWxlS2V5ZnJh
bWU7CiBjbGFzcyBTdHlsZVBlbmRpbmdJbWFnZTsKIGNsYXNzIFN0eWxlUHJvcGVydHlTZXQ7Citj
bGFzcyBTdHlsZVJlc29sdmVTdGF0ZTsKIGNsYXNzIFN0eWxlUnVsZTsKICNpZiBFTkFCTEUoU0hB
RE9XX0RPTSkKIGNsYXNzIFN0eWxlUnVsZUhvc3Q7CkBAIC0xMzIsNiArMTM4LDkgQEAgZW51bSBS
dWxlTWF0Y2hpbmdCZWhhdmlvciB7CiAgICAgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMsCiB9Owog
CisjaWZuZGVmIFRBU0FLCisjZW5kaWYKKwogLy8gVGhpcyBjbGFzcyBzZWxlY3RzIGEgUmVuZGVy
U3R5bGUgZm9yIGEgZ2l2ZW4gZWxlbWVudCBiYXNlZCBvbiBhIGNvbGxlY3Rpb24gb2Ygc3R5bGVz
aGVldHMuCiBjbGFzcyBTdHlsZVJlc29sdmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShT
dHlsZVJlc29sdmVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC0xNjEsMjAgKzE3MCw3
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZv
ckRvY3VtZW50KERvY3VtZW50KiwgQ1NTRm9udFNlbGVjdG9yKiA9IDApOwogCi0gICAgUmVuZGVy
U3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotICAgIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7IH0KLSAg
ICBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEVs
ZW1lbnRTdHlsZTsgfQotICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2Vs
ZW1lbnQ7IH0KICAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3Vt
ZW50OyB9Ci0gICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7IHJl
dHVybiBzdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsgfQotICAgIGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gcGFyZW50U3R5bGUoKS0+Zm9u
dERlc2NyaXB0aW9uKCk7IH0KLSAgICB2b2lkIHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsgfQotICAgIHZvaWQgc2V0Wm9vbShm
bG9hdCBmKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFpvb20oZik7IH0KLSAgICB2b2lk
IHNldEVmZmVjdGl2ZVpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRF
ZmZlY3RpdmVab29tKGYpOyB9Ci0gICAgdm9pZCBzZXRUZXh0U2l6ZUFkanVzdChib29sIGIpIHsg
bV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0VGV4dFNpemVBZGp1c3QoYik7IH0KLSAgICB2b2lk
IHNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IG1fZm9udERpcnR5IHw9
IHN0eWxlKCktPnNldFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsgfQotICAgIHZvaWQgc2V0VGV4
dE9yaWVudGF0aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24pIHsgbV9mb250RGly
dHkgfD0gc3R5bGUoKS0+c2V0VGV4dE9yaWVudGF0aW9uKHRleHRPcmllbnRhdGlvbik7IH0KLSAg
ICBib29sIGhhc1BhcmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudE5vZGU7IH0KIAog
ICAgIHZvaWQgcmVzZXRBdXRob3JTdHlsZSgpOwogICAgIHZvaWQgYXBwZW5kQXV0aG9yU3R5bGVT
aGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4gPiYpOwpAQCAtMTk4LDE3ICsxOTQsMTcgQEAgcHJpdmF0ZToKICAgICB9CiAjZW5kaWYKIAot
ICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlID0gMCwgUHNldWRvSWQgPSBOT1BTRVVETyk7Ci0gICAgdm9pZCBpbml0RWxlbWVudChF
bGVtZW50Kik7CisgICAgdm9pZCBpbml0Rm9yU3R5bGVSZXNvbHZlKFN0eWxlUmVzb2x2ZVN0YXRl
JiwgRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDApOworICAgIHZvaWQgaW5p
dEVsZW1lbnQoU3R5bGVSZXNvbHZlU3RhdGUmLCBFbGVtZW50Kik7CiAgICAgdm9pZCBjb2xsZWN0
RmVhdHVyZXMoKTsKLSAgICBSZW5kZXJTdHlsZSogbG9jYXRlU2hhcmVkU3R5bGUoKTsKLSAgICBi
b29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqKTsKLSAgICBi
b29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKTsKKyAgICBSZW5kZXJT
dHlsZSogbG9jYXRlU2hhcmVkU3R5bGUoU3R5bGVSZXNvbHZlU3RhdGUmKTsKKyAgICBib29sIHN0
eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KEVsZW1lbnQqLCBSdWxlU2V0Kik7Cisg
ICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKEVsZW1lbnQqKTsK
ICAgICBOb2RlKiBsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZp
c2l0ZWROb2RlQ291bnQpIGNvbnN0OwotICAgIFN0eWxlZEVsZW1lbnQqIGZpbmRTaWJsaW5nRm9y
U3R5bGVTaGFyaW5nKE5vZGUqLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0OwotICAgIGJvb2wgY2Fu
U2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKKyAgICBTdHlsZWRF
bGVtZW50KiBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhTdHlsZVJlc29sdmVTdGF0ZSYsIE5v
ZGUqLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0OworICAgIGJvb2wgY2FuU2hhcmVTdHlsZVdpdGhF
bGVtZW50KFN0eWxlUmVzb2x2ZVN0YXRlJiwgU3R5bGVkRWxlbWVudCopIGNvbnN0OwogCi0gICAg
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHls
ZSosIGNvbnN0IFN0eWxlS2V5ZnJhbWUqLCBLZXlmcmFtZVZhbHVlJik7CisgICAgUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JLZXlmcmFtZShTdHlsZVJlc29sdmVTdGF0ZSYsIGNvbnN0
IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVLZXlmcmFtZSosIEtleWZyYW1lVmFsdWUmKTsKIAog
cHVibGljOgogICAgIC8vIFRoZXNlIG1ldGhvZHMgd2lsbCBnaXZlIGJhY2sgdGhlIHNldCBvZiBy
dWxlcyB0aGF0IG1hdGNoZWQgZm9yIGEgZ2l2ZW4gZWxlbWVudCAob3IgYSBwc2V1ZG8tZWxlbWVu
dCkuCkBAIC0yMzEsMjUgKzIyNywyOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGludCBsZWdhY3lG
b250U2l6ZShEb2N1bWVudCosIGludCBwaXhlbEZvbnRTaXplLCBib29sIHNob3VsZFVzZUZpeGVk
RGVmYXVsdFNpemUpOwogCiBwdWJsaWM6CisgICAgdm9pZCBhcHBseVByb3BlcnR5V2l0aFZhbHVl
Q2hlY2tpbmcoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwor
ICAgIHZvaWQgYXBwbHlGb250UHJvcGVydHlUb1N0eWxlKFJlbmRlclN0eWxlKiB0YXJnZXQsIGNv
bnN0IFN0eWxlUHJvcGVydHlTZXQqIHJlZmVyZW5jZSk7CisjaWYgMAorICAgIC8vIGJhZCBtZXRo
b2RzIC4uLiBJIHRoaW5rLgogICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVy
dHlJRCwgQ1NTVmFsdWUqLCBSZW5kZXJTdHlsZSopOwogCiAgICAgdm9pZCBhcHBseVByb3BlcnR5
VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKKyNlbmRpZgogCi0gICAg
dm9pZCB1cGRhdGVGb250KCk7Ci0gICAgdm9pZCBpbml0aWFsaXplRm9udFN0eWxlKFNldHRpbmdz
Kik7CisgICAgdm9pZCB1cGRhdGVGb250KFN0eWxlUmVzb2x2ZVN0YXRlJik7CisgICAgdm9pZCBp
bml0aWFsaXplRm9udFN0eWxlKFN0eWxlUmVzb2x2ZVN0YXRlJiwgU2V0dGluZ3MqKTsKIAogICAg
IHN0YXRpYyBmbG9hdCBnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCos
IGZsb2F0IHpvb21GYWN0b3IsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNp
emUsIEVTbWFydE1pbmltdW1Gb3JGb250U2l6ZSA9IFVzZVNtYXJ0TWluaW11bUZvckZvbnRGaXpl
KTsKIAotICAgIHZvaWQgc2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2l6ZSk7
CisgICAgc3RhdGljIHZvaWQgc2V0Rm9udFNpemUoU3R5bGVSZXNvbHZlU3RhdGUmLCBGb250RGVz
Y3JpcHRpb24mLCBmbG9hdCBzaXplKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgZmxvYXQgZ2V0
Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqLCBSZW5kZXJTdHlsZSosIGJv
b2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wgdXNlU1ZHWm9vbVJ1
bGVzKTsKIAogcHVibGljOgotICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCk7Ci0KICAgICBzdGF0
aWMgYm9vbCBjb2xvckZyb21QcmltaXRpdmVWYWx1ZUlzRGVyaXZlZEZyb21FbGVtZW50KENTU1By
aW1pdGl2ZVZhbHVlKik7Ci0gICAgQ29sb3IgY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJp
bWl0aXZlVmFsdWUqLCBib29sIGZvclZpc2l0ZWRMaW5rID0gZmFsc2UpIGNvbnN0OworICAgIHN0
YXRpYyBDb2xvciBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShTdHlsZVJlc29sdmVTdGF0ZSYsIENT
U1ByaW1pdGl2ZVZhbHVlKiwgYm9vbCBmb3JWaXNpdGVkTGluayA9IGZhbHNlKTsKIAogICAgIGJv
b2wgaGFzU2VsZWN0b3JGb3JJZChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKICAgICBib29s
IGhhc1NlbGVjdG9yRm9yQ2xhc3MoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CkBAIC0yODEs
MzQgKzI4MCwzNCBAQCBwdWJsaWM6CiAgICAgQ1NTU3R5bGVSdWxlKiBlbnN1cmVGdWxsQ1NTT01X
cmFwcGVyRm9ySW5zcGVjdG9yKFN0eWxlUnVsZSopOwogCiAjaWYgRU5BQkxFKENTU19GSUxURVJT
KQotICAgIGJvb2wgY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVu
ZGVyU3R5bGUqIGluU3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIEZpbHRlck9wZXJhdGlv
bnMmIG91dE9wZXJhdGlvbnMpOworICAgIGJvb2wgY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhTdHls
ZVJlc29sdmVTdGF0ZSYsIENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogaW5TdHlsZSwg
UmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7
CiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIFN0eWxlU2hhZGVyKiBzdHlsZVNoYWRlcihD
U1NWYWx1ZSopOwotICAgIFN0eWxlU2hhZGVyKiBjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZy
b21WYWx1ZShXZWJLaXRDU1NTaGFkZXJWYWx1ZSopOwotICAgIGJvb2wgcGFyc2VDdXN0b21GaWx0
ZXJQYXJhbWV0ZXJMaXN0KENTU1ZhbHVlKiwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYpOwot
ICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlclBh
cmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlKik7CisgICAgU3R5bGVTaGFkZXIq
IHN0eWxlU2hhZGVyKFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTVmFsdWUqKTsKKyAgICBTdHlsZVNo
YWRlciogY2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoU3R5bGVSZXNvbHZlU3Rh
dGUmLCBXZWJLaXRDU1NTaGFkZXJWYWx1ZSopOworICAgIGJvb2wgcGFyc2VDdXN0b21GaWx0ZXJQ
YXJhbWV0ZXJMaXN0KFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTVmFsdWUqLCBDdXN0b21GaWx0ZXJQ
YXJhbWV0ZXJMaXN0Jik7CisgICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBh
cnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKFN0eWxlUmVzb2x2ZVN0YXRlJiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBDU1NWYWx1ZSopOwogICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVy
PiBwYXJzZUN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NT
VmFsdWVMaXN0Kik7CiAgICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcnNl
Q3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVM
aXN0Kik7Ci0gICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcnNlQ3VzdG9t
RmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0
Kik7Ci0gICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IGNyZWF0ZUN1c3RvbUZp
bHRlck9wZXJhdGlvbihXZWJLaXRDU1NGaWx0ZXJWYWx1ZSopOwotICAgIHZvaWQgbG9hZFBlbmRp
bmdTaGFkZXJzKCk7CisgICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcnNl
Q3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKFN0eWxlUmVzb2x2ZVN0YXRlJiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqKTsKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRl
ck9wZXJhdGlvbj4gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFN0eWxlUmVzb2x2ZVN0YXRl
JiwgV2ViS2l0Q1NTRmlsdGVyVmFsdWUqKTsKKyAgICB2b2lkIGxvYWRQZW5kaW5nU2hhZGVycyhT
dHlsZVJlc29sdmVTdGF0ZSYpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFNWRykKLSAgICB2b2lkIGxv
YWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCk7CisgICAgdm9pZCBsb2FkUGVuZGluZ1NWR0RvY3VtZW50
cyhTdHlsZVJlc29sdmVTdGF0ZSYpOwogI2VuZGlmCiAjZW5kaWYgLy8gRU5BQkxFKENTU19GSUxU
RVJTKQogCi0gICAgdm9pZCBsb2FkUGVuZGluZ1Jlc291cmNlcygpOworICAgIHZvaWQgbG9hZFBl
bmRpbmdSZXNvdXJjZXMoU3R5bGVSZXNvbHZlU3RhdGUmKTsKIAogcHJpdmF0ZToKICAgICAvLyBU
aGlzIGZ1bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBpZiBpdCBkZXRlY3Rz
IHRoYXQgdGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBoYXMgY2hhbmdlZC4gLWR3aAot
ICAgIHZvaWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKTsKLSAgICB2b2lkIGNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJT
dHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7Ci0gICAgdm9pZCBjaGVja0ZvclRleHRT
aXplQWRqdXN0KCk7CisgICAgdm9pZCBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoU3R5bGVS
ZXNvbHZlU3RhdGUmLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7Cisg
ICAgdm9pZCBjaGVja0Zvclpvb21DaGFuZ2UoU3R5bGVSZXNvbHZlU3RhdGUmLCBSZW5kZXJTdHls
ZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgdm9pZCBjaGVja0ZvclRleHRTaXpl
QWRqdXN0KFJlbmRlclN0eWxlKik7CiAKLSAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlKFJlbmRl
clN0eWxlKiBzdHlsZVRvQWRqdXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQq
KTsKKyAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlKFN0eWxlUmVzb2x2ZVN0YXRlJiwgUmVuZGVy
U3R5bGUqIHN0eWxlVG9BZGp1c3QsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVudCop
OwogCi0gICAgdm9pZCBhZGRNYXRjaGVkUnVsZShjb25zdCBSdWxlRGF0YSogcnVsZSkgeyBtX21h
dGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7IH0KKyAgICB2b2lkIGFkZE1hdGNoZWRSdWxlKFN0eWxl
UmVzb2x2ZVN0YXRlJiBzdGF0ZSwgY29uc3QgUnVsZURhdGEqIHJ1bGUpIHsgc3RhdGUubWF0Y2hl
ZFJ1bGVzKCkuYXBwZW5kKHJ1bGUpOyB9CiAKICAgICBzdHJ1Y3QgTWF0Y2hSYW5nZXMgewogICAg
ICAgICBNYXRjaFJhbmdlcygpIDogZmlyc3RVQVJ1bGUoLTEpLCBsYXN0VUFSdWxlKC0xKSwgZmly
c3RBdXRob3JSdWxlKC0xKSwgbGFzdEF1dGhvclJ1bGUoLTEpLCBmaXJzdFVzZXJSdWxlKC0xKSwg
bGFzdFVzZXJSdWxlKC0xKSB7IH0KQEAgLTM0MywzOCArMzQyLDI4IEBAIHByaXZhdGU6CiAgICAg
ICAgIGJvb2wgaXNDYWNoZWFibGU7CiAgICAgfTsKIAotICAgIHN0cnVjdCBNYXRjaFJlcXVlc3Qg
ewotICAgICAgICBNYXRjaFJlcXVlc3QoUnVsZVNldCogcnVsZVNldCwgYm9vbCBpbmNsdWRlRW1w
dHlSdWxlcyA9IGZhbHNlLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSA9IDApCi0gICAgICAg
ICAgICA6IHJ1bGVTZXQocnVsZVNldCkKLSAgICAgICAgICAgICwgaW5jbHVkZUVtcHR5UnVsZXMo
aW5jbHVkZUVtcHR5UnVsZXMpCi0gICAgICAgICAgICAsIHNjb3BlKHNjb3BlKSB7IH0KLSAgICAg
ICAgY29uc3QgUnVsZVNldCogcnVsZVNldDsKLSAgICAgICAgY29uc3QgYm9vbCBpbmNsdWRlRW1w
dHlSdWxlczsKLSAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGU7Ci0gICAgfTsKLQog
ICAgIHN0YXRpYyB2b2lkIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiwgY29uc3Qg
U3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiA9IDAsIHVuc2lnbmVkIGxp
bmtNYXRjaFR5cGUgPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoQWxsLCBQcm9wZXJ0eVdoaXRlbGlz
dFR5cGUgPSBQcm9wZXJ0eVdoaXRlbGlzdE5vbmUpOwogICAgIHZvaWQgYWRkRWxlbWVudFN0eWxl
UHJvcGVydGllcyhNYXRjaFJlc3VsdCYsIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqLCBib29sIGlz
Q2FjaGVhYmxlID0gdHJ1ZSk7CiAKLSAgICB2b2lkIG1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQm
LCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGllcyk7Ci0gICAgdm9pZCBtYXRjaFVBUnVsZXMoTWF0
Y2hSZXN1bHQmKTsKLSAgICB2b2lkIG1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYsIFJ1bGVTZXQq
KTsKLSAgICB2b2lkIG1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVF
bXB0eVJ1bGVzKTsKLSAgICB2b2lkIG1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBp
bmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgdm9pZCBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNo
UmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgdm9pZCBtYXRjaEhvc3RSdWxl
cyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIHZvaWQgbWF0Y2hB
bGxSdWxlcyhTdHlsZVJlc29sdmVTdGF0ZSYgcmVxdWVzdCwgTWF0Y2hSZXN1bHQmLCBib29sIGlu
Y2x1ZGVTTUlMUHJvcGVydGllcyk7CisgICAgdm9pZCBtYXRjaFVBUnVsZXMoU3R5bGVSZXNvbHZl
U3RhdGUmLCBNYXRjaFJlc3VsdCYpOworICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKFN0eWxlUmVzb2x2
ZVN0YXRlJiwgTWF0Y2hSZXN1bHQmLCBSdWxlU2V0Kik7CisgICAgdm9pZCBtYXRjaEF1dGhvclJ1
bGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiwgTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIG1hdGNoVXNl
clJ1bGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiwgTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIG1hdGNo
U2NvcGVkQXV0aG9yUnVsZXMoU3R5bGVSZXNvbHZlU3RhdGUmLCBNYXRjaFJlc3VsdCYpOworICAg
IHZvaWQgbWF0Y2hIb3N0UnVsZXMoU3R5bGVSZXNvbHZlU3RhdGUmLCBNYXRjaFJlc3VsdCYpOwog
Ci0gICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBNYXRjaFJlcXVlc3QmLCBpbnQm
IGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgpOwotICAgIHZvaWQgY29sbGVjdE1h
dGNoaW5nUnVsZXNGb3JSZWdpb24oY29uc3QgTWF0Y2hSZXF1ZXN0JiwgaW50JiBmaXJzdFJ1bGVJ
bmRleCwgaW50JiBsYXN0UnVsZUluZGV4KTsKLSAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiwgY29uc3QgTWF0Y2hSZXF1ZXN0JiwgaW50
JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4KTsKKyAgICB2b2lkIGNvbGxlY3RN
YXRjaGluZ1J1bGVzKFJ1bGVTZXQqLCBTdHlsZVJlc29sdmVTdGF0ZSYsIGludCYgZmlyc3RSdWxl
SW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSAw
KTsKKyAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQqLCBTdHls
ZVJlc29sdmVTdGF0ZSYsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwg
Y29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSAwKTsKKyAgICB2b2lkIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiwgU3R5bGVSZXNvbHZlU3RhdGUm
LCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IENvbnRhaW5l
ck5vZGUqKTsKIAogICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJikg
Y29uc3Q7Ci0gICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7Ci0gICAgdm9pZCBzb3J0QW5kVHJh
bnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIHNvcnRNYXRjaGVkUnVs
ZXMoVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+JiBtYXRjaGVkUnVsZXMpOworICAgIHZvaWQg
c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiwgTWF0Y2hSZXN1
bHQmKTsKIAotICAgIGJvb2wgcnVsZU1hdGNoZXMoY29uc3QgUnVsZURhdGEmLCBjb25zdCBDb250
YWluZXJOb2RlKiBzY29wZSk7CisgICAgYm9vbCBydWxlTWF0Y2hlcyhTdHlsZVJlc29sdmVTdGF0
ZSYsIGNvbnN0IFJ1bGVEYXRhJiwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIFBzZXVkb0lk
JiBkeW5hbWljUHNldWRvKTsKICAgICBib29sIGNoZWNrUmVnaW9uU2VsZWN0b3IoQ1NTU2VsZWN0
b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZW50KiByZWdpb25FbGVtZW50KTsKLSAgICB2b2lkIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBjb25zdCBFbGVtZW50Kik7
CisgICAgdm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKFN0eWxlUmVzb2x2ZVN0YXRlJiwgY29u
c3QgTWF0Y2hSZXN1bHQmLCBjb25zdCBFbGVtZW50Kik7CiAgICAgZW51bSBTdHlsZUFwcGxpY2F0
aW9uUGFzcyB7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCiAgICAgICAgIFZhcmlhYmxlRGVm
aW5pdGlvbnMsCkBAIC0zODMsMTEgKzM3MiwxMSBAQCBwcml2YXRlOgogICAgICAgICBMb3dQcmlv
cml0eVByb3BlcnRpZXMKICAgICB9OwogICAgIHRlbXBsYXRlIDxTdHlsZUFwcGxpY2F0aW9uUGFz
cyBwYXNzPgotICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3Vs
dCYsIGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGlu
aGVyaXRlZE9ubHkpOworICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhTdHlsZVJlc29s
dmVTdGF0ZSYsIGNvbnN0IE1hdGNoUmVzdWx0JiwgYm9vbCBpbXBvcnRhbnQsIGludCBzdGFydElu
ZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25seSk7CiAgICAgdGVtcGxhdGUgPFN0
eWxlQXBwbGljYXRpb25QYXNzIHBhc3M+Ci0gICAgdm9pZCBhcHBseVByb3BlcnRpZXMoY29uc3Qg
U3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiwgYm9vbCBpc0ltcG9ydGFu
dCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgPSBQcm9wZXJ0eVdo
aXRlbGlzdE5vbmUpOworICAgIHZvaWQgYXBwbHlQcm9wZXJ0aWVzKFN0eWxlUmVzb2x2ZVN0YXRl
JiwgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiwgYm9vbCBp
c0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgPSBQ
cm9wZXJ0eVdoaXRlbGlzdE5vbmUpOwogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQotICAgIHZv
aWQgcmVzb2x2ZVZhcmlhYmxlcyhDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIFZlY3RvcjxzdGQ6
OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiA+JiBrbm93bkV4cHJlc3Npb25zKTsKKyAgICB2
b2lkIHJlc29sdmVWYXJpYWJsZXMoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBD
U1NWYWx1ZSosIFZlY3RvcjxzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiA+JiBrbm93
bkV4cHJlc3Npb25zKTsKICNlbmRpZgogICAgIHN0YXRpYyBib29sIGlzVmFsaWRSZWdpb25TdHls
ZVByb3BlcnR5KENTU1Byb3BlcnR5SUQpOwogI2lmIEVOQUJMRShWSURFT19UUkFDSykKQEAgLTM5
Nyw4ICszODYsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgbWF0Y2hQYWdlUnVsZXNGb3JMaXN0KFZl
Y3RvcjxTdHlsZVJ1bGVQYWdlKj4mIG1hdGNoZWRSdWxlcywgY29uc3QgVmVjdG9yPFN0eWxlUnVs
ZVBhZ2UqPiYsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5n
JiBwYWdlTmFtZSk7CiAgICAgU2V0dGluZ3MqIGRvY3VtZW50U2V0dGluZ3MoKSB7IHJldHVybiBt
X2RvY3VtZW50LT5zZXR0aW5ncygpOyB9CiAKLSAgICBib29sIGlzTGVmdFBhZ2UoaW50IHBhZ2VJ
bmRleCkgY29uc3Q7Ci0gICAgYm9vbCBpc1JpZ2h0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdCB7
IHJldHVybiAhaXNMZWZ0UGFnZShwYWdlSW5kZXgpOyB9CisgICAgYm9vbCBpc0xlZnRQYWdlKFJl
bmRlclN0eWxlKiwgaW50IHBhZ2VJbmRleCkgY29uc3Q7CisgICAgYm9vbCBpc1JpZ2h0UGFnZShS
ZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSwgaW50IHBhZ2VJbmRleCkgY29uc3QgeyByZXR1
cm4gIWlzTGVmdFBhZ2Uocm9vdEVsZW1lbnRTdHlsZSwgcGFnZUluZGV4KTsgfQogICAgIGJvb2wg
aXNGaXJzdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7CiAgICAgU3RyaW5nIHBhZ2VOYW1lKGlu
dCBwYWdlSW5kZXgpIGNvbnN0OwogCkBAIC00MDksMzMgKzM5OCwyMyBAQCBwcml2YXRlOgogICAg
IE93blB0cjxSdWxlU2V0PiBtX3NpYmxpbmdSdWxlU2V0OwogICAgIE93blB0cjxSdWxlU2V0PiBt
X3VuY29tbW9uQXR0cmlidXRlUnVsZVNldDsKIAotICAgIGJvb2wgbV9oYXNVQUFwcGVhcmFuY2U7
Ci0gICAgQm9yZGVyRGF0YSBtX2JvcmRlckRhdGE7Ci0gICAgRmlsbExheWVyIG1fYmFja2dyb3Vu
ZERhdGE7Ci0gICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7Ci0KICAgICB0eXBlZGVmIEhhc2hN
YXA8QXRvbWljU3RyaW5nSW1wbCosIFJlZlB0cjxTdHlsZVJ1bGVLZXlmcmFtZXM+ID4gS2V5ZnJh
bWVzUnVsZU1hcDsKICAgICBLZXlmcmFtZXNSdWxlTWFwIG1fa2V5ZnJhbWVzUnVsZU1hcDsKIAog
cHVibGljOgogICAgIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVOb3RZZXRBdmFpbGFibGUoKSB7
IHJldHVybiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOyB9CiAKLSAgICBQYXNzUmVmUHRyPFN0eWxl
SW1hZ2U+IHN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKLSAgICBQYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+IGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBD
U1NJbWFnZVZhbHVlKik7Ci0gICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBnZW5lcmF0ZWRPclBl
bmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSopOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2UoU3R5bGVSZXNvbHZl
U3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0eWxlSW1hZ2U+IGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShTdHlsZVJlc29sdmVTdGF0ZSYs
IENTU1Byb3BlcnR5SUQsIENTU0ltYWdlVmFsdWUqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
dHlsZUltYWdlPiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoU3R5bGVSZXNvbHZlU3RhdGUm
LCBDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKik7CiAjaWYgRU5BQkxFKENT
U19JTUFHRV9TRVQpCi0gICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzZXRPclBlbmRpbmdGcm9t
VmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VTZXRWYWx1ZSopOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFN0eWxlSW1hZ2U+IHNldE9yUGVuZGluZ0Zyb21WYWx1ZShTdHlsZVJlc29sdmVTdGF0
ZSYsIENTU1Byb3BlcnR5SUQsIENTU0ltYWdlU2V0VmFsdWUqKTsKICNlbmRpZgotICAgIFBhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQs
IENTU0N1cnNvckltYWdlVmFsdWUqKTsKLQotICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxh
clN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7IH0K
LSAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVy
biBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7IH0KKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdHlsZUltYWdlPiBjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUoU3R5bGVSZXNvbHZlU3Rh
dGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NDdXJzb3JJbWFnZVZhbHVlKik7CiAKICAgICBzdGF0aWMg
TGVuZ3RoIGNvbnZlcnRUb0ludExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSosIFJlbmRlclN0eWxl
KiwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIgPSAxKTsKICAgICBz
dGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiwgUmVu
ZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEp
OwogCi0gICAgQ1NTVG9TdHlsZU1hcCogc3R5bGVNYXAoKSB7IHJldHVybiAmbV9zdHlsZU1hcDsg
fQotCiAgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7
CiAgICAgCiBwcml2YXRlOgpAQCAtNDQzLDE5ICs0MjIsMTkgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgY29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8UmVmUHRyPENT
U1N0eWxlU2hlZXQ+ID4mLCBSdWxlU2V0JiB1c2VyU3R5bGUpOwogCi0gICAgdm9pZCBjYWNoZUJv
cmRlckFuZEJhY2tncm91bmQoKTsKKyAgICB2b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZChT
dHlsZVJlc29sdmVTdGF0ZSYsIFJlbmRlclN0eWxlKik7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBj
YW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCopIGNvbnN0OworICAgIGJvb2wg
Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKEVsZW1lbnQqLCBTdHlsZWRFbGVtZW50KikgY29uc3Q7
CiAKLSAgICB2b2lkIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKKyAg
ICB2b2lkIGFwcGx5UHJvcGVydHkoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBD
U1NWYWx1ZSopOwogCiAjaWYgRU5BQkxFKFNWRykKLSAgICB2b2lkIGFwcGx5U1ZHUHJvcGVydHko
Q1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIGFwcGx5U1ZHUHJvcGVydHkoU3R5
bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwogI2VuZGlmCiAKICAg
ICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1h
Z2UqKTsKLSAgICB2b2lkIGxvYWRQZW5kaW5nSW1hZ2VzKCk7CisgICAgdm9pZCBsb2FkUGVuZGlu
Z0ltYWdlcyhTdHlsZVJlc29sdmVTdGF0ZSYpOwogCiAgICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1
dGVNYXRjaGVkUHJvcGVydGllc0hhc2goY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMqLCB1bnNpZ25l
ZCBzaXplKTsKICAgICBzdHJ1Y3QgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0gewpAQCAtNDcz
LDcgKzQ1Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGUoVGltZXI8U3R5bGVSZXNvbHZlcj4qKTsKIAogICAgIGJvb2wgY2xhc3NOYW1lc0FmZmVjdGVk
QnlSdWxlcyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJikgY29uc3Q7Ci0gICAgYm9vbCBzaGFyaW5n
Q2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1l
bnQqKSBjb25zdDsKKyAgICBib29sIHNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFm
ZmVjdGluZ0F0dHJpYnV0ZXMoU3R5bGVSZXNvbHZlU3RhdGUmLCBFbGVtZW50KiwgU3R5bGVkRWxl
bWVudCopIGNvbnN0OwogCiAgICAgdW5zaWduZWQgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRk
aXRpb25zU2luY2VMYXN0U3dlZXA7CiAKQEAgLTQ4MiwzOSArNDYxLDEzIEBAIHByaXZhdGU6CiAK
ICAgICBUaW1lcjxTdHlsZVJlc29sdmVyPiBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVTd2VlcFRp
bWVyOwogCi0gICAgLy8gQSBidWZmZXIgdXNlZCB0byBob2xkIHRoZSBzZXQgb2YgbWF0Y2hlZCBy
dWxlcyBmb3IgYW4gZWxlbWVudCwgYW5kIGEgdGVtcG9yYXJ5IGJ1ZmZlciB1c2VkIGZvcgotICAg
IC8vIG1lcmdlIHNvcnRpbmcuCi0gICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+IG1fbWF0
Y2hlZFJ1bGVzOwotCi0gICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0PiBtX3J1bGVMaXN0Owot
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPENTU1Byb3BlcnR5SUQsIFJlZlB0cjxDU1NWYWx1ZT4gPiBQ
ZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDsKLSAgICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcCBtX3Bl
bmRpbmdJbWFnZVByb3BlcnRpZXM7Ci0KICAgICBPd25QdHI8TWVkaWFRdWVyeUV2YWx1YXRvcj4g
bV9tZWRpdW07CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3Jvb3REZWZhdWx0U3R5bGU7CiAK
LSAgICBQc2V1ZG9JZCBtX2R5bmFtaWNQc2V1ZG87Ci0gICAgUHNldWRvSWQgbV9wc2V1ZG9TdHls
ZTsKLQogICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwotICAgIFNlbGVjdG9yQ2hlY2tlciBtX3Nl
bGVjdG9yQ2hlY2tlcjsKICAgICBTZWxlY3RvckZpbHRlciBtX3NlbGVjdG9yRmlsdGVyOwogCi0g
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwotICAgIFJlbmRlclN0eWxlKiBtX3BhcmVu
dFN0eWxlOwotICAgIFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGU7Ci0gICAgRWxlbWVu
dCogbV9lbGVtZW50OwotICAgIFN0eWxlZEVsZW1lbnQqIG1fc3R5bGVkRWxlbWVudDsKLSAgICBS
ZW5kZXJSZWdpb24qIG1fcmVnaW9uRm9yU3R5bGluZzsKLSAgICBFSW5zaWRlTGluayBtX2VsZW1l
bnRMaW5rU3RhdGU7Ci0gICAgYm9vbCBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlczsKLSAg
ICBDb250YWluZXJOb2RlKiBtX3BhcmVudE5vZGU7Ci0gICAgQ1NTVmFsdWUqIG1fbGluZUhlaWdo
dFZhbHVlOwotICAgIGJvb2wgbV9mb250RGlydHk7CiAgICAgYm9vbCBtX21hdGNoQXV0aG9yQW5k
VXNlclN0eWxlczsKLSAgICBib29sIG1fc2FtZU9yaWdpbk9ubHk7Ci0gICAgYm9vbCBtX2Rpc3Ry
aWJ1dGVkVG9JbnNlcnRpb25Qb2ludDsKIAogICAgIFJlZlB0cjxDU1NGb250U2VsZWN0b3I+IG1f
Zm9udFNlbGVjdG9yOwogICAgIFZlY3RvcjxPd25QdHI8TWVkaWFRdWVyeVJlc3VsdD4gPiBtX3Zp
ZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHM7CkBAIC01MjMsMjMgKzQ3NiwxMiBAQCBw
cml2YXRlOgogICAgIFJlZlB0cjxWaWV3cG9ydFN0eWxlUmVzb2x2ZXI+IG1fdmlld3BvcnRTdHls
ZVJlc29sdmVyOwogI2VuZGlmCiAKLSAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlOwotICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOwogICAgIGNv
bnN0IFN0eWxlQnVpbGRlciYgbV9zdHlsZUJ1aWxkZXI7CiAgICAgCiAgICAgSGFzaE1hcDxTdHls
ZVJ1bGUqLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+IG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJN
YXA7CiAgICAgSGFzaFNldDxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiBtX3N0eWxlU2hlZXRDU1NP
TVdyYXBwZXJTZXQ7CiAKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgYm9vbCBtX2hhc1Bl
bmRpbmdTaGFkZXJzOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJM
RShTVkcpCi0gICAgSGFzaE1hcDxGaWx0ZXJPcGVyYXRpb24qLCBSZWZQdHI8V2ViS2l0Q1NTU1ZH
RG9jdW1lbnRWYWx1ZT4gPiBtX3BlbmRpbmdTVkdEb2N1bWVudHM7Ci0jZW5kaWYKLQogICAgIE93
blB0cjxTdHlsZVNjb3BlUmVzb2x2ZXI+IG1fc2NvcGVSZXNvbHZlcjsKLSAgICBDU1NUb1N0eWxl
TWFwIG1fc3R5bGVNYXA7CiAKICAgICBmcmllbmQgY2xhc3MgU3R5bGVCdWlsZGVyOwogICAgIGZy
aWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmLCBjb25zdCBNYXRj
aGVkUHJvcGVydGllcyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmgKaW5kZXggZTQxYWFl
ZjRhMWViNTA4ZThiNTYzYWE4NWJiZWZmMzk4MzI5MGU3ZC4uZjU4NDAyZmE5ZmFkM2IyMWY3MGIx
ZGViYTgzODViZjljZThiZTUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxl
ZEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oCkBAIC05
OSw2ICs5OSwxOCBAQCBpbmxpbmUgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogU3R5bGVkRWxlbWVu
dDo6cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKQogICAgIHJldHVybiBhdHRyaWJ1dGVEYXRh
KCktPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCk7CiB9CiAKK2lubGluZSBTdHlsZWRFbGVt
ZW50KiB0b1N0eWxlZEVsZW1lbnQoTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQoIW5vZGUgfHwg
bm9kZS0+aXNTdHlsZWRFbGVtZW50KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdHlsZWRF
bGVtZW50Kj4obm9kZSk7Cit9CisKK2lubGluZSBjb25zdCBTdHlsZWRFbGVtZW50KiB0b1N0eWxl
ZEVsZW1lbnQoY29uc3QgTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQoIW5vZGUgfHwgbm9kZS0+
aXNTdHlsZWRFbGVtZW50KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZWRF
bGVtZW50Kj4obm9kZSk7Cit9CisKIH0gLy9uYW1lc3BhY2UKIAogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cAppbmRleCA3MDk4ZjAxMmRiNzJjNDU1MGI0ZjY3MDkwODM4Y2VjYzllMThiYzQ2Li43YjgzNDE0
ZjM4MTllMWU2MjEzMzZmZmRkNGM0Y2Y0ODZlY2JjYmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTIx
NDQsMTkgKzIxNDQsOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChj
b25zdCBTdHJpbmcmIG5ld0ZvbnQpCiAKICAgICAvLyBOb3cgbWFwIHRoZSBmb250IHByb3BlcnR5
IGxvbmdoYW5kcyBpbnRvIHRoZSBzdHlsZS4KICAgICBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyID0gY2FudmFzKCktPnN0eWxlUmVzb2x2ZXIoKTsKLSAgICBzdHlsZVJlc29sdmVyLT5hcHBs
eVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIHBhcnNlZFN0eWxlLT5nZXRQ
cm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSkuZ2V0KCksIG5ld1N0eWxlLmdl
dCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NT
UHJvcGVydHlGb250U3R5bGUsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1By
b3BlcnR5Rm9udFN0eWxlKS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0
eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIHBhcnNlZFN0eWxlLT5nZXRQ
cm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFZhcmlhbnQpLmdldCgpKTsKLSAgICBzdHls
ZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlGb250V2Vp
Z2h0LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRXZWln
aHQpLmdldCgpKTsKLQotICAgIC8vIEFzIGRlc2NyaWJlZCBpbiBCVUc2NjI5MSwgc2V0dGluZyBm
b250LXNpemUgYW5kIGxpbmUtaGVpZ2h0IG9uIGEgZm9udCBtYXkgZW50YWlsIGEgQ1NTUHJpbWl0
aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhEb3VibGUgY2FsbCwKLSAgICAvLyB3aGljaCBhc3N1bWVz
IHRoZSBmb250TWV0cmljcyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgYWZmZWN0ZWQgZm9udCwgb3Ro
ZXJ3aXNlIGEgY3Jhc2ggb2NjdXJzIChzZWUgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2Vz
ZXQvOTYxMjIpLgotICAgIC8vIFRoZSB1cGRhdGVGb250KCkgY2FsbHMgYmVsb3cgdXBkYXRlIHRo
ZSBmb250TWV0cmljcyBhbmQgZW5zdXJlIHRoZSBwcm9wZXIgc2V0dGluZyBvZiBmb250LXNpemUg
YW5kIGxpbmUtaGVpZ2h0LgotICAgIHN0eWxlUmVzb2x2ZXItPnVwZGF0ZUZvbnQoKTsKLSAgICBz
dHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlGb250
U2l6ZSwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6
ZSkuZ2V0KCkpOwotICAgIHN0eWxlUmVzb2x2ZXItPnVwZGF0ZUZvbnQoKTsKLSAgICBzdHlsZVJl
c29sdmVyLT5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0
LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQp
LmdldCgpKTsKKyAgICBzdHlsZVJlc29sdmVyLT5hcHBseUZvbnRQcm9wZXJ0eVRvU3R5bGUobmV3
U3R5bGUuZ2V0KCksIHBhcnNlZFN0eWxlLmdldCgpKTsKIAorICAgIC8vIG9rCiAgICAgbW9kaWZp
YWJsZVN0YXRlKCkubV9mb250ID0gbmV3U3R5bGUtPmZvbnQoKTsKICAgICBtb2RpZmlhYmxlU3Rh
dGUoKS5tX2ZvbnQudXBkYXRlKHN0eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpKTsKICAgICBt
b2RpZmlhYmxlU3RhdGUoKS5tX3JlYWxpemVkRm9udCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCmluZGV4IGQwOWE1NTE1ZDgzMDVjZTdhZTYw
OGE5MGRmN2Y4ODRmNDVkNGU1MGQuLjczYTczNWU4MGM4NzBjMThmMTg2MmMxZjA3NTZmNGJlMmQ0
ZjcyYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5o
CkBAIC0xMzAsNiArMTMwLDcgQEAgY2xhc3MgUmVuZGVyU3R5bGU6IHB1YmxpYyBSZWZDb3VudGVk
PFJlbmRlclN0eWxlPiB7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlclNWR1Jlc291cmNlOyAvLyBG
SVhNRTogTmVlZHMgdG8gYWx0ZXIgdGhlIHZpc2l0ZWQgc3RhdGUgYnkgaGFuZC4gU2hvdWxkIGNs
ZWFuIHRoZSBTVkcgY29kZSB1cCBhbmQgbW92ZSBpdCBpbnRvIFJlbmRlclN0eWxlIHBlcmhhcHMu
CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlclRyZWVBc1RleHQ7IC8vIEZJWE1FOiBPbmx5IG5lZWRl
ZCBzbyB0aGUgcmVuZGVyIHRyZWUgY2FuIGtlZXAgbHlpbmcgYW5kIGR1bXAgdGhlIHdyb25nIGNv
bG9ycy4gIFJlYmFzZWxpbmluZyB3b3VsZCBhbGxvdyB0aGlzIHRvIGJlIHlhbmtlZC4KICAgICBm
cmllbmQgY2xhc3MgU3R5bGVCdWlsZGVyOyAvLyBTZXRzIG1lbWJlcnMgZGlyZWN0bHkuCisgICAg
ZnJpZW5kIGNsYXNzIFN0eWxlUmVzb2x2ZVN0YXRlOyAvLyBTZXRzIG1lbWJlcnMgZGlyZWN0bHku
CiAgICAgZnJpZW5kIGNsYXNzIFN0eWxlUmVzb2x2ZXI7IC8vIFNldHMgbWVtYmVycyBkaXJlY3Rs
eS4KIHByb3RlY3RlZDoKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184695</attachid>
            <date>2013-01-25 01:17:02 -0800</date>
            <delta_ts>2013-01-25 03:14:52 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-96421-20130125181353.patch</filename>
            <type>text/plain</type>
            <size>357242</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzRhZTYzMmY3MmI3ODVk
ZTJjZTAxOGIzYTQ5OWNiZGEwMWYzYTI5OC4uNmNlZjlhZGI2NWUzMmIzOWI0ZDMzM2QxNmQzNGE4
NTdmNzA2Yjc5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwNyBAQAorMjAxMy0wMS0yNCAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgU3BsaXQgcGVyLXJl
c29sdmUgbG9naWMgb3V0IGZyb20gU3R5bGVSZXNvbHZlci4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NDIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50ZWQgY2xhc3MgU3R5bGVSZXNvbHZl
U3RhdGUgYW5kIG1vdmVkIGFsbCBtZW1iZXIgdmFyaWFibGVzCisgICAgICAgIHVzZWQgb25seSBm
b3IgcGVyLXJlc29sdmUgbG9naWMuCisgICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgdG8g
ZW5hYmxlIFN0eWxlUmVzb2x2ZXIgdG8gcmVzb2x2ZSBzdHlsZXMgb2YKKyAgICAgICAgbXVsdGlw
bGUgZWxlbWVudHMgaW4gcGFyYWxsZWwuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNhdXNl
IGp1c3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICBBZGRl
ZCBTdHlsZVJlc29sdmVTdGF0ZS5oLgorICAgICAgICAqIGNzcy9CYXNpY1NoYXBlRnVuY3Rpb25z
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0xlbmd0aCk6CisgICAgICAgIChXZWJD
b3JlOjpiYXNpY1NoYXBlRm9yVmFsdWUpOgorICAgICAgICAqIGNzcy9CYXNpY1NoYXBlRnVuY3Rp
b25zLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhT
dHlsZXNSZXNvbHZlZCk6CisgICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFsdWUuaDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoQ1NTR3JhZGllbnRWYWx1ZSk6CisgICAgICAgICogY3Nz
L0NTU1RvU3R5bGVNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFw
RmlsbEF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmls
bENsaXApOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbENvbXBvc2l0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBGaWxsT3JpZ2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjptYXBGaWxsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFw
OjptYXBGaWxsWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6Om1h
cEZpbGxZUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwTmlu
ZVBpZWNlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwTmluZVBp
ZWNlSW1hZ2VTbGljZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBOaW5l
UGllY2VJbWFnZVF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwTmlu
ZVBpZWNlSW1hZ2VSZXBlYXQpOgorICAgICAgICAqIGNzcy9DU1NUb1N0eWxlTWFwLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKENTU1RvU3R5bGVNYXApOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVG9TdHlsZU1hcDo6Q1NTVG9TdHlsZU1hcCk6CisgICAgICAgICogY3NzL1NWR0NTU1N0
eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlT
VkdQcm9wZXJ0eSk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hl
Y2thYmxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjptYXRj
aGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrKToKKyAg
ICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChTZWxlY3RvckNoZWNrZXIp
OgorICAgICAgICAoV2ViQ29yZTo6aXNGcmFtZUZvY3VzZWQpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjptYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyk6CisgICAgICAgICog
Y3NzL1N0eWxlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RXhw
YW5kaW5nOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5RXhwYW5kaW5nOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5RXhwYW5kaW5nOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlEZWZhdWx0QmFzZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U6OmFwcGx5VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU51bWJlcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5U3R5bGVJbWFnZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5QXV0bzo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eUF1dG86OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlBdXRvOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlDbGlwOjpjb252ZXJ0VG9MZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUNsaXA6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlDbGlwOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5Q2xpcDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5Q29sb3I6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlDb2xvcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUNvbG9yOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlDb2xvcjo6YXBwbHlDb2xvclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlEaXJlY3Rpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUxlbmd0aDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5U3RyaW5nOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlC
b3JkZXJSYWRpdXM6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eUZpbGxMYXllcjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5Rm9udDo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUZvbnQ6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlGb250OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlGb250U2l6ZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFNpemU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRXZWlnaHQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzOjphcHBseUluaGVyaXRWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVyZXM6
OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250
VmFyaWFudExpZ2F0dXJlczo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5Qm9yZGVySW1hZ2U6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyOjphcHBseUluaXRpYWxW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmll
cjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1h
Z2VTb3VyY2U6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNv
dW50ZXI6OmVtcHR5RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNv
dW50ZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlDb3VudGVyOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlD
dXJzb3I6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlDdXJzb3I6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJv
cGVydHlDdXJzb3I6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eVRleHRBbGlnbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
VGV4dERlY29yYXRpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eUxpbmVIZWlnaHQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eVBhZ2VTaXplOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5UGFnZVNpemU6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlQYWdlU2l6ZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5VGV4dEVtcGhhc2lzU3R5bGU6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RW1waGFzaXNTdHlsZTo6YXBwbHlJbml0aWFs
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRFbXBoYXNpc1N0eWxl
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eUFuaW1hdGlvbjo6bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlBbmltYXRpb246OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlBbmltYXRpb246OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlBbmltYXRpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6YXBwbHlJbml0aWFsVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6YXBwbHlWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5UmVzaXplOjphcHBseVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlWZXJ0aWNhbEFsaWduOjphcHBseVZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBc3BlY3RSYXRpbzo6YXBwbHlJbmhlcml0
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlvOjphcHBs
eUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QXNwZWN0UmF0
aW86OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVpvb206OnJl
c2V0RWZmZWN0aXZlWm9vbSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Wm9vbTo6
YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVpvb206
OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlab29t
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEaXNwbGF5Ojpp
c1ZhbGlkRGlzcGxheVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEaXNw
bGF5OjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
RGlzcGxheTo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eURpc3BsYXk6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eUNsaXBQYXRoOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlF
eGNsdXNpb25TaGFwZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5SW1hZ2VSZXNvbHV0aW9uOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5SW1hZ2VSZXNvbHV0aW9uOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5SW1hZ2VSZXNvbHV0aW9uOjphcHBseVZhbHVlKToK
KyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFByb3BlcnR5SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eUhhbmRsZXI6
OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5SGFuZGxlcjo6
YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlIYW5kbGVyOjph
cHBseVZhbHVlKToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlU3RhdGUuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFN0eWxlUmVzb2x2ZVN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpTdHlsZVJlc29sdmVTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlU3RhdGU6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZVN0YXRlOjpyb290RWxlbWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZVN0YXRlOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0
YXRlOjpzdHlsZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRl
Ojpkb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6cmVnaW9u
Rm9yU3R5bGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6bW9kZSk6
CisgICAgICAgIE1vdmVkIFN0eWxlUmVzb2x2ZXIncyBtb2RlIGZyb20gbV9zZWxlY3RvckNoZWNr
ZXIgdG8gU3R5bGVSZXNvbHZlU3RhdGUuCisgICAgICAgIFNvIHdlIGRvbid0IG5lZWQgdG8ga2Vl
cCBTZWxlY3RvckNoZWNrZXIgYXMgYSBtZW1iZXIgdmFyaWFibGUgb2YKKyAgICAgICAgU3R5bGVS
ZXNvbHZlci4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpwc2V1ZG9TdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6cGFyZW50Tm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6ZWxlbWVudExpbmtTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6ZGlzdHJpYnV0ZWRUb0luc2VydGlv
blBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRDYW5Vc2VG
YXN0UmVqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpjYW5Vc2VG
YXN0UmVqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0Um9vdEVsZW1lbnRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0RWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0RWxlbWVudExpbmtTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0UGFyZW50Tm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0UGFyZW50U3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNldERpc3RyaWJ1dGVkVG9JbnNl
cnRpb25Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0TW9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0UmVnaW9uRm9yU3R5
bGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0UHNldWRvU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OmZvbnREZXNjcmlwdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6cGFyZW50Rm9udERlc2Ny
aXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRGb250RGVz
Y3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNldFpvb20p
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNldEVmZmVjdGl2ZVpvb20p
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNldFRleHRTaXplQWRqdXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRXcml0aW5nTW9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0VGV4dE9yaWVudGF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRBcHBseVByb3BlcnR5
VG9SZWd1bGFyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNl
dEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlU3RhdGU6OmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6bWF0Y2hlZFJ1bGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRFbGVtZW50QWZmZWN0ZWRC
eUNsYXNzUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OmVsZW1l
bnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVT
dGF0ZTo6Y2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZVN0YXRlOjpwZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZVN0YXRlOjpwZW5kaW5nU1ZHRG9jdW1lbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRMaW5lSGVpZ2h0VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OmxpbmVIZWlnaHRWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6aGFzUGFyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0Rm9udERpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZVN0YXRlOjpmb250RGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlU3RhdGU6OmVuc3VyZVJ1bGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZVN0YXRlOjpydWxlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6
c2V0SGFzUGVuZGluZ1NoYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3Rh
dGU6Omhhc1BlbmRpbmdTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0
YXRlOjp1c2VTVkdab29tUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3Rh
dGU6Omhhc1VBQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0
ZTo6Ym9yZGVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6YmFj
a2dyb3VuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OmJhY2tn
cm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0SW5j
bHVkZUVtcHR5UnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNl
dFNhbWVPcmlnaW5Pbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpp
bmNsdWRlRW1wdHlSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6
c2FtZU9yaWdpbk9ubHkpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNv
bHZlcik6CisgICAgICAgIFNpbmNlIFN0eWxlUmVzb2x2ZVN0YXRlIHByb3ZpZGVzIGFsbCBpbmZv
cm1hdGlvbiwgbm8gbmVlZCB0byBoYXZlCisgICAgICAgIGFueSBpbnN0YW5jZSBvZiBDU1NUb1N0
eWxlTWFwIGFuZCBubyBuZWVkIHRvIG1ha2UgU2VsZWN0b3JDaGVja2VyCisgICAgICAgIGEgbWVt
YmVyIHZhcmlhYmxlIG9mIFN0eWxlUmVzb2x2ZXIuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9z
dFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzb3J0TWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6aW5pdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6aW5pdEZvclN0eWxlUmVzb2x2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2wpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxl
QWZmZWN0aW5nQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpj
YW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6ZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnN0eWxlRm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6a2V5
ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnN0eWxlRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpkZWZh
dWx0U3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFk
anVzdFJlbmRlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnVwZGF0
ZUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxl
c0ZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cnVsZU1hdGNo
ZXMpOgorICAgICAgICBtX2R5bmFtaWNQc2V1ZG8gaXMgdXNlZCBiZXR3ZWVuIHRoaXMgcnVsZU1h
dGNoZXMgYW5kCisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdC4gU28gYWRkZWQg
b25lIHBhcmFtZXRlciB0byByZXR1cm4KKyAgICAgICAgd2hhdCBkeW5hbWljIHBzZXVkbyBhbiBl
bGVtZW50IG1hdGNoZXMuIFJlbW92ZWQgbV9keW5hbWljUHNldWRvCisgICAgICAgIGZyb20gU3R5
bGVSZXNvbHZlci4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9u
U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6aXNMZWZ0UGFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5V2l0aFZhbHVlQ2hl
Y2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlGb250UHJvcGVy
dHlUb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0JyZWFkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR3JpZFRyYWNrTWluTWF4KToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUdyaWRUcmFja0dyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRU
cmFja0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlh
Ymxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdGcm9tVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVB
ZGp1c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3Jab29tQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0Zh
bWlseUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjppbml0aWFsaXpl
Rm9udFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9j
dW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ1N0eWxlU2hh
ZGVyRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5k
aW5nU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3Rv
bUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1Jlc291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3Nz
L1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6YWRkTWF0Y2hlZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6aXNSaWdodFBhZ2UpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjp0b1N0eWxlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisKIDIwMTMtMDEtMjQgIEtl
bnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIElOUFVUX01VTFRJUExF
X0ZJRUxEU19VSTogUmVmYWN0b3Jpbmc6IFJlbW92ZSBjb25mdXNpbmcgbWluaW11bSgpIGFuZCBt
YXhpbXVtKCkgb2YgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KaW5kZXggZDc1MjFkNGIzZDEzMTJkMWEyNTU2MzBmNDI4ODRkY2YxOGVhYWMz
ZC4uMThkY2QyODIwZWVkODVkYzA3NzFkYTViNThlN2JiZTBiZGIyNWNkNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yNjYwLDYgKzI2NjAsNyBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmggXAogCVNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2hvcnRoYW5kLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCBcCisJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZVN0YXRlLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUnVsZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMjk5OGM5ZDUxNGQ3ZDUyYjFjOWJh
ZGJjZWM5NzZjNWVhMzNiMzQ0Ni4uN2VjMzlmMzhkOTk2ZjgzNjBlNGI0ODc4OTVkMjdiNWU5NGNm
YjZjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCkBAIC0xNTMxLDYgKzE1MzEsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBjc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oIFwKICAgICBjc3MvU3R5bGVQcm9wZXJ0
eVNldC5oIFwKICAgICBjc3MvU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIFwKKyAgICBjc3MvU3R5
bGVSZXNvbHZlU3RhdGUuaCBcCiAgICAgY3NzL1N0eWxlUmVzb2x2ZXIuaCBcCiAgICAgY3NzL1N0
eWxlUnVsZS5oIFwKICAgICBjc3MvU3R5bGVSdWxlSW1wb3J0LmggXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmlu
ZGV4IDRkNTg2ODEyYzE5YTc4ODhhNzAzMmM3Njc1NzExYTczMDQ4NGJlOTguLjhlZmFmMTUyYTg1
MzllZWE5OTcyNTc5MDA1MTBjMDQ1MTM3NGFkOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE1ODMs
NiArMTU4Myw3IEBACiAgICAgICAgICAgICAnY3NzL1N0eWxlUHJvcGVydHlTZXQuaCcsCiAgICAg
ICAgICAgICAnY3NzL1N0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwJywKICAgICAgICAgICAgICdj
c3MvU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oJywKKyAgICAgICAgICAgICdjc3MvU3R5bGVSZXNv
bHZlU3RhdGUuaCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlUmVzb2x2ZXIuY3BwJywKICAgICAg
ICAgICAgICdjc3MvU3R5bGVSZXNvbHZlci5oJywKICAgICAgICAgICAgICdjc3MvU3R5bGVSdWxl
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9u
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5jcHAKaW5kZXgg
M2E4Zjc5NTNiNmY5NmIwMTJmODQzMjM3YTJlMTJhMGZkZjRjYjEyMS4uMWIzNTk5OWVlMTkzZDY0
NDFlODljYmIwOTQ0ZGY2ODFmNThlZjZmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1No
YXBlRnVuY3Rpb25zLmNwcApAQCAtMTAwLDEyICsxMDAsMTIgQEAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gdmFsdWVGb3JCYXNpY1NoYXBlKGNvbnN0IEJhc2ljU2hhcGUqIGJhc2ljU2hhcGUpCiAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlPFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFw
ZT4gPihiYXNpY1NoYXBlVmFsdWUucmVsZWFzZSgpKTsKIH0KIAotc3RhdGljIExlbmd0aCBjb252
ZXJ0VG9MZW5ndGgoY29uc3QgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTUHJpbWl0
aXZlVmFsdWUqIHZhbHVlKQorc3RhdGljIExlbmd0aCBjb252ZXJ0VG9MZW5ndGgoU3R5bGVSZXNv
bHZlU3RhdGUmIHN0YXRlLCBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IHZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IEZpeGVkRmxv
YXRDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252
ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVu
dFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAg
cmV0dXJuIHZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IEZp
eGVkRmxvYXRDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRh
Z2VDb252ZXJzaW9uPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0
YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiB9CiAKLVBhc3NSZWZQdHI8QmFzaWNTaGFw
ZT4gYmFzaWNTaGFwZUZvclZhbHVlKGNvbnN0IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IGNvbnN0IENTU0Jhc2ljU2hhcGUqIGJhc2ljU2hhcGVWYWx1ZSkKK1Bhc3NSZWZQdHI8QmFzaWNT
aGFwZT4gYmFzaWNTaGFwZUZvclZhbHVlKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgY29uc3Qg
Q1NTQmFzaWNTaGFwZSogYmFzaWNTaGFwZVZhbHVlKQogewogICAgIFJlZlB0cjxCYXNpY1NoYXBl
PiBiYXNpY1NoYXBlOwogCkBAIC0xMTQsMTQgKzExNCwxNCBAQCBQYXNzUmVmUHRyPEJhc2ljU2hh
cGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBjbwogICAgICAgICBjb25zdCBDU1NCYXNpY1NoYXBlUmVjdGFuZ2xlKiByZWN0VmFsdWUgPSBz
dGF0aWNfY2FzdDxjb25zdCBDU1NCYXNpY1NoYXBlUmVjdGFuZ2xlICo+KGJhc2ljU2hhcGVWYWx1
ZSk7CiAgICAgICAgIFJlZlB0cjxCYXNpY1NoYXBlUmVjdGFuZ2xlPiByZWN0ID0gQmFzaWNTaGFw
ZVJlY3RhbmdsZTo6Y3JlYXRlKCk7CiAKLSAgICAgICAgcmVjdC0+c2V0WChjb252ZXJ0VG9MZW5n
dGgoc3R5bGVSZXNvbHZlciwgcmVjdFZhbHVlLT54KCkpKTsKLSAgICAgICAgcmVjdC0+c2V0WShj
b252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdFZhbHVlLT55KCkpKTsKLSAgICAgICAg
cmVjdC0+c2V0V2lkdGgoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+
d2lkdGgoKSkpOwotICAgICAgICByZWN0LT5zZXRIZWlnaHQoY29udmVydFRvTGVuZ3RoKHN0eWxl
UmVzb2x2ZXIsIHJlY3RWYWx1ZS0+aGVpZ2h0KCkpKTsKKyAgICAgICAgcmVjdC0+c2V0WChjb252
ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3RWYWx1ZS0+eCgpKSk7CisgICAgICAgIHJlY3QtPnNldFko
Y29udmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0VmFsdWUtPnkoKSkpOworICAgICAgICByZWN0LT5z
ZXRXaWR0aChjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3RWYWx1ZS0+d2lkdGgoKSkpOworICAg
ICAgICByZWN0LT5zZXRIZWlnaHQoY29udmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0VmFsdWUtPmhl
aWdodCgpKSk7CiAgICAgICAgIGlmIChyZWN0VmFsdWUtPnJhZGl1c1goKSkgewotICAgICAgICAg
ICAgcmVjdC0+c2V0Q29ybmVyUmFkaXVzWChjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwg
cmVjdFZhbHVlLT5yYWRpdXNYKCkpKTsKKyAgICAgICAgICAgIHJlY3QtPnNldENvcm5lclJhZGl1
c1goY29udmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0VmFsdWUtPnJhZGl1c1goKSkpOwogICAgICAg
ICAgICAgaWYgKHJlY3RWYWx1ZS0+cmFkaXVzWSgpKQotICAgICAgICAgICAgICAgIHJlY3QtPnNl
dENvcm5lclJhZGl1c1koY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+
cmFkaXVzWSgpKSk7CisgICAgICAgICAgICAgICAgcmVjdC0+c2V0Q29ybmVyUmFkaXVzWShjb252
ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3RWYWx1ZS0+cmFkaXVzWSgpKSk7CiAgICAgICAgIH0KICAg
ICAgICAgYmFzaWNTaGFwZSA9IHJlY3QucmVsZWFzZSgpOwogICAgICAgICBicmVhazsKQEAgLTEz
MCw5ICsxMzAsOSBAQCBQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShj
b25zdCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBjbwogICAgICAgICBjb25zdCBDU1NC
YXNpY1NoYXBlQ2lyY2xlKiBjaXJjbGVWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IENTU0Jhc2lj
U2hhcGVDaXJjbGUgKj4oYmFzaWNTaGFwZVZhbHVlKTsKICAgICAgICAgUmVmUHRyPEJhc2ljU2hh
cGVDaXJjbGU+IGNpcmNsZSA9IEJhc2ljU2hhcGVDaXJjbGU6OmNyZWF0ZSgpOwogCi0gICAgICAg
IGNpcmNsZS0+c2V0Q2VudGVyWChjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgY2lyY2xl
VmFsdWUtPmNlbnRlclgoKSkpOwotICAgICAgICBjaXJjbGUtPnNldENlbnRlclkoY29udmVydFRv
TGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIGNpcmNsZVZhbHVlLT5jZW50ZXJZKCkpKTsKLSAgICAgICAg
Y2lyY2xlLT5zZXRSYWRpdXMoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIGNpcmNsZVZh
bHVlLT5yYWRpdXMoKSkpOworICAgICAgICBjaXJjbGUtPnNldENlbnRlclgoY29udmVydFRvTGVu
Z3RoKHN0YXRlLCBjaXJjbGVWYWx1ZS0+Y2VudGVyWCgpKSk7CisgICAgICAgIGNpcmNsZS0+c2V0
Q2VudGVyWShjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIGNpcmNsZVZhbHVlLT5jZW50ZXJZKCkpKTsK
KyAgICAgICAgY2lyY2xlLT5zZXRSYWRpdXMoY29udmVydFRvTGVuZ3RoKHN0YXRlLCBjaXJjbGVW
YWx1ZS0+cmFkaXVzKCkpKTsKIAogICAgICAgICBiYXNpY1NoYXBlID0gY2lyY2xlLnJlbGVhc2Uo
KTsKICAgICAgICAgYnJlYWs7CkBAIC0xNDEsMTAgKzE0MSwxMCBAQCBQYXNzUmVmUHRyPEJhc2lj
U2hhcGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBjbwogICAgICAgICBjb25zdCBDU1NCYXNpY1NoYXBlRWxsaXBzZSogZWxsaXBzZVZhbHVl
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTQmFzaWNTaGFwZUVsbGlwc2UgKj4oYmFzaWNTaGFwZVZh
bHVlKTsKICAgICAgICAgUmVmUHRyPEJhc2ljU2hhcGVFbGxpcHNlPiBlbGxpcHNlID0gQmFzaWNT
aGFwZUVsbGlwc2U6OmNyZWF0ZSgpOwogCi0gICAgICAgIGVsbGlwc2UtPnNldENlbnRlclgoY29u
dmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIGVsbGlwc2VWYWx1ZS0+Y2VudGVyWCgpKSk7Ci0g
ICAgICAgIGVsbGlwc2UtPnNldENlbnRlclkoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIs
IGVsbGlwc2VWYWx1ZS0+Y2VudGVyWSgpKSk7Ci0gICAgICAgIGVsbGlwc2UtPnNldFJhZGl1c1go
Y29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIGVsbGlwc2VWYWx1ZS0+cmFkaXVzWCgpKSk7
Ci0gICAgICAgIGVsbGlwc2UtPnNldFJhZGl1c1koY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2
ZXIsIGVsbGlwc2VWYWx1ZS0+cmFkaXVzWSgpKSk7CisgICAgICAgIGVsbGlwc2UtPnNldENlbnRl
clgoY29udmVydFRvTGVuZ3RoKHN0YXRlLCBlbGxpcHNlVmFsdWUtPmNlbnRlclgoKSkpOworICAg
ICAgICBlbGxpcHNlLT5zZXRDZW50ZXJZKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgZWxsaXBzZVZh
bHVlLT5jZW50ZXJZKCkpKTsKKyAgICAgICAgZWxsaXBzZS0+c2V0UmFkaXVzWChjb252ZXJ0VG9M
ZW5ndGgoc3RhdGUsIGVsbGlwc2VWYWx1ZS0+cmFkaXVzWCgpKSk7CisgICAgICAgIGVsbGlwc2Ut
PnNldFJhZGl1c1koY29udmVydFRvTGVuZ3RoKHN0YXRlLCBlbGxpcHNlVmFsdWUtPnJhZGl1c1ko
KSkpOwogCiAgICAgICAgIGJhc2ljU2hhcGUgPSBlbGxpcHNlLnJlbGVhc2UoKTsKICAgICAgICAg
YnJlYWs7CkBAIC0xNTYsNyArMTU2LDcgQEAgUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1No
YXBlRm9yVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgY28KICAgICAg
ICAgcG9seWdvbi0+c2V0V2luZFJ1bGUocG9seWdvblZhbHVlLT53aW5kUnVsZSgpKTsKICAgICAg
ICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gPiYgdmFsdWVzID0gcG9s
eWdvblZhbHVlLT52YWx1ZXMoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZh
bHVlcy5zaXplKCk7IGkgKz0gMikKLSAgICAgICAgICAgIHBvbHlnb24tPmFwcGVuZFBvaW50KGNv
bnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCB2YWx1ZXMuYXQoaSkuZ2V0KCkpLCBjb252ZXJ0
VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgdmFsdWVzLmF0KGkgKyAxKS5nZXQoKSkpOworICAgICAg
ICAgICAgcG9seWdvbi0+YXBwZW5kUG9pbnQoY29udmVydFRvTGVuZ3RoKHN0YXRlLCB2YWx1ZXMu
YXQoaSkuZ2V0KCkpLCBjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHZhbHVlcy5hdChpICsgMSkuZ2V0
KCkpKTsKIAogICAgICAgICBiYXNpY1NoYXBlID0gcG9seWdvbi5yZWxlYXNlKCk7CiAgICAgICAg
IGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlv
bnMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25zLmgKaW5kZXggZDM2
MDdlOTA5OTI5YzM0MWIwYzA2OWQzZTVjZWI2MWYxM2YxMTcxOS4uODFiMmNhYTM1N2I3NDFmYTIz
ODQ2MWYwNzI5M2EwNmQ5OGNjOWM2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0Jh
c2ljU2hhcGVGdW5jdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1
bmN0aW9ucy5oCkBAIC0zNywxMCArMzcsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
QmFzaWNTaGFwZTsKIGNsYXNzIENTU0Jhc2ljU2hhcGU7CiBjbGFzcyBDU1NWYWx1ZTsKLWNsYXNz
IFN0eWxlUmVzb2x2ZXI7CitjbGFzcyBTdHlsZVJlc29sdmVTdGF0ZTsKIAogUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gdmFsdWVGb3JCYXNpY1NoYXBlKGNvbnN0IEJhc2ljU2hhcGUqKTsKLVBhc3NSZWZQ
dHI8QmFzaWNTaGFwZT4gYmFzaWNTaGFwZUZvclZhbHVlKGNvbnN0IFN0eWxlUmVzb2x2ZXIqLCBj
b25zdCBDU1NCYXNpY1NoYXBlKik7CitQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVG
b3JWYWx1ZShTdHlsZVJlc29sdmVTdGF0ZSYsIGNvbnN0IENTU0Jhc2ljU2hhcGUqKTsKIAogfQog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKaW5kZXggZjE1MThk
OGRhYzc0ODBjNGUyMzk3ZTUyZGZhOTQyYmNlOGRjNmE4MS4uYzJjZTkyMDcwYzFmMWZiODEyMGJi
M2Y5MmZlZThjZWE2OTdjMjYxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
YWRpZW50VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVl
LmNwcApAQCAtMTE1LDExICsxMTUsMTEgQEAgc3RydWN0IEdyYWRpZW50U3RvcCB7CiAgICAgeyB9
CiB9OwogCi1QYXNzUmVmUHRyPENTU0dyYWRpZW50VmFsdWU+IENTU0dyYWRpZW50VmFsdWU6Omdy
YWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCitQ
YXNzUmVmUHRyPENTU0dyYWRpZW50VmFsdWU+IENTU0dyYWRpZW50VmFsdWU6OmdyYWRpZW50V2l0
aFN0eWxlc1Jlc29sdmVkKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKIHsKICAgICBib29sIGRl
cml2ZWQgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdG9wcy5zaXpl
KCk7IGkrKykKLSAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPmNvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlSXNEZXJpdmVkRnJvbUVsZW1lbnQobV9zdG9wc1tpXS5tX2NvbG9yLmdldCgpKSkgeworICAg
ICAgICBpZiAoU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWVJc0Rlcml2ZWRG
cm9tRWxlbWVudChtX3N0b3BzW2ldLm1fY29sb3IuZ2V0KCkpKSB7CiAgICAgICAgICAgICBtX3N0
b3BzW2ldLm1fY29sb3JJc0Rlcml2ZWRGcm9tRWxlbWVudCA9IHRydWU7CiAgICAgICAgICAgICBk
ZXJpdmVkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM4LDcgKzEzOCw3IEBAIFBh
c3NSZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6Z3JhZGllbnRXaXRo
U3R5bGVzUmVzb2x2ZWQoU3R5bGVSCiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHJlc3VsdC0+bV9zdG9wcy5zaXplKCk7IGkrKykKLSAgICAgICAgcmVzdWx0LT5tX3N0b3Bz
W2ldLm1fcmVzb2x2ZWRDb2xvciA9IHN0eWxlUmVzb2x2ZXItPmNvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlKHJlc3VsdC0+bV9zdG9wc1tpXS5tX2NvbG9yLmdldCgpKTsKKyAgICAgICAgcmVzdWx0LT5t
X3N0b3BzW2ldLm1fcmVzb2x2ZWRDb2xvciA9IFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1p
dGl2ZVZhbHVlKHN0YXRlLCByZXN1bHQtPm1fc3RvcHNbaV0ubV9jb2xvci5nZXQoKSk7CiAKICAg
ICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFkaWVudFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRW
YWx1ZS5oCmluZGV4IDZmMDA1MzU5MDdlMTU3NzlhMDgwMjcyYzg4NmZkNmI4MDk3YzgwMGQuLjBi
NzJlMmFlNjJkYTA4MjNmNmQzZmJlNjE2YTdhNTEzODI1OWUyYjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0dyYWRpZW50VmFsdWUuaApAQCAtMzUsNiArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBHcmFkaWVudDsKK2NsYXNzIFN0eWxlUmVzb2x2
ZVN0YXRlOwogCiBlbnVtIENTU0dyYWRpZW50VHlwZSB7CiAgICAgQ1NTRGVwcmVjYXRlZExpbmVh
ckdyYWRpZW50LApAQCAtODQsNyArODUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNBbHBoYShj
b25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKIAogICAgIHZvaWQgbG9hZFN1YmltYWdlcyhDYWNo
ZWRSZXNvdXJjZUxvYWRlciopIHsgfQotICAgIFBhc3NSZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4g
Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGVSZXNvbHZlciopOworICAgIFBhc3NSZWZQ
dHI8Q1NTR3JhZGllbnRWYWx1ZT4gZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGVSZXNv
bHZlU3RhdGUmKTsKIAogcHJvdGVjdGVkOgogICAgIENTU0dyYWRpZW50VmFsdWUoQ2xhc3NUeXBl
IGNsYXNzVHlwZSwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0LCBDU1NHcmFkaWVudFR5cGUgZ3Jh
ZGllbnRUeXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCmluZGV4IDAyNDRkOGEz
YWQ1NzhmNmUxM2Y2Y2QxZGJlNmE4ZDI0M2VkODA3YjAuLjJjZGNlYzdkMTEwNDI2YmRjMTI5YTMy
MzkxMDM5YWYxNTZlNDQwZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0
eWxlTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKQEAg
LTQxLDI3ICs0MSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVuZGVyU3R5bGUqIENT
U1RvU3R5bGVNYXA6OnN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+c3R5
bGUoKTsKLX0KLSAgICAKLVJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpyb290RWxlbWVudFN0
eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgp
OwotfQotCi1ib29sIENTU1RvU3R5bGVNYXA6OnVzZVNWR1pvb21SdWxlcygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fcmVzb2x2ZXItPnVzZVNWR1pvb21SdWxlcygpOwotfQotICAgIAotUGFzc1Jl
ZlB0cjxTdHlsZUltYWdlPiBDU1NUb1N0eWxlTWFwOjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJZCwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIHJldHVybiBtX3Jlc29sdmVyLT5z
dHlsZUltYWdlKHByb3BlcnR5SWQsIHZhbHVlKTsKLX0KLQotdm9pZCBDU1NUb1N0eWxlTWFwOjpt
YXBGaWxsQXR0YWNobWVudChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1
ZSogdmFsdWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxBdHRhY2htZW50KFN0eWxlUmVz
b2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZh
bHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewogICAgICAgICBsYXll
ci0+c2V0QXR0YWNobWVudChGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQXR0YWNobWVudChsYXllci0+
dHlwZSgpKSk7CkBAIC04Nyw3ICs2Nyw3IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEF0
dGFjaG1lbnQoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqCiAgICAg
fQogfQogCi12b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxDbGlwKENTU1Byb3BlcnR5SUQsIEZp
bGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFw
RmlsbENsaXAoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxh
eWVyLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgp
KSB7CiAgICAgICAgIGxheWVyLT5zZXRDbGlwKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxDbGlwKGxh
eWVyLT50eXBlKCkpKTsKQEAgLTEwMSw3ICs4MSw3IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFw
RmlsbENsaXAoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVl
CiAgICAgbGF5ZXItPnNldENsaXAoKnByaW1pdGl2ZVZhbHVlKTsKIH0KIAotdm9pZCBDU1NUb1N0
eWxlTWFwOjptYXBGaWxsQ29tcG9zaXRlKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbENvbXBvc2l0ZShT
dHlsZVJlc29sdmVTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKICAgICAg
ICAgbGF5ZXItPnNldENvbXBvc2l0ZShGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQ29tcG9zaXRlKGxh
eWVyLT50eXBlKCkpKTsKQEAgLTExNSw3ICs5NSw3IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFw
RmlsbENvbXBvc2l0ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSoK
ICAgICBsYXllci0+c2V0Q29tcG9zaXRlKCpwcmltaXRpdmVWYWx1ZSk7CiB9CiAKLXZvaWQgQ1NT
VG9TdHlsZU1hcDo6bWFwRmlsbE9yaWdpbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVy
LCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxPcmlnaW4oU3R5
bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1
ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CiAgICAgICAg
IGxheWVyLT5zZXRPcmlnaW4oRmlsbExheWVyOjppbml0aWFsRmlsbE9yaWdpbihsYXllci0+dHlw
ZSgpKSk7CkBAIC0xMzAsMTcgKzExMCwxNyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxP
cmlnaW4oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbAogfQog
CiAKLXZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHksIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTVG9TdHlsZU1h
cDo6bWFwRmlsbEltYWdlKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2
YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewogICAgICAgICBsYXllci0+c2V0SW1hZ2UoRmlsbExh
eWVyOjppbml0aWFsRmlsbEltYWdlKGxheWVyLT50eXBlKCkpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGxheWVyLT5zZXRJbWFnZShzdHlsZUltYWdlKHByb3BlcnR5LCB2YWx1ZSkp
OworICAgIGxheWVyLT5zZXRJbWFnZShTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKHN0YXRlLCBw
cm9wZXJ0eSwgdmFsdWUpKTsKIH0KIAotdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0
WChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lk
IENTU1RvU3R5bGVNYXA6Om1hcEZpbGxSZXBlYXRYKFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTUHJv
cGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2
YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewogICAgICAgICBsYXllci0+c2V0UmVwZWF0WChGaWxs
TGF5ZXI6OmluaXRpYWxGaWxsUmVwZWF0WChsYXllci0+dHlwZSgpKSk7CkBAIC0xNTQsNyArMTM0
LDcgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WChDU1NQcm9wZXJ0eUlELCBG
aWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmEKICAgICBsYXllci0+c2V0UmVwZWF0WCgqcHJp
bWl0aXZlVmFsdWUpOwogfQogCi12b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxSZXBlYXRZKENT
U1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NT
VG9TdHlsZU1hcDo6bWFwRmlsbFJlcGVhdFkoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0
eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVl
LT5pc0luaXRpYWxWYWx1ZSgpKSB7CiAgICAgICAgIGxheWVyLT5zZXRSZXBlYXRZKEZpbGxMYXll
cjo6aW5pdGlhbEZpbGxSZXBlYXRZKGxheWVyLT50eXBlKCkpKTsKQEAgLTE2OCw3ICsxNDgsNyBA
QCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxSZXBlYXRZKENTU1Byb3BlcnR5SUQsIEZpbGxM
YXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YQogICAgIGxheWVyLT5zZXRSZXBlYXRZKCpwcmltaXRp
dmVWYWx1ZSk7CiB9CiAKLXZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFNpemUoQ1NTUHJvcGVy
dHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBDU1NUb1N0eWxl
TWFwOjptYXBGaWxsU2l6ZShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQs
IEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAgbGF5ZXItPnNldFNpemVUeXBlKFNpemVOb25l
KTsKQEAgLTE5MCw3ICsxNzAsNyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxTaXplKENT
U1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgZmxvYXQgem9vbUZhY3RvciA9IHN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKTsKKyAgICBmbG9hdCB6b29tRmFjdG9yID0gc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZl
Wm9vbSgpOwogCiAgICAgTGVuZ3RoIGZpcnN0TGVuZ3RoOwogICAgIExlbmd0aCBzZWNvbmRMZW5n
dGg7CkBAIC0xOTgsMTAgKzE3OCwxMCBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxTaXpl
KENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZQogICAgIGlm
IChQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1ZSgpKSB7CiAgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4ocGFpci0+Zmlyc3QoKSk7CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBhaXItPnNlY29uZCgpKTsKLSAgICAgICAg
Zmlyc3RMZW5ndGggPSBmaXJzdC0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KHN0eWxl
KCksIHJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7Ci0gICAgICAgIHNlY29uZExlbmd0
aCA9IHNlY29uZC0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KHN0eWxlKCksIHJvb3RF
bGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CisgICAgICAgIGZpcnN0TGVuZ3RoID0gZmlyc3Qt
PmNvbnZlcnRUb0xlbmd0aDxBbnlDb252ZXJzaW9uPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290
RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOworICAgICAgICBzZWNvbmRMZW5ndGggPSBzZWNv
bmQtPmNvbnZlcnRUb0xlbmd0aDxBbnlDb252ZXJzaW9uPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5y
b290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZp
cnN0TGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxBbnlDb252ZXJzaW9u
PihzdHlsZSgpLCByb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOworICAgICAgICBmaXJz
dExlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8QW55Q29udmVyc2lvbj4o
c3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKICAg
ICAgICAgc2Vjb25kTGVuZ3RoID0gTGVuZ3RoKCk7CiAgICAgfQogCkBAIC0yMTMsNyArMTkzLDcg
QEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsU2l6ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5
ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUKICAgICBsYXllci0+c2V0U2l6ZUxlbmd0aChiKTsK
IH0KIAotdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsWFBvc2l0aW9uKENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBDU1NU
b1N0eWxlTWFwOjptYXBGaWxsWFBvc2l0aW9uKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUp
CiB7CiAgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CiAgICAgICAgIGxheWVyLT5z
ZXRYUG9zaXRpb24oRmlsbExheWVyOjppbml0aWFsRmlsbFhQb3NpdGlvbihsYXllci0+dHlwZSgp
KSk7CkBAIC0yMjMsNyArMjAzLDcgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsWFBvc2l0
aW9uKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwKICAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZsb2F0
IHpvb21GYWN0b3IgPSBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisgICAgZmxvYXQgem9vbUZh
Y3RvciA9IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKIAogICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsdWUpOwogICAgIFBhaXIqIHBhaXIgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UGFpclZhbHVlKCk7
CkBAIC0yMzQsMTEgKzIxNCwxMSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxYUG9zaXRp
b24oQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLAogCiAgICAgTGVu
Z3RoIGxlbmd0aDsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCi0gICAgICAg
IGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwg
cm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgbGVuZ3RoID0gcHJpbWl0
aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290
RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgbGVuZ3RoID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVl
LT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS0+aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKLSAgICAgICAgbGVuZ3RoID0g
TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGUo
KSwgcm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKSk7CisgICAgICAgIGxlbmd0aCA9IExl
bmd0aChwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0YXRlLnN0
eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3RvcikpOwogICAgIGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKQogICAgICAg
ICBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7CiAg
ICAgZWxzZQpAQCAtMjQ5LDcgKzIyOSw3IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFhQ
b3NpdGlvbihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsCiAgICAg
ICAgIGxheWVyLT5zZXRCYWNrZ3JvdW5kWE9yaWdpbigqKHBhaXItPmZpcnN0KCkpKTsKIH0KIAot
dm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsWVBvc2l0aW9uKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBDU1NUb1N0eWxl
TWFwOjptYXBGaWxsWVBvc2l0aW9uKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAg
ICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CiAgICAgICAgIGxheWVyLT5zZXRZUG9z
aXRpb24oRmlsbExheWVyOjppbml0aWFsRmlsbFlQb3NpdGlvbihsYXllci0+dHlwZSgpKSk7CkBA
IC0yNTksNyArMjM5LDcgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsWVBvc2l0aW9uKENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwKICAgICBpZiAoIXZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZsb2F0IHpvb21G
YWN0b3IgPSBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisgICAgZmxvYXQgem9vbUZhY3RvciA9
IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKIAogICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUp
OwogICAgIFBhaXIqIHBhaXIgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UGFpclZhbHVlKCk7CkBAIC0y
NzAsMTEgKzI1MCwxMSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxZUG9zaXRpb24oQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLAogCiAgICAgTGVuZ3RoIGxl
bmd0aDsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCi0gICAgICAgIGxlbmd0
aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgcm9vdEVs
ZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgbGVuZ3RoID0gcHJpbWl0aXZlVmFs
dWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVu
dFN0eWxlKCksIHpvb21GYWN0b3IpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1Bl
cmNlbnRhZ2UoKSkKICAgICAgICAgbGVuZ3RoID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXRE
b3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXND
YWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKLSAgICAgICAgbGVuZ3RoID0gTGVuZ3Ro
KHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGUoKSwgcm9v
dEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKSk7CisgICAgICAgIGxlbmd0aCA9IExlbmd0aChw
cmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0YXRlLnN0eWxlKCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3RvcikpOwogICAgIGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKQogICAgICAgICBsZW5n
dGggPSBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7CiAgICAgZWxz
ZQpAQCAtNDg1LDcgKzQ2NSw3IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uVGlt
aW5nRnVuY3Rpb24oQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2CiAgICAgICAgIGFu
aW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oTGluZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgp
KTsKIH0KIAotdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKK3Zv
aWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2UoU3R5bGVSZXNvbHZlU3RhdGUmIHN0
YXRlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUlt
YWdlJiBpbWFnZSkKIHsKICAgICAvLyBJZiB3ZSdyZSBub3QgYSB2YWx1ZSBsaXN0LCB0aGVuIHdl
IGFyZSAibm9uZSIgYW5kIGRvbid0IG5lZWQgdG8gYWx0ZXIgdGhlIGVtcHR5IGltYWdlIGF0IGFs
bC4KICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKQEAgLTUxMSwyNSAr
NDkxLDI1IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlLCBOCiAgICAgICAgICAgICB8fCBjdXJyZW50
LT5pc0ltYWdlU2V0VmFsdWUoKQogI2VuZGlmCiAgICAgICAgICAgICApCi0gICAgICAgICAgICBp
bWFnZS5zZXRJbWFnZShzdHlsZUltYWdlKGltYWdlUHJvcGVydHksIGN1cnJlbnQpKTsKKyAgICAg
ICAgICAgIGltYWdlLnNldEltYWdlKFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2Uoc3RhdGUsIGlt
YWdlUHJvcGVydHksIGN1cnJlbnQpKTsKICAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aXNCb3Jk
ZXJJbWFnZVNsaWNlVmFsdWUoKSkKLSAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlU2xpY2Uo
Y3VycmVudCwgaW1hZ2UpOworICAgICAgICAgICAgbWFwTmluZVBpZWNlSW1hZ2VTbGljZShzdGF0
ZSwgY3VycmVudCwgaW1hZ2UpOwogICAgICAgICBlbHNlIGlmIChjdXJyZW50LT5pc1ZhbHVlTGlz
dCgpKSB7CiAgICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIHNsYXNoTGlzdCA9IHN0YXRpY19jYXN0
PENTU1ZhbHVlTGlzdCo+KGN1cnJlbnQpOwogICAgICAgICAgICAgLy8gTWFwIGluIHRoZSBpbWFn
ZSBzbGljZXMuCiAgICAgICAgICAgICBpZiAoc2xhc2hMaXN0LT5pdGVtKDApICYmIHNsYXNoTGlz
dC0+aXRlbSgwKS0+aXNCb3JkZXJJbWFnZVNsaWNlVmFsdWUoKSkKLSAgICAgICAgICAgICAgICBt
YXBOaW5lUGllY2VJbWFnZVNsaWNlKHNsYXNoTGlzdC0+aXRlbSgwKSwgaW1hZ2UpOworICAgICAg
ICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlU2xpY2Uoc3RhdGUsIHNsYXNoTGlzdC0+aXRlbSgw
KSwgaW1hZ2UpOwogCiAgICAgICAgICAgICAvLyBNYXAgaW4gdGhlIGJvcmRlciBzbGljZXMuCiAg
ICAgICAgICAgICBpZiAoc2xhc2hMaXN0LT5pdGVtKDEpKQotICAgICAgICAgICAgICAgIGltYWdl
LnNldEJvcmRlclNsaWNlcyhtYXBOaW5lUGllY2VJbWFnZVF1YWQoc2xhc2hMaXN0LT5pdGVtKDEp
KSk7CisgICAgICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKG1hcE5pbmVQaWVjZUlt
YWdlUXVhZChzdGF0ZSwgc2xhc2hMaXN0LT5pdGVtKDEpKSk7CiAKICAgICAgICAgICAgIC8vIE1h
cCBpbiB0aGUgb3V0c2V0LgogICAgICAgICAgICAgaWYgKHNsYXNoTGlzdC0+aXRlbSgyKSkKLSAg
ICAgICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQobWFwTmluZVBpZWNlSW1hZ2VRdWFkKHNsYXNo
TGlzdC0+aXRlbSgyKSkpOworICAgICAgICAgICAgICAgIGltYWdlLnNldE91dHNldChtYXBOaW5l
UGllY2VJbWFnZVF1YWQoc3RhdGUsIHNsYXNoTGlzdC0+aXRlbSgyKSkpOwogICAgICAgICB9IGVs
c2UgaWYgKGN1cnJlbnQtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewogICAgICAgICAgICAgLy8gU2V0
IHRoZSBhcHByb3ByaWF0ZSBydWxlcyBmb3Igc3RyZXRjaC9yb3VuZC9yZXBlYXQgb2YgdGhlIHNs
aWNlcy4KLSAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KGN1cnJlbnQsIGltYWdl
KTsKKyAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KHN0YXRlLCBjdXJyZW50LCBp
bWFnZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUzOCwxNyArNTE4LDE3IEBAIHZvaWQgQ1NT
VG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NT
VmFsdWUqIHZhbHVlLCBOCiAgICAgICAgIC8vIGFsc28gc2V0IHRoZSBib3JkZXIgd2lkdGhzLiBX
ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHBlcmNlbnRhZ2VzLCBzaW5jZSB3ZSBkb24ndCBl
dmVuIHN1cHBvcnQKICAgICAgICAgLy8gdGhvc2Ugb24gcmVhbCBib3JkZXJzIHlldC4KICAgICAg
ICAgaWYgKGltYWdlLmJvcmRlclNsaWNlcygpLnRvcCgpLmlzRml4ZWQoKSkKLSAgICAgICAgICAg
IHN0eWxlKCktPnNldEJvcmRlclRvcFdpZHRoKGltYWdlLmJvcmRlclNsaWNlcygpLnRvcCgpLnZh
bHVlKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Qm9yZGVyVG9wV2lkdGgoaW1h
Z2UuYm9yZGVyU2xpY2VzKCkudG9wKCkudmFsdWUoKSk7CiAgICAgICAgIGlmIChpbWFnZS5ib3Jk
ZXJTbGljZXMoKS5yaWdodCgpLmlzRml4ZWQoKSkKLSAgICAgICAgICAgIHN0eWxlKCktPnNldEJv
cmRlclJpZ2h0V2lkdGgoaW1hZ2UuYm9yZGVyU2xpY2VzKCkucmlnaHQoKS52YWx1ZSgpKTsKKyAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJvcmRlclJpZ2h0V2lkdGgoaW1hZ2UuYm9yZGVy
U2xpY2VzKCkucmlnaHQoKS52YWx1ZSgpKTsKICAgICAgICAgaWYgKGltYWdlLmJvcmRlclNsaWNl
cygpLmJvdHRvbSgpLmlzRml4ZWQoKSkKLSAgICAgICAgICAgIHN0eWxlKCktPnNldEJvcmRlckJv
dHRvbVdpZHRoKGltYWdlLmJvcmRlclNsaWNlcygpLmJvdHRvbSgpLnZhbHVlKCkpOworICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Qm9yZGVyQm90dG9tV2lkdGgoaW1hZ2UuYm9yZGVyU2xp
Y2VzKCkuYm90dG9tKCkudmFsdWUoKSk7CiAgICAgICAgIGlmIChpbWFnZS5ib3JkZXJTbGljZXMo
KS5sZWZ0KCkuaXNGaXhlZCgpKQotICAgICAgICAgICAgc3R5bGUoKS0+c2V0Qm9yZGVyTGVmdFdp
ZHRoKGltYWdlLmJvcmRlclNsaWNlcygpLmxlZnQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldEJvcmRlckxlZnRXaWR0aChpbWFnZS5ib3JkZXJTbGljZXMoKS5sZWZ0
KCkudmFsdWUoKSk7CiAgICAgfQogfQogCi12b2lkIENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVj
ZUltYWdlU2xpY2UoQ1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCit2b2lk
IENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlU2xpY2UoU3R5bGVSZXNvbHZlU3RhdGUm
LCBDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKIHsKICAgICBpZiAoIXZh
bHVlIHx8ICF2YWx1ZS0+aXNCb3JkZXJJbWFnZVNsaWNlVmFsdWUoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNTgxLDEzICs1NjEsMTMgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJ
bWFnZVNsaWNlKENTU1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWcKICAgICBpbWFn
ZS5zZXRGaWxsKGJvcmRlckltYWdlU2xpY2UtPm1fZmlsbCk7CiB9CiAKLUxlbmd0aEJveCBDU1NU
b1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVF1YWQoQ1NTVmFsdWUqIHZhbHVlKQorTGVuZ3Ro
Qm94IENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlUXVhZChTdHlsZVJlc29sdmVTdGF0
ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICByZXR1cm4gTGVuZ3RoQm94KCk7CiAKICAgICAv
LyBHZXQgb3VyIHpvb20gdmFsdWUuCi0gICAgZmxvYXQgem9vbSA9IHVzZVNWR1pvb21SdWxlcygp
ID8gMS4wZiA6IHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBmbG9hdCB6b29tID0gc3Rh
dGUudXNlU1ZHWm9vbVJ1bGVzKCkgPyAxLjBmIDogc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpOwogCiAgICAgLy8gUmV0cmlldmUgdGhlIHByaW1pdGl2ZSB2YWx1ZS4KICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogYm9yZGVyV2lkdGhzID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih2YWx1ZSk7CkBAIC02MDAsMzMgKzU4MCwzMyBAQCBMZW5ndGhCb3ggQ1NTVG9TdHlsZU1hcDo6
bWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlKiB2YWx1ZSkKICAgICBlbHNlIGlmIChzbGlj
ZXMtPnRvcCgpLT5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgYm94Lm1fdG9wID0gTGVuZ3RoKHNs
aWNlcy0+dG9wKCktPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VO
VEFHRSksIFBlcmNlbnQpOwogICAgIGVsc2UgaWYgKHNsaWNlcy0+dG9wKCktPmdldElkZW50KCkg
IT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICBib3gubV90b3AgPSBzbGljZXMtPnRvcCgpLT5jb21w
dXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgcm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tKTsKKyAg
ICAgICAgYm94Lm1fdG9wID0gc2xpY2VzLT50b3AoKS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0
YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7CiAKICAgICBpZiAo
c2xpY2VzLT5yaWdodCgpLT5pc051bWJlcigpKQogICAgICAgICBib3gubV9yaWdodCA9IExlbmd0
aChzbGljZXMtPnJpZ2h0KCktPmdldEludFZhbHVlKCksIFJlbGF0aXZlKTsKICAgICBlbHNlIGlm
IChzbGljZXMtPnJpZ2h0KCktPmlzUGVyY2VudGFnZSgpKQogICAgICAgICBib3gubV9yaWdodCA9
IExlbmd0aChzbGljZXMtPnJpZ2h0KCktPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSksIFBlcmNlbnQpOwogICAgIGVsc2UgaWYgKHNsaWNlcy0+cmlnaHQo
KS0+Z2V0SWRlbnQoKSAhPSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgIGJveC5tX3JpZ2h0ID0gc2xp
Y2VzLT5yaWdodCgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgcm9vdEVsZW1lbnRT
dHlsZSgpLCB6b29tKTsKKyAgICAgICAgYm94Lm1fcmlnaHQgPSBzbGljZXMtPnJpZ2h0KCktPmNv
bXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxl
KCksIHpvb20pOwogCiAgICAgaWYgKHNsaWNlcy0+Ym90dG9tKCktPmlzTnVtYmVyKCkpCiAgICAg
ICAgIGJveC5tX2JvdHRvbSA9IExlbmd0aChzbGljZXMtPmJvdHRvbSgpLT5nZXRJbnRWYWx1ZSgp
LCBSZWxhdGl2ZSk7CiAgICAgZWxzZSBpZiAoc2xpY2VzLT5ib3R0b20oKS0+aXNQZXJjZW50YWdl
KCkpCiAgICAgICAgIGJveC5tX2JvdHRvbSA9IExlbmd0aChzbGljZXMtPmJvdHRvbSgpLT5nZXRE
b3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpLCBQZXJjZW50KTsK
ICAgICBlbHNlIGlmIChzbGljZXMtPmJvdHRvbSgpLT5nZXRJZGVudCgpICE9IENTU1ZhbHVlQXV0
bykKLSAgICAgICAgYm94Lm1fYm90dG9tID0gc2xpY2VzLT5ib3R0b20oKS0+Y29tcHV0ZUxlbmd0
aDxMZW5ndGg+KHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7CisgICAgICAgIGJv
eC5tX2JvdHRvbSA9IHNsaWNlcy0+Ym90dG9tKCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0
ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb20pOwogCiAgICAgaWYgKHNs
aWNlcy0+bGVmdCgpLT5pc051bWJlcigpKQogICAgICAgICBib3gubV9sZWZ0ID0gTGVuZ3RoKHNs
aWNlcy0+bGVmdCgpLT5nZXRJbnRWYWx1ZSgpLCBSZWxhdGl2ZSk7CiAgICAgZWxzZSBpZiAoc2xp
Y2VzLT5sZWZ0KCktPmlzUGVyY2VudGFnZSgpKQogICAgICAgICBib3gubV9sZWZ0ID0gTGVuZ3Ro
KHNsaWNlcy0+bGVmdCgpLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BF
UkNFTlRBR0UpLCBQZXJjZW50KTsKICAgICBlbHNlIGlmIChzbGljZXMtPmxlZnQoKS0+Z2V0SWRl
bnQoKSAhPSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgIGJveC5tX2xlZnQgPSBzbGljZXMtPmxlZnQo
KS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUoKSwgem9v
bSk7CisgICAgICAgIGJveC5tX2xlZnQgPSBzbGljZXMtPmxlZnQoKS0+Y29tcHV0ZUxlbmd0aDxM
ZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7CiAK
ICAgICByZXR1cm4gYm94OwogfQogCi12b2lkIENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUlt
YWdlUmVwZWF0KENTU1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQordm9pZCBD
U1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVJlcGVhdChTdHlsZVJlc29sdmVTdGF0ZSYs
IENTU1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQogewogICAgIGlmICghdmFs
dWUgfHwgIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCmluZGV4IDZiYWI0MGJmY2Q3N2UxMjVhYjA4ZjAwOGYxMGU3
YTNlNjgyNzkxNGUuLjhhNTVjNGYyODY5NzFhOTI1MDE1OTczZWM0YWY0Mjk1MWRkOTM5MTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuaApAQCAtMzIsNTYgKzMyLDQxIEBAIGNsYXNzIENT
U1ZhbHVlOwogY2xhc3MgQW5pbWF0aW9uOwogY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBTdHls
ZUltYWdlOwotY2xhc3MgU3R5bGVSZXNvbHZlcjsKK2NsYXNzIFN0eWxlUmVzb2x2ZVN0YXRlOwog
Y2xhc3MgTmluZVBpZWNlSW1hZ2U7CiAKIGNsYXNzIENTU1RvU3R5bGVNYXAgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENTU1RvU3R5bGVNYXApOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotCiBwdWJsaWM6Ci0gICAgQ1NTVG9TdHlsZU1hcChTdHlsZVJlc29sdmVyKiByZXNvbHZl
cikgOiBtX3Jlc29sdmVyKHJlc29sdmVyKSB7IH0KLQotICAgIHZvaWQgbWFwRmlsbEF0dGFjaG1l
bnQoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEZp
bGxDbGlwKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBt
YXBGaWxsQ29tcG9zaXRlKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0g
ICAgdm9pZCBtYXBGaWxsT3JpZ2luKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVl
Kik7Ci0gICAgdm9pZCBtYXBGaWxsSW1hZ2UoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NT
VmFsdWUqKTsKLSAgICB2b2lkIG1hcEZpbGxSZXBlYXRYKENTU1Byb3BlcnR5SUQsIEZpbGxMYXll
ciosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBGaWxsUmVwZWF0WShDU1NQcm9wZXJ0eUlELCBG
aWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwRmlsbFNpemUoQ1NTUHJvcGVydHlJ
RCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEZpbGxYUG9zaXRpb24oQ1NT
UHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEZpbGxZUG9z
aXRpb24oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICBzdGF0aWMg
dm9pZCBtYXBGaWxsQXR0YWNobWVudChTdHlsZVJlc29sdmVTdGF0ZSYsIENTU1Byb3BlcnR5SUQs
IEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgc3RhdGljIHZvaWQgbWFwRmlsbENsaXAoU3R5
bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwor
ICAgIHN0YXRpYyB2b2lkIG1hcEZpbGxDb21wb3NpdGUoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQ
cm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAgIHN0YXRpYyB2b2lkIG1hcEZp
bGxPcmlnaW4oU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBD
U1NWYWx1ZSopOworICAgIHN0YXRpYyB2b2lkIG1hcEZpbGxJbWFnZShTdHlsZVJlc29sdmVTdGF0
ZSYsIENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgc3RhdGljIHZv
aWQgbWFwRmlsbFJlcGVhdFgoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBGaWxs
TGF5ZXIqLCBDU1NWYWx1ZSopOworICAgIHN0YXRpYyB2b2lkIG1hcEZpbGxSZXBlYXRZKFN0eWxl
UmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAg
ICBzdGF0aWMgdm9pZCBtYXBGaWxsU2l6ZShTdHlsZVJlc29sdmVTdGF0ZSYsIENTU1Byb3BlcnR5
SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgc3RhdGljIHZvaWQgbWFwRmlsbFhQb3Np
dGlvbihTdHlsZVJlc29sdmVTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1Zh
bHVlKik7CisgICAgc3RhdGljIHZvaWQgbWFwRmlsbFlQb3NpdGlvbihTdHlsZVJlc29sdmVTdGF0
ZSYsIENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CiAKLSAgICB2b2lkIG1h
cEFuaW1hdGlvbkRlbGF5KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBBbmlt
YXRpb25EaXJlY3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1h
dGlvbkR1cmF0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBBbmltYXRp
b25GaWxsTW9kZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwQW5pbWF0aW9u
SXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1h
dGlvbk5hbWUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1hdGlvblBs
YXlTdGF0ZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwQW5pbWF0aW9uUHJv
cGVydHkoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1hdGlvblRpbWlu
Z0Z1bmN0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgc3RhdGljIHZvaWQgbWFwQW5p
bWF0aW9uRGVsYXkoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICBzdGF0aWMgdm9pZCBtYXBB
bmltYXRpb25EaXJlY3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICBzdGF0aWMgdm9p
ZCBtYXBBbmltYXRpb25EdXJhdGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAgIHN0YXRp
YyB2b2lkIG1hcEFuaW1hdGlvbkZpbGxNb2RlKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAg
c3RhdGljIHZvaWQgbWFwQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uKiwgQ1NTVmFs
dWUqKTsKKyAgICBzdGF0aWMgdm9pZCBtYXBBbmltYXRpb25OYW1lKEFuaW1hdGlvbiosIENTU1Zh
bHVlKik7CisgICAgc3RhdGljIHZvaWQgbWFwQW5pbWF0aW9uUGxheVN0YXRlKEFuaW1hdGlvbios
IENTU1ZhbHVlKik7CisgICAgc3RhdGljIHZvaWQgbWFwQW5pbWF0aW9uUHJvcGVydHkoQW5pbWF0
aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICBzdGF0aWMgdm9pZCBtYXBBbmltYXRpb25UaW1pbmdGdW5j
dGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSopOwogCi0gICAgdm9pZCBtYXBOaW5lUGllY2VJbWFn
ZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7Ci0gICAgdm9pZCBt
YXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1ZhbHVlKiwgTmluZVBpZWNlSW1hZ2UmKTsKLSAgICBM
ZW5ndGhCb3ggbWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBO
aW5lUGllY2VJbWFnZVJlcGVhdChDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7CisgICAgc3Rh
dGljIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2UoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0
eUlELCBDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7CisgICAgc3RhdGljIHZvaWQgbWFwTmlu
ZVBpZWNlSW1hZ2VTbGljZShTdHlsZVJlc29sdmVTdGF0ZSYsIENTU1ZhbHVlKiwgTmluZVBpZWNl
SW1hZ2UmKTsKKyAgICBzdGF0aWMgTGVuZ3RoQm94IG1hcE5pbmVQaWVjZUltYWdlUXVhZChTdHls
ZVJlc29sdmVTdGF0ZSYsIENTU1ZhbHVlKik7CisgICAgc3RhdGljIHZvaWQgbWFwTmluZVBpZWNl
SW1hZ2VSZXBlYXQoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdl
Jik7CiAKIHByaXZhdGU6Ci0gICAgLy8gRklYTUU6IFRoZXNlIGFjY2Vzc29ycyBzaG91bGQgYmUg
cmVwbGFjZWQgYnkgYSBSZXNvbHZlU3RhdGUgb2JqZWN0Ci0gICAgLy8gc2ltaWxhciB0byBob3cg
UGFpbnRJbmZvL0xheW91dFN0YXRlIGNhY2hlIHZhbHVlcyBuZWVkZWQgZm9yCi0gICAgLy8gdGhl
IGN1cnJlbnQgcGFpbnQvbGF5b3V0LgotICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0Owot
ICAgIFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3Q7Ci0gICAgYm9vbCB1c2VT
Vkdab29tUnVsZXMoKSBjb25zdDsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwYXJ0
IG9mIHNvbWUgc29ydCBvZiBTdHlsZUltYWdlQ2FjaGUgb2JqZWN0IHdoaWNoCi0gICAgLy8gaXMg
aGVsZCBieSB0aGUgU3R5bGVSZXNvbHZlciwgYW5kIGxpa2VseSBwcm92aWRlZCB0byB0aGlzIG9i
amVjdAotICAgIC8vIGR1cmluZyB0aGUgcmVzb2x2ZS4KLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1h
Z2U+IHN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKLQotICAgIFN0eWxlUmVz
b2x2ZXIqIG1fcmVzb2x2ZXI7CisgICAgQ1NTVG9TdHlsZU1hcCgpIHsgfQogfTsKIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDYxNDViYjFmMTYy
NWI4ZmU0ZDE2NzYwN2JiYmE4YmZkOWExYjAxMTkuLmRiMjNlOTk0MDJlNzM3NDMwZDk1ZjEyYThi
YWM2MDdjZTMxNzM2N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHls
ZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rv
ci5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAKICNkZWZpbmUgSEFORExFX0lOSEVSSVQocHJvcCwgUHJv
cCkgXAogaWYgKGlzSW5oZXJpdCkgXAogeyBcCi0gICAgc3Znc3R5bGUtPnNldCMjUHJvcChtX3Bh
cmVudFN0eWxlLT5zdmdTdHlsZSgpLT5wcm9wKCkpOyBcCisgICAgc3Znc3R5bGUtPnNldCMjUHJv
cChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpLT5wcm9wKCkpOyBcCiAgICAgcmV0dXJu
OyBcCiB9CiAKQEAgLTEwMiwxNyArMTAyLDE3IEBAIHN0YXRpYyBDb2xvciBjb2xvckZyb21TVkdD
b2xvckNTU1ZhbHVlKFNWR0NvbG9yKiBzdmdDb2xvciwgY29uc3QgQ29sb3ImIGZnQ29sb3IpCiAg
ICAgcmV0dXJuIGNvbG9yOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVNWR1Byb3BlcnR5KFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gMDsKICAgICBpZiAodmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkKICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAotICAgIFNWR1JlbmRlclN0eWxlKiBzdmdzdHlsZSA9IG1f
c3R5bGUtPmFjY2Vzc1NWR1N0eWxlKCk7CisgICAgU1ZHUmVuZGVyU3R5bGUqIHN2Z3N0eWxlID0g
c3RhdGUuc3R5bGUoKS0+YWNjZXNzU1ZHU3R5bGUoKTsKIAotICAgIGJvb2wgaXNJbmhlcml0ID0g
bV9wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7Ci0gICAgYm9vbCBpc0lu
aXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAoIW1fcGFyZW50Tm9kZSAmJiB2YWx1
ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKKyAgICBib29sIGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVu
dE5vZGUoKSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpOworICAgIGJvb2wgaXNJbml0aWFs
ID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgKCFzdGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFs
dWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7CiAKICAgICAvLyBXaGF0IGZvbGxvd3MgaXMgYSBsaXN0
IHRoYXQgbWFwcyB0aGUgQ1NTIHByb3BlcnRpZXMgaW50byB0aGVpcgogICAgIC8vIGNvcnJlc3Bv
bmRpbmcgZnJvbnQtZW5kIFJlbmRlclN0eWxlIHZhbHVlcy4gU2hvcnRoYW5kcyhlLmcuIGJvcmRl
ciwKQEAgLTIyOSwzNCArMjI5LDM0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlGaWxsOgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1BhcmVudFN0eWxlID0gbV9w
YXJlbnRTdHlsZS0+c3ZnU3R5bGUoKTsKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0Rmls
bFBhaW50KHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLT5m
aWxsUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50VXJpKCksIGFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkp
OworICAgICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQYXJlbnRTdHlsZSA9
IHN0YXRlLnBhcmVudFN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgICAgICAgICAgICAgc3Znc3R5
bGUtPnNldEZpbGxQYWludChzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50VHlwZSgpLCBzdmdQYXJl
bnRTdHlsZS0+ZmlsbFBhaW50Q29sb3IoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFVyaSgp
LCBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICAgICAgc3Zn
c3R5bGUtPnNldEZpbGxQYWludChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludFR5cGUo
KSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRDb2xvcigpLCBTVkdSZW5kZXJTdHls
ZTo6aW5pdGlhbEZpbGxQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwg
YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdz
dHlsZS0+c2V0RmlsbFBhaW50KFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50VHlwZSgp
LCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludENvbG9yKCksIFNWR1JlbmRlclN0eWxl
Ojppbml0aWFsRmlsbFBhaW50VXJpKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNT
VkdQYWludCgpKSB7CiAgICAgICAgICAgICAgICAgU1ZHUGFpbnQqIHN2Z1BhaW50ID0gc3RhdGlj
X2Nhc3Q8U1ZHUGFpbnQqPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZp
bGxQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUo
c3ZnUGFpbnQsIG1fc3R5bGUtPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVy
dHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwor
ICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlw
ZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5zdHlsZSgpLT5j
b2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGUoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlTdHJva2U6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAg
ICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBtX3Bh
cmVudFN0eWxlLT5zdmdTdHlsZSgpOwotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJv
a2VQYWludChzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxl
LT5zdHJva2VQYWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludFVyaSgpLCBh
cHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtT
dHlsZSgpKTsKKyAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50
U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpOworICAgICAgICAgICAgICAg
IHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRUeXBl
KCksIHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLT5z
dHJva2VQYWludFVyaSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3Rh
dGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAg
ICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KFNWR1JlbmRlclN0eWxlOjppbml0
aWFsU3Ryb2tlUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRD
b2xvcigpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VXJpKCksIGFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkp
OworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChTVkdSZW5kZXJTdHls
ZTo6aW5pdGlhbFN0cm9rZVBhaW50VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9r
ZVBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFVyaSgpLCBz
dGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRv
VmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkgewogICAgICAgICAgICAg
ICAgIFNWR1BhaW50KiBzdmdQYWludCA9IHN0YXRpY19jYXN0PFNWR1BhaW50Kj4odmFsdWUpOwot
ICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYWludC0+cGFpbnRU
eXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIG1fc3R5bGUtPmNvbG9y
KCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBs
eVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxl
LT5zZXRTdHJva2VQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9y
Q1NTVmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpLCBzdmdQYWludC0+dXJp
KCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBzdGF0ZS5hcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KQEAgLTM2Myw3ICszNjMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAg
ICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAg
ICBzdmdzdHlsZS0+c2V0TWFya2VyU3RhcnRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdt
ZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVudCgpKSk7Cisg
ICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFya2VyU3RhcnRSZXNvdXJjZShTVkdVUklSZWZlcmVu
Y2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZG9jdW1lbnQoKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eU1hcmtlck1pZDoKQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAg
ICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAg
ICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBz
dmdzdHlsZS0+c2V0TWFya2VyTWlkUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElk
ZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAg
ICAgICAgc3Znc3R5bGUtPnNldE1hcmtlck1pZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJh
Z21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFya2Vy
RW5kOgpAQCAtMzkxLDcgKzM5MSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAo
dHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBzID0g
cHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxl
LT5zZXRNYXJrZXJFbmRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmll
ckZyb21JUklTdHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICBz
dmdzdHlsZS0+c2V0TWFya2VyRW5kUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElk
ZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50KCkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2VMaW5lY2Fw
OgpAQCAtNDI4LDcgKzQyOCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAodHlw
ZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBzID0gcHJp
bWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRGaWx0ZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21J
UklTdHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICBzdmdzdHls
ZS0+c2V0RmlsdGVyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJG
cm9tSVJJU3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXNrOgpAQCAtNDQyLDcgKzQ0Miw3
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0
cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXNrZXJSZXNvdXJjZShT
VkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgbV9lbGVt
ZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFza2VyUmVzb3Vy
Y2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0
YXRlLmRvY3VtZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlDbGlwUGF0aDoKQEAgLTQ1Niw3ICs0NTYsNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkp
CiAgICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwog
Ci0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0Q2xpcHBlclJlc291cmNlKFNWR1VSSVJlZmVyZW5j
ZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50
KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRDbGlwcGVyUmVzb3VyY2UoU1ZHVVJJUmVm
ZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50
KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlUZXh0QW5jaG9yOgpAQCAtNDc3LDE0ICs0NzcsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICAgICAgewogICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoc3RvcENvbG9y
LCBTdG9wQ29sb3IpOwogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAg
ICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0b3BDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1Zh
bHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBtX3N0eWxlLT5jb2xvcigpKSk7Cisg
ICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0b3BDb2xvcihjb2xvckZyb21TVkdDb2xvckNT
U1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xv
cigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlMaWdodGluZ0NvbG9yOgogICAgICAgICB7CiAgICAgICAgICAgICBIQU5ETEVfSU5IRVJJ
VF9BTkRfSU5JVElBTChsaWdodGluZ0NvbG9yLCBMaWdodGluZ0NvbG9yKTsKICAgICAgICAgICAg
IGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRM
aWdodGluZ0NvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29s
b3IqPih2YWx1ZSksIG1fc3R5bGUtPmNvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHls
ZS0+c2V0TGlnaHRpbmdDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0
PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rmxvb2RPcGFjaXR5
OgpAQCAtNTA5LDcgKzUwOSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGZsb29kQ29sb3IsIEZsb29kQ29sb3IpOwog
ICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAgICAgICAgICAgc3Zn
c3R5bGUtPnNldEZsb29kQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2Fz
dDxTVkdDb2xvcio+KHZhbHVlKSwgbV9zdHlsZS0+Y29sb3IoKSkpOworICAgICAgICAgICAgICAg
IHN2Z3N0eWxlLT5zZXRGbG9vZENvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGlj
X2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSksIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9y
aWVudGF0aW9uSG9yaXpvbnRhbDoKQEAgLTU0OSw3ICs1NDksNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTdmdTaGFk
b3c6IHsKICAgICAgICAgICAgIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHN2Z3N0eWxlLT5zZXRTaGFkb3coYWRvcHRQdHIobV9wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKS0+
c2hhZG93KCkgPyBuZXcgU2hhZG93RGF0YSgqbV9wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKS0+c2hh
ZG93KCkpIDogMCkpOworICAgICAgICAgICAgICAgIHJldHVybiBzdmdzdHlsZS0+c2V0U2hhZG93
KGFkb3B0UHRyKHN0YXRlLnBhcmVudFN0eWxlKCktPnN2Z1N0eWxlKCktPnNoYWRvdygpID8gbmV3
IFNoYWRvd0RhdGEoKnN0YXRlLnBhcmVudFN0eWxlKCktPnN2Z1N0eWxlKCktPnNoYWRvdygpKSA6
IDApKTsKICAgICAgICAgICAgIGlmIChpc0luaXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUpIC8vIGlu
aXRpYWwgfCBub25lCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN2Z3N0eWxlLT5zZXRTaGFkb3co
bnVsbHB0cik7CiAKQEAgLTU2NCwxMiArNTY0LDEyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAg
ICAgICBpZiAoIWZpcnN0VmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRv
d1ZhbHVlKj4oZmlyc3RWYWx1ZSk7Ci0gICAgICAgICAgICBJbnRQb2ludCBsb2NhdGlvbihpdGVt
LT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50Pihz
dHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpKTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRl
bS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RF
bGVtZW50U3R5bGUpIDogMDsKKyAgICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uKGl0ZW0tPngt
PmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxl
KCkpLAorICAgICAgICAgICAgICAgIGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5z
dHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGludCBibHVy
ID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHls
ZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpIDogMDsKICAgICAgICAgICAgIENvbG9yIGNv
bG9yOwogICAgICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQotICAgICAgICAgICAgICAgIGNvbG9y
ID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0KCkpOworICAgICAgICAg
ICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoc3RhdGUsIGl0ZW0tPmNvbG9y
LmdldCgpKTsKIAogICAgICAgICAgICAgLy8gLXdlYmtpdC1zdmctc2hhZG93IGRvZXMgc2hvdWxk
IG5vdCBoYXZlIGEgc3ByZWFkIG9yIHN0eWxlCiAgICAgICAgICAgICBBU1NFUlQoIWl0ZW0tPnNw
cmVhZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCmluZGV4IDFmNWUwYzAy
NDgxYzk4MjliYjY5YmE2NWY1MTgzNTlhNDQ4N2RkZWIuLmZiZDM3Mjk3YjZhNGU5ZTM1ZWYyNjE4
ZmUxNjZjMzg0ZDRiOGRjNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3Bw
CkBAIC02OSwxOSArNjksOTAgQEAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNrZXIoRG9j
dW1lbnQqIGRvY3VtZW50KQogewogfQogCi1ib29sIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hlcyhj
b25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgaXNGYXN0
Q2hlY2thYmxlU2VsZWN0b3IpIGNvbnN0CituYW1lc3BhY2UgeworCitzdGF0aWMgaW5saW5lIGJv
b2wgaXNGYXN0Q2hlY2thYmxlUmVsYXRpb24oQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHJlbGF0aW9u
KQogewotICAgIGlmIChpc0Zhc3RDaGVja2FibGVTZWxlY3RvciAmJiAhZWxlbWVudC0+aXNTVkdF
bGVtZW50KCkpIHsKLSAgICAgICAgaWYgKCFmYXN0Q2hlY2tSaWdodG1vc3RTZWxlY3RvcihzZWxl
Y3RvciwgZWxlbWVudCwgVmlzaXRlZE1hdGNoRGlzYWJsZWQpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICByZXR1cm4gZmFzdENoZWNrKHNlbGVjdG9yLCBlbGVtZW50KTsKKyAg
ICByZXR1cm4gcmVsYXRpb24gPT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQgfHwgcmVsYXRpb24g
PT0gQ1NTU2VsZWN0b3I6OkNoaWxkIHx8IHJlbGF0aW9uID09IENTU1NlbGVjdG9yOjpTdWJTZWxl
Y3RvcjsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzRmFzdENoZWNrYWJsZU1hdGNoKGNvbnN0
IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0g
Q1NTU2VsZWN0b3I6OlNldCkgeworICAgICAgICAvLyBTdHlsZSBhdHRyaWJ1dGUgaXMgZ2VuZXJh
dGVkIGxhemlseSBidXQgdGhlIGZhc3QgcGF0aCBkb2Vzbid0IHRyaWdnZXIgaXQuCisgICAgICAg
IC8vIERpc2FsbG93IHRoZW0gaGVyZSByYXRoZXIgdGhhbiBtYWtpbmcgdGhlIGZhc3QgcGF0aCBt
b3JlIGJyYW5jaHkuCisgICAgICAgIHJldHVybiBzZWxlY3Rvci0+YXR0cmlidXRlKCkgIT0gc3R5
bGVBdHRyOwogICAgIH0KKyAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6
OkV4YWN0KQorICAgICAgICByZXR1cm4gc2VsZWN0b3ItPmF0dHJpYnV0ZSgpICE9IHN0eWxlQXR0
ciAmJiBIVE1MRG9jdW1lbnQ6OmlzQ2FzZVNlbnNpdGl2ZUF0dHJpYnV0ZShzZWxlY3Rvci0+YXR0
cmlidXRlKCkpOworICAgIHJldHVybiBzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6
VGFnIHx8IHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCB8fCBzZWxlY3Rvci0+
bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3M7Cit9CiAKLSAgICBQc2V1ZG9JZCBpZ25vcmVE
eW5hbWljUHNldWRvID0gTk9QU0VVRE87Ci0gICAgcmV0dXJuIG1hdGNoKFNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0KHNlbGVjdG9yLCBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRj
aERpc2FibGVkKSwgaWdub3JlRHluYW1pY1BzZXVkbywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0
ZWd5KCkpID09IFNlbGVjdG9yTWF0Y2hlczsKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0Zhc3RDaGVj
a2FibGVSaWdodG1vc3RTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7Cisg
ICAgaWYgKCFpc0Zhc3RDaGVja2FibGVSZWxhdGlvbihzZWxlY3Rvci0+cmVsYXRpb24oKSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gaXNGYXN0Q2hlY2thYmxlTWF0Y2goc2Vs
ZWN0b3IpIHx8IFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKHNl
bGVjdG9yKTsKIH0KIAotbmFtZXNwYWNlIHsKK2lubGluZSBib29sIGNoZWNrVGFnVmFsdWUoY29u
c3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAg
IHJldHVybiBTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMoZWxlbWVudCwgc2VsZWN0b3ItPnRh
Z1FOYW1lKCkpOworfQorCitpbmxpbmUgYm9vbCBjaGVja0NsYXNzVmFsdWUoY29uc3QgRWxlbWVu
dCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIHJldHVybiBl
bGVtZW50LT5oYXNDbGFzcygpICYmIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlZEVsZW1lbnQqPihl
bGVtZW50KS0+Y2xhc3NOYW1lcygpLmNvbnRhaW5zKHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7
Cit9CisKK2lubGluZSBib29sIGNoZWNrSURWYWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBj
b25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgcmV0dXJuIGVsZW1lbnQtPmhhc0lE
KCkgJiYgZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkgPT0gc2VsZWN0b3It
PnZhbHVlKCkuaW1wbCgpOworfQorCitpbmxpbmUgYm9vbCBjaGVja0V4YWN0QXR0cmlidXRlVmFs
dWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQor
eworICAgIHJldHVybiBTZWxlY3RvckNoZWNrZXI6OmNoZWNrRXhhY3RBdHRyaWJ1dGUoZWxlbWVu
dCwgc2VsZWN0b3ItPmF0dHJpYnV0ZSgpLCBzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCkpOworfQor
CitpbmxpbmUgYm9vbCBjb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yTWF0Y2hlcyhjb25zdCBFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIFNlbGVjdG9yQ2hlY2tl
cjo6VmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlKQoreworICAgIEFTU0VSVChTZWxl
Y3RvckNoZWNrZXI6OmlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3RvcihzZWxlY3RvcikpOworICAg
IHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSkgeworICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0xpbms6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW55TGluazoKKyAgICAg
ICAgcmV0dXJuIGVsZW1lbnQtPmlzTGluaygpOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b1Zpc2l0ZWQ6CisgICAgICAgIHJldHVybiBlbGVtZW50LT5pc0xpbmsoKSAmJiB2aXNpdGVkTWF0
Y2hUeXBlID09IFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRW5hYmxlZDsKKyAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9Gb2N1czoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXNGb2N1c1Bz
ZXVkb0NsYXNzKGVsZW1lbnQpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgZmFzdENo
ZWNrUmlnaHRtb3N0U2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBF
bGVtZW50KiBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRl
ZE1hdGNoVHlwZSkKK3sKKyAgICBBU1NFUlQoU2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2Fi
bGVTZWxlY3RvcihzZWxlY3RvcikpOworCisgICAgc3dpdGNoIChzZWxlY3Rvci0+bV9tYXRjaCkg
eworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlRhZzoKKyAgICAgICAgcmV0dXJuIGNoZWNrVGFnVmFs
dWUoZWxlbWVudCwgc2VsZWN0b3IpOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNsYXNzOgorICAg
ICAgICByZXR1cm4gY2hlY2tDbGFzc1ZhbHVlKGVsZW1lbnQsIHNlbGVjdG9yKTsKKyAgICBjYXNl
IENTU1NlbGVjdG9yOjpJZDoKKyAgICAgICAgcmV0dXJuIGNoZWNrSURWYWx1ZShlbGVtZW50LCBz
ZWxlY3Rvcik7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RXhhY3Q6CisgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6U2V0OgorICAgICAgICByZXR1cm4gY2hlY2tFeGFjdEF0dHJpYnV0ZVZhbHVlKGVsZW1l
bnQsIHNlbGVjdG9yKTsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzczoKKyAgICAg
ICAgcmV0dXJuIGNvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3JNYXRjaGVzKGVsZW1lbnQsIHNlbGVj
dG9yLCB2aXNpdGVkTWF0Y2hUeXBlKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQogCiB0ZW1wbGF0ZSA8Ym9v
bCBjaGVja1ZhbHVlKGNvbnN0IEVsZW1lbnQqLCBjb25zdCBDU1NTZWxlY3RvciopPgogaW5saW5l
IGJvb2wgZmFzdENoZWNrU2luZ2xlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqJiBzZWxlY3Rv
ciwgY29uc3QgRWxlbWVudComIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiYgdG9wQ2hpbGRP
clN1YnNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hF
bGVtZW50KQpAQCAtMTE3LDUxICsxODgsMzQgQEAgaW5saW5lIGJvb2wgZmFzdENoZWNrU2luZ2xl
U2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqJiBzZWxlY3RvciwgY29uc3QgRWxlbWVudCoKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWlubGluZSBib29sIGNoZWNrQ2xhc3NWYWx1ZShjb25zdCBF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAgcmV0
dXJuIGVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVkRWxlbWVu
dCo+KGVsZW1lbnQpLT5jbGFzc05hbWVzKCkuY29udGFpbnMoc2VsZWN0b3ItPnZhbHVlKCkuaW1w
bCgpKTsKIH0KIAotaW5saW5lIGJvb2wgY2hlY2tJRFZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICByZXR1cm4gZWxlbWVudC0+
aGFzSUQoKSAmJiBlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSA9PSBzZWxl
Y3Rvci0+dmFsdWUoKS5pbXBsKCk7Ci19Ci0KLWlubGluZSBib29sIGNoZWNrRXhhY3RBdHRyaWJ1
dGVWYWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0
b3IpCi17Ci0gICAgcmV0dXJuIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tFeGFjdEF0dHJpYnV0ZShl
bGVtZW50LCBzZWxlY3Rvci0+YXR0cmlidXRlKCksIHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7
Ci19Ci0KLWlubGluZSBib29sIGNoZWNrVGFnVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQorYm9vbCBTZWxlY3RvckNoZWNrZXI6OmlzRmFz
dENoZWNrYWJsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIHsKLSAgICBy
ZXR1cm4gU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKGVsZW1lbnQsIHNlbGVjdG9yLT50YWdR
TmFtZSgpKTsKLX0KLQorICAgIGlmICghaXNGYXN0Q2hlY2thYmxlUmlnaHRtb3N0U2VsZWN0b3Io
c2VsZWN0b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChzZWxlY3RvciA9IHNl
bGVjdG9yLT50YWdIaXN0b3J5KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdI
aXN0b3J5KCkpIHsKKyAgICAgICAgaWYgKCFpc0Zhc3RDaGVja2FibGVSZWxhdGlvbihzZWxlY3Rv
ci0+cmVsYXRpb24oKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICgh
aXNGYXN0Q2hlY2thYmxlTWF0Y2goc2VsZWN0b3IpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVj
a2VyOjpmYXN0Q2hlY2tSaWdodG1vc3RTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0
b3IsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNo
VHlwZSkgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjptYXRjaGVzKGNvbnN0IENTU1NlbGVj
dG9yKiBzZWxlY3RvciwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBpc0Zhc3RDaGVja2FibGVTZWxl
Y3RvcikgY29uc3QKIHsKLSAgICBBU1NFUlQoaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Ioc2VsZWN0
b3IpKTsKLQotICAgIHN3aXRjaCAoc2VsZWN0b3ItPm1fbWF0Y2gpIHsKLSAgICBjYXNlIENTU1Nl
bGVjdG9yOjpUYWc6Ci0gICAgICAgIHJldHVybiBjaGVja1RhZ1ZhbHVlKGVsZW1lbnQsIHNlbGVj
dG9yKTsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpDbGFzczoKLSAgICAgICAgcmV0dXJuIGNoZWNr
Q2xhc3NWYWx1ZShlbGVtZW50LCBzZWxlY3Rvcik7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6SWQ6
Ci0gICAgICAgIHJldHVybiBjaGVja0lEVmFsdWUoZWxlbWVudCwgc2VsZWN0b3IpOwotICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OkV4YWN0OgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNldDoKLSAgICAg
ICAgcmV0dXJuIGNoZWNrRXhhY3RBdHRyaWJ1dGVWYWx1ZShlbGVtZW50LCBzZWxlY3Rvcik7Ci0g
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3M6Ci0gICAgICAgIHJldHVybiBjb21tb25Q
c2V1ZG9DbGFzc1NlbGVjdG9yTWF0Y2hlcyhlbGVtZW50LCBzZWxlY3RvciwgdmlzaXRlZE1hdGNo
VHlwZSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
aWYgKGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yICYmICFlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkg
eworICAgICAgICBpZiAoIWZhc3RDaGVja1JpZ2h0bW9zdFNlbGVjdG9yKHNlbGVjdG9yLCBlbGVt
ZW50LCBWaXNpdGVkTWF0Y2hEaXNhYmxlZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBmYXN0Q2hlY2soc2VsZWN0b3IsIGVsZW1lbnQpOwogICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBQc2V1ZG9JZCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VV
RE87CisgICAgcmV0dXJuIG1hdGNoKFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KHNlbGVjdG9yLCBl
bGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaERpc2FibGVkKSwgaWdub3JlRHlu
YW1pY1BzZXVkbywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KCkpID09IFNlbGVjdG9yTWF0
Y2hlczsKIH0KIAotYm9vbCBTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVjayhjb25zdCBDU1NTZWxl
Y3Rvciogc2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Citib29sIFNlbGVj
dG9yQ2hlY2tlcjo6ZmFzdENoZWNrKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgY29uc3Qg
RWxlbWVudCogZWxlbWVudCkKIHsKICAgICBBU1NFUlQoZmFzdENoZWNrUmlnaHRtb3N0U2VsZWN0
b3Ioc2VsZWN0b3IsIGVsZW1lbnQsIFZpc2l0ZWRNYXRjaEVuYWJsZWQpKTsKIApAQCAtMjAyLDQz
ICsyNTYsNiBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrKGNvbnN0IENTU1NlbGVj
dG9yKiBzZWxlY3RvciwgY29uc3QgRWxlbWVudCogZWxlbQogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNGYXN0Q2hlY2thYmxlUmVsYXRpb24oQ1NTU2VsZWN0b3I6
OlJlbGF0aW9uIHJlbGF0aW9uKQotewotICAgIHJldHVybiByZWxhdGlvbiA9PSBDU1NTZWxlY3Rv
cjo6RGVzY2VuZGFudCB8fCByZWxhdGlvbiA9PSBDU1NTZWxlY3Rvcjo6Q2hpbGQgfHwgcmVsYXRp
b24gPT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wg
aXNGYXN0Q2hlY2thYmxlTWF0Y2goY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAg
IGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6U2V0KSB7Ci0gICAgICAgIC8v
IFN0eWxlIGF0dHJpYnV0ZSBpcyBnZW5lcmF0ZWQgbGF6aWx5IGJ1dCB0aGUgZmFzdCBwYXRoIGRv
ZXNuJ3QgdHJpZ2dlciBpdC4KLSAgICAgICAgLy8gRGlzYWxsb3cgdGhlbSBoZXJlIHJhdGhlciB0
aGFuIG1ha2luZyB0aGUgZmFzdCBwYXRoIG1vcmUgYnJhbmNoeS4KLSAgICAgICAgcmV0dXJuIHNl
bGVjdG9yLT5hdHRyaWJ1dGUoKSAhPSBzdHlsZUF0dHI7Ci0gICAgfQotICAgIGlmIChzZWxlY3Rv
ci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6RXhhY3QpCi0gICAgICAgIHJldHVybiBzZWxlY3Rv
ci0+YXR0cmlidXRlKCkgIT0gc3R5bGVBdHRyICYmIEhUTUxEb2N1bWVudDo6aXNDYXNlU2Vuc2l0
aXZlQXR0cmlidXRlKHNlbGVjdG9yLT5hdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIHNlbGVjdG9y
LT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpUYWcgfHwgc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NT
U2VsZWN0b3I6OklkIHx8IHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzczsK
LX0KLQotc3RhdGljIGlubGluZSBib29sIGlzRmFzdENoZWNrYWJsZVJpZ2h0bW9zdFNlbGVjdG9y
KGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICBpZiAoIWlzRmFzdENoZWNrYWJs
ZVJlbGF0aW9uKHNlbGVjdG9yLT5yZWxhdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiBpc0Zhc3RDaGVja2FibGVNYXRjaChzZWxlY3RvcikgfHwgU2VsZWN0b3JDaGVj
a2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IpOwotfQotCi1ib29sIFNl
bGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3Iq
IHNlbGVjdG9yKQotewotICAgIGlmICghaXNGYXN0Q2hlY2thYmxlUmlnaHRtb3N0U2VsZWN0b3Io
c2VsZWN0b3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChzZWxlY3RvciA9IHNl
bGVjdG9yLT50YWdIaXN0b3J5KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdI
aXN0b3J5KCkpIHsKLSAgICAgICAgaWYgKCFpc0Zhc3RDaGVja2FibGVSZWxhdGlvbihzZWxlY3Rv
ci0+cmVsYXRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICgh
aXNGYXN0Q2hlY2thYmxlTWF0Y2goc2VsZWN0b3IpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogLy8gUmVjdXJzaXZlIGNoZWNrIG9mIHNl
bGVjdG9ycyBhbmQgY29tYmluYXRvcnMKIC8vIEl0IGNhbiByZXR1cm4gNCBkaWZmZXJlbnQgdmFs
dWVzOgogLy8gKiBTZWxlY3Rvck1hdGNoZXMgICAgICAgICAgLSB0aGUgc2VsZWN0b3IgbWF0Y2hl
cyB0aGUgZWxlbWVudCBlCkBAIC05OTMsMjMgKzEwMTAsNiBAQCBib29sIFNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IENT
U1NlbAogICAgIH0KIH0KIAotYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNvbW1vblBzZXVkb0NsYXNz
U2VsZWN0b3JNYXRjaGVzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9y
KiBzZWxlY3RvciwgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlKSBjb25zdAotewot
ICAgIEFTU0VSVChpc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IpKTsKLSAgICBz
d2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkpIHsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9MaW5rOgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FueUxpbms6Ci0gICAgICAg
IHJldHVybiBlbGVtZW50LT5pc0xpbmsoKTsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9W
aXNpdGVkOgotICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNMaW5rKCkgJiYgdmlzaXRlZE1hdGNo
VHlwZSA9PSBWaXNpdGVkTWF0Y2hFbmFibGVkOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0ZvY3VzOgotICAgICAgICByZXR1cm4gbWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MoZWxlbWVudCk7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotfQotCiB1bnNpZ25lZCBTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxp
bmtNYXRjaFR5cGUoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQogewogICAgIHVuc2lnbmVk
IGxpbmtNYXRjaFR5cGUgPSBNYXRjaEFsbDsKQEAgLTEwNTUsMTEgKzEwNTUsNiBAQCB1bnNpZ25l
ZCBTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtNYXRjaFR5cGUoY29uc3QgQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yKQogICAgIHJldHVybiBsaW5rTWF0Y2hUeXBlOwogfQogCi1ib29sIFNlbGVj
dG9yQ2hlY2tlcjo6aXNGcmFtZUZvY3VzZWQoY29uc3QgRWxlbWVudCogZWxlbWVudCkKLXsKLSAg
ICByZXR1cm4gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiBlbGVtZW50LT5kb2N1bWVu
dCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+aXNGb2N1c2VkQW5kQWN0aXZlKCk7Ci19Ci0KIHRl
bXBsYXRlCiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2goY29u
c3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBQc2V1ZG9JZCYsIGNvbnN0IERPTVNpYmxpbmdU
cmF2ZXJzYWxTdHJhdGVneSYpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2Vy
LmgKaW5kZXggMzkzOWJjMzU0ZTRhM2NkNzIzNDc3ZjM4ZWY2MmFmZGM0ZDZmZWVmYi4uNmQ2Mjk1
M2E4ODJmYzZiNmYyZDY0OTVjYmE3NTRkYmMwMDhiYjE2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxl
Y3RvckNoZWNrZXIuaApAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjaGVja09u
ZShjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIGNvbnN0IFNpYmxpbmdUcmF2ZXJzYWxT
dHJhdGVneSYpIGNvbnN0OwogCiAgICAgc3RhdGljIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0
b3IoY29uc3QgQ1NTU2VsZWN0b3IqKTsKLSAgICBib29sIGZhc3RDaGVjayhjb25zdCBDU1NTZWxl
Y3RvciosIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBmYXN0Q2hlY2so
Y29uc3QgQ1NTU2VsZWN0b3IqLCBjb25zdCBFbGVtZW50Kik7CiAKICAgICBib29sIHN0cmljdFBh
cnNpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmljdFBhcnNpbmc7IH0KIApAQCAtOTEsNyArOTEs
NiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCB0YWdNYXRjaGVzKGNvbnN0IEVsZW1lbnQq
LCBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgc3RhdGljIGJvb2wgaXNDb21tb25Qc2V1ZG9D
bGFzc1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKik7Ci0gICAgYm9vbCBtYXRjaGVzRm9jdXNQ
c2V1ZG9DbGFzcyhjb25zdCBFbGVtZW50KikgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wgZmFzdENo
ZWNrUmlnaHRtb3N0QXR0cmlidXRlU2VsZWN0b3IoY29uc3QgRWxlbWVudCosIGNvbnN0IENTU1Nl
bGVjdG9yKik7CiAgICAgc3RhdGljIGJvb2wgY2hlY2tFeGFjdEF0dHJpYnV0ZShjb25zdCBFbGVt
ZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgc2VsZWN0b3JBdHRyaWJ1dGVOYW1lLCBjb25zdCBB
dG9taWNTdHJpbmdJbXBsKiB2YWx1ZSk7CiAKQEAgLTEwMCwxMCArOTksNiBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgYm9vbCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKERvY3VtZW50Kiwg
Y29uc3QgQ1NTU2VsZWN0b3IqKSBjb25zdDsKLSAgICBzdGF0aWMgYm9vbCBpc0ZyYW1lRm9jdXNl
ZChjb25zdCBFbGVtZW50Kik7Ci0KLSAgICBib29sIGZhc3RDaGVja1JpZ2h0bW9zdFNlbGVjdG9y
KGNvbnN0IENTU1NlbGVjdG9yKiwgY29uc3QgRWxlbWVudCosIFZpc2l0ZWRNYXRjaFR5cGUpIGNv
bnN0OwotICAgIGJvb2wgY29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvck1hdGNoZXMoY29uc3QgRWxl
bWVudCosIGNvbnN0IENTU1NlbGVjdG9yKiwgVmlzaXRlZE1hdGNoVHlwZSkgY29uc3Q7CiAKICAg
ICBib29sIG1fc3RyaWN0UGFyc2luZzsKICAgICBib29sIG1fZG9jdW1lbnRJc0hUTUw7CkBAIC0x
MjEsNyArMTE2LDEyIEBAIGlubGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1
ZG9DbGFzc1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlCiAgICAgICAgIHx8IHBzZXVk
b1R5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0ZvY3VzOwogfQogCi1pbmxpbmUgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6Om1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKGNvbnN0IEVsZW1lbnQqIGVsZW1l
bnQpIGNvbnN0CitpbmxpbmUgYm9vbCBpc0ZyYW1lRm9jdXNlZChjb25zdCBFbGVtZW50KiBlbGVt
ZW50KQoreworICAgIHJldHVybiBlbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpICYmIGVsZW1l
bnQtPmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5pc0ZvY3VzZWRBbmRBY3RpdmUo
KTsKK30KKworaW5saW5lIGJvb2wgbWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MoY29uc3QgRWxlbWVu
dCogZWxlbWVudCkKIHsKICAgICBpZiAoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBz
ZXVkb1N0YXRlKGNvbnN0X2Nhc3Q8RWxlbWVudCo+KGVsZW1lbnQpLCBDU1NTZWxlY3Rvcjo6UHNl
dWRvRm9jdXMpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRl
ci5jcHAKaW5kZXggNmQ3OGM2ODQ0NDJjYzdlMjRlYmY5YTYyODY3YmQ4ODk5ZmU3OThlNi4uYzMz
NjVlYTgwZWE5YmRhN2ZkZTQxODQxOTc5NDZlZjljY2IzMDUyZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlQnVpbGRlci5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eUV4cGFu
ZGluZyB7CiBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJRCBpZD4KLSAgICBz
dGF0aWMgaW5saW5lIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyBpbmxpbmUgdm9p
ZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZVN0YXRlJiBzdGF0ZSkKICAgICB7CiAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUludmFs
aWQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC02OSwyMCArNjksMjAgQEAgcHVibGljOgogICAg
ICAgICBjb25zdCBTdHlsZUJ1aWxkZXImIHRhYmxlID0gU3R5bGVCdWlsZGVyOjpzaGFyZWRTdHls
ZUJ1aWxkZXIoKTsKICAgICAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0gdGFi
bGUucHJvcGVydHlIYW5kbGVyKGlkKTsKICAgICAgICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgpKQot
ICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJl
c29sdmVyKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJ
RCwgc3RhdGUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIGFwcGx5SW5oZXJpdFZh
bHVlPG9uZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5oZXJp
dFZhbHVlPHR3bz4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5o
ZXJpdFZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgYXBw
bHlJbmhlcml0VmFsdWU8Zm91cj4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAg
IGFwcGx5SW5oZXJpdFZhbHVlPGZpdmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAg
ICAgICBhcHBseUluaGVyaXRWYWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAg
YXBwbHlJbmhlcml0VmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5
SW5oZXJpdFZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5o
ZXJpdFZhbHVlPGZvdXI+KHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgYXBwbHlJbmhlcml0
VmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDxD
U1NQcm9wZXJ0eUlEIGlkPgotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUluaXRpYWxWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIp
CisgICAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKICAgICAgICAgaWYg
KGlkID09IENTU1Byb3BlcnR5SW52YWxpZCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTkwLDIw
ICs5MCwyMCBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFN0eWxlQnVpbGRlciYgdGFibGUgPSBT
dHlsZUJ1aWxkZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpOwogICAgICAgICBjb25zdCBQcm9wZXJ0
eUhhbmRsZXImIGhhbmRsZXIgPSB0YWJsZS5wcm9wZXJ0eUhhbmRsZXIoaWQpOwogICAgICAgICBp
ZiAoaGFuZGxlci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5pdGlhbFZh
bHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICAgICAgaGFuZGxlci5hcHBs
eUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsK
LSAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVy
KTsKLSAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdHlsZVJlc29s
dmVyKTsKLSAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8dGhyZWU+KHByb3BlcnR5SUQsIHN0eWxl
UmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTxmb3VyPihwcm9wZXJ0eUlELCBz
dHlsZVJlc29sdmVyKTsKLSAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8Zml2ZT4ocHJvcGVydHlJ
RCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPG9uZT4ocHJvcGVy
dHlJRCwgc3RhdGUpOworICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTx0d28+KHByb3BlcnR5SUQs
IHN0YXRlKTsKKyAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8dGhyZWU+KHByb3BlcnR5SUQsIHN0
YXRlKTsKKyAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8Zm91cj4ocHJvcGVydHlJRCwgc3RhdGUp
OworICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdGF0ZSk7CiAg
ICAgfQogCiAgICAgdGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQ+Ci0gICAgc3RhdGljIGlubGlu
ZSB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIGlubGluZSB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYg
c3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9w
ZXJ0eUludmFsaWQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTEsMTkgKzExMSwxOSBAQCBw
dWJsaWM6CiAgICAgICAgIGNvbnN0IFN0eWxlQnVpbGRlciYgdGFibGUgPSBTdHlsZUJ1aWxkZXI6
OnNoYXJlZFN0eWxlQnVpbGRlcigpOwogICAgICAgICBjb25zdCBQcm9wZXJ0eUhhbmRsZXImIGhh
bmRsZXIgPSB0YWJsZS5wcm9wZXJ0eUhhbmRsZXIoaWQpOwogICAgICAgICBpZiAoaGFuZGxlci5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3R5
bGVSZXNvbHZlciwgdmFsdWUpOworICAgICAgICAgICAgaGFuZGxlci5hcHBseVZhbHVlKHByb3Bl
cnR5SUQsIHN0YXRlLCB2YWx1ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgewogICAgICAgICBpZiAoIWV4cGFuZFZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIGFwcGx5VmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1
ZSk7Ci0gICAgICAgIGFwcGx5VmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2
YWx1ZSk7Ci0gICAgICAgIGFwcGx5VmFsdWU8dGhyZWU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2
ZXIsIHZhbHVlKTsKLSAgICAgICAgYXBwbHlWYWx1ZTxmb3VyPihwcm9wZXJ0eUlELCBzdHlsZVJl
c29sdmVyLCB2YWx1ZSk7Ci0gICAgICAgIGFwcGx5VmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwgc3R5
bGVSZXNvbHZlciwgdmFsdWUpOworICAgICAgICBhcHBseVZhbHVlPG9uZT4ocHJvcGVydHlJRCwg
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgYXBwbHlWYWx1ZTx0d28+KHByb3BlcnR5SUQsIHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIGFwcGx5VmFsdWU8dGhyZWU+KHByb3BlcnR5SUQsIHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIGFwcGx5VmFsdWU8Zm91cj4ocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgYXBwbHlWYWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOwog
ICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVy
biBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUs
ICZhcHBseVZhbHVlKTsgfQogfTsKQEAgLTEzNCw5ICsxMzQsOSBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBTZXR0ZXJUeXBlIHZhbHVlKSB7
IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KICAgICBzdGF0aWMgR2V0dGVyVHlw
ZSB2YWx1ZShSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+KmdldHRlckZ1bmN0
aW9uKSgpOyB9CiAgICAgc3RhdGljIEluaXRpYWxUeXBlIGluaXRpYWwoKSB7IHJldHVybiAoKmlu
aXRpYWxGdW5jdGlvbikoKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIHsgc2V0VmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgdmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkp
OyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikgeyBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLCBpbml0aWFsKCkpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiwgQ1NTVmFsdWUqKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpIHsg
c2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgdmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSkpOyB9Cisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlU3RhdGUmIHN0YXRlKSB7IHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIGluaXRpYWwoKSk7IH0K
KyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0
YXRlJiwgQ1NTVmFsdWUqKSB7IH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhh
bmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBw
bHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQogfTsKIApAQCAtMTQ0LDEwICsxNDQsMTAg
QEAgdGVtcGxhdGUgPHR5cGVuYW1lIEdldHRlclR5cGUsIEdldHRlclR5cGUgKFJlbmRlclN0eWxl
OjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QKIGNsYXNzIEFwcGx5UHJvcGVydHlEZWZhdWx0IHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIFNl
dHRlclR5cGUgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgewogICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAg
ICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksICpzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbHVlKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgp
LCAqc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkpOwogICAgIH0KICAgICBz
dGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTE2MCwxNiAr
MTYwLDE2IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBOdW1iZXJUeXBlLCBOdW1iZXJUeXBlIChSZW5k
ZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0CiBjbGFzcyBBcHBseVByb3BlcnR5TnVt
YmVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5
bGUsIE51bWJlclR5cGUgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsg
fQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBpZE1hcHNUb01pbnVzT25lKQotICAg
ICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgLTEpOworICAgICAgICAg
ICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgLTEpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFs
dWU8TnVtYmVyVHlwZT4oQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAg
ICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZTxOdW1i
ZXJUeXBlPihDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogICAgIH0KICAgICBzdGF0
aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTE4MSw3ICsxODEs
NyBAQCBwdWJsaWM6CiB0ZW1wbGF0ZSA8U3R5bGVJbWFnZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVy
RnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFBh
c3NSZWZQdHI8U3R5bGVJbWFnZT4pLCBTdHlsZUltYWdlKiAoKmluaXRpYWxGdW5jdGlvbikoKSwg
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eT4KIGNsYXNzIEFwcGx5UHJvcGVydHlTdHlsZUltYWdlIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKHBy
b3BlcnR5LCB2YWx1ZSkpOyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3RhdGUu
c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKHN0YXRl
LCBwcm9wZXJ0eSwgdmFsdWUpKTsgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRl
SGFuZGxlcigpCiAgICAgewogICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5
UHJvcGVydHlEZWZhdWx0QmFzZTxTdHlsZUltYWdlKiwgZ2V0dGVyRnVuY3Rpb24sIFBhc3NSZWZQ
dHI8U3R5bGVJbWFnZT4sIHNldHRlckZ1bmN0aW9uLCBTdHlsZUltYWdlKiwgaW5pdGlhbEZ1bmN0
aW9uPjo6Y3JlYXRlSGFuZGxlcigpOwpAQCAtMTk4LDI4ICsxOTgsMjggQEAgcHVibGljOgogICAg
IHN0YXRpYyBib29sIGhhc0F1dG8oUmVuZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiAoc3R5bGUt
PipoYXNBdXRvRnVuY3Rpb24pKCk7IH0KICAgICBzdGF0aWMgdm9pZCBzZXRBdXRvKFJlbmRlclN0
eWxlKiBzdHlsZSkgeyAoc3R5bGUtPipzZXRBdXRvRnVuY3Rpb24pKCk7IH0KIAotICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgaWYgKGhhc0F1
dG8oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpCi0gICAgICAgICAgICBzZXRBdXRvKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCkpOworICAgICAgICBpZiAoaGFzQXV0byhzdGF0ZS5wYXJlbnRT
dHlsZSgpKSkKKyAgICAgICAgICAgIHNldEF1dG8oc3RhdGUuc3R5bGUoKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHZhbHVlKHN0
eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRl
LnN0eWxlKCksIHZhbHVlKHN0YXRlLnBhcmVudFN0eWxlKCkpKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyKSB7IHNldEF1dG8oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSk7IH0KKyAgICBz
dGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVT
dGF0ZSYgc3RhdGUpIHsgc2V0QXV0byhzdGF0ZS5zdHlsZSgpKTsgfQogCi0gICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IGF1dG9JZGVudGl0eSkKLSAgICAgICAgICAgIHNldEF1dG8oc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSk7CisgICAgICAgICAgICBzZXRBdXRvKHN0YXRlLnN0eWxlKCkp
OwogICAgICAgICBlbHNlIGlmICh2YWx1ZVR5cGUgPT0gTnVtYmVyKQotICAgICAgICAgICAgc2V0
VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAg
ICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksICpwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIGVs
c2UgaWYgKHZhbHVlVHlwZSA9PSBDb21wdXRlTGVuZ3RoKQotICAgICAgICAgICAgc2V0VmFsdWUo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4o
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgp
LCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKTsKKyAgICAgICAgICAg
IHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+
KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpKSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBj
cmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1
ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KQEAgLTIyNywyNyArMjI3LDI3
IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUNsaXAgewogcHJpdmF0ZToKLSAgICBz
dGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0xlbmd0aChTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9M
ZW5ndGgoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUp
CiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVn
ZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBGcmFjdGlvbkNvbnZlcnNpb24gfCBB
dXRvQ29udmVyc2lvbj4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9v
dEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkp
OworICAgICAgICByZXR1cm4gdmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252
ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBGcmFjdGlvbkNvbnZlcnNpb24gfCBBdXRvQ29u
dmVyc2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5z
dHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwogICAgIH0KIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewot
ICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRT
dHlsZSgpOworICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRT
dHlsZSgpOwogICAgICAgICBpZiAoIXBhcmVudFN0eWxlLT5oYXNDbGlwKCkpCi0gICAgICAgICAg
ICByZXR1cm4gYXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0g
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENsaXAocGFyZW50U3R5bGUtPmNsaXBU
b3AoKSwgcGFyZW50U3R5bGUtPmNsaXBSaWdodCgpLCBwYXJlbnRTdHlsZS0+Y2xpcEJvdHRvbSgp
LCBwYXJlbnRTdHlsZS0+Y2xpcExlZnQoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldEhhc0NsaXAodHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gYXBwbHlJbml0aWFsVmFs
dWUocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDbGlwKHBh
cmVudFN0eWxlLT5jbGlwVG9wKCksIHBhcmVudFN0eWxlLT5jbGlwUmlnaHQoKSwgcGFyZW50U3R5
bGUtPmNsaXBCb3R0b20oKSwgcGFyZW50U3R5bGUtPmNsaXBMZWZ0KCkpOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRIYXNDbGlwKHRydWUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSk7Ci0g
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0NsaXAoZmFsc2UpOworICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRDbGlwKExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCksIExl
bmd0aCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQ2xpcChmYWxzZSk7CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTI1NSwxNSArMjU1LDE1IEBAIHB1YmxpYzoKICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKICAgICAgICAgaWYgKFJlY3QqIHJlY3QgPSBwcmltaXRp
dmVWYWx1ZS0+Z2V0UmVjdFZhbHVlKCkpIHsKLSAgICAgICAgICAgIExlbmd0aCB0b3AgPSBjb252
ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+dG9wKCkpOwotICAgICAgICAgICAgTGVu
Z3RoIHJpZ2h0ID0gY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3QtPnJpZ2h0KCkp
OwotICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29s
dmVyLCByZWN0LT5ib3R0b20oKSk7Ci0gICAgICAgICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRU
b0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0LT5sZWZ0KCkpOwotICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0Q2xpcCh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpOwotICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SGFzQ2xpcCh0cnVlKTsKKyAgICAg
ICAgICAgIExlbmd0aCB0b3AgPSBjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3QtPnRvcCgpKTsK
KyAgICAgICAgICAgIExlbmd0aCByaWdodCA9IGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdC0+
cmlnaHQoKSk7CisgICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29udmVydFRvTGVuZ3RoKHN0
YXRlLCByZWN0LT5ib3R0b20oKSk7CisgICAgICAgICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRU
b0xlbmd0aChzdGF0ZSwgcmVjdC0+bGVmdCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldENsaXAodG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsKKyAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldEhhc0NsaXAodHJ1ZSk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRDbGlwKExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0
aCgpKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0NsaXAoZmFs
c2UpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3Ro
KCksIExlbmd0aCgpLCBMZW5ndGgoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRI
YXNDbGlwKGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjgxLDQwICsyODEsNDAgQEAg
dGVtcGxhdGUgPENvbG9ySW5oZXJpdCBpbmhlcml0Q29sb3JGcm9tUGFyZW50LAogICAgICAgICAg
IENvbG9yICgqaW5pdGlhbEZ1bmN0aW9uKSgpID0gJmRlZmF1bHRJbml0aWFsQ29sb3I+CiBjbGFz
cyBBcHBseVByb3BlcnR5Q29sb3IgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5o
ZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlU3RhdGUmIHN0YXRlKQogICAgIHsKICAgICAgICAgLy8gVmlzaXRlZCBsaW5rIHN0eWxlIGNh
biBuZXZlciBleHBsaWNpdGx5IGluaGVyaXQgZnJvbSBwYXJlbnQgdmlzaXRlZCBsaW5rIHN0eWxl
IHNvIG5vIHNlcGFyYXRlIGdldHRlcnMgYXJlIG5lZWRlZC4KLSAgICAgICAgQ29sb3IgY29sb3Ig
PSAoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+KmdldHRlckZ1bmN0aW9uKSgpOwotICAg
ICAgICBhcHBseUNvbG9yVmFsdWUoc3R5bGVSZXNvbHZlciwgY29sb3IuaXNWYWxpZCgpID8gY29s
b3IgOiAoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+KmRlZmF1bHRGdW5jdGlvbikoKSk7
CisgICAgICAgIENvbG9yIGNvbG9yID0gKHN0YXRlLnBhcmVudFN0eWxlKCktPipnZXR0ZXJGdW5j
dGlvbikoKTsKKyAgICAgICAgYXBwbHlDb2xvclZhbHVlKHN0YXRlLCBjb2xvci5pc1ZhbGlkKCkg
PyBjb2xvciA6IChzdGF0ZS5wYXJlbnRTdHlsZSgpLT4qZGVmYXVsdEZ1bmN0aW9uKSgpKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlh
bFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0g
ICAgICAgIGFwcGx5Q29sb3JWYWx1ZShzdHlsZVJlc29sdmVyLCBpbml0aWFsRnVuY3Rpb24oKSk7
CisgICAgICAgIGFwcGx5Q29sb3JWYWx1ZShzdGF0ZSwgaW5pdGlhbEZ1bmN0aW9uKCkpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBpZiAoaW5oZXJpdENvbG9yRnJvbVBhcmVudCAmJiBw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvcikKLSAgICAg
ICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAg
ICAgICAgICAgYXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOwogICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKSkKLSAgICAgICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNl
dHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmlt
aXRpdmVWYWx1ZSkpOwotICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSkKLSAgICAgICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPmNvbG9y
RnJvbVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlLCAvKiBmb3JWaXNpdGVkTGluayAqLyB0
cnVlKSk7CisgICAgICAgICAgICBpZiAoc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxl
KCkpCisgICAgICAgICAgICAgICAgKHN0YXRlLnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoU3R5
bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoc3RhdGUsIHByaW1pdGl2ZVZhbHVl
KSk7CisgICAgICAgICAgICBpZiAoc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSgpKQorICAgICAgICAgICAgICAgIChzdGF0ZS5zdHlsZSgpLT4qdmlzaXRlZExpbmtTZXR0ZXJG
dW5jdGlvbikoU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoc3RhdGUsIHBy
aW1pdGl2ZVZhbHVlLCAvKiBmb3JWaXNpdGVkTGluayAqLyB0cnVlKSk7CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUNvbG9yVmFsdWUoU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5Q29s
b3JWYWx1ZShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIGNvbnN0IENvbG9yJiBjb2xvcikKICAg
ICB7Ci0gICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGUoKSkKLSAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rp
b24pKGNvbG9yKTsKLSAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUoKSkKLSAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4q
dmlzaXRlZExpbmtTZXR0ZXJGdW5jdGlvbikoY29sb3IpOworICAgICAgICBpZiAoc3RhdGUuYXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpCisgICAgICAgICAgICAoc3RhdGUuc3R5bGUoKS0+
KnNldHRlckZ1bmN0aW9uKShjb2xvcik7CisgICAgICAgIGlmIChzdGF0ZS5hcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlKCkpCisgICAgICAgICAgICAoc3RhdGUuc3R5bGUoKS0+KnZpc2l0
ZWRMaW5rU2V0dGVyRnVuY3Rpb24pKGNvbG9yKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVy
dHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5
SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQpAQCAtMzIz
LDExICszMjMsMTEgQEAgcHVibGljOgogdGVtcGxhdGUgPFRleHREaXJlY3Rpb24gKFJlbmRlclN0
eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVy
RnVuY3Rpb24pKFRleHREaXJlY3Rpb24pLCBUZXh0RGlyZWN0aW9uICgqaW5pdGlhbEZ1bmN0aW9u
KSgpPgogY2xhc3MgQXBwbHlQcm9wZXJ0eURpcmVjdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxUZXh0
RGlyZWN0aW9uLCBnZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlvbiwgc2V0dGVyRnVuY3Rpb24s
IFRleHREaXJlY3Rpb24sIGluaXRpYWxGdW5jdGlvbj46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwg
c3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3R5bGVS
ZXNvbHZlci0+ZWxlbWVudCgpOwotICAgICAgICBpZiAoZWxlbWVudCAmJiBzdHlsZVJlc29sdmVy
LT5lbGVtZW50KCkgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCisg
ICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0PFRleHREaXJlY3Rpb24sIGdldHRlckZ1bmN0aW9u
LCBUZXh0RGlyZWN0aW9uLCBzZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlvbiwgaW5pdGlhbEZ1
bmN0aW9uPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBF
bGVtZW50KiBlbGVtZW50ID0gc3RhdGUuZWxlbWVudCgpOworICAgICAgICBpZiAoZWxlbWVudCAm
JiBlbGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQogICAg
ICAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0RGlyZWN0aW9uU2V0T25Eb2N1bWVudEVs
ZW1lbnQodHJ1ZSk7CiAgICAgfQogCkBAIC0zNTQsNyArMzU0LDcgQEAgdGVtcGxhdGUgPExlbmd0
aCAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwKIGNsYXNzIEFwcGx5UHJv
cGVydHlMZW5ndGggewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0
eWxlKiBzdHlsZSwgTGVuZ3RoIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1
ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzYyLDM5ICszNjIsMzkgQEAgcHVibGljOgogICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgaWYgKG5vbmVFbmFibGVkICYmIHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewogICAgICAgICAgICAgaWYg
KG5vbmVVbmRlZmluZWQpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgTGVuZ3RoKFVuZGVmaW5lZCkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0
YXRlLnN0eWxlKCksIExlbmd0aChVbmRlZmluZWQpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoKSk7Cisg
ICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKCkpOwogICAgICAg
ICB9CiAgICAgICAgIGlmIChsZWdhY3lJbnRyaW5zaWNFbmFibGVkKSB7CiAgICAgICAgICAgICBp
ZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnRyaW5zaWMpCi0gICAg
ICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKEludHJp
bnNpYykpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aChJ
bnRyaW5zaWMpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlTWluSW50cmluc2ljKQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChNaW5JbnRyaW5zaWMpKTsKKyAgICAgICAgICAg
ICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoTWluSW50cmluc2ljKSk7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKGludHJpbnNpY0VuYWJsZWQpIHsKICAgICAgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdE1pbkNvbnRlbnQpCi0g
ICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKE1p
bkNvbnRlbnQpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5n
dGgoTWluQ29udGVudCkpOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkgPT0gQ1NTVmFsdWVXZWJraXRNYXhDb250ZW50KQotICAgICAgICAgICAgICAgIHNl
dFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChNYXhDb250ZW50KSk7CisgICAg
ICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKE1heENvbnRlbnQpKTsK
ICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlV2Via2l0RmlsbEF2YWlsYWJsZSkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoRmlsbEF2YWlsYWJsZSkpOworICAgICAgICAgICAgICAg
IHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aChGaWxsQXZhaWxhYmxlKSk7CiAgICAgICAg
ICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtp
dEZpdENvbnRlbnQpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgTGVuZ3RoKEZpdENvbnRlbnQpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0
ZS5zdHlsZSgpLCBMZW5ndGgoRml0Q29udGVudCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KGF1dG9FbmFibGVkICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0
bykKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aCgp
KTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aCgpKTsKICAgICAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIExl
bmd0aCBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgICAgIExlbmd0
aCBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0
eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZl
Wm9vbSgpKTsKICAgICAgICAgICAgIGxlbmd0aC5zZXRRdWlyayhwcmltaXRpdmVWYWx1ZS0+aXNR
dWlya1ZhbHVlKCkpOwotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgbGVuZ3RoKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIGxlbmd0aCk7
CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKQotICAg
ICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKHByaW1pdGl2
ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KSk7CisgICAgICAgICAgICBzZXRWYWx1
ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCks
IFBlcmNlbnQpKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRl
ZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT50b0Nh
bGNWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVu
dFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpKTsKKyAg
ICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1ZS0+
Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVt
ZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkpOwogICAgICAgICBl
bHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKLSAg
ICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVl
LT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0
ZS5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpOwog
ICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC00
MDksMTYgKzQwOSwxNiBAQCB0ZW1wbGF0ZSA8U3RyaW5nSWRlbnRCZWhhdmlvciBpZGVudEJlaGF2
aW9yLCBjb25zdCBBdG9taWNTdHJpbmcmIChSZW5kZXJTdHlsZTo6KgogY2xhc3MgQXBwbHlQcm9w
ZXJ0eVN0cmluZyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5
bGUqIHN0eWxlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1
bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBz
dGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlKTsKICAgICAgICAgaWYgKChpZGVudEJlaGF2aW9yID09IE1hcE5vbmVUb051bGwgJiYgcHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgfHwg
KGlkZW50QmVoYXZpb3IgPT0gTWFwQXV0b1RvTnVsbCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSA9PSBDU1NWYWx1ZUF1dG8pKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKSwgbnVsbEF0b20pOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUo
KSwgbnVsbEF0b20pOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CisgICAg
ICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5n
VmFsdWUoKSk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxl
cigpCiAgICAgewpAQCAtNDMxLDcgKzQzMSw3IEBAIHRlbXBsYXRlIDxMZW5ndGhTaXplIChSZW5k
ZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6CiBj
bGFzcyBBcHBseVByb3BlcnR5Qm9yZGVyUmFkaXVzIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIExlbmd0aFNpemUgdmFsdWUpIHsgKHN0eWxl
LT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZh
bHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC00NDgsMTcg
KzQ0OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIGVsc2UgaWYgKHBhaXItPmZpcnN0KCktPmlzVmll
d3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCiAgICAgICAgICAgICByYWRpdXNXaWR0aCA9IHBhaXIt
PmZpcnN0KCktPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpOwogICAgICAgICBlbHNlIGlmIChw
YWlyLT5maXJzdCgpLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKQotICAgICAg
ICAgICAgcmFkaXVzV2lkdGggPSBMZW5ndGgoKHBhaXItPmZpcnN0KCktPmNzc0NhbGNWYWx1ZSgp
LT50b0NhbGNWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290
RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkp
KTsKKyAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gTGVuZ3RoKChwYWlyLT5maXJzdCgpLT5jc3ND
YWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRT
dHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gcGFpci0+Zmlyc3QoKS0+Y29tcHV0ZUxlbmd0aDxM
ZW5ndGg+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50
U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAg
ICAgICAgIHJhZGl1c1dpZHRoID0gcGFpci0+Zmlyc3QoKS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+
KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaWYgKHBhaXItPnNlY29uZCgpLT5pc1BlcmNlbnRh
Z2UoKSkKICAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IExlbmd0aChwYWlyLT5zZWNvbmQoKS0+
Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CiAgICAgICAgIGVsc2UgaWYgKHBhaXItPnNlY29u
ZCgpLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKQogICAgICAgICAgICAgcmFkaXVzSGVp
Z2h0ID0gcGFpci0+c2Vjb25kKCktPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpOwogICAgICAg
ICBlbHNlIGlmIChwYWlyLT5zZWNvbmQoKS0+aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5n
dGgoKSkKLSAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IExlbmd0aCgocGFpci0+c2Vjb25kKCkt
PmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHls
ZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVm
ZmVjdGl2ZVpvb20oKSkpKTsKKyAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IExlbmd0aCgocGFp
ci0+c2Vjb25kKCktPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdGF0ZS5zdHlsZSgpLCBz
dGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkp
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmFkaXVzSGVpZ2h0ID0gcGFpci0+c2Vjb25k
KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJl
c29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVj
dGl2ZVpvb20oKSk7CisgICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBwYWlyLT5zZWNvbmQoKS0+
Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5
bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaW50IHdpZHRo
ID0gcmFkaXVzV2lkdGgudmFsdWUoKTsKICAgICAgICAgaW50IGhlaWdodCA9IHJhZGl1c0hlaWdo
dC52YWx1ZSgpOwogICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCkBAIC00Njks
NyArNDY5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmFkaXVzV2lkdGggPSByYWRpdXNIZWln
aHQ7IC8vIE51bGwgb3V0IHRoZSBvdGhlciB2YWx1ZS4KIAogICAgICAgICBMZW5ndGhTaXplIHNp
emUocmFkaXVzV2lkdGgsIHJhZGl1c0hlaWdodCk7Ci0gICAgICAgIHNldFZhbHVlKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIHNpemUpOworICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBz
aXplKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkK
ICAgICB7CkBAIC00OTEsMjMgKzQ5MSwyMyBAQCBzdHJ1Y3QgRmlsbExheWVyQWNjZXNzb3JUeXBl
czxTdHlsZUltYWdlKj4gewogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQsCi0gICAgICAgICAg
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLAotICAgICAgICAgIEVGaWxsTGF5ZXJUeXBlIGZpbGxM
YXllclR5cGUsCi0gICAgICAgICAgRmlsbExheWVyKiAoUmVuZGVyU3R5bGU6OiphY2Nlc3NMYXll
cnNGdW5jdGlvbikoKSwKLSAgICAgICAgICBjb25zdCBGaWxsTGF5ZXIqIChSZW5kZXJTdHlsZTo6
KmxheWVyc0Z1bmN0aW9uKSgpIGNvbnN0LAotICAgICAgICAgIGJvb2wgKEZpbGxMYXllcjo6KnRl
c3RGdW5jdGlvbikoKSBjb25zdCwKLSAgICAgICAgICB0eXBlbmFtZSBGaWxsTGF5ZXJBY2Nlc3Nv
clR5cGVzPFQ+OjpHZXR0ZXIgKEZpbGxMYXllcjo6KmdldEZ1bmN0aW9uKSgpIGNvbnN0LAotICAg
ICAgICAgIHZvaWQgKEZpbGxMYXllcjo6KnNldEZ1bmN0aW9uKSh0eXBlbmFtZSBGaWxsTGF5ZXJB
Y2Nlc3NvclR5cGVzPFQ+OjpTZXR0ZXIpLAotICAgICAgICAgIHZvaWQgKEZpbGxMYXllcjo6KmNs
ZWFyRnVuY3Rpb24pKCksCi0gICAgICAgICAgdHlwZW5hbWUgRmlsbExheWVyQWNjZXNzb3JUeXBl
czxUPjo6R2V0dGVyICgqaW5pdGlhbEZ1bmN0aW9uKShFRmlsbExheWVyVHlwZSksCi0gICAgICAg
ICAgdm9pZCAoQ1NTVG9TdHlsZU1hcDo6Km1hcEZpbGxGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwg
RmlsbExheWVyKiwgQ1NTVmFsdWUqKT4KKyAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQsCisg
ICAgRUZpbGxMYXllclR5cGUgZmlsbExheWVyVHlwZSwKKyAgICBGaWxsTGF5ZXIqIChSZW5kZXJT
dHlsZTo6KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpLAorICAgIGNvbnN0IEZpbGxMYXllciogKFJl
bmRlclN0eWxlOjoqbGF5ZXJzRnVuY3Rpb24pKCkgY29uc3QsCisgICAgYm9vbCAoRmlsbExheWVy
OjoqdGVzdEZ1bmN0aW9uKSgpIGNvbnN0LAorICAgIHR5cGVuYW1lIEZpbGxMYXllckFjY2Vzc29y
VHlwZXM8VD46OkdldHRlciAoRmlsbExheWVyOjoqZ2V0RnVuY3Rpb24pKCkgY29uc3QsCisgICAg
dm9pZCAoRmlsbExheWVyOjoqc2V0RnVuY3Rpb24pKHR5cGVuYW1lIEZpbGxMYXllckFjY2Vzc29y
VHlwZXM8VD46OlNldHRlciksCisgICAgdm9pZCAoRmlsbExheWVyOjoqY2xlYXJGdW5jdGlvbiko
KSwKKyAgICB0eXBlbmFtZSBGaWxsTGF5ZXJBY2Nlc3NvclR5cGVzPFQ+OjpHZXR0ZXIgKCppbml0
aWFsRnVuY3Rpb24pKEVGaWxsTGF5ZXJUeXBlKSwKKyAgICB2b2lkICgqbWFwRmlsbEZ1bmN0aW9u
KShTdHlsZVJlc29sdmVTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVl
Kik+CiBjbGFzcyBBcHBseVByb3BlcnR5RmlsbExheWVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
dm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEZpbGxMYXllciog
Y3VyckNoaWxkID0gKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5jdGlv
bikoKTsKKyAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3RhdGUuc3R5bGUoKS0+KmFj
Y2Vzc0xheWVyc0Z1bmN0aW9uKSgpOwogICAgICAgICBGaWxsTGF5ZXIqIHByZXZDaGlsZCA9IDA7
Ci0gICAgICAgIGNvbnN0IEZpbGxMYXllciogY3VyclBhcmVudCA9IChzdHlsZVJlc29sdmVyLT5w
YXJlbnRTdHlsZSgpLT4qbGF5ZXJzRnVuY3Rpb24pKCk7CisgICAgICAgIGNvbnN0IEZpbGxMYXll
ciogY3VyclBhcmVudCA9IChzdGF0ZS5wYXJlbnRTdHlsZSgpLT4qbGF5ZXJzRnVuY3Rpb24pKCk7
CiAgICAgICAgIHdoaWxlIChjdXJyUGFyZW50ICYmIChjdXJyUGFyZW50LT4qdGVzdEZ1bmN0aW9u
KSgpKSB7CiAgICAgICAgICAgICBpZiAoIWN1cnJDaGlsZCkgewogICAgICAgICAgICAgICAgIC8q
IE5lZWQgdG8gbWFrZSBhIG5ldyBsYXllci4qLwpAQCAtNTI3LDE3ICs1MjcsMTcgQEAgcHVibGlj
OgogICAgICAgICB9CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMg
dm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYg
c3RhdGUpCiAgICAgewotICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7CisgICAgICAgIEZpbGxMYXll
ciogY3VyckNoaWxkID0gKHN0YXRlLnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5jdGlvbikoKTsK
ICAgICAgICAgKGN1cnJDaGlsZC0+KnNldEZ1bmN0aW9uKSgoKmluaXRpYWxGdW5jdGlvbikoZmls
bExheWVyVHlwZSkpOwogICAgICAgICBmb3IgKGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgp
OyBjdXJyQ2hpbGQ7IGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpKQogICAgICAgICAgICAg
KGN1cnJDaGlsZC0+KmNsZWFyRnVuY3Rpb24pKCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAg
ICAgIEZpbGxMYXllciogY3VyckNoaWxkID0gKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPiphY2Nl
c3NMYXllcnNGdW5jdGlvbikoKTsKKyAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3Rh
dGUuc3R5bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOwogICAgICAgICBGaWxsTGF5ZXIq
IHByZXZDaGlsZCA9IDA7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKQogI2lmIEVO
QUJMRShDU1NfSU1BR0VfU0VUKQpAQCAtNTUyLDEyICs1NTIsMTIgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICBjdXJyQ2hpbGQgPSBuZXcgRmlsbExheWVyKGZpbGxMYXllclR5cGUpOwog
ICAgICAgICAgICAgICAgICAgICBwcmV2Q2hpbGQtPnNldE5leHQoY3VyckNoaWxkKTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCkt
PiptYXBGaWxsRnVuY3Rpb24pKHByb3BlcnR5SWQsIGN1cnJDaGlsZCwgdmFsdWVMaXN0LT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKKyAgICAgICAgICAgICAgICAoKm1hcEZpbGxGdW5jdGlv
bikoc3RhdGUsIHByb3BlcnR5SWQsIGN1cnJDaGlsZCwgdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKGkpKTsKICAgICAgICAgICAgICAgICBwcmV2Q2hpbGQgPSBjdXJyQ2hpbGQ7CiAg
ICAgICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGVN
YXAoKS0+Km1hcEZpbGxGdW5jdGlvbikocHJvcGVydHlJZCwgY3VyckNoaWxkLCB2YWx1ZSk7Cisg
ICAgICAgICAgICAoKm1hcEZpbGxGdW5jdGlvbikoc3RhdGUsIHByb3BlcnR5SWQsIGN1cnJDaGls
ZCwgdmFsdWUpOwogICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7CiAg
ICAgICAgIH0KICAgICAgICAgd2hpbGUgKGN1cnJDaGlsZCkgewpAQCAtNTgzLDcgKzU4Myw3IEBA
IHRlbXBsYXRlIDx0eXBlbmFtZSBULAogY2xhc3MgQXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGgg
ewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwg
VCB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7
CiAgICAgICAgIC8vIG5vdGU6IENTU1Byb3BlcnR5TGV0dGVyL1dvcmRTcGFjaW5nIHJpZ2h0IG5v
dyBzZXRzIHRvIHplcm8gaWYgaXQncyBub3QgYSBwcmltaXRpdmUgdmFsdWUgZm9yIHNvbWUgcmVh
c29uLi4uCiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKQEAgLTYwMiwx
MyArNjAyLDEzIEBAIHB1YmxpYzoKICAgICAgICAgfSBlbHNlIGlmICh0aGlja25lc3NFbmFibGVk
ICYmIGlkZW50ID09IENTU1ZhbHVlVGhpY2spIHsKICAgICAgICAgICAgIGxlbmd0aCA9IDU7CiAg
ICAgICAgIH0gZWxzZSBpZiAoaWRlbnQgPT0gQ1NTVmFsdWVJbnZhbGlkKSB7Ci0gICAgICAgICAg
ICBmbG9hdCB6b29tID0gKHN2Z1pvb21FbmFibGVkICYmIHN0eWxlUmVzb2x2ZXItPnVzZVNWR1pv
b21SdWxlcygpKSA/IDEuMGYgOiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29t
KCk7CisgICAgICAgICAgICBmbG9hdCB6b29tID0gKHN2Z1pvb21FbmFibGVkICYmIHN0YXRlLnVz
ZVNWR1pvb21SdWxlcygpKSA/IDEuMGYgOiBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7
CiAKICAgICAgICAgICAgIC8vIEFueSBvcmlnaW5hbCByZXN1bHQgdGhhdCB3YXMgPj0gMSBzaG91
bGQgbm90IGJlIGFsbG93ZWQgdG8gZmFsbCBiZWxvdyAxLgogICAgICAgICAgICAgLy8gVGhpcyBr
ZWVwcyBib3JkZXIgbGluZXMgZnJvbSB2YW5pc2hpbmcuCi0gICAgICAgICAgICBsZW5ndGggPSBw
cmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBz
dHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHpvb20pOworICAgICAgICAgICAgbGVu
Z3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4oc3RhdGUuc3R5bGUoKSwgc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tKTsKICAgICAgICAgICAgIGlmICh6b29tIDwgMS4w
ZiAmJiBsZW5ndGggPCAxLjApIHsKLSAgICAgICAgICAgICAgICBUIG9yaWdpbmFsTGVuZ3RoID0g
cHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
c3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCAxLjApOworICAgICAgICAgICAgICAg
IFQgb3JpZ2luYWxMZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdGF0
ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIDEuMCk7CiAgICAgICAgICAgICAg
ICAgaWYgKG9yaWdpbmFsTGVuZ3RoID49IDEuMCkKICAgICAgICAgICAgICAgICAgICAgbGVuZ3Ro
ID0gMS4wOwogICAgICAgICAgICAgfQpAQCAtNjE4LDcgKzYxOCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGxlbmd0aCA9IDA7CiAgICAgICAgIH0KIAotICAgICAgICBzZXRWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBsZW5ndGgpOworICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgp
LCBsZW5ndGgpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRs
ZXIoKQogICAgIHsKQEAgLTYzMCwyOCArNjMwLDI4IEBAIHB1YmxpYzoKIHRlbXBsYXRlIDx0eXBl
bmFtZSBULCBUIChGb250RGVzY3JpcHRpb246OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9p
ZCAoRm9udERlc2NyaXB0aW9uOjoqc2V0dGVyRnVuY3Rpb24pKFQpLCBUIGluaXRpYWxWYWx1ZT4K
IGNsYXNzIEFwcGx5UHJvcGVydHlGb250IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAg
KGZvbnREZXNjcmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24pKChzdHlsZVJlc29sdmVyLT5wYXJlbnRG
b250RGVzY3JpcHRpb24oKS4qZ2V0dGVyRnVuY3Rpb24pKCkpOwotICAgICAgICBzdHlsZVJlc29s
dmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOworICAg
ICAgICAoZm9udERlc2NyaXB0aW9uLipzZXR0ZXJGdW5jdGlvbikoKHN0YXRlLnBhcmVudEZvbnRE
ZXNjcmlwdGlvbigpLipnZXR0ZXJGdW5jdGlvbikoKSk7CisgICAgICAgIHN0YXRlLnNldEZvbnRE
ZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZv
bnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOworICAgICAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9u
KCk7CiAgICAgICAgIChmb250RGVzY3JpcHRpb24uKnNldHRlckZ1bmN0aW9uKShpbml0aWFsVmFs
dWUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlv
bik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7
Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVy
LT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlw
dGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAoZm9udERlc2NyaXB0aW9u
LipzZXR0ZXJGdW5jdGlvbikoKnByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIHN0YXRlLnNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KIAogICAgIHN0YXRpYyBQ
cm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigm
YXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBA
IC02NzYsNTAgKzY3Niw1MCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc2l6ZSAvIDEuMmY7
CiAgICAgfQogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQg
YXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRl
KQogICAgIHsKLSAgICAgICAgZmxvYXQgc2l6ZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxl
KCktPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKKyAgICAgICAgZmxvYXQgc2l6
ZSA9IHN0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKIAogICAg
ICAgICBpZiAoc2l6ZSA8IDApCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnRE
ZXNjcmlwdGlvbigpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoc3R5
bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkua2V5d29yZFNpemUo
KSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwg
c2l6ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVz
Y3JpcHRpb24pOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3Rh
dGUuZm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3Jk
U2l6ZShzdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS5rZXl3b3JkU2l6ZSgpKTsKKyAgICAg
ICAgU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoc3RhdGUsIGZvbnREZXNjcmlwdGlvbiwgc2l6
ZSk7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0
aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0
ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGZs
b2F0IHNpemUgPSBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdvcmQoc3R5bGVSZXNvbHZl
ci0+ZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERl
ZmF1bHRTaXplKCkpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0g
c3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGZsb2F0IHNpemUgPSBTdHlsZVJlc29s
dmVyOjpmb250U2l6ZUZvcktleXdvcmQoc3RhdGUuZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0s
IGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpOwogCiAgICAgICAgIGlmIChz
aXplIDwgMCkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKLSAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsK
LSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlv
bik7CisgICAgICAgIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKHN0YXRlLCBmb250RGVzY3Jp
cHRpb24sIHNpemUpOworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFs
dWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBp
ZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwor
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZSgwKTsKICAg
ICAgICAgZmxvYXQgcGFyZW50U2l6ZSA9IDA7CiAgICAgICAgIGJvb2wgcGFyZW50SXNBYnNvbHV0
ZVNpemUgPSBmYWxzZTsKICAgICAgICAgZmxvYXQgc2l6ZSA9IDA7CiAKLSAgICAgICAgaWYgKHN0
eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpIHsKLSAgICAgICAgICAgIHBhcmVudFNpemUgPSBz
dHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRT
aXplKCk7Ci0gICAgICAgICAgICBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9IHN0eWxlUmVzb2x2ZXIt
PnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmlzQWJzb2x1dGVTaXplKCk7CisgICAg
ICAgIGlmIChzdGF0ZS5wYXJlbnRTdHlsZSgpKSB7CisgICAgICAgICAgICBwYXJlbnRTaXplID0g
c3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOworICAgICAgICAg
ICAgcGFyZW50SXNBYnNvbHV0ZVNpemUgPSBzdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS5p
c0Fic29sdXRlU2l6ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGludCBpZGVudCA9IHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CkBAIC03MzMsNyArNzMzLDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVhMYXJnZToKICAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVYeExhcmdlOgogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFh4eExhcmdlOgotICAg
ICAgICAgICAgICAgIHNpemUgPSBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdvcmQoc3R5
bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgaWRlbnQsIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERl
ZmF1bHRTaXplKCkpOworICAgICAgICAgICAgICAgIHNpemUgPSBTdHlsZVJlc29sdmVyOjpmb250
U2l6ZUZvcktleXdvcmQoc3RhdGUuZG9jdW1lbnQoKSwgaWRlbnQsIGZvbnREZXNjcmlwdGlvbi51
c2VGaXhlZERlZmF1bHRTaXplKCkpOwogICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRLZXl3b3JkU2l6ZShpZGVudCAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlcjoKQEAgLTc1MSwxMyAr
NzUxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29s
dXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8ICEocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpIHx8
IHByaW1pdGl2ZVZhbHVlLT5pc0ZvbnRSZWxhdGl2ZUxlbmd0aCgpKSk7CiAgICAgICAgICAgICBp
ZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgc2l6ZSA9IHBy
aW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZVJlc29sdmVyLT5wYXJlbnRT
dHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIDEuMCwgdHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0
PihzdGF0ZS5wYXJlbnRTdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIDEuMCwgdHJ1
ZSk7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkp
CiAgICAgICAgICAgICAgICAgc2l6ZSA9IChwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgp
ICogcGFyZW50U2l6ZSkgLyAxMDAuMGY7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKLSAgICAgICAgICAgICAg
ICBzaXplID0gcHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdHls
ZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxl
KCkpLT5ldmFsdWF0ZShwYXJlbnRTaXplKTsKKyAgICAgICAgICAgICAgICBzaXplID0gcHJpbWl0
aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpLT5ldmFsdWF0ZShwYXJlbnRTaXplKTsKICAgICAg
ICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0
aCgpKQotICAgICAgICAgICAgICAgIHNpemUgPSB2YWx1ZUZvckxlbmd0aChwcmltaXRpdmVWYWx1
ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCksIDAsIHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50
KCktPnJlbmRlclZpZXcoKSk7CisgICAgICAgICAgICAgICAgc2l6ZSA9IHZhbHVlRm9yTGVuZ3Ro
KHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSwgMCwgc3RhdGUuZG9j
dW1lbnQoKS0+cmVuZGVyVmlldygpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KQEAgLTc2OSw4ICs3NjksOCBAQCBwdWJsaWM6CiAgICAgICAg
IC8vIENhcCBmb250IHNpemUgaGVyZSB0byBtYWtlIHN1cmUgdGhhdCBkb2Vzbid0IGhhcHBlbi4K
ICAgICAgICAgc2l6ZSA9IG1pbihtYXhpbXVtQWxsb3dlZEZvbnRTaXplLCBzaXplKTsKIAotICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOwot
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsKKyAgICAgICAgU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoc3RhdGUsIGZvbnREZXNjcmlw
dGlvbiwgc2l6ZSk7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC03NzksMTIgKzc3OSwxMiBAQCBw
dWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlGb250V2VpZ2h0IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgRm9udERlc2Ny
aXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigp
OworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERl
c2NyaXB0aW9uKCk7CiAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkp
IHsKICAgICAgICAgY2FzZSBDU1NWYWx1ZUludmFsaWQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTc5OCw3ICs3OTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KCpwcmltaXRpdmVWYWx1ZSk7
CiAgICAgICAgIH0KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVz
Y3JpcHRpb24pOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRs
ZXIoKQogICAgIHsKQEAgLTgwOSwzMCArODA5LDMwIEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQ
cm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBh
cHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+cGFyZW50Rm9udERl
c2NyaXB0aW9uKCk7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBz
dHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBzdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRp
b24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZv
bnREZXNjcmlwdGlvbigpOwogCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21tb25MaWdh
dHVyZXNTdGF0ZShwYXJlbnRGb250RGVzY3JpcHRpb24uY29tbW9uTGlnYXR1cmVzU3RhdGUoKSk7
CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUo
cGFyZW50Rm9udERlc2NyaXB0aW9uLmRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSgpKTsKICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldEhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZShwYXJlbnRG
b250RGVzY3JpcHRpb24uaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKCkpOwogCi0gICAgICAgIHN0
eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAg
ICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEZv
bnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3Jp
cHRpb24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRl
LmZvbnREZXNjcmlwdGlvbigpOwogCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21tb25M
aWdhdHVyZXNTdGF0ZShGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKTsKICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldERpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZShGb250
RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKTsKICAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldEhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZShGb250RGVzY3JpcHRpb246Ok5vcm1hbExp
Z2F0dXJlc1N0YXRlKTsKIAotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRp
b24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUp
CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVT
dGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEZvbnREZXNjcmlw
dGlvbjo6TGlnYXR1cmVzU3RhdGUgY29tbW9uTGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRp
b246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOwogICAgICAgICBGb250RGVzY3JpcHRpb246OkxpZ2F0
dXJlc1N0YXRlIGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6
Tm9ybWFsTGlnYXR1cmVzU3RhdGU7CkBAIC04NzgsMTEgKzg3OCwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICNlbmRpZgogCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24g
PSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0Q29tbW9uTGlnYXR1cmVzU3RhdGUoY29tbW9uTGlnYXR1cmVzU3Rh
dGUpOwogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0
YXRlKGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRIaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUoaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKTsK
LSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlv
bik7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwog
ICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC04
OTgsMTMgKzg5OCwxMyBAQCB0ZW1wbGF0ZSA8Qm9yZGVySW1hZ2VUeXBlIGJvcmRlckltYWdlVHlw
ZSwKICAgICAgICAgICB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShjb25zdCBO
aW5lUGllY2VJbWFnZSYpPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgIHsKICAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2U7CiAgICAgICAgIGlm
IChib3JkZXJJbWFnZVR5cGUgPT0gQm9yZGVyTWFzaykKICAgICAgICAgICAgIGltYWdlLnNldE1h
c2tEZWZhdWx0cygpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5l
UGllY2VJbWFnZShwcm9wZXJ0eSwgdmFsdWUsIGltYWdlKTsKLSAgICAgICAgKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoaW1hZ2UpOworICAgICAgICBDU1NUb1N0eWxl
TWFwOjptYXBOaW5lUGllY2VJbWFnZShzdGF0ZSwgcHJvcGVydHksIHZhbHVlLCBpbWFnZSk7Cisg
ICAgICAgIChzdGF0ZS5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKGltYWdlKTsKICAgICB9CiAK
ICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtOTIxLDI5ICs5
MjEsMjkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgaW5saW5lIGNvbnN0IE5pbmVQaWVjZUltYWdl
JiBnZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIHR5cGUgPT0gQm9yZGVySW1h
Z2UgPyBzdHlsZS0+Ym9yZGVySW1hZ2UoKSA6IHN0eWxlLT5tYXNrQm94SW1hZ2UoKTsgfQogICAg
IHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IE5p
bmVQaWVjZUltYWdlJiB2YWx1ZSkgeyByZXR1cm4gdHlwZSA9PSBCb3JkZXJJbWFnZSA/IHN0eWxl
LT5zZXRCb3JkZXJJbWFnZSh2YWx1ZSkgOiBzdHlsZS0+c2V0TWFza0JveEltYWdlKHZhbHVlKTsg
fQogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJ
bmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAg
IHsKLSAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSkpOworICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdGF0ZS5z
dHlsZSgpKSk7CiAgICAgICAgIHN3aXRjaCAobW9kaWZpZXIpIHsKICAgICAgICAgY2FzZSBPdXRz
ZXQ6Ci0gICAgICAgICAgICBpbWFnZS5jb3B5T3V0c2V0RnJvbShnZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbWFnZS5jb3B5T3V0c2V0RnJvbShn
ZXRWYWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBSZXBlYXQ6Ci0gICAgICAgICAgICBpbWFnZS5jb3B5UmVwZWF0RnJvbShnZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbWFnZS5jb3B5
UmVwZWF0RnJvbShnZXRWYWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBTbGljZToKLSAgICAgICAgICAgIGltYWdlLmNvcHlJbWFnZVNs
aWNlc0Zyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOworICAgICAg
ICAgICAgaW1hZ2UuY29weUltYWdlU2xpY2VzRnJvbShnZXRWYWx1ZShzdGF0ZS5wYXJlbnRTdHls
ZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXaWR0aDoKLSAgICAgICAg
ICAgIGltYWdlLmNvcHlCb3JkZXJTbGljZXNGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnBh
cmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGltYWdlLmNvcHlCb3JkZXJTbGljZXNGcm9tKGdl
dFZhbHVlKHN0YXRlLnBhcmVudFN0eWxlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGltYWdlKTsKKyAg
ICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgaW1hZ2UpOwogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgTmluZVBpZWNl
SW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSkpOworICAgICAgICBO
aW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdGF0ZS5zdHlsZSgpKSk7CiAgICAgICAgIHN3
aXRjaCAobW9kaWZpZXIpIHsKICAgICAgICAgY2FzZSBPdXRzZXQ6CiAgICAgICAgICAgICBpbWFn
ZS5zZXRPdXRzZXQoTGVuZ3RoQm94KDApKTsKQEAgLTk2MiwyNyArOTYyLDI3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyh0eXBlID09IEJvcmRlckltYWdlID8g
TGVuZ3RoQm94KExlbmd0aCgxLCBSZWxhdGl2ZSksIExlbmd0aCgxLCBSZWxhdGl2ZSksIExlbmd0
aCgxLCBSZWxhdGl2ZSksIExlbmd0aCgxLCBSZWxhdGl2ZSkpIDogTGVuZ3RoQm94KCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKSwgaW1hZ2UpOworICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBpbWFn
ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdl
dFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpKTsKKyAgICAgICAgTmluZVBpZWNlSW1hZ2Ug
aW1hZ2UoZ2V0VmFsdWUoc3RhdGUuc3R5bGUoKSkpOwogICAgICAgICBzd2l0Y2ggKG1vZGlmaWVy
KSB7CiAgICAgICAgIGNhc2UgT3V0c2V0OgotICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KHN0
eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOwor
ICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUlt
YWdlUXVhZChzdGF0ZSwgdmFsdWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IFJlcGVhdDoKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQ
aWVjZUltYWdlUmVwZWF0KHZhbHVlLCBpbWFnZSk7CisgICAgICAgICAgICBDU1NUb1N0eWxlTWFw
OjptYXBOaW5lUGllY2VJbWFnZVJlcGVhdChzdGF0ZSwgdmFsdWUsIGltYWdlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNsaWNlOgotICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VTbGljZSh2YWx1ZSwgaW1hZ2UpOworICAg
ICAgICAgICAgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VTbGljZShzdGF0ZSwgdmFs
dWUsIGltYWdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdpZHRoOgotICAg
ICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCkt
Pm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOworICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9y
ZGVyU2xpY2VzKENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlUXVhZChzdGF0ZSwgdmFs
dWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIGltYWdlKTsKKyAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5
bGUoKSwgaW1hZ2UpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRl
SGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZh
cHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBAIC05OTEsNyArOTkxLDcgQEAgcHVi
bGljOgogdGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQsIFN0eWxlSW1hZ2UqIChSZW5kZXJTdHls
ZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1
bmN0aW9uKShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+KSwgU3R5bGVJbWFnZSogKCppbml0aWFsRnVu
Y3Rpb24pKCk+CiBjbGFzcyBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2UgewogcHVibGlj
OgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2UoaWQsIHZhbHVl
KSk7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdGF0ZS5zdHlsZSgpLT4qc2V0
dGVyRnVuY3Rpb24pKFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2Uoc3RhdGUsIGlkLCB2YWx1ZSkp
OyB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CiAg
ICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNl
PFN0eWxlSW1hZ2UqLCBnZXR0ZXJGdW5jdGlvbiwgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiwgc2V0
dGVyRnVuY3Rpb24sIFN0eWxlSW1hZ2UqLCBpbml0aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5kbGVy
KCk7CkBAIC0xMDAzLDExICsxMDAzLDExIEBAIGVudW0gQ291bnRlckJlaGF2aW9yIHtJbmNyZW1l
bnQgPSAwLCBSZXNldH07CiB0ZW1wbGF0ZSA8Q291bnRlckJlaGF2aW9yIGNvdW50ZXJCZWhhdmlv
cj4KIGNsYXNzIEFwcGx5UHJvcGVydHlDb3VudGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9p
ZCBlbXB0eUZ1bmN0aW9uKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqKSB7IH0KLSAgICBz
dGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGVtcHR5RnVuY3Rpb24oQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVy
aXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewot
ICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwotICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFw
JiBwYXJlbnRNYXAgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5hY2Nlc3NDb3VudGVy
RGlyZWN0aXZlcygpOworICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdGF0ZS5z
dHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOworICAgICAgICBDb3VudGVyRGlyZWN0
aXZlTWFwJiBwYXJlbnRNYXAgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGly
ZWN0aXZlcygpOwogCiAgICAgICAgIHR5cGVkZWYgQ291bnRlckRpcmVjdGl2ZU1hcDo6aXRlcmF0
b3IgSXRlcmF0b3I7CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IHBhcmVudE1hcC5lbmQoKTsKQEAg
LTEwMjAsMTQgKzEwMjAsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAg
ICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19j
YXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKIAotICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFw
JiBtYXAgPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygp
OworICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdGF0ZS5zdHlsZSgpLT5hY2Nl
c3NDb3VudGVyRGlyZWN0aXZlcygpOwogICAgICAgICB0eXBlZGVmIENvdW50ZXJEaXJlY3RpdmVN
YXA6Oml0ZXJhdG9yIEl0ZXJhdG9yOwogCiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IG1hcC5lbmQo
KTsKQEAgLTEwNjMsNDIgKzEwNjMsNDIgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5
Q3Vyc29yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0
ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcihzdHls
ZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5jdXJzb3IoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldEN1cnNvckxpc3Qoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+
Y3Vyc29ycygpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q3Vyc29yKHN0YXRlLnBhcmVu
dFN0eWxlKCktPmN1cnNvcigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q3Vyc29yTGlz
dChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jdXJzb3JzKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldEN1cnNvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEN1cnNvcigpKTsKKyAgICAgICAg
c3RhdGUuc3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldEN1cnNvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEN1cnNvcigpKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7
CisgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyQ3Vyc29yTGlzdCgpOwogICAgICAgICBpZiAo
dmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKICAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9
IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKICAgICAgICAgICAgIGludCBsZW4g
PSBsaXN0LT5sZW5ndGgoKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dEN1cnNvcihDVVJTT1JfQVVUTyk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDdXJz
b3IoQ1VSU09SX0FVVE8pOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkr
KykgewogICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gbGlzdC0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjayhpKTsKICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNDdXJzb3JJbWFnZVZh
bHVlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSogaW1hZ2Ug
PSBzdGF0aWNfY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlKj4oaXRlbSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChpbWFnZS0+dXBkYXRlSWZTVkdDdXJzb3JJc1VzZWQoc3R5bGVSZXNvbHZlci0+
ZWxlbWVudCgpKSkgLy8gRWxlbWVudHMgd2l0aCBTVkcgY3Vyc29ycyBhcmUgbm90IGFsbG93ZWQg
dG8gc2hhcmUgc3R5bGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRVbmlxdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+YWRkQ3Vyc29yKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlD
dXJzb3IsIGltYWdlKSwgaW1hZ2UtPmhvdFNwb3QoKSk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChpbWFnZS0+dXBkYXRlSWZTVkdDdXJzb3JJc1VzZWQoc3RhdGUuZWxlbWVudCgpKSkgLy8gRWxl
bWVudHMgd2l0aCBTVkcgY3Vyc29ycyBhcmUgbm90IGFsbG93ZWQgdG8gc2hhcmUgc3R5bGUuCisg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRVbmlxdWUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+YWRkQ3Vyc29yKFN0eWxlUmVzb2x2ZXI6OnN0
eWxlSW1hZ2Uoc3RhdGUsIENTU1Byb3BlcnR5Q3Vyc29yLCBpbWFnZSksIGltYWdlLT5ob3RTcG90
KCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNJZGVudCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKCpwcmltaXRpdmVWYWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDdXJzb3IoKnByaW1p
dGl2ZVZhbHVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0g
ZWxzZSBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewogICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzSWRlbnQoKSAm
JiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5jdXJzb3IoKSAhPSBFQ3Vyc29yKCpwcmltaXRpdmVW
YWx1ZSkpCi0gICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29y
KCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzSWRl
bnQoKSAmJiBzdGF0ZS5zdHlsZSgpLT5jdXJzb3IoKSAhPSBFQ3Vyc29yKCpwcmltaXRpdmVWYWx1
ZSkpCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q3Vyc29yKCpwcmltaXRpdmVW
YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTExMDcsNyArMTEwNyw3IEBAIHB1YmxpYzoK
IAogY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHRBbGlnbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTExMTUsMTMgKzExMTUsMTMgQEAgcHVibGljOgogICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlKTsKIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgIT0gQ1NTVmFs
dWVXZWJraXRNYXRjaFBhcmVudCkKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldFRleHRBbGlnbigqcHJpbWl0aXZlVmFsdWUpOwotICAgICAgICBlbHNlIGlmIChzdHlsZVJl
c29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBUQVNUQVJUKQotICAgICAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0eWxlUmVzb2x2ZXItPnBh
cmVudFN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IExFRlQgOiBSSUdIVCk7Ci0g
ICAgICAgIGVsc2UgaWYgKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigp
ID09IFRBRU5EKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEFs
aWduKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA/IFJJR0hUIDogTEVGVCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0QWxp
Z24oKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAoc3RhdGUucGFyZW50U3R5bGUo
KS0+dGV4dEFsaWduKCkgPT0gVEFTVEFSVCkKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dFRleHRBbGlnbihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
PyBMRUZUIDogUklHSFQpOworICAgICAgICBlbHNlIGlmIChzdGF0ZS5wYXJlbnRTdHlsZSgpLT50
ZXh0QWxpZ24oKSA9PSBUQUVORCkKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRB
bGlnbihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBSSUdI
VCA6IExFRlQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRUZXh0QWxpZ24oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+dGV4dEFsaWdu
KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0YXRlLnBhcmVu
dFN0eWxlKCktPnRleHRBbGlnbigpKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxl
ciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xMTMyLDcgKzExMzIsNyBAQCBwdWJsaWM6CiAK
IGNsYXNzIEFwcGx5UHJvcGVydHlUZXh0RGVjb3JhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7
CiAgICAgICAgIEVUZXh0RGVjb3JhdGlvbiB0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RGVj
b3JhdGlvbigpOwogICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkodmFsdWUpOyBp
Lmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKQEAgLTExNDAsNyArMTE0MCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIEFTU0VSVChpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwogICAgICAgICAg
ICAgdCB8PSAqc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKICAgICAgICAg
fQotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RGVjb3JhdGlvbih0KTsK
KyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dERlY29yYXRpb24odCk7CiAgICAgfQogICAg
IHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtMTE1MSw3
ICsxMTUxLDcgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5TGluZUhlaWdodCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExNjIsMTUgKzExNjIsMTUgQEAgcHVibGljOgog
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3JtYWwp
CiAgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0
KCk7CiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7Ci0gICAg
ICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVj
dGl2ZVpvb20oKTsKLSAgICAgICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT50ZXh0
U2l6ZUFkanVzdCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHN0eWxl
UmVzb2x2ZXItPmRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgICAgICBkb3VibGUgbXVsdGlw
bGllciA9IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgICAgIGlmIChz
dGF0ZS5zdHlsZSgpLT50ZXh0U2l6ZUFkanVzdCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IHN0YXRlLmRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgICAgICAgICAg
ICAgIG11bHRpcGxpZXIgKj0gZnJhbWUtPnRleHRab29tRmFjdG9yKCk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8
TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVu
dFN0eWxlKCksIG11bHRpcGxpZXIpOworICAgICAgICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2
ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSgpLCBtdWx0aXBsaWVyKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+aXNQZXJjZW50YWdlKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBwZXJjZW50YWdl
IHNob3VsZCBub3QgYmUgcmVzdHJpY3RlZCB0byBhbiBpbnRlZ2VyIGhlcmUuCi0gICAgICAgICAg
ICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250U2l6ZSgp
ICogcHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpIC8gMTAwLCBGaXhlZCk7CisgICAgICAg
ICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKChzdGF0ZS5zdHlsZSgpLT5mb250U2l6ZSgpICogcHJp
bWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpIC8gMTAwLCBGaXhlZCk7CiAgICAgICAgIH0gZWxz
ZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1F
OiBudW1iZXIgYW5kIHBlcmNlbnRhZ2UgdmFsdWVzIHNob3VsZCBwcm9kdWNlIHRoZSBzYW1lIHR5
cGUgb2YgTGVuZ3RoIChpZS4gRml4ZWQgb3IgUGVyY2VudCkuCiAgICAgICAgICAgICBsaW5lSGVp
Z2h0ID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpICogMTAwLjAsIFBl
cmNlbnQpOwpAQCAtMTE3OCw3ICsxMTc4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgbGluZUhl
aWdodCA9IHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRMaW5lSGVpZ2h0KGxpbmVIZWlnaHQpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRMaW5lSGVpZ2h0KGxpbmVIZWlnaHQpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5k
bGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTEyNjUsMTEgKzEyNjUsMTEgQEAgcHJpdmF0
ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogcHVibGljOgotICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqKSB7IH0KLSAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKikgeyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZv
aWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmKSB7
IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVTdGF0ZSYpIHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewot
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5yZXNldFBhZ2VTaXplVHlwZSgpOworICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5yZXNldFBhZ2VTaXplVHlwZSgpOwogICAgICAgICBMZW5ndGgg
d2lkdGg7CiAgICAgICAgIExlbmd0aCBoZWlnaHQ7CiAgICAgICAgIFBhZ2VTaXplVHlwZSBwYWdl
U2l6ZVR5cGUgPSBQQUdFX1NJWkVfQVVUTzsKQEAgLTEyODUsOCArMTI4NSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAvLyA8bGVuZ3RoPnsyfQogICAgICAgICAgICAgICAgIGlmICghc2Vj
b25kLT5pc0xlbmd0aCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgd2lkdGggPSBmaXJzdC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSk7Ci0gICAgICAgICAg
ICAgICAgaGVpZ2h0ID0gc2Vjb25kLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAg
ICAgICAgICB3aWR0aCA9IGZpcnN0LT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUo
KSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBoZWlnaHQgPSBz
ZWNvbmQtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyA8
cGFnZS1zaXplPiA8b3JpZW50YXRpb24+CiAgICAgICAgICAgICAgICAgLy8gVGhlIHZhbHVlIG9y
ZGVyIGlzIGd1YXJhbnRlZWQuIFNlZSBDU1NQYXJzZXI6OnBhcnNlU2l6ZVBhcmFtZXRlci4KQEAg
LTEzMDQsNyArMTMwNCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+aXNMZW5ndGgoKSkgewogICAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+CiAgICAgICAgICAg
ICAgICAgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX1JFU09MVkVEOwotICAgICAgICAgICAgICAg
IHdpZHRoID0gaGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkp
OworICAgICAgICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1
dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkp
OwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSAwOgpAQCAtMTMzMCwy
OSArMTMzMCwyOSBAQCBwdWJsaWM6CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0UGFnZVNp
emVUeXBlKHBhZ2VTaXplVHlwZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dFBhZ2VTaXplKExlbmd0aFNpemUod2lkdGgsIGhlaWdodCkpOworICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRQYWdlU2l6ZVR5cGUocGFnZVNpemVUeXBlKTsKKyAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0UGFnZVNpemUoTGVuZ3RoU2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CiAgICAgfQogICAgIHN0
YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFu
ZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUp
OyB9CiB9OwogCiBjbGFzcyBBcHBseVByb3BlcnR5VGV4dEVtcGhhc2lzU3R5bGUgewogcHVibGlj
OgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChzdHlsZVJlc29s
dmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNGaWxsKCkpOwotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKHN0eWxlUmVzb2x2ZXItPnBhcmVu
dFN0eWxlKCktPnRleHRFbXBoYXNpc01hcmsoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5
bGUoKS0+dGV4dEVtcGhhc2lzQ3VzdG9tTWFyaygpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0VGV4dEVtcGhhc2lzRmlsbChzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNGaWxs
KCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKHN0YXRlLnBh
cmVudFN0eWxlKCktPnRleHRFbXBoYXNpc01hcmsoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dEVtcGhh
c2lzQ3VzdG9tTWFyaygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0
YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRl
eHRFbXBoYXNpc0ZpbGwoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNGaWxsKCkpOwot
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFJlbmRl
clN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzTWFyaygpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlh
bFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRl
eHRFbXBoYXNpc0ZpbGwoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNGaWxsKCkpOwor
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFJlbmRlclN0eWxlOjpp
bml0aWFsVGV4dEVtcGhhc2lzTWFyaygpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4
dEVtcGhhc2lzQ3VzdG9tTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc0N1c3Rv
bU1hcmsoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYg
c3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1
ZUxpc3QoKSkgewogICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8
Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwpAQCAtMTM2NiwxMSArMTM2NiwxMSBAQCBwdWJsaWM6CiAK
ICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUgPSBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZUZpbGxlZCB8fCB2YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZU9wZW4pCi0gICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRl
eHRFbXBoYXNpc0ZpbGwoKnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0VGV4dEVtcGhhc2lzRmlsbCgqdmFsdWUpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lz
TWFyaygqdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0
RW1waGFzaXNNYXJrKCp2YWx1ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKTsKKyAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsobnVsbEF0
b20pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTEzNzksMjAgKzEzNzks
MjAgQEAgcHVibGljOgogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAogICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoVGV4dEVtcGhhc2lzRmlsbEZpbGxlZCk7Ci0g
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFRl
eHRFbXBoYXNpc01hcmtDdXN0b20pOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFs
dWUoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFRl
eHRFbXBoYXNpc0ZpbGxGaWxsZWQpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4
dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJrQ3VzdG9tKTsKKyAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsocHJpbWl0aXZlVmFsdWUtPmdldFN0
cmluZ1ZhbHVlKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhudWxsQXRv
bSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsobnVs
bEF0b20pOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NW
YWx1ZUZpbGxlZCB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU9wZW4p
IHsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0Zp
bGwoKnByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFya0F1dG8pOworICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbCgqcHJpbWl0aXZlVmFsdWUpOworICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNN
YXJrQXV0byk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQpOwotICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyaygqcHJp
bWl0aXZlVmFsdWUpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lz
RmlsbChUZXh0RW1waGFzaXNGaWxsRmlsbGVkKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldFRleHRFbXBoYXNpc01hcmsoKnByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtMTQwMCwxNCArMTQwMCwxNCBAQCBwdWJsaWM6CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwKLSAgICAgICAgICBUIChBbmltYXRpb246OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwK
LSAgICAgICAgICB2b2lkIChBbmltYXRpb246OipzZXR0ZXJGdW5jdGlvbikoVCksCi0gICAgICAg
ICAgYm9vbCAoQW5pbWF0aW9uOjoqdGVzdEZ1bmN0aW9uKSgpIGNvbnN0LAotICAgICAgICAgIHZv
aWQgKEFuaW1hdGlvbjo6KmNsZWFyRnVuY3Rpb24pKCksCi0gICAgICAgICAgVCAoKmluaXRpYWxG
dW5jdGlvbikoKSwKLSAgICAgICAgICB2b2lkIChDU1NUb1N0eWxlTWFwOjoqbWFwRnVuY3Rpb24p
KEFuaW1hdGlvbiosIENTU1ZhbHVlKiksCi0gICAgICAgICAgQW5pbWF0aW9uTGlzdCogKFJlbmRl
clN0eWxlOjoqYW5pbWF0aW9uR2V0dGVyRnVuY3Rpb24pKCksCi0gICAgICAgICAgY29uc3QgQW5p
bWF0aW9uTGlzdCogKFJlbmRlclN0eWxlOjoqaW1tdXRhYmxlQW5pbWF0aW9uR2V0dGVyRnVuY3Rp
b24pKCkgY29uc3Q+CisgICAgVCAoQW5pbWF0aW9uOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3Qs
CisgICAgdm9pZCAoQW5pbWF0aW9uOjoqc2V0dGVyRnVuY3Rpb24pKFQpLAorICAgIGJvb2wgKEFu
aW1hdGlvbjo6KnRlc3RGdW5jdGlvbikoKSBjb25zdCwKKyAgICB2b2lkIChBbmltYXRpb246Oipj
bGVhckZ1bmN0aW9uKSgpLAorICAgIFQgKCppbml0aWFsRnVuY3Rpb24pKCksCisgICAgdm9pZCAo
Km1hcEZ1bmN0aW9uKShBbmltYXRpb24qLCBDU1NWYWx1ZSopLAorICAgIEFuaW1hdGlvbkxpc3Qq
IChSZW5kZXJTdHlsZTo6KmFuaW1hdGlvbkdldHRlckZ1bmN0aW9uKSgpLAorICAgIGNvbnN0IEFu
aW1hdGlvbkxpc3QqIChSZW5kZXJTdHlsZTo6KmltbXV0YWJsZUFuaW1hdGlvbkdldHRlckZ1bmN0
aW9uKSgpIGNvbnN0PgogY2xhc3MgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbiB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoQW5pbWF0aW9uKiBhbmltYXRpb24sIFQgdmFsdWUpIHsg
KGFuaW1hdGlvbi0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KQEAgLTE0MTUsMTQgKzE0MTUs
MTQgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHRlc3QoY29uc3QgQW5pbWF0aW9uKiBhbmlt
YXRpb24pIHsgcmV0dXJuIChhbmltYXRpb24tPip0ZXN0RnVuY3Rpb24pKCk7IH0KICAgICBzdGF0
aWMgdm9pZCBjbGVhcihBbmltYXRpb24qIGFuaW1hdGlvbikgeyAoYW5pbWF0aW9uLT4qY2xlYXJG
dW5jdGlvbikoKTsgfQogICAgIHN0YXRpYyBUIGluaXRpYWwoKSB7IHJldHVybiAoKmluaXRpYWxG
dW5jdGlvbikoKTsgfQotICAgIHN0YXRpYyB2b2lkIG1hcChTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdHlsZVJl
c29sdmVyLT5zdHlsZU1hcCgpLT4qbWFwRnVuY3Rpb24pKGFuaW1hdGlvbiwgdmFsdWUpOyB9Cisg
ICAgc3RhdGljIHZvaWQgbWFwKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQW5pbWF0aW9uKiBh
bmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkgeyAoKm1hcEZ1bmN0aW9uKShhbmltYXRpb24sIHZh
bHVlKTsgfQogICAgIHN0YXRpYyBBbmltYXRpb25MaXN0KiBhY2Nlc3NBbmltYXRpb25zKFJlbmRl
clN0eWxlKiBzdHlsZSkgeyByZXR1cm4gKHN0eWxlLT4qYW5pbWF0aW9uR2V0dGVyRnVuY3Rpb24p
KCk7IH0KICAgICBzdGF0aWMgY29uc3QgQW5pbWF0aW9uTGlzdCogYW5pbWF0aW9ucyhSZW5kZXJT
dHlsZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+KmltbXV0YWJsZUFuaW1hdGlvbkdldHRlckZ1
bmN0aW9uKSgpOyB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkK
ICAgICB7Ci0gICAgICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCkpOwotICAgICAgICBjb25zdCBBbmltYXRpb25MaXN0KiBwYXJl
bnRMaXN0ID0gYW5pbWF0aW9ucyhzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKTsKKyAgICAg
ICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMoc3RhdGUuc3R5bGUoKSk7
CisgICAgICAgIGNvbnN0IEFuaW1hdGlvbkxpc3QqIHBhcmVudExpc3QgPSBhbmltYXRpb25zKHN0
YXRlLnBhcmVudFN0eWxlKCkpOwogICAgICAgICBzaXplX3QgaSA9IDAsIHBhcmVudFNpemUgPSBw
YXJlbnRMaXN0ID8gcGFyZW50TGlzdC0+c2l6ZSgpIDogMDsKICAgICAgICAgZm9yICggOyBpIDwg
cGFyZW50U2l6ZSAmJiB0ZXN0KHBhcmVudExpc3QtPmFuaW1hdGlvbihpKSk7ICsraSkgewogICAg
ICAgICAgICAgaWYgKGxpc3QtPnNpemUoKSA8PSBpKQpAQCAtMTQzNiw5ICsxNDM2LDkgQEAgcHVi
bGljOgogICAgICAgICAgICAgY2xlYXIobGlzdC0+YW5pbWF0aW9uKGkpKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0
aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3Rh
dGUpCiAgICAgewotICAgICAgICBBbmltYXRpb25MaXN0KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9u
cyhzdHlsZVJlc29sdmVyLT5zdHlsZSgpKTsKKyAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9
IGFjY2Vzc0FuaW1hdGlvbnMoc3RhdGUuc3R5bGUoKSk7CiAgICAgICAgIGlmIChsaXN0LT5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7CiAg
ICAgICAgIHNldFZhbHVlKGxpc3QtPmFuaW1hdGlvbigwKSwgaW5pdGlhbCgpKTsKQEAgLTE0NDgs
MjIgKzE0NDgsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgY2xlYXIobGlzdC0+YW5pbWF0aW9u
KGkpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0
ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9
IGFjY2Vzc0FuaW1hdGlvbnMoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSk7CisgICAgICAgIEFuaW1h
dGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0YXRlLnN0eWxlKCkpOwogICAgICAg
ICBzaXplX3QgY2hpbGRJbmRleCA9IDA7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3Qo
KSkgewogICAgICAgICAgICAgLyogV2FsayBlYWNoIHZhbHVlIGFuZCBwdXQgaXQgaW50byBhbiBh
bmltYXRpb24sIGNyZWF0aW5nIG5ldyBhbmltYXRpb25zIGFzIG5lZWRlZC4gKi8KICAgICAgICAg
ICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5h
ZHZhbmNlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGRJbmRleCA8PSBsaXN0LT5zaXpl
KCkpCiAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChBbmltYXRpb246OmNyZWF0ZSgp
KTsKLSAgICAgICAgICAgICAgICBtYXAoc3R5bGVSZXNvbHZlciwgbGlzdC0+YW5pbWF0aW9uKGNo
aWxkSW5kZXgpLCBpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1hcChzdGF0ZSwgbGlzdC0+
YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCBpLnZhbHVlKCkpOwogICAgICAgICAgICAgICAgICsrY2hp
bGRJbmRleDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlm
IChsaXN0LT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlv
bjo6Y3JlYXRlKCkpOwotICAgICAgICAgICAgbWFwKHN0eWxlUmVzb2x2ZXIsIGxpc3QtPmFuaW1h
dGlvbihjaGlsZEluZGV4KSwgdmFsdWUpOworICAgICAgICAgICAgbWFwKHN0YXRlLCBsaXN0LT5h
bmltYXRpb24oY2hpbGRJbmRleCksIHZhbHVlKTsKICAgICAgICAgICAgIGNoaWxkSW5kZXggPSAx
OwogICAgICAgICB9CiAgICAgICAgIGZvciAoIDsgY2hpbGRJbmRleCA8IGxpc3QtPnNpemUoKTsg
KytjaGlsZEluZGV4KSB7CkBAIC0xNDc3LDIyICsxNDc3LDIyIEBAIHB1YmxpYzoKIAogY2xhc3Mg
QXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBw
bHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAg
ICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6
b3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OnNldE91dGxp
bmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjppbml0aWFsT3V0bGlu
ZVN0eWxlSXNBdXRvPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZl
cik7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFQm9yZGVyU3R5bGUsICZSZW5k
ZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0
bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxl
Pjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAg
IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91
dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5l
U3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVT
dHlsZUlzQXV0bz46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAg
ICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpv
dXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGUs
IEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyU3R5bGU+OjphcHBseUlu
aGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAg
ICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHls
ZTo6b3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OnNldE91
dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjppbml0aWFsT3V0
bGluZVN0eWxlSXNBdXRvPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNv
bHZlcik7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFQm9yZGVyU3R5bGUsICZS
ZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0
T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0
eWxlPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAg
ICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6
Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRs
aW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxp
bmVTdHlsZUlzQXV0bz46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKKyAg
ICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxl
OjpvdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5
bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyU3R5bGU+OjphcHBs
eUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxPdXRsaW5l
SXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywg
JlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5k
ZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5VmFsdWUocHJvcGVydHlJ
RCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxF
Qm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZS
ZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVy
LCB2YWx1ZSk7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0PE91dGxpbmVJc0F1dG8sICZS
ZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5
bGU6OnNldE91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpp
bml0aWFsT3V0bGluZVN0eWxlSXNBdXRvPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSwg
dmFsdWUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5bGUsICZSZW5k
ZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0
bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxl
Pjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOwogICAgIH0KIAogICAgIHN0
YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFu
ZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUp
OyB9CkBAIC0xNTAwLDcgKzE1MDAsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlS
ZXNpemUgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0
YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTEyLDEzICsxNTEyLDEzIEBA
IHB1YmxpYzoKICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBj
YXNlIENTU1ZhbHVlQXV0bzoKLSAgICAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBz
dHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5zZXR0aW5ncygpKQorICAgICAgICAgICAgaWYgKFNl
dHRpbmdzKiBzZXR0aW5ncyA9IHN0YXRlLmRvY3VtZW50KCktPnNldHRpbmdzKCkpCiAgICAgICAg
ICAgICAgICAgciA9IHNldHRpbmdzLT50ZXh0QXJlYXNBcmVSZXNpemFibGUoKSA/IFJFU0laRV9C
T1RIIDogUkVTSVpFX05PTkU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIHIgPSAqcHJpbWl0aXZlVmFsdWU7CiAgICAgICAgIH0KLSAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0UmVzaXplKHIpOworICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRSZXNpemUocik7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVh
dGVIYW5kbGVyKCkKQEAgLTE1MzAsNyArMTUzMCw3IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQ
cm9wZXJ0eVZlcnRpY2FsQWxpZ24gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTM4
LDkgKzE1MzgsOSBAQCBwdWJsaWM6CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCiAgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFsaWduKCpwcmltaXRpdmVWYWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbigqcHJp
bWl0aXZlVmFsdWUpOwogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFZlcnRp
Y2FsQWxpZ25MZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVn
ZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbiB8
IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0
eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFZlcnRpY2FsQWxp
Z25MZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252
ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbiB8IFZpZXdw
b3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50
U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSk7CiAgICAgfQogCiAgICAg
c3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTE1NTIsMzIgKzE1NTIs
MzIgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5QXNwZWN0UmF0aW8gewogcHVibGlj
OgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAg
ICAgaWYgKCFzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5oYXNBc3BlY3RSYXRpbygpKQor
ICAgICAgICBpZiAoIXN0YXRlLnBhcmVudFN0eWxlKCktPmhhc0FzcGVjdFJhdGlvKCkpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0Fz
cGVjdFJhdGlvKHRydWUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3Bl
Y3RSYXRpb0Rlbm9taW5hdG9yKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmFzcGVjdFJh
dGlvRGVub21pbmF0b3IoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFz
cGVjdFJhdGlvTnVtZXJhdG9yKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmFzcGVjdFJh
dGlvTnVtZXJhdG9yKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRp
byh0cnVlKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRv
cihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb0Rlbm9taW5hdG9yKCkpOworICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihzdGF0ZS5wYXJlbnRTdHls
ZSgpLT5hc3BlY3RSYXRpb051bWVyYXRvcigpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBh
cHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKFJlbmRlclN0eWxlOjppbml0aWFsSGFzQXNwZWN0UmF0
aW8oKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvRGVu
b21pbmF0b3IoUmVuZGVyU3R5bGU6OmluaXRpYWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKCkpOwot
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihS
ZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlvTnVtZXJhdG9yKCkpOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyhSZW5kZXJTdHlsZTo6aW5pdGlhbEhhc0FzcGVj
dFJhdGlvKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5h
dG9yKFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9EZW5vbWluYXRvcigpKTsKKyAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3IoUmVuZGVyU3R5bGU6Omlu
aXRpYWxBc3BlY3RSYXRpb051bWVyYXRvcigpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAg
ICAgaWYgKCF2YWx1ZS0+aXNBc3BlY3RSYXRpb1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKGZhbHNlKTsKKyAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKGZhbHNlKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICBDU1NBc3BlY3RSYXRpb1ZhbHVlKiBhc3BlY3RSYXRp
b1ZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTQXNwZWN0UmF0aW9WYWx1ZSo+KHZhbHVlKTsKLSAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8odHJ1ZSk7Ci0gICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvRGVub21pbmF0b3IoYXNw
ZWN0UmF0aW9WYWx1ZS0+ZGVub21pbmF0b3JWYWx1ZSgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3IoYXNwZWN0UmF0aW9WYWx1ZS0+bnVt
ZXJhdG9yVmFsdWUoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlv
KHRydWUpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9y
KGFzcGVjdFJhdGlvVmFsdWUtPmRlbm9taW5hdG9yVmFsdWUoKSk7CisgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldEFzcGVjdFJhdGlvTnVtZXJhdG9yKGFzcGVjdFJhdGlvVmFsdWUtPm51bWVyYXRv
clZhbHVlKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFu
ZGxlcigpCkBAIC0xNTg4LDQ4ICsxNTg4LDQ4IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9w
ZXJ0eVpvb20gewogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCByZXNldEVmZmVjdGl2ZVpvb20o
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCByZXNldEVmZmVj
dGl2ZVpvb20oU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKICAgICAgICAgLy8gUmVz
ZXQgdGhlIHpvb20gaW4gZWZmZWN0LiBUaGlzIGFsbG93cyB0aGUgc2V0Wm9vbSBtZXRob2QgdG8g
YWNjdXJhdGVseSBjb21wdXRlIGEgbmV3IHpvb20gaW4gZWZmZWN0LgotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkgPyBz
dHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5lZmZlY3RpdmVab29tKCkgOiBSZW5kZXJTdHls
ZTo6aW5pdGlhbFpvb20oKSk7CisgICAgICAgIHN0YXRlLnNldEVmZmVjdGl2ZVpvb20oc3RhdGUu
cGFyZW50U3R5bGUoKSA/IHN0YXRlLnBhcmVudFN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSA6IFJl
bmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKICAgICB9CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMg
dm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHJlc2V0RWZmZWN0
aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9vbShz
dHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT56b29tKCkpOworICAgICAgICByZXNldEVmZmVj
dGl2ZVpvb20oc3RhdGUpOworICAgICAgICBzdGF0ZS5zZXRab29tKHN0YXRlLnBhcmVudFN0eWxl
KCktPnpvb20oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMg
dm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYg
c3RhdGUpCiAgICAgewotICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29t
KCkpOworICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3RhdGUpOworICAgICAgICBzdGF0ZS5z
ZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwogICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbHVlKTsKIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVOb3JtYWwpIHsKLSAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHls
ZVJlc29sdmVyKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oUmVuZGVyU3R5
bGU6OmluaXRpYWxab29tKCkpOworICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0YXRl
KTsKKyAgICAgICAgICAgIHN0YXRlLnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkp
OwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlUmVzZXQpIHsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEVmZmVjdGl2ZVpvb20o
UmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAgICAgICAgICBzdGF0ZS5z
ZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICAgICAgICAg
IHN0YXRlLnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwogICAgICAgICB9IGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRG9jdW1lbnQpIHsK
LSAgICAgICAgICAgIGZsb2F0IGRvY1pvb20gPSBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0
eWxlKCkgPyBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCktPnpvb20oKSA6IFJlbmRl
clN0eWxlOjppbml0aWFsWm9vbSgpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0RWZm
ZWN0aXZlWm9vbShkb2Nab29tKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20o
ZG9jWm9vbSk7CisgICAgICAgICAgICBmbG9hdCBkb2Nab29tID0gc3RhdGUucm9vdEVsZW1lbnRT
dHlsZSgpID8gc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLT56b29tKCkgOiBSZW5kZXJTdHlsZTo6
aW5pdGlhbFpvb20oKTsKKyAgICAgICAgICAgIHN0YXRlLnNldEVmZmVjdGl2ZVpvb20oZG9jWm9v
bSk7CisgICAgICAgICAgICBzdGF0ZS5zZXRab29tKGRvY1pvb20pOwogICAgICAgICB9IGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkgewotICAgICAgICAgICAgcmVzZXRF
ZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOworICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVa
b29tKHN0YXRlKTsKICAgICAgICAgICAgIGlmIChmbG9hdCBwZXJjZW50ID0gcHJpbWl0aXZlVmFs
dWUtPmdldEZsb2F0VmFsdWUoKSkKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRa
b29tKHBlcmNlbnQgLyAxMDAuMGYpOworICAgICAgICAgICAgICAgIHN0YXRlLnNldFpvb20ocGVy
Y2VudCAvIDEwMC4wZik7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVt
YmVyKCkpIHsKLSAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsK
KyAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdGF0ZSk7CiAgICAgICAgICAgICBpZiAo
ZmxvYXQgbnVtYmVyID0gcHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSkKLSAgICAgICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKG51bWJlcik7CisgICAgICAgICAgICAgICAg
c3RhdGUuc2V0Wm9vbShudW1iZXIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNjQxLDQyICsx
NjQxLDQyIEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eURpc3BsYXkgewogcHJpdmF0
ZToKLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZERpc3BsYXlWYWx1ZShTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBFRGlzcGxheSBkaXNwbGF5UHJvcGVydHlWYWx1ZSkKKyAgICBz
dGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZERpc3BsYXlWYWx1ZShTdHlsZVJlc29sdmVTdGF0ZSYg
c3RhdGUsIEVEaXNwbGF5IGRpc3BsYXlQcm9wZXJ0eVZhbHVlKQogICAgIHsKICNpZiBFTkFCTEUo
U1ZHKQotICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpICYmIHN0eWxlUmVzb2x2
ZXItPmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkgJiYgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCisgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCkgJiYg
c3RhdGUuZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0ZS5zdHlsZSgpLT5zdHlsZVR5
cGUoKSA9PSBOT1BTRVVETykKICAgICAgICAgICAgIHJldHVybiAoZGlzcGxheVByb3BlcnR5VmFs
dWUgPT0gSU5MSU5FIHx8IGRpc3BsYXlQcm9wZXJ0eVZhbHVlID09IEJMT0NLIHx8IGRpc3BsYXlQ
cm9wZXJ0eVZhbHVlID09IE5PTkUpOwogI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKHN0eWxl
UmVzb2x2ZXIpOworICAgICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgICAgICBVTlVTRURf
UEFSQU0oZGlzcGxheVByb3BlcnR5VmFsdWUpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0
ZSkKICAgICB7Ci0gICAgICAgIEVEaXNwbGF5IGRpc3BsYXkgPSBzdHlsZVJlc29sdmVyLT5wYXJl
bnRTdHlsZSgpLT5kaXNwbGF5KCk7Ci0gICAgICAgIGlmICghaXNWYWxpZERpc3BsYXlWYWx1ZShz
dHlsZVJlc29sdmVyLCBkaXNwbGF5KSkKKyAgICAgICAgRURpc3BsYXkgZGlzcGxheSA9IHN0YXRl
LnBhcmVudFN0eWxlKCktPmRpc3BsYXkoKTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkRGlzcGxheVZh
bHVlKHN0YXRlLCBkaXNwbGF5KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0RGlzcGxheShkaXNwbGF5KTsKKyAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0RGlzcGxheShkaXNwbGF5KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldERpc3BsYXkoUmVuZGVyU3R5bGU6OmluaXRpYWxEaXNwbGF5KCkpOworICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXREaXNwbGF5KFJlbmRlclN0eWxlOjppbml0aWFsRGlzcGxheSgpKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEVEaXNwbGF5IGRpc3BsYXkgPSAq
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKLSAgICAgICAgaWYgKCFp
c1ZhbGlkRGlzcGxheVZhbHVlKHN0eWxlUmVzb2x2ZXIsIGRpc3BsYXkpKQorICAgICAgICBpZiAo
IWlzVmFsaWREaXNwbGF5VmFsdWUoc3RhdGUsIGRpc3BsYXkpKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldERpc3BsYXkoZGlzcGxheSk7
CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldERpc3BsYXkoZGlzcGxheSk7CiAgICAgfQogCiAg
ICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTE2ODksMjEgKzE2
ODksMjEgQEAgdGVtcGxhdGUgPENsaXBQYXRoT3BlcmF0aW9uKiAoUmVuZGVyU3R5bGU6OipnZXR0
ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGUKIGNsYXNzIEFwcGx5UHJvcGVydHlDbGlw
UGF0aCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0
eWxlLCBQYXNzUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0
ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0
ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKSB7CiAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpCi0g
ICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgMCk7CisgICAg
ICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgMCk7CiAgICAgICAgICAgICBlbHNl
IGlmIChwcmltaXRpdmVWYWx1ZS0+aXNTaGFwZSgpKSB7Ci0gICAgICAgICAgICAgICAgc2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgU2hhcGVDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRl
KGJhc2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJlc29sdmVyLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U2hh
cGVWYWx1ZSgpKSkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIFNo
YXBlQ2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3RhdGUsIHBy
aW1pdGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpKSk7CiAgICAgICAgICAgICB9CiAjaWYgRU5B
QkxFKFNWRykKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVU
eXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKICAgICAgICAgICAgICAgICBT
dHJpbmcgY3NzVVJMVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKLSAg
ICAgICAgICAgICAgICBLVVJMIHVybCA9IHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCktPmNvbXBs
ZXRlVVJMKGNzc1VSTFZhbHVlKTsKKyAgICAgICAgICAgICAgICBLVVJMIHVybCA9IHN0YXRlLmRv
Y3VtZW50KCktPmNvbXBsZXRlVVJMKGNzc1VSTFZhbHVlKTsKICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogSXQgZG9lc24ndCB3b3JrIHdpdGggZm9yd2FyZCBvciBleHRlcm5hbCBTVkcgcmVmZXJl
bmNlcyAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDQwNSkK
LSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBSZWZlcmVu
Y2VDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGNzc1VSTFZhbHVlLCB1cmwuZnJhZ21lbnRJZGVu
dGlmaWVyKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBSZWZl
cmVuY2VDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGNzc1VSTFZhbHVlLCB1cmwuZnJhZ21lbnRJ
ZGVudGlmaWVyKCkpKTsKICAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICB9CkBAIC0xNzIw
LDE4ICsxNzIwLDE4IEBAIHRlbXBsYXRlIDxFeGNsdXNpb25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5
bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuCiBjbGFzcyBBcHBseVByb3Bl
cnR5RXhjbHVzaW9uU2hhcGUgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJl
bmRlclN0eWxlKiBzdHlsZSwgUGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiB2YWx1ZSkg
eyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAg
IGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CiAgICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHZhbHVlKTsKICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBD
U1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgMCk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgMCk7CiAg
ICAgICAgICAgICAvLyBGSVhNRSBCdWcgMTAyNTcxOiBMYXlvdXQgZm9yIHRoZSB2YWx1ZSAnb3V0
c2lkZS1zaGFwZScgaXMgbm90IHlldCBpbXBsZW1lbnRlZAogICAgICAgICAgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVPdXRzaWRlU2hhcGUpCi0gICAg
ICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgRXhjbHVzaW9uU2hh
cGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKCkpOworICAgICAgICAgICAgICAgIHNldFZhbHVl
KHN0YXRlLnN0eWxlKCksIEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0ZU91dHNpZGVWYWx1ZSgp
KTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1NoYXBlKCkpIHsKLSAg
ICAgICAgICAgICAgICBSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gc2hhcGUgPSBFeGNsdXNp
b25TaGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZhbHVlKGJhc2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJl
c29sdmVyLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVWYWx1ZSgpKSk7Ci0gICAgICAgICAgICAg
ICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc2hhcGUucmVsZWFzZSgpKTsKKyAg
ICAgICAgICAgICAgICBSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gc2hhcGUgPSBFeGNsdXNp
b25TaGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZhbHVlKGJhc2ljU2hhcGVGb3JWYWx1ZShzdGF0ZSwg
cHJpbWl0aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUoKSkpOworICAgICAgICAgICAgICAgIHNldFZh
bHVlKHN0YXRlLnN0eWxlKCksIHNoYXBlLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CkBAIC0xNzQ2LDIxICsxNzQ2LDIxIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUo
Q1NTX0lNQUdFX1JFU09MVVRJT04pCiBjbGFzcyBBcHBseVByb3BlcnR5SW1hZ2VSZXNvbHV0aW9u
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJh
c2U8SW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNv
dXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1
dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJ
bWFnZVJlc29sdXRpb25Tb3VyY2U+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHls
ZVJlc29sdmVyKTsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1
dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0
aW9uU25hcCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29s
dXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25TbmFwPjo6YXBw
bHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIEFwcGx5
UHJvcGVydHlEZWZhdWx0QmFzZTxmbG9hdCwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb24s
IGZsb2F0LCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJT
dHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvbj46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5
SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1h
Z2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNvdXJjZSwg
SW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNv
dXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJl
c29sdXRpb25Tb3VyY2U+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7Cisg
ICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVu
ZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5k
ZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJl
bmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU25hcD46OmFwcGx5SW5oZXJpdFZhbHVl
KHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPGZs
b2F0LCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6
c2V0SW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNv
bHV0aW9uPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBz
dGF0ZSkKICAgICB7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29s
dXRpb25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJl
c29sdXRpb25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJ
bWFnZVJlc29sdXRpb25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlv
blNvdXJjZT46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwot
ICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJl
bmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVu
ZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZS
ZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNuYXA+OjphcHBseUluaXRpYWxWYWx1
ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1
bHRCYXNlPGZsb2F0LCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5k
ZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjppbml0aWFs
SW1hZ2VSZXNvbHV0aW9uPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNv
bHZlcik7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25T
b3VyY2UsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRp
b25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJl
c29sdXRpb25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNvdXJj
ZT46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgQXBwbHlQ
cm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW1h
Z2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjpzZXRJ
bWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6Omlu
aXRpYWxJbWFnZVJlc29sdXRpb25TbmFwPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwg
c3RhdGUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8ZmxvYXQsICZSZW5kZXJT
dHlsZTo6aW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29s
dXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24+OjphcHBs
eUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC0xNzgwLDkgKzE3ODAsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgcmVzb2x1dGlvbiA9IHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZShDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0RQUFgpOwogICAgICAgICB9Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvblNvdXJjZShzb3VyY2UpOwotICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25TbmFwKHNuYXApOwotICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb24ocmVzb2x1dGlvbik7
CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvblNvdXJjZShzb3VyY2Up
OworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25TbmFwKHNuYXApOwor
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb24ocmVzb2x1dGlvbik7CiAg
ICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZUJ1aWxkZXIuaAppbmRleCA0ZmZlODUyMzRjMTNkMGZiYjE0NDZlMDY4ODFjOWY3
ZmVmYzcwNjdiLi41OTFkZGE5YjYyOGUxNzU5MzBmODVmNjRjYTRkOWM4ZThlODI5ZmY0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlQnVpbGRlci5oCkBAIC0zMywxOCArMzMsMTkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDU1NWYWx1ZTsKIGNsYXNzIFN0eWxlQnVpbGRlcjsKK2NsYXNzIFN0
eWxlUmVzb2x2ZVN0YXRlOwogY2xhc3MgU3R5bGVSZXNvbHZlcjsKIAogY2xhc3MgUHJvcGVydHlI
YW5kbGVyIHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIHZvaWQgKCpJbmhlcml0RnVuY3Rpb24pKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqKTsKLSAgICB0eXBlZGVmIHZvaWQgKCpJbml0aWFs
RnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqKTsKLSAgICB0eXBlZGVmIHZv
aWQgKCpBcHBseUZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiwgQ1NTVmFs
dWUqKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpJbmhlcml0RnVuY3Rpb24pKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZVN0YXRlJik7CisgICAgdHlwZWRlZiB2b2lkICgqSW5pdGlhbEZ1bmN0aW9u
KShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYpOworICAgIHR5cGVkZWYgdm9pZCAo
KkFwcGx5RnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTVmFs
dWUqKTsKICAgICBQcm9wZXJ0eUhhbmRsZXIoKSA6IG1faW5oZXJpdCgwKSwgbV9pbml0aWFsKDAp
LCBtX2FwcGx5KDApIHsgfQogICAgIFByb3BlcnR5SGFuZGxlcihJbmhlcml0RnVuY3Rpb24gaW5o
ZXJpdCwgSW5pdGlhbEZ1bmN0aW9uIGluaXRpYWwsIEFwcGx5RnVuY3Rpb24gYXBwbHkpIDogbV9p
bmhlcml0KGluaGVyaXQpLCBtX2luaXRpYWwoaW5pdGlhbCksIG1fYXBwbHkoYXBwbHkpIHsgfQot
ICAgIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKSBjb25zdCB7IEFTU0VSVChtX2luaGVyaXQpOyAoKm1f
aW5oZXJpdCkocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7IH0KLSAgICB2b2lkIGFwcGx5SW5p
dGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlcikgY29uc3QgeyBBU1NFUlQobV9pbml0aWFsKTsgKCptX2luaXRpYWwpKHByb3BlcnR5
SUQsIHN0eWxlUmVzb2x2ZXIpOyB9Ci0gICAgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVl
KSBjb25zdCB7IEFTU0VSVChtX2FwcGx5KTsgKCptX2FwcGx5KShwcm9wZXJ0eUlELCBzdHlsZVJl
c29sdmVyLCB2YWx1ZSk7IH0KKyAgICB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKSBjb25zdCB7IEFTU0VSVCht
X2luaGVyaXQpOyAoKm1faW5oZXJpdCkocHJvcGVydHlJRCwgc3RhdGUpOyB9CisgICAgdm9pZCBh
cHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0
YXRlJiBzdGF0ZSkgY29uc3QgeyBBU1NFUlQobV9pbml0aWFsKTsgKCptX2luaXRpYWwpKHByb3Bl
cnR5SUQsIHN0YXRlKTsgfQorICAgIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKSBjb25zdCB7
IEFTU0VSVChtX2FwcGx5KTsgKCptX2FwcGx5KShwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOyB9
CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9pbmhlcml0ICYmIG1faW5pdGlh
bCAmJiBtX2FwcGx5OyB9CiAgICAgSW5oZXJpdEZ1bmN0aW9uIGluaGVyaXRGdW5jdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1faW5oZXJpdDsgfQogICAgIEluaXRpYWxGdW5jdGlvbiBpbml0aWFsRnVu
Y3Rpb24oKSB7IHJldHVybiBtX2luaXRpYWw7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZVN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODVlZmQ5NGZmOGNkM2VhZThkZmE2N2UwYjUzNzJlYmNhMTdi
OGJmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVT
dGF0ZS5oCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2lmbmRlZiBTdHlsZVJlc29sdmVTdGF0ZV9oCisjZGVmaW5lIFN0eWxl
UmVzb2x2ZVN0YXRlX2gKKworI2luY2x1ZGUgIkNTU1J1bGVMaXN0LmgiCisjaW5jbHVkZSAiRWxl
bWVudC5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU2VsZWN0b3JDaGVj
a2VyLmgiCisjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUg
IldlYktpdENTU1NWR0RvY3VtZW50VmFsdWUuaCIKKyNlbmRpZgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhhc2hNYXA8Q1NTUHJvcGVydHlJRCwg
UmVmUHRyPENTU1ZhbHVlPiA+IFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOworI2lmIEVOQUJMRShD
U1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKK3R5cGVkZWYgSGFzaE1hcDxGaWx0ZXJPcGVyYXRp
b24qLCBSZWZQdHI8V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZT4gPiBQZW5kaW5nU1ZHRG9jdW1l
bnRNYXA7CisjZW5kaWYKKworY2xhc3MgUmVuZGVyUmVnaW9uOworY2xhc3MgUnVsZURhdGE7CisK
K2NsYXNzIFN0eWxlUmVzb2x2ZVN0YXRlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHls
ZVJlc29sdmVTdGF0ZSk7CitwdWJsaWM6CisgICAgU3R5bGVSZXNvbHZlU3RhdGUoKQorICAgIDog
bV9lbGVtZW50KDApCisgICAgLCBtX3N0eWxlKDApCisgICAgLCBtX2luY2x1ZGVFbXB0eVJ1bGVz
KGZhbHNlKQorICAgICwgbV9zYW1lT3JpZ2luT25seShmYWxzZSkKKyAgICAsIG1fcHNldWRvU3R5
bGUoTk9QU0VVRE8pCisgICAgLCBtX21vZGUoU2VsZWN0b3JDaGVja2VyOjpSZXNvbHZpbmdTdHls
ZSkKKyAgICAsIG1fcmVnaW9uRm9yU3R5bGluZygwKQorICAgICwgbV9lbGVtZW50TGlua1N0YXRl
KE5vdEluc2lkZUxpbmspCisgICAgLCBtX3BhcmVudE5vZGUoMCkKKyAgICAsIG1fcGFyZW50U3R5
bGUoMCkKKyAgICAsIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KGZhbHNlKQorICAgICwg
bV9yb290RWxlbWVudFN0eWxlKDApCisgICAgLCBtX2NhblVzZUZhc3RSZWplY3QoZmFsc2UpCisg
ICAgLCBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyhmYWxzZSkKKyAgICAsIG1fYXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpCisgICAgLCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUoZmFsc2UpCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICwgbV9oYXNQ
ZW5kaW5nU2hhZGVycyhmYWxzZSkKKyNlbmRpZgorICAgICwgbV9saW5lSGVpZ2h0VmFsdWUoMCkK
KyAgICAsIG1fZm9udERpcnR5KGZhbHNlKQorICAgICwgbV9oYXNVQUFwcGVhcmFuY2UoZmFsc2Up
CisgICAgLCBtX2JhY2tncm91bmREYXRhKEJhY2tncm91bmRGaWxsTGF5ZXIpIHsgfQorCitwdWJs
aWM6CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQor
ICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5
bGU7IH0KKyAgICBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcm9vdEVsZW1lbnRTdHlsZTsgfQorICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX2VsZW1lbnQ7IH0KKyAgICBTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9zdHlsZWRFbGVtZW50OyB9CisgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9lbGVtZW50LT5kb2N1bWVudCgpOyB9CisgICAgUmVuZGVyUmVnaW9u
KiByZWdpb25Gb3JTdHlsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9yZWdpb25Gb3JTdHlsaW5nOyB9
CisgICAgU2VsZWN0b3JDaGVja2VyOjpNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7
IH0KKyAgICBQc2V1ZG9JZCBwc2V1ZG9TdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHNldWRvU3R5
bGU7IH0KKyAgICBjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9wYXJlbnROb2RlOyB9CisgICAgRUluc2lkZUxpbmsgZWxlbWVudExpbmtTdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZWxlbWVudExpbmtTdGF0ZTsgfQorICAgIGJvb2wgZGlzdHJpYnV0ZWRU
b0luc2VydGlvblBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9u
UG9pbnQ7IH0KKworICAgIHZvaWQgc2V0Q2FuVXNlRmFzdFJlamVjdChib29sIGNhblVzZUZhc3RS
ZWplY3QpIHsgbV9jYW5Vc2VGYXN0UmVqZWN0ID0gY2FuVXNlRmFzdFJlamVjdDsgfQorICAgIGJv
b2wgY2FuVXNlRmFzdFJlamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FuVXNlRmFzdFJlamVjdDsg
fQorCisgICAgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpIHsgbV9zdHlsZSA9IHN0
eWxlOyB9CisgICAgdm9pZCBzZXRSb290RWxlbWVudFN0eWxlKFJlbmRlclN0eWxlKiByb290RWxl
bWVudFN0eWxlKSB7IG1fcm9vdEVsZW1lbnRTdHlsZSA9IHJvb3RFbGVtZW50U3R5bGU7IH0KKyAg
ICB2b2lkIHNldEVsZW1lbnQoRWxlbWVudCogZSkgeyBtX2VsZW1lbnQgPSBlOyBtX3N0eWxlZEVs
ZW1lbnQgPSBlICYmIGUtPmlzU3R5bGVkRWxlbWVudCgpID8gdG9TdHlsZWRFbGVtZW50KGUpIDog
MDsgfQorICAgIHZvaWQgc2V0RWxlbWVudExpbmtTdGF0ZShFSW5zaWRlTGluayBlbGVtZW50TGlu
a1N0YXRlKSB7IG1fZWxlbWVudExpbmtTdGF0ZSA9IGVsZW1lbnRMaW5rU3RhdGU7IH0KKyAgICB2
b2lkIHNldFBhcmVudE5vZGUoQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSkgeyBtX3BhcmVudE5v
ZGUgPSBwYXJlbnROb2RlOyB9CisgICAgdm9pZCBzZXRQYXJlbnRTdHlsZShSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUpIHsgbV9wYXJlbnRTdHlsZSA9IHBhcmVudFN0eWxlOyB9CisgICAgdm9pZCBz
ZXREaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQoYm9vbCBkaXN0cmlidXRlZFRvSW5zZXJ0aW9u
UG9pbnQpIHsgbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQgPSBkaXN0cmlidXRlZFRvSW5z
ZXJ0aW9uUG9pbnQ7IH0KKyAgICB2b2lkIHNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpNb2RlIG1v
ZGUpIHsgbV9tb2RlID0gbW9kZTsgfQorICAgIHZvaWQgc2V0UmVnaW9uRm9yU3R5bGluZyhSZW5k
ZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcpIHsgbV9yZWdpb25Gb3JTdHlsaW5nID0gcmVnaW9u
Rm9yU3R5bGluZzsgfQorICAgIHZvaWQgc2V0UHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvU3R5
bGUpIHsgbV9wc2V1ZG9TdHlsZSA9IHBzZXVkb1N0eWxlOyB9CisKKyAgICBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHN0eWxlKCktPmZvbnREZXNjcmlw
dGlvbigpOyB9CisgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRp
b24oKSB7IHJldHVybiBwYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsgfQorCisgICAg
dm9pZCBzZXRGb250RGVzY3JpcHRpb24oY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24pIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnRE
ZXNjcmlwdGlvbik7IH0KKworICAgIHZvaWQgc2V0Wm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5
IHw9IHN0eWxlKCktPnNldFpvb20oZik7IH0KKyAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxv
YXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRFZmZlY3RpdmVab29tKGYpOyB9CisK
KyAgICB2b2lkIHNldFRleHRTaXplQWRqdXN0KGJvb2wgYikgeyBtX2ZvbnREaXJ0eSB8PSBzdHls
ZSgpLT5zZXRUZXh0U2l6ZUFkanVzdChiKTsgfQorICAgIHZvaWQgc2V0V3JpdGluZ01vZGUoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0V3JpdGlu
Z01vZGUod3JpdGluZ01vZGUpOyB9CisgICAgdm9pZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4dE9y
aWVudGF0aW9uIHRleHRPcmllbnRhdGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRU
ZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQorCisgICAgdm9pZCBzZXRBcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUoYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUpIHsg
bV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgPSBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGU7IH0KKyAgICB2b2lkIHNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoYm9vbCBh
cHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKSB7IG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRl
ZExpbmtTdHlsZSA9IGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7IH0KKyAgICBib29s
IGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlOyB9CisgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
OyB9CisKKyAgICBWZWN0b3I8Y29uc3QgUnVsZURhdGEqLCAzMj4mIG1hdGNoZWRSdWxlcygpIHsg
cmV0dXJuIG1fbWF0Y2hlZFJ1bGVzOyB9CisgICAgY29uc3QgUnVsZURhdGEqIG1hdGNoZWRSdWxl
QXQoaW50IGluZGV4KSB7IHJldHVybiBtX21hdGNoZWRSdWxlc1tpbmRleF07IH0KKworICAgIHZv
aWQgc2V0RWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKGJvb2wgYWZmZWN0ZWRCeUNsYXNzUnVs
ZXMpIHsgbV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMgPSBhZmZlY3RlZEJ5Q2xhc3NSdWxl
czsgfQorICAgIGJvb2wgZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKCkgY29uc3QgeyByZXR1
cm4gbV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXM7IH0KKyAgICAKKyAgICB2b2lkIGNhY2hl
Qm9yZGVyQW5kQmFja2dyb3VuZChSZW5kZXJTdHlsZSogc3R5bGUpCisgICAgeworICAgICAgICBB
U1NFUlQoc3R5bGUpOworICAgICAgICBtX2hhc1VBQXBwZWFyYW5jZSA9IHN0eWxlLT5oYXNBcHBl
YXJhbmNlKCk7CisgICAgICAgIGlmIChtX2hhc1VBQXBwZWFyYW5jZSkgeworICAgICAgICAgICAg
bV9ib3JkZXJEYXRhID0gc3R5bGUtPmJvcmRlcigpOworICAgICAgICAgICAgbV9iYWNrZ3JvdW5k
RGF0YSA9ICpzdHlsZS0+YmFja2dyb3VuZExheWVycygpOworICAgICAgICAgICAgbV9iYWNrZ3Jv
dW5kQ29sb3IgPSBzdHlsZS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcCYgcGVuZGluZ0ltYWdlUHJvcGVydGllcygpIHsg
cmV0dXJuIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllczsgfQorCisjaWYgRU5BQkxFKENTU19GSUxU
RVJTKSAmJiBFTkFCTEUoU1ZHKQorICAgIFBlbmRpbmdTVkdEb2N1bWVudE1hcCYgcGVuZGluZ1NW
R0RvY3VtZW50cygpIHsgcmV0dXJuIG1fcGVuZGluZ1NWR0RvY3VtZW50czsgfQorI2VuZGlmCisK
KyAgICB2b2lkIHNldExpbmVIZWlnaHRWYWx1ZShDU1NWYWx1ZSogdmFsdWUpIHsgbV9saW5lSGVp
Z2h0VmFsdWUgPSB2YWx1ZTsgfQorICAgIENTU1ZhbHVlKiBsaW5lSGVpZ2h0VmFsdWUoKSB7IHJl
dHVybiBtX2xpbmVIZWlnaHRWYWx1ZTsgfQorCisgICAgYm9vbCBoYXNQYXJlbnROb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9wYXJlbnROb2RlOyB9CisKKyAgICB2b2lkIHNldEZvbnREaXJ0eShib29s
IGRpcnR5KSB7IG1fZm9udERpcnR5ID0gZGlydHk7IH0KKyAgICBib29sIGZvbnREaXJ0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fZm9udERpcnR5OyB9CisKKyAgICBTdGF0aWNDU1NSdWxlTGlzdCogZW5z
dXJlUnVsZUxpc3QoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3J1bGVMaXN0KQorICAgICAgICAg
ICAgbV9ydWxlTGlzdCA9IFN0YXRpY0NTU1J1bGVMaXN0OjpjcmVhdGUoKTsKKyAgICAgICAgcmV0
dXJuIG1fcnVsZUxpc3QuZ2V0KCk7CisgICAgfQorCisgICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVM
aXN0PiYgcnVsZUxpc3QoKSB7IHJldHVybiBtX3J1bGVMaXN0OyB9CisKKyNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCisgICAgdm9pZCBzZXRIYXNQZW5kaW5nU2hhZGVycyhib29sIGhhc1BlbmRpbmdT
aGFkZXJzKSB7IG1faGFzUGVuZGluZ1NoYWRlcnMgPSBoYXNQZW5kaW5nU2hhZGVyczsgfQorICAg
IGJvb2wgaGFzUGVuZGluZ1NoYWRlcnMoKSBjb25zdCB7IHJldHVybiBtX2hhc1BlbmRpbmdTaGFk
ZXJzOyB9CisjZW5kaWYKKworLy8gU1ZHIGhhbmRsZXMgem9vbWluZyBpbiBhIGRpZmZlcmVudCB3
YXkgY29tcGFyZWQgdG8gQ1NTLiBUaGUgd2hvbGUgZG9jdW1lbnQgaXMgc2NhbGVkIGluc3RlYWQK
Ky8vIG9mIGVhY2ggaW5kaXZpZHVhbCBsZW5ndGggdmFsdWUgaW4gdGhlIHJlbmRlciBzdHlsZSAv
IHRyZWUuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoKigpCisvLyBtdWx0aXBsaWVz
IGVhY2ggcmVzb2x2ZWQgbGVuZ3RoIHdpdGggdGhlIHpvb20gbXVsdGlwbGllciAtIHNvIGZvciBT
Vkcgd2UgbmVlZCB0byBkaXNhYmxlIHRoYXQuCisvLyBUaG91Z2ggYWxsIENTUyB2YWx1ZXMgdGhh
dCBjYW4gYmUgYXBwbGllZCB0byBvdXRlcm1vc3QgPHN2Zz4gZWxlbWVudHMgKHdpZHRoL2hlaWdo
dC9ib3JkZXIvcGFkZGluZy4uLikKKy8vIG5lZWQgdG8gcmVzcGVjdCB0aGUgc2NhbGluZy4gUmVu
ZGVyQm94ICh0aGUgcGFyZW50IGNsYXNzIG9mIFJlbmRlclNWR1Jvb3QpIGdyYWJzIHZhbHVlcyBs
aWtlCisvLyB3aWR0aC9oZWlnaHQvYm9yZGVyL3BhZGRpbmcvLi4uIGZyb20gdGhlIFJlbmRlclN0
eWxlIC0+IGZvciBTVkcgdGhlc2UgdmFsdWVzIHdvdWxkIG5ldmVyIHNjYWxlLAorLy8gaWYgd2Un
ZCBwYXNzIGEgMS4wIHpvb20gZmFjdG9yIGV2ZXJ5aHdlcmUuIFNvIHdlIG9ubHkgcGFzcyBhIHpv
b20gZmFjdG9yIG9mIDEuMCBmb3Igc3BlY2lmaWMKKy8vIHByb3BlcnRpZXMgdGhhdCBhcmUgTk9U
IGFsbG93ZWQgdG8gc2NhbGUgd2l0aGluIGEgem9vbWVkIFNWRyBkb2N1bWVudCAobGV0dGVyL3dv
cmQtc3BhY2luZy9mb250LXNpemUpLgorICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3Qg
eyByZXR1cm4gbV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCk7IH0KKworICAg
IGJvb2wgaGFzVUFBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNVQUFwcGVhcmFuY2U7
IH0KKyAgICBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXJEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9i
b3JkZXJEYXRhOyB9CisgICAgY29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kRGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2dyb3VuZERhdGE7IH0KKyAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQorCisgICAgdm9pZCBzZXRJbmNs
dWRlRW1wdHlSdWxlcyhib29sIGluY2x1ZGVFbXB0eVJ1bGVzKSB7IG1faW5jbHVkZUVtcHR5UnVs
ZXMgPSBpbmNsdWRlRW1wdHlSdWxlczsgfQorICAgIHZvaWQgc2V0U2FtZU9yaWdpbk9ubHkoYm9v
bCBzYW1lT3JpZ2luT25seSkgeyBtX3NhbWVPcmlnaW5Pbmx5ID0gc2FtZU9yaWdpbk9ubHk7IH0K
KyAgICBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbmNsdWRlRW1w
dHlSdWxlczsgfQorICAgIGJvb2wgc2FtZU9yaWdpbk9ubHkoKSBjb25zdCB7IHJldHVybiBtX3Nh
bWVPcmlnaW5Pbmx5OyB9CisKK3ByaXZhdGU6CisgICAgRWxlbWVudCogbV9lbGVtZW50OworICAg
IFJlbmRlclN0eWxlKiBtX3N0eWxlOworICAgIFN0eWxlZEVsZW1lbnQqIG1fc3R5bGVkRWxlbWVu
dDsKKworICAgIGJvb2wgbV9pbmNsdWRlRW1wdHlSdWxlczsgLy8gc2hvdWxkIGJlIG1vdmVkIHRv
IE1hdGNoUmVxdWVzdD8KKyAgICBib29sIG1fc2FtZU9yaWdpbk9ubHk7IC8vIHNob3VsZCBiZSBt
b3ZlZCB0byBNYXRjaFJlcXVlc3Q/CisgICAgUHNldWRvSWQgbV9wc2V1ZG9TdHlsZTsgLy8gc2hv
dWxkIGJlIG1vdmVkIHRvIE1hdGNoUmVxdWVzdD8KKyAgICBTZWxlY3RvckNoZWNrZXI6Ok1vZGUg
bV9tb2RlOworCisgICAgUmVuZGVyUmVnaW9uKiBtX3JlZ2lvbkZvclN0eWxpbmc7CisgICAgRUlu
c2lkZUxpbmsgbV9lbGVtZW50TGlua1N0YXRlOworCisgICAgQ29udGFpbmVyTm9kZSogbV9wYXJl
bnROb2RlOworICAgIFJlbmRlclN0eWxlKiBtX3BhcmVudFN0eWxlOworICAgIGJvb2wgbV9kaXN0
cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQ7IC8vIG9ubHkgc3R5bGVGb3JFbGVtZW50IG5lZWRzLgor
ICAgIFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGU7IC8vIGFwcGx5UHJvcGVydHkgbmVl
ZHMuCisKKyAgICBib29sIG1fY2FuVXNlRmFzdFJlamVjdDsgLy8gY29sbGVjdE1hdGNoZWRSdWxl
c0Zvckxpc3QgdXNlcy4KKyAgICBib29sIG1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzOyAv
LyBzaWJsaW5nIHN0eWxlIHNoYXJpbmcgbmVlZHMuCisKKyAgICAvLyBBIGJ1ZmZlciB1c2VkIHRv
IGhvbGQgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIGZvciBhbiBlbGVtZW50LAorICAgIC8vIGFu
ZCBhIHRlbXBvcmFyeSBidWZmZXIgdXNlZCBmb3IgbWVyZ2Ugc29ydGluZy4KKyAgICBWZWN0b3I8
Y29uc3QgUnVsZURhdGEqLCAzMj4gbV9tYXRjaGVkUnVsZXM7CisgICAgUmVmUHRyPFN0YXRpY0NT
U1J1bGVMaXN0PiBtX3J1bGVMaXN0OworCisgICAgLy8gYXBwbHlQcm9wZXJ0eSBuZWVkcy4KKyAg
ICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOworICAgIGJvb2wgbV9hcHBseVBy
b3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOworCisgICAgLy8gUGVuZGluZ0ltYWdlUHJvcGVydGll
cyBhcmUgcGVyLXJlc29sdmluZyBtZW1iZXIuCisgICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXAg
bV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzOworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBi
b29sIG1faGFzUGVuZGluZ1NoYWRlcnM7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
ICYmIEVOQUJMRShTVkcpCisgICAgUGVuZGluZ1NWR0RvY3VtZW50TWFwIG1fcGVuZGluZ1NWR0Rv
Y3VtZW50czsKKyNlbmRpZgorICAgIENTU1ZhbHVlKiBtX2xpbmVIZWlnaHRWYWx1ZTsgLy8gY2Fj
aGU7IHVwZGF0ZWQgaW4gYXBwbHlQcm9wZXJ0eS4KKyAgICBib29sIG1fZm9udERpcnR5OworCisg
ICAgLy8gYm9yZGVyLWFuZC1iYWNrZ3JvdW5kIGNhY2hlLCBpdCBpcyBiZXR0ZXIgdG8gbW92ZSB0
byBhbm90aGVyIHBsYWNlPworICAgIGJvb2wgbV9oYXNVQUFwcGVhcmFuY2U7CisgICAgQm9yZGVy
RGF0YSBtX2JvcmRlckRhdGE7CisgICAgRmlsbExheWVyIG1fYmFja2dyb3VuZERhdGE7CisgICAg
Q29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBTdHlsZVJlc29sdmVTdGF0ZV9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcAppbmRleCBiMjYzZDgwNmI4NTk1ODZjN2MxNGNmZjMxZjk4MGE0MzI1MjM2NWJhLi5l
MmQ0MDZiZDg1ZDYwMGQ0MmZlNTE3OGEwMWIzNDVhYmM4NGNhNWVmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC00NCw3ICs0NCw2IEBACiAjaW5jbHVkZSAiQ1NTUHJpbWl0
aXZlVmFsdWVNYXBwaW5ncy5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNs
dWRlICJDU1NSZWZsZWN0VmFsdWUuaCIKLSNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgogI2luY2x1
ZGUgIkNTU1NlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCiAjaW5jbHVk
ZSAiQ1NTU3R5bGVSdWxlLmgiCkBAIC0xMjAsNiArMTE5LDcgQEAKICNpbmNsdWRlICJTdHlsZVJ1
bGVJbXBvcnQuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKICNpbmNsdWRlICJT
dHlsZVNoZWV0TGlzdC5oIgorI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJU
ZXh0LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKQEAgLTE5OCwxNCArMTk4LDE0IEBAIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiAKICNkZWZpbmUgSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkg
XAogaWYgKGlzSW5oZXJpdCkgeyBcCi0gICAgbV9zdHlsZS0+c2V0IyNQcm9wKG1fcGFyZW50U3R5
bGUtPnByb3AoKSk7IFwKKyAgICBzdGF0ZS5zdHlsZSgpLT5zZXQjI1Byb3Aoc3RhdGUucGFyZW50
U3R5bGUoKS0+cHJvcCgpKTsgICAgICBcCiAgICAgcmV0dXJuOyBcCiB9CiAKICNkZWZpbmUgSEFO
RExFX0lOSEVSSVRfQU5EX0lOSVRJQUwocHJvcCwgUHJvcCkgXAogSEFORExFX0lOSEVSSVQocHJv
cCwgUHJvcCkgXAogaWYgKGlzSW5pdGlhbCkgeyBcCi0gICAgbV9zdHlsZS0+c2V0IyNQcm9wKFJl
bmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBcCisgICAgc3RhdGUuc3R5bGUoKS0+c2V0IyNQ
cm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyAgICAgXAogICAgIHJldHVybjsgXAog
fQogCkBAIC0yNjYsMzUgKzI2NiwxNSBAQCBzdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogcmlnaHRU
b0xlZnREZWNsYXJhdGlvbigpCiAKIAogU3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1
bWVudCogZG9jdW1lbnQsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgIDogbV9o
YXNVQUFwcGVhcmFuY2UoZmFsc2UpCi0gICAgLCBtX2JhY2tncm91bmREYXRhKEJhY2tncm91bmRG
aWxsTGF5ZXIpCi0gICAgLCBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxh
c3RTd2VlcCgwKQorICAgIDogbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VM
YXN0U3dlZXAoMCkKICAgICAsIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZVN3ZWVwVGltZXIodGhp
cywgJlN0eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSkKICAgICAsIG1f
ZG9jdW1lbnQoZG9jdW1lbnQpCi0gICAgLCBtX3NlbGVjdG9yQ2hlY2tlcihkb2N1bWVudCkKLSAg
ICAsIG1fcGFyZW50U3R5bGUoMCkKLSAgICAsIG1fcm9vdEVsZW1lbnRTdHlsZSgwKQotICAgICwg
bV9lbGVtZW50KDApCi0gICAgLCBtX3N0eWxlZEVsZW1lbnQoMCkKLSAgICAsIG1fcmVnaW9uRm9y
U3R5bGluZygwKQotICAgICwgbV9lbGVtZW50TGlua1N0YXRlKE5vdEluc2lkZUxpbmspCi0gICAg
LCBtX3BhcmVudE5vZGUoMCkKLSAgICAsIG1fbGluZUhlaWdodFZhbHVlKDApCi0gICAgLCBtX2Zv
bnREaXJ0eShmYWxzZSkKICAgICAsIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKG1hdGNoQXV0
aG9yQW5kVXNlclN0eWxlcykKLSAgICAsIG1fc2FtZU9yaWdpbk9ubHkoZmFsc2UpCi0gICAgLCBt
X2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludChmYWxzZSkKICAgICAsIG1fZm9udFNlbGVjdG9y
KENTU0ZvbnRTZWxlY3Rvcjo6Y3JlYXRlKGRvY3VtZW50KSkKICNpZiBFTkFCTEUoQ1NTX0RFVklD
RV9BREFQVEFUSU9OKQogICAgICwgbV92aWV3cG9ydFN0eWxlUmVzb2x2ZXIoVmlld3BvcnRTdHls
ZVJlc29sdmVyOjpjcmVhdGUoZG9jdW1lbnQpKQogI2VuZGlmCi0gICAgLCBtX2FwcGx5UHJvcGVy
dHlUb1JlZ3VsYXJTdHlsZSh0cnVlKQotICAgICwgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlKGZhbHNlKQogICAgICwgbV9zdHlsZUJ1aWxkZXIoU3R5bGVCdWlsZGVyOjpzaGFyZWRT
dHlsZUJ1aWxkZXIoKSkKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgLCBtX2hhc1BlbmRp
bmdTaGFkZXJzKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3N0eWxlTWFwKHRoaXMpCiB7CiAgICAg
RWxlbWVudCogcm9vdCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKIApAQCAtNjQ4LDEw
MCArNjI4LDEwMiBAQCBpbmxpbmUgYm9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6aXNNYXRjaGlu
Z1VBUnVsZXMoKQogCiBib29sIE1hdGNoaW5nVUFSdWxlc1Njb3BlOjptX21hdGNoaW5nVUFSdWxl
cyA9IGZhbHNlOwogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzKGNv
bnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBSdWxlUmFuZ2UmIHJ1bGVSYW5nZSkKK3Zv
aWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMoUnVsZVNldCogcnVsZVNldCwg
U3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBSdWxlUmFuZ2UmIHJ1bGVSYW5nZSwgY29uc3QgQ29u
dGFpbmVyTm9kZSogc2NvcGUpCiB7Ci0gICAgQVNTRVJUKG1hdGNoUmVxdWVzdC5ydWxlU2V0KTsK
LSAgICBBU1NFUlQobV9lbGVtZW50KTsKKyAgICBBU1NFUlQocnVsZVNldCk7CisgICAgQVNTRVJU
KHN0YXRlLmVsZW1lbnQoKSk7CiAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHBzZXVkb0lkID0g
bV9lbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0
ZS5lbGVtZW50KCk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwc2V1ZG9JZCA9IGVsZW1lbnQt
PnNoYWRvd1BzZXVkb0lkKCk7CiAgICAgaWYgKCFwc2V1ZG9JZC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgQVNTRVJUKG1fc3R5bGVkRWxlbWVudCk7Ci0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+c2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKHBz
ZXVkb0lkLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICAgICAgQVNTRVJU
KGVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVs
ZXNGb3JMaXN0KHJ1bGVTZXQtPnNoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyhwc2V1ZG9JZC5pbXBs
KCkpLCBzdGF0ZSwgcnVsZVJhbmdlLCBzY29wZSk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQotICAgIGlmIChtX2VsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpICYmIHRvV2ViVlRU
RWxlbWVudChtX2VsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpKQotICAgICAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmN1ZVBzZXVkb1J1bGVzKCks
IG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVt
ZW50KCkgJiYgdG9XZWJWVFRFbGVtZW50KGVsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpKQorICAg
ICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZVNldC0+Y3VlUHNldWRvUnVsZXMo
KSwgc3RhdGUsIHJ1bGVSYW5nZSwgc2NvcGUpOwogI2VuZGlmCiAgICAgLy8gQ2hlY2sgd2hldGhl
ciBvdGhlciB0eXBlcyBvZiBydWxlcyBhcmUgYXBwbGljYWJsZSBpbiB0aGUgY3VycmVudCB0cmVl
IHNjb3BlLiBDcml0ZXJpYSBmb3IgdGhpczoKICAgICAvLyBhKSBpdCdzIGEgVUEgcnVsZQogICAg
IC8vIGIpIHRoZSB0cmVlIHNjb3BlIGFsbG93cyBhdXRob3IgcnVsZXMKICAgICAvLyBjKSB0aGUg
cnVsZXMgY29tZXMgZnJvbSBhIHNjb3BlZCBzdHlsZSBzaGVldCB3aXRoaW4gdGhlIHNhbWUgdHJl
ZSBzY29wZQotICAgIFRyZWVTY29wZSogdHJlZVNjb3BlID0gbV9lbGVtZW50LT50cmVlU2NvcGUo
KTsKKyAgICBUcmVlU2NvcGUqIHRyZWVTY29wZSA9IGVsZW1lbnQtPnRyZWVTY29wZSgpOwogICAg
IGlmICghTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKICAgICAgICAg
JiYgIXRyZWVTY29wZS0+YXBwbHlBdXRob3JTdHlsZXMoKQotICAgICAgICAmJiAoIW1hdGNoUmVx
dWVzdC5zY29wZSB8fCBtYXRjaFJlcXVlc3Quc2NvcGUtPnRyZWVTY29wZSgpICE9IHRyZWVTY29w
ZSkpCisgICAgICAgICYmICghc2NvcGUgfHwgc2NvcGUtPnRyZWVTY29wZSgpICE9IHRyZWVTY29w
ZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIG5lZWQgdG8gY29sbGVjdCB0aGUgcnVs
ZXMgZm9yIGlkLCBjbGFzcywgdGFnLCBhbmQgZXZlcnl0aGluZyBlbHNlIGludG8gYSBidWZmZXIg
YW5kCiAgICAgLy8gdGhlbiBzb3J0IHRoZSBidWZmZXIuCi0gICAgaWYgKG1fZWxlbWVudC0+aGFz
SUQoKSkKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5y
dWxlU2V0LT5pZFJ1bGVzKG1fZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkp
LCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgaWYgKG1fc3R5bGVkRWxlbWVudCAmJiBt
X3N0eWxlZEVsZW1lbnQtPmhhc0NsYXNzKCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3N0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKS5zaXplKCk7ICsraSkKLSAgICAgICAg
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+Y2xh
c3NSdWxlcyhtX3N0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKVtpXS5pbXBsKCkpLCBtYXRjaFJl
cXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkpCisgICAgICAgIGNv
bGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlU2V0LT5pZFJ1bGVzKGVsZW1lbnQtPmlkRm9y
U3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSwgc3RhdGUsIHJ1bGVSYW5nZSwgc2NvcGUpOworICAg
IGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5oYXND
bGFzcygpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUuc3R5bGVkRWxl
bWVudCgpLT5jbGFzc05hbWVzKCkuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlc0Zvckxpc3QocnVsZVNldC0+Y2xhc3NSdWxlcyhzdGF0ZS5zdHlsZWRFbGVtZW50
KCktPmNsYXNzTmFtZXMoKVtpXS5pbXBsKCkpLCBzdGF0ZSwgcnVsZVJhbmdlLCBzY29wZSk7CiAg
ICAgfQogCi0gICAgaWYgKG1fZWxlbWVudC0+aXNMaW5rKCkpCi0gICAgICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+bGlua1BzZXVkb0NsYXNzUnVs
ZXMoKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgIGlmIChtX3NlbGVjdG9yQ2hlY2tl
ci5tYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhtX2VsZW1lbnQpKQotICAgICAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmZvY3VzUHNldWRvQ2xhc3NS
dWxlcygpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVs
ZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT50YWdSdWxlcyhtX2VsZW1lbnQtPmxvY2Fs
TmFtZSgpLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPnVuaXZlcnNhbFJ1bGVzKCks
IG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkpCisg
ICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlU2V0LT5saW5rUHNldWRvQ2xh
c3NSdWxlcygpLCBzdGF0ZSwgcnVsZVJhbmdlLCBzY29wZSk7CisgICAgaWYgKG1hdGNoZXNGb2N1
c1BzZXVkb0NsYXNzKGVsZW1lbnQpKQorICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxp
c3QocnVsZVNldC0+Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCksIHN0YXRlLCBydWxlUmFuZ2UsIHNj
b3BlKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZVNldC0+dGFnUnVsZXMo
ZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgc3RhdGUsIHJ1bGVSYW5nZSwgc2NvcGUpOwor
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlU2V0LT51bml2ZXJzYWxSdWxlcygp
LCBzdGF0ZSwgcnVsZVJhbmdlLCBzY29wZSk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y29s
bGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVl
c3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQordm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0
Y2hpbmdSdWxlc0ZvclJlZ2lvbihSdWxlU2V0KiBydWxlU2V0LCBTdHlsZVJlc29sdmVTdGF0ZSYg
c3RhdGUsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkK
IHsKLSAgICBpZiAoIW1fcmVnaW9uRm9yU3R5bGluZykKKyAgICBpZiAoIXN0YXRlLnJlZ2lvbkZv
clN0eWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdW5zaWduZWQgc2l6ZSA9IG1hdGNo
UmVxdWVzdC5ydWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKKyAg
ICBFbGVtZW50KiByZWdpb25TdHlsaW5nRWxlbWVudCA9IHRvRWxlbWVudChzdGF0ZS5yZWdpb25G
b3JTdHlsaW5nKCktPm5vZGUoKSk7CisgICAgdW5zaWduZWQgc2l6ZSA9IHJ1bGVTZXQtPm1fcmVn
aW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVj
dG9yID0gbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMu
YXQoaSkuc2VsZWN0b3I7Ci0gICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKHJlZ2lvblNl
bGVjdG9yLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9yZWdpb25Gb3JTdHlsaW5nLT5ub2RlKCkp
KSkgewotICAgICAgICAgICAgUnVsZVNldCogcmVnaW9uUnVsZXMgPSBtYXRjaFJlcXVlc3QucnVs
ZVNldC0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5ydWxlU2V0LmdldCgpOwor
ICAgICAgICBjb25zdCBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IgPSBydWxlU2V0LT5tX3Jl
Z2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9yOworICAgICAgICBpZiAoY2hl
Y2tSZWdpb25TZWxlY3RvcihyZWdpb25TZWxlY3RvciwgcmVnaW9uU3R5bGluZ0VsZW1lbnQpKSB7
CisgICAgICAgICAgICBSdWxlU2V0KiByZWdpb25SdWxlcyA9IHJ1bGVTZXQtPm1fcmVnaW9uU2Vs
ZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNldC5nZXQoKTsKICAgICAgICAgICAgIEFTU0VS
VChyZWdpb25SdWxlcyk7Ci0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJl
cXVlc3QocmVnaW9uUnVsZXMsIG1hdGNoUmVxdWVzdC5pbmNsdWRlRW1wdHlSdWxlcywgbWF0Y2hS
ZXF1ZXN0LnNjb3BlKSwgcnVsZVJhbmdlKTsKKyAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzKHJlZ2lvblJ1bGVzLCBzdGF0ZSwgcnVsZVJhbmdlLCBzY29wZSk7CiAgICAgICAgIH0KICAg
ICB9CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVz
KE1hdGNoUmVzdWx0JiByZXN1bHQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zl
ck1hdGNoZWRSdWxlcyhTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1
bHQpCiB7Ci0gICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKKyAgICBpZiAoc3RhdGUu
bWF0Y2hlZFJ1bGVzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzb3J0TWF0
Y2hlZFJ1bGVzKCk7CisgICAgc29ydE1hdGNoZWRSdWxlcyhzdGF0ZS5tYXRjaGVkUnVsZXMoKSk7
CiAKLSAgICBpZiAobV9zZWxlY3RvckNoZWNrZXIubW9kZSgpID09IFNlbGVjdG9yQ2hlY2tlcjo6
Q29sbGVjdGluZ1J1bGVzKSB7Ci0gICAgICAgIGlmICghbV9ydWxlTGlzdCkKLSAgICAgICAgICAg
IG1fcnVsZUxpc3QgPSBTdGF0aWNDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7ICsraSkKLSAgICAgICAg
ICAgIG1fcnVsZUxpc3QtPnJ1bGVzKCkuYXBwZW5kKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCkt
PmNyZWF0ZUNTU09NV3JhcHBlcigpKTsKKyAgICBpZiAoc3RhdGUubW9kZSgpID09IFNlbGVjdG9y
Q2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7CisgICAgICAgIC8vIFNob3VsZCBtb3ZlIHJ1bGVM
aXN0IGZyb20gc3RhdGUgdG8gcmVzdWx0PworICAgICAgICBTdGF0aWNDU1NSdWxlTGlzdCogcnVs
ZUxpc3QgPSBzdGF0ZS5lbnN1cmVSdWxlTGlzdCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc3RhdGUubWF0Y2hlZFJ1bGVzKCkuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBy
dWxlTGlzdC0+cnVsZXMoKS5hcHBlbmQoc3RhdGUubWF0Y2hlZFJ1bGVBdChpKS0+cnVsZSgpLT5j
cmVhdGVDU1NPTVdyYXBwZXIoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBO
b3cgdHJhbnNmZXIgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIG92ZXIgdG8gb3VyIGxpc3Qgb2Yg
ZGVjbGFyYXRpb25zLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxl
cy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAobV9zdHlsZSAmJiBtX21hdGNoZWRSdWxlc1tp
XS0+Y29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkpCi0gICAgICAgICAgICBtX3N0
eWxlLT5zZXRVbmlxdWUoKTsKLSAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCBt
X21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5wcm9wZXJ0aWVzKCksIG1fbWF0Y2hlZFJ1bGVzW2ld
LT5ydWxlKCksIG1fbWF0Y2hlZFJ1bGVzW2ldLT5saW5rTWF0Y2hUeXBlKCksIG1fbWF0Y2hlZFJ1
bGVzW2ldLT5wcm9wZXJ0eVdoaXRlbGlzdFR5cGUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHN0YXRlLm1hdGNoZWRSdWxlcygpLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChz
dGF0ZS5zdHlsZSgpICYmIHN0YXRlLm1hdGNoZWRSdWxlQXQoaSktPmNvbnRhaW5zVW5jb21tb25B
dHRyaWJ1dGVTZWxlY3RvcigpKQorICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VW5pcXVl
KCk7CisgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGUubWF0Y2hlZFJ1
bGVBdChpKS0+cnVsZSgpLT5wcm9wZXJ0aWVzKCksIHN0YXRlLm1hdGNoZWRSdWxlQXQoaSktPnJ1
bGUoKSwgc3RhdGUubWF0Y2hlZFJ1bGVBdChpKS0+bGlua01hdGNoVHlwZSgpLCBzdGF0ZS5tYXRj
aGVkUnVsZUF0KGkpLT5wcm9wZXJ0eVdoaXRlbGlzdFR5cGUoKSk7CiAgICAgfQogfQogCi12b2lk
IFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3Vs
dCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29w
ZWRBdXRob3JSdWxlcyhTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1
bHQpCiB7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkgfHwgRU5BQkxFKFNIQURPV19ET00pCiAg
ICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE1hdGNo
IHNjb3BlZCBhdXRob3IgcnVsZXMgYnkgdHJhdmVyc2luZyB0aGUgc2NvcGVkIGVsZW1lbnQgc3Rh
Y2sgKHJlYnVpbGQgaXQgaWYgaXQgZ290IGluY29uc2lzdGVudCkuCi0gICAgaWYgKG1fc2NvcGVS
ZXNvbHZlci0+aGFzU2NvcGVkU3R5bGVzKCkgJiYgbV9zY29wZVJlc29sdmVyLT5lbnN1cmVTdGFj
a0NvbnNpc3RlbmN5KG1fZWxlbWVudCkpIHsKLSAgICAgICAgYm9vbCBhcHBseUF1dGhvclN0eWxl
cyA9IG1fZWxlbWVudC0+dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9yU3R5bGVzKCk7CisgICAgaWYg
KG1fc2NvcGVSZXNvbHZlci0+aGFzU2NvcGVkU3R5bGVzKCkgJiYgbV9zY29wZVJlc29sdmVyLT5l
bnN1cmVTdGFja0NvbnNpc3RlbmN5KHN0YXRlLmVsZW1lbnQoKSkpIHsKKyAgICAgICAgYm9vbCBh
cHBseUF1dGhvclN0eWxlcyA9IHN0YXRlLmVsZW1lbnQoKS0+dHJlZVNjb3BlKCktPmFwcGx5QXV0
aG9yU3R5bGVzKCk7CiAgICAgICAgIGJvb2wgZG9jdW1lbnRTY29wZSA9IHRydWU7CiAgICAgICAg
IHVuc2lnbmVkIHNjb3BlU2l6ZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tTaXplKCk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzY29wZVNpemU7ICsraSkgewotICAgICAgICAg
ICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIHN0YXRlLm1hdGNoZWRSdWxl
cygpLmNsZWFyKCk7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0g
cmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKICAgICAgICAgICAgIGNvbnN0
IFN0eWxlU2NvcGVSZXNvbHZlcjo6U3RhY2tGcmFtZSYgZnJhbWUgPSBtX3Njb3BlUmVzb2x2ZXIt
PnN0YWNrRnJhbWVBdChpKTsKQEAgLTc1NCwxMzcgKzczNiwxMzEgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5j
bHVkZUVtcHQKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QoZnJhbWUubV9ydWxlU2V0LCBp
bmNsdWRlRW1wdHlSdWxlcywgZnJhbWUubV9zY29wZSk7CiAgICAgICAgICAgICBSdWxlUmFuZ2Ug
cnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy5hdXRob3JSdWxlUmFuZ2UoKTsKLSAgICAgICAgICAg
IGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICAgICAg
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdl
KTsKLSAgICAgICAgICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworICAg
ICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoZnJhbWUubV9ydWxlU2V0LCBzdGF0ZSwgcnVs
ZVJhbmdlLCBmcmFtZS5tX3Njb3BlKTsKKyAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yUmVnaW9uKGZyYW1lLm1fcnVsZVNldCwgc3RhdGUsIHJ1bGVSYW5nZSwgZnJhbWUubV9zY29w
ZSk7CisgICAgICAgICAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoc3RhdGUsIHJlc3Vs
dCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtYXRjaEhvc3RSdWxlcyhyZXN1bHQsIGluY2x1
ZGVFbXB0eVJ1bGVzKTsKKyAgICBtYXRjaEhvc3RSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKICNlbHNl
CiAgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CiAgICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVFbXB0
eVJ1bGVzKTsKICNlbmRpZgogfQogCi1pbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNo
YXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCkKK2lubGluZSBib29sIFN0eWxlUmVzb2x2
ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoRWxlbWVudCogZWxlbWVu
dCkKIHsKICNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKLSAgICByZXR1cm4gbV9zY29wZVJlc29sdmVy
ICYmIG1fc2NvcGVSZXNvbHZlci0+c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxl
cyhtX2VsZW1lbnQpOworICAgIHJldHVybiBtX3Njb3BlUmVzb2x2ZXIgJiYgbV9zY29wZVJlc29s
dmVyLT5zdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKGVsZW1lbnQpOwogI2Vs
c2UKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpt
YXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVz
KQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhTdHlsZVJlc29sdmVTdGF0ZSYg
c3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQpCiB7CiAjaWYgRU5BQkxFKFNIQURPV19ET00pCiAg
ICAgQVNTRVJUKG1fc2NvcGVSZXNvbHZlcik7CiAKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigp
OworICAgIHN0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAgICAgcmVzdWx0LnJhbmdlcy5s
YXN0QXV0aG9yUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogCiAg
ICAgVmVjdG9yPFJ1bGVTZXQqPiBtYXRjaGVkUnVsZXM7Ci0gICAgbV9zY29wZVJlc29sdmVyLT5t
YXRjaEhvc3RSdWxlcyhtX2VsZW1lbnQsIG1hdGNoZWRSdWxlcyk7CisgICAgbV9zY29wZVJlc29s
dmVyLT5tYXRjaEhvc3RSdWxlcyhzdGF0ZS5lbGVtZW50KCksIG1hdGNoZWRSdWxlcyk7CiAgICAg
aWYgKG1hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAo
dW5zaWduZWQgaSA9IG1hdGNoZWRSdWxlcy5zaXplKCk7IGkgPiAwOyAtLWkpIHsKICAgICAgICAg
UnVsZVJhbmdlIHJ1bGVSYW5nZSA9IHJlc3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0g
ICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1hdGNoUmVxdWVzdChtYXRjaGVkUnVsZXMuYXQo
aS0xKSwgaW5jbHVkZUVtcHR5UnVsZXMsIG1fZWxlbWVudCksIHJ1bGVSYW5nZSk7CisgICAgICAg
IGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1hdGNoZWRSdWxlcy5hdChpLTEpLCBzdGF0ZSwgcnVsZVJh
bmdlLCBzdGF0ZS5lbGVtZW50KCkpOwogICAgIH0KLSAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVk
UnVsZXMocmVzdWx0KTsKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoc3RhdGUsIHJl
c3VsdCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOwogICAgIFVOVVNFRF9QQVJB
TShpbmNsdWRlRW1wdHlSdWxlcyk7CiAjZW5kaWYKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpt
YXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVs
ZXMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoU3R5bGVSZXNvbHZlU3Rh
dGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0KQogewotICAgIG1fbWF0Y2hlZFJ1bGVzLmNs
ZWFyKCk7CisgICAgc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKICAgICByZXN1bHQucmFu
Z2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7
CiAKLSAgICBpZiAoIW1fZWxlbWVudCkKKyAgICBpZiAoIXN0YXRlLmVsZW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gTWF0Y2ggZ2xvYmFsIGF1dGhvciBydWxlcy4KLSAgICBNYXRj
aFJlcXVlc3QgbWF0Y2hSZXF1ZXN0KG1fYXV0aG9yU3R5bGUuZ2V0KCksIGluY2x1ZGVFbXB0eVJ1
bGVzKTsKICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy5hdXRob3JSdWxl
UmFuZ2UoKTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaFJlcXVlc3QsIHJ1bGVSYW5n
ZSk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obWF0Y2hSZXF1ZXN0LCBydWxl
UmFuZ2UpOwotICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworICAgIGNv
bGxlY3RNYXRjaGluZ1J1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHN0YXRlLCBydWxlUmFuZ2Up
OworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1fYXV0aG9yU3R5bGUuZ2V0KCks
IHN0YXRlLCBydWxlUmFuZ2UpOworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhzdGF0
ZSwgcmVzdWx0KTsKIAotICAgIG1hdGNoU2NvcGVkQXV0aG9yUnVsZXMocmVzdWx0LCBpbmNsdWRl
RW1wdHlSdWxlcyk7CisgICAgbWF0Y2hTY29wZWRBdXRob3JSdWxlcyhzdGF0ZSwgcmVzdWx0KTsK
IH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYgcmVz
dWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVz
ZXJSdWxlcyhTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQpCiB7
CiAgICAgaWYgKCFtX3VzZXJTdHlsZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fbWF0
Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKIAog
ICAgIHJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVz
LnNpemUoKSAtIDE7Ci0gICAgTWF0Y2hSZXF1ZXN0IG1hdGNoUmVxdWVzdChtX3VzZXJTdHlsZS5n
ZXQoKSwgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIFJ1bGVSYW5nZSBydWxlUmFuZ2UgPSByZXN1
bHQucmFuZ2VzLnVzZXJSdWxlUmFuZ2UoKTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRj
aFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24o
bWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1fdXNl
clN0eWxlLmdldCgpLCBzdGF0ZSwgcnVsZVJhbmdlKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxl
c0ZvclJlZ2lvbihtX3VzZXJTdHlsZS5nZXQoKSwgc3RhdGUsIHJ1bGVSYW5nZSk7CiAKLSAgICBz
b3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKKyAgICBzb3J0QW5kVHJhbnNmZXJN
YXRjaGVkUnVsZXMoc3RhdGUsIHJlc3VsdCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0
Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIFJ1bGVTZXQqIHJ1bGVzKQordm9pZCBTdHls
ZVJlc29sdmVyOjptYXRjaFVBUnVsZXMoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBNYXRjaFJl
c3VsdCYgcmVzdWx0LCBSdWxlU2V0KiBydWxlcykKIHsKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVh
cigpOworICAgIHN0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAgICAgCiAgICAgcmVzdWx0
LnJhbmdlcy5sYXN0VUFSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7
CiAgICAgUnVsZVJhbmdlIHJ1bGVSYW5nZSA9IHJlc3VsdC5yYW5nZXMuVUFSdWxlUmFuZ2UoKTsK
LSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QocnVsZXMpLCBydWxlUmFuZ2Up
OworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVzLCBzdGF0ZSwgcnVsZVJhbmdlKTsKIAot
ICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworICAgIHNvcnRBbmRUcmFu
c2Zlck1hdGNoZWRSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVy
Ojpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVs
ZXMsIGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBSdWxlUmFuZ2UmIHJ1bGVSYW5n
ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0
IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIFJ1bGVS
YW5nZSYgcnVsZVJhbmdlLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKIHsKICAgICBpZiAo
IXJ1bGVzKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBJbiBzb21lIGNhc2VzIHdlIG1heSBl
bmQgdXAgbG9va2luZyB1cCBzdHlsZSBmb3IgcmFuZG9tIGVsZW1lbnRzIGluIHRoZSBtaWRkbGUg
b2YgYSByZWN1cnNpdmUgdHJlZSByZXNvbHZlLgotICAgIC8vIEFuY2VzdG9yIGlkZW50aWZpZXIg
ZmlsdGVyIHdvbid0IGJlIHVwLXRvLWRhdGUgaW4gdGhhdCBjYXNlIGFuZCB3ZSBjYW4ndCB1c2Ug
dGhlIGZhc3QgcGF0aC4KLSAgICBib29sIGNhblVzZUZhc3RSZWplY3QgPSBtX3NlbGVjdG9yRmls
dGVyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KG1fcGFyZW50Tm9kZSk7Ci0KICAgICB1bnNpZ25l
ZCBzaXplID0gcnVsZXMtPnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7CiAgICAgICAgIGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSA9IHJ1bGVzLT5hdChp
KTsKLSAgICAgICAgaWYgKGNhblVzZUZhc3RSZWplY3QgJiYgbV9zZWxlY3RvckZpbHRlci5mYXN0
UmVqZWN0U2VsZWN0b3I8UnVsZURhdGE6Om1heGltdW1JZGVudGlmaWVyQ291bnQ+KHJ1bGVEYXRh
LmRlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoKSkpCisgICAgICAgIGlmIChzdGF0
ZS5jYW5Vc2VGYXN0UmVqZWN0KCkgJiYgbV9zZWxlY3RvckZpbHRlci5mYXN0UmVqZWN0U2VsZWN0
b3I8UnVsZURhdGE6Om1heGltdW1JZGVudGlmaWVyQ291bnQ+KHJ1bGVEYXRhLmRlc2NlbmRhbnRT
ZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICBTdHlsZVJ1bGUqIHJ1bGUgPSBydWxlRGF0YS5ydWxlKCk7CiAgICAgICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxNYXRjaFJ1bGUoZG9jdW1lbnQoKSwgcnVsZSwgdGhpcyk7Ci0gICAgICAgIGlmIChydWxl
TWF0Y2hlcyhydWxlRGF0YSwgbWF0Y2hSZXF1ZXN0LnNjb3BlKSkgeworICAgICAgICBQc2V1ZG9J
ZCBkeW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgICAgIGlmIChydWxlTWF0Y2hlcyhzdGF0
ZSwgcnVsZURhdGEsIHNjb3BlLCBkeW5hbWljUHNldWRvKSkgewogICAgICAgICAgICAgLy8gSWYg
dGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRpZXMgdG8gYXBwbHksIHRoZW4gaWdub3JlIGl0IGluIHRo
ZSBub24tZGVidWcgbW9kZS4KICAgICAgICAgICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHBy
b3BlcnRpZXMgPSBydWxlLT5wcm9wZXJ0aWVzKCk7Ci0gICAgICAgICAgICBpZiAoIXByb3BlcnRp
ZXMgfHwgKHByb3BlcnRpZXMtPmlzRW1wdHkoKSAmJiAhbWF0Y2hSZXF1ZXN0LmluY2x1ZGVFbXB0
eVJ1bGVzKSkgeworICAgICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzIHx8IChwcm9wZXJ0aWVzLT5p
c0VtcHR5KCkgJiYgIXN0YXRlLmluY2x1ZGVFbXB0eVJ1bGVzKCkpKSB7CiAgICAgICAgICAgICAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAv
LyBGSVhNRTogRXhwb3NpbmcgdGhlIG5vbi1zdGFuZGFyZCBnZXRNYXRjaGVkQ1NTUnVsZXMgQVBJ
IHRvIHdlYiBpcyB0aGUgb25seSByZWFzb24gdGhpcyBpcyBuZWVkZWQuCi0gICAgICAgICAgICBp
ZiAobV9zYW1lT3JpZ2luT25seSAmJiAhcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
bigpKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUuc2FtZU9yaWdpbk9ubHkoKSAmJiAhcnVsZURh
dGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSB7CiAgICAgICAgICAgICAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBJZiB3ZSdy
ZSBtYXRjaGluZyBub3JtYWwgcnVsZXMsIHNldCBhIHBzZXVkbyBiaXQgaWYKICAgICAgICAgICAg
IC8vIHdlIHJlYWxseSBqdXN0IG1hdGNoZWQgYSBwc2V1ZG8tZWxlbWVudC4KLSAgICAgICAgICAg
IGlmIChtX2R5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgbV9wc2V1ZG9TdHlsZSA9PSBOT1BT
RVVETykgewotICAgICAgICAgICAgICAgIGlmIChtX3NlbGVjdG9yQ2hlY2tlci5tb2RlKCkgPT0g
U2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpIHsKKyAgICAgICAgICAgIGlmIChkeW5h
bWljUHNldWRvICE9IE5PUFNFVURPICYmIHN0YXRlLnBzZXVkb1N0eWxlKCkgPT0gTk9QU0VVRE8p
IHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUubW9kZSgpID09IFNlbGVjdG9yQ2hlY2tlcjo6
Q29sbGVjdGluZ1J1bGVzKSB7CiAgICAgICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG1fZHlu
YW1pY1BzZXVkbyA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEKQotICAgICAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZShtX2R5bmFtaWNQc2V1ZG8pOworICAgICAgICAg
ICAgICAgIGlmIChkeW5hbWljUHNldWRvIDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQpCisgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc1BzZXVkb1N0eWxlKGR5bmFtaWNQ
c2V1ZG8pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBVcGRhdGUg
b3VyIGZpcnN0L2xhc3QgcnVsZSBpbmRpY2VzIGluIHRoZSBtYXRjaGVkIHJ1bGVzIGFycmF5Lgog
ICAgICAgICAgICAgICAgICsrcnVsZVJhbmdlLmxhc3RSdWxlSW5kZXg7CkBAIC04OTIsNyArODY4
LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29u
c3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGMKICAgICAgICAgICAgICAgICAgICAgcnVsZVJh
bmdlLmZpcnN0UnVsZUluZGV4ID0gcnVsZVJhbmdlLmxhc3RSdWxlSW5kZXg7CiAKICAgICAgICAg
ICAgICAgICAvLyBBZGQgdGhpcyBydWxlIHRvIG91ciBsaXN0IG9mIG1hdGNoZWQgcnVsZXMuCi0g
ICAgICAgICAgICAgICAgYWRkTWF0Y2hlZFJ1bGUoJnJ1bGVEYXRhKTsKKyAgICAgICAgICAgICAg
ICBhZGRNYXRjaGVkUnVsZShzdGF0ZSwgJnJ1bGVEYXRhKTsKICAgICAgICAgICAgICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIHRydWUpOwogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtOTA4LDMxICs4ODQsMzMgQEAg
c3RhdGljIGlubGluZSBib29sIGNvbXBhcmVSdWxlcyhjb25zdCBSdWxlRGF0YSogcjEsIGNvbnN0
IFJ1bGVEYXRhKiByMikKICAgICByZXR1cm4gKHNwZWNpZmljaXR5MSA9PSBzcGVjaWZpY2l0eTIp
ID8gcjEtPnBvc2l0aW9uKCkgPCByMi0+cG9zaXRpb24oKSA6IHNwZWNpZmljaXR5MSA8IHNwZWNp
ZmljaXR5MjsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0TWF0Y2hlZFJ1bGVzKCkKK3Zv
aWQgU3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRSdWxlcyhWZWN0b3I8Y29uc3QgUnVsZURhdGEq
LCAzMj4mIG1hdGNoZWRSdWxlcykKIHsKLSAgICBzdGQ6OnNvcnQobV9tYXRjaGVkUnVsZXMuYmVn
aW4oKSwgbV9tYXRjaGVkUnVsZXMuZW5kKCksIGNvbXBhcmVSdWxlcyk7CisgICAgc3RkOjpzb3J0
KG1hdGNoZWRSdWxlcy5iZWdpbigpLCBtYXRjaGVkUnVsZXMuZW5kKCksIGNvbXBhcmVSdWxlcyk7
CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYgcmVz
dWx0LCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGllcykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0
Y2hBbGxSdWxlcyhTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQs
IGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWVzKQogewotICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQp
OworICAgIG1hdGNoVUFSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKKyAgICAvLyAuLi4uIGJhZD8KKyAg
ICBzdGF0ZS5zZXRJbmNsdWRlRW1wdHlSdWxlcyhmYWxzZSk7CiAKICAgICAvLyBOb3cgd2UgY2hl
Y2sgdXNlciBzaGVldCBydWxlcy4KICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMp
Ci0gICAgICAgIG1hdGNoVXNlclJ1bGVzKHJlc3VsdCwgZmFsc2UpOwotICAgICAgICAKKyAgICAg
ICAgbWF0Y2hVc2VyUnVsZXMoc3RhdGUsIHJlc3VsdCk7CisKICAgICAvLyBOb3cgY2hlY2sgYXV0
aG9yIHJ1bGVzLCBiZWdpbm5pbmcgZmlyc3Qgd2l0aCBwcmVzZW50YXRpb25hbCBhdHRyaWJ1dGVz
IG1hcHBlZCBmcm9tIEhUTUwuCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudCkgewotICAgICAgICBh
ZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdHlsZWRFbGVtZW50LT5wcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgpKSB7
CisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBzdGF0ZS5zdHlsZWRF
bGVtZW50KCktPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOwogCiAgICAgICAgIC8vIE5v
dyB3ZSBjaGVjayBhZGRpdGlvbmFsIG1hcHBlZCBkZWNsYXJhdGlvbnMuCiAgICAgICAgIC8vIFRh
YmxlcyBhbmQgdGFibGUgY2VsbHMgc2hhcmUgYW4gYWRkaXRpb25hbCBtYXBwZWQgcnVsZSB0aGF0
IG11c3QgYmUgYXBwbGllZAogICAgICAgICAvLyBhZnRlciBhbGwgYXR0cmlidXRlcywgc2luY2Ug
dGhlaXIgbWFwcGVkIHN0eWxlIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBvZiBtdWx0aXBsZSBhdHRy
aWJ1dGVzLgotICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdHls
ZWRFbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CisgICAg
ICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBzdGF0ZS5zdHlsZWRFbGVtZW50
KCktPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKIAotICAgICAgICBp
ZiAobV9zdHlsZWRFbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKHN0YXRl
LmVsZW1lbnQoKS0+aXNIVE1MRWxlbWVudCgpKSB7CiAgICAgICAgICAgICBib29sIGlzQXV0bzsK
LSAgICAgICAgICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IHRvSFRNTEVsZW1lbnQo
bV9zdHlsZWRFbGVtZW50KS0+ZGlyZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoaXNB
dXRvKTsKKyAgICAgICAgICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IHRvSFRNTEVs
ZW1lbnQoc3RhdGUuZWxlbWVudCgpKS0+ZGlyZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1
dGUoaXNBdXRvKTsKICAgICAgICAgICAgIGlmIChpc0F1dG8pCiAgICAgICAgICAgICAgICAgYWRk
TWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCB0ZXh0RGlyZWN0aW9uID09IExUUiA/IGxlZnRUb1Jp
Z2h0RGVjbGFyYXRpb24oKSA6IHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKSk7CiAgICAgICAgIH0K
QEAgLTk0MCwyMSArOTE4LDIxIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBbGxSdWxlcyhN
YXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGllCiAgICAgCiAgICAg
Ly8gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVldHMgbmV4dC4KICAgICBpZiAobV9tYXRj
aEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAgICAgIG1hdGNoQXV0aG9yUnVsZXMocmVzdWx0LCBm
YWxzZSk7CisgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoc3RhdGUsIHJlc3VsdCk7CiAKICAgICAv
LyBOb3cgY2hlY2sgb3VyIGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCi0gICAgaWYgKG1fbWF0Y2hB
dXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3R5bGVkRWxlbWVudCAmJiBtX3N0eWxlZEVsZW1lbnQt
PmlubGluZVN0eWxlKCkpIHsKKyAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYg
c3RhdGUuc3R5bGVkRWxlbWVudCgpICYmIHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aW5saW5lU3R5
bGUoKSkgewogICAgICAgICAvLyBJbmxpbmUgc3R5bGUgaXMgaW1tdXRhYmxlIGFzIGxvbmcgYXMg
dGhlcmUgaXMgbm8gQ1NTT00gd3JhcHBlci4KICAgICAgICAgLy8gRklYTUU6IE1lZGlhIGNvbnRy
b2wgc2hhZG93IHRyZWVzIHNlZW0gdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIGNhY2hpbmcuCi0gICAg
ICAgIGJvb2wgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSA9ICFtX3N0eWxlZEVsZW1lbnQtPmlubGlu
ZVN0eWxlKCktPmlzTXV0YWJsZSgpICYmICFtX3N0eWxlZEVsZW1lbnQtPmlzSW5TaGFkb3dUcmVl
KCk7CisgICAgICAgIGJvb2wgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSA9ICFzdGF0ZS5zdHlsZWRF
bGVtZW50KCktPmlubGluZVN0eWxlKCktPmlzTXV0YWJsZSgpICYmICFzdGF0ZS5zdHlsZWRFbGVt
ZW50KCktPmlzSW5TaGFkb3dUcmVlKCk7CiAgICAgICAgIC8vIEZJWE1FOiBDb25zdGlmeS4KLSAg
ICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3R5bGVkRWxlbWVudC0+
aW5saW5lU3R5bGUoKSwgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSk7CisgICAgICAgIGFkZEVsZW1l
bnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlubGluZVN0
eWxlKCksIGlzSW5saW5lU3R5bGVDYWNoZWFibGUpOwogICAgIH0KIAogI2lmIEVOQUJMRShTVkcp
CiAgICAgLy8gTm93IGNoZWNrIFNNSUwgYW5pbWF0aW9uIG92ZXJyaWRlIHN0eWxlLgotICAgIGlm
IChpbmNsdWRlU01JTFByb3BlcnRpZXMgJiYgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYg
bV9zdHlsZWRFbGVtZW50ICYmIG1fc3R5bGVkRWxlbWVudC0+aXNTVkdFbGVtZW50KCkpCi0gICAg
ICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBzdGF0aWNfY2FzdDxTVkdFbGVt
ZW50Kj4obV9zdHlsZWRFbGVtZW50KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCksIGZh
bHNlIC8qIGlzQ2FjaGVhYmxlICovKTsKKyAgICBpZiAoaW5jbHVkZVNNSUxQcm9wZXJ0aWVzICYm
IG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIHN0YXRlLnN0eWxlZEVsZW1lbnQoKSAmJiBz
dGF0ZS5lbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpKQorICAgICAgICBhZGRFbGVtZW50U3R5bGVQ
cm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHN0YXRlLmVsZW1lbnQo
KSktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpLCBmYWxzZSAvKiBpc0NhY2hlYWJsZSAq
Lyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlU01JTFByb3BlcnRpZXMpOwogI2Vu
ZGlmCkBAIC05NjksNDcgKzk0NywzOCBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNsYXNzTmFtZXNB
ZmZlY3RlZEJ5UnVsZXMoY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NOYW1lcwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEVsZW1lbnQo
RWxlbWVudCogZSkKK2lubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KFN0eWxl
UmVzb2x2ZVN0YXRlJiBzdGF0ZSwgRWxlbWVudCogZSkKIHsKLSAgICBpZiAobV9lbGVtZW50ICE9
IGUpIHsKLSAgICAgICAgbV9lbGVtZW50ID0gZTsKLSAgICAgICAgbV9zdHlsZWRFbGVtZW50ID0g
bV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxT
dHlsZWRFbGVtZW50Kj4obV9lbGVtZW50KSA6IDA7Ci0gICAgICAgIG1fZWxlbWVudExpbmtTdGF0
ZSA9IGRvY3VtZW50KCktPnZpc2l0ZWRMaW5rU3RhdGUoKS0+ZGV0ZXJtaW5lTGlua1N0YXRlKG1f
ZWxlbWVudCk7Ci0gICAgICAgIGlmIChlICYmIGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRF
bGVtZW50KCkpIHsKLSAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldERpcmVjdGlvblNldE9u
RG9jdW1lbnRFbGVtZW50KGZhbHNlKTsKLSAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldFdy
aXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOwotICAgICAgICB9CisgICAgc3Rh
dGUuc2V0RWxlbWVudChlKTsKKyAgICBzdGF0ZS5zZXRFbGVtZW50TGlua1N0YXRlKGRvY3VtZW50
KCktPnZpc2l0ZWRMaW5rU3RhdGUoKS0+ZGV0ZXJtaW5lTGlua1N0YXRlKGUpKTsKKyAgICBpZiAo
ZSAmJiBlID09IGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKSB7CisgICAgICAgIGUt
PmRvY3VtZW50KCktPnNldERpcmVjdGlvblNldE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsKKyAg
ICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudChm
YWxzZSk7CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0Rm9yU3R5
bGVSZXNvbHZlKEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUHNldWRvSWQg
cHNldWRvSUQpCitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0Rm9yU3R5bGVSZXNvbHZl
KFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlKQogewotICAgIG1fcHNldWRvU3R5bGUgPSBwc2V1ZG9JRDsKLQogICAgIGlmIChlKSB7
CiAgICAgICAgIE5vZGVSZW5kZXJpbmdDb250ZXh0IGNvbnRleHQoZSk7Ci0gICAgICAgIG1fcGFy
ZW50Tm9kZSA9IGNvbnRleHQucGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlKCk7Ci0gICAg
ICAgIG1fcGFyZW50U3R5bGUgPSBjb250ZXh0LnJlc2V0U3R5bGVJbmhlcml0YW5jZSgpID8gMCA6
CisgICAgICAgIHN0YXRlLnNldFBhcmVudE5vZGUoY29udGV4dC5wYXJlbnROb2RlRm9yUmVuZGVy
aW5nQW5kU3R5bGUoKSk7CisgICAgICAgIHN0YXRlLnNldFBhcmVudFN0eWxlKGNvbnRleHQucmVz
ZXRTdHlsZUluaGVyaXRhbmNlKCkgPyAwIDoKICAgICAgICAgICAgIHBhcmVudFN0eWxlID8gcGFy
ZW50U3R5bGUgOgotICAgICAgICAgICAgbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5yZW5k
ZXJTdHlsZSgpIDogMDsKLSAgICAgICAgbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQgPSBj
b250ZXh0Lmluc2VydGlvblBvaW50KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9wYXJlbnRO
b2RlID0gMDsKLSAgICAgICAgbV9wYXJlbnRTdHlsZSA9IHBhcmVudFN0eWxlOwotICAgICAgICBt
X2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCA9IGZhbHNlOwotICAgIH0KKyAgICAgICAgICAg
IHN0YXRlLnBhcmVudE5vZGUoKSA/IHN0YXRlLnBhcmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKSA6
IDApOworICAgICAgICBzdGF0ZS5zZXREaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQoY29udGV4
dC5pbnNlcnRpb25Qb2ludCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc3RhdGUuc2V0UGFyZW50
U3R5bGUocGFyZW50U3R5bGUpOwogCisgICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBtYXkgZW5kIHVw
IGxvb2tpbmcgdXAgc3R5bGUgZm9yIHJhbmRvbSBlbGVtZW50cyBpbiB0aGUgbWlkZGxlIG9mIGEg
cmVjdXJzaXZlIHRyZWUgcmVzb2x2ZS4KKyAgICAvLyBBbmNlc3RvciBpZGVudGlmaWVyIGZpbHRl
ciB3b24ndCBiZSB1cC10by1kYXRlIGluIHRoYXQgY2FzZSBhbmQgd2UgY2FuJ3QgdXNlIHRoZSBm
YXN0IHBhdGguCisgICAgc3RhdGUuc2V0Q2FuVXNlRmFzdFJlamVjdChtX3NlbGVjdG9yRmlsdGVy
LnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KHN0YXRlLnBhcmVudE5vZGUoKSkpOworICAgIAogICAg
IE5vZGUqIGRvY0VsZW1lbnQgPSBlID8gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkg
OiAwOwogICAgIFJlbmRlclN0eWxlKiBkb2NTdHlsZSA9IGRvY3VtZW50KCktPnJlbmRlclN0eWxl
KCk7Ci0gICAgbV9yb290RWxlbWVudFN0eWxlID0gZG9jRWxlbWVudCAmJiBlICE9IGRvY0VsZW1l
bnQgPyBkb2NFbGVtZW50LT5yZW5kZXJTdHlsZSgpIDogZG9jU3R5bGU7CisgICAgc3RhdGUuc2V0
Um9vdEVsZW1lbnRTdHlsZShkb2NFbGVtZW50ICYmIGUgIT0gZG9jRWxlbWVudCA/IGRvY0VsZW1l
bnQtPnJlbmRlclN0eWxlKCkgOiBkb2NTdHlsZSk7CiAKLSAgICBtX3N0eWxlID0gMDsKLQotICAg
IG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigpOwotCi0gICAgbV9ydWxlTGlzdCA9IDA7
Ci0KLSAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOworICAgIHN0YXRlLnBlbmRpbmdJbWFnZVByb3Bl
cnRpZXMoKS5jbGVhcigpOworICAgIHN0YXRlLnNldEZvbnREaXJ0eShmYWxzZSk7CiB9CiAKIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBjU3R5bGVTZWFyY2hUaHJlc2hvbGQgPSAxMDsKQEAgLTEwNjAs
MjcgKzEwMjksMjQgQEAgTm9kZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlQ291c2luTGlzdChFbGVt
ZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW4KICAgICByZXR1cm4gMDsKIH0K
IAotYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNl
dChSdWxlU2V0KiBydWxlU2V0KQorYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5k
aWRhdGVNYXRjaGVzUnVsZVNldChFbGVtZW50KiBlbGVtZW50LCBSdWxlU2V0KiBydWxlU2V0KQog
ewogICAgIGlmICghcnVsZVNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbWF0Y2hl
ZFJ1bGVzLmNsZWFyKCk7CiAKLSAgICBtX3NlbGVjdG9yQ2hlY2tlci5zZXRNb2RlKFNlbGVjdG9y
Q2hlY2tlcjo6U2hhcmluZ1J1bGVzKTsKICAgICBpbnQgZmlyc3RSdWxlSW5kZXggPSAtMSwgbGFz
dFJ1bGVJbmRleCA9IC0xOwogICAgIFJ1bGVSYW5nZSBydWxlUmFuZ2UoZmlyc3RSdWxlSW5kZXgs
IGxhc3RSdWxlSW5kZXgpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1hdGNoUmVxdWVzdChy
dWxlU2V0KSwgcnVsZVJhbmdlKTsKLSAgICBtX3NlbGVjdG9yQ2hlY2tlci5zZXRNb2RlKFNlbGVj
dG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpOwotICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigp
OwotICAgIHJldHVybiB0cnVlOworICAgIFN0eWxlUmVzb2x2ZVN0YXRlIHN0YXRlOworICAgIHN0
YXRlLnNldEVsZW1lbnQoZWxlbWVudCk7CisgICAgc3RhdGUuc2V0TW9kZShTZWxlY3RvckNoZWNr
ZXI6OlNoYXJpbmdSdWxlcyk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMocnVsZVNldCwgc3Rh
dGUsIHJ1bGVSYW5nZSk7CisgICAgcmV0dXJuICFzdGF0ZS5tYXRjaGVkUnVsZXMoKS5pc0VtcHR5
KCk7CiB9CiAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKFN0
eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Citib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJl
U3R5bGVXaXRoQ29udHJvbChFbGVtZW50KiBlbGVtZW50LCBTdHlsZWRFbGVtZW50KiBzaGFyaW5n
Q2FuZGlkYXRlKSBjb25zdAogewotICAgIEhUTUxJbnB1dEVsZW1lbnQqIHRoaXNJbnB1dEVsZW1l
bnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIG90
aGVySW5wdXRFbGVtZW50ID0gbV9lbGVtZW50LT50b0lucHV0RWxlbWVudCgpOworICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIHRoaXNJbnB1dEVsZW1lbnQgPSBzaGFyaW5nQ2FuZGlkYXRlLT50b0lucHV0
RWxlbWVudCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIG90aGVySW5wdXRFbGVtZW50ID0gZWxl
bWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKIAogICAgIGlmICghdGhpc0lucHV0RWxlbWVudCB8fCAh
b3RoZXJJbnB1dEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExMDEsMjUgKzEw
NjcsMjUgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5
bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+aXNS
ZXF1aXJlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LT5pc1JlcXVpcmVkKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpICE9
IG1fZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRp
ZGF0ZS0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSAhPSBlbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29u
dHJvbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNEZWZh
dWx0QnV0dG9uRm9yRm9ybSgpICE9IG1fZWxlbWVudC0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgp
KQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgIT0g
ZWxlbWVudC0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAobV9lbGVtZW50LT5kb2N1bWVudCgpLT5jb250YWluc1ZhbGlkaXR5U3R5bGVS
dWxlcygpKSB7Ci0gICAgICAgIGJvb2wgd2lsbFZhbGlkYXRlID0gZWxlbWVudC0+d2lsbFZhbGlk
YXRlKCk7CisgICAgaWYgKGVsZW1lbnQtPmRvY3VtZW50KCktPmNvbnRhaW5zVmFsaWRpdHlTdHls
ZVJ1bGVzKCkpIHsKKyAgICAgICAgYm9vbCB3aWxsVmFsaWRhdGUgPSBzaGFyaW5nQ2FuZGlkYXRl
LT53aWxsVmFsaWRhdGUoKTsKIAotICAgICAgICBpZiAod2lsbFZhbGlkYXRlICE9IG1fZWxlbWVu
dC0+d2lsbFZhbGlkYXRlKCkpCisgICAgICAgIGlmICh3aWxsVmFsaWRhdGUgIT0gZWxlbWVudC0+
d2lsbFZhbGlkYXRlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYg
KHdpbGxWYWxpZGF0ZSAmJiAoZWxlbWVudC0+aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpICE9
IG1fZWxlbWVudC0+aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpKSkKKyAgICAgICAgaWYgKHdp
bGxWYWxpZGF0ZSAmJiAoc2hhcmluZ0NhbmRpZGF0ZS0+aXNWYWxpZEZvcm1Db250cm9sRWxlbWVu
dCgpICE9IGVsZW1lbnQtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKGVsZW1lbnQtPmlzSW5SYW5nZSgpICE9IG1f
ZWxlbWVudC0+aXNJblJhbmdlKCkpCisgICAgICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5pc0lu
UmFuZ2UoKSAhPSBlbGVtZW50LT5pc0luUmFuZ2UoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICBpZiAoZWxlbWVudC0+aXNPdXRPZlJhbmdlKCkgIT0gbV9lbGVtZW50LT5p
c091dE9mUmFuZ2UoKSkKKyAgICAgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmlzT3V0T2ZSYW5n
ZSgpICE9IGVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIApAQCAtMTEzMiwyNyArMTA5OCwyNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZWxl
bWVudEhhc0RpcmVjdGlvbkF1dG8oRWxlbWVudCogZWxlbWVudCkKICAgICByZXR1cm4gZWxlbWVu
dC0+aXNIVE1MRWxlbWVudCgpICYmIHRvSFRNTEVsZW1lbnQoZWxlbWVudCktPmhhc0RpcmVjdGlv
bkF1dG8oKTsKIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRl
bnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdDYW5k
aWRhdGUpIGNvbnN0Citib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVu
dGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBF
bGVtZW50KiBlbGVtZW50LCBTdHlsZWRFbGVtZW50KiBzaGFyaW5nQ2FuZGlkYXRlKSBjb25zdAog
ewotICAgIGlmIChtX2VsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKSA9PSBzaGFyaW5nQ2FuZGlkYXRl
LT5hdHRyaWJ1dGVEYXRhKCkpCisgICAgaWYgKGVsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKSA9PSBz
aGFyaW5nQ2FuZGlkYXRlLT5hdHRyaWJ1dGVEYXRhKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIGlmIChtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSAh
PSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikp
CisgICAgaWYgKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSAh
PSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9lbGVtZW50LT5mYXN0R2V0QXR0cmli
dXRlKGxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0cmlidXRlKGxhbmdB
dHRyKSkKKyAgICBpZiAoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikgIT0gc2hh
cmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmICghbV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMpIHsKKyAg
ICBpZiAoIXN0YXRlLmVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcygpKSB7CiAgICAgICAgIGlm
IChzaGFyaW5nQ2FuZGlkYXRlLT5oYXNDbGFzcygpICYmIGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVs
ZXMoc2hhcmluZ0NhbmRpZGF0ZS0+Y2xhc3NOYW1lcygpKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9IGVsc2UgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmhhc0NsYXNzKCkpIHsKICNp
ZiBFTkFCTEUoU1ZHKQogICAgICAgICAvLyBTVkcgZWxlbWVudHMgcmVxdWlyZSBhIChzbG93ISkg
Z2V0QXR0cmlidXRlIGNvbXBhcmlzaW9uIGJlY2F1c2UgImNsYXNzIiBpcyBhbiBhbmltYXRhYmxl
IGF0dHJpYnV0ZSBmb3IgU1ZHLgotICAgICAgICBpZiAobV9lbGVtZW50LT5pc1NWR0VsZW1lbnQo
KSkgewotICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikg
IT0gc2hhcmluZ0NhbmRpZGF0ZS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikpCisgICAgICAgIGlm
IChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmdl
dEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmdldEF0dHJpYnV0ZShj
bGFzc0F0dHIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBlbHNl
IHsKICNlbmRpZgotICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+Y2xhc3NOYW1lcygpICE9IHNo
YXJpbmdDYW5kaWRhdGUtPmNsYXNzTmFtZXMoKSkKKyAgICAgICAgICAgIGlmIChlbGVtZW50LT5j
bGFzc05hbWVzKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Y2xhc3NOYW1lcygpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICB9CkBAIC0xMTYw
LDEyICsxMTI2LDEyIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lk
ZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFCiAgICAgfSBlbHNlCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPnByZXNlbnRhdGlv
bkF0dHJpYnV0ZVN0eWxlKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+cHJlc2VudGF0aW9uQXR0cmli
dXRlU3R5bGUoKSkKKyAgICBpZiAodG9TdHlsZWRFbGVtZW50KGVsZW1lbnQpLT5wcmVzZW50YXRp
b25BdHRyaWJ1dGVTdHlsZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUtPnByZXNlbnRhdGlvbkF0dHJp
YnV0ZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIEVOQUJMRShQUk9HUkVT
U19FTEVNRU5UKQotICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcpKSB7
Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50Kj4obV9lbGVtZW50
KS0+aXNEZXRlcm1pbmF0ZSgpICE9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihz
aGFyaW5nQ2FuZGlkYXRlKS0+aXNEZXRlcm1pbmF0ZSgpKQorICAgIGlmIChlbGVtZW50LT5oYXNU
YWdOYW1lKHByb2dyZXNzVGFnKSkgeworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8SFRNTFByb2dy
ZXNzRWxlbWVudCo+KGVsZW1lbnQpLT5pc0RldGVybWluYXRlKCkgIT0gc3RhdGljX2Nhc3Q8SFRN
TFByb2dyZXNzRWxlbWVudCo+KHNoYXJpbmdDYW5kaWRhdGUpLT5pc0RldGVybWluYXRlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogI2VuZGlmCkBAIC0xMTczLDU4ICsxMTM5
LDU5IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0
eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQq
IGVsZW1lbnQpIGNvbnN0Citib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxl
bWVudChTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdDYW5k
aWRhdGUpIGNvbnN0CiB7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC0+cmVuZGVy
U3R5bGUoKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGUuZWxlbWVudCgpOworICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9IHNoYXJpbmdDYW5kaWRhdGUtPnJlbmRlclN0eWxlKCk7CiAKICAg
ICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKHN0eWxlLT51bmlx
dWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT50YWdRTmFtZSgp
ICE9IG1fZWxlbWVudC0+dGFnUU5hbWUoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+dGFn
UU5hbWUoKSAhPSBlbGVtZW50LT50YWdRTmFtZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKGVsZW1lbnQtPmlubGluZVN0eWxlKCkpCisgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUt
PmlubGluZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+
bmVlZHNTdHlsZVJlY2FsYygpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5uZWVkc1N0eWxl
UmVjYWxjKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNpZiBFTkFCTEUoU1ZHKQotICAgIGlm
IChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oZWxl
bWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQorICAgIGlmIChzaGFyaW5nQ2Fu
ZGlkYXRlLT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oZWxlbWVu
dCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAjZW5kaWYKLSAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkgIT0gbV9lbGVtZW50LT5pc0xpbmso
KSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aXNMaW5rKCkgIT0gZWxlbWVudC0+aXNMaW5r
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+aG92ZXJlZCgpICE9
IG1fZWxlbWVudC0+aG92ZXJlZCgpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5ob3ZlcmVk
KCkgIT0gZWxlbWVudC0+aG92ZXJlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KGVsZW1lbnQtPmFjdGl2ZSgpICE9IG1fZWxlbWVudC0+YWN0aXZlKCkpCisgICAgaWYgKHNoYXJp
bmdDYW5kaWRhdGUtPmFjdGl2ZSgpICE9IGVsZW1lbnQtPmFjdGl2ZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmZvY3VzZWQoKSAhPSBtX2VsZW1lbnQtPmZvY3Vz
ZWQoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+Zm9jdXNlZCgpICE9IGVsZW1lbnQtPmZv
Y3VzZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5zaGFkb3dQ
c2V1ZG9JZCgpICE9IG1fZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKSkKKyAgICBpZiAoc2hhcmlu
Z0NhbmRpZGF0ZS0+c2hhZG93UHNldWRvSWQoKSAhPSBlbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9j
dW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCisgICAgaWYgKGVsZW1lbnQgPT0gc2hhcmluZ0NhbmRpZGF0
ZS0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoIXNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMo
ZWxlbWVudCkpCisgICAgaWYgKCFzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZl
Y3RpbmdBdHRyaWJ1dGVzKHN0YXRlLCBlbGVtZW50LCBzaGFyaW5nQ2FuZGlkYXRlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9u
QXR0cmlidXRlU3R5bGUoKSAhPSBtX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRp
b25BdHRyaWJ1dGVTdHlsZSgpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5hZGRpdGlvbmFs
UHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmFk
ZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMu
Y29udGFpbnMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQorICAgIGlm
IChzaGFyaW5nQ2FuZGlkYXRlLT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250
YWlucyhzaGFyaW5nQ2FuZGlkYXRlLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxl
Q2hpbGQoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hp
bGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBz
aGFyZSBzdHlsZSBmb3Igb3B0aW9uIGFuZCBvcHRncm91cCB3aGVuZXZlciBwb3NzaWJsZS4KICAg
ICAvLyBCZWZvcmUgZG9pbmcgc28sIHdlIG5lZWQgdG8gcmVzb2x2ZSBpc3N1ZXMgaW4gSFRNTFNl
bGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcwogICAgIC8vIGFuZCBSZW5kZXJNZW51TGlzdDo6
c2V0VGV4dC4gU2VlIGFsc28gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg4NDA1Ci0gICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUob3B0aW9uVGFnKSB8fCBlbGVtZW50
LT5oYXNUYWdOYW1lKG9wdGdyb3VwVGFnKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aGFz
VGFnTmFtZShvcHRpb25UYWcpIHx8IHNoYXJpbmdDYW5kaWRhdGUtPmhhc1RhZ05hbWUob3B0Z3Jv
dXBUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBib29sIGlzQ29udHJvbCA9IGVs
ZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CisgICAgYm9vbCBpc0NvbnRyb2wgPSBzaGFy
aW5nQ2FuZGlkYXRlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpOwogCi0gICAgaWYgKGlzQ29udHJv
bCAhPSBtX2VsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgaWYgKGlzQ29udHJv
bCAhPSBlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAoaXNDb250cm9sICYmICFjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woZWxl
bWVudCkpCisgICAgaWYgKGlzQ29udHJvbCAmJiAhY2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKGVs
ZW1lbnQsIHNoYXJpbmdDYW5kaWRhdGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBp
ZiAoc3R5bGUtPnRyYW5zaXRpb25zKCkgfHwgc3R5bGUtPmFuaW1hdGlvbnMoKSkKQEAgLTEyMzMs
MTAgKzEyMDAsMTAgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1l
bnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAgICAgLy8gVHVybiBvZmYgc3R5bGUgc2hhcmluZyBmb3IgZWxlbWVudHMgdGhh
dCBjYW4gZ2FpbiBsYXllcnMgZm9yIHJlYXNvbnMgb3V0c2lkZSBvZiB0aGUgc3R5bGUgc3lzdGVt
LgogICAgIC8vIFNlZSBjb21tZW50cyBpbiBSZW5kZXJPYmplY3Q6OnNldFN0eWxlKCkuCi0gICAg
aWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1l
KGZyYW1lVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBlbGVtZW50LT5o
YXNUYWdOYW1lKG9iamVjdFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8
IGVsZW1lbnQtPmhhc1RhZ05hbWUoY2FudmFzVGFnKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRl
LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykgfHwgc2hhcmluZ0NhbmRpZGF0ZS0+aGFzVGFnTmFtZShm
cmFtZVRhZykgfHwgc2hhcmluZ0NhbmRpZGF0ZS0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgc2hh
cmluZ0NhbmRpZGF0ZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpIHx8IHNoYXJpbmdDYW5kaWRhdGUt
Pmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBzaGFyaW5nQ2FuZGlkYXRlLT5oYXNUYWdOYW1lKGNh
bnZhc1RhZykKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKICAgICAgICAgLy8g
V2l0aCBwcm94eWluZywgdGhlIG1lZGlhIGVsZW1lbnRzIGFyZSBiYWNrZWQgYnkgYSBSZW5kZXJF
bWJlZGRlZE9iamVjdC4KLSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZSh2aWRlb1RhZykg
fHwgZWxlbWVudC0+aGFzVGFnTmFtZShhdWRpb1RhZykKKyAgICAgICAgfHwgc2hhcmluZ0NhbmRp
ZGF0ZS0+aGFzVGFnTmFtZSh2aWRlb1RhZykgfHwgc2hhcmluZ0NhbmRpZGF0ZS0+aGFzVGFnTmFt
ZShhdWRpb1RhZykKICNlbmRpZgogICAgICAgICApCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTEyNDUsMzEgKzEyMTIsMzEgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0
aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICBpZiAoZWxlbWVudEhh
c0RpcmVjdGlvbkF1dG8oZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlm
IChlbGVtZW50LT5pc0xpbmsoKSAmJiBtX2VsZW1lbnRMaW5rU3RhdGUgIT0gc3R5bGUtPmluc2lk
ZUxpbmsoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aXNMaW5rKCkgJiYgc3RhdGUuZWxl
bWVudExpbmtTdGF0ZSgpICE9IHN0eWxlLT5pbnNpZGVMaW5rKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICAvLyBEZW55IHNoYXJpbmcgc3R5
bGVzIGJldHdlZW4gV2ViVlRUIGFuZCBub24tV2ViVlRUIG5vZGVzLgotICAgIGlmIChlbGVtZW50
LT5pc1dlYlZUVEVsZW1lbnQoKSAhPSBtX2VsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpKQorICAg
IGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5pc1dlYlZUVEVsZW1lbnQoKSAhPSBlbGVtZW50LT5pc1dl
YlZUVEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQt
PmlzV2ViVlRURWxlbWVudCgpICYmIG1fZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYgdG9X
ZWJWVFRFbGVtZW50KGVsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpICE9IHRvV2ViVlRURWxlbWVu
dChtX2VsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRl
LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiBlbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiB0b1dl
YlZUVEVsZW1lbnQoZWxlbWVudCktPndlYlZUVE5vZGVUeXBlKCkgIT0gdG9XZWJWVFRFbGVtZW50
KGVsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5k
aWYKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBpZiAoZWxlbWVudCA9PSBlbGVt
ZW50LT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSB8fCBtX2Vs
ZW1lbnQgPT0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVs
ZW1lbnQoKSkKKyAgICBpZiAoZWxlbWVudCA9PSBzaGFyaW5nQ2FuZGlkYXRlLT5kb2N1bWVudCgp
LT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSB8fCBlbGVtZW50ID09IGVsZW1lbnQt
PmRvY3VtZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIFN0eWxl
ZEVsZW1lbnQqIFN0eWxlUmVzb2x2ZXI6OmZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUq
IG5vZGUsIHVuc2lnbmVkJiBjb3VudCkgY29uc3QKK2lubGluZSBTdHlsZWRFbGVtZW50KiBTdHls
ZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhTdHlsZVJlc29sdmVTdGF0ZSYg
c3RhdGUsIE5vZGUqIG5vZGUsIHVuc2lnbmVkJiBjb3VudCkgY29uc3QKIHsKICAgICBmb3IgKDsg
bm9kZTsgbm9kZSA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgIGlmICghbm9k
ZS0+aXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYg
KGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9k
ZSkpKQorICAgICAgICBpZiAoY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KHN0YXRlLCBzdGF0aWNf
Y2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGlmIChjb3VudCsrID09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkKICAgICAgICAgICAgIHJldHVy
biAwOwpAQCAtMTI4Nyw0MCArMTI1NCw0MSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGFyZW50RWxl
bWVudFByZXZlbnRzU2hhcmluZyhjb25zdCBFbGVtZW50KiBwYXJlbnRFbGVtZW50KQogICAgICAg
ICB8fCBwYXJlbnRFbGVtZW50LT5jaGlsZHJlbkFmZmVjdGVkQnlEaXJlY3RBZGphY2VudFJ1bGVz
KCk7CiB9CiAKLVJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgp
CitSZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoU3R5bGVSZXNv
bHZlU3RhdGUmIHN0YXRlKQogewotICAgIGlmICghbV9zdHlsZWRFbGVtZW50IHx8ICFtX3BhcmVu
dFN0eWxlKQorICAgIGlmICghc3RhdGUuc3R5bGVkRWxlbWVudCgpIHx8ICFzdGF0ZS5wYXJlbnRT
dHlsZSgpKQogICAgICAgICByZXR1cm4gMDsKKwogICAgIC8vIElmIHRoZSBlbGVtZW50IGhhcyBp
bmxpbmUgc3R5bGUgaXQgaXMgcHJvYmFibHkgdW5pcXVlLgotICAgIGlmIChtX3N0eWxlZEVsZW1l
bnQtPmlubGluZVN0eWxlKCkpCisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aW5saW5l
U3R5bGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAjaWYgRU5BQkxFKFNWRykKLSAgICBpZiAobV9z
dHlsZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4o
bV9zdHlsZWRFbGVtZW50KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCisgICAgaWYg
KHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZH
RWxlbWVudCo+KHN0YXRlLnN0eWxlZEVsZW1lbnQoKSktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVy
dGllcygpKQogICAgICAgICByZXR1cm4gMDsKICNlbmRpZgogICAgIC8vIElkcyBzdG9wIHN0eWxl
IHNoYXJpbmcgaWYgdGhleSBzaG93IHVwIGluIHRoZSBzdHlsZXNoZWV0cy4KLSAgICBpZiAobV9z
dHlsZWRFbGVtZW50LT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyht
X3N0eWxlZEVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKKyAgICBpZiAo
c3RhdGUuc3R5bGVkRWxlbWVudCgpLT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5j
b250YWlucyhzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1w
bCgpKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1No
YXJpbmcobV9lbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpKQorICAgIGlmIChwYXJlbnRFbGVtZW50
UHJldmVudHNTaGFyaW5nKHN0YXRlLmVsZW1lbnQoKS0+cGFyZW50RWxlbWVudCgpKSkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxl
Q2hpbGQoKSkKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5oYXNTY29wZWRIVE1MU3R5
bGVDaGlsZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAobV9lbGVtZW50ID09IG1fZWxl
bWVudC0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCisgICAgaWYgKHN0YXRlLmVsZW1lbnQoKSA9
PSBzdGF0ZS5kb2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
aWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKG1fZWxlbWVudCkpCisgICAgaWYgKGVsZW1lbnRI
YXNEaXJlY3Rpb25BdXRvKHN0YXRlLmVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgLy8gQ2FjaGUgd2hldGhlciBtX2VsZW1lbnQgaXMgYWZmZWN0ZWQgYnkgYW55IGtub3duIGNs
YXNzIHNlbGVjdG9ycy4KICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgYSBtZW1iZXIg
dmFyaWFibGUuIFRoZSBzdHlsZSBzaGFyaW5nIGNvZGUgY291bGQgYmUgZmFjdG9yZWQgb3V0IG9m
IFN0eWxlUmVzb2x2ZXIuCi0gICAgbV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMgPSBtX2Vs
ZW1lbnQgJiYgbV9lbGVtZW50LT5oYXNDbGFzcygpICYmIGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVs
ZXMobV9lbGVtZW50LT5jbGFzc05hbWVzKCkpOworICAgIHN0YXRlLnNldEVsZW1lbnRBZmZlY3Rl
ZEJ5Q2xhc3NSdWxlcyhzdGF0ZS5lbGVtZW50KCkgJiYgc3RhdGUuZWxlbWVudCgpLT5oYXNDbGFz
cygpICYmIGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMoc3RhdGUuZWxlbWVudCgpLT5jbGFzc05h
bWVzKCkpKTsKIAogICAgIC8vIENoZWNrIHByZXZpb3VzIHNpYmxpbmdzIGFuZCB0aGVpciBjb3Vz
aW5zLgogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICB1bnNpZ25lZCB2aXNpdGVkTm9kZUNv
dW50ID0gMDsKICAgICBTdHlsZWRFbGVtZW50KiBzaGFyZUVsZW1lbnQgPSAwOwotICAgIE5vZGUq
IGNvdXNpbkxpc3QgPSBtX3N0eWxlZEVsZW1lbnQtPnByZXZpb3VzU2libGluZygpOworICAgIE5v
ZGUqIGNvdXNpbkxpc3QgPSBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPnByZXZpb3VzU2libGluZygp
OwogICAgIHdoaWxlIChjb3VzaW5MaXN0KSB7Ci0gICAgICAgIHNoYXJlRWxlbWVudCA9IGZpbmRT
aWJsaW5nRm9yU3R5bGVTaGFyaW5nKGNvdXNpbkxpc3QsIGNvdW50KTsKKyAgICAgICAgc2hhcmVF
bGVtZW50ID0gZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoc3RhdGUsIGNvdXNpbkxpc3QsIGNv
dW50KTsKICAgICAgICAgaWYgKHNoYXJlRWxlbWVudCkKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjb3VzaW5MaXN0ID0gbG9jYXRlQ291c2luTGlzdChjb3VzaW5MaXN0LT5wYXJlbnRFbGVt
ZW50KCksIHZpc2l0ZWROb2RlQ291bnQpOwpAQCAtMTMzMSwyMSArMTI5OSwyMSBAQCBSZW5kZXJT
dHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQogICAgICAgICByZXR1cm4g
MDsKIAogICAgIC8vIENhbid0IHNoYXJlIGlmIHNpYmxpbmcgcnVsZXMgYXBwbHkuIFRoaXMgaXMg
Y2hlY2tlZCBhdCB0aGUgZW5kIGFzIGl0IHNob3VsZCByYXJlbHkgZmFpbC4KLSAgICBpZiAoc3R5
bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQobV9zaWJsaW5nUnVsZVNldC5nZXQoKSkp
CisgICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KHN0YXRlLmVsZW1l
bnQoKSwgbV9zaWJsaW5nUnVsZVNldC5nZXQoKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8v
IENhbid0IHNoYXJlIGlmIGF0dHJpYnV0ZSBydWxlcyBhcHBseS4KLSAgICBpZiAoc3R5bGVTaGFy
aW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQobV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQuZ2V0
KCkpKQorICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChzdGF0ZS5l
bGVtZW50KCksIG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0LmdldCgpKSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgQGhvc3QgQC1ydWxlcyBhcHBseS4KLSAgICBp
ZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcygpKQorICAgIGlmIChzdHls
ZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKHN0YXRlLmVsZW1lbnQoKSkpCiAgICAg
ICAgIHJldHVybiAwOwogICAgIC8vIFRyYWNraW5nIGNoaWxkIGluZGV4IHJlcXVpcmVzIHVuaXF1
ZSBzdHlsZSBmb3IgZWFjaCBub2RlLiBUaGlzIG1heSBnZXQgc2V0IGJ5IHRoZSBzaWJsaW5nIHJ1
bGUgbWF0Y2ggYWJvdmUuCi0gICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcobV9l
bGVtZW50LT5wYXJlbnRFbGVtZW50KCkpKQorICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVudHNT
aGFyaW5nKHN0YXRlLmVsZW1lbnQoKS0+cGFyZW50RWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgcmV0dXJuIHNoYXJlRWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKIH0KIAotdm9pZCBT
dHlsZVJlc29sdmVyOjptYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKK3ZvaWQgU3R5
bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgTWF0Y2hS
ZXN1bHQmIHJlc3VsdCkKIHsKICAgICBNYXRjaGluZ1VBUnVsZXNTY29wZSBzY29wZTsKIApAQCAt
MTM1NCwxNSArMTMyMiwxNSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRj
aFJlc3VsdCYgcmVzdWx0KQogICAgICAgICByZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsKICAg
ICBSdWxlU2V0KiB1c2VyQWdlbnRTdHlsZVNoZWV0ID0gbV9tZWRpdW0tPm1lZGlhVHlwZU1hdGNo
U3BlY2lmaWMoInByaW50IikKICAgICAgICAgPyBkZWZhdWx0UHJpbnRTdHlsZSA6IGRlZmF1bHRT
dHlsZTsKLSAgICBtYXRjaFVBUnVsZXMocmVzdWx0LCB1c2VyQWdlbnRTdHlsZVNoZWV0KTsKKyAg
ICBtYXRjaFVBUnVsZXMoc3RhdGUsIHJlc3VsdCwgdXNlckFnZW50U3R5bGVTaGVldCk7CiAKICAg
ICAvLyBJbiBxdWlya3MgbW9kZSwgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgcXVpcmtzIHVzZXIg
YWdlbnQgc2hlZXQuCi0gICAgaWYgKCFtX3NlbGVjdG9yQ2hlY2tlci5zdHJpY3RQYXJzaW5nKCkp
Ci0gICAgICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQsIGRlZmF1bHRRdWlya3NTdHlsZSk7CisgICAg
aWYgKGRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKQorICAgICAgICBtYXRjaFVBUnVsZXMoc3Rh
dGUsIHJlc3VsdCwgZGVmYXVsdFF1aXJrc1N0eWxlKTsKIAogICAgIC8vIElmIGRvY3VtZW50IHVz
ZXMgdmlldyBzb3VyY2Ugc3R5bGVzIChpbiB2aWV3IHNvdXJjZSBtb2RlIG9yIGluIHhtbCB2aWV3
ZXIgbW9kZSksIHRoZW4gd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdmlldyBzb3VyY2Ugc3R5bGUg
c2hlZXQuCiAgICAgaWYgKGRvY3VtZW50KCktPmlzVmlld1NvdXJjZSgpKQotICAgICAgICBtYXRj
aFVBUnVsZXMocmVzdWx0LCB2aWV3U291cmNlU3R5bGUoKSk7CisgICAgICAgIG1hdGNoVUFSdWxl
cyhzdGF0ZSwgcmVzdWx0LCB2aWV3U291cmNlU3R5bGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNl
dFN0eWxlc0ZvclBhZ2luYXRpb25Nb2RlKFBhZ2luYXRpb246Ok1vZGUgcGFnaW5hdGlvbk1vZGUs
IFJlbmRlclN0eWxlKiBzdHlsZSkKQEAgLTE1NjAsMTA2ICsxNTI4LDEwNCBAQCBQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxl
bWVudCwgUmVuZGVyUwogICAgICAgICByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsKICAg
ICB9CiAKLSAgICBpbml0RWxlbWVudChlbGVtZW50KTsKLSAgICBpbml0Rm9yU3R5bGVSZXNvbHZl
KGVsZW1lbnQsIGRlZmF1bHRQYXJlbnQpOwotICAgIG1fcmVnaW9uRm9yU3R5bGluZyA9IHJlZ2lv
bkZvclN0eWxpbmc7Ci0gICAgaWYgKHNoYXJpbmdCZWhhdmlvciA9PSBBbGxvd1N0eWxlU2hhcmlu
ZyAmJiAhbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQpIHsKLSAgICAgICAgUmVuZGVyU3R5
bGUqIHNoYXJlZFN0eWxlID0gbG9jYXRlU2hhcmVkU3R5bGUoKTsKKyAgICBTdHlsZVJlc29sdmVT
dGF0ZSBzdGF0ZTsKKyAgICBpbml0RWxlbWVudChzdGF0ZSwgZWxlbWVudCk7CisgICAgaW5pdEZv
clN0eWxlUmVzb2x2ZShzdGF0ZSwgZWxlbWVudCwgZGVmYXVsdFBhcmVudCk7CisgICAgc3RhdGUu
c2V0UmVnaW9uRm9yU3R5bGluZyhyZWdpb25Gb3JTdHlsaW5nKTsKKworICAgIGlmIChzaGFyaW5n
QmVoYXZpb3IgPT0gQWxsb3dTdHlsZVNoYXJpbmcgJiYgIXN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNl
cnRpb25Qb2ludCgpKSB7CisgICAgICAgIFJlbmRlclN0eWxlKiBzaGFyZWRTdHlsZSA9IGxvY2F0
ZVNoYXJlZFN0eWxlKHN0YXRlKTsKICAgICAgICAgaWYgKHNoYXJlZFN0eWxlKQogICAgICAgICAg
ICAgcmV0dXJuIHNoYXJlZFN0eWxlOwogICAgIH0KIAogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
Y2xvbmVGb3JQYXJlbnQ7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZTsKIAotICAgIGlm
IChtX3BhcmVudFN0eWxlKSB7Ci0gICAgICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRl
KCk7Ci0gICAgICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKG1fcGFyZW50U3R5bGUsIGlzQXRTaGFk
b3dCb3VuZGFyeShlbGVtZW50KSA/IFJlbmRlclN0eWxlOjpBdFNoYWRvd0JvdW5kYXJ5IDogUmVu
ZGVyU3R5bGU6Ok5vdEF0U2hhZG93Qm91bmRhcnkpOworICAgIGlmIChzdGF0ZS5wYXJlbnRTdHls
ZSgpKSB7CisgICAgICAgIHN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgICAgICBz
dHlsZS0+aW5oZXJpdEZyb20oc3RhdGUucGFyZW50U3R5bGUoKSwgaXNBdFNoYWRvd0JvdW5kYXJ5
KGVsZW1lbnQpID8gUmVuZGVyU3R5bGU6OkF0U2hhZG93Qm91bmRhcnkgOiBSZW5kZXJTdHlsZTo6
Tm90QXRTaGFkb3dCb3VuZGFyeSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9zdHlsZSA9IGRl
ZmF1bHRTdHlsZUZvckVsZW1lbnQoKTsKLSAgICAgICAgY2xvbmVGb3JQYXJlbnQgPSBSZW5kZXJT
dHlsZTo6Y2xvbmUoc3R5bGUoKSk7Ci0gICAgICAgIG1fcGFyZW50U3R5bGUgPSBjbG9uZUZvclBh
cmVudC5nZXQoKTsKKyAgICAgICAgc3R5bGUgPSBkZWZhdWx0U3R5bGVGb3JFbGVtZW50KCk7Cisg
ICAgICAgIGNsb25lRm9yUGFyZW50ID0gUmVuZGVyU3R5bGU6OmNsb25lKHN0eWxlLmdldCgpKTsK
KyAgICAgICAgc3RhdGUuc2V0UGFyZW50U3R5bGUoY2xvbmVGb3JQYXJlbnQuZ2V0KCkpOwogICAg
IH0KICAgICAvLyBjb250ZW50ZWRpdGFibGUgYXR0cmlidXRlIChpbXBsZW1lbnRlZCBieSAtd2Vi
a2l0LXVzZXItbW9kaWZ5KSBzaG91bGQKICAgICAvLyBiZSBwcm9wYWdhdGVkIGZyb20gc2hhZG93
IGhvc3QgdG8gZGlzdHJpYnV0ZWQgbm9kZS4KLSAgICBpZiAobV9kaXN0cmlidXRlZFRvSW5zZXJ0
aW9uUG9pbnQpIHsKKyAgICBpZiAoc3RhdGUuZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KCkp
IHsKICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQo
KSkgewogICAgICAgICAgICAgaWYgKFJlbmRlclN0eWxlKiBzdHlsZU9mU2hhZG93SG9zdCA9IHBh
cmVudC0+cmVuZGVyU3R5bGUoKSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRVc2VyTW9k
aWZ5KHN0eWxlT2ZTaGFkb3dIb3N0LT51c2VyTW9kaWZ5KCkpOworICAgICAgICAgICAgICAgIHN0
eWxlLT5zZXRVc2VyTW9kaWZ5KHN0eWxlT2ZTaGFkb3dIb3N0LT51c2VyTW9kaWZ5KCkpOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpKSB7Ci0gICAgICAgIG1f
c3R5bGUtPnNldElzTGluayh0cnVlKTsKLSAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXRlID0g
bV9lbGVtZW50TGlua1N0YXRlOwotICAgICAgICBpZiAobV9lbGVtZW50TGlua1N0YXRlICE9IE5v
dEluc2lkZUxpbmspIHsKKyAgICAgICAgc3R5bGUtPnNldElzTGluayh0cnVlKTsKKyAgICAgICAg
RUluc2lkZUxpbmsgbGlua1N0YXRlID0gc3RhdGUuZWxlbWVudExpbmtTdGF0ZSgpOworICAgICAg
ICBpZiAobGlua1N0YXRlICE9IE5vdEluc2lkZUxpbmspIHsKICAgICAgICAgICAgIGJvb2wgZm9y
Y2VWaXNpdGVkID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGVs
ZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkKTsKICAgICAgICAgICAgIGlmIChmb3Jj
ZVZpc2l0ZWQpCiAgICAgICAgICAgICAgICAgbGlua1N0YXRlID0gSW5zaWRlVmlzaXRlZExpbms7
CiAgICAgICAgIH0KLQotICAgICAgICBtX3N0eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0ZSk7
CisgICAgICAgIHN0eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0ZSk7CiAgICAgfQogCiAgICAg
ZW5zdXJlRGVmYXVsdFN0eWxlU2hlZXRzRm9yRWxlbWVudChlbGVtZW50KTsKIAorICAgIHN0YXRl
LnNldFN0eWxlKHN0eWxlLmdldCgpKTsKKwogICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0Owog
ICAgIGlmIChtYXRjaGluZ0JlaGF2aW9yID09IE1hdGNoT25seVVzZXJBZ2VudFJ1bGVzKQotICAg
ICAgICBtYXRjaFVBUnVsZXMobWF0Y2hSZXN1bHQpOworICAgICAgICBtYXRjaFVBUnVsZXMoc3Rh
dGUsIG1hdGNoUmVzdWx0KTsKICAgICBlbHNlCi0gICAgICAgIG1hdGNoQWxsUnVsZXMobWF0Y2hS
ZXN1bHQsIG1hdGNoaW5nQmVoYXZpb3IgIT0gTWF0Y2hBbGxSdWxlc0V4Y2x1ZGluZ1NNSUwpOwor
ICAgICAgICBtYXRjaEFsbFJ1bGVzKHN0YXRlLCBtYXRjaFJlc3VsdCwgbWF0Y2hpbmdCZWhhdmlv
ciAhPSBNYXRjaEFsbFJ1bGVzRXhjbHVkaW5nU01JTCk7CiAKLSAgICBhcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzKG1hdGNoUmVzdWx0LCBlbGVtZW50KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
KHN0YXRlLCBtYXRjaFJlc3VsdCwgZWxlbWVudCk7CiAKICAgICAvLyBDbGVhbiB1cCBvdXIgc3R5
bGUgb2JqZWN0J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIgZml4
dXBzKS4KLSAgICBhZGp1c3RSZW5kZXJTdHlsZShzdHlsZSgpLCBtX3BhcmVudFN0eWxlLCBlbGVt
ZW50KTsKLQotICAgIGluaXRFbGVtZW50KDApOyAvLyBDbGVhciBvdXQgZm9yIHRoZSBuZXh0IHJl
c29sdmUuCi0KLSAgICBpZiAoY2xvbmVGb3JQYXJlbnQpCi0gICAgICAgIG1fcGFyZW50U3R5bGUg
PSAwOworICAgIGFkanVzdFJlbmRlclN0eWxlKHN0YXRlLCBzdHlsZS5nZXQoKSwgc3RhdGUucGFy
ZW50U3R5bGUoKSwgZWxlbWVudCk7CiAKICAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHlsZVJl
c29sdmVyKCk7CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4gbV9z
dHlsZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHN0eWxlLnJlbGVhc2UoKTsKIH0KIAotUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBS
ZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSwg
S2V5ZnJhbWVWYWx1ZSYga2V5ZnJhbWVWYWx1ZSkKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0
eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBj
b25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlm
cmFtZSwgS2V5ZnJhbWVWYWx1ZSYga2V5ZnJhbWVWYWx1ZSkKIHsKICAgICBNYXRjaFJlc3VsdCBy
ZXN1bHQ7CiAgICAgaWYgKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpCiAgICAgICAgIGFkZE1hdGNo
ZWRQcm9wZXJ0aWVzKHJlc3VsdCwga2V5ZnJhbWUtPnByb3BlcnRpZXMoKSk7CiAKLSAgICBBU1NF
UlQoIW1fc3R5bGUpOwotCiAgICAgLy8gQ3JlYXRlIHRoZSBzdHlsZQotICAgIG1fc3R5bGUgPSBS
ZW5kZXJTdHlsZTo6Y2xvbmUoZWxlbWVudFN0eWxlKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IHN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKGVsZW1lbnRTdHlsZSk7CiAKLSAgICBtX2xpbmVI
ZWlnaHRWYWx1ZSA9IDA7CisgICAgc3RhdGUuc2V0U3R5bGUoc3R5bGUuZ2V0KCkpOworICAgIHN0
YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKIAogICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gYm90
aGVyIHdpdGggIWltcG9ydGFudC4gU2luY2UgdGhlcmUgaXMgb25seSBldmVyIG9uZQogICAgIC8v
IGRlY2wsIHRoZXJlJ3Mgbm90aGluZyB0byBvdmVycmlkZS4gU28ganVzdCBhZGQgdGhlIGZpcnN0
IHByb3BlcnRpZXMuCiAgICAgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAgICAgaWYgKGtl
eWZyYW1lLT5wcm9wZXJ0aWVzKCkpCi0gICAgICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGln
aFByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9w
ZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworICAgICAgICBhcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCByZXN1bHQsIGZhbHNlLCAw
LCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CiAK
ICAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBu
b3cuCi0gICAgdXBkYXRlRm9udCgpOworICAgIHVwZGF0ZUZvbnQoc3RhdGUpOwogCiAgICAgLy8g
TGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9u
dC1zaXplCi0gICAgaWYgKG1fbGluZUhlaWdodFZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOworICAgIGlmIChzdGF0
ZS5saW5lSGVpZ2h0VmFsdWUoKSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJv
cGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7CiAKICAgICAvLyBOb3cg
ZG8gcmVzdCBvZiB0aGUgcHJvcGVydGllcy4KICAgICBpZiAoa2V5ZnJhbWUtPnByb3BlcnRpZXMo
KSkKLSAgICAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+
KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBp
bmhlcml0ZWRPbmx5KTsKKyAgICAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0
eVByb3BlcnRpZXM+KHN0YXRlLCByZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3Bl
cnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CiAKICAgICAvLyBJZiBvdXIgZm9udCBn
b3QgZGlydGllZCBieSBvbmUgb2YgdGhlIG5vbi1lc3NlbnRpYWwgZm9udCBwcm9wcywKICAgICAv
LyBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IGEgc2Vjb25kIHRpbWUuCi0gICAgdXBkYXRlRm9udCgp
OworICAgIHVwZGF0ZUZvbnQoc3RhdGUpOwogCiAgICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJj
ZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7
CisgICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoc3RhdGUpOwogICAgIAogICAgIC8vIEFkZCBhbGwg
dGhlIGFuaW1hdGluZyBwcm9wZXJ0aWVzIHRvIHRoZSBrZXlmcmFtZS4KICAgICBpZiAoY29uc3Qg
U3R5bGVQcm9wZXJ0eVNldCogc3R5bGVEZWNsYXJhdGlvbiA9IGtleWZyYW1lLT5wcm9wZXJ0aWVz
KCkpIHsKQEAgLTE2NzUsNyArMTY0MSw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxl
UmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lCiAKICAg
ICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7CiAKLSAgICByZXR1cm4gbV9z
dHlsZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHN0eWxlLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBT
dHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25z
dCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBLZXlmcmFtZUxpc3QmIGxpc3QpCkBAIC0xNjk2
LDE1ICsxNjYyLDE2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmlt
YXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsCiAKICAgICAvLyBDb25zdHJ1
Y3QgYW5kIHBvcHVsYXRlIHRoZSBzdHlsZSBmb3IgZWFjaCBrZXlmcmFtZQogICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8U3R5bGVLZXlmcmFtZT4gPiYga2V5ZnJhbWVzID0ga2V5ZnJhbWVzUnVsZS0+
a2V5ZnJhbWVzKCk7CisgICAgU3R5bGVSZXNvbHZlU3RhdGUgc3RhdGU7CisgICAgaW5pdEVsZW1l
bnQoc3RhdGUsIGUpOworICAgIGluaXRGb3JTdHlsZVJlc29sdmUoc3RhdGUsIGUpOworICAgIAog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlmcmFtZXMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgLy8gQXBwbHkgdGhlIGRlY2xhcmF0aW9uIHRvIHRoZSBzdHlsZS4gVGhpcyBpcyBhIHNp
bXBsaWZpZWQgdmVyc2lvbiBvZiB0aGUgbG9naWMgaW4gc3R5bGVGb3JFbGVtZW50Ci0gICAgICAg
IGluaXRFbGVtZW50KGUpOwotICAgICAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGUpOwotCiAgICAg
ICAgIGNvbnN0IFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1lID0ga2V5ZnJhbWVzW2ldLmdldCgpOwog
CiAgICAgICAgIEtleWZyYW1lVmFsdWUga2V5ZnJhbWVWYWx1ZSgwLCAwKTsKLSAgICAgICAga2V5
ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKGVsZW1lbnRTdHlsZSwga2V5ZnJh
bWUsIGtleWZyYW1lVmFsdWUpKTsKKyAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHls
ZUZvcktleWZyYW1lKHN0YXRlLCBlbGVtZW50U3R5bGUsIGtleWZyYW1lLCBrZXlmcmFtZVZhbHVl
KSk7CiAKICAgICAgICAgLy8gQWRkIHRoaXMga2V5ZnJhbWUgc3R5bGUgdG8gYWxsIHRoZSBpbmRp
Y2F0ZWQga2V5IHRpbWVzCiAgICAgICAgIFZlY3RvcjxmbG9hdD4ga2V5czsKQEAgLTE3MjQsNyAr
MTY5MSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24o
RWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsCiAgICAgICAgICAgICB6ZXJvUGVyY2Vu
dEtleWZyYW1lLT5zZXRLZXlUZXh0KCIwJSIpOwogICAgICAgICB9CiAgICAgICAgIEtleWZyYW1l
VmFsdWUga2V5ZnJhbWVWYWx1ZSgwLCAwKTsKLSAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHls
ZShzdHlsZUZvcktleWZyYW1lKGVsZW1lbnRTdHlsZSwgemVyb1BlcmNlbnRLZXlmcmFtZSwga2V5
ZnJhbWVWYWx1ZSkpOworICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5
ZnJhbWUoc3RhdGUsIGVsZW1lbnRTdHlsZSwgemVyb1BlcmNlbnRLZXlmcmFtZSwga2V5ZnJhbWVW
YWx1ZSkpOwogICAgICAgICBsaXN0Lmluc2VydChrZXlmcmFtZVZhbHVlKTsKICAgICB9CiAKQEAg
LTE3MzYsNjIgKzE3MDMsNjggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0Zv
ckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSogZWwKICAgICAgICAgICAg
IGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUtPnNldEtleVRleHQoIjEwMCUiKTsKICAgICAgICAgfQog
ICAgICAgICBLZXlmcmFtZVZhbHVlIGtleWZyYW1lVmFsdWUoMSwgMCk7Ci0gICAgICAgIGtleWZy
YW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShlbGVtZW50U3R5bGUsIGh1bmRyZWRQ
ZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKKyAgICAgICAga2V5ZnJhbWVWYWx1ZS5z
ZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKHN0YXRlLCBlbGVtZW50U3R5bGUsIGh1bmRyZWRQZXJj
ZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKICAgICAgICAgbGlzdC5pbnNlcnQoa2V5ZnJh
bWVWYWx1ZSk7CiAgICAgfQogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29s
dmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7Ci0gICAgQVNTRVJUKG1fcGFyZW50U3R5bGUpOwog
ICAgIGlmICghZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbml0RWxlbWVudChlKTsKKyAg
ICBTdHlsZVJlc29sdmVTdGF0ZSBzdGF0ZTsKKyAgICBpbml0RWxlbWVudChzdGF0ZSwgZSk7Cisg
ICAgaW5pdEZvclN0eWxlUmVzb2x2ZShzdGF0ZSwgZSwgcGFyZW50U3R5bGUpOwogCi0gICAgaW5p
dEZvclN0eWxlUmVzb2x2ZShlLCBwYXJlbnRTdHlsZSwgcHNldWRvKTsKLSAgICBtX3N0eWxlID0g
UmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKG1fcGFyZW50
U3R5bGUpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3Jl
YXRlKCk7CisgICAgc3R5bGUtPmluaGVyaXRGcm9tKHN0YXRlLnBhcmVudFN0eWxlKCkpOworICAg
IHN0YXRlLnNldFBzZXVkb1N0eWxlKHBzZXVkbyk7CisgICAgc3RhdGUuc2V0U3R5bGUoc3R5bGUu
Z2V0KCkpOwogCiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgdXNlIHBzZXVkby1lbGVtZW50cyBpbiBh
bnkgb2Ygb3VyIHF1aXJrL3ByaW50IHVzZXIgYWdlbnQgcnVsZXMsIGRvbid0IHdhc3RlIHRpbWUg
d2Fsa2luZwogICAgIC8vIHRob3NlIHJ1bGVzLgogCiAgICAgLy8gQ2hlY2sgVUEsIHVzZXIgYW5k
IGF1dGhvciBydWxlcy4KKwogICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0OwotICAgIG1hdGNo
VUFSdWxlcyhtYXRjaFJlc3VsdCk7CisgICAgbWF0Y2hVQVJ1bGVzKHN0YXRlLCBtYXRjaFJlc3Vs
dCk7CiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpIHsKLSAgICAgICAgbWF0
Y2hVc2VyUnVsZXMobWF0Y2hSZXN1bHQsIGZhbHNlKTsKLSAgICAgICAgbWF0Y2hBdXRob3JSdWxl
cyhtYXRjaFJlc3VsdCwgZmFsc2UpOworICAgICAgICBtYXRjaFVzZXJSdWxlcyhzdGF0ZSwgbWF0
Y2hSZXN1bHQpOworICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHN0YXRlLCBtYXRjaFJlc3VsdCk7
CiAgICAgfQogCiAgICAgaWYgKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBtX3N0eWxlLT5zZXRTdHlsZVR5cGUocHNldWRv
KTsKKyAgICBzdHlsZS0+c2V0U3R5bGVUeXBlKHBzZXVkbyk7CiAKLSAgICBhcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBlKTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKHN0
YXRlLCBtYXRjaFJlc3VsdCwgZSk7CiAKICAgICAvLyBDbGVhbiB1cCBvdXIgc3R5bGUgb2JqZWN0
J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIgZml4dXBzKS4KLSAg
ICBhZGp1c3RSZW5kZXJTdHlsZShzdHlsZSgpLCBwYXJlbnRTdHlsZSwgMCk7CisgICAgYWRqdXN0
UmVuZGVyU3R5bGUoc3RhdGUsIHN0eWxlLmdldCgpLCBzdGF0ZS5wYXJlbnRTdHlsZSgpLCAwKTsK
IAogICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHls
ZS4KLSAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOworICAgIGxvYWRQZW5kaW5nUmVzb3VyY2Vz
KHN0YXRlKTsKIAogICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIAog
ICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgotICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2Uo
KTsKKyAgICByZXR1cm4gc3R5bGUucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKIHsKLSAgICBp
bml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKTsgLy8gbV9y
b290RWxlbWVudFN0eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBkb2N1bWVudCBzdHlsZS4KKyAgICBT
dHlsZVJlc29sdmVTdGF0ZSBzdGF0ZTsKKyAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKHN0YXRlLCBk
b2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSk7IC8vIG1fcm9vdEVsZW1lbnRTdHlsZSB3aWxs
IGJlIHNldCB0byB0aGUgZG9jdW1lbnQgc3R5bGUuCiAKLSAgICBtX3N0eWxlID0gUmVuZGVyU3R5
bGU6OmNyZWF0ZSgpOwotICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKG1fcm9vdEVsZW1lbnRTdHls
ZSk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUo
KTsKKyAgICBzdHlsZS0+aW5oZXJpdEZyb20oc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAg
ICBzdGF0ZS5zZXRFbGVtZW50KGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKTsKKyAgICBz
dGF0ZS5zZXRTdHlsZShzdHlsZS5nZXQoKSk7CiAKLSAgICBjb25zdCBib29sIGlzTGVmdCA9IGlz
TGVmdFBhZ2UocGFnZUluZGV4KTsKKyAgICBjb25zdCBib29sIGlzTGVmdCA9IGlzTGVmdFBhZ2Uo
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBwYWdlSW5kZXgpOwogICAgIGNvbnN0IGJvb2wgaXNG
aXJzdCA9IGlzRmlyc3RQYWdlKHBhZ2VJbmRleCk7CiAgICAgY29uc3QgU3RyaW5nIHBhZ2UgPSBw
YWdlTmFtZShwYWdlSW5kZXgpOwogICAgIApAQCAtMTgwMCw0MiArMTc3Myw0NSBAQCBQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRl
eCkKICAgICBtYXRjaFBhZ2VSdWxlcyhyZXN1bHQsIG1fdXNlclN0eWxlLmdldCgpLCBpc0xlZnQs
IGlzRmlyc3QsIHBhZ2UpOwogICAgIC8vIE9ubHkgY29uc2lkZXIgdGhlIGdsb2JhbCBhdXRob3Ig
UnVsZVNldCBmb3IgQHBhZ2UgcnVsZXMsIGFzIHBlciB0aGUgSFRNTDUgc3BlYy4KICAgICBtYXRj
aFBhZ2VSdWxlcyhyZXN1bHQsIG1fYXV0aG9yU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwg
cGFnZSk7Ci0gICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOworICAgIHN0YXRlLnNldExpbmVIZWln
aHRWYWx1ZSgwKTsKICAgICBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZTsKICNpZiBFTkFCTEUo
Q1NTX1ZBUklBQkxFUykKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5p
dGlvbnM+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkg
LSAxLCBpbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxl
RGVmaW5pdGlvbnM+KHN0YXRlLCByZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3Bl
cnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CiAjZW5kaWYKLSAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHJlc3VsdCwgZmFsc2UsIDAsIHJl
c3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKKyAgICBh
cHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCByZXN1
bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJp
dGVkT25seSk7CiAKICAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgZ28gYWhlYWQgYW5k
IHVwZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRlRm9udCgpOworICAgIHVwZGF0ZUZvbnQoc3RhdGUp
OwogCiAgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRl
ZCBvbiB0aGUgZm9udC1zaXplLgotICAgIGlmIChtX2xpbmVIZWlnaHRWYWx1ZSkKLSAgICAgICAg
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fbGluZUhlaWdodFZhbHVlKTsK
KyAgICBpZiAoc3RhdGUubGluZUhlaWdodFZhbHVlKCkpCisgICAgICAgIGFwcGx5UHJvcGVydHko
c3RhdGUsIENTU1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZhbHVlKCkpOwog
Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHJlc3Vs
dCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0
ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGll
cz4oc3RhdGUsIHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXpl
KCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKIAogICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2Vz
IHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOwor
ICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKHN0YXRlKTsKIAogICAgIGRvY3VtZW50KCktPmRpZEFj
Y2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIAogICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgotICAg
IHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3R5bGUucmVsZWFzZSgpOwog
fQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpkZWZhdWx0U3R5bGVG
b3JFbGVtZW50KCkKIHsKLSAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAg
U3R5bGVSZXNvbHZlU3RhdGUgc3RhdGU7CisgICAgc3RhdGUuc2V0RWxlbWVudChkb2N1bWVudCgp
LT5kb2N1bWVudEVsZW1lbnQoKSk7CisgICAgc3RhdGUuc2V0U3R5bGUoc3R5bGUuZ2V0KCkpOwog
ICAgIC8vIE1ha2Ugc3VyZSBvdXIgZm9udHMgYXJlIGluaXRpYWxpemVkIGlmIHdlIGRvbid0IGlu
aGVyaXQgdGhlbSBmcm9tIG91ciBwYXJlbnQgc3R5bGUuCiAgICAgaWYgKFNldHRpbmdzKiBzZXR0
aW5ncyA9IGRvY3VtZW50U2V0dGluZ3MoKSkgewotICAgICAgICBpbml0aWFsaXplRm9udFN0eWxl
KHNldHRpbmdzKTsKLSAgICAgICAgbV9zdHlsZS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3Io
KSk7CisgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc3RhdGUsIHNldHRpbmdzKTsKKyAgICAg
ICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogICAgIH0gZWxzZQotICAg
ICAgICBtX3N0eWxlLT5mb250KCkudXBkYXRlKDApOworICAgICAgICBzdHlsZS0+Zm9udCgpLnVw
ZGF0ZSgwKTsKIAotICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3R5
bGUucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVy
OjpzdHlsZUZvclRleHQoVGV4dCogdGV4dE5vZGUpCkBAIC0xOTMwLDcgKzE5MDYsNyBAQCBzdGF0
aWMgYm9vbCBpc0Rpc3BsYXlGbGV4aWJsZUJveChFRGlzcGxheSBkaXNwbGF5KQogICAgIHJldHVy
biBkaXNwbGF5ID09IEZMRVggfHwgZGlzcGxheSA9PSBJTkxJTkVfRkxFWDsKIH0KIAotdm9pZCBT
dHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVudCAqZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YWRq
dXN0UmVuZGVyU3R5bGUoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBSZW5kZXJTdHlsZSogc3R5
bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVudCAqZSkKIHsKICAgICBBU1NFUlQo
cGFyZW50U3R5bGUpOwogCkBAIC0xOTQyLDcgKzE5MTgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eQogICAgICAgICAvLyBwcm9wZXJ0eS4KICAgICAgICAgLy8gU2l0ZXMgYWxzbyBjb21tb25s
eSB1c2UgZGlzcGxheTppbmxpbmUvYmxvY2sgb24gPHRkPnMgYW5kIDx0YWJsZT5zLiBJbiBxdWly
a3MgbW9kZSB3ZSBmb3JjZQogICAgICAgICAvLyB0aGVzZSB0YWdzIHRvIHJldGFpbiB0aGVpciBk
aXNwbGF5IHR5cGVzLgotICAgICAgICBpZiAoIW1fc2VsZWN0b3JDaGVja2VyLnN0cmljdFBhcnNp
bmcoKSAmJiBlKSB7CisgICAgICAgIGlmIChkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSAmJiBl
KSB7CiAgICAgICAgICAgICBpZiAoZS0+aGFzVGFnTmFtZSh0ZFRhZykpIHsKICAgICAgICAgICAg
ICAgICBzdHlsZS0+c2V0RGlzcGxheShUQUJMRV9DRUxMKTsKICAgICAgICAgICAgICAgICBzdHls
ZS0+c2V0RmxvYXRpbmcoTm9GbG9hdCk7CkBAIC0xOTg5LDcgKzE5NjUsNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eQogCiAgICAgICAgIC8vIEFic29sdXRlL2ZpeGVkIHBvc2l0aW9uZWQgZWxl
bWVudHMsIGZsb2F0aW5nIGVsZW1lbnRzIGFuZCB0aGUgZG9jdW1lbnQgZWxlbWVudCBuZWVkIGJs
b2NrLWxpa2Ugb3V0c2lkZSBkaXNwbGF5LgogICAgICAgICBpZiAoc3R5bGUtPmhhc091dE9mRmxv
d1Bvc2l0aW9uKCkgfHwgc3R5bGUtPmlzRmxvYXRpbmcoKSB8fCAoZSAmJiBlLT5kb2N1bWVudCgp
LT5kb2N1bWVudEVsZW1lbnQoKSA9PSBlKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5
KGVxdWl2YWxlbnRCbG9ja0Rpc3BsYXkoc3R5bGUtPmRpc3BsYXkoKSwgc3R5bGUtPmlzRmxvYXRp
bmcoKSwgbV9zZWxlY3RvckNoZWNrZXIuc3RyaWN0UGFyc2luZygpKSk7CisgICAgICAgICAgICBz
dHlsZS0+c2V0RGlzcGxheShlcXVpdmFsZW50QmxvY2tEaXNwbGF5KHN0eWxlLT5kaXNwbGF5KCks
IHN0eWxlLT5pc0Zsb2F0aW5nKCksICFkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkpOwogCiAg
ICAgICAgIC8vIEZJWE1FOiBEb24ndCBzdXBwb3J0IHRoaXMgbXV0YXRpb24gZm9yIHBzZXVkbyBz
dHlsZXMgbGlrZSBmaXJzdC1sZXR0ZXIgb3IgZmlyc3QtbGluZSwgc2luY2UgaXQncyBub3QgY29t
cGxldGVseQogICAgICAgICAvLyBjbGVhciBob3cgdGhhdCBzaG91bGQgd29yay4KQEAgLTIwMTks
NyArMTk5NSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVy
U3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5CiAKICAgICAgICAgaWYgKGlzRGlz
cGxheUZsZXhpYmxlQm94KHBhcmVudFN0eWxlLT5kaXNwbGF5KCkpKSB7CiAgICAgICAgICAgICBz
dHlsZS0+c2V0RmxvYXRpbmcoTm9GbG9hdCk7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxh
eShlcXVpdmFsZW50QmxvY2tEaXNwbGF5KHN0eWxlLT5kaXNwbGF5KCksIHN0eWxlLT5pc0Zsb2F0
aW5nKCksIG1fc2VsZWN0b3JDaGVja2VyLnN0cmljdFBhcnNpbmcoKSkpOworICAgICAgICAgICAg
c3R5bGUtPnNldERpc3BsYXkoZXF1aXZhbGVudEJsb2NrRGlzcGxheShzdHlsZS0+ZGlzcGxheSgp
LCBzdHlsZS0+aXNGbG9hdGluZygpLCAhZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpKTsKICAg
ICAgICAgfQogCiAjaWYgRU5BQkxFKERJQUxPR19FTEVNRU5UKQpAQCAtMjEyMyw3ICsyMDk5LDcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5
bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHkKIAogICAgIC8vIExldCB0aGUgdGhlbWUgYWxzbyBo
YXZlIGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBzdHlsZS4KICAgICBpZiAoc3R5bGUtPmhhc0Fw
cGVhcmFuY2UoKSkKLSAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1c3RT
dHlsZSh0aGlzLCBzdHlsZSwgZSwgbV9oYXNVQUFwcGVhcmFuY2UsIG1fYm9yZGVyRGF0YSwgbV9i
YWNrZ3JvdW5kRGF0YSwgbV9iYWNrZ3JvdW5kQ29sb3IpOworICAgICAgICBSZW5kZXJUaGVtZTo6
ZGVmYXVsdFRoZW1lKCktPmFkanVzdFN0eWxlKHRoaXMsIHN0eWxlLCBlLCBzdGF0ZS5oYXNVQUFw
cGVhcmFuY2UoKSwgc3RhdGUuYm9yZGVyRGF0YSgpLCBzdGF0ZS5iYWNrZ3JvdW5kRGF0YSgpLCBz
dGF0ZS5iYWNrZ3JvdW5kQ29sb3IoKSk7CiAKICAgICAvLyBJZiB3ZSBoYXZlIGZpcnN0LWxldHRl
ciBwc2V1ZG8gc3R5bGUsIGRvIG5vdCBzaGFyZSB0aGlzIHN0eWxlLgogICAgIGlmIChzdHlsZS0+
aGFzUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSKSkKQEAgLTIyMDQsMjcgKzIxODAsMTcgQEAgc3Rh
dGljIHZvaWQgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUpCiAg
ICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwogfQogCi12
b2lkIFN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQordm9pZCBTdHlsZVJlc29sdmVyOjp1cGRh
dGVGb250KFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoIW1fZm9udERpcnR5
KQorICAgIGlmICghc3RhdGUuZm9udERpcnR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNo
ZWNrRm9yVGV4dFNpemVBZGp1c3QoKTsKLSAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uo
c3R5bGUoKSwgbV9wYXJlbnRTdHlsZSk7Ci0gICAgY2hlY2tGb3Jab29tQ2hhbmdlKHN0eWxlKCks
IG1fcGFyZW50U3R5bGUpOwotICAgIGNoZWNrRm9yT3JpZW50YXRpb25DaGFuZ2Uoc3R5bGUoKSk7
Ci0gICAgbV9zdHlsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7Ci0gICAgbV9mb250
RGlydHkgPSBmYWxzZTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpjYWNoZUJvcmRlckFuZEJh
Y2tncm91bmQoKQotewotICAgIG1faGFzVUFBcHBlYXJhbmNlID0gbV9zdHlsZS0+aGFzQXBwZWFy
YW5jZSgpOwotICAgIGlmIChtX2hhc1VBQXBwZWFyYW5jZSkgewotICAgICAgICBtX2JvcmRlckRh
dGEgPSBtX3N0eWxlLT5ib3JkZXIoKTsKLSAgICAgICAgbV9iYWNrZ3JvdW5kRGF0YSA9ICptX3N0
eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAgIG1fYmFja2dyb3VuZENvbG9yID0gbV9z
dHlsZS0+YmFja2dyb3VuZENvbG9yKCk7Ci0gICAgfQorICAgIGNoZWNrRm9yVGV4dFNpemVBZGp1
c3Qoc3RhdGUuc3R5bGUoKSk7CisgICAgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKHN0YXRl
LCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5wYXJlbnRTdHlsZSgpKTsKKyAgICBjaGVja0Zvclpvb21D
aGFuZ2Uoc3RhdGUsIHN0YXRlLnN0eWxlKCksIHN0YXRlLnBhcmVudFN0eWxlKCkpOworICAgIGNo
ZWNrRm9yT3JpZW50YXRpb25DaGFuZ2Uoc3RhdGUuc3R5bGUoKSk7CisgICAgc3RhdGUuc3R5bGUo
KS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7CisgICAgc3RhdGUuc2V0Rm9udERpcnR5
KGZhbHNlKTsKIH0KIAogUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6c3R5
bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUpCkBA
IC0yMjM3LDY1ICsyMjAzLDY5IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IFN0eWxlUmVzb2x2
ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsIFBzCiAgICAgaWYgKCFl
IHx8ICFlLT5kb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBtX3NlbGVjdG9yQ2hlY2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6
Q29sbGVjdGluZ1J1bGVzKTsKLQotICAgIGluaXRFbGVtZW50KGUpOwotICAgIGluaXRGb3JTdHls
ZVJlc29sdmUoZSwgMCwgcHNldWRvSWQpOworICAgIFN0eWxlUmVzb2x2ZVN0YXRlIHN0YXRlOwor
ICAgIGluaXRFbGVtZW50KHN0YXRlLCBlKTsKKyAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKHN0YXRl
LCBlKTsKKyAgICBzdGF0ZS5zZXRQc2V1ZG9TdHlsZShwc2V1ZG9JZCk7CisgICAgc3RhdGUuc2V0
TW9kZShTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7CiAKICAgICBNYXRjaFJlc3Vs
dCBkdW1teTsKICAgICBpZiAocnVsZXNUb0luY2x1ZGUgJiBVQUFuZFVzZXJDU1NSdWxlcykgewog
ICAgICAgICAvLyBGaXJzdCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB1c2VyIGFnZW50IHNoZWV0
LgotICAgICAgICBtYXRjaFVBUnVsZXMoZHVtbXkpOworICAgICAgICBtYXRjaFVBUnVsZXMoc3Rh
dGUsIGR1bW15KTsKIAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sgdXNlciBzaGVldCBydWxlcy4K
LSAgICAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICAgICAgbWF0
Y2hVc2VyUnVsZXMoZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CisgICAg
ICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykgeworICAgICAgICAgICAgc3RhdGUu
c2V0SW5jbHVkZUVtcHR5UnVsZXMocnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKKyAg
ICAgICAgICAgIG1hdGNoVXNlclJ1bGVzKHN0YXRlLCBkdW1teSk7CisgICAgICAgIH0KICAgICB9
CiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgKHJ1bGVzVG9JbmNsdWRl
ICYgQXV0aG9yQ1NTUnVsZXMpKSB7Ci0gICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVz
VG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcyk7Ci0KKyAgICAgICAgc3RhdGUuc2V0U2Ft
ZU9yaWdpbk9ubHkoIShydWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2luQ1NTUnVsZXMpKTsKKyAg
ICAgICAgc3RhdGUuc2V0SW5jbHVkZUVtcHR5UnVsZXMocnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNT
U1J1bGVzKTsKKyAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRob3Ig
c2hlZXRzLgotICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKGR1bW15LCBydWxlc1RvSW5jbHVkZSAm
IEVtcHR5Q1NTUnVsZXMpOwotCi0gICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSBmYWxzZTsKKyAg
ICAgICAgbWF0Y2hBdXRob3JSdWxlcyhzdGF0ZSwgZHVtbXkpOwogICAgIH0KLQotICAgIG1fc2Vs
ZWN0b3JDaGVja2VyLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpSZXNvbHZpbmdTdHlsZSk7Ci0K
LSAgICByZXR1cm4gbV9ydWxlTGlzdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHN0YXRlLnJ1bGVM
aXN0KCkucmVsZWFzZSgpOwogfQogCi1pbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpydWxlTWF0
Y2hlcyhjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3Bl
KQoraW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6cnVsZU1hdGNoZXMoU3R5bGVSZXNvbHZlU3Rh
dGUmIHN0YXRlLCBjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENvbnRhaW5lck5vZGUq
IHNjb3BlLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbykKIHsKLSAgICBtX2R5bmFtaWNQc2V1ZG8g
PSBOT1BTRVVETzsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGUuZWxlbWVudCgpOwogCiAg
ICAgaWYgKHJ1bGVEYXRhLmhhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigpKSB7CiAgICAgICAgIC8v
IFdlIGtub3cgdGhpcyBzZWxlY3RvciBkb2VzIG5vdCBpbmNsdWRlIGFueSBwc2V1ZG8gZWxlbWVu
dHMuCi0gICAgICAgIGlmIChtX3BzZXVkb1N0eWxlICE9IE5PUFNFVURPKQorICAgICAgICBpZiAo
c3RhdGUucHNldWRvU3R5bGUoKSAhPSBOT1BTRVVETykKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgLy8gV2Uga25vdyBhIHN1ZmZpY2llbnRseSBzaW1wbGUgc2luZ2xlIHBhcnQg
c2VsZWN0b3IgbWF0Y2hlcyBzaW1wbHkgYmVjYXVzZSB3ZSBmb3VuZCBpdCBmcm9tIHRoZSBydWxl
IGhhc2guCiAgICAgICAgIC8vIFRoaXMgaXMgbGltaXRlZCB0byBIVE1MIG9ubHkgc28gd2UgZG9u
J3QgbmVlZCB0byBjaGVjayB0aGUgbmFtZXNwYWNlLgotICAgICAgICBpZiAocnVsZURhdGEuaGFz
UmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goKSAmJiBtX2VsZW1l
bnQtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBpZiAocnVsZURhdGEuaGFzUmlnaHRtb3N0
U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goKSAmJiBlbGVtZW50LT5pc0hUTUxF
bGVtZW50KCkpIHsKICAgICAgICAgICAgIGlmICghcnVsZURhdGEuaGFzTXVsdGlwYXJ0U2VsZWN0
b3IoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBp
ZiAocnVsZURhdGEuc2VsZWN0b3IoKS0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6VGFnICYmICFT
ZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMobV9lbGVtZW50LCBydWxlRGF0YS5zZWxlY3Rvcigp
LT50YWdRTmFtZSgpKSkKKyAgICAgICAgaWYgKHJ1bGVEYXRhLnNlbGVjdG9yKCktPm1fbWF0Y2gg
PT0gQ1NTU2VsZWN0b3I6OlRhZyAmJiAhU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKGVsZW1l
bnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCktPnRhZ1FOYW1lKCkpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBpZiAoIVNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrUmlnaHRtb3N0
QXR0cmlidXRlU2VsZWN0b3IobV9lbGVtZW50LCBydWxlRGF0YS5zZWxlY3RvcigpKSkKKyAgICAg
ICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVj
dG9yKGVsZW1lbnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICByZXR1cm4gbV9zZWxlY3RvckNoZWNrZXIuZmFzdENoZWNrKHJ1bGVEYXRh
LnNlbGVjdG9yKCksIG1fZWxlbWVudCk7CisKKyAgICAgICAgcmV0dXJuIFNlbGVjdG9yQ2hlY2tl
cjo6ZmFzdENoZWNrKHJ1bGVEYXRhLnNlbGVjdG9yKCksIGVsZW1lbnQpOwogICAgIH0KIAogICAg
IC8vIFNsb3cgcGF0aC4KLSAgICBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250
ZXh0IGNvbnRleHQocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50LCBTZWxlY3RvckNoZWNr
ZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQpOwotICAgIGNvbnRleHQuZWxlbWVudFN0eWxlID0gc3R5
bGUoKTsKKyAgICBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IGNvbnRl
eHQocnVsZURhdGEuc2VsZWN0b3IoKSwgZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVk
TWF0Y2hFbmFibGVkKTsKKyAgICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IHN0YXRlLnN0eWxlKCk7
CiAgICAgY29udGV4dC5zY29wZSA9IHNjb3BlOwotICAgIGNvbnRleHQucHNldWRvU3R5bGUgPSBt
X3BzZXVkb1N0eWxlOwotICAgIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2ggbWF0Y2ggPSBtX3NlbGVj
dG9yQ2hlY2tlci5tYXRjaChjb250ZXh0LCBtX2R5bmFtaWNQc2V1ZG8sIERPTVNpYmxpbmdUcmF2
ZXJzYWxTdHJhdGVneSgpKTsKKyAgICBjb250ZXh0LnBzZXVkb1N0eWxlID0gc3RhdGUucHNldWRv
U3R5bGUoKTsKKworICAgIC8vIG9uLXN0YWNrCisgICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9y
Q2hlY2tlcihkb2N1bWVudCgpKTsKKyAgICBzZWxlY3RvckNoZWNrZXIuc2V0TW9kZShzdGF0ZS5t
b2RlKCkpOworICAgIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2ggbWF0Y2ggPSBzZWxlY3RvckNoZWNr
ZXIubWF0Y2goY29udGV4dCwgZHluYW1pY1BzZXVkbywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0
ZWd5KCkpOwogICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2hl
cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX3BzZXVkb1N0eWxlICE9IE5PUFNF
VURPICYmIG1fcHNldWRvU3R5bGUgIT0gbV9keW5hbWljUHNldWRvKQorICAgIGlmIChzdGF0ZS5w
c2V1ZG9TdHlsZSgpICE9IE5PUFNFVURPICYmIHN0YXRlLnBzZXVkb1N0eWxlKCkgIT0gZHluYW1p
Y1BzZXVkbykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
MjMwNSwxMCArMjI3NSw5IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2hlY2tSZWdpb25TZWxlY3Rv
cihjb25zdCBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IsIEVsZW1lCiAgICAgaWYgKCFyZWdp
b25TZWxlY3RvciB8fCAhcmVnaW9uRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgbV9wc2V1ZG9TdHlsZSA9IE5PUFNFVURPOwotCisgICAgU2VsZWN0b3JDaGVja2VyIHNlbGVj
dG9yQ2hlY2tlcihkb2N1bWVudCgpKTsKICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzID0g
cmVnaW9uU2VsZWN0b3I7IHM7IHMgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQocykpCi0gICAgICAg
IGlmIChtX3NlbGVjdG9yQ2hlY2tlci5tYXRjaGVzKHMsIHJlZ2lvbkVsZW1lbnQpKQorICAgICAg
ICBpZiAoc2VsZWN0b3JDaGVja2VyLm1hdGNoZXMocywgcmVnaW9uRWxlbWVudCkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTIzMjgsOSArMjI5Nyw5
IEBAIExlbmd0aCBTdHlsZVJlc29sdmVyOjpjb252ZXJ0VG9GbG9hdExlbmd0aChDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFJlCiB9CiAKIHRlbXBsYXRlIDxTdHlsZVJlc29sdmVy
OjpTdHlsZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiBy
dWxlLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHksIFByb3BlcnR5V2hpdGVs
aXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5cGUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydGllcyhTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0eWxlUHJvcGVydHlT
ZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBp
bmhlcml0ZWRPbmx5LCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgcHJvcGVydHlXaGl0ZWxpc3RUeXBl
KQogewotICAgIEFTU0VSVCgocHJvcGVydHlXaGl0ZWxpc3RUeXBlICE9IFByb3BlcnR5V2hpdGVs
aXN0UmVnaW9uKSB8fCBtX3JlZ2lvbkZvclN0eWxpbmcpOworICAgIEFTU0VSVCgocHJvcGVydHlX
aGl0ZWxpc3RUeXBlICE9IFByb3BlcnR5V2hpdGVsaXN0UmVnaW9uKSB8fCBzdGF0ZS5yZWdpb25G
b3JTdHlsaW5nKCkpOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUg
PSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxQcm9jZXNzUnVsZShkb2N1bWVudCgpLCBy
dWxlLCB0aGlzKTsKIAogICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBwcm9wZXJ0aWVzLT5w
cm9wZXJ0eUNvdW50KCk7CkBAIC0yMzU4LDcgKzIzMjcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHls
ZVJ1bAogICAgICAgICBjYXNlIFZhcmlhYmxlRGVmaW5pdGlvbnM6CiAgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChDU1NQcm9wZXJ0eVZhcmlhYmxlIDwgZmlyc3RDU1NQcm9wZXJ0eSwgQ1NTX3Zh
cmlhYmxlX2lzX2JlZm9yZV9maXJzdF9wcm9wZXJ0eSk7CiAgICAgICAgICAgICBpZiAocHJvcGVy
dHkgPT0gQ1NTUHJvcGVydHlWYXJpYWJsZSkKLSAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5
KGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBhcHBseVBy
b3BlcnR5KHN0YXRlLCBjdXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CiAgICAgICAgICAg
ICBicmVhazsKICNlbmRpZgogICAgICAgICBjYXNlIEhpZ2hQcmlvcml0eVByb3BlcnRpZXM6CkBA
IC0yMzcxLDQyICsyMzQwLDQzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVz
KGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsCiAjZW5kaWYKICAg
ICAgICAgICAgIC8vIGdpdmUgc3BlY2lhbCBwcmlvcml0eSB0byBmb250LXh4eCwgY29sb3IgcHJv
cGVydGllcywgZXRjCiAgICAgICAgICAgICBpZiAocHJvcGVydHkgPCBDU1NQcm9wZXJ0eUxpbmVI
ZWlnaHQpCi0gICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShjdXJyZW50LmlkKCksIGN1cnJl
bnQudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgY3VycmVu
dC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOwogICAgICAgICAgICAgLy8gd2UgYXBwbHkgbGluZS1o
ZWlnaHQgbGF0ZXIKICAgICAgICAgICAgIGVsc2UgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5
TGluZUhlaWdodCkKLSAgICAgICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IGN1cnJlbnQu
dmFsdWUoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoY3VycmVu
dC52YWx1ZSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvd1ByaW9yaXR5
UHJvcGVydGllczoKICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA+IENTU1Byb3BlcnR5TGluZUhl
aWdodCkKLSAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KGN1cnJlbnQuaWQoKSwgY3VycmVu
dC52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBjdXJyZW50
LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRQcm9jZXNzUnVsZShjb29raWUpOwogfQogCiB0ZW1wbGF0ZSA8
U3R5bGVSZXNvbHZlcjo6U3R5bGVBcHBsaWNhdGlvblBhc3MgcGFzcz4KLXZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1
bHQsIGJvb2wgaXNJbXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wg
aW5oZXJpdGVkT25seSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGll
cyhTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3Vs
dCwgYm9vbCBpc0ltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBp
bmhlcml0ZWRPbmx5KQogewogICAgIGlmIChzdGFydEluZGV4ID09IC0xKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAobV9zdHlsZS0+aW5zaWRlTGluaygpICE9IE5vdEluc2lkZUxpbmspIHsK
KyAgICBpZiAoc3RhdGUuc3R5bGUoKS0+aW5zaWRlTGluaygpICE9IE5vdEluc2lkZUxpbmspIHsK
ICAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewog
ICAgICAgICAgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0g
bWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXNbaV07CiAgICAgICAgICAgICB1bnNpZ25lZCBs
aW5rTWF0Y2hUeXBlID0gbWF0Y2hlZFByb3BlcnRpZXMubGlua01hdGNoVHlwZTsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlciB0byBwYXNzIHRoZXNlIGFzIGFyZ3VtZW50
cyBidXQgdGhhdCByZXF1aXJlcyBjaGFuZ2VzIGluIG1hbnkgcGxhY2VzLgotICAgICAgICAgICAg
bV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JD
aGVja2VyOjpNYXRjaExpbms7Ci0gICAgICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7
CisgICAgICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUobGlua01h
dGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rKTsKKyAgICAgICAgICAgIHN0YXRl
LnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUobGlua01hdGNoVHlwZSAmIFNlbGVj
dG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkKTsKIAotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0aWVz
PHBhc3M+KG1hdGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMuZ2V0KCksIG1hdGNoUmVzdWx0Lm1h
dGNoZWRSdWxlc1tpXSwgaXNJbXBvcnRhbnQsIGluaGVyaXRlZE9ubHksIHN0YXRpY19jYXN0PFBy
b3BlcnR5V2hpdGVsaXN0VHlwZT4obWF0Y2hlZFByb3BlcnRpZXMud2hpdGVsaXN0VHlwZSkpOwor
ICAgICAgICAgICAgYXBwbHlQcm9wZXJ0aWVzPHBhc3M+KHN0YXRlLCBtYXRjaGVkUHJvcGVydGll
cy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0
YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1h
dGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUpKTsKICAgICAgICAgfQotICAgICAgICBtX2Fw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IHRydWU7Ci0gICAgICAgIG1fYXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZSA9IGZhbHNlOworICAgICAgICAvLyBuZWVkIHRvIHJldmVydD8g
SSB0aGluaywgd2UgZG9uJ3QgbmVlZC4uLgorICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5
VG9SZWd1bGFyU3R5bGUodHJ1ZSk7CisgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUoZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGZvciAo
aW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKICAgICAgICAgY29uc3Qg
TWF0Y2hlZFByb3BlcnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hl
ZFByb3BlcnRpZXNbaV07Ci0gICAgICAgIGFwcGx5UHJvcGVydGllczxwYXNzPihtYXRjaGVkUHJv
cGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlz
SW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5
cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUpKTsKKyAgICAgICAgYXBwbHlQcm9w
ZXJ0aWVzPHBhc3M+KHN0YXRlLCBtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBt
YXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBz
dGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRl
bGlzdFR5cGUpKTsKICAgICB9CiB9CiAKQEAgLTI1MDUsOSArMjQ3NSwxMSBAQCBzdGF0aWMgYm9v
bCBpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShjb25zdCBFbGVtZW50KiBlbGVt
ZW50LCBjb25zdCBSZQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBj
b25zdCBFbGVtZW50KiBlbGVtZW50KQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgY29uc3QgTWF0Y2hSZXN1bHQmIG1h
dGNoUmVzdWx0LCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQogewogICAgIEFTU0VSVChlbGVtZW50
KTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdGF0ZS5zdHlsZSgpOworICAgIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSA9IHN0YXRlLnBhcmVudFN0eWxlKCk7CiAgICAgdW5zaWduZWQgY2Fj
aGVIYXNoID0gbWF0Y2hSZXN1bHQuaXNDYWNoZWFibGUgPyBjb21wdXRlTWF0Y2hlZFByb3BlcnRp
ZXNIYXNoKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmRhdGEoKSwgbWF0Y2hSZXN1bHQu
bWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpKSA6IDA7CiAgICAgYm9vbCBhcHBseUluaGVyaXRlZE9u
bHkgPSBmYWxzZTsKICAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSogY2FjaGVJ
dGVtID0gMDsKQEAgLTI1MTUsMTUgKzI0ODcsMTYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QK
ICAgICAgICAgLy8gV2UgY2FuIGJ1aWxkIHVwIHRoZSBzdHlsZSBieSBjb3B5aW5nIG5vbi1pbmhl
cml0ZWQgcHJvcGVydGllcyBmcm9tIGFuIGVhcmxpZXIgc3R5bGUgb2JqZWN0IGJ1aWx0IHVzaW5n
IHRoZSBzYW1lIGV4YWN0CiAgICAgICAgIC8vIHN0eWxlIGRlY2xhcmF0aW9ucy4gV2UgdGhlbiBv
bmx5IG5lZWQgdG8gYXBwbHkgdGhlIGluaGVyaXRlZCBwcm9wZXJ0aWVzLCBpZiBhbnksIGFzIHRo
ZWlyIHZhbHVlcyBjYW4gZGVwZW5kIG9uIHRoZSAKICAgICAgICAgLy8gZWxlbWVudCBjb250ZXh0
LiBUaGlzIGlzIGZhc3QgYW5kIHNhdmVzIG1lbW9yeSBieSByZXVzaW5nIHRoZSBzdHlsZSBkYXRh
IHN0cnVjdHVyZXMuCi0gICAgICAgIG1fc3R5bGUtPmNvcHlOb25Jbmhlcml0ZWRGcm9tKGNhY2hl
SXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOwotICAgICAgICBpZiAobV9wYXJlbnRTdHlsZS0+aW5o
ZXJpdGVkRGF0YVNoYXJlZChjYWNoZUl0ZW0tPnBhcmVudFJlbmRlclN0eWxlLmdldCgpKSAmJiAh
aXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICBFSW5zaWRlTGluayBs
aW5rU3RhdHVzID0gbV9zdHlsZS0+aW5zaWRlTGluaygpOworICAgICAgICBzdHlsZS0+Y29weU5v
bkluaGVyaXRlZEZyb20oY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7CisgICAgICAgIC8v
IG9yegorICAgICAgICBpZiAocGFyZW50U3R5bGUtPmluaGVyaXRlZERhdGFTaGFyZWQoY2FjaGVJ
dGVtLT5wYXJlbnRSZW5kZXJTdHlsZS5nZXQoKSkgJiYgIWlzQXRTaGFkb3dCb3VuZGFyeShlbGVt
ZW50KSkgeworICAgICAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXR1cyA9IHN0eWxlLT5pbnNp
ZGVMaW5rKCk7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY2FjaGUgaXRlbSBwYXJlbnQgc3R5bGUg
aGFzIGlkZW50aWNhbCBpbmhlcml0ZWQgcHJvcGVydGllcyB0byB0aGUgY3VycmVudCBwYXJlbnQg
c3R5bGUgdGhlbiB0aGUKICAgICAgICAgICAgIC8vIHJlc3VsdGluZyBzdHlsZSB3aWxsIGJlIGlk
ZW50aWNhbCB0b28uIFdlIGNvcHkgdGhlIGluaGVyaXRlZCBwcm9wZXJ0aWVzIG92ZXIgZnJvbSB0
aGUgY2FjaGUgYW5kIGFyZSBkb25lLgotICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEZyb20o
Y2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7CisgICAgICAgICAgICBzdHlsZS0+aW5oZXJp
dEZyb20oY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7CiAKICAgICAgICAgICAgIC8vIFVu
Zm9ydHVuYXRlbHkgdGhlIGxpbmsgc3RhdHVzIGlzIHRyZWF0ZWQgbGlrZSBhbiBpbmhlcml0ZWQg
cHJvcGVydHkuIFdlIG5lZWQgdG8gZXhwbGljaXRseSByZXN0b3JlIGl0LgotICAgICAgICAgICAg
bV9zdHlsZS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdHVzKTsKKyAgICAgICAgICAgIHN0eWxlLT5z
ZXRJbnNpZGVMaW5rKGxpbmtTdGF0dXMpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IHRydWU7IApAQCAtMjUzMSw2MCArMjUwNCw2
MCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0
Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogCiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMp
CiAgICAgLy8gRmlyc3QgYXBwbHkgYWxsIHZhcmlhYmxlIGRlZmluaXRpb25zLCBhcyB0aGV5IG1h
eSBiZSB1c2VkIGR1cmluZyBhcHBsaWNhdGlvbiBvZiBsYXRlciBwcm9wZXJ0aWVzLgotICAgIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4obWF0Y2hSZXN1bHQsIGZh
bHNlLCAwLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBseUlu
aGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0
aW9ucz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1
bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5
KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KG1hdGNo
UmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1
bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1h
dGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KG1hdGNoUmVzdWx0LCB0cnVlLCBt
YXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFS
dWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFy
aWFibGVEZWZpbml0aW9ucz4oc3RhdGUsIG1hdGNoUmVzdWx0LCBmYWxzZSwgMCwgbWF0Y2hSZXN1
bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAg
ICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KHN0YXRlLCBtYXRj
aFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4oc3RhdGUsIG1hdGNoUmVz
dWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQu
cmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgdHJ1
ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFz
dFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICNlbmRpZgogCiAgICAgLy8gTm93IHdlIGhh
dmUgYWxsIG9mIHRoZSBtYXRjaGVkIHJ1bGVzIGluIHRoZSBhcHByb3ByaWF0ZSBvcmRlci4gV2Fs
ayB0aGUgcnVsZXMgYW5kIGFwcGx5CiAgICAgLy8gaGlnaC1wcmlvcml0eSBwcm9wZXJ0aWVzIGZp
cnN0LCBpLmUuLCB0aG9zZSBwcm9wZXJ0aWVzIHRoYXQgb3RoZXIgcHJvcGVydGllcyBkZXBlbmQg
b24uCiAgICAgLy8gVGhlIG9yZGVyIGlzICgxKSBoaWdoLXByaW9yaXR5IG5vdCBpbXBvcnRhbnQs
ICgyKSBoaWdoLXByaW9yaXR5IGltcG9ydGFudCwgKDMpIG5vcm1hbCBub3QgaW1wb3J0YW50CiAg
ICAgLy8gYW5kICg0KSBub3JtYWwgaW1wb3J0YW50LgotICAgIG1fbGluZUhlaWdodFZhbHVlID0g
MDsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1h
dGNoUmVzdWx0LCBmYWxzZSwgMCwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgp
IC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhp
Z2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5n
ZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFw
cGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3Jp
dHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0
VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVk
T25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVz
PihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRj
aFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLQotICAgIGlm
IChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9
IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSkgewotICAgICAgICBtX2ZvbnREaXJ0eSA9IHRydWU7
CisgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOworICAgIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCBmYWxzZSwg
MCwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0
ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRp
ZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0
aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRl
ZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGll
cz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2Vy
UnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5
KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHN0
YXRlLCBtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBt
YXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKworICAg
IGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgp
ICE9IHN0eWxlLT5lZmZlY3RpdmVab29tKCkpIHsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERpcnR5
KHRydWUpOwogICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkgPSBmYWxzZTsKICAgICB9CiAKICAg
ICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBub3cu
Ci0gICAgdXBkYXRlRm9udCgpOworICAgIHVwZGF0ZUZvbnQoc3RhdGUpOwogCiAgICAgLy8gTGlu
ZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1z
aXplLgotICAgIGlmIChtX2xpbmVIZWlnaHRWYWx1ZSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fbGluZUhlaWdodFZhbHVlKTsKKyAgICBpZiAoc3RhdGUu
bGluZUhlaWdodFZhbHVlKCkpCisgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIENTU1Byb3Bl
cnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZhbHVlKCkpOwogCiAgICAgLy8gTWFueSBw
cm9wZXJ0aWVzIGRlcGVuZCBvbiB0aGUgZm9udC4gSWYgaXQgY2hhbmdlcyB3ZSBqdXN0IGFwcGx5
IGFsbCBwcm9wZXJ0aWVzLgotICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJT
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgIT0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkpCisg
ICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5mb250RGVzY3JpcHRp
b24oKSAhPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkpCiAgICAgICAgIGFwcGx5SW5oZXJpdGVk
T25seSA9IGZhbHNlOwogCiAgICAgLy8gTm93IGRvIHRoZSBub3JtYWwgcHJpb3JpdHkgVUEgcHJv
cGVydGllcy4KLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGll
cz4obWF0Y2hSZXN1bHQsIGZhbHNlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1h
dGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hS
ZXN1bHQsIGZhbHNlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0
LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwogICAgIAogICAgIC8vIENh
Y2hlIG91ciBib3JkZXIgYW5kIGJhY2tncm91bmQgc28gdGhhdCB3ZSBjYW4gZXhhbWluZSB0aGVt
IGxhdGVyLgotICAgIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOworICAgIHN0YXRlLmNhY2hl
Qm9yZGVyQW5kQmFja2dyb3VuZChzdGF0ZS5zdHlsZSgpKTsKICAgICAKICAgICAvLyBOb3cgZG8g
dGhlIGF1dGhvciBhbmQgdXNlciBub3JtYWwgcHJpb3JpdHkgcHJvcGVydGllcyBhbmQgYWxsIHRo
ZSAhaW1wb3J0YW50IHByb3BlcnRpZXMuCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQ
cmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2Vz
Lmxhc3RVQVJ1bGUgKyAxLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAx
LCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJp
b3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZp
cnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUlu
aGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9w
ZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1
bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7
Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNo
UmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0
LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hl
ZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIGZh
bHNlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSArIDEsIG1hdGNoUmVzdWx0Lm1hdGNo
ZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlN
YXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJlc3Vs
dCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQu
cmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0
Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQs
IHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5n
ZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFBy
b3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUs
IG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RV
QVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAgICAKICAgICAvLyBTdGFydCBsb2FkaW5nIHJl
c291cmNlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdSZXNvdXJj
ZXMoKTsKKyAgICBsb2FkUGVuZGluZ1Jlc291cmNlcyhzdGF0ZSk7CiAgICAgCi0gICAgQVNTRVJU
KCFtX2ZvbnREaXJ0eSk7CisgICAgQVNTRVJUKCFzdGF0ZS5mb250RGlydHkoKSk7CiAgICAgCiAg
ICAgaWYgKGNhY2hlSXRlbSB8fCAhY2FjaGVIYXNoKQogICAgICAgICByZXR1cm47Ci0gICAgaWYg
KCFpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShtX2VsZW1lbnQsIG1fc3R5bGUu
Z2V0KCksIG1fcGFyZW50U3R5bGUpKQorICAgIGlmICghaXNDYWNoZWFibGVJbk1hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGUoZWxlbWVudCwgc3R5bGUsIHBhcmVudFN0eWxlKSkKICAgICAgICAgcmV0dXJu
OwotICAgIGFkZFRvTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShtX3N0eWxlLmdldCgpLCBtX3BhcmVu
dFN0eWxlLCBjYWNoZUhhc2gsIG1hdGNoUmVzdWx0KTsKKyAgICBhZGRUb01hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUoc3R5bGUsIHBhcmVudFN0eWxlLCBjYWNoZUhhc2gsIG1hdGNoUmVzdWx0KTsKIH0K
IAogc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVQYWdlUnVsZXMoY29uc3QgU3R5bGVSdWxlUGFn
ZSogcjEsIGNvbnN0IFN0eWxlUnVsZVBhZ2UqIHIyKQpAQCAtMjY0NiwxMCArMjYxOSwxMCBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoUGFnZVJ1bGVzRm9yTGlzdChWZWN0b3I8U3R5bGVSdWxl
UGFnZSo+JiBtYXRjaGVkUnVsZXMsCiAgICAgfQogfQogCi1ib29sIFN0eWxlUmVzb2x2ZXI6Omlz
TGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6aXNMZWZ0
UGFnZShSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSwgaW50IHBhZ2VJbmRleCkgY29uc3QK
IHsKICAgICBib29sIGlzRmlyc3RQYWdlTGVmdCA9IGZhbHNlOwotICAgIGlmICghbV9yb290RWxl
bWVudFN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCisgICAgaWYgKCFyb290RWxlbWVu
dFN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgIGlzRmlyc3RQYWdlTGVm
dCA9IHRydWU7CiAKICAgICByZXR1cm4gKHBhZ2VJbmRleCArIChpc0ZpcnN0UGFnZUxlZnQgPyAx
IDogMCkpICUgMjsKQEAgLTI3NDUsMTggKzI3MTgsMzIgQEAgQ1NTU3R5bGVSdWxlKiBTdHlsZVJl
c29sdmVyOjplbnN1cmVGdWxsQ1NTT01XcmFwcGVyRm9ySW5zcGVjdG9yKFN0eWxlUnVsZSogcnVs
ZSkKICAgICByZXR1cm4gbV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcC5nZXQocnVsZSkuZ2V0
KCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUpCit2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlXaXRoVmFsdWVDaGVja2luZyhTdHlsZVJlc29sdmVT
dGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKLSAgICBp
bml0RWxlbWVudCgwKTsKLSAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKDAsIHN0eWxlKTsKLSAgICBt
X3N0eWxlID0gc3R5bGU7Ci0gICAgYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKGlkLCB2YWx1
ZSk7CisgICAgaWYgKHZhbHVlKQorICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBpZCwgdmFs
dWUpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHls
ZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5Rm9udFByb3BlcnR5VG9TdHlsZShSZW5kZXJTdHlsZSogdGFyZ2V0LCBjb25zdCBTdHls
ZVByb3BlcnR5U2V0KiByZWZlcmVuY2UpCiB7Ci0gICAgaWYgKHZhbHVlKQotICAgICAgICBhcHBs
eVByb3BlcnR5KGlkLCB2YWx1ZSk7CisgICAgU3R5bGVSZXNvbHZlU3RhdGUgc3RhdGU7CisgICAg
aW5pdEVsZW1lbnQoc3RhdGUsIDApOworICAgIGluaXRGb3JTdHlsZVJlc29sdmUoc3RhdGUsIDAs
IHRhcmdldCk7CisgICAgc3RhdGUuc2V0RWxlbWVudChkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1l
bnQoKSk7CisgICAgc3RhdGUuc2V0U3R5bGUodGFyZ2V0KTsKKworICAgIGFwcGx5UHJvcGVydHlX
aXRoVmFsdWVDaGVja2luZyhzdGF0ZSwgQ1NTUHJvcGVydHlGb250RmFtaWx5LCByZWZlcmVuY2Ut
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KS5nZXQoKSk7CisgICAg
YXBwbHlQcm9wZXJ0eVdpdGhWYWx1ZUNoZWNraW5nKHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRTdHls
ZSwgcmVmZXJlbmNlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFN0eWxlKS5n
ZXQoKSk7CisgICAgYXBwbHlQcm9wZXJ0eVdpdGhWYWx1ZUNoZWNraW5nKHN0YXRlLCBDU1NQcm9w
ZXJ0eUZvbnRWYXJpYW50LCByZWZlcmVuY2UtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVy
dHlGb250VmFyaWFudCkuZ2V0KCkpOworICAgIGFwcGx5UHJvcGVydHlXaXRoVmFsdWVDaGVja2lu
ZyhzdGF0ZSwgQ1NTUHJvcGVydHlGb250V2VpZ2h0LCByZWZlcmVuY2UtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0KS5nZXQoKSk7CisKKyAgICAvLyBBcyBkZXNjcmli
ZWQgaW4gQlVHNjYyOTEsIHNldHRpbmcgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdodCBvbiBhIGZv
bnQgbWF5IGVudGFpbCBhIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoRG91YmxlIGNh
bGwsCisgICAgLy8gd2hpY2ggYXNzdW1lcyB0aGUgZm9udE1ldHJpY3MgYXJlIGF2YWlsYWJsZSBm
b3IgdGhlIGFmZmVjdGVkIGZvbnQsIG90aGVyd2lzZSBhIGNyYXNoIG9jY3VycyAoc2VlIGh0dHA6
Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0Lzk2MTIyKS4KKyAgICAvLyBUaGUgdXBkYXRlRm9u
dCgpIGNhbGxzIGJlbG93IHVwZGF0ZSB0aGUgZm9udE1ldHJpY3MgYW5kIGVuc3VyZSB0aGUgcHJv
cGVyIHNldHRpbmcgb2YgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdodC4KKyAgICB1cGRhdGVGb250
KHN0YXRlKTsKKyAgICBhcHBseVByb3BlcnR5V2l0aFZhbHVlQ2hlY2tpbmcoc3RhdGUsIENTU1By
b3BlcnR5Rm9udFNpemUsIHJlZmVyZW5jZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0
eUZvbnRTaXplKS5nZXQoKSk7CisgICAgdXBkYXRlRm9udChzdGF0ZSk7CisgICAgYXBwbHlQcm9w
ZXJ0eVdpdGhWYWx1ZUNoZWNraW5nKHN0YXRlLCBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHJlZmVy
ZW5jZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpLmdldCgpKTsK
IH0KIAogaW5saW5lIGJvb2wgaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCkKQEAgLTI4NTEsMjAgKzI4MzgsNyBAQCBpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpp
c1ZhbGlkQ3VlU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKQogICAgIHJldHVybiBmYWxz
ZTsKIH0KICNlbmRpZgotLy8gU1ZHIGhhbmRsZXMgem9vbWluZyBpbiBhIGRpZmZlcmVudCB3YXkg
Y29tcGFyZWQgdG8gQ1NTLiBUaGUgd2hvbGUgZG9jdW1lbnQgaXMgc2NhbGVkIGluc3RlYWQKLS8v
IG9mIGVhY2ggaW5kaXZpZHVhbCBsZW5ndGggdmFsdWUgaW4gdGhlIHJlbmRlciBzdHlsZSAvIHRy
ZWUuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoKigpCi0vLyBtdWx0aXBsaWVzIGVh
Y2ggcmVzb2x2ZWQgbGVuZ3RoIHdpdGggdGhlIHpvb20gbXVsdGlwbGllciAtIHNvIGZvciBTVkcg
d2UgbmVlZCB0byBkaXNhYmxlIHRoYXQuCi0vLyBUaG91Z2ggYWxsIENTUyB2YWx1ZXMgdGhhdCBj
YW4gYmUgYXBwbGllZCB0byBvdXRlcm1vc3QgPHN2Zz4gZWxlbWVudHMgKHdpZHRoL2hlaWdodC9i
b3JkZXIvcGFkZGluZy4uLikKLS8vIG5lZWQgdG8gcmVzcGVjdCB0aGUgc2NhbGluZy4gUmVuZGVy
Qm94ICh0aGUgcGFyZW50IGNsYXNzIG9mIFJlbmRlclNWR1Jvb3QpIGdyYWJzIHZhbHVlcyBsaWtl
Ci0vLyB3aWR0aC9oZWlnaHQvYm9yZGVyL3BhZGRpbmcvLi4uIGZyb20gdGhlIFJlbmRlclN0eWxl
IC0+IGZvciBTVkcgdGhlc2UgdmFsdWVzIHdvdWxkIG5ldmVyIHNjYWxlLAotLy8gaWYgd2UnZCBw
YXNzIGEgMS4wIHpvb20gZmFjdG9yIGV2ZXJ5aHdlcmUuIFNvIHdlIG9ubHkgcGFzcyBhIHpvb20g
ZmFjdG9yIG9mIDEuMCBmb3Igc3BlY2lmaWMKLS8vIHByb3BlcnRpZXMgdGhhdCBhcmUgTk9UIGFs
bG93ZWQgdG8gc2NhbGUgd2l0aGluIGEgem9vbWVkIFNWRyBkb2N1bWVudCAobGV0dGVyL3dvcmQt
c3BhY2luZy9mb250LXNpemUpLgotYm9vbCBTdHlsZVJlc29sdmVyOjp1c2VTVkdab29tUnVsZXMo
KQotewotICAgIHJldHVybiBtX2VsZW1lbnQgJiYgbV9lbGVtZW50LT5pc1NWR0VsZW1lbnQoKTsK
LX0KLQotc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBMZW5ndGgmIHdvcmtp
bmdMZW5ndGgpCitzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2
ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBMZW5ndGgm
IHdvcmtpbmdMZW5ndGgpCiB7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlV2Via2l0TWluQ29udGVudCkgewogICAgICAgICB3b3JraW5nTGVuZ3RoID0gTGVu
Z3RoKE1pbkNvbnRlbnQpOwpAQCAtMjg3Niw3ICsyODUwLDcgQEAgc3RhdGljIGJvb2wgY3JlYXRl
R3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFN0eWxl
UmVzb2wKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgd29ya2luZ0xlbmd0aCA9
IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8
IFBlcmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbiB8IEF1dG9D
b252ZXJzaW9uPihzZWxlY3Rvci0+c3R5bGUoKSwgc2VsZWN0b3ItPnJvb3RFbGVtZW50U3R5bGUo
KSwgc2VsZWN0b3ItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgd29ya2luZ0xlbmd0
aCA9IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lv
biB8IFBlcmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbiB8IEF1
dG9Db252ZXJzaW9uPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0
YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgaWYgKHdvcmtpbmdMZW5ndGguaXNV
bmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yODg2LDEyICsyODYwLDEy
IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlLCBTdHlsZVJlc29sCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRp
YyBib29sIGNyZWF0ZUdyaWRUcmFja01pbk1heChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBHcmlkVHJhY2tTaXplJiB0cmFja1NpemUp
CitzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tNaW5NYXgoQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlLCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIEdyaWRUcmFja1NpemUmIHRy
YWNrU2l6ZSkKIHsKICAgICBQYWlyKiBtaW5NYXhUcmFja0JyZWFkdGggPSBwcmltaXRpdmVWYWx1
ZS0+Z2V0UGFpclZhbHVlKCk7CiAgICAgaWYgKCFtaW5NYXhUcmFja0JyZWFkdGgpIHsKICAgICAg
ICAgTGVuZ3RoIHdvcmtpbmdMZW5ndGg7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrQnJl
YWR0aChwcmltaXRpdmVWYWx1ZSwgc2VsZWN0b3IsIHdvcmtpbmdMZW5ndGgpKQorICAgICAgICBp
ZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgocHJpbWl0aXZlVmFsdWUsIHN0YXRlLCB3b3JraW5n
TGVuZ3RoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICB0cmFja1NpemUu
c2V0TGVuZ3RoKHdvcmtpbmdMZW5ndGgpOwpAQCAtMjkwMCwxNCArMjg3NCwxNCBAQCBzdGF0aWMg
Ym9vbCBjcmVhdGVHcmlkVHJhY2tNaW5NYXgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZh
bHVlLCBTdHlsZVJlc29sdgogCiAgICAgTGVuZ3RoIG1pblRyYWNrQnJlYWR0aDsKICAgICBMZW5n
dGggbWF4VHJhY2tCcmVhZHRoOwotICAgIGlmICghY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChtaW5N
YXhUcmFja0JyZWFkdGgtPmZpcnN0KCksIHNlbGVjdG9yLCBtaW5UcmFja0JyZWFkdGgpIHx8ICFj
cmVhdGVHcmlkVHJhY2tCcmVhZHRoKG1pbk1heFRyYWNrQnJlYWR0aC0+c2Vjb25kKCksIHNlbGVj
dG9yLCBtYXhUcmFja0JyZWFkdGgpKQorICAgIGlmICghY3JlYXRlR3JpZFRyYWNrQnJlYWR0aCht
aW5NYXhUcmFja0JyZWFkdGgtPmZpcnN0KCksIHN0YXRlLCBtaW5UcmFja0JyZWFkdGgpIHx8ICFj
cmVhdGVHcmlkVHJhY2tCcmVhZHRoKG1pbk1heFRyYWNrQnJlYWR0aC0+c2Vjb25kKCksIHN0YXRl
LCBtYXhUcmFja0JyZWFkdGgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB0cmFja1Np
emUuc2V0TWluTWF4KG1pblRyYWNrQnJlYWR0aCwgbWF4VHJhY2tCcmVhZHRoKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrR3JvdXAoQ1NTVmFsdWUq
IHZhbHVlLCBTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0
cmFja1NpemVzKQorc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrR3JvdXAoQ1NTVmFsdWUqIHZh
bHVlLCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIFZlY3RvcjxHcmlkVHJhY2tTaXplPiYgdHJh
Y2tTaXplcykKIHsKICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0yOTE4LDcgKzI4OTIsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJh
Y2tHcm91cChDU1NWYWx1ZSogdmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBWZWN0bwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIEdyaWRUcmFja1NpemUgdHJhY2tT
aXplOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja01pbk1heChzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KGN1cnJWYWx1ZSksIHNlbGVjdG9yLCB0cmFja1NpemUpKQorICAgICAg
ICBpZiAoIWNyZWF0ZUdyaWRUcmFja01pbk1heChzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KGN1cnJWYWx1ZSksIHN0YXRlLCB0cmFja1NpemUpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgICAgIHRyYWNrU2l6ZXMuYXBwZW5kKHRyYWNrU2l6ZSk7CkBAIC0yOTI2LDcg
KzI5MDAsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tHcm91cChDU1NWYWx1ZSogdmFs
dWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBWZWN0bwogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tMaXN0KENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9y
PEdyaWRUcmFja1NpemU+JiB0cmFja1NpemVzLCBTdHlsZVJlc29sdmVyKiBzZWxlY3RvcikKK3N0
YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3QoQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8R3Jp
ZFRyYWNrU2l6ZT4mIHRyYWNrU2l6ZXMsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKIHsKICAg
ICAvLyBIYW5kbGUgJ25vbmUnLgogICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7
CkBAIC0yOTM0LDcgKzI5MDgsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tMaXN0KENT
U1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0cmFja1NpegogICAgICAgICBy
ZXR1cm4gcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lOwogICAgIH0K
IAotICAgIHJldHVybiBjcmVhdGVHcmlkVHJhY2tHcm91cCh2YWx1ZSwgc2VsZWN0b3IsIHRyYWNr
U2l6ZXMpOworICAgIHJldHVybiBjcmVhdGVHcmlkVHJhY2tHcm91cCh2YWx1ZSwgc3RhdGUsIHRy
YWNrU2l6ZXMpOwogfQogCiAKQEAgLTI5ODAsOSArMjk1NCw5IEBAIHN0YXRpYyBib29sIGhhc1Zh
cmlhYmxlUmVmZXJlbmNlKENTU1ZhbHVlKiB2YWx1ZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyhDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiA+
JiBrbm93bkV4cHJlc3Npb25zKQordm9pZCBTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFibGVz
KFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlLCBWZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiYga25vd25FeHBy
ZXNzaW9ucykKIHsKLSAgICBzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiBleHByZXNz
aW9uKGlkLCB2YWx1ZS0+c2VyaWFsaXplUmVzb2x2aW5nVmFyaWFibGVzKCpzdHlsZSgpLT52YXJp
YWJsZXMoKSkpOworICAgIHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+IGV4cHJlc3Np
b24oaWQsIHZhbHVlLT5zZXJpYWxpemVSZXNvbHZpbmdWYXJpYWJsZXMoKnN0YXRlLnN0eWxlKCkt
PnZhcmlhYmxlcygpKSk7CiAKICAgICBpZiAoa25vd25FeHByZXNzaW9ucy5jb250YWlucyhleHBy
ZXNzaW9uKSkKICAgICAgICAgcmV0dXJuOyAvLyBjeWNsZSBkZXRlY3RlZC4KQEAgLTI5OTcsMzYg
KzI5NzEsMzYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFibGVzKENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPHMKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcmVzdWx0U2V0LT5wcm9wZXJ0eUNvdW50KCk7IGkrKykgewogICAgICAgICBTdHls
ZVByb3BlcnR5U2V0OjpQcm9wZXJ0eVJlZmVyZW5jZSBwcm9wZXJ0eSA9IHJlc3VsdFNldC0+cHJv
cGVydHlBdChpKTsKICAgICAgICAgaWYgKHByb3BlcnR5LmlkKCkgIT0gQ1NTUHJvcGVydHlWYXJp
YWJsZSAmJiBoYXNWYXJpYWJsZVJlZmVyZW5jZShwcm9wZXJ0eS52YWx1ZSgpKSkKLSAgICAgICAg
ICAgIHJlc29sdmVWYXJpYWJsZXMocHJvcGVydHkuaWQoKSwgcHJvcGVydHkudmFsdWUoKSwga25v
d25FeHByZXNzaW9ucyk7CisgICAgICAgICAgICByZXNvbHZlVmFyaWFibGVzKHN0YXRlLCBwcm9w
ZXJ0eS5pZCgpLCBwcm9wZXJ0eS52YWx1ZSgpLCBrbm93bkV4cHJlc3Npb25zKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShwcm9wZXJ0eS5pZCgpLCBwcm9wZXJ0eS52
YWx1ZSgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIHByb3BlcnR5LmlkKCks
IHByb3BlcnR5LnZhbHVlKCkpOwogICAgIH0KIH0KICNlbmRpZgogCi12b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQordm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwg
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogewogI2lmIEVOQUJMRShDU1NfVkFS
SUFCTEVTKQogICAgIGlmIChpZCAhPSBDU1NQcm9wZXJ0eVZhcmlhYmxlICYmIGhhc1ZhcmlhYmxl
UmVmZXJlbmNlKHZhbHVlKSkgewogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5
SUQsIFN0cmluZz4gPiBrbm93bkV4cHJlc3Npb25zOwotICAgICAgICByZXNvbHZlVmFyaWFibGVz
KGlkLCB2YWx1ZSwga25vd25FeHByZXNzaW9ucyk7CisgICAgICAgIHJlc29sdmVWYXJpYWJsZXMo
c3RhdGUsIGlkLCB2YWx1ZSwga25vd25FeHByZXNzaW9ucyk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAjZW5kaWYKIAotICAgIGJvb2wgaXNJbmhlcml0ID0gbV9wYXJlbnROb2RlICYmIHZhbHVl
LT5pc0luaGVyaXRlZFZhbHVlKCk7Ci0gICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0
aWFsVmFsdWUoKSB8fCAoIW1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgp
KTsKKyAgICBib29sIGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVudE5vZGUoKSAmJiB2YWx1ZS0+aXNJ
bmhlcml0ZWRWYWx1ZSgpOworICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZh
bHVlKCkgfHwgKCFzdGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUo
KSk7CiAKLSAgICBBU1NFUlQoIWlzSW5oZXJpdCB8fCAhaXNJbml0aWFsKTsgLy8gaXNJbmhlcml0
IC0+ICFpc0luaXRpYWwgJiYgaXNJbml0aWFsIC0+ICFpc0luaGVyaXQKLSAgICBBU1NFUlQoIWlz
SW5oZXJpdCB8fCAobV9wYXJlbnROb2RlICYmIG1fcGFyZW50U3R5bGUpKTsgLy8gaXNJbmhlcml0
IC0+IChtX3BhcmVudE5vZGUgJiYgbV9wYXJlbnRTdHlsZSkKKyAgICBBU1NFUlQoIWlzSW5oZXJp
dCB8fCAhaXNJbml0aWFsKTsKKyAgICBBU1NFUlQoIWlzSW5oZXJpdCB8fCAoc3RhdGUucGFyZW50
Tm9kZSgpICYmIHN0YXRlLnBhcmVudFN0eWxlKCkpKTsKIAotICAgIGlmICghYXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlKCkgJiYgKCFhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkg
fHwgIWlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KGlkKSkpIHsKKyAgICBpZiAoIXN0YXRlLmFw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpICYmICghc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlz
aXRlZExpbmtTdHlsZSgpIHx8ICFpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShpZCkpKSB7CiAg
ICAgICAgIC8vIExpbWl0IHRoZSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb25s
eSB0aGUgb25lcyBob25vcmVkIGJ5IDp2aXNpdGVkLgogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKGlzSW5oZXJpdCAmJiAhbV9wYXJlbnRTdHlsZS0+aGFzRXhwbGljaXRseUluaGVy
aXRlZFByb3BlcnRpZXMoKSAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQp
KQotICAgICAgICBtX3BhcmVudFN0eWxlLT5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVy
dGllcygpOworICAgIGlmIChpc0luaGVyaXQgJiYgIXN0YXRlLnBhcmVudFN0eWxlKCktPmhhc0V4
cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkgJiYgIUNTU1Byb3BlcnR5Ojppc0luaGVyaXRl
ZFByb3BlcnR5KGlkKSkKKyAgICAgICAgc3RhdGUucGFyZW50U3R5bGUoKS0+c2V0SGFzRXhwbGlj
aXRseUluaGVyaXRlZFByb3BlcnRpZXMoKTsKIAogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQog
ICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eVZhcmlhYmxlKSB7CkBAIC0zMDM0LDcgKzMwMDgsNyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgICAgICBDU1NWYXJpYWJsZVZhbHVlKiB2YXJpYWJsZSA9IHN0YXRp
Y19jYXN0PENTU1ZhcmlhYmxlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIEFTU0VSVCghdmFyaWFi
bGUtPm5hbWUoKS5pc0VtcHR5KCkpOwogICAgICAgICBBU1NFUlQoIXZhcmlhYmxlLT52YWx1ZSgp
LmlzRW1wdHkoKSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldFZhcmlhYmxlKHZhcmlhYmxlLT5uYW1l
KCksIHZhcmlhYmxlLT52YWx1ZSgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VmFyaWFi
bGUodmFyaWFibGUtPm5hbWUoKSwgdmFyaWFibGUtPnZhbHVlKCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogI2VuZGlmCkBAIC0zMDQzLDE3ICszMDE3LDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
Y29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0gbV9zdHlsZUJ1aWxkZXIucHJvcGVydHlI
YW5kbGVyKGlkKTsKICAgICBpZiAoaGFuZGxlci5pc1ZhbGlkKCkpIHsKICAgICAgICAgaWYgKGlz
SW5oZXJpdCkKLSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbmhlcml0VmFsdWUoaWQsIHRoaXMp
OworICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaGVyaXRWYWx1ZShpZCwgc3RhdGUpOwogICAg
ICAgICBlbHNlIGlmIChpc0luaXRpYWwpCi0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5pdGlh
bFZhbHVlKGlkLCB0aGlzKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbml0aWFsVmFsdWUo
aWQsIHN0YXRlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgaGFuZGxlci5hcHBseVZhbHVl
KGlkLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5VmFsdWUoaWQsIHN0
YXRlLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpID8gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkgOiAwOwogCi0gICAgZmxvYXQgem9vbUZh
Y3RvciA9IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBmbG9hdCB6b29tRmFjdG9yID0g
c3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwogCiAgICAgLy8gV2hhdCBmb2xsb3dzIGlz
IGEgbGlzdCB0aGF0IG1hcHMgdGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIgY29ycmVzcG9u
ZGluZyBmcm9udC1lbmQKICAgICAvLyBSZW5kZXJTdHlsZSB2YWx1ZXMuIFNob3J0aGFuZHMgKGUu
Zy4gYm9yZGVyLCBiYWNrZ3JvdW5kKSBvY2N1ciBpbiB0aGlzIGxpc3QgYXMgd2VsbCBhbmQKQEAg
LTMwNjcsNyArMzA0MSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAvLyBub3RlIGlzIGEg
cmVtaW5kZXIgdGhhdCBldmVudHVhbGx5ICJpbmhlcml0IiBuZWVkcyB0byBiZSBzdXBwb3J0ZWQu
CiAKICAgICAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgICAgICBtX3N0eWxl
LT5jbGVhckNvbnRlbnQoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhckNv
bnRlbnQoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKQEAgLTMw
NzksMTkgKzMwNTMsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBDU1NWYWx1ZSog
aXRlbSA9IGkudmFsdWUoKTsKICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZUdlbmVy
YXRvclZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzR3JhZGllbnRW
YWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChTdHls
ZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+KGl0
ZW0pLT5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCh0aGlzKS5nZXQoKSksIGRpZFNldCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2Vu
ZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NHcmFkaWVudFZhbHVlKj4oaXRlbSkt
PmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHN0YXRlKS5nZXQoKSksIGRpZFNldCk7CiAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0ltYWdl
R2VuZXJhdG9yVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShz
dGF0aWNfY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwogICAg
ICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VU
KQogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNJbWFnZVNldFZhbHVlKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChzZXRPclBlbmRpbmdGcm9t
VmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVNldFZhbHVlKj4o
aXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRD
b250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShzdGF0ZSwgQ1NTUHJvcGVydHlDb250ZW50LCBz
dGF0aWNfY2FzdDxDU1NJbWFnZVNldFZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwogICAgICAgICAg
ICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1By
b3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0
KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChjYWNoZWRP
clBlbmRpbmdGcm9tVmFsdWUoc3RhdGUsIENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8
Q1NTSW1hZ2VWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlk
U2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAg
ICAgfQpAQCAtMzEwMiwxNyArMzA3NiwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBjb250ZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KGl0ZW0pOwogCiAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNT
dHJpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNvbnRl
bnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIGRpZFNldCk7CisgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoY29udGVudFZhbHVlLT5nZXRTdHJpbmdW
YWx1ZSgpLmltcGwoKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNBdHRyKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENhbiBhIG5hbWVzcGFjZSBiZSBzcGVjaWZp
ZWQgZm9yIGFuIGF0dHIoZm9vKT8KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3R5bGUtPnN0
eWxlVHlwZSgpID09IE5PUFNFVURPKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0VW5pcXVlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5zdHls
ZVR5cGUoKSA9PSBOT1BTRVVETykKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtX3BhcmVudFN0eWxlLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLnBhcmVudFN0eWxlKCktPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgICAg
ICAgICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0b20sIGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5n
VmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSA9IG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0dHIpOwotICAgICAg
ICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlB
dG9tIDogdmFsdWUuaW1wbCgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlID0gc3RhdGUuZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUoYXR0cik7
CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQodmFsdWUuaXNO
dWxsKCkgPyBlbXB0eUF0b20gOiB2YWx1ZS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAg
ICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIHRo
ZSBmYWN0IHRoYXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZQogICAgICAg
ICAgICAgICAgICAgICBtX2ZlYXR1cmVzLmF0dHJzSW5SdWxlcy5hZGQoYXR0ci5sb2NhbE5hbWUo
KS5pbXBsKCkpOwpAQCAtMzEyMywyNCArMzA5NywyNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAg
ICAgICAgICAgICBpZiAobGlzdFN0eWxlSWRlbnQgIT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAg
ICAgICAgICAgICAgICAgbGlzdFN0eWxlVHlwZSA9IHN0YXRpY19jYXN0PEVMaXN0U3R5bGVUeXBl
PihsaXN0U3R5bGVJZGVudCAtIENTU1ZhbHVlRGlzYyk7CiAgICAgICAgICAgICAgICAgICAgIE93
blB0cjxDb3VudGVyQ29udGVudD4gY291bnRlciA9IGFkb3B0UHRyKG5ldyBDb3VudGVyQ29udGVu
dChjb3VudGVyVmFsdWUtPmlkZW50aWZpZXIoKSwgbGlzdFN0eWxlVHlwZSwgY291bnRlclZhbHVl
LT5zZXBhcmF0b3IoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50
KGNvdW50ZXIucmVsZWFzZSgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRDb250ZW50KGNvdW50ZXIucmVsZWFzZSgpLCBkaWRTZXQpOwogICAgICAgICAg
ICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVPcGVuUXVvdGU6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KE9QRU5fUVVPVEUsIGRpZFNldCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KE9QRU5fUVVPVEUsIGRp
ZFNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVD
bG9zZVF1b3RlOgotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChD
TE9TRV9RVU9URSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldENvbnRlbnQoQ0xPU0VfUVVPVEUsIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb09wZW5RdW90ZToKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoTk9fT1BFTl9R
VU9URSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZU5vQ2xvc2VRdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dENvbnRlbnQoTk9fQ0xPU0VfUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KE5PX0NMT1NFX1FVT1RFLCBkaWRTZXQpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMzE1MCwxNiArMzEy
NCwxNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmICghZGlkU2V0KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyQ29u
dGVudCgpOworICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyQ29udGVudCgpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVF1b3Rl
czoKICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVv
dGVzKG1fcGFyZW50U3R5bGUtPnF1b3RlcygpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldFF1b3RlcyhzdGF0ZS5wYXJlbnRTdHlsZSgpLT5xdW90ZXMoKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAg
bV9zdHlsZS0+c2V0UXVvdGVzKDApOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVv
dGVzKDApOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh2YWx1
ZS0+aXNWYWx1ZUxpc3QoKSkgewpAQCAtMzE3Nyw0MyArMzE1MSw0MyBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgICAgICAgICAgICAgIFN0cmluZyBlbmRRdW90ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4oc2Vjb25kKS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAgICAgICBxdW90
ZXMtPmFkZFBhaXIoc3RkOjptYWtlX3BhaXIoc3RhcnRRdW90ZSwgZW5kUXVvdGUpKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhxdW90ZXMpOworICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVvdGVzKHF1b3Rlcyk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKSB7CiAgICAgICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAg
ICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpjcmVhdGUoKSk7CisgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVvdGVzKFF1b3Rlc0RhdGE6OmNyZWF0ZSgp
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRG
YW1pbHk6IHsKICAgICAgICAgLy8gbGlzdCBvZiBzdHJpbmdzIGFuZCBpZHMKICAgICAgICAgaWYg
KGlzSW5oZXJpdCkgewotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNj
cmlwdGlvbiA9IG1fcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpOworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9
IHN0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9u
LmdlbmVyaWNGYW1pbHkoKSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5
KHBhcmVudEZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpKTsKICAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQocGFyZW50Rm9udERlc2NyaXB0aW9uLmlzU3Bl
Y2lmaWVkRm9udCgpKTsKLSAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOworICAgICAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaXNJ
bml0aWFsKSB7CiAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gaW5pdGlhbERlc2MgPSBGb250
RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIEZvbnREZXNjcmlw
dGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAg
ICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBzaXplIHRvIGFjY291bnQgZm9yIHRoZSBnZW5l
cmljIGZhbWlseSBjaGFuZ2UgZnJvbSBtb25vc3BhY2UKICAgICAgICAgICAgIC8vIHRvIG5vbi1t
b25vc3BhY2UuCiAgICAgICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkg
JiYgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSkKLSAgICAgICAgICAgICAg
ICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVu
dCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEs
IGZhbHNlKSk7CisgICAgICAgICAgICAgICAgc2V0Rm9udFNpemUoc3RhdGUsIGZvbnREZXNjcmlw
dGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKGRvY3VtZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZv
bnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0gMSwgZmFsc2UpKTsKICAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KGluaXRpYWxEZXNjLmdlbmVyaWNGYW1pbHko
KSk7CiAgICAgICAgICAgICBpZiAoIWluaXRpYWxEZXNjLmZpcnN0RmFtaWx5KCkuZmFtaWx5SXNF
bXB0eSgpKQogICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbHkoaW5pdGlh
bERlc2MuZmlyc3RGYW1pbHkoKSk7Ci0gICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9u
dERlc2NyaXB0aW9uKCk7CiAgICAgICAgIEZvbnRGYW1pbHkmIGZpcnN0RmFtaWx5ID0gZm9udERl
c2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7CiAgICAgICAgIEZvbnRGYW1pbHkqIGN1cnJGYW1pbHkg
PSAwOwogCkBAIC0zMjgyLDQzICszMjU2LDQzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIC8vIElm
IGN1cnJGYW1pbHkgaXMgbm9uLXplcm8gdGhlbiB3ZSBzZXQgYXQgbGVhc3Qgb25lIGZhbWlseSBv
biB0aGlzIGRlc2NyaXB0aW9uLgogICAgICAgICBpZiAoY3VyckZhbWlseSkgewogICAgICAgICAg
ICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNjcmlwdGlvbi51
c2VGaXhlZERlZmF1bHRTaXplKCkgIT0gb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpCi0g
ICAgICAgICAgICAgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktl
eXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdv
cmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpKTsKKyAgICAgICAg
ICAgICAgICBzZXRGb250U2l6ZShzdGF0ZSwgZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktl
eXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdv
cmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpKTsKIAotICAgICAg
ICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgICAgICBz
dGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm47CiAgICAgfQogLy8gc2hvcnRoYW5kIHByb3BlcnRpZXMKICAgICBjYXNlIENT
U1Byb3BlcnR5QmFja2dyb3VuZDoKICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAg
ICAgbV9zdHlsZS0+Y2xlYXJCYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAgICAgICBtX3N0eWxl
LT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5jbGVhckJhY2tncm91bmRMYXllcnMoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dEJhY2tncm91bmRDb2xvcihDb2xvcigpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0luaGVyaXQp
IHsKLSAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRCYWNrZ3JvdW5kTGF5ZXJzKCptX3BhcmVu
dFN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0QmFj
a2dyb3VuZENvbG9yKG1fcGFyZW50U3R5bGUtPmJhY2tncm91bmRDb2xvcigpKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRCYWNrZ3JvdW5kTGF5ZXJzKCpzdGF0ZS5wYXJlbnRT
dHlsZSgpLT5iYWNrZ3JvdW5kTGF5ZXJzKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0QmFja2dyb3VuZENvbG9yKHN0YXRlLnBhcmVudFN0eWxlKCktPmJhY2tncm91bmRDb2xvcigp
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1hc2s6CiAgICAgICAgIGlmIChpc0luaXRpYWwpCi0gICAgICAgICAgICBtX3N0eWxlLT5jbGVh
ck1hc2tMYXllcnMoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyTWFza0xheWVy
cygpOwogICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICBtX3N0eWxlLT5p
bmhlcml0TWFza0xheWVycygqbV9wYXJlbnRTdHlsZS0+bWFza0xheWVycygpKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRNYXNrTGF5ZXJzKCpzdGF0ZS5wYXJlbnRTdHlsZSgp
LT5tYXNrTGF5ZXJzKCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZv
bnQ6CiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlv
biBmb250RGVzY3JpcHRpb24gPSBtX3BhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAg
ICAgICAgICAgIG1fc3R5bGUtPnNldExpbmVIZWlnaHQobV9wYXJlbnRTdHlsZS0+c3BlY2lmaWVk
TGluZUhlaWdodCgpKTsKLSAgICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKLSAgICAg
ICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICAgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnBhcmVudEZvbnREZXNjcmlw
dGlvbigpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUhlaWdodChzdGF0ZS5w
YXJlbnRTdHlsZSgpLT5zcGVjaWZpZWRMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgc3RhdGUu
c2V0TGluZUhlaWdodFZhbHVlKDApOworICAgICAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0
aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKSB7CiAg
ICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudFNldHRpbmdzKCk7CiAgICAg
ICAgICAgICBBU1NFUlQoc2V0dGluZ3MpOyAvLyBJZiB3ZSdyZSBkb2luZyBzdHlsZSByZXNvbHV0
aW9uLCB0aGlzIGRvY3VtZW50IHNob3VsZCBhbHdheXMgYmUgaW4gYSBmcmFtZSBhbmQgdGh1cyBo
YXZlIHNldHRpbmdzCiAgICAgICAgICAgICBpZiAoIXNldHRpbmdzKQogICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOworICAg
ICAgICAgICAgaW5pdGlhbGl6ZUZvbnRTdHlsZShzdGF0ZSwgc2V0dGluZ3MpOwogICAgICAgICB9
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRMaW5l
SGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLSAgICAgICAgICAgIG1f
bGluZUhlaWdodFZhbHVlID0gMDsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVI
ZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgc3Rh
dGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwogCiAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uOwogICAgICAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgp
LT5zeXN0ZW1Gb250KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpLCBmb250RGVzY3JpcHRpb24p
OwpAQCAtMzMzNCwyNyArMzMwOCwyNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChkb2N1bWVudCgpLT5wcmludGluZygpIHx8
ICFzZXR0aW5ncy0+c2NyZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWQoKSk7CiAKICAgICAgICAg
ICAgICAgICAvLyBIYW5kbGUgdGhlIHpvb20gZmFjdG9yLgotICAgICAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNp
emUoZG9jdW1lbnQoKSwgbV9zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVT
aXplKCksIGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIHVzZVNWR1pvb21SdWxlcygp
KSk7Ci0gICAgICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
CisgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21w
dXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBzdGF0ZS5zdHlsZSgpLCBmb250
RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNp
emUoKSwgc3RhdGUudXNlU1ZHWm9vbVJ1bGVzKCkpKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNGb250VmFsdWUoKSkgewogICAgICAgICAgICAgRm9udFZh
bHVlKiBmb250ID0gc3RhdGljX2Nhc3Q8Rm9udFZhbHVlKj4odmFsdWUpOwogICAgICAgICAgICAg
aWYgKCFmb250LT5zdHlsZSB8fCAhZm9udC0+dmFyaWFudCB8fCAhZm9udC0+d2VpZ2h0CiAgICAg
ICAgICAgICAgICAgfHwgIWZvbnQtPnNpemUgfHwgIWZvbnQtPmxpbmVIZWlnaHQgfHwgIWZvbnQt
PmZhbWlseSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBhcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlLCBmb250LT5zdHlsZS5nZXQoKSk7Ci0gICAgICAgICAg
ICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIGZvbnQtPnZhcmlhbnQuZ2V0
KCkpOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGZv
bnQtPndlaWdodC5nZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQ
cm9wZXJ0eUZvbnRTdHlsZSwgZm9udC0+c3R5bGUuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQ
cm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlGb250VmFyaWFudCwgZm9udC0+dmFyaWFudC5nZXQo
KSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRXZWln
aHQsIGZvbnQtPndlaWdodC5nZXQoKSk7CiAgICAgICAgICAgICAvLyBUaGUgcHJldmlvdXMgcHJv
cGVydGllcyBjYW4gZGlydHkgb3VyIGZvbnQgYnV0IHRoZXkgZG9uJ3QgdHJ5IHRvIHJlYWQgdGhl
IGZvbnQncwogICAgICAgICAgICAgLy8gcHJvcGVydGllcyBiYWNrLCB3aGljaCBpcyBzYWZlLiBI
b3dldmVyIGlmIGZvbnQtc2l6ZSBpcyB1c2luZyB0aGUgJ2V4JyB1bml0LCBpdCB3aWxsCiAgICAg
ICAgICAgICAvLyBuZWVkIHF1ZXJ5IHRoZSBkaXJ0aWVkIGZvbnQncyB4LWhlaWdodCB0byBnZXQg
dGhlIGNvbXB1dGVkIHNpemUuIFRvIGJlIHNhZmUgaW4gdGhpcwogICAgICAgICAgICAgLy8gY2Fz
ZSwgbGV0J3MganVzdCB1cGRhdGUgdGhlIGZvbnQgbm93LgotICAgICAgICAgICAgdXBkYXRlRm9u
dCgpOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBmb250
LT5zaXplLmdldCgpKTsKKyAgICAgICAgICAgIHVwZGF0ZUZvbnQoc3RhdGUpOworICAgICAgICAg
ICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlGb250U2l6ZSwgZm9udC0+c2l6ZS5n
ZXQoKSk7CiAKLSAgICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gZm9udC0+bGluZUhlaWdo
dC5nZXQoKTsKKyAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZShmb250LT5saW5l
SGVpZ2h0LmdldCgpKTsKIAotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZv
bnRGYW1pbHksIGZvbnQtPmZhbWlseS5nZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5
KHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIGZvbnQtPmZhbWlseS5nZXQoKSk7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuOwogCkBAIC0zMzY0LDExICszMzM4LDExIEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdzogewogICAgICAgICBpZiAo
aXNJbmhlcml0KSB7CiAgICAgICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93
KQotICAgICAgICAgICAgICAgIHJldHVybiBtX3N0eWxlLT5zZXRUZXh0U2hhZG93KG1fcGFyZW50
U3R5bGUtPnRleHRTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCptX3BhcmVudFN0
eWxlLT50ZXh0U2hhZG93KCkpKSA6IG51bGxwdHIpOwotICAgICAgICAgICAgcmV0dXJuIG1fc3R5
bGUtPnNldEJveFNoYWRvdyhtX3BhcmVudFN0eWxlLT5ib3hTaGFkb3coKSA/IGFkb3B0UHRyKG5l
dyBTaGFkb3dEYXRhKCptX3BhcmVudFN0eWxlLT5ib3hTaGFkb3coKSkpIDogbnVsbHB0cik7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlKCktPnNldFRleHRTaGFkb3coc3RhdGUu
cGFyZW50U3R5bGUoKS0+dGV4dFNoYWRvdygpID8gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoKnN0
YXRlLnBhcmVudFN0eWxlKCktPnRleHRTaGFkb3coKSkpIDogbnVsbHB0cik7CisgICAgICAgICAg
ICByZXR1cm4gc3RhdGUuc3R5bGUoKS0+c2V0Qm94U2hhZG93KHN0YXRlLnBhcmVudFN0eWxlKCkt
PmJveFNoYWRvdygpID8gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoKnN0YXRlLnBhcmVudFN0eWxl
KCktPmJveFNoYWRvdygpKSkgOiBudWxscHRyKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXNJ
bml0aWFsIHx8IHByaW1pdGl2ZVZhbHVlKSAvLyBpbml0aWFsIHwgbm9uZQotICAgICAgICAgICAg
cmV0dXJuIGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdyA/IG1fc3R5bGUtPnNldFRleHRTaGFk
b3cobnVsbHB0cikgOiBtX3N0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgICAgICAg
ICByZXR1cm4gaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93ID8gc3RhdGUuc3R5bGUoKS0+c2V0
VGV4dFNoYWRvdyhudWxscHRyKSA6IHN0YXRlLnN0eWxlKCktPnNldEJveFNoYWRvdyhudWxscHRy
KTsKIAogICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtMzM3OCwyOSArMzM1MiwyOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYg
KCFjdXJyVmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIFNoYWRvd1ZhbHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8U2hhZG93VmFsdWUq
PihjdXJyVmFsdWUpOwotICAgICAgICAgICAgaW50IHggPSBpdGVtLT54LT5jb21wdXRlTGVuZ3Ro
PGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAg
ICAgIGludCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVs
ZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJs
dXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVu
dFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7Ci0gICAgICAgICAgICBpbnQgc3ByZWFkID0gaXRlbS0+
c3ByZWFkID8gaXRlbS0+c3ByZWFkLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290
RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7CisgICAgICAgICAgICBpbnQgeCA9IGl0ZW0t
PngtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0
eWxlKCksIHpvb21GYWN0b3IpOworICAgICAgICAgICAgaW50IHkgPSBpdGVtLT55LT5jb21wdXRl
TGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29t
RmFjdG9yKTsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXIt
PmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxl
KCksIHpvb21GYWN0b3IpIDogMDsKKyAgICAgICAgICAgIGludCBzcHJlYWQgPSBpdGVtLT5zcHJl
YWQgPyBpdGVtLT5zcHJlYWQtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0
ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpIDogMDsKICAgICAgICAgICAgIFNoYWRv
d1N0eWxlIHNoYWRvd1N0eWxlID0gaXRlbS0+c3R5bGUgJiYgaXRlbS0+c3R5bGUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVJbnNldCA/IEluc2V0IDogTm9ybWFsOwogICAgICAgICAgICAgQ29sb3Ig
Y29sb3I7CiAgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCi0gICAgICAgICAgICAgICAgY29s
b3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChtX3N0eWxlKQotICAgICAgICAgICAgICAgIGNvbG9yID0gbV9zdHlsZS0+
Y29sb3IoKTsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
KHN0YXRlLCBpdGVtLT5jb2xvci5nZXQoKSk7CisgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS5z
dHlsZSgpKQorICAgICAgICAgICAgICAgIGNvbG9yID0gc3RhdGUuc3R5bGUoKS0+Y29sb3IoKTsK
IAogICAgICAgICAgICAgT3duUHRyPFNoYWRvd0RhdGE+IHNoYWRvd0RhdGEgPSBhZG9wdFB0cihu
ZXcgU2hhZG93RGF0YShJbnRQb2ludCh4LCB5KSwgYmx1ciwgc3ByZWFkLCBzaGFkb3dTdHlsZSwg
aWQgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3csIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9y
IDogQ29sb3I6OnRyYW5zcGFyZW50KSk7CiAgICAgICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVy
dHlUZXh0U2hhZG93KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFRleHRTaGFkb3coc2hh
ZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlz
IGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRUZXh0U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8g
dGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CiAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVsZWFz
ZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZp
cnN0IGVudHJ5CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Qm94U2hhZG93KHNo
YWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhp
cyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewogICAgICAgICBIQU5E
TEVfSU5IRVJJVF9BTkRfSU5JVElBTChib3hSZWZsZWN0LCBCb3hSZWZsZWN0KQogICAgICAgICBp
ZiAocHJpbWl0aXZlVmFsdWUpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJveFJlZmxlY3Qo
UmVuZGVyU3R5bGU6OmluaXRpYWxCb3hSZWZsZWN0KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0Qm94UmVmbGVjdChSZW5kZXJTdHlsZTo6aW5pdGlhbEJveFJlZmxlY3QoKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzQxMSwxMyArMzM4NSwxNCBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgICAgICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiByZWZsZWN0aW9uID0g
U3R5bGVSZWZsZWN0aW9uOjpjcmVhdGUoKTsKICAgICAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0
aW9uKCpyZWZsZWN0VmFsdWUtPmRpcmVjdGlvbigpKTsKICAgICAgICAgaWYgKHJlZmxlY3RWYWx1
ZS0+b2Zmc2V0KCkpCi0gICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVjdFZh
bHVlLT5vZmZzZXQoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQ
ZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdHlsZSgpLCBtX3Jvb3RF
bGVtZW50U3R5bGUsIHpvb21GYWN0b3IpKTsKKyAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE9m
ZnNldChyZWZsZWN0VmFsdWUtPm9mZnNldCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2Vy
Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0
YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3RvcikpOwogICAg
ICAgICBOaW5lUGllY2VJbWFnZSBtYXNrOwogICAgICAgICBtYXNrLnNldE1hc2tEZWZhdWx0cygp
OwotICAgICAgICBtX3N0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUt
Pm1hc2soKSwgbWFzayk7CisgICAgICAgIC8vIG1fc3R5bGVNYXAuCisgICAgICAgIENTU1RvU3R5
bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlKHN0YXRlLCBpZCwgcmVmbGVjdFZhbHVlLT5tYXNrKCks
IG1hc2spOwogICAgICAgICByZWZsZWN0aW9uLT5zZXRNYXNrKG1hc2spOwogCi0gICAgICAgIG1f
c3R5bGUtPnNldEJveFJlZmxlY3QocmVmbGVjdGlvbi5yZWxlYXNlKCkpOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRCb3hSZWZsZWN0KHJlZmxlY3Rpb24ucmVsZWFzZSgpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5U3JjOiAvLyBPbmx5IHVzZWQgaW4g
QGZvbnQtZmFjZSBydWxlcy4KQEAgLTM0MjYsMjkgKzM0MDEsMjkgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlOgogICAg
ICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRDb2x1bW5SdWxl
Q29sb3IobV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkuaXNWYWxpZCgpID8gbV9wYXJl
bnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkgOiBtX3BhcmVudFN0eWxlLT5jb2xvcigpKTsKLSAg
ICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1bGVTdHlsZShtX3BhcmVudFN0eWxlLT5jb2x1
bW5SdWxlU3R5bGUoKSk7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRDb2x1bW5SdWxlV2lkdGgo
bV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZVdpZHRoKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0Q29sdW1uUnVsZUNvbG9yKHN0YXRlLnBhcmVudFN0eWxlKCktPmNvbHVtblJ1bGVD
b2xvcigpLmlzVmFsaWQoKSA/IHN0YXRlLnBhcmVudFN0eWxlKCktPmNvbHVtblJ1bGVDb2xvcigp
IDogc3RhdGUucGFyZW50U3R5bGUoKS0+Y29sb3IoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRDb2x1bW5SdWxlU3R5bGUoc3RhdGUucGFyZW50U3R5bGUoKS0+Y29sdW1uUnVsZVN0
eWxlKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29sdW1uUnVsZVdpZHRoKHN0
YXRlLnBhcmVudFN0eWxlKCktPmNvbHVtblJ1bGVXaWR0aCgpKTsKICAgICAgICAgfSBlbHNlIGlm
IChpc0luaXRpYWwpCi0gICAgICAgICAgICBtX3N0eWxlLT5yZXNldENvbHVtblJ1bGUoKTsKKyAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnJlc2V0Q29sdW1uUnVsZSgpOwogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWU6CiAgICAgICAgIGlmICghaXNJ
bmhlcml0KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVl
RGlyZWN0aW9uKG1fcGFyZW50U3R5bGUtPm1hcnF1ZWVEaXJlY3Rpb24oKSk7Ci0gICAgICAgIG1f
c3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQobV9wYXJlbnRTdHlsZS0+bWFycXVlZUluY3JlbWVu
dCgpKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKG1fcGFyZW50U3R5bGUtPm1h
cnF1ZWVTcGVlZCgpKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudChtX3Bh
cmVudFN0eWxlLT5tYXJxdWVlTG9vcENvdW50KCkpOwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJx
dWVlQmVoYXZpb3IobV9wYXJlbnRTdHlsZS0+bWFycXVlZUJlaGF2aW9yKCkpOworICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlRGlyZWN0aW9uKHN0YXRlLnBhcmVudFN0eWxlKCktPm1h
cnF1ZWVEaXJlY3Rpb24oKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVJbmNy
ZW1lbnQoc3RhdGUucGFyZW50U3R5bGUoKS0+bWFycXVlZUluY3JlbWVudCgpKTsKKyAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKHN0YXRlLnBhcmVudFN0eWxlKCktPm1hcnF1
ZWVTcGVlZCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUxvb3BDb3VudChz
dGF0ZS5wYXJlbnRTdHlsZSgpLT5tYXJxdWVlTG9vcENvdW50KCkpOworICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRNYXJxdWVlQmVoYXZpb3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+bWFycXVlZUJl
aGF2aW9yKCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
cnF1ZWVSZXBldGl0aW9uOiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKG1h
cnF1ZWVMb29wQ291bnQsIE1hcnF1ZWVMb29wQ291bnQpCiAgICAgICAgIGlmICghcHJpbWl0aXZl
VmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUluZmluaXRlKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0
TWFycXVlZUxvb3BDb3VudCgtMSk7IC8vIC0xIG1lYW5zIHJlcGVhdCBmb3JldmVyLgorICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUxvb3BDb3VudCgtMSk7IC8vIC0xIG1lYW5z
IHJlcGVhdCBmb3JldmVyLgogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1i
ZXIoKSkKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQocHJpbWl0aXZl
VmFsdWUtPmdldEludFZhbHVlKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFy
cXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTcGVlZDogewpA
QCAtMzQ1OCwxOSArMzQzMywxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBpZiAoaW50IGlkZW50
ID0gcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAoaWRl
bnQpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbG93OgotICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldE1hcnF1ZWVTcGVlZCg1MDApOyAvLyA1MDAgbXNlYy4KKyAgICAgICAgICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQoNTAwKTsgLy8gNTAwIG1zZWMuCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgotICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCg4NSk7IC8vIDg1bXNlYy4gVGhl
IFdpbklFIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVl
ZVNwZWVkKDg1KTsgLy8gODVtc2VjLiBUaGUgV2luSUUgZGVmYXVsdC4KICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVGYXN0OgotICAgICAgICAgICAgICAg
IG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCgxMCk7IC8vIDEwbXNlYy4gU3VwZXIgZmFzdC4KKyAg
ICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQoMTApOyAvLyAxMG1z
ZWMuIFN1cGVyIGZhc3QuCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVGltZSgpKQotICAgICAgICAgICAg
bV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxpbnQs
IENTU1ByaW1pdGl2ZVZhbHVlOjpNaWxsaXNlY29uZHM+KCkpOworICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxpbnQs
IENTU1ByaW1pdGl2ZVZhbHVlOjpNaWxsaXNlY29uZHM+KCkpOwogICAgICAgICBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgLy8gRm9yIHNjcm9sbGFtb3VudCBzdXBwb3J0Lgot
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
bnRWYWx1ZSgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZChw
cmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVJbmNyZW1lbnQ6IHsKQEAgLTM0ODAsMTkg
KzM0NTUsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
KSB7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU21hbGw6Ci0gICAgICAgICAgICAgICAgbV9z
dHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMSwgRml4ZWQpKTsgLy8gMXB4LgorICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDEs
IEZpeGVkKSk7IC8vIDFweC4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUlu
Y3JlbWVudChMZW5ndGgoNiwgRml4ZWQpKTsgLy8gNnB4LiBUaGUgV2luSUUgZGVmYXVsdC4KKyAg
ICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCg2
LCBGaXhlZCkpOyAvLyA2cHguIFRoZSBXaW5JRSBkZWZhdWx0LgogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlOgotICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDM2LCBGaXhlZCkpOyAvLyAzNnB4Lgor
ICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3Ro
KDM2LCBGaXhlZCkpOyAvLyAzNnB4LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTGVuZ3RoIG1hcnF1ZWVMZW5ndGgg
PSBjb252ZXJ0VG9JbnRMZW5ndGgocHJpbWl0aXZlVmFsdWUsIHN0eWxlKCksIG1fcm9vdEVsZW1l
bnRTdHlsZSk7CisgICAgICAgICAgICBMZW5ndGggbWFycXVlZUxlbmd0aCA9IGNvbnZlcnRUb0lu
dExlbmd0aChwcmltaXRpdmVWYWx1ZSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRT
dHlsZSgpKTsKICAgICAgICAgICAgIGlmICghbWFycXVlZUxlbmd0aC5pc1VuZGVmaW5lZCgpKQot
ICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQobWFycXVlZUxlbmd0
aCk7CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUluY3JlbWVudCht
YXJxdWVlTGVuZ3RoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzUw
MSwxOSArMzQ3NiwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVl
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TG9jYWxlKG51
bGxBdG9tKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExvY2FsZShudWxsQXRvbSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldExvY2FsZShwcmltaXRpdmVW
YWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldFNjcmlwdChsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKG1fc3R5
bGUtPmxvY2FsZSgpKSk7Ci0gICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TG9jYWxlKHByaW1pdGl2ZVZhbHVl
LT5nZXRTdHJpbmdWYWx1ZSgpKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlw
dGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24oc3RhdGUuc3R5bGUo
KS0+bG9jYWxlKCkpKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFRleHRTaXplQWRqdXN0OiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFM
KHRleHRTaXplQWRqdXN0LCBUZXh0U2l6ZUFkanVzdCkKICAgICAgICAgaWYgKCFwcmltaXRpdmVW
YWx1ZSB8fCAhcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIHNldFRleHRTaXplQWRqdXN0KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlQXV0byk7CisgICAgICAgIHN0YXRlLnNldFRleHRTaXplQWRqdXN0KHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0byk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQpAQCAtMzUyNCw3ICszNDk5LDcgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAgICBtX3N0eWxl
LT5zZXREYXNoYm9hcmRSZWdpb25zKFJlbmRlclN0eWxlOjpub25lRGFzaGJvYXJkUmVnaW9ucygp
KTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldERhc2hib2FyZFJlZ2lvbnMoUmVuZGVy
U3R5bGU6Om5vbmVEYXNoYm9hcmRSZWdpb25zKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKQEAgLTM1NDksOSArMzUyNCw5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAg
ICAgbGVmdCA9IExlbmd0aCgpOwogCiAgICAgICAgICAgICBpZiAocmVnaW9uLT5tX2lzQ2lyY2xl
KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hi
b2FyZFJlZ2lvbjo6Q2lyY2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRvbSwg
bGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKKyAgICAgICAgICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246OkNp
cmNsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lvbiA9
PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CiAgICAgICAgICAgICBlbHNlIGlmIChyZWdpb24tPm1f
aXNSZWN0YW5nbGUpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9u
KFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpSZWN0YW5nbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCBy
aWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOworICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hi
b2FyZFJlZ2lvbjo6UmVjdGFuZ2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRv
bSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKICAgICAgICAgICAgIHJl
Z2lvbiA9IHJlZ2lvbi0+bV9uZXh0LmdldCgpOwogICAgICAgICB9CiAKQEAgLTM1NjQsOCArMzUz
OSw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFwcFJlZ2lvbjog
ewogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlIHx8ICFwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0RHJhZ2dhYmxl
UmVnaW9uTW9kZShwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZURyYWcgPyBE
cmFnZ2FibGVSZWdpb25EcmFnIDogRHJhZ2dhYmxlUmVnaW9uTm9EcmFnKTsKLSAgICAgICAgbV9l
bGVtZW50LT5kb2N1bWVudCgpLT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOworICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXREcmFnZ2FibGVSZWdpb25Nb2RlKHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlRHJhZyA/IERyYWdnYWJsZVJlZ2lvbkRyYWcgOiBEcmFnZ2Fi
bGVSZWdpb25Ob0RyYWcpOworICAgICAgICBzdGF0ZS5kb2N1bWVudCgpLT5zZXRIYXNBbm5vdGF0
ZWRSZWdpb25zKHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zNTgx
LDIxICszNTU2LDIxIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgcmVzdWx0ICo9IDM7
CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NW
YWx1ZVRoaWNrKQogICAgICAgICAgICAgICAgIHJlc3VsdCAqPSA1OwotICAgICAgICAgICAgd2lk
dGggPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlc3VsdCwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19FTVMpLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5
bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgd2lkdGggPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlKHJlc3VsdCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpLT5jb21wdXRlTGVuZ3Ro
PGZsb2F0PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0
b3IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIHdpZHRoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0
eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICB3aWR0
aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHlsZSgpLCBz
dGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLSAgICAgICAgbV9zdHlsZS0+c2V0VGV4dFN0cm9rZVdpZHRoKHdpZHRoKTsK
KyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dFN0cm9rZVdpZHRoKHdpZHRoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtOiB7
CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRyYW5zZm9ybSwgVHJhbnNmb3Jt
KTsKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgICAgICBjcmVh
dGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUs
IG9wZXJhdGlvbnMpOwotICAgICAgICBtX3N0eWxlLT5zZXRUcmFuc2Zvcm0ob3BlcmF0aW9ucyk7
CisgICAgICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWUsIHN0YXRlLnN0eWxlKCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgb3BlcmF0aW9ucyk7CisgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldFRyYW5zZm9ybShvcGVyYXRpb25zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGVyc3BlY3RpdmU6IHsKQEAgLTM2MDUsMzQgKzM1
ODAsMzQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAg
ICBtX3N0eWxlLT5zZXRQZXJzcGVjdGl2ZSgwKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldFBlcnNwZWN0aXZlKDApOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAg
ICAgICAgZmxvYXQgcGVyc3BlY3RpdmVWYWx1ZTsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc0xlbmd0aCgpKQotICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9IHByaW1pdGl2ZVZh
bHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpv
b21GYWN0b3IpOworICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9IHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0
eWxlKCksIHpvb21GYWN0b3IpOwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNO
dW1iZXIoKSkgewogICAgICAgICAgICAgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRy
ZWF0IHZhbHVlbGVzcyBudW1iZXJzIGFzIHB4LgotICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1
ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZh
bHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpLT5jb21wdXRlTGVuZ3RoPGZsb2F0Pihz
dHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgcGVy
c3BlY3RpdmVWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJpbWl0aXZlVmFsdWUt
PmdldERvdWJsZVZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpLT5jb21wdXRlTGVu
Z3RoPGZsb2F0PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21G
YWN0b3IpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBp
ZiAocGVyc3BlY3RpdmVWYWx1ZSA+PSAwLjBmKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UGVy
c3BlY3RpdmUocGVyc3BlY3RpdmVWYWx1ZSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRQZXJzcGVjdGl2ZShwZXJzcGVjdGl2ZVZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uOgogICAgICAgICBpZiAoaXNJbml0
aWFsKQotICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJBbmltYXRpb25zKCk7CisgICAgICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5jbGVhckFuaW1hdGlvbnMoKTsKICAgICAgICAgZWxzZSBpZiAoaXNJ
bmhlcml0KQotICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEFuaW1hdGlvbnMobV9wYXJlbnRT
dHlsZS0+YW5pbWF0aW9ucygpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRB
bmltYXRpb25zKHN0YXRlLnBhcmVudFN0eWxlKCktPmFuaW1hdGlvbnMoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbjoKICAgICAgICAgaWYg
KGlzSW5pdGlhbCkKLSAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyVHJhbnNpdGlvbnMoKTsKKyAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyVHJhbnNpdGlvbnMoKTsKICAgICAgICAgZWxz
ZSBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdFRyYW5zaXRpb25z
KG1fcGFyZW50U3R5bGUtPnRyYW5zaXRpb25zKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+aW5oZXJpdFRyYW5zaXRpb25zKHN0YXRlLnBhcmVudFN0eWxlKCktPnRyYW5zaXRpb25zKCkp
OwogICAgICAgICByZXR1cm47CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6IHsKQEAgLTM2NDAsOCArMzYxNSw4IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCiAgICAgICAgICAgICBi
cmVhazsKIAotICAgICAgICBDb2xvciBjb2wgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmlt
aXRpdmVWYWx1ZSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldFRhcEhpZ2hsaWdodENvbG9yKGNvbCk7
CisgICAgICAgIENvbG9yIGNvbCA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCBwcmlt
aXRpdmVWYWx1ZSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRhcEhpZ2hsaWdodENvbG9y
KGNvbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTM2NTAsNyArMzYyNSw3
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHVzZVRv
dWNoT3ZlcmZsb3dTY3JvbGxpbmcsIFVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcpOwogICAgICAg
ICBpZiAoIXByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG1fc3R5
bGUtPnNldFVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVUb3VjaCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFVzZVRvdWNo
T3ZlcmZsb3dTY3JvbGxpbmcocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVU
b3VjaCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTM2OTMsOSArMzY2OCw5
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxXaWR0
aDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWF4TG9naWNhbEhlaWdodDoKICAgICB7Ci0g
ICAgICAgIENTU1Byb3BlcnR5SUQgbmV3SWQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlv
bkF3YXJlUHJvcGVydHkoaWQsIG1fc3R5bGUtPmRpcmVjdGlvbigpLCBtX3N0eWxlLT53cml0aW5n
TW9kZSgpKTsKKyAgICAgICAgQ1NTUHJvcGVydHlJRCBuZXdJZCA9IENTU1Byb3BlcnR5OjpyZXNv
bHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShpZCwgc3RhdGUuc3R5bGUoKS0+ZGlyZWN0aW9uKCks
IHN0YXRlLnN0eWxlKCktPndyaXRpbmdNb2RlKCkpOwogICAgICAgICBBU1NFUlQobmV3SWQgIT0g
aWQpOwotICAgICAgICByZXR1cm4gYXBwbHlQcm9wZXJ0eShuZXdJZCwgdmFsdWUpOworICAgICAg
ICByZXR1cm4gYXBwbHlQcm9wZXJ0eShzdGF0ZSwgbmV3SWQsIHZhbHVlKTsKICAgICB9CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHJldGNoOgogICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlOgpA
QCAtMzcyNSwxMiArMzcwMCwxMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBIQU5ETEVfSU5IRVJJ
VF9BTkRfSU5JVElBTCh3cml0aW5nTW9kZSwgV3JpdGluZ01vZGUpOwogICAgICAgICAKICAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlKQotICAgICAgICAgICAgc2V0V3JpdGluZ01vZGUoKnByaW1p
dGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRlLnNldFdyaXRpbmdNb2RlKCpwcmltaXRpdmVW
YWx1ZSk7CiAKICAgICAgICAgLy8gRklYTUU6IEl0IGlzIG5vdCBvayB0byBtb2RpZnkgZG9jdW1l
bnQgc3RhdGUgd2hpbGUgYXBwbHlpbmcgc3R5bGUuCi0gICAgICAgIGlmIChtX2VsZW1lbnQgJiYg
bV9lbGVtZW50ID09IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCi0g
ICAgICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1
bWVudEVsZW1lbnQodHJ1ZSk7Ci0KKyAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKSAmJiBzdGF0
ZS5lbGVtZW50KCkgPT0gc3RhdGUuZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCisgICAg
ICAgICAgICBzdGF0ZS5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVt
ZW50KHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNzM4LDcgKzM3MTIsNyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0ZXh0T3Jp
ZW50YXRpb24sIFRleHRPcmllbnRhdGlvbik7CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
KQotICAgICAgICAgICAgc2V0VGV4dE9yaWVudGF0aW9uKCpwcmltaXRpdmVWYWx1ZSk7CisgICAg
ICAgICAgICBzdGF0ZS5zZXRUZXh0T3JpZW50YXRpb24oKnByaW1pdGl2ZVZhbHVlKTsKIAogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMzc0Niw3ICszNzIwLDcgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUJveENvbnRhaW46IHsKICAgICAgICAgSEFORExF
X0lOSEVSSVRfQU5EX0lOSVRJQUwobGluZUJveENvbnRhaW4sIExpbmVCb3hDb250YWluKQogICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRMaW5lQm94Q29udGFpbihM
aW5lQm94Q29udGFpbk5vbmUpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUJv
eENvbnRhaW4oTGluZUJveENvbnRhaW5Ob25lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCkBAIC0zNzU0LDIxICszNzI4LDIxIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgQ1NTTGluZUJveENvbnRhaW5WYWx1ZSogbGluZUJveENvbnRhaW5W
YWx1ZSA9IHN0YXRpY19jYXN0PENTU0xpbmVCb3hDb250YWluVmFsdWUqPih2YWx1ZSk7Ci0gICAg
ICAgIG1fc3R5bGUtPnNldExpbmVCb3hDb250YWluKGxpbmVCb3hDb250YWluVmFsdWUtPnZhbHVl
KCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaW5lQm94Q29udGFpbihsaW5lQm94Q29u
dGFpblZhbHVlLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIENT
UyBGb250cyBNb2R1bGUgTGV2ZWwgMwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250RmVh
dHVyZVNldHRpbmdzOiB7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSAmJiBwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkgewotICAgICAgICAgICAgc2V0Rm9u
dERlc2NyaXB0aW9uKG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLm1ha2VOb3JtYWxGZWF0dXJl
U2V0dGluZ3MoKSk7CisgICAgICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oc3RhdGUu
Zm9udERlc2NyaXB0aW9uKCkubWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0
KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAg
ICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVl
KTsKICAgICAgICAgUmVmUHRyPEZvbnRGZWF0dXJlU2V0dGluZ3M+IHNldHRpbmdzID0gRm9udEZl
YXR1cmVTZXR0aW5nczo6Y3JlYXRlKCk7CiAgICAgICAgIGludCBsZW4gPSBsaXN0LT5sZW5ndGgo
KTsKQEAgLTM3ODAsNyArMzc1NCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBzZXR0aW5n
cy0+YXBwZW5kKEZvbnRGZWF0dXJlKGZlYXR1cmUtPnRhZygpLCBmZWF0dXJlLT52YWx1ZSgpKSk7
CiAgICAgICAgIH0KICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZlYXR1cmVTZXR0aW5ncyhz
ZXR0aW5ncy5yZWxlYXNlKCkpOwotICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlv
bik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM3ODgsMjMgKzM3NjIsMjMgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmlsdGVyOiB7CiAgICAgICAgIEhB
TkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGZpbHRlciwgRmlsdGVyKTsKICAgICAgICAgRmlsdGVy
T3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgICAgICBpZiAoY3JlYXRlRmlsdGVyT3BlcmF0aW9u
cyh2YWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKSkKLSAgICAg
ICAgICAgIG1fc3R5bGUtPnNldEZpbHRlcihvcGVyYXRpb25zKTsKKyAgICAgICAgaWYgKGNyZWF0
ZUZpbHRlck9wZXJhdGlvbnMoc3RhdGUsIHZhbHVlLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290
RWxlbWVudFN0eWxlKCksIG9wZXJhdGlvbnMpKQorICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0RmlsdGVyKG9wZXJhdGlvbnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRDb2x1bW5zOiB7CiAgICAgICAgIFZlY3RvcjxH
cmlkVHJhY2tTaXplPiB0cmFja1NpemVzOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xp
c3QodmFsdWUsIHRyYWNrU2l6ZXMsIHRoaXMpKQorICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFj
a0xpc3QodmFsdWUsIHRyYWNrU2l6ZXMsIHN0YXRlKSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgbV9zdHlsZS0+c2V0R3JpZENvbHVtbnModHJhY2tTaXplcyk7CisgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldEdyaWRDb2x1bW5zKHRyYWNrU2l6ZXMpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkUm93czogewogICAgICAgICBWZWN0
b3I8R3JpZFRyYWNrU2l6ZT4gdHJhY2tTaXplczsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJh
Y2tMaXN0KHZhbHVlLCB0cmFja1NpemVzLCB0aGlzKSkKKyAgICAgICAgaWYgKCFjcmVhdGVHcmlk
VHJhY2tMaXN0KHZhbHVlLCB0cmFja1NpemVzLCBzdGF0ZSkpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIG1fc3R5bGUtPnNldEdyaWRSb3dzKHRyYWNrU2l6ZXMpOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRHcmlkUm93cyh0cmFja1NpemVzKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMzgxMiwxNCArMzc4NiwxNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBHcmlkUG9z
aXRpb24gY29sdW1uOwogICAgICAgICBpZiAoIWNyZWF0ZUdyaWRQb3NpdGlvbih2YWx1ZSwgY29s
dW1uKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0R3JpZEl0ZW1D
b2x1bW4oY29sdW1uKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0R3JpZEl0ZW1Db2x1bW4o
Y29sdW1uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0R3JpZFJvdzogewogICAgICAgICBHcmlkUG9zaXRpb24gcm93OwogICAgICAgICBpZiAoIWNy
ZWF0ZUdyaWRQb3NpdGlvbih2YWx1ZSwgcm93KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgbV9zdHlsZS0+c2V0R3JpZEl0ZW1Sb3cocm93KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0R3JpZEl0ZW1Sb3cocm93KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBUaGVz
ZSBwcm9wZXJ0aWVzIGFyZSBpbXBsZW1lbnRlZCBpbiB0aGUgU3R5bGVCdWlsZGVyIGxvb2t1cCB0
YWJsZS4KQEAgLTQxMDksOTEgKzQwODMsOTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICNpZiBFTkFCTEUoU1ZH
KQogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIFRyeSB0aGUgU1ZHIHByb3BlcnRpZXMKLSAgICAg
ICAgYXBwbHlTVkdQcm9wZXJ0eShpZCwgdmFsdWUpOworICAgICAgICBhcHBseVNWR1Byb3BlcnR5
KHN0YXRlLCBpZCwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAjZW5kaWYKICAgICB9CiB9CiAK
LVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5p
c0ltYWdlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShw
cm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KHZhbHVlKSk7CisgICAgICAgIHJl
dHVybiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoc3RhdGUsIHByb3BlcnR5LCBzdGF0aWNfY2Fz
dDxDU1NJbWFnZVZhbHVlKj4odmFsdWUpKTsKIAogICAgIGlmICh2YWx1ZS0+aXNJbWFnZUdlbmVy
YXRvclZhbHVlKCkpIHsKICAgICAgICAgaWYgKHZhbHVlLT5pc0dyYWRpZW50VmFsdWUoKSkKLSAg
ICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0
YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPih2YWx1ZSktPmdyYWRpZW50V2l0aFN0eWxlc1Jl
c29sdmVkKHRoaXMpLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zy
b21WYWx1ZShwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KHZh
bHVlKSk7CisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKHN0
YXRlLCBwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+KHZhbHVlKS0+Z3Jh
ZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoc3RhdGUpLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGdl
bmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShzdGF0ZSwgcHJvcGVydHksIHN0YXRpY19jYXN0PENT
U0ltYWdlR2VuZXJhdG9yVmFsdWUqPih2YWx1ZSkpOwogICAgIH0KIAogI2lmIEVOQUJMRShDU1Nf
SU1BR0VfU0VUKQogICAgIGlmICh2YWx1ZS0+aXNJbWFnZVNldFZhbHVlKCkpCi0gICAgICAgIHJl
dHVybiBzZXRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdl
U2V0VmFsdWUqPih2YWx1ZSkpOworICAgICAgICByZXR1cm4gc2V0T3JQZW5kaW5nRnJvbVZhbHVl
KHN0YXRlLCBwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KHZhbHVlKSk7
CiAjZW5kaWYKIAogICAgIGlmICh2YWx1ZS0+aXNDdXJzb3JJbWFnZVZhbHVlKCkpCi0gICAgICAg
IHJldHVybiBjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENT
U0N1cnNvckltYWdlVmFsdWUqPih2YWx1ZSkpOworICAgICAgICByZXR1cm4gY3Vyc29yT3JQZW5k
aW5nRnJvbVZhbHVlKHN0YXRlLCBwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTQ3Vyc29ySW1hZ2VW
YWx1ZSo+KHZhbHVlKSk7CiAKICAgICByZXR1cm4gMDsKIH0KIAotUGFzc1JlZlB0cjxTdHlsZUlt
YWdlPiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSwgQ1NTSW1hZ2VWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IFN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShTdHlsZVJlc29sdmVTdGF0
ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlVmFsdWUqIHZhbHVlKQog
ewogICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJ
bWFnZSgpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAg
ICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAg
ICBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CiAg
ICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBT
dHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPFN0eWxl
SW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShTdHlsZVJl
c29sdmVTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlR2VuZXJh
dG9yVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNQZW5kaW5nKCkpIHsKLSAgICAg
ICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAg
ICBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CiAg
ICAgICAgIHJldHVybiBTdHlsZVBlbmRpbmdJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKICAgICB9CiAg
ICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7CiB9CiAKICNpZiBF
TkFCTEUoQ1NTX0lNQUdFX1NFVCkKLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZl
cjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdl
U2V0VmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpz
ZXRPclBlbmRpbmdGcm9tVmFsdWUoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5LCBDU1NJbWFnZVNldFZhbHVlKiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8U3R5
bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2VTZXQoZG9jdW1lbnQo
KSk7CisgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGlu
Z0ltYWdlU2V0KHN0YXRlLmRvY3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQ
ZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9w
ZXJ0eSwgdmFsdWUpOworICAgICAgICBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0
KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKIH0KICNlbmRp
ZgogCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmN1cnNvck9yUGVuZGlu
Z0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NDdXJzb3JJbWFnZVZhbHVlKiB2
YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5k
aW5nRnJvbVZhbHVlKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSwgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSogdmFsdWUpCiB7Ci0gICAgUmVmUHRyPFN0eWxlSW1h
Z2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKGRvY3VtZW50KCkpOworICAg
IFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZShz
dGF0ZS5kb2N1bWVudCgpKTsKICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdl
KCkpCi0gICAgICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVl
KTsKKyAgICAgICAgc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwg
dmFsdWUpOwogICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNv
bHZlcjo6Y2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNr
Rm9yVGV4dFNpemVBZGp1c3QoUmVuZGVyU3R5bGUqIHN0eWxlKQogewotICAgIGlmIChtX3N0eWxl
LT50ZXh0U2l6ZUFkanVzdCgpKQorICAgIGlmIChzdHlsZS0+dGV4dFNpemVBZGp1c3QoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbiht
X3N0eWxlLT5mb250RGVzY3JpcHRpb24oKSk7CisgICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnRE
ZXNjcmlwdGlvbihzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkpOwogICAgIG5ld0ZvbnREZXNjcmlw
dGlvbi5zZXRDb21wdXRlZFNpemUobmV3Rm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSk7
Ci0gICAgbV9zdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7Cisg
ICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwogfQogCi12
b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUs
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3Ja
b29tQ2hhbmdlKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7CiAgICAgaWYgKHN0eWxlLT5lZmZlY3RpdmVab29t
KCkgPT0gcGFyZW50U3R5bGUtPmVmZmVjdGl2ZVpvb20oKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBjaGlsZEZvbnQgPSBzdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCk7CiAgICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihjaGlsZEZvbnQp
OwotICAgIHNldEZvbnRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbiwgY2hpbGRGb250LnNwZWNpZmll
ZFNpemUoKSk7CisgICAgc2V0Rm9udFNpemUoc3RhdGUsIG5ld0ZvbnREZXNjcmlwdGlvbiwgY2hp
bGRGb250LnNwZWNpZmllZFNpemUoKSk7CiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihu
ZXdGb250RGVzY3JpcHRpb24pOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2Vu
ZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFN0
eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUpCiB7CiAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBjaGlsZEZvbnQgPSBz
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CiAKQEAgLTQyMjcsMTEgKzQyMDEsMTEgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqIHN0
eWxlLCBSZW5kZXJTdHlsZSoKICAgICB9CiAKICAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERl
c2NyaXB0aW9uKGNoaWxkRm9udCk7Ci0gICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9u
LCBzaXplKTsKKyAgICBzZXRGb250U2l6ZShzdGF0ZSwgbmV3Rm9udERlc2NyaXB0aW9uLCBzaXpl
KTsKICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CiB9
CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0aW5ncyogc2V0
dGluZ3MpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUoU3R5bGVSZXNv
bHZlU3RhdGUmIHN0YXRlLCBTZXR0aW5ncyogc2V0dGluZ3MpCiB7CiAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWls
eShGb250RGVzY3JpcHRpb246OlN0YW5kYXJkRmFtaWx5KTsKQEAgLTQyNDMsMTYgKzQyMTcsMTcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKFNldHRpbmdzKiBzZXR0
aW5ncykKICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuYXBwZW5kRmFtaWx5
KDApOwogICAgIH0KICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVN
ZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKLSAgICBzZXRGb250U2l6ZShmb250RGVzY3Jp
cHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZmFs
c2UpKTsKLSAgICBtX3N0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGlu
ZUhlaWdodCgpKTsKLSAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7Ci0gICAgc2V0Rm9udERlc2Ny
aXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgc2V0Rm9udFNpemUoc3RhdGUsIGZvbnREZXNj
cmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKGRvY3VtZW50KCksIENTU1ZhbHVlTWVkaXVtLCBm
YWxzZSkpOworICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6Omlu
aXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKKyAg
ICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKIH0KIAotdm9pZCBT
dHlsZVJlc29sdmVyOjpzZXRGb250U2l6ZShGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgZmxvYXQgc2l6ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoU3R5bGVSZXNv
bHZlU3RhdGUmIHN0YXRlLCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQg
c2l6ZSkKIHsKKyAgICBBU1NFUlQoc3RhdGUuZWxlbWVudCgpKTsKICAgICBmb250RGVzY3JpcHRp
b24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0
ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50KCksIG1fc3R5
bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXplLCB1c2VTVkda
b29tUnVsZXMoKSkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29t
cHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoc3RhdGUuZG9jdW1lbnQoKSwgc3RhdGUuc3R5bGUo
KSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNpemUsIHN0YXRlLnVzZVNWR1pv
b21SdWxlcygpKSk7CiB9CiAKIGZsb2F0IFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZy
b21TcGVjaWZpZWRTaXplKERvY3VtZW50KiBkb2N1bWVudCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBi
b29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBib29sIHVzZVNWR1pvb21S
dWxlcykKQEAgLTQ0NTAsNyArNDQyNSw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9t
UHJpbWl0aXZlVmFsdWVJc0Rlcml2ZWRGcm9tRWxlbWVudChDU1NQcmltaXRpdmVWYWx1CiAgICAg
fQogfQogCi1Db2xvciBTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShDU1NQ
cmltaXRpdmVWYWx1ZSogdmFsdWUsIGJvb2wgZm9yVmlzaXRlZExpbmspIGNvbnN0CitDb2xvciBT
dHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShTdHlsZVJlc29sdmVTdGF0ZSYg
c3RhdGUsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwgYm9vbCBmb3JWaXNpdGVkTGluaykKIHsK
ICAgICBpZiAodmFsdWUtPmlzUkdCQ29sb3IoKSkKICAgICAgICAgcmV0dXJuIENvbG9yKHZhbHVl
LT5nZXRSR0JBMzJWYWx1ZSgpKTsKQEAgLTQ0NjAsMTUgKzQ0MzUsMTUgQEAgQ29sb3IgU3R5bGVS
ZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVl
LCBib29sIGZvclYKICAgICBjYXNlIDA6CiAgICAgICAgIHJldHVybiBDb2xvcigpOwogICAgIGNh
c2UgQ1NTVmFsdWVXZWJraXRUZXh0OgotICAgICAgICByZXR1cm4gbV9lbGVtZW50LT5kb2N1bWVu
dCgpLT50ZXh0Q29sb3IoKTsKKyAgICAgICAgcmV0dXJuIHN0YXRlLmRvY3VtZW50KCktPnRleHRD
b2xvcigpOwogICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRMaW5rOgotICAgICAgICByZXR1cm4gKG1f
ZWxlbWVudC0+aXNMaW5rKCkgJiYgZm9yVmlzaXRlZExpbmspID8gbV9lbGVtZW50LT5kb2N1bWVu
dCgpLT52aXNpdGVkTGlua0NvbG9yKCkgOiBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmxpbmtDb2xv
cigpOworICAgICAgICByZXR1cm4gKHN0YXRlLmVsZW1lbnQoKS0+aXNMaW5rKCkgJiYgZm9yVmlz
aXRlZExpbmspID8gc3RhdGUuZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtDb2xvcigpIDogc3RhdGUu
ZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEFjdGl2ZWxp
bms6Ci0gICAgICAgIHJldHVybiBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmFjdGl2ZUxpbmtDb2xv
cigpOworICAgICAgICByZXR1cm4gc3RhdGUuZG9jdW1lbnQoKS0+YWN0aXZlTGlua0NvbG9yKCk7
CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9yOgogICAgICAgICByZXR1cm4g
UmVuZGVyVGhlbWU6OmZvY3VzUmluZ0NvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZUN1cnJlbnRj
b2xvcjoKLSAgICAgICAgcmV0dXJuIG1fc3R5bGUtPmNvbG9yKCk7CisgICAgICAgIHJldHVybiBz
dGF0ZS5zdHlsZSgpLT5jb2xvcigpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBjb2xv
ckZvckNTU1ZhbHVlKGlkZW50KTsKICAgICB9CkBAIC00ODAwLDE5ICs0Nzc1LDE5IEBAIHN0YXRp
YyBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZmlsdGVyT3BlcmF0aW9uRm9yVHlwZShX
ZWJLaXRDU1NGaWx0ZXJWYWx1CiB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJM
RShTVkcpCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCkKK3Zv
aWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTVkdEb2N1bWVudHMoU3R5bGVSZXNvbHZlU3Rh
dGUmIHN0YXRlKQogewotICAgIGlmICghbV9zdHlsZS0+aGFzRmlsdGVyKCkgfHwgbV9wZW5kaW5n
U1ZHRG9jdW1lbnRzLmlzRW1wdHkoKSkKKyAgICBpZiAoIXN0YXRlLnN0eWxlKCktPmhhc0ZpbHRl
cigpIHx8IHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKLSAgICBWZWN0
b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9IG1fc3R5bGUt
Pm11dGFibGVGaWx0ZXIoKS5vcGVyYXRpb25zKCk7CisgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIq
IGNhY2hlZFJlc291cmNlTG9hZGVyID0gc3RhdGUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKTsKKyAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3Bl
cmF0aW9ucyA9IHN0YXRlLnN0eWxlKCktPm11dGFibGVGaWx0ZXIoKS5vcGVyYXRpb25zKCk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpbHRlck9wZXJhdGlvbnMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gZmlsdGVyT3BlcmF0aW9uID0gZmls
dGVyT3BlcmF0aW9ucy5hdChpKTsKICAgICAgICAgaWYgKGZpbHRlck9wZXJhdGlvbi0+Z2V0T3Bl
cmF0aW9uVHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFKSB7CiAgICAgICAgICAg
ICBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24qIHJlZmVyZW5jZUZpbHRlciA9IHN0YXRpY19jYXN0
PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbi5nZXQoKSk7CiAKLSAg
ICAgICAgICAgIFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWUqIHZhbHVlID0gbV9wZW5kaW5nU1ZH
RG9jdW1lbnRzLmdldChyZWZlcmVuY2VGaWx0ZXIpLmdldCgpOworICAgICAgICAgICAgV2ViS2l0
Q1NTU1ZHRG9jdW1lbnRWYWx1ZSogdmFsdWUgPSBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzKCku
Z2V0KHJlZmVyZW5jZUZpbHRlcikuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQ2FjaGVkU1ZHRG9jdW1lbnQqIGNh
Y2hlZERvY3VtZW50ID0gdmFsdWUtPmxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwpAQCAtNDgy
MywzNCArNDc5OCwzNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9jdW1l
bnRzKCkKICAgICAgICAgICAgIHJlZmVyZW5jZUZpbHRlci0+c2V0Q2FjaGVkU1ZHRG9jdW1lbnRS
ZWZlcmVuY2UoYWRvcHRQdHIobmV3IENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGNhY2hlZERv
Y3VtZW50KSkpOwogICAgICAgICB9CiAgICAgfQotICAgIG1fcGVuZGluZ1NWR0RvY3VtZW50cy5j
bGVhcigpOworICAgIHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMoKS5jbGVhcigpOwogfQogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi1TdHlsZVNoYWRlciogU3R5bGVSZXNvbHZl
cjo6c3R5bGVTaGFkZXIoQ1NTVmFsdWUqIHZhbHVlKQorU3R5bGVTaGFkZXIqIFN0eWxlUmVzb2x2
ZXI6OnN0eWxlU2hhZGVyKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVl
KQogewogICAgIGlmICh2YWx1ZS0+aXNXZWJLaXRDU1NTaGFkZXJWYWx1ZSgpKQotICAgICAgICBy
ZXR1cm4gY2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoc3RhdGljX2Nhc3Q8V2Vi
S2l0Q1NTU2hhZGVyVmFsdWUqPih2YWx1ZSkpOworICAgICAgICByZXR1cm4gY2FjaGVkT3JQZW5k
aW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoc3RhdGUsIHN0YXRpY19jYXN0PFdlYktpdENTU1NoYWRl
clZhbHVlKj4odmFsdWUpKTsKICAgICByZXR1cm4gMDsKIH0KIAotU3R5bGVTaGFkZXIqIFN0eWxl
UmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKFdlYktpdENTU1No
YWRlclZhbHVlKiB2YWx1ZSkKK1N0eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBl
bmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIFdlYktp
dENTU1NoYWRlclZhbHVlKiB2YWx1ZSkKIHsKICAgICBTdHlsZVNoYWRlciogc2hhZGVyID0gdmFs
dWUtPmNhY2hlZE9yUGVuZGluZ1NoYWRlcigpOwogICAgIGlmIChzaGFkZXIgJiYgc2hhZGVyLT5p
c1BlbmRpbmdTaGFkZXIoKSkKLSAgICAgICAgbV9oYXNQZW5kaW5nU2hhZGVycyA9IHRydWU7Cisg
ICAgICAgIHN0YXRlLnNldEhhc1BlbmRpbmdTaGFkZXJzKHRydWUpOwogICAgIHJldHVybiBzaGFk
ZXI7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJzKCkKK3ZvaWQg
U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJzKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0
ZSkKIHsKLSAgICBpZiAoIW1fc3R5bGUtPmhhc0ZpbHRlcigpIHx8ICFtX2hhc1BlbmRpbmdTaGFk
ZXJzKQorICAgIGlmICghc3RhdGUuc3R5bGUoKS0+aGFzRmlsdGVyKCkgfHwgIXN0YXRlLmhhc1Bl
bmRpbmdTaGFkZXJzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENhY2hlZFJlc291cmNlTG9h
ZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVk
UmVzb3VyY2VMb2FkZXIoKTsKKyAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3Vy
Y2VMb2FkZXIgPSBzdGF0ZS5lbGVtZW50KCktPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9h
ZGVyKCk7CiAKLSAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3Bl
cmF0aW9ucyA9IG1fc3R5bGUtPm11dGFibGVGaWx0ZXIoKS5vcGVyYXRpb25zKCk7CisgICAgVmVj
dG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBzdGF0ZS5z
dHlsZSgpLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBmaWx0ZXJPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZlB0
cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlck9wZXJhdGlvbnMuYXQo
aSk7CiAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSA9PSBG
aWx0ZXJPcGVyYXRpb246OkNVU1RPTSkgewpAQCAtNDg2Nyw3ICs0ODQyLDcgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMoKQogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQotICAgIG1faGFzUGVuZGluZ1NoYWRlcnMgPSBmYWxzZTsKKyAgICBzdGF0ZS5zZXRI
YXNQZW5kaW5nU2hhZGVycyhmYWxzZSk7CiB9CiAKIHN0YXRpYyBib29sIHNvcnRQYXJhbWV0ZXJz
QnlOYW1lQ29tcGFyYXRvcihjb25zdCBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiYgYSwg
Y29uc3QgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4mIGIpCkBAIC00OTA1LDE2ICs0ODgw
LDE2IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpw
YXJzZUN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlCiAgICAgcmV0dXJuIG51bWJlclBhcmFtZXRl
ci5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHls
ZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcihjb25zdCBTdHJp
bmcmIG5hbWUsIENTU1ZhbHVlTGlzdCogdmFsdWVzKQorUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQ
YXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1l
dGVyKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1
ZUxpc3QqIHZhbHVlcykKIHsKICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1l
dGVyPiB0cmFuc2Zvcm1QYXJhbWV0ZXIgPSBDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXI6
OmNyZWF0ZShuYW1lKTsKICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAg
Y3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZXMsIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRT
dHlsZSwgb3BlcmF0aW9ucyk7CisgICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZXMs
IHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgb3BlcmF0aW9ucyk7CiAg
ICAgdHJhbnNmb3JtUGFyYW1ldGVyLT5zZXRPcGVyYXRpb25zKG9wZXJhdGlvbnMpOwogICAgIHJl
dHVybiB0cmFuc2Zvcm1QYXJhbWV0ZXIucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEN1c3Rv
bUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0
ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZSogcGFyYW1ldGVyVmFsdWUpCitQYXNzUmVm
UHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0
ZXJQYXJhbWV0ZXIoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIG5hbWUs
IENTU1ZhbHVlKiBwYXJhbWV0ZXJWYWx1ZSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG90
aGVyIHBhcmFtZXRlcnMgdHlwZXMgcGFyc2luZy4KICAgICAvLyBib29sZWFuczogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NDM4CkBAIC00OTM3LDcgKzQ5MTIsNyBA
QCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VD
dXN0b21GaWx0ZXJQYXJhbWV0ZXIoY29ucwogICAgIC8vIGFyZSB0cmFuc2Zvcm1zLiBwYXJzZUN1
c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlciB3aWxsCiAgICAgLy8gcmV0dXJuIDAgaWYgdGhh
dCBhc3N1bXB0aW9uIGlzIGluY29ycmVjdC4KICAgICBpZiAodmFsdWVzLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDApLT5pc1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKCkpCi0gICAgICAgIHJldHVy
biBwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcihuYW1lLCB2YWx1ZXMpOworICAg
ICAgICByZXR1cm4gcGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIoc3RhdGUsIG5h
bWUsIHZhbHVlcyk7CiAKICAgICAvLyBXZSBjYW4gaGF2ZSBvbmx5IGFycmF5cyBvZiBib29sZWFu
cyBvciBudW1iZXJzLCBzbyB1c2UgdGhlIGZpcnN0IHZhbHVlIHRvIGNob29zZSBiZXR3ZWVuIHRo
b3NlIHR3by4KICAgICAvLyBXZSBuZWVkIHVwIHRvIDQgdmFsdWVzIChhbGwgYm9vbGVhbnMgb3Ig
YWxsIG51bWJlcnMpLgpAQCAtNDk1NCw3ICs0OTI5LDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0
ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKGNv
bnMKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZp
bHRlclBhcmFtZXRlckxpc3QoQ1NTVmFsdWUqIHBhcmFtZXRlcnNWYWx1ZSwgQ3VzdG9tRmlsdGVy
UGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVyTGlzdCkKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6cGFyc2VD
dXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFs
dWUqIHBhcmFtZXRlcnNWYWx1ZSwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVy
TGlzdCkKIHsKICAgICBIYXNoU2V0PFN0cmluZz4ga25vd25QYXJhbWV0ZXJOYW1lczsKICAgICBD
U1NWYWx1ZUxpc3RJdGVyYXRvciBwYXJhbWV0ZXJJdGVyYXRvcihwYXJhbWV0ZXJzVmFsdWUpOwpA
QCAtNDk3OSw3ICs0OTU0LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRl
clBhcmFtZXRlckxpc3QoQ1NTVmFsdWUqIHBhcmFtZXRlcnNWYWx1ZSwgQ3UKICAgICAgICAgaWYg
KCFpdGVyYXRvci5oYXNNb3JlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IAotICAgICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJhbWV0ZXIgPSBwYXJz
ZUN1c3RvbUZpbHRlclBhcmFtZXRlcihuYW1lLCBpdGVyYXRvci52YWx1ZSgpKTsKKyAgICAgICAg
UmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyYW1ldGVyID0gcGFyc2VDdXN0b21GaWx0
ZXJQYXJhbWV0ZXIoc3RhdGUsIG5hbWUsIGl0ZXJhdG9yLnZhbHVlKCkpOwogICAgICAgICBpZiAo
IXBhcmFtZXRlcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcGFyYW1ldGVy
TGlzdC5hcHBlbmQocGFyYW1ldGVyLnJlbGVhc2UoKSk7CkBAIC00OTkxLDcgKzQ5NjYsNyBAQCBi
b29sIFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChDU1NWYWx1
ZSogcGFyYW1ldGVyc1ZhbHVlLCBDdQogICAgIHJldHVybiB0cnVlOwogfQogCi1QYXNzUmVmUHRy
PEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uKFdlYktpdENTU0ZpbHRlclZhbHVlKiBmaWx0ZXJWYWx1ZSkKK1Bhc3NSZWZQdHI8
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJP
cGVyYXRpb24oU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBXZWJLaXRDU1NGaWx0ZXJWYWx1ZSog
ZmlsdGVyVmFsdWUpCiB7CiAgICAgQVNTRVJUKGZpbHRlclZhbHVlLT5sZW5ndGgoKSk7CiAKQEAg
LTUwMDIsNyArNDk3Nyw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHls
ZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oV2ViCiAgICAgdW5zaWduZWQg
c2hhZGVyc0xpc3RMZW5ndGggPSBzaGFkZXJzTGlzdC0+bGVuZ3RoKCk7CiAgICAgQVNTRVJUKHNo
YWRlcnNMaXN0TGVuZ3RoKTsKIAotICAgIFJlZlB0cjxTdHlsZVNoYWRlcj4gdmVydGV4U2hhZGVy
ID0gc3R5bGVTaGFkZXIoc2hhZGVyc0xpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOwor
ICAgIFJlZlB0cjxTdHlsZVNoYWRlcj4gdmVydGV4U2hhZGVyID0gc3R5bGVTaGFkZXIoc3RhdGUs
IHNoYWRlcnNMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsKICAgICBSZWZQdHI8U3R5
bGVTaGFkZXI+IGZyYWdtZW50U2hhZGVyOwogICAgIEN1c3RvbUZpbHRlclByb2dyYW1UeXBlIHBy
b2dyYW1UeXBlID0gUFJPR1JBTV9UWVBFX0JMRU5EU19FTEVNRU5UX1RFWFRVUkU7CiAgICAgQ3Vz
dG9tRmlsdGVyUHJvZ3JhbU1peFNldHRpbmdzIG1peFNldHRpbmdzOwpAQCAtNTAxNSw3ICs0OTkw
LDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNy
ZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWIKICAgICAgICAgICAgIENTU1ZhbHVlTGlzdEl0
ZXJhdG9yIGl0ZXJhdG9yKG1peEZ1bmN0aW9uKTsKIAogICAgICAgICAgICAgQVNTRVJUKG1peEZ1
bmN0aW9uLT5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBmcmFnbWVudFNoYWRlciA9IHN0eWxlU2hh
ZGVyKGl0ZXJhdG9yLnZhbHVlKCkpOworICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXIgPSBzdHls
ZVNoYWRlcihzdGF0ZSwgaXRlcmF0b3IudmFsdWUoKSk7CiAgICAgICAgICAgICBpdGVyYXRvci5h
ZHZhbmNlKCk7CiAKICAgICAgICAgICAgIEFTU0VSVChtaXhGdW5jdGlvbi0+bGVuZ3RoKCkgPD0g
Myk7CkBAIC01MDMxLDcgKzUwMDYsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlv
bj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFdlYgogICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcHJvZ3JhbVR5cGUgPSBQUk9H
UkFNX1RZUEVfTk9fRUxFTUVOVF9URVhUVVJFOwotICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXIg
PSBzdHlsZVNoYWRlcihmcmFnbWVudFNoYWRlck9yTWl4RnVuY3Rpb24pOworICAgICAgICAgICAg
ZnJhZ21lbnRTaGFkZXIgPSBzdHlsZVNoYWRlcihzdGF0ZSwgZnJhZ21lbnRTaGFkZXJPck1peEZ1
bmN0aW9uKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTUwODcsNyArNTA2Miw3IEBAIFBh
c3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0
b21GaWx0ZXJPcGVyYXRpb24oV2ViCiAgICAgICAgIHBhcmFtZXRlcnNWYWx1ZSA9IGZpbHRlclZh
bHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpOwogICAgIAogICAgIEN1c3RvbUZpbHRlclBh
cmFtZXRlckxpc3QgcGFyYW1ldGVyTGlzdDsKLSAgICBpZiAocGFyYW1ldGVyc1ZhbHVlICYmICFw
YXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QocGFyYW1ldGVyc1ZhbHVlLCBwYXJhbWV0ZXJM
aXN0KSkKKyAgICBpZiAocGFyYW1ldGVyc1ZhbHVlICYmICFwYXJzZUN1c3RvbUZpbHRlclBhcmFt
ZXRlckxpc3Qoc3RhdGUsIHBhcmFtZXRlcnNWYWx1ZSwgcGFyYW1ldGVyTGlzdCkpCiAgICAgICAg
IHJldHVybiAwOwogICAgIAogICAgIFJlZlB0cjxTdHlsZUN1c3RvbUZpbHRlclByb2dyYW0+IHBy
b2dyYW0gPSBTdHlsZUN1c3RvbUZpbHRlclByb2dyYW06OmNyZWF0ZSh2ZXJ0ZXhTaGFkZXIucmVs
ZWFzZSgpLCBmcmFnbWVudFNoYWRlci5yZWxlYXNlKCksIHByb2dyYW1UeXBlLCBtaXhTZXR0aW5n
cywgbWVzaFR5cGUpOwpAQCAtNTA5NSw3ICs1MDcwLDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0
ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihX
ZWIKIH0KICNlbmRpZgogCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlv
bnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJv
b3RTdHlsZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucykKK2Jvb2wgU3R5bGVSZXNv
bHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENT
U1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5
bGUsIEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpCiB7CiAgICAgQVNTRVJUKG91dE9w
ZXJhdGlvbnMuaXNFbXB0eSgpKTsKICAgICAKQEAgLTUxMjgsNyArNTEwMyw3IEBAIGJvb2wgU3R5
bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVu
ZGVyU3R5bGUqIHN0eWxlCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAg
ICBpZiAob3BlcmF0aW9uVHlwZSA9PSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSkgewotICAgICAg
ICAgICAgUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gb3BlcmF0aW9uID0gY3JlYXRlQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uKGZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIFJlZlB0cjxDdXN0
b21GaWx0ZXJPcGVyYXRpb24+IG9wZXJhdGlvbiA9IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlv
bihzdGF0ZSwgZmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgaWYgKCFvcGVyYXRpb24pCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgCkBAIC01MTQ2LDEyICs1MTIx
LDEyIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1
ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgICAgIFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWUqIHN2Z0RvY3VtZW50VmFs
dWUgPSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKj4oYXJndW1lbnQpOwot
ICAgICAgICAgICAgS1VSTCB1cmwgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJM
KHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpKTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gLyptX2Vs
ZW1lbnQtPiovZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCkp
OwogCiAgICAgICAgICAgICBSZWZQdHI8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPiBvcGVyYXRp
b24gPSBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShzdmdEb2N1bWVudFZhbHVlLT51
cmwoKSwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigpLCBvcGVyYXRpb25UeXBlKTsKLSAgICAgICAg
ICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1l
bnRWYWx1ZS0+dXJsKCksIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgICAgIGlm
IChTVkdVUklSZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1
ZS0+dXJsKCksIHN0YXRlLmRvY3VtZW50KCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFzdmdE
b2N1bWVudFZhbHVlLT5sb2FkUmVxdWVzdGVkKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fcGVu
ZGluZ1NWR0RvY3VtZW50cy5zZXQob3BlcmF0aW9uLmdldCgpLCBzdmdEb2N1bWVudFZhbHVlKTsK
KyAgICAgICAgICAgICAgICAgICAgc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cygpLnNldChvcGVy
YXRpb24uZ2V0KCksIHN2Z0RvY3VtZW50VmFsdWUpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYg
KHN2Z0RvY3VtZW50VmFsdWUtPmNhY2hlZFNWR0RvY3VtZW50KCkpCiAgICAgICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbi0+c2V0Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UoYWRvcHRQdHIobmV3
IENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKHN2Z0RvY3VtZW50VmFsdWUtPmNhY2hlZFNWR0Rv
Y3VtZW50KCkpKSk7CiAgICAgICAgICAgICB9CkBAIC01MjM1LDcgKzUyMTAsNyBAQCBib29sIFN0
eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJl
bmRlclN0eWxlKiBzdHlsZQogICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRl
bS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3Ip
IDogMDsKICAgICAgICAgICAgIENvbG9yIGNvbG9yOwogICAgICAgICAgICAgaWYgKGl0ZW0tPmNv
bG9yKQotICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRl
bS0+Y29sb3IuZ2V0KCkpOworICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0
aXZlVmFsdWUoc3RhdGUsIGl0ZW0tPmNvbG9yLmdldCgpKTsKIAogICAgICAgICAgICAgb3BlcmF0
aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246OmNyZWF0
ZShsb2NhdGlvbiwgYmx1ciwgY29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6dHJhbnNw
YXJlbnQsIG9wZXJhdGlvblR5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTI1NSw3ICs1
MjMwLDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1Zh
bHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUKIAogUGFzc1JlZlB0cjxTdHlsZUltYWdl
PiBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5k
aW5nSW1hZ2UpCiB7Ci0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9h
ZGVyID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworICAg
IENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IGRvY3VtZW50KCkt
PmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAKICAgICBpZiAocGVuZGluZ0ltYWdlLT5jc3NJbWFn
ZVZhbHVlKCkpIHsKICAgICAgICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VWYWx1ZSA9IHBlbmRpbmdJ
bWFnZS0+Y3NzSW1hZ2VWYWx1ZSgpOwpAQCAtNTI4MywyNSArNTI1OCwyNSBAQCBQYXNzUmVmUHRy
PFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5n
SW1hZ2UqIHBlbmRpbgogICAgIHJldHVybiAwOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Omxv
YWRQZW5kaW5nSW1hZ2VzKCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMo
U3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChtX3BlbmRpbmdJbWFnZVByb3Bl
cnRpZXMuaXNFbXB0eSgpKQorICAgIGlmIChzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCku
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1h
cDo6Y29uc3RfaXRlcmF0b3I6OktleXMgZW5kID0gbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmVu
ZCgpLmtleXMoKTsKLSAgICBmb3IgKFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVy
YXRvcjo6S2V5cyBpdCA9IG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5iZWdpbigpLmtleXMoKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0
ZXJhdG9yOjpLZXlzIGVuZCA9IHN0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5lbmQoKS5r
ZXlzKCk7CisgICAgZm9yIChQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6
OktleXMgaXQgPSBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuYmVnaW4oKS5rZXlzKCk7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBDU1NQcm9wZXJ0eUlEIGN1cnJlbnRQcm9wZXJ0
eSA9ICppdDsKIAogICAgICAgICBzd2l0Y2ggKGN1cnJlbnRQcm9wZXJ0eSkgewogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlOiB7Ci0gICAgICAgICAgICBmb3IgKEZpbGxM
YXllciogYmFja2dyb3VuZExheWVyID0gbV9zdHlsZS0+YWNjZXNzQmFja2dyb3VuZExheWVycygp
OyBiYWNrZ3JvdW5kTGF5ZXI7IGJhY2tncm91bmRMYXllciA9IGJhY2tncm91bmRMYXllci0+bmV4
dCgpKSB7CisgICAgICAgICAgICBmb3IgKEZpbGxMYXllciogYmFja2dyb3VuZExheWVyID0gc3Rh
dGUuc3R5bGUoKS0+YWNjZXNzQmFja2dyb3VuZExheWVycygpOyBiYWNrZ3JvdW5kTGF5ZXI7IGJh
Y2tncm91bmRMYXllciA9IGJhY2tncm91bmRMYXllci0+bmV4dCgpKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSAmJiBiYWNrZ3JvdW5kTGF5ZXItPmltYWdl
KCktPmlzUGVuZGluZ0ltYWdlKCkpCiAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRMYXll
ci0+c2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFn
ZSo+KGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDb250ZW50OiB7
Ci0gICAgICAgICAgICBmb3IgKENvbnRlbnREYXRhKiBjb250ZW50RGF0YSA9IGNvbnN0X2Nhc3Q8
Q29udGVudERhdGEqPihtX3N0eWxlLT5jb250ZW50RGF0YSgpKTsgY29udGVudERhdGE7IGNvbnRl
bnREYXRhID0gY29udGVudERhdGEtPm5leHQoKSkgeworICAgICAgICAgICAgZm9yIChDb250ZW50
RGF0YSogY29udGVudERhdGEgPSBjb25zdF9jYXN0PENvbnRlbnREYXRhKj4oc3RhdGUuc3R5bGUo
KS0+Y29udGVudERhdGEoKSk7IGNvbnRlbnREYXRhOyBjb250ZW50RGF0YSA9IGNvbnRlbnREYXRh
LT5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY29udGVudERhdGEtPmlzSW1hZ2UoKSkg
ewogICAgICAgICAgICAgICAgICAgICBTdHlsZUltYWdlKiBpbWFnZSA9IHN0YXRpY19jYXN0PElt
YWdlQ29udGVudERhdGEqPihjb250ZW50RGF0YSktPmltYWdlKCk7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkgewpAQCAtNTMxNCw3ICs1Mjg5LDcgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q3Vyc29yOiB7Ci0gICAgICAg
ICAgICBpZiAoQ3Vyc29yTGlzdCogY3Vyc29yTGlzdCA9IG1fc3R5bGUtPmN1cnNvcnMoKSkgewor
ICAgICAgICAgICAgaWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBzdGF0ZS5zdHlsZSgpLT5j
dXJzb3JzKCkpIHsKICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnNv
ckxpc3QtPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgIEN1cnNvckRhdGEmIGN1
cnJlbnRDdXJzb3IgPSBjdXJzb3JMaXN0LT5hdChpKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KFN0eWxlSW1hZ2UqIGltYWdlID0gY3VycmVudEN1cnNvci5pbWFnZSgpKSB7CkBAIC01MzI2LDE3
ICs1MzAxLDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RT
dHlsZUltYWdlOiB7Ci0gICAgICAgICAgICBpZiAobV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSAm
JiBtX3N0eWxlLT5saXN0U3R5bGVJbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAg
ICAgICAgIG1fc3R5bGUtPnNldExpc3RTdHlsZUltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGlj
X2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0eWxlLT5saXN0U3R5bGVJbWFnZSgpKSkpOwor
ICAgICAgICAgICAgaWYgKHN0YXRlLnN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCkgJiYgc3RhdGUu
c3R5bGUoKS0+bGlzdFN0eWxlSW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0
YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oc3RhdGUuc3R5bGUoKS0+bGlzdFN0eWxlSW1h
Z2UoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZTogewotICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmJv
cmRlckltYWdlU291cmNlKCkgJiYgbV9zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKS0+aXNQZW5k
aW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJJbWFnZVNvdXJj
ZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHls
ZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSkpKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgp
LT5ib3JkZXJJbWFnZVNvdXJjZSgpICYmIHN0YXRlLnN0eWxlKCktPmJvcmRlckltYWdlU291cmNl
KCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
Qm9yZGVySW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRp
bmdJbWFnZSo+KHN0YXRlLnN0eWxlKCktPmJvcmRlckltYWdlU291cmNlKCkpKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94
UmVmbGVjdDogewotICAgICAgICAgICAgaWYgKFN0eWxlUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9
IG1fc3R5bGUtPmJveFJlZmxlY3QoKSkgeworICAgICAgICAgICAgaWYgKFN0eWxlUmVmbGVjdGlv
biogcmVmbGVjdGlvbiA9IHN0YXRlLnN0eWxlKCktPmJveFJlZmxlY3QoKSkgewogICAgICAgICAg
ICAgICAgIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBtYXNrSW1hZ2UgPSByZWZsZWN0aW9uLT5tYXNr
KCk7CiAgICAgICAgICAgICAgICAgaWYgKG1hc2tJbWFnZS5pbWFnZSgpICYmIG1hc2tJbWFnZS5p
bWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxT
dHlsZUltYWdlPiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5
bGVQZW5kaW5nSW1hZ2UqPihtYXNrSW1hZ2UuaW1hZ2UoKSkpOwpAQCAtNTM0NiwxMiArNTMyMSwx
MiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94
SW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAgIGlmIChtX3N0eWxlLT5tYXNrQm94SW1hZ2VTb3Vy
Y2UoKSAmJiBtX3N0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkK
LSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXNrQm94SW1hZ2VTb3VyY2UobG9hZFBlbmRp
bmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPm1hc2tCb3hJ
bWFnZVNvdXJjZSgpKSkpOworICAgICAgICAgICAgaWYgKHN0YXRlLnN0eWxlKCktPm1hc2tCb3hJ
bWFnZVNvdXJjZSgpICYmIHN0YXRlLnN0eWxlKCktPm1hc2tCb3hJbWFnZVNvdXJjZSgpLT5pc1Bl
bmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hc2tCb3hJ
bWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdl
Kj4oc3RhdGUuc3R5bGUoKS0+bWFza0JveEltYWdlU291cmNlKCkpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdl
OiB7Ci0gICAgICAgICAgICBmb3IgKEZpbGxMYXllciogbWFza0xheWVyID0gbV9zdHlsZS0+YWNj
ZXNzTWFza0xheWVycygpOyBtYXNrTGF5ZXI7IG1hc2tMYXllciA9IG1hc2tMYXllci0+bmV4dCgp
KSB7CisgICAgICAgICAgICBmb3IgKEZpbGxMYXllciogbWFza0xheWVyID0gc3RhdGUuc3R5bGUo
KS0+YWNjZXNzTWFza0xheWVycygpOyBtYXNrTGF5ZXI7IG1hc2tMYXllciA9IG1hc2tMYXllci0+
bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1hc2tMYXllci0+aW1hZ2UoKSAmJiBtYXNr
TGF5ZXItPmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCiAgICAgICAgICAgICAgICAgICAgIG1h
c2tMYXllci0+c2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRp
bmdJbWFnZSo+KG1hc2tMYXllci0+aW1hZ2UoKSkpKTsKICAgICAgICAgICAgIH0KQEAgLTUzNjIs
MjIgKzUzMzcsMjIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuY2xlYXIoKTsK
KyAgICBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuY2xlYXIoKTsKIH0KIAotdm9pZCBT
dHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1Jlc291cmNlcygpCit2b2lkIFN0eWxlUmVzb2x2ZXI6
OmxvYWRQZW5kaW5nUmVzb3VyY2VzKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKIHsKICAgICAv
LyBTdGFydCBsb2FkaW5nIGltYWdlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9h
ZFBlbmRpbmdJbWFnZXMoKTsKKyAgICBsb2FkUGVuZGluZ0ltYWdlcyhzdGF0ZSk7CiAKICNpZiBF
TkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgLy8gU3RhcnQgbG9hZGluZyB0aGUgc2hhZGVycyByZWZl
cmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdTaGFkZXJzKCk7CisgICAgbG9h
ZFBlbmRpbmdTaGFkZXJzKHN0YXRlKTsKICNlbmRpZgogICAgIAogI2lmIEVOQUJMRShDU1NfRklM
VEVSUykgJiYgRU5BQkxFKFNWRykKICAgICAvLyBTdGFydCBsb2FkaW5nIHRoZSBTVkcgRG9jdW1l
bnRzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ1NWR0RvY3VtZW50
cygpOworICAgIGxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKHN0YXRlKTsKICNlbmRpZgogfQogCkBA
IC01NDI1LDcgKzU0MDAsNiBAQCB2b2lkIE1lZGlhUXVlcnlSZXN1bHQ6OnJlcG9ydE1lbW9yeVVz
YWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbgogdm9pZCBTdHlsZVJl
c29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJ
bmZvKSBjb25zdAogewogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8s
IHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3N0
eWxlKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2F1dGhvclN0eWxlKTsKICAgICBpbmZvLmFkZE1l
bWJlcihtX3VzZXJTdHlsZSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9mZWF0dXJlcyk7CkBAIC01
NDM0LDMxICs1NDA4LDE2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2Uo
TWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKICAgICBpbmZvLmFkZE1l
bWJlcihtX2tleWZyYW1lc1J1bGVNYXApOwogICAgIGluZm8uYWRkTWVtYmVyKG1fbWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9tYXRjaGVkUHJvcGVydGllc0Nh
Y2hlU3dlZXBUaW1lcik7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9tYXRjaGVkUnVsZXMpOwogCi0g
ICAgaW5mby5hZGRNZW1iZXIobV9ydWxlTGlzdCk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9wZW5k
aW5nSW1hZ2VQcm9wZXJ0aWVzKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX21lZGl1bSk7CiAgICAg
aW5mby5hZGRNZW1iZXIobV9yb290RGVmYXVsdFN0eWxlKTsKICAgICBpbmZvLmFkZE1lbWJlciht
X2RvY3VtZW50KTsKIAotICAgIC8vIEZJWE1FOiBwb2ludGVyIHRvIFJlbmRlclN0eWxlIGNvdWxk
IHBvaW50IHRvIGFuIGFscmVhZHkgZGVsZXRlZCBvYmplY3QuCi0gICAgaW5mby5pZ25vcmVNZW1i
ZXIobV9wYXJlbnRTdHlsZSk7Ci0gICAgaW5mby5pZ25vcmVNZW1iZXIobV9yb290RWxlbWVudFN0
eWxlKTsKLQotICAgIGluZm8uYWRkTWVtYmVyKG1fZWxlbWVudCk7Ci0gICAgaW5mby5hZGRNZW1i
ZXIobV9zdHlsZWRFbGVtZW50KTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3JlZ2lvbkZvclN0eWxp
bmcpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fcGFyZW50Tm9kZSk7Ci0gICAgaW5mby5hZGRNZW1i
ZXIobV9saW5lSGVpZ2h0VmFsdWUpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fZm9udFNlbGVjdG9y
KTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3Vs
dHMpOwogICAgIGluZm8uaWdub3JlTWVtYmVyKG1fc3R5bGVCdWlsZGVyKTsKICAgICBpbmZvLmFk
ZE1lbWJlcihtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwKTsKICAgICBpbmZvLmFkZE1lbWJl
cihtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykg
JiYgRU5BQkxFKFNWRykKLSAgICBpbmZvLmFkZE1lbWJlcihtX3BlbmRpbmdTVkdEb2N1bWVudHMp
OwotI2VuZGlmCiAgICAgaW5mby5hZGRNZW1iZXIobV9zY29wZVJlc29sdmVyKTsKIAogICAgIC8v
IEZJWE1FOiBtb3ZlIHRoaXMgdG8gYSBwbGFjZSB3aGVyZSBpdCB3b3VsZCBiZSBjYWxsZWQgb25s
eSBvbmNlPwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggMzMzNjZjNzY3OTExZTcz
MDE5Zjk0OTRiY2ViNGRjOGIwYzg3NDc1OC4uNzg2ODk4YTY1MDEyZTRkMjU5NjhiZjM4NjU0ZWJk
ZGZhYTNlNWMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0yMyw2ICsyMyw3
IEBACiAjZGVmaW5lIFN0eWxlUmVzb2x2ZXJfaAogCiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2lu
Y2x1ZGUgIkNTU1J1bGVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgogI2luY2x1
ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkxpbmtIYXNoLmgiCkBAIC0zNCw4ICszNSwx
MiBAQAogI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgogI2luY2x1ZGUgIlNlbGVjdG9yRmls
dGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCisjaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlU3RhdGUuaCIKICNpbmNsdWRlICJTdHlsZVNjb3BlUmVzb2x2ZXIuaCIKICNpbmNsdWRl
ICJWaWV3cG9ydFN0eWxlUmVzb2x2ZXIuaCIKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVO
QUJMRShTVkcpCisjaW5jbHVkZSAiV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZS5oIgorI2VuZGlm
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTg2LDYgKzkxLDcgQEAgY2xhc3MgU3R5bGVJbWFnZTsK
IGNsYXNzIFN0eWxlS2V5ZnJhbWU7CiBjbGFzcyBTdHlsZVBlbmRpbmdJbWFnZTsKIGNsYXNzIFN0
eWxlUHJvcGVydHlTZXQ7CitjbGFzcyBTdHlsZVJlc29sdmVTdGF0ZTsKIGNsYXNzIFN0eWxlUnVs
ZTsKICNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKIGNsYXNzIFN0eWxlUnVsZUhvc3Q7CkBAIC0xMzIs
NiArMTM4LDkgQEAgZW51bSBSdWxlTWF0Y2hpbmdCZWhhdmlvciB7CiAgICAgTWF0Y2hPbmx5VXNl
ckFnZW50UnVsZXMsCiB9OwogCisjaWZuZGVmIFRBU0FLCisjZW5kaWYKKwogLy8gVGhpcyBjbGFz
cyBzZWxlY3RzIGEgUmVuZGVyU3R5bGUgZm9yIGEgZ2l2ZW4gZWxlbWVudCBiYXNlZCBvbiBhIGNv
bGxlY3Rpb24gb2Ygc3R5bGVzaGVldHMuCiBjbGFzcyBTdHlsZVJlc29sdmVyIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShTdHlsZVJlc29sdmVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC0xNjEsMjAgKzE3MCw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBzdHlsZUZvckRvY3VtZW50KERvY3VtZW50KiwgQ1NTRm9udFNlbGVjdG9yKiA9
IDApOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5n
ZXQoKTsgfQotICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cGFyZW50U3R5bGU7IH0KLSAgICBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcm9vdEVsZW1lbnRTdHlsZTsgfQotICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBj
b25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KICAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25z
dCB7IHJldHVybiBtX2RvY3VtZW50OyB9Ci0gICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24oKSB7IHJldHVybiBzdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsgfQotICAg
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4g
cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICB2b2lkIHNldEZvbnREZXNj
cmlwdGlvbihjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgeyBtX2ZvbnRE
aXJ0eSB8PSBzdHlsZSgpLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsgfQot
ICAgIHZvaWQgc2V0Wm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFpv
b20oZik7IH0KLSAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0
eSB8PSBzdHlsZSgpLT5zZXRFZmZlY3RpdmVab29tKGYpOyB9Ci0gICAgdm9pZCBzZXRUZXh0U2l6
ZUFkanVzdChib29sIGIpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0VGV4dFNpemVBZGp1
c3QoYik7IH0KLSAgICB2b2lkIHNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
KSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsg
fQotICAgIHZvaWQgc2V0VGV4dE9yaWVudGF0aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50
YXRpb24pIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0VGV4dE9yaWVudGF0aW9uKHRleHRP
cmllbnRhdGlvbik7IH0KLSAgICBib29sIGhhc1BhcmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBt
X3BhcmVudE5vZGU7IH0KIAogICAgIHZvaWQgcmVzZXRBdXRob3JTdHlsZSgpOwogICAgIHZvaWQg
YXBwZW5kQXV0aG9yU3R5bGVTaGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYpOwpAQCAtMTk4LDE3ICsxOTQsMTcgQEAgcHJpdmF0ZToK
ICAgICB9CiAjZW5kaWYKIAotICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50Kiwg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgUHNldWRvSWQgPSBOT1BTRVVETyk7Ci0gICAg
dm9pZCBpbml0RWxlbWVudChFbGVtZW50Kik7CisgICAgdm9pZCBpbml0Rm9yU3R5bGVSZXNvbHZl
KFN0eWxlUmVzb2x2ZVN0YXRlJiwgRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9
IDApOworICAgIHZvaWQgaW5pdEVsZW1lbnQoU3R5bGVSZXNvbHZlU3RhdGUmLCBFbGVtZW50Kik7
CiAgICAgdm9pZCBjb2xsZWN0RmVhdHVyZXMoKTsKLSAgICBSZW5kZXJTdHlsZSogbG9jYXRlU2hh
cmVkU3R5bGUoKTsKLSAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0
KFJ1bGVTZXQqKTsKLSAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVs
ZXMoKTsKKyAgICBSZW5kZXJTdHlsZSogbG9jYXRlU2hhcmVkU3R5bGUoU3R5bGVSZXNvbHZlU3Rh
dGUmKTsKKyAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KEVsZW1l
bnQqLCBSdWxlU2V0Kik7CisgICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9z
dFJ1bGVzKEVsZW1lbnQqKTsKICAgICBOb2RlKiBsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBh
cmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQ291bnQpIGNvbnN0OwotICAgIFN0eWxlZEVsZW1l
bnQqIGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUqLCB1bnNpZ25lZCYgY291bnQpIGNv
bnN0OwotICAgIGJvb2wgY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqKSBj
b25zdDsKKyAgICBTdHlsZWRFbGVtZW50KiBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhTdHls
ZVJlc29sdmVTdGF0ZSYsIE5vZGUqLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0OworICAgIGJvb2wg
Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlUmVzb2x2ZVN0YXRlJiwgU3R5bGVkRWxlbWVu
dCopIGNvbnN0OwogCi0gICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JLZXlmcmFt
ZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFN0eWxlS2V5ZnJhbWUqLCBLZXlmcmFtZVZhbHVl
Jik7CisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JLZXlmcmFtZShTdHlsZVJl
c29sdmVTdGF0ZSYsIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVLZXlmcmFtZSosIEtl
eWZyYW1lVmFsdWUmKTsKIAogcHVibGljOgogICAgIC8vIFRoZXNlIG1ldGhvZHMgd2lsbCBnaXZl
IGJhY2sgdGhlIHNldCBvZiBydWxlcyB0aGF0IG1hdGNoZWQgZm9yIGEgZ2l2ZW4gZWxlbWVudCAo
b3IgYSBwc2V1ZG8tZWxlbWVudCkuCkBAIC0yMzEsMjUgKzIyNywyOCBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGludCBsZWdhY3lGb250U2l6ZShEb2N1bWVudCosIGludCBwaXhlbEZvbnRTaXplLCBi
b29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpOwogCiBwdWJsaWM6CisgICAgdm9pZCBhcHBs
eVByb3BlcnR5V2l0aFZhbHVlQ2hlY2tpbmcoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0
eUlELCBDU1NWYWx1ZSopOworICAgIHZvaWQgYXBwbHlGb250UHJvcGVydHlUb1N0eWxlKFJlbmRl
clN0eWxlKiB0YXJnZXQsIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHJlZmVyZW5jZSk7CisjaWYg
MAorICAgIC8vIGJhZCBtZXRob2RzIC4uLiBJIHRoaW5rLgogICAgIHZvaWQgYXBwbHlQcm9wZXJ0
eVRvU3R5bGUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBSZW5kZXJTdHlsZSopOwogCiAgICAg
dm9pZCBhcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUq
KTsKKyNlbmRpZgogCi0gICAgdm9pZCB1cGRhdGVGb250KCk7Ci0gICAgdm9pZCBpbml0aWFsaXpl
Rm9udFN0eWxlKFNldHRpbmdzKik7CisgICAgdm9pZCB1cGRhdGVGb250KFN0eWxlUmVzb2x2ZVN0
YXRlJik7CisgICAgdm9pZCBpbml0aWFsaXplRm9udFN0eWxlKFN0eWxlUmVzb2x2ZVN0YXRlJiwg
U2V0dGluZ3MqKTsKIAogICAgIHN0YXRpYyBmbG9hdCBnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lm
aWVkU2l6ZShEb2N1bWVudCosIGZsb2F0IHpvb21GYWN0b3IsIGJvb2wgaXNBYnNvbHV0ZVNpemUs
IGZsb2F0IHNwZWNpZmllZFNpemUsIEVTbWFydE1pbmltdW1Gb3JGb250U2l6ZSA9IFVzZVNtYXJ0
TWluaW11bUZvckZvbnRGaXplKTsKIAotICAgIHZvaWQgc2V0Rm9udFNpemUoRm9udERlc2NyaXB0
aW9uJiwgZmxvYXQgc2l6ZSk7CisgICAgc3RhdGljIHZvaWQgc2V0Rm9udFNpemUoU3R5bGVSZXNv
bHZlU3RhdGUmLCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzaXplKTsKIAogcHJpdmF0ZToKICAg
ICBzdGF0aWMgZmxvYXQgZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQq
LCBSZW5kZXJTdHlsZSosIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUs
IGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKTsKIAogcHVibGljOgotICAgIGJvb2wgdXNlU1ZHWm9vbVJ1
bGVzKCk7Ci0KICAgICBzdGF0aWMgYm9vbCBjb2xvckZyb21QcmltaXRpdmVWYWx1ZUlzRGVyaXZl
ZEZyb21FbGVtZW50KENTU1ByaW1pdGl2ZVZhbHVlKik7Ci0gICAgQ29sb3IgY29sb3JGcm9tUHJp
bWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUqLCBib29sIGZvclZpc2l0ZWRMaW5rID0gZmFs
c2UpIGNvbnN0OworICAgIHN0YXRpYyBDb2xvciBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShTdHls
ZVJlc29sdmVTdGF0ZSYsIENTU1ByaW1pdGl2ZVZhbHVlKiwgYm9vbCBmb3JWaXNpdGVkTGluayA9
IGZhbHNlKTsKIAogICAgIGJvb2wgaGFzU2VsZWN0b3JGb3JJZChjb25zdCBBdG9taWNTdHJpbmcm
KSBjb25zdDsKICAgICBib29sIGhhc1NlbGVjdG9yRm9yQ2xhc3MoY29uc3QgQXRvbWljU3RyaW5n
JikgY29uc3Q7CkBAIC0yODEsMzQgKzI4MCwzNCBAQCBwdWJsaWM6CiAgICAgQ1NTU3R5bGVSdWxl
KiBlbnN1cmVGdWxsQ1NTT01XcmFwcGVyRm9ySW5zcGVjdG9yKFN0eWxlUnVsZSopOwogCiAjaWYg
RU5BQkxFKENTU19GSUxURVJTKQotICAgIGJvb2wgY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NW
YWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5
bGUsIEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOworICAgIGJvb2wgY3JlYXRlRmls
dGVyT3BlcmF0aW9ucyhTdHlsZVJlc29sdmVTdGF0ZSYsIENTU1ZhbHVlKiBpblZhbHVlLCBSZW5k
ZXJTdHlsZSogaW5TdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgRmlsdGVyT3BlcmF0aW9u
cyYgb3V0T3BlcmF0aW9ucyk7CiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIFN0eWxlU2hh
ZGVyKiBzdHlsZVNoYWRlcihDU1NWYWx1ZSopOwotICAgIFN0eWxlU2hhZGVyKiBjYWNoZWRPclBl
bmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShXZWJLaXRDU1NTaGFkZXJWYWx1ZSopOwotICAgIGJv
b2wgcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KENTU1ZhbHVlKiwgQ3VzdG9tRmlsdGVy
UGFyYW1ldGVyTGlzdCYpOwotICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBw
YXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlKik7
CisgICAgU3R5bGVTaGFkZXIqIHN0eWxlU2hhZGVyKFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTVmFs
dWUqKTsKKyAgICBTdHlsZVNoYWRlciogY2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFs
dWUoU3R5bGVSZXNvbHZlU3RhdGUmLCBXZWJLaXRDU1NTaGFkZXJWYWx1ZSopOworICAgIGJvb2wg
cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTVmFs
dWUqLCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0Jik7CisgICAgUGFzc1JlZlB0cjxDdXN0b21G
aWx0ZXJQYXJhbWV0ZXI+IHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKFN0eWxlUmVzb2x2ZVN0
YXRlJiwgY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZSopOwogICAgIFBhc3NSZWZQdHI8Q3Vz
dG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyKGNvbnN0
IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0Kik7CiAgICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0
ZXJQYXJhbWV0ZXI+IHBhcnNlQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgQ1NTVmFsdWVMaXN0Kik7Ci0gICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJh
bWV0ZXI+IHBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYg
bmFtZSwgQ1NTVmFsdWVMaXN0Kik7Ci0gICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRp
b24+IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWJLaXRDU1NGaWx0ZXJWYWx1ZSopOwot
ICAgIHZvaWQgbG9hZFBlbmRpbmdTaGFkZXJzKCk7CisgICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0
ZXJQYXJhbWV0ZXI+IHBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKFN0eWxlUmVz
b2x2ZVN0YXRlJiwgY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqKTsKKyAgICBQYXNz
UmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
KFN0eWxlUmVzb2x2ZVN0YXRlJiwgV2ViS2l0Q1NTRmlsdGVyVmFsdWUqKTsKKyAgICB2b2lkIGxv
YWRQZW5kaW5nU2hhZGVycyhTdHlsZVJlc29sdmVTdGF0ZSYpOwogI2VuZGlmCiAjaWYgRU5BQkxF
KFNWRykKLSAgICB2b2lkIGxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCk7CisgICAgdm9pZCBsb2Fk
UGVuZGluZ1NWR0RvY3VtZW50cyhTdHlsZVJlc29sdmVTdGF0ZSYpOwogI2VuZGlmCiAjZW5kaWYg
Ly8gRU5BQkxFKENTU19GSUxURVJTKQogCi0gICAgdm9pZCBsb2FkUGVuZGluZ1Jlc291cmNlcygp
OworICAgIHZvaWQgbG9hZFBlbmRpbmdSZXNvdXJjZXMoU3R5bGVSZXNvbHZlU3RhdGUmKTsKIAog
cHJpdmF0ZToKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQg
c2l6ZSBpZiBpdCBkZXRlY3RzIHRoYXQgdGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBo
YXMgY2hhbmdlZC4gLWR3aAotICAgIHZvaWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJl
bmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKLSAgICB2b2lkIGNoZWNrRm9y
Wm9vbUNoYW5nZShSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7Ci0gICAg
dm9pZCBjaGVja0ZvclRleHRTaXplQWRqdXN0KCk7CisgICAgdm9pZCBjaGVja0ZvckdlbmVyaWNG
YW1pbHlDaGFuZ2UoU3R5bGVSZXNvbHZlU3RhdGUmLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSk7CisgICAgdm9pZCBjaGVja0Zvclpvb21DaGFuZ2UoU3R5bGVSZXNvbHZl
U3RhdGUmLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgdm9p
ZCBjaGVja0ZvclRleHRTaXplQWRqdXN0KFJlbmRlclN0eWxlKik7CiAKLSAgICB2b2lkIGFkanVz
dFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZVRvQWRqdXN0LCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUsIEVsZW1lbnQqKTsKKyAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlKFN0eWxlUmVz
b2x2ZVN0YXRlJiwgUmVuZGVyU3R5bGUqIHN0eWxlVG9BZGp1c3QsIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSwgRWxlbWVudCopOwogCi0gICAgdm9pZCBhZGRNYXRjaGVkUnVsZShjb25zdCBSdWxl
RGF0YSogcnVsZSkgeyBtX21hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7IH0KKyAgICB2b2lkIGFk
ZE1hdGNoZWRSdWxlKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgY29uc3QgUnVsZURhdGEqIHJ1
bGUpIHsgc3RhdGUubWF0Y2hlZFJ1bGVzKCkuYXBwZW5kKHJ1bGUpOyB9CiAKICAgICBzdHJ1Y3Qg
UnVsZVJhbmdlIHsKICAgICAgICAgUnVsZVJhbmdlKGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYg
bGFzdFJ1bGVJbmRleCk6IGZpcnN0UnVsZUluZGV4KGZpcnN0UnVsZUluZGV4KSwgbGFzdFJ1bGVJ
bmRleChsYXN0UnVsZUluZGV4KSB7IH0KQEAgLTM1MiwzOCArMzUxLDI4IEBAIHByaXZhdGU6CiAg
ICAgICAgIGJvb2wgaXNDYWNoZWFibGU7CiAgICAgfTsKIAotICAgIHN0cnVjdCBNYXRjaFJlcXVl
c3QgewotICAgICAgICBNYXRjaFJlcXVlc3QoUnVsZVNldCogcnVsZVNldCwgYm9vbCBpbmNsdWRl
RW1wdHlSdWxlcyA9IGZhbHNlLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSA9IDApCi0gICAg
ICAgICAgICA6IHJ1bGVTZXQocnVsZVNldCkKLSAgICAgICAgICAgICwgaW5jbHVkZUVtcHR5UnVs
ZXMoaW5jbHVkZUVtcHR5UnVsZXMpCi0gICAgICAgICAgICAsIHNjb3BlKHNjb3BlKSB7IH0KLSAg
ICAgICAgY29uc3QgUnVsZVNldCogcnVsZVNldDsKLSAgICAgICAgY29uc3QgYm9vbCBpbmNsdWRl
RW1wdHlSdWxlczsKLSAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGU7Ci0gICAgfTsK
LQogICAgIHN0YXRpYyB2b2lkIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiwgY29u
c3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiA9IDAsIHVuc2lnbmVk
IGxpbmtNYXRjaFR5cGUgPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoQWxsLCBQcm9wZXJ0eVdoaXRl
bGlzdFR5cGUgPSBQcm9wZXJ0eVdoaXRlbGlzdE5vbmUpOwogICAgIHZvaWQgYWRkRWxlbWVudFN0
eWxlUHJvcGVydGllcyhNYXRjaFJlc3VsdCYsIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqLCBib29s
IGlzQ2FjaGVhYmxlID0gdHJ1ZSk7CiAKLSAgICB2b2lkIG1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1
bHQmLCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGllcyk7Ci0gICAgdm9pZCBtYXRjaFVBUnVsZXMo
TWF0Y2hSZXN1bHQmKTsKLSAgICB2b2lkIG1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYsIFJ1bGVT
ZXQqKTsKLSAgICB2b2lkIG1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1
ZGVFbXB0eVJ1bGVzKTsKLSAgICB2b2lkIG1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9v
bCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgdm9pZCBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1h
dGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgdm9pZCBtYXRjaEhvc3RS
dWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIHZvaWQgbWF0
Y2hBbGxSdWxlcyhTdHlsZVJlc29sdmVTdGF0ZSYgcmVxdWVzdCwgTWF0Y2hSZXN1bHQmLCBib29s
IGluY2x1ZGVTTUlMUHJvcGVydGllcyk7CisgICAgdm9pZCBtYXRjaFVBUnVsZXMoU3R5bGVSZXNv
bHZlU3RhdGUmLCBNYXRjaFJlc3VsdCYpOworICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKFN0eWxlUmVz
b2x2ZVN0YXRlJiwgTWF0Y2hSZXN1bHQmLCBSdWxlU2V0Kik7CisgICAgdm9pZCBtYXRjaEF1dGhv
clJ1bGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiwgTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIG1hdGNo
VXNlclJ1bGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiwgTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIG1h
dGNoU2NvcGVkQXV0aG9yUnVsZXMoU3R5bGVSZXNvbHZlU3RhdGUmLCBNYXRjaFJlc3VsdCYpOwor
ICAgIHZvaWQgbWF0Y2hIb3N0UnVsZXMoU3R5bGVSZXNvbHZlU3RhdGUmLCBNYXRjaFJlc3VsdCYp
OwogCi0gICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBNYXRjaFJlcXVlc3QmLCBS
dWxlUmFuZ2UmKTsKLSAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKGNvbnN0
IE1hdGNoUmVxdWVzdCYsIFJ1bGVSYW5nZSYpOwotICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVs
ZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBjb25zdCBNYXRjaFJlcXVlc3QmLCBS
dWxlUmFuZ2UmKTsKKyAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzKFJ1bGVTZXQqLCBTdHls
ZVJlc29sdmVTdGF0ZSYsIFJ1bGVSYW5nZSYsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0g
MCk7CisgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihSdWxlU2V0KiwgU3R5
bGVSZXNvbHZlU3RhdGUmLCBSdWxlUmFuZ2UmLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSA9
IDApOworICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxS
dWxlRGF0YT4qLCBTdHlsZVJlc29sdmVTdGF0ZSYsIFJ1bGVSYW5nZSYsIGNvbnN0IENvbnRhaW5l
ck5vZGUqKTsKIAogICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJikg
Y29uc3Q7Ci0gICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7Ci0gICAgdm9pZCBzb3J0QW5kVHJh
bnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIHNvcnRNYXRjaGVkUnVs
ZXMoVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+JiBtYXRjaGVkUnVsZXMpOworICAgIHZvaWQg
c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiwgTWF0Y2hSZXN1
bHQmKTsKIAotICAgIGJvb2wgcnVsZU1hdGNoZXMoY29uc3QgUnVsZURhdGEmLCBjb25zdCBDb250
YWluZXJOb2RlKiBzY29wZSk7CisgICAgYm9vbCBydWxlTWF0Y2hlcyhTdHlsZVJlc29sdmVTdGF0
ZSYsIGNvbnN0IFJ1bGVEYXRhJiwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIFBzZXVkb0lk
JiBkeW5hbWljUHNldWRvKTsKICAgICBib29sIGNoZWNrUmVnaW9uU2VsZWN0b3IoY29uc3QgQ1NT
U2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZW50KiByZWdpb25FbGVtZW50KTsKLSAgICB2
b2lkIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBjb25zdCBFbGVt
ZW50Kik7CisgICAgdm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKFN0eWxlUmVzb2x2ZVN0YXRl
JiwgY29uc3QgTWF0Y2hSZXN1bHQmLCBjb25zdCBFbGVtZW50Kik7CiAgICAgZW51bSBTdHlsZUFw
cGxpY2F0aW9uUGFzcyB7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCiAgICAgICAgIFZhcmlh
YmxlRGVmaW5pdGlvbnMsCkBAIC0zOTIsMTEgKzM4MSwxMSBAQCBwcml2YXRlOgogICAgICAgICBM
b3dQcmlvcml0eVByb3BlcnRpZXMKICAgICB9OwogICAgIHRlbXBsYXRlIDxTdHlsZUFwcGxpY2F0
aW9uUGFzcyBwYXNzPgotICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRj
aFJlc3VsdCYsIGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBi
b29sIGluaGVyaXRlZE9ubHkpOworICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhTdHls
ZVJlc29sdmVTdGF0ZSYsIGNvbnN0IE1hdGNoUmVzdWx0JiwgYm9vbCBpbXBvcnRhbnQsIGludCBz
dGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25seSk7CiAgICAgdGVtcGxh
dGUgPFN0eWxlQXBwbGljYXRpb25QYXNzIHBhc3M+Ci0gICAgdm9pZCBhcHBseVByb3BlcnRpZXMo
Y29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiwgYm9vbCBpc0lt
cG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgPSBQcm9w
ZXJ0eVdoaXRlbGlzdE5vbmUpOworICAgIHZvaWQgYXBwbHlQcm9wZXJ0aWVzKFN0eWxlUmVzb2x2
ZVN0YXRlJiwgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiwg
Ym9vbCBpc0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBQcm9wZXJ0eVdoaXRlbGlzdFR5
cGUgPSBQcm9wZXJ0eVdoaXRlbGlzdE5vbmUpOwogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQot
ICAgIHZvaWQgcmVzb2x2ZVZhcmlhYmxlcyhDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIFZlY3Rv
cjxzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiA+JiBrbm93bkV4cHJlc3Npb25zKTsK
KyAgICB2b2lkIHJlc29sdmVWYXJpYWJsZXMoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0
eUlELCBDU1NWYWx1ZSosIFZlY3RvcjxzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiA+
JiBrbm93bkV4cHJlc3Npb25zKTsKICNlbmRpZgogICAgIHN0YXRpYyBib29sIGlzVmFsaWRSZWdp
b25TdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQpOwogI2lmIEVOQUJMRShWSURFT19UUkFDSykK
QEAgLTQwNiw4ICszOTUsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgbWF0Y2hQYWdlUnVsZXNGb3JM
aXN0KFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIG1hdGNoZWRSdWxlcywgY29uc3QgVmVjdG9yPFN0
eWxlUnVsZVBhZ2UqPiYsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3Qg
U3RyaW5nJiBwYWdlTmFtZSk7CiAgICAgU2V0dGluZ3MqIGRvY3VtZW50U2V0dGluZ3MoKSB7IHJl
dHVybiBtX2RvY3VtZW50LT5zZXR0aW5ncygpOyB9CiAKLSAgICBib29sIGlzTGVmdFBhZ2UoaW50
IHBhZ2VJbmRleCkgY29uc3Q7Ci0gICAgYm9vbCBpc1JpZ2h0UGFnZShpbnQgcGFnZUluZGV4KSBj
b25zdCB7IHJldHVybiAhaXNMZWZ0UGFnZShwYWdlSW5kZXgpOyB9CisgICAgYm9vbCBpc0xlZnRQ
YWdlKFJlbmRlclN0eWxlKiwgaW50IHBhZ2VJbmRleCkgY29uc3Q7CisgICAgYm9vbCBpc1JpZ2h0
UGFnZShSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSwgaW50IHBhZ2VJbmRleCkgY29uc3Qg
eyByZXR1cm4gIWlzTGVmdFBhZ2Uocm9vdEVsZW1lbnRTdHlsZSwgcGFnZUluZGV4KTsgfQogICAg
IGJvb2wgaXNGaXJzdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7CiAgICAgU3RyaW5nIHBhZ2VO
YW1lKGludCBwYWdlSW5kZXgpIGNvbnN0OwogCkBAIC00MTgsMzMgKzQwNywyMyBAQCBwcml2YXRl
OgogICAgIE93blB0cjxSdWxlU2V0PiBtX3NpYmxpbmdSdWxlU2V0OwogICAgIE93blB0cjxSdWxl
U2V0PiBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldDsKIAotICAgIGJvb2wgbV9oYXNVQUFwcGVh
cmFuY2U7Ci0gICAgQm9yZGVyRGF0YSBtX2JvcmRlckRhdGE7Ci0gICAgRmlsbExheWVyIG1fYmFj
a2dyb3VuZERhdGE7Ci0gICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7Ci0KICAgICB0eXBlZGVm
IEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIFJlZlB0cjxTdHlsZVJ1bGVLZXlmcmFtZXM+ID4g
S2V5ZnJhbWVzUnVsZU1hcDsKICAgICBLZXlmcmFtZXNSdWxlTWFwIG1fa2V5ZnJhbWVzUnVsZU1h
cDsKIAogcHVibGljOgogICAgIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVOb3RZZXRBdmFpbGFi
bGUoKSB7IHJldHVybiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOyB9CiAKLSAgICBQYXNzUmVmUHRy
PFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKLSAgICBQ
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0
eUlELCBDU1NJbWFnZVZhbHVlKik7Ci0gICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBnZW5lcmF0
ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2UoU3R5bGVS
ZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFN0eWxlSW1hZ2U+IGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShTdHlsZVJlc29sdmVT
dGF0ZSYsIENTU1Byb3BlcnR5SUQsIENTU0ltYWdlVmFsdWUqKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdHlsZUltYWdlPiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoU3R5bGVSZXNvbHZl
U3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKik7CiAjaWYgRU5B
QkxFKENTU19JTUFHRV9TRVQpCi0gICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzZXRPclBlbmRp
bmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VTZXRWYWx1ZSopOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHNldE9yUGVuZGluZ0Zyb21WYWx1ZShTdHlsZVJlc29s
dmVTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIENTU0ltYWdlU2V0VmFsdWUqKTsKICNlbmRpZgotICAg
IFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3Bl
cnR5SUQsIENTU0N1cnNvckltYWdlVmFsdWUqKTsKLQotICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGU7IH0KLSAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7
IHJldHVybiBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7IH0KKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTdHlsZUltYWdlPiBjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUoU3R5bGVSZXNv
bHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NDdXJzb3JJbWFnZVZhbHVlKik7CiAKICAgICBz
dGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0ludExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSosIFJlbmRl
clN0eWxlKiwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIgPSAxKTsK
ICAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVl
KiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGll
ciA9IDEpOwogCi0gICAgQ1NTVG9TdHlsZU1hcCogc3R5bGVNYXAoKSB7IHJldHVybiAmbV9zdHls
ZU1hcDsgfQotCiAgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikg
Y29uc3Q7CiAgICAgCiBwcml2YXRlOgpAQCAtNDUyLDE5ICs0MzEsMTkgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgY29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8UmVm
UHRyPENTU1N0eWxlU2hlZXQ+ID4mLCBSdWxlU2V0JiB1c2VyU3R5bGUpOwogCi0gICAgdm9pZCBj
YWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKKyAgICB2b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dy
b3VuZChTdHlsZVJlc29sdmVTdGF0ZSYsIFJlbmRlclN0eWxlKik7CiAKIHByaXZhdGU6Ci0gICAg
Ym9vbCBjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCopIGNvbnN0OworICAg
IGJvb2wgY2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKEVsZW1lbnQqLCBTdHlsZWRFbGVtZW50Kikg
Y29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUq
KTsKKyAgICB2b2lkIGFwcGx5UHJvcGVydHkoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0
eUlELCBDU1NWYWx1ZSopOwogCiAjaWYgRU5BQkxFKFNWRykKLSAgICB2b2lkIGFwcGx5U1ZHUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIGFwcGx5U1ZHUHJvcGVy
dHkoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwogI2VuZGlm
CiAKICAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5k
aW5nSW1hZ2UqKTsKLSAgICB2b2lkIGxvYWRQZW5kaW5nSW1hZ2VzKCk7CisgICAgdm9pZCBsb2Fk
UGVuZGluZ0ltYWdlcyhTdHlsZVJlc29sdmVTdGF0ZSYpOwogCiAgICAgc3RhdGljIHVuc2lnbmVk
IGNvbXB1dGVNYXRjaGVkUHJvcGVydGllc0hhc2goY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMqLCB1
bnNpZ25lZCBzaXplKTsKICAgICBzdHJ1Y3QgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0gewpA
QCAtNDgyLDcgKzQ2MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzd2VlcE1hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUoVGltZXI8U3R5bGVSZXNvbHZlcj4qKTsKIAogICAgIGJvb2wgY2xhc3NOYW1lc0Fm
ZmVjdGVkQnlSdWxlcyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJikgY29uc3Q7Ci0gICAgYm9vbCBz
aGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxl
ZEVsZW1lbnQqKSBjb25zdDsKKyAgICBib29sIHNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxT
dHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoU3R5bGVSZXNvbHZlU3RhdGUmLCBFbGVtZW50KiwgU3R5
bGVkRWxlbWVudCopIGNvbnN0OwogCiAgICAgdW5zaWduZWQgbV9tYXRjaGVkUHJvcGVydGllc0Nh
Y2hlQWRkaXRpb25zU2luY2VMYXN0U3dlZXA7CiAKQEAgLTQ5MSwzOSArNDcwLDEzIEBAIHByaXZh
dGU6CiAKICAgICBUaW1lcjxTdHlsZVJlc29sdmVyPiBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVT
d2VlcFRpbWVyOwogCi0gICAgLy8gQSBidWZmZXIgdXNlZCB0byBob2xkIHRoZSBzZXQgb2YgbWF0
Y2hlZCBydWxlcyBmb3IgYW4gZWxlbWVudCwgYW5kIGEgdGVtcG9yYXJ5IGJ1ZmZlciB1c2VkIGZv
cgotICAgIC8vIG1lcmdlIHNvcnRpbmcuCi0gICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+
IG1fbWF0Y2hlZFJ1bGVzOwotCi0gICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0PiBtX3J1bGVM
aXN0OwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPENTU1Byb3BlcnR5SUQsIFJlZlB0cjxDU1NWYWx1
ZT4gPiBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDsKLSAgICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1h
cCBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXM7Ci0KICAgICBPd25QdHI8TWVkaWFRdWVyeUV2YWx1
YXRvcj4gbV9tZWRpdW07CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3Jvb3REZWZhdWx0U3R5
bGU7CiAKLSAgICBQc2V1ZG9JZCBtX2R5bmFtaWNQc2V1ZG87Ci0gICAgUHNldWRvSWQgbV9wc2V1
ZG9TdHlsZTsKLQogICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwotICAgIFNlbGVjdG9yQ2hlY2tl
ciBtX3NlbGVjdG9yQ2hlY2tlcjsKICAgICBTZWxlY3RvckZpbHRlciBtX3NlbGVjdG9yRmlsdGVy
OwogCi0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwotICAgIFJlbmRlclN0eWxlKiBt
X3BhcmVudFN0eWxlOwotICAgIFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGU7Ci0gICAg
RWxlbWVudCogbV9lbGVtZW50OwotICAgIFN0eWxlZEVsZW1lbnQqIG1fc3R5bGVkRWxlbWVudDsK
LSAgICBSZW5kZXJSZWdpb24qIG1fcmVnaW9uRm9yU3R5bGluZzsKLSAgICBFSW5zaWRlTGluayBt
X2VsZW1lbnRMaW5rU3RhdGU7Ci0gICAgYm9vbCBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxl
czsKLSAgICBDb250YWluZXJOb2RlKiBtX3BhcmVudE5vZGU7Ci0gICAgQ1NTVmFsdWUqIG1fbGlu
ZUhlaWdodFZhbHVlOwotICAgIGJvb2wgbV9mb250RGlydHk7CiAgICAgYm9vbCBtX21hdGNoQXV0
aG9yQW5kVXNlclN0eWxlczsKLSAgICBib29sIG1fc2FtZU9yaWdpbk9ubHk7Ci0gICAgYm9vbCBt
X2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludDsKIAogICAgIFJlZlB0cjxDU1NGb250U2VsZWN0
b3I+IG1fZm9udFNlbGVjdG9yOwogICAgIFZlY3RvcjxPd25QdHI8TWVkaWFRdWVyeVJlc3VsdD4g
PiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHM7CkBAIC01MzIsMjMgKzQ4NSwx
MiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxWaWV3cG9ydFN0eWxlUmVzb2x2ZXI+IG1fdmlld3Bv
cnRTdHlsZVJlc29sdmVyOwogI2VuZGlmCiAKLSAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvUmVn
dWxhclN0eWxlOwotICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOwog
ICAgIGNvbnN0IFN0eWxlQnVpbGRlciYgbV9zdHlsZUJ1aWxkZXI7CiAgICAgCiAgICAgSGFzaE1h
cDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+IG1fc3R5bGVSdWxlVG9DU1NPTVdy
YXBwZXJNYXA7CiAgICAgSGFzaFNldDxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiBtX3N0eWxlU2hl
ZXRDU1NPTVdyYXBwZXJTZXQ7CiAKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgYm9vbCBt
X2hhc1BlbmRpbmdTaGFkZXJzOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYm
IEVOQUJMRShTVkcpCi0gICAgSGFzaE1hcDxGaWx0ZXJPcGVyYXRpb24qLCBSZWZQdHI8V2ViS2l0
Q1NTU1ZHRG9jdW1lbnRWYWx1ZT4gPiBtX3BlbmRpbmdTVkdEb2N1bWVudHM7Ci0jZW5kaWYKLQog
ICAgIE93blB0cjxTdHlsZVNjb3BlUmVzb2x2ZXI+IG1fc2NvcGVSZXNvbHZlcjsKLSAgICBDU1NU
b1N0eWxlTWFwIG1fc3R5bGVNYXA7CiAKICAgICBmcmllbmQgY2xhc3MgU3R5bGVCdWlsZGVyOwog
ICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmLCBjb25z
dCBNYXRjaGVkUHJvcGVydGllcyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1N0
eWxlZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmgKaW5kZXgg
ZTQxYWFlZjRhMWViNTA4ZThiNTYzYWE4NWJiZWZmMzk4MzI5MGU3ZC4uZjU4NDAyZmE5ZmFkM2Iy
MWY3MGIxZGViYTgzODViZjljZThiZTUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1N0eWxlZEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5o
CkBAIC05OSw2ICs5OSwxOCBAQCBpbmxpbmUgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogU3R5bGVk
RWxlbWVudDo6cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKQogICAgIHJldHVybiBhdHRyaWJ1
dGVEYXRhKCktPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCk7CiB9CiAKK2lubGluZSBTdHls
ZWRFbGVtZW50KiB0b1N0eWxlZEVsZW1lbnQoTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQoIW5v
ZGUgfHwgbm9kZS0+aXNTdHlsZWRFbGVtZW50KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxT
dHlsZWRFbGVtZW50Kj4obm9kZSk7Cit9CisKK2lubGluZSBjb25zdCBTdHlsZWRFbGVtZW50KiB0
b1N0eWxlZEVsZW1lbnQoY29uc3QgTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQoIW5vZGUgfHwg
bm9kZS0+aXNTdHlsZWRFbGVtZW50KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBT
dHlsZWRFbGVtZW50Kj4obm9kZSk7Cit9CisKIH0gLy9uYW1lc3BhY2UKIAogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcAppbmRleCA3MjBjYTczYmNlYzljM2VkYjE2OWMyZjQ3YjZmOGMyNjg3NTk5OTIzLi5k
OGYzZTJiZjI1MThkYWY1NmEzNzFkMjQzYjI3ZTQyZDlhMTA5N2Y5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAK
QEAgLTIwMDksMTkgKzIwMDksOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
Rm9udChjb25zdCBTdHJpbmcmIG5ld0ZvbnQpCiAKICAgICAvLyBOb3cgbWFwIHRoZSBmb250IHBy
b3BlcnR5IGxvbmdoYW5kcyBpbnRvIHRoZSBzdHlsZS4KICAgICBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyID0gY2FudmFzKCktPnN0eWxlUmVzb2x2ZXIoKTsKLSAgICBzdHlsZVJlc29sdmVy
LT5hcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIHBhcnNlZFN0eWxl
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSkuZ2V0KCksIG5ld1N0
eWxlLmdldCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5
bGUoQ1NTUHJvcGVydHlGb250U3R5bGUsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KENTU1Byb3BlcnR5Rm9udFN0eWxlKS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQ
cm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIHBhcnNlZFN0eWxl
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFZhcmlhbnQpLmdldCgpKTsKLSAg
ICBzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlG
b250V2VpZ2h0LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZv
bnRXZWlnaHQpLmdldCgpKTsKLQotICAgIC8vIEFzIGRlc2NyaWJlZCBpbiBCVUc2NjI5MSwgc2V0
dGluZyBmb250LXNpemUgYW5kIGxpbmUtaGVpZ2h0IG9uIGEgZm9udCBtYXkgZW50YWlsIGEgQ1NT
UHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhEb3VibGUgY2FsbCwKLSAgICAvLyB3aGljaCBh
c3N1bWVzIHRoZSBmb250TWV0cmljcyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgYWZmZWN0ZWQgZm9u
dCwgb3RoZXJ3aXNlIGEgY3Jhc2ggb2NjdXJzIChzZWUgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9j
aGFuZ2VzZXQvOTYxMjIpLgotICAgIC8vIFRoZSB1cGRhdGVGb250KCkgY2FsbHMgYmVsb3cgdXBk
YXRlIHRoZSBmb250TWV0cmljcyBhbmQgZW5zdXJlIHRoZSBwcm9wZXIgc2V0dGluZyBvZiBmb250
LXNpemUgYW5kIGxpbmUtaGVpZ2h0LgotICAgIHN0eWxlUmVzb2x2ZXItPnVwZGF0ZUZvbnQoKTsK
LSAgICBzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVy
dHlGb250U2l6ZSwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlG
b250U2l6ZSkuZ2V0KCkpOwotICAgIHN0eWxlUmVzb2x2ZXItPnVwZGF0ZUZvbnQoKTsKLSAgICBz
dHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlMaW5l
SGVpZ2h0LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUxpbmVI
ZWlnaHQpLmdldCgpKTsKKyAgICBzdHlsZVJlc29sdmVyLT5hcHBseUZvbnRQcm9wZXJ0eVRvU3R5
bGUobmV3U3R5bGUuZ2V0KCksIHBhcnNlZFN0eWxlLmdldCgpKTsKIAorICAgIC8vIG9rCiAgICAg
bW9kaWZpYWJsZVN0YXRlKCkubV9mb250ID0gbmV3U3R5bGUtPmZvbnQoKTsKICAgICBtb2RpZmlh
YmxlU3RhdGUoKS5tX2ZvbnQudXBkYXRlKHN0eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpKTsK
ICAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX3JlYWxpemVkRm9udCA9IHRydWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCmluZGV4IGQwOWE1NTE1ZDgzMDVj
ZTdhZTYwOGE5MGRmN2Y4ODRmNDVkNGU1MGQuLjczYTczNWU4MGM4NzBjMThmMTg2MmMxZjA3NTZm
NGJlMmQ0ZjcyYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oCkBAIC0xMzAsNiArMTMwLDcgQEAgY2xhc3MgUmVuZGVyU3R5bGU6IHB1YmxpYyBSZWZD
b3VudGVkPFJlbmRlclN0eWxlPiB7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlclNWR1Jlc291cmNl
OyAvLyBGSVhNRTogTmVlZHMgdG8gYWx0ZXIgdGhlIHZpc2l0ZWQgc3RhdGUgYnkgaGFuZC4gU2hv
dWxkIGNsZWFuIHRoZSBTVkcgY29kZSB1cCBhbmQgbW92ZSBpdCBpbnRvIFJlbmRlclN0eWxlIHBl
cmhhcHMuCiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlclRyZWVBc1RleHQ7IC8vIEZJWE1FOiBPbmx5
IG5lZWRlZCBzbyB0aGUgcmVuZGVyIHRyZWUgY2FuIGtlZXAgbHlpbmcgYW5kIGR1bXAgdGhlIHdy
b25nIGNvbG9ycy4gIFJlYmFzZWxpbmluZyB3b3VsZCBhbGxvdyB0aGlzIHRvIGJlIHlhbmtlZC4K
ICAgICBmcmllbmQgY2xhc3MgU3R5bGVCdWlsZGVyOyAvLyBTZXRzIG1lbWJlcnMgZGlyZWN0bHku
CisgICAgZnJpZW5kIGNsYXNzIFN0eWxlUmVzb2x2ZVN0YXRlOyAvLyBTZXRzIG1lbWJlcnMgZGly
ZWN0bHkuCiAgICAgZnJpZW5kIGNsYXNzIFN0eWxlUmVzb2x2ZXI7IC8vIFNldHMgbWVtYmVycyBk
aXJlY3RseS4KIHByb3RlY3RlZDoKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184702</attachid>
            <date>2013-01-25 02:00:39 -0800</date>
            <delta_ts>2013-01-25 03:10:43 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-96421-20130125185730.patch</filename>
            <type>text/plain</type>
            <size>357348</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzRhZTYzMmY3MmI3ODVk
ZTJjZTAxOGIzYTQ5OWNiZGEwMWYzYTI5OC4uNzgxNmZkYTBhYmU3N2U0YmU4MDc4ODdhMzUwOTI1
NTg5OTMzMDU0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwOCBAQAorMjAxMy0wMS0yNSAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgU3BsaXQgcGVyLXJl
c29sdmUgbG9naWMgb3V0IGZyb20gU3R5bGVSZXNvbHZlci4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NDIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50ZWQgY2xhc3MgU3R5bGVSZXNvbHZl
U3RhdGUgYW5kIG1vdmVkIGFsbCBtZW1iZXIgdmFyaWFibGVzCisgICAgICAgIHVzZWQgb25seSBm
b3IgcGVyLXJlc29sdmUgbG9naWMuCisgICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgdG8g
ZW5hYmxlIFN0eWxlUmVzb2x2ZXIgdG8gcmVzb2x2ZSBzdHlsZXMgb2YKKyAgICAgICAgbXVsdGlw
bGUgZWxlbWVudHMgaW4gcGFyYWxsZWwuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNhdXNl
IGp1c3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICBBZGRl
ZCBTdHlsZVJlc29sdmVTdGF0ZS5oLgorICAgICAgICAqIGNzcy9CYXNpY1NoYXBlRnVuY3Rpb25z
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0xlbmd0aCk6CisgICAgICAgIChXZWJD
b3JlOjpiYXNpY1NoYXBlRm9yVmFsdWUpOgorICAgICAgICAqIGNzcy9CYXNpY1NoYXBlRnVuY3Rp
b25zLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhT
dHlsZXNSZXNvbHZlZCk6CisgICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFsdWUuaDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoQ1NTR3JhZGllbnRWYWx1ZSk6CisgICAgICAgICogY3Nz
L0NTU1RvU3R5bGVNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFw
RmlsbEF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmls
bENsaXApOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbENvbXBvc2l0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBGaWxsT3JpZ2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjptYXBGaWxsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFw
OjptYXBGaWxsWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6Om1h
cEZpbGxZUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwTmlu
ZVBpZWNlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwTmluZVBp
ZWNlSW1hZ2VTbGljZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBOaW5l
UGllY2VJbWFnZVF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwTmlu
ZVBpZWNlSW1hZ2VSZXBlYXQpOgorICAgICAgICAqIGNzcy9DU1NUb1N0eWxlTWFwLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKENTU1RvU3R5bGVNYXApOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVG9TdHlsZU1hcDo6Q1NTVG9TdHlsZU1hcCk6CisgICAgICAgICogY3NzL1NWR0NTU1N0
eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlT
VkdQcm9wZXJ0eSk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hl
Y2thYmxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjptYXRj
aGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrKToKKyAg
ICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChTZWxlY3RvckNoZWNrZXIp
OgorICAgICAgICAoV2ViQ29yZTo6aXNGcmFtZUZvY3VzZWQpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjptYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyk6CisgICAgICAgICog
Y3NzL1N0eWxlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RXhw
YW5kaW5nOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5RXhwYW5kaW5nOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5RXhwYW5kaW5nOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlEZWZhdWx0QmFzZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U6OmFwcGx5VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU51bWJlcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5U3R5bGVJbWFnZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5QXV0bzo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eUF1dG86OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlBdXRvOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlDbGlwOjpjb252ZXJ0VG9MZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUNsaXA6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlDbGlwOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5Q2xpcDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5Q29sb3I6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlDb2xvcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUNvbG9yOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlDb2xvcjo6YXBwbHlDb2xvclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlEaXJlY3Rpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUxlbmd0aDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5U3RyaW5nOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlC
b3JkZXJSYWRpdXM6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eUZpbGxMYXllcjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUZpbGxMYXllcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5Rm9udDo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUZvbnQ6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlGb250OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlGb250U2l6ZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFNpemU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRXZWlnaHQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzOjphcHBseUluaGVyaXRWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVyZXM6
OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250
VmFyaWFudExpZ2F0dXJlczo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5Qm9yZGVySW1hZ2U6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyOjphcHBseUluaXRpYWxW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmll
cjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1h
Z2VTb3VyY2U6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNv
dW50ZXI6OmVtcHR5RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNv
dW50ZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlDb3VudGVyOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlD
dXJzb3I6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlDdXJzb3I6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJv
cGVydHlDdXJzb3I6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eVRleHRBbGlnbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
VGV4dERlY29yYXRpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eUxpbmVIZWlnaHQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eVBhZ2VTaXplOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5UGFnZVNpemU6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlQYWdlU2l6ZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5VGV4dEVtcGhhc2lzU3R5bGU6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RW1waGFzaXNTdHlsZTo6YXBwbHlJbml0aWFs
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRFbXBoYXNpc1N0eWxl
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eUFuaW1hdGlvbjo6bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlBbmltYXRpb246OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlBbmltYXRpb246OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlBbmltYXRpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6YXBwbHlJbml0aWFsVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6YXBwbHlWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5UmVzaXplOjphcHBseVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlWZXJ0aWNhbEFsaWduOjphcHBseVZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBc3BlY3RSYXRpbzo6YXBwbHlJbmhlcml0
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlvOjphcHBs
eUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QXNwZWN0UmF0
aW86OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVpvb206OnJl
c2V0RWZmZWN0aXZlWm9vbSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Wm9vbTo6
YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVpvb206
OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlab29t
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEaXNwbGF5Ojpp
c1ZhbGlkRGlzcGxheVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEaXNw
bGF5OjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
RGlzcGxheTo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eURpc3BsYXk6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eUNsaXBQYXRoOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlF
eGNsdXNpb25TaGFwZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5SW1hZ2VSZXNvbHV0aW9uOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5SW1hZ2VSZXNvbHV0aW9uOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5SW1hZ2VSZXNvbHV0aW9uOjphcHBseVZhbHVlKToK
KyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFByb3BlcnR5SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eUhhbmRsZXI6
OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5SGFuZGxlcjo6
YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlIYW5kbGVyOjph
cHBseVZhbHVlKToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlU3RhdGUuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFN0eWxlUmVzb2x2ZVN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpTdHlsZVJlc29sdmVTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlU3RhdGU6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZVN0YXRlOjpyb290RWxlbWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZVN0YXRlOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0
YXRlOjpzdHlsZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRl
Ojpkb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6cmVnaW9u
Rm9yU3R5bGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6bW9kZSk6
CisgICAgICAgIE1vdmVkIFN0eWxlUmVzb2x2ZXIncyBtb2RlIGZyb20gbV9zZWxlY3RvckNoZWNr
ZXIgdG8gU3R5bGVSZXNvbHZlU3RhdGUuCisgICAgICAgIFNvIHdlIGRvbid0IG5lZWQgdG8ga2Vl
cCBTZWxlY3RvckNoZWNrZXIgYXMgYSBtZW1iZXIgdmFyaWFibGUgb2YKKyAgICAgICAgU3R5bGVS
ZXNvbHZlci4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpwc2V1ZG9TdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6cGFyZW50Tm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6ZWxlbWVudExpbmtTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6ZGlzdHJpYnV0ZWRUb0luc2VydGlv
blBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRDYW5Vc2VG
YXN0UmVqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpjYW5Vc2VG
YXN0UmVqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0Um9vdEVsZW1lbnRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0RWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0RWxlbWVudExpbmtTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0UGFyZW50Tm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0UGFyZW50U3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNldERpc3RyaWJ1dGVkVG9JbnNl
cnRpb25Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0TW9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0UmVnaW9uRm9yU3R5
bGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0UHNldWRvU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OmZvbnREZXNjcmlwdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6cGFyZW50Rm9udERlc2Ny
aXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRGb250RGVz
Y3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNldFpvb20p
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNldEVmZmVjdGl2ZVpvb20p
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNldFRleHRTaXplQWRqdXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRXcml0aW5nTW9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0VGV4dE9yaWVudGF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRBcHBseVByb3BlcnR5
VG9SZWd1bGFyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNl
dEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlU3RhdGU6OmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6bWF0Y2hlZFJ1bGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjptYXRjaGVkUnVsZUF0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRFbGVtZW50QWZmZWN0ZWRCeUNs
YXNzUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OmVsZW1lbnRB
ZmZlY3RlZEJ5Q2xhc3NSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0
ZTo6Y2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZVN0YXRlOjpwZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZVN0YXRlOjpwZW5kaW5nU1ZHRG9jdW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZVN0YXRlOjpzZXRMaW5lSGVpZ2h0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlU3RhdGU6OmxpbmVIZWlnaHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVTdGF0ZTo6aGFzUGFyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVTdGF0ZTo6c2V0Rm9udERpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZVN0YXRlOjpmb250RGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
U3RhdGU6OmVuc3VyZVJ1bGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0
YXRlOjpydWxlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0
SGFzUGVuZGluZ1NoYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6
Omhhc1BlbmRpbmdTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRl
Ojp1c2VTVkdab29tUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6
Omhhc1VBQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6
Ym9yZGVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6YmFja2dy
b3VuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OmJhY2tncm91
bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2V0SW5jbHVk
ZUVtcHR5UnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlU3RhdGU6OnNldFNh
bWVPcmlnaW5Pbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZVN0YXRlOjppbmNs
dWRlRW1wdHlSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVTdGF0ZTo6c2Ft
ZU9yaWdpbk9ubHkpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZl
cik6CisgICAgICAgIFNpbmNlIFN0eWxlUmVzb2x2ZVN0YXRlIHByb3ZpZGVzIGFsbCBpbmZvcm1h
dGlvbiwgbm8gbmVlZCB0byBoYXZlCisgICAgICAgIGFueSBpbnN0YW5jZSBvZiBDU1NUb1N0eWxl
TWFwIGFuZCBubyBuZWVkIHRvIG1ha2UgU2VsZWN0b3JDaGVja2VyCisgICAgICAgIGEgbWVtYmVy
IHZhcmlhYmxlIG9mIFN0eWxlUmVzb2x2ZXIuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzb3J0TWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6aW5pdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6aW5pdEZvclN0eWxlUmVzb2x2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2wpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZm
ZWN0aW5nQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjYW5T
aGFyZVN0eWxlV2l0aEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
ZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0
eWxlRm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6a2V5ZnJh
bWVTdHlsZXNGb3JBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
cHNldWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnN0eWxlRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpkZWZhdWx0
U3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFkanVz
dFJlbmRlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZv
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxlc0Zv
ckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cnVsZU1hdGNoZXMp
OgorICAgICAgICBtX2R5bmFtaWNQc2V1ZG8gaXMgdXNlZCBiZXR3ZWVuIHRoaXMgcnVsZU1hdGNo
ZXMgYW5kCisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdC4gU28gYWRkZWQgb25l
IHBhcmFtZXRlciB0byByZXR1cm4KKyAgICAgICAgd2hhdCBkeW5hbWljIHBzZXVkbyBhbiBlbGVt
ZW50IG1hdGNoZXMuIFJlbW92ZWQgbV9keW5hbWljUHNldWRvCisgICAgICAgIGZyb20gU3R5bGVS
ZXNvbHZlci4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9uU2Vs
ZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6aXNMZWZ0UGFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5V2l0aFZhbHVlQ2hlY2tp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlGb250UHJvcGVydHlU
b1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0JyZWFkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlR3JpZFRyYWNrTWluTWF4KToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUdyaWRUcmFja0dyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFj
a0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdGcm9tVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3Jab29tQ2hhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0ZhbWls
eUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9u
dFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9jdW1l
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVy
RnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5n
U2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZp
bHRlclRyYW5zZm9ybVBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcyk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1Jlc291cmNlcyk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1N0
eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6YWRkTWF0Y2hlZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6aXNSaWdodFBhZ2UpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjp0b1N0eWxlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udCk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisKIDIwMTMtMDEtMjQgIEtlbnQg
VGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIElOUFVUX01VTFRJUExFX0ZJ
RUxEU19VSTogUmVmYWN0b3Jpbmc6IFJlbW92ZSBjb25mdXNpbmcgbWluaW11bSgpIGFuZCBtYXhp
bXVtKCkgb2YgRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KaW5kZXggZDc1MjFkNGIzZDEzMTJkMWEyNTU2MzBmNDI4ODRkY2YxOGVhYWMzZC4u
MThkY2QyODIwZWVkODVkYzA3NzFkYTViNThlN2JiZTBiZGIyNWNkNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCkBAIC0yNjYwLDYgKzI2NjAsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmggXAogCVNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVByb3BlcnR5U2hvcnRoYW5kLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCBcCisJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZVN0YXRlLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUnVsZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBi
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMjk5OGM5ZDUxNGQ3ZDUyYjFjOWJhZGJj
ZWM5NzZjNWVhMzNiMzQ0Ni4uN2VjMzlmMzhkOTk2ZjgzNjBlNGI0ODc4OTVkMjdiNWU5NGNmYjZj
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCkBAIC0xNTMxLDYgKzE1MzEsNyBAQCBIRUFERVJTICs9IFwKICAgICBj
c3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oIFwKICAgICBjc3MvU3R5bGVQcm9wZXJ0eVNl
dC5oIFwKICAgICBjc3MvU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIFwKKyAgICBjc3MvU3R5bGVS
ZXNvbHZlU3RhdGUuaCBcCiAgICAgY3NzL1N0eWxlUmVzb2x2ZXIuaCBcCiAgICAgY3NzL1N0eWxl
UnVsZS5oIFwKICAgICBjc3MvU3R5bGVSdWxlSW1wb3J0LmggXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IDRkNTg2ODEyYzE5YTc4ODhhNzAzMmM3Njc1NzExYTczMDQ4NGJlOTguLjhlZmFmMTUyYTg1Mzll
ZWE5OTcyNTc5MDA1MTBjMDQ1MTM3NGFkOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE1ODMsNiAr
MTU4Myw3IEBACiAgICAgICAgICAgICAnY3NzL1N0eWxlUHJvcGVydHlTZXQuaCcsCiAgICAgICAg
ICAgICAnY3NzL1N0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwJywKICAgICAgICAgICAgICdjc3Mv
U3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oJywKKyAgICAgICAgICAgICdjc3MvU3R5bGVSZXNvbHZl
U3RhdGUuaCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlUmVzb2x2ZXIuY3BwJywKICAgICAgICAg
ICAgICdjc3MvU3R5bGVSZXNvbHZlci5oJywKICAgICAgICAgICAgICdjc3MvU3R5bGVSdWxlLmNw
cCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5jcHAKaW5kZXggM2E4
Zjc5NTNiNmY5NmIwMTJmODQzMjM3YTJlMTJhMGZkZjRjYjEyMS4uMWIzNTk5OWVlMTkzZDY0NDFl
ODljYmIwOTQ0ZGY2ODFmNThlZjZmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0Jh
c2ljU2hhcGVGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBl
RnVuY3Rpb25zLmNwcApAQCAtMTAwLDEyICsxMDAsMTIgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
dmFsdWVGb3JCYXNpY1NoYXBlKGNvbnN0IEJhc2ljU2hhcGUqIGJhc2ljU2hhcGUpCiAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlPFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4g
PihiYXNpY1NoYXBlVmFsdWUucmVsZWFzZSgpKTsKIH0KIAotc3RhdGljIExlbmd0aCBjb252ZXJ0
VG9MZW5ndGgoY29uc3QgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTUHJpbWl0aXZl
VmFsdWUqIHZhbHVlKQorc3RhdGljIExlbmd0aCBjb252ZXJ0VG9MZW5ndGgoU3R5bGVSZXNvbHZl
U3RhdGUmIHN0YXRlLCBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZh
bHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IEZpeGVkRmxvYXRD
b252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJz
aW9uPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0
eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgcmV0
dXJuIHZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IEZpeGVk
RmxvYXRDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VD
b252ZXJzaW9uPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRl
LnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiB9CiAKLVBhc3NSZWZQdHI8QmFzaWNTaGFwZT4g
YmFzaWNTaGFwZUZvclZhbHVlKGNvbnN0IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIGNv
bnN0IENTU0Jhc2ljU2hhcGUqIGJhc2ljU2hhcGVWYWx1ZSkKK1Bhc3NSZWZQdHI8QmFzaWNTaGFw
ZT4gYmFzaWNTaGFwZUZvclZhbHVlKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgY29uc3QgQ1NT
QmFzaWNTaGFwZSogYmFzaWNTaGFwZVZhbHVlKQogewogICAgIFJlZlB0cjxCYXNpY1NoYXBlPiBi
YXNpY1NoYXBlOwogCkBAIC0xMTQsMTQgKzExNCwxNCBAQCBQYXNzUmVmUHRyPEJhc2ljU2hhcGU+
IGJhc2ljU2hhcGVGb3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBj
bwogICAgICAgICBjb25zdCBDU1NCYXNpY1NoYXBlUmVjdGFuZ2xlKiByZWN0VmFsdWUgPSBzdGF0
aWNfY2FzdDxjb25zdCBDU1NCYXNpY1NoYXBlUmVjdGFuZ2xlICo+KGJhc2ljU2hhcGVWYWx1ZSk7
CiAgICAgICAgIFJlZlB0cjxCYXNpY1NoYXBlUmVjdGFuZ2xlPiByZWN0ID0gQmFzaWNTaGFwZVJl
Y3RhbmdsZTo6Y3JlYXRlKCk7CiAKLSAgICAgICAgcmVjdC0+c2V0WChjb252ZXJ0VG9MZW5ndGgo
c3R5bGVSZXNvbHZlciwgcmVjdFZhbHVlLT54KCkpKTsKLSAgICAgICAgcmVjdC0+c2V0WShjb252
ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdFZhbHVlLT55KCkpKTsKLSAgICAgICAgcmVj
dC0+c2V0V2lkdGgoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+d2lk
dGgoKSkpOwotICAgICAgICByZWN0LT5zZXRIZWlnaHQoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVz
b2x2ZXIsIHJlY3RWYWx1ZS0+aGVpZ2h0KCkpKTsKKyAgICAgICAgcmVjdC0+c2V0WChjb252ZXJ0
VG9MZW5ndGgoc3RhdGUsIHJlY3RWYWx1ZS0+eCgpKSk7CisgICAgICAgIHJlY3QtPnNldFkoY29u
dmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0VmFsdWUtPnkoKSkpOworICAgICAgICByZWN0LT5zZXRX
aWR0aChjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3RWYWx1ZS0+d2lkdGgoKSkpOworICAgICAg
ICByZWN0LT5zZXRIZWlnaHQoY29udmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0VmFsdWUtPmhlaWdo
dCgpKSk7CiAgICAgICAgIGlmIChyZWN0VmFsdWUtPnJhZGl1c1goKSkgewotICAgICAgICAgICAg
cmVjdC0+c2V0Q29ybmVyUmFkaXVzWChjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVj
dFZhbHVlLT5yYWRpdXNYKCkpKTsKKyAgICAgICAgICAgIHJlY3QtPnNldENvcm5lclJhZGl1c1go
Y29udmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0VmFsdWUtPnJhZGl1c1goKSkpOwogICAgICAgICAg
ICAgaWYgKHJlY3RWYWx1ZS0+cmFkaXVzWSgpKQotICAgICAgICAgICAgICAgIHJlY3QtPnNldENv
cm5lclJhZGl1c1koY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+cmFk
aXVzWSgpKSk7CisgICAgICAgICAgICAgICAgcmVjdC0+c2V0Q29ybmVyUmFkaXVzWShjb252ZXJ0
VG9MZW5ndGgoc3RhdGUsIHJlY3RWYWx1ZS0+cmFkaXVzWSgpKSk7CiAgICAgICAgIH0KICAgICAg
ICAgYmFzaWNTaGFwZSA9IHJlY3QucmVsZWFzZSgpOwogICAgICAgICBicmVhazsKQEAgLTEzMCw5
ICsxMzAsOSBAQCBQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShjb25z
dCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBjbwogICAgICAgICBjb25zdCBDU1NCYXNp
Y1NoYXBlQ2lyY2xlKiBjaXJjbGVWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IENTU0Jhc2ljU2hh
cGVDaXJjbGUgKj4oYmFzaWNTaGFwZVZhbHVlKTsKICAgICAgICAgUmVmUHRyPEJhc2ljU2hhcGVD
aXJjbGU+IGNpcmNsZSA9IEJhc2ljU2hhcGVDaXJjbGU6OmNyZWF0ZSgpOwogCi0gICAgICAgIGNp
cmNsZS0+c2V0Q2VudGVyWChjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgY2lyY2xlVmFs
dWUtPmNlbnRlclgoKSkpOwotICAgICAgICBjaXJjbGUtPnNldENlbnRlclkoY29udmVydFRvTGVu
Z3RoKHN0eWxlUmVzb2x2ZXIsIGNpcmNsZVZhbHVlLT5jZW50ZXJZKCkpKTsKLSAgICAgICAgY2ly
Y2xlLT5zZXRSYWRpdXMoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIGNpcmNsZVZhbHVl
LT5yYWRpdXMoKSkpOworICAgICAgICBjaXJjbGUtPnNldENlbnRlclgoY29udmVydFRvTGVuZ3Ro
KHN0YXRlLCBjaXJjbGVWYWx1ZS0+Y2VudGVyWCgpKSk7CisgICAgICAgIGNpcmNsZS0+c2V0Q2Vu
dGVyWShjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIGNpcmNsZVZhbHVlLT5jZW50ZXJZKCkpKTsKKyAg
ICAgICAgY2lyY2xlLT5zZXRSYWRpdXMoY29udmVydFRvTGVuZ3RoKHN0YXRlLCBjaXJjbGVWYWx1
ZS0+cmFkaXVzKCkpKTsKIAogICAgICAgICBiYXNpY1NoYXBlID0gY2lyY2xlLnJlbGVhc2UoKTsK
ICAgICAgICAgYnJlYWs7CkBAIC0xNDEsMTAgKzE0MSwxMCBAQCBQYXNzUmVmUHRyPEJhc2ljU2hh
cGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBjbwogICAgICAgICBjb25zdCBDU1NCYXNpY1NoYXBlRWxsaXBzZSogZWxsaXBzZVZhbHVlID0g
c3RhdGljX2Nhc3Q8Y29uc3QgQ1NTQmFzaWNTaGFwZUVsbGlwc2UgKj4oYmFzaWNTaGFwZVZhbHVl
KTsKICAgICAgICAgUmVmUHRyPEJhc2ljU2hhcGVFbGxpcHNlPiBlbGxpcHNlID0gQmFzaWNTaGFw
ZUVsbGlwc2U6OmNyZWF0ZSgpOwogCi0gICAgICAgIGVsbGlwc2UtPnNldENlbnRlclgoY29udmVy
dFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIGVsbGlwc2VWYWx1ZS0+Y2VudGVyWCgpKSk7Ci0gICAg
ICAgIGVsbGlwc2UtPnNldENlbnRlclkoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIGVs
bGlwc2VWYWx1ZS0+Y2VudGVyWSgpKSk7Ci0gICAgICAgIGVsbGlwc2UtPnNldFJhZGl1c1goY29u
dmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIGVsbGlwc2VWYWx1ZS0+cmFkaXVzWCgpKSk7Ci0g
ICAgICAgIGVsbGlwc2UtPnNldFJhZGl1c1koY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIs
IGVsbGlwc2VWYWx1ZS0+cmFkaXVzWSgpKSk7CisgICAgICAgIGVsbGlwc2UtPnNldENlbnRlclgo
Y29udmVydFRvTGVuZ3RoKHN0YXRlLCBlbGxpcHNlVmFsdWUtPmNlbnRlclgoKSkpOworICAgICAg
ICBlbGxpcHNlLT5zZXRDZW50ZXJZKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgZWxsaXBzZVZhbHVl
LT5jZW50ZXJZKCkpKTsKKyAgICAgICAgZWxsaXBzZS0+c2V0UmFkaXVzWChjb252ZXJ0VG9MZW5n
dGgoc3RhdGUsIGVsbGlwc2VWYWx1ZS0+cmFkaXVzWCgpKSk7CisgICAgICAgIGVsbGlwc2UtPnNl
dFJhZGl1c1koY29udmVydFRvTGVuZ3RoKHN0YXRlLCBlbGxpcHNlVmFsdWUtPnJhZGl1c1koKSkp
OwogCiAgICAgICAgIGJhc2ljU2hhcGUgPSBlbGxpcHNlLnJlbGVhc2UoKTsKICAgICAgICAgYnJl
YWs7CkBAIC0xNTYsNyArMTU2LDcgQEAgUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBl
Rm9yVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgY28KICAgICAgICAg
cG9seWdvbi0+c2V0V2luZFJ1bGUocG9seWdvblZhbHVlLT53aW5kUnVsZSgpKTsKICAgICAgICAg
Y29uc3QgVmVjdG9yPFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gPiYgdmFsdWVzID0gcG9seWdv
blZhbHVlLT52YWx1ZXMoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVl
cy5zaXplKCk7IGkgKz0gMikKLSAgICAgICAgICAgIHBvbHlnb24tPmFwcGVuZFBvaW50KGNvbnZl
cnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCB2YWx1ZXMuYXQoaSkuZ2V0KCkpLCBjb252ZXJ0VG9M
ZW5ndGgoc3R5bGVSZXNvbHZlciwgdmFsdWVzLmF0KGkgKyAxKS5nZXQoKSkpOworICAgICAgICAg
ICAgcG9seWdvbi0+YXBwZW5kUG9pbnQoY29udmVydFRvTGVuZ3RoKHN0YXRlLCB2YWx1ZXMuYXQo
aSkuZ2V0KCkpLCBjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHZhbHVlcy5hdChpICsgMSkuZ2V0KCkp
KTsKIAogICAgICAgICBiYXNpY1NoYXBlID0gcG9seWdvbi5yZWxlYXNlKCk7CiAgICAgICAgIGJy
ZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMu
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25zLmgKaW5kZXggZDM2MDdl
OTA5OTI5YzM0MWIwYzA2OWQzZTVjZWI2MWYxM2YxMTcxOS4uODFiMmNhYTM1N2I3NDFmYTIzODQ2
MWYwNzI5M2EwNmQ5OGNjOWM2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2lj
U2hhcGVGdW5jdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0
aW9ucy5oCkBAIC0zNywxMCArMzcsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQmFz
aWNTaGFwZTsKIGNsYXNzIENTU0Jhc2ljU2hhcGU7CiBjbGFzcyBDU1NWYWx1ZTsKLWNsYXNzIFN0
eWxlUmVzb2x2ZXI7CitjbGFzcyBTdHlsZVJlc29sdmVTdGF0ZTsKIAogUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gdmFsdWVGb3JCYXNpY1NoYXBlKGNvbnN0IEJhc2ljU2hhcGUqKTsKLVBhc3NSZWZQdHI8
QmFzaWNTaGFwZT4gYmFzaWNTaGFwZUZvclZhbHVlKGNvbnN0IFN0eWxlUmVzb2x2ZXIqLCBjb25z
dCBDU1NCYXNpY1NoYXBlKik7CitQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JW
YWx1ZShTdHlsZVJlc29sdmVTdGF0ZSYsIGNvbnN0IENTU0Jhc2ljU2hhcGUqKTsKIAogfQogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKaW5kZXggZjE1MThkOGRh
Yzc0ODBjNGUyMzk3ZTUyZGZhOTQyYmNlOGRjNmE4MS4uYzJjZTkyMDcwYzFmMWZiODEyMGJiM2Y5
MmZlZThjZWE2OTdjMjYxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRp
ZW50VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNw
cApAQCAtMTE1LDExICsxMTUsMTEgQEAgc3RydWN0IEdyYWRpZW50U3RvcCB7CiAgICAgeyB9CiB9
OwogCi1QYXNzUmVmUHRyPENTU0dyYWRpZW50VmFsdWU+IENTU0dyYWRpZW50VmFsdWU6OmdyYWRp
ZW50V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCitQYXNz
UmVmUHRyPENTU0dyYWRpZW50VmFsdWU+IENTU0dyYWRpZW50VmFsdWU6OmdyYWRpZW50V2l0aFN0
eWxlc1Jlc29sdmVkKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKIHsKICAgICBib29sIGRlcml2
ZWQgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdG9wcy5zaXplKCk7
IGkrKykKLSAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
SXNEZXJpdmVkRnJvbUVsZW1lbnQobV9zdG9wc1tpXS5tX2NvbG9yLmdldCgpKSkgeworICAgICAg
ICBpZiAoU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWVJc0Rlcml2ZWRGcm9t
RWxlbWVudChtX3N0b3BzW2ldLm1fY29sb3IuZ2V0KCkpKSB7CiAgICAgICAgICAgICBtX3N0b3Bz
W2ldLm1fY29sb3JJc0Rlcml2ZWRGcm9tRWxlbWVudCA9IHRydWU7CiAgICAgICAgICAgICBkZXJp
dmVkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM4LDcgKzEzOCw3IEBAIFBhc3NS
ZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6Z3JhZGllbnRXaXRoU3R5
bGVzUmVzb2x2ZWQoU3R5bGVSCiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlc3VsdC0+bV9zdG9wcy5zaXplKCk7IGkrKykKLSAgICAgICAgcmVzdWx0LT5tX3N0b3BzW2ld
Lm1fcmVzb2x2ZWRDb2xvciA9IHN0eWxlUmVzb2x2ZXItPmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
KHJlc3VsdC0+bV9zdG9wc1tpXS5tX2NvbG9yLmdldCgpKTsKKyAgICAgICAgcmVzdWx0LT5tX3N0
b3BzW2ldLm1fcmVzb2x2ZWRDb2xvciA9IFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2
ZVZhbHVlKHN0YXRlLCByZXN1bHQtPm1fc3RvcHNbaV0ubV9jb2xvci5nZXQoKSk7CiAKICAgICBy
ZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NHcmFkaWVudFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1
ZS5oCmluZGV4IDZmMDA1MzU5MDdlMTU3NzlhMDgwMjcyYzg4NmZkNmI4MDk3YzgwMGQuLjBiNzJl
MmFlNjJkYTA4MjNmNmQzZmJlNjE2YTdhNTEzODI1OWUyYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0dyYWRpZW50VmFsdWUuaApAQCAtMzUsNiArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBHcmFkaWVudDsKK2NsYXNzIFN0eWxlUmVzb2x2ZVN0
YXRlOwogCiBlbnVtIENTU0dyYWRpZW50VHlwZSB7CiAgICAgQ1NTRGVwcmVjYXRlZExpbmVhckdy
YWRpZW50LApAQCAtODQsNyArODUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNBbHBoYShjb25z
dCBSZW5kZXJPYmplY3QqKSBjb25zdDsKIAogICAgIHZvaWQgbG9hZFN1YmltYWdlcyhDYWNoZWRS
ZXNvdXJjZUxvYWRlciopIHsgfQotICAgIFBhc3NSZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gZ3Jh
ZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGVSZXNvbHZlciopOworICAgIFBhc3NSZWZQdHI8
Q1NTR3JhZGllbnRWYWx1ZT4gZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGVSZXNvbHZl
U3RhdGUmKTsKIAogcHJvdGVjdGVkOgogICAgIENTU0dyYWRpZW50VmFsdWUoQ2xhc3NUeXBlIGNs
YXNzVHlwZSwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0LCBDU1NHcmFkaWVudFR5cGUgZ3JhZGll
bnRUeXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCmluZGV4IDAyNDRkOGEzYWQ1
NzhmNmUxM2Y2Y2QxZGJlNmE4ZDI0M2VkODA3YjAuLjJjZGNlYzdkMTEwNDI2YmRjMTI5YTMyMzkx
MDM5YWYxNTZlNDQwZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxl
TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKQEAgLTQx
LDI3ICs0MSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVuZGVyU3R5bGUqIENTU1Rv
U3R5bGVNYXA6OnN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+c3R5bGUo
KTsKLX0KLSAgICAKLVJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpyb290RWxlbWVudFN0eWxl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpOwot
fQotCi1ib29sIENTU1RvU3R5bGVNYXA6OnVzZVNWR1pvb21SdWxlcygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fcmVzb2x2ZXItPnVzZVNWR1pvb21SdWxlcygpOwotfQotICAgIAotUGFzc1JlZlB0
cjxTdHlsZUltYWdlPiBDU1NUb1N0eWxlTWFwOjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJZCwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIHJldHVybiBtX3Jlc29sdmVyLT5zdHls
ZUltYWdlKHByb3BlcnR5SWQsIHZhbHVlKTsKLX0KLQotdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBG
aWxsQXR0YWNobWVudChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSog
dmFsdWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxBdHRhY2htZW50KFN0eWxlUmVzb2x2
ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVl
KQogewogICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewogICAgICAgICBsYXllci0+
c2V0QXR0YWNobWVudChGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQXR0YWNobWVudChsYXllci0+dHlw
ZSgpKSk7CkBAIC04Nyw3ICs2Nyw3IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEF0dGFj
aG1lbnQoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqCiAgICAgfQog
fQogCi12b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxDbGlwKENTU1Byb3BlcnR5SUQsIEZpbGxM
YXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmls
bENsaXAoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVy
LCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7
CiAgICAgICAgIGxheWVyLT5zZXRDbGlwKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxDbGlwKGxheWVy
LT50eXBlKCkpKTsKQEAgLTEwMSw3ICs4MSw3IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmls
bENsaXAoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlCiAg
ICAgbGF5ZXItPnNldENsaXAoKnByaW1pdGl2ZVZhbHVlKTsKIH0KIAotdm9pZCBDU1NUb1N0eWxl
TWFwOjptYXBGaWxsQ29tcG9zaXRlKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbENvbXBvc2l0ZShTdHls
ZVJlc29sdmVTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVl
KiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKICAgICAgICAg
bGF5ZXItPnNldENvbXBvc2l0ZShGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQ29tcG9zaXRlKGxheWVy
LT50eXBlKCkpKTsKQEAgLTExNSw3ICs5NSw3IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmls
bENvbXBvc2l0ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSoKICAg
ICBsYXllci0+c2V0Q29tcG9zaXRlKCpwcmltaXRpdmVWYWx1ZSk7CiB9CiAKLXZvaWQgQ1NTVG9T
dHlsZU1hcDo6bWFwRmlsbE9yaWdpbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBD
U1NWYWx1ZSogdmFsdWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxPcmlnaW4oU3R5bGVS
ZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSog
dmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CiAgICAgICAgIGxh
eWVyLT5zZXRPcmlnaW4oRmlsbExheWVyOjppbml0aWFsRmlsbE9yaWdpbihsYXllci0+dHlwZSgp
KSk7CkBAIC0xMzAsMTcgKzExMCwxNyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxPcmln
aW4oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbAogfQogCiAK
LXZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHks
IEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6
bWFwRmlsbEltYWdlKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1
ZS0+aXNJbml0aWFsVmFsdWUoKSkgewogICAgICAgICBsYXllci0+c2V0SW1hZ2UoRmlsbExheWVy
Ojppbml0aWFsRmlsbEltYWdlKGxheWVyLT50eXBlKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGxheWVyLT5zZXRJbWFnZShzdHlsZUltYWdlKHByb3BlcnR5LCB2YWx1ZSkpOwor
ICAgIGxheWVyLT5zZXRJbWFnZShTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKHN0YXRlLCBwcm9w
ZXJ0eSwgdmFsdWUpKTsKIH0KIAotdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WChD
U1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIENT
U1RvU3R5bGVNYXA6Om1hcEZpbGxSZXBlYXRYKFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVy
dHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1
ZS0+aXNJbml0aWFsVmFsdWUoKSkgewogICAgICAgICBsYXllci0+c2V0UmVwZWF0WChGaWxsTGF5
ZXI6OmluaXRpYWxGaWxsUmVwZWF0WChsYXllci0+dHlwZSgpKSk7CkBAIC0xNTQsNyArMTM0LDcg
QEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WChDU1NQcm9wZXJ0eUlELCBGaWxs
TGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmEKICAgICBsYXllci0+c2V0UmVwZWF0WCgqcHJpbWl0
aXZlVmFsdWUpOwogfQogCi12b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxSZXBlYXRZKENTU1By
b3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTVG9T
dHlsZU1hcDo6bWFwRmlsbFJlcGVhdFkoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlE
LCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5p
c0luaXRpYWxWYWx1ZSgpKSB7CiAgICAgICAgIGxheWVyLT5zZXRSZXBlYXRZKEZpbGxMYXllcjo6
aW5pdGlhbEZpbGxSZXBlYXRZKGxheWVyLT50eXBlKCkpKTsKQEAgLTE2OCw3ICsxNDgsNyBAQCB2
b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxSZXBlYXRZKENTU1Byb3BlcnR5SUQsIEZpbGxMYXll
ciogbGF5ZXIsIENTU1ZhbHVlKiB2YQogICAgIGxheWVyLT5zZXRSZXBlYXRZKCpwcmltaXRpdmVW
YWx1ZSk7CiB9CiAKLXZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFNpemUoQ1NTUHJvcGVydHlJ
RCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBDU1NUb1N0eWxlTWFw
OjptYXBGaWxsU2l6ZShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQsIEZp
bGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAgbGF5ZXItPnNldFNpemVUeXBlKFNpemVOb25lKTsK
QEAgLTE5MCw3ICsxNzAsNyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxTaXplKENTU1By
b3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgZmxvYXQgem9vbUZhY3RvciA9IHN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKTsKKyAgICBmbG9hdCB6b29tRmFjdG9yID0gc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpOwogCiAgICAgTGVuZ3RoIGZpcnN0TGVuZ3RoOwogICAgIExlbmd0aCBzZWNvbmRMZW5ndGg7
CkBAIC0xOTgsMTAgKzE3OCwxMCBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxTaXplKENT
U1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZQogICAgIGlmIChQ
YWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1ZSgpKSB7CiAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBmaXJzdCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
cGFpci0+Zmlyc3QoKSk7CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBhaXItPnNlY29uZCgpKTsKLSAgICAgICAgZmly
c3RMZW5ndGggPSBmaXJzdC0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KHN0eWxlKCks
IHJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7Ci0gICAgICAgIHNlY29uZExlbmd0aCA9
IHNlY29uZC0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KHN0eWxlKCksIHJvb3RFbGVt
ZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CisgICAgICAgIGZpcnN0TGVuZ3RoID0gZmlyc3QtPmNv
bnZlcnRUb0xlbmd0aDxBbnlDb252ZXJzaW9uPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlKCksIHpvb21GYWN0b3IpOworICAgICAgICBzZWNvbmRMZW5ndGggPSBzZWNvbmQt
PmNvbnZlcnRUb0xlbmd0aDxBbnlDb252ZXJzaW9uPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290
RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZpcnN0
TGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxBbnlDb252ZXJzaW9uPihz
dHlsZSgpLCByb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOworICAgICAgICBmaXJzdExl
bmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8QW55Q29udmVyc2lvbj4oc3Rh
dGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKICAgICAg
ICAgc2Vjb25kTGVuZ3RoID0gTGVuZ3RoKCk7CiAgICAgfQogCkBAIC0yMTMsNyArMTkzLDcgQEAg
dm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsU2l6ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIq
IGxheWVyLCBDU1NWYWx1ZSogdmFsdWUKICAgICBsYXllci0+c2V0U2l6ZUxlbmd0aChiKTsKIH0K
IAotdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsWFBvc2l0aW9uKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBDU1NUb1N0
eWxlTWFwOjptYXBGaWxsWFBvc2l0aW9uKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiB7
CiAgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CiAgICAgICAgIGxheWVyLT5zZXRY
UG9zaXRpb24oRmlsbExheWVyOjppbml0aWFsRmlsbFhQb3NpdGlvbihsYXllci0+dHlwZSgpKSk7
CkBAIC0yMjMsNyArMjAzLDcgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsWFBvc2l0aW9u
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwKICAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZsb2F0IHpv
b21GYWN0b3IgPSBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisgICAgZmxvYXQgem9vbUZhY3Rv
ciA9IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKIAogICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
dWUpOwogICAgIFBhaXIqIHBhaXIgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UGFpclZhbHVlKCk7CkBA
IC0yMzQsMTEgKzIxNCwxMSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxYUG9zaXRpb24o
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLAogCiAgICAgTGVuZ3Ro
IGxlbmd0aDsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCi0gICAgICAgIGxl
bmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgcm9v
dEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgbGVuZ3RoID0gcHJpbWl0aXZl
VmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlKCksIHpvb21GYWN0b3IpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5p
c1BlcmNlbnRhZ2UoKSkKICAgICAgICAgbGVuZ3RoID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5n
ZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+
aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKLSAgICAgICAgbGVuZ3RoID0gTGVu
Z3RoKHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGUoKSwg
cm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKSk7CisgICAgICAgIGxlbmd0aCA9IExlbmd0
aChwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0YXRlLnN0eWxl
KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3RvcikpOwogICAgIGVsc2UgaWYg
KHByaW1pdGl2ZVZhbHVlLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKQogICAgICAgICBs
ZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7CiAgICAg
ZWxzZQpAQCAtMjQ5LDcgKzIyOSw3IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFhQb3Np
dGlvbihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsCiAgICAgICAg
IGxheWVyLT5zZXRCYWNrZ3JvdW5kWE9yaWdpbigqKHBhaXItPmZpcnN0KCkpKTsKIH0KIAotdm9p
ZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsWVBvc2l0aW9uKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBDU1NUb1N0eWxlTWFw
OjptYXBGaWxsWVBvc2l0aW9uKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAg
aWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CiAgICAgICAgIGxheWVyLT5zZXRZUG9zaXRp
b24oRmlsbExheWVyOjppbml0aWFsRmlsbFlQb3NpdGlvbihsYXllci0+dHlwZSgpKSk7CkBAIC0y
NTksNyArMjM5LDcgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsWVBvc2l0aW9uKENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwKICAgICBpZiAoIXZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZsb2F0IHpvb21GYWN0
b3IgPSBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisgICAgZmxvYXQgem9vbUZhY3RvciA9IHN0
YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKIAogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwog
ICAgIFBhaXIqIHBhaXIgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UGFpclZhbHVlKCk7CkBAIC0yNzAs
MTEgKzI1MCwxMSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxZUG9zaXRpb24oQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLAogCiAgICAgTGVuZ3RoIGxlbmd0
aDsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCi0gICAgICAgIGxlbmd0aCA9
IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgcm9vdEVsZW1l
bnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUt
PmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0
eWxlKCksIHpvb21GYWN0b3IpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNl
bnRhZ2UoKSkKICAgICAgICAgbGVuZ3RoID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3Vi
bGVWYWx1ZSgpLCBQZXJjZW50KTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNDYWxj
dWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKLSAgICAgICAgbGVuZ3RoID0gTGVuZ3RoKHBy
aW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGUoKSwgcm9vdEVs
ZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKSk7CisgICAgICAgIGxlbmd0aCA9IExlbmd0aChwcmlt
aXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0YXRlLnN0eWxlKCksIHN0
YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3RvcikpOwogICAgIGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKQogICAgICAgICBsZW5ndGgg
PSBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7CiAgICAgZWxzZQpA
QCAtNDg1LDcgKzQ2NSw3IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uVGltaW5n
RnVuY3Rpb24oQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2CiAgICAgICAgIGFuaW1h
dGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oTGluZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsK
IH0KIAotdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKK3ZvaWQg
Q1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2UoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRl
LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdl
JiBpbWFnZSkKIHsKICAgICAvLyBJZiB3ZSdyZSBub3QgYSB2YWx1ZSBsaXN0LCB0aGVuIHdlIGFy
ZSAibm9uZSIgYW5kIGRvbid0IG5lZWQgdG8gYWx0ZXIgdGhlIGVtcHR5IGltYWdlIGF0IGFsbC4K
ICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKQEAgLTUxMSwyNSArNDkx
LDI1IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlLCBOCiAgICAgICAgICAgICB8fCBjdXJyZW50LT5p
c0ltYWdlU2V0VmFsdWUoKQogI2VuZGlmCiAgICAgICAgICAgICApCi0gICAgICAgICAgICBpbWFn
ZS5zZXRJbWFnZShzdHlsZUltYWdlKGltYWdlUHJvcGVydHksIGN1cnJlbnQpKTsKKyAgICAgICAg
ICAgIGltYWdlLnNldEltYWdlKFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2Uoc3RhdGUsIGltYWdl
UHJvcGVydHksIGN1cnJlbnQpKTsKICAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aXNCb3JkZXJJ
bWFnZVNsaWNlVmFsdWUoKSkKLSAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlU2xpY2UoY3Vy
cmVudCwgaW1hZ2UpOworICAgICAgICAgICAgbWFwTmluZVBpZWNlSW1hZ2VTbGljZShzdGF0ZSwg
Y3VycmVudCwgaW1hZ2UpOwogICAgICAgICBlbHNlIGlmIChjdXJyZW50LT5pc1ZhbHVlTGlzdCgp
KSB7CiAgICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIHNsYXNoTGlzdCA9IHN0YXRpY19jYXN0PENT
U1ZhbHVlTGlzdCo+KGN1cnJlbnQpOwogICAgICAgICAgICAgLy8gTWFwIGluIHRoZSBpbWFnZSBz
bGljZXMuCiAgICAgICAgICAgICBpZiAoc2xhc2hMaXN0LT5pdGVtKDApICYmIHNsYXNoTGlzdC0+
aXRlbSgwKS0+aXNCb3JkZXJJbWFnZVNsaWNlVmFsdWUoKSkKLSAgICAgICAgICAgICAgICBtYXBO
aW5lUGllY2VJbWFnZVNsaWNlKHNsYXNoTGlzdC0+aXRlbSgwKSwgaW1hZ2UpOworICAgICAgICAg
ICAgICAgIG1hcE5pbmVQaWVjZUltYWdlU2xpY2Uoc3RhdGUsIHNsYXNoTGlzdC0+aXRlbSgwKSwg
aW1hZ2UpOwogCiAgICAgICAgICAgICAvLyBNYXAgaW4gdGhlIGJvcmRlciBzbGljZXMuCiAgICAg
ICAgICAgICBpZiAoc2xhc2hMaXN0LT5pdGVtKDEpKQotICAgICAgICAgICAgICAgIGltYWdlLnNl
dEJvcmRlclNsaWNlcyhtYXBOaW5lUGllY2VJbWFnZVF1YWQoc2xhc2hMaXN0LT5pdGVtKDEpKSk7
CisgICAgICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKG1hcE5pbmVQaWVjZUltYWdl
UXVhZChzdGF0ZSwgc2xhc2hMaXN0LT5pdGVtKDEpKSk7CiAKICAgICAgICAgICAgIC8vIE1hcCBp
biB0aGUgb3V0c2V0LgogICAgICAgICAgICAgaWYgKHNsYXNoTGlzdC0+aXRlbSgyKSkKLSAgICAg
ICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQobWFwTmluZVBpZWNlSW1hZ2VRdWFkKHNsYXNoTGlz
dC0+aXRlbSgyKSkpOworICAgICAgICAgICAgICAgIGltYWdlLnNldE91dHNldChtYXBOaW5lUGll
Y2VJbWFnZVF1YWQoc3RhdGUsIHNsYXNoTGlzdC0+aXRlbSgyKSkpOwogICAgICAgICB9IGVsc2Ug
aWYgKGN1cnJlbnQtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewogICAgICAgICAgICAgLy8gU2V0IHRo
ZSBhcHByb3ByaWF0ZSBydWxlcyBmb3Igc3RyZXRjaC9yb3VuZC9yZXBlYXQgb2YgdGhlIHNsaWNl
cy4KLSAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KGN1cnJlbnQsIGltYWdlKTsK
KyAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KHN0YXRlLCBjdXJyZW50LCBpbWFn
ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUzOCwxNyArNTE4LDE3IEBAIHZvaWQgQ1NTVG9T
dHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTVmFs
dWUqIHZhbHVlLCBOCiAgICAgICAgIC8vIGFsc28gc2V0IHRoZSBib3JkZXIgd2lkdGhzLiBXZSBk
b24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHBlcmNlbnRhZ2VzLCBzaW5jZSB3ZSBkb24ndCBldmVu
IHN1cHBvcnQKICAgICAgICAgLy8gdGhvc2Ugb24gcmVhbCBib3JkZXJzIHlldC4KICAgICAgICAg
aWYgKGltYWdlLmJvcmRlclNsaWNlcygpLnRvcCgpLmlzRml4ZWQoKSkKLSAgICAgICAgICAgIHN0
eWxlKCktPnNldEJvcmRlclRvcFdpZHRoKGltYWdlLmJvcmRlclNsaWNlcygpLnRvcCgpLnZhbHVl
KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Qm9yZGVyVG9wV2lkdGgoaW1hZ2Uu
Ym9yZGVyU2xpY2VzKCkudG9wKCkudmFsdWUoKSk7CiAgICAgICAgIGlmIChpbWFnZS5ib3JkZXJT
bGljZXMoKS5yaWdodCgpLmlzRml4ZWQoKSkKLSAgICAgICAgICAgIHN0eWxlKCktPnNldEJvcmRl
clJpZ2h0V2lkdGgoaW1hZ2UuYm9yZGVyU2xpY2VzKCkucmlnaHQoKS52YWx1ZSgpKTsKKyAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJvcmRlclJpZ2h0V2lkdGgoaW1hZ2UuYm9yZGVyU2xp
Y2VzKCkucmlnaHQoKS52YWx1ZSgpKTsKICAgICAgICAgaWYgKGltYWdlLmJvcmRlclNsaWNlcygp
LmJvdHRvbSgpLmlzRml4ZWQoKSkKLSAgICAgICAgICAgIHN0eWxlKCktPnNldEJvcmRlckJvdHRv
bVdpZHRoKGltYWdlLmJvcmRlclNsaWNlcygpLmJvdHRvbSgpLnZhbHVlKCkpOworICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0Qm9yZGVyQm90dG9tV2lkdGgoaW1hZ2UuYm9yZGVyU2xpY2Vz
KCkuYm90dG9tKCkudmFsdWUoKSk7CiAgICAgICAgIGlmIChpbWFnZS5ib3JkZXJTbGljZXMoKS5s
ZWZ0KCkuaXNGaXhlZCgpKQotICAgICAgICAgICAgc3R5bGUoKS0+c2V0Qm9yZGVyTGVmdFdpZHRo
KGltYWdlLmJvcmRlclNsaWNlcygpLmxlZnQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldEJvcmRlckxlZnRXaWR0aChpbWFnZS5ib3JkZXJTbGljZXMoKS5sZWZ0KCku
dmFsdWUoKSk7CiAgICAgfQogfQogCi12b2lkIENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUlt
YWdlU2xpY2UoQ1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCit2b2lkIENT
U1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlU2xpY2UoU3R5bGVSZXNvbHZlU3RhdGUmLCBD
U1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKIHsKICAgICBpZiAoIXZhbHVl
IHx8ICF2YWx1ZS0+aXNCb3JkZXJJbWFnZVNsaWNlVmFsdWUoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtNTgxLDEzICs1NjEsMTMgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFn
ZVNsaWNlKENTU1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWcKICAgICBpbWFnZS5z
ZXRGaWxsKGJvcmRlckltYWdlU2xpY2UtPm1fZmlsbCk7CiB9CiAKLUxlbmd0aEJveCBDU1NUb1N0
eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVF1YWQoQ1NTVmFsdWUqIHZhbHVlKQorTGVuZ3RoQm94
IENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlUXVhZChTdHlsZVJlc29sdmVTdGF0ZSYg
c3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKQogICAgICAgICByZXR1cm4gTGVuZ3RoQm94KCk7CiAKICAgICAvLyBH
ZXQgb3VyIHpvb20gdmFsdWUuCi0gICAgZmxvYXQgem9vbSA9IHVzZVNWR1pvb21SdWxlcygpID8g
MS4wZiA6IHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBmbG9hdCB6b29tID0gc3RhdGUu
dXNlU1ZHWm9vbVJ1bGVzKCkgPyAxLjBmIDogc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgp
OwogCiAgICAgLy8gUmV0cmlldmUgdGhlIHByaW1pdGl2ZSB2YWx1ZS4KICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogYm9yZGVyV2lkdGhzID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2
YWx1ZSk7CkBAIC02MDAsMzMgKzU4MCwzMyBAQCBMZW5ndGhCb3ggQ1NTVG9TdHlsZU1hcDo6bWFw
TmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlKiB2YWx1ZSkKICAgICBlbHNlIGlmIChzbGljZXMt
PnRvcCgpLT5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgYm94Lm1fdG9wID0gTGVuZ3RoKHNsaWNl
cy0+dG9wKCktPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFH
RSksIFBlcmNlbnQpOwogICAgIGVsc2UgaWYgKHNsaWNlcy0+dG9wKCktPmdldElkZW50KCkgIT0g
Q1NTVmFsdWVBdXRvKQotICAgICAgICBib3gubV90b3AgPSBzbGljZXMtPnRvcCgpLT5jb21wdXRl
TGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgcm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tKTsKKyAgICAg
ICAgYm94Lm1fdG9wID0gc2xpY2VzLT50b3AoKS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRl
LnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7CiAKICAgICBpZiAoc2xp
Y2VzLT5yaWdodCgpLT5pc051bWJlcigpKQogICAgICAgICBib3gubV9yaWdodCA9IExlbmd0aChz
bGljZXMtPnJpZ2h0KCktPmdldEludFZhbHVlKCksIFJlbGF0aXZlKTsKICAgICBlbHNlIGlmIChz
bGljZXMtPnJpZ2h0KCktPmlzUGVyY2VudGFnZSgpKQogICAgICAgICBib3gubV9yaWdodCA9IExl
bmd0aChzbGljZXMtPnJpZ2h0KCktPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUEVSQ0VOVEFHRSksIFBlcmNlbnQpOwogICAgIGVsc2UgaWYgKHNsaWNlcy0+cmlnaHQoKS0+
Z2V0SWRlbnQoKSAhPSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgIGJveC5tX3JpZ2h0ID0gc2xpY2Vz
LT5yaWdodCgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgcm9vdEVsZW1lbnRTdHls
ZSgpLCB6b29tKTsKKyAgICAgICAgYm94Lm1fcmlnaHQgPSBzbGljZXMtPnJpZ2h0KCktPmNvbXB1
dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCks
IHpvb20pOwogCiAgICAgaWYgKHNsaWNlcy0+Ym90dG9tKCktPmlzTnVtYmVyKCkpCiAgICAgICAg
IGJveC5tX2JvdHRvbSA9IExlbmd0aChzbGljZXMtPmJvdHRvbSgpLT5nZXRJbnRWYWx1ZSgpLCBS
ZWxhdGl2ZSk7CiAgICAgZWxzZSBpZiAoc2xpY2VzLT5ib3R0b20oKS0+aXNQZXJjZW50YWdlKCkp
CiAgICAgICAgIGJveC5tX2JvdHRvbSA9IExlbmd0aChzbGljZXMtPmJvdHRvbSgpLT5nZXREb3Vi
bGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpLCBQZXJjZW50KTsKICAg
ICBlbHNlIGlmIChzbGljZXMtPmJvdHRvbSgpLT5nZXRJZGVudCgpICE9IENTU1ZhbHVlQXV0bykK
LSAgICAgICAgYm94Lm1fYm90dG9tID0gc2xpY2VzLT5ib3R0b20oKS0+Y29tcHV0ZUxlbmd0aDxM
ZW5ndGg+KHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7CisgICAgICAgIGJveC5t
X2JvdHRvbSA9IHNsaWNlcy0+Ym90dG9tKCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5z
dHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb20pOwogCiAgICAgaWYgKHNsaWNl
cy0+bGVmdCgpLT5pc051bWJlcigpKQogICAgICAgICBib3gubV9sZWZ0ID0gTGVuZ3RoKHNsaWNl
cy0+bGVmdCgpLT5nZXRJbnRWYWx1ZSgpLCBSZWxhdGl2ZSk7CiAgICAgZWxzZSBpZiAoc2xpY2Vz
LT5sZWZ0KCktPmlzUGVyY2VudGFnZSgpKQogICAgICAgICBib3gubV9sZWZ0ID0gTGVuZ3RoKHNs
aWNlcy0+bGVmdCgpLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNF
TlRBR0UpLCBQZXJjZW50KTsKICAgICBlbHNlIGlmIChzbGljZXMtPmxlZnQoKS0+Z2V0SWRlbnQo
KSAhPSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgIGJveC5tX2xlZnQgPSBzbGljZXMtPmxlZnQoKS0+
Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7
CisgICAgICAgIGJveC5tX2xlZnQgPSBzbGljZXMtPmxlZnQoKS0+Y29tcHV0ZUxlbmd0aDxMZW5n
dGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7CiAKICAg
ICByZXR1cm4gYm94OwogfQogCi12b2lkIENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdl
UmVwZWF0KENTU1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQordm9pZCBDU1NU
b1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVJlcGVhdChTdHlsZVJlc29sdmVTdGF0ZSYsIENT
U1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQogewogICAgIGlmICghdmFsdWUg
fHwgIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVG9TdHlsZU1hcC5oCmluZGV4IDZiYWI0MGJmY2Q3N2UxMjVhYjA4ZjAwOGYxMGU3YTNl
NjgyNzkxNGUuLjhhNTVjNGYyODY5NzFhOTI1MDE1OTczZWM0YWY0Mjk1MWRkOTM5MTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuaApAQCAtMzIsNTYgKzMyLDQxIEBAIGNsYXNzIENTU1Zh
bHVlOwogY2xhc3MgQW5pbWF0aW9uOwogY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBTdHlsZUlt
YWdlOwotY2xhc3MgU3R5bGVSZXNvbHZlcjsKK2NsYXNzIFN0eWxlUmVzb2x2ZVN0YXRlOwogY2xh
c3MgTmluZVBpZWNlSW1hZ2U7CiAKIGNsYXNzIENTU1RvU3R5bGVNYXAgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENTU1RvU3R5bGVNYXApOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotCiBwdWJsaWM6Ci0gICAgQ1NTVG9TdHlsZU1hcChTdHlsZVJlc29sdmVyKiByZXNvbHZlcikg
OiBtX3Jlc29sdmVyKHJlc29sdmVyKSB7IH0KLQotICAgIHZvaWQgbWFwRmlsbEF0dGFjaG1lbnQo
Q1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEZpbGxD
bGlwKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBG
aWxsQ29tcG9zaXRlKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7Ci0gICAg
dm9pZCBtYXBGaWxsT3JpZ2luKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7
Ci0gICAgdm9pZCBtYXBGaWxsSW1hZ2UoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFs
dWUqKTsKLSAgICB2b2lkIG1hcEZpbGxSZXBlYXRYKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllcios
IENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBGaWxsUmVwZWF0WShDU1NQcm9wZXJ0eUlELCBGaWxs
TGF5ZXIqLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwRmlsbFNpemUoQ1NTUHJvcGVydHlJRCwg
RmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEZpbGxYUG9zaXRpb24oQ1NTUHJv
cGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEZpbGxZUG9zaXRp
b24oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICBzdGF0aWMgdm9p
ZCBtYXBGaWxsQXR0YWNobWVudChTdHlsZVJlc29sdmVTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIEZp
bGxMYXllciosIENTU1ZhbHVlKik7CisgICAgc3RhdGljIHZvaWQgbWFwRmlsbENsaXAoU3R5bGVS
ZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAg
IHN0YXRpYyB2b2lkIG1hcEZpbGxDb21wb3NpdGUoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9w
ZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOworICAgIHN0YXRpYyB2b2lkIG1hcEZpbGxP
cmlnaW4oU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NW
YWx1ZSopOworICAgIHN0YXRpYyB2b2lkIG1hcEZpbGxJbWFnZShTdHlsZVJlc29sdmVTdGF0ZSYs
IENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgc3RhdGljIHZvaWQg
bWFwRmlsbFJlcGVhdFgoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBGaWxsTGF5
ZXIqLCBDU1NWYWx1ZSopOworICAgIHN0YXRpYyB2b2lkIG1hcEZpbGxSZXBlYXRZKFN0eWxlUmVz
b2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICBz
dGF0aWMgdm9pZCBtYXBGaWxsU2l6ZShTdHlsZVJlc29sdmVTdGF0ZSYsIENTU1Byb3BlcnR5SUQs
IEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgc3RhdGljIHZvaWQgbWFwRmlsbFhQb3NpdGlv
bihTdHlsZVJlc29sdmVTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVl
Kik7CisgICAgc3RhdGljIHZvaWQgbWFwRmlsbFlQb3NpdGlvbihTdHlsZVJlc29sdmVTdGF0ZSYs
IENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CiAKLSAgICB2b2lkIG1hcEFu
aW1hdGlvbkRlbGF5KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBBbmltYXRp
b25EaXJlY3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1hdGlv
bkR1cmF0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBBbmltYXRpb25G
aWxsTW9kZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwQW5pbWF0aW9uSXRl
cmF0aW9uQ291bnQoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1hdGlv
bk5hbWUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1hdGlvblBsYXlT
dGF0ZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwQW5pbWF0aW9uUHJvcGVy
dHkoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1hdGlvblRpbWluZ0Z1
bmN0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgc3RhdGljIHZvaWQgbWFwQW5pbWF0
aW9uRGVsYXkoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICBzdGF0aWMgdm9pZCBtYXBBbmlt
YXRpb25EaXJlY3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICBzdGF0aWMgdm9pZCBt
YXBBbmltYXRpb25EdXJhdGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAgIHN0YXRpYyB2
b2lkIG1hcEFuaW1hdGlvbkZpbGxNb2RlKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgc3Rh
dGljIHZvaWQgbWFwQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uKiwgQ1NTVmFsdWUq
KTsKKyAgICBzdGF0aWMgdm9pZCBtYXBBbmltYXRpb25OYW1lKEFuaW1hdGlvbiosIENTU1ZhbHVl
Kik7CisgICAgc3RhdGljIHZvaWQgbWFwQW5pbWF0aW9uUGxheVN0YXRlKEFuaW1hdGlvbiosIENT
U1ZhbHVlKik7CisgICAgc3RhdGljIHZvaWQgbWFwQW5pbWF0aW9uUHJvcGVydHkoQW5pbWF0aW9u
KiwgQ1NTVmFsdWUqKTsKKyAgICBzdGF0aWMgdm9pZCBtYXBBbmltYXRpb25UaW1pbmdGdW5jdGlv
bihBbmltYXRpb24qLCBDU1NWYWx1ZSopOwogCi0gICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZShD
U1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7Ci0gICAgdm9pZCBtYXBO
aW5lUGllY2VJbWFnZVNsaWNlKENTU1ZhbHVlKiwgTmluZVBpZWNlSW1hZ2UmKTsKLSAgICBMZW5n
dGhCb3ggbWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBOaW5l
UGllY2VJbWFnZVJlcGVhdChDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7CisgICAgc3RhdGlj
IHZvaWQgbWFwTmluZVBpZWNlSW1hZ2UoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlE
LCBDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7CisgICAgc3RhdGljIHZvaWQgbWFwTmluZVBp
ZWNlSW1hZ2VTbGljZShTdHlsZVJlc29sdmVTdGF0ZSYsIENTU1ZhbHVlKiwgTmluZVBpZWNlSW1h
Z2UmKTsKKyAgICBzdGF0aWMgTGVuZ3RoQm94IG1hcE5pbmVQaWVjZUltYWdlUXVhZChTdHlsZVJl
c29sdmVTdGF0ZSYsIENTU1ZhbHVlKik7CisgICAgc3RhdGljIHZvaWQgbWFwTmluZVBpZWNlSW1h
Z2VSZXBlYXQoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7
CiAKIHByaXZhdGU6Ci0gICAgLy8gRklYTUU6IFRoZXNlIGFjY2Vzc29ycyBzaG91bGQgYmUgcmVw
bGFjZWQgYnkgYSBSZXNvbHZlU3RhdGUgb2JqZWN0Ci0gICAgLy8gc2ltaWxhciB0byBob3cgUGFp
bnRJbmZvL0xheW91dFN0YXRlIGNhY2hlIHZhbHVlcyBuZWVkZWQgZm9yCi0gICAgLy8gdGhlIGN1
cnJlbnQgcGFpbnQvbGF5b3V0LgotICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0OwotICAg
IFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3Q7Ci0gICAgYm9vbCB1c2VTVkda
b29tUnVsZXMoKSBjb25zdDsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwYXJ0IG9m
IHNvbWUgc29ydCBvZiBTdHlsZUltYWdlQ2FjaGUgb2JqZWN0IHdoaWNoCi0gICAgLy8gaXMgaGVs
ZCBieSB0aGUgU3R5bGVSZXNvbHZlciwgYW5kIGxpa2VseSBwcm92aWRlZCB0byB0aGlzIG9iamVj
dAotICAgIC8vIGR1cmluZyB0aGUgcmVzb2x2ZS4KLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IHN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKLQotICAgIFN0eWxlUmVzb2x2
ZXIqIG1fcmVzb2x2ZXI7CisgICAgQ1NTVG9TdHlsZU1hcCgpIHsgfQogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDYxNDViYjFmMTYyNWI4
ZmU0ZDE2NzYwN2JiYmE4YmZkOWExYjAxMTkuLmRiMjNlOTk0MDJlNzM3NDMwZDk1ZjEyYThiYWM2
MDdjZTMxNzM2N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNl
bGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5j
cHAKQEAgLTQ5LDcgKzQ5LDcgQEAKICNkZWZpbmUgSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkg
XAogaWYgKGlzSW5oZXJpdCkgXAogeyBcCi0gICAgc3Znc3R5bGUtPnNldCMjUHJvcChtX3BhcmVu
dFN0eWxlLT5zdmdTdHlsZSgpLT5wcm9wKCkpOyBcCisgICAgc3Znc3R5bGUtPnNldCMjUHJvcChz
dGF0ZS5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpLT5wcm9wKCkpOyBcCiAgICAgcmV0dXJuOyBc
CiB9CiAKQEAgLTEwMiwxNyArMTAyLDE3IEBAIHN0YXRpYyBDb2xvciBjb2xvckZyb21TVkdDb2xv
ckNTU1ZhbHVlKFNWR0NvbG9yKiBzdmdDb2xvciwgY29uc3QgQ29sb3ImIGZnQ29sb3IpCiAgICAg
cmV0dXJuIGNvbG9yOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVNWR1Byb3BlcnR5KFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gMDsKICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHZhbHVlKTsKIAotICAgIFNWR1JlbmRlclN0eWxlKiBzdmdzdHlsZSA9IG1fc3R5
bGUtPmFjY2Vzc1NWR1N0eWxlKCk7CisgICAgU1ZHUmVuZGVyU3R5bGUqIHN2Z3N0eWxlID0gc3Rh
dGUuc3R5bGUoKS0+YWNjZXNzU1ZHU3R5bGUoKTsKIAotICAgIGJvb2wgaXNJbmhlcml0ID0gbV9w
YXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7Ci0gICAgYm9vbCBpc0luaXRp
YWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAoIW1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+
aXNJbmhlcml0ZWRWYWx1ZSgpKTsKKyAgICBib29sIGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVudE5v
ZGUoKSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpOworICAgIGJvb2wgaXNJbml0aWFsID0g
dmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgKCFzdGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUt
PmlzSW5oZXJpdGVkVmFsdWUoKSk7CiAKICAgICAvLyBXaGF0IGZvbGxvd3MgaXMgYSBsaXN0IHRo
YXQgbWFwcyB0aGUgQ1NTIHByb3BlcnRpZXMgaW50byB0aGVpcgogICAgIC8vIGNvcnJlc3BvbmRp
bmcgZnJvbnQtZW5kIFJlbmRlclN0eWxlIHZhbHVlcy4gU2hvcnRoYW5kcyhlLmcuIGJvcmRlciwK
QEAgLTIyOSwzNCArMjI5LDM0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlGaWxsOgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAg
ICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1BhcmVudFN0eWxlID0gbV9wYXJl
bnRTdHlsZS0+c3ZnU3R5bGUoKTsKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBh
aW50KHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLT5maWxs
UGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50VXJpKCksIGFwcGx5UHJvcGVy
dHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwor
ICAgICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQYXJlbnRTdHlsZSA9IHN0
YXRlLnBhcmVudFN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgICAgICAgICAgICAgc3Znc3R5bGUt
PnNldEZpbGxQYWludChzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50VHlwZSgpLCBzdmdQYXJlbnRT
dHlsZS0+ZmlsbFBhaW50Q29sb3IoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFVyaSgpLCBz
dGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRv
VmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICAgICAgc3Znc3R5
bGUtPnNldEZpbGxQYWludChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludFR5cGUoKSwg
U1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRDb2xvcigpLCBTVkdSZW5kZXJTdHlsZTo6
aW5pdGlhbEZpbGxQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHls
ZS0+c2V0RmlsbFBhaW50KFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50VHlwZSgpLCBT
VkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludENvbG9yKCksIFNWR1JlbmRlclN0eWxlOjpp
bml0aWFsRmlsbFBhaW50VXJpKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgp
LCBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdQ
YWludCgpKSB7CiAgICAgICAgICAgICAgICAgU1ZHUGFpbnQqIHN2Z1BhaW50ID0gc3RhdGljX2Nh
c3Q8U1ZHUGFpbnQqPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQ
YWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3Zn
UGFpbnQsIG1fc3R5bGUtPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAg
ICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgp
LCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xv
cigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUo
KSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlTdHJva2U6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAg
ICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBtX3BhcmVu
dFN0eWxlLT5zdmdTdHlsZSgpOwotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQ
YWludChzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLT5z
dHJva2VQYWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludFVyaSgpLCBhcHBs
eVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSgpKTsKKyAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5
bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpOworICAgICAgICAgICAgICAgIHN2
Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRUeXBlKCks
IHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLT5zdHJv
a2VQYWludFVyaSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3RhdGUu
YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAg
ICAgICAgICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KFNWR1JlbmRlclN0eWxlOjppbml0aWFs
U3Ryb2tlUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRDb2xv
cigpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VXJpKCksIGFwcGx5UHJvcGVy
dHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwor
ICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChTVkdSZW5kZXJTdHlsZTo6
aW5pdGlhbFN0cm9rZVBhaW50VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBh
aW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFVyaSgpLCBzdGF0
ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlz
aXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkgewogICAgICAgICAgICAgICAg
IFNWR1BhaW50KiBzdmdQYWludCA9IHN0YXRpY19jYXN0PFNWR1BhaW50Kj4odmFsdWUpOwotICAg
ICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYWludC0+cGFpbnRUeXBl
KCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIG1fc3R5bGUtPmNvbG9yKCkp
LCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVBy
b3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRTdHJva2VQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NT
VmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCks
IHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KQEAgLTM2Myw3ICszNjMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAg
ICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAg
ICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBz
dmdzdHlsZS0+c2V0TWFya2VyU3RhcnRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50
SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVudCgpKSk7CisgICAg
ICAgICAgICBzdmdzdHlsZS0+c2V0TWFya2VyU3RhcnRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6
OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZG9jdW1lbnQoKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1h
cmtlck1pZDoKQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZH
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAg
aWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAg
cyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdz
dHlsZS0+c2V0TWFya2VyTWlkUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50
aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAg
ICAgc3Znc3R5bGUtPnNldE1hcmtlck1pZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21l
bnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFya2VyRW5k
OgpAQCAtMzkxLDcgKzM5MSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAodHlw
ZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBzID0gcHJp
bWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRNYXJrZXJFbmRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZy
b21JUklTdHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICBzdmdz
dHlsZS0+c2V0TWFya2VyRW5kUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50
aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50KCkpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2VMaW5lY2FwOgpA
QCAtNDI4LDcgKzQyOCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAodHlwZSA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBzID0gcHJpbWl0
aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRG
aWx0ZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklT
dHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+
c2V0RmlsdGVyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9t
SVJJU3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXNrOgpAQCAtNDQyLDcgKzQ0Miw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmlu
Z1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXNrZXJSZXNvdXJjZShTVkdV
UklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgbV9lbGVtZW50
LT5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFza2VyUmVzb3VyY2Uo
U1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRl
LmRvY3VtZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlDbGlwUGF0aDoKQEAgLTQ1Niw3ICs0NTYsNyBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAg
ICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0g
ICAgICAgICAgICBzdmdzdHlsZS0+c2V0Q2xpcHBlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6
ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkp
KTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRDbGlwcGVyUmVzb3VyY2UoU1ZHVVJJUmVmZXJl
bmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50KCkp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlUZXh0QW5jaG9yOgpAQCAtNDc3LDE0ICs0NzcsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAg
ICAgewogICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoc3RvcENvbG9yLCBT
dG9wQ29sb3IpOwogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAg
ICAgICAgICAgc3Znc3R5bGUtPnNldFN0b3BDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVl
KHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBtX3N0eWxlLT5jb2xvcigpKSk7CisgICAg
ICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0b3BDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1Zh
bHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlMaWdodGluZ0NvbG9yOgogICAgICAgICB7CiAgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9B
TkRfSU5JVElBTChsaWdodGluZ0NvbG9yLCBMaWdodGluZ0NvbG9yKTsKICAgICAgICAgICAgIGlm
ICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRMaWdo
dGluZ0NvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3Iq
Pih2YWx1ZSksIG1fc3R5bGUtPmNvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+
c2V0TGlnaHRpbmdDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNW
R0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rmxvb2RPcGFjaXR5OgpA
QCAtNTA5LDcgKzUwOSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAg
IEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGZsb29kQ29sb3IsIEZsb29kQ29sb3IpOwogICAg
ICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAgICAgICAgICAgc3Znc3R5
bGUtPnNldEZsb29kQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2FzdDxT
VkdDb2xvcio+KHZhbHVlKSwgbV9zdHlsZS0+Y29sb3IoKSkpOworICAgICAgICAgICAgICAgIHN2
Z3N0eWxlLT5zZXRGbG9vZENvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nh
c3Q8U1ZHQ29sb3IqPih2YWx1ZSksIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9yaWVu
dGF0aW9uSG9yaXpvbnRhbDoKQEAgLTU0OSw3ICs1NDksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTdmdTaGFkb3c6
IHsKICAgICAgICAgICAgIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN2
Z3N0eWxlLT5zZXRTaGFkb3coYWRvcHRQdHIobV9wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKS0+c2hh
ZG93KCkgPyBuZXcgU2hhZG93RGF0YSgqbV9wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKS0+c2hhZG93
KCkpIDogMCkpOworICAgICAgICAgICAgICAgIHJldHVybiBzdmdzdHlsZS0+c2V0U2hhZG93KGFk
b3B0UHRyKHN0YXRlLnBhcmVudFN0eWxlKCktPnN2Z1N0eWxlKCktPnNoYWRvdygpID8gbmV3IFNo
YWRvd0RhdGEoKnN0YXRlLnBhcmVudFN0eWxlKCktPnN2Z1N0eWxlKCktPnNoYWRvdygpKSA6IDAp
KTsKICAgICAgICAgICAgIGlmIChpc0luaXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUpIC8vIGluaXRp
YWwgfCBub25lCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN2Z3N0eWxlLT5zZXRTaGFkb3cobnVs
bHB0cik7CiAKQEAgLTU2NCwxMiArNTY0LDEyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlT
VkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAg
ICBpZiAoIWZpcnN0VmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1Zh
bHVlKj4oZmlyc3RWYWx1ZSk7Ci0gICAgICAgICAgICBJbnRQb2ludCBsb2NhdGlvbihpdGVtLT54
LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50PihzdHls
ZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpKTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+
Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVt
ZW50U3R5bGUpIDogMDsKKyAgICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uKGl0ZW0tPngtPmNv
bXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkp
LAorICAgICAgICAgICAgICAgIGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHls
ZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGludCBibHVyID0g
aXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpIDogMDsKICAgICAgICAgICAgIENvbG9yIGNvbG9y
OwogICAgICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQotICAgICAgICAgICAgICAgIGNvbG9yID0g
Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0KCkpOworICAgICAgICAgICAg
ICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoc3RhdGUsIGl0ZW0tPmNvbG9yLmdl
dCgpKTsKIAogICAgICAgICAgICAgLy8gLXdlYmtpdC1zdmctc2hhZG93IGRvZXMgc2hvdWxkIG5v
dCBoYXZlIGEgc3ByZWFkIG9yIHN0eWxlCiAgICAgICAgICAgICBBU1NFUlQoIWl0ZW0tPnNwcmVh
ZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCmluZGV4IDFmNWUwYzAyNDgx
Yzk4MjliYjY5YmE2NWY1MTgzNTlhNDQ4N2RkZWIuLmZiZDM3Mjk3YjZhNGU5ZTM1ZWYyNjE4ZmUx
NjZjMzg0ZDRiOGRjNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNo
ZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCkBA
IC02OSwxOSArNjksOTAgQEAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNrZXIoRG9jdW1l
bnQqIGRvY3VtZW50KQogewogfQogCi1ib29sIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hlcyhjb25z
dCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgaXNGYXN0Q2hl
Y2thYmxlU2VsZWN0b3IpIGNvbnN0CituYW1lc3BhY2UgeworCitzdGF0aWMgaW5saW5lIGJvb2wg
aXNGYXN0Q2hlY2thYmxlUmVsYXRpb24oQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHJlbGF0aW9uKQog
ewotICAgIGlmIChpc0Zhc3RDaGVja2FibGVTZWxlY3RvciAmJiAhZWxlbWVudC0+aXNTVkdFbGVt
ZW50KCkpIHsKLSAgICAgICAgaWYgKCFmYXN0Q2hlY2tSaWdodG1vc3RTZWxlY3RvcihzZWxlY3Rv
ciwgZWxlbWVudCwgVmlzaXRlZE1hdGNoRGlzYWJsZWQpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICByZXR1cm4gZmFzdENoZWNrKHNlbGVjdG9yLCBlbGVtZW50KTsKKyAgICBy
ZXR1cm4gcmVsYXRpb24gPT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQgfHwgcmVsYXRpb24gPT0g
Q1NTU2VsZWN0b3I6OkNoaWxkIHx8IHJlbGF0aW9uID09IENTU1NlbGVjdG9yOjpTdWJTZWxlY3Rv
cjsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzRmFzdENoZWNrYWJsZU1hdGNoKGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NT
U2VsZWN0b3I6OlNldCkgeworICAgICAgICAvLyBTdHlsZSBhdHRyaWJ1dGUgaXMgZ2VuZXJhdGVk
IGxhemlseSBidXQgdGhlIGZhc3QgcGF0aCBkb2Vzbid0IHRyaWdnZXIgaXQuCisgICAgICAgIC8v
IERpc2FsbG93IHRoZW0gaGVyZSByYXRoZXIgdGhhbiBtYWtpbmcgdGhlIGZhc3QgcGF0aCBtb3Jl
IGJyYW5jaHkuCisgICAgICAgIHJldHVybiBzZWxlY3Rvci0+YXR0cmlidXRlKCkgIT0gc3R5bGVB
dHRyOwogICAgIH0KKyAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkV4
YWN0KQorICAgICAgICByZXR1cm4gc2VsZWN0b3ItPmF0dHJpYnV0ZSgpICE9IHN0eWxlQXR0ciAm
JiBIVE1MRG9jdW1lbnQ6OmlzQ2FzZVNlbnNpdGl2ZUF0dHJpYnV0ZShzZWxlY3Rvci0+YXR0cmli
dXRlKCkpOworICAgIHJldHVybiBzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6VGFn
IHx8IHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCB8fCBzZWxlY3Rvci0+bV9t
YXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3M7Cit9CiAKLSAgICBQc2V1ZG9JZCBpZ25vcmVEeW5h
bWljUHNldWRvID0gTk9QU0VVRE87Ci0gICAgcmV0dXJuIG1hdGNoKFNlbGVjdG9yQ2hlY2tpbmdD
b250ZXh0KHNlbGVjdG9yLCBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaERp
c2FibGVkKSwgaWdub3JlRHluYW1pY1BzZXVkbywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5
KCkpID09IFNlbGVjdG9yTWF0Y2hlczsKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0Zhc3RDaGVja2Fi
bGVSaWdodG1vc3RTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAg
aWYgKCFpc0Zhc3RDaGVja2FibGVSZWxhdGlvbihzZWxlY3Rvci0+cmVsYXRpb24oKSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gaXNGYXN0Q2hlY2thYmxlTWF0Y2goc2VsZWN0
b3IpIHx8IFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKHNlbGVj
dG9yKTsKIH0KIAotbmFtZXNwYWNlIHsKK2lubGluZSBib29sIGNoZWNrVGFnVmFsdWUoY29uc3Qg
RWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIHJl
dHVybiBTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMoZWxlbWVudCwgc2VsZWN0b3ItPnRhZ1FO
YW1lKCkpOworfQorCitpbmxpbmUgYm9vbCBjaGVja0NsYXNzVmFsdWUoY29uc3QgRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIHJldHVybiBlbGVt
ZW50LT5oYXNDbGFzcygpICYmIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlZEVsZW1lbnQqPihlbGVt
ZW50KS0+Y2xhc3NOYW1lcygpLmNvbnRhaW5zKHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7Cit9
CisKK2lubGluZSBib29sIGNoZWNrSURWYWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25z
dCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgcmV0dXJuIGVsZW1lbnQtPmhhc0lEKCkg
JiYgZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkgPT0gc2VsZWN0b3ItPnZh
bHVlKCkuaW1wbCgpOworfQorCitpbmxpbmUgYm9vbCBjaGVja0V4YWN0QXR0cmlidXRlVmFsdWUo
Y29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQorewor
ICAgIHJldHVybiBTZWxlY3RvckNoZWNrZXI6OmNoZWNrRXhhY3RBdHRyaWJ1dGUoZWxlbWVudCwg
c2VsZWN0b3ItPmF0dHJpYnV0ZSgpLCBzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCkpOworfQorCitp
bmxpbmUgYm9vbCBjb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yTWF0Y2hlcyhjb25zdCBFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIFNlbGVjdG9yQ2hlY2tlcjo6
VmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlKQoreworICAgIEFTU0VSVChTZWxlY3Rv
ckNoZWNrZXI6OmlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3RvcihzZWxlY3RvcikpOworICAgIHN3
aXRjaCAoc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSkgeworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0xpbms6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW55TGluazoKKyAgICAgICAg
cmV0dXJuIGVsZW1lbnQtPmlzTGluaygpOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zp
c2l0ZWQ6CisgICAgICAgIHJldHVybiBlbGVtZW50LT5pc0xpbmsoKSAmJiB2aXNpdGVkTWF0Y2hU
eXBlID09IFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRW5hYmxlZDsKKyAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9Gb2N1czoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXNGb2N1c1BzZXVk
b0NsYXNzKGVsZW1lbnQpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgZmFzdENoZWNr
UmlnaHRtb3N0U2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBFbGVt
ZW50KiBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1h
dGNoVHlwZSkKK3sKKyAgICBBU1NFUlQoU2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVT
ZWxlY3RvcihzZWxlY3RvcikpOworCisgICAgc3dpdGNoIChzZWxlY3Rvci0+bV9tYXRjaCkgewor
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlRhZzoKKyAgICAgICAgcmV0dXJuIGNoZWNrVGFnVmFsdWUo
ZWxlbWVudCwgc2VsZWN0b3IpOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNsYXNzOgorICAgICAg
ICByZXR1cm4gY2hlY2tDbGFzc1ZhbHVlKGVsZW1lbnQsIHNlbGVjdG9yKTsKKyAgICBjYXNlIENT
U1NlbGVjdG9yOjpJZDoKKyAgICAgICAgcmV0dXJuIGNoZWNrSURWYWx1ZShlbGVtZW50LCBzZWxl
Y3Rvcik7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RXhhY3Q6CisgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6U2V0OgorICAgICAgICByZXR1cm4gY2hlY2tFeGFjdEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQs
IHNlbGVjdG9yKTsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzczoKKyAgICAgICAg
cmV0dXJuIGNvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3JNYXRjaGVzKGVsZW1lbnQsIHNlbGVjdG9y
LCB2aXNpdGVkTWF0Y2hUeXBlKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQogCiB0ZW1wbGF0ZSA8Ym9vbCBj
aGVja1ZhbHVlKGNvbnN0IEVsZW1lbnQqLCBjb25zdCBDU1NTZWxlY3RvciopPgogaW5saW5lIGJv
b2wgZmFzdENoZWNrU2luZ2xlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqJiBzZWxlY3Rvciwg
Y29uc3QgRWxlbWVudComIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiYgdG9wQ2hpbGRPclN1
YnNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVt
ZW50KQpAQCAtMTE3LDUxICsxODgsMzQgQEAgaW5saW5lIGJvb2wgZmFzdENoZWNrU2luZ2xlU2Vs
ZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqJiBzZWxlY3RvciwgY29uc3QgRWxlbWVudCoKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWlubGluZSBib29sIGNoZWNrQ2xhc3NWYWx1ZShjb25zdCBFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAgcmV0dXJu
IGVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVkRWxlbWVudCo+
KGVsZW1lbnQpLT5jbGFzc05hbWVzKCkuY29udGFpbnMoc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgp
KTsKIH0KIAotaW5saW5lIGJvb2wgY2hlY2tJRFZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICByZXR1cm4gZWxlbWVudC0+aGFz
SUQoKSAmJiBlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSA9PSBzZWxlY3Rv
ci0+dmFsdWUoKS5pbXBsKCk7Ci19Ci0KLWlubGluZSBib29sIGNoZWNrRXhhY3RBdHRyaWJ1dGVW
YWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3Ip
Ci17Ci0gICAgcmV0dXJuIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tFeGFjdEF0dHJpYnV0ZShlbGVt
ZW50LCBzZWxlY3Rvci0+YXR0cmlidXRlKCksIHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7Ci19
Ci0KLWlubGluZSBib29sIGNoZWNrVGFnVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29u
c3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQorYm9vbCBTZWxlY3RvckNoZWNrZXI6OmlzRmFzdENo
ZWNrYWJsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIHsKLSAgICByZXR1
cm4gU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKGVsZW1lbnQsIHNlbGVjdG9yLT50YWdRTmFt
ZSgpKTsKLX0KLQorICAgIGlmICghaXNGYXN0Q2hlY2thYmxlUmlnaHRtb3N0U2VsZWN0b3Ioc2Vs
ZWN0b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChzZWxlY3RvciA9IHNlbGVj
dG9yLT50YWdIaXN0b3J5KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0
b3J5KCkpIHsKKyAgICAgICAgaWYgKCFpc0Zhc3RDaGVja2FibGVSZWxhdGlvbihzZWxlY3Rvci0+
cmVsYXRpb24oKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghaXNG
YXN0Q2hlY2thYmxlTWF0Y2goc2VsZWN0b3IpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2Vy
OjpmYXN0Q2hlY2tSaWdodG1vc3RTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3Is
IGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlw
ZSkgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjptYXRjaGVzKGNvbnN0IENTU1NlbGVjdG9y
KiBzZWxlY3RvciwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBpc0Zhc3RDaGVja2FibGVTZWxlY3Rv
cikgY29uc3QKIHsKLSAgICBBU1NFUlQoaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Ioc2VsZWN0b3Ip
KTsKLQotICAgIHN3aXRjaCAoc2VsZWN0b3ItPm1fbWF0Y2gpIHsKLSAgICBjYXNlIENTU1NlbGVj
dG9yOjpUYWc6Ci0gICAgICAgIHJldHVybiBjaGVja1RhZ1ZhbHVlKGVsZW1lbnQsIHNlbGVjdG9y
KTsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpDbGFzczoKLSAgICAgICAgcmV0dXJuIGNoZWNrQ2xh
c3NWYWx1ZShlbGVtZW50LCBzZWxlY3Rvcik7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6SWQ6Ci0g
ICAgICAgIHJldHVybiBjaGVja0lEVmFsdWUoZWxlbWVudCwgc2VsZWN0b3IpOwotICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OkV4YWN0OgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNldDoKLSAgICAgICAg
cmV0dXJuIGNoZWNrRXhhY3RBdHRyaWJ1dGVWYWx1ZShlbGVtZW50LCBzZWxlY3Rvcik7Ci0gICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3M6Ci0gICAgICAgIHJldHVybiBjb21tb25Qc2V1
ZG9DbGFzc1NlbGVjdG9yTWF0Y2hlcyhlbGVtZW50LCBzZWxlY3RvciwgdmlzaXRlZE1hdGNoVHlw
ZSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgaWYg
KGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yICYmICFlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkgewor
ICAgICAgICBpZiAoIWZhc3RDaGVja1JpZ2h0bW9zdFNlbGVjdG9yKHNlbGVjdG9yLCBlbGVtZW50
LCBWaXNpdGVkTWF0Y2hEaXNhYmxlZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiBmYXN0Q2hlY2soc2VsZWN0b3IsIGVsZW1lbnQpOwogICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBQc2V1ZG9JZCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87
CisgICAgcmV0dXJuIG1hdGNoKFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KHNlbGVjdG9yLCBlbGVt
ZW50LCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaERpc2FibGVkKSwgaWdub3JlRHluYW1p
Y1BzZXVkbywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KCkpID09IFNlbGVjdG9yTWF0Y2hl
czsKIH0KIAotYm9vbCBTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVjayhjb25zdCBDU1NTZWxlY3Rv
ciogc2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Citib29sIFNlbGVjdG9y
Q2hlY2tlcjo6ZmFzdENoZWNrKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgY29uc3QgRWxl
bWVudCogZWxlbWVudCkKIHsKICAgICBBU1NFUlQoZmFzdENoZWNrUmlnaHRtb3N0U2VsZWN0b3Io
c2VsZWN0b3IsIGVsZW1lbnQsIFZpc2l0ZWRNYXRjaEVuYWJsZWQpKTsKIApAQCAtMjAyLDQzICsy
NTYsNiBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrKGNvbnN0IENTU1NlbGVjdG9y
KiBzZWxlY3RvciwgY29uc3QgRWxlbWVudCogZWxlbQogICAgIHJldHVybiB0cnVlOwogfQogCi1z
dGF0aWMgaW5saW5lIGJvb2wgaXNGYXN0Q2hlY2thYmxlUmVsYXRpb24oQ1NTU2VsZWN0b3I6OlJl
bGF0aW9uIHJlbGF0aW9uKQotewotICAgIHJldHVybiByZWxhdGlvbiA9PSBDU1NTZWxlY3Rvcjo6
RGVzY2VuZGFudCB8fCByZWxhdGlvbiA9PSBDU1NTZWxlY3Rvcjo6Q2hpbGQgfHwgcmVsYXRpb24g
PT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNG
YXN0Q2hlY2thYmxlTWF0Y2goY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIGlm
IChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6U2V0KSB7Ci0gICAgICAgIC8vIFN0
eWxlIGF0dHJpYnV0ZSBpcyBnZW5lcmF0ZWQgbGF6aWx5IGJ1dCB0aGUgZmFzdCBwYXRoIGRvZXNu
J3QgdHJpZ2dlciBpdC4KLSAgICAgICAgLy8gRGlzYWxsb3cgdGhlbSBoZXJlIHJhdGhlciB0aGFu
IG1ha2luZyB0aGUgZmFzdCBwYXRoIG1vcmUgYnJhbmNoeS4KLSAgICAgICAgcmV0dXJuIHNlbGVj
dG9yLT5hdHRyaWJ1dGUoKSAhPSBzdHlsZUF0dHI7Ci0gICAgfQotICAgIGlmIChzZWxlY3Rvci0+
bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6RXhhY3QpCi0gICAgICAgIHJldHVybiBzZWxlY3Rvci0+
YXR0cmlidXRlKCkgIT0gc3R5bGVBdHRyICYmIEhUTUxEb2N1bWVudDo6aXNDYXNlU2Vuc2l0aXZl
QXR0cmlidXRlKHNlbGVjdG9yLT5hdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIHNlbGVjdG9yLT5t
X21hdGNoID09IENTU1NlbGVjdG9yOjpUYWcgfHwgc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2Vs
ZWN0b3I6OklkIHx8IHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzczsKLX0K
LQotc3RhdGljIGlubGluZSBib29sIGlzRmFzdENoZWNrYWJsZVJpZ2h0bW9zdFNlbGVjdG9yKGNv
bnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICBpZiAoIWlzRmFzdENoZWNrYWJsZVJl
bGF0aW9uKHNlbGVjdG9yLT5yZWxhdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiBpc0Zhc3RDaGVja2FibGVNYXRjaChzZWxlY3RvcikgfHwgU2VsZWN0b3JDaGVja2Vy
Ojppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IpOwotfQotCi1ib29sIFNlbGVj
dG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yKQotewotICAgIGlmICghaXNGYXN0Q2hlY2thYmxlUmlnaHRtb3N0U2VsZWN0b3Ioc2Vs
ZWN0b3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChzZWxlY3RvciA9IHNlbGVj
dG9yLT50YWdIaXN0b3J5KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0
b3J5KCkpIHsKLSAgICAgICAgaWYgKCFpc0Zhc3RDaGVja2FibGVSZWxhdGlvbihzZWxlY3Rvci0+
cmVsYXRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghaXNG
YXN0Q2hlY2thYmxlTWF0Y2goc2VsZWN0b3IpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogLy8gUmVjdXJzaXZlIGNoZWNrIG9mIHNlbGVj
dG9ycyBhbmQgY29tYmluYXRvcnMKIC8vIEl0IGNhbiByZXR1cm4gNCBkaWZmZXJlbnQgdmFsdWVz
OgogLy8gKiBTZWxlY3Rvck1hdGNoZXMgICAgICAgICAgLSB0aGUgc2VsZWN0b3IgbWF0Y2hlcyB0
aGUgZWxlbWVudCBlCkBAIC05OTMsMjMgKzEwMTAsNiBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IENTU1Nl
bAogICAgIH0KIH0KIAotYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNvbW1vblBzZXVkb0NsYXNzU2Vs
ZWN0b3JNYXRjaGVzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBz
ZWxlY3RvciwgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlKSBjb25zdAotewotICAg
IEFTU0VSVChpc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IpKTsKLSAgICBzd2l0
Y2ggKHNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkpIHsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9MaW5rOgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FueUxpbms6Ci0gICAgICAgIHJl
dHVybiBlbGVtZW50LT5pc0xpbmsoKTsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNp
dGVkOgotICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNMaW5rKCkgJiYgdmlzaXRlZE1hdGNoVHlw
ZSA9PSBWaXNpdGVkTWF0Y2hFbmFibGVkOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Zv
Y3VzOgotICAgICAgICByZXR1cm4gbWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MoZWxlbWVudCk7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJl
dHVybiB0cnVlOwotfQotCiB1bnNpZ25lZCBTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtN
YXRjaFR5cGUoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQogewogICAgIHVuc2lnbmVkIGxp
bmtNYXRjaFR5cGUgPSBNYXRjaEFsbDsKQEAgLTEwNTUsMTEgKzEwNTUsNiBAQCB1bnNpZ25lZCBT
ZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtNYXRjaFR5cGUoY29uc3QgQ1NTU2VsZWN0b3Iq
IHNlbGVjdG9yKQogICAgIHJldHVybiBsaW5rTWF0Y2hUeXBlOwogfQogCi1ib29sIFNlbGVjdG9y
Q2hlY2tlcjo6aXNGcmFtZUZvY3VzZWQoY29uc3QgRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBy
ZXR1cm4gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiBlbGVtZW50LT5kb2N1bWVudCgp
LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+aXNGb2N1c2VkQW5kQWN0aXZlKCk7Ci19Ci0KIHRlbXBs
YXRlCiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2goY29uc3Qg
U2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBQc2V1ZG9JZCYsIGNvbnN0IERPTVNpYmxpbmdUcmF2
ZXJzYWxTdHJhdGVneSYpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U2VsZWN0b3JDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgK
aW5kZXggMzkzOWJjMzU0ZTRhM2NkNzIzNDc3ZjM4ZWY2MmFmZGM0ZDZmZWVmYi4uNmQ2Mjk1M2E4
ODJmYzZiNmYyZDY0OTVjYmE3NTRkYmMwMDhiYjE2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXIuaApAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjaGVja09uZShj
b25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIGNvbnN0IFNpYmxpbmdUcmF2ZXJzYWxTdHJh
dGVneSYpIGNvbnN0OwogCiAgICAgc3RhdGljIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Io
Y29uc3QgQ1NTU2VsZWN0b3IqKTsKLSAgICBib29sIGZhc3RDaGVjayhjb25zdCBDU1NTZWxlY3Rv
ciosIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBmYXN0Q2hlY2soY29u
c3QgQ1NTU2VsZWN0b3IqLCBjb25zdCBFbGVtZW50Kik7CiAKICAgICBib29sIHN0cmljdFBhcnNp
bmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmljdFBhcnNpbmc7IH0KIApAQCAtOTEsNyArOTEsNiBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCB0YWdNYXRjaGVzKGNvbnN0IEVsZW1lbnQqLCBj
b25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgc3RhdGljIGJvb2wgaXNDb21tb25Qc2V1ZG9DbGFz
c1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKik7Ci0gICAgYm9vbCBtYXRjaGVzRm9jdXNQc2V1
ZG9DbGFzcyhjb25zdCBFbGVtZW50KikgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wgZmFzdENoZWNr
UmlnaHRtb3N0QXR0cmlidXRlU2VsZWN0b3IoY29uc3QgRWxlbWVudCosIGNvbnN0IENTU1NlbGVj
dG9yKik7CiAgICAgc3RhdGljIGJvb2wgY2hlY2tFeGFjdEF0dHJpYnV0ZShjb25zdCBFbGVtZW50
KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgc2VsZWN0b3JBdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9t
aWNTdHJpbmdJbXBsKiB2YWx1ZSk7CiAKQEAgLTEwMCwxMCArOTksNiBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgYm9vbCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKERvY3VtZW50KiwgY29u
c3QgQ1NTU2VsZWN0b3IqKSBjb25zdDsKLSAgICBzdGF0aWMgYm9vbCBpc0ZyYW1lRm9jdXNlZChj
b25zdCBFbGVtZW50Kik7Ci0KLSAgICBib29sIGZhc3RDaGVja1JpZ2h0bW9zdFNlbGVjdG9yKGNv
bnN0IENTU1NlbGVjdG9yKiwgY29uc3QgRWxlbWVudCosIFZpc2l0ZWRNYXRjaFR5cGUpIGNvbnN0
OwotICAgIGJvb2wgY29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvck1hdGNoZXMoY29uc3QgRWxlbWVu
dCosIGNvbnN0IENTU1NlbGVjdG9yKiwgVmlzaXRlZE1hdGNoVHlwZSkgY29uc3Q7CiAKICAgICBi
b29sIG1fc3RyaWN0UGFyc2luZzsKICAgICBib29sIG1fZG9jdW1lbnRJc0hUTUw7CkBAIC0xMjEs
NyArMTE2LDEyIEBAIGlubGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9D
bGFzc1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlCiAgICAgICAgIHx8IHBzZXVkb1R5
cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0ZvY3VzOwogfQogCi1pbmxpbmUgYm9vbCBTZWxlY3Rv
ckNoZWNrZXI6Om1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQp
IGNvbnN0CitpbmxpbmUgYm9vbCBpc0ZyYW1lRm9jdXNlZChjb25zdCBFbGVtZW50KiBlbGVtZW50
KQoreworICAgIHJldHVybiBlbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpICYmIGVsZW1lbnQt
PmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5pc0ZvY3VzZWRBbmRBY3RpdmUoKTsK
K30KKworaW5saW5lIGJvb2wgbWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MoY29uc3QgRWxlbWVudCog
ZWxlbWVudCkKIHsKICAgICBpZiAoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVk
b1N0YXRlKGNvbnN0X2Nhc3Q8RWxlbWVudCo+KGVsZW1lbnQpLCBDU1NTZWxlY3Rvcjo6UHNldWRv
Rm9jdXMpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5j
cHAKaW5kZXggNmQ3OGM2ODQ0NDJjYzdlMjRlYmY5YTYyODY3YmQ4ODk5ZmU3OThlNi4uYzMzNjVl
YTgwZWE5YmRhN2ZkZTQxODQxOTc5NDZlZjljY2IzMDUyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
QnVpbGRlci5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eUV4cGFuZGlu
ZyB7CiBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJRCBpZD4KLSAgICBzdGF0
aWMgaW5saW5lIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBh
cHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0
YXRlJiBzdGF0ZSkKICAgICB7CiAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUludmFsaWQp
CiAgICAgICAgICAgICByZXR1cm47CkBAIC02OSwyMCArNjksMjAgQEAgcHVibGljOgogICAgICAg
ICBjb25zdCBTdHlsZUJ1aWxkZXImIHRhYmxlID0gU3R5bGVCdWlsZGVyOjpzaGFyZWRTdHlsZUJ1
aWxkZXIoKTsKICAgICAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0gdGFibGUu
cHJvcGVydHlIYW5kbGVyKGlkKTsKICAgICAgICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgaGFuZGxlci5hcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29s
dmVyKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwg
c3RhdGUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBz
dGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIGFwcGx5SW5oZXJpdFZhbHVl
PG9uZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5oZXJpdFZh
bHVlPHR3bz4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5oZXJp
dFZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgYXBwbHlJ
bmhlcml0VmFsdWU8Zm91cj4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFw
cGx5SW5oZXJpdFZhbHVlPGZpdmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAg
ICBhcHBseUluaGVyaXRWYWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgYXBw
bHlJbmhlcml0VmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5o
ZXJpdFZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5oZXJp
dFZhbHVlPGZvdXI+KHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgYXBwbHlJbmhlcml0VmFs
dWU8Zml2ZT4ocHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDxDU1NQ
cm9wZXJ0eUlEIGlkPgotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisg
ICAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKICAgICAgICAgaWYgKGlk
ID09IENTU1Byb3BlcnR5SW52YWxpZCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTkwLDIwICs5
MCwyMCBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFN0eWxlQnVpbGRlciYgdGFibGUgPSBTdHls
ZUJ1aWxkZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpOwogICAgICAgICBjb25zdCBQcm9wZXJ0eUhh
bmRsZXImIGhhbmRsZXIgPSB0YWJsZS5wcm9wZXJ0eUhhbmRsZXIoaWQpOwogICAgICAgICBpZiAo
aGFuZGxlci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5pdGlhbFZhbHVl
KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICAgICAgaGFuZGxlci5hcHBseUlu
aXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAg
ICAgICAgYXBwbHlJbml0aWFsVmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsK
LSAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVy
KTsKLSAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8dGhyZWU+KHByb3BlcnR5SUQsIHN0eWxlUmVz
b2x2ZXIpOwotICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTxmb3VyPihwcm9wZXJ0eUlELCBzdHls
ZVJlc29sdmVyKTsKLSAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwg
c3R5bGVSZXNvbHZlcik7CisgICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPG9uZT4ocHJvcGVydHlJ
RCwgc3RhdGUpOworICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTx0d28+KHByb3BlcnR5SUQsIHN0
YXRlKTsKKyAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8dGhyZWU+KHByb3BlcnR5SUQsIHN0YXRl
KTsKKyAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8Zm91cj4ocHJvcGVydHlJRCwgc3RhdGUpOwor
ICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAg
fQogCiAgICAgdGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQ+Ci0gICAgc3RhdGljIGlubGluZSB2
b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIGlubGluZSB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3Rh
dGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0
eUludmFsaWQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTEsMTkgKzExMSwxOSBAQCBwdWJs
aWM6CiAgICAgICAgIGNvbnN0IFN0eWxlQnVpbGRlciYgdGFibGUgPSBTdHlsZUJ1aWxkZXI6OnNo
YXJlZFN0eWxlQnVpbGRlcigpOwogICAgICAgICBjb25zdCBQcm9wZXJ0eUhhbmRsZXImIGhhbmRs
ZXIgPSB0YWJsZS5wcm9wZXJ0eUhhbmRsZXIoaWQpOwogICAgICAgICBpZiAoaGFuZGxlci5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3R5bGVS
ZXNvbHZlciwgdmFsdWUpOworICAgICAgICAgICAgaGFuZGxlci5hcHBseVZhbHVlKHByb3BlcnR5
SUQsIHN0YXRlLCB2YWx1ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgewogICAgICAgICBpZiAoIWV4cGFuZFZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIGFwcGx5VmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7
Ci0gICAgICAgIGFwcGx5VmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1
ZSk7Ci0gICAgICAgIGFwcGx5VmFsdWU8dGhyZWU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIs
IHZhbHVlKTsKLSAgICAgICAgYXBwbHlWYWx1ZTxmb3VyPihwcm9wZXJ0eUlELCBzdHlsZVJlc29s
dmVyLCB2YWx1ZSk7Ci0gICAgICAgIGFwcGx5VmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwgc3R5bGVS
ZXNvbHZlciwgdmFsdWUpOworICAgICAgICBhcHBseVZhbHVlPG9uZT4ocHJvcGVydHlJRCwgc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgYXBwbHlWYWx1ZTx0d28+KHByb3BlcnR5SUQsIHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIGFwcGx5VmFsdWU8dGhyZWU+KHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIGFwcGx5VmFsdWU8Zm91cj4ocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgYXBwbHlWYWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOwogICAg
IH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQ
cm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZh
cHBseVZhbHVlKTsgfQogfTsKQEAgLTEzNCw5ICsxMzQsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBTZXR0ZXJUeXBlIHZhbHVlKSB7IChz
dHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KICAgICBzdGF0aWMgR2V0dGVyVHlwZSB2
YWx1ZShSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+KmdldHRlckZ1bmN0aW9u
KSgpOyB9CiAgICAgc3RhdGljIEluaXRpYWxUeXBlIGluaXRpYWwoKSB7IHJldHVybiAoKmluaXRp
YWxGdW5jdGlvbikoKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIHsgc2V0VmFsdWUoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgdmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOyB9
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlcikgeyBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBpbml0aWFsKCkpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiwgQ1NTVmFsdWUqKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpIHsgc2V0
VmFsdWUoc3RhdGUuc3R5bGUoKSwgdmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSkpOyB9CisgICAg
c3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
U3RhdGUmIHN0YXRlKSB7IHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIGluaXRpYWwoKSk7IH0KKyAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRl
JiwgQ1NTVmFsdWUqKSB7IH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRs
ZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJ
bml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQogfTsKIApAQCAtMTQ0LDEwICsxNDQsMTAgQEAg
dGVtcGxhdGUgPHR5cGVuYW1lIEdldHRlclR5cGUsIEdldHRlclR5cGUgKFJlbmRlclN0eWxlOjoq
Z2V0dGVyRnVuY3Rpb24pKCkgY29uc3QKIGNsYXNzIEFwcGx5UHJvcGVydHlEZWZhdWx0IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIFNldHRl
clR5cGUgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgewogICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAg
IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksICpzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHZhbHVlKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCAq
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkpOwogICAgIH0KICAgICBzdGF0
aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTE2MCwxNiArMTYw
LDE2IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBOdW1iZXJUeXBlLCBOdW1iZXJUeXBlIChSZW5kZXJT
dHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0CiBjbGFzcyBBcHBseVByb3BlcnR5TnVtYmVy
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUs
IE51bWJlclR5cGUgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZh
bHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBpZE1hcHNUb01pbnVzT25lKQotICAgICAg
ICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgLTEpOworICAgICAgICAgICAg
c2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgLTEpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
ZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWU8
TnVtYmVyVHlwZT4oQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgICAg
IHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZTxOdW1iZXJU
eXBlPihDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogICAgIH0KICAgICBzdGF0aWMg
UHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTE4MSw3ICsxODEsNyBA
QCBwdWJsaWM6CiB0ZW1wbGF0ZSA8U3R5bGVJbWFnZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVu
Y3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFBhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4pLCBTdHlsZUltYWdlKiAoKmluaXRpYWxGdW5jdGlvbikoKSwgQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eT4KIGNsYXNzIEFwcGx5UHJvcGVydHlTdHlsZUltYWdlIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKHByb3Bl
cnR5LCB2YWx1ZSkpOyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3RhdGUuc3R5
bGUoKS0+KnNldHRlckZ1bmN0aW9uKShTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKHN0YXRlLCBw
cm9wZXJ0eSwgdmFsdWUpKTsgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFu
ZGxlcigpCiAgICAgewogICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJv
cGVydHlEZWZhdWx0QmFzZTxTdHlsZUltYWdlKiwgZ2V0dGVyRnVuY3Rpb24sIFBhc3NSZWZQdHI8
U3R5bGVJbWFnZT4sIHNldHRlckZ1bmN0aW9uLCBTdHlsZUltYWdlKiwgaW5pdGlhbEZ1bmN0aW9u
Pjo6Y3JlYXRlSGFuZGxlcigpOwpAQCAtMTk4LDI4ICsxOTgsMjggQEAgcHVibGljOgogICAgIHN0
YXRpYyBib29sIGhhc0F1dG8oUmVuZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiAoc3R5bGUtPipo
YXNBdXRvRnVuY3Rpb24pKCk7IH0KICAgICBzdGF0aWMgdm9pZCBzZXRBdXRvKFJlbmRlclN0eWxl
KiBzdHlsZSkgeyAoc3R5bGUtPipzZXRBdXRvRnVuY3Rpb24pKCk7IH0KIAotICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgaWYgKGhhc0F1dG8o
c3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpCi0gICAgICAgICAgICBzZXRBdXRvKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCkpOworICAgICAgICBpZiAoaGFzQXV0byhzdGF0ZS5wYXJlbnRTdHls
ZSgpKSkKKyAgICAgICAgICAgIHNldEF1dG8oc3RhdGUuc3R5bGUoKSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHZhbHVlKHN0eWxl
UmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0
eWxlKCksIHZhbHVlKHN0YXRlLnBhcmVudFN0eWxlKCkpKTsKICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKSB7IHNldEF1dG8oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSk7IH0KKyAgICBzdGF0
aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0
ZSYgc3RhdGUpIHsgc2V0QXV0byhzdGF0ZS5zdHlsZSgpKTsgfQogCi0gICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IGF1dG9JZGVudGl0eSkKLSAgICAgICAgICAgIHNldEF1dG8oc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSk7CisgICAgICAgICAgICBzZXRBdXRvKHN0YXRlLnN0eWxlKCkpOwog
ICAgICAgICBlbHNlIGlmICh2YWx1ZVR5cGUgPT0gTnVtYmVyKQotICAgICAgICAgICAgc2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAg
IHNldFZhbHVlKHN0YXRlLnN0eWxlKCksICpwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIGVsc2Ug
aWYgKHZhbHVlVHlwZSA9PSBDb21wdXRlTGVuZ3RoKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4oc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKTsKKyAgICAgICAgICAgIHNl
dFZhbHVlKHN0YXRlLnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0
YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZm
ZWN0aXZlWm9vbSgpKSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVh
dGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwg
JmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KQEAgLTIyNywyNyArMjI3LDI3IEBA
IHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUNsaXAgewogcHJpdmF0ZToKLSAgICBzdGF0
aWMgTGVuZ3RoIGNvbnZlcnRUb0xlbmd0aChTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBD
U1NQcmltaXRpdmVWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9MZW5n
dGgoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUpCiAg
ICAgewotICAgICAgICByZXR1cm4gdmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJD
b252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBGcmFjdGlvbkNvbnZlcnNpb24gfCBBdXRv
Q29udmVyc2lvbj4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVs
ZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwor
ICAgICAgICByZXR1cm4gdmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJz
aW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBGcmFjdGlvbkNvbnZlcnNpb24gfCBBdXRvQ29udmVy
c2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHls
ZSgpLT5lZmZlY3RpdmVab29tKCkpOwogICAgIH0KIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBh
cHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAg
ICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHls
ZSgpOworICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHls
ZSgpOwogICAgICAgICBpZiAoIXBhcmVudFN0eWxlLT5oYXNDbGlwKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gYXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENsaXAocGFyZW50U3R5bGUtPmNsaXBUb3Ao
KSwgcGFyZW50U3R5bGUtPmNsaXBSaWdodCgpLCBwYXJlbnRTdHlsZS0+Y2xpcEJvdHRvbSgpLCBw
YXJlbnRTdHlsZS0+Y2xpcExlZnQoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldEhhc0NsaXAodHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gYXBwbHlJbml0aWFsVmFsdWUo
cHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDbGlwKHBhcmVu
dFN0eWxlLT5jbGlwVG9wKCksIHBhcmVudFN0eWxlLT5jbGlwUmlnaHQoKSwgcGFyZW50U3R5bGUt
PmNsaXBCb3R0b20oKSwgcGFyZW50U3R5bGUtPmNsaXBMZWZ0KCkpOworICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRIYXNDbGlwKHRydWUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIp
CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSk7Ci0gICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0NsaXAoZmFsc2UpOworICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRDbGlwKExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0
aCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQ2xpcChmYWxzZSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTI1NSwxNSArMjU1LDE1IEBAIHB1YmxpYzoKICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWx1ZSk7CiAKICAgICAgICAgaWYgKFJlY3QqIHJlY3QgPSBwcmltaXRpdmVW
YWx1ZS0+Z2V0UmVjdFZhbHVlKCkpIHsKLSAgICAgICAgICAgIExlbmd0aCB0b3AgPSBjb252ZXJ0
VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+dG9wKCkpOwotICAgICAgICAgICAgTGVuZ3Ro
IHJpZ2h0ID0gY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3QtPnJpZ2h0KCkpOwot
ICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVy
LCByZWN0LT5ib3R0b20oKSk7Ci0gICAgICAgICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRUb0xl
bmd0aChzdHlsZVJlc29sdmVyLCByZWN0LT5sZWZ0KCkpOwotICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0Q2xpcCh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpOwotICAgICAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SGFzQ2xpcCh0cnVlKTsKKyAgICAgICAg
ICAgIExlbmd0aCB0b3AgPSBjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3QtPnRvcCgpKTsKKyAg
ICAgICAgICAgIExlbmd0aCByaWdodCA9IGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdC0+cmln
aHQoKSk7CisgICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29udmVydFRvTGVuZ3RoKHN0YXRl
LCByZWN0LT5ib3R0b20oKSk7CisgICAgICAgICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRUb0xl
bmd0aChzdGF0ZSwgcmVjdC0+bGVmdCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dENsaXAodG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldEhhc0NsaXAodHJ1ZSk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRDbGlwKExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgp
KTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0NsaXAoZmFsc2Up
OworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCks
IExlbmd0aCgpLCBMZW5ndGgoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXND
bGlwKGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjgxLDQwICsyODEsNDAgQEAgdGVt
cGxhdGUgPENvbG9ySW5oZXJpdCBpbmhlcml0Q29sb3JGcm9tUGFyZW50LAogICAgICAgICAgIENv
bG9yICgqaW5pdGlhbEZ1bmN0aW9uKSgpID0gJmRlZmF1bHRJbml0aWFsQ29sb3I+CiBjbGFzcyBB
cHBseVByb3BlcnR5Q29sb3IgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJp
dFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
U3RhdGUmIHN0YXRlKQogICAgIHsKICAgICAgICAgLy8gVmlzaXRlZCBsaW5rIHN0eWxlIGNhbiBu
ZXZlciBleHBsaWNpdGx5IGluaGVyaXQgZnJvbSBwYXJlbnQgdmlzaXRlZCBsaW5rIHN0eWxlIHNv
IG5vIHNlcGFyYXRlIGdldHRlcnMgYXJlIG5lZWRlZC4KLSAgICAgICAgQ29sb3IgY29sb3IgPSAo
c3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+KmdldHRlckZ1bmN0aW9uKSgpOwotICAgICAg
ICBhcHBseUNvbG9yVmFsdWUoc3R5bGVSZXNvbHZlciwgY29sb3IuaXNWYWxpZCgpID8gY29sb3Ig
OiAoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+KmRlZmF1bHRGdW5jdGlvbikoKSk7Cisg
ICAgICAgIENvbG9yIGNvbG9yID0gKHN0YXRlLnBhcmVudFN0eWxlKCktPipnZXR0ZXJGdW5jdGlv
bikoKTsKKyAgICAgICAgYXBwbHlDb2xvclZhbHVlKHN0YXRlLCBjb2xvci5pc1ZhbGlkKCkgPyBj
b2xvciA6IChzdGF0ZS5wYXJlbnRTdHlsZSgpLT4qZGVmYXVsdEZ1bmN0aW9uKSgpKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAg
ICAgIGFwcGx5Q29sb3JWYWx1ZShzdHlsZVJlc29sdmVyLCBpbml0aWFsRnVuY3Rpb24oKSk7Cisg
ICAgICAgIGFwcGx5Q29sb3JWYWx1ZShzdGF0ZSwgaW5pdGlhbEZ1bmN0aW9uKCkpOwogICAgIH0K
IAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0
YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsdWUpOwogICAgICAgICBpZiAoaW5oZXJpdENvbG9yRnJvbVBhcmVudCAmJiBwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvcikKLSAgICAgICAg
ICAgIGFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAg
ICAgICAgYXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOwogICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9SZWd1bGFy
U3R5bGUoKSkKLSAgICAgICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRl
ckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRp
dmVWYWx1ZSkpOwotICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlU
b1Zpc2l0ZWRMaW5rU3R5bGUoKSkKLSAgICAgICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+KnZpc2l0ZWRMaW5rU2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPmNvbG9yRnJv
bVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlLCAvKiBmb3JWaXNpdGVkTGluayAqLyB0cnVl
KSk7CisgICAgICAgICAgICBpZiAoc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkp
CisgICAgICAgICAgICAgICAgKHN0YXRlLnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoU3R5bGVS
ZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoc3RhdGUsIHByaW1pdGl2ZVZhbHVlKSk7
CisgICAgICAgICAgICBpZiAoc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgp
KQorICAgICAgICAgICAgICAgIChzdGF0ZS5zdHlsZSgpLT4qdmlzaXRlZExpbmtTZXR0ZXJGdW5j
dGlvbikoU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoc3RhdGUsIHByaW1p
dGl2ZVZhbHVlLCAvKiBmb3JWaXNpdGVkTGluayAqLyB0cnVlKSk7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUNvbG9yVmFsdWUoU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5Q29sb3JW
YWx1ZShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICB7
Ci0gICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUo
KSkKLSAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24p
KGNvbG9yKTsKLSAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUoKSkKLSAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qdmlz
aXRlZExpbmtTZXR0ZXJGdW5jdGlvbikoY29sb3IpOworICAgICAgICBpZiAoc3RhdGUuYXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpCisgICAgICAgICAgICAoc3RhdGUuc3R5bGUoKS0+KnNl
dHRlckZ1bmN0aW9uKShjb2xvcik7CisgICAgICAgIGlmIChzdGF0ZS5hcHBseVByb3BlcnR5VG9W
aXNpdGVkTGlua1N0eWxlKCkpCisgICAgICAgICAgICAoc3RhdGUuc3R5bGUoKS0+KnZpc2l0ZWRM
aW5rU2V0dGVyRnVuY3Rpb24pKGNvbG9yKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlI
YW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5o
ZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQpAQCAtMzIzLDEx
ICszMjMsMTEgQEAgcHVibGljOgogdGVtcGxhdGUgPFRleHREaXJlY3Rpb24gKFJlbmRlclN0eWxl
OjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVu
Y3Rpb24pKFRleHREaXJlY3Rpb24pLCBUZXh0RGlyZWN0aW9uICgqaW5pdGlhbEZ1bmN0aW9uKSgp
PgogY2xhc3MgQXBwbHlQcm9wZXJ0eURpcmVjdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxUZXh0RGly
ZWN0aW9uLCBnZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlvbiwgc2V0dGVyRnVuY3Rpb24sIFRl
eHREaXJlY3Rpb24sIGluaXRpYWxGdW5jdGlvbj46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3R5
bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3R5bGVSZXNv
bHZlci0+ZWxlbWVudCgpOwotICAgICAgICBpZiAoZWxlbWVudCAmJiBzdHlsZVJlc29sdmVyLT5l
bGVtZW50KCkgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCisgICAg
ICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0PFRleHREaXJlY3Rpb24sIGdldHRlckZ1bmN0aW9uLCBU
ZXh0RGlyZWN0aW9uLCBzZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlvbiwgaW5pdGlhbEZ1bmN0
aW9uPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBFbGVt
ZW50KiBlbGVtZW50ID0gc3RhdGUuZWxlbWVudCgpOworICAgICAgICBpZiAoZWxlbWVudCAmJiBl
bGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQogICAgICAg
ICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0RGlyZWN0aW9uU2V0T25Eb2N1bWVudEVsZW1l
bnQodHJ1ZSk7CiAgICAgfQogCkBAIC0zNTQsNyArMzU0LDcgQEAgdGVtcGxhdGUgPExlbmd0aCAo
UmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwKIGNsYXNzIEFwcGx5UHJvcGVy
dHlMZW5ndGggewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxl
KiBzdHlsZSwgTGVuZ3RoIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7
IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzYyLDM5ICszNjIsMzkgQEAgcHVibGljOgogICAgICAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgaWYgKG5vbmVFbmFibGVkICYmIHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewogICAgICAgICAgICAgaWYgKG5v
bmVVbmRlZmluZWQpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgTGVuZ3RoKFVuZGVmaW5lZCkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRl
LnN0eWxlKCksIExlbmd0aChVbmRlZmluZWQpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoKSk7CisgICAg
ICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKCkpOwogICAgICAgICB9
CiAgICAgICAgIGlmIChsZWdhY3lJbnRyaW5zaWNFbmFibGVkKSB7CiAgICAgICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnRyaW5zaWMpCi0gICAgICAg
ICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKEludHJpbnNp
YykpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aChJbnRy
aW5zaWMpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlTWluSW50cmluc2ljKQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChNaW5JbnRyaW5zaWMpKTsKKyAgICAgICAgICAgICAg
ICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoTWluSW50cmluc2ljKSk7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGludHJpbnNpY0VuYWJsZWQpIHsKICAgICAgICAgICAgIGlmIChwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdE1pbkNvbnRlbnQpCi0gICAg
ICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKE1pbkNv
bnRlbnQpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgo
TWluQ29udGVudCkpOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVXZWJraXRNYXhDb250ZW50KQotICAgICAgICAgICAgICAgIHNldFZh
bHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChNYXhDb250ZW50KSk7CisgICAgICAg
ICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKE1heENvbnRlbnQpKTsKICAg
ICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
V2Via2l0RmlsbEF2YWlsYWJsZSkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLCBMZW5ndGgoRmlsbEF2YWlsYWJsZSkpOworICAgICAgICAgICAgICAgIHNl
dFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aChGaWxsQXZhaWxhYmxlKSk7CiAgICAgICAgICAg
ICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdEZp
dENvbnRlbnQpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgTGVuZ3RoKEZpdENvbnRlbnQpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5z
dHlsZSgpLCBMZW5ndGgoRml0Q29udGVudCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGF1
dG9FbmFibGVkICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykK
LSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aCgpKTsK
KyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aCgpKTsKICAgICAgICAg
ZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIExlbmd0
aCBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgICAgIExlbmd0aCBs
ZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxl
KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpKTsKICAgICAgICAgICAgIGxlbmd0aC5zZXRRdWlyayhwcmltaXRpdmVWYWx1ZS0+aXNRdWly
a1ZhbHVlKCkpOwotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
bGVuZ3RoKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIGxlbmd0aCk7CiAg
ICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKQotICAgICAg
ICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKHByaW1pdGl2ZVZh
bHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KSk7CisgICAgICAgICAgICBzZXRWYWx1ZShz
dGF0ZS5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBl
cmNlbnQpKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRlZFBl
cmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0
eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpKTsKKyAgICAg
ICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y3Nz
Q2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50
U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkpOwogICAgICAgICBlbHNl
IGlmIChwcmltaXRpdmVWYWx1ZS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKLSAgICAg
ICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT52
aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5z
dHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpOwogICAg
IH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC00MDks
MTYgKzQwOSwxNiBAQCB0ZW1wbGF0ZSA8U3RyaW5nSWRlbnRCZWhhdmlvciBpZGVudEJlaGF2aW9y
LCBjb25zdCBBdG9taWNTdHJpbmcmIChSZW5kZXJTdHlsZTo6KgogY2xhc3MgQXBwbHlQcm9wZXJ0
eVN0cmluZyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUq
IHN0eWxlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0
aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0
ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVl
KTsKICAgICAgICAgaWYgKChpZGVudEJlaGF2aW9yID09IE1hcE5vbmVUb051bGwgJiYgcHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgfHwgKGlk
ZW50QmVoYXZpb3IgPT0gTWFwQXV0b1RvTnVsbCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZUF1dG8pKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgbnVsbEF0b20pOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwg
bnVsbEF0b20pOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CisgICAgICAg
ICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFs
dWUoKSk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigp
CiAgICAgewpAQCAtNDMxLDcgKzQzMSw3IEBAIHRlbXBsYXRlIDxMZW5ndGhTaXplIChSZW5kZXJT
dHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6CiBjbGFz
cyBBcHBseVByb3BlcnR5Qm9yZGVyUmFkaXVzIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBz
ZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIExlbmd0aFNpemUgdmFsdWUpIHsgKHN0eWxlLT4q
c2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVl
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC00NDgsMTcgKzQ0
OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIGVsc2UgaWYgKHBhaXItPmZpcnN0KCktPmlzVmlld3Bv
cnRQZXJjZW50YWdlTGVuZ3RoKCkpCiAgICAgICAgICAgICByYWRpdXNXaWR0aCA9IHBhaXItPmZp
cnN0KCktPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpOwogICAgICAgICBlbHNlIGlmIChwYWly
LT5maXJzdCgpLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKQotICAgICAgICAg
ICAgcmFkaXVzV2lkdGggPSBMZW5ndGgoKHBhaXItPmZpcnN0KCktPmNzc0NhbGNWYWx1ZSgpLT50
b0NhbGNWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxl
bWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpKTsK
KyAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gTGVuZ3RoKChwYWlyLT5maXJzdCgpLT5jc3NDYWxj
VmFsdWUoKS0+dG9DYWxjVmFsdWUoc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHls
ZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHJhZGl1c1dpZHRoID0gcGFpci0+Zmlyc3QoKS0+Y29tcHV0ZUxlbmd0aDxMZW5n
dGg+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5
bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAg
ICAgIHJhZGl1c1dpZHRoID0gcGFpci0+Zmlyc3QoKS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0
YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZm
ZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaWYgKHBhaXItPnNlY29uZCgpLT5pc1BlcmNlbnRhZ2Uo
KSkKICAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IExlbmd0aChwYWlyLT5zZWNvbmQoKS0+Z2V0
RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CiAgICAgICAgIGVsc2UgaWYgKHBhaXItPnNlY29uZCgp
LT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKQogICAgICAgICAgICAgcmFkaXVzSGVpZ2h0
ID0gcGFpci0+c2Vjb25kKCktPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpOwogICAgICAgICBl
bHNlIGlmIChwYWlyLT5zZWNvbmQoKS0+aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgo
KSkKLSAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IExlbmd0aCgocGFpci0+c2Vjb25kKCktPmNz
c0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJl
c29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVj
dGl2ZVpvb20oKSkpKTsKKyAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IExlbmd0aCgocGFpci0+
c2Vjb25kKCktPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdGF0ZS5zdHlsZSgpLCBzdGF0
ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmFkaXVzSGVpZ2h0ID0gcGFpci0+c2Vjb25kKCkt
PmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29s
dmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKSk7CisgICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBwYWlyLT5zZWNvbmQoKS0+Y29t
cHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUo
KSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaW50IHdpZHRoID0g
cmFkaXVzV2lkdGgudmFsdWUoKTsKICAgICAgICAgaW50IGhlaWdodCA9IHJhZGl1c0hlaWdodC52
YWx1ZSgpOwogICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCkBAIC00NjksNyAr
NDY5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmFkaXVzV2lkdGggPSByYWRpdXNIZWlnaHQ7
IC8vIE51bGwgb3V0IHRoZSBvdGhlciB2YWx1ZS4KIAogICAgICAgICBMZW5ndGhTaXplIHNpemUo
cmFkaXVzV2lkdGgsIHJhZGl1c0hlaWdodCk7Ci0gICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCksIHNpemUpOworICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBzaXpl
KTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAg
ICB7CkBAIC00OTEsMjMgKzQ5MSwyMyBAQCBzdHJ1Y3QgRmlsbExheWVyQWNjZXNzb3JUeXBlczxT
dHlsZUltYWdlKj4gewogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQsCi0gICAgICAgICAgQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlkLAotICAgICAgICAgIEVGaWxsTGF5ZXJUeXBlIGZpbGxMYXll
clR5cGUsCi0gICAgICAgICAgRmlsbExheWVyKiAoUmVuZGVyU3R5bGU6OiphY2Nlc3NMYXllcnNG
dW5jdGlvbikoKSwKLSAgICAgICAgICBjb25zdCBGaWxsTGF5ZXIqIChSZW5kZXJTdHlsZTo6Kmxh
eWVyc0Z1bmN0aW9uKSgpIGNvbnN0LAotICAgICAgICAgIGJvb2wgKEZpbGxMYXllcjo6KnRlc3RG
dW5jdGlvbikoKSBjb25zdCwKLSAgICAgICAgICB0eXBlbmFtZSBGaWxsTGF5ZXJBY2Nlc3NvclR5
cGVzPFQ+OjpHZXR0ZXIgKEZpbGxMYXllcjo6KmdldEZ1bmN0aW9uKSgpIGNvbnN0LAotICAgICAg
ICAgIHZvaWQgKEZpbGxMYXllcjo6KnNldEZ1bmN0aW9uKSh0eXBlbmFtZSBGaWxsTGF5ZXJBY2Nl
c3NvclR5cGVzPFQ+OjpTZXR0ZXIpLAotICAgICAgICAgIHZvaWQgKEZpbGxMYXllcjo6KmNsZWFy
RnVuY3Rpb24pKCksCi0gICAgICAgICAgdHlwZW5hbWUgRmlsbExheWVyQWNjZXNzb3JUeXBlczxU
Pjo6R2V0dGVyICgqaW5pdGlhbEZ1bmN0aW9uKShFRmlsbExheWVyVHlwZSksCi0gICAgICAgICAg
dm9pZCAoQ1NTVG9TdHlsZU1hcDo6Km1hcEZpbGxGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwgRmls
bExheWVyKiwgQ1NTVmFsdWUqKT4KKyAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQsCisgICAg
RUZpbGxMYXllclR5cGUgZmlsbExheWVyVHlwZSwKKyAgICBGaWxsTGF5ZXIqIChSZW5kZXJTdHls
ZTo6KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpLAorICAgIGNvbnN0IEZpbGxMYXllciogKFJlbmRl
clN0eWxlOjoqbGF5ZXJzRnVuY3Rpb24pKCkgY29uc3QsCisgICAgYm9vbCAoRmlsbExheWVyOjoq
dGVzdEZ1bmN0aW9uKSgpIGNvbnN0LAorICAgIHR5cGVuYW1lIEZpbGxMYXllckFjY2Vzc29yVHlw
ZXM8VD46OkdldHRlciAoRmlsbExheWVyOjoqZ2V0RnVuY3Rpb24pKCkgY29uc3QsCisgICAgdm9p
ZCAoRmlsbExheWVyOjoqc2V0RnVuY3Rpb24pKHR5cGVuYW1lIEZpbGxMYXllckFjY2Vzc29yVHlw
ZXM8VD46OlNldHRlciksCisgICAgdm9pZCAoRmlsbExheWVyOjoqY2xlYXJGdW5jdGlvbikoKSwK
KyAgICB0eXBlbmFtZSBGaWxsTGF5ZXJBY2Nlc3NvclR5cGVzPFQ+OjpHZXR0ZXIgKCppbml0aWFs
RnVuY3Rpb24pKEVGaWxsTGF5ZXJUeXBlKSwKKyAgICB2b2lkICgqbWFwRmlsbEZ1bmN0aW9uKShT
dHlsZVJlc29sdmVTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik+
CiBjbGFzcyBBcHBseVByb3BlcnR5RmlsbExheWVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEZpbGxMYXllciogY3Vy
ckNoaWxkID0gKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5jdGlvbiko
KTsKKyAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3RhdGUuc3R5bGUoKS0+KmFjY2Vz
c0xheWVyc0Z1bmN0aW9uKSgpOwogICAgICAgICBGaWxsTGF5ZXIqIHByZXZDaGlsZCA9IDA7Ci0g
ICAgICAgIGNvbnN0IEZpbGxMYXllciogY3VyclBhcmVudCA9IChzdHlsZVJlc29sdmVyLT5wYXJl
bnRTdHlsZSgpLT4qbGF5ZXJzRnVuY3Rpb24pKCk7CisgICAgICAgIGNvbnN0IEZpbGxMYXllciog
Y3VyclBhcmVudCA9IChzdGF0ZS5wYXJlbnRTdHlsZSgpLT4qbGF5ZXJzRnVuY3Rpb24pKCk7CiAg
ICAgICAgIHdoaWxlIChjdXJyUGFyZW50ICYmIChjdXJyUGFyZW50LT4qdGVzdEZ1bmN0aW9uKSgp
KSB7CiAgICAgICAgICAgICBpZiAoIWN1cnJDaGlsZCkgewogICAgICAgICAgICAgICAgIC8qIE5l
ZWQgdG8gbWFrZSBhIG5ldyBsYXllci4qLwpAQCAtNTI3LDE3ICs1MjcsMTcgQEAgcHVibGljOgog
ICAgICAgICB9CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3Rh
dGUpCiAgICAgewotICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7CisgICAgICAgIEZpbGxMYXllciog
Y3VyckNoaWxkID0gKHN0YXRlLnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5jdGlvbikoKTsKICAg
ICAgICAgKGN1cnJDaGlsZC0+KnNldEZ1bmN0aW9uKSgoKmluaXRpYWxGdW5jdGlvbikoZmlsbExh
eWVyVHlwZSkpOwogICAgICAgICBmb3IgKGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOyBj
dXJyQ2hpbGQ7IGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpKQogICAgICAgICAgICAgKGN1
cnJDaGlsZC0+KmNsZWFyRnVuY3Rpb24pKCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IEZpbGxMYXllciogY3VyckNoaWxkID0gKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPiphY2Nlc3NM
YXllcnNGdW5jdGlvbikoKTsKKyAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3RhdGUu
c3R5bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOwogICAgICAgICBGaWxsTGF5ZXIqIHBy
ZXZDaGlsZCA9IDA7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKQogI2lmIEVOQUJM
RShDU1NfSU1BR0VfU0VUKQpAQCAtNTUyLDEyICs1NTIsMTIgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICBjdXJyQ2hpbGQgPSBuZXcgRmlsbExheWVyKGZpbGxMYXllclR5cGUpOwogICAg
ICAgICAgICAgICAgICAgICBwcmV2Q2hpbGQtPnNldE5leHQoY3VyckNoaWxkKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPipt
YXBGaWxsRnVuY3Rpb24pKHByb3BlcnR5SWQsIGN1cnJDaGlsZCwgdmFsdWVMaXN0LT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKGkpKTsKKyAgICAgICAgICAgICAgICAoKm1hcEZpbGxGdW5jdGlvbiko
c3RhdGUsIHByb3BlcnR5SWQsIGN1cnJDaGlsZCwgdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKGkpKTsKICAgICAgICAgICAgICAgICBwcmV2Q2hpbGQgPSBjdXJyQ2hpbGQ7CiAgICAg
ICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAo
KS0+Km1hcEZpbGxGdW5jdGlvbikocHJvcGVydHlJZCwgY3VyckNoaWxkLCB2YWx1ZSk7CisgICAg
ICAgICAgICAoKm1hcEZpbGxGdW5jdGlvbikoc3RhdGUsIHByb3BlcnR5SWQsIGN1cnJDaGlsZCwg
dmFsdWUpOwogICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7CiAgICAg
ICAgIH0KICAgICAgICAgd2hpbGUgKGN1cnJDaGlsZCkgewpAQCAtNTgzLDcgKzU4Myw3IEBAIHRl
bXBsYXRlIDx0eXBlbmFtZSBULAogY2xhc3MgQXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGggewog
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgVCB2
YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIC8vIG5vdGU6IENTU1Byb3BlcnR5TGV0dGVyL1dvcmRTcGFjaW5nIHJpZ2h0IG5vdyBz
ZXRzIHRvIHplcm8gaWYgaXQncyBub3QgYSBwcmltaXRpdmUgdmFsdWUgZm9yIHNvbWUgcmVhc29u
Li4uCiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKQEAgLTYwMiwxMyAr
NjAyLDEzIEBAIHB1YmxpYzoKICAgICAgICAgfSBlbHNlIGlmICh0aGlja25lc3NFbmFibGVkICYm
IGlkZW50ID09IENTU1ZhbHVlVGhpY2spIHsKICAgICAgICAgICAgIGxlbmd0aCA9IDU7CiAgICAg
ICAgIH0gZWxzZSBpZiAoaWRlbnQgPT0gQ1NTVmFsdWVJbnZhbGlkKSB7Ci0gICAgICAgICAgICBm
bG9hdCB6b29tID0gKHN2Z1pvb21FbmFibGVkICYmIHN0eWxlUmVzb2x2ZXItPnVzZVNWR1pvb21S
dWxlcygpKSA/IDEuMGYgOiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7
CisgICAgICAgICAgICBmbG9hdCB6b29tID0gKHN2Z1pvb21FbmFibGVkICYmIHN0YXRlLnVzZVNW
R1pvb21SdWxlcygpKSA/IDEuMGYgOiBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CiAK
ICAgICAgICAgICAgIC8vIEFueSBvcmlnaW5hbCByZXN1bHQgdGhhdCB3YXMgPj0gMSBzaG91bGQg
bm90IGJlIGFsbG93ZWQgdG8gZmFsbCBiZWxvdyAxLgogICAgICAgICAgICAgLy8gVGhpcyBrZWVw
cyBib3JkZXIgbGluZXMgZnJvbSB2YW5pc2hpbmcuCi0gICAgICAgICAgICBsZW5ndGggPSBwcmlt
aXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHls
ZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHpvb20pOworICAgICAgICAgICAgbGVuZ3Ro
ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUu
cm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tKTsKICAgICAgICAgICAgIGlmICh6b29tIDwgMS4wZiAm
JiBsZW5ndGggPCAxLjApIHsKLSAgICAgICAgICAgICAgICBUIG9yaWdpbmFsTGVuZ3RoID0gcHJp
bWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5
bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCAxLjApOworICAgICAgICAgICAgICAgIFQg
b3JpZ2luYWxMZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdGF0ZS5z
dHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIDEuMCk7CiAgICAgICAgICAgICAgICAg
aWYgKG9yaWdpbmFsTGVuZ3RoID49IDEuMCkKICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0g
MS4wOwogICAgICAgICAgICAgfQpAQCAtNjE4LDcgKzYxOCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGxlbmd0aCA9IDA7CiAgICAgICAgIH0KIAotICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLCBsZW5ndGgpOworICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBs
ZW5ndGgpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIo
KQogICAgIHsKQEAgLTYzMCwyOCArNjMwLDI4IEBAIHB1YmxpYzoKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBULCBUIChGb250RGVzY3JpcHRpb246OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAo
Rm9udERlc2NyaXB0aW9uOjoqc2V0dGVyRnVuY3Rpb24pKFQpLCBUIGluaXRpYWxWYWx1ZT4KIGNs
YXNzIEFwcGx5UHJvcGVydHlGb250IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgKGZv
bnREZXNjcmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24pKChzdHlsZVJlc29sdmVyLT5wYXJlbnRGb250
RGVzY3JpcHRpb24oKS4qZ2V0dGVyRnVuY3Rpb24pKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVy
LT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgRm9udERlc2Ny
aXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOworICAgICAg
ICAoZm9udERlc2NyaXB0aW9uLipzZXR0ZXJGdW5jdGlvbikoKHN0YXRlLnBhcmVudEZvbnREZXNj
cmlwdGlvbigpLipnZXR0ZXJGdW5jdGlvbikoKSk7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIp
CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7
CiAgICAgICAgIChmb250RGVzY3JpcHRpb24uKnNldHRlckZ1bmN0aW9uKShpbml0aWFsVmFsdWUp
OwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFs
dWUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0g
ICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5m
b250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
biA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAoZm9udERlc2NyaXB0aW9uLipz
ZXR0ZXJGdW5jdGlvbikoKnByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+
c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIHN0YXRlLnNldEZv
bnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9w
ZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBw
bHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBAIC02
NzYsNTAgKzY3Niw1MCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc2l6ZSAvIDEuMmY7CiAg
ICAgfQogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBw
bHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQog
ICAgIHsKLSAgICAgICAgZmxvYXQgc2l6ZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkt
PmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKKyAgICAgICAgZmxvYXQgc2l6ZSA9
IHN0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKIAogICAgICAg
ICBpZiAoc2l6ZSA8IDApCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgRm9udERlc2Ny
aXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnREZXNj
cmlwdGlvbigpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoc3R5bGVS
ZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkua2V5d29yZFNpemUoKSk7
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgc2l6
ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUu
Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6
ZShzdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS5rZXl3b3JkU2l6ZSgpKTsKKyAgICAgICAg
U3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoc3RhdGUsIGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7
CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMg
dm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYg
c3RhdGUpCiAgICAgewotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0g
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGZsb2F0
IHNpemUgPSBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdvcmQoc3R5bGVSZXNvbHZlci0+
ZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1
bHRTaXplKCkpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3Rh
dGUuZm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGZsb2F0IHNpemUgPSBTdHlsZVJlc29sdmVy
Ojpmb250U2l6ZUZvcktleXdvcmQoc3RhdGUuZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZv
bnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpOwogCiAgICAgICAgIGlmIChzaXpl
IDwgMCkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKLSAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
CisgICAgICAgIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKHN0YXRlLCBmb250RGVzY3JpcHRp
b24sIHNpemUpOworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAg
ICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0
aW9uKCk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZSgwKTsKICAgICAg
ICAgZmxvYXQgcGFyZW50U2l6ZSA9IDA7CiAgICAgICAgIGJvb2wgcGFyZW50SXNBYnNvbHV0ZVNp
emUgPSBmYWxzZTsKICAgICAgICAgZmxvYXQgc2l6ZSA9IDA7CiAKLSAgICAgICAgaWYgKHN0eWxl
UmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpIHsKLSAgICAgICAgICAgIHBhcmVudFNpemUgPSBzdHls
ZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXpl
KCk7Ci0gICAgICAgICAgICBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9IHN0eWxlUmVzb2x2ZXItPnBh
cmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmlzQWJzb2x1dGVTaXplKCk7CisgICAgICAg
IGlmIChzdGF0ZS5wYXJlbnRTdHlsZSgpKSB7CisgICAgICAgICAgICBwYXJlbnRTaXplID0gc3Rh
dGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOworICAgICAgICAgICAg
cGFyZW50SXNBYnNvbHV0ZVNpemUgPSBzdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS5pc0Fi
c29sdXRlU2l6ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGludCBpZGVudCA9IHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CkBAIC03MzMsNyArNzMzLDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZVhMYXJnZToKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVY
eExhcmdlOgogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFh4eExhcmdlOgotICAgICAg
ICAgICAgICAgIHNpemUgPSBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdvcmQoc3R5bGVS
ZXNvbHZlci0+ZG9jdW1lbnQoKSwgaWRlbnQsIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1
bHRTaXplKCkpOworICAgICAgICAgICAgICAgIHNpemUgPSBTdHlsZVJlc29sdmVyOjpmb250U2l6
ZUZvcktleXdvcmQoc3RhdGUuZG9jdW1lbnQoKSwgaWRlbnQsIGZvbnREZXNjcmlwdGlvbi51c2VG
aXhlZERlZmF1bHRTaXplKCkpOwogICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRL
ZXl3b3JkU2l6ZShpZGVudCAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlcjoKQEAgLTc1MSwxMyArNzUx
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRl
U2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHx8ICEocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpIHx8IHBy
aW1pdGl2ZVZhbHVlLT5pc0ZvbnRSZWxhdGl2ZUxlbmd0aCgpKSk7CiAgICAgICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgc2l6ZSA9IHByaW1p
dGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHls
ZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIDEuMCwgdHJ1ZSk7CisgICAg
ICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0Pihz
dGF0ZS5wYXJlbnRTdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIDEuMCwgdHJ1ZSk7
CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCiAg
ICAgICAgICAgICAgICAgc2l6ZSA9IChwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpICog
cGFyZW50U2l6ZSkgLyAxMDAuMGY7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS0+aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBz
aXplID0gcHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdHlsZVJl
c29sdmVyLT5wYXJlbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkp
LT5ldmFsdWF0ZShwYXJlbnRTaXplKTsKKyAgICAgICAgICAgICAgICBzaXplID0gcHJpbWl0aXZl
VmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpLCBz
dGF0ZS5yb290RWxlbWVudFN0eWxlKCkpLT5ldmFsdWF0ZShwYXJlbnRTaXplKTsKICAgICAgICAg
ICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgp
KQotICAgICAgICAgICAgICAgIHNpemUgPSB2YWx1ZUZvckxlbmd0aChwcmltaXRpdmVWYWx1ZS0+
dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCksIDAsIHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCkt
PnJlbmRlclZpZXcoKSk7CisgICAgICAgICAgICAgICAgc2l6ZSA9IHZhbHVlRm9yTGVuZ3RoKHBy
aW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSwgMCwgc3RhdGUuZG9jdW1l
bnQoKS0+cmVuZGVyVmlldygpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KQEAgLTc2OSw4ICs3NjksOCBAQCBwdWJsaWM6CiAgICAgICAgIC8v
IENhcCBmb250IHNpemUgaGVyZSB0byBtYWtlIHN1cmUgdGhhdCBkb2Vzbid0IGhhcHBlbi4KICAg
ICAgICAgc2l6ZSA9IG1pbihtYXhpbXVtQWxsb3dlZEZvbnRTaXplLCBzaXplKTsKIAotICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOwotICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsK
KyAgICAgICAgU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoc3RhdGUsIGZvbnREZXNjcmlwdGlv
biwgc2l6ZSk7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC03NzksMTIgKzc3OSwxMiBAQCBwdWJs
aWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlGb250V2VpZ2h0IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
IHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOwor
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsK
ICAgICAgICAgY2FzZSBDU1NWYWx1ZUludmFsaWQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTc5OCw3ICs3OTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KCpwcmltaXRpdmVWYWx1ZSk7CiAg
ICAgICAgIH0KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnRE
ZXNjcmlwdGlvbik7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIo
KQogICAgIHsKQEAgLTgwOSwzMCArODA5LDMwIEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9w
ZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgcGFyZW50Rm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+cGFyZW50Rm9udERlc2Ny
aXB0aW9uKCk7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHls
ZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgY29uc3QgRm9udERlc2NyaXB0
aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBzdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24o
KTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnRE
ZXNjcmlwdGlvbigpOwogCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21tb25MaWdhdHVy
ZXNTdGF0ZShwYXJlbnRGb250RGVzY3JpcHRpb24uY29tbW9uTGlnYXR1cmVzU3RhdGUoKSk7CiAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUocGFy
ZW50Rm9udERlc2NyaXB0aW9uLmRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSgpKTsKICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZShwYXJlbnRGb250
RGVzY3JpcHRpb24uaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKCkpOwogCi0gICAgICAgIHN0eWxl
UmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBz
dGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEZvbnRE
ZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRp
b24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZv
bnREZXNjcmlwdGlvbigpOwogCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21tb25MaWdh
dHVyZXNTdGF0ZShGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKTsKICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldERpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZShGb250RGVz
Y3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldEhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZShGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0
dXJlc1N0YXRlKTsKIAotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnRE
ZXNjcmlwdGlvbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0
ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEZvbnREZXNjcmlwdGlv
bjo6TGlnYXR1cmVzU3RhdGUgY29tbW9uTGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246
Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOwogICAgICAgICBGb250RGVzY3JpcHRpb246OkxpZ2F0dXJl
c1N0YXRlIGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6Tm9y
bWFsTGlnYXR1cmVzU3RhdGU7CkBAIC04NzgsMTEgKzg3OCwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IH0KICNlbmRpZgogCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBz
dHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9u
IGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0Q29tbW9uTGlnYXR1cmVzU3RhdGUoY29tbW9uTGlnYXR1cmVzU3RhdGUp
OwogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRl
KGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRIaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUoaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKTsKLSAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAg
IH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC04OTgs
MTMgKzg5OCwxMyBAQCB0ZW1wbGF0ZSA8Qm9yZGVySW1hZ2VUeXBlIGJvcmRlckltYWdlVHlwZSwK
ICAgICAgICAgICB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShjb25zdCBOaW5l
UGllY2VJbWFnZSYpPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgIHsKICAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2U7CiAgICAgICAgIGlmIChi
b3JkZXJJbWFnZVR5cGUgPT0gQm9yZGVyTWFzaykKICAgICAgICAgICAgIGltYWdlLnNldE1hc2tE
ZWZhdWx0cygpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGll
Y2VJbWFnZShwcm9wZXJ0eSwgdmFsdWUsIGltYWdlKTsKLSAgICAgICAgKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoaW1hZ2UpOworICAgICAgICBDU1NUb1N0eWxlTWFw
OjptYXBOaW5lUGllY2VJbWFnZShzdGF0ZSwgcHJvcGVydHksIHZhbHVlLCBpbWFnZSk7CisgICAg
ICAgIChzdGF0ZS5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKGltYWdlKTsKICAgICB9CiAKICAg
ICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtOTIxLDI5ICs5MjEs
MjkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgaW5saW5lIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBn
ZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIHR5cGUgPT0gQm9yZGVySW1hZ2Ug
PyBzdHlsZS0+Ym9yZGVySW1hZ2UoKSA6IHN0eWxlLT5tYXNrQm94SW1hZ2UoKTsgfQogICAgIHN0
YXRpYyBpbmxpbmUgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IE5pbmVQ
aWVjZUltYWdlJiB2YWx1ZSkgeyByZXR1cm4gdHlwZSA9PSBCb3JkZXJJbWFnZSA/IHN0eWxlLT5z
ZXRCb3JkZXJJbWFnZSh2YWx1ZSkgOiBzdHlsZS0+c2V0TWFza0JveEltYWdlKHZhbHVlKTsgfQog
cHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhl
cml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsK
LSAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSkpOworICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdGF0ZS5zdHls
ZSgpKSk7CiAgICAgICAgIHN3aXRjaCAobW9kaWZpZXIpIHsKICAgICAgICAgY2FzZSBPdXRzZXQ6
Ci0gICAgICAgICAgICBpbWFnZS5jb3B5T3V0c2V0RnJvbShnZXRWYWx1ZShzdHlsZVJlc29sdmVy
LT5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbWFnZS5jb3B5T3V0c2V0RnJvbShnZXRW
YWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBSZXBlYXQ6Ci0gICAgICAgICAgICBpbWFnZS5jb3B5UmVwZWF0RnJvbShnZXRWYWx1ZShz
dHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbWFnZS5jb3B5UmVw
ZWF0RnJvbShnZXRWYWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBTbGljZToKLSAgICAgICAgICAgIGltYWdlLmNvcHlJbWFnZVNsaWNl
c0Zyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOworICAgICAgICAg
ICAgaW1hZ2UuY29weUltYWdlU2xpY2VzRnJvbShnZXRWYWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXaWR0aDoKLSAgICAgICAgICAg
IGltYWdlLmNvcHlCb3JkZXJTbGljZXNGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVu
dFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGltYWdlLmNvcHlCb3JkZXJTbGljZXNGcm9tKGdldFZh
bHVlKHN0YXRlLnBhcmVudFN0eWxlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGltYWdlKTsKKyAgICAg
ICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgaW1hZ2UpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgTmluZVBpZWNlSW1h
Z2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSkpOworICAgICAgICBOaW5l
UGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdGF0ZS5zdHlsZSgpKSk7CiAgICAgICAgIHN3aXRj
aCAobW9kaWZpZXIpIHsKICAgICAgICAgY2FzZSBPdXRzZXQ6CiAgICAgICAgICAgICBpbWFnZS5z
ZXRPdXRzZXQoTGVuZ3RoQm94KDApKTsKQEAgLTk2MiwyNyArOTYyLDI3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyh0eXBlID09IEJvcmRlckltYWdlID8gTGVu
Z3RoQm94KExlbmd0aCgxLCBSZWxhdGl2ZSksIExlbmd0aCgxLCBSZWxhdGl2ZSksIExlbmd0aCgx
LCBSZWxhdGl2ZSksIExlbmd0aCgxLCBSZWxhdGl2ZSkpIDogTGVuZ3RoQm94KCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgaW1hZ2UpOworICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBpbWFnZSk7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZh
bHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpKTsKKyAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1h
Z2UoZ2V0VmFsdWUoc3RhdGUuc3R5bGUoKSkpOwogICAgICAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7
CiAgICAgICAgIGNhc2UgT3V0c2V0OgotICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KHN0eWxl
UmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOworICAg
ICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdl
UXVhZChzdGF0ZSwgdmFsdWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJl
cGVhdDoKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVj
ZUltYWdlUmVwZWF0KHZhbHVlLCBpbWFnZSk7CisgICAgICAgICAgICBDU1NUb1N0eWxlTWFwOjpt
YXBOaW5lUGllY2VJbWFnZVJlcGVhdChzdGF0ZSwgdmFsdWUsIGltYWdlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIFNsaWNlOgotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VTbGljZSh2YWx1ZSwgaW1hZ2UpOworICAgICAg
ICAgICAgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VTbGljZShzdGF0ZSwgdmFsdWUs
IGltYWdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdpZHRoOgotICAgICAg
ICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1h
cE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOworICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVy
U2xpY2VzKENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlUXVhZChzdGF0ZSwgdmFsdWUp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNldFZhbHVlKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCksIGltYWdlKTsKKyAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUo
KSwgaW1hZ2UpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFu
ZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBs
eUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBAIC05OTEsNyArOTkxLDcgQEAgcHVibGlj
OgogdGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQsIFN0eWxlSW1hZ2UqIChSZW5kZXJTdHlsZTo6
KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0
aW9uKShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+KSwgU3R5bGVJbWFnZSogKCppbml0aWFsRnVuY3Rp
b24pKCk+CiBjbGFzcyBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2UgewogcHVibGljOgot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2UoaWQsIHZhbHVlKSk7
IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdGF0ZS5zdHlsZSgpLT4qc2V0dGVy
RnVuY3Rpb24pKFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2Uoc3RhdGUsIGlkLCB2YWx1ZSkpOyB9
CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CiAgICAg
ICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPFN0
eWxlSW1hZ2UqLCBnZXR0ZXJGdW5jdGlvbiwgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiwgc2V0dGVy
RnVuY3Rpb24sIFN0eWxlSW1hZ2UqLCBpbml0aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5kbGVyKCk7
CkBAIC0xMDAzLDExICsxMDAzLDExIEBAIGVudW0gQ291bnRlckJlaGF2aW9yIHtJbmNyZW1lbnQg
PSAwLCBSZXNldH07CiB0ZW1wbGF0ZSA8Q291bnRlckJlaGF2aW9yIGNvdW50ZXJCZWhhdmlvcj4K
IGNsYXNzIEFwcGx5UHJvcGVydHlDb3VudGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBl
bXB0eUZ1bmN0aW9uKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqKSB7IH0KLSAgICBzdGF0
aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGVtcHR5RnVuY3Rpb24oQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlU3RhdGUmKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAg
ICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5h
Y2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwotICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBw
YXJlbnRNYXAgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGly
ZWN0aXZlcygpOworICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdGF0ZS5zdHls
ZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOworICAgICAgICBDb3VudGVyRGlyZWN0aXZl
TWFwJiBwYXJlbnRNYXAgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0
aXZlcygpOwogCiAgICAgICAgIHR5cGVkZWYgQ291bnRlckRpcmVjdGl2ZU1hcDo6aXRlcmF0b3Ig
SXRlcmF0b3I7CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IHBhcmVudE1hcC5lbmQoKTsKQEAgLTEw
MjAsMTQgKzEwMjAsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0
PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKIAotICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBt
YXAgPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwor
ICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdGF0ZS5zdHlsZSgpLT5hY2Nlc3ND
b3VudGVyRGlyZWN0aXZlcygpOwogICAgICAgICB0eXBlZGVmIENvdW50ZXJEaXJlY3RpdmVNYXA6
Oml0ZXJhdG9yIEl0ZXJhdG9yOwogCiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsK
QEAgLTEwNjMsNDIgKzEwNjMsNDIgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5Q3Vy
c29yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkK
ICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcihzdHlsZVJl
c29sdmVyLT5wYXJlbnRTdHlsZSgpLT5jdXJzb3IoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldEN1cnNvckxpc3Qoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Y3Vy
c29ycygpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q3Vyc29yKHN0YXRlLnBhcmVudFN0
eWxlKCktPmN1cnNvcigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q3Vyc29yTGlzdChz
dGF0ZS5wYXJlbnRTdHlsZSgpLT5jdXJzb3JzKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldEN1cnNvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEN1cnNvcigpKTsKKyAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dEN1cnNvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEN1cnNvcigpKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
IHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7Cisg
ICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyQ3Vyc29yTGlzdCgpOwogICAgICAgICBpZiAodmFs
dWUtPmlzVmFsdWVMaXN0KCkpIHsKICAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0
YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKICAgICAgICAgICAgIGludCBsZW4gPSBs
aXN0LT5sZW5ndGgoKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1
cnNvcihDVVJTT1JfQVVUTyk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDdXJzb3Io
Q1VSU09SX0FVVE8pOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykg
ewogICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gbGlzdC0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjayhpKTsKICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNDdXJzb3JJbWFnZVZhbHVl
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSogaW1hZ2UgPSBz
dGF0aWNfY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlKj4oaXRlbSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChpbWFnZS0+dXBkYXRlSWZTVkdDdXJzb3JJc1VzZWQoc3R5bGVSZXNvbHZlci0+ZWxl
bWVudCgpKSkgLy8gRWxlbWVudHMgd2l0aCBTVkcgY3Vyc29ycyBhcmUgbm90IGFsbG93ZWQgdG8g
c2hhcmUgc3R5bGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRVbmlxdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+YWRkQ3Vyc29yKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlDdXJz
b3IsIGltYWdlKSwgaW1hZ2UtPmhvdFNwb3QoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChp
bWFnZS0+dXBkYXRlSWZTVkdDdXJzb3JJc1VzZWQoc3RhdGUuZWxlbWVudCgpKSkgLy8gRWxlbWVu
dHMgd2l0aCBTVkcgY3Vyc29ycyBhcmUgbm90IGFsbG93ZWQgdG8gc2hhcmUgc3R5bGUuCisgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRVbmlxdWUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+YWRkQ3Vyc29yKFN0eWxlUmVzb2x2ZXI6OnN0eWxl
SW1hZ2Uoc3RhdGUsIENTU1Byb3BlcnR5Q3Vyc29yLCBpbWFnZSksIGltYWdlLT5ob3RTcG90KCkp
OwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNJZGVudCgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKCpwcmltaXRpdmVWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDdXJzb3IoKnByaW1pdGl2
ZVZhbHVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewogICAgICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzSWRlbnQoKSAmJiBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5jdXJzb3IoKSAhPSBFQ3Vyc29yKCpwcmltaXRpdmVWYWx1
ZSkpCi0gICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKCpw
cmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzSWRlbnQo
KSAmJiBzdGF0ZS5zdHlsZSgpLT5jdXJzb3IoKSAhPSBFQ3Vyc29yKCpwcmltaXRpdmVWYWx1ZSkp
CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q3Vyc29yKCpwcmltaXRpdmVWYWx1
ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTExMDcsNyArMTEwNyw3IEBAIHB1YmxpYzoKIAog
Y2xhc3MgQXBwbHlQcm9wZXJ0eVRleHRBbGlnbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTExMTUsMTMgKzExMTUsMTMgQEAgcHVibGljOgogICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVl
KTsKIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgIT0gQ1NTVmFsdWVX
ZWJraXRNYXRjaFBhcmVudCkKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dFRleHRBbGlnbigqcHJpbWl0aXZlVmFsdWUpOwotICAgICAgICBlbHNlIGlmIChzdHlsZVJlc29s
dmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBUQVNUQVJUKQotICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0eWxlUmVzb2x2ZXItPnBhcmVu
dFN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IExFRlQgOiBSSUdIVCk7Ci0gICAg
ICAgIGVsc2UgaWYgKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigpID09
IFRBRU5EKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEFsaWdu
KHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/
IFJJR0hUIDogTEVGVCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0QWxpZ24o
KnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAoc3RhdGUucGFyZW50U3R5bGUoKS0+
dGV4dEFsaWduKCkgPT0gVEFTVEFSVCkKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRl
eHRBbGlnbihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBM
RUZUIDogUklHSFQpOworICAgICAgICBlbHNlIGlmIChzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0
QWxpZ24oKSA9PSBUQUVORCkKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRBbGln
bihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBSSUdIVCA6
IExFRlQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRUZXh0QWxpZ24oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+dGV4dEFsaWduKCkp
OworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0YXRlLnBhcmVudFN0
eWxlKCktPnRleHRBbGlnbigpKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBj
cmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xMTMyLDcgKzExMzIsNyBAQCBwdWJsaWM6CiAKIGNs
YXNzIEFwcGx5UHJvcGVydHlUZXh0RGVjb3JhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIEVUZXh0RGVjb3JhdGlvbiB0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RGVjb3Jh
dGlvbigpOwogICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkodmFsdWUpOyBpLmhh
c01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKQEAgLTExNDAsNyArMTE0MCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIEFTU0VSVChpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwogICAgICAgICAgICAg
dCB8PSAqc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKICAgICAgICAgfQot
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RGVjb3JhdGlvbih0KTsKKyAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dERlY29yYXRpb24odCk7CiAgICAgfQogICAgIHN0
YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtMTE1MSw3ICsx
MTUxLDcgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5TGluZUhlaWdodCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTExNjIsMTUgKzExNjIsMTUgQEAgcHVibGljOgogICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3JtYWwpCiAg
ICAgICAgICAgICBsaW5lSGVpZ2h0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCk7
CiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7Ci0gICAgICAg
ICAgICBkb3VibGUgbXVsdGlwbGllciA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKTsKLSAgICAgICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT50ZXh0U2l6
ZUFkanVzdCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHN0eWxlUmVz
b2x2ZXItPmRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgICAgICBkb3VibGUgbXVsdGlwbGll
ciA9IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgICAgIGlmIChzdGF0
ZS5zdHlsZSgpLT50ZXh0U2l6ZUFkanVzdCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKEZyYW1l
KiBmcmFtZSA9IHN0YXRlLmRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgICAgICAgICAgICAg
IG11bHRpcGxpZXIgKj0gZnJhbWUtPnRleHRab29tRmFjdG9yKCk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBsaW5lSGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVu
Z3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0
eWxlKCksIG11bHRpcGxpZXIpOworICAgICAgICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2ZVZh
bHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1l
bnRTdHlsZSgpLCBtdWx0aXBsaWVyKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS0+aXNQZXJjZW50YWdlKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBwZXJjZW50YWdlIHNo
b3VsZCBub3QgYmUgcmVzdHJpY3RlZCB0byBhbiBpbnRlZ2VyIGhlcmUuCi0gICAgICAgICAgICBs
aW5lSGVpZ2h0ID0gTGVuZ3RoKChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250U2l6ZSgpICog
cHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpIC8gMTAwLCBGaXhlZCk7CisgICAgICAgICAg
ICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKChzdGF0ZS5zdHlsZSgpLT5mb250U2l6ZSgpICogcHJpbWl0
aXZlVmFsdWUtPmdldEludFZhbHVlKCkpIC8gMTAwLCBGaXhlZCk7CiAgICAgICAgIH0gZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBu
dW1iZXIgYW5kIHBlcmNlbnRhZ2UgdmFsdWVzIHNob3VsZCBwcm9kdWNlIHRoZSBzYW1lIHR5cGUg
b2YgTGVuZ3RoIChpZS4gRml4ZWQgb3IgUGVyY2VudCkuCiAgICAgICAgICAgICBsaW5lSGVpZ2h0
ID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpICogMTAwLjAsIFBlcmNl
bnQpOwpAQCAtMTE3OCw3ICsxMTc4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgbGluZUhlaWdo
dCA9IHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRMaW5lSGVpZ2h0KGxpbmVIZWlnaHQpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRM
aW5lSGVpZ2h0KGxpbmVIZWlnaHQpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVy
IGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTEyNjUsMTEgKzEyNjUsMTEgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqKSB7IH0KLSAgICBz
dGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KikgeyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQg
YXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmKSB7IH0K
KyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVTdGF0ZSYpIHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5yZXNldFBhZ2VTaXplVHlwZSgpOworICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5yZXNldFBhZ2VTaXplVHlwZSgpOwogICAgICAgICBMZW5ndGggd2lk
dGg7CiAgICAgICAgIExlbmd0aCBoZWlnaHQ7CiAgICAgICAgIFBhZ2VTaXplVHlwZSBwYWdlU2l6
ZVR5cGUgPSBQQUdFX1NJWkVfQVVUTzsKQEAgLTEyODUsOCArMTI4NSw4IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAvLyA8bGVuZ3RoPnsyfQogICAgICAgICAgICAgICAgIGlmICghc2Vjb25k
LT5pc0xlbmd0aCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgd2lkdGggPSBmaXJzdC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSk7Ci0gICAgICAgICAgICAg
ICAgaGVpZ2h0ID0gc2Vjb25kLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAg
ICAgICB3aWR0aCA9IGZpcnN0LT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwg
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBoZWlnaHQgPSBzZWNv
bmQtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVu
dFN0eWxlKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyA8cGFn
ZS1zaXplPiA8b3JpZW50YXRpb24+CiAgICAgICAgICAgICAgICAgLy8gVGhlIHZhbHVlIG9yZGVy
IGlzIGd1YXJhbnRlZWQuIFNlZSBDU1NQYXJzZXI6OnBhcnNlU2l6ZVBhcmFtZXRlci4KQEAgLTEz
MDQsNyArMTMwNCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
aXNMZW5ndGgoKSkgewogICAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+CiAgICAgICAgICAgICAg
ICAgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX1JFU09MVkVEOwotICAgICAgICAgICAgICAgIHdp
ZHRoID0gaGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkpOwor
ICAgICAgICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVM
ZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSAwOgpAQCAtMTMzMCwyOSAr
MTMzMCwyOSBAQCBwdWJsaWM6CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0UGFnZVNpemVU
eXBlKHBhZ2VTaXplVHlwZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFBh
Z2VTaXplKExlbmd0aFNpemUod2lkdGgsIGhlaWdodCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRQYWdlU2l6ZVR5cGUocGFnZVNpemVUeXBlKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0UGFnZVNpemUoTGVuZ3RoU2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CiAgICAgfQogICAgIHN0YXRp
YyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxl
cigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9
CiB9OwogCiBjbGFzcyBBcHBseVByb3BlcnR5VGV4dEVtcGhhc2lzU3R5bGUgewogcHVibGljOgot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChzdHlsZVJlc29sdmVy
LT5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNGaWxsKCkpOwotICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0
eWxlKCktPnRleHRFbXBoYXNpc01hcmsoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUo
KS0+dGV4dEVtcGhhc2lzQ3VzdG9tTWFyaygpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
VGV4dEVtcGhhc2lzRmlsbChzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNGaWxsKCkp
OworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKHN0YXRlLnBhcmVu
dFN0eWxlKCktPnRleHRFbXBoYXNpc01hcmsoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lz
Q3VzdG9tTWFyaygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRl
JiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRF
bXBoYXNpc0ZpbGwoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNGaWxsKCkpOwotICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFJlbmRlclN0
eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzTWFyaygpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlhbFRl
eHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRF
bXBoYXNpc0ZpbGwoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNGaWxsKCkpOworICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFJlbmRlclN0eWxlOjppbml0
aWFsVGV4dEVtcGhhc2lzTWFyaygpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVt
cGhhc2lzQ3VzdG9tTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc0N1c3RvbU1h
cmsoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3Rh
dGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxp
c3QoKSkgewogICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NT
VmFsdWVMaXN0Kj4odmFsdWUpOwpAQCAtMTM2NiwxMSArMTM2NiwxMSBAQCBwdWJsaWM6CiAKICAg
ICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+Z2V0SWRl
bnQoKSA9PSBDU1NWYWx1ZUZpbGxlZCB8fCB2YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU9w
ZW4pCi0gICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRF
bXBoYXNpc0ZpbGwoKnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0VGV4dEVtcGhhc2lzRmlsbCgqdmFsdWUpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFy
aygqdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1w
aGFzaXNNYXJrKCp2YWx1ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKTsKKyAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsobnVsbEF0b20p
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTEzNzksMjAgKzEzNzksMjAg
QEAgcHVibGljOgogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAogICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoVGV4dEVtcGhhc2lzRmlsbEZpbGxlZCk7Ci0gICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFRleHRF
bXBoYXNpc01hcmtDdXN0b20pOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUo
KSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRF
bXBoYXNpc0ZpbGxGaWxsZWQpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVt
cGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJrQ3VzdG9tKTsKKyAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsocHJpbWl0aXZlVmFsdWUtPmdldFN0cmlu
Z1ZhbHVlKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhudWxsQXRvbSk7
CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsobnVsbEF0
b20pOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZUZpbGxlZCB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU9wZW4pIHsK
LSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwo
KnByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dFRleHRFbXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFya0F1dG8pOworICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbCgqcHJpbWl0aXZlVmFsdWUpOworICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJr
QXV0byk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQpOwotICAgICAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyaygqcHJpbWl0
aXZlVmFsdWUpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmls
bChUZXh0RW1waGFzaXNGaWxsRmlsbGVkKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dFRleHRFbXBoYXNpc01hcmsoKnByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtMTQwMCwxNCArMTQwMCwxNCBAQCBwdWJsaWM6CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwKLSAgICAgICAgICBUIChBbmltYXRpb246OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwKLSAg
ICAgICAgICB2b2lkIChBbmltYXRpb246OipzZXR0ZXJGdW5jdGlvbikoVCksCi0gICAgICAgICAg
Ym9vbCAoQW5pbWF0aW9uOjoqdGVzdEZ1bmN0aW9uKSgpIGNvbnN0LAotICAgICAgICAgIHZvaWQg
KEFuaW1hdGlvbjo6KmNsZWFyRnVuY3Rpb24pKCksCi0gICAgICAgICAgVCAoKmluaXRpYWxGdW5j
dGlvbikoKSwKLSAgICAgICAgICB2b2lkIChDU1NUb1N0eWxlTWFwOjoqbWFwRnVuY3Rpb24pKEFu
aW1hdGlvbiosIENTU1ZhbHVlKiksCi0gICAgICAgICAgQW5pbWF0aW9uTGlzdCogKFJlbmRlclN0
eWxlOjoqYW5pbWF0aW9uR2V0dGVyRnVuY3Rpb24pKCksCi0gICAgICAgICAgY29uc3QgQW5pbWF0
aW9uTGlzdCogKFJlbmRlclN0eWxlOjoqaW1tdXRhYmxlQW5pbWF0aW9uR2V0dGVyRnVuY3Rpb24p
KCkgY29uc3Q+CisgICAgVCAoQW5pbWF0aW9uOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsCisg
ICAgdm9pZCAoQW5pbWF0aW9uOjoqc2V0dGVyRnVuY3Rpb24pKFQpLAorICAgIGJvb2wgKEFuaW1h
dGlvbjo6KnRlc3RGdW5jdGlvbikoKSBjb25zdCwKKyAgICB2b2lkIChBbmltYXRpb246OipjbGVh
ckZ1bmN0aW9uKSgpLAorICAgIFQgKCppbml0aWFsRnVuY3Rpb24pKCksCisgICAgdm9pZCAoKm1h
cEZ1bmN0aW9uKShBbmltYXRpb24qLCBDU1NWYWx1ZSopLAorICAgIEFuaW1hdGlvbkxpc3QqIChS
ZW5kZXJTdHlsZTo6KmFuaW1hdGlvbkdldHRlckZ1bmN0aW9uKSgpLAorICAgIGNvbnN0IEFuaW1h
dGlvbkxpc3QqIChSZW5kZXJTdHlsZTo6KmltbXV0YWJsZUFuaW1hdGlvbkdldHRlckZ1bmN0aW9u
KSgpIGNvbnN0PgogY2xhc3MgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbiB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgc2V0VmFsdWUoQW5pbWF0aW9uKiBhbmltYXRpb24sIFQgdmFsdWUpIHsgKGFu
aW1hdGlvbi0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KQEAgLTE0MTUsMTQgKzE0MTUsMTQg
QEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHRlc3QoY29uc3QgQW5pbWF0aW9uKiBhbmltYXRp
b24pIHsgcmV0dXJuIChhbmltYXRpb24tPip0ZXN0RnVuY3Rpb24pKCk7IH0KICAgICBzdGF0aWMg
dm9pZCBjbGVhcihBbmltYXRpb24qIGFuaW1hdGlvbikgeyAoYW5pbWF0aW9uLT4qY2xlYXJGdW5j
dGlvbikoKTsgfQogICAgIHN0YXRpYyBUIGluaXRpYWwoKSB7IHJldHVybiAoKmluaXRpYWxGdW5j
dGlvbikoKTsgfQotICAgIHN0YXRpYyB2b2lkIG1hcChTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdHlsZVJlc29s
dmVyLT5zdHlsZU1hcCgpLT4qbWFwRnVuY3Rpb24pKGFuaW1hdGlvbiwgdmFsdWUpOyB9CisgICAg
c3RhdGljIHZvaWQgbWFwKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQW5pbWF0aW9uKiBhbmlt
YXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkgeyAoKm1hcEZ1bmN0aW9uKShhbmltYXRpb24sIHZhbHVl
KTsgfQogICAgIHN0YXRpYyBBbmltYXRpb25MaXN0KiBhY2Nlc3NBbmltYXRpb25zKFJlbmRlclN0
eWxlKiBzdHlsZSkgeyByZXR1cm4gKHN0eWxlLT4qYW5pbWF0aW9uR2V0dGVyRnVuY3Rpb24pKCk7
IH0KICAgICBzdGF0aWMgY29uc3QgQW5pbWF0aW9uTGlzdCogYW5pbWF0aW9ucyhSZW5kZXJTdHls
ZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+KmltbXV0YWJsZUFuaW1hdGlvbkdldHRlckZ1bmN0
aW9uKSgpOyB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAg
ICB7Ci0gICAgICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCkpOwotICAgICAgICBjb25zdCBBbmltYXRpb25MaXN0KiBwYXJlbnRM
aXN0ID0gYW5pbWF0aW9ucyhzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKTsKKyAgICAgICAg
QW5pbWF0aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMoc3RhdGUuc3R5bGUoKSk7Cisg
ICAgICAgIGNvbnN0IEFuaW1hdGlvbkxpc3QqIHBhcmVudExpc3QgPSBhbmltYXRpb25zKHN0YXRl
LnBhcmVudFN0eWxlKCkpOwogICAgICAgICBzaXplX3QgaSA9IDAsIHBhcmVudFNpemUgPSBwYXJl
bnRMaXN0ID8gcGFyZW50TGlzdC0+c2l6ZSgpIDogMDsKICAgICAgICAgZm9yICggOyBpIDwgcGFy
ZW50U2l6ZSAmJiB0ZXN0KHBhcmVudExpc3QtPmFuaW1hdGlvbihpKSk7ICsraSkgewogICAgICAg
ICAgICAgaWYgKGxpc3QtPnNpemUoKSA8PSBpKQpAQCAtMTQzNiw5ICsxNDM2LDkgQEAgcHVibGlj
OgogICAgICAgICAgICAgY2xlYXIobGlzdC0+YW5pbWF0aW9uKGkpKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFs
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUp
CiAgICAgewotICAgICAgICBBbmltYXRpb25MaXN0KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9ucyhz
dHlsZVJlc29sdmVyLT5zdHlsZSgpKTsKKyAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9IGFj
Y2Vzc0FuaW1hdGlvbnMoc3RhdGUuc3R5bGUoKSk7CiAgICAgICAgIGlmIChsaXN0LT5pc0VtcHR5
KCkpCiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7CiAgICAg
ICAgIHNldFZhbHVlKGxpc3QtPmFuaW1hdGlvbigwKSwgaW5pdGlhbCgpKTsKQEAgLTE0NDgsMjIg
KzE0NDgsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgY2xlYXIobGlzdC0+YW5pbWF0aW9uKGkp
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9IGFj
Y2Vzc0FuaW1hdGlvbnMoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSk7CisgICAgICAgIEFuaW1hdGlv
bkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0YXRlLnN0eWxlKCkpOwogICAgICAgICBz
aXplX3QgY2hpbGRJbmRleCA9IDA7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkg
ewogICAgICAgICAgICAgLyogV2FsayBlYWNoIHZhbHVlIGFuZCBwdXQgaXQgaW50byBhbiBhbmlt
YXRpb24sIGNyZWF0aW5nIG5ldyBhbmltYXRpb25zIGFzIG5lZWRlZC4gKi8KICAgICAgICAgICAg
IGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZh
bmNlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGRJbmRleCA8PSBsaXN0LT5zaXplKCkp
CiAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChBbmltYXRpb246OmNyZWF0ZSgpKTsK
LSAgICAgICAgICAgICAgICBtYXAoc3R5bGVSZXNvbHZlciwgbGlzdC0+YW5pbWF0aW9uKGNoaWxk
SW5kZXgpLCBpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1hcChzdGF0ZSwgbGlzdC0+YW5p
bWF0aW9uKGNoaWxkSW5kZXgpLCBpLnZhbHVlKCkpOwogICAgICAgICAgICAgICAgICsrY2hpbGRJ
bmRleDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChs
aXN0LT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6
Y3JlYXRlKCkpOwotICAgICAgICAgICAgbWFwKHN0eWxlUmVzb2x2ZXIsIGxpc3QtPmFuaW1hdGlv
bihjaGlsZEluZGV4KSwgdmFsdWUpOworICAgICAgICAgICAgbWFwKHN0YXRlLCBsaXN0LT5hbmlt
YXRpb24oY2hpbGRJbmRleCksIHZhbHVlKTsKICAgICAgICAgICAgIGNoaWxkSW5kZXggPSAxOwog
ICAgICAgICB9CiAgICAgICAgIGZvciAoIDsgY2hpbGRJbmRleCA8IGxpc3QtPnNpemUoKTsgKytj
aGlsZEluZGV4KSB7CkBAIC0xNDc3LDIyICsxNDc3LDIyIEBAIHB1YmxpYzoKIAogY2xhc3MgQXBw
bHlQcm9wZXJ0eU91dGxpbmVTdHlsZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJ
bmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAg
QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6b3V0
bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVT
dHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjppbml0aWFsT3V0bGluZVN0
eWxlSXNBdXRvPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7
Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFQm9yZGVyU3R5bGUsICZSZW5kZXJT
dHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGlu
ZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6
YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgIEFw
cGx5UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxp
bmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5
bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHls
ZUlzQXV0bz46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAg
QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpvdXRs
aW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGUsIEVC
b3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyU3R5bGU+OjphcHBseUluaGVy
aXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBw
bHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAg
ICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6
b3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OnNldE91dGxp
bmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjppbml0aWFsT3V0bGlu
ZVN0eWxlSXNBdXRvPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZl
cik7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFQm9yZGVyU3R5bGUsICZSZW5k
ZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0
bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxl
Pjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAg
IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91
dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5l
U3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVT
dHlsZUlzQXV0bz46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAg
ICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpv
dXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGUs
IEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyU3R5bGU+OjphcHBseUlu
aXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgewotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxPdXRsaW5lSXNB
dXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJl
bmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJT
dHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwg
c3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9y
ZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5k
ZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5p
dGlhbEJvcmRlclN0eWxlPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2
YWx1ZSk7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0PE91dGxpbmVJc0F1dG8sICZSZW5k
ZXJTdHlsZTo6b3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6
OnNldE91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjppbml0
aWFsT3V0bGluZVN0eWxlSXNBdXRvPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSwgdmFs
dWUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJT
dHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGlu
ZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6
YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOwogICAgIH0KIAogICAgIHN0YXRp
YyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxl
cigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9
CkBAIC0xNTAwLDcgKzE1MDAsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlSZXNp
emUgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRl
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTEyLDEzICsxNTEyLDEzIEBAIHB1
YmxpYzoKICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNl
IENTU1ZhbHVlQXV0bzoKLSAgICAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBzdHls
ZVJlc29sdmVyLT5kb2N1bWVudCgpLT5zZXR0aW5ncygpKQorICAgICAgICAgICAgaWYgKFNldHRp
bmdzKiBzZXR0aW5ncyA9IHN0YXRlLmRvY3VtZW50KCktPnNldHRpbmdzKCkpCiAgICAgICAgICAg
ICAgICAgciA9IHNldHRpbmdzLT50ZXh0QXJlYXNBcmVSZXNpemFibGUoKSA/IFJFU0laRV9CT1RI
IDogUkVTSVpFX05PTkU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIHIgPSAqcHJpbWl0aXZlVmFsdWU7CiAgICAgICAgIH0KLSAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0UmVzaXplKHIpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRSZXNpemUocik7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVI
YW5kbGVyKCkKQEAgLTE1MzAsNyArMTUzMCw3IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9w
ZXJ0eVZlcnRpY2FsQWxpZ24gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZh
bHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTM4LDkg
KzE1MzgsOSBAQCBwdWJsaWM6CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCiAgICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFsaWduKCpwcmltaXRpdmVWYWx1ZSk7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbigqcHJpbWl0
aXZlVmFsdWUpOwogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFZlcnRpY2Fs
QWxpZ25MZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJD
b252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbiB8IFZp
ZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxl
UmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZm
ZWN0aXZlWm9vbSgpKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ25M
ZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJz
aW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbiB8IFZpZXdwb3J0
UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5
bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSk7CiAgICAgfQogCiAgICAgc3Rh
dGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTE1NTIsMzIgKzE1NTIsMzIg
QEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5QXNwZWN0UmF0aW8gewogcHVibGljOgot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAg
aWYgKCFzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5oYXNBc3BlY3RSYXRpbygpKQorICAg
ICAgICBpZiAoIXN0YXRlLnBhcmVudFN0eWxlKCktPmhhc0FzcGVjdFJhdGlvKCkpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0FzcGVj
dFJhdGlvKHRydWUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RS
YXRpb0Rlbm9taW5hdG9yKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmFzcGVjdFJhdGlv
RGVub21pbmF0b3IoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVj
dFJhdGlvTnVtZXJhdG9yKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmFzcGVjdFJhdGlv
TnVtZXJhdG9yKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0
cnVlKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihz
dGF0ZS5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb0Rlbm9taW5hdG9yKCkpOworICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihzdGF0ZS5wYXJlbnRTdHlsZSgp
LT5hc3BlY3RSYXRpb051bWVyYXRvcigpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldEhhc0FzcGVjdFJhdGlvKFJlbmRlclN0eWxlOjppbml0aWFsSGFzQXNwZWN0UmF0aW8o
KSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvRGVub21p
bmF0b3IoUmVuZGVyU3R5bGU6OmluaXRpYWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKCkpOwotICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihSZW5k
ZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlvTnVtZXJhdG9yKCkpOworICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyhSZW5kZXJTdHlsZTo6aW5pdGlhbEhhc0FzcGVjdFJh
dGlvKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9y
KFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9EZW5vbWluYXRvcigpKTsKKyAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3IoUmVuZGVyU3R5bGU6OmluaXRp
YWxBc3BlY3RSYXRpb051bWVyYXRvcigpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAg
aWYgKCF2YWx1ZS0+aXNBc3BlY3RSYXRpb1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKGZhbHNlKTsKKyAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKGZhbHNlKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICBDU1NBc3BlY3RSYXRpb1ZhbHVlKiBhc3BlY3RSYXRpb1Zh
bHVlID0gc3RhdGljX2Nhc3Q8Q1NTQXNwZWN0UmF0aW9WYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8odHJ1ZSk7Ci0gICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvRGVub21pbmF0b3IoYXNwZWN0
UmF0aW9WYWx1ZS0+ZGVub21pbmF0b3JWYWx1ZSgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3IoYXNwZWN0UmF0aW9WYWx1ZS0+bnVtZXJh
dG9yVmFsdWUoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKHRy
dWUpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKGFz
cGVjdFJhdGlvVmFsdWUtPmRlbm9taW5hdG9yVmFsdWUoKSk7CisgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldEFzcGVjdFJhdGlvTnVtZXJhdG9yKGFzcGVjdFJhdGlvVmFsdWUtPm51bWVyYXRvclZh
bHVlKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxl
cigpCkBAIC0xNTg4LDQ4ICsxNTg4LDQ4IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0
eVpvb20gewogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCByZXNldEVmZmVjdGl2ZVpvb20oU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCByZXNldEVmZmVjdGl2
ZVpvb20oU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKICAgICAgICAgLy8gUmVzZXQg
dGhlIHpvb20gaW4gZWZmZWN0LiBUaGlzIGFsbG93cyB0aGUgc2V0Wm9vbSBtZXRob2QgdG8gYWNj
dXJhdGVseSBjb21wdXRlIGEgbmV3IHpvb20gaW4gZWZmZWN0LgotICAgICAgICBzdHlsZVJlc29s
dmVyLT5zZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkgPyBzdHls
ZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5lZmZlY3RpdmVab29tKCkgOiBSZW5kZXJTdHlsZTo6
aW5pdGlhbFpvb20oKSk7CisgICAgICAgIHN0YXRlLnNldEVmZmVjdGl2ZVpvb20oc3RhdGUucGFy
ZW50U3R5bGUoKSA/IHN0YXRlLnBhcmVudFN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSA6IFJlbmRl
clN0eWxlOjppbml0aWFsWm9vbSgpKTsKICAgICB9CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHJlc2V0RWZmZWN0aXZl
Wm9vbShzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9vbShzdHls
ZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT56b29tKCkpOworICAgICAgICByZXNldEVmZmVjdGl2
ZVpvb20oc3RhdGUpOworICAgICAgICBzdGF0ZS5zZXRab29tKHN0YXRlLnBhcmVudFN0eWxlKCkt
Pnpvb20oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYgc3Rh
dGUpCiAgICAgewotICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7Ci0g
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkp
OworICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3RhdGUpOworICAgICAgICBzdGF0ZS5zZXRa
b29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwogICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHZhbHVlKTsKIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVOb3JtYWwpIHsKLSAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJl
c29sdmVyKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oUmVuZGVyU3R5bGU6
OmluaXRpYWxab29tKCkpOworICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0YXRlKTsK
KyAgICAgICAgICAgIHN0YXRlLnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwog
ICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
UmVzZXQpIHsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEVmZmVjdGl2ZVpvb20oUmVu
ZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0
Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAgICAgICAgICBzdGF0ZS5zZXRF
ZmZlY3RpdmVab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICAgICAgICAgIHN0
YXRlLnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwogICAgICAgICB9IGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRG9jdW1lbnQpIHsKLSAg
ICAgICAgICAgIGZsb2F0IGRvY1pvb20gPSBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxl
KCkgPyBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCktPnpvb20oKSA6IFJlbmRlclN0
eWxlOjppbml0aWFsWm9vbSgpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0RWZmZWN0
aXZlWm9vbShkb2Nab29tKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oZG9j
Wm9vbSk7CisgICAgICAgICAgICBmbG9hdCBkb2Nab29tID0gc3RhdGUucm9vdEVsZW1lbnRTdHls
ZSgpID8gc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLT56b29tKCkgOiBSZW5kZXJTdHlsZTo6aW5p
dGlhbFpvb20oKTsKKyAgICAgICAgICAgIHN0YXRlLnNldEVmZmVjdGl2ZVpvb20oZG9jWm9vbSk7
CisgICAgICAgICAgICBzdGF0ZS5zZXRab29tKGRvY1pvb20pOwogICAgICAgICB9IGVsc2UgaWYg
KHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkgewotICAgICAgICAgICAgcmVzZXRFZmZl
Y3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOworICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29t
KHN0YXRlKTsKICAgICAgICAgICAgIGlmIChmbG9hdCBwZXJjZW50ID0gcHJpbWl0aXZlVmFsdWUt
PmdldEZsb2F0VmFsdWUoKSkKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29t
KHBlcmNlbnQgLyAxMDAuMGYpOworICAgICAgICAgICAgICAgIHN0YXRlLnNldFpvb20ocGVyY2Vu
dCAvIDEwMC4wZik7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVy
KCkpIHsKLSAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKKyAg
ICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdGF0ZSk7CiAgICAgICAgICAgICBpZiAoZmxv
YXQgbnVtYmVyID0gcHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSkKLSAgICAgICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKG51bWJlcik7CisgICAgICAgICAgICAgICAgc3Rh
dGUuc2V0Wm9vbShudW1iZXIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNjQxLDQyICsxNjQx
LDQyIEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eURpc3BsYXkgewogcHJpdmF0ZToK
LSAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZERpc3BsYXlWYWx1ZShTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBFRGlzcGxheSBkaXNwbGF5UHJvcGVydHlWYWx1ZSkKKyAgICBzdGF0
aWMgaW5saW5lIGJvb2wgaXNWYWxpZERpc3BsYXlWYWx1ZShTdHlsZVJlc29sdmVTdGF0ZSYgc3Rh
dGUsIEVEaXNwbGF5IGRpc3BsYXlQcm9wZXJ0eVZhbHVlKQogICAgIHsKICNpZiBFTkFCTEUoU1ZH
KQotICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpICYmIHN0eWxlUmVzb2x2ZXIt
PmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkgJiYgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c3R5
bGVUeXBlKCkgPT0gTk9QU0VVRE8pCisgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCkgJiYgc3Rh
dGUuZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0ZS5zdHlsZSgpLT5zdHlsZVR5cGUo
KSA9PSBOT1BTRVVETykKICAgICAgICAgICAgIHJldHVybiAoZGlzcGxheVByb3BlcnR5VmFsdWUg
PT0gSU5MSU5FIHx8IGRpc3BsYXlQcm9wZXJ0eVZhbHVlID09IEJMT0NLIHx8IGRpc3BsYXlQcm9w
ZXJ0eVZhbHVlID09IE5PTkUpOwogI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKHN0eWxlUmVz
b2x2ZXIpOworICAgICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgICAgICBVTlVTRURfUEFS
QU0oZGlzcGxheVByb3BlcnR5VmFsdWUpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSkK
ICAgICB7Ci0gICAgICAgIEVEaXNwbGF5IGRpc3BsYXkgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRT
dHlsZSgpLT5kaXNwbGF5KCk7Ci0gICAgICAgIGlmICghaXNWYWxpZERpc3BsYXlWYWx1ZShzdHls
ZVJlc29sdmVyLCBkaXNwbGF5KSkKKyAgICAgICAgRURpc3BsYXkgZGlzcGxheSA9IHN0YXRlLnBh
cmVudFN0eWxlKCktPmRpc3BsYXkoKTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkRGlzcGxheVZhbHVl
KHN0YXRlLCBkaXNwbGF5KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0RGlzcGxheShkaXNwbGF5KTsKKyAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0RGlzcGxheShkaXNwbGF5KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldERpc3BsYXkoUmVuZGVyU3R5bGU6OmluaXRpYWxEaXNwbGF5KCkpOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXREaXNwbGF5KFJlbmRlclN0eWxlOjppbml0aWFsRGlzcGxheSgpKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEVEaXNwbGF5IGRpc3BsYXkgPSAqc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKLSAgICAgICAgaWYgKCFpc1Zh
bGlkRGlzcGxheVZhbHVlKHN0eWxlUmVzb2x2ZXIsIGRpc3BsYXkpKQorICAgICAgICBpZiAoIWlz
VmFsaWREaXNwbGF5VmFsdWUoc3RhdGUsIGRpc3BsYXkpKQogICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldERpc3BsYXkoZGlzcGxheSk7Cisg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldERpc3BsYXkoZGlzcGxheSk7CiAgICAgfQogCiAgICAg
c3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTE2ODksMjEgKzE2ODks
MjEgQEAgdGVtcGxhdGUgPENsaXBQYXRoT3BlcmF0aW9uKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXJG
dW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGUKIGNsYXNzIEFwcGx5UHJvcGVydHlDbGlwUGF0
aCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxl
LCBQYXNzUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJG
dW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYg
c3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKSB7CiAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpCi0gICAg
ICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgMCk7CisgICAgICAg
ICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgMCk7CiAgICAgICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNTaGFwZSgpKSB7Ci0gICAgICAgICAgICAgICAgc2V0VmFsdWUo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgU2hhcGVDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGJh
c2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJlc29sdmVyLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVW
YWx1ZSgpKSkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIFNoYXBl
Q2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3RhdGUsIHByaW1p
dGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpKSk7CiAgICAgICAgICAgICB9CiAjaWYgRU5BQkxF
KFNWRykKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBl
KCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKICAgICAgICAgICAgICAgICBTdHJp
bmcgY3NzVVJMVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKLSAgICAg
ICAgICAgICAgICBLVVJMIHVybCA9IHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCktPmNvbXBsZXRl
VVJMKGNzc1VSTFZhbHVlKTsKKyAgICAgICAgICAgICAgICBLVVJMIHVybCA9IHN0YXRlLmRvY3Vt
ZW50KCktPmNvbXBsZXRlVVJMKGNzc1VSTFZhbHVlKTsKICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogSXQgZG9lc24ndCB3b3JrIHdpdGggZm9yd2FyZCBvciBleHRlcm5hbCBTVkcgcmVmZXJlbmNl
cyAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDQwNSkKLSAg
ICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBSZWZlcmVuY2VD
bGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGNzc1VSTFZhbHVlLCB1cmwuZnJhZ21lbnRJZGVudGlm
aWVyKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBSZWZlcmVu
Y2VDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGNzc1VSTFZhbHVlLCB1cmwuZnJhZ21lbnRJZGVu
dGlmaWVyKCkpKTsKICAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICB9CkBAIC0xNzIwLDE4
ICsxNzIwLDE4IEBAIHRlbXBsYXRlIDxFeGNsdXNpb25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6
OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuCiBjbGFzcyBBcHBseVByb3BlcnR5
RXhjbHVzaW9uU2hhcGUgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRl
clN0eWxlKiBzdHlsZSwgUGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiB2YWx1ZSkgeyAo
c3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1
ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlm
ICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CiAgICAgICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlKTsKICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NW
YWx1ZUF1dG8pCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgMCk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgMCk7CiAgICAg
ICAgICAgICAvLyBGSVhNRSBCdWcgMTAyNTcxOiBMYXlvdXQgZm9yIHRoZSB2YWx1ZSAnb3V0c2lk
ZS1zaGFwZScgaXMgbm90IHlldCBpbXBsZW1lbnRlZAogICAgICAgICAgICAgZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVPdXRzaWRlU2hhcGUpCi0gICAgICAg
ICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgRXhjbHVzaW9uU2hhcGVW
YWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKCkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0
YXRlLnN0eWxlKCksIEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0ZU91dHNpZGVWYWx1ZSgpKTsK
ICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1NoYXBlKCkpIHsKLSAgICAg
ICAgICAgICAgICBSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gc2hhcGUgPSBFeGNsdXNpb25T
aGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZhbHVlKGJhc2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJlc29s
dmVyLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVWYWx1ZSgpKSk7Ci0gICAgICAgICAgICAgICAg
c2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc2hhcGUucmVsZWFzZSgpKTsKKyAgICAg
ICAgICAgICAgICBSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gc2hhcGUgPSBFeGNsdXNpb25T
aGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZhbHVlKGJhc2ljU2hhcGVGb3JWYWx1ZShzdGF0ZSwgcHJp
bWl0aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUoKSkpOworICAgICAgICAgICAgICAgIHNldFZhbHVl
KHN0YXRlLnN0eWxlKCksIHNoYXBlLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CkBAIC0xNzQ2LDIxICsxNzQ2LDIxIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoQ1NT
X0lNQUdFX1JFU09MVVRJT04pCiBjbGFzcyBBcHBseVByb3BlcnR5SW1hZ2VSZXNvbHV0aW9uIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZv
aWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8
SW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNvdXJj
ZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlv
blNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFn
ZVJlc29sdXRpb25Tb3VyY2U+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJl
c29sdmVyKTsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlv
blNuYXAsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9u
U25hcCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRp
b25TbmFwLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25TbmFwPjo6YXBwbHlJ
bmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIEFwcGx5UHJv
cGVydHlEZWZhdWx0QmFzZTxmbG9hdCwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb24sIGZs
b2F0LCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHls
ZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvbj46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQs
IHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VS
ZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1h
Z2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNvdXJj
ZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29s
dXRpb25Tb3VyY2U+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAg
ICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVy
U3R5bGU6OmltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJT
dHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRl
clN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU25hcD46OmFwcGx5SW5oZXJpdFZhbHVlKHBy
b3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPGZsb2F0
LCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6c2V0
SW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0
aW9uPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRp
YWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0
ZSkKICAgICB7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRp
b25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29s
dXRpb25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFn
ZVJlc29sdXRpb25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNv
dXJjZT46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAg
ICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRl
clN0eWxlOjppbWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVy
U3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5k
ZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNuYXA+OjphcHBseUluaXRpYWxWYWx1ZShw
cm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRC
YXNlPGZsb2F0LCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJT
dHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1h
Z2VSZXNvbHV0aW9uPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZl
cik7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25Tb3Vy
Y2UsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRpb25T
b3VyY2UsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29s
dXRpb25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNvdXJjZT46
OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgQXBwbHlQcm9w
ZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW1hZ2VS
ZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjpzZXRJbWFn
ZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmluaXRp
YWxJbWFnZVJlc29sdXRpb25TbmFwPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3Rh
dGUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8ZmxvYXQsICZSZW5kZXJTdHls
ZTo6aW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRp
b24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24+OjphcHBseUlu
aXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0x
NzgwLDkgKzE3ODAsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgcmVzb2x1dGlvbiA9IHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0RQUFgpOwogICAgICAgICB9Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldEltYWdlUmVzb2x1dGlvblNvdXJjZShzb3VyY2UpOwotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25TbmFwKHNuYXApOwotICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb24ocmVzb2x1dGlvbik7Cisg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvblNvdXJjZShzb3VyY2UpOwor
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25TbmFwKHNuYXApOworICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb24ocmVzb2x1dGlvbik7CiAgICAg
fQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZUJ1aWxkZXIuaAppbmRleCA0ZmZlODUyMzRjMTNkMGZiYjE0NDZlMDY4ODFjOWY3ZmVm
YzcwNjdiLi41OTFkZGE5YjYyOGUxNzU5MzBmODVmNjRjYTRkOWM4ZThlODI5ZmY0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlQnVpbGRlci5oCkBAIC0zMywxOCArMzMsMTkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBDU1NWYWx1ZTsKIGNsYXNzIFN0eWxlQnVpbGRlcjsKK2NsYXNzIFN0eWxl
UmVzb2x2ZVN0YXRlOwogY2xhc3MgU3R5bGVSZXNvbHZlcjsKIAogY2xhc3MgUHJvcGVydHlIYW5k
bGVyIHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIHZvaWQgKCpJbmhlcml0RnVuY3Rpb24pKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqKTsKLSAgICB0eXBlZGVmIHZvaWQgKCpJbml0aWFsRnVu
Y3Rpb24pKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqKTsKLSAgICB0eXBlZGVmIHZvaWQg
KCpBcHBseUZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiwgQ1NTVmFsdWUq
KTsKKyAgICB0eXBlZGVmIHZvaWQgKCpJbmhlcml0RnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZVN0YXRlJik7CisgICAgdHlwZWRlZiB2b2lkICgqSW5pdGlhbEZ1bmN0aW9uKShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVTdGF0ZSYpOworICAgIHR5cGVkZWYgdm9pZCAoKkFw
cGx5RnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTVmFsdWUq
KTsKICAgICBQcm9wZXJ0eUhhbmRsZXIoKSA6IG1faW5oZXJpdCgwKSwgbV9pbml0aWFsKDApLCBt
X2FwcGx5KDApIHsgfQogICAgIFByb3BlcnR5SGFuZGxlcihJbmhlcml0RnVuY3Rpb24gaW5oZXJp
dCwgSW5pdGlhbEZ1bmN0aW9uIGluaXRpYWwsIEFwcGx5RnVuY3Rpb24gYXBwbHkpIDogbV9pbmhl
cml0KGluaGVyaXQpLCBtX2luaXRpYWwoaW5pdGlhbCksIG1fYXBwbHkoYXBwbHkpIHsgfQotICAg
IHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyKSBjb25zdCB7IEFTU0VSVChtX2luaGVyaXQpOyAoKm1faW5o
ZXJpdCkocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7IH0KLSAgICB2b2lkIGFwcGx5SW5pdGlh
bFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlcikgY29uc3QgeyBBU1NFUlQobV9pbml0aWFsKTsgKCptX2luaXRpYWwpKHByb3BlcnR5SUQs
IHN0eWxlUmVzb2x2ZXIpOyB9Ci0gICAgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKSBj
b25zdCB7IEFTU0VSVChtX2FwcGx5KTsgKCptX2FwcGx5KShwcm9wZXJ0eUlELCBzdHlsZVJlc29s
dmVyLCB2YWx1ZSk7IH0KKyAgICB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlKSBjb25zdCB7IEFTU0VSVChtX2lu
aGVyaXQpOyAoKm1faW5oZXJpdCkocHJvcGVydHlJRCwgc3RhdGUpOyB9CisgICAgdm9pZCBhcHBs
eUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZVN0YXRl
JiBzdGF0ZSkgY29uc3QgeyBBU1NFUlQobV9pbml0aWFsKTsgKCptX2luaXRpYWwpKHByb3BlcnR5
SUQsIHN0YXRlKTsgfQorICAgIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKSBjb25zdCB7IEFT
U0VSVChtX2FwcGx5KTsgKCptX2FwcGx5KShwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOyB9CiAg
ICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9pbmhlcml0ICYmIG1faW5pdGlhbCAm
JiBtX2FwcGx5OyB9CiAgICAgSW5oZXJpdEZ1bmN0aW9uIGluaGVyaXRGdW5jdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1faW5oZXJpdDsgfQogICAgIEluaXRpYWxGdW5jdGlvbiBpbml0aWFsRnVuY3Rp
b24oKSB7IHJldHVybiBtX2luaXRpYWw7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZVN0
YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODVlZmQ5NGZmOGNkM2VhZThkZmE2N2UwYjUzNzJlYmNhMTdiOGJm
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVTdGF0
ZS5oCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2lmbmRlZiBTdHlsZVJlc29sdmVTdGF0ZV9oCisjZGVmaW5lIFN0eWxlUmVz
b2x2ZVN0YXRlX2gKKworI2luY2x1ZGUgIkNTU1J1bGVMaXN0LmgiCisjaW5jbHVkZSAiRWxlbWVu
dC5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2Vy
LmgiCisjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIldl
YktpdENTU1NWR0RvY3VtZW50VmFsdWUuaCIKKyNlbmRpZgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhhc2hNYXA8Q1NTUHJvcGVydHlJRCwgUmVm
UHRyPENTU1ZhbHVlPiA+IFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOworI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykgJiYgRU5BQkxFKFNWRykKK3R5cGVkZWYgSGFzaE1hcDxGaWx0ZXJPcGVyYXRpb24q
LCBSZWZQdHI8V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZT4gPiBQZW5kaW5nU1ZHRG9jdW1lbnRN
YXA7CisjZW5kaWYKKworY2xhc3MgUmVuZGVyUmVnaW9uOworY2xhc3MgUnVsZURhdGE7CisKK2Ns
YXNzIFN0eWxlUmVzb2x2ZVN0YXRlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHlsZVJl
c29sdmVTdGF0ZSk7CitwdWJsaWM6CisgICAgU3R5bGVSZXNvbHZlU3RhdGUoKQorICAgIDogbV9l
bGVtZW50KDApCisgICAgLCBtX3N0eWxlKDApCisgICAgLCBtX2luY2x1ZGVFbXB0eVJ1bGVzKGZh
bHNlKQorICAgICwgbV9zYW1lT3JpZ2luT25seShmYWxzZSkKKyAgICAsIG1fcHNldWRvU3R5bGUo
Tk9QU0VVRE8pCisgICAgLCBtX21vZGUoU2VsZWN0b3JDaGVja2VyOjpSZXNvbHZpbmdTdHlsZSkK
KyAgICAsIG1fcmVnaW9uRm9yU3R5bGluZygwKQorICAgICwgbV9lbGVtZW50TGlua1N0YXRlKE5v
dEluc2lkZUxpbmspCisgICAgLCBtX3BhcmVudE5vZGUoMCkKKyAgICAsIG1fcGFyZW50U3R5bGUo
MCkKKyAgICAsIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KGZhbHNlKQorICAgICwgbV9y
b290RWxlbWVudFN0eWxlKDApCisgICAgLCBtX2NhblVzZUZhc3RSZWplY3QoZmFsc2UpCisgICAg
LCBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyhmYWxzZSkKKyAgICAsIG1fYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpCisgICAgLCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUoZmFsc2UpCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICwgbV9oYXNQZW5k
aW5nU2hhZGVycyhmYWxzZSkKKyNlbmRpZgorICAgICwgbV9saW5lSGVpZ2h0VmFsdWUoMCkKKyAg
ICAsIG1fZm9udERpcnR5KGZhbHNlKQorICAgICwgbV9oYXNVQUFwcGVhcmFuY2UoZmFsc2UpCisg
ICAgLCBtX2JhY2tncm91bmREYXRhKEJhY2tncm91bmRGaWxsTGF5ZXIpIHsgfQorCitwdWJsaWM6
CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQorICAg
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7
IH0KKyAgICBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cm9vdEVsZW1lbnRTdHlsZTsgfQorICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biBtX2VsZW1lbnQ7IH0KKyAgICBTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9zdHlsZWRFbGVtZW50OyB9CisgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9lbGVtZW50LT5kb2N1bWVudCgpOyB9CisgICAgUmVuZGVyUmVnaW9uKiBy
ZWdpb25Gb3JTdHlsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9yZWdpb25Gb3JTdHlsaW5nOyB9Cisg
ICAgU2VsZWN0b3JDaGVja2VyOjpNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0K
KyAgICBQc2V1ZG9JZCBwc2V1ZG9TdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHNldWRvU3R5bGU7
IH0KKyAgICBjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9wYXJlbnROb2RlOyB9CisgICAgRUluc2lkZUxpbmsgZWxlbWVudExpbmtTdGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZWxlbWVudExpbmtTdGF0ZTsgfQorICAgIGJvb2wgZGlzdHJpYnV0ZWRUb0lu
c2VydGlvblBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9p
bnQ7IH0KKworICAgIHZvaWQgc2V0Q2FuVXNlRmFzdFJlamVjdChib29sIGNhblVzZUZhc3RSZWpl
Y3QpIHsgbV9jYW5Vc2VGYXN0UmVqZWN0ID0gY2FuVXNlRmFzdFJlamVjdDsgfQorICAgIGJvb2wg
Y2FuVXNlRmFzdFJlamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FuVXNlRmFzdFJlamVjdDsgfQor
CisgICAgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpIHsgbV9zdHlsZSA9IHN0eWxl
OyB9CisgICAgdm9pZCBzZXRSb290RWxlbWVudFN0eWxlKFJlbmRlclN0eWxlKiByb290RWxlbWVu
dFN0eWxlKSB7IG1fcm9vdEVsZW1lbnRTdHlsZSA9IHJvb3RFbGVtZW50U3R5bGU7IH0KKyAgICB2
b2lkIHNldEVsZW1lbnQoRWxlbWVudCogZSkgeyBtX2VsZW1lbnQgPSBlOyBtX3N0eWxlZEVsZW1l
bnQgPSBlICYmIGUtPmlzU3R5bGVkRWxlbWVudCgpID8gdG9TdHlsZWRFbGVtZW50KGUpIDogMDsg
fQorICAgIHZvaWQgc2V0RWxlbWVudExpbmtTdGF0ZShFSW5zaWRlTGluayBlbGVtZW50TGlua1N0
YXRlKSB7IG1fZWxlbWVudExpbmtTdGF0ZSA9IGVsZW1lbnRMaW5rU3RhdGU7IH0KKyAgICB2b2lk
IHNldFBhcmVudE5vZGUoQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSkgeyBtX3BhcmVudE5vZGUg
PSBwYXJlbnROb2RlOyB9CisgICAgdm9pZCBzZXRQYXJlbnRTdHlsZShSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUpIHsgbV9wYXJlbnRTdHlsZSA9IHBhcmVudFN0eWxlOyB9CisgICAgdm9pZCBzZXRE
aXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQoYm9vbCBkaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9p
bnQpIHsgbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQgPSBkaXN0cmlidXRlZFRvSW5zZXJ0
aW9uUG9pbnQ7IH0KKyAgICB2b2lkIHNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpNb2RlIG1vZGUp
IHsgbV9tb2RlID0gbW9kZTsgfQorICAgIHZvaWQgc2V0UmVnaW9uRm9yU3R5bGluZyhSZW5kZXJS
ZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcpIHsgbV9yZWdpb25Gb3JTdHlsaW5nID0gcmVnaW9uRm9y
U3R5bGluZzsgfQorICAgIHZvaWQgc2V0UHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvU3R5bGUp
IHsgbV9wc2V1ZG9TdHlsZSA9IHBzZXVkb1N0eWxlOyB9CisKKyAgICBjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHN0eWxlKCktPmZvbnREZXNjcmlwdGlv
bigpOyB9CisgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24o
KSB7IHJldHVybiBwYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsgfQorCisgICAgdm9p
ZCBzZXRGb250RGVzY3JpcHRpb24oY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24pIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7IH0KKworICAgIHZvaWQgc2V0Wm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9
IHN0eWxlKCktPnNldFpvb20oZik7IH0KKyAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQg
ZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRFZmZlY3RpdmVab29tKGYpOyB9CisKKyAg
ICB2b2lkIHNldFRleHRTaXplQWRqdXN0KGJvb2wgYikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgp
LT5zZXRUZXh0U2l6ZUFkanVzdChiKTsgfQorICAgIHZvaWQgc2V0V3JpdGluZ01vZGUoV3JpdGlu
Z01vZGUgd3JpdGluZ01vZGUpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0V3JpdGluZ01v
ZGUod3JpdGluZ01vZGUpOyB9CisgICAgdm9pZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4dE9yaWVu
dGF0aW9uIHRleHRPcmllbnRhdGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRUZXh0
T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQorCisgICAgdm9pZCBzZXRBcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUoYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUpIHsgbV9h
cHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgPSBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7
IH0KKyAgICB2b2lkIHNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoYm9vbCBhcHBs
eVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKSB7IG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZSA9IGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7IH0KKyAgICBib29sIGFw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlOyB9CisgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOyB9
CisKKyAgICBWZWN0b3I8Y29uc3QgUnVsZURhdGEqLCAzMj4mIG1hdGNoZWRSdWxlcygpIHsgcmV0
dXJuIG1fbWF0Y2hlZFJ1bGVzOyB9CisgICAgY29uc3QgUnVsZURhdGEqIG1hdGNoZWRSdWxlQXQo
aW50IGluZGV4KSB7IHJldHVybiBtX21hdGNoZWRSdWxlc1tpbmRleF07IH0KKworICAgIHZvaWQg
c2V0RWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKGJvb2wgYWZmZWN0ZWRCeUNsYXNzUnVsZXMp
IHsgbV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMgPSBhZmZlY3RlZEJ5Q2xhc3NSdWxlczsg
fQorICAgIGJvb2wgZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKCkgY29uc3QgeyByZXR1cm4g
bV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXM7IH0KKyAgICAKKyAgICB2b2lkIGNhY2hlQm9y
ZGVyQW5kQmFja2dyb3VuZChSZW5kZXJTdHlsZSogc3R5bGUpCisgICAgeworICAgICAgICBBU1NF
UlQoc3R5bGUpOworICAgICAgICBtX2hhc1VBQXBwZWFyYW5jZSA9IHN0eWxlLT5oYXNBcHBlYXJh
bmNlKCk7CisgICAgICAgIGlmIChtX2hhc1VBQXBwZWFyYW5jZSkgeworICAgICAgICAgICAgbV9i
b3JkZXJEYXRhID0gc3R5bGUtPmJvcmRlcigpOworICAgICAgICAgICAgbV9iYWNrZ3JvdW5kRGF0
YSA9ICpzdHlsZS0+YmFja2dyb3VuZExheWVycygpOworICAgICAgICAgICAgbV9iYWNrZ3JvdW5k
Q29sb3IgPSBzdHlsZS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcCYgcGVuZGluZ0ltYWdlUHJvcGVydGllcygpIHsgcmV0
dXJuIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllczsgfQorCisjaWYgRU5BQkxFKENTU19GSUxURVJT
KSAmJiBFTkFCTEUoU1ZHKQorICAgIFBlbmRpbmdTVkdEb2N1bWVudE1hcCYgcGVuZGluZ1NWR0Rv
Y3VtZW50cygpIHsgcmV0dXJuIG1fcGVuZGluZ1NWR0RvY3VtZW50czsgfQorI2VuZGlmCisKKyAg
ICB2b2lkIHNldExpbmVIZWlnaHRWYWx1ZShDU1NWYWx1ZSogdmFsdWUpIHsgbV9saW5lSGVpZ2h0
VmFsdWUgPSB2YWx1ZTsgfQorICAgIENTU1ZhbHVlKiBsaW5lSGVpZ2h0VmFsdWUoKSB7IHJldHVy
biBtX2xpbmVIZWlnaHRWYWx1ZTsgfQorCisgICAgYm9vbCBoYXNQYXJlbnROb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXJlbnROb2RlOyB9CisKKyAgICB2b2lkIHNldEZvbnREaXJ0eShib29sIGRp
cnR5KSB7IG1fZm9udERpcnR5ID0gZGlydHk7IH0KKyAgICBib29sIGZvbnREaXJ0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERpcnR5OyB9CisKKyAgICBTdGF0aWNDU1NSdWxlTGlzdCogZW5zdXJl
UnVsZUxpc3QoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3J1bGVMaXN0KQorICAgICAgICAgICAg
bV9ydWxlTGlzdCA9IFN0YXRpY0NTU1J1bGVMaXN0OjpjcmVhdGUoKTsKKyAgICAgICAgcmV0dXJu
IG1fcnVsZUxpc3QuZ2V0KCk7CisgICAgfQorCisgICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0
PiYgcnVsZUxpc3QoKSB7IHJldHVybiBtX3J1bGVMaXN0OyB9CisKKyNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCisgICAgdm9pZCBzZXRIYXNQZW5kaW5nU2hhZGVycyhib29sIGhhc1BlbmRpbmdTaGFk
ZXJzKSB7IG1faGFzUGVuZGluZ1NoYWRlcnMgPSBoYXNQZW5kaW5nU2hhZGVyczsgfQorICAgIGJv
b2wgaGFzUGVuZGluZ1NoYWRlcnMoKSBjb25zdCB7IHJldHVybiBtX2hhc1BlbmRpbmdTaGFkZXJz
OyB9CisjZW5kaWYKKworLy8gU1ZHIGhhbmRsZXMgem9vbWluZyBpbiBhIGRpZmZlcmVudCB3YXkg
Y29tcGFyZWQgdG8gQ1NTLiBUaGUgd2hvbGUgZG9jdW1lbnQgaXMgc2NhbGVkIGluc3RlYWQKKy8v
IG9mIGVhY2ggaW5kaXZpZHVhbCBsZW5ndGggdmFsdWUgaW4gdGhlIHJlbmRlciBzdHlsZSAvIHRy
ZWUuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoKigpCisvLyBtdWx0aXBsaWVzIGVh
Y2ggcmVzb2x2ZWQgbGVuZ3RoIHdpdGggdGhlIHpvb20gbXVsdGlwbGllciAtIHNvIGZvciBTVkcg
d2UgbmVlZCB0byBkaXNhYmxlIHRoYXQuCisvLyBUaG91Z2ggYWxsIENTUyB2YWx1ZXMgdGhhdCBj
YW4gYmUgYXBwbGllZCB0byBvdXRlcm1vc3QgPHN2Zz4gZWxlbWVudHMgKHdpZHRoL2hlaWdodC9i
b3JkZXIvcGFkZGluZy4uLikKKy8vIG5lZWQgdG8gcmVzcGVjdCB0aGUgc2NhbGluZy4gUmVuZGVy
Qm94ICh0aGUgcGFyZW50IGNsYXNzIG9mIFJlbmRlclNWR1Jvb3QpIGdyYWJzIHZhbHVlcyBsaWtl
CisvLyB3aWR0aC9oZWlnaHQvYm9yZGVyL3BhZGRpbmcvLi4uIGZyb20gdGhlIFJlbmRlclN0eWxl
IC0+IGZvciBTVkcgdGhlc2UgdmFsdWVzIHdvdWxkIG5ldmVyIHNjYWxlLAorLy8gaWYgd2UnZCBw
YXNzIGEgMS4wIHpvb20gZmFjdG9yIGV2ZXJ5aHdlcmUuIFNvIHdlIG9ubHkgcGFzcyBhIHpvb20g
ZmFjdG9yIG9mIDEuMCBmb3Igc3BlY2lmaWMKKy8vIHByb3BlcnRpZXMgdGhhdCBhcmUgTk9UIGFs
bG93ZWQgdG8gc2NhbGUgd2l0aGluIGEgem9vbWVkIFNWRyBkb2N1bWVudCAobGV0dGVyL3dvcmQt
c3BhY2luZy9mb250LXNpemUpLgorICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCk7IH0KKworICAgIGJv
b2wgaGFzVUFBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNVQUFwcGVhcmFuY2U7IH0K
KyAgICBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXJEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ib3Jk
ZXJEYXRhOyB9CisgICAgY29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kRGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2dyb3VuZERhdGE7IH0KKyAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQorCisgICAgdm9pZCBzZXRJbmNsdWRl
RW1wdHlSdWxlcyhib29sIGluY2x1ZGVFbXB0eVJ1bGVzKSB7IG1faW5jbHVkZUVtcHR5UnVsZXMg
PSBpbmNsdWRlRW1wdHlSdWxlczsgfQorICAgIHZvaWQgc2V0U2FtZU9yaWdpbk9ubHkoYm9vbCBz
YW1lT3JpZ2luT25seSkgeyBtX3NhbWVPcmlnaW5Pbmx5ID0gc2FtZU9yaWdpbk9ubHk7IH0KKyAg
ICBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbmNsdWRlRW1wdHlS
dWxlczsgfQorICAgIGJvb2wgc2FtZU9yaWdpbk9ubHkoKSBjb25zdCB7IHJldHVybiBtX3NhbWVP
cmlnaW5Pbmx5OyB9CisKK3ByaXZhdGU6CisgICAgRWxlbWVudCogbV9lbGVtZW50OworICAgIFJl
bmRlclN0eWxlKiBtX3N0eWxlOworICAgIFN0eWxlZEVsZW1lbnQqIG1fc3R5bGVkRWxlbWVudDsK
KworICAgIGJvb2wgbV9pbmNsdWRlRW1wdHlSdWxlczsgLy8gc2hvdWxkIGJlIG1vdmVkIHRvIE1h
dGNoUmVxdWVzdD8KKyAgICBib29sIG1fc2FtZU9yaWdpbk9ubHk7IC8vIHNob3VsZCBiZSBtb3Zl
ZCB0byBNYXRjaFJlcXVlc3Q/CisgICAgUHNldWRvSWQgbV9wc2V1ZG9TdHlsZTsgLy8gc2hvdWxk
IGJlIG1vdmVkIHRvIE1hdGNoUmVxdWVzdD8KKyAgICBTZWxlY3RvckNoZWNrZXI6Ok1vZGUgbV9t
b2RlOworCisgICAgUmVuZGVyUmVnaW9uKiBtX3JlZ2lvbkZvclN0eWxpbmc7CisgICAgRUluc2lk
ZUxpbmsgbV9lbGVtZW50TGlua1N0YXRlOworCisgICAgQ29udGFpbmVyTm9kZSogbV9wYXJlbnRO
b2RlOworICAgIFJlbmRlclN0eWxlKiBtX3BhcmVudFN0eWxlOworICAgIGJvb2wgbV9kaXN0cmli
dXRlZFRvSW5zZXJ0aW9uUG9pbnQ7IC8vIG9ubHkgc3R5bGVGb3JFbGVtZW50IG5lZWRzLgorICAg
IFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGU7IC8vIGFwcGx5UHJvcGVydHkgbmVlZHMu
CisKKyAgICBib29sIG1fY2FuVXNlRmFzdFJlamVjdDsgLy8gY29sbGVjdE1hdGNoZWRSdWxlc0Zv
ckxpc3QgdXNlcy4KKyAgICBib29sIG1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzOyAvLyBz
aWJsaW5nIHN0eWxlIHNoYXJpbmcgbmVlZHMuCisKKyAgICAvLyBBIGJ1ZmZlciB1c2VkIHRvIGhv
bGQgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIGZvciBhbiBlbGVtZW50LAorICAgIC8vIGFuZCBh
IHRlbXBvcmFyeSBidWZmZXIgdXNlZCBmb3IgbWVyZ2Ugc29ydGluZy4KKyAgICBWZWN0b3I8Y29u
c3QgUnVsZURhdGEqLCAzMj4gbV9tYXRjaGVkUnVsZXM7CisgICAgUmVmUHRyPFN0YXRpY0NTU1J1
bGVMaXN0PiBtX3J1bGVMaXN0OworCisgICAgLy8gYXBwbHlQcm9wZXJ0eSBuZWVkcy4KKyAgICBi
b29sIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOworICAgIGJvb2wgbV9hcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlOworCisgICAgLy8gUGVuZGluZ0ltYWdlUHJvcGVydGllcyBh
cmUgcGVyLXJlc29sdmluZyBtZW1iZXIuCisgICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXAgbV9w
ZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzOworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBib29s
IG1faGFzUGVuZGluZ1NoYWRlcnM7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYm
IEVOQUJMRShTVkcpCisgICAgUGVuZGluZ1NWR0RvY3VtZW50TWFwIG1fcGVuZGluZ1NWR0RvY3Vt
ZW50czsKKyNlbmRpZgorICAgIENTU1ZhbHVlKiBtX2xpbmVIZWlnaHRWYWx1ZTsgLy8gY2FjaGU7
IHVwZGF0ZWQgaW4gYXBwbHlQcm9wZXJ0eS4KKyAgICBib29sIG1fZm9udERpcnR5OworCisgICAg
Ly8gYm9yZGVyLWFuZC1iYWNrZ3JvdW5kIGNhY2hlLCBpdCBpcyBiZXR0ZXIgdG8gbW92ZSB0byBh
bm90aGVyIHBsYWNlPworICAgIGJvb2wgbV9oYXNVQUFwcGVhcmFuY2U7CisgICAgQm9yZGVyRGF0
YSBtX2JvcmRlckRhdGE7CisgICAgRmlsbExheWVyIG1fYmFja2dyb3VuZERhdGE7CisgICAgQ29s
b3IgbV9iYWNrZ3JvdW5kQ29sb3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBTdHlsZVJlc29sdmVTdGF0ZV9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcAppbmRleCBiMjYzZDgwNmI4NTk1ODZjN2MxNGNmZjMxZjk4MGE0MzI1MjM2NWJhLi5kZTEy
MzkwNDlmM2YzMmQ5NjViZWE4ZmU2NDY0MzE3MTFkNWQwZGM1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuY3BwCkBAIC00NCw3ICs0NCw2IEBACiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZl
VmFsdWVNYXBwaW5ncy5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRl
ICJDU1NSZWZsZWN0VmFsdWUuaCIKLSNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgogI2luY2x1ZGUg
IkNTU1NlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCiAjaW5jbHVkZSAi
Q1NTU3R5bGVSdWxlLmgiCkBAIC0xMjAsNiArMTE5LDcgQEAKICNpbmNsdWRlICJTdHlsZVJ1bGVJ
bXBvcnQuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKICNpbmNsdWRlICJTdHls
ZVNoZWV0TGlzdC5oIgorI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJUZXh0
LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJUcmFuc2xh
dGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKQEAgLTE5OCwxNCArMTk4LDE0IEBAIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKICNkZWZpbmUgSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAog
aWYgKGlzSW5oZXJpdCkgeyBcCi0gICAgbV9zdHlsZS0+c2V0IyNQcm9wKG1fcGFyZW50U3R5bGUt
PnByb3AoKSk7IFwKKyAgICBzdGF0ZS5zdHlsZSgpLT5zZXQjI1Byb3Aoc3RhdGUucGFyZW50U3R5
bGUoKS0+cHJvcCgpKTsgICAgICBcCiAgICAgcmV0dXJuOyBcCiB9CiAKICNkZWZpbmUgSEFORExF
X0lOSEVSSVRfQU5EX0lOSVRJQUwocHJvcCwgUHJvcCkgXAogSEFORExFX0lOSEVSSVQocHJvcCwg
UHJvcCkgXAogaWYgKGlzSW5pdGlhbCkgeyBcCi0gICAgbV9zdHlsZS0+c2V0IyNQcm9wKFJlbmRl
clN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBcCisgICAgc3RhdGUuc3R5bGUoKS0+c2V0IyNQcm9w
KFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyAgICAgXAogICAgIHJldHVybjsgXAogfQog
CkBAIC0yNjYsMzUgKzI2NiwxNSBAQCBzdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogcmlnaHRUb0xl
ZnREZWNsYXJhdGlvbigpCiAKIAogU3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1bWVu
dCogZG9jdW1lbnQsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgIDogbV9oYXNV
QUFwcGVhcmFuY2UoZmFsc2UpCi0gICAgLCBtX2JhY2tncm91bmREYXRhKEJhY2tncm91bmRGaWxs
TGF5ZXIpCi0gICAgLCBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RT
d2VlcCgwKQorICAgIDogbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VMYXN0
U3dlZXAoMCkKICAgICAsIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZVN3ZWVwVGltZXIodGhpcywg
JlN0eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSkKICAgICAsIG1fZG9j
dW1lbnQoZG9jdW1lbnQpCi0gICAgLCBtX3NlbGVjdG9yQ2hlY2tlcihkb2N1bWVudCkKLSAgICAs
IG1fcGFyZW50U3R5bGUoMCkKLSAgICAsIG1fcm9vdEVsZW1lbnRTdHlsZSgwKQotICAgICwgbV9l
bGVtZW50KDApCi0gICAgLCBtX3N0eWxlZEVsZW1lbnQoMCkKLSAgICAsIG1fcmVnaW9uRm9yU3R5
bGluZygwKQotICAgICwgbV9lbGVtZW50TGlua1N0YXRlKE5vdEluc2lkZUxpbmspCi0gICAgLCBt
X3BhcmVudE5vZGUoMCkKLSAgICAsIG1fbGluZUhlaWdodFZhbHVlKDApCi0gICAgLCBtX2ZvbnRE
aXJ0eShmYWxzZSkKICAgICAsIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKG1hdGNoQXV0aG9y
QW5kVXNlclN0eWxlcykKLSAgICAsIG1fc2FtZU9yaWdpbk9ubHkoZmFsc2UpCi0gICAgLCBtX2Rp
c3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludChmYWxzZSkKICAgICAsIG1fZm9udFNlbGVjdG9yKENT
U0ZvbnRTZWxlY3Rvcjo6Y3JlYXRlKGRvY3VtZW50KSkKICNpZiBFTkFCTEUoQ1NTX0RFVklDRV9B
REFQVEFUSU9OKQogICAgICwgbV92aWV3cG9ydFN0eWxlUmVzb2x2ZXIoVmlld3BvcnRTdHlsZVJl
c29sdmVyOjpjcmVhdGUoZG9jdW1lbnQpKQogI2VuZGlmCi0gICAgLCBtX2FwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSh0cnVlKQotICAgICwgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlKGZhbHNlKQogICAgICwgbV9zdHlsZUJ1aWxkZXIoU3R5bGVCdWlsZGVyOjpzaGFyZWRTdHls
ZUJ1aWxkZXIoKSkKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgLCBtX2hhc1BlbmRpbmdT
aGFkZXJzKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3N0eWxlTWFwKHRoaXMpCiB7CiAgICAgRWxl
bWVudCogcm9vdCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKIApAQCAtNjQ4LDEwMCAr
NjI4LDEwMiBAQCBpbmxpbmUgYm9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6aXNNYXRjaGluZ1VB
UnVsZXMoKQogCiBib29sIE1hdGNoaW5nVUFSdWxlc1Njb3BlOjptX21hdGNoaW5nVUFSdWxlcyA9
IGZhbHNlOwogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzKGNvbnN0
IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBSdWxlUmFuZ2UmIHJ1bGVSYW5nZSkKK3ZvaWQg
U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMoUnVsZVNldCogcnVsZVNldCwgU3R5
bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBSdWxlUmFuZ2UmIHJ1bGVSYW5nZSwgY29uc3QgQ29udGFp
bmVyTm9kZSogc2NvcGUpCiB7Ci0gICAgQVNTRVJUKG1hdGNoUmVxdWVzdC5ydWxlU2V0KTsKLSAg
ICBBU1NFUlQobV9lbGVtZW50KTsKKyAgICBBU1NFUlQocnVsZVNldCk7CisgICAgQVNTRVJUKHN0
YXRlLmVsZW1lbnQoKSk7CiAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHBzZXVkb0lkID0gbV9l
bGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0ZS5l
bGVtZW50KCk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwc2V1ZG9JZCA9IGVsZW1lbnQtPnNo
YWRvd1BzZXVkb0lkKCk7CiAgICAgaWYgKCFwc2V1ZG9JZC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
QVNTRVJUKG1fc3R5bGVkRWxlbWVudCk7Ci0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9y
TGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+c2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKHBzZXVk
b0lkLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICAgICAgQVNTRVJUKGVs
ZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNG
b3JMaXN0KHJ1bGVTZXQtPnNoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyhwc2V1ZG9JZC5pbXBsKCkp
LCBzdGF0ZSwgcnVsZVJhbmdlLCBzY29wZSk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQotICAgIGlmIChtX2VsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpICYmIHRvV2ViVlRURWxl
bWVudChtX2VsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpKQotICAgICAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmN1ZVBzZXVkb1J1bGVzKCksIG1h
dGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50
KCkgJiYgdG9XZWJWVFRFbGVtZW50KGVsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpKQorICAgICAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZVNldC0+Y3VlUHNldWRvUnVsZXMoKSwg
c3RhdGUsIHJ1bGVSYW5nZSwgc2NvcGUpOwogI2VuZGlmCiAgICAgLy8gQ2hlY2sgd2hldGhlciBv
dGhlciB0eXBlcyBvZiBydWxlcyBhcmUgYXBwbGljYWJsZSBpbiB0aGUgY3VycmVudCB0cmVlIHNj
b3BlLiBDcml0ZXJpYSBmb3IgdGhpczoKICAgICAvLyBhKSBpdCdzIGEgVUEgcnVsZQogICAgIC8v
IGIpIHRoZSB0cmVlIHNjb3BlIGFsbG93cyBhdXRob3IgcnVsZXMKICAgICAvLyBjKSB0aGUgcnVs
ZXMgY29tZXMgZnJvbSBhIHNjb3BlZCBzdHlsZSBzaGVldCB3aXRoaW4gdGhlIHNhbWUgdHJlZSBz
Y29wZQotICAgIFRyZWVTY29wZSogdHJlZVNjb3BlID0gbV9lbGVtZW50LT50cmVlU2NvcGUoKTsK
KyAgICBUcmVlU2NvcGUqIHRyZWVTY29wZSA9IGVsZW1lbnQtPnRyZWVTY29wZSgpOwogICAgIGlm
ICghTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKICAgICAgICAgJiYg
IXRyZWVTY29wZS0+YXBwbHlBdXRob3JTdHlsZXMoKQotICAgICAgICAmJiAoIW1hdGNoUmVxdWVz
dC5zY29wZSB8fCBtYXRjaFJlcXVlc3Quc2NvcGUtPnRyZWVTY29wZSgpICE9IHRyZWVTY29wZSkp
CisgICAgICAgICYmICghc2NvcGUgfHwgc2NvcGUtPnRyZWVTY29wZSgpICE9IHRyZWVTY29wZSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIG5lZWQgdG8gY29sbGVjdCB0aGUgcnVsZXMg
Zm9yIGlkLCBjbGFzcywgdGFnLCBhbmQgZXZlcnl0aGluZyBlbHNlIGludG8gYSBidWZmZXIgYW5k
CiAgICAgLy8gdGhlbiBzb3J0IHRoZSBidWZmZXIuCi0gICAgaWYgKG1fZWxlbWVudC0+aGFzSUQo
KSkKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxl
U2V0LT5pZFJ1bGVzKG1fZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpLCBt
YXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgaWYgKG1fc3R5bGVkRWxlbWVudCAmJiBtX3N0
eWxlZEVsZW1lbnQtPmhhc0NsYXNzKCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3N0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKS5zaXplKCk7ICsraSkKLSAgICAgICAgICAg
IGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+Y2xhc3NS
dWxlcyhtX3N0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKVtpXS5pbXBsKCkpLCBtYXRjaFJlcXVl
c3QsIHJ1bGVSYW5nZSk7CisgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkpCisgICAgICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlU2V0LT5pZFJ1bGVzKGVsZW1lbnQtPmlkRm9yU3R5
bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSwgc3RhdGUsIHJ1bGVSYW5nZSwgc2NvcGUpOworICAgIGlm
IChzdGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5oYXNDbGFz
cygpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUuc3R5bGVkRWxlbWVu
dCgpLT5jbGFzc05hbWVzKCkuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0Zvckxpc3QocnVsZVNldC0+Y2xhc3NSdWxlcyhzdGF0ZS5zdHlsZWRFbGVtZW50KCkt
PmNsYXNzTmFtZXMoKVtpXS5pbXBsKCkpLCBzdGF0ZSwgcnVsZVJhbmdlLCBzY29wZSk7CiAgICAg
fQogCi0gICAgaWYgKG1fZWxlbWVudC0+aXNMaW5rKCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+bGlua1BzZXVkb0NsYXNzUnVsZXMo
KSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgIGlmIChtX3NlbGVjdG9yQ2hlY2tlci5t
YXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhtX2VsZW1lbnQpKQotICAgICAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmZvY3VzUHNldWRvQ2xhc3NSdWxl
cygpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNG
b3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT50YWdSdWxlcyhtX2VsZW1lbnQtPmxvY2FsTmFt
ZSgpLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPnVuaXZlcnNhbFJ1bGVzKCksIG1h
dGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkpCisgICAg
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlU2V0LT5saW5rUHNldWRvQ2xhc3NS
dWxlcygpLCBzdGF0ZSwgcnVsZVJhbmdlLCBzY29wZSk7CisgICAgaWYgKG1hdGNoZXNGb2N1c1Bz
ZXVkb0NsYXNzKGVsZW1lbnQpKQorICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qo
cnVsZVNldC0+Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCksIHN0YXRlLCBydWxlUmFuZ2UsIHNjb3Bl
KTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZVNldC0+dGFnUnVsZXMoZWxl
bWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgc3RhdGUsIHJ1bGVSYW5nZSwgc2NvcGUpOworICAg
IGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlU2V0LT51bml2ZXJzYWxSdWxlcygpLCBz
dGF0ZSwgcnVsZVJhbmdlLCBzY29wZSk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3Qs
IFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQordm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hp
bmdSdWxlc0ZvclJlZ2lvbihSdWxlU2V0KiBydWxlU2V0LCBTdHlsZVJlc29sdmVTdGF0ZSYgc3Rh
dGUsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKIHsK
LSAgICBpZiAoIW1fcmVnaW9uRm9yU3R5bGluZykKKyAgICBpZiAoIXN0YXRlLnJlZ2lvbkZvclN0
eWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdW5zaWduZWQgc2l6ZSA9IG1hdGNoUmVx
dWVzdC5ydWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKKyAgICBF
bGVtZW50KiByZWdpb25TdHlsaW5nRWxlbWVudCA9IHRvRWxlbWVudChzdGF0ZS5yZWdpb25Gb3JT
dHlsaW5nKCktPm5vZGUoKSk7CisgICAgdW5zaWduZWQgc2l6ZSA9IHJ1bGVTZXQtPm1fcmVnaW9u
U2VsZWN0b3JzQW5kUnVsZVNldHMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9y
ID0gbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQo
aSkuc2VsZWN0b3I7Ci0gICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKHJlZ2lvblNlbGVj
dG9yLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9yZWdpb25Gb3JTdHlsaW5nLT5ub2RlKCkpKSkg
ewotICAgICAgICAgICAgUnVsZVNldCogcmVnaW9uUnVsZXMgPSBtYXRjaFJlcXVlc3QucnVsZVNl
dC0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5ydWxlU2V0LmdldCgpOworICAg
ICAgICBjb25zdCBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IgPSBydWxlU2V0LT5tX3JlZ2lv
blNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9yOworICAgICAgICBpZiAoY2hlY2tS
ZWdpb25TZWxlY3RvcihyZWdpb25TZWxlY3RvciwgcmVnaW9uU3R5bGluZ0VsZW1lbnQpKSB7Cisg
ICAgICAgICAgICBSdWxlU2V0KiByZWdpb25SdWxlcyA9IHJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0
b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNldC5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVChy
ZWdpb25SdWxlcyk7Ci0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVl
c3QocmVnaW9uUnVsZXMsIG1hdGNoUmVxdWVzdC5pbmNsdWRlRW1wdHlSdWxlcywgbWF0Y2hSZXF1
ZXN0LnNjb3BlKSwgcnVsZVJhbmdlKTsKKyAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
KHJlZ2lvblJ1bGVzLCBzdGF0ZSwgcnVsZVJhbmdlLCBzY29wZSk7CiAgICAgICAgIH0KICAgICB9
CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1h
dGNoUmVzdWx0JiByZXN1bHQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1h
dGNoZWRSdWxlcyhTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQp
CiB7Ci0gICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKKyAgICBpZiAoc3RhdGUubWF0
Y2hlZFJ1bGVzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzb3J0TWF0Y2hl
ZFJ1bGVzKCk7CisgICAgc29ydE1hdGNoZWRSdWxlcyhzdGF0ZS5tYXRjaGVkUnVsZXMoKSk7CiAK
LSAgICBpZiAobV9zZWxlY3RvckNoZWNrZXIubW9kZSgpID09IFNlbGVjdG9yQ2hlY2tlcjo6Q29s
bGVjdGluZ1J1bGVzKSB7Ci0gICAgICAgIGlmICghbV9ydWxlTGlzdCkKLSAgICAgICAgICAgIG1f
cnVsZUxpc3QgPSBTdGF0aWNDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAg
IG1fcnVsZUxpc3QtPnJ1bGVzKCkuYXBwZW5kKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmNy
ZWF0ZUNTU09NV3JhcHBlcigpKTsKKyAgICBpZiAoc3RhdGUubW9kZSgpID09IFNlbGVjdG9yQ2hl
Y2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7CisgICAgICAgIC8vIFNob3VsZCBtb3ZlIHJ1bGVMaXN0
IGZyb20gc3RhdGUgdG8gcmVzdWx0PworICAgICAgICBTdGF0aWNDU1NSdWxlTGlzdCogcnVsZUxp
c3QgPSBzdGF0ZS5lbnN1cmVSdWxlTGlzdCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3RhdGUubWF0Y2hlZFJ1bGVzKCkuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBydWxl
TGlzdC0+cnVsZXMoKS5hcHBlbmQoc3RhdGUubWF0Y2hlZFJ1bGVBdChpKS0+cnVsZSgpLT5jcmVh
dGVDU1NPTVdyYXBwZXIoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBOb3cg
dHJhbnNmZXIgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIG92ZXIgdG8gb3VyIGxpc3Qgb2YgZGVj
bGFyYXRpb25zLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5z
aXplKCk7IGkrKykgewotICAgICAgICBpZiAobV9zdHlsZSAmJiBtX21hdGNoZWRSdWxlc1tpXS0+
Y29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkpCi0gICAgICAgICAgICBtX3N0eWxl
LT5zZXRVbmlxdWUoKTsKLSAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCBtX21h
dGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5wcm9wZXJ0aWVzKCksIG1fbWF0Y2hlZFJ1bGVzW2ldLT5y
dWxlKCksIG1fbWF0Y2hlZFJ1bGVzW2ldLT5saW5rTWF0Y2hUeXBlKCksIG1fbWF0Y2hlZFJ1bGVz
W2ldLT5wcm9wZXJ0eVdoaXRlbGlzdFR5cGUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0YXRlLm1hdGNoZWRSdWxlcygpLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChzdGF0
ZS5zdHlsZSgpICYmIHN0YXRlLm1hdGNoZWRSdWxlQXQoaSktPmNvbnRhaW5zVW5jb21tb25BdHRy
aWJ1dGVTZWxlY3RvcigpKQorICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VW5pcXVlKCk7
CisgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGUubWF0Y2hlZFJ1bGVB
dChpKS0+cnVsZSgpLT5wcm9wZXJ0aWVzKCksIHN0YXRlLm1hdGNoZWRSdWxlQXQoaSktPnJ1bGUo
KSwgc3RhdGUubWF0Y2hlZFJ1bGVBdChpKS0+bGlua01hdGNoVHlwZSgpLCBzdGF0ZS5tYXRjaGVk
UnVsZUF0KGkpLT5wcm9wZXJ0eVdoaXRlbGlzdFR5cGUoKSk7CiAgICAgfQogfQogCi12b2lkIFN0
eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwg
Ym9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRB
dXRob3JSdWxlcyhTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQp
CiB7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkgfHwgRU5BQkxFKFNIQURPV19ET00pCiAgICAg
aWYgKCFtX3Njb3BlUmVzb2x2ZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE1hdGNoIHNj
b3BlZCBhdXRob3IgcnVsZXMgYnkgdHJhdmVyc2luZyB0aGUgc2NvcGVkIGVsZW1lbnQgc3RhY2sg
KHJlYnVpbGQgaXQgaWYgaXQgZ290IGluY29uc2lzdGVudCkuCi0gICAgaWYgKG1fc2NvcGVSZXNv
bHZlci0+aGFzU2NvcGVkU3R5bGVzKCkgJiYgbV9zY29wZVJlc29sdmVyLT5lbnN1cmVTdGFja0Nv
bnNpc3RlbmN5KG1fZWxlbWVudCkpIHsKLSAgICAgICAgYm9vbCBhcHBseUF1dGhvclN0eWxlcyA9
IG1fZWxlbWVudC0+dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9yU3R5bGVzKCk7CisgICAgaWYgKG1f
c2NvcGVSZXNvbHZlci0+aGFzU2NvcGVkU3R5bGVzKCkgJiYgbV9zY29wZVJlc29sdmVyLT5lbnN1
cmVTdGFja0NvbnNpc3RlbmN5KHN0YXRlLmVsZW1lbnQoKSkpIHsKKyAgICAgICAgYm9vbCBhcHBs
eUF1dGhvclN0eWxlcyA9IHN0YXRlLmVsZW1lbnQoKS0+dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9y
U3R5bGVzKCk7CiAgICAgICAgIGJvb2wgZG9jdW1lbnRTY29wZSA9IHRydWU7CiAgICAgICAgIHVu
c2lnbmVkIHNjb3BlU2l6ZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tTaXplKCk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzY29wZVNpemU7ICsraSkgewotICAgICAgICAgICAg
bV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIHN0YXRlLm1hdGNoZWRSdWxlcygp
LmNsZWFyKCk7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVz
dWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKICAgICAgICAgICAgIGNvbnN0IFN0
eWxlU2NvcGVSZXNvbHZlcjo6U3RhY2tGcmFtZSYgZnJhbWUgPSBtX3Njb3BlUmVzb2x2ZXItPnN0
YWNrRnJhbWVBdChpKTsKQEAgLTc1NCwxMzcgKzczNiwxMzEgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVk
ZUVtcHQKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QoZnJhbWUubV9ydWxlU2V0LCBpbmNs
dWRlRW1wdHlSdWxlcywgZnJhbWUubV9zY29wZSk7CiAgICAgICAgICAgICBSdWxlUmFuZ2UgcnVs
ZVJhbmdlID0gcmVzdWx0LnJhbmdlcy5hdXRob3JSdWxlUmFuZ2UoKTsKLSAgICAgICAgICAgIGNv
bGxlY3RNYXRjaGluZ1J1bGVzKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICAgICAgICAg
IGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsK
LSAgICAgICAgICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworICAgICAg
ICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoZnJhbWUubV9ydWxlU2V0LCBzdGF0ZSwgcnVsZVJh
bmdlLCBmcmFtZS5tX3Njb3BlKTsKKyAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9y
UmVnaW9uKGZyYW1lLm1fcnVsZVNldCwgc3RhdGUsIHJ1bGVSYW5nZSwgZnJhbWUubV9zY29wZSk7
CisgICAgICAgICAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoc3RhdGUsIHJlc3VsdCk7
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtYXRjaEhvc3RSdWxlcyhyZXN1bHQsIGluY2x1ZGVF
bXB0eVJ1bGVzKTsKKyAgICBtYXRjaEhvc3RSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKICNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKLSAgICBV
TlVTRURfUEFSQU0oaW5jbHVkZUVtcHR5UnVsZXMpOwogI2VuZGlmCiB9CiAKLWlubGluZSBib29s
IFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKQor
aW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hv
c3RSdWxlcyhFbGVtZW50KiBlbGVtZW50KQogewogI2lmIEVOQUJMRShTSEFET1dfRE9NKQotICAg
IHJldHVybiBtX3Njb3BlUmVzb2x2ZXIgJiYgbV9zY29wZVJlc29sdmVyLT5zdHlsZVNoYXJpbmdD
YW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKG1fZWxlbWVudCk7CisgICAgcmV0dXJuIG1fc2NvcGVS
ZXNvbHZlciAmJiBtX3Njb3BlUmVzb2x2ZXItPnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNI
b3N0UnVsZXMoZWxlbWVudCk7CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogfQog
Ci12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQs
IGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1
bGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCkKIHsKICNp
ZiBFTkFCTEUoU0hBRE9XX0RPTSkKICAgICBBU1NFUlQobV9zY29wZVJlc29sdmVyKTsKIAotICAg
IG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIo
KTsKICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9w
ZXJ0aWVzLnNpemUoKSAtIDE7CiAKICAgICBWZWN0b3I8UnVsZVNldCo+IG1hdGNoZWRSdWxlczsK
LSAgICBtX3Njb3BlUmVzb2x2ZXItPm1hdGNoSG9zdFJ1bGVzKG1fZWxlbWVudCwgbWF0Y2hlZFJ1
bGVzKTsKKyAgICBtX3Njb3BlUmVzb2x2ZXItPm1hdGNoSG9zdFJ1bGVzKHN0YXRlLmVsZW1lbnQo
KSwgbWF0Y2hlZFJ1bGVzKTsKICAgICBpZiAobWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0Y2hlZFJ1bGVzLnNpemUoKTsg
aSA+IDA7IC0taSkgewogICAgICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdl
cy5hdXRob3JSdWxlUmFuZ2UoKTsKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoTWF0Y2hS
ZXF1ZXN0KG1hdGNoZWRSdWxlcy5hdChpLTEpLCBpbmNsdWRlRW1wdHlSdWxlcywgbV9lbGVtZW50
KSwgcnVsZVJhbmdlKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0Y2hlZFJ1bGVz
LmF0KGktMSksIHN0YXRlLCBydWxlUmFuZ2UsIHN0YXRlLmVsZW1lbnQoKSk7CiAgICAgfQotICAg
IHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworICAgIHNvcnRBbmRUcmFuc2Zl
ck1hdGNoZWRSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKICNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKLSAgICBVTlVTRURfUEFSQU0oaW5jbHVk
ZUVtcHR5UnVsZXMpOwogI2VuZGlmCiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRo
b3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQordm9p
ZCBTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0
ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCkKIHsKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwor
ICAgIHN0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0
QXV0aG9yUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogCi0gICAg
aWYgKCFtX2VsZW1lbnQpCisgICAgaWYgKCFzdGF0ZS5lbGVtZW50KCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIE1hdGNoIGdsb2JhbCBhdXRob3IgcnVsZXMuCi0gICAgTWF0Y2hSZXF1ZXN0
IG1hdGNoUmVxdWVzdChtX2F1dGhvclN0eWxlLmdldCgpLCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAg
ICAgUnVsZVJhbmdlIHJ1bGVSYW5nZSA9IHJlc3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7
Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAg
IGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsK
LSAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKKyAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCBzdGF0ZSwgcnVsZVJhbmdlKTsKKyAgICBj
b2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihtX2F1dGhvclN0eWxlLmdldCgpLCBzdGF0ZSwg
cnVsZVJhbmdlKTsKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoc3RhdGUsIHJlc3Vs
dCk7CiAKLSAgICBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKHJlc3VsdCwgaW5jbHVkZUVtcHR5UnVs
ZXMpOworICAgIG1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoc3RhdGUsIHJlc3VsdCk7CiB9CiAKLXZv
aWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9v
bCBpbmNsdWRlRW1wdHlSdWxlcykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMo
U3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0KQogewogICAgIGlm
ICghbV91c2VyU3R5bGUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX21hdGNoZWRSdWxl
cy5jbGVhcigpOworICAgIHN0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAKICAgICByZXN1
bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkg
LSAxOwotICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QobV91c2VyU3R5bGUuZ2V0KCksIGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdl
cy51c2VyUnVsZVJhbmdlKCk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0Y2hSZXF1ZXN0
LCBydWxlUmFuZ2UpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1hdGNoUmVx
dWVzdCwgcnVsZVJhbmdlKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtX3VzZXJTdHlsZS5n
ZXQoKSwgc3RhdGUsIHJ1bGVSYW5nZSk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdp
b24obV91c2VyU3R5bGUuZ2V0KCksIHN0YXRlLCBydWxlUmFuZ2UpOwogCi0gICAgc29ydEFuZFRy
YW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7CisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1
bGVzKHN0YXRlLCByZXN1bHQpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxl
cyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBSdWxlU2V0KiBydWxlcykKK3ZvaWQgU3R5bGVSZXNvbHZl
cjo6bWF0Y2hVQVJ1bGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJl
c3VsdCwgUnVsZVNldCogcnVsZXMpCiB7Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAg
ICBzdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOwogICAgIAogICAgIHJlc3VsdC5yYW5nZXMu
bGFzdFVBUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogICAgIFJ1
bGVSYW5nZSBydWxlUmFuZ2UgPSByZXN1bHQucmFuZ2VzLlVBUnVsZVJhbmdlKCk7Ci0gICAgY29s
bGVjdE1hdGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KHJ1bGVzKSwgcnVsZVJhbmdlKTsKKyAgICBj
b2xsZWN0TWF0Y2hpbmdSdWxlcyhydWxlcywgc3RhdGUsIHJ1bGVSYW5nZSk7CiAKLSAgICBzb3J0
QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRj
aGVkUnVsZXMoc3RhdGUsIHJlc3VsdCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBjb25z
dCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVJhbmdlJiBydWxlUmFuZ2UpCit2b2lk
IFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8
UnVsZURhdGE+KiBydWxlcywgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBSdWxlUmFuZ2UmIHJ1
bGVSYW5nZSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCiB7CiAgICAgaWYgKCFydWxlcykK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBtYXkgZW5kIHVwIGxv
b2tpbmcgdXAgc3R5bGUgZm9yIHJhbmRvbSBlbGVtZW50cyBpbiB0aGUgbWlkZGxlIG9mIGEgcmVj
dXJzaXZlIHRyZWUgcmVzb2x2ZS4KLSAgICAvLyBBbmNlc3RvciBpZGVudGlmaWVyIGZpbHRlciB3
b24ndCBiZSB1cC10by1kYXRlIGluIHRoYXQgY2FzZSBhbmQgd2UgY2FuJ3QgdXNlIHRoZSBmYXN0
IHBhdGguCi0gICAgYm9vbCBjYW5Vc2VGYXN0UmVqZWN0ID0gbV9zZWxlY3RvckZpbHRlci5wYXJl
bnRTdGFja0lzQ29uc2lzdGVudChtX3BhcmVudE5vZGUpOwotCiAgICAgdW5zaWduZWQgc2l6ZSA9
IHJ1bGVzLT5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewogICAgICAgICBjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEgPSBydWxlcy0+YXQoaSk7Ci0gICAg
ICAgIGlmIChjYW5Vc2VGYXN0UmVqZWN0ICYmIG1fc2VsZWN0b3JGaWx0ZXIuZmFzdFJlamVjdFNl
bGVjdG9yPFJ1bGVEYXRhOjptYXhpbXVtSWRlbnRpZmllckNvdW50PihydWxlRGF0YS5kZXNjZW5k
YW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCkpKQorICAgICAgICBpZiAoc3RhdGUuY2FuVXNl
RmFzdFJlamVjdCgpICYmIG1fc2VsZWN0b3JGaWx0ZXIuZmFzdFJlamVjdFNlbGVjdG9yPFJ1bGVE
YXRhOjptYXhpbXVtSWRlbnRpZmllckNvdW50PihydWxlRGF0YS5kZXNjZW5kYW50U2VsZWN0b3JJ
ZGVudGlmaWVySGFzaGVzKCkpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgU3R5
bGVSdWxlKiBydWxlID0gcnVsZURhdGEucnVsZSgpOwogICAgICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTWF0
Y2hSdWxlKGRvY3VtZW50KCksIHJ1bGUsIHRoaXMpOwotICAgICAgICBpZiAocnVsZU1hdGNoZXMo
cnVsZURhdGEsIG1hdGNoUmVxdWVzdC5zY29wZSkpIHsKKyAgICAgICAgUHNldWRvSWQgZHluYW1p
Y1BzZXVkbyA9IE5PUFNFVURPOworICAgICAgICBpZiAocnVsZU1hdGNoZXMoc3RhdGUsIHJ1bGVE
YXRhLCBzY29wZSwgZHluYW1pY1BzZXVkbykpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBydWxl
IGhhcyBubyBwcm9wZXJ0aWVzIHRvIGFwcGx5LCB0aGVuIGlnbm9yZSBpdCBpbiB0aGUgbm9uLWRl
YnVnIG1vZGUuCiAgICAgICAgICAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVz
ID0gcnVsZS0+cHJvcGVydGllcygpOwotICAgICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzIHx8IChw
cm9wZXJ0aWVzLT5pc0VtcHR5KCkgJiYgIW1hdGNoUmVxdWVzdC5pbmNsdWRlRW1wdHlSdWxlcykp
IHsKKyAgICAgICAgICAgIGlmICghcHJvcGVydGllcyB8fCAocHJvcGVydGllcy0+aXNFbXB0eSgp
ICYmICFzdGF0ZS5pbmNsdWRlRW1wdHlSdWxlcygpKSkgewogICAgICAgICAgICAgICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOwogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gRklYTUU6
IEV4cG9zaW5nIHRoZSBub24tc3RhbmRhcmQgZ2V0TWF0Y2hlZENTU1J1bGVzIEFQSSB0byB3ZWIg
aXMgdGhlIG9ubHkgcmVhc29uIHRoaXMgaXMgbmVlZGVkLgotICAgICAgICAgICAgaWYgKG1fc2Ft
ZU9yaWdpbk9ubHkgJiYgIXJ1bGVEYXRhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSkgewor
ICAgICAgICAgICAgaWYgKHN0YXRlLnNhbWVPcmlnaW5Pbmx5KCkgJiYgIXJ1bGVEYXRhLmhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4oKSkgewogICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOwogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gSWYgd2UncmUgbWF0Y2hp
bmcgbm9ybWFsIHJ1bGVzLCBzZXQgYSBwc2V1ZG8gYml0IGlmCiAgICAgICAgICAgICAvLyB3ZSBy
ZWFsbHkganVzdCBtYXRjaGVkIGEgcHNldWRvLWVsZW1lbnQuCi0gICAgICAgICAgICBpZiAobV9k
eW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIG1fcHNldWRvU3R5bGUgPT0gTk9QU0VVRE8pIHsK
LSAgICAgICAgICAgICAgICBpZiAobV9zZWxlY3RvckNoZWNrZXIubW9kZSgpID09IFNlbGVjdG9y
Q2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7CisgICAgICAgICAgICBpZiAoZHluYW1pY1BzZXVk
byAhPSBOT1BTRVVETyAmJiBzdGF0ZS5wc2V1ZG9TdHlsZSgpID09IE5PUFNFVURPKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHN0YXRlLm1vZGUoKSA9PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3Rp
bmdSdWxlcykgewogICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChtX2R5bmFtaWNQc2V1
ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKLSAgICAgICAgICAgICAgICAgICAgbV9zdHls
ZS0+c2V0SGFzUHNldWRvU3R5bGUobV9keW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZHluYW1pY1BzZXVkbyA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEKQorICAgICAgICAgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXNQc2V1ZG9TdHlsZShkeW5hbWljUHNldWRvKTsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIG91ciBmaXJz
dC9sYXN0IHJ1bGUgaW5kaWNlcyBpbiB0aGUgbWF0Y2hlZCBydWxlcyBhcnJheS4KICAgICAgICAg
ICAgICAgICArK3J1bGVSYW5nZS5sYXN0UnVsZUluZGV4OwpAQCAtODkyLDcgKzg2OCw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3Rv
cjxSdWxlRGF0YT4qIHJ1bGVzLCBjCiAgICAgICAgICAgICAgICAgICAgIHJ1bGVSYW5nZS5maXJz
dFJ1bGVJbmRleCA9IHJ1bGVSYW5nZS5sYXN0UnVsZUluZGV4OwogCiAgICAgICAgICAgICAgICAg
Ly8gQWRkIHRoaXMgcnVsZSB0byBvdXIgbGlzdCBvZiBtYXRjaGVkIHJ1bGVzLgotICAgICAgICAg
ICAgICAgIGFkZE1hdGNoZWRSdWxlKCZydWxlRGF0YSk7CisgICAgICAgICAgICAgICAgYWRkTWF0
Y2hlZFJ1bGUoc3RhdGUsICZydWxlRGF0YSk7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCB0cnVlKTsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTkwOCwzMSArODg0LDMzIEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBjb21wYXJlUnVsZXMoY29uc3QgUnVsZURhdGEqIHIxLCBjb25zdCBSdWxlRGF0
YSogcjIpCiAgICAgcmV0dXJuIChzcGVjaWZpY2l0eTEgPT0gc3BlY2lmaWNpdHkyKSA/IHIxLT5w
b3NpdGlvbigpIDwgcjItPnBvc2l0aW9uKCkgOiBzcGVjaWZpY2l0eTEgPCBzcGVjaWZpY2l0eTI7
CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRSdWxlcygpCit2b2lkIFN0eWxl
UmVzb2x2ZXI6OnNvcnRNYXRjaGVkUnVsZXMoVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+JiBt
YXRjaGVkUnVsZXMpCiB7Ci0gICAgc3RkOjpzb3J0KG1fbWF0Y2hlZFJ1bGVzLmJlZ2luKCksIG1f
bWF0Y2hlZFJ1bGVzLmVuZCgpLCBjb21wYXJlUnVsZXMpOworICAgIHN0ZDo6c29ydChtYXRjaGVk
UnVsZXMuYmVnaW4oKSwgbWF0Y2hlZFJ1bGVzLmVuZCgpLCBjb21wYXJlUnVsZXMpOwogfQogCi12
b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9v
bCBpbmNsdWRlU01JTFByb3BlcnRpZXMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVs
ZXMoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGlu
Y2x1ZGVTTUlMUHJvcGVydGllcykKIHsKLSAgICBtYXRjaFVBUnVsZXMocmVzdWx0KTsKKyAgICBt
YXRjaFVBUnVsZXMoc3RhdGUsIHJlc3VsdCk7CisgICAgLy8gLi4uLiBiYWQ/CisgICAgc3RhdGUu
c2V0SW5jbHVkZUVtcHR5UnVsZXMoZmFsc2UpOwogCiAgICAgLy8gTm93IHdlIGNoZWNrIHVzZXIg
c2hlZXQgcnVsZXMuCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAg
ICBtYXRjaFVzZXJSdWxlcyhyZXN1bHQsIGZhbHNlKTsKLSAgICAgICAgCisgICAgICAgIG1hdGNo
VXNlclJ1bGVzKHN0YXRlLCByZXN1bHQpOworCiAgICAgLy8gTm93IGNoZWNrIGF1dGhvciBydWxl
cywgYmVnaW5uaW5nIGZpcnN0IHdpdGggcHJlc2VudGF0aW9uYWwgYXR0cmlidXRlcyBtYXBwZWQg
ZnJvbSBIVE1MLgotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQpIHsKLSAgICAgICAgYWRkRWxlbWVu
dFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3R5bGVkRWxlbWVudC0+cHJlc2VudGF0aW9uQXR0
cmlidXRlU3R5bGUoKSk7CisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQoKSkgeworICAgICAg
ICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGUuc3R5bGVkRWxlbWVudCgp
LT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKIAogICAgICAgICAvLyBOb3cgd2UgY2hl
Y2sgYWRkaXRpb25hbCBtYXBwZWQgZGVjbGFyYXRpb25zLgogICAgICAgICAvLyBUYWJsZXMgYW5k
IHRhYmxlIGNlbGxzIHNoYXJlIGFuIGFkZGl0aW9uYWwgbWFwcGVkIHJ1bGUgdGhhdCBtdXN0IGJl
IGFwcGxpZWQKICAgICAgICAgLy8gYWZ0ZXIgYWxsIGF0dHJpYnV0ZXMsIHNpbmNlIHRoZWlyIG1h
cHBlZCBzdHlsZSBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgb2YgbXVsdGlwbGUgYXR0cmlidXRlcy4K
LSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3R5bGVkRWxlbWVu
dC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOworICAgICAgICBhZGRF
bGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5hZGRp
dGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CiAKLSAgICAgICAgaWYgKG1fc3R5
bGVkRWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50
KCktPmlzSFRNTEVsZW1lbnQoKSkgewogICAgICAgICAgICAgYm9vbCBpc0F1dG87Ci0gICAgICAg
ICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSB0b0hUTUxFbGVtZW50KG1fc3R5bGVk
RWxlbWVudCktPmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7Cisg
ICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSB0b0hUTUxFbGVtZW50KHN0
YXRlLmVsZW1lbnQoKSktPmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0
byk7CiAgICAgICAgICAgICBpZiAoaXNBdXRvKQogICAgICAgICAgICAgICAgIGFkZE1hdGNoZWRQ
cm9wZXJ0aWVzKHJlc3VsdCwgdGV4dERpcmVjdGlvbiA9PSBMVFIgPyBsZWZ0VG9SaWdodERlY2xh
cmF0aW9uKCkgOiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkpOwogICAgICAgICB9CkBAIC05NDAs
MjEgKzkxOCwyMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1
bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZQogICAgIAogICAgIC8vIENoZWNr
IHRoZSBydWxlcyBpbiBhdXRob3Igc2hlZXRzIG5leHQuCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JB
bmRVc2VyU3R5bGVzKQotICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHJlc3VsdCwgZmFsc2UpOwor
ICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHN0YXRlLCByZXN1bHQpOwogCiAgICAgLy8gTm93IGNo
ZWNrIG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRlLgotICAgIGlmIChtX21hdGNoQXV0aG9yQW5k
VXNlclN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQgJiYgbV9zdHlsZWRFbGVtZW50LT5pbmxpbmVT
dHlsZSgpKSB7CisgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIHN0YXRlLnN0
eWxlZEVsZW1lbnQoKSAmJiBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlubGluZVN0eWxlKCkpIHsK
ICAgICAgICAgLy8gSW5saW5lIHN0eWxlIGlzIGltbXV0YWJsZSBhcyBsb25nIGFzIHRoZXJlIGlz
IG5vIENTU09NIHdyYXBwZXIuCiAgICAgICAgIC8vIEZJWE1FOiBNZWRpYSBjb250cm9sIHNoYWRv
dyB0cmVlcyBzZWVtIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCBjYWNoaW5nLgotICAgICAgICBib29s
IGlzSW5saW5lU3R5bGVDYWNoZWFibGUgPSAhbV9zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgp
LT5pc011dGFibGUoKSAmJiAhbV9zdHlsZWRFbGVtZW50LT5pc0luU2hhZG93VHJlZSgpOworICAg
ICAgICBib29sIGlzSW5saW5lU3R5bGVDYWNoZWFibGUgPSAhc3RhdGUuc3R5bGVkRWxlbWVudCgp
LT5pbmxpbmVTdHlsZSgpLT5pc011dGFibGUoKSAmJiAhc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5p
c0luU2hhZG93VHJlZSgpOwogICAgICAgICAvLyBGSVhNRTogQ29uc3RpZnkuCi0gICAgICAgIGFk
ZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0
eWxlKCksIGlzSW5saW5lU3R5bGVDYWNoZWFibGUpOworICAgICAgICBhZGRFbGVtZW50U3R5bGVQ
cm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpLCBp
c0lubGluZVN0eWxlQ2FjaGVhYmxlKTsKICAgICB9CiAKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8v
IE5vdyBjaGVjayBTTUlMIGFuaW1hdGlvbiBvdmVycmlkZSBzdHlsZS4KLSAgICBpZiAoaW5jbHVk
ZVNNSUxQcm9wZXJ0aWVzICYmIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3R5bGVk
RWxlbWVudCAmJiBtX3N0eWxlZEVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKQotICAgICAgICBhZGRF
bGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1f
c3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpLCBmYWxzZSAvKiBp
c0NhY2hlYWJsZSAqLyk7CisgICAgaWYgKGluY2x1ZGVTTUlMUHJvcGVydGllcyAmJiBtX21hdGNo
QXV0aG9yQW5kVXNlclN0eWxlcyAmJiBzdGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgc3RhdGUuZWxl
bWVudCgpLT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGll
cyhyZXN1bHQsIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihzdGF0ZS5lbGVtZW50KCkpLT5hbmlt
YXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSwgZmFsc2UgLyogaXNDYWNoZWFibGUgKi8pOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oaW5jbHVkZVNNSUxQcm9wZXJ0aWVzKTsKICNlbmRpZgpAQCAt
OTY5LDQ3ICs5NDcsMzggQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjbGFzc05hbWVzQWZmZWN0ZWRC
eVJ1bGVzKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXMKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KEVsZW1lbnQq
IGUpCitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0RWxlbWVudChTdHlsZVJlc29sdmVT
dGF0ZSYgc3RhdGUsIEVsZW1lbnQqIGUpCiB7Ci0gICAgaWYgKG1fZWxlbWVudCAhPSBlKSB7Ci0g
ICAgICAgIG1fZWxlbWVudCA9IGU7Ci0gICAgICAgIG1fc3R5bGVkRWxlbWVudCA9IG1fZWxlbWVu
dCAmJiBtX2VsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8U3R5bGVkRWxl
bWVudCo+KG1fZWxlbWVudCkgOiAwOwotICAgICAgICBtX2VsZW1lbnRMaW5rU3RhdGUgPSBkb2N1
bWVudCgpLT52aXNpdGVkTGlua1N0YXRlKCktPmRldGVybWluZUxpbmtTdGF0ZShtX2VsZW1lbnQp
OwotICAgICAgICBpZiAoZSAmJiBlID09IGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgp
KSB7Ci0gICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXREaXJlY3Rpb25TZXRPbkRvY3VtZW50
RWxlbWVudChmYWxzZSk7Ci0gICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9k
ZVNldE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsKLSAgICAgICAgfQorICAgIHN0YXRlLnNldEVs
ZW1lbnQoZSk7CisgICAgc3RhdGUuc2V0RWxlbWVudExpbmtTdGF0ZShkb2N1bWVudCgpLT52aXNp
dGVkTGlua1N0YXRlKCktPmRldGVybWluZUxpbmtTdGF0ZShlKSk7CisgICAgaWYgKGUgJiYgZSA9
PSBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkgeworICAgICAgICBlLT5kb2N1bWVu
dCgpLT5zZXREaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudChmYWxzZSk7CisgICAgICAgIGUt
PmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOwog
ICAgIH0KIH0KIAotaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEZvclN0eWxlUmVzb2x2
ZShFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFBzZXVkb0lkIHBzZXVkb0lE
KQoraW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEZvclN0eWxlUmVzb2x2ZShTdHlsZVJl
c29sdmVTdGF0ZSYgc3RhdGUsIEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkK
IHsKLSAgICBtX3BzZXVkb1N0eWxlID0gcHNldWRvSUQ7Ci0KICAgICBpZiAoZSkgewogICAgICAg
ICBOb2RlUmVuZGVyaW5nQ29udGV4dCBjb250ZXh0KGUpOwotICAgICAgICBtX3BhcmVudE5vZGUg
PSBjb250ZXh0LnBhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHlsZSgpOwotICAgICAgICBtX3Bh
cmVudFN0eWxlID0gY29udGV4dC5yZXNldFN0eWxlSW5oZXJpdGFuY2UoKSA/IDAgOgorICAgICAg
ICBzdGF0ZS5zZXRQYXJlbnROb2RlKGNvbnRleHQucGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0
eWxlKCkpOworICAgICAgICBzdGF0ZS5zZXRQYXJlbnRTdHlsZShjb250ZXh0LnJlc2V0U3R5bGVJ
bmhlcml0YW5jZSgpID8gMCA6CiAgICAgICAgICAgICBwYXJlbnRTdHlsZSA/IHBhcmVudFN0eWxl
IDoKLSAgICAgICAgICAgIG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUo
KSA6IDA7Ci0gICAgICAgIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50ID0gY29udGV4dC5p
bnNlcnRpb25Qb2ludCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fcGFyZW50Tm9kZSA9IDA7
Ci0gICAgICAgIG1fcGFyZW50U3R5bGUgPSBwYXJlbnRTdHlsZTsKLSAgICAgICAgbV9kaXN0cmli
dXRlZFRvSW5zZXJ0aW9uUG9pbnQgPSBmYWxzZTsKLSAgICB9CisgICAgICAgICAgICBzdGF0ZS5w
YXJlbnROb2RlKCkgPyBzdGF0ZS5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCkgOiAwKTsKKyAg
ICAgICAgc3RhdGUuc2V0RGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KGNvbnRleHQuaW5zZXJ0
aW9uUG9pbnQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIHN0YXRlLnNldFBhcmVudFN0eWxlKHBh
cmVudFN0eWxlKTsKIAorICAgIC8vIEluIHNvbWUgY2FzZXMgd2UgbWF5IGVuZCB1cCBsb29raW5n
IHVwIHN0eWxlIGZvciByYW5kb20gZWxlbWVudHMgaW4gdGhlIG1pZGRsZSBvZiBhIHJlY3Vyc2l2
ZSB0cmVlIHJlc29sdmUuCisgICAgLy8gQW5jZXN0b3IgaWRlbnRpZmllciBmaWx0ZXIgd29uJ3Qg
YmUgdXAtdG8tZGF0ZSBpbiB0aGF0IGNhc2UgYW5kIHdlIGNhbid0IHVzZSB0aGUgZmFzdCBwYXRo
LgorICAgIHN0YXRlLnNldENhblVzZUZhc3RSZWplY3QobV9zZWxlY3RvckZpbHRlci5wYXJlbnRT
dGFja0lzQ29uc2lzdGVudChzdGF0ZS5wYXJlbnROb2RlKCkpKTsKKyAgICAKICAgICBOb2RlKiBk
b2NFbGVtZW50ID0gZSA/IGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpIDogMDsKICAg
ICBSZW5kZXJTdHlsZSogZG9jU3R5bGUgPSBkb2N1bWVudCgpLT5yZW5kZXJTdHlsZSgpOwotICAg
IG1fcm9vdEVsZW1lbnRTdHlsZSA9IGRvY0VsZW1lbnQgJiYgZSAhPSBkb2NFbGVtZW50ID8gZG9j
RWxlbWVudC0+cmVuZGVyU3R5bGUoKSA6IGRvY1N0eWxlOworICAgIHN0YXRlLnNldFJvb3RFbGVt
ZW50U3R5bGUoZG9jRWxlbWVudCAmJiBlICE9IGRvY0VsZW1lbnQgPyBkb2NFbGVtZW50LT5yZW5k
ZXJTdHlsZSgpIDogZG9jU3R5bGUpOwogCi0gICAgbV9zdHlsZSA9IDA7Ci0KLSAgICBtX3BlbmRp
bmdJbWFnZVByb3BlcnRpZXMuY2xlYXIoKTsKLQotICAgIG1fcnVsZUxpc3QgPSAwOwotCi0gICAg
bV9mb250RGlydHkgPSBmYWxzZTsKKyAgICBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCku
Y2xlYXIoKTsKKyAgICBzdGF0ZS5zZXRGb250RGlydHkoZmFsc2UpOwogfQogCiBzdGF0aWMgY29u
c3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoVGhyZXNob2xkID0gMTA7CkBAIC0xMDYwLDI3ICsxMDI5
LDI0IEBAIE5vZGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFy
ZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VuCiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wg
U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoUnVsZVNl
dCogcnVsZVNldCkKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0
Y2hlc1J1bGVTZXQoRWxlbWVudCogZWxlbWVudCwgUnVsZVNldCogcnVsZVNldCkKIHsKICAgICBp
ZiAoIXJ1bGVTZXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX21hdGNoZWRSdWxlcy5j
bGVhcigpOwogCi0gICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6
OlNoYXJpbmdSdWxlcyk7CiAgICAgaW50IGZpcnN0UnVsZUluZGV4ID0gLTEsIGxhc3RSdWxlSW5k
ZXggPSAtMTsKICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlKGZpcnN0UnVsZUluZGV4LCBsYXN0UnVs
ZUluZGV4KTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QocnVsZVNldCks
IHJ1bGVSYW5nZSk7Ci0gICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNr
ZXI6OlJlc29sdmluZ1N0eWxlKTsKLSAgICBpZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBTdHlsZVJlc29sdmVTdGF0ZSBzdGF0ZTsKKyAgICBzdGF0ZS5zZXRF
bGVtZW50KGVsZW1lbnQpOworICAgIHN0YXRlLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpTaGFy
aW5nUnVsZXMpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVTZXQsIHN0YXRlLCBydWxl
UmFuZ2UpOworICAgIHJldHVybiAhc3RhdGUubWF0Y2hlZFJ1bGVzKCkuaXNFbXB0eSgpOwogfQog
Ci1ib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVt
ZW50KiBlbGVtZW50KSBjb25zdAorYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0
aENvbnRyb2woRWxlbWVudCogZWxlbWVudCwgU3R5bGVkRWxlbWVudCogc2hhcmluZ0NhbmRpZGF0
ZSkgY29uc3QKIHsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiB0aGlzSW5wdXRFbGVtZW50ID0gZWxl
bWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBvdGhlcklucHV0
RWxlbWVudCA9IG1fZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVt
ZW50KiB0aGlzSW5wdXRFbGVtZW50ID0gc2hhcmluZ0NhbmRpZGF0ZS0+dG9JbnB1dEVsZW1lbnQo
KTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBvdGhlcklucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRv
SW5wdXRFbGVtZW50KCk7CiAKICAgICBpZiAoIXRoaXNJbnB1dEVsZW1lbnQgfHwgIW90aGVySW5w
dXRFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTAxLDI1ICsxMDY3LDI1IEBA
IGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKFN0eWxlZEVsZW1l
bnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQtPmlzUmVxdWlyZWQo
KSAhPSBvdGhlcklucHV0RWxlbWVudC0+aXNSZXF1aXJlZCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSAhPSBtX2VsZW1l
bnQtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkpCisgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmlz
RW5hYmxlZEZvcm1Db250cm9sKCkgIT0gZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQtPmlzRGVmYXVsdEJ1dHRv
bkZvckZvcm0oKSAhPSBtX2VsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSkKKyAgICBp
ZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpICE9IGVsZW1lbnQt
PmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKSkg
ewotICAgICAgICBib29sIHdpbGxWYWxpZGF0ZSA9IGVsZW1lbnQtPndpbGxWYWxpZGF0ZSgpOwor
ICAgIGlmIChlbGVtZW50LT5kb2N1bWVudCgpLT5jb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygp
KSB7CisgICAgICAgIGJvb2wgd2lsbFZhbGlkYXRlID0gc2hhcmluZ0NhbmRpZGF0ZS0+d2lsbFZh
bGlkYXRlKCk7CiAKLSAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAhPSBtX2VsZW1lbnQtPndpbGxW
YWxpZGF0ZSgpKQorICAgICAgICBpZiAod2lsbFZhbGlkYXRlICE9IGVsZW1lbnQtPndpbGxWYWxp
ZGF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmICh3aWxsVmFs
aWRhdGUgJiYgKGVsZW1lbnQtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSAhPSBtX2VsZW1l
bnQtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkpCisgICAgICAgIGlmICh3aWxsVmFsaWRh
dGUgJiYgKHNoYXJpbmdDYW5kaWRhdGUtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSAhPSBl
bGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIGlmIChlbGVtZW50LT5pc0luUmFuZ2UoKSAhPSBtX2VsZW1lbnQt
PmlzSW5SYW5nZSgpKQorICAgICAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aXNJblJhbmdlKCkg
IT0gZWxlbWVudC0+aXNJblJhbmdlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAgICAgaWYgKGVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpICE9IG1fZWxlbWVudC0+aXNPdXRPZlJh
bmdlKCkpCisgICAgICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5pc091dE9mUmFuZ2UoKSAhPSBl
bGVtZW50LT5pc091dE9mUmFuZ2UoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKQEAgLTExMzIsMjcgKzEwOTgsMjcgQEAgc3RhdGljIGlubGluZSBib29sIGVsZW1lbnRIYXNE
aXJlY3Rpb25BdXRvKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmV0dXJuIGVsZW1lbnQtPmlzSFRN
TEVsZW1lbnQoKSAmJiB0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5oYXNEaXJlY3Rpb25BdXRvKCk7
CiB9CiAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0
eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFbGVtZW50KiBzaGFyaW5nQ2FuZGlkYXRlKSBj
b25zdAorYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5
bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgRWxlbWVudCog
ZWxlbWVudCwgU3R5bGVkRWxlbWVudCogc2hhcmluZ0NhbmRpZGF0ZSkgY29uc3QKIHsKLSAgICBp
ZiAobV9lbGVtZW50LT5hdHRyaWJ1dGVEYXRhKCkgPT0gc2hhcmluZ0NhbmRpZGF0ZS0+YXR0cmli
dXRlRGF0YSgpKQorICAgIGlmIChlbGVtZW50LT5hdHRyaWJ1dGVEYXRhKCkgPT0gc2hhcmluZ0Nh
bmRpZGF0ZS0+YXR0cmlidXRlRGF0YSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAo
bV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikgIT0gc2hhcmlu
Z0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpKQorICAgIGlm
IChlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikgIT0gc2hhcmlu
Z0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShsYW5n
QXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikpCisg
ICAgaWYgKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5k
aWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAoIW1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKSB7CisgICAgaWYgKCFz
dGF0ZS5lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMoKSkgewogICAgICAgICBpZiAoc2hhcmlu
Z0NhbmRpZGF0ZS0+aGFzQ2xhc3MoKSAmJiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKHNoYXJp
bmdDYW5kaWRhdGUtPmNsYXNzTmFtZXMoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfSBlbHNlIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5oYXNDbGFzcygpKSB7CiAjaWYgRU5BQkxF
KFNWRykKICAgICAgICAgLy8gU1ZHIGVsZW1lbnRzIHJlcXVpcmUgYSAoc2xvdyEpIGdldEF0dHJp
YnV0ZSBjb21wYXJpc2lvbiBiZWNhdXNlICJjbGFzcyIgaXMgYW4gYW5pbWF0YWJsZSBhdHRyaWJ1
dGUgZm9yIFNWRy4KLSAgICAgICAgaWYgKG1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpIHsKLSAg
ICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9IHNoYXJp
bmdDYW5kaWRhdGUtPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpKQorICAgICAgICBpZiAoZWxlbWVu
dC0+aXNTVkdFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50LT5nZXRBdHRyaWJ1
dGUoY2xhc3NBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRy
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZWxzZSB7CiAjZW5k
aWYKLSAgICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmNsYXNzTmFtZXMoKSAhPSBzaGFyaW5nQ2Fu
ZGlkYXRlLT5jbGFzc05hbWVzKCkpCisgICAgICAgICAgICBpZiAoZWxlbWVudC0+Y2xhc3NOYW1l
cygpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmNsYXNzTmFtZXMoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgfQpAQCAtMTE2MCwxMiArMTEy
NiwxMiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxT
dHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoU3R5bGVkRQogICAgIH0gZWxzZQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5wcmVzZW50YXRpb25BdHRyaWJ1
dGVTdHlsZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUtPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
KCkpCisgICAgaWYgKHRvU3R5bGVkRWxlbWVudChlbGVtZW50KS0+cHJlc2VudGF0aW9uQXR0cmli
dXRlU3R5bGUoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHls
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVO
VCkKLSAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKHByb2dyZXNzVGFnKSkgewotICAgICAg
ICBpZiAoc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KG1fZWxlbWVudCktPmlzRGV0
ZXJtaW5hdGUoKSAhPSBzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50Kj4oc2hhcmluZ0Nh
bmRpZGF0ZSktPmlzRGV0ZXJtaW5hdGUoKSkKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShw
cm9ncmVzc1RhZykpIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1l
bnQqPihlbGVtZW50KS0+aXNEZXRlcm1pbmF0ZSgpICE9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVz
c0VsZW1lbnQqPihzaGFyaW5nQ2FuZGlkYXRlKS0+aXNEZXRlcm1pbmF0ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICNlbmRpZgpAQCAtMTE3Myw1OCArMTEzOSw1OSBAQCBi
b29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVj
dGluZ0F0dHJpYnV0ZXMoU3R5bGVkRQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFN0eWxl
UmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50
KSBjb25zdAorYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5
bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBTdHlsZWRFbGVtZW50KiBzaGFyaW5nQ2FuZGlkYXRlKSBj
b25zdAogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7
CisgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRlLmVsZW1lbnQoKTsKKyAgICBSZW5kZXJTdHls
ZSogc3R5bGUgPSBzaGFyaW5nQ2FuZGlkYXRlLT5yZW5kZXJTdHlsZSgpOwogCiAgICAgaWYgKCFz
dHlsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChzdHlsZS0+dW5pcXVlKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+dGFnUU5hbWUoKSAhPSBtX2Vs
ZW1lbnQtPnRhZ1FOYW1lKCkpCisgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPnRhZ1FOYW1lKCkg
IT0gZWxlbWVudC0+dGFnUU5hbWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChl
bGVtZW50LT5pbmxpbmVTdHlsZSgpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5pbmxpbmVT
dHlsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPm5lZWRzU3R5
bGVSZWNhbGMoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+bmVlZHNTdHlsZVJlY2FsYygp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjaWYgRU5BQkxFKFNWRykKLSAgICBpZiAoZWxlbWVu
dC0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGVsZW1lbnQpLT5h
bmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+
aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGVsZW1lbnQpLT5hbmlt
YXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlm
Ci0gICAgaWYgKGVsZW1lbnQtPmlzTGluaygpICE9IG1fZWxlbWVudC0+aXNMaW5rKCkpCisgICAg
aWYgKHNoYXJpbmdDYW5kaWRhdGUtPmlzTGluaygpICE9IGVsZW1lbnQtPmlzTGluaygpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmhvdmVyZWQoKSAhPSBtX2VsZW1l
bnQtPmhvdmVyZWQoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aG92ZXJlZCgpICE9IGVs
ZW1lbnQtPmhvdmVyZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50
LT5hY3RpdmUoKSAhPSBtX2VsZW1lbnQtPmFjdGl2ZSgpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlk
YXRlLT5hY3RpdmUoKSAhPSBlbGVtZW50LT5hY3RpdmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChlbGVtZW50LT5mb2N1c2VkKCkgIT0gbV9lbGVtZW50LT5mb2N1c2VkKCkpCisg
ICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmZvY3VzZWQoKSAhPSBlbGVtZW50LT5mb2N1c2VkKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+c2hhZG93UHNldWRvSWQo
KSAhPSBtX2VsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCkpCisgICAgaWYgKHNoYXJpbmdDYW5kaWRh
dGUtPnNoYWRvd1BzZXVkb0lkKCkgIT0gZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCkt
PmNzc1RhcmdldCgpKQorICAgIGlmIChlbGVtZW50ID09IHNoYXJpbmdDYW5kaWRhdGUtPmRvY3Vt
ZW50KCktPmNzc1RhcmdldCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFzaGFy
aW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKGVsZW1lbnQp
KQorICAgIGlmICghc2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0
cmlidXRlcyhzdGF0ZSwgZWxlbWVudCwgc2hhcmluZ0NhbmRpZGF0ZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0
ZVN0eWxlKCkgIT0gbV9zdHlsZWRFbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmli
dXRlU3R5bGUoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+YWRkaXRpb25hbFByZXNlbnRh
dGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5hZGRpdGlvbmFs
UHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5z
KGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKKyAgICBpZiAoc2hhcmlu
Z0NhbmRpZGF0ZS0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMoc2hh
cmluZ0NhbmRpZGF0ZS0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkp
CisgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc2hhcmUgc3R5
bGUgZm9yIG9wdGlvbiBhbmQgb3B0Z3JvdXAgd2hlbmV2ZXIgcG9zc2libGUuCiAgICAgLy8gQmVm
b3JlIGRvaW5nIHNvLCB3ZSBuZWVkIHRvIHJlc29sdmUgaXNzdWVzIGluIEhUTUxTZWxlY3RFbGVt
ZW50OjpyZWNhbGNMaXN0SXRlbXMKICAgICAvLyBhbmQgUmVuZGVyTWVudUxpc3Q6OnNldFRleHQu
IFNlZSBhbHNvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODQwNQot
ICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKG9wdGlvblRhZykgfHwgZWxlbWVudC0+aGFzVGFn
TmFtZShvcHRncm91cFRhZykpCisgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmhhc1RhZ05hbWUo
b3B0aW9uVGFnKSB8fCBzaGFyaW5nQ2FuZGlkYXRlLT5oYXNUYWdOYW1lKG9wdGdyb3VwVGFnKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYm9vbCBpc0NvbnRyb2wgPSBlbGVtZW50LT5p
c0Zvcm1Db250cm9sRWxlbWVudCgpOworICAgIGJvb2wgaXNDb250cm9sID0gc2hhcmluZ0NhbmRp
ZGF0ZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKTsKIAotICAgIGlmIChpc0NvbnRyb2wgIT0gbV9l
bGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgIGlmIChpc0NvbnRyb2wgIT0gZWxl
bWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWYgKGlzQ29udHJvbCAmJiAhY2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKGVsZW1lbnQpKQor
ICAgIGlmIChpc0NvbnRyb2wgJiYgIWNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChlbGVtZW50LCBz
aGFyaW5nQ2FuZGlkYXRlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHN0eWxl
LT50cmFuc2l0aW9ucygpIHx8IHN0eWxlLT5hbmltYXRpb25zKCkpCkBAIC0xMjMzLDEwICsxMjAw
LDEwIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxl
ZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogICAgIC8vIFR1cm4gb2ZmIHN0eWxlIHNoYXJpbmcgZm9yIGVsZW1lbnRzIHRoYXQgY2FuIGdh
aW4gbGF5ZXJzIGZvciByZWFzb25zIG91dHNpZGUgb2YgdGhlIHN0eWxlIHN5c3RlbS4KICAgICAv
LyBTZWUgY29tbWVudHMgaW4gUmVuZGVyT2JqZWN0OjpzZXRTdHlsZSgpLgotICAgIGlmIChlbGVt
ZW50LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShmcmFtZVRh
ZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFt
ZShvYmplY3RUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBlbGVtZW50
LT5oYXNUYWdOYW1lKGNhbnZhc1RhZykKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aGFzVGFn
TmFtZShpZnJhbWVUYWcpIHx8IHNoYXJpbmdDYW5kaWRhdGUtPmhhc1RhZ05hbWUoZnJhbWVUYWcp
IHx8IHNoYXJpbmdDYW5kaWRhdGUtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IHNoYXJpbmdDYW5k
aWRhdGUtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSB8fCBzaGFyaW5nQ2FuZGlkYXRlLT5oYXNUYWdO
YW1lKGFwcGxldFRhZykgfHwgc2hhcmluZ0NhbmRpZGF0ZS0+aGFzVGFnTmFtZShjYW52YXNUYWcp
CiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCiAgICAgICAgIC8vIFdpdGggcHJv
eHlpbmcsIHRoZSBtZWRpYSBlbGVtZW50cyBhcmUgYmFja2VkIGJ5IGEgUmVuZGVyRW1iZWRkZWRP
YmplY3QuCi0gICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUodmlkZW9UYWcpIHx8IGVsZW1l
bnQtPmhhc1RhZ05hbWUoYXVkaW9UYWcpCisgICAgICAgIHx8IHNoYXJpbmdDYW5kaWRhdGUtPmhh
c1RhZ05hbWUodmlkZW9UYWcpIHx8IHNoYXJpbmdDYW5kaWRhdGUtPmhhc1RhZ05hbWUoYXVkaW9U
YWcpCiAjZW5kaWYKICAgICAgICAgKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjQ1LDMx
ICsxMjEyLDMxIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50
KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rp
b25BdXRvKGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVu
dC0+aXNMaW5rKCkgJiYgbV9lbGVtZW50TGlua1N0YXRlICE9IHN0eWxlLT5pbnNpZGVMaW5rKCkp
CisgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmlzTGluaygpICYmIHN0YXRlLmVsZW1lbnRMaW5r
U3RhdGUoKSAhPSBzdHlsZS0+aW5zaWRlTGluaygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgLy8gRGVueSBzaGFyaW5nIHN0eWxlcyBiZXR3
ZWVuIFdlYlZUVCBhbmQgbm9uLVdlYlZUVCBub2Rlcy4KLSAgICBpZiAoZWxlbWVudC0+aXNXZWJW
VFRFbGVtZW50KCkgIT0gbV9lbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSkKKyAgICBpZiAoc2hh
cmluZ0NhbmRpZGF0ZS0+aXNXZWJWVFRFbGVtZW50KCkgIT0gZWxlbWVudC0+aXNXZWJWVFRFbGVt
ZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5pc1dlYlZU
VEVsZW1lbnQoKSAmJiBtX2VsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpICYmIHRvV2ViVlRURWxl
bWVudChlbGVtZW50KS0+d2ViVlRUTm9kZVR5cGUoKSAhPSB0b1dlYlZUVEVsZW1lbnQobV9lbGVt
ZW50KS0+d2ViVlRUTm9kZVR5cGUoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aXNXZWJW
VFRFbGVtZW50KCkgJiYgZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYgdG9XZWJWVFRFbGVt
ZW50KGVsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpICE9IHRvV2ViVlRURWxlbWVudChlbGVtZW50
KS0+d2ViVlRUTm9kZVR5cGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9j
dW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCkgfHwgbV9lbGVtZW50ID09
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCkp
CisgICAgaWYgKGVsZW1lbnQgPT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZG9jdW1lbnQoKS0+d2Via2l0
Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCkgfHwgZWxlbWVudCA9PSBlbGVtZW50LT5kb2N1bWVu
dCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBTdHlsZWRFbGVtZW50
KiBTdHlsZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiBub2RlLCB1
bnNpZ25lZCYgY291bnQpIGNvbnN0CitpbmxpbmUgU3R5bGVkRWxlbWVudCogU3R5bGVSZXNvbHZl
cjo6ZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBO
b2RlKiBub2RlLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0CiB7CiAgICAgZm9yICg7IG5vZGU7IG5v
ZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewogICAgICAgICBpZiAoIW5vZGUtPmlzU3R5
bGVkRWxlbWVudCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjYW5TaGFy
ZVN0eWxlV2l0aEVsZW1lbnQoc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpKSkKKyAg
ICAgICAgaWYgKGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChzdGF0ZSwgc3RhdGljX2Nhc3Q8U3R5
bGVkRWxlbWVudCo+KG5vZGUpKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAoY291
bnQrKyA9PSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQpCiAgICAgICAgICAgICByZXR1cm4gMDsKQEAg
LTEyODcsNDAgKzEyNTQsNDEgQEAgc3RhdGljIGlubGluZSBib29sIHBhcmVudEVsZW1lbnRQcmV2
ZW50c1NoYXJpbmcoY29uc3QgRWxlbWVudCogcGFyZW50RWxlbWVudCkKICAgICAgICAgfHwgcGFy
ZW50RWxlbWVudC0+Y2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOwogfQog
Ci1SZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQorUmVuZGVy
U3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKFN0eWxlUmVzb2x2ZVN0YXRl
JiBzdGF0ZSkKIHsKLSAgICBpZiAoIW1fc3R5bGVkRWxlbWVudCB8fCAhbV9wYXJlbnRTdHlsZSkK
KyAgICBpZiAoIXN0YXRlLnN0eWxlZEVsZW1lbnQoKSB8fCAhc3RhdGUucGFyZW50U3R5bGUoKSkK
ICAgICAgICAgcmV0dXJuIDA7CisKICAgICAvLyBJZiB0aGUgZWxlbWVudCBoYXMgaW5saW5lIHN0
eWxlIGl0IGlzIHByb2JhYmx5IHVuaXF1ZS4KLSAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5pbmxp
bmVTdHlsZSgpKQorICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlubGluZVN0eWxlKCkp
CiAgICAgICAgIHJldHVybiAwOwogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKG1fc3R5bGVkRWxl
bWVudC0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3R5bGVk
RWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQorICAgIGlmIChzdGF0ZS5z
dHlsZWRFbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQq
PihzdGF0ZS5zdHlsZWRFbGVtZW50KCkpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKICAgICAvLyBJZHMgc3RvcCBzdHlsZSBzaGFyaW5n
IGlmIHRoZXkgc2hvdyB1cCBpbiB0aGUgc3R5bGVzaGVldHMuCi0gICAgaWYgKG1fc3R5bGVkRWxl
bWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMobV9zdHlsZWRF
bGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAgaWYgKHN0YXRlLnN0
eWxlZEVsZW1lbnQoKS0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMo
c3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKG1f
ZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSkKKyAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRz
U2hhcmluZyhzdGF0ZS5lbGVtZW50KCktPnBhcmVudEVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVy
biAwOwotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkp
CisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQo
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKG1fZWxlbWVudCA9PSBtX2VsZW1lbnQtPmRv
Y3VtZW50KCktPmNzc1RhcmdldCgpKQorICAgIGlmIChzdGF0ZS5lbGVtZW50KCkgPT0gc3RhdGUu
ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChlbGVt
ZW50SGFzRGlyZWN0aW9uQXV0byhtX2VsZW1lbnQpKQorICAgIGlmIChlbGVtZW50SGFzRGlyZWN0
aW9uQXV0byhzdGF0ZS5lbGVtZW50KCkpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIENh
Y2hlIHdoZXRoZXIgbV9lbGVtZW50IGlzIGFmZmVjdGVkIGJ5IGFueSBrbm93biBjbGFzcyBzZWxl
Y3RvcnMuCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIGEgbWVtYmVyIHZhcmlhYmxl
LiBUaGUgc3R5bGUgc2hhcmluZyBjb2RlIGNvdWxkIGJlIGZhY3RvcmVkIG91dCBvZiBTdHlsZVJl
c29sdmVyLgotICAgIG1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzID0gbV9lbGVtZW50ICYm
IG1fZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKG1fZWxl
bWVudC0+Y2xhc3NOYW1lcygpKTsKKyAgICBzdGF0ZS5zZXRFbGVtZW50QWZmZWN0ZWRCeUNsYXNz
UnVsZXMoc3RhdGUuZWxlbWVudCgpICYmIHN0YXRlLmVsZW1lbnQoKS0+aGFzQ2xhc3MoKSAmJiBj
bGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKHN0YXRlLmVsZW1lbnQoKS0+Y2xhc3NOYW1lcygpKSk7
CiAKICAgICAvLyBDaGVjayBwcmV2aW91cyBzaWJsaW5ncyBhbmQgdGhlaXIgY291c2lucy4KICAg
ICB1bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgdW5zaWduZWQgdmlzaXRlZE5vZGVDb3VudCA9IDA7
CiAgICAgU3R5bGVkRWxlbWVudCogc2hhcmVFbGVtZW50ID0gMDsKLSAgICBOb2RlKiBjb3VzaW5M
aXN0ID0gbV9zdHlsZWRFbGVtZW50LT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICBOb2RlKiBjb3Vz
aW5MaXN0ID0gc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICB3
aGlsZSAoY291c2luTGlzdCkgewotICAgICAgICBzaGFyZUVsZW1lbnQgPSBmaW5kU2libGluZ0Zv
clN0eWxlU2hhcmluZyhjb3VzaW5MaXN0LCBjb3VudCk7CisgICAgICAgIHNoYXJlRWxlbWVudCA9
IGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKHN0YXRlLCBjb3VzaW5MaXN0LCBjb3VudCk7CiAg
ICAgICAgIGlmIChzaGFyZUVsZW1lbnQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY291
c2luTGlzdCA9IGxvY2F0ZUNvdXNpbkxpc3QoY291c2luTGlzdC0+cGFyZW50RWxlbWVudCgpLCB2
aXNpdGVkTm9kZUNvdW50KTsKQEAgLTEzMzEsMjEgKzEyOTksMjEgQEAgUmVuZGVyU3R5bGUqIFN0
eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICAvLyBDYW4ndCBzaGFyZSBpZiBzaWJsaW5nIHJ1bGVzIGFwcGx5LiBUaGlzIGlzIGNoZWNrZWQg
YXQgdGhlIGVuZCBhcyBpdCBzaG91bGQgcmFyZWx5IGZhaWwuCi0gICAgaWYgKHN0eWxlU2hhcmlu
Z0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KG1fc2libGluZ1J1bGVTZXQuZ2V0KCkpKQorICAgIGlm
IChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChzdGF0ZS5lbGVtZW50KCksIG1f
c2libGluZ1J1bGVTZXQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICAvLyBDYW4ndCBz
aGFyZSBpZiBhdHRyaWJ1dGUgcnVsZXMgYXBwbHkuCi0gICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRp
ZGF0ZU1hdGNoZXNSdWxlU2V0KG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0LmdldCgpKSkKKyAg
ICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoc3RhdGUuZWxlbWVudCgp
LCBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldC5nZXQoKSkpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIC8vIENhbid0IHNoYXJlIGlmIEBob3N0IEAtcnVsZXMgYXBwbHkuCi0gICAgaWYgKHN0eWxl
U2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKSkKKyAgICBpZiAoc3R5bGVTaGFyaW5n
Q2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhzdGF0ZS5lbGVtZW50KCkpKQogICAgICAgICByZXR1
cm4gMDsKICAgICAvLyBUcmFja2luZyBjaGlsZCBpbmRleCByZXF1aXJlcyB1bmlxdWUgc3R5bGUg
Zm9yIGVhY2ggbm9kZS4gVGhpcyBtYXkgZ2V0IHNldCBieSB0aGUgc2libGluZyBydWxlIG1hdGNo
IGFib3ZlLgotICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKG1fZWxlbWVudC0+
cGFyZW50RWxlbWVudCgpKSkKKyAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhz
dGF0ZS5lbGVtZW50KCktPnBhcmVudEVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiAwOwogICAg
IHJldHVybiBzaGFyZUVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNv
bHZlcjo6bWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCit2b2lkIFN0eWxlUmVzb2x2
ZXI6Om1hdGNoVUFSdWxlcyhTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiBy
ZXN1bHQpCiB7CiAgICAgTWF0Y2hpbmdVQVJ1bGVzU2NvcGUgc2NvcGU7CiAKQEAgLTEzNTQsMTUg
KzEzMjIsMTUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQm
IHJlc3VsdCkKICAgICAgICAgcmVzdWx0LmlzQ2FjaGVhYmxlID0gZmFsc2U7CiAgICAgUnVsZVNl
dCogdXNlckFnZW50U3R5bGVTaGVldCA9IG1fbWVkaXVtLT5tZWRpYVR5cGVNYXRjaFNwZWNpZmlj
KCJwcmludCIpCiAgICAgICAgID8gZGVmYXVsdFByaW50U3R5bGUgOiBkZWZhdWx0U3R5bGU7Ci0g
ICAgbWF0Y2hVQVJ1bGVzKHJlc3VsdCwgdXNlckFnZW50U3R5bGVTaGVldCk7CisgICAgbWF0Y2hV
QVJ1bGVzKHN0YXRlLCByZXN1bHQsIHVzZXJBZ2VudFN0eWxlU2hlZXQpOwogCiAgICAgLy8gSW4g
cXVpcmtzIG1vZGUsIHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhlIHF1aXJrcyB1c2VyIGFnZW50IHNo
ZWV0LgotICAgIGlmICghbV9zZWxlY3RvckNoZWNrZXIuc3RyaWN0UGFyc2luZygpKQotICAgICAg
ICBtYXRjaFVBUnVsZXMocmVzdWx0LCBkZWZhdWx0UXVpcmtzU3R5bGUpOworICAgIGlmIChkb2N1
bWVudCgpLT5pblF1aXJrc01vZGUoKSkKKyAgICAgICAgbWF0Y2hVQVJ1bGVzKHN0YXRlLCByZXN1
bHQsIGRlZmF1bHRRdWlya3NTdHlsZSk7CiAKICAgICAvLyBJZiBkb2N1bWVudCB1c2VzIHZpZXcg
c291cmNlIHN0eWxlcyAoaW4gdmlldyBzb3VyY2UgbW9kZSBvciBpbiB4bWwgdmlld2VyIG1vZGUp
LCB0aGVuIHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhlIHZpZXcgc291cmNlIHN0eWxlIHNoZWV0Lgog
ICAgIGlmIChkb2N1bWVudCgpLT5pc1ZpZXdTb3VyY2UoKSkKLSAgICAgICAgbWF0Y2hVQVJ1bGVz
KHJlc3VsdCwgdmlld1NvdXJjZVN0eWxlKCkpOworICAgICAgICBtYXRjaFVBUnVsZXMoc3RhdGUs
IHJlc3VsdCwgdmlld1NvdXJjZVN0eWxlKCkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRTdHlsZXNG
b3JQYWdpbmF0aW9uTW9kZShQYWdpbmF0aW9uOjpNb2RlIHBhZ2luYXRpb25Nb2RlLCBSZW5kZXJT
dHlsZSogc3R5bGUpCkBAIC0xNTYwLDEwNiArMTUyOCwxMDQgQEAgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIFJl
bmRlclMKICAgICAgICAgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CiAgICAgfQogCi0g
ICAgaW5pdEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlbGVtZW50
LCBkZWZhdWx0UGFyZW50KTsKLSAgICBtX3JlZ2lvbkZvclN0eWxpbmcgPSByZWdpb25Gb3JTdHls
aW5nOwotICAgIGlmIChzaGFyaW5nQmVoYXZpb3IgPT0gQWxsb3dTdHlsZVNoYXJpbmcgJiYgIW1f
ZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzaGFy
ZWRTdHlsZSA9IGxvY2F0ZVNoYXJlZFN0eWxlKCk7CisgICAgU3R5bGVSZXNvbHZlU3RhdGUgc3Rh
dGU7CisgICAgaW5pdEVsZW1lbnQoc3RhdGUsIGVsZW1lbnQpOworICAgIGluaXRGb3JTdHlsZVJl
c29sdmUoc3RhdGUsIGVsZW1lbnQsIGRlZmF1bHRQYXJlbnQpOworICAgIHN0YXRlLnNldFJlZ2lv
bkZvclN0eWxpbmcocmVnaW9uRm9yU3R5bGluZyk7CisKKyAgICBpZiAoc2hhcmluZ0JlaGF2aW9y
ID09IEFsbG93U3R5bGVTaGFyaW5nICYmICFzdGF0ZS5kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9p
bnQoKSkgeworICAgICAgICBSZW5kZXJTdHlsZSogc2hhcmVkU3R5bGUgPSBsb2NhdGVTaGFyZWRT
dHlsZShzdGF0ZSk7CiAgICAgICAgIGlmIChzaGFyZWRTdHlsZSkKICAgICAgICAgICAgIHJldHVy
biBzaGFyZWRTdHlsZTsKICAgICB9CiAKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGNsb25lRm9y
UGFyZW50OworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGU7CiAKLSAgICBpZiAobV9wYXJl
bnRTdHlsZSkgewotICAgICAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAg
ICAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShtX3BhcmVudFN0eWxlLCBpc0F0U2hhZG93Qm91bmRh
cnkoZWxlbWVudCkgPyBSZW5kZXJTdHlsZTo6QXRTaGFkb3dCb3VuZGFyeSA6IFJlbmRlclN0eWxl
OjpOb3RBdFNoYWRvd0JvdW5kYXJ5KTsKKyAgICBpZiAoc3RhdGUucGFyZW50U3R5bGUoKSkgewor
ICAgICAgICBzdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICAgICAgc3R5bGUtPmlu
aGVyaXRGcm9tKHN0YXRlLnBhcmVudFN0eWxlKCksIGlzQXRTaGFkb3dCb3VuZGFyeShlbGVtZW50
KSA/IFJlbmRlclN0eWxlOjpBdFNoYWRvd0JvdW5kYXJ5IDogUmVuZGVyU3R5bGU6Ok5vdEF0U2hh
ZG93Qm91bmRhcnkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fc3R5bGUgPSBkZWZhdWx0U3R5
bGVGb3JFbGVtZW50KCk7Ci0gICAgICAgIGNsb25lRm9yUGFyZW50ID0gUmVuZGVyU3R5bGU6OmNs
b25lKHN0eWxlKCkpOwotICAgICAgICBtX3BhcmVudFN0eWxlID0gY2xvbmVGb3JQYXJlbnQuZ2V0
KCk7CisgICAgICAgIHN0eWxlID0gZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpOworICAgICAgICBj
bG9uZUZvclBhcmVudCA9IFJlbmRlclN0eWxlOjpjbG9uZShzdHlsZS5nZXQoKSk7CisgICAgICAg
IHN0YXRlLnNldFBhcmVudFN0eWxlKGNsb25lRm9yUGFyZW50LmdldCgpKTsKICAgICB9CiAgICAg
Ly8gY29udGVudGVkaXRhYmxlIGF0dHJpYnV0ZSAoaW1wbGVtZW50ZWQgYnkgLXdlYmtpdC11c2Vy
LW1vZGlmeSkgc2hvdWxkCiAgICAgLy8gYmUgcHJvcGFnYXRlZCBmcm9tIHNoYWRvdyBob3N0IHRv
IGRpc3RyaWJ1dGVkIG5vZGUuCi0gICAgaWYgKG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50
KSB7CisgICAgaWYgKHN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCgpKSB7CiAgICAg
ICAgIGlmIChFbGVtZW50KiBwYXJlbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAg
ICAgICAgICAgIGlmIChSZW5kZXJTdHlsZSogc3R5bGVPZlNoYWRvd0hvc3QgPSBwYXJlbnQtPnJl
bmRlclN0eWxlKCkpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0VXNlck1vZGlmeShzdHls
ZU9mU2hhZG93SG9zdC0+dXNlck1vZGlmeSgpKTsKKyAgICAgICAgICAgICAgICBzdHlsZS0+c2V0
VXNlck1vZGlmeShzdHlsZU9mU2hhZG93SG9zdC0+dXNlck1vZGlmeSgpKTsKICAgICAgICAgfQog
ICAgIH0KIAogICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSkgewotICAgICAgICBtX3N0eWxlLT5z
ZXRJc0xpbmsodHJ1ZSk7Ci0gICAgICAgIEVJbnNpZGVMaW5rIGxpbmtTdGF0ZSA9IG1fZWxlbWVu
dExpbmtTdGF0ZTsKLSAgICAgICAgaWYgKG1fZWxlbWVudExpbmtTdGF0ZSAhPSBOb3RJbnNpZGVM
aW5rKSB7CisgICAgICAgIHN0eWxlLT5zZXRJc0xpbmsodHJ1ZSk7CisgICAgICAgIEVJbnNpZGVM
aW5rIGxpbmtTdGF0ZSA9IHN0YXRlLmVsZW1lbnRMaW5rU3RhdGUoKTsKKyAgICAgICAgaWYgKGxp
bmtTdGF0ZSAhPSBOb3RJbnNpZGVMaW5rKSB7CiAgICAgICAgICAgICBib29sIGZvcmNlVmlzaXRl
ZCA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlbGVtZW50LCBD
U1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZCk7CiAgICAgICAgICAgICBpZiAoZm9yY2VWaXNpdGVk
KQogICAgICAgICAgICAgICAgIGxpbmtTdGF0ZSA9IEluc2lkZVZpc2l0ZWRMaW5rOwogICAgICAg
ICB9Ci0KLSAgICAgICAgbV9zdHlsZS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdGUpOworICAgICAg
ICBzdHlsZS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdGUpOwogICAgIH0KIAogICAgIGVuc3VyZURl
ZmF1bHRTdHlsZVNoZWV0c0ZvckVsZW1lbnQoZWxlbWVudCk7CiAKKyAgICBzdGF0ZS5zZXRTdHls
ZShzdHlsZS5nZXQoKSk7CisKICAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKICAgICBpZiAo
bWF0Y2hpbmdCZWhhdmlvciA9PSBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcykKLSAgICAgICAgbWF0
Y2hVQVJ1bGVzKG1hdGNoUmVzdWx0KTsKKyAgICAgICAgbWF0Y2hVQVJ1bGVzKHN0YXRlLCBtYXRj
aFJlc3VsdCk7CiAgICAgZWxzZQotICAgICAgICBtYXRjaEFsbFJ1bGVzKG1hdGNoUmVzdWx0LCBt
YXRjaGluZ0JlaGF2aW9yICE9IE1hdGNoQWxsUnVsZXNFeGNsdWRpbmdTTUlMKTsKKyAgICAgICAg
bWF0Y2hBbGxSdWxlcyhzdGF0ZSwgbWF0Y2hSZXN1bHQsIG1hdGNoaW5nQmVoYXZpb3IgIT0gTWF0
Y2hBbGxSdWxlc0V4Y2x1ZGluZ1NNSUwpOwogCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyht
YXRjaFJlc3VsdCwgZWxlbWVudCk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhzdGF0ZSwg
bWF0Y2hSZXN1bHQsIGVsZW1lbnQpOwogCiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVj
dCdzIGRpc3BsYXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0g
ICAgYWRqdXN0UmVuZGVyU3R5bGUoc3R5bGUoKSwgbV9wYXJlbnRTdHlsZSwgZWxlbWVudCk7Ci0K
LSAgICBpbml0RWxlbWVudCgwKTsgLy8gQ2xlYXIgb3V0IGZvciB0aGUgbmV4dCByZXNvbHZlLgot
Ci0gICAgaWYgKGNsb25lRm9yUGFyZW50KQotICAgICAgICBtX3BhcmVudFN0eWxlID0gMDsKKyAg
ICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0ZSwgc3R5bGUuZ2V0KCksIHN0YXRlLnBhcmVudFN0eWxl
KCksIGVsZW1lbnQpOwogCiAgICAgZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigp
OwogCiAgICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUuCi0gICAgcmV0dXJuIG1fc3R5bGUucmVs
ZWFzZSgpOworICAgIHJldHVybiBzdHlsZS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5
bGUqIGVsZW1lbnRTdHlsZSwgY29uc3QgU3R5bGVLZXlmcmFtZSoga2V5ZnJhbWUsIEtleWZyYW1l
VmFsdWUmIGtleWZyYW1lVmFsdWUpCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29s
dmVyOjpzdHlsZUZvcktleWZyYW1lKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgY29uc3QgU3R5bGVLZXlmcmFtZSoga2V5ZnJhbWUsIEtl
eWZyYW1lVmFsdWUmIGtleWZyYW1lVmFsdWUpCiB7CiAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0Owog
ICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQogICAgICAgICBhZGRNYXRjaGVkUHJvcGVy
dGllcyhyZXN1bHQsIGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpOwogCi0gICAgQVNTRVJUKCFtX3N0
eWxlKTsKLQogICAgIC8vIENyZWF0ZSB0aGUgc3R5bGUKLSAgICBtX3N0eWxlID0gUmVuZGVyU3R5
bGU6OmNsb25lKGVsZW1lbnRTdHlsZSk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9
IFJlbmRlclN0eWxlOjpjbG9uZShlbGVtZW50U3R5bGUpOwogCi0gICAgbV9saW5lSGVpZ2h0VmFs
dWUgPSAwOworICAgIHN0YXRlLnNldFN0eWxlKHN0eWxlLmdldCgpKTsKKyAgICBzdGF0ZS5zZXRM
aW5lSGVpZ2h0VmFsdWUoMCk7CiAKICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGJvdGhlciB3aXRo
ICFpbXBvcnRhbnQuIFNpbmNlIHRoZXJlIGlzIG9ubHkgZXZlciBvbmUKICAgICAvLyBkZWNsLCB0
aGVyZSdzIG5vdGhpbmcgdG8gb3ZlcnJpZGUuIFNvIGp1c3QgYWRkIHRoZSBmaXJzdCBwcm9wZXJ0
aWVzLgogICAgIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOwogICAgIGlmIChrZXlmcmFtZS0+
cHJvcGVydGllcygpKQotICAgICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0
eVByb3BlcnRpZXM+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5z
aXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKKyAgICAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGll
czxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgcmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0
Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwogCiAgICAgLy8g
SWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgotICAg
IHVwZGF0ZUZvbnQoKTsKKyAgICB1cGRhdGVGb250KHN0YXRlKTsKIAogICAgIC8vIExpbmUtaGVp
Z2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZQot
ICAgIGlmIChtX2xpbmVIZWlnaHRWYWx1ZSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUxpbmVIZWlnaHQsIG1fbGluZUhlaWdodFZhbHVlKTsKKyAgICBpZiAoc3RhdGUubGluZUhl
aWdodFZhbHVlKCkpCisgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIENTU1Byb3BlcnR5TGlu
ZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZhbHVlKCkpOwogCiAgICAgLy8gTm93IGRvIHJlc3Qg
b2YgdGhlIHByb3BlcnRpZXMuCiAgICAgaWYgKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpCi0gICAg
ICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihyZXN1bHQs
IGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVk
T25seSk7CisgICAgICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0
aWVzPihzdGF0ZSwgcmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNp
emUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwogCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRp
ZWQgYnkgb25lIG9mIHRoZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMsCiAgICAgLy8gZ28gYWhl
YWQgYW5kIHVwZGF0ZSBpdCBhIHNlY29uZCB0aW1lLgotICAgIHVwZGF0ZUZvbnQoKTsKKyAgICB1
cGRhdGVGb250KHN0YXRlKTsKIAogICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzIHJlZmVy
ZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOworICAgIGxv
YWRQZW5kaW5nUmVzb3VyY2VzKHN0YXRlKTsKICAgICAKICAgICAvLyBBZGQgYWxsIHRoZSBhbmlt
YXRpbmcgcHJvcGVydGllcyB0byB0aGUga2V5ZnJhbWUuCiAgICAgaWYgKGNvbnN0IFN0eWxlUHJv
cGVydHlTZXQqIHN0eWxlRGVjbGFyYXRpb24gPSBrZXlmcmFtZS0+cHJvcGVydGllcygpKSB7CkBA
IC0xNjc1LDcgKzE2NDEsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVy
OjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZQogCiAgICAgZG9jdW1l
bnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCi0gICAgcmV0dXJuIG1fc3R5bGUucmVs
ZWFzZSgpOworICAgIHJldHVybiBzdHlsZS5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgU3R5bGVSZXNv
bHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVy
U3R5bGUqIGVsZW1lbnRTdHlsZSwgS2V5ZnJhbWVMaXN0JiBsaXN0KQpAQCAtMTY5NiwxNSArMTY2
MiwxNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVs
ZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbAogCiAgICAgLy8gQ29uc3RydWN0IGFuZCBw
b3B1bGF0ZSB0aGUgc3R5bGUgZm9yIGVhY2gga2V5ZnJhbWUKICAgICBjb25zdCBWZWN0b3I8UmVm
UHRyPFN0eWxlS2V5ZnJhbWU+ID4mIGtleWZyYW1lcyA9IGtleWZyYW1lc1J1bGUtPmtleWZyYW1l
cygpOworICAgIFN0eWxlUmVzb2x2ZVN0YXRlIHN0YXRlOworICAgIGluaXRFbGVtZW50KHN0YXRl
LCBlKTsKKyAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKHN0YXRlLCBlKTsKKyAgICAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5ZnJhbWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIC8v
IEFwcGx5IHRoZSBkZWNsYXJhdGlvbiB0byB0aGUgc3R5bGUuIFRoaXMgaXMgYSBzaW1wbGlmaWVk
IHZlcnNpb24gb2YgdGhlIGxvZ2ljIGluIHN0eWxlRm9yRWxlbWVudAotICAgICAgICBpbml0RWxl
bWVudChlKTsKLSAgICAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlKTsKLQogICAgICAgICBjb25z
dCBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSA9IGtleWZyYW1lc1tpXS5nZXQoKTsKIAogICAgICAg
ICBLZXlmcmFtZVZhbHVlIGtleWZyYW1lVmFsdWUoMCwgMCk7Ci0gICAgICAgIGtleWZyYW1lVmFs
dWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShlbGVtZW50U3R5bGUsIGtleWZyYW1lLCBrZXlm
cmFtZVZhbHVlKSk7CisgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlm
cmFtZShzdGF0ZSwgZWxlbWVudFN0eWxlLCBrZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOwogCiAg
ICAgICAgIC8vIEFkZCB0aGlzIGtleWZyYW1lIHN0eWxlIHRvIGFsbCB0aGUgaW5kaWNhdGVkIGtl
eSB0aW1lcwogICAgICAgICBWZWN0b3I8ZmxvYXQ+IGtleXM7CkBAIC0xNzI0LDcgKzE2OTEsNyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQq
IGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbAogICAgICAgICAgICAgemVyb1BlcmNlbnRLZXlmcmFt
ZS0+c2V0S2V5VGV4dCgiMCUiKTsKICAgICAgICAgfQogICAgICAgICBLZXlmcmFtZVZhbHVlIGtl
eWZyYW1lVmFsdWUoMCwgMCk7Ci0gICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVG
b3JLZXlmcmFtZShlbGVtZW50U3R5bGUsIHplcm9QZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFs
dWUpKTsKKyAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKHN0
YXRlLCBlbGVtZW50U3R5bGUsIHplcm9QZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsK
ICAgICAgICAgbGlzdC5pbnNlcnQoa2V5ZnJhbWVWYWx1ZSk7CiAgICAgfQogCkBAIC0xNzM2LDYy
ICsxNzAzLDY4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRp
b24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsCiAgICAgICAgICAgICBodW5kcmVk
UGVyY2VudEtleWZyYW1lLT5zZXRLZXlUZXh0KCIxMDAlIik7CiAgICAgICAgIH0KICAgICAgICAg
S2V5ZnJhbWVWYWx1ZSBrZXlmcmFtZVZhbHVlKDEsIDApOwotICAgICAgICBrZXlmcmFtZVZhbHVl
LnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCBodW5kcmVkUGVyY2VudEtl
eWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7CisgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUo
c3R5bGVGb3JLZXlmcmFtZShzdGF0ZSwgZWxlbWVudFN0eWxlLCBodW5kcmVkUGVyY2VudEtleWZy
YW1lLCBrZXlmcmFtZVZhbHVlKSk7CiAgICAgICAgIGxpc3QuaW5zZXJ0KGtleWZyYW1lVmFsdWUp
OwogICAgIH0KIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNl
dWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywgRWxlbWVudCogZSwgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKQogewotICAgIEFTU0VSVChtX3BhcmVudFN0eWxlKTsKICAgICBpZiAo
IWUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaW5pdEVsZW1lbnQoZSk7CisgICAgU3R5bGVS
ZXNvbHZlU3RhdGUgc3RhdGU7CisgICAgaW5pdEVsZW1lbnQoc3RhdGUsIGUpOworICAgIGluaXRG
b3JTdHlsZVJlc29sdmUoc3RhdGUsIGUsIHBhcmVudFN0eWxlKTsKIAotICAgIGluaXRGb3JTdHls
ZVJlc29sdmUoZSwgcGFyZW50U3R5bGUsIHBzZXVkbyk7Ci0gICAgbV9zdHlsZSA9IFJlbmRlclN0
eWxlOjpjcmVhdGUoKTsKLSAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShtX3BhcmVudFN0eWxlKTsK
KyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwor
ICAgIHN0eWxlLT5pbmhlcml0RnJvbShzdGF0ZS5wYXJlbnRTdHlsZSgpKTsKKyAgICBzdGF0ZS5z
ZXRQc2V1ZG9TdHlsZShwc2V1ZG8pOworICAgIHN0YXRlLnNldFN0eWxlKHN0eWxlLmdldCgpKTsK
IAogICAgIC8vIFNpbmNlIHdlIGRvbid0IHVzZSBwc2V1ZG8tZWxlbWVudHMgaW4gYW55IG9mIG91
ciBxdWlyay9wcmludCB1c2VyIGFnZW50IHJ1bGVzLCBkb24ndCB3YXN0ZSB0aW1lIHdhbGtpbmcK
ICAgICAvLyB0aG9zZSBydWxlcy4KIAogICAgIC8vIENoZWNrIFVBLCB1c2VyIGFuZCBhdXRob3Ig
cnVsZXMuCisKICAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKLSAgICBtYXRjaFVBUnVsZXMo
bWF0Y2hSZXN1bHQpOworICAgIG1hdGNoVUFSdWxlcyhzdGF0ZSwgbWF0Y2hSZXN1bHQpOwogCiAg
ICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSB7Ci0gICAgICAgIG1hdGNoVXNlclJ1
bGVzKG1hdGNoUmVzdWx0LCBmYWxzZSk7Ci0gICAgICAgIG1hdGNoQXV0aG9yUnVsZXMobWF0Y2hS
ZXN1bHQsIGZhbHNlKTsKKyAgICAgICAgbWF0Y2hVc2VyUnVsZXMoc3RhdGUsIG1hdGNoUmVzdWx0
KTsKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhzdGF0ZSwgbWF0Y2hSZXN1bHQpOwogICAgIH0K
IAogICAgIGlmIChtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgbV9zdHlsZS0+c2V0U3R5bGVUeXBlKHBzZXVkbyk7CisgICAg
c3R5bGUtPnNldFN0eWxlVHlwZShwc2V1ZG8pOwogCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGll
cyhtYXRjaFJlc3VsdCwgZSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhzdGF0ZSwgbWF0
Y2hSZXN1bHQsIGUpOwogCiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRpc3Bs
YXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0
UmVuZGVyU3R5bGUoc3R5bGUoKSwgcGFyZW50U3R5bGUsIDApOworICAgIGFkanVzdFJlbmRlclN0
eWxlKHN0YXRlLCBzdHlsZS5nZXQoKSwgc3RhdGUucGFyZW50U3R5bGUoKSwgMCk7CiAKICAgICAv
LyBTdGFydCBsb2FkaW5nIHJlc291cmNlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAg
bG9hZFBlbmRpbmdSZXNvdXJjZXMoKTsKKyAgICBsb2FkUGVuZGluZ1Jlc291cmNlcyhzdGF0ZSk7
CiAKICAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7CiAKICAgICAvLyBO
b3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4gbV9zdHlsZS5yZWxlYXNlKCk7CisgICAg
cmV0dXJuIHN0eWxlLnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5
bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiB7Ci0gICAgaW5pdEZvclN0
eWxlUmVzb2x2ZShkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSk7IC8vIG1fcm9vdEVsZW1l
bnRTdHlsZSB3aWxsIGJlIHNldCB0byB0aGUgZG9jdW1lbnQgc3R5bGUuCisgICAgU3R5bGVSZXNv
bHZlU3RhdGUgc3RhdGU7CisgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShzdGF0ZSwgZG9jdW1lbnQo
KS0+ZG9jdW1lbnRFbGVtZW50KCkpOyAvLyBtX3Jvb3RFbGVtZW50U3R5bGUgd2lsbCBiZSBzZXQg
dG8gdGhlIGRvY3VtZW50IHN0eWxlLgogCi0gICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVh
dGUoKTsKLSAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShtX3Jvb3RFbGVtZW50U3R5bGUpOworICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAg
c3R5bGUtPmluaGVyaXRGcm9tKHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSk7CisgICAgc3RhdGUu
c2V0RWxlbWVudChkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSk7CisgICAgc3RhdGUuc2V0
U3R5bGUoc3R5bGUuZ2V0KCkpOwogCi0gICAgY29uc3QgYm9vbCBpc0xlZnQgPSBpc0xlZnRQYWdl
KHBhZ2VJbmRleCk7CisgICAgY29uc3QgYm9vbCBpc0xlZnQgPSBpc0xlZnRQYWdlKHN0YXRlLnJv
b3RFbGVtZW50U3R5bGUoKSwgcGFnZUluZGV4KTsKICAgICBjb25zdCBib29sIGlzRmlyc3QgPSBp
c0ZpcnN0UGFnZShwYWdlSW5kZXgpOwogICAgIGNvbnN0IFN0cmluZyBwYWdlID0gcGFnZU5hbWUo
cGFnZUluZGV4KTsKICAgICAKQEAgLTE4MDAsNDIgKzE3NzMsNDUgQEAgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiAgICAg
bWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBtX3VzZXJTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0
LCBwYWdlKTsKICAgICAvLyBPbmx5IGNvbnNpZGVyIHRoZSBnbG9iYWwgYXV0aG9yIFJ1bGVTZXQg
Zm9yIEBwYWdlIHJ1bGVzLCBhcyBwZXIgdGhlIEhUTUw1IHNwZWMuCiAgICAgbWF0Y2hQYWdlUnVs
ZXMocmVzdWx0LCBtX2F1dGhvclN0eWxlLmdldCgpLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwot
ICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUo
MCk7CiAgICAgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAjaWYgRU5BQkxFKENTU19WQVJJ
QUJMRVMpCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihy
ZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5o
ZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRp
b25zPihzdGF0ZSwgcmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNp
emUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwogI2VuZGlmCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVy
dGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0
Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRj
aGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgcmVzdWx0LCBmYWxz
ZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkp
OwogCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUg
aXQgbm93LgotICAgIHVwZGF0ZUZvbnQoKTsKKyAgICB1cGRhdGVGb250KHN0YXRlKTsKIAogICAg
IC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhl
IGZvbnQtc2l6ZS4KLSAgICBpZiAobV9saW5lSGVpZ2h0VmFsdWUpCi0gICAgICAgIGFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX2xpbmVIZWlnaHRWYWx1ZSk7CisgICAgaWYg
KHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKQorICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBD
U1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKTsKIAotICAgIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihyZXN1bHQsIGZhbHNl
LCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7
CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRl
LCByZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwg
aW5oZXJpdGVkT25seSk7CiAKICAgICAvLyBTdGFydCBsb2FkaW5nIHJlc291cmNlcyByZWZlcmVu
Y2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoKTsKKyAgICBsb2Fk
UGVuZGluZ1Jlc291cmNlcyhzdGF0ZSk7CiAKICAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHls
ZVJlc29sdmVyKCk7CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4g
bV9zdHlsZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHN0eWxlLnJlbGVhc2UoKTsKIH0KIAogUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVu
dCgpCiB7Ci0gICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
UmVuZGVyU3R5bGU+IHN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgIFN0eWxlUmVz
b2x2ZVN0YXRlIHN0YXRlOworICAgIHN0YXRlLnNldEVsZW1lbnQoZG9jdW1lbnQoKS0+ZG9jdW1l
bnRFbGVtZW50KCkpOworICAgIHN0YXRlLnNldFN0eWxlKHN0eWxlLmdldCgpKTsKICAgICAvLyBN
YWtlIHN1cmUgb3VyIGZvbnRzIGFyZSBpbml0aWFsaXplZCBpZiB3ZSBkb24ndCBpbmhlcml0IHRo
ZW0gZnJvbSBvdXIgcGFyZW50IHN0eWxlLgogICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBk
b2N1bWVudFNldHRpbmdzKCkpIHsKLSAgICAgICAgaW5pdGlhbGl6ZUZvbnRTdHlsZShzZXR0aW5n
cyk7Ci0gICAgICAgIG1fc3R5bGUtPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOworICAg
ICAgICBpbml0aWFsaXplRm9udFN0eWxlKHN0YXRlLCBzZXR0aW5ncyk7CisgICAgICAgIHN0eWxl
LT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9z
dHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKKyAgICAgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoMCk7
CiAKLSAgICByZXR1cm4gbV9zdHlsZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHN0eWxlLnJlbGVh
c2UoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVG
b3JUZXh0KFRleHQqIHRleHROb2RlKQpAQCAtMTkzMCw3ICsxOTA2LDcgQEAgc3RhdGljIGJvb2wg
aXNEaXNwbGF5RmxleGlibGVCb3goRURpc3BsYXkgZGlzcGxheSkKICAgICByZXR1cm4gZGlzcGxh
eSA9PSBGTEVYIHx8IGRpc3BsYXkgPT0gSU5MSU5FX0ZMRVg7CiB9CiAKLXZvaWQgU3R5bGVSZXNv
bHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUsIEVsZW1lbnQgKmUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRl
clN0eWxlKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQgKmUpCiB7CiAgICAgQVNTRVJUKHBhcmVudFN0
eWxlKTsKIApAQCAtMTk0Miw3ICsxOTE4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RS
ZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHkKICAg
ICAgICAgLy8gcHJvcGVydHkuCiAgICAgICAgIC8vIFNpdGVzIGFsc28gY29tbW9ubHkgdXNlIGRp
c3BsYXk6aW5saW5lL2Jsb2NrIG9uIDx0ZD5zIGFuZCA8dGFibGU+cy4gSW4gcXVpcmtzIG1vZGUg
d2UgZm9yY2UKICAgICAgICAgLy8gdGhlc2UgdGFncyB0byByZXRhaW4gdGhlaXIgZGlzcGxheSB0
eXBlcy4KLSAgICAgICAgaWYgKCFtX3NlbGVjdG9yQ2hlY2tlci5zdHJpY3RQYXJzaW5nKCkgJiYg
ZSkgeworICAgICAgICBpZiAoZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkgJiYgZSkgewogICAg
ICAgICAgICAgaWYgKGUtPmhhc1RhZ05hbWUodGRUYWcpKSB7CiAgICAgICAgICAgICAgICAgc3R5
bGUtPnNldERpc3BsYXkoVEFCTEVfQ0VMTCk7CiAgICAgICAgICAgICAgICAgc3R5bGUtPnNldEZs
b2F0aW5nKE5vRmxvYXQpOwpAQCAtMTk4OSw3ICsxOTY1LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHkKIAogICAgICAgICAvLyBBYnNvbHV0ZS9maXhlZCBwb3NpdGlvbmVkIGVsZW1lbnRzLCBm
bG9hdGluZyBlbGVtZW50cyBhbmQgdGhlIGRvY3VtZW50IGVsZW1lbnQgbmVlZCBibG9jay1saWtl
IG91dHNpZGUgZGlzcGxheS4KICAgICAgICAgaWYgKHN0eWxlLT5oYXNPdXRPZkZsb3dQb3NpdGlv
bigpIHx8IHN0eWxlLT5pc0Zsb2F0aW5nKCkgfHwgKGUgJiYgZS0+ZG9jdW1lbnQoKS0+ZG9jdW1l
bnRFbGVtZW50KCkgPT0gZSkpCi0gICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShlcXVpdmFs
ZW50QmxvY2tEaXNwbGF5KHN0eWxlLT5kaXNwbGF5KCksIHN0eWxlLT5pc0Zsb2F0aW5nKCksIG1f
c2VsZWN0b3JDaGVja2VyLnN0cmljdFBhcnNpbmcoKSkpOworICAgICAgICAgICAgc3R5bGUtPnNl
dERpc3BsYXkoZXF1aXZhbGVudEJsb2NrRGlzcGxheShzdHlsZS0+ZGlzcGxheSgpLCBzdHlsZS0+
aXNGbG9hdGluZygpLCAhZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpKTsKIAogICAgICAgICAv
LyBGSVhNRTogRG9uJ3Qgc3VwcG9ydCB0aGlzIG11dGF0aW9uIGZvciBwc2V1ZG8gc3R5bGVzIGxp
a2UgZmlyc3QtbGV0dGVyIG9yIGZpcnN0LWxpbmUsIHNpbmNlIGl0J3Mgbm90IGNvbXBsZXRlbHkK
ICAgICAgICAgLy8gY2xlYXIgaG93IHRoYXQgc2hvdWxkIHdvcmsuCkBAIC0yMDE5LDcgKzE5OTUs
NyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBz
dHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eQogCiAgICAgICAgIGlmIChpc0Rpc3BsYXlGbGV4
aWJsZUJveChwYXJlbnRTdHlsZS0+ZGlzcGxheSgpKSkgewogICAgICAgICAgICAgc3R5bGUtPnNl
dEZsb2F0aW5nKE5vRmxvYXQpOwotICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoZXF1aXZh
bGVudEJsb2NrRGlzcGxheShzdHlsZS0+ZGlzcGxheSgpLCBzdHlsZS0+aXNGbG9hdGluZygpLCBt
X3NlbGVjdG9yQ2hlY2tlci5zdHJpY3RQYXJzaW5nKCkpKTsKKyAgICAgICAgICAgIHN0eWxlLT5z
ZXREaXNwbGF5KGVxdWl2YWxlbnRCbG9ja0Rpc3BsYXkoc3R5bGUtPmRpc3BsYXkoKSwgc3R5bGUt
PmlzRmxvYXRpbmcoKSwgIWRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKSk7CiAgICAgICAgIH0K
IAogI2lmIEVOQUJMRShESUFMT0dfRUxFTUVOVCkKQEAgLTIxMjMsNyArMjA5OSw3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5CiAKICAgICAvLyBMZXQgdGhlIHRoZW1lIGFsc28gaGF2ZSBhIGNy
YWNrIGF0IGFkanVzdGluZyB0aGUgc3R5bGUuCiAgICAgaWYgKHN0eWxlLT5oYXNBcHBlYXJhbmNl
KCkpCi0gICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+YWRqdXN0U3R5bGUodGhp
cywgc3R5bGUsIGUsIG1faGFzVUFBcHBlYXJhbmNlLCBtX2JvcmRlckRhdGEsIG1fYmFja2dyb3Vu
ZERhdGEsIG1fYmFja2dyb3VuZENvbG9yKTsKKyAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRU
aGVtZSgpLT5hZGp1c3RTdHlsZSh0aGlzLCBzdHlsZSwgZSwgc3RhdGUuaGFzVUFBcHBlYXJhbmNl
KCksIHN0YXRlLmJvcmRlckRhdGEoKSwgc3RhdGUuYmFja2dyb3VuZERhdGEoKSwgc3RhdGUuYmFj
a2dyb3VuZENvbG9yKCkpOwogCiAgICAgLy8gSWYgd2UgaGF2ZSBmaXJzdC1sZXR0ZXIgcHNldWRv
IHN0eWxlLCBkbyBub3Qgc2hhcmUgdGhpcyBzdHlsZS4KICAgICBpZiAoc3R5bGUtPmhhc1BzZXVk
b1N0eWxlKEZJUlNUX0xFVFRFUikpCkBAIC0yMjA0LDI3ICsyMTgwLDE3IEBAIHN0YXRpYyB2b2lk
IGNoZWNrRm9yT3JpZW50YXRpb25DaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlKQogICAgIHN0eWxl
LT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKIH0KIAotdm9pZCBTdHls
ZVJlc29sdmVyOjp1cGRhdGVGb250KCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udChT
dHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKCFtX2ZvbnREaXJ0eSkKKyAgICBp
ZiAoIXN0YXRlLmZvbnREaXJ0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjaGVja0ZvclRl
eHRTaXplQWRqdXN0KCk7Ci0gICAgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKHN0eWxlKCks
IG1fcGFyZW50U3R5bGUpOwotICAgIGNoZWNrRm9yWm9vbUNoYW5nZShzdHlsZSgpLCBtX3BhcmVu
dFN0eWxlKTsKLSAgICBjaGVja0Zvck9yaWVudGF0aW9uQ2hhbmdlKHN0eWxlKCkpOwotICAgIG1f
c3R5bGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOwotICAgIG1fZm9udERpcnR5ID0g
ZmFsc2U7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5k
KCkKLXsKLSAgICBtX2hhc1VBQXBwZWFyYW5jZSA9IG1fc3R5bGUtPmhhc0FwcGVhcmFuY2UoKTsK
LSAgICBpZiAobV9oYXNVQUFwcGVhcmFuY2UpIHsKLSAgICAgICAgbV9ib3JkZXJEYXRhID0gbV9z
dHlsZS0+Ym9yZGVyKCk7Ci0gICAgICAgIG1fYmFja2dyb3VuZERhdGEgPSAqbV9zdHlsZS0+YmFj
a2dyb3VuZExheWVycygpOwotICAgICAgICBtX2JhY2tncm91bmRDb2xvciA9IG1fc3R5bGUtPmJh
Y2tncm91bmRDb2xvcigpOwotICAgIH0KKyAgICBjaGVja0ZvclRleHRTaXplQWRqdXN0KHN0YXRl
LnN0eWxlKCkpOworICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShzdGF0ZSwgc3RhdGUu
c3R5bGUoKSwgc3RhdGUucGFyZW50U3R5bGUoKSk7CisgICAgY2hlY2tGb3Jab29tQ2hhbmdlKHN0
YXRlLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5wYXJlbnRTdHlsZSgpKTsKKyAgICBjaGVja0Zvck9y
aWVudGF0aW9uQ2hhbmdlKHN0YXRlLnN0eWxlKCkpOworICAgIHN0YXRlLnN0eWxlKCktPmZvbnQo
KS51cGRhdGUobV9mb250U2VsZWN0b3IpOworICAgIHN0YXRlLnNldEZvbnREaXJ0eShmYWxzZSk7
CiB9CiAKIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlUnVsZXNG
b3JFbGVtZW50KEVsZW1lbnQqIGUsIHVuc2lnbmVkIHJ1bGVzVG9JbmNsdWRlKQpAQCAtMjIzNyw2
NSArMjIwMyw2OSBAQCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBTdHlsZVJlc29sdmVyOjpwc2V1
ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLCBQcwogICAgIGlmICghZSB8fCAhZS0+
ZG9jdW1lbnQoKS0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpCiAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3Rp
bmdSdWxlcyk7Ci0KLSAgICBpbml0RWxlbWVudChlKTsKLSAgICBpbml0Rm9yU3R5bGVSZXNvbHZl
KGUsIDAsIHBzZXVkb0lkKTsKKyAgICBTdHlsZVJlc29sdmVTdGF0ZSBzdGF0ZTsKKyAgICBpbml0
RWxlbWVudChzdGF0ZSwgZSk7CisgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShzdGF0ZSwgZSk7Cisg
ICAgc3RhdGUuc2V0UHNldWRvU3R5bGUocHNldWRvSWQpOworICAgIHN0YXRlLnNldE1vZGUoU2Vs
ZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpOwogCiAgICAgTWF0Y2hSZXN1bHQgZHVtbXk7
CiAgICAgaWYgKHJ1bGVzVG9JbmNsdWRlICYgVUFBbmRVc2VyQ1NTUnVsZXMpIHsKICAgICAgICAg
Ly8gRmlyc3Qgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdXNlciBhZ2VudCBzaGVldC4KLSAgICAg
ICAgbWF0Y2hVQVJ1bGVzKGR1bW15KTsKKyAgICAgICAgbWF0Y2hVQVJ1bGVzKHN0YXRlLCBkdW1t
eSk7CiAKICAgICAgICAgLy8gTm93IHdlIGNoZWNrIHVzZXIgc2hlZXQgcnVsZXMuCi0gICAgICAg
IGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICAgICAgICAgIG1hdGNoVXNlclJ1
bGVzKGR1bW15LCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOworICAgICAgICBpZiAo
bV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpIHsKKyAgICAgICAgICAgIHN0YXRlLnNldEluY2x1
ZGVFbXB0eVJ1bGVzKHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CisgICAgICAgICAg
ICBtYXRjaFVzZXJSdWxlcyhzdGF0ZSwgZHVtbXkpOworICAgICAgICB9CiAgICAgfQogCiAgICAg
aWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIChydWxlc1RvSW5jbHVkZSAmIEF1dGhv
ckNTU1J1bGVzKSkgewotICAgICAgICBtX3NhbWVPcmlnaW5Pbmx5ID0gIShydWxlc1RvSW5jbHVk
ZSAmIENyb3NzT3JpZ2luQ1NTUnVsZXMpOwotCisgICAgICAgIHN0YXRlLnNldFNhbWVPcmlnaW5P
bmx5KCEocnVsZXNUb0luY2x1ZGUgJiBDcm9zc09yaWdpbkNTU1J1bGVzKSk7CisgICAgICAgIHN0
YXRlLnNldEluY2x1ZGVFbXB0eVJ1bGVzKHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7
CisgICAgICAgIAogICAgICAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cy4K
LSAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhkdW1teSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNT
U1J1bGVzKTsKLQotICAgICAgICBtX3NhbWVPcmlnaW5Pbmx5ID0gZmFsc2U7CisgICAgICAgIG1h
dGNoQXV0aG9yUnVsZXMoc3RhdGUsIGR1bW15KTsKICAgICB9Ci0KLSAgICBtX3NlbGVjdG9yQ2hl
Y2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpOwotCi0gICAgcmV0
dXJuIG1fcnVsZUxpc3QucmVsZWFzZSgpOworICAgIHJldHVybiBzdGF0ZS5ydWxlTGlzdCgpLnJl
bGVhc2UoKTsKIH0KIAotaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6cnVsZU1hdGNoZXMoY29u
c3QgUnVsZURhdGEmIHJ1bGVEYXRhLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKK2lubGlu
ZSBib29sIFN0eWxlUmVzb2x2ZXI6OnJ1bGVNYXRjaGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0
ZSwgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwg
UHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pCiB7Ci0gICAgbV9keW5hbWljUHNldWRvID0gTk9QU0VV
RE87CisgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRlLmVsZW1lbnQoKTsKIAogICAgIGlmIChy
dWxlRGF0YS5oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoKSkgewogICAgICAgICAvLyBXZSBrbm93
IHRoaXMgc2VsZWN0b3IgZG9lcyBub3QgaW5jbHVkZSBhbnkgcHNldWRvIGVsZW1lbnRzLgotICAg
ICAgICBpZiAobV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETykKKyAgICAgICAgaWYgKHN0YXRlLnBz
ZXVkb1N0eWxlKCkgIT0gTk9QU0VVRE8pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIC8vIFdlIGtub3cgYSBzdWZmaWNpZW50bHkgc2ltcGxlIHNpbmdsZSBwYXJ0IHNlbGVjdG9y
IG1hdGNoZXMgc2ltcGx5IGJlY2F1c2Ugd2UgZm91bmQgaXQgZnJvbSB0aGUgcnVsZSBoYXNoLgog
ICAgICAgICAvLyBUaGlzIGlzIGxpbWl0ZWQgdG8gSFRNTCBvbmx5IHNvIHdlIGRvbid0IG5lZWQg
dG8gY2hlY2sgdGhlIG5hbWVzcGFjZS4KLSAgICAgICAgaWYgKHJ1bGVEYXRhLmhhc1JpZ2h0bW9z
dFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKCkgJiYgbV9lbGVtZW50LT5pc0hU
TUxFbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKHJ1bGVEYXRhLmhhc1JpZ2h0bW9zdFNlbGVjdG9y
TWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKCkgJiYgZWxlbWVudC0+aXNIVE1MRWxlbWVudCgp
KSB7CiAgICAgICAgICAgICBpZiAoIXJ1bGVEYXRhLmhhc011bHRpcGFydFNlbGVjdG9yKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHJ1bGVE
YXRhLnNlbGVjdG9yKCktPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZyAmJiAhU2VsZWN0b3JD
aGVja2VyOjp0YWdNYXRjaGVzKG1fZWxlbWVudCwgcnVsZURhdGEuc2VsZWN0b3IoKS0+dGFnUU5h
bWUoKSkpCisgICAgICAgIGlmIChydWxlRGF0YS5zZWxlY3RvcigpLT5tX21hdGNoID09IENTU1Nl
bGVjdG9yOjpUYWcgJiYgIVNlbGVjdG9yQ2hlY2tlcjo6dGFnTWF0Y2hlcyhlbGVtZW50LCBydWxl
RGF0YS5zZWxlY3RvcigpLT50YWdRTmFtZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdEF0dHJpYnV0
ZVNlbGVjdG9yKG1fZWxlbWVudCwgcnVsZURhdGEuc2VsZWN0b3IoKSkpCisgICAgICAgIGlmICgh
U2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hlY2tSaWdodG1vc3RBdHRyaWJ1dGVTZWxlY3RvcihlbGVt
ZW50LCBydWxlRGF0YS5zZWxlY3RvcigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgcmV0dXJuIG1fc2VsZWN0b3JDaGVja2VyLmZhc3RDaGVjayhydWxlRGF0YS5zZWxlY3Rv
cigpLCBtX2VsZW1lbnQpOworCisgICAgICAgIHJldHVybiBTZWxlY3RvckNoZWNrZXI6OmZhc3RD
aGVjayhydWxlRGF0YS5zZWxlY3RvcigpLCBlbGVtZW50KTsKICAgICB9CiAKICAgICAvLyBTbG93
IHBhdGguCi0gICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250
ZXh0KHJ1bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNp
dGVkTWF0Y2hFbmFibGVkKTsKLSAgICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IHN0eWxlKCk7Cisg
ICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVE
YXRhLnNlbGVjdG9yKCksIGVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRW5h
YmxlZCk7CisgICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBzdGF0ZS5zdHlsZSgpOwogICAgIGNv
bnRleHQuc2NvcGUgPSBzY29wZTsKLSAgICBjb250ZXh0LnBzZXVkb1N0eWxlID0gbV9wc2V1ZG9T
dHlsZTsKLSAgICBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gbV9zZWxlY3RvckNoZWNr
ZXIubWF0Y2goY29udGV4dCwgbV9keW5hbWljUHNldWRvLCBET01TaWJsaW5nVHJhdmVyc2FsU3Ry
YXRlZ3koKSk7CisgICAgY29udGV4dC5wc2V1ZG9TdHlsZSA9IHN0YXRlLnBzZXVkb1N0eWxlKCk7
CisKKyAgICAvLyBvbi1zdGFjaworICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIo
ZG9jdW1lbnQoKSk7CisgICAgc2VsZWN0b3JDaGVja2VyLnNldE1vZGUoc3RhdGUubW9kZSgpKTsK
KyAgICBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gc2VsZWN0b3JDaGVja2VyLm1hdGNo
KGNvbnRleHQsIGR5bmFtaWNQc2V1ZG8sIERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSgpKTsK
ICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETyAmJiBt
X3BzZXVkb1N0eWxlICE9IG1fZHluYW1pY1BzZXVkbykKKyAgICBpZiAoc3RhdGUucHNldWRvU3R5
bGUoKSAhPSBOT1BTRVVETyAmJiBzdGF0ZS5wc2V1ZG9TdHlsZSgpICE9IGR5bmFtaWNQc2V1ZG8p
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIzMDUsMTAg
KzIyNzUsOSBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9uU2VsZWN0b3IoY29uc3Qg
Q1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZQogICAgIGlmICghcmVnaW9uU2VsZWN0
b3IgfHwgIXJlZ2lvbkVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fcHNl
dWRvU3R5bGUgPSBOT1BTRVVETzsKLQorICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNr
ZXIoZG9jdW1lbnQoKSk7CiAgICAgZm9yIChjb25zdCBDU1NTZWxlY3RvciogcyA9IHJlZ2lvblNl
bGVjdG9yOyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKQotICAgICAgICBpZiAobV9z
ZWxlY3RvckNoZWNrZXIubWF0Y2hlcyhzLCByZWdpb25FbGVtZW50KSkKKyAgICAgICAgaWYgKHNl
bGVjdG9yQ2hlY2tlci5tYXRjaGVzKHMsIHJlZ2lvbkVsZW1lbnQpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzI4LDkgKzIyOTcsOSBAQCBMZW5n
dGggU3R5bGVSZXNvbHZlcjo6Y29udmVydFRvRmxvYXRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlLCBSZQogfQogCiB0ZW1wbGF0ZSA8U3R5bGVSZXNvbHZlcjo6U3R5bGVB
cHBsaWNhdGlvblBhc3MgcGFzcz4KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVz
KGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgYm9v
bCBpc0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUg
cHJvcGVydHlXaGl0ZWxpc3RUeXBlKQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnRp
ZXMoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9w
ZXJ0aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVk
T25seSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlIHByb3BlcnR5V2hpdGVsaXN0VHlwZSkKIHsKLSAg
ICBBU1NFUlQoKHByb3BlcnR5V2hpdGVsaXN0VHlwZSAhPSBQcm9wZXJ0eVdoaXRlbGlzdFJlZ2lv
bikgfHwgbV9yZWdpb25Gb3JTdHlsaW5nKTsKKyAgICBBU1NFUlQoKHByb3BlcnR5V2hpdGVsaXN0
VHlwZSAhPSBQcm9wZXJ0eVdoaXRlbGlzdFJlZ2lvbikgfHwgc3RhdGUucmVnaW9uRm9yU3R5bGlu
ZygpKTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUHJvY2Vzc1J1bGUoZG9jdW1lbnQoKSwgcnVsZSwgdGhp
cyk7CiAKICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gcHJvcGVydGllcy0+cHJvcGVydHlD
b3VudCgpOwpAQCAtMjM1OCw3ICsyMzI3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWwKICAg
ICAgICAgY2FzZSBWYXJpYWJsZURlZmluaXRpb25zOgogICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoQ1NTUHJvcGVydHlWYXJpYWJsZSA8IGZpcnN0Q1NTUHJvcGVydHksIENTU192YXJpYWJsZV9p
c19iZWZvcmVfZmlyc3RfcHJvcGVydHkpOwogICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09IENT
U1Byb3BlcnR5VmFyaWFibGUpCi0gICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShjdXJyZW50
LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShz
dGF0ZSwgY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAjZW5kaWYKICAgICAgICAgY2FzZSBIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzOgpAQCAtMjM3MSw0
MiArMjM0MCw0MyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyhjb25zdCBT
dHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bAogI2VuZGlmCiAgICAgICAgICAg
ICAvLyBnaXZlIHNwZWNpYWwgcHJpb3JpdHkgdG8gZm9udC14eHgsIGNvbG9yIHByb3BlcnRpZXMs
IGV0YwogICAgICAgICAgICAgaWYgKHByb3BlcnR5IDwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQot
ICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVl
KCkpOworICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIGN1cnJlbnQuaWQoKSwg
Y3VycmVudC52YWx1ZSgpKTsKICAgICAgICAgICAgIC8vIHdlIGFwcGx5IGxpbmUtaGVpZ2h0IGxh
dGVyCiAgICAgICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eUxpbmVIZWln
aHQpCi0gICAgICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSBjdXJyZW50LnZhbHVlKCk7
CisgICAgICAgICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKGN1cnJlbnQudmFsdWUo
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb3dQcmlvcml0eVByb3BlcnRp
ZXM6CiAgICAgICAgICAgICBpZiAocHJvcGVydHkgPiBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpCi0g
ICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShjdXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUo
KSk7CisgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgY3VycmVudC5pZCgpLCBj
dXJyZW50LnZhbHVlKCkpOwogICAgICAgICB9CiAgICAgfQogICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkUHJvY2Vzc1J1bGUoY29va2llKTsKIH0KIAogdGVtcGxhdGUgPFN0eWxlUmVz
b2x2ZXI6OlN0eWxlQXBwbGljYXRpb25QYXNzIHBhc3M+Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBib29s
IGlzSW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRl
ZE9ubHkpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoU3R5bGVS
ZXNvbHZlU3RhdGUmIHN0YXRlLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGJvb2wg
aXNJbXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVk
T25seSkKIHsKICAgICBpZiAoc3RhcnRJbmRleCA9PSAtMSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKG1fc3R5bGUtPmluc2lkZUxpbmsoKSAhPSBOb3RJbnNpZGVMaW5rKSB7CisgICAgaWYg
KHN0YXRlLnN0eWxlKCktPmluc2lkZUxpbmsoKSAhPSBOb3RJbnNpZGVMaW5rKSB7CiAgICAgICAg
IGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKICAgICAgICAg
ICAgIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNoUmVz
dWx0Lm1hdGNoZWRQcm9wZXJ0aWVzW2ldOwogICAgICAgICAgICAgdW5zaWduZWQgbGlua01hdGNo
VHlwZSA9IG1hdGNoZWRQcm9wZXJ0aWVzLmxpbmtNYXRjaFR5cGU7CiAgICAgICAgICAgICAvLyBG
SVhNRTogSXQgd291bGQgYmUgbmljZXIgdG8gcGFzcyB0aGVzZSBhcyBhcmd1bWVudHMgYnV0IHRo
YXQgcmVxdWlyZXMgY2hhbmdlcyBpbiBtYW55IHBsYWNlcy4KLSAgICAgICAgICAgIG1fYXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlID0gbGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hMaW5rOwotICAgICAgICAgICAgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
ID0gbGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOworICAgICAg
ICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKGxpbmtNYXRjaFR5cGUg
JiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluayk7CisgICAgICAgICAgICBzdGF0ZS5zZXRBcHBs
eVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNr
ZXI6Ok1hdGNoVmlzaXRlZCk7CiAKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydGllczxwYXNzPiht
YXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVs
ZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdo
aXRlbGlzdFR5cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUpKTsKKyAgICAgICAg
ICAgIGFwcGx5UHJvcGVydGllczxwYXNzPihzdGF0ZSwgbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVy
dGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFudCwgaW5o
ZXJpdGVkT25seSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPihtYXRjaGVkUHJv
cGVydGllcy53aGl0ZWxpc3RUeXBlKSk7CiAgICAgICAgIH0KLSAgICAgICAgbV9hcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUgPSB0cnVlOwotICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUgPSBmYWxzZTsKKyAgICAgICAgLy8gbmVlZCB0byByZXZlcnQ/IEkgdGhpbmss
IHdlIGRvbid0IG5lZWQuLi4KKyAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxh
clN0eWxlKHRydWUpOworICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBmb3IgKGludCBpID0g
c3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgKytpKSB7CiAgICAgICAgIGNvbnN0IE1hdGNoZWRQ
cm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0
aWVzW2ldOwotICAgICAgICBhcHBseVByb3BlcnRpZXM8cGFzcz4obWF0Y2hlZFByb3BlcnRpZXMu
cHJvcGVydGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFu
dCwgaW5oZXJpdGVkT25seSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPihtYXRj
aGVkUHJvcGVydGllcy53aGl0ZWxpc3RUeXBlKSk7CisgICAgICAgIGFwcGx5UHJvcGVydGllczxw
YXNzPihzdGF0ZSwgbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy5nZXQoKSwgbWF0Y2hSZXN1
bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFudCwgaW5oZXJpdGVkT25seSwgc3RhdGljX2Nh
c3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPihtYXRjaGVkUHJvcGVydGllcy53aGl0ZWxpc3RUeXBl
KSk7CiAgICAgfQogfQogCkBAIC0yNTA1LDkgKzI0NzUsMTEgQEAgc3RhdGljIGJvb2wgaXNDYWNo
ZWFibGVJbk1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29u
c3QgUmUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1h
dGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QgRWxl
bWVudCogZWxlbWVudCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGll
cyhTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3Vs
dCwgY29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBBU1NFUlQoZWxlbWVudCk7CisgICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gc3RhdGUuc3R5bGUoKTsKKyAgICBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpOwogICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9
IG1hdGNoUmVzdWx0LmlzQ2FjaGVhYmxlID8gY29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaCht
YXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5kYXRhKCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRQ
cm9wZXJ0aWVzLnNpemUoKSkgOiAwOwogICAgIGJvb2wgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFs
c2U7CiAgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0qIGNhY2hlSXRlbSA9IDA7
CkBAIC0yNTE1LDE1ICsyNDg3LDE2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVk
UHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAg
IC8vIFdlIGNhbiBidWlsZCB1cCB0aGUgc3R5bGUgYnkgY29weWluZyBub24taW5oZXJpdGVkIHBy
b3BlcnRpZXMgZnJvbSBhbiBlYXJsaWVyIHN0eWxlIG9iamVjdCBidWlsdCB1c2luZyB0aGUgc2Ft
ZSBleGFjdAogICAgICAgICAvLyBzdHlsZSBkZWNsYXJhdGlvbnMuIFdlIHRoZW4gb25seSBuZWVk
IHRvIGFwcGx5IHRoZSBpbmhlcml0ZWQgcHJvcGVydGllcywgaWYgYW55LCBhcyB0aGVpciB2YWx1
ZXMgY2FuIGRlcGVuZCBvbiB0aGUgCiAgICAgICAgIC8vIGVsZW1lbnQgY29udGV4dC4gVGhpcyBp
cyBmYXN0IGFuZCBzYXZlcyBtZW1vcnkgYnkgcmV1c2luZyB0aGUgc3R5bGUgZGF0YSBzdHJ1Y3R1
cmVzLgotICAgICAgICBtX3N0eWxlLT5jb3B5Tm9uSW5oZXJpdGVkRnJvbShjYWNoZUl0ZW0tPnJl
bmRlclN0eWxlLmdldCgpKTsKLSAgICAgICAgaWYgKG1fcGFyZW50U3R5bGUtPmluaGVyaXRlZERh
dGFTaGFyZWQoY2FjaGVJdGVtLT5wYXJlbnRSZW5kZXJTdHlsZS5nZXQoKSkgJiYgIWlzQXRTaGFk
b3dCb3VuZGFyeShlbGVtZW50KSkgewotICAgICAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXR1
cyA9IG1fc3R5bGUtPmluc2lkZUxpbmsoKTsKKyAgICAgICAgc3R5bGUtPmNvcHlOb25Jbmhlcml0
ZWRGcm9tKGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOworICAgICAgICAvLyBvcnoKKyAg
ICAgICAgaWYgKHBhcmVudFN0eWxlLT5pbmhlcml0ZWREYXRhU2hhcmVkKGNhY2hlSXRlbS0+cGFy
ZW50UmVuZGVyU3R5bGUuZ2V0KCkpICYmICFpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkpIHsK
KyAgICAgICAgICAgIEVJbnNpZGVMaW5rIGxpbmtTdGF0dXMgPSBzdHlsZS0+aW5zaWRlTGluaygp
OwogICAgICAgICAgICAgLy8gSWYgdGhlIGNhY2hlIGl0ZW0gcGFyZW50IHN0eWxlIGhhcyBpZGVu
dGljYWwgaW5oZXJpdGVkIHByb3BlcnRpZXMgdG8gdGhlIGN1cnJlbnQgcGFyZW50IHN0eWxlIHRo
ZW4gdGhlCiAgICAgICAgICAgICAvLyByZXN1bHRpbmcgc3R5bGUgd2lsbCBiZSBpZGVudGljYWwg
dG9vLiBXZSBjb3B5IHRoZSBpbmhlcml0ZWQgcHJvcGVydGllcyBvdmVyIGZyb20gdGhlIGNhY2hl
IGFuZCBhcmUgZG9uZS4KLSAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKGNhY2hlSXRl
bS0+cmVuZGVyU3R5bGUuZ2V0KCkpOworICAgICAgICAgICAgc3R5bGUtPmluaGVyaXRGcm9tKGNh
Y2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOwogCiAgICAgICAgICAgICAvLyBVbmZvcnR1bmF0
ZWx5IHRoZSBsaW5rIHN0YXR1cyBpcyB0cmVhdGVkIGxpa2UgYW4gaW5oZXJpdGVkIHByb3BlcnR5
LiBXZSBuZWVkIHRvIGV4cGxpY2l0bHkgcmVzdG9yZSBpdC4KLSAgICAgICAgICAgIG1fc3R5bGUt
PnNldEluc2lkZUxpbmsobGlua1N0YXR1cyk7CisgICAgICAgICAgICBzdHlsZS0+c2V0SW5zaWRl
TGluayhsaW5rU3RhdHVzKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAg
ICBhcHBseUluaGVyaXRlZE9ubHkgPSB0cnVlOyAKQEAgLTI1MzEsNjAgKzI1MDQsNjAgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0
JiBtYXRjaFJlc3VsdCwgY29uc3QKIAogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgIC8v
IEZpcnN0IGFwcGx5IGFsbCB2YXJpYWJsZSBkZWZpbml0aW9ucywgYXMgdGhleSBtYXkgYmUgdXNl
ZCBkdXJpbmcgYXBwbGljYXRpb24gb2YgbGF0ZXIgcHJvcGVydGllcy4KLSAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KG1hdGNoUmVzdWx0LCBmYWxzZSwgMCwg
bWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRP
bmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KG1h
dGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRj
aFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAg
YXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihtYXRjaFJlc3VsdCwg
dHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdl
cy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1
bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBw
bHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVm
aW5pdGlvbnM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgZmFsc2UsIDAsIG1hdGNoUmVzdWx0Lm1hdGNo
ZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlN
YXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihzdGF0ZSwgbWF0Y2hSZXN1bHQs
IHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJh
bmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgdHJ1
ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5s
YXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVy
dGllczxWYXJpYWJsZURlZmluaXRpb25zPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNo
UmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUs
IGFwcGx5SW5oZXJpdGVkT25seSk7CiAjZW5kaWYKIAogICAgIC8vIE5vdyB3ZSBoYXZlIGFsbCBv
ZiB0aGUgbWF0Y2hlZCBydWxlcyBpbiB0aGUgYXBwcm9wcmlhdGUgb3JkZXIuIFdhbGsgdGhlIHJ1
bGVzIGFuZCBhcHBseQogICAgIC8vIGhpZ2gtcHJpb3JpdHkgcHJvcGVydGllcyBmaXJzdCwgaS5l
LiwgdGhvc2UgcHJvcGVydGllcyB0aGF0IG90aGVyIHByb3BlcnRpZXMgZGVwZW5kIG9uLgogICAg
IC8vIFRoZSBvcmRlciBpcyAoMSkgaGlnaC1wcmlvcml0eSBub3QgaW1wb3J0YW50LCAoMikgaGln
aC1wcmlvcml0eSBpbXBvcnRhbnQsICgzKSBub3JtYWwgbm90IGltcG9ydGFudAogICAgIC8vIGFu
ZCAoNCkgbm9ybWFsIGltcG9ydGFudC4KLSAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7Ci0gICAg
YXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3Vs
dCwgZmFsc2UsIDAsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFw
cGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3Jp
dHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0
QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVy
aXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVy
dGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxl
LCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwot
ICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hS
ZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQu
cmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0KLSAgICBpZiAoY2FjaGVJ
dGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBtX3N0eWxl
LT5lZmZlY3RpdmVab29tKCkpIHsKLSAgICAgICAgbV9mb250RGlydHkgPSB0cnVlOworICAgIHN0
YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhp
Z2hQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgZmFsc2UsIDAsIG1hdGNo
UmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7
CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0
ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUs
IG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsK
KyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRl
LCBtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1h
dGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAg
YXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0
Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1
bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisKKyAgICBpZiAoY2Fj
aGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBzdHls
ZS0+ZWZmZWN0aXZlWm9vbSgpKSB7CisgICAgICAgIHN0YXRlLnNldEZvbnREaXJ0eSh0cnVlKTsK
ICAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gSWYg
b3VyIGZvbnQgZ290IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgotICAgIHVw
ZGF0ZUZvbnQoKTsKKyAgICB1cGRhdGVGb250KHN0YXRlKTsKIAogICAgIC8vIExpbmUtaGVpZ2h0
IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZS4KLSAg
ICBpZiAobV9saW5lSGVpZ2h0VmFsdWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlMaW5lSGVpZ2h0LCBtX2xpbmVIZWlnaHRWYWx1ZSk7CisgICAgaWYgKHN0YXRlLmxpbmVIZWln
aHRWYWx1ZSgpKQorICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUxpbmVI
ZWlnaHQsIHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKTsKIAogICAgIC8vIE1hbnkgcHJvcGVydGll
cyBkZXBlbmQgb24gdGhlIGZvbnQuIElmIGl0IGNoYW5nZXMgd2UganVzdCBhcHBseSBhbGwgcHJv
cGVydGllcy4KLSAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpICE9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKQorICAgIGlmIChj
YWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgIT0g
c3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKQogICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkgPSBm
YWxzZTsKIAogICAgIC8vIE5vdyBkbyB0aGUgbm9ybWFsIHByaW9yaXR5IFVBIHByb3BlcnRpZXMu
Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNo
UmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCBm
YWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMu
bGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgICAKICAgICAvLyBDYWNoZSBvdXIg
Ym9yZGVyIGFuZCBiYWNrZ3JvdW5kIHNvIHRoYXQgd2UgY2FuIGV4YW1pbmUgdGhlbSBsYXRlci4K
LSAgICBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKKyAgICBzdGF0ZS5jYWNoZUJvcmRlckFu
ZEJhY2tncm91bmQoc3RhdGUuc3R5bGUoKSk7CiAgICAgCiAgICAgLy8gTm93IGRvIHRoZSBhdXRo
b3IgYW5kIHVzZXIgbm9ybWFsIHByaW9yaXR5IHByb3BlcnRpZXMgYW5kIGFsbCB0aGUgIWltcG9y
dGFudCBwcm9wZXJ0aWVzLgotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQ
cm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgZmFsc2UsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFS
dWxlICsgMSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJ
bmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJv
cGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhv
clJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRP
bmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4o
bWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRj
aFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwg
dHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMu
bGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0
aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0
Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUgKyAxLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVy
dGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFBy
b3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUs
IG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5s
YXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBt
YXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RV
c2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
PExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJl
c3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBh
cHBseUluaGVyaXRlZE9ubHkpOwogICAgCiAgICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMg
cmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7Cisg
ICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoc3RhdGUpOwogICAgIAotICAgIEFTU0VSVCghbV9mb250
RGlydHkpOworICAgIEFTU0VSVCghc3RhdGUuZm9udERpcnR5KCkpOwogICAgIAogICAgIGlmIChj
YWNoZUl0ZW0gfHwgIWNhY2hlSGFzaCkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNDYWNo
ZWFibGVJbk1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUobV9lbGVtZW50LCBtX3N0eWxlLmdldCgpLCBt
X3BhcmVudFN0eWxlKSkKKyAgICBpZiAoIWlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0Nh
Y2hlKGVsZW1lbnQsIHN0eWxlLCBwYXJlbnRTdHlsZSkpCiAgICAgICAgIHJldHVybjsKLSAgICBh
ZGRUb01hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUobV9zdHlsZS5nZXQoKSwgbV9wYXJlbnRTdHlsZSwg
Y2FjaGVIYXNoLCBtYXRjaFJlc3VsdCk7CisgICAgYWRkVG9NYXRjaGVkUHJvcGVydGllc0NhY2hl
KHN0eWxlLCBwYXJlbnRTdHlsZSwgY2FjaGVIYXNoLCBtYXRjaFJlc3VsdCk7CiB9CiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBjb21wYXJlUGFnZVJ1bGVzKGNvbnN0IFN0eWxlUnVsZVBhZ2UqIHIxLCBj
b25zdCBTdHlsZVJ1bGVQYWdlKiByMikKQEAgLTI2NDYsMTAgKzI2MTksMTAgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjptYXRjaFBhZ2VSdWxlc0Zvckxpc3QoVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYg
bWF0Y2hlZFJ1bGVzLAogICAgIH0KIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjppc0xlZnRQYWdl
KGludCBwYWdlSW5kZXgpIGNvbnN0Citib29sIFN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2UoUmVu
ZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUsIGludCBwYWdlSW5kZXgpIGNvbnN0CiB7CiAgICAg
Ym9vbCBpc0ZpcnN0UGFnZUxlZnQgPSBmYWxzZTsKLSAgICBpZiAoIW1fcm9vdEVsZW1lbnRTdHls
ZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAgIGlmICghcm9vdEVsZW1lbnRTdHlsZS0+
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICBpc0ZpcnN0UGFnZUxlZnQgPSB0cnVl
OwogCiAgICAgcmV0dXJuIChwYWdlSW5kZXggKyAoaXNGaXJzdFBhZ2VMZWZ0ID8gMSA6IDApKSAl
IDI7CkBAIC0yNzQ1LDE4ICsyNzE4LDMyIEBAIENTU1N0eWxlUnVsZSogU3R5bGVSZXNvbHZlcjo6
ZW5zdXJlRnVsbENTU09NV3JhcHBlckZvckluc3BlY3RvcihTdHlsZVJ1bGUqIHJ1bGUpCiAgICAg
cmV0dXJuIG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAuZ2V0KHJ1bGUpLmdldCgpOwogfQog
Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlKQordm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5V2l0aFZhbHVlQ2hlY2tpbmcoU3R5bGVSZXNvbHZlU3RhdGUmIHN0
YXRlLCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiB7Ci0gICAgaW5pdEVsZW1l
bnQoMCk7Ci0gICAgaW5pdEZvclN0eWxlUmVzb2x2ZSgwLCBzdHlsZSk7Ci0gICAgbV9zdHlsZSA9
IHN0eWxlOwotICAgIGFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShpZCwgdmFsdWUpOworICAg
IGlmICh2YWx1ZSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgaWQsIHZhbHVlKTsKIH0K
IAotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseUZv
bnRQcm9wZXJ0eVRvU3R5bGUoUmVuZGVyU3R5bGUqIHRhcmdldCwgY29uc3QgU3R5bGVQcm9wZXJ0
eVNldCogcmVmZXJlbmNlKQogewotICAgIGlmICh2YWx1ZSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0
eShpZCwgdmFsdWUpOworICAgIFN0eWxlUmVzb2x2ZVN0YXRlIHN0YXRlOworICAgIGluaXRFbGVt
ZW50KHN0YXRlLCAwKTsKKyAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKHN0YXRlLCAwLCB0YXJnZXQp
OworICAgIHN0YXRlLnNldEVsZW1lbnQoZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpOwor
ICAgIHN0YXRlLnNldFN0eWxlKHRhcmdldCk7CisKKyAgICBhcHBseVByb3BlcnR5V2l0aFZhbHVl
Q2hlY2tpbmcoc3RhdGUsIENTU1Byb3BlcnR5Rm9udEZhbWlseSwgcmVmZXJlbmNlLT5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSkuZ2V0KCkpOworICAgIGFwcGx5UHJv
cGVydHlXaXRoVmFsdWVDaGVja2luZyhzdGF0ZSwgQ1NTUHJvcGVydHlGb250U3R5bGUsIHJlZmVy
ZW5jZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSkuZ2V0KCkpOwor
ICAgIGFwcGx5UHJvcGVydHlXaXRoVmFsdWVDaGVja2luZyhzdGF0ZSwgQ1NTUHJvcGVydHlGb250
VmFyaWFudCwgcmVmZXJlbmNlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFZh
cmlhbnQpLmdldCgpKTsKKyAgICBhcHBseVByb3BlcnR5V2l0aFZhbHVlQ2hlY2tpbmcoc3RhdGUs
IENTU1Byb3BlcnR5Rm9udFdlaWdodCwgcmVmZXJlbmNlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENT
U1Byb3BlcnR5Rm9udFdlaWdodCkuZ2V0KCkpOworCisgICAgLy8gQXMgZGVzY3JpYmVkIGluIEJV
RzY2MjkxLCBzZXR0aW5nIGZvbnQtc2l6ZSBhbmQgbGluZS1oZWlnaHQgb24gYSBmb250IG1heSBl
bnRhaWwgYSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aERvdWJsZSBjYWxsLAorICAg
IC8vIHdoaWNoIGFzc3VtZXMgdGhlIGZvbnRNZXRyaWNzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBh
ZmZlY3RlZCBmb250LCBvdGhlcndpc2UgYSBjcmFzaCBvY2N1cnMgKHNlZSBodHRwOi8vdHJhYy53
ZWJraXQub3JnL2NoYW5nZXNldC85NjEyMikuCisgICAgLy8gVGhlIHVwZGF0ZUZvbnQoKSBjYWxs
cyBiZWxvdyB1cGRhdGUgdGhlIGZvbnRNZXRyaWNzIGFuZCBlbnN1cmUgdGhlIHByb3BlciBzZXR0
aW5nIG9mIGZvbnQtc2l6ZSBhbmQgbGluZS1oZWlnaHQuCisgICAgdXBkYXRlRm9udChzdGF0ZSk7
CisgICAgYXBwbHlQcm9wZXJ0eVdpdGhWYWx1ZUNoZWNraW5nKHN0YXRlLCBDU1NQcm9wZXJ0eUZv
bnRTaXplLCByZWZlcmVuY2UtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6
ZSkuZ2V0KCkpOworICAgIHVwZGF0ZUZvbnQoc3RhdGUpOworICAgIGFwcGx5UHJvcGVydHlXaXRo
VmFsdWVDaGVja2luZyhzdGF0ZSwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCByZWZlcmVuY2UtPmdl
dFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQoKSk7CiB9CiAKIGlu
bGluZSBib29sIGlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpCkBA
IC0yODUxLDIwICsyODM4LDcgQEAgaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6aXNWYWxpZEN1
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAj
ZW5kaWYKLS8vIFNWRyBoYW5kbGVzIHpvb21pbmcgaW4gYSBkaWZmZXJlbnQgd2F5IGNvbXBhcmVk
IHRvIENTUy4gVGhlIHdob2xlIGRvY3VtZW50IGlzIHNjYWxlZCBpbnN0ZWFkCi0vLyBvZiBlYWNo
IGluZGl2aWR1YWwgbGVuZ3RoIHZhbHVlIGluIHRoZSByZW5kZXIgc3R5bGUgLyB0cmVlLiBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aCooKQotLy8gbXVsdGlwbGllcyBlYWNoIHJlc29s
dmVkIGxlbmd0aCB3aXRoIHRoZSB6b29tIG11bHRpcGxpZXIgLSBzbyBmb3IgU1ZHIHdlIG5lZWQg
dG8gZGlzYWJsZSB0aGF0LgotLy8gVGhvdWdoIGFsbCBDU1MgdmFsdWVzIHRoYXQgY2FuIGJlIGFw
cGxpZWQgdG8gb3V0ZXJtb3N0IDxzdmc+IGVsZW1lbnRzICh3aWR0aC9oZWlnaHQvYm9yZGVyL3Bh
ZGRpbmcuLi4pCi0vLyBuZWVkIHRvIHJlc3BlY3QgdGhlIHNjYWxpbmcuIFJlbmRlckJveCAodGhl
IHBhcmVudCBjbGFzcyBvZiBSZW5kZXJTVkdSb290KSBncmFicyB2YWx1ZXMgbGlrZQotLy8gd2lk
dGgvaGVpZ2h0L2JvcmRlci9wYWRkaW5nLy4uLiBmcm9tIHRoZSBSZW5kZXJTdHlsZSAtPiBmb3Ig
U1ZHIHRoZXNlIHZhbHVlcyB3b3VsZCBuZXZlciBzY2FsZSwKLS8vIGlmIHdlJ2QgcGFzcyBhIDEu
MCB6b29tIGZhY3RvciBldmVyeWh3ZXJlLiBTbyB3ZSBvbmx5IHBhc3MgYSB6b29tIGZhY3RvciBv
ZiAxLjAgZm9yIHNwZWNpZmljCi0vLyBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5PVCBhbGxvd2VkIHRv
IHNjYWxlIHdpdGhpbiBhIHpvb21lZCBTVkcgZG9jdW1lbnQgKGxldHRlci93b3JkLXNwYWNpbmcv
Zm9udC1zaXplKS4KLWJvb2wgU3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKCkKLXsKLSAg
ICByZXR1cm4gbV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCk7Ci19Ci0KLXN0
YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlLCBTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgTGVuZ3RoJiB3b3JraW5nTGVuZ3Ro
KQorc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUsIFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgTGVuZ3RoJiB3b3JraW5n
TGVuZ3RoKQogewogICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZVdlYmtpdE1pbkNvbnRlbnQpIHsKICAgICAgICAgd29ya2luZ0xlbmd0aCA9IExlbmd0aChNaW5D
b250ZW50KTsKQEAgLTI4NzYsNyArMjg1MCw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFj
a0JyZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBTdHlsZVJlc29sCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHdvcmtpbmdMZW5ndGggPSBwcmltaXRp
dmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50
Q29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lv
bj4oc2VsZWN0b3ItPnN0eWxlKCksIHNlbGVjdG9yLT5yb290RWxlbWVudFN0eWxlKCksIHNlbGVj
dG9yLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAgIHdvcmtpbmdMZW5ndGggPSBwcmlt
aXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJj
ZW50Q29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24gfCBBdXRvQ29udmVy
c2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHls
ZSgpLT5lZmZlY3RpdmVab29tKCkpOwogICAgIGlmICh3b3JraW5nTGVuZ3RoLmlzVW5kZWZpbmVk
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjg4NiwxMiArMjg2MCwxMiBAQCBzdGF0
aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSwgU3R5bGVSZXNvbAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBj
cmVhdGVHcmlkVHJhY2tNaW5NYXgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBT
dHlsZVJlc29sdmVyKiBzZWxlY3RvciwgR3JpZFRyYWNrU2l6ZSYgdHJhY2tTaXplKQorc3RhdGlj
IGJvb2wgY3JlYXRlR3JpZFRyYWNrTWluTWF4KENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSwgU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBHcmlkVHJhY2tTaXplJiB0cmFja1NpemUp
CiB7CiAgICAgUGFpciogbWluTWF4VHJhY2tCcmVhZHRoID0gcHJpbWl0aXZlVmFsdWUtPmdldFBh
aXJWYWx1ZSgpOwogICAgIGlmICghbWluTWF4VHJhY2tCcmVhZHRoKSB7CiAgICAgICAgIExlbmd0
aCB3b3JraW5nTGVuZ3RoOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgocHJp
bWl0aXZlVmFsdWUsIHNlbGVjdG9yLCB3b3JraW5nTGVuZ3RoKSkKKyAgICAgICAgaWYgKCFjcmVh
dGVHcmlkVHJhY2tCcmVhZHRoKHByaW1pdGl2ZVZhbHVlLCBzdGF0ZSwgd29ya2luZ0xlbmd0aCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgdHJhY2tTaXplLnNldExlbmd0
aCh3b3JraW5nTGVuZ3RoKTsKQEAgLTI5MDAsMTQgKzI4NzQsMTQgQEAgc3RhdGljIGJvb2wgY3Jl
YXRlR3JpZFRyYWNrTWluTWF4KENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgU3R5
bGVSZXNvbHYKIAogICAgIExlbmd0aCBtaW5UcmFja0JyZWFkdGg7CiAgICAgTGVuZ3RoIG1heFRy
YWNrQnJlYWR0aDsKLSAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgobWluTWF4VHJhY2tC
cmVhZHRoLT5maXJzdCgpLCBzZWxlY3RvciwgbWluVHJhY2tCcmVhZHRoKSB8fCAhY3JlYXRlR3Jp
ZFRyYWNrQnJlYWR0aChtaW5NYXhUcmFja0JyZWFkdGgtPnNlY29uZCgpLCBzZWxlY3RvciwgbWF4
VHJhY2tCcmVhZHRoKSkKKyAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgobWluTWF4VHJh
Y2tCcmVhZHRoLT5maXJzdCgpLCBzdGF0ZSwgbWluVHJhY2tCcmVhZHRoKSB8fCAhY3JlYXRlR3Jp
ZFRyYWNrQnJlYWR0aChtaW5NYXhUcmFja0JyZWFkdGgtPnNlY29uZCgpLCBzdGF0ZSwgbWF4VHJh
Y2tCcmVhZHRoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgdHJhY2tTaXplLnNldE1p
bk1heChtaW5UcmFja0JyZWFkdGgsIG1heFRyYWNrQnJlYWR0aCk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0dyb3VwKENTU1ZhbHVlKiB2YWx1ZSwg
U3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFZlY3RvcjxHcmlkVHJhY2tTaXplPiYgdHJhY2tTaXpl
cykKK3N0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0dyb3VwKENTU1ZhbHVlKiB2YWx1ZSwgU3R5
bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6ZXMp
CiB7CiAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMjkxOCw3ICsyODkyLDcgQEAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrR3JvdXAo
Q1NTVmFsdWUqIHZhbHVlLCBTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgVmVjdG8KICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBHcmlkVHJhY2tTaXplIHRyYWNrU2l6ZTsKLSAg
ICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tNaW5NYXgoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPihjdXJyVmFsdWUpLCBzZWxlY3RvciwgdHJhY2tTaXplKSkKKyAgICAgICAgaWYgKCFj
cmVhdGVHcmlkVHJhY2tNaW5NYXgoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihjdXJy
VmFsdWUpLCBzdGF0ZSwgdHJhY2tTaXplKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICB0cmFja1NpemVzLmFwcGVuZCh0cmFja1NpemUpOwpAQCAtMjkyNiw3ICsyOTAwLDcg
QEAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrR3JvdXAoQ1NTVmFsdWUqIHZhbHVlLCBTdHls
ZVJlc29sdmVyKiBzZWxlY3RvciwgVmVjdG8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGlj
IGJvb2wgY3JlYXRlR3JpZFRyYWNrTGlzdChDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxHcmlkVHJh
Y2tTaXplPiYgdHJhY2tTaXplcywgU3R5bGVSZXNvbHZlciogc2VsZWN0b3IpCitzdGF0aWMgYm9v
bCBjcmVhdGVHcmlkVHJhY2tMaXN0KENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPEdyaWRUcmFja1Np
emU+JiB0cmFja1NpemVzLCBTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiB7CiAgICAgLy8gSGFu
ZGxlICdub25lJy4KICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewpAQCAtMjkz
NCw3ICsyOTA4LDcgQEAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrTGlzdChDU1NWYWx1ZSog
dmFsdWUsIFZlY3RvcjxHcmlkVHJhY2tTaXplPiYgdHJhY2tTaXoKICAgICAgICAgcmV0dXJuIHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gY3JlYXRlR3JpZFRyYWNrR3JvdXAodmFsdWUsIHNlbGVjdG9yLCB0cmFja1NpemVzKTsK
KyAgICByZXR1cm4gY3JlYXRlR3JpZFRyYWNrR3JvdXAodmFsdWUsIHN0YXRlLCB0cmFja1NpemVz
KTsKIH0KIAogCkBAIC0yOTgwLDkgKzI5NTQsOSBAQCBzdGF0aWMgYm9vbCBoYXNWYXJpYWJsZVJl
ZmVyZW5jZShDU1NWYWx1ZSogdmFsdWUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFN0
eWxlUmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJsZXMoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlLCBWZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiYga25vd25F
eHByZXNzaW9ucykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyhTdHlsZVJl
c29sdmVTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgVmVj
dG9yPHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+ID4mIGtub3duRXhwcmVzc2lvbnMp
CiB7Ci0gICAgc3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gZXhwcmVzc2lvbihpZCwg
dmFsdWUtPnNlcmlhbGl6ZVJlc29sdmluZ1ZhcmlhYmxlcygqc3R5bGUoKS0+dmFyaWFibGVzKCkp
KTsKKyAgICBzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiBleHByZXNzaW9uKGlkLCB2
YWx1ZS0+c2VyaWFsaXplUmVzb2x2aW5nVmFyaWFibGVzKCpzdGF0ZS5zdHlsZSgpLT52YXJpYWJs
ZXMoKSkpOwogCiAgICAgaWYgKGtub3duRXhwcmVzc2lvbnMuY29udGFpbnMoZXhwcmVzc2lvbikp
CiAgICAgICAgIHJldHVybjsgLy8gY3ljbGUgZGV0ZWN0ZWQuCkBAIC0yOTk3LDM2ICsyOTcxLDM2
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyhDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxzCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlc3VsdFNldC0+cHJvcGVydHlDb3VudCgpOyBpKyspIHsKICAgICAgICAgU3R5bGVQcm9wZXJ0
eVNldDo6UHJvcGVydHlSZWZlcmVuY2UgcHJvcGVydHkgPSByZXN1bHRTZXQtPnByb3BlcnR5QXQo
aSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eS5pZCgpICE9IENTU1Byb3BlcnR5VmFyaWFibGUgJiYg
aGFzVmFyaWFibGVSZWZlcmVuY2UocHJvcGVydHkudmFsdWUoKSkpCi0gICAgICAgICAgICByZXNv
bHZlVmFyaWFibGVzKHByb3BlcnR5LmlkKCksIHByb3BlcnR5LnZhbHVlKCksIGtub3duRXhwcmVz
c2lvbnMpOworICAgICAgICAgICAgcmVzb2x2ZVZhcmlhYmxlcyhzdGF0ZSwgcHJvcGVydHkuaWQo
KSwgcHJvcGVydHkudmFsdWUoKSwga25vd25FeHByZXNzaW9ucyk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGFwcGx5UHJvcGVydHkocHJvcGVydHkuaWQoKSwgcHJvcGVydHkudmFsdWUoKSk7
CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBwcm9wZXJ0eS5pZCgpLCBwcm9wZXJ0
eS52YWx1ZSgpKTsKICAgICB9CiB9CiAjZW5kaWYKIAotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgU3R5bGVS
ZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykK
ICAgICBpZiAoaWQgIT0gQ1NTUHJvcGVydHlWYXJpYWJsZSAmJiBoYXNWYXJpYWJsZVJlZmVyZW5j
ZSh2YWx1ZSkpIHsKICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJp
bmc+ID4ga25vd25FeHByZXNzaW9uczsKLSAgICAgICAgcmVzb2x2ZVZhcmlhYmxlcyhpZCwgdmFs
dWUsIGtub3duRXhwcmVzc2lvbnMpOworICAgICAgICByZXNvbHZlVmFyaWFibGVzKHN0YXRlLCBp
ZCwgdmFsdWUsIGtub3duRXhwcmVzc2lvbnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2Vu
ZGlmCiAKLSAgICBib29sIGlzSW5oZXJpdCA9IG1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhl
cml0ZWRWYWx1ZSgpOwotICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVl
KCkgfHwgKCFtX3BhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7CisgICAg
Ym9vbCBpc0luaGVyaXQgPSBzdGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVk
VmFsdWUoKTsKKyAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8
ICghc3RhdGUucGFyZW50Tm9kZSgpICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpOwogCi0g
ICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgIWlzSW5pdGlhbCk7IC8vIGlzSW5oZXJpdCAtPiAhaXNJ
bml0aWFsICYmIGlzSW5pdGlhbCAtPiAhaXNJbmhlcml0Ci0gICAgQVNTRVJUKCFpc0luaGVyaXQg
fHwgKG1fcGFyZW50Tm9kZSAmJiBtX3BhcmVudFN0eWxlKSk7IC8vIGlzSW5oZXJpdCAtPiAobV9w
YXJlbnROb2RlICYmIG1fcGFyZW50U3R5bGUpCisgICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgIWlz
SW5pdGlhbCk7CisgICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgKHN0YXRlLnBhcmVudE5vZGUoKSAm
JiBzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAKLSAgICBpZiAoIWFwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSgpICYmICghYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIHx8ICFpc1Zh
bGlkVmlzaXRlZExpbmtQcm9wZXJ0eShpZCkpKSB7CisgICAgaWYgKCFzdGF0ZS5hcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUoKSAmJiAoIXN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5r
U3R5bGUoKSB8fCAhaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSkgewogICAgICAgICAv
LyBMaW1pdCB0aGUgcHJvcGVydGllcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIG9ubHkgdGhlIG9u
ZXMgaG9ub3JlZCBieSA6dmlzaXRlZC4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChpc0luaGVyaXQgJiYgIW1fcGFyZW50U3R5bGUtPmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9w
ZXJ0aWVzKCkgJiYgIUNTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkKLSAgICAg
ICAgbV9wYXJlbnRTdHlsZS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKTsK
KyAgICBpZiAoaXNJbmhlcml0ICYmICFzdGF0ZS5wYXJlbnRTdHlsZSgpLT5oYXNFeHBsaWNpdGx5
SW5oZXJpdGVkUHJvcGVydGllcygpICYmICFDU1NQcm9wZXJ0eTo6aXNJbmhlcml0ZWRQcm9wZXJ0
eShpZCkpCisgICAgICAgIHN0YXRlLnBhcmVudFN0eWxlKCktPnNldEhhc0V4cGxpY2l0bHlJbmhl
cml0ZWRQcm9wZXJ0aWVzKCk7CiAKICNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKICAgICBpZiAo
aWQgPT0gQ1NTUHJvcGVydHlWYXJpYWJsZSkgewpAQCAtMzAzNCw3ICszMDA4LDcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAgICAgQ1NTVmFyaWFibGVWYWx1ZSogdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxD
U1NWYXJpYWJsZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBBU1NFUlQoIXZhcmlhYmxlLT5uYW1l
KCkuaXNFbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZS0+dmFsdWUoKS5pc0VtcHR5
KCkpOwotICAgICAgICBtX3N0eWxlLT5zZXRWYXJpYWJsZSh2YXJpYWJsZS0+bmFtZSgpLCB2YXJp
YWJsZS0+dmFsdWUoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFZhcmlhYmxlKHZhcmlh
YmxlLT5uYW1lKCksIHZhcmlhYmxlLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICNlbmRpZgpAQCAtMzA0MywxNyArMzAxNywxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNvbnN0IFBy
b3BlcnR5SGFuZGxlciYgaGFuZGxlciA9IG1fc3R5bGVCdWlsZGVyLnByb3BlcnR5SGFuZGxlcihp
ZCk7CiAgICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgpKSB7CiAgICAgICAgIGlmIChpc0luaGVyaXQp
Ci0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5oZXJpdFZhbHVlKGlkLCB0aGlzKTsKKyAgICAg
ICAgICAgIGhhbmRsZXIuYXBwbHlJbmhlcml0VmFsdWUoaWQsIHN0YXRlKTsKICAgICAgICAgZWxz
ZSBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaXRpYWxWYWx1ZShp
ZCwgdGhpcyk7CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5pdGlhbFZhbHVlKGlkLCBzdGF0
ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlWYWx1ZShpZCwgdGhp
cywgdmFsdWUpOworICAgICAgICAgICAgaGFuZGxlci5hcHBseVZhbHVlKGlkLCBzdGF0ZSwgdmFs
dWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlID0gdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSA/IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpIDogMDsKIAotICAgIGZsb2F0IHpvb21GYWN0b3IgPSBt
X3N0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgZmxvYXQgem9vbUZhY3RvciA9IHN0YXRlLnN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKIAogICAgIC8vIFdoYXQgZm9sbG93cyBpcyBhIGxpc3Qg
dGhhdCBtYXBzIHRoZSBDU1MgcHJvcGVydGllcyBpbnRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgZnJv
bnQtZW5kCiAgICAgLy8gUmVuZGVyU3R5bGUgdmFsdWVzLiBTaG9ydGhhbmRzIChlLmcuIGJvcmRl
ciwgYmFja2dyb3VuZCkgb2NjdXIgaW4gdGhpcyBsaXN0IGFzIHdlbGwgYW5kCkBAIC0zMDY3LDcg
KzMwNDEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgLy8gbm90ZSBpcyBhIHJlbWluZGVy
IHRoYXQgZXZlbnR1YWxseSAiaW5oZXJpdCIgbmVlZHMgdG8gYmUgc3VwcG9ydGVkLgogCiAgICAg
ICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJD
b250ZW50KCk7CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJDb250ZW50KCk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCkBAIC0zMDc5LDE5ICsz
MDUzLDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBp
LnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VHZW5lcmF0b3JWYWx1
ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc0dyYWRpZW50VmFsdWUoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0
ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPihpdGVtKS0+Z3Jh
ZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhpcykuZ2V0KCkpLCBkaWRTZXQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZElt
YWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+KGl0ZW0pLT5ncmFkaWVu
dFdpdGhTdHlsZXNSZXNvbHZlZChzdGF0ZSkuZ2V0KCkpLCBkaWRTZXQpOwogICAgICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50
KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NJbWFnZUdlbmVyYXRv
clZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nh
c3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAg
ICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzSW1hZ2VTZXRWYWx1ZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENT
U1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KGl0ZW0pKSwg
ZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChz
ZXRPclBlbmRpbmdGcm9tVmFsdWUoc3RhdGUsIENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nh
c3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAg
ICAgZGlkU2V0ID0gdHJ1ZTsKICNlbmRpZgogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgICAgIGlmIChpdGVtLT5pc0ltYWdlVmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRDb250ZW50KGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNv
bnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CisgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoY2FjaGVkT3JQZW5kaW5n
RnJvbVZhbHVlKHN0YXRlLCBDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdl
VmFsdWUqPihpdGVtKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KQEAg
LTMxMDIsMTcgKzMwNzYsMTcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogY29udGVudFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
PihpdGVtKTsKIAogICAgICAgICAgICAgICAgIGlmIChjb250ZW50VmFsdWUtPmlzU3RyaW5nKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChjb250ZW50VmFsdWUt
PmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5p
bXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUtPmlzQXR0cigpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gYSBuYW1lc3BhY2UgYmUgc3BlY2lmaWVkIGZvciBh
biBhdHRyKGZvbyk/Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3N0eWxlLT5zdHlsZVR5cGUo
KSA9PSBOT1BTRVVETykKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFVuaXF1
ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc3R5bGUoKS0+c3R5bGVUeXBlKCkg
PT0gTk9QU0VVRE8pCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRV
bmlxdWUoKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9wYXJlbnRTdHlsZS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0ZS5wYXJlbnRTdHlsZSgpLT5zZXRVbmlxdWUoKTsKICAgICAgICAgICAgICAgICAgICAgUXVh
bGlmaWVkTmFtZSBhdHRyKG51bGxBdG9tLCBjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCku
aW1wbCgpLCBudWxsQXRvbSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUgPSBtX2VsZW1lbnQtPmdldEF0dHJpYnV0ZShhdHRyKTsKLSAgICAgICAgICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IHZh
bHVlLmltcGwoKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSA9IHN0YXRlLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGF0dHIpOworICAgICAg
ICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8g
ZW1wdHlBdG9tIDogdmFsdWUuaW1wbCgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBk
aWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciB0aGUgZmFjdCB0
aGF0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgYWZmZWN0cyB0aGUgc3R5bGUKICAgICAgICAgICAgICAg
ICAgICAgbV9mZWF0dXJlcy5hdHRyc0luUnVsZXMuYWRkKGF0dHIubG9jYWxOYW1lKCkuaW1wbCgp
KTsKQEAgLTMxMjMsMjQgKzMwOTcsMjQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGxpc3RTdHlsZUlkZW50ICE9IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpc3RTdHlsZVR5cGUgPSBzdGF0aWNfY2FzdDxFTGlzdFN0eWxlVHlwZT4obGlzdFN0
eWxlSWRlbnQgLSBDU1NWYWx1ZURpc2MpOwogICAgICAgICAgICAgICAgICAgICBPd25QdHI8Q291
bnRlckNvbnRlbnQ+IGNvdW50ZXIgPSBhZG9wdFB0cihuZXcgQ291bnRlckNvbnRlbnQoY291bnRl
clZhbHVlLT5pZGVudGlmaWVyKCksIGxpc3RTdHlsZVR5cGUsIGNvdW50ZXJWYWx1ZS0+c2VwYXJh
dG9yKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChjb3VudGVy
LnJlbGVhc2UoKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0Q29udGVudChjb3VudGVyLnJlbGVhc2UoKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAg
ICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGNvbnRlbnRWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlT3BlblF1b3RlOgotICAgICAgICAgICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0Q29udGVudChPUEVOX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChPUEVOX1FVT1RFLCBkaWRTZXQpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ2xvc2VRdW90
ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoQ0xPU0VfUVVP
VEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRD
b250ZW50KENMT1NFX1FVT1RFLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGlk
U2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlTm9PcGVuUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRDb250ZW50KE5PX09QRU5fUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KE5PX09QRU5fUVVPVEUsIGRp
ZFNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVO
b0Nsb3NlUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50
KE5PX0NMT1NFX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0Q29udGVudChOT19DTE9TRV9RVU9URSwgZGlkU2V0KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTMxNTAsMTYgKzMxMjQsMTYgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAoIWRpZFNldCkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5jbGVhckNvbnRlbnQoKTsK
KyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhckNvbnRlbnQoKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlRdW90ZXM6CiAgICAg
ICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhtX3Bh
cmVudFN0eWxlLT5xdW90ZXMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRRdW90
ZXMoc3RhdGUucGFyZW50U3R5bGUoKS0+cXVvdGVzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgIG1fc3R5bGUt
PnNldFF1b3RlcygwKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFF1b3RlcygwKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAodmFsdWUtPmlzVmFs
dWVMaXN0KCkpIHsKQEAgLTMxNzcsNDMgKzMxNTEsNDMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
ICAgICAgICBTdHJpbmcgZW5kUXVvdGUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHNlY29uZCktPmdldFN0cmluZ1ZhbHVlKCk7CiAgICAgICAgICAgICAgICAgcXVvdGVzLT5hZGRQ
YWlyKHN0ZDo6bWFrZV9wYWlyKHN0YXJ0UXVvdGUsIGVuZFF1b3RlKSk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90ZXMocXVvdGVzKTsKKyAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldFF1b3RlcyhxdW90ZXMpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSkgewogICAgICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRRdW90ZXMoUXVvdGVzRGF0YTo6Y3JlYXRlKCkpOworICAgICAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpjcmVhdGUoKSk7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250RmFtaWx5OiB7
CiAgICAgICAgIC8vIGxpc3Qgb2Ygc3RyaW5ncyBhbmQgaWRzCiAgICAgICAgIGlmIChpc0luaGVy
aXQpIHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBwYXJlbnRGb250RGVzY3JpcHRpb24g
PSBtX3BhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAg
ICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBzdGF0ZS5w
YXJlbnRGb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KHBhcmVudEZvbnREZXNjcmlwdGlvbi5nZW5lcmlj
RmFtaWx5KCkpOwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShwYXJlbnRG
b250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0SXNTcGVjaWZpZWRGb250KHBhcmVudEZvbnREZXNjcmlwdGlvbi5pc1NwZWNpZmllZEZv
bnQoKSk7Ci0gICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsK
KyAgICAgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzSW5pdGlhbCkg
ewogICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGluaXRpYWxEZXNjID0gRm9udERlc2NyaXB0
aW9uKCk7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9z
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgICAgICAvLyBX
ZSBuZWVkIHRvIGFkanVzdCB0aGUgc2l6ZSB0byBhY2NvdW50IGZvciB0aGUgZ2VuZXJpYyBmYW1p
bHkgY2hhbmdlIGZyb20gbW9ub3NwYWNlCiAgICAgICAgICAgICAvLyB0byBub24tbW9ub3NwYWNl
LgogICAgICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZvbnRE
ZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpCi0gICAgICAgICAgICAgICAgc2V0Rm9u
dFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NT
VmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCBmYWxzZSkp
OworICAgICAgICAgICAgICAgIHNldEZvbnRTaXplKHN0YXRlLCBmb250RGVzY3JpcHRpb24sIGZv
bnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3Jp
cHRpb24ua2V5d29yZFNpemUoKSAtIDEsIGZhbHNlKSk7CiAgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0R2VuZXJpY0ZhbWlseShpbml0aWFsRGVzYy5nZW5lcmljRmFtaWx5KCkpOwogICAg
ICAgICAgICAgaWYgKCFpbml0aWFsRGVzYy5maXJzdEZhbWlseSgpLmZhbWlseUlzRW1wdHkoKSkK
ICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KGluaXRpYWxEZXNjLmZp
cnN0RmFtaWx5KCkpOwotICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbik7CisgICAgICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghdmFs
dWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlw
dGlvbigpOwogICAgICAgICBGb250RmFtaWx5JiBmaXJzdEZhbWlseSA9IGZvbnREZXNjcmlwdGlv
bi5maXJzdEZhbWlseSgpOwogICAgICAgICBGb250RmFtaWx5KiBjdXJyRmFtaWx5ID0gMDsKIApA
QCAtMzI4Miw0MyArMzI1Niw0MyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAvLyBJZiBjdXJyRmFt
aWx5IGlzIG5vbi16ZXJvIHRoZW4gd2Ugc2V0IGF0IGxlYXN0IG9uZSBmYW1pbHkgb24gdGhpcyBk
ZXNjcmlwdGlvbi4KICAgICAgICAgaWYgKGN1cnJGYW1pbHkpIHsKICAgICAgICAgICAgIGlmIChm
b250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4ZWRE
ZWZhdWx0U2l6ZSgpICE9IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKQotICAgICAgICAg
ICAgICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKGRv
Y3VtZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgp
IC0gMSwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSk7CisgICAgICAgICAgICAgICAg
c2V0Rm9udFNpemUoc3RhdGUsIGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKGRv
Y3VtZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgp
IC0gMSwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSk7CiAKLSAgICAgICAgICAgIHNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICAgICAgc3RhdGUuc2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuOwogICAgIH0KIC8vIHNob3J0aGFuZCBwcm9wZXJ0aWVzCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eUJhY2tncm91bmQ6CiAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgIG1fc3R5
bGUtPmNsZWFyQmFja2dyb3VuZExheWVycygpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0QmFj
a2dyb3VuZENvbG9yKENvbG9yKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJC
YWNrZ3JvdW5kTGF5ZXJzKCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCYWNrZ3Jv
dW5kQ29sb3IoQ29sb3IoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbmhlcml0KSB7Ci0gICAg
ICAgICAgICBtX3N0eWxlLT5pbmhlcml0QmFja2dyb3VuZExheWVycygqbV9wYXJlbnRTdHlsZS0+
YmFja2dyb3VuZExheWVycygpKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJhY2tncm91bmRD
b2xvcihtX3BhcmVudFN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5pbmhlcml0QmFja2dyb3VuZExheWVycygqc3RhdGUucGFyZW50U3R5bGUoKS0+
YmFja2dyb3VuZExheWVycygpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJhY2tn
cm91bmRDb2xvcihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKSk7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrOgog
ICAgICAgICBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJNYXNrTGF5
ZXJzKCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhck1hc2tMYXllcnMoKTsKICAg
ICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdE1h
c2tMYXllcnMoKm1fcGFyZW50U3R5bGUtPm1hc2tMYXllcnMoKSk7CisgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5pbmhlcml0TWFza0xheWVycygqc3RhdGUucGFyZW50U3R5bGUoKS0+bWFza0xh
eWVycygpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250OgogICAg
ICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uID0gbV9wYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAg
ICBtX3N0eWxlLT5zZXRMaW5lSGVpZ2h0KG1fcGFyZW50U3R5bGUtPnNwZWNpZmllZExpbmVIZWln
aHQoKSk7Ci0gICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7Ci0gICAgICAgICAgICBz
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKTsK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoc3RhdGUucGFyZW50U3R5
bGUoKS0+c3BlY2lmaWVkTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnNldExpbmVI
ZWlnaHRWYWx1ZSgwKTsKKyAgICAgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkgewogICAgICAgICAg
ICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpOwogICAgICAgICAgICAg
QVNTRVJUKHNldHRpbmdzKTsgLy8gSWYgd2UncmUgZG9pbmcgc3R5bGUgcmVzb2x1dGlvbiwgdGhp
cyBkb2N1bWVudCBzaG91bGQgYWx3YXlzIGJlIGluIGEgZnJhbWUgYW5kIHRodXMgaGF2ZSBzZXR0
aW5ncwogICAgICAgICAgICAgaWYgKCFzZXR0aW5ncykKICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICBpbml0aWFsaXplRm9udFN0eWxlKHNldHRpbmdzKTsKKyAgICAgICAgICAg
IGluaXRpYWxpemVGb250U3R5bGUoc3RhdGUsIHNldHRpbmdzKTsKICAgICAgICAgfSBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZSkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodChS
ZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0gICAgICAgICAgICBtX2xpbmVIZWln
aHRWYWx1ZSA9IDA7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KFJl
bmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnNldExp
bmVIZWlnaHRWYWx1ZSgwKTsKIAogICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbjsKICAgICAgICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lzdGVt
Rm9udChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSwgZm9udERlc2NyaXB0aW9uKTsKQEAgLTMz
MzQsMjcgKzMzMDgsMjcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSB8fCAhc2V0dGlu
Z3MtPnNjcmVlbkZvbnRTdWJzdGl0dXRpb25FbmFibGVkKCkpOwogCiAgICAgICAgICAgICAgICAg
Ly8gSGFuZGxlIHRoZSB6b29tIGZhY3Rvci4KLSAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3Vt
ZW50KCksIG1fc3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBm
b250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSkpOwotICAg
ICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXpl
RnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQoKSwgc3RhdGUuc3R5bGUoKSwgZm9udERlc2NyaXB0
aW9uLmlzQWJzb2x1dGVTaXplKCksIGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIHN0
YXRlLnVzZVNWR1pvb21SdWxlcygpKSk7CisgICAgICAgICAgICAgICAgc3RhdGUuc2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSBpZiAodmFsdWUtPmlzRm9udFZhbHVlKCkpIHsKICAgICAgICAgICAgIEZvbnRWYWx1ZSogZm9u
dCA9IHN0YXRpY19jYXN0PEZvbnRWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgICAgIGlmICghZm9u
dC0+c3R5bGUgfHwgIWZvbnQtPnZhcmlhbnQgfHwgIWZvbnQtPndlaWdodAogICAgICAgICAgICAg
ICAgIHx8ICFmb250LT5zaXplIHx8ICFmb250LT5saW5lSGVpZ2h0IHx8ICFmb250LT5mYW1pbHkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUZvbnRTdHlsZSwgZm9udC0+c3R5bGUuZ2V0KCkpOwotICAgICAgICAgICAgYXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBmb250LT52YXJpYW50LmdldCgpKTsKLSAg
ICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBmb250LT53ZWln
aHQuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlG
b250U3R5bGUsIGZvbnQtPnN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHko
c3RhdGUsIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIGZvbnQtPnZhcmlhbnQuZ2V0KCkpOworICAg
ICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBmb250
LT53ZWlnaHQuZ2V0KCkpOwogICAgICAgICAgICAgLy8gVGhlIHByZXZpb3VzIHByb3BlcnRpZXMg
Y2FuIGRpcnR5IG91ciBmb250IGJ1dCB0aGV5IGRvbid0IHRyeSB0byByZWFkIHRoZSBmb250J3MK
ICAgICAgICAgICAgIC8vIHByb3BlcnRpZXMgYmFjaywgd2hpY2ggaXMgc2FmZS4gSG93ZXZlciBp
ZiBmb250LXNpemUgaXMgdXNpbmcgdGhlICdleCcgdW5pdCwgaXQgd2lsbAogICAgICAgICAgICAg
Ly8gbmVlZCBxdWVyeSB0aGUgZGlydGllZCBmb250J3MgeC1oZWlnaHQgdG8gZ2V0IHRoZSBjb21w
dXRlZCBzaXplLiBUbyBiZSBzYWZlIGluIHRoaXMKICAgICAgICAgICAgIC8vIGNhc2UsIGxldCdz
IGp1c3QgdXBkYXRlIHRoZSBmb250IG5vdy4KLSAgICAgICAgICAgIHVwZGF0ZUZvbnQoKTsKLSAg
ICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgZm9udC0+c2l6ZS5n
ZXQoKSk7CisgICAgICAgICAgICB1cGRhdGVGb250KHN0YXRlKTsKKyAgICAgICAgICAgIGFwcGx5
UHJvcGVydHkoc3RhdGUsIENTU1Byb3BlcnR5Rm9udFNpemUsIGZvbnQtPnNpemUuZ2V0KCkpOwog
Ci0gICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IGZvbnQtPmxpbmVIZWlnaHQuZ2V0KCk7
CisgICAgICAgICAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoZm9udC0+bGluZUhlaWdodC5n
ZXQoKSk7CiAKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5
LCBmb250LT5mYW1pbHkuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwg
Q1NTUHJvcGVydHlGb250RmFtaWx5LCBmb250LT5mYW1pbHkuZ2V0KCkpOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybjsKIApAQCAtMzM2NCwxMSArMzMzOCwxMSBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3c6IHsKICAgICAgICAgaWYgKGlzSW5oZXJp
dCkgewogICAgICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdykKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbV9zdHlsZS0+c2V0VGV4dFNoYWRvdyhtX3BhcmVudFN0eWxlLT50
ZXh0U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqbV9wYXJlbnRTdHlsZS0+dGV4
dFNoYWRvdygpKSkgOiBudWxscHRyKTsKLSAgICAgICAgICAgIHJldHVybiBtX3N0eWxlLT5zZXRC
b3hTaGFkb3cobV9wYXJlbnRTdHlsZS0+Ym94U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93
RGF0YSgqbV9wYXJlbnRTdHlsZS0+Ym94U2hhZG93KCkpKSA6IG51bGxwdHIpOworICAgICAgICAg
ICAgICAgIHJldHVybiBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0U2hhZG93KHN0YXRlLnBhcmVudFN0
eWxlKCktPnRleHRTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCpzdGF0ZS5wYXJl
bnRTdHlsZSgpLT50ZXh0U2hhZG93KCkpKSA6IG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJu
IHN0YXRlLnN0eWxlKCktPnNldEJveFNoYWRvdyhzdGF0ZS5wYXJlbnRTdHlsZSgpLT5ib3hTaGFk
b3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCpzdGF0ZS5wYXJlbnRTdHlsZSgpLT5ib3hT
aGFkb3coKSkpIDogbnVsbHB0cik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzSW5pdGlhbCB8
fCBwcmltaXRpdmVWYWx1ZSkgLy8gaW5pdGlhbCB8IG5vbmUKLSAgICAgICAgICAgIHJldHVybiBp
ZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cgPyBtX3N0eWxlLT5zZXRUZXh0U2hhZG93KG51bGxw
dHIpIDogbV9zdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJu
IGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdyA/IHN0YXRlLnN0eWxlKCktPnNldFRleHRTaGFk
b3cobnVsbHB0cikgOiBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiAKICAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTMzNzgsMjkgKzMzNTIsMjkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICghY3VyclZh
bHVlLT5pc1NoYWRvd1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1ZhbHVlKj4oY3VyclZh
bHVlKTsKLSAgICAgICAgICAgIGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0
eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICBpbnQg
eSA9IGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5
bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRl
bS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwg
em9vbUZhY3RvcikgOiAwOwotICAgICAgICAgICAgaW50IHNwcmVhZCA9IGl0ZW0tPnNwcmVhZCA/
IGl0ZW0tPnNwcmVhZC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRT
dHlsZSwgem9vbUZhY3RvcikgOiAwOworICAgICAgICAgICAgaW50IHggPSBpdGVtLT54LT5jb21w
dXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6
b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGludCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxp
bnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7
CisgICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRl
TGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29t
RmFjdG9yKSA6IDA7CisgICAgICAgICAgICBpbnQgc3ByZWFkID0gaXRlbS0+c3ByZWFkID8gaXRl
bS0+c3ByZWFkLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKSA6IDA7CiAgICAgICAgICAgICBTaGFkb3dTdHlsZSBz
aGFkb3dTdHlsZSA9IGl0ZW0tPnN0eWxlICYmIGl0ZW0tPnN0eWxlLT5nZXRJZGVudCgpID09IENT
U1ZhbHVlSW5zZXQgPyBJbnNldCA6IE5vcm1hbDsKICAgICAgICAgICAgIENvbG9yIGNvbG9yOwog
ICAgICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQotICAgICAgICAgICAgICAgIGNvbG9yID0gY29s
b3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0KCkpOwotICAgICAgICAgICAgZWxz
ZSBpZiAobV9zdHlsZSkKLSAgICAgICAgICAgICAgICBjb2xvciA9IG1fc3R5bGUtPmNvbG9yKCk7
CisgICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShzdGF0ZSwg
aXRlbS0+Y29sb3IuZ2V0KCkpOworICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUuc3R5bGUoKSkK
KyAgICAgICAgICAgICAgICBjb2xvciA9IHN0YXRlLnN0eWxlKCktPmNvbG9yKCk7CiAKICAgICAg
ICAgICAgIE93blB0cjxTaGFkb3dEYXRhPiBzaGFkb3dEYXRhID0gYWRvcHRQdHIobmV3IFNoYWRv
d0RhdGEoSW50UG9pbnQoeCwgeSksIGJsdXIsIHNwcmVhZCwgc2hhZG93U3R5bGUsIGlkID09IENT
U1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IENvbG9y
Ojp0cmFuc3BhcmVudCkpOwogICAgICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5VGV4dFNo
YWRvdykKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRUZXh0U2hhZG93KHNoYWRvd0RhdGEu
cmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3Qg
dGhlIGZpcnN0IGVudHJ5CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dFNo
YWRvdyhzaGFkb3dEYXRhLnJlbGVhc2UoKSwgaS5pbmRleCgpKTsgLy8gYWRkIHRvIHRoZSBsaXN0
IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIG1fc3R5bGUtPnNldEJveFNoYWRvdyhzaGFkb3dEYXRhLnJlbGVhc2UoKSwgaS5p
bmRleCgpKTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRy
eQorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJveFNoYWRvdyhzaGFkb3dEYXRh
LnJlbGVhc2UoKSwgaS5pbmRleCgpKTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90
IHRoZSBmaXJzdCBlbnRyeQogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6IHsKICAgICAgICAgSEFORExFX0lOSEVS
SVRfQU5EX0lOSVRJQUwoYm94UmVmbGVjdCwgQm94UmVmbGVjdCkKICAgICAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3hSZWZsZWN0KFJlbmRlclN0
eWxlOjppbml0aWFsQm94UmVmbGVjdCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dEJveFJlZmxlY3QoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3hSZWZsZWN0KCkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM0MTEsMTMgKzMzODUsMTQgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICAgICAgUmVmUHRyPFN0eWxlUmVmbGVjdGlvbj4gcmVmbGVjdGlvbiA9IFN0eWxlUmVm
bGVjdGlvbjo6Y3JlYXRlKCk7CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldERpcmVjdGlvbigqcmVm
bGVjdFZhbHVlLT5kaXJlY3Rpb24oKSk7CiAgICAgICAgIGlmIChyZWZsZWN0VmFsdWUtPm9mZnNl
dCgpKQotICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RWYWx1ZS0+b2Zm
c2V0KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENv
bnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0
eWxlLCB6b29tRmFjdG9yKSk7CisgICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVm
bGVjdFZhbHVlLT5vZmZzZXQoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNp
b24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdGF0ZS5zdHls
ZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpKTsKICAgICAgICAgTmlu
ZVBpZWNlSW1hZ2UgbWFzazsKICAgICAgICAgbWFzay5zZXRNYXNrRGVmYXVsdHMoKTsKLSAgICAg
ICAgbV9zdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZShpZCwgcmVmbGVjdFZhbHVlLT5tYXNrKCks
IG1hc2spOworICAgICAgICAvLyBtX3N0eWxlTWFwLgorICAgICAgICBDU1NUb1N0eWxlTWFwOjpt
YXBOaW5lUGllY2VJbWFnZShzdGF0ZSwgaWQsIHJlZmxlY3RWYWx1ZS0+bWFzaygpLCBtYXNrKTsK
ICAgICAgICAgcmVmbGVjdGlvbi0+c2V0TWFzayhtYXNrKTsKIAotICAgICAgICBtX3N0eWxlLT5z
ZXRCb3hSZWZsZWN0KHJlZmxlY3Rpb24ucmVsZWFzZSgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0Qm94UmVmbGVjdChyZWZsZWN0aW9uLnJlbGVhc2UoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVNyYzogLy8gT25seSB1c2VkIGluIEBmb250LWZh
Y2UgcnVsZXMuCkBAIC0zNDI2LDI5ICszNDAxLDI5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZToKICAgICAgICAgaWYg
KGlzSW5oZXJpdCkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVsZUNvbG9yKG1f
cGFyZW50U3R5bGUtPmNvbHVtblJ1bGVDb2xvcigpLmlzVmFsaWQoKSA/IG1fcGFyZW50U3R5bGUt
PmNvbHVtblJ1bGVDb2xvcigpIDogbV9wYXJlbnRTdHlsZS0+Y29sb3IoKSk7Ci0gICAgICAgICAg
ICBtX3N0eWxlLT5zZXRDb2x1bW5SdWxlU3R5bGUobV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZVN0
eWxlKCkpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVsZVdpZHRoKG1fcGFyZW50
U3R5bGUtPmNvbHVtblJ1bGVXaWR0aCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dENvbHVtblJ1bGVDb2xvcihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jb2x1bW5SdWxlQ29sb3IoKS5p
c1ZhbGlkKCkgPyBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jb2x1bW5SdWxlQ29sb3IoKSA6IHN0YXRl
LnBhcmVudFN0eWxlKCktPmNvbG9yKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
Q29sdW1uUnVsZVN0eWxlKHN0YXRlLnBhcmVudFN0eWxlKCktPmNvbHVtblJ1bGVTdHlsZSgpKTsK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbHVtblJ1bGVXaWR0aChzdGF0ZS5wYXJl
bnRTdHlsZSgpLT5jb2x1bW5SdWxlV2lkdGgoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbml0
aWFsKQotICAgICAgICAgICAgbV9zdHlsZS0+cmVzZXRDb2x1bW5SdWxlKCk7CisgICAgICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5yZXNldENvbHVtblJ1bGUoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlOgogICAgICAgICBpZiAoIWlzSW5oZXJpdCkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZURpcmVjdGlv
bihtX3BhcmVudFN0eWxlLT5tYXJxdWVlRGlyZWN0aW9uKCkpOwotICAgICAgICBtX3N0eWxlLT5z
ZXRNYXJxdWVlSW5jcmVtZW50KG1fcGFyZW50U3R5bGUtPm1hcnF1ZWVJbmNyZW1lbnQoKSk7Ci0g
ICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChtX3BhcmVudFN0eWxlLT5tYXJxdWVlU3Bl
ZWQoKSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQobV9wYXJlbnRTdHls
ZS0+bWFycXVlZUxvb3BDb3VudCgpKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUJlaGF2
aW9yKG1fcGFyZW50U3R5bGUtPm1hcnF1ZWVCZWhhdmlvcigpKTsKKyAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0TWFycXVlZURpcmVjdGlvbihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5tYXJxdWVlRGly
ZWN0aW9uKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KHN0
YXRlLnBhcmVudFN0eWxlKCktPm1hcnF1ZWVJbmNyZW1lbnQoKSk7CisgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldE1hcnF1ZWVTcGVlZChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5tYXJxdWVlU3BlZWQo
KSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVMb29wQ291bnQoc3RhdGUucGFy
ZW50U3R5bGUoKS0+bWFycXVlZUxvb3BDb3VudCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0TWFycXVlZUJlaGF2aW9yKHN0YXRlLnBhcmVudFN0eWxlKCktPm1hcnF1ZWVCZWhhdmlvcigp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlUmVw
ZXRpdGlvbjogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChtYXJxdWVlTG9v
cENvdW50LCBNYXJxdWVlTG9vcENvdW50KQogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVM
b29wQ291bnQoLTEpOyAvLyAtMSBtZWFucyByZXBlYXQgZm9yZXZlci4KKyAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVMb29wQ291bnQoLTEpOyAvLyAtMSBtZWFucyByZXBlYXQg
Zm9yZXZlci4KICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpCi0g
ICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KHByaW1pdGl2ZVZhbHVlLT5n
ZXRJbnRWYWx1ZSgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVMb29w
Q291bnQocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlU3BlZWQ6IHsKQEAgLTM0NTgs
MTkgKzM0MzMsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgaWYgKGludCBpZGVudCA9IHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGlkZW50KSB7CiAg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2xvdzoKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRNYXJxdWVlU3BlZWQoNTAwKTsgLy8gNTAwIG1zZWMuCisgICAgICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKDUwMCk7IC8vIDUwMCBtc2VjLgogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAg
ICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoODUpOyAvLyA4NW1zZWMuIFRoZSBXaW5JRSBk
ZWZhdWx0LgorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZCg4
NSk7IC8vIDg1bXNlYy4gVGhlIFdpbklFIGRlZmF1bHQuCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlRmFzdDoKLSAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRNYXJxdWVlU3BlZWQoMTApOyAvLyAxMG1zZWMuIFN1cGVyIGZhc3QuCisgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKDEwKTsgLy8gMTBtc2VjLiBTdXBl
ciBmYXN0LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1RpbWUoKSkKLSAgICAgICAgICAgIG1fc3R5bGUt
PnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZVRpbWU8aW50LCBDU1NQcmlt
aXRpdmVWYWx1ZTo6TWlsbGlzZWNvbmRzPigpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZVRpbWU8aW50LCBDU1NQcmlt
aXRpdmVWYWx1ZTo6TWlsbGlzZWNvbmRzPigpKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZl
VmFsdWUtPmlzTnVtYmVyKCkpIC8vIEZvciBzY3JvbGxhbW91bnQgc3VwcG9ydC4KLSAgICAgICAg
ICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUo
KSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZl
VmFsdWUtPmdldEludFZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXJxdWVlSW5jcmVtZW50OiB7CkBAIC0zNDgwLDE5ICszNDU1LDE5
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkg
ewogICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsOgotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDEsIEZpeGVkKSk7IC8vIDFweC4KKyAgICAgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgxLCBGaXhlZCkp
OyAvLyAxcHguCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1Zh
bHVlTm9ybWFsOgotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQo
TGVuZ3RoKDYsIEZpeGVkKSk7IC8vIDZweC4gVGhlIFdpbklFIGRlZmF1bHQuCisgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoNiwgRml4ZWQp
KTsgLy8gNnB4LiBUaGUgV2luSUUgZGVmYXVsdC4KICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMYXJnZToKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgzNiwgRml4ZWQpKTsgLy8gMzZweC4KKyAgICAgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgzNiwgRml4
ZWQpKTsgLy8gMzZweC4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIExlbmd0aCBtYXJxdWVlTGVuZ3RoID0gY29udmVy
dFRvSW50TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUp
OworICAgICAgICAgICAgTGVuZ3RoIG1hcnF1ZWVMZW5ndGggPSBjb252ZXJ0VG9JbnRMZW5ndGgo
cHJpbWl0aXZlVmFsdWUsIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSk7
CiAgICAgICAgICAgICBpZiAoIW1hcnF1ZWVMZW5ndGguaXNVbmRlZmluZWQoKSkKLSAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KG1hcnF1ZWVMZW5ndGgpOworICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVJbmNyZW1lbnQobWFycXVlZUxl
bmd0aCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM1MDEsMTkgKzM0
NzYsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldExvY2FsZShudWxsQXRvbSk7
CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMb2NhbGUobnVsbEF0b20pOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRMb2NhbGUocHJpbWl0aXZlVmFsdWUtPmdl
dFN0cmluZ1ZhbHVlKCkpOwotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRTY3JpcHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihtX3N0eWxlLT5sb2Nh
bGUoKSkpOwotICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExvY2FsZShwcmltaXRpdmVWYWx1ZS0+Z2V0U3Ry
aW5nVmFsdWUoKSk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBz
dGF0ZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNjcmlw
dChsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKHN0YXRlLnN0eWxlKCktPmxvY2Fs
ZSgpKSk7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0
U2l6ZUFkanVzdDogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0ZXh0U2l6
ZUFkanVzdCwgVGV4dFNpemVBZGp1c3QpCiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUgfHwg
IXByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBzZXRUZXh0U2l6ZUFkanVzdChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZUF1dG8pOworICAgICAgICBzdGF0ZS5zZXRUZXh0U2l6ZUFkanVzdChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2lm
IEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKQEAgLTM1MjQsNyArMzQ5OSw3IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0RGFz
aGJvYXJkUmVnaW9ucyhSZW5kZXJTdHlsZTo6bm9uZURhc2hib2FyZFJlZ2lvbnMoKSk7CisgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREYXNoYm9hcmRSZWdpb25zKFJlbmRlclN0eWxlOjpu
b25lRGFzaGJvYXJkUmVnaW9ucygpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CkBAIC0zNTQ5LDkgKzM1MjQsOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIGxlZnQg
PSBMZW5ndGgoKTsKIAogICAgICAgICAgICAgaWYgKHJlZ2lvbi0+bV9pc0NpcmNsZSkKLSAgICAg
ICAgICAgICAgICBtX3N0eWxlLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdp
b246OkNpcmNsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJl
Z2lvbiA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpDaXJjbGUsIHJl
Z2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24gPT0gZmlyc3Qg
PyBmYWxzZSA6IHRydWUpOwogICAgICAgICAgICAgZWxzZSBpZiAocmVnaW9uLT5tX2lzUmVjdGFu
Z2xlKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURh
c2hib2FyZFJlZ2lvbjo6UmVjdGFuZ2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJv
dHRvbSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKKyAgICAgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdp
b246OlJlY3RhbmdsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQs
IHJlZ2lvbiA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CiAgICAgICAgICAgICByZWdpb24gPSBy
ZWdpb24tPm1fbmV4dC5nZXQoKTsKICAgICAgICAgfQogCkBAIC0zNTY0LDggKzM1MzksOCBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBcHBSZWdpb246IHsKICAgICAg
ICAgaWYgKCFwcmltaXRpdmVWYWx1ZSB8fCAhcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5bGUtPnNldERyYWdnYWJsZVJlZ2lvbk1v
ZGUocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVEcmFnID8gRHJhZ2dhYmxl
UmVnaW9uRHJhZyA6IERyYWdnYWJsZVJlZ2lvbk5vRHJhZyk7Ci0gICAgICAgIG1fZWxlbWVudC0+
ZG9jdW1lbnQoKS0+c2V0SGFzQW5ub3RhdGVkUmVnaW9ucyh0cnVlKTsKKyAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0RHJhZ2dhYmxlUmVnaW9uTW9kZShwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZURyYWcgPyBEcmFnZ2FibGVSZWdpb25EcmFnIDogRHJhZ2dhYmxlUmVnaW9u
Tm9EcmFnKTsKKyAgICAgICAgc3RhdGUuZG9jdW1lbnQoKS0+c2V0SGFzQW5ub3RhdGVkUmVnaW9u
cyh0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzU4MSwyMSArMzU1
NiwyMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIHJlc3VsdCAqPSAzOwogICAgICAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVUaGlj
aykKICAgICAgICAgICAgICAgICByZXN1bHQgKj0gNTsKLSAgICAgICAgICAgIHdpZHRoID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1T
KS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29t
RmFjdG9yKTsKKyAgICAgICAgICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShy
ZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4o
c3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICB3aWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZSgpLCBt
X3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgd2lkdGggPSBwcmlt
aXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9v
dEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIG1fc3R5bGUtPnNldFRleHRTdHJva2VXaWR0aCh3aWR0aCk7CisgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldFRleHRTdHJva2VXaWR0aCh3aWR0aCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybTogewogICAgICAg
ICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0cmFuc2Zvcm0sIFRyYW5zZm9ybSk7CiAgICAg
ICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICAgICAgY3JlYXRlVHJhbnNm
b3JtT3BlcmF0aW9ucyh2YWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCBvcGVyYXRp
b25zKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0VHJhbnNmb3JtKG9wZXJhdGlvbnMpOworICAgICAg
ICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5y
b290RWxlbWVudFN0eWxlKCksIG9wZXJhdGlvbnMpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRUcmFuc2Zvcm0ob3BlcmF0aW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFBlcnNwZWN0aXZlOiB7CkBAIC0zNjA1LDM0ICszNTgwLDM0IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAgbV9zdHls
ZS0+c2V0UGVyc3BlY3RpdmUoMCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRQZXJz
cGVjdGl2ZSgwKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGZs
b2F0IHBlcnNwZWN0aXZlVmFsdWU7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5n
dGgoKSkKLSAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+Y29t
cHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9y
KTsKKyAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0
ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6
b29tRmFjdG9yKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkp
IHsKICAgICAgICAgICAgIC8vIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0cmVhdCB2YWx1
ZWxlc3MgbnVtYmVycyBhcyBweC4KLSAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwg
bV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHBlcnNwZWN0aXZl
VmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByaW1pdGl2ZVZhbHVlLT5nZXREb3Vi
bGVWYWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKS0+Y29tcHV0ZUxlbmd0aDxmbG9h
dD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsK
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKHBlcnNw
ZWN0aXZlVmFsdWUgPj0gMC4wZikKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFBlcnNwZWN0aXZl
KHBlcnNwZWN0aXZlVmFsdWUpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UGVyc3Bl
Y3RpdmUocGVyc3BlY3RpdmVWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbjoKICAgICAgICAgaWYgKGlzSW5pdGlhbCkKLSAg
ICAgICAgICAgIG1fc3R5bGUtPmNsZWFyQW5pbWF0aW9ucygpOworICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+Y2xlYXJBbmltYXRpb25zKCk7CiAgICAgICAgIGVsc2UgaWYgKGlzSW5oZXJpdCkK
LSAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRBbmltYXRpb25zKG1fcGFyZW50U3R5bGUtPmFu
aW1hdGlvbnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0QW5pbWF0aW9u
cyhzdGF0ZS5wYXJlbnRTdHlsZSgpLT5hbmltYXRpb25zKCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246CiAgICAgICAgIGlmIChpc0luaXRp
YWwpCi0gICAgICAgICAgICBtX3N0eWxlLT5jbGVhclRyYW5zaXRpb25zKCk7CisgICAgICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5jbGVhclRyYW5zaXRpb25zKCk7CiAgICAgICAgIGVsc2UgaWYgKGlz
SW5oZXJpdCkKLSAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRUcmFuc2l0aW9ucyhtX3BhcmVu
dFN0eWxlLT50cmFuc2l0aW9ucygpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmluaGVy
aXRUcmFuc2l0aW9ucyhzdGF0ZS5wYXJlbnRTdHlsZSgpLT50cmFuc2l0aW9ucygpKTsKICAgICAg
ICAgcmV0dXJuOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiB7CkBAIC0zNjQwLDggKzM2MTUsOCBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgQ29sb3IgY29sID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFs
dWUpOwotICAgICAgICBtX3N0eWxlLT5zZXRUYXBIaWdobGlnaHRDb2xvcihjb2wpOworICAgICAg
ICBDb2xvciBjb2wgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShzdGF0ZSwgcHJpbWl0aXZlVmFs
dWUpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUYXBIaWdobGlnaHRDb2xvcihjb2wpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zNjUwLDcgKzM2MjUsNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh1c2VUb3VjaE92ZXJm
bG93U2Nyb2xsaW5nLCBVc2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKTsKICAgICAgICAgaWYgKCFw
cmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBtX3N0eWxlLT5zZXRV
c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENT
U1ZhbHVlVG91Y2gpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRVc2VUb3VjaE92ZXJmbG93
U2Nyb2xsaW5nKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlVG91Y2gpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zNjkzLDkgKzM2NjgsOSBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dpY2FsV2lkdGg6CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxIZWlnaHQ6CiAgICAgewotICAgICAgICBD
U1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVBy
b3BlcnR5KGlkLCBtX3N0eWxlLT5kaXJlY3Rpb24oKSwgbV9zdHlsZS0+d3JpdGluZ01vZGUoKSk7
CisgICAgICAgIENTU1Byb3BlcnR5SUQgbmV3SWQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVj
dGlvbkF3YXJlUHJvcGVydHkoaWQsIHN0YXRlLnN0eWxlKCktPmRpcmVjdGlvbigpLCBzdGF0ZS5z
dHlsZSgpLT53cml0aW5nTW9kZSgpKTsKICAgICAgICAgQVNTRVJUKG5ld0lkICE9IGlkKTsKLSAg
ICAgICAgcmV0dXJuIGFwcGx5UHJvcGVydHkobmV3SWQsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IGFwcGx5UHJvcGVydHkoc3RhdGUsIG5ld0lkLCB2YWx1ZSk7CiAgICAgfQogICAgIGNhc2UgQ1NT
UHJvcGVydHlGb250U3RyZXRjaDoKICAgICBjYXNlIENTU1Byb3BlcnR5UGFnZToKQEAgLTM3MjUs
MTIgKzM3MDAsMTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUwod3JpdGluZ01vZGUsIFdyaXRpbmdNb2RlKTsKICAgICAgICAgCiAgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHNldFdyaXRpbmdNb2RlKCpwcmltaXRpdmVWYWx1
ZSk7CisgICAgICAgICAgICBzdGF0ZS5zZXRXcml0aW5nTW9kZSgqcHJpbWl0aXZlVmFsdWUpOwog
CiAgICAgICAgIC8vIEZJWE1FOiBJdCBpcyBub3Qgb2sgdG8gbW9kaWZ5IGRvY3VtZW50IHN0YXRl
IHdoaWxlIGFwcGx5aW5nIHN0eWxlLgotICAgICAgICBpZiAobV9lbGVtZW50ICYmIG1fZWxlbWVu
dCA9PSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICAg
ICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVt
ZW50KHRydWUpOwotCisgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCkgJiYgc3RhdGUuZWxlbWVu
dCgpID09IHN0YXRlLmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQorICAgICAgICAgICAg
c3RhdGUuZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCh0cnVl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzczOCw3ICszNzEyLDcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodGV4dE9yaWVudGF0aW9u
LCBUZXh0T3JpZW50YXRpb24pOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSkKLSAgICAg
ICAgICAgIHNldFRleHRPcmllbnRhdGlvbigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAg
c3RhdGUuc2V0VGV4dE9yaWVudGF0aW9uKCpwcmltaXRpdmVWYWx1ZSk7CiAKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTM3NDYsNyArMzcyMCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdExpbmVCb3hDb250YWluOiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklU
X0FORF9JTklUSUFMKGxpbmVCb3hDb250YWluLCBMaW5lQm94Q29udGFpbikKICAgICAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
Tm9uZSkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUJveENvbnRhaW4oTGluZUJveENv
bnRhaW5Ob25lKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVCb3hDb250YWlu
KExpbmVCb3hDb250YWluTm9uZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApA
QCAtMzc1NCwyMSArMzcyOCwyMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgIENTU0xpbmVCb3hDb250YWluVmFsdWUqIGxpbmVCb3hDb250YWluVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NMaW5lQm94Q29udGFpblZhbHVlKj4odmFsdWUpOwotICAgICAgICBtX3N0
eWxlLT5zZXRMaW5lQm94Q29udGFpbihsaW5lQm94Q29udGFpblZhbHVlLT52YWx1ZSgpKTsKKyAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUJveENvbnRhaW4obGluZUJveENvbnRhaW5WYWx1
ZS0+dmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBDU1MgRm9udHMg
TW9kdWxlIExldmVsIDMKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udEZlYXR1cmVTZXR0
aW5nczogewogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKLSAgICAgICAgICAgIHNldEZvbnREZXNjcmlw
dGlvbihtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKS5tYWtlTm9ybWFsRmVhdHVyZVNldHRpbmdz
KCkpOworICAgICAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKHN0YXRlLmZvbnREZXNj
cmlwdGlvbigpLm1ha2VOb3JtYWxGZWF0dXJlU2V0dGluZ3MoKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9u
IGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICBDU1NW
YWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CiAgICAg
ICAgIFJlZlB0cjxGb250RmVhdHVyZVNldHRpbmdzPiBzZXR0aW5ncyA9IEZvbnRGZWF0dXJlU2V0
dGluZ3M6OmNyZWF0ZSgpOwogICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7CkBAIC0z
NzgwLDcgKzM3NTQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgc2V0dGluZ3MtPmFwcGVu
ZChGb250RmVhdHVyZShmZWF0dXJlLT50YWcoKSwgZmVhdHVyZS0+dmFsdWUoKSkpOwogICAgICAg
ICB9CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGZWF0dXJlU2V0dGluZ3Moc2V0dGluZ3Mu
cmVsZWFzZSgpKTsKLSAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNzg4LDIzICszNzYyLDIzIEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZpbHRlcjogewogICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChmaWx0ZXIsIEZpbHRlcik7CiAgICAgICAgIEZpbHRlck9wZXJhdGlv
bnMgb3BlcmF0aW9uczsKLSAgICAgICAgaWYgKGNyZWF0ZUZpbHRlck9wZXJhdGlvbnModmFsdWUs
IHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgb3BlcmF0aW9ucykpCi0gICAgICAgICAgICBt
X3N0eWxlLT5zZXRGaWx0ZXIob3BlcmF0aW9ucyk7CisgICAgICAgIGlmIChjcmVhdGVGaWx0ZXJP
cGVyYXRpb25zKHN0YXRlLCB2YWx1ZSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRT
dHlsZSgpLCBvcGVyYXRpb25zKSkKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEZpbHRl
cihvcGVyYXRpb25zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRHcmlkQ29sdW1uczogewogICAgICAgICBWZWN0b3I8R3JpZFRyYWNr
U2l6ZT4gdHJhY2tTaXplczsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tMaXN0KHZhbHVl
LCB0cmFja1NpemVzLCB0aGlzKSkKKyAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tMaXN0KHZh
bHVlLCB0cmFja1NpemVzLCBzdGF0ZSkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1f
c3R5bGUtPnNldEdyaWRDb2x1bW5zKHRyYWNrU2l6ZXMpOworICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRHcmlkQ29sdW1ucyh0cmFja1NpemVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZFJvd3M6IHsKICAgICAgICAgVmVjdG9yPEdyaWRU
cmFja1NpemU+IHRyYWNrU2l6ZXM7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2
YWx1ZSwgdHJhY2tTaXplcywgdGhpcykpCisgICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlz
dCh2YWx1ZSwgdHJhY2tTaXplcywgc3RhdGUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBtX3N0eWxlLT5zZXRHcmlkUm93cyh0cmFja1NpemVzKTsKKyAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0R3JpZFJvd3ModHJhY2tTaXplcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTM4MTIsMTQgKzM3ODYsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgR3JpZFBvc2l0aW9uIGNv
bHVtbjsKICAgICAgICAgaWYgKCFjcmVhdGVHcmlkUG9zaXRpb24odmFsdWUsIGNvbHVtbikpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5bGUtPnNldEdyaWRJdGVtQ29sdW1uKGNv
bHVtbik7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEdyaWRJdGVtQ29sdW1uKGNvbHVtbik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRS
b3c6IHsKICAgICAgICAgR3JpZFBvc2l0aW9uIHJvdzsKICAgICAgICAgaWYgKCFjcmVhdGVHcmlk
UG9zaXRpb24odmFsdWUsIHJvdykpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5
bGUtPnNldEdyaWRJdGVtUm93KHJvdyk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEdyaWRJ
dGVtUm93KHJvdyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gVGhlc2UgcHJvcGVy
dGllcyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIFN0eWxlQnVpbGRlciBsb29rdXAgdGFibGUuCkBA
IC00MTA5LDkxICs0MDgzLDkxIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAjaWYgRU5BQkxFKFNWRykKICAgICBk
ZWZhdWx0OgogICAgICAgICAvLyBUcnkgdGhlIFNWRyBwcm9wZXJ0aWVzCi0gICAgICAgIGFwcGx5
U1ZHUHJvcGVydHkoaWQsIHZhbHVlKTsKKyAgICAgICAgYXBwbHlTVkdQcm9wZXJ0eShzdGF0ZSwg
aWQsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgfQogfQogCi1QYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJl
c29sdmVyOjpzdHlsZUltYWdlKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNJbWFnZVZh
bHVlKCkpCi0gICAgICAgIHJldHVybiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHks
IHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPih2YWx1ZSkpOworICAgICAgICByZXR1cm4gY2Fj
aGVkT3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRlLCBwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1h
Z2VWYWx1ZSo+KHZhbHVlKSk7CiAKICAgICBpZiAodmFsdWUtPmlzSW1hZ2VHZW5lcmF0b3JWYWx1
ZSgpKSB7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNHcmFkaWVudFZhbHVlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0aWNfY2Fz
dDxDU1NHcmFkaWVudFZhbHVlKj4odmFsdWUpLT5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCh0
aGlzKS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUo
cHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPih2YWx1ZSkpOwor
ICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShzdGF0ZSwgcHJv
cGVydHksIHN0YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPih2YWx1ZSktPmdyYWRpZW50V2l0
aFN0eWxlc1Jlc29sdmVkKHN0YXRlKS5nZXQoKSk7CisgICAgICAgIHJldHVybiBnZW5lcmF0ZWRP
clBlbmRpbmdGcm9tVmFsdWUoc3RhdGUsIHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFnZUdl
bmVyYXRvclZhbHVlKj4odmFsdWUpKTsKICAgICB9CiAKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NF
VCkKICAgICBpZiAodmFsdWUtPmlzSW1hZ2VTZXRWYWx1ZSgpKQotICAgICAgICByZXR1cm4gc2V0
T3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVNldFZhbHVl
Kj4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHNldE9yUGVuZGluZ0Zyb21WYWx1ZShzdGF0ZSwg
cHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPih2YWx1ZSkpOwogI2VuZGlm
CiAKICAgICBpZiAodmFsdWUtPmlzQ3Vyc29ySW1hZ2VWYWx1ZSgpKQotICAgICAgICByZXR1cm4g
Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NDdXJzb3JJ
bWFnZVZhbHVlKj4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGN1cnNvck9yUGVuZGluZ0Zyb21W
YWx1ZShzdGF0ZSwgcHJvcGVydHksIHN0YXRpY19jYXN0PENTU0N1cnNvckltYWdlVmFsdWUqPih2
YWx1ZSkpOwogCiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5
bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHksIENTU0ltYWdlVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJl
c29sdmVyOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRl
LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVZhbHVlKiB2YWx1ZSkKIHsKICAgICBS
ZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoKTsK
ICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgIG1fcGVu
ZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICAgICAgc3RhdGUu
cGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOwogICAgIHJldHVy
biBpbWFnZS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNv
bHZlcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHks
IENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBT
dHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoU3R5bGVSZXNvbHZlU3Rh
dGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZUdlbmVyYXRvclZhbHVl
KiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzUGVuZGluZygpKSB7Ci0gICAgICAgIG1fcGVu
ZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICAgICAgc3RhdGUu
cGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOwogICAgICAgICBy
ZXR1cm4gU3R5bGVQZW5kaW5nSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7CiAgICAgfQogICAgIHJldHVy
biBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUodmFsdWUpOwogfQogCiAjaWYgRU5BQkxFKENT
U19JTUFHRV9TRVQpCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnNldE9y
UGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVNldFZhbHVl
KiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5k
aW5nRnJvbVZhbHVlKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSwgQ1NTSW1hZ2VTZXRWYWx1ZSogdmFsdWUpCiB7Ci0gICAgUmVmUHRyPFN0eWxlSW1hZ2U+
IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50KCkpOworICAg
IFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZVNl
dChzdGF0ZS5kb2N1bWVudCgpKTsKICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0lt
YWdlKCkpCi0gICAgICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHksIHZh
bHVlKTsKKyAgICAgICAgc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0
eSwgdmFsdWUpOwogICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CiB9CiAjZW5kaWYKIAotUGFz
c1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpjdXJzb3JPclBlbmRpbmdGcm9tVmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSogdmFsdWUpCitQ
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmN1cnNvck9yUGVuZGluZ0Zyb21W
YWx1ZShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENT
U0N1cnNvckltYWdlVmFsdWUqIHZhbHVlKQogewotICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFn
ZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZShkb2N1bWVudCgpKTsKKyAgICBSZWZQdHI8
U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2Uoc3RhdGUuZG9j
dW1lbnQoKSk7CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQotICAg
ICAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAg
ICAgIHN0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsK
ICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNo
ZWNrRm9yVGV4dFNpemVBZGp1c3QoKQordm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRT
aXplQWRqdXN0KFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKLSAgICBpZiAobV9zdHlsZS0+dGV4dFNp
emVBZGp1c3QoKSkKKyAgICBpZiAoc3R5bGUtPnRleHRTaXplQWRqdXN0KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24obV9zdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCkpOworICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRp
b24oc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKTsKICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0
Q29tcHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkpOwotICAgIG1f
c3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOworICAgIHN0eWxl
LT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKIH0KIAotdm9pZCBTdHls
ZVJlc29sdmVyOjpjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5n
ZShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKQogewogICAgIGlmIChzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpID09IHBh
cmVudFN0eWxlLT5lZmZlY3RpdmVab29tKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgY2hpbGRGb250ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwog
ICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24oY2hpbGRGb250KTsKLSAgICBz
ZXRGb250U2l6ZShuZXdGb250RGVzY3JpcHRpb24sIGNoaWxkRm9udC5zcGVjaWZpZWRTaXplKCkp
OworICAgIHNldEZvbnRTaXplKHN0YXRlLCBuZXdGb250RGVzY3JpcHRpb24sIGNoaWxkRm9udC5z
cGVjaWZpZWRTaXplKCkpOwogICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERl
c2NyaXB0aW9uKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1p
bHlDaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit2
b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShTdHlsZVJlc29s
dmVTdGF0ZSYgc3RhdGUsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKQogewogICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgY2hpbGRGb250ID0gc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpOwogCkBAIC00MjI3LDExICs0MjAxLDExIEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVu
ZGVyU3R5bGUqCiAgICAgfQogCiAgICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlv
bihjaGlsZEZvbnQpOwotICAgIHNldEZvbnRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7
CisgICAgc2V0Rm9udFNpemUoc3RhdGUsIG5ld0ZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7CiAgICAg
c3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwogfQogCi12b2lk
IFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUoU2V0dGluZ3MqIHNldHRpbmdzKQor
dm9pZCBTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKFN0eWxlUmVzb2x2ZVN0YXRl
JiBzdGF0ZSwgU2V0dGluZ3MqIHNldHRpbmdzKQogewogICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb247CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERl
c2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseSk7CkBAIC00MjQzLDE2ICs0MjE3LDE3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0aW5ncyogc2V0dGluZ3MpCiAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLmFwcGVuZEZhbWlseSgwKTsKICAg
ICB9CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0g
Q1NTVmFsdWVYeFNtYWxsICsgMSk7Ci0gICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBm
b250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZhbHNlKSk7Ci0g
ICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQo
KSk7Ci0gICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwotICAgIHNldEZvbnREZXNjcmlwdGlvbihm
b250RGVzY3JpcHRpb24pOworICAgIHNldEZvbnRTaXplKHN0YXRlLCBmb250RGVzY3JpcHRpb24s
IGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZmFsc2UpKTsK
KyAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGlu
ZUhlaWdodCgpKTsKKyAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CisgICAgc3RhdGUu
c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQgU3R5bGVSZXNv
bHZlcjo6c2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0
IHNpemUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKFN0eWxlUmVzb2x2ZVN0YXRl
JiBzdGF0ZSwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUpCiB7
CisgICAgQVNTRVJUKHN0YXRlLmVsZW1lbnQoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNw
ZWNpZmllZFNpemUoc2l6ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShn
ZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBtX3N0eWxlLmdldCgp
LCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1bGVz
KCkpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6
ZUZyb21TcGVjaWZpZWRTaXplKHN0YXRlLmRvY3VtZW50KCksIHN0YXRlLnN0eWxlKCksIGZvbnRE
ZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXplLCBzdGF0ZS51c2VTVkdab29tUnVsZXMo
KSkpOwogfQogCiBmbG9hdCBTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lm
aWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCBpc0Fi
c29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMpCkBA
IC00NDUwLDcgKzQ0MjUsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2
ZVZhbHVlSXNEZXJpdmVkRnJvbUVsZW1lbnQoQ1NTUHJpbWl0aXZlVmFsdQogICAgIH0KIH0KIAot
Q29sb3IgU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZl
VmFsdWUqIHZhbHVlLCBib29sIGZvclZpc2l0ZWRMaW5rKSBjb25zdAorQ29sb3IgU3R5bGVSZXNv
bHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBD
U1NQcmltaXRpdmVWYWx1ZSogdmFsdWUsIGJvb2wgZm9yVmlzaXRlZExpbmspCiB7CiAgICAgaWYg
KHZhbHVlLT5pc1JHQkNvbG9yKCkpCiAgICAgICAgIHJldHVybiBDb2xvcih2YWx1ZS0+Z2V0UkdC
QTMyVmFsdWUoKSk7CkBAIC00NDYwLDE1ICs0NDM1LDE1IEBAIENvbG9yIFN0eWxlUmVzb2x2ZXI6
OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwgYm9vbCBm
b3JWCiAgICAgY2FzZSAwOgogICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICBjYXNlIENTU1Zh
bHVlV2Via2l0VGV4dDoKLSAgICAgICAgcmV0dXJuIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dGV4
dENvbG9yKCk7CisgICAgICAgIHJldHVybiBzdGF0ZS5kb2N1bWVudCgpLT50ZXh0Q29sb3IoKTsK
ICAgICBjYXNlIENTU1ZhbHVlV2Via2l0TGluazoKLSAgICAgICAgcmV0dXJuIChtX2VsZW1lbnQt
PmlzTGluaygpICYmIGZvclZpc2l0ZWRMaW5rKSA/IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlz
aXRlZExpbmtDb2xvcigpIDogbV9lbGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsKKyAg
ICAgICAgcmV0dXJuIChzdGF0ZS5lbGVtZW50KCktPmlzTGluaygpICYmIGZvclZpc2l0ZWRMaW5r
KSA/IHN0YXRlLmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rQ29sb3IoKSA6IHN0YXRlLmRvY3VtZW50
KCktPmxpbmtDb2xvcigpOwogICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRBY3RpdmVsaW5rOgotICAg
ICAgICByZXR1cm4gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5hY3RpdmVMaW5rQ29sb3IoKTsKKyAg
ICAgICAgcmV0dXJuIHN0YXRlLmRvY3VtZW50KCktPmFjdGl2ZUxpbmtDb2xvcigpOwogICAgIGNh
c2UgQ1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvcjoKICAgICAgICAgcmV0dXJuIFJlbmRlclRo
ZW1lOjpmb2N1c1JpbmdDb2xvcigpOwogICAgIGNhc2UgQ1NTVmFsdWVDdXJyZW50Y29sb3I6Ci0g
ICAgICAgIHJldHVybiBtX3N0eWxlLT5jb2xvcigpOworICAgICAgICByZXR1cm4gc3RhdGUuc3R5
bGUoKS0+Y29sb3IoKTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gY29sb3JGb3JDU1NW
YWx1ZShpZGVudCk7CiAgICAgfQpAQCAtNDgwMCwxOSArNDc3NSwxOSBAQCBzdGF0aWMgRmlsdGVy
T3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGZpbHRlck9wZXJhdGlvbkZvclR5cGUoV2ViS2l0Q1NT
RmlsdGVyVmFsdQogfQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQot
dm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cygpCit2b2lkIFN0eWxl
UmVzb2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0
ZSkKIHsKLSAgICBpZiAoIW1fc3R5bGUtPmhhc0ZpbHRlcigpIHx8IG1fcGVuZGluZ1NWR0RvY3Vt
ZW50cy5pc0VtcHR5KCkpCisgICAgaWYgKCFzdGF0ZS5zdHlsZSgpLT5oYXNGaWx0ZXIoKSB8fCBz
dGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2VsZW1l
bnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7Ci0gICAgVmVjdG9yPFJlZlB0
cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBtX3N0eWxlLT5tdXRhYmxl
RmlsdGVyKCkub3BlcmF0aW9ucygpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRS
ZXNvdXJjZUxvYWRlciA9IHN0YXRlLmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7
CisgICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMg
PSBzdGF0ZS5zdHlsZSgpLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlck9wZXJh
dGlvbnMuYXQoaSk7CiAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5
cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkgewogICAgICAgICAgICAgUmVmZXJl
bmNlRmlsdGVyT3BlcmF0aW9uKiByZWZlcmVuY2VGaWx0ZXIgPSBzdGF0aWNfY2FzdDxSZWZlcmVu
Y2VGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24uZ2V0KCkpOwogCi0gICAgICAgICAg
ICBXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKiB2YWx1ZSA9IG1fcGVuZGluZ1NWR0RvY3VtZW50
cy5nZXQocmVmZXJlbmNlRmlsdGVyKS5nZXQoKTsKKyAgICAgICAgICAgIFdlYktpdENTU1NWR0Rv
Y3VtZW50VmFsdWUqIHZhbHVlID0gc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cygpLmdldChyZWZl
cmVuY2VGaWx0ZXIpLmdldCgpOwogICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIENhY2hlZFNWR0RvY3VtZW50KiBjYWNoZWREb2N1
bWVudCA9IHZhbHVlLT5sb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKQEAgLTQ4MjMsMzQgKzQ3
OTgsMzQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cygpCiAg
ICAgICAgICAgICByZWZlcmVuY2VGaWx0ZXItPnNldENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNl
KGFkb3B0UHRyKG5ldyBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShjYWNoZWREb2N1bWVudCkp
KTsKICAgICAgICAgfQogICAgIH0KLSAgICBtX3BlbmRpbmdTVkdEb2N1bWVudHMuY2xlYXIoKTsK
KyAgICBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzKCkuY2xlYXIoKTsKIH0KICNlbmRpZgogCiAj
aWYgRU5BQkxFKENTU19TSEFERVJTKQotU3R5bGVTaGFkZXIqIFN0eWxlUmVzb2x2ZXI6OnN0eWxl
U2hhZGVyKENTU1ZhbHVlKiB2YWx1ZSkKK1N0eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVyOjpzdHls
ZVNoYWRlcihTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAg
ICBpZiAodmFsdWUtPmlzV2ViS2l0Q1NTU2hhZGVyVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIGNh
Y2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKHN0YXRpY19jYXN0PFdlYktpdENTU1No
YWRlclZhbHVlKj4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGNhY2hlZE9yUGVuZGluZ1N0eWxl
U2hhZGVyRnJvbVZhbHVlKHN0YXRlLCBzdGF0aWNfY2FzdDxXZWJLaXRDU1NTaGFkZXJWYWx1ZSo+
KHZhbHVlKSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVN0eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVy
OjpjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShXZWJLaXRDU1NTaGFkZXJWYWx1
ZSogdmFsdWUpCitTdHlsZVNoYWRlciogU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nU3R5
bGVTaGFkZXJGcm9tVmFsdWUoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBXZWJLaXRDU1NTaGFk
ZXJWYWx1ZSogdmFsdWUpCiB7CiAgICAgU3R5bGVTaGFkZXIqIHNoYWRlciA9IHZhbHVlLT5jYWNo
ZWRPclBlbmRpbmdTaGFkZXIoKTsKICAgICBpZiAoc2hhZGVyICYmIHNoYWRlci0+aXNQZW5kaW5n
U2hhZGVyKCkpCi0gICAgICAgIG1faGFzUGVuZGluZ1NoYWRlcnMgPSB0cnVlOworICAgICAgICBz
dGF0ZS5zZXRIYXNQZW5kaW5nU2hhZGVycyh0cnVlKTsKICAgICByZXR1cm4gc2hhZGVyOwogfQog
Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycygpCit2b2lkIFN0eWxlUmVz
b2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycyhTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiB7Ci0g
ICAgaWYgKCFtX3N0eWxlLT5oYXNGaWx0ZXIoKSB8fCAhbV9oYXNQZW5kaW5nU2hhZGVycykKKyAg
ICBpZiAoIXN0YXRlLnN0eWxlKCktPmhhc0ZpbHRlcigpIHx8ICFzdGF0ZS5oYXNQZW5kaW5nU2hh
ZGVycygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2Fj
aGVkUmVzb3VyY2VMb2FkZXIgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNl
TG9hZGVyKCk7CisgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVy
ID0gc3RhdGUuZWxlbWVudCgpLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwog
Ci0gICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMg
PSBtX3N0eWxlLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOworICAgIFZlY3RvcjxSZWZQ
dHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJPcGVyYXRpb25zID0gc3RhdGUuc3R5bGUoKS0+
bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZmlsdGVyT3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICBSZWZQdHI8RmlsdGVy
T3BlcmF0aW9uPiBmaWx0ZXJPcGVyYXRpb24gPSBmaWx0ZXJPcGVyYXRpb25zLmF0KGkpOwogICAg
ICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkgPT0gRmlsdGVyT3Bl
cmF0aW9uOjpDVVNUT00pIHsKQEAgLTQ4NjcsNyArNDg0Miw3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6bG9hZFBlbmRpbmdTaGFkZXJzKCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
LSAgICBtX2hhc1BlbmRpbmdTaGFkZXJzID0gZmFsc2U7CisgICAgc3RhdGUuc2V0SGFzUGVuZGlu
Z1NoYWRlcnMoZmFsc2UpOwogfQogCiBzdGF0aWMgYm9vbCBzb3J0UGFyYW1ldGVyc0J5TmFtZUNv
bXBhcmF0b3IoY29uc3QgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4mIGEsIGNvbnN0IFJl
ZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+JiBiKQpAQCAtNDkwNSwxNiArNDg4MCwxNiBAQCBQ
YXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0
b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZQogICAgIHJldHVybiBudW1iZXJQYXJhbWV0ZXIucmVsZWFz
ZSgpOwogfQogCi1QYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZl
cjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1l
LCBDU1NWYWx1ZUxpc3QqIHZhbHVlcykKK1Bhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVy
PiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcihTdHls
ZVJlc29sdmVTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0KiB2
YWx1ZXMpCiB7CiAgICAgUmVmUHRyPEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcj4gdHJh
bnNmb3JtUGFyYW1ldGVyID0gQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyOjpjcmVhdGUo
bmFtZSk7CiAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgIGNyZWF0ZVRy
YW5zZm9ybU9wZXJhdGlvbnModmFsdWVzLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIG9w
ZXJhdGlvbnMpOworICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWVzLCBzdGF0ZS5z
dHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIG9wZXJhdGlvbnMpOwogICAgIHRyYW5z
Zm9ybVBhcmFtZXRlci0+c2V0T3BlcmF0aW9ucyhvcGVyYXRpb25zKTsKICAgICByZXR1cm4gdHJh
bnNmb3JtUGFyYW1ldGVyLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQ
YXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKGNvbnN0
IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWUqIHBhcmFtZXRlclZhbHVlKQorUGFzc1JlZlB0cjxDdXN0
b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1l
dGVyKFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1
ZSogcGFyYW1ldGVyVmFsdWUpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBvdGhlciBwYXJh
bWV0ZXJzIHR5cGVzIHBhcnNpbmcuCiAgICAgLy8gYm9vbGVhbnM6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjQzOApAQCAtNDkzNyw3ICs0OTEyLDcgQEAgUGFzc1Jl
ZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmls
dGVyUGFyYW1ldGVyKGNvbnMKICAgICAvLyBhcmUgdHJhbnNmb3Jtcy4gcGFyc2VDdXN0b21GaWx0
ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIgd2lsbAogICAgIC8vIHJldHVybiAwIGlmIHRoYXQgYXNzdW1w
dGlvbiBpcyBpbmNvcnJlY3QuCiAgICAgaWYgKHZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
aygwKS0+aXNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSgpKQotICAgICAgICByZXR1cm4gcGFyc2VD
dXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIobmFtZSwgdmFsdWVzKTsKKyAgICAgICAgcmV0
dXJuIHBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKHN0YXRlLCBuYW1lLCB2YWx1
ZXMpOwogCiAgICAgLy8gV2UgY2FuIGhhdmUgb25seSBhcnJheXMgb2YgYm9vbGVhbnMgb3IgbnVt
YmVycywgc28gdXNlIHRoZSBmaXJzdCB2YWx1ZSB0byBjaG9vc2UgYmV0d2VlbiB0aG9zZSB0d28u
CiAgICAgLy8gV2UgbmVlZCB1cCB0byA0IHZhbHVlcyAoYWxsIGJvb2xlYW5zIG9yIGFsbCBudW1i
ZXJzKS4KQEAgLTQ5NTQsNyArNDkyOSw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1l
dGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihjb25zCiAgICAg
cmV0dXJuIDA7CiB9CiAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJh
bWV0ZXJMaXN0KENTU1ZhbHVlKiBwYXJhbWV0ZXJzVmFsdWUsIEN1c3RvbUZpbHRlclBhcmFtZXRl
ckxpc3QmIHBhcmFtZXRlckxpc3QpCitib29sIFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmls
dGVyUGFyYW1ldGVyTGlzdChTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiBwYXJh
bWV0ZXJzVmFsdWUsIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHBhcmFtZXRlckxpc3QpCiB7
CiAgICAgSGFzaFNldDxTdHJpbmc+IGtub3duUGFyYW1ldGVyTmFtZXM7CiAgICAgQ1NTVmFsdWVM
aXN0SXRlcmF0b3IgcGFyYW1ldGVySXRlcmF0b3IocGFyYW1ldGVyc1ZhbHVlKTsKQEAgLTQ5Nzks
NyArNDk1NCw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0
ZXJMaXN0KENTU1ZhbHVlKiBwYXJhbWV0ZXJzVmFsdWUsIEN1CiAgICAgICAgIGlmICghaXRlcmF0
b3IuaGFzTW9yZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAg
ICAgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyYW1ldGVyID0gcGFyc2VDdXN0b21G
aWx0ZXJQYXJhbWV0ZXIobmFtZSwgaXRlcmF0b3IudmFsdWUoKSk7CisgICAgICAgIFJlZlB0cjxD
dXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcmFtZXRlciA9IHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1l
dGVyKHN0YXRlLCBuYW1lLCBpdGVyYXRvci52YWx1ZSgpKTsKICAgICAgICAgaWYgKCFwYXJhbWV0
ZXIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHBhcmFtZXRlckxpc3QuYXBw
ZW5kKHBhcmFtZXRlci5yZWxlYXNlKCkpOwpAQCAtNDk5MSw3ICs0OTY2LDcgQEAgYm9vbCBTdHls
ZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QoQ1NTVmFsdWUqIHBhcmFt
ZXRlcnNWYWx1ZSwgQ3UKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUGFzc1JlZlB0cjxDdXN0b21G
aWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlv
bihXZWJLaXRDU1NGaWx0ZXJWYWx1ZSogZmlsdGVyVmFsdWUpCitQYXNzUmVmUHRyPEN1c3RvbUZp
bHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
KFN0eWxlUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgV2ViS2l0Q1NTRmlsdGVyVmFsdWUqIGZpbHRlclZh
bHVlKQogewogICAgIEFTU0VSVChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkpOwogCkBAIC01MDAyLDcg
KzQ5NzcsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZl
cjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFdlYgogICAgIHVuc2lnbmVkIHNoYWRlcnNM
aXN0TGVuZ3RoID0gc2hhZGVyc0xpc3QtPmxlbmd0aCgpOwogICAgIEFTU0VSVChzaGFkZXJzTGlz
dExlbmd0aCk7CiAKLSAgICBSZWZQdHI8U3R5bGVTaGFkZXI+IHZlcnRleFNoYWRlciA9IHN0eWxl
U2hhZGVyKHNoYWRlcnNMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsKKyAgICBSZWZQ
dHI8U3R5bGVTaGFkZXI+IHZlcnRleFNoYWRlciA9IHN0eWxlU2hhZGVyKHN0YXRlLCBzaGFkZXJz
TGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7CiAgICAgUmVmUHRyPFN0eWxlU2hhZGVy
PiBmcmFnbWVudFNoYWRlcjsKICAgICBDdXN0b21GaWx0ZXJQcm9ncmFtVHlwZSBwcm9ncmFtVHlw
ZSA9IFBST0dSQU1fVFlQRV9CTEVORFNfRUxFTUVOVF9URVhUVVJFOwogICAgIEN1c3RvbUZpbHRl
clByb2dyYW1NaXhTZXR0aW5ncyBtaXhTZXR0aW5nczsKQEAgLTUwMTUsNyArNDk5MCw3IEBAIFBh
c3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0
b21GaWx0ZXJPcGVyYXRpb24oV2ViCiAgICAgICAgICAgICBDU1NWYWx1ZUxpc3RJdGVyYXRvciBp
dGVyYXRvcihtaXhGdW5jdGlvbik7CiAKICAgICAgICAgICAgIEFTU0VSVChtaXhGdW5jdGlvbi0+
bGVuZ3RoKCkpOwotICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXIgPSBzdHlsZVNoYWRlcihpdGVy
YXRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyID0gc3R5bGVTaGFkZXIo
c3RhdGUsIGl0ZXJhdG9yLnZhbHVlKCkpOwogICAgICAgICAgICAgaXRlcmF0b3IuYWR2YW5jZSgp
OwogCiAgICAgICAgICAgICBBU1NFUlQobWl4RnVuY3Rpb24tPmxlbmd0aCgpIDw9IDMpOwpAQCAt
NTAzMSw3ICs1MDA2LDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxl
UmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWIKICAgICAgICAgICAgIH0K
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHByb2dyYW1UeXBlID0gUFJPR1JBTV9UWVBF
X05PX0VMRU1FTlRfVEVYVFVSRTsKLSAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyID0gc3R5bGVT
aGFkZXIoZnJhZ21lbnRTaGFkZXJPck1peEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIGZyYWdtZW50
U2hhZGVyID0gc3R5bGVTaGFkZXIoc3RhdGUsIGZyYWdtZW50U2hhZGVyT3JNaXhGdW5jdGlvbik7
CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC01MDg3LDcgKzUwNjIsNyBAQCBQYXNzUmVmUHRy
PEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uKFdlYgogICAgICAgICBwYXJhbWV0ZXJzVmFsdWUgPSBmaWx0ZXJWYWx1ZS0+aXRl
bVdpdGhvdXRCb3VuZHNDaGVjaygyKTsKICAgICAKICAgICBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJM
aXN0IHBhcmFtZXRlckxpc3Q7Ci0gICAgaWYgKHBhcmFtZXRlcnNWYWx1ZSAmJiAhcGFyc2VDdXN0
b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KHBhcmFtZXRlcnNWYWx1ZSwgcGFyYW1ldGVyTGlzdCkpCisg
ICAgaWYgKHBhcmFtZXRlcnNWYWx1ZSAmJiAhcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0
KHN0YXRlLCBwYXJhbWV0ZXJzVmFsdWUsIHBhcmFtZXRlckxpc3QpKQogICAgICAgICByZXR1cm4g
MDsKICAgICAKICAgICBSZWZQdHI8U3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0g
U3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUodmVydGV4U2hhZGVyLnJlbGVhc2UoKSwg
ZnJhZ21lbnRTaGFkZXIucmVsZWFzZSgpLCBwcm9ncmFtVHlwZSwgbWl4U2V0dGluZ3MsIG1lc2hU
eXBlKTsKQEAgLTUwOTUsNyArNTA3MCw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0
aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oV2ViCiB9CiAj
ZW5kaWYKIAotYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1Zh
bHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUs
IEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpCitib29sIFN0eWxlUmVzb2x2ZXI6OmNy
ZWF0ZUZpbHRlck9wZXJhdGlvbnMoU3R5bGVSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSog
aW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBGaWx0
ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKQogewogICAgIEFTU0VSVChvdXRPcGVyYXRpb25z
LmlzRW1wdHkoKSk7CiAgICAgCkBAIC01MTI4LDcgKzUxMDMsNyBAQCBib29sIFN0eWxlUmVzb2x2
ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxl
KiBzdHlsZQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG9w
ZXJhdGlvblR5cGUgPT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT00pIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IG9wZXJhdGlvbiA9IGNyZWF0ZUN1c3RvbUZpbHRl
ck9wZXJhdGlvbihmaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVy
T3BlcmF0aW9uPiBvcGVyYXRpb24gPSBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oc3RhdGUs
IGZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGlmICghb3BlcmF0aW9uKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIApAQCAtNTE0NiwxMiArNTEyMSwxMiBAQCBi
b29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFs
dWUsIFJlbmRlclN0eWxlKiBzdHlsZQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgICAgICBXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKiBzdmdEb2N1bWVudFZhbHVlID0gc3Rh
dGljX2Nhc3Q8V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSo+KGFyZ3VtZW50KTsKLSAgICAgICAg
ICAgIEtVUkwgdXJsID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdmdEb2N1
bWVudFZhbHVlLT51cmwoKSk7CisgICAgICAgICAgICBLVVJMIHVybCA9IC8qbV9lbGVtZW50LT4q
L2RvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpKTsKIAogICAg
ICAgICAgICAgUmVmUHRyPFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4gb3BlcmF0aW9uID0gUmVm
ZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIHVy
bC5mcmFnbWVudElkZW50aWZpZXIoKSwgb3BlcmF0aW9uVHlwZSk7Ci0gICAgICAgICAgICBpZiAo
U1ZHVVJJUmVmZXJlbmNlOjppc0V4dGVybmFsVVJJUmVmZXJlbmNlKHN2Z0RvY3VtZW50VmFsdWUt
PnVybCgpLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkpKSB7CisgICAgICAgICAgICBpZiAoU1ZHVVJJ
UmVmZXJlbmNlOjppc0V4dGVybmFsVVJJUmVmZXJlbmNlKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgp
LCBzdGF0ZS5kb2N1bWVudCgpKSkgewogICAgICAgICAgICAgICAgIGlmICghc3ZnRG9jdW1lbnRW
YWx1ZS0+bG9hZFJlcXVlc3RlZCgpKQotICAgICAgICAgICAgICAgICAgICBtX3BlbmRpbmdTVkdE
b2N1bWVudHMuc2V0KG9wZXJhdGlvbi5nZXQoKSwgc3ZnRG9jdW1lbnRWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMoKS5zZXQob3BlcmF0aW9uLmdl
dCgpLCBzdmdEb2N1bWVudFZhbHVlKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdmdEb2N1
bWVudFZhbHVlLT5jYWNoZWRTVkdEb2N1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICBvcGVy
YXRpb24tPnNldENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGFkb3B0UHRyKG5ldyBDYWNoZWRT
VkdEb2N1bWVudFJlZmVyZW5jZShzdmdEb2N1bWVudFZhbHVlLT5jYWNoZWRTVkdEb2N1bWVudCgp
KSkpOwogICAgICAgICAgICAgfQpAQCAtNTIzNSw3ICs1MjEwLDcgQEAgYm9vbCBTdHlsZVJlc29s
dmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHls
ZSogc3R5bGUKICAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXIt
PmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7CiAg
ICAgICAgICAgICBDb2xvciBjb2xvcjsKICAgICAgICAgICAgIGlmIChpdGVtLT5jb2xvcikKLSAg
ICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0tPmNvbG9y
LmdldCgpKTsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
KHN0YXRlLCBpdGVtLT5jb2xvci5nZXQoKSk7CiAKICAgICAgICAgICAgIG9wZXJhdGlvbnMub3Bl
cmF0aW9ucygpLmFwcGVuZChEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUobG9jYXRp
b24sIGJsdXIsIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFyZW50LCBv
cGVyYXRpb25UeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTUyNTUsNyArNTIzMCw3IEBA
IGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5W
YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlCiAKIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVS
ZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSogcGVuZGluZ0ltYWdl
KQogewotICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1f
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKKyAgICBDYWNoZWRS
ZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBkb2N1bWVudCgpLT5jYWNoZWRS
ZXNvdXJjZUxvYWRlcigpOwogCiAgICAgaWYgKHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VWYWx1ZSgp
KSB7CiAgICAgICAgIENTU0ltYWdlVmFsdWUqIGltYWdlVmFsdWUgPSBwZW5kaW5nSW1hZ2UtPmNz
c0ltYWdlVmFsdWUoKTsKQEAgLTUyODMsMjUgKzUyNTgsMjUgQEAgUGFzc1JlZlB0cjxTdHlsZUlt
YWdlPiBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBw
ZW5kaW4KICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGlu
Z0ltYWdlcygpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKFN0eWxlUmVz
b2x2ZVN0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAobV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmlz
RW1wdHkoKSkKKyAgICBpZiAoc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0
X2l0ZXJhdG9yOjpLZXlzIGVuZCA9IG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5lbmQoKS5rZXlz
KCk7Ci0gICAgZm9yIChQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6Oktl
eXMgaXQgPSBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuYmVnaW4oKS5rZXlzKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvcjo6
S2V5cyBlbmQgPSBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuZW5kKCkua2V5cygpOwor
ICAgIGZvciAoUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0
ID0gc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmJlZ2luKCkua2V5cygpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgQ1NTUHJvcGVydHlJRCBjdXJyZW50UHJvcGVydHkgPSAqaXQ7
CiAKICAgICAgICAgc3dpdGNoIChjdXJyZW50UHJvcGVydHkpIHsKICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRJbWFnZTogewotICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIGJh
Y2tncm91bmRMYXllciA9IG1fc3R5bGUtPmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKTsgYmFja2dy
b3VuZExheWVyOyBiYWNrZ3JvdW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkgewor
ICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIGJhY2tncm91bmRMYXllciA9IHN0YXRlLnN0eWxl
KCktPmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKTsgYmFja2dyb3VuZExheWVyOyBiYWNrZ3JvdW5k
TGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChi
YWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkgJiYgYmFja2dyb3VuZExheWVyLT5pbWFnZSgpLT5pc1Bl
bmRpbmdJbWFnZSgpKQogICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kTGF5ZXItPnNldElt
YWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihiYWNr
Z3JvdW5kTGF5ZXItPmltYWdlKCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q29udGVudDogewotICAgICAg
ICAgICAgZm9yIChDb250ZW50RGF0YSogY29udGVudERhdGEgPSBjb25zdF9jYXN0PENvbnRlbnRE
YXRhKj4obV9zdHlsZS0+Y29udGVudERhdGEoKSk7IGNvbnRlbnREYXRhOyBjb250ZW50RGF0YSA9
IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoQ29udGVudERhdGEqIGNv
bnRlbnREYXRhID0gY29uc3RfY2FzdDxDb250ZW50RGF0YSo+KHN0YXRlLnN0eWxlKCktPmNvbnRl
bnREYXRhKCkpOyBjb250ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50RGF0YS0+bmV4dCgp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnREYXRhLT5pc0ltYWdlKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxJbWFnZUNvbnRl
bnREYXRhKj4oY29udGVudERhdGEpLT5pbWFnZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
aW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpIHsKQEAgLTUzMTQsNyArNTI4OSw3IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUN1cnNvcjogewotICAgICAgICAgICAgaWYg
KEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBtX3N0eWxlLT5jdXJzb3JzKCkpIHsKKyAgICAgICAg
ICAgIGlmIChDdXJzb3JMaXN0KiBjdXJzb3JMaXN0ID0gc3RhdGUuc3R5bGUoKS0+Y3Vyc29ycygp
KSB7CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjdXJzb3JMaXN0LT5z
aXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgICAgICBDdXJzb3JEYXRhJiBjdXJyZW50Q3Vy
c29yID0gY3Vyc29yTGlzdC0+YXQoaSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChTdHlsZUlt
YWdlKiBpbWFnZSA9IGN1cnJlbnRDdXJzb3IuaW1hZ2UoKSkgewpAQCAtNTMyNiwxNyArNTMwMSwx
NyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFn
ZTogewotICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkgJiYgbV9zdHls
ZS0+bGlzdFN0eWxlSW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0
eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSkpKTsKKyAgICAgICAg
ICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpICYmIHN0YXRlLnN0eWxlKCkt
Pmxpc3RTdHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0TGlzdFN0eWxlSW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2Fz
dDxTdHlsZVBlbmRpbmdJbWFnZSo+KHN0YXRlLnN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCkpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVySW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAgIGlmIChtX3N0eWxlLT5ib3JkZXJJbWFn
ZVNvdXJjZSgpICYmIG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdl
KCkpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVySW1hZ2VTb3VyY2UobG9hZFBl
bmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPmJvcmRl
ckltYWdlU291cmNlKCkpKSk7CisgICAgICAgICAgICBpZiAoc3RhdGUuc3R5bGUoKS0+Ym9yZGVy
SW1hZ2VTb3VyY2UoKSAmJiBzdGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNvdXJjZSgpLT5pc1Bl
bmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJvcmRlcklt
YWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2Uq
PihzdGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6
IHsKLSAgICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtX3N0eWxl
LT5ib3hSZWZsZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxl
Y3Rpb24gPSBzdGF0ZS5zdHlsZSgpLT5ib3hSZWZsZWN0KCkpIHsKICAgICAgICAgICAgICAgICBj
b25zdCBOaW5lUGllY2VJbWFnZSYgbWFza0ltYWdlID0gcmVmbGVjdGlvbi0+bWFzaygpOwogICAg
ICAgICAgICAgICAgIGlmIChtYXNrSW1hZ2UuaW1hZ2UoKSAmJiBtYXNrSW1hZ2UuaW1hZ2UoKS0+
aXNQZW5kaW5nSW1hZ2UoKSkgewogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJbWFn
ZT4gbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGlu
Z0ltYWdlKj4obWFza0ltYWdlLmltYWdlKCkpKTsKQEAgLTUzNDYsMTIgKzUzMjEsMTIgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291
cmNlOiB7Ci0gICAgICAgICAgICBpZiAobV9zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCkgJiYg
bV9zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0TWFza0JveEltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uo
c3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0eWxlLT5tYXNrQm94SW1hZ2VTb3Vy
Y2UoKSkpKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3Vy
Y2UoKSAmJiBzdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1h
Z2UoKSkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXNrQm94SW1hZ2VTb3Vy
Y2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KHN0YXRl
LnN0eWxlKCktPm1hc2tCb3hJbWFnZVNvdXJjZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZTogewotICAg
ICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IG1fc3R5bGUtPmFjY2Vzc01hc2tM
YXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkgeworICAg
ICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IHN0YXRlLnN0eWxlKCktPmFjY2Vz
c01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkg
ewogICAgICAgICAgICAgICAgIGlmIChtYXNrTGF5ZXItPmltYWdlKCkgJiYgbWFza0xheWVyLT5p
bWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQogICAgICAgICAgICAgICAgICAgICBtYXNrTGF5ZXIt
PnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2Uq
PihtYXNrTGF5ZXItPmltYWdlKCkpKSk7CiAgICAgICAgICAgICB9CkBAIC01MzYyLDIyICs1MzM3
LDIyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICB9
CiAgICAgfQogCi0gICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmNsZWFyKCk7CisgICAgc3Rh
dGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmNsZWFyKCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNv
bHZlcjo6bG9hZFBlbmRpbmdSZXNvdXJjZXMoKQordm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVu
ZGluZ1Jlc291cmNlcyhTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUpCiB7CiAgICAgLy8gU3RhcnQg
bG9hZGluZyBpbWFnZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5n
SW1hZ2VzKCk7CisgICAgbG9hZFBlbmRpbmdJbWFnZXMoc3RhdGUpOwogCiAjaWYgRU5BQkxFKENT
U19TSEFERVJTKQogICAgIC8vIFN0YXJ0IGxvYWRpbmcgdGhlIHNoYWRlcnMgcmVmZXJlbmNlZCBi
eSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nU2hhZGVycygpOworICAgIGxvYWRQZW5kaW5n
U2hhZGVycyhzdGF0ZSk7CiAjZW5kaWYKICAgICAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYm
IEVOQUJMRShTVkcpCiAgICAgLy8gU3RhcnQgbG9hZGluZyB0aGUgU1ZHIERvY3VtZW50cyByZWZl
cmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdTVkdEb2N1bWVudHMoKTsKKyAg
ICBsb2FkUGVuZGluZ1NWR0RvY3VtZW50cyhzdGF0ZSk7CiAjZW5kaWYKIH0KIApAQCAtNTQyNSw3
ICs1NDAwLDYgQEAgdm9pZCBNZWRpYVF1ZXJ5UmVzdWx0OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1v
cnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb24KIHZvaWQgU3R5bGVSZXNvbHZlcjo6
cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29u
c3QKIHsKICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBX
ZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9zdHlsZSk7CiAg
ICAgaW5mby5hZGRNZW1iZXIobV9hdXRob3JTdHlsZSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV91
c2VyU3R5bGUpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fZmVhdHVyZXMpOwpAQCAtNTQzNCwzMSAr
NTQwOCwxNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9i
amVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiAgICAgaW5mby5hZGRNZW1iZXIobV9r
ZXlmcmFtZXNSdWxlTWFwKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX21hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGUpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZVN3ZWVw
VGltZXIpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fbWF0Y2hlZFJ1bGVzKTsKIAotICAgIGluZm8u
YWRkTWVtYmVyKG1fcnVsZUxpc3QpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fcGVuZGluZ0ltYWdl
UHJvcGVydGllcyk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9tZWRpdW0pOwogICAgIGluZm8uYWRk
TWVtYmVyKG1fcm9vdERlZmF1bHRTdHlsZSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9kb2N1bWVu
dCk7CiAKLSAgICAvLyBGSVhNRTogcG9pbnRlciB0byBSZW5kZXJTdHlsZSBjb3VsZCBwb2ludCB0
byBhbiBhbHJlYWR5IGRlbGV0ZWQgb2JqZWN0LgotICAgIGluZm8uaWdub3JlTWVtYmVyKG1fcGFy
ZW50U3R5bGUpOwotICAgIGluZm8uaWdub3JlTWVtYmVyKG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0K
LSAgICBpbmZvLmFkZE1lbWJlcihtX2VsZW1lbnQpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fc3R5
bGVkRWxlbWVudCk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9yZWdpb25Gb3JTdHlsaW5nKTsKLSAg
ICBpbmZvLmFkZE1lbWJlcihtX3BhcmVudE5vZGUpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fbGlu
ZUhlaWdodFZhbHVlKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2ZvbnRTZWxlY3Rvcik7CiAgICAg
aW5mby5hZGRNZW1iZXIobV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzKTsKICAg
ICBpbmZvLmlnbm9yZU1lbWJlcihtX3N0eWxlQnVpbGRlcik7CiAgICAgaW5mby5hZGRNZW1iZXIo
bV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcCk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9zdHls
ZVNoZWV0Q1NTT01XcmFwcGVyU2V0KTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJM
RShTVkcpCi0gICAgaW5mby5hZGRNZW1iZXIobV9wZW5kaW5nU1ZHRG9jdW1lbnRzKTsKLSNlbmRp
ZgogICAgIGluZm8uYWRkTWVtYmVyKG1fc2NvcGVSZXNvbHZlcik7CiAKICAgICAvLyBGSVhNRTog
bW92ZSB0aGlzIHRvIGEgcGxhY2Ugd2hlcmUgaXQgd291bGQgYmUgY2FsbGVkIG9ubHkgb25jZT8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCmluZGV4IDMzMzY2Yzc2NzkxMWU3MzAxOWY5NDk0
YmNlYjRkYzhiMGM4NzQ3NTguLjc4Njg5OGE2NTAxMmU0ZDI1OTY4YmYzODY1NGViZGRmYWEzZTVj
MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAtMjMsNiArMjMsNyBAQAogI2Rl
ZmluZSBTdHlsZVJlc29sdmVyX2gKIAogI2luY2x1ZGUgIkNTU1J1bGUuaCIKKyNpbmNsdWRlICJD
U1NSdWxlTGlzdC5oIgogI2luY2x1ZGUgIkNTU1RvU3R5bGVNYXAuaCIKICNpbmNsdWRlICJDU1NW
YWx1ZUxpc3QuaCIKICNpbmNsdWRlICJMaW5rSGFzaC5oIgpAQCAtMzQsOCArMzUsMTIgQEAKICNp
bmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKICNpbmNsdWRlICJTZWxlY3RvckZpbHRlci5oIgog
I2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZVN0
YXRlLmgiCiAjaW5jbHVkZSAiU3R5bGVTY29wZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVmlld3Bv
cnRTdHlsZVJlc29sdmVyLmgiCisjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZH
KQorI2luY2x1ZGUgIldlYktpdENTU1NWR0RvY3VtZW50VmFsdWUuaCIKKyNlbmRpZgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CkBAIC04Niw2ICs5MSw3IEBAIGNsYXNzIFN0eWxlSW1hZ2U7CiBjbGFzcyBT
dHlsZUtleWZyYW1lOwogY2xhc3MgU3R5bGVQZW5kaW5nSW1hZ2U7CiBjbGFzcyBTdHlsZVByb3Bl
cnR5U2V0OworY2xhc3MgU3R5bGVSZXNvbHZlU3RhdGU7CiBjbGFzcyBTdHlsZVJ1bGU7CiAjaWYg
RU5BQkxFKFNIQURPV19ET00pCiBjbGFzcyBTdHlsZVJ1bGVIb3N0OwpAQCAtMTMyLDYgKzEzOCw5
IEBAIGVudW0gUnVsZU1hdGNoaW5nQmVoYXZpb3IgewogICAgIE1hdGNoT25seVVzZXJBZ2VudFJ1
bGVzLAogfTsKIAorI2lmbmRlZiBUQVNBSworI2VuZGlmCisKIC8vIFRoaXMgY2xhc3Mgc2VsZWN0
cyBhIFJlbmRlclN0eWxlIGZvciBhIGdpdmVuIGVsZW1lbnQgYmFzZWQgb24gYSBjb2xsZWN0aW9u
IG9mIHN0eWxlc2hlZXRzLgogY2xhc3MgU3R5bGVSZXNvbHZlciB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoU3R5bGVSZXNvbHZlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMTYx
LDIwICsxNzAsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gc3R5bGVGb3JEb2N1bWVudChEb2N1bWVudCosIENTU0ZvbnRTZWxlY3RvciogPSAwKTsKIAot
ICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0K
LSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0
eWxlOyB9Ci0gICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVy
biBtX3Jvb3RFbGVtZW50U3R5bGU7IH0KLSAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9lbGVtZW50OyB9CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1
cm4gbV9kb2N1bWVudDsgfQotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKCkgeyByZXR1cm4gc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICBjb25zdCBG
b250RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHBhcmVudFN0
eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAgdm9pZCBzZXRGb250RGVzY3JpcHRpb24o
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9mb250RGlydHkgfD0g
c3R5bGUoKS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KLSAgICB2b2lk
IHNldFpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRab29tKGYpOyB9
Ci0gICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0gc3R5
bGUoKS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQotICAgIHZvaWQgc2V0VGV4dFNpemVBZGp1c3Qo
Ym9vbCBiKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRTaXplQWRqdXN0KGIpOyB9
Ci0gICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBtX2Zv
bnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7IH0KLSAgICB2
b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRpb24gdGV4dE9yaWVudGF0aW9uKSB7
IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRPcmllbnRhdGlvbih0ZXh0T3JpZW50YXRp
b24pOyB9Ci0gICAgYm9vbCBoYXNQYXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRO
b2RlOyB9CiAKICAgICB2b2lkIHJlc2V0QXV0aG9yU3R5bGUoKTsKICAgICB2b2lkIGFwcGVuZEF1
dGhvclN0eWxlU2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UmVmUHRyPENT
U1N0eWxlU2hlZXQ+ID4mKTsKQEAgLTE5OCwxNyArMTk0LDE3IEBAIHByaXZhdGU6CiAgICAgfQog
I2VuZGlmCiAKLSAgICB2b2lkIGluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCosIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VVRE8pOwotICAgIHZvaWQgaW5p
dEVsZW1lbnQoRWxlbWVudCopOworICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShTdHlsZVJl
c29sdmVTdGF0ZSYsIEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwKTsKKyAg
ICB2b2lkIGluaXRFbGVtZW50KFN0eWxlUmVzb2x2ZVN0YXRlJiwgRWxlbWVudCopOwogICAgIHZv
aWQgY29sbGVjdEZlYXR1cmVzKCk7Ci0gICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxl
KCk7Ci0gICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChSdWxlU2V0
Kik7Ci0gICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCk7Cisg
ICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKFN0eWxlUmVzb2x2ZVN0YXRlJik7Cisg
ICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChFbGVtZW50KiwgUnVs
ZVNldCopOworICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhF
bGVtZW50Kik7CiAgICAgTm9kZSogbG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVu
c2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdDsKLSAgICBTdHlsZWRFbGVtZW50KiBmaW5k
U2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiwgdW5zaWduZWQmIGNvdW50KSBjb25zdDsKLSAg
ICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KikgY29uc3Q7Cisg
ICAgU3R5bGVkRWxlbWVudCogZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoU3R5bGVSZXNvbHZl
U3RhdGUmLCBOb2RlKiwgdW5zaWduZWQmIGNvdW50KSBjb25zdDsKKyAgICBib29sIGNhblNoYXJl
U3R5bGVXaXRoRWxlbWVudChTdHlsZVJlc29sdmVTdGF0ZSYsIFN0eWxlZEVsZW1lbnQqKSBjb25z
dDsKIAotICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5ZnJhbWUoY29uc3Qg
UmVuZGVyU3R5bGUqLCBjb25zdCBTdHlsZUtleWZyYW1lKiwgS2V5ZnJhbWVWYWx1ZSYpOworICAg
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5ZnJhbWUoU3R5bGVSZXNvbHZlU3Rh
dGUmLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFN0eWxlS2V5ZnJhbWUqLCBLZXlmcmFtZVZh
bHVlJik7CiAKIHB1YmxpYzoKICAgICAvLyBUaGVzZSBtZXRob2RzIHdpbGwgZ2l2ZSBiYWNrIHRo
ZSBzZXQgb2YgcnVsZXMgdGhhdCBtYXRjaGVkIGZvciBhIGdpdmVuIGVsZW1lbnQgKG9yIGEgcHNl
dWRvLWVsZW1lbnQpLgpAQCAtMjMxLDI1ICsyMjcsMjggQEAgcHVibGljOgogICAgIHN0YXRpYyBp
bnQgbGVnYWN5Rm9udFNpemUoRG9jdW1lbnQqLCBpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbCBzaG91
bGRVc2VGaXhlZERlZmF1bHRTaXplKTsKIAogcHVibGljOgorICAgIHZvaWQgYXBwbHlQcm9wZXJ0
eVdpdGhWYWx1ZUNoZWNraW5nKFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NT
VmFsdWUqKTsKKyAgICB2b2lkIGFwcGx5Rm9udFByb3BlcnR5VG9TdHlsZShSZW5kZXJTdHlsZSog
dGFyZ2V0LCBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiByZWZlcmVuY2UpOworI2lmIDAKKyAgICAv
LyBiYWQgbWV0aG9kcyAuLi4gSSB0aGluay4KICAgICB2b2lkIGFwcGx5UHJvcGVydHlUb1N0eWxl
KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgUmVuZGVyU3R5bGUqKTsKIAogICAgIHZvaWQgYXBw
bHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CisjZW5k
aWYKIAotICAgIHZvaWQgdXBkYXRlRm9udCgpOwotICAgIHZvaWQgaW5pdGlhbGl6ZUZvbnRTdHls
ZShTZXR0aW5ncyopOworICAgIHZvaWQgdXBkYXRlRm9udChTdHlsZVJlc29sdmVTdGF0ZSYpOwor
ICAgIHZvaWQgaW5pdGlhbGl6ZUZvbnRTdHlsZShTdHlsZVJlc29sdmVTdGF0ZSYsIFNldHRpbmdz
Kik7CiAKICAgICBzdGF0aWMgZmxvYXQgZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUo
RG9jdW1lbnQqLCBmbG9hdCB6b29tRmFjdG9yLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBz
cGVjaWZpZWRTaXplLCBFU21hcnRNaW5pbXVtRm9yRm9udFNpemUgPSBVc2VTbWFydE1pbmltdW1G
b3JGb250Rml6ZSk7CiAKLSAgICB2b2lkIHNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYsIGZs
b2F0IHNpemUpOworICAgIHN0YXRpYyB2b2lkIHNldEZvbnRTaXplKFN0eWxlUmVzb2x2ZVN0YXRl
JiwgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2l6ZSk7CiAKIHByaXZhdGU6CiAgICAgc3RhdGlj
IGZsb2F0IGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiwgUmVuZGVy
U3R5bGUqLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBib29sIHVz
ZVNWR1pvb21SdWxlcyk7CiAKIHB1YmxpYzoKLSAgICBib29sIHVzZVNWR1pvb21SdWxlcygpOwot
CiAgICAgc3RhdGljIGJvb2wgY29sb3JGcm9tUHJpbWl0aXZlVmFsdWVJc0Rlcml2ZWRGcm9tRWxl
bWVudChDU1NQcmltaXRpdmVWYWx1ZSopOwotICAgIENvbG9yIGNvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlKENTU1ByaW1pdGl2ZVZhbHVlKiwgYm9vbCBmb3JWaXNpdGVkTGluayA9IGZhbHNlKSBjb25z
dDsKKyAgICBzdGF0aWMgQ29sb3IgY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoU3R5bGVSZXNvbHZl
U3RhdGUmLCBDU1NQcmltaXRpdmVWYWx1ZSosIGJvb2wgZm9yVmlzaXRlZExpbmsgPSBmYWxzZSk7
CiAKICAgICBib29sIGhhc1NlbGVjdG9yRm9ySWQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7
CiAgICAgYm9vbCBoYXNTZWxlY3RvckZvckNsYXNzKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0
OwpAQCAtMjgxLDM0ICsyODAsMzQgQEAgcHVibGljOgogICAgIENTU1N0eWxlUnVsZSogZW5zdXJl
RnVsbENTU09NV3JhcHBlckZvckluc3BlY3RvcihTdHlsZVJ1bGUqKTsKIAogI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKLSAgICBib29sIGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGlu
VmFsdWUsIFJlbmRlclN0eWxlKiBpblN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBGaWx0
ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKTsKKyAgICBib29sIGNyZWF0ZUZpbHRlck9wZXJh
dGlvbnMoU3R5bGVSZXNvbHZlU3RhdGUmLCBDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUq
IGluU3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIEZpbHRlck9wZXJhdGlvbnMmIG91dE9w
ZXJhdGlvbnMpOwogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBTdHlsZVNoYWRlciogc3R5
bGVTaGFkZXIoQ1NTVmFsdWUqKTsKLSAgICBTdHlsZVNoYWRlciogY2FjaGVkT3JQZW5kaW5nU3R5
bGVTaGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NTU2hhZGVyVmFsdWUqKTsKLSAgICBib29sIHBhcnNl
Q3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChDU1NWYWx1ZSosIEN1c3RvbUZpbHRlclBhcmFtZXRl
ckxpc3QmKTsKLSAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyc2VDdXN0
b21GaWx0ZXJQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZSopOworICAgIFN0
eWxlU2hhZGVyKiBzdHlsZVNoYWRlcihTdHlsZVJlc29sdmVTdGF0ZSYsIENTU1ZhbHVlKik7Cisg
ICAgU3R5bGVTaGFkZXIqIGNhY2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKFN0eWxl
UmVzb2x2ZVN0YXRlJiwgV2ViS2l0Q1NTU2hhZGVyVmFsdWUqKTsKKyAgICBib29sIHBhcnNlQ3Vz
dG9tRmlsdGVyUGFyYW1ldGVyTGlzdChTdHlsZVJlc29sdmVTdGF0ZSYsIENTU1ZhbHVlKiwgQ3Vz
dG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYpOworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFy
YW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihTdHlsZVJlc29sdmVTdGF0ZSYsIGNv
bnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWUqKTsKICAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRl
clBhcmFtZXRlcj4gcGFyc2VDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlcihjb25zdCBTdHJpbmcm
IG5hbWUsIENTU1ZhbHVlTGlzdCopOwogICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1l
dGVyPiBwYXJzZUN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWUs
IENTU1ZhbHVlTGlzdCopOwotICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBw
YXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWUsIENT
U1ZhbHVlTGlzdCopOwotICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBjcmVh
dGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oV2ViS2l0Q1NTRmlsdGVyVmFsdWUqKTsKLSAgICB2b2lk
IGxvYWRQZW5kaW5nU2hhZGVycygpOworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1l
dGVyPiBwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcihTdHlsZVJlc29sdmVTdGF0
ZSYsIGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0Kik7CisgICAgUGFzc1JlZlB0cjxD
dXN0b21GaWx0ZXJPcGVyYXRpb24+IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihTdHlsZVJl
c29sdmVTdGF0ZSYsIFdlYktpdENTU0ZpbHRlclZhbHVlKik7CisgICAgdm9pZCBsb2FkUGVuZGlu
Z1NoYWRlcnMoU3R5bGVSZXNvbHZlU3RhdGUmKTsKICNlbmRpZgogI2lmIEVOQUJMRShTVkcpCi0g
ICAgdm9pZCBsb2FkUGVuZGluZ1NWR0RvY3VtZW50cygpOworICAgIHZvaWQgbG9hZFBlbmRpbmdT
VkdEb2N1bWVudHMoU3R5bGVSZXNvbHZlU3RhdGUmKTsKICNlbmRpZgogI2VuZGlmIC8vIEVOQUJM
RShDU1NfRklMVEVSUykKIAotICAgIHZvaWQgbG9hZFBlbmRpbmdSZXNvdXJjZXMoKTsKKyAgICB2
b2lkIGxvYWRQZW5kaW5nUmVzb3VyY2VzKFN0eWxlUmVzb2x2ZVN0YXRlJik7CiAKIHByaXZhdGU6
CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBmaXhlcyB1cCB0aGUgZGVmYXVsdCBmb250IHNpemUgaWYg
aXQgZGV0ZWN0cyB0aGF0IHRoZSBjdXJyZW50IGdlbmVyaWMgZm9udCBmYW1pbHkgaGFzIGNoYW5n
ZWQuIC1kd2gKLSAgICB2b2lkIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJTdHls
ZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7Ci0gICAgdm9pZCBjaGVja0Zvclpvb21DaGFu
Z2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwotICAgIHZvaWQgY2hl
Y2tGb3JUZXh0U2l6ZUFkanVzdCgpOworICAgIHZvaWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hh
bmdlKFN0eWxlUmVzb2x2ZVN0YXRlJiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUpOworICAgIHZvaWQgY2hlY2tGb3Jab29tQ2hhbmdlKFN0eWxlUmVzb2x2ZVN0YXRlJiwg
UmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAgIHZvaWQgY2hlY2tG
b3JUZXh0U2l6ZUFkanVzdChSZW5kZXJTdHlsZSopOwogCi0gICAgdm9pZCBhZGp1c3RSZW5kZXJT
dHlsZShSZW5kZXJTdHlsZSogc3R5bGVUb0FkanVzdCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
LCBFbGVtZW50Kik7CisgICAgdm9pZCBhZGp1c3RSZW5kZXJTdHlsZShTdHlsZVJlc29sdmVTdGF0
ZSYsIFJlbmRlclN0eWxlKiBzdHlsZVRvQWRqdXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUs
IEVsZW1lbnQqKTsKIAotICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29uc3QgUnVsZURhdGEqIHJ1
bGUpIHsgbV9tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOyB9CisgICAgdm9pZCBhZGRNYXRjaGVk
UnVsZShTdHlsZVJlc29sdmVTdGF0ZSYgc3RhdGUsIGNvbnN0IFJ1bGVEYXRhKiBydWxlKSB7IHN0
YXRlLm1hdGNoZWRSdWxlcygpLmFwcGVuZChydWxlKTsgfQogCiAgICAgc3RydWN0IFJ1bGVSYW5n
ZSB7CiAgICAgICAgIFJ1bGVSYW5nZShpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxl
SW5kZXgpOiBmaXJzdFJ1bGVJbmRleChmaXJzdFJ1bGVJbmRleCksIGxhc3RSdWxlSW5kZXgobGFz
dFJ1bGVJbmRleCkgeyB9CkBAIC0zNTIsMzggKzM1MSwyOCBAQCBwcml2YXRlOgogICAgICAgICBi
b29sIGlzQ2FjaGVhYmxlOwogICAgIH07CiAKLSAgICBzdHJ1Y3QgTWF0Y2hSZXF1ZXN0IHsKLSAg
ICAgICAgTWF0Y2hSZXF1ZXN0KFJ1bGVTZXQqIHJ1bGVTZXQsIGJvb2wgaW5jbHVkZUVtcHR5UnVs
ZXMgPSBmYWxzZSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSAwKQotICAgICAgICAgICAg
OiBydWxlU2V0KHJ1bGVTZXQpCi0gICAgICAgICAgICAsIGluY2x1ZGVFbXB0eVJ1bGVzKGluY2x1
ZGVFbXB0eVJ1bGVzKQotICAgICAgICAgICAgLCBzY29wZShzY29wZSkgeyB9Ci0gICAgICAgIGNv
bnN0IFJ1bGVTZXQqIHJ1bGVTZXQ7Ci0gICAgICAgIGNvbnN0IGJvb2wgaW5jbHVkZUVtcHR5UnVs
ZXM7Ci0gICAgICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlOwotICAgIH07Ci0KICAgICBz
dGF0aWMgdm9pZCBhZGRNYXRjaGVkUHJvcGVydGllcyhNYXRjaFJlc3VsdCYsIGNvbnN0IFN0eWxl
UHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogPSAwLCB1bnNpZ25lZCBsaW5rTWF0
Y2hUeXBlID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCwgUHJvcGVydHlXaGl0ZWxpc3RUeXBl
ID0gUHJvcGVydHlXaGl0ZWxpc3ROb25lKTsKICAgICB2b2lkIGFkZEVsZW1lbnRTdHlsZVByb3Bl
cnRpZXMoTWF0Y2hSZXN1bHQmLCBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiwgYm9vbCBpc0NhY2hl
YWJsZSA9IHRydWUpOwogCi0gICAgdm9pZCBtYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9v
bCBpbmNsdWRlU01JTFByb3BlcnRpZXMpOwotICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKE1hdGNoUmVz
dWx0Jik7Ci0gICAgdm9pZCBtYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmLCBSdWxlU2V0Kik7Ci0g
ICAgdm9pZCBtYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlS
dWxlcyk7Ci0gICAgdm9pZCBtYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVk
ZUVtcHR5UnVsZXMpOwotICAgIHZvaWQgbWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3Vs
dCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwotICAgIHZvaWQgbWF0Y2hIb3N0UnVsZXMoTWF0
Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lkIG1hdGNoQWxsUnVs
ZXMoU3R5bGVSZXNvbHZlU3RhdGUmIHJlcXVlc3QsIE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRl
U01JTFByb3BlcnRpZXMpOworICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKFN0eWxlUmVzb2x2ZVN0YXRl
JiwgTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIG1hdGNoVUFSdWxlcyhTdHlsZVJlc29sdmVTdGF0
ZSYsIE1hdGNoUmVzdWx0JiwgUnVsZVNldCopOworICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhT
dHlsZVJlc29sdmVTdGF0ZSYsIE1hdGNoUmVzdWx0Jik7CisgICAgdm9pZCBtYXRjaFVzZXJSdWxl
cyhTdHlsZVJlc29sdmVTdGF0ZSYsIE1hdGNoUmVzdWx0Jik7CisgICAgdm9pZCBtYXRjaFNjb3Bl
ZEF1dGhvclJ1bGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiwgTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lk
IG1hdGNoSG9zdFJ1bGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiwgTWF0Y2hSZXN1bHQmKTsKIAotICAg
IHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXMoY29uc3QgTWF0Y2hSZXF1ZXN0JiwgUnVsZVJhbmdl
Jik7Ci0gICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihjb25zdCBNYXRjaFJl
cXVlc3QmLCBSdWxlUmFuZ2UmKTsKLSAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlz
dChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiwgY29uc3QgTWF0Y2hSZXF1ZXN0JiwgUnVsZVJhbmdl
Jik7CisgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiwgU3R5bGVSZXNvbHZl
U3RhdGUmLCBSdWxlUmFuZ2UmLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSA9IDApOworICAg
IHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oUnVsZVNldCosIFN0eWxlUmVzb2x2
ZVN0YXRlJiwgUnVsZVJhbmdlJiwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSAwKTsKKyAg
ICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+
KiwgU3R5bGVSZXNvbHZlU3RhdGUmLCBSdWxlUmFuZ2UmLCBjb25zdCBDb250YWluZXJOb2RlKik7
CiAKICAgICBib29sIGZhc3RSZWplY3RTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYpIGNvbnN0Owot
ICAgIHZvaWQgc29ydE1hdGNoZWRSdWxlcygpOwotICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0
Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0Jik7CisgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKFZlY3Rv
cjxjb25zdCBSdWxlRGF0YSosIDMyPiYgbWF0Y2hlZFJ1bGVzKTsKKyAgICB2b2lkIHNvcnRBbmRU
cmFuc2Zlck1hdGNoZWRSdWxlcyhTdHlsZVJlc29sdmVTdGF0ZSYsIE1hdGNoUmVzdWx0Jik7CiAK
LSAgICBib29sIHJ1bGVNYXRjaGVzKGNvbnN0IFJ1bGVEYXRhJiwgY29uc3QgQ29udGFpbmVyTm9k
ZSogc2NvcGUpOworICAgIGJvb2wgcnVsZU1hdGNoZXMoU3R5bGVSZXNvbHZlU3RhdGUmLCBjb25z
dCBSdWxlRGF0YSYsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBQc2V1ZG9JZCYgZHluYW1p
Y1BzZXVkbyk7CiAgICAgYm9vbCBjaGVja1JlZ2lvblNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9y
KiByZWdpb25TZWxlY3RvciwgRWxlbWVudCogcmVnaW9uRWxlbWVudCk7Ci0gICAgdm9pZCBhcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgY29uc3QgRWxlbWVudCopOwor
ICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhTdHlsZVJlc29sdmVTdGF0ZSYsIGNvbnN0
IE1hdGNoUmVzdWx0JiwgY29uc3QgRWxlbWVudCopOwogICAgIGVudW0gU3R5bGVBcHBsaWNhdGlv
blBhc3MgewogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgICAgICBWYXJpYWJsZURlZmlu
aXRpb25zLApAQCAtMzkyLDExICszODEsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgTG93UHJpb3Jp
dHlQcm9wZXJ0aWVzCiAgICAgfTsKICAgICB0ZW1wbGF0ZSA8U3R5bGVBcHBsaWNhdGlvblBhc3Mg
cGFzcz4KLSAgICB2b2lkIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQm
LCBib29sIGltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpbmhl
cml0ZWRPbmx5KTsKKyAgICB2b2lkIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoU3R5bGVSZXNvbHZl
U3RhdGUmLCBjb25zdCBNYXRjaFJlc3VsdCYsIGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRl
eCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpOwogICAgIHRlbXBsYXRlIDxTdHls
ZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgotICAgIHZvaWQgYXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0
eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSosIGJvb2wgaXNJbXBvcnRhbnQs
IGJvb2wgaW5oZXJpdGVkT25seSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlID0gUHJvcGVydHlXaGl0
ZWxpc3ROb25lKTsKKyAgICB2b2lkIGFwcGx5UHJvcGVydGllcyhTdHlsZVJlc29sdmVTdGF0ZSYs
IGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSosIGJvb2wgaXNJ
bXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlID0gUHJv
cGVydHlXaGl0ZWxpc3ROb25lKTsKICNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKLSAgICB2b2lk
IHJlc29sdmVWYXJpYWJsZXMoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBWZWN0b3I8c3RkOjpw
YWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiYga25vd25FeHByZXNzaW9ucyk7CisgICAgdm9p
ZCByZXNvbHZlVmFyaWFibGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NT
VmFsdWUqLCBWZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiYga25vd25F
eHByZXNzaW9ucyk7CiAjZW5kaWYKICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkUmVnaW9uU3R5bGVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCkBAIC00MDYs
OCArMzk1LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIG1hdGNoUGFnZVJ1bGVzRm9yTGlzdChWZWN0
b3I8U3R5bGVSdWxlUGFnZSo+JiBtYXRjaGVkUnVsZXMsIGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQ
YWdlKj4mLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYg
cGFnZU5hbWUpOwogICAgIFNldHRpbmdzKiBkb2N1bWVudFNldHRpbmdzKCkgeyByZXR1cm4gbV9k
b2N1bWVudC0+c2V0dGluZ3MoKTsgfQogCi0gICAgYm9vbCBpc0xlZnRQYWdlKGludCBwYWdlSW5k
ZXgpIGNvbnN0OwotICAgIGJvb2wgaXNSaWdodFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QgeyBy
ZXR1cm4gIWlzTGVmdFBhZ2UocGFnZUluZGV4KTsgfQorICAgIGJvb2wgaXNMZWZ0UGFnZShSZW5k
ZXJTdHlsZSosIGludCBwYWdlSW5kZXgpIGNvbnN0OworICAgIGJvb2wgaXNSaWdodFBhZ2UoUmVu
ZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUsIGludCBwYWdlSW5kZXgpIGNvbnN0IHsgcmV0dXJu
ICFpc0xlZnRQYWdlKHJvb3RFbGVtZW50U3R5bGUsIHBhZ2VJbmRleCk7IH0KICAgICBib29sIGlz
Rmlyc3RQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OwogICAgIFN0cmluZyBwYWdlTmFtZShpbnQg
cGFnZUluZGV4KSBjb25zdDsKIApAQCAtNDE4LDMzICs0MDcsMjMgQEAgcHJpdmF0ZToKICAgICBP
d25QdHI8UnVsZVNldD4gbV9zaWJsaW5nUnVsZVNldDsKICAgICBPd25QdHI8UnVsZVNldD4gbV91
bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQ7CiAKLSAgICBib29sIG1faGFzVUFBcHBlYXJhbmNlOwot
ICAgIEJvcmRlckRhdGEgbV9ib3JkZXJEYXRhOwotICAgIEZpbGxMYXllciBtX2JhY2tncm91bmRE
YXRhOwotICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOwotCiAgICAgdHlwZWRlZiBIYXNoTWFw
PEF0b21pY1N0cmluZ0ltcGwqLCBSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPiA+IEtleWZyYW1l
c1J1bGVNYXA7CiAgICAgS2V5ZnJhbWVzUnVsZU1hcCBtX2tleWZyYW1lc1J1bGVNYXA7CiAKIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlTm90WWV0QXZhaWxhYmxlKCkgeyBy
ZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsgfQogCi0gICAgUGFzc1JlZlB0cjxTdHlsZUlt
YWdlPiBzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7Ci0gICAgUGFzc1JlZlB0
cjxTdHlsZUltYWdlPiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NT
SW1hZ2VWYWx1ZSopOwotICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gZ2VuZXJhdGVkT3JQZW5k
aW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKFN0eWxlUmVzb2x2ZVN0
YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
dHlsZUltYWdlPiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoU3R5bGVSZXNvbHZlU3RhdGUmLCBD
U1NQcm9wZXJ0eUlELCBDU1NJbWFnZVZhbHVlKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5
bGVJbWFnZT4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKFN0eWxlUmVzb2x2ZVN0YXRlJiwg
Q1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSopOwogI2lmIEVOQUJMRShDU1Nf
SU1BR0VfU0VUKQotICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gc2V0T3JQZW5kaW5nRnJvbVZh
bHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdlU2V0VmFsdWUqKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdHlsZUltYWdlPiBzZXRPclBlbmRpbmdGcm9tVmFsdWUoU3R5bGVSZXNvbHZlU3RhdGUm
LCBDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVNldFZhbHVlKik7CiAjZW5kaWYKLSAgICBQYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+IGN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBD
U1NDdXJzb3JJbWFnZVZhbHVlKik7Ci0KLSAgICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOyB9Ci0g
ICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgY29uc3QgeyByZXR1cm4g
bV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOyB9CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3R5bGVJbWFnZT4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKFN0eWxlUmVzb2x2ZVN0YXRl
JiwgQ1NTUHJvcGVydHlJRCwgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSopOwogCiAgICAgc3RhdGljIExl
bmd0aCBjb252ZXJ0VG9JbnRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqLCBSZW5kZXJTdHlsZSos
IFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyID0gMSk7CiAgICAgc3Rh
dGljIExlbmd0aCBjb252ZXJ0VG9GbG9hdExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSosIFJlbmRl
clN0eWxlKiwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIgPSAxKTsK
IAotICAgIENTU1RvU3R5bGVNYXAqIHN0eWxlTWFwKCkgeyByZXR1cm4gJm1fc3R5bGVNYXA7IH0K
LQogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0Owog
ICAgIAogcHJpdmF0ZToKQEAgLTQ1MiwxOSArNDMxLDE5IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NT
dHlsZVNoZWV0PiA+JiwgUnVsZVNldCYgdXNlclN0eWxlKTsKIAotICAgIHZvaWQgY2FjaGVCb3Jk
ZXJBbmRCYWNrZ3JvdW5kKCk7CisgICAgdm9pZCBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoU3R5
bGVSZXNvbHZlU3RhdGUmLCBSZW5kZXJTdHlsZSopOwogCiBwcml2YXRlOgotICAgIGJvb2wgY2Fu
U2hhcmVTdHlsZVdpdGhDb250cm9sKFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKKyAgICBib29sIGNh
blNoYXJlU3R5bGVXaXRoQ29udHJvbChFbGVtZW50KiwgU3R5bGVkRWxlbWVudCopIGNvbnN0Owog
Ci0gICAgdm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CisgICAg
dm9pZCBhcHBseVByb3BlcnR5KFN0eWxlUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NT
VmFsdWUqKTsKIAogI2lmIEVOQUJMRShTVkcpCi0gICAgdm9pZCBhcHBseVNWR1Byb3BlcnR5KENT
U1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CisgICAgdm9pZCBhcHBseVNWR1Byb3BlcnR5KFN0eWxl
UmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKICNlbmRpZgogCiAgICAg
UGFzc1JlZlB0cjxTdHlsZUltYWdlPiBsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdl
Kik7Ci0gICAgdm9pZCBsb2FkUGVuZGluZ0ltYWdlcygpOworICAgIHZvaWQgbG9hZFBlbmRpbmdJ
bWFnZXMoU3R5bGVSZXNvbHZlU3RhdGUmKTsKIAogICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRl
TWF0Y2hlZFByb3BlcnRpZXNIYXNoKGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzKiwgdW5zaWduZWQg
c2l6ZSk7CiAgICAgc3RydWN0IE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtIHsKQEAgLTQ4Miw3
ICs0NjEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3dlZXBNYXRjaGVkUHJvcGVydGllc0NhY2hl
KFRpbWVyPFN0eWxlUmVzb2x2ZXI+Kik7CiAKICAgICBib29sIGNsYXNzTmFtZXNBZmZlY3RlZEJ5
UnVsZXMoY29uc3QgU3BhY2VTcGxpdFN0cmluZyYpIGNvbnN0OwotICAgIGJvb2wgc2hhcmluZ0Nh
bmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFbGVtZW50
KikgY29uc3Q7CisgICAgYm9vbCBzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZl
Y3RpbmdBdHRyaWJ1dGVzKFN0eWxlUmVzb2x2ZVN0YXRlJiwgRWxlbWVudCosIFN0eWxlZEVsZW1l
bnQqKSBjb25zdDsKIAogICAgIHVuc2lnbmVkIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0
aW9uc1NpbmNlTGFzdFN3ZWVwOwogCkBAIC00OTEsMzkgKzQ3MCwxMyBAQCBwcml2YXRlOgogCiAg
ICAgVGltZXI8U3R5bGVSZXNvbHZlcj4gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlU3dlZXBUaW1l
cjsKIAotICAgIC8vIEEgYnVmZmVyIHVzZWQgdG8gaG9sZCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVs
ZXMgZm9yIGFuIGVsZW1lbnQsIGFuZCBhIHRlbXBvcmFyeSBidWZmZXIgdXNlZCBmb3IKLSAgICAv
LyBtZXJnZSBzb3J0aW5nLgotICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiBtX21hdGNo
ZWRSdWxlczsKLQotICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4gbV9ydWxlTGlzdDsKLQot
ICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NQcm9wZXJ0eUlELCBSZWZQdHI8Q1NTVmFsdWU+ID4gUGVu
ZGluZ0ltYWdlUHJvcGVydHlNYXA7Ci0gICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXAgbV9wZW5k
aW5nSW1hZ2VQcm9wZXJ0aWVzOwotCiAgICAgT3duUHRyPE1lZGlhUXVlcnlFdmFsdWF0b3I+IG1f
bWVkaXVtOwogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9yb290RGVmYXVsdFN0eWxlOwogCi0g
ICAgUHNldWRvSWQgbV9keW5hbWljUHNldWRvOwotICAgIFBzZXVkb0lkIG1fcHNldWRvU3R5bGU7
Ci0KICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKLSAgICBTZWxlY3RvckNoZWNrZXIgbV9zZWxl
Y3RvckNoZWNrZXI7CiAgICAgU2VsZWN0b3JGaWx0ZXIgbV9zZWxlY3RvckZpbHRlcjsKIAotICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKLSAgICBSZW5kZXJTdHlsZSogbV9wYXJlbnRT
dHlsZTsKLSAgICBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlOwotICAgIEVsZW1lbnQq
IG1fZWxlbWVudDsKLSAgICBTdHlsZWRFbGVtZW50KiBtX3N0eWxlZEVsZW1lbnQ7Ci0gICAgUmVu
ZGVyUmVnaW9uKiBtX3JlZ2lvbkZvclN0eWxpbmc7Ci0gICAgRUluc2lkZUxpbmsgbV9lbGVtZW50
TGlua1N0YXRlOwotICAgIGJvb2wgbV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXM7Ci0gICAg
Q29udGFpbmVyTm9kZSogbV9wYXJlbnROb2RlOwotICAgIENTU1ZhbHVlKiBtX2xpbmVIZWlnaHRW
YWx1ZTsKLSAgICBib29sIG1fZm9udERpcnR5OwogICAgIGJvb2wgbV9tYXRjaEF1dGhvckFuZFVz
ZXJTdHlsZXM7Ci0gICAgYm9vbCBtX3NhbWVPcmlnaW5Pbmx5OwotICAgIGJvb2wgbV9kaXN0cmli
dXRlZFRvSW5zZXJ0aW9uUG9pbnQ7CiAKICAgICBSZWZQdHI8Q1NTRm9udFNlbGVjdG9yPiBtX2Zv
bnRTZWxlY3RvcjsKICAgICBWZWN0b3I8T3duUHRyPE1lZGlhUXVlcnlSZXN1bHQ+ID4gbV92aWV3
cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzOwpAQCAtNTMyLDIzICs0ODUsMTIgQEAgcHJp
dmF0ZToKICAgICBSZWZQdHI8Vmlld3BvcnRTdHlsZVJlc29sdmVyPiBtX3ZpZXdwb3J0U3R5bGVS
ZXNvbHZlcjsKICNlbmRpZgogCi0gICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZTsKLSAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsKICAgICBjb25z
dCBTdHlsZUJ1aWxkZXImIG1fc3R5bGVCdWlsZGVyOwogICAgIAogICAgIEhhc2hNYXA8U3R5bGVS
dWxlKiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiBtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFw
OwogICAgIEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4gbV9zdHlsZVNoZWV0Q1NTT01X
cmFwcGVyU2V0OwogCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGJvb2wgbV9oYXNQZW5k
aW5nU2hhZGVyczsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUo
U1ZHKQotICAgIEhhc2hNYXA8RmlsdGVyT3BlcmF0aW9uKiwgUmVmUHRyPFdlYktpdENTU1NWR0Rv
Y3VtZW50VmFsdWU+ID4gbV9wZW5kaW5nU1ZHRG9jdW1lbnRzOwotI2VuZGlmCi0KICAgICBPd25Q
dHI8U3R5bGVTY29wZVJlc29sdmVyPiBtX3Njb3BlUmVzb2x2ZXI7Ci0gICAgQ1NTVG9TdHlsZU1h
cCBtX3N0eWxlTWFwOwogCiAgICAgZnJpZW5kIGNsYXNzIFN0eWxlQnVpbGRlcjsKICAgICBmcmll
bmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiwgY29uc3QgTWF0Y2hl
ZFByb3BlcnRpZXMmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oCmluZGV4IGU0MWFhZWY0
YTFlYjUwOGU4YjU2M2FhODViYmVmZjM5ODMyOTBlN2QuLmY1ODQwMmZhOWZhZDNiMjFmNzBiMWRl
YmE4Mzg1YmY5Y2U4YmU1MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaApAQCAtOTks
NiArOTksMTggQEAgaW5saW5lIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIFN0eWxlZEVsZW1lbnQ6
OnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkKICAgICByZXR1cm4gYXR0cmlidXRlRGF0YSgp
LT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpOwogfQogCitpbmxpbmUgU3R5bGVkRWxlbWVu
dCogdG9TdHlsZWRFbGVtZW50KE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKCFub2RlIHx8IG5v
ZGUtPmlzU3R5bGVkRWxlbWVudCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3R5bGVkRWxl
bWVudCo+KG5vZGUpOworfQorCitpbmxpbmUgY29uc3QgU3R5bGVkRWxlbWVudCogdG9TdHlsZWRF
bGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKCFub2RlIHx8IG5vZGUtPmlz
U3R5bGVkRWxlbWVudCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVkRWxl
bWVudCo+KG5vZGUpOworfQorCiB9IC8vbmFtZXNwYWNlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAK
aW5kZXggNzIwY2E3M2JjZWM5YzNlZGIxNjljMmY0N2I2ZjhjMjY4NzU5OTkyMy4uZDhmM2UyYmYy
NTE4ZGFmNTZhMzcxZDI0M2IyN2U0MmQ5YTEwOTdmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0yMDA5
LDE5ICsyMDA5LDkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoY29u
c3QgU3RyaW5nJiBuZXdGb250KQogCiAgICAgLy8gTm93IG1hcCB0aGUgZm9udCBwcm9wZXJ0eSBs
b25naGFuZHMgaW50byB0aGUgc3R5bGUuCiAgICAgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciA9IGNhbnZhcygpLT5zdHlsZVJlc29sdmVyKCk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQ
cm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBwYXJzZWRTdHlsZS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpLmdldCgpLCBuZXdTdHlsZS5nZXQo
KSk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1By
b3BlcnR5Rm9udFN0eWxlLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9w
ZXJ0eUZvbnRTdHlsZSkuZ2V0KCkpOwotICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlU
b0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBwYXJzZWRTdHlsZS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50KS5nZXQoKSk7Ci0gICAgc3R5bGVS
ZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFdlaWdo
dCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0
KS5nZXQoKSk7Ci0KLSAgICAvLyBBcyBkZXNjcmliZWQgaW4gQlVHNjYyOTEsIHNldHRpbmcgZm9u
dC1zaXplIGFuZCBsaW5lLWhlaWdodCBvbiBhIGZvbnQgbWF5IGVudGFpbCBhIENTU1ByaW1pdGl2
ZVZhbHVlOjpjb21wdXRlTGVuZ3RoRG91YmxlIGNhbGwsCi0gICAgLy8gd2hpY2ggYXNzdW1lcyB0
aGUgZm9udE1ldHJpY3MgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIGFmZmVjdGVkIGZvbnQsIG90aGVy
d2lzZSBhIGNyYXNoIG9jY3VycyAoc2VlIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0
Lzk2MTIyKS4KLSAgICAvLyBUaGUgdXBkYXRlRm9udCgpIGNhbGxzIGJlbG93IHVwZGF0ZSB0aGUg
Zm9udE1ldHJpY3MgYW5kIGVuc3VyZSB0aGUgcHJvcGVyIHNldHRpbmcgb2YgZm9udC1zaXplIGFu
ZCBsaW5lLWhlaWdodC4KLSAgICBzdHlsZVJlc29sdmVyLT51cGRhdGVGb250KCk7Ci0gICAgc3R5
bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFNp
emUsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUp
LmdldCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLT51cGRhdGVGb250KCk7Ci0gICAgc3R5bGVSZXNv
bHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5TGluZUhlaWdodCwg
cGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5n
ZXQoKSk7CisgICAgc3R5bGVSZXNvbHZlci0+YXBwbHlGb250UHJvcGVydHlUb1N0eWxlKG5ld1N0
eWxlLmdldCgpLCBwYXJzZWRTdHlsZS5nZXQoKSk7CiAKKyAgICAvLyBvawogICAgIG1vZGlmaWFi
bGVTdGF0ZSgpLm1fZm9udCA9IG5ld1N0eWxlLT5mb250KCk7CiAgICAgbW9kaWZpYWJsZVN0YXRl
KCkubV9mb250LnVwZGF0ZShzdHlsZVJlc29sdmVyLT5mb250U2VsZWN0b3IoKSk7CiAgICAgbW9k
aWZpYWJsZVN0YXRlKCkubV9yZWFsaXplZEZvbnQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAppbmRleCBkMDlhNTUxNWQ4MzA1Y2U3YWU2MDhh
OTBkZjdmODg0ZjQ1ZDRlNTBkLi43M2E3MzVlODBjODcwYzE4ZjE4NjJjMWYwNzU2ZjRiZTJkNGY3
MmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaApA
QCAtMTMwLDYgKzEzMCw3IEBAIGNsYXNzIFJlbmRlclN0eWxlOiBwdWJsaWMgUmVmQ291bnRlZDxS
ZW5kZXJTdHlsZT4gewogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJTVkdSZXNvdXJjZTsgLy8gRklY
TUU6IE5lZWRzIHRvIGFsdGVyIHRoZSB2aXNpdGVkIHN0YXRlIGJ5IGhhbmQuIFNob3VsZCBjbGVh
biB0aGUgU1ZHIGNvZGUgdXAgYW5kIG1vdmUgaXQgaW50byBSZW5kZXJTdHlsZSBwZXJoYXBzLgog
ICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJUcmVlQXNUZXh0OyAvLyBGSVhNRTogT25seSBuZWVkZWQg
c28gdGhlIHJlbmRlciB0cmVlIGNhbiBrZWVwIGx5aW5nIGFuZCBkdW1wIHRoZSB3cm9uZyBjb2xv
cnMuICBSZWJhc2VsaW5pbmcgd291bGQgYWxsb3cgdGhpcyB0byBiZSB5YW5rZWQuCiAgICAgZnJp
ZW5kIGNsYXNzIFN0eWxlQnVpbGRlcjsgLy8gU2V0cyBtZW1iZXJzIGRpcmVjdGx5LgorICAgIGZy
aWVuZCBjbGFzcyBTdHlsZVJlc29sdmVTdGF0ZTsgLy8gU2V0cyBtZW1iZXJzIGRpcmVjdGx5Lgog
ICAgIGZyaWVuZCBjbGFzcyBTdHlsZVJlc29sdmVyOyAvLyBTZXRzIG1lbWJlcnMgZGlyZWN0bHku
CiBwcm90ZWN0ZWQ6CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184714</attachid>
            <date>2013-01-25 03:10:47 -0800</date>
            <delta_ts>2013-01-27 18:25:55 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-96421-20130125200738.patch</filename>
            <type>text/plain</type>
            <size>335814</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzNGFlNjMyZjcyYjc4NWRlMmNlMDE4YjNhNDk5Y2JkYTAxZjNhMjk4Li4x
MTlkM2JjNzRmNDYzMTNlMjBhNmRlMGY2YzJiYzgwODU1MzJmMzk4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzAwIEBACisyMDEzLTAxLTI1ICBUYWthc2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xl
LmNvbT4KKworICAgICAgICBTcGxpdCBwZXItcmVzb2x2ZSBsb2dpYyBvdXQgZnJvbSBTdHlsZVJl
c29sdmVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTY0MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bXBsZW1lbnRlZCBjbGFzcyBSZXNvbHZlU3RhdGUgYW5kIG1vdmVkIGFsbCBtZW1iZXIgdmFyaWFi
bGVzCisgICAgICAgIHVzZWQgb25seSBmb3IgcGVyLXJlc29sdmUgbG9naWMuCisgICAgICAgIFRo
aXMgaXMgdGhlIGZpcnN0IHN0ZXAgdG8gZW5hYmxlIFN0eWxlUmVzb2x2ZXIgdG8gcmVzb2x2ZSBz
dHlsZXMgb2YKKyAgICAgICAgbXVsdGlwbGUgZWxlbWVudHMgaW4gcGFyYWxsZWwuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCBiZWNhdXNlIGp1c3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2Vi
Q29yZS5neXBpOgorICAgICAgICBBZGRlZCBSZXNvbHZlU3RhdGUuaC4KKyAgICAgICAgKiBjc3Mv
QmFzaWNTaGFwZUZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9MZW5n
dGgpOgorICAgICAgICAoV2ViQ29yZTo6YmFzaWNTaGFwZUZvclZhbHVlKToKKyAgICAgICAgKiBj
c3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
Y3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3JhZGllbnRW
YWx1ZTo6Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQpOgorICAgICAgICAqIGNzcy9DU1NHcmFk
aWVudFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENTU0dyYWRpZW50VmFs
dWUpOgorICAgICAgICAqIGNzcy9DU1NUb1N0eWxlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1RvU3R5bGVNYXA6OnN0eWxlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTVG9TdHlsZU1hcDo6cm9vdEVsZW1lbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NUb1N0eWxlTWFwOjp1c2VTVkdab29tUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9TdHlsZU1hcDo6c3R5bGVJbWFnZSk6CisgICAgICAgIFVzZSBSZXNvbHZlU3RhdGUgdG8gb2J0
YWluIHN0eWxlLCByb290RWxlbWVudFN0eWxlIGFuZCBzbyBvbiBpbnN0ZWFkCisgICAgICAgIG9m
IFN0eWxlUmVzb2x2ZXIuCisgICAgICAgICogY3NzL0NTU1RvU3R5bGVNYXAuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoQ1NTVG9TdHlsZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NUb1N0eWxlTWFwOjpDU1NUb1N0eWxlTWFwKToKKyAgICAgICAgKiBjc3MvUmVzb2x2ZVN0YXRl
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChSZXNvbHZlU3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZVN0YXRlOjpSZXNvbHZlU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb2x2ZVN0YXRlOjpzdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZl
U3RhdGU6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6cm9v
dEVsZW1lbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OmVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZVN0YXRlOjpzdHlsZWRFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6ZG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb2x2ZVN0YXRlOjpyZWdpb25Gb3JTdHlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29s
dmVTdGF0ZTo6bW9kZSk6CisgICAgICAgIE1vdmVkIFN0eWxlUmVzb2x2ZXIncyBtb2RlIGZyb20g
bV9zZWxlY3RvckNoZWNrZXIgdG8gUmVzb2x2ZVN0YXRlLgorICAgICAgICBTbyB3ZSBkb24ndCBu
ZWVkIHRvIGtlZXAgU2VsZWN0b3JDaGVja2VyIGFzIGEgbWVtYmVyIHZhcmlhYmxlIG9mCisgICAg
ICAgIFN0eWxlUmVzb2x2ZXIuCisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OnBzZXVk
b1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6cGFyZW50Tm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OmVsZW1lbnRMaW5rU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb2x2ZVN0YXRlOjpkaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZVN0YXRlOjpzZXRDYW5Vc2VGYXN0UmVqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6Y2FuVXNlRmFzdFJlamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OnNldFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c29sdmVTdGF0ZTo6c2V0Um9vdEVsZW1lbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
bHZlU3RhdGU6OnNldEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZVN0YXRlOjpz
ZXRFbGVtZW50TGlua1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6c2V0
UGFyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OnNldFBhcmVudFN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6c2V0RGlzdHJpYnV0ZWRUb0lu
c2VydGlvblBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6c2V0TW9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OnNldFJlZ2lvbkZvclN0eWxpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZVN0YXRlOjpzZXRQc2V1ZG9TdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OmZvbnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvbHZlU3RhdGU6OnBhcmVudEZvbnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvbHZlU3RhdGU6OnNldEZvbnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvbHZlU3RhdGU6OnNldFpvb20pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZVN0YXRl
OjpzZXRFZmZlY3RpdmVab29tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6c2V0
VGV4dFNpemVBZGp1c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZVN0YXRlOjpzZXRXcml0
aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OnNldFRleHRPcmllbnRh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OnNldEFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OnNldEFwcGx5
UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZVN0
YXRlOjphcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b2x2ZVN0YXRlOjphcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc29sdmVTdGF0ZTo6bWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c29sdmVTdGF0ZTo6bWF0Y2hlZFJ1bGVBdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3Rh
dGU6OnNldEVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvbHZlU3RhdGU6OmVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvbHZlU3RhdGU6OmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvbHZlU3RhdGU6OnBlbmRpbmdJbWFnZVByb3BlcnRpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb2x2ZVN0YXRlOjpwZW5kaW5nU1ZHRG9jdW1lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc29sdmVTdGF0ZTo6c2V0TGluZUhlaWdodFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc29sdmVTdGF0ZTo6bGluZUhlaWdodFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c29sdmVTdGF0ZTo6aGFzUGFyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3Rh
dGU6OnNldEZvbnREaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OmZvbnRE
aXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OmVuc3VyZVJ1bGVMaXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6cnVsZUxpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb2x2ZVN0YXRlOjpzZXRIYXNQZW5kaW5nU2hhZGVycyk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvbHZlU3RhdGU6Omhhc1BlbmRpbmdTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc29sdmVTdGF0ZTo6dXNlU1ZHWm9vbVJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29s
dmVTdGF0ZTo6aGFzVUFBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0
ZTo6Ym9yZGVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OmJhY2tncm91
bmREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6YmFja2dyb3VuZENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6c2V0SW5jbHVkZUVtcHR5UnVsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZVN0YXRlOjpzZXRTYW1lT3JpZ2luT25seSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OmluY2x1ZGVFbXB0eVJ1bGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6c2FtZU9yaWdpbk9ubHkpOgorICAgICAgICAqIGNz
cy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmFwcGx5U1ZHUHJvcGVydHkpOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6
OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hl
Y2tlcjo6bWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmZhc3RD
aGVjayk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5oOgorICAgICAgICAoU2VsZWN0
b3JDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzRnJhbWVGb2N1c2VkKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6bWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MpOgor
ICAgICAgICAqIGNzcy9TdHlsZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUV4cGFuZGluZzo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUV4cGFuZGluZzo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eUV4cGFuZGluZzo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTo6YXBwbHlJbml0aWFsVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlOjphcHBseVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEZWZhdWx0OjphcHBseVZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlOdW1iZXI6OmFwcGx5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVN0eWxlSW1hZ2U6OmFwcGx5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUF1dG86OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBdXRvOjphcHBseUluaXRpYWxWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QXV0bzo6YXBwbHlWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q2xpcDo6Y29udmVydFRvTGVuZ3RoKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q2xpcDo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNsaXA6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eUNvbG9yOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5Q29sb3I6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDb2xvcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5Q29sb3I6OmFwcGx5Q29sb3JWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5RGlyZWN0aW9uOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlMZW5ndGg6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eVN0cmluZzo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5Qm9yZGVyUmFkaXVzOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlGaWxsTGF5ZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlGaWxsTGF5ZXI6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGaWxsTGF5ZXI6OmFwcGx5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGg6OmFwcGx5VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnQ6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250OjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFNpemU6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250U2l6ZTo6YXBwbHlJbml0aWFsVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250V2VpZ2h0OjphcHBseVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250VmFyaWFudExpZ2F0dXJlczo6YXBwbHlJ
bmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRWYXJpYW50
TGlnYXR1cmVzOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVyZXM6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyOjphcHBseUluaGVyaXRWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjo6YXBw
bHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUJvcmRlcklt
YWdlTW9kaWZpZXI6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eUJvcmRlckltYWdlU291cmNlOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlDb3VudGVyOjplbXB0eUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlDb3VudGVyOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5Q291bnRlcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5Q3Vyc29yOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5Q3Vyc29yOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5Q3Vyc29yOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlUZXh0QWxpZ246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eVRleHREZWNvcmF0aW9uOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlQYWdlU2l6ZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eVBhZ2VTaXplOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5UGFnZVNpemU6OmFwcGx5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRFbXBoYXNpc1N0eWxlOjphcHBseUluaGVyaXRWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5VGV4dEVtcGhhc2lzU3R5bGU6OmFw
cGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RW1w
aGFzaXNTdHlsZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
QW5pbWF0aW9uOjptYXApOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFuaW1hdGlv
bjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFu
aW1hdGlvbjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eUFuaW1hdGlvbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5T3V0bGluZVN0eWxlOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5T3V0bGluZVN0eWxlOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5T3V0bGluZVN0eWxlOjphcHBseVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlSZXNpemU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eVZlcnRpY2FsQWxpZ246OmFwcGx5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlvOjphcHBseUluaGVyaXRWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QXNwZWN0UmF0aW86OmFwcGx5SW5pdGlhbFZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBc3BlY3RSYXRpbzo6YXBwbHlW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Wm9vbTo6cmVzZXRFZmZlY3Rp
dmVab29tKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlab29tOjphcHBseUluaGVy
aXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Wm9vbTo6YXBwbHlJbml0
aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVpvb206OmFwcGx5VmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURpc3BsYXk6OmlzVmFsaWREaXNw
bGF5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURpc3BsYXk6OmFwcGx5
SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEaXNwbGF5Ojph
cHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGlzcGxh
eTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q2xpcFBhdGg6
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUV4Y2x1c2lvblNo
YXBlOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlJbWFnZVJl
c29sdXRpb246OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJv
cGVydHlJbWFnZVJlc29sdXRpb246OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlJbWFnZVJlc29sdXRpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAq
IGNzcy9TdHlsZUJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUHJvcGVy
dHlIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5SGFuZGxlcjo6YXBwbHlJbmhl
cml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlIYW5kbGVyOjphcHBseUluaXRp
YWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eUhhbmRsZXI6OmFwcGx5VmFsdWUp
OgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcik6CisgICAgICAg
IFNpbmNlIFJlc29sdmVTdGF0ZSBwcm92aWRlcyBhbGwgaW5mb3JtYXRpb24sIG5vIG5lZWQgdG8g
aGF2ZQorICAgICAgICBhbnkgaW5zdGFuY2Ugb2YgQ1NTVG9TdHlsZU1hcCBhbmQgbm8gbmVlZCB0
byBtYWtlIFNlbGVjdG9yQ2hlY2tlcgorICAgICAgICBhIG1lbWJlciB2YXJpYWJsZSBvZiBTdHls
ZVJlc29sdmVyLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNo
aW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29y
dEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6Om1hdGNoVUFSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpj
b2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c29ydE1hdGNoZWRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRGb3JTdHlsZVJl
c29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2Fu
ZGlkYXRlTWF0Y2hlc1J1bGVTZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmZpbmRTaWJsaW5nRm9yU3R5
bGVTaGFyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJl
ZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjp1cGRhdGVGb250KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnJ1bGVNYXRjaGVzKToKKyAgICAgICAgbV9keW5h
bWljUHNldWRvIGlzIHVzZWQgYmV0d2VlbiB0aGlzIHJ1bGVNYXRjaGVzIGFuZAorICAgICAgICBj
b2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QuIFNvIGFkZGVkIG9uZSBwYXJhbWV0ZXIgdG8gcmV0
dXJuCisgICAgICAgIHdoYXQgZHluYW1pYyBwc2V1ZG8gYW4gZWxlbWVudCBtYXRjaGVzLiBSZW1v
dmVkIG1fZHluYW1pY1BzZXVkbworICAgICAgICBmcm9tIFN0eWxlUmVzb2x2ZXIuCisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVdpdGhWYWx1ZUNoZWNraW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5Rm9udFByb3BlcnR5VG9TdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUdyaWRUcmFja01pbk1heCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHcmlkVHJhY2tH
cm91cCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHcmlkVHJhY2tMaXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJsZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250U2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJh
bWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0
ZXJQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0
b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6bG9hZFBlbmRpbmdSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6Cisg
ICAgICAgIChTdHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OmFkZE1hdGNoZWRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmlzUmln
aHRQYWdlKToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6dG9TdHlsZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5oOgorCiAyMDEzLTAxLTI0ICBLZW50IFRhbXVyYSAgPHRrZW50QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBJTlBVVF9NVUxUSVBMRV9GSUVMRFNfVUk6IFJlZmFjdG9y
aW5nOiBSZW1vdmUgY29uZnVzaW5nIG1pbmltdW0oKSBhbmQgbWF4aW11bSgpIG9mIERhdGVUaW1l
U3ltYm9saWNGaWVsZEVsZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGQ3
NTIxZDRiM2QxMzEyZDFhMjU1NjMwZjQyODg0ZGNmMThlYWFjM2QuLmIxYzBiZDBjMjQwMWM1ZTc0
MzlmNTI1MGUxNjBlZGI3ODk0NzE1NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpA
QCAtMjYzOSw2ICsyNjM5LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9jc3MvUmVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvUkdCQ29sb3IuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9jc3MvUkdCQ29sb3IuaCBcCisJU291cmNlL1dlYkNvcmUvY3NzL1Jlc29sdmVT
dGF0ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvUnVsZUZlYXR1cmUuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9jc3MvUnVsZUZlYXR1cmUuaCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQu
Y3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCmluZGV4IDI5OThjOWQ1MTRkN2Q1MmIxYzliYWRiY2VjOTc2YzVlYTMz
YjM0NDYuLjRkOWZiOTFkMWVlNjc3Mzc2NmY5ZWMyODJkZTVmZGU5YzQ2NzAxYjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQpAQCAtMTUyMyw2ICsxNTIzLDcgQEAgSEVBREVSUyArPSBcCiAgICAgY3NzL01lZGlhUXVl
cnlMaXN0TGlzdGVuZXIuaCBcCiAgICAgY3NzL01lZGlhUXVlcnlNYXRjaGVyLmggXAogICAgIGNz
cy9SR0JDb2xvci5oIFwKKyAgICBjc3MvUmVzb2x2ZVN0YXRlLmggXAogICAgIGNzcy9TZWxlY3Rv
ckNoZWNrZXIuaCBcCiAgICAgY3NzL1NoYWRvd1ZhbHVlLmggXAogICAgIGNzcy9TaWJsaW5nVHJh
dmVyc2FsU3RyYXRlZ2llcy5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA0ZDU4NjgxMmMxOWE3ODg4
YTcwMzJjNzY3NTcxMWE3MzA0ODRiZTk4Li45MDgwODE2MjM1ODY2YTdmZmMxZTZiNzM5MjIxMjc5
NzIyNGFlMzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xNTU5LDYgKzE1NTksNyBAQAogICAgICAg
ICAgICAgJ2Nzcy9SR0JDb2xvci5jcHAnLAogICAgICAgICAgICAgJ2Nzcy9SR0JDb2xvci5oJywK
ICAgICAgICAgICAgICdjc3MvUmVjdC5oJywKKyAgICAgICAgICAgICdjc3MvUmVzb2x2ZVN0YXRl
LmgnLAogICAgICAgICAgICAgJ2Nzcy9SdWxlRmVhdHVyZS5jcHAnLAogICAgICAgICAgICAgJ2Nz
cy9SdWxlRmVhdHVyZS5oJywKICAgICAgICAgICAgICdjc3MvUnVsZVNldC5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwCmluZGV4IDNhOGY3OTUzYjZmOTZi
MDEyZjg0MzIzN2EyZTEyYTBmZGY0Y2IxMjEuLmM0YjI0OWMyODc2YjYzYzcyMzlhODk1ZDQwNWQ1
Y2ZmM2E1MDkzYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVu
Y3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5j
cHAKQEAgLTEwMCwxMiArMTAwLDEyIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlRm9yQmFz
aWNTaGFwZShjb25zdCBCYXNpY1NoYXBlKiBiYXNpY1NoYXBlKQogICAgIHJldHVybiBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZTxQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+ID4oYmFzaWNTaGFw
ZVZhbHVlLnJlbGVhc2UoKSk7CiB9CiAKLXN0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKGNv
bnN0IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1
ZSkKK3N0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKFJlc29sdmVTdGF0ZSYgc3RhdGUsIENT
U1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gdmFsdWUtPmNvbnZlcnRUb0xl
bmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgRml4ZWRGbG9hdENvbnZlcnNpb24gfCBQZXJj
ZW50Q29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICByZXR1cm4gdmFsdWUtPmNvbnZl
cnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgRml4ZWRGbG9hdENvbnZlcnNpb24g
fCBQZXJjZW50Q29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0YXRl
LnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0
aXZlWm9vbSgpKTsKIH0KIAotUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFs
dWUoY29uc3QgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTQmFzaWNTaGFw
ZSogYmFzaWNTaGFwZVZhbHVlKQorUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9y
VmFsdWUoUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgY29uc3QgQ1NTQmFzaWNTaGFwZSogYmFzaWNTaGFw
ZVZhbHVlKQogewogICAgIFJlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlOwogCkBAIC0xMTQs
MTQgKzExNCwxNCBAQCBQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShj
b25zdCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBjbwogICAgICAgICBjb25zdCBDU1NC
YXNpY1NoYXBlUmVjdGFuZ2xlKiByZWN0VmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBDU1NCYXNp
Y1NoYXBlUmVjdGFuZ2xlICo+KGJhc2ljU2hhcGVWYWx1ZSk7CiAgICAgICAgIFJlZlB0cjxCYXNp
Y1NoYXBlUmVjdGFuZ2xlPiByZWN0ID0gQmFzaWNTaGFwZVJlY3RhbmdsZTo6Y3JlYXRlKCk7CiAK
LSAgICAgICAgcmVjdC0+c2V0WChjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdFZh
bHVlLT54KCkpKTsKLSAgICAgICAgcmVjdC0+c2V0WShjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNv
bHZlciwgcmVjdFZhbHVlLT55KCkpKTsKLSAgICAgICAgcmVjdC0+c2V0V2lkdGgoY29udmVydFRv
TGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+d2lkdGgoKSkpOwotICAgICAgICByZWN0
LT5zZXRIZWlnaHQoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+aGVp
Z2h0KCkpKTsKKyAgICAgICAgcmVjdC0+c2V0WChjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3RW
YWx1ZS0+eCgpKSk7CisgICAgICAgIHJlY3QtPnNldFkoY29udmVydFRvTGVuZ3RoKHN0YXRlLCBy
ZWN0VmFsdWUtPnkoKSkpOworICAgICAgICByZWN0LT5zZXRXaWR0aChjb252ZXJ0VG9MZW5ndGgo
c3RhdGUsIHJlY3RWYWx1ZS0+d2lkdGgoKSkpOworICAgICAgICByZWN0LT5zZXRIZWlnaHQoY29u
dmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0VmFsdWUtPmhlaWdodCgpKSk7CiAgICAgICAgIGlmIChy
ZWN0VmFsdWUtPnJhZGl1c1goKSkgewotICAgICAgICAgICAgcmVjdC0+c2V0Q29ybmVyUmFkaXVz
WChjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdFZhbHVlLT5yYWRpdXNYKCkpKTsK
KyAgICAgICAgICAgIHJlY3QtPnNldENvcm5lclJhZGl1c1goY29udmVydFRvTGVuZ3RoKHN0YXRl
LCByZWN0VmFsdWUtPnJhZGl1c1goKSkpOwogICAgICAgICAgICAgaWYgKHJlY3RWYWx1ZS0+cmFk
aXVzWSgpKQotICAgICAgICAgICAgICAgIHJlY3QtPnNldENvcm5lclJhZGl1c1koY29udmVydFRv
TGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+cmFkaXVzWSgpKSk7CisgICAgICAgICAg
ICAgICAgcmVjdC0+c2V0Q29ybmVyUmFkaXVzWShjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3RW
YWx1ZS0+cmFkaXVzWSgpKSk7CiAgICAgICAgIH0KICAgICAgICAgYmFzaWNTaGFwZSA9IHJlY3Qu
cmVsZWFzZSgpOwogICAgICAgICBicmVhazsKQEAgLTEzMCw5ICsxMzAsOSBAQCBQYXNzUmVmUHRy
PEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBjbwogICAgICAgICBjb25zdCBDU1NCYXNpY1NoYXBlQ2lyY2xlKiBjaXJjbGVW
YWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IENTU0Jhc2ljU2hhcGVDaXJjbGUgKj4oYmFzaWNTaGFw
ZVZhbHVlKTsKICAgICAgICAgUmVmUHRyPEJhc2ljU2hhcGVDaXJjbGU+IGNpcmNsZSA9IEJhc2lj
U2hhcGVDaXJjbGU6OmNyZWF0ZSgpOwogCi0gICAgICAgIGNpcmNsZS0+c2V0Q2VudGVyWChjb252
ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgY2lyY2xlVmFsdWUtPmNlbnRlclgoKSkpOwotICAg
ICAgICBjaXJjbGUtPnNldENlbnRlclkoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIGNp
cmNsZVZhbHVlLT5jZW50ZXJZKCkpKTsKLSAgICAgICAgY2lyY2xlLT5zZXRSYWRpdXMoY29udmVy
dFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIGNpcmNsZVZhbHVlLT5yYWRpdXMoKSkpOworICAgICAg
ICBjaXJjbGUtPnNldENlbnRlclgoY29udmVydFRvTGVuZ3RoKHN0YXRlLCBjaXJjbGVWYWx1ZS0+
Y2VudGVyWCgpKSk7CisgICAgICAgIGNpcmNsZS0+c2V0Q2VudGVyWShjb252ZXJ0VG9MZW5ndGgo
c3RhdGUsIGNpcmNsZVZhbHVlLT5jZW50ZXJZKCkpKTsKKyAgICAgICAgY2lyY2xlLT5zZXRSYWRp
dXMoY29udmVydFRvTGVuZ3RoKHN0YXRlLCBjaXJjbGVWYWx1ZS0+cmFkaXVzKCkpKTsKIAogICAg
ICAgICBiYXNpY1NoYXBlID0gY2lyY2xlLnJlbGVhc2UoKTsKICAgICAgICAgYnJlYWs7CkBAIC0x
NDEsMTAgKzE0MSwxMCBAQCBQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JWYWx1
ZShjb25zdCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBjbwogICAgICAgICBjb25zdCBD
U1NCYXNpY1NoYXBlRWxsaXBzZSogZWxsaXBzZVZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ1NT
QmFzaWNTaGFwZUVsbGlwc2UgKj4oYmFzaWNTaGFwZVZhbHVlKTsKICAgICAgICAgUmVmUHRyPEJh
c2ljU2hhcGVFbGxpcHNlPiBlbGxpcHNlID0gQmFzaWNTaGFwZUVsbGlwc2U6OmNyZWF0ZSgpOwog
Ci0gICAgICAgIGVsbGlwc2UtPnNldENlbnRlclgoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2
ZXIsIGVsbGlwc2VWYWx1ZS0+Y2VudGVyWCgpKSk7Ci0gICAgICAgIGVsbGlwc2UtPnNldENlbnRl
clkoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIGVsbGlwc2VWYWx1ZS0+Y2VudGVyWSgp
KSk7Ci0gICAgICAgIGVsbGlwc2UtPnNldFJhZGl1c1goY29udmVydFRvTGVuZ3RoKHN0eWxlUmVz
b2x2ZXIsIGVsbGlwc2VWYWx1ZS0+cmFkaXVzWCgpKSk7Ci0gICAgICAgIGVsbGlwc2UtPnNldFJh
ZGl1c1koY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIGVsbGlwc2VWYWx1ZS0+cmFkaXVz
WSgpKSk7CisgICAgICAgIGVsbGlwc2UtPnNldENlbnRlclgoY29udmVydFRvTGVuZ3RoKHN0YXRl
LCBlbGxpcHNlVmFsdWUtPmNlbnRlclgoKSkpOworICAgICAgICBlbGxpcHNlLT5zZXRDZW50ZXJZ
KGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgZWxsaXBzZVZhbHVlLT5jZW50ZXJZKCkpKTsKKyAgICAg
ICAgZWxsaXBzZS0+c2V0UmFkaXVzWChjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIGVsbGlwc2VWYWx1
ZS0+cmFkaXVzWCgpKSk7CisgICAgICAgIGVsbGlwc2UtPnNldFJhZGl1c1koY29udmVydFRvTGVu
Z3RoKHN0YXRlLCBlbGxpcHNlVmFsdWUtPnJhZGl1c1koKSkpOwogCiAgICAgICAgIGJhc2ljU2hh
cGUgPSBlbGxpcHNlLnJlbGVhc2UoKTsKICAgICAgICAgYnJlYWs7CkBAIC0xNTYsNyArMTU2LDcg
QEAgUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUoY29uc3QgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgY28KICAgICAgICAgcG9seWdvbi0+c2V0V2luZFJ1bGUo
cG9seWdvblZhbHVlLT53aW5kUnVsZSgpKTsKICAgICAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gPiYgdmFsdWVzID0gcG9seWdvblZhbHVlLT52YWx1ZXMoKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7IGkgKz0gMikKLSAg
ICAgICAgICAgIHBvbHlnb24tPmFwcGVuZFBvaW50KGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29s
dmVyLCB2YWx1ZXMuYXQoaSkuZ2V0KCkpLCBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwg
dmFsdWVzLmF0KGkgKyAxKS5nZXQoKSkpOworICAgICAgICAgICAgcG9seWdvbi0+YXBwZW5kUG9p
bnQoY29udmVydFRvTGVuZ3RoKHN0YXRlLCB2YWx1ZXMuYXQoaSkuZ2V0KCkpLCBjb252ZXJ0VG9M
ZW5ndGgoc3RhdGUsIHZhbHVlcy5hdChpICsgMSkuZ2V0KCkpKTsKIAogICAgICAgICBiYXNpY1No
YXBlID0gcG9seWdvbi5yZWxlYXNlKCk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9CYXNpY1NoYXBlRnVuY3Rpb25zLmgKaW5kZXggZDM2MDdlOTA5OTI5YzM0MWIwYzA2OWQzZTVj
ZWI2MWYxM2YxMTcxOS4uNmJmM2VlNWU0ZjFhMmM2NmU2YTRkNTNjMTEwZTFkMTM4MzY5YmYwYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5oCkBAIC0zNywxMCArMzcs
MTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQmFzaWNTaGFwZTsKIGNsYXNzIENTU0Jh
c2ljU2hhcGU7CiBjbGFzcyBDU1NWYWx1ZTsKLWNsYXNzIFN0eWxlUmVzb2x2ZXI7CitjbGFzcyBS
ZXNvbHZlU3RhdGU7CiAKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlRm9yQmFzaWNTaGFwZShj
b25zdCBCYXNpY1NoYXBlKik7Ci1QYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JW
YWx1ZShjb25zdCBTdHlsZVJlc29sdmVyKiwgY29uc3QgQ1NTQmFzaWNTaGFwZSopOworUGFzc1Jl
ZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUoUmVzb2x2ZVN0YXRlJiwgY29uc3Qg
Q1NTQmFzaWNTaGFwZSopOwogCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVu
dFZhbHVlLmNwcAppbmRleCBmMTUxOGQ4ZGFjNzQ4MGM0ZTIzOTdlNTJkZmE5NDJiY2U4ZGM2YTgx
Li40OWU5NWZlMDY2ZmNhODYwZGM0MTAxZmZiNjk1NzM4ZTk1ZTQ4MWRmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCkBAIC0xMTUsMTEgKzExNSwxMSBAQCBzdHJ1Y3Qg
R3JhZGllbnRTdG9wIHsKICAgICB7IH0KIH07CiAKLVBhc3NSZWZQdHI8Q1NTR3JhZGllbnRWYWx1
ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlcikKK1Bhc3NSZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3Jh
ZGllbnRWYWx1ZTo6Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoUmVzb2x2ZVN0YXRlJiBzdGF0
ZSkKIHsKICAgICBib29sIGRlcml2ZWQgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9zdG9wcy5zaXplKCk7IGkrKykKLSAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPmNv
bG9yRnJvbVByaW1pdGl2ZVZhbHVlSXNEZXJpdmVkRnJvbUVsZW1lbnQobV9zdG9wc1tpXS5tX2Nv
bG9yLmdldCgpKSkgeworICAgICAgICBpZiAoU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0
aXZlVmFsdWVJc0Rlcml2ZWRGcm9tRWxlbWVudChtX3N0b3BzW2ldLm1fY29sb3IuZ2V0KCkpKSB7
CiAgICAgICAgICAgICBtX3N0b3BzW2ldLm1fY29sb3JJc0Rlcml2ZWRGcm9tRWxlbWVudCA9IHRy
dWU7CiAgICAgICAgICAgICBkZXJpdmVkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTM4LDcgKzEzOCw3IEBAIFBhc3NSZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRW
YWx1ZTo6Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGVSCiAgICAgfQogCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdC0+bV9zdG9wcy5zaXplKCk7IGkrKykKLSAgICAg
ICAgcmVzdWx0LT5tX3N0b3BzW2ldLm1fcmVzb2x2ZWRDb2xvciA9IHN0eWxlUmVzb2x2ZXItPmNv
bG9yRnJvbVByaW1pdGl2ZVZhbHVlKHJlc3VsdC0+bV9zdG9wc1tpXS5tX2NvbG9yLmdldCgpKTsK
KyAgICAgICAgcmVzdWx0LT5tX3N0b3BzW2ldLm1fcmVzb2x2ZWRDb2xvciA9IFN0eWxlUmVzb2x2
ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCByZXN1bHQtPm1fc3RvcHNbaV0ubV9j
b2xvci5nZXQoKSk7CiAKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCmluZGV4IDZmMDA1MzU5MDdlMTU3NzlhMDgwMjcyYzg4
NmZkNmI4MDk3YzgwMGQuLjgzNTU3ZTUzMjE1ZjVmOTZhNjA1YzFmZTllZDk1NTM3ZTM0OWQ3YjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaApAQCAtMzUsNiArMzUsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBHcmFkaWVudDsK
K2NsYXNzIFJlc29sdmVTdGF0ZTsKIAogZW51bSBDU1NHcmFkaWVudFR5cGUgewogICAgIENTU0Rl
cHJlY2F0ZWRMaW5lYXJHcmFkaWVudCwKQEAgLTg0LDcgKzg1LDcgQEAgcHVibGljOgogICAgIGJv
b2wgaGFzQWxwaGEoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAKICAgICB2b2lkIGxvYWRT
dWJpbWFnZXMoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqKSB7IH0KLSAgICBQYXNzUmVmUHRyPENTU0dy
YWRpZW50VmFsdWU+IGdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlUmVzb2x2ZXIqKTsK
KyAgICBQYXNzUmVmUHRyPENTU0dyYWRpZW50VmFsdWU+IGdyYWRpZW50V2l0aFN0eWxlc1Jlc29s
dmVkKFJlc29sdmVTdGF0ZSYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgQ1NTR3JhZGllbnRWYWx1ZShD
bGFzc1R5cGUgY2xhc3NUeXBlLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXQsIENTU0dyYWRpZW50
VHlwZSBncmFkaWVudFR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9T
dHlsZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKaW5kZXgg
MDI0NGQ4YTNhZDU3OGY2ZTEzZjZjZDFkYmU2YThkMjQzZWQ4MDdiMC4uMTg0YzQ3MDlhOWYwMjdj
NDQyYmJmMDE4ODU2OTY3MDA2ZWY2YTEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1RvU3R5bGVNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFw
LmNwcApAQCAtNDMsMjIgKzQzLDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyU3R5
bGUqIENTU1RvU3R5bGVNYXA6OnN0eWxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yZXNvbHZl
ci0+c3R5bGUoKTsKKyAgICByZXR1cm4gbV9zdGF0ZS5zdHlsZSgpOwogfQotICAgIAorCiBSZW5k
ZXJTdHlsZSogQ1NTVG9TdHlsZU1hcDo6cm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fcmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKTsKKyAgICByZXR1cm4gbV9zdGF0
ZS5yb290RWxlbWVudFN0eWxlKCk7CiB9CiAKIGJvb2wgQ1NTVG9TdHlsZU1hcDo6dXNlU1ZHWm9v
bVJ1bGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+dXNlU1ZHWm9vbVJ1bGVz
KCk7CisgICAgcmV0dXJuIG1fc3RhdGUudXNlU1ZHWm9vbVJ1bGVzKCk7CiB9Ci0gICAgCisKIFBh
c3NSZWZQdHI8U3R5bGVJbWFnZT4gQ1NTVG9TdHlsZU1hcDo6c3R5bGVJbWFnZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SWQsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9yZXNvbHZl
ci0+c3R5bGVJbWFnZShwcm9wZXJ0eUlkLCB2YWx1ZSk7CisgICAgcmV0dXJuIFN0eWxlUmVzb2x2
ZXI6OnN0eWxlSW1hZ2UobV9zdGF0ZSwgcHJvcGVydHlJZCwgdmFsdWUpOwogfQogCiB2b2lkIENT
U1RvU3R5bGVNYXA6Om1hcEZpbGxBdHRhY2htZW50KENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciog
bGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NUb1N0eWxlTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCmluZGV4
IDZiYWI0MGJmY2Q3N2UxMjVhYjA4ZjAwOGYxMGU3YTNlNjgyNzkxNGUuLjExNmQzNDgwMmY1NTYw
YjcxNDY2ZDA3OTBkYjM1YTA0OWI2M2I0MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NUb1N0eWxlTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAu
aApAQCAtMjcsMjAgKzI3LDE5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmls
bExheWVyOwotY2xhc3MgQ1NTVmFsdWU7CiBjbGFzcyBBbmltYXRpb247CitjbGFzcyBDU1NWYWx1
ZTsKK2NsYXNzIEZpbGxMYXllcjsKK2NsYXNzIE5pbmVQaWVjZUltYWdlOwogY2xhc3MgUmVuZGVy
U3R5bGU7CitjbGFzcyBSZXNvbHZlU3RhdGU7CiBjbGFzcyBTdHlsZUltYWdlOwotY2xhc3MgU3R5
bGVSZXNvbHZlcjsKLWNsYXNzIE5pbmVQaWVjZUltYWdlOwogCiBjbGFzcyBDU1NUb1N0eWxlTWFw
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDU1NUb1N0eWxlTWFwKTsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLQogcHVibGljOgotICAgIENTU1RvU3R5bGVNYXAoU3R5bGVSZXNv
bHZlciogcmVzb2x2ZXIpIDogbV9yZXNvbHZlcihyZXNvbHZlcikgeyB9CisgICAgQ1NTVG9TdHls
ZU1hcChSZXNvbHZlU3RhdGUmIHN0YXRlKSA6IG1fc3RhdGUoc3RhdGUpIHsgfQogCiAgICAgdm9p
ZCBtYXBGaWxsQXR0YWNobWVudChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSop
OwogICAgIHZvaWQgbWFwRmlsbENsaXAoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFs
dWUqKTsKQEAgLTY5LDE5ICs2OCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXBOaW5lUGllY2VJ
bWFnZVJlcGVhdChDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7CiAKIHByaXZhdGU6Ci0gICAg
Ly8gRklYTUU6IFRoZXNlIGFjY2Vzc29ycyBzaG91bGQgYmUgcmVwbGFjZWQgYnkgYSBSZXNvbHZl
U3RhdGUgb2JqZWN0Ci0gICAgLy8gc2ltaWxhciB0byBob3cgUGFpbnRJbmZvL0xheW91dFN0YXRl
IGNhY2hlIHZhbHVlcyBuZWVkZWQgZm9yCi0gICAgLy8gdGhlIGN1cnJlbnQgcGFpbnQvbGF5b3V0
LgogICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0OwogICAgIFJlbmRlclN0eWxlKiByb290
RWxlbWVudFN0eWxlKCkgY29uc3Q7CiAgICAgYm9vbCB1c2VTVkdab29tUnVsZXMoKSBjb25zdDsK
LQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwYXJ0IG9mIHNvbWUgc29ydCBvZiBTdHls
ZUltYWdlQ2FjaGUgb2JqZWN0IHdoaWNoCi0gICAgLy8gaXMgaGVsZCBieSB0aGUgU3R5bGVSZXNv
bHZlciwgYW5kIGxpa2VseSBwcm92aWRlZCB0byB0aGlzIG9iamVjdAotICAgIC8vIGR1cmluZyB0
aGUgcmVzb2x2ZS4KICAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2UoQ1NTUHJv
cGVydHlJRCwgQ1NTVmFsdWUqKTsKIAotICAgIFN0eWxlUmVzb2x2ZXIqIG1fcmVzb2x2ZXI7Cisg
ICAgUmVzb2x2ZVN0YXRlJiBtX3N0YXRlOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1Jlc29sdmVTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1Jlc29sdmVTdGF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmUxMDQxYTlkODhjOTg1YWFmMjNjMGE5NzA4OGRiZDQzMzFlYjA4NTEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUmVzb2x2ZVN0YXRlLmgKQEAg
LTAsMCArMSwyMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAq
LworCisjaWZuZGVmIFJlc29sdmVTdGF0ZV9oCisjZGVmaW5lIFJlc29sdmVTdGF0ZV9oCisKKyNp
bmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgorI2lmIEVOQUJMRShD
U1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJXZWJLaXRDU1NTVkdEb2N1bWVu
dFZhbHVlLmgiCisjZW5kaWYKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordHlwZWRlZiBIYXNoTWFwPENTU1Byb3BlcnR5SUQsIFJlZlB0cjxDU1NWYWx1ZT4gPiBQ
ZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJM
RShTVkcpCit0eXBlZGVmIEhhc2hNYXA8RmlsdGVyT3BlcmF0aW9uKiwgUmVmUHRyPFdlYktpdENT
U1NWR0RvY3VtZW50VmFsdWU+ID4gUGVuZGluZ1NWR0RvY3VtZW50TWFwOworI2VuZGlmCisKK2Ns
YXNzIFJlbmRlclJlZ2lvbjsKK2NsYXNzIFJ1bGVEYXRhOworCitjbGFzcyBSZXNvbHZlU3RhdGUg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlc29sdmVTdGF0ZSk7CitwdWJsaWM6CisgICAg
UmVzb2x2ZVN0YXRlKCkKKyAgICA6IG1fZWxlbWVudCgwKQorICAgICwgbV9zdHlsZSgwKQorICAg
ICwgbV9pbmNsdWRlRW1wdHlSdWxlcyhmYWxzZSkKKyAgICAsIG1fc2FtZU9yaWdpbk9ubHkoZmFs
c2UpCisgICAgLCBtX3BzZXVkb1N0eWxlKE5PUFNFVURPKQorICAgICwgbV9tb2RlKFNlbGVjdG9y
Q2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpCisgICAgLCBtX3JlZ2lvbkZvclN0eWxpbmcoMCkKKyAg
ICAsIG1fZWxlbWVudExpbmtTdGF0ZShOb3RJbnNpZGVMaW5rKQorICAgICwgbV9wYXJlbnROb2Rl
KDApCisgICAgLCBtX3BhcmVudFN0eWxlKDApCisgICAgLCBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRp
b25Qb2ludChmYWxzZSkKKyAgICAsIG1fcm9vdEVsZW1lbnRTdHlsZSgwKQorICAgICwgbV9jYW5V
c2VGYXN0UmVqZWN0KGZhbHNlKQorICAgICwgbV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMo
ZmFsc2UpCisgICAgLCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKQorICAgICwg
bV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKQorI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKKyAgICAsIG1faGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpCisjZW5kaWYKKyAgICAs
IG1fbGluZUhlaWdodFZhbHVlKDApCisgICAgLCBtX2ZvbnREaXJ0eShmYWxzZSkKKyAgICAsIG1f
aGFzVUFBcHBlYXJhbmNlKGZhbHNlKQorICAgICwgbV9iYWNrZ3JvdW5kRGF0YShCYWNrZ3JvdW5k
RmlsbExheWVyKSB7IH0KKworcHVibGljOgorICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3R5bGU7IH0KKyAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9CisgICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50U3R5bGU7IH0KKyAgICBFbGVtZW50
KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgU3R5bGVkRWxlbWVu
dCogc3R5bGVkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVkRWxlbWVudDsgfQorICAg
IERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudC0+ZG9jdW1lbnQo
KTsgfQorICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fcmVnaW9uRm9yU3R5bGluZzsgfQorICAgIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSBtb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgUHNldWRvSWQgcHNldWRvU3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3BzZXVkb1N0eWxlOyB9CisgICAgY29uc3QgQ29udGFpbmVyTm9kZSogcGFy
ZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50Tm9kZTsgfQorICAgIEVJbnNpZGVMaW5r
IGVsZW1lbnRMaW5rU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRMaW5rU3RhdGU7IH0K
KyAgICBib29sIGRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50OyB9CisKKyAgICB2b2lkIHNldENhblVzZUZhc3RS
ZWplY3QoYm9vbCBjYW5Vc2VGYXN0UmVqZWN0KSB7IG1fY2FuVXNlRmFzdFJlamVjdCA9IGNhblVz
ZUZhc3RSZWplY3Q7IH0KKyAgICBib29sIGNhblVzZUZhc3RSZWplY3QoKSBjb25zdCB7IHJldHVy
biBtX2NhblVzZUZhc3RSZWplY3Q7IH0KKworICAgIHZvaWQgc2V0U3R5bGUoUmVuZGVyU3R5bGUq
IHN0eWxlKSB7IG1fc3R5bGUgPSBzdHlsZTsgfQorICAgIHZvaWQgc2V0Um9vdEVsZW1lbnRTdHls
ZShSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSkgeyBtX3Jvb3RFbGVtZW50U3R5bGUgPSBy
b290RWxlbWVudFN0eWxlOyB9CisgICAgdm9pZCBzZXRFbGVtZW50KEVsZW1lbnQqIGUpIHsgbV9l
bGVtZW50ID0gZTsgbV9zdHlsZWRFbGVtZW50ID0gZSAmJiBlLT5pc1N0eWxlZEVsZW1lbnQoKSA/
IHRvU3R5bGVkRWxlbWVudChlKSA6IDA7IH0KKyAgICB2b2lkIHNldEVsZW1lbnRMaW5rU3RhdGUo
RUluc2lkZUxpbmsgZWxlbWVudExpbmtTdGF0ZSkgeyBtX2VsZW1lbnRMaW5rU3RhdGUgPSBlbGVt
ZW50TGlua1N0YXRlOyB9CisgICAgdm9pZCBzZXRQYXJlbnROb2RlKENvbnRhaW5lck5vZGUqIHBh
cmVudE5vZGUpIHsgbV9wYXJlbnROb2RlID0gcGFyZW50Tm9kZTsgfQorICAgIHZvaWQgc2V0UGFy
ZW50U3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSB7IG1fcGFyZW50U3R5bGUgPSBwYXJl
bnRTdHlsZTsgfQorICAgIHZvaWQgc2V0RGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KGJvb2wg
ZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KSB7IG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBv
aW50ID0gZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50OyB9CisgICAgdm9pZCBzZXRNb2RlKFNl
bGVjdG9yQ2hlY2tlcjo6TW9kZSBtb2RlKSB7IG1fbW9kZSA9IG1vZGU7IH0KKyAgICB2b2lkIHNl
dFJlZ2lvbkZvclN0eWxpbmcoUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nKSB7IG1fcmVn
aW9uRm9yU3R5bGluZyA9IHJlZ2lvbkZvclN0eWxpbmc7IH0KKyAgICB2b2lkIHNldFBzZXVkb1N0
eWxlKFBzZXVkb0lkIHBzZXVkb1N0eWxlKSB7IG1fcHNldWRvU3R5bGUgPSBwc2V1ZG9TdHlsZTsg
fQorCisgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7IHJldHVy
biBzdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsgfQorICAgIGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gcGFyZW50U3R5bGUoKS0+Zm9udERl
c2NyaXB0aW9uKCk7IH0KKworICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9CisKKyAgICB2b2lkIHNldFpvb20o
ZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRab29tKGYpOyB9CisgICAgdm9p
ZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0
RWZmZWN0aXZlWm9vbShmKTsgfQorCisgICAgdm9pZCBzZXRUZXh0U2l6ZUFkanVzdChib29sIGIp
IHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0VGV4dFNpemVBZGp1c3QoYik7IH0KKyAgICB2
b2lkIHNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IG1fZm9udERpcnR5
IHw9IHN0eWxlKCktPnNldFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsgfQorICAgIHZvaWQgc2V0
VGV4dE9yaWVudGF0aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24pIHsgbV9mb250
RGlydHkgfD0gc3R5bGUoKS0+c2V0VGV4dE9yaWVudGF0aW9uKHRleHRPcmllbnRhdGlvbik7IH0K
KworICAgIHZvaWQgc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKGJvb2wgYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKSB7IG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlID0gYXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOyB9CisgICAgdm9pZCBzZXRBcHBseVByb3BlcnR5VG9W
aXNpdGVkTGlua1N0eWxlKGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSkgeyBt
X2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBhcHBseVByb3BlcnR5VG9WaXNpdGVk
TGlua1N0eWxlOyB9CisgICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsgfQorICAgIGJvb2wgYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9w
ZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsgfQorCisgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwg
MzI+JiBtYXRjaGVkUnVsZXMoKSB7IHJldHVybiBtX21hdGNoZWRSdWxlczsgfQorICAgIGNvbnN0
IFJ1bGVEYXRhKiBtYXRjaGVkUnVsZUF0KGludCBpbmRleCkgeyByZXR1cm4gbV9tYXRjaGVkUnVs
ZXNbaW5kZXhdOyB9CisKKyAgICB2b2lkIHNldEVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyhi
b29sIGFmZmVjdGVkQnlDbGFzc1J1bGVzKSB7IG1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVz
ID0gYWZmZWN0ZWRCeUNsYXNzUnVsZXM7IH0KKyAgICBib29sIGVsZW1lbnRBZmZlY3RlZEJ5Q2xh
c3NSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzOyB9
CisgICAgCisgICAgdm9pZCBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoUmVuZGVyU3R5bGUqIHN0
eWxlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0eWxlKTsKKyAgICAgICAgbV9oYXNVQUFwcGVh
cmFuY2UgPSBzdHlsZS0+aGFzQXBwZWFyYW5jZSgpOworICAgICAgICBpZiAobV9oYXNVQUFwcGVh
cmFuY2UpIHsKKyAgICAgICAgICAgIG1fYm9yZGVyRGF0YSA9IHN0eWxlLT5ib3JkZXIoKTsKKyAg
ICAgICAgICAgIG1fYmFja2dyb3VuZERhdGEgPSAqc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKTsK
KyAgICAgICAgICAgIG1fYmFja2dyb3VuZENvbG9yID0gc3R5bGUtPmJhY2tncm91bmRDb2xvcigp
OworICAgICAgICB9CisgICAgfQorCisgICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXAmIHBlbmRp
bmdJbWFnZVByb3BlcnRpZXMoKSB7IHJldHVybiBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXM7IH0K
KworI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKKyAgICBQZW5kaW5nU1ZH
RG9jdW1lbnRNYXAmIHBlbmRpbmdTVkdEb2N1bWVudHMoKSB7IHJldHVybiBtX3BlbmRpbmdTVkdE
b2N1bWVudHM7IH0KKyNlbmRpZgorCisgICAgdm9pZCBzZXRMaW5lSGVpZ2h0VmFsdWUoQ1NTVmFs
dWUqIHZhbHVlKSB7IG1fbGluZUhlaWdodFZhbHVlID0gdmFsdWU7IH0KKyAgICBDU1NWYWx1ZSog
bGluZUhlaWdodFZhbHVlKCkgeyByZXR1cm4gbV9saW5lSGVpZ2h0VmFsdWU7IH0KKworICAgIGJv
b2wgaGFzUGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50Tm9kZTsgfQorCisgICAg
dm9pZCBzZXRGb250RGlydHkoYm9vbCBkaXJ0eSkgeyBtX2ZvbnREaXJ0eSA9IGRpcnR5OyB9Cisg
ICAgYm9vbCBmb250RGlydHkoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREaXJ0eTsgfQorCisgICAg
U3RhdGljQ1NTUnVsZUxpc3QqIGVuc3VyZVJ1bGVMaXN0KCkKKyAgICB7CisgICAgICAgIGlmICgh
bV9ydWxlTGlzdCkKKyAgICAgICAgICAgIG1fcnVsZUxpc3QgPSBTdGF0aWNDU1NSdWxlTGlzdDo6
Y3JlYXRlKCk7CisgICAgICAgIHJldHVybiBtX3J1bGVMaXN0LmdldCgpOworICAgIH0KKworICAg
IFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4mIHJ1bGVMaXN0KCkgeyByZXR1cm4gbV9ydWxlTGlz
dDsgfQorCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIHZvaWQgc2V0SGFzUGVuZGluZ1No
YWRlcnMoYm9vbCBoYXNQZW5kaW5nU2hhZGVycykgeyBtX2hhc1BlbmRpbmdTaGFkZXJzID0gaGFz
UGVuZGluZ1NoYWRlcnM7IH0KKyAgICBib29sIGhhc1BlbmRpbmdTaGFkZXJzKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNQZW5kaW5nU2hhZGVyczsgfQorI2VuZGlmCisKKy8vIFNWRyBoYW5kbGVzIHpv
b21pbmcgaW4gYSBkaWZmZXJlbnQgd2F5IGNvbXBhcmVkIHRvIENTUy4gVGhlIHdob2xlIGRvY3Vt
ZW50IGlzIHNjYWxlZCBpbnN0ZWFkCisvLyBvZiBlYWNoIGluZGl2aWR1YWwgbGVuZ3RoIHZhbHVl
IGluIHRoZSByZW5kZXIgc3R5bGUgLyB0cmVlLiBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxl
bmd0aCooKQorLy8gbXVsdGlwbGllcyBlYWNoIHJlc29sdmVkIGxlbmd0aCB3aXRoIHRoZSB6b29t
IG11bHRpcGxpZXIgLSBzbyBmb3IgU1ZHIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGF0LgorLy8gVGhv
dWdoIGFsbCBDU1MgdmFsdWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb3V0ZXJtb3N0IDxzdmc+
IGVsZW1lbnRzICh3aWR0aC9oZWlnaHQvYm9yZGVyL3BhZGRpbmcuLi4pCisvLyBuZWVkIHRvIHJl
c3BlY3QgdGhlIHNjYWxpbmcuIFJlbmRlckJveCAodGhlIHBhcmVudCBjbGFzcyBvZiBSZW5kZXJT
VkdSb290KSBncmFicyB2YWx1ZXMgbGlrZQorLy8gd2lkdGgvaGVpZ2h0L2JvcmRlci9wYWRkaW5n
Ly4uLiBmcm9tIHRoZSBSZW5kZXJTdHlsZSAtPiBmb3IgU1ZHIHRoZXNlIHZhbHVlcyB3b3VsZCBu
ZXZlciBzY2FsZSwKKy8vIGlmIHdlJ2QgcGFzcyBhIDEuMCB6b29tIGZhY3RvciBldmVyeWh3ZXJl
LiBTbyB3ZSBvbmx5IHBhc3MgYSB6b29tIGZhY3RvciBvZiAxLjAgZm9yIHNwZWNpZmljCisvLyBw
cm9wZXJ0aWVzIHRoYXQgYXJlIE5PVCBhbGxvd2VkIHRvIHNjYWxlIHdpdGhpbiBhIHpvb21lZCBT
VkcgZG9jdW1lbnQgKGxldHRlci93b3JkLXNwYWNpbmcvZm9udC1zaXplKS4KKyAgICBib29sIHVz
ZVNWR1pvb21SdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlz
U1ZHRWxlbWVudCgpOyB9CisKKyAgICBib29sIGhhc1VBQXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzVUFBcHBlYXJhbmNlOyB9CisgICAgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyRGF0
YSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyRGF0YTsgfQorICAgIGNvbnN0IEZpbGxMYXllciYg
YmFja2dyb3VuZERhdGEoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmREYXRhOyB9CisgICAg
Q29sb3IgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kQ29sb3I7
IH0KKworICAgIHZvaWQgc2V0SW5jbHVkZUVtcHR5UnVsZXMoYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cykgeyBtX2luY2x1ZGVFbXB0eVJ1bGVzID0gaW5jbHVkZUVtcHR5UnVsZXM7IH0KKyAgICB2b2lk
IHNldFNhbWVPcmlnaW5Pbmx5KGJvb2wgc2FtZU9yaWdpbk9ubHkpIHsgbV9zYW1lT3JpZ2luT25s
eSA9IHNhbWVPcmlnaW5Pbmx5OyB9CisgICAgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcygpIGNvbnN0
IHsgcmV0dXJuIG1faW5jbHVkZUVtcHR5UnVsZXM7IH0KKyAgICBib29sIHNhbWVPcmlnaW5Pbmx5
KCkgY29uc3QgeyByZXR1cm4gbV9zYW1lT3JpZ2luT25seTsgfQorCitwcml2YXRlOgorICAgIEVs
ZW1lbnQqIG1fZWxlbWVudDsKKyAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKKyAgICBTdHlsZWRF
bGVtZW50KiBtX3N0eWxlZEVsZW1lbnQ7CisKKyAgICBib29sIG1faW5jbHVkZUVtcHR5UnVsZXM7
IC8vIHNob3VsZCBiZSBtb3ZlZCB0byBNYXRjaFJlcXVlc3Q/CisgICAgYm9vbCBtX3NhbWVPcmln
aW5Pbmx5OyAvLyBzaG91bGQgYmUgbW92ZWQgdG8gTWF0Y2hSZXF1ZXN0PworICAgIFBzZXVkb0lk
IG1fcHNldWRvU3R5bGU7IC8vIHNob3VsZCBiZSBtb3ZlZCB0byBNYXRjaFJlcXVlc3Q/CisgICAg
U2VsZWN0b3JDaGVja2VyOjpNb2RlIG1fbW9kZTsKKworICAgIFJlbmRlclJlZ2lvbiogbV9yZWdp
b25Gb3JTdHlsaW5nOworICAgIEVJbnNpZGVMaW5rIG1fZWxlbWVudExpbmtTdGF0ZTsKKworICAg
IENvbnRhaW5lck5vZGUqIG1fcGFyZW50Tm9kZTsKKyAgICBSZW5kZXJTdHlsZSogbV9wYXJlbnRT
dHlsZTsKKyAgICBib29sIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50OyAvLyBvbmx5IHN0
eWxlRm9yRWxlbWVudCBuZWVkcy4KKyAgICBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxl
OyAvLyBhcHBseVByb3BlcnR5IG5lZWRzLgorCisgICAgYm9vbCBtX2NhblVzZUZhc3RSZWplY3Q7
IC8vIGNvbGxlY3RNYXRjaGVkUnVsZXNGb3JMaXN0IHVzZXMuCisgICAgYm9vbCBtX2VsZW1lbnRB
ZmZlY3RlZEJ5Q2xhc3NSdWxlczsgLy8gc2libGluZyBzdHlsZSBzaGFyaW5nIG5lZWRzLgorCisg
ICAgLy8gQSBidWZmZXIgdXNlZCB0byBob2xkIHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcyBmb3Ig
YW4gZWxlbWVudCwKKyAgICAvLyBhbmQgYSB0ZW1wb3JhcnkgYnVmZmVyIHVzZWQgZm9yIG1lcmdl
IHNvcnRpbmcuCisgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+IG1fbWF0Y2hlZFJ1bGVz
OworICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4gbV9ydWxlTGlzdDsKKworICAgIC8vIGFw
cGx5UHJvcGVydHkgbmVlZHMuCisgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZTsKKyAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsKKworICAgIC8v
IFBlbmRpbmdJbWFnZVByb3BlcnRpZXMgYXJlIHBlci1yZXNvbHZpbmcgbWVtYmVyLgorICAgIFBl
bmRpbmdJbWFnZVByb3BlcnR5TWFwIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllczsKKyNpZiBFTkFC
TEUoQ1NTX1NIQURFUlMpCisgICAgYm9vbCBtX2hhc1BlbmRpbmdTaGFkZXJzOworI2VuZGlmCisj
aWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQorICAgIFBlbmRpbmdTVkdEb2N1
bWVudE1hcCBtX3BlbmRpbmdTVkdEb2N1bWVudHM7CisjZW5kaWYKKyAgICBDU1NWYWx1ZSogbV9s
aW5lSGVpZ2h0VmFsdWU7IC8vIGNhY2hlOyB1cGRhdGVkIGluIGFwcGx5UHJvcGVydHkuCisgICAg
Ym9vbCBtX2ZvbnREaXJ0eTsKKworICAgIC8vIGJvcmRlci1hbmQtYmFja2dyb3VuZCBjYWNoZSwg
aXQgaXMgYmV0dGVyIHRvIG1vdmUgdG8gYW5vdGhlciBwbGFjZT8KKyAgICBib29sIG1faGFzVUFB
cHBlYXJhbmNlOworICAgIEJvcmRlckRhdGEgbV9ib3JkZXJEYXRhOworICAgIEZpbGxMYXllciBt
X2JhY2tncm91bmREYXRhOworICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVzb2x2ZVN0YXRlX2gKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDYxNDViYjFmMTYyNWI4
ZmU0ZDE2NzYwN2JiYmE4YmZkOWExYjAxMTkuLmMwN2VmYzg3ZGFiZmU0ZDFhOTZlNGRmZGVhYTM0
M2RmYzk0MWNiYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNl
bGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5j
cHAKQEAgLTQ5LDcgKzQ5LDcgQEAKICNkZWZpbmUgSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkg
XAogaWYgKGlzSW5oZXJpdCkgXAogeyBcCi0gICAgc3Znc3R5bGUtPnNldCMjUHJvcChtX3BhcmVu
dFN0eWxlLT5zdmdTdHlsZSgpLT5wcm9wKCkpOyBcCisgICAgc3Znc3R5bGUtPnNldCMjUHJvcChz
dGF0ZS5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpLT5wcm9wKCkpOyBcCiAgICAgcmV0dXJuOyBc
CiB9CiAKQEAgLTEwMiwxNyArMTAyLDE3IEBAIHN0YXRpYyBDb2xvciBjb2xvckZyb21TVkdDb2xv
ckNTU1ZhbHVlKFNWR0NvbG9yKiBzdmdDb2xvciwgY29uc3QgQ29sb3ImIGZnQ29sb3IpCiAgICAg
cmV0dXJuIGNvbG9yOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVNWR1Byb3BlcnR5KFJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBBU1NFUlQodmFsdWUpOwogICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSA9IDA7CiAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpCiAgICAgICAgIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWx1ZSk7CiAKLSAgICBTVkdSZW5kZXJTdHlsZSogc3Znc3R5bGUgPSBtX3N0eWxlLT5h
Y2Nlc3NTVkdTdHlsZSgpOworICAgIFNWR1JlbmRlclN0eWxlKiBzdmdzdHlsZSA9IHN0YXRlLnN0
eWxlKCktPmFjY2Vzc1NWR1N0eWxlKCk7CiAKLSAgICBib29sIGlzSW5oZXJpdCA9IG1fcGFyZW50
Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpOwotICAgIGJvb2wgaXNJbml0aWFsID0g
dmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgKCFtX3BhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5o
ZXJpdGVkVmFsdWUoKSk7CisgICAgYm9vbCBpc0luaGVyaXQgPSBzdGF0ZS5wYXJlbnROb2RlKCkg
JiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKKyAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVl
LT5pc0luaXRpYWxWYWx1ZSgpIHx8ICghc3RhdGUucGFyZW50Tm9kZSgpICYmIHZhbHVlLT5pc0lu
aGVyaXRlZFZhbHVlKCkpOwogCiAgICAgLy8gV2hhdCBmb2xsb3dzIGlzIGEgbGlzdCB0aGF0IG1h
cHMgdGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIKICAgICAvLyBjb3JyZXNwb25kaW5nIGZy
b250LWVuZCBSZW5kZXJTdHlsZSB2YWx1ZXMuIFNob3J0aGFuZHMoZS5nLiBib3JkZXIsCkBAIC0y
MjksMzQgKzIyOSwzNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
RmlsbDoKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAg
ICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQYXJlbnRTdHlsZSA9IG1fcGFyZW50U3R5
bGUtPnN2Z1N0eWxlKCk7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChz
dmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50
Q29sb3IoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAg
ICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBzdGF0ZS5w
YXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRG
aWxsUGFpbnQoc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUt
PmZpbGxQYWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRVcmkoKSwgc3RhdGUu
YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRGaWxsUGFpbnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRUeXBlKCksIFNWR1Jl
bmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRp
YWxGaWxsUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJv
cGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CisgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dEZpbGxQYWludChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludFR5cGUoKSwgU1ZHUmVu
ZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRDb2xvcigpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlh
bEZpbGxQYWludFVyaSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3Rh
dGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHUGFpbnQo
KSkgewogICAgICAgICAgICAgICAgIFNWR1BhaW50KiBzdmdQYWludCA9IHN0YXRpY19jYXN0PFNW
R1BhaW50Kj4odmFsdWUpOwotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQo
c3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50
LCBtX3N0eWxlLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAg
ICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29s
b3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSks
IHN2Z1BhaW50LT51cmkoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0
YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ry
b2tlOgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1BhcmVudFN0eWxlID0gbV9wYXJlbnRTdHls
ZS0+c3ZnU3R5bGUoKTsKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQo
c3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tl
UGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRVcmkoKSwgYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7
CisgICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1BhcmVudFN0eWxlID0g
c3RhdGUucGFyZW50U3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBzdmdzdHls
ZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50VHlwZSgpLCBzdmdQ
YXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFp
bnRVcmkoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0YXRlLmFwcGx5
UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAg
ICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9r
ZVBhaW50VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50Q29sb3IoKSwg
U1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAg
ICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRp
YWxTdHJva2VQYWludFR5cGUoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludENv
bG9yKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRVcmkoKSwgc3RhdGUuYXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR1BhaW50KCkpIHsKICAgICAgICAgICAgICAgICBTVkdQ
YWludCogc3ZnUGFpbnQgPSBzdGF0aWNfY2FzdDxTVkdQYWludCo+KHZhbHVlKTsKLSAgICAgICAg
ICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBj
b2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBtX3N0eWxlLT5jb2xvcigpKSwgc3Zn
UGFpbnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ry
b2tlUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVl
KHN2Z1BhaW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBzdGF0
ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlz
aXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CkBAIC0zNjMsNyArMzYzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1By
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlm
ICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMg
PSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5
bGUtPnNldE1hcmtlclN0YXJ0UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50
aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAg
ICAgc3Znc3R5bGUtPnNldE1hcmtlclN0YXJ0UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFn
bWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50KCkpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJrZXJN
aWQ6CkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0
eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBw
cmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUt
PnNldE1hcmtlck1pZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVy
RnJvbUlSSVN0cmluZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2
Z3N0eWxlLT5zZXRNYXJrZXJNaWRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRl
bnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmtlckVuZDoKQEAg
LTM5MSw3ICszOTEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2
ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFy
a2VyRW5kUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJ
U3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Znc3R5bGUt
PnNldE1hcmtlckVuZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVy
RnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlTGluZWNhcDoKQEAgLTQy
OCw3ICs0MjgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZh
bHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsdGVy
UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5n
KHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZp
bHRlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0
cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFzazoKQEAgLTQ0Miw3ICs0NDIsNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19VUkkpCiAgICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1
ZSgpOwogCi0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFza2VyUmVzb3VyY2UoU1ZHVVJJUmVm
ZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9j
dW1lbnQoKSkpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hc2tlclJlc291cmNlKFNWR1VS
SVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1
bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5Q2xpcFBhdGg6CkBAIC00NTYsNyArNDU2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICAgICAgICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAg
ICAgICAgICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAg
ICAgICAgc3Znc3R5bGUtPnNldENsaXBwZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdt
ZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVudCgpKSk7Cisg
ICAgICAgICAgICBzdmdzdHlsZS0+c2V0Q2xpcHBlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6
ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5VGV4
dEFuY2hvcjoKQEAgLTQ3NywxNCArNDc3LDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlT
VkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHN0b3BDb2xvciwgU3RvcENv
bG9yKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAgICAg
ICAgIHN2Z3N0eWxlLT5zZXRTdG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0
aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgbV9zdHlsZS0+Y29sb3IoKSkpOworICAgICAgICAg
ICAgICAgIHN2Z3N0eWxlLT5zZXRTdG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShz
dGF0aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGln
aHRpbmdDb2xvcjoKICAgICAgICAgewogICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUwobGlnaHRpbmdDb2xvciwgTGlnaHRpbmdDb2xvcik7CiAgICAgICAgICAgICBpZiAodmFs
dWUtPmlzU1ZHQ29sb3IoKSkKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TGlnaHRpbmdD
b2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFs
dWUpLCBtX3N0eWxlLT5jb2xvcigpKSk7CisgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldExp
Z2h0aW5nQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2FzdDxTVkdDb2xv
cio+KHZhbHVlKSwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZsb29kT3BhY2l0eToKQEAgLTUw
OSw3ICs1MDksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBIQU5E
TEVfSU5IRVJJVF9BTkRfSU5JVElBTChmbG9vZENvbG9yLCBGbG9vZENvbG9yKTsKICAgICAgICAg
ICAgIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRGbG9vZENvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29s
b3IqPih2YWx1ZSksIG1fc3R5bGUtPmNvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHls
ZS0+c2V0Rmxvb2RDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNW
R0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5R2x5cGhPcmllbnRhdGlv
bkhvcml6b250YWw6CkBAIC01NDksNyArNTQ5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U3ZnU2hhZG93OiB7CiAg
ICAgICAgICAgICBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgICAgIHJldHVybiBzdmdzdHls
ZS0+c2V0U2hhZG93KGFkb3B0UHRyKG1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRvdygp
ID8gbmV3IFNoYWRvd0RhdGEoKm1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRvdygpKSA6
IDApKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3Znc3R5bGUtPnNldFNoYWRvdyhhZG9wdFB0
cihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpLT5zaGFkb3coKSA/IG5ldyBTaGFkb3dE
YXRhKCpzdGF0ZS5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpLT5zaGFkb3coKSkgOiAwKSk7CiAg
ICAgICAgICAgICBpZiAoaXNJbml0aWFsIHx8IHByaW1pdGl2ZVZhbHVlKSAvLyBpbml0aWFsIHwg
bm9uZQogICAgICAgICAgICAgICAgIHJldHVybiBzdmdzdHlsZS0+c2V0U2hhZG93KG51bGxwdHIp
OwogCkBAIC01NjQsMTIgKzU2NCwxMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYg
KCFmaXJzdFZhbHVlLT5pc1NoYWRvd1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgU2hhZG93VmFsdWUqIGl0ZW0gPSBzdGF0aWNfY2FzdDxTaGFkb3dWYWx1ZSo+
KGZpcnN0VmFsdWUpOwotICAgICAgICAgICAgSW50UG9pbnQgbG9jYXRpb24oaXRlbS0+eC0+Y29t
cHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwg
bV9yb290RWxlbWVudFN0eWxlKSk7Ci0gICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIg
PyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0
eWxlKSA6IDA7CisgICAgICAgICAgICBJbnRQb2ludCBsb2NhdGlvbihpdGVtLT54LT5jb21wdXRl
TGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKSwKKyAg
ICAgICAgICAgICAgICBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwg
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0t
PmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSgpKSA6IDA7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKICAg
ICAgICAgICAgIGlmIChpdGVtLT5jb2xvcikKLSAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9y
RnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKKyAgICAgICAgICAgICAgICBj
b2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCBpdGVtLT5jb2xvci5nZXQoKSk7
CiAKICAgICAgICAgICAgIC8vIC13ZWJraXQtc3ZnLXNoYWRvdyBkb2VzIHNob3VsZCBub3QgaGF2
ZSBhIHNwcmVhZCBvciBzdHlsZQogICAgICAgICAgICAgQVNTRVJUKCFpdGVtLT5zcHJlYWQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCAxZjVlMGMwMjQ4MWM5ODI5
YmI2OWJhNjVmNTE4MzU5YTQ0ODdkZGViLi5mYmQzNzI5N2I2YTRlOWUzNWVmMjYxOGZlMTY2YzM4
NGQ0YjhkYzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtNjks
MTkgKzY5LDkwIEBAIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2VyKERvY3VtZW50KiBk
b2N1bWVudCkKIHsKIH0KIAotYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoZXMoY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50KiBlbGVtZW50LCBib29sIGlzRmFzdENoZWNrYWJs
ZVNlbGVjdG9yKSBjb25zdAorbmFtZXNwYWNlIHsKKworc3RhdGljIGlubGluZSBib29sIGlzRmFz
dENoZWNrYWJsZVJlbGF0aW9uKENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbikKIHsKLSAg
ICBpZiAoaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgJiYgIWVsZW1lbnQtPmlzU1ZHRWxlbWVudCgp
KSB7Ci0gICAgICAgIGlmICghZmFzdENoZWNrUmlnaHRtb3N0U2VsZWN0b3Ioc2VsZWN0b3IsIGVs
ZW1lbnQsIFZpc2l0ZWRNYXRjaERpc2FibGVkKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgcmV0dXJuIGZhc3RDaGVjayhzZWxlY3RvciwgZWxlbWVudCk7CisgICAgcmV0dXJu
IHJlbGF0aW9uID09IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50IHx8IHJlbGF0aW9uID09IENTU1Nl
bGVjdG9yOjpDaGlsZCB8fCByZWxhdGlvbiA9PSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3I7Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0Zhc3RDaGVja2FibGVNYXRjaChjb25zdCBDU1NTZWxl
Y3Rvciogc2VsZWN0b3IpCit7CisgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVj
dG9yOjpTZXQpIHsKKyAgICAgICAgLy8gU3R5bGUgYXR0cmlidXRlIGlzIGdlbmVyYXRlZCBsYXpp
bHkgYnV0IHRoZSBmYXN0IHBhdGggZG9lc24ndCB0cmlnZ2VyIGl0LgorICAgICAgICAvLyBEaXNh
bGxvdyB0aGVtIGhlcmUgcmF0aGVyIHRoYW4gbWFraW5nIHRoZSBmYXN0IHBhdGggbW9yZSBicmFu
Y2h5LgorICAgICAgICByZXR1cm4gc2VsZWN0b3ItPmF0dHJpYnV0ZSgpICE9IHN0eWxlQXR0cjsK
ICAgICB9CisgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpFeGFjdCkK
KyAgICAgICAgcmV0dXJuIHNlbGVjdG9yLT5hdHRyaWJ1dGUoKSAhPSBzdHlsZUF0dHIgJiYgSFRN
TERvY3VtZW50Ojppc0Nhc2VTZW5zaXRpdmVBdHRyaWJ1dGUoc2VsZWN0b3ItPmF0dHJpYnV0ZSgp
KTsKKyAgICByZXR1cm4gc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZyB8fCBz
ZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQgfHwgc2VsZWN0b3ItPm1fbWF0Y2gg
PT0gQ1NTU2VsZWN0b3I6OkNsYXNzOworfQogCi0gICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1Bz
ZXVkbyA9IE5PUFNFVURPOwotICAgIHJldHVybiBtYXRjaChTZWxlY3RvckNoZWNraW5nQ29udGV4
dChzZWxlY3RvciwgZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hEaXNhYmxl
ZCksIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSgpKSA9
PSBTZWxlY3Rvck1hdGNoZXM7CitzdGF0aWMgaW5saW5lIGJvb2wgaXNGYXN0Q2hlY2thYmxlUmln
aHRtb3N0U2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIGlmICgh
aXNGYXN0Q2hlY2thYmxlUmVsYXRpb24oc2VsZWN0b3ItPnJlbGF0aW9uKCkpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGlzRmFzdENoZWNrYWJsZU1hdGNoKHNlbGVjdG9yKSB8
fCBTZWxlY3RvckNoZWNrZXI6OmlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3RvcihzZWxlY3Rvcik7
CiB9CiAKLW5hbWVzcGFjZSB7CitpbmxpbmUgYm9vbCBjaGVja1RhZ1ZhbHVlKGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICByZXR1cm4g
U2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKGVsZW1lbnQsIHNlbGVjdG9yLT50YWdRTmFtZSgp
KTsKK30KKworaW5saW5lIGJvb2wgY2hlY2tDbGFzc1ZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+
aGFzQ2xhc3MoKSAmJiBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCkt
PmNsYXNzTmFtZXMoKS5jb250YWlucyhzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCkpOworfQorCitp
bmxpbmUgYm9vbCBjaGVja0lEVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIHJldHVybiBlbGVtZW50LT5oYXNJRCgpICYmIGVs
ZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpID09IHNlbGVjdG9yLT52YWx1ZSgp
LmltcGwoKTsKK30KKworaW5saW5lIGJvb2wgY2hlY2tFeGFjdEF0dHJpYnV0ZVZhbHVlKGNvbnN0
IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICBy
ZXR1cm4gU2VsZWN0b3JDaGVja2VyOjpjaGVja0V4YWN0QXR0cmlidXRlKGVsZW1lbnQsIHNlbGVj
dG9yLT5hdHRyaWJ1dGUoKSwgc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpKTsKK30KKworaW5saW5l
IGJvb2wgY29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvck1hdGNoZXMoY29uc3QgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0
ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZSkKK3sKKyAgICBBU1NFUlQoU2VsZWN0b3JDaGVj
a2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IpKTsKKyAgICBzd2l0Y2gg
KHNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkpIHsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9M
aW5rOgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FueUxpbms6CisgICAgICAgIHJldHVy
biBlbGVtZW50LT5pc0xpbmsoKTsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVk
OgorICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNMaW5rKCkgJiYgdmlzaXRlZE1hdGNoVHlwZSA9
PSBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQ7CisgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvRm9jdXM6CisgICAgICAgIHJldHVybiBtYXRjaGVzRm9jdXNQc2V1ZG9DbGFz
cyhlbGVtZW50KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIGZhc3RDaGVja1JpZ2h0
bW9zdFNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgY29uc3QgRWxlbWVudCog
ZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5
cGUpCit7CisgICAgQVNTRVJUKFNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0
b3Ioc2VsZWN0b3IpKTsKKworICAgIHN3aXRjaCAoc2VsZWN0b3ItPm1fbWF0Y2gpIHsKKyAgICBj
YXNlIENTU1NlbGVjdG9yOjpUYWc6CisgICAgICAgIHJldHVybiBjaGVja1RhZ1ZhbHVlKGVsZW1l
bnQsIHNlbGVjdG9yKTsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpDbGFzczoKKyAgICAgICAgcmV0
dXJuIGNoZWNrQ2xhc3NWYWx1ZShlbGVtZW50LCBzZWxlY3Rvcik7CisgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6SWQ6CisgICAgICAgIHJldHVybiBjaGVja0lEVmFsdWUoZWxlbWVudCwgc2VsZWN0b3Ip
OworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkV4YWN0OgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNl
dDoKKyAgICAgICAgcmV0dXJuIGNoZWNrRXhhY3RBdHRyaWJ1dGVWYWx1ZShlbGVtZW50LCBzZWxl
Y3Rvcik7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3M6CisgICAgICAgIHJldHVy
biBjb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yTWF0Y2hlcyhlbGVtZW50LCBzZWxlY3Rvciwgdmlz
aXRlZE1hdGNoVHlwZSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KIAogdGVtcGxhdGUgPGJvb2wgY2hlY2tW
YWx1ZShjb25zdCBFbGVtZW50KiwgY29uc3QgQ1NTU2VsZWN0b3IqKT4KIGlubGluZSBib29sIGZh
c3RDaGVja1NpbmdsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiYgc2VsZWN0b3IsIGNvbnN0
IEVsZW1lbnQqJiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3RvciomIHRvcENoaWxkT3JTdWJzZWxl
Y3RvciwgY29uc3QgRWxlbWVudComIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkK
QEAgLTExNyw1MSArMTg4LDM0IEBAIGlubGluZSBib29sIGZhc3RDaGVja1NpbmdsZVNlbGVjdG9y
KGNvbnN0IENTU1NlbGVjdG9yKiYgc2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1pbmxpbmUgYm9vbCBjaGVja0NsYXNzVmFsdWUoY29uc3QgRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIHJldHVybiBlbGVt
ZW50LT5oYXNDbGFzcygpICYmIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlZEVsZW1lbnQqPihlbGVt
ZW50KS0+Y2xhc3NOYW1lcygpLmNvbnRhaW5zKHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7CiB9
CiAKLWlubGluZSBib29sIGNoZWNrSURWYWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25z
dCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAgcmV0dXJuIGVsZW1lbnQtPmhhc0lEKCkg
JiYgZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkgPT0gc2VsZWN0b3ItPnZh
bHVlKCkuaW1wbCgpOwotfQotCi1pbmxpbmUgYm9vbCBjaGVja0V4YWN0QXR0cmlidXRlVmFsdWUo
Y29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewot
ICAgIHJldHVybiBTZWxlY3RvckNoZWNrZXI6OmNoZWNrRXhhY3RBdHRyaWJ1dGUoZWxlbWVudCwg
c2VsZWN0b3ItPmF0dHJpYnV0ZSgpLCBzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCkpOwotfQotCi1p
bmxpbmUgYm9vbCBjaGVja1RhZ1ZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvcikKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2Fi
bGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCiB7Ci0gICAgcmV0dXJuIFNl
bGVjdG9yQ2hlY2tlcjo6dGFnTWF0Y2hlcyhlbGVtZW50LCBzZWxlY3Rvci0+dGFnUU5hbWUoKSk7
Ci19Ci0KKyAgICBpZiAoIWlzRmFzdENoZWNrYWJsZVJpZ2h0bW9zdFNlbGVjdG9yKHNlbGVjdG9y
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoc2VsZWN0b3IgPSBzZWxlY3Rvci0+
dGFnSGlzdG9yeSgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgp
KSB7CisgICAgICAgIGlmICghaXNGYXN0Q2hlY2thYmxlUmVsYXRpb24oc2VsZWN0b3ItPnJlbGF0
aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWlzRmFzdENo
ZWNrYWJsZU1hdGNoKHNlbGVjdG9yKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6ZmFz
dENoZWNrUmlnaHRtb3N0U2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBjb25z
dCBFbGVtZW50KiBlbGVtZW50LCBWaXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGUpIGNv
bnN0Citib29sIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hlcyhjb25zdCBDU1NTZWxlY3Rvciogc2Vs
ZWN0b3IsIEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IpIGNv
bnN0CiB7Ci0gICAgQVNTRVJUKGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKHNlbGVjdG9yKSk7Ci0K
LSAgICBzd2l0Y2ggKHNlbGVjdG9yLT5tX21hdGNoKSB7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6
VGFnOgotICAgICAgICByZXR1cm4gY2hlY2tUYWdWYWx1ZShlbGVtZW50LCBzZWxlY3Rvcik7Ci0g
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2xhc3M6Ci0gICAgICAgIHJldHVybiBjaGVja0NsYXNzVmFs
dWUoZWxlbWVudCwgc2VsZWN0b3IpOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OklkOgotICAgICAg
ICByZXR1cm4gY2hlY2tJRFZhbHVlKGVsZW1lbnQsIHNlbGVjdG9yKTsKLSAgICBjYXNlIENTU1Nl
bGVjdG9yOjpFeGFjdDoKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpTZXQ6Ci0gICAgICAgIHJldHVy
biBjaGVja0V4YWN0QXR0cmlidXRlVmFsdWUoZWxlbWVudCwgc2VsZWN0b3IpOwotICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzOgotICAgICAgICByZXR1cm4gY29tbW9uUHNldWRvQ2xh
c3NTZWxlY3Rvck1hdGNoZXMoZWxlbWVudCwgc2VsZWN0b3IsIHZpc2l0ZWRNYXRjaFR5cGUpOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIGlmIChpc0Zh
c3RDaGVja2FibGVTZWxlY3RvciAmJiAhZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpIHsKKyAgICAg
ICAgaWYgKCFmYXN0Q2hlY2tSaWdodG1vc3RTZWxlY3RvcihzZWxlY3RvciwgZWxlbWVudCwgVmlz
aXRlZE1hdGNoRGlzYWJsZWQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm4gZmFzdENoZWNrKHNlbGVjdG9yLCBlbGVtZW50KTsKICAgICB9Ci0gICAgcmV0dXJuIGZh
bHNlOworCisgICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAg
IHJldHVybiBtYXRjaChTZWxlY3RvckNoZWNraW5nQ29udGV4dChzZWxlY3RvciwgZWxlbWVudCwg
U2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hEaXNhYmxlZCksIGlnbm9yZUR5bmFtaWNQc2V1
ZG8sIERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSgpKSA9PSBTZWxlY3Rvck1hdGNoZXM7CiB9
CiAKLWJvb2wgU2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hlY2soY29uc3QgQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAorYm9vbCBTZWxlY3RvckNoZWNr
ZXI6OmZhc3RDaGVjayhjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQq
IGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKGZhc3RDaGVja1JpZ2h0bW9zdFNlbGVjdG9yKHNlbGVj
dG9yLCBlbGVtZW50LCBWaXNpdGVkTWF0Y2hFbmFibGVkKSk7CiAKQEAgLTIwMiw0MyArMjU2LDYg
QEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVjayhjb25zdCBDU1NTZWxlY3Rvciogc2Vs
ZWN0b3IsIGNvbnN0IEVsZW1lbnQqIGVsZW0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGlj
IGlubGluZSBib29sIGlzRmFzdENoZWNrYWJsZVJlbGF0aW9uKENTU1NlbGVjdG9yOjpSZWxhdGlv
biByZWxhdGlvbikKLXsKLSAgICByZXR1cm4gcmVsYXRpb24gPT0gQ1NTU2VsZWN0b3I6OkRlc2Nl
bmRhbnQgfHwgcmVsYXRpb24gPT0gQ1NTU2VsZWN0b3I6OkNoaWxkIHx8IHJlbGF0aW9uID09IENT
U1NlbGVjdG9yOjpTdWJTZWxlY3RvcjsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzRmFzdENo
ZWNrYWJsZU1hdGNoKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKLXsKLSAgICBpZiAoc2Vs
ZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlNldCkgewotICAgICAgICAvLyBTdHlsZSBh
dHRyaWJ1dGUgaXMgZ2VuZXJhdGVkIGxhemlseSBidXQgdGhlIGZhc3QgcGF0aCBkb2Vzbid0IHRy
aWdnZXIgaXQuCi0gICAgICAgIC8vIERpc2FsbG93IHRoZW0gaGVyZSByYXRoZXIgdGhhbiBtYWtp
bmcgdGhlIGZhc3QgcGF0aCBtb3JlIGJyYW5jaHkuCi0gICAgICAgIHJldHVybiBzZWxlY3Rvci0+
YXR0cmlidXRlKCkgIT0gc3R5bGVBdHRyOwotICAgIH0KLSAgICBpZiAoc2VsZWN0b3ItPm1fbWF0
Y2ggPT0gQ1NTU2VsZWN0b3I6OkV4YWN0KQotICAgICAgICByZXR1cm4gc2VsZWN0b3ItPmF0dHJp
YnV0ZSgpICE9IHN0eWxlQXR0ciAmJiBIVE1MRG9jdW1lbnQ6OmlzQ2FzZVNlbnNpdGl2ZUF0dHJp
YnV0ZShzZWxlY3Rvci0+YXR0cmlidXRlKCkpOwotICAgIHJldHVybiBzZWxlY3Rvci0+bV9tYXRj
aCA9PSBDU1NTZWxlY3Rvcjo6VGFnIHx8IHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9y
OjpJZCB8fCBzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3M7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgYm9vbCBpc0Zhc3RDaGVja2FibGVSaWdodG1vc3RTZWxlY3Rvcihjb25zdCBD
U1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAgaWYgKCFpc0Zhc3RDaGVja2FibGVSZWxhdGlv
bihzZWxlY3Rvci0+cmVsYXRpb24oKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gaXNGYXN0Q2hlY2thYmxlTWF0Y2goc2VsZWN0b3IpIHx8IFNlbGVjdG9yQ2hlY2tlcjo6aXND
b21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKHNlbGVjdG9yKTsKLX0KLQotYm9vbCBTZWxlY3RvckNo
ZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3Rv
cikKLXsKLSAgICBpZiAoIWlzRmFzdENoZWNrYWJsZVJpZ2h0bW9zdFNlbGVjdG9yKHNlbGVjdG9y
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAoc2VsZWN0b3IgPSBzZWxlY3Rvci0+
dGFnSGlzdG9yeSgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgp
KSB7Ci0gICAgICAgIGlmICghaXNGYXN0Q2hlY2thYmxlUmVsYXRpb24oc2VsZWN0b3ItPnJlbGF0
aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWlzRmFzdENo
ZWNrYWJsZU1hdGNoKHNlbGVjdG9yKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIC8vIFJlY3Vyc2l2ZSBjaGVjayBvZiBzZWxlY3RvcnMg
YW5kIGNvbWJpbmF0b3JzCiAvLyBJdCBjYW4gcmV0dXJuIDQgZGlmZmVyZW50IHZhbHVlczoKIC8v
ICogU2VsZWN0b3JNYXRjaGVzICAgICAgICAgIC0gdGhlIHNlbGVjdG9yIG1hdGNoZXMgdGhlIGVs
ZW1lbnQgZQpAQCAtOTkzLDIzICsxMDEwLDYgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNr
U2Nyb2xsYmFyUHNldWRvQ2xhc3MoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBDU1NTZWwKICAg
ICB9CiB9CiAKLWJvb2wgU2VsZWN0b3JDaGVja2VyOjpjb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9y
TWF0Y2hlcyhjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0
b3IsIFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZSkgY29uc3QKLXsKLSAgICBBU1NF
UlQoaXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKHNlbGVjdG9yKSk7Ci0gICAgc3dpdGNoIChz
ZWxlY3Rvci0+cHNldWRvVHlwZSgpKSB7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGlu
azoKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BbnlMaW5rOgotICAgICAgICByZXR1cm4g
ZWxlbWVudC0+aXNMaW5rKCk7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZDoK
LSAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmlzTGluaygpICYmIHZpc2l0ZWRNYXRjaFR5cGUgPT0g
VmlzaXRlZE1hdGNoRW5hYmxlZDsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Gb2N1czoK
LSAgICAgICAgcmV0dXJuIG1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKGVsZW1lbnQpOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQogdW5zaWduZWQgU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rTWF0Y2hU
eXBlKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIHsKICAgICB1bnNpZ25lZCBsaW5rTWF0
Y2hUeXBlID0gTWF0Y2hBbGw7CkBAIC0xMDU1LDExICsxMDU1LDYgQEAgdW5zaWduZWQgU2VsZWN0
b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rTWF0Y2hUeXBlKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxl
Y3RvcikKICAgICByZXR1cm4gbGlua01hdGNoVHlwZTsKIH0KIAotYm9vbCBTZWxlY3RvckNoZWNr
ZXI6OmlzRnJhbWVGb2N1c2VkKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgcmV0dXJu
IGVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCkgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJh
bWUoKS0+c2VsZWN0aW9uKCktPmlzRm9jdXNlZEFuZEFjdGl2ZSgpOwotfQotCiB0ZW1wbGF0ZQog
U2VsZWN0b3JDaGVja2VyOjpNYXRjaCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoKGNvbnN0IFNlbGVj
dG9yQ2hlY2tpbmdDb250ZXh0JiwgUHNldWRvSWQmLCBjb25zdCBET01TaWJsaW5nVHJhdmVyc2Fs
U3RyYXRlZ3kmKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVj
dG9yQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCmluZGV4
IDM5MzliYzM1NGU0YTNjZDcyMzQ3N2YzOGVmNjJhZmRjNGQ2ZmVlZmIuLjZkNjI5NTNhODgyZmM2
YjZmMmQ2NDk1Y2JhNzU0ZGJjMDA4YmIxNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TZWxlY3RvckNoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVj
a2VyLmgKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogICAgIGJvb2wgY2hlY2tPbmUoY29uc3Qg
U2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBjb25zdCBTaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3km
KSBjb25zdDsKIAogICAgIHN0YXRpYyBib29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNvbnN0
IENTU1NlbGVjdG9yKik7Ci0gICAgYm9vbCBmYXN0Q2hlY2soY29uc3QgQ1NTU2VsZWN0b3IqLCBj
b25zdCBFbGVtZW50KikgY29uc3Q7CisgICAgc3RhdGljIGJvb2wgZmFzdENoZWNrKGNvbnN0IENT
U1NlbGVjdG9yKiwgY29uc3QgRWxlbWVudCopOwogCiAgICAgYm9vbCBzdHJpY3RQYXJzaW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJpY3RQYXJzaW5nOyB9CiAKQEAgLTkxLDcgKzkxLDYgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIGJvb2wgdGFnTWF0Y2hlcyhjb25zdCBFbGVtZW50KiwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYpOwogICAgIHN0YXRpYyBib29sIGlzQ29tbW9uUHNldWRvQ2xhc3NTZWxl
Y3Rvcihjb25zdCBDU1NTZWxlY3RvciopOwotICAgIGJvb2wgbWF0Y2hlc0ZvY3VzUHNldWRvQ2xh
c3MoY29uc3QgRWxlbWVudCopIGNvbnN0OwogICAgIHN0YXRpYyBib29sIGZhc3RDaGVja1JpZ2h0
bW9zdEF0dHJpYnV0ZVNlbGVjdG9yKGNvbnN0IEVsZW1lbnQqLCBjb25zdCBDU1NTZWxlY3Rvciop
OwogICAgIHN0YXRpYyBib29sIGNoZWNrRXhhY3RBdHRyaWJ1dGUoY29uc3QgRWxlbWVudCosIGNv
bnN0IFF1YWxpZmllZE5hbWUmIHNlbGVjdG9yQXR0cmlidXRlTmFtZSwgY29uc3QgQXRvbWljU3Ry
aW5nSW1wbCogdmFsdWUpOwogCkBAIC0xMDAsMTAgKzk5LDYgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIGJvb2wgY2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhEb2N1bWVudCosIGNvbnN0IENT
U1NlbGVjdG9yKikgY29uc3Q7Ci0gICAgc3RhdGljIGJvb2wgaXNGcmFtZUZvY3VzZWQoY29uc3Qg
RWxlbWVudCopOwotCi0gICAgYm9vbCBmYXN0Q2hlY2tSaWdodG1vc3RTZWxlY3Rvcihjb25zdCBD
U1NTZWxlY3RvciosIGNvbnN0IEVsZW1lbnQqLCBWaXNpdGVkTWF0Y2hUeXBlKSBjb25zdDsKLSAg
ICBib29sIGNvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3JNYXRjaGVzKGNvbnN0IEVsZW1lbnQqLCBj
b25zdCBDU1NTZWxlY3RvciosIFZpc2l0ZWRNYXRjaFR5cGUpIGNvbnN0OwogCiAgICAgYm9vbCBt
X3N0cmljdFBhcnNpbmc7CiAgICAgYm9vbCBtX2RvY3VtZW50SXNIVE1MOwpAQCAtMTIxLDcgKzEx
NiwxMiBAQCBpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmlzQ29tbW9uUHNldWRvQ2xhc3NT
ZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZQogICAgICAgICB8fCBwc2V1ZG9UeXBlID09
IENTU1NlbGVjdG9yOjpQc2V1ZG9Gb2N1czsKIH0KIAotaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVj
a2VyOjptYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhjb25zdCBFbGVtZW50KiBlbGVtZW50KSBjb25z
dAoraW5saW5lIGJvb2wgaXNGcmFtZUZvY3VzZWQoY29uc3QgRWxlbWVudCogZWxlbWVudCkKK3sK
KyAgICByZXR1cm4gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiBlbGVtZW50LT5kb2N1
bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+aXNGb2N1c2VkQW5kQWN0aXZlKCk7Cit9CisK
K2lubGluZSBib29sIG1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKGNvbnN0IEVsZW1lbnQqIGVsZW1l
bnQpCiB7CiAgICAgaWYgKEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0
ZShjb25zdF9jYXN0PEVsZW1lbnQqPihlbGVtZW50KSwgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZvY3Vz
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCmlu
ZGV4IDZkNzhjNjg0NDQyY2M3ZTI0ZWJmOWE2Mjg2N2JkODg5OWZlNzk4ZTYuLjdmZjhhMzU2NDll
M2FjMzhjOTIwNDU0YTc3ZmZkZWFiYTg2YTc4Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxk
ZXIuY3BwCkBAIC02MSw3ICs2MSw3IEBAIGNsYXNzIEFwcGx5UHJvcGVydHlFeHBhbmRpbmcgewog
cHVibGljOgogCiAgICAgdGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQ+Ci0gICAgc3RhdGljIGlu
bGluZSB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlJ
bmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRl
KQogICAgIHsKICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5SW52YWxpZCkKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTY5LDIwICs2OSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFN0
eWxlQnVpbGRlciYgdGFibGUgPSBTdHlsZUJ1aWxkZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpOwog
ICAgICAgICBjb25zdCBQcm9wZXJ0eUhhbmRsZXImIGhhbmRsZXIgPSB0YWJsZS5wcm9wZXJ0eUhh
bmRsZXIoaWQpOwogICAgICAgICBpZiAoaGFuZGxlci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBo
YW5kbGVyLmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAg
ICAgICAgICAgaGFuZGxlci5hcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAg
ICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRl
JiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPG9uZT4ocHJvcGVydHlJ
RCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPHR3bz4ocHJvcGVy
dHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPHRocmVlPihw
cm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8Zm91
cj4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5oZXJpdFZhbHVl
PGZpdmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBhcHBseUluaGVyaXRW
YWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8
dHdvPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPHRocmVl
Pihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPGZvdXI+KHBy
b3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8Zml2ZT4ocHJvcGVy
dHlJRCwgc3RhdGUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDxDU1NQcm9wZXJ0eUlEIGlkPgot
ICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIGlubGlu
ZSB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgUmVzb2x2
ZVN0YXRlJiBzdGF0ZSkKICAgICB7CiAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUludmFs
aWQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC05MCwyMCArOTAsMjAgQEAgcHVibGljOgogICAg
ICAgICBjb25zdCBTdHlsZUJ1aWxkZXImIHRhYmxlID0gU3R5bGVCdWlsZGVyOjpzaGFyZWRTdHls
ZUJ1aWxkZXIoKTsKICAgICAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0gdGFi
bGUucHJvcGVydHlIYW5kbGVyKGlkKTsKICAgICAgICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgpKQot
ICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJl
c29sdmVyKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJ
RCwgc3RhdGUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQs
IFJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTxv
bmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaXRpYWxWYWx1
ZTx0d28+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaXRpYWxW
YWx1ZTx0aHJlZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5p
dGlhbFZhbHVlPGZvdXI+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBs
eUluaXRpYWxWYWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAg
YXBwbHlJbml0aWFsVmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5
SW5pdGlhbFZhbHVlPHR3bz4ocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBhcHBseUluaXRp
YWxWYWx1ZTx0aHJlZT4ocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBhcHBseUluaXRpYWxW
YWx1ZTxmb3VyPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5pdGlhbFZhbHVl
PGZpdmU+KHByb3BlcnR5SUQsIHN0YXRlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8Q1NTUHJv
cGVydHlJRCBpZD4KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUludmFsaWQpCiAgICAgICAgICAgICByZXR1cm47
CkBAIC0xMTEsMTkgKzExMSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFN0eWxlQnVpbGRl
ciYgdGFibGUgPSBTdHlsZUJ1aWxkZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpOwogICAgICAgICBj
b25zdCBQcm9wZXJ0eUhhbmRsZXImIGhhbmRsZXIgPSB0YWJsZS5wcm9wZXJ0eUhhbmRsZXIoaWQp
OwogICAgICAgICBpZiAoaGFuZGxlci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBoYW5kbGVyLmFw
cGx5VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgICAgICAgICAg
aGFuZGxlci5hcHBseVZhbHVlKHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1ZSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0
ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCFleHBhbmRWYWx1ZSkKICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBhcHBseVZhbHVlPG9uZT4ocHJvcGVydHlJRCwg
c3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBhcHBseVZhbHVlPHR3bz4ocHJvcGVydHlJ
RCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBhcHBseVZhbHVlPHRocmVlPihwcm9w
ZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7Ci0gICAgICAgIGFwcGx5VmFsdWU8Zm91cj4o
cHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBhcHBseVZhbHVlPGZp
dmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICAgICAgYXBwbHlWYWx1
ZTxvbmU+KHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGFwcGx5VmFsdWU8dHdv
Pihwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBhcHBseVZhbHVlPHRocmVlPihw
cm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBhcHBseVZhbHVlPGZvdXI+KHByb3Bl
cnR5SUQsIHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGFwcGx5VmFsdWU8Zml2ZT4ocHJvcGVydHlJ
RCwgc3RhdGUsIHZhbHVlKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVh
dGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwg
JmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KIH07CkBAIC0xMzQsOSArMTM0LDkg
QEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwg
U2V0dGVyVHlwZSB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9CiAg
ICAgc3RhdGljIEdldHRlclR5cGUgdmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiAo
c3R5bGUtPipnZXR0ZXJGdW5jdGlvbikoKTsgfQogICAgIHN0YXRpYyBJbml0aWFsVHlwZSBpbml0
aWFsKCkgeyByZXR1cm4gKCppbml0aWFsRnVuY3Rpb24pKCk7IH0KLSAgICBzdGF0aWMgdm9pZCBh
cHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyKSB7IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHZhbHVlKHN0eWxlUmVzb2x2
ZXItPnBhcmVudFN0eWxlKCkpKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIHsgc2V0VmFsdWUo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgaW5pdGlhbCgpKTsgfQotICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciosIENTU1ZhbHVlKikgeyB9Cisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0
YXRlJiBzdGF0ZSkgeyBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCB2YWx1ZShzdGF0ZS5wYXJlbnRT
dHlsZSgpKSk7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0
eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlKSB7IHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIGluaXRp
YWwoKSk7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29s
dmVTdGF0ZSYsIENTU1ZhbHVlKikgeyB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVh
dGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwg
JmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KIH07CiAKQEAgLTE0NCwxMCArMTQ0
LDEwIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBHZXR0ZXJUeXBlLCBHZXR0ZXJUeXBlIChSZW5kZXJT
dHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0CiBjbGFzcyBBcHBseVByb3BlcnR5RGVmYXVs
dCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxl
LCBTZXR0ZXJUeXBlIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0K
LSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZh
bHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAg
ICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgKnN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWUpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCks
ICpzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKSk7CiAgICAgfQogICAgIHN0
YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtMTYwLDE2ICsx
NjAsMTYgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIE51bWJlclR5cGUsIE51bWJlclR5cGUgKFJlbmRl
clN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QKIGNsYXNzIEFwcGx5UHJvcGVydHlOdW1i
ZXIgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHls
ZSwgTnVtYmVyVHlwZSB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBpZE1hcHNUb01pbnVzT25lKQotICAgICAgICAg
ICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgLTEpOworICAgICAgICAgICAgc2V0
VmFsdWUoc3RhdGUuc3R5bGUoKSwgLTEpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWU8TnVt
YmVyVHlwZT4oQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgICAgIHNl
dFZhbHVlKHN0YXRlLnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZTxOdW1iZXJUeXBl
PihDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogICAgIH0KICAgICBzdGF0aWMgUHJv
cGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTE4MSw3ICsxODEsNyBAQCBw
dWJsaWM6CiB0ZW1wbGF0ZSA8U3R5bGVJbWFnZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rp
b24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFBhc3NSZWZQ
dHI8U3R5bGVJbWFnZT4pLCBTdHlsZUltYWdlKiAoKmluaXRpYWxGdW5jdGlvbikoKSwgQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eT4KIGNsYXNzIEFwcGx5UHJvcGVydHlTdHlsZUltYWdlIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+KnNldHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKHByb3BlcnR5
LCB2YWx1ZSkpOyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBS
ZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpIHsgKHN0YXRlLnN0eWxlKCktPipz
ZXR0ZXJGdW5jdGlvbikoU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShzdGF0ZSwgcHJvcGVydHks
IHZhbHVlKSk7IH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQog
ICAgIHsKICAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVm
YXVsdEJhc2U8U3R5bGVJbWFnZSosIGdldHRlckZ1bmN0aW9uLCBQYXNzUmVmUHRyPFN0eWxlSW1h
Z2U+LCBzZXR0ZXJGdW5jdGlvbiwgU3R5bGVJbWFnZSosIGluaXRpYWxGdW5jdGlvbj46OmNyZWF0
ZUhhbmRsZXIoKTsKQEAgLTE5OCwyOCArMTk4LDI4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9v
bCBoYXNBdXRvKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gKHN0eWxlLT4qaGFzQXV0b0Z1
bmN0aW9uKSgpOyB9CiAgICAgc3RhdGljIHZvaWQgc2V0QXV0byhSZW5kZXJTdHlsZSogc3R5bGUp
IHsgKHN0eWxlLT4qc2V0QXV0b0Z1bmN0aW9uKSgpOyB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29s
dmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBpZiAoaGFzQXV0byhzdHlsZVJlc29sdmVy
LT5wYXJlbnRTdHlsZSgpKSkKLSAgICAgICAgICAgIHNldEF1dG8oc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSk7CisgICAgICAgIGlmIChoYXNBdXRvKHN0YXRlLnBhcmVudFN0eWxlKCkpKQorICAgICAg
ICAgICAgc2V0QXV0byhzdGF0ZS5zdHlsZSgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
c2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgdmFsdWUoc3R5bGVSZXNvbHZlci0+cGFy
ZW50U3R5bGUoKSkpOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgdmFsdWUo
c3RhdGUucGFyZW50U3R5bGUoKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5p
dGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIHsg
c2V0QXV0byhzdHlsZVJlc29sdmVyLT5zdHlsZSgpKTsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUpIHsgc2V0QXV0
byhzdGF0ZS5zdHlsZSgpKTsgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0
YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2
YWx1ZSk7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBhdXRvSWRl
bnRpdHkpCi0gICAgICAgICAgICBzZXRBdXRvKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpOworICAg
ICAgICAgICAgc2V0QXV0byhzdGF0ZS5zdHlsZSgpKTsKICAgICAgICAgZWxzZSBpZiAodmFsdWVU
eXBlID09IE51bWJlcikKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCksICpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgp
LCAqcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICBlbHNlIGlmICh2YWx1ZVR5cGUgPT0gQ29tcHV0
ZUxlbmd0aCkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHBy
aW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0
eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBw
cmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290
RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpOwogICAgIH0K
IAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFBy
b3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFw
cGx5VmFsdWUpOyB9CkBAIC0yMjcsMjcgKzIyNywyNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5
UHJvcGVydHlDbGlwIHsKIHByaXZhdGU6Ci0gICAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9MZW5n
dGgoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVl
KQorICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKFJlc29sdmVTdGF0ZSYgc3RhdGUs
IENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS0+
Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lv
biB8IEZyYWN0aW9uQ29udmVyc2lvbiB8IEF1dG9Db252ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgIHJldHVybiB2YWx1ZS0+Y29udmVy
dFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IEZy
YWN0aW9uQ29udmVyc2lvbiB8IEF1dG9Db252ZXJzaW9uPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5y
b290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAg
fQogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMg
dm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFJlc29sdmVT
dGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBz
dHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpOworICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpOwogICAgICAgICBpZiAoIXBhcmVudFN0eWxlLT5o
YXNDbGlwKCkpCi0gICAgICAgICAgICByZXR1cm4gYXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJ
RCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENs
aXAocGFyZW50U3R5bGUtPmNsaXBUb3AoKSwgcGFyZW50U3R5bGUtPmNsaXBSaWdodCgpLCBwYXJl
bnRTdHlsZS0+Y2xpcEJvdHRvbSgpLCBwYXJlbnRTdHlsZS0+Y2xpcExlZnQoKSk7Ci0gICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0NsaXAodHJ1ZSk7CisgICAgICAgICAgICBy
ZXR1cm4gYXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRDbGlwKHBhcmVudFN0eWxlLT5jbGlwVG9wKCksIHBhcmVudFN0eWxlLT5j
bGlwUmlnaHQoKSwgcGFyZW50U3R5bGUtPmNsaXBCb3R0b20oKSwgcGFyZW50U3R5bGUtPmNsaXBM
ZWZ0KCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXNDbGlwKHRydWUpOwogICAgIH0K
IAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFs
dWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENsaXAoTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgo
KSwgTGVuZ3RoKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlw
KGZhbHNlKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3Ro
KCksIExlbmd0aCgpLCBMZW5ndGgoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc0Ns
aXAoZmFsc2UpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0
ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjU1LDE1ICsyNTUsMTUgQEAgcHVi
bGljOgogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAogICAgICAgICBpZiAoUmVjdCogcmVj
dCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRSZWN0VmFsdWUoKSkgewotICAgICAgICAgICAgTGVuZ3Ro
IHRvcCA9IGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0LT50b3AoKSk7Ci0gICAg
ICAgICAgICBMZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVj
dC0+cmlnaHQoKSk7Ci0gICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29udmVydFRvTGVuZ3Ro
KHN0eWxlUmVzb2x2ZXIsIHJlY3QtPmJvdHRvbSgpKTsKLSAgICAgICAgICAgIExlbmd0aCBsZWZ0
ID0gY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3QtPmxlZnQoKSk7Ci0gICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDbGlwKHRvcCwgcmlnaHQsIGJvdHRvbSwg
bGVmdCk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKHRy
dWUpOworICAgICAgICAgICAgTGVuZ3RoIHRvcCA9IGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVj
dC0+dG9wKCkpOworICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVydFRvTGVuZ3RoKHN0
YXRlLCByZWN0LT5yaWdodCgpKTsKKyAgICAgICAgICAgIExlbmd0aCBib3R0b20gPSBjb252ZXJ0
VG9MZW5ndGgoc3RhdGUsIHJlY3QtPmJvdHRvbSgpKTsKKyAgICAgICAgICAgIExlbmd0aCBsZWZ0
ID0gY29udmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0LT5sZWZ0KCkpOworICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0Q2xpcCh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpOworICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQ2xpcCh0cnVlKTsKICAgICAgICAgfSBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pIHsKLSAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENsaXAoTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5n
dGgoKSwgTGVuZ3RoKCkpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0
SGFzQ2xpcChmYWxzZSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDbGlwKExlbmd0
aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldEhhc0NsaXAoZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yODEsNDAg
KzI4MSw0MCBAQCB0ZW1wbGF0ZSA8Q29sb3JJbmhlcml0IGluaGVyaXRDb2xvckZyb21QYXJlbnQs
CiAgICAgICAgICAgQ29sb3IgKCppbml0aWFsRnVuY3Rpb24pKCkgPSAmZGVmYXVsdEluaXRpYWxD
b2xvcj4KIGNsYXNzIEFwcGx5UHJvcGVydHlDb2xvciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKICAgICAgICAgLy8gVmlzaXRlZCBsaW5rIHN0
eWxlIGNhbiBuZXZlciBleHBsaWNpdGx5IGluaGVyaXQgZnJvbSBwYXJlbnQgdmlzaXRlZCBsaW5r
IHN0eWxlIHNvIG5vIHNlcGFyYXRlIGdldHRlcnMgYXJlIG5lZWRlZC4KLSAgICAgICAgQ29sb3Ig
Y29sb3IgPSAoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+KmdldHRlckZ1bmN0aW9uKSgp
OwotICAgICAgICBhcHBseUNvbG9yVmFsdWUoc3R5bGVSZXNvbHZlciwgY29sb3IuaXNWYWxpZCgp
ID8gY29sb3IgOiAoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+KmRlZmF1bHRGdW5jdGlv
bikoKSk7CisgICAgICAgIENvbG9yIGNvbG9yID0gKHN0YXRlLnBhcmVudFN0eWxlKCktPipnZXR0
ZXJGdW5jdGlvbikoKTsKKyAgICAgICAgYXBwbHlDb2xvclZhbHVlKHN0YXRlLCBjb2xvci5pc1Zh
bGlkKCkgPyBjb2xvciA6IChzdGF0ZS5wYXJlbnRTdHlsZSgpLT4qZGVmYXVsdEZ1bmN0aW9uKSgp
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewot
ICAgICAgICBhcHBseUNvbG9yVmFsdWUoc3R5bGVSZXNvbHZlciwgaW5pdGlhbEZ1bmN0aW9uKCkp
OworICAgICAgICBhcHBseUNvbG9yVmFsdWUoc3RhdGUsIGluaXRpYWxGdW5jdGlvbigpKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBSZXNvbHZlU3Rh
dGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWx1ZSk7CiAgICAgICAgIGlmIChpbmhlcml0Q29sb3JGcm9tUGFyZW50ICYmIHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKQotICAgICAgICAg
ICAgYXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAg
ICAgICBhcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZSgpKQotICAgICAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qc2V0dGVy
RnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2
ZVZhbHVlKSk7Ci0gICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRv
VmlzaXRlZExpbmtTdHlsZSgpKQotICAgICAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT4qdmlzaXRlZExpbmtTZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZlci0+Y29sb3JGcm9t
UHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUsIC8qIGZvclZpc2l0ZWRMaW5rICovIHRydWUp
KTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSkK
KyAgICAgICAgICAgICAgICAoc3RhdGUuc3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShTdHlsZVJl
c29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShzdGF0ZSwgcHJpbWl0aXZlVmFsdWUpKTsK
KyAgICAgICAgICAgIGlmIChzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkp
CisgICAgICAgICAgICAgICAgKHN0YXRlLnN0eWxlKCktPip2aXNpdGVkTGlua1NldHRlckZ1bmN0
aW9uKShTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShzdGF0ZSwgcHJpbWl0
aXZlVmFsdWUsIC8qIGZvclZpc2l0ZWRMaW5rICovIHRydWUpKTsKICAgICAgICAgfQogICAgIH0K
IAotICAgIHN0YXRpYyB2b2lkIGFwcGx5Q29sb3JWYWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgc3RhdGljIHZvaWQgYXBwbHlDb2xvclZh
bHVlKFJlc29sdmVTdGF0ZSYgc3RhdGUsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICB7Ci0gICAg
ICAgIGlmIChzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSkKLSAg
ICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKGNvbG9y
KTsKLSAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5r
U3R5bGUoKSkKLSAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qdmlzaXRlZExp
bmtTZXR0ZXJGdW5jdGlvbikoY29sb3IpOworICAgICAgICBpZiAoc3RhdGUuYXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlKCkpCisgICAgICAgICAgICAoc3RhdGUuc3R5bGUoKS0+KnNldHRlckZ1
bmN0aW9uKShjb2xvcik7CisgICAgICAgIGlmIChzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVk
TGlua1N0eWxlKCkpCisgICAgICAgICAgICAoc3RhdGUuc3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0
dGVyRnVuY3Rpb24pKGNvbG9yKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVy
IGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZh
bHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQpAQCAtMzIzLDExICszMjMs
MTEgQEAgcHVibGljOgogdGVtcGxhdGUgPFRleHREaXJlY3Rpb24gKFJlbmRlclN0eWxlOjoqZ2V0
dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24p
KFRleHREaXJlY3Rpb24pLCBUZXh0RGlyZWN0aW9uICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgogY2xh
c3MgQXBwbHlQcm9wZXJ0eURpcmVjdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgIHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8VGV4dERpcmVjdGlvbiwgZ2V0
dGVyRnVuY3Rpb24sIFRleHREaXJlY3Rpb24sIHNldHRlckZ1bmN0aW9uLCBUZXh0RGlyZWN0aW9u
LCBpbml0aWFsRnVuY3Rpb24+OjphcHBseVZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIs
IHZhbHVlKTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0eWxlUmVzb2x2ZXItPmVsZW1l
bnQoKTsKLSAgICAgICAgaWYgKGVsZW1lbnQgJiYgc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpID09
IGVsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQorICAgICAgICBBcHBseVBy
b3BlcnR5RGVmYXVsdDxUZXh0RGlyZWN0aW9uLCBnZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlv
biwgc2V0dGVyRnVuY3Rpb24sIFRleHREaXJlY3Rpb24sIGluaXRpYWxGdW5jdGlvbj46OmFwcGx5
VmFsdWUocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVu
dCA9IHN0YXRlLmVsZW1lbnQoKTsKKyAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudCA9PSBl
bGVtZW50LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKICAgICAgICAgICAgIGVsZW1l
bnQtPmRvY3VtZW50KCktPnNldERpcmVjdGlvblNldE9uRG9jdW1lbnRFbGVtZW50KHRydWUpOwog
ICAgIH0KIApAQCAtMzU0LDcgKzM1NCw3IEBAIHRlbXBsYXRlIDxMZW5ndGggKFJlbmRlclN0eWxl
OjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsCiBjbGFzcyBBcHBseVByb3BlcnR5TGVuZ3RoIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIExl
bmd0aCB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewog
ICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1
cm47CkBAIC0zNjIsMzkgKzM2MiwzOSBAQCBwdWJsaWM6CiAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
dWUpOwogICAgICAgICBpZiAobm9uZUVuYWJsZWQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVOb25lKSB7CiAgICAgICAgICAgICBpZiAobm9uZVVuZGVmaW5lZCkKLSAg
ICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoVW5k
ZWZpbmVkKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3Ro
KFVuZGVmaW5lZCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNldFZhbHVl
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBzZXRW
YWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGxl
Z2FjeUludHJpbnNpY0VuYWJsZWQpIHsKICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUludHJpbnNpYykKLSAgICAgICAgICAgICAgICBzZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoSW50cmluc2ljKSk7CisgICAgICAgICAg
ICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKEludHJpbnNpYykpOwogICAgICAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVNaW5J
bnRyaW5zaWMpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgTGVuZ3RoKE1pbkludHJpbnNpYykpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRl
LnN0eWxlKCksIExlbmd0aChNaW5JbnRyaW5zaWMpKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
aW50cmluc2ljRW5hYmxlZCkgewogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlV2Via2l0TWluQ29udGVudCkKLSAgICAgICAgICAgICAgICBzZXRW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoTWluQ29udGVudCkpOworICAgICAg
ICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aChNaW5Db250ZW50KSk7CiAg
ICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZVdlYmtpdE1heENvbnRlbnQpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKSwgTGVuZ3RoKE1heENvbnRlbnQpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1
ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoTWF4Q29udGVudCkpOwogICAgICAgICAgICAgZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVXZWJraXRGaWxsQXZhaWxh
YmxlKQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExl
bmd0aChGaWxsQXZhaWxhYmxlKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5
bGUoKSwgTGVuZ3RoKEZpbGxBdmFpbGFibGUpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlV2Via2l0Rml0Q29udGVudCkKLSAgICAg
ICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoRml0Q29u
dGVudCkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aChG
aXRDb250ZW50KSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYXV0b0VuYWJsZWQgJiYgcHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAgc2V0
VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKCkpOworICAgICAgICAgICAgc2V0
VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKCkpOwogICAgICAgICBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZS0+aXNMZW5ndGgoKSkgewotICAgICAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IHByaW1p
dGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
c3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IHByaW1pdGl2
ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICAg
ICAgbGVuZ3RoLnNldFF1aXJrKHByaW1pdGl2ZVZhbHVlLT5pc1F1aXJrVmFsdWUoKSk7Ci0gICAg
ICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBsZW5ndGgpOworICAgICAg
ICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgbGVuZ3RoKTsKICAgICAgICAgfSBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgICAgICBzZXRWYWx1ZShz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZh
bHVlKCksIFBlcmNlbnQpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExl
bmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCkpOwogICAgICAg
ICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5n
dGgoKSkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0
aChwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkpOworICAgICAgICAgICAgc2V0VmFsdWUo
c3RhdGUuc3R5bGUoKSwgTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9D
YWxjVmFsdWUoc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5z
dHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKQotICAgICAgICAgICAgc2V0VmFsdWUo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2VudGFn
ZUxlbmd0aCgpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIHByaW1pdGl2
ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSk7CiAgICAgfQogCiAgICAgc3RhdGlj
IFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTQwOSwxNiArNDA5LDE2IEBAIHRl
bXBsYXRlIDxTdHJpbmdJZGVudEJlaGF2aW9yIGlkZW50QmVoYXZpb3IsIGNvbnN0IEF0b21pY1N0
cmluZyYgKFJlbmRlclN0eWxlOjoqCiBjbGFzcyBBcHBseVByb3BlcnR5U3RyaW5nIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgaWYgKChpZGVu
dEJlaGF2aW9yID09IE1hcE5vbmVUb051bGwgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgfHwgKGlkZW50QmVoYXZpb3IgPT0gTWFwQXV0
b1RvTnVsbCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pKQot
ICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgbnVsbEF0b20pOwor
ICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgbnVsbEF0b20pOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRp
dmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5z
dHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CiAgICAgfQogICAgIHN0
YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtNDMxLDcgKzQz
MSw3IEBAIHRlbXBsYXRlIDxMZW5ndGhTaXplIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9u
KSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6CiBjbGFzcyBBcHBseVByb3BlcnR5Qm9yZGVy
UmFkaXVzIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSog
c3R5bGUsIExlbmd0aFNpemUgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVl
KTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtNDQ4LDE3ICs0NDgsMTcgQEAgcHVibGljOgogICAgICAgICBl
bHNlIGlmIChwYWlyLT5maXJzdCgpLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKQogICAg
ICAgICAgICAgcmFkaXVzV2lkdGggPSBwYWlyLT5maXJzdCgpLT52aWV3cG9ydFBlcmNlbnRhZ2VM
ZW5ndGgoKTsKICAgICAgICAgZWxzZSBpZiAocGFpci0+Zmlyc3QoKS0+aXNDYWxjdWxhdGVkUGVy
Y2VudGFnZVdpdGhMZW5ndGgoKSkKLSAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gTGVuZ3RoKChw
YWlyLT5maXJzdCgpLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CisgICAgICAgICAgICByYWRpdXNXaWR0aCA9
IExlbmd0aCgocGFpci0+Zmlyc3QoKS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0YXRl
LnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0
aXZlWm9vbSgpKSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByYWRpdXNXaWR0aCA9IHBh
aXItPmZpcnN0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgICAgICByYWRpdXNXaWR0aCA9IHBhaXItPmZp
cnN0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIGlm
IChwYWlyLT5zZWNvbmQoKS0+aXNQZXJjZW50YWdlKCkpCiAgICAgICAgICAgICByYWRpdXNIZWln
aHQgPSBMZW5ndGgocGFpci0+c2Vjb25kKCktPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwog
ICAgICAgICBlbHNlIGlmIChwYWlyLT5zZWNvbmQoKS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5n
dGgoKSkKICAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IHBhaXItPnNlY29uZCgpLT52aWV3cG9y
dFBlcmNlbnRhZ2VMZW5ndGgoKTsKICAgICAgICAgZWxzZSBpZiAocGFpci0+c2Vjb25kKCktPmlz
Q2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgICAgICByYWRpdXNIZWln
aHQgPSBMZW5ndGgoKHBhaXItPnNlY29uZCgpLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgp
LCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CisgICAgICAgICAg
ICByYWRpdXNIZWlnaHQgPSBMZW5ndGgoKHBhaXItPnNlY29uZCgpLT5jc3NDYWxjVmFsdWUoKS0+
dG9DYWxjVmFsdWUoc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0
ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJhZGl1c0hlaWdodCA9IHBhaXItPnNlY29uZCgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICAgICAgcmFk
aXVzSGVpZ2h0ID0gcGFpci0+c2Vjb25kKCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5z
dHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKSk7CiAgICAgICAgIGludCB3aWR0aCA9IHJhZGl1c1dpZHRoLnZhbHVlKCk7CiAgICAg
ICAgIGludCBoZWlnaHQgPSByYWRpdXNIZWlnaHQudmFsdWUoKTsKICAgICAgICAgaWYgKHdpZHRo
IDwgMCB8fCBoZWlnaHQgPCAwKQpAQCAtNDY5LDcgKzQ2OSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHJhZGl1c1dpZHRoID0gcmFkaXVzSGVpZ2h0OyAvLyBOdWxsIG91dCB0aGUgb3RoZXIgdmFs
dWUuCiAKICAgICAgICAgTGVuZ3RoU2l6ZSBzaXplKHJhZGl1c1dpZHRoLCByYWRpdXNIZWlnaHQp
OwotICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzaXplKTsKKyAgICAg
ICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgc2l6ZSk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9w
ZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtNTAzLDExICs1MDMsMTEgQEAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQsCiAgICAgICAgICAgdm9pZCAoQ1NTVG9TdHlsZU1hcDo6Km1h
cEZpbGxGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKT4KIGNs
YXNzIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXIgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVz
b2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEZpbGxMYXllciogY3VyckNoaWxkID0g
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5jdGlvbikoKTsKKyAgICAg
ICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3RhdGUuc3R5bGUoKS0+KmFjY2Vzc0xheWVyc0Z1
bmN0aW9uKSgpOwogICAgICAgICBGaWxsTGF5ZXIqIHByZXZDaGlsZCA9IDA7Ci0gICAgICAgIGNv
bnN0IEZpbGxMYXllciogY3VyclBhcmVudCA9IChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgp
LT4qbGF5ZXJzRnVuY3Rpb24pKCk7CisgICAgICAgIGNvbnN0IEZpbGxMYXllciogY3VyclBhcmVu
dCA9IChzdGF0ZS5wYXJlbnRTdHlsZSgpLT4qbGF5ZXJzRnVuY3Rpb24pKCk7CiAgICAgICAgIHdo
aWxlIChjdXJyUGFyZW50ICYmIChjdXJyUGFyZW50LT4qdGVzdEZ1bmN0aW9uKSgpKSB7CiAgICAg
ICAgICAgICBpZiAoIWN1cnJDaGlsZCkgewogICAgICAgICAgICAgICAgIC8qIE5lZWQgdG8gbWFr
ZSBhIG5ldyBsYXllci4qLwpAQCAtNTI3LDE4ICs1MjcsMTkgQEAgcHVibGljOgogICAgICAgICB9
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAg
ICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KmFj
Y2Vzc0xheWVyc0Z1bmN0aW9uKSgpOworICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChz
dGF0ZS5zdHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7CiAgICAgICAgIChjdXJyQ2hp
bGQtPipzZXRGdW5jdGlvbikoKCppbml0aWFsRnVuY3Rpb24pKGZpbGxMYXllclR5cGUpKTsKICAg
ICAgICAgZm9yIChjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgY3VyckNoaWxkOyBjdXJy
Q2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKSkKICAgICAgICAgICAgIChjdXJyQ2hpbGQtPipjbGVh
ckZ1bmN0aW9uKSgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBz
dGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hp
bGQgPSAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOwor
ICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChzdGF0ZS5zdHlsZSgpLT4qYWNjZXNzTGF5
ZXJzRnVuY3Rpb24pKCk7CiAgICAgICAgIEZpbGxMYXllciogcHJldkNoaWxkID0gMDsKKyAgICAg
ICAgQ1NTVG9TdHlsZU1hcCBzdHlsZU1hcChzdGF0ZSk7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNW
YWx1ZUxpc3QoKQogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQogICAgICAgICAmJiAhdmFsdWUt
PmlzSW1hZ2VTZXRWYWx1ZSgpCkBAIC01NTIsMTIgKzU1MywxMiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIGN1cnJDaGlsZCA9IG5ldyBGaWxsTGF5ZXIoZmlsbExheWVyVHlwZSk7CiAg
ICAgICAgICAgICAgICAgICAgIHByZXZDaGlsZC0+c2V0TmV4dChjdXJyQ2hpbGQpOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+
Km1hcEZpbGxGdW5jdGlvbikocHJvcGVydHlJZCwgY3VyckNoaWxkLCB2YWx1ZUxpc3QtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soaSkpOworICAgICAgICAgICAgICAgIChzdHlsZU1hcC4qbWFwRmls
bEZ1bmN0aW9uKShwcm9wZXJ0eUlkLCBjdXJyQ2hpbGQsIHZhbHVlTGlzdC0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjayhpKSk7CiAgICAgICAgICAgICAgICAgcHJldkNoaWxkID0gY3VyckNoaWxkOwog
ICAgICAgICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxl
TWFwKCktPiptYXBGaWxsRnVuY3Rpb24pKHByb3BlcnR5SWQsIGN1cnJDaGlsZCwgdmFsdWUpOwor
ICAgICAgICAgICAgKHN0eWxlTWFwLiptYXBGaWxsRnVuY3Rpb24pKHByb3BlcnR5SWQsIGN1cnJD
aGlsZCwgdmFsdWUpOwogICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7
CiAgICAgICAgIH0KICAgICAgICAgd2hpbGUgKGN1cnJDaGlsZCkgewpAQCAtNTgzLDcgKzU4NCw3
IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBULAogY2xhc3MgQXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5n
dGggewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHls
ZSwgVCB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewog
ICAgICAgICAvLyBub3RlOiBDU1NQcm9wZXJ0eUxldHRlci9Xb3JkU3BhY2luZyByaWdodCBub3cg
c2V0cyB0byB6ZXJvIGlmIGl0J3Mgbm90IGEgcHJpbWl0aXZlIHZhbHVlIGZvciBzb21lIHJlYXNv
bi4uLgogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCkBAIC02MDIsMTMg
KzYwMywxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0gZWxzZSBpZiAodGhpY2tuZXNzRW5hYmxlZCAm
JiBpZGVudCA9PSBDU1NWYWx1ZVRoaWNrKSB7CiAgICAgICAgICAgICBsZW5ndGggPSA1OwogICAg
ICAgICB9IGVsc2UgaWYgKGlkZW50ID09IENTU1ZhbHVlSW52YWxpZCkgewotICAgICAgICAgICAg
ZmxvYXQgem9vbSA9IChzdmdab29tRW5hYmxlZCAmJiBzdHlsZVJlc29sdmVyLT51c2VTVkdab29t
UnVsZXMoKSkgPyAxLjBmIDogc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgp
OworICAgICAgICAgICAgZmxvYXQgem9vbSA9IChzdmdab29tRW5hYmxlZCAmJiBzdGF0ZS51c2VT
Vkdab29tUnVsZXMoKSkgPyAxLjBmIDogc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwog
CiAgICAgICAgICAgICAvLyBBbnkgb3JpZ2luYWwgcmVzdWx0IHRoYXQgd2FzID49IDEgc2hvdWxk
IG5vdCBiZSBhbGxvd2VkIHRvIGZhbGwgYmVsb3cgMS4KICAgICAgICAgICAgIC8vIFRoaXMga2Vl
cHMgYm9yZGVyIGxpbmVzIGZyb20gdmFuaXNoaW5nLgotICAgICAgICAgICAgbGVuZ3RoID0gcHJp
bWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5
bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tKTsKKyAgICAgICAgICAgIGxlbmd0
aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0YXRlLnN0eWxlKCksIHN0YXRl
LnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7CiAgICAgICAgICAgICBpZiAoem9vbSA8IDEuMGYg
JiYgbGVuZ3RoIDwgMS4wKSB7Ci0gICAgICAgICAgICAgICAgVCBvcmlnaW5hbExlbmd0aCA9IHBy
aW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0
eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgMS4wKTsKKyAgICAgICAgICAgICAgICBU
IG9yaWdpbmFsTGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4oc3RhdGUu
c3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCAxLjApOwogICAgICAgICAgICAgICAg
IGlmIChvcmlnaW5hbExlbmd0aCA+PSAxLjApCiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9
IDEuMDsKICAgICAgICAgICAgIH0KQEAgLTYxOCw3ICs2MTksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBsZW5ndGggPSAwOwogICAgICAgICB9CiAKLSAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNv
bHZlci0+c3R5bGUoKSwgbGVuZ3RoKTsKKyAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwg
bGVuZ3RoKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVy
KCkKICAgICB7CkBAIC02MzAsMjggKzYzMSwyOCBAQCBwdWJsaWM6CiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgVCAoRm9udERlc2NyaXB0aW9uOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQg
KEZvbnREZXNjcmlwdGlvbjo6KnNldHRlckZ1bmN0aW9uKShUKSwgVCBpbml0aWFsVmFsdWU+CiBj
bGFzcyBBcHBseVByb3BlcnR5Rm9udCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJ
bmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikK
KyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZl
U3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlw
dGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICAoZm9udERl
c2NyaXB0aW9uLipzZXR0ZXJGdW5jdGlvbikoKHN0eWxlUmVzb2x2ZXItPnBhcmVudEZvbnREZXNj
cmlwdGlvbigpLipnZXR0ZXJGdW5jdGlvbikoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIChm
b250RGVzY3JpcHRpb24uKnNldHRlckZ1bmN0aW9uKSgoc3RhdGUucGFyZW50Rm9udERlc2NyaXB0
aW9uKCkuKmdldHRlckZ1bmN0aW9uKSgpKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0
aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0
aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3Rh
dGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
biA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAg
IChmb250RGVzY3JpcHRpb24uKnNldHRlckZ1bmN0aW9uKShpbml0aWFsVmFsdWUpOwotICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAg
ICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9u
KCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250
RGVzY3JpcHRpb24oKTsKICAgICAgICAgKGZvbnREZXNjcmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24p
KCpwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNy
ZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVl
LCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQpAQCAtNjc2LDUwICs2NzcsNTAg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNpemUgLyAxLjJmOwogICAgIH0KIHB1YmxpYzoK
LSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVl
KENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBmbG9h
dCBzaXplID0gc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCku
c3BlY2lmaWVkU2l6ZSgpOworICAgICAgICBmbG9hdCBzaXplID0gc3RhdGUucGFyZW50Rm9udERl
c2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOwogCiAgICAgICAgIGlmIChzaXplIDwgMCkKICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHls
ZSgpLT5mb250RGVzY3JpcHRpb24oKS5rZXl3b3JkU2l6ZSgpKTsKLSAgICAgICAgc3R5bGVSZXNv
bHZlci0+c2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIEZv
bnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsK
KyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKHN0YXRlLnBhcmVudEZvbnRE
ZXNjcmlwdGlvbigpLmtleXdvcmRTaXplKCkpOworICAgICAgICBTdHlsZVJlc29sdmVyOjpzZXRG
b250U2l6ZShzdGF0ZSwgZm9udERlc2NyaXB0aW9uLCBzaXplKTsKKyAgICAgICAgc3RhdGUuc2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZh
bHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGZsb2F0IHNpemUgPSBzdHlsZVJlc29sdmVyLT5m
b250U2l6ZUZvcktleXdvcmQoc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRp
dW0sIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpOworICAgICAgICBGb250
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7Cisg
ICAgICAgIGZsb2F0IHNpemUgPSBTdHlsZVJlc29sdmVyOjpmb250U2l6ZUZvcktleXdvcmQoc3Rh
dGUuZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERl
ZmF1bHRTaXplKCkpOwogCiAgICAgICAgIGlmIChzaXplIDwgMCkKICAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRp
dW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9u
dFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIFN0eWxlUmVzb2x2ZXI6
OnNldEZvbnRTaXplKHN0YXRlLCBmb250RGVzY3JpcHRpb24sIHNpemUpOworICAgICAgICBzdGF0
ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQog
ICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCi0gICAg
ICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0S2V5d29yZFNpemUoMCk7CiAgICAgICAgIGZsb2F0IHBhcmVudFNpemUgPSAwOwogICAg
ICAgICBib29sIHBhcmVudElzQWJzb2x1dGVTaXplID0gZmFsc2U7CiAgICAgICAgIGZsb2F0IHNp
emUgPSAwOwogCi0gICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSB7Ci0g
ICAgICAgICAgICBwYXJlbnRTaXplID0gc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Zm9u
dERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOwotICAgICAgICAgICAgcGFyZW50SXNBYnNv
bHV0ZVNpemUgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24o
KS5pc0Fic29sdXRlU2l6ZSgpOworICAgICAgICBpZiAoc3RhdGUucGFyZW50U3R5bGUoKSkgewor
ICAgICAgICAgICAgcGFyZW50U2l6ZSA9IHN0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnNw
ZWNpZmllZFNpemUoKTsKKyAgICAgICAgICAgIHBhcmVudElzQWJzb2x1dGVTaXplID0gc3RhdGUu
cGFyZW50Rm9udERlc2NyaXB0aW9uKCkuaXNBYnNvbHV0ZVNpemUoKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGlmIChpbnQgaWRlbnQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewpAQCAt
NzMzLDcgKzczNCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVYTGFyZ2U6
CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlWHhMYXJnZToKICAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVXZWJraXRYeHhMYXJnZToKLSAgICAgICAgICAgICAgICBzaXplID0gc3R5bGVSZXNvbHZl
ci0+Zm9udFNpemVGb3JLZXl3b3JkKHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCksIGlkZW50LCBm
b250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBz
aXplID0gU3R5bGVSZXNvbHZlcjo6Zm9udFNpemVGb3JLZXl3b3JkKHN0YXRlLmRvY3VtZW50KCks
IGlkZW50LCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsKICAgICAgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoaWRlbnQgLSBDU1NWYWx1ZVh4
U21hbGwgKyAxKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVMYXJnZXI6CkBAIC03NTEsMTMgKzc1MiwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUocGFyZW50SXNBYnNvbHV0ZVNpemUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhKHByaW1pdGl2
ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSB8fCBwcmltaXRpdmVWYWx1ZS0+aXNGb250UmVsYXRpdmVM
ZW5ndGgoKSkpOwogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQot
ICAgICAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9h
dD4oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1l
bnRTdHlsZSgpLCAxLjAsIHRydWUpOworICAgICAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUucGFyZW50U3R5bGUoKSwgc3RhdGUucm9v
dEVsZW1lbnRTdHlsZSgpLCAxLjAsIHRydWUpOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0
aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKQogICAgICAgICAgICAgICAgIHNpemUgPSAocHJpbWl0
aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSAqIHBhcmVudFNpemUpIC8gMTAwLjBmOwogICAgICAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRo
TGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxj
VmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5bGVS
ZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpKS0+ZXZhbHVhdGUocGFyZW50U2l6ZSk7CisgICAg
ICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxj
VmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKS0+ZXZh
bHVhdGUocGFyZW50U2l6ZSk7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+
aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBzaXplID0gdmFs
dWVGb3JMZW5ndGgocHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpLCAw
LCBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpOworICAgICAgICAgICAg
ICAgIHNpemUgPSB2YWx1ZUZvckxlbmd0aChwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50
YWdlTGVuZ3RoKCksIDAsIHN0YXRlLmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSk7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC03NjksOCAr
NzcwLDggQEAgcHVibGljOgogICAgICAgICAvLyBDYXAgZm9udCBzaXplIGhlcmUgdG8gbWFrZSBz
dXJlIHRoYXQgZG9lc24ndCBoYXBwZW4uCiAgICAgICAgIHNpemUgPSBtaW4obWF4aW11bUFsbG93
ZWRGb250U2l6ZSwgc2l6ZSk7CiAKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUo
Zm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIFN0eWxlUmVzb2x2ZXI6OnNldEZv
bnRTaXplKHN0YXRlLCBmb250RGVzY3JpcHRpb24sIHNpemUpOworICAgICAgICBzdGF0ZS5zZXRG
b250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtNzc5LDEyICs3ODAsMTIgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5Rm9u
dFdlaWdodCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRl
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUp
OwotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZl
ci0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgc3dpdGNoIChwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICBjYXNlIENTU1ZhbHVlSW52YWxpZDoKICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNzk4LDcgKzc5OSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWln
aHQoKnByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgfQotICAgICAgICBzdHlsZVJlc29sdmVyLT5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0
eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtODA5LDMwICs4MTAsMzAgQEAgcHVi
bGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVyZXMgewogcHVibGlj
OgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFs
dWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZl
ci0+cGFyZW50Rm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBzdGF0ZS5wYXJl
bnRGb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlw
dGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogCiAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRDb21tb25MaWdhdHVyZXNTdGF0ZShwYXJlbnRGb250RGVzY3JpcHRpb24uY29tbW9uTGln
YXR1cmVzU3RhdGUoKSk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5
TGlnYXR1cmVzU3RhdGUocGFyZW50Rm9udERlc2NyaXB0aW9uLmRpc2NyZXRpb25hcnlMaWdhdHVy
ZXNTdGF0ZSgpKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEhpc3RvcmljYWxMaWdhdHVy
ZXNTdGF0ZShwYXJlbnRGb250RGVzY3JpcHRpb24uaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKCkp
OwogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewot
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+
Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKIAogICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0Q29tbW9uTGlnYXR1cmVzU3RhdGUoRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNT
dGF0ZSk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5TGlnYXR1cmVz
U3RhdGUoRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSk7CiAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRIaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUoRm9udERlc2NyaXB0aW9u
OjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSk7CiAKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFs
dWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVz
b2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgRm9udERl
c2NyaXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNj
cmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU7CiAgICAgICAgIEZvbnREZXNjcmlwdGlvbjo6
TGlnYXR1cmVzU3RhdGUgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0
aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZTsKQEAgLTg3OCwxMSArODc5LDExIEBAIHB1YmxpYzoK
ICAgICAgICAgfQogI2VuZGlmCiAKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlw
dGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21tb25MaWdhdHVyZXNTdGF0ZShjb21tb25MaWdhdHVy
ZXNTdGF0ZSk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5TGlnYXR1
cmVzU3RhdGUoZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKTsKICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldEhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZShoaXN0b3JpY2FsTGlnYXR1cmVzU3Rh
dGUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlv
bik7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkK
QEAgLTg5OCwxMyArODk5LDE0IEBAIHRlbXBsYXRlIDxCb3JkZXJJbWFnZVR5cGUgYm9yZGVySW1h
Z2VUeXBlLAogICAgICAgICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKGNv
bnN0IE5pbmVQaWVjZUltYWdlJik+CiBjbGFzcyBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2Ugewog
cHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgIHsKICAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2U7CiAgICAgICAgIGlm
IChib3JkZXJJbWFnZVR5cGUgPT0gQm9yZGVyTWFzaykKICAgICAgICAgICAgIGltYWdlLnNldE1h
c2tEZWZhdWx0cygpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5l
UGllY2VJbWFnZShwcm9wZXJ0eSwgdmFsdWUsIGltYWdlKTsKLSAgICAgICAgKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoaW1hZ2UpOworICAgICAgICBDU1NUb1N0eWxl
TWFwIHN0eWxlTWFwKHN0YXRlKTsKKyAgICAgICAgc3R5bGVNYXAubWFwTmluZVBpZWNlSW1hZ2Uo
cHJvcGVydHksIHZhbHVlLCBpbWFnZSk7CisgICAgICAgIChzdGF0ZS5zdHlsZSgpLT4qc2V0dGVy
RnVuY3Rpb24pKGltYWdlKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNy
ZWF0ZUhhbmRsZXIoKQpAQCAtOTIxLDI5ICs5MjMsMjkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMg
aW5saW5lIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBnZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUp
IHsgcmV0dXJuIHR5cGUgPT0gQm9yZGVySW1hZ2UgPyBzdHlsZS0+Ym9yZGVySW1hZ2UoKSA6IHN0
eWxlLT5tYXNrQm94SW1hZ2UoKTsgfQogICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRWYWx1ZShS
ZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IE5pbmVQaWVjZUltYWdlJiB2YWx1ZSkgeyByZXR1cm4g
dHlwZSA9PSBCb3JkZXJJbWFnZSA/IHN0eWxlLT5zZXRCb3JkZXJJbWFnZSh2YWx1ZSkgOiBzdHls
ZS0+c2V0TWFza0JveEltYWdlKHZhbHVlKTsgfQogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVz
b2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdl
dFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpKTsKKyAgICAgICAgTmluZVBpZWNlSW1hZ2Ug
aW1hZ2UoZ2V0VmFsdWUoc3RhdGUuc3R5bGUoKSkpOwogICAgICAgICBzd2l0Y2ggKG1vZGlmaWVy
KSB7CiAgICAgICAgIGNhc2UgT3V0c2V0OgotICAgICAgICAgICAgaW1hZ2UuY29weU91dHNldEZy
b20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOworICAgICAgICAgICAg
aW1hZ2UuY29weU91dHNldEZyb20oZ2V0VmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVwZWF0OgotICAgICAgICAgICAgaW1hZ2Uu
Y29weVJlcGVhdEZyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOwor
ICAgICAgICAgICAgaW1hZ2UuY29weVJlcGVhdEZyb20oZ2V0VmFsdWUoc3RhdGUucGFyZW50U3R5
bGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2xpY2U6Ci0gICAgICAg
ICAgICBpbWFnZS5jb3B5SW1hZ2VTbGljZXNGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnBh
cmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGltYWdlLmNvcHlJbWFnZVNsaWNlc0Zyb20oZ2V0
VmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgV2lkdGg6Ci0gICAgICAgICAgICBpbWFnZS5jb3B5Qm9yZGVyU2xpY2VzRnJvbShnZXRW
YWx1ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbWFnZS5j
b3B5Qm9yZGVyU2xpY2VzRnJvbShnZXRWYWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCBpbWFnZSk7CisgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIGltYWdl
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewot
ICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHls
ZSgpKSk7CisgICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKHN0YXRlLnN0eWxl
KCkpKTsKICAgICAgICAgc3dpdGNoIChtb2RpZmllcikgewogICAgICAgICBjYXNlIE91dHNldDoK
ICAgICAgICAgICAgIGltYWdlLnNldE91dHNldChMZW5ndGhCb3goMCkpOwpAQCAtOTYyLDI3ICs5
NjQsMjggQEAgcHVibGljOgogICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHR5cGUg
PT0gQm9yZGVySW1hZ2UgPyBMZW5ndGhCb3goTGVuZ3RoKDEsIFJlbGF0aXZlKSwgTGVuZ3RoKDEs
IFJlbGF0aXZlKSwgTGVuZ3RoKDEsIFJlbGF0aXZlKSwgTGVuZ3RoKDEsIFJlbGF0aXZlKSkgOiBM
ZW5ndGhCb3goKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzZXRW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBpbWFnZSk7CisgICAgICAgIHNldFZhbHVlKHN0
YXRlLnN0eWxlKCksIGltYWdlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVT
dGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIE5pbmVQaWVjZUlt
YWdlIGltYWdlKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpKTsKKyAgICAgICAgTmlu
ZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3RhdGUuc3R5bGUoKSkpOworICAgICAgICBDU1NU
b1N0eWxlTWFwIHN0eWxlTWFwKHN0YXRlKTsKICAgICAgICAgc3dpdGNoIChtb2RpZmllcikgewog
ICAgICAgICBjYXNlIE91dHNldDoKLSAgICAgICAgICAgIGltYWdlLnNldE91dHNldChzdHlsZVJl
c29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVF1YWQodmFsdWUpKTsKKyAgICAg
ICAgICAgIGltYWdlLnNldE91dHNldChzdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZVF1YWQodmFs
dWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlcGVhdDoKLSAgICAgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KHZh
bHVlLCBpbWFnZSk7CisgICAgICAgICAgICBzdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZVJlcGVh
dCh2YWx1ZSwgaW1hZ2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2xpY2U6
Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFn
ZVNsaWNlKHZhbHVlLCBpbWFnZSk7CisgICAgICAgICAgICBzdHlsZU1hcC5tYXBOaW5lUGllY2VJ
bWFnZVNsaWNlKHZhbHVlLCBpbWFnZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBXaWR0aDoKLSAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyhzdHlsZVJlc29sdmVy
LT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVF1YWQodmFsdWUpKTsKKyAgICAgICAgICAg
IGltYWdlLnNldEJvcmRlclNsaWNlcyhzdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZVF1YWQodmFs
dWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIGltYWdlKTsKKyAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5
bGUoKSwgaW1hZ2UpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRl
SGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZh
cHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBAIC05OTEsNyArOTk0LDcgQEAgcHVi
bGljOgogdGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQsIFN0eWxlSW1hZ2UqIChSZW5kZXJTdHls
ZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1
bmN0aW9uKShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+KSwgU3R5bGVJbWFnZSogKCppbml0aWFsRnVu
Y3Rpb24pKCk+CiBjbGFzcyBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2UgewogcHVibGlj
OgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2UoaWQsIHZhbHVl
KSk7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVT
dGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3RhdGUuc3R5bGUoKS0+KnNldHRlckZ1
bmN0aW9uKShTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKHN0YXRlLCBpZCwgdmFsdWUpKTsgfQog
ICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewogICAgICAg
ICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxTdHls
ZUltYWdlKiwgZ2V0dGVyRnVuY3Rpb24sIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4sIHNldHRlckZ1
bmN0aW9uLCBTdHlsZUltYWdlKiwgaW5pdGlhbEZ1bmN0aW9uPjo6Y3JlYXRlSGFuZGxlcigpOwpA
QCAtMTAwMywxMSArMTAwNiwxMSBAQCBlbnVtIENvdW50ZXJCZWhhdmlvciB7SW5jcmVtZW50ID0g
MCwgUmVzZXR9OwogdGVtcGxhdGUgPENvdW50ZXJCZWhhdmlvciBjb3VudGVyQmVoYXZpb3I+CiBj
bGFzcyBBcHBseVByb3BlcnR5Q291bnRlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgZW1w
dHlGdW5jdGlvbihDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKikgeyB9Ci0gICAgc3RhdGlj
IHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBlbXB0eUZ1bmN0aW9uKENTU1Byb3BlcnR5SUQs
IFJlc29sdmVTdGF0ZSYpIHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENT
U1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBDb3VudGVy
RGlyZWN0aXZlTWFwJiBtYXAgPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5hY2Nlc3NDb3VudGVy
RGlyZWN0aXZlcygpOwotICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBwYXJlbnRNYXAgPSBz
dHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwor
ICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdGF0ZS5zdHlsZSgpLT5hY2Nlc3ND
b3VudGVyRGlyZWN0aXZlcygpOworICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBwYXJlbnRN
YXAgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwogCiAg
ICAgICAgIHR5cGVkZWYgQ291bnRlckRpcmVjdGl2ZU1hcDo6aXRlcmF0b3IgSXRlcmF0b3I7CiAg
ICAgICAgIEl0ZXJhdG9yIGVuZCA9IHBhcmVudE1hcC5lbmQoKTsKQEAgLTEwMjAsMTQgKzEwMjMs
MTQgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2
YWx1ZSk7CiAKLSAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKKyAgICAgICAgQ291bnRlckRp
cmVjdGl2ZU1hcCYgbWFwID0gc3RhdGUuc3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMo
KTsKICAgICAgICAgdHlwZWRlZiBDb3VudGVyRGlyZWN0aXZlTWFwOjppdGVyYXRvciBJdGVyYXRv
cjsKIAogICAgICAgICBJdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CkBAIC0xMDYzLDQyICsxMDY2
LDQyIEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUN1cnNvciB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShD
U1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkt
PmN1cnNvcigpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yTGlz
dChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5jdXJzb3JzKCkpOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRDdXJzb3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+Y3Vyc29yKCkpOworICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDdXJzb3JMaXN0KHN0YXRlLnBhcmVudFN0eWxlKCktPmN1
cnNvcnMoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlKQog
ICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcihSZW5kZXJTdHlsZTo6
aW5pdGlhbEN1cnNvcigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0
KCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEN1cnNvcihSZW5kZXJTdHlsZTo6aW5pdGlh
bEN1cnNvcigpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3Rh
dGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPmNsZWFyQ3Vyc29yTGlzdCgpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhckN1cnNv
ckxpc3QoKTsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CiAgICAgICAgICAg
ICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7
CiAgICAgICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3IoQ1VSU09SX0FVVE8pOworICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0Q3Vyc29yKENVUlNPUl9BVVRPKTsKICAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRl
bSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CiAgICAgICAgICAgICAgICAgaWYg
KGl0ZW0tPmlzQ3Vyc29ySW1hZ2VWYWx1ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIENTU0N1
cnNvckltYWdlVmFsdWUqIGltYWdlID0gc3RhdGljX2Nhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSo+
KGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPnVwZGF0ZUlmU1ZHQ3Vyc29y
SXNVc2VkKHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKSkpIC8vIEVsZW1lbnRzIHdpdGggU1ZHIGN1
cnNvcnMgYXJlIG5vdCBhbGxvd2VkIHRvIHNoYXJlIHN0eWxlLgotICAgICAgICAgICAgICAgICAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VW5pcXVlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmFkZEN1cnNvcihzdHlsZVJlc29sdmVyLT5z
dHlsZUltYWdlKENTU1Byb3BlcnR5Q3Vyc29yLCBpbWFnZSksIGltYWdlLT5ob3RTcG90KCkpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPnVwZGF0ZUlmU1ZHQ3Vyc29ySXNVc2VkKHN0
YXRlLmVsZW1lbnQoKSkpIC8vIEVsZW1lbnRzIHdpdGggU1ZHIGN1cnNvcnMgYXJlIG5vdCBhbGxv
d2VkIHRvIHNoYXJlIHN0eWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmFkZEN1
cnNvcihTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKHN0YXRlLCBDU1NQcm9wZXJ0eUN1cnNvciwg
aW1hZ2UpLCBpbWFnZS0+aG90U3BvdCgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0
ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkgewogICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KGl0ZW0pOwogICAgICAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzSWRlbnQo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1
cnNvcigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0Q3Vyc29yKCpwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
IHsKICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlLT5pc0lkZW50KCkgJiYgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y3Vyc29yKCkg
IT0gRUN1cnNvcigqcHJpbWl0aXZlVmFsdWUpKQotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlLT5pc0lkZW50KCkgJiYgc3RhdGUuc3R5bGUoKS0+Y3Vyc29yKCkgIT0g
RUN1cnNvcigqcHJpbWl0aXZlVmFsdWUpKQorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMTA3
LDcgKzExMTAsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlUZXh0QWxpZ24gewog
cHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTExNSwxMyArMTExOCwxMyBAQCBwdWJsaWM6CiAgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSAhPSBDU1NWYWx1ZVdlYmtpdE1hdGNoUGFyZW50KQotICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKCpwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAg
IGVsc2UgaWYgKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigpID09IFRB
U1RBUlQpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0QWxpZ24o
c3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
TEVGVCA6IFJJR0hUKTsKLSAgICAgICAgZWxzZSBpZiAoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5
bGUoKS0+dGV4dEFsaWduKCkgPT0gVEFFTkQpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRUZXh0QWxpZ24oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpID8gUklHSFQgOiBMRUZUKTsKKyAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldFRleHRBbGlnbigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICBlbHNlIGlmIChz
dGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBUQVNUQVJUKQorICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0YXRlLnBhcmVudFN0eWxlKCktPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSA/IExFRlQgOiBSSUdIVCk7CisgICAgICAgIGVsc2UgaWYgKHN0YXRl
LnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigpID09IFRBRU5EKQorICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0YXRlLnBhcmVudFN0eWxlKCktPmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSA/IFJJR0hUIDogTEVGVCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbihzdHlsZVJlc29sdmVyLT5wYXJlbnRT
dHlsZSgpLT50ZXh0QWxpZ24oKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0
QWxpZ24oc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dEFsaWduKCkpOwogICAgIH0KICAgICBzdGF0
aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTExMzIsNyArMTEz
NSw3IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHREZWNvcmF0aW9uIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIEVUZXh0RGVjb3JhdGlvbiB0ID0gUmVuZGVyU3R5bGU6Omlu
aXRpYWxUZXh0RGVjb3JhdGlvbigpOwogICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9y
IGkodmFsdWUpOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKQEAgLTExNDAsNyArMTE0Myw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEFTU0VSVChpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
OwogICAgICAgICAgICAgdCB8PSAqc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVt
KTsKICAgICAgICAgfQotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RGVj
b3JhdGlvbih0KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dERlY29yYXRpb24odCk7
CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAg
ewpAQCAtMTE1MSw3ICsxMTU0LDcgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5TGlu
ZUhlaWdodCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRl
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTYyLDE1ICsxMTY1LDE1IEBAIHB1
YmxpYzoKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
Tm9ybWFsKQogICAgICAgICAgICAgbGluZUhlaWdodCA9IFJlbmRlclN0eWxlOjppbml0aWFsTGlu
ZUhlaWdodCgpOwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkg
ewotICAgICAgICAgICAgZG91YmxlIG11bHRpcGxpZXIgPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5lZmZlY3RpdmVab29tKCk7Ci0gICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+dGV4dFNpemVBZGp1c3QoKSkgewotICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUg
PSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5mcmFtZSgpKQorICAgICAgICAgICAgZG91Ymxl
IG11bHRpcGxpZXIgPSBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAgICAg
ICBpZiAoc3RhdGUuc3R5bGUoKS0+dGV4dFNpemVBZGp1c3QoKSkgeworICAgICAgICAgICAgICAg
IGlmIChGcmFtZSogZnJhbWUgPSBzdGF0ZS5kb2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICAg
ICAgICAgICAgICBtdWx0aXBsaWVyICo9IGZyYW1lLT50ZXh0Wm9vbUZhY3RvcigpOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRl
TGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9v
dEVsZW1lbnRTdHlsZSgpLCBtdWx0aXBsaWVyKTsKKyAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBw
cmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRl
LnJvb3RFbGVtZW50U3R5bGUoKSwgbXVsdGlwbGllcik7CiAgICAgICAgIH0gZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogcGVy
Y2VudGFnZSBzaG91bGQgbm90IGJlIHJlc3RyaWN0ZWQgdG8gYW4gaW50ZWdlciBoZXJlLgotICAg
ICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0aCgoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9u
dFNpemUoKSAqIHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKSAvIDEwMCwgRml4ZWQpOwor
ICAgICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0aCgoc3RhdGUuc3R5bGUoKS0+Zm9udFNpemUo
KSAqIHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKSAvIDEwMCwgRml4ZWQpOwogICAgICAg
ICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAv
LyBGSVhNRTogbnVtYmVyIGFuZCBwZXJjZW50YWdlIHZhbHVlcyBzaG91bGQgcHJvZHVjZSB0aGUg
c2FtZSB0eXBlIG9mIExlbmd0aCAoaWUuIEZpeGVkIG9yIFBlcmNlbnQpLgogICAgICAgICAgICAg
bGluZUhlaWdodCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSAqIDEw
MC4wLCBQZXJjZW50KTsKQEAgLTExNzgsNyArMTE4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IGxpbmVIZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0TGluZUhlaWdodChsaW5lSGVpZ2h0KTsKKyAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0TGluZUhlaWdodChsaW5lSGVpZ2h0KTsKICAgICB9CiAgICAgc3RhdGljIFByb3Bl
cnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xMjY1LDExICsxMjY4LDExIEBA
IHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIHB1YmxpYzoKLSAgICBzdGF0
aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKikg
eyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciopIHsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYp
IHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFJl
c29sdmVTdGF0ZSYpIHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+cmVzZXRQYWdlU2l6ZVR5cGUoKTsKKyAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+cmVzZXRQYWdlU2l6ZVR5cGUoKTsKICAgICAgICAgTGVuZ3RoIHdpZHRoOwog
ICAgICAgICBMZW5ndGggaGVpZ2h0OwogICAgICAgICBQYWdlU2l6ZVR5cGUgcGFnZVNpemVUeXBl
ID0gUEFHRV9TSVpFX0FVVE87CkBAIC0xMjg1LDggKzEyODgsOCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgLy8gPGxlbmd0aD57Mn0KICAgICAgICAgICAgICAgICBpZiAoIXNlY29uZC0+aXNM
ZW5ndGgoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIHdp
ZHRoID0gZmlyc3QtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkpOwotICAgICAgICAgICAgICAgIGhl
aWdodCA9IHNlY29uZC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSk7CisgICAgICAgICAgICAgICAg
d2lkdGggPSBmaXJzdC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRl
LnJvb3RFbGVtZW50U3R5bGUoKSk7CisgICAgICAgICAgICAgICAgaGVpZ2h0ID0gc2Vjb25kLT5j
b21wdXRlTGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHls
ZSgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gPHBhZ2Utc2l6
ZT4gPG9yaWVudGF0aW9uPgogICAgICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBvcmRlciBpcyBn
dWFyYW50ZWVkLiBTZWUgQ1NTUGFyc2VyOjpwYXJzZVNpemVQYXJhbWV0ZXIuCkBAIC0xMzA0LDcg
KzEzMDcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVu
Z3RoKCkpIHsKICAgICAgICAgICAgICAgICAvLyA8bGVuZ3RoPgogICAgICAgICAgICAgICAgIHBh
Z2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsKLSAgICAgICAgICAgICAgICB3aWR0aCA9
IGhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNv
bHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAg
ICAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3Ro
PExlbmd0aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgMDoKQEAgLTEzMzAsMjkgKzEzMzMs
MjkgQEAgcHVibGljOgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFBhZ2VTaXplVHlwZShw
YWdlU2l6ZVR5cGUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRQYWdlU2l6
ZShMZW5ndGhTaXplKHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
UGFnZVNpemVUeXBlKHBhZ2VTaXplVHlwZSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFBh
Z2VTaXplKExlbmd0aFNpemUod2lkdGgsIGhlaWdodCkpOwogICAgIH0KICAgICBzdGF0aWMgUHJv
cGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFw
cGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQogfTsK
IAogY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHRFbXBoYXNpc1N0eWxlIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1By
b3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0
eWxlKCktPnRleHRFbXBoYXNpc0ZpbGwoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldFRleHRFbXBoYXNpc01hcmsoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+dGV4
dEVtcGhhc2lzTWFyaygpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4
dEVtcGhhc2lzQ3VzdG9tTWFyayhzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0RW1w
aGFzaXNDdXN0b21NYXJrKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFz
aXNGaWxsKHN0YXRlLnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNpc0ZpbGwoKSk7CisgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoc3RhdGUucGFyZW50U3R5bGUoKS0+
dGV4dEVtcGhhc2lzTWFyaygpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhh
c2lzQ3VzdG9tTWFyayhzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNDdXN0b21NYXJr
KCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBw
bHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoUmVu
ZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNGaWxsKCkpOwotICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFJlbmRlclN0eWxlOjppbml0aWFsVGV4
dEVtcGhhc2lzTWFyaygpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4
dEVtcGhhc2lzQ3VzdG9tTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc0N1c3Rv
bU1hcmsoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoUmVu
ZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNGaWxsKCkpOworICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lz
TWFyaygpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFy
ayhSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgewogICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKICAgICAgICAgICAg
IENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsK
QEAgLTEzNjYsMTEgKzEzNjksMTEgQEAgcHVibGljOgogCiAgICAgICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVt
KTsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVGaWxs
ZWQgfHwgdmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVPcGVuKQotICAgICAgICAgICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKCp2YWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwo
KnZhbHVlKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoKnZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyaygqdmFsdWUpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4
dEVtcGhhc2lzQ3VzdG9tTWFyayhudWxsQXRvbSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCkBAIC0xMzc5LDIwICsxMzgyLDIwIEBAIHB1YmxpYzoKICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWx1ZSk7CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1N0cmlu
ZygpKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFz
aXNGaWxsKFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJrQ3VzdG9tKTsK
LSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3Rv
bU1hcmsocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChUZXh0RW1waGFzaXNGaWxsRmlsbGVkKTsK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVtcGhh
c2lzTWFya0N1c3RvbSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFz
aXNDdXN0b21NYXJrKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsobnVsbEF0b20pOworICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKTsKIAogICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVGaWxsZWQgfHwgcHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVPcGVuKSB7Ci0gICAgICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKCpwcmltaXRpdmVWYWx1ZSk7Ci0g
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFRl
eHRFbXBoYXNpc01hcmtBdXRvKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRF
bXBoYXNpc0ZpbGwoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFya0F1dG8pOwogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lz
RmlsbChUZXh0RW1waGFzaXNGaWxsRmlsbGVkKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoVGV4dEVtcGhhc2lzRmlsbEZp
bGxlZCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKCpw
cmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE0MTUsMTQgKzE0MTgsMTgg
QEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHRlc3QoY29uc3QgQW5pbWF0aW9uKiBhbmltYXRp
b24pIHsgcmV0dXJuIChhbmltYXRpb24tPip0ZXN0RnVuY3Rpb24pKCk7IH0KICAgICBzdGF0aWMg
dm9pZCBjbGVhcihBbmltYXRpb24qIGFuaW1hdGlvbikgeyAoYW5pbWF0aW9uLT4qY2xlYXJGdW5j
dGlvbikoKTsgfQogICAgIHN0YXRpYyBUIGluaXRpYWwoKSB7IHJldHVybiAoKmluaXRpYWxGdW5j
dGlvbikoKTsgfQotICAgIHN0YXRpYyB2b2lkIG1hcChTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdHlsZVJlc29s
dmVyLT5zdHlsZU1hcCgpLT4qbWFwRnVuY3Rpb24pKGFuaW1hdGlvbiwgdmFsdWUpOyB9CisgICAg
c3RhdGljIHZvaWQgbWFwKFJlc29sdmVTdGF0ZSYgc3RhdGUsIEFuaW1hdGlvbiogYW5pbWF0aW9u
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBDU1NUb1N0eWxlTWFwIHN0eWxlTWFw
KHN0YXRlKTsKKyAgICAgICAgKHN0eWxlTWFwLiptYXBGdW5jdGlvbikoYW5pbWF0aW9uLCB2YWx1
ZSk7CisgICAgfQogICAgIHN0YXRpYyBBbmltYXRpb25MaXN0KiBhY2Nlc3NBbmltYXRpb25zKFJl
bmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gKHN0eWxlLT4qYW5pbWF0aW9uR2V0dGVyRnVuY3Rp
b24pKCk7IH0KICAgICBzdGF0aWMgY29uc3QgQW5pbWF0aW9uTGlzdCogYW5pbWF0aW9ucyhSZW5k
ZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+KmltbXV0YWJsZUFuaW1hdGlvbkdldHRl
ckZ1bmN0aW9uKSgpOyB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUpCiAg
ICAgewotICAgICAgICBBbmltYXRpb25MaXN0KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9ucyhzdHls
ZVJlc29sdmVyLT5zdHlsZSgpKTsKLSAgICAgICAgY29uc3QgQW5pbWF0aW9uTGlzdCogcGFyZW50
TGlzdCA9IGFuaW1hdGlvbnMoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSk7CisgICAgICAg
IEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0YXRlLnN0eWxlKCkpOwor
ICAgICAgICBjb25zdCBBbmltYXRpb25MaXN0KiBwYXJlbnRMaXN0ID0gYW5pbWF0aW9ucyhzdGF0
ZS5wYXJlbnRTdHlsZSgpKTsKICAgICAgICAgc2l6ZV90IGkgPSAwLCBwYXJlbnRTaXplID0gcGFy
ZW50TGlzdCA/IHBhcmVudExpc3QtPnNpemUoKSA6IDA7CiAgICAgICAgIGZvciAoIDsgaSA8IHBh
cmVudFNpemUgJiYgdGVzdChwYXJlbnRMaXN0LT5hbmltYXRpb24oaSkpOyArK2kpIHsKICAgICAg
ICAgICAgIGlmIChsaXN0LT5zaXplKCkgPD0gaSkKQEAgLTE0MzYsOSArMTQ0Myw5IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIGNsZWFyKGxpc3QtPmFuaW1hdGlvbihpKSk7CiAgICAgfQogCi0gICAg
c3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlh
bFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAg
ICB7Ci0gICAgICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCkpOworICAgICAgICBBbmltYXRpb25MaXN0KiBsaXN0ID0gYWNjZXNz
QW5pbWF0aW9ucyhzdGF0ZS5zdHlsZSgpKTsKICAgICAgICAgaWYgKGxpc3QtPmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChBbmltYXRpb246OmNyZWF0ZSgpKTsKICAgICAgICAg
c2V0VmFsdWUobGlzdC0+YW5pbWF0aW9uKDApLCBpbml0aWFsKCkpOwpAQCAtMTQ0OCwyMiArMTQ1
NSwyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjbGVhcihsaXN0LT5hbmltYXRpb24oaSkpOwog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgIHsKLSAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1h
dGlvbnMoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSk7CisgICAgICAgIEFuaW1hdGlvbkxpc3QqIGxp
c3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0YXRlLnN0eWxlKCkpOwogICAgICAgICBzaXplX3QgY2hp
bGRJbmRleCA9IDA7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewogICAgICAg
ICAgICAgLyogV2FsayBlYWNoIHZhbHVlIGFuZCBwdXQgaXQgaW50byBhbiBhbmltYXRpb24sIGNy
ZWF0aW5nIG5ldyBhbmltYXRpb25zIGFzIG5lZWRlZC4gKi8KICAgICAgICAgICAgIGZvciAoQ1NT
VmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAoY2hpbGRJbmRleCA8PSBsaXN0LT5zaXplKCkpCiAgICAgICAg
ICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChBbmltYXRpb246OmNyZWF0ZSgpKTsKLSAgICAgICAg
ICAgICAgICBtYXAoc3R5bGVSZXNvbHZlciwgbGlzdC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCBp
LnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1hcChzdGF0ZSwgbGlzdC0+YW5pbWF0aW9uKGNo
aWxkSW5kZXgpLCBpLnZhbHVlKCkpOwogICAgICAgICAgICAgICAgICsrY2hpbGRJbmRleDsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChsaXN0LT5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkp
OwotICAgICAgICAgICAgbWFwKHN0eWxlUmVzb2x2ZXIsIGxpc3QtPmFuaW1hdGlvbihjaGlsZElu
ZGV4KSwgdmFsdWUpOworICAgICAgICAgICAgbWFwKHN0YXRlLCBsaXN0LT5hbmltYXRpb24oY2hp
bGRJbmRleCksIHZhbHVlKTsKICAgICAgICAgICAgIGNoaWxkSW5kZXggPSAxOwogICAgICAgICB9
CiAgICAgICAgIGZvciAoIDsgY2hpbGRJbmRleCA8IGxpc3QtPnNpemUoKTsgKytjaGlsZEluZGV4
KSB7CkBAIC0xNDc3LDIyICsxNDg0LDIyIEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0
eU91dGxpbmVTdHlsZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlE
ZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0
bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91
dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46OmFw
cGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBBcHBs
eVByb3BlcnR5RGVmYXVsdEJhc2U8RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVT
dHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZSwgRUJvcmRl
clN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46OmFwcGx5SW5oZXJpdFZh
bHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBBcHBseVByb3BlcnR5RGVm
YXVsdEJhc2U8T3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGVJc0F1dG8s
IE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRvLCBPdXRs
aW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8+OjphcHBs
eUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIEFwcGx5UHJvcGVydHlE
ZWZhdWx0QmFzZTxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9y
ZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZS
ZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVy
dHlJRCwgc3RhdGUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikK
KyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBBcHBseVByb3BlcnR5RGVm
YXVsdEJhc2U8T3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGVJc0F1dG8s
IE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRvLCBPdXRs
aW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8+OjphcHBs
eUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgQXBwbHlQ
cm9wZXJ0eURlZmF1bHRCYXNlPEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5
bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGUsIEVCb3JkZXJT
dHlsZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyU3R5bGU+OjphcHBseUluaXRpYWxWYWx1
ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1
bHRCYXNlPE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlSXNBdXRvLCBP
dXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGlu
ZUlzQXV0bywgJlJlbmRlclN0eWxlOjppbml0aWFsT3V0bGluZVN0eWxlSXNBdXRvPjo6YXBwbHlJ
bml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVm
YXVsdEJhc2U8RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZSwgRUJvcmRl
clN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVu
ZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5
SUQsIHN0YXRlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAg
ICBBcHBseVByb3BlcnR5RGVmYXVsdDxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxp
bmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5
bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHls
ZUlzQXV0bz46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwot
ICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6
b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxl
LCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlW
YWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgICAgIEFwcGx5UHJv
cGVydHlEZWZhdWx0PE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlSXNB
dXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZUlzQXV0bywg
T3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjppbml0aWFsT3V0bGluZVN0eWxlSXNBdXRvPjo6
YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBBcHBseVByb3Bl
cnR5RGVmYXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9y
ZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZS
ZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBz
dGF0ZSwgdmFsdWUpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRl
SGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZh
cHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBAIC0xNTAwLDcgKzE1MDcsNyBAQCBw
dWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlSZXNpemUgewogcHVibGljOgotICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMTUxMiwxMyArMTUxOSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgMDoKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBDU1NWYWx1ZUF1dG86Ci0gICAgICAgICAgICBp
ZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKS0+c2V0dGlu
Z3MoKSkKKyAgICAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBzdGF0ZS5kb2N1bWVu
dCgpLT5zZXR0aW5ncygpKQogICAgICAgICAgICAgICAgIHIgPSBzZXR0aW5ncy0+dGV4dEFyZWFz
QXJlUmVzaXphYmxlKCkgPyBSRVNJWkVfQk9USCA6IFJFU0laRV9OT05FOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByID0gKnByaW1pdGl2ZVZhbHVl
OwogICAgICAgICB9Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFJlc2l6ZShy
KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UmVzaXplKHIpOwogICAgIH0KIAogICAgIHN0
YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC0xNTMwLDcgKzE1MzcsNyBA
QCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlWZXJ0aWNhbEFsaWduIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZh
bHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTE1MzgsOSArMTU0NSw5IEBAIHB1YmxpYzoKICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWx1ZSk7CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKQot
ICAgICAgICAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFZlcnRpY2FsQWxp
Z24oKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZS5zdHlsZSgpLT5z
ZXRWZXJ0aWNhbEFsaWduKCpwcmltaXRpdmVWYWx1ZSk7CiAKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbkxlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29udmVy
dFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENh
bGN1bGF0ZWRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4oc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKTsKKyAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0VmVydGljYWxBbGlnbkxlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVu
Z3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0
ZWRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4oc3RhdGUuc3R5bGUo
KSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29t
KCkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIo
KQpAQCAtMTU1MiwzMiArMTU1OSwzMiBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlB
c3BlY3RSYXRpbyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMg
dm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRl
KQogICAgIHsKLSAgICAgICAgaWYgKCFzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5oYXNB
c3BlY3RSYXRpbygpKQorICAgICAgICBpZiAoIXN0YXRlLnBhcmVudFN0eWxlKCktPmhhc0FzcGVj
dFJhdGlvKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKHRydWUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0
eWxlKCktPmFzcGVjdFJhdGlvRGVub21pbmF0b3IoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldEFzcGVjdFJhdGlvTnVtZXJhdG9yKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0
eWxlKCktPmFzcGVjdFJhdGlvTnVtZXJhdG9yKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRIYXNBc3BlY3RSYXRpbyh0cnVlKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0QXNwZWN0
UmF0aW9EZW5vbWluYXRvcihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb0Rlbm9taW5h
dG9yKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihz
dGF0ZS5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb051bWVyYXRvcigpKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENT
U1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyhSZW5kZXJTdHlsZTo6aW5pdGlhbEhh
c0FzcGVjdFJhdGlvKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3Bl
Y3RSYXRpb0Rlbm9taW5hdG9yKFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9EZW5vbWlu
YXRvcigpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9O
dW1lcmF0b3IoUmVuZGVyU3R5bGU6OmluaXRpYWxBc3BlY3RSYXRpb051bWVyYXRvcigpKTsKKyAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8oUmVuZGVyU3R5bGU6OmluaXRp
YWxIYXNBc3BlY3RSYXRpbygpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0QXNwZWN0UmF0
aW9EZW5vbWluYXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlvRGVub21pbmF0b3Io
KSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEFzcGVjdFJhdGlvTnVtZXJhdG9yKFJlbmRl
clN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9OdW1lcmF0b3IoKSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewog
ICAgICAgICBpZiAoIXZhbHVlLT5pc0FzcGVjdFJhdGlvVmFsdWUoKSkgewotICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8oZmFsc2UpOworICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8oZmFsc2UpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIENTU0FzcGVjdFJhdGlvVmFsdWUqIGFzcGVj
dFJhdGlvVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NBc3BlY3RSYXRpb1ZhbHVlKj4odmFsdWUpOwot
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0cnVlKTsK
LSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRv
cihhc3BlY3RSYXRpb1ZhbHVlLT5kZW5vbWluYXRvclZhbHVlKCkpOwotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihhc3BlY3RSYXRpb1ZhbHVl
LT5udW1lcmF0b3JWYWx1ZSgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQXNwZWN0
UmF0aW8odHJ1ZSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEFzcGVjdFJhdGlvRGVub21p
bmF0b3IoYXNwZWN0UmF0aW9WYWx1ZS0+ZGVub21pbmF0b3JWYWx1ZSgpKTsKKyAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3IoYXNwZWN0UmF0aW9WYWx1ZS0+bnVt
ZXJhdG9yVmFsdWUoKSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVh
dGVIYW5kbGVyKCkKQEAgLTE1ODgsNDggKzE1OTUsNDggQEAgcHVibGljOgogCiBjbGFzcyBBcHBs
eVByb3BlcnR5Wm9vbSB7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHJlc2V0RWZmZWN0aXZl
Wm9vbShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIHJlc2V0
RWZmZWN0aXZlWm9vbShSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKICAgICAgICAgLy8gUmVz
ZXQgdGhlIHpvb20gaW4gZWZmZWN0LiBUaGlzIGFsbG93cyB0aGUgc2V0Wm9vbSBtZXRob2QgdG8g
YWNjdXJhdGVseSBjb21wdXRlIGEgbmV3IHpvb20gaW4gZWZmZWN0LgotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkgPyBz
dHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5lZmZlY3RpdmVab29tKCkgOiBSZW5kZXJTdHls
ZTo6aW5pdGlhbFpvb20oKSk7CisgICAgICAgIHN0YXRlLnNldEVmZmVjdGl2ZVpvb20oc3RhdGUu
cGFyZW50U3R5bGUoKSA/IHN0YXRlLnBhcmVudFN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSA6IFJl
bmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKICAgICB9CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMg
dm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5
SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICByZXNldEVmZmVjdGl2ZVpv
b20oc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oc3R5bGVS
ZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+em9vbSgpKTsKKyAgICAgICAgcmVzZXRFZmZlY3RpdmVa
b29tKHN0YXRlKTsKKyAgICAgICAgc3RhdGUuc2V0Wm9vbShzdGF0ZS5wYXJlbnRTdHlsZSgpLT56
b29tKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAg
ICB7Ci0gICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKLSAgICAgICAg
c3R5bGVSZXNvbHZlci0+c2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAg
ICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdGF0ZSk7CisgICAgICAgIHN0YXRlLnNldFpvb20oUmVu
ZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFs
dWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVz
b2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJU
KHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsK
IAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3Jt
YWwpIHsKLSAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKLSAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29t
KCkpOworICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0YXRlKTsKKyAgICAgICAgICAg
IHN0YXRlLnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwogICAgICAgICB9IGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlUmVzZXQpIHsKLSAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEVmZmVjdGl2ZVpvb20oUmVuZGVyU3R5bGU6Omlu
aXRpYWxab29tKCkpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9vbShSZW5kZXJT
dHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAgICAgICAgICBzdGF0ZS5zZXRFZmZlY3RpdmVab29t
KFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICAgICAgICAgIHN0YXRlLnNldFpvb20o
UmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRG9jdW1lbnQpIHsKLSAgICAgICAgICAgIGZs
b2F0IGRvY1pvb20gPSBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkgPyBzdHlsZVJl
c29sdmVyLT5yb290RWxlbWVudFN0eWxlKCktPnpvb20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFs
Wm9vbSgpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0RWZmZWN0aXZlWm9vbShkb2Na
b29tKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oZG9jWm9vbSk7CisgICAg
ICAgICAgICBmbG9hdCBkb2Nab29tID0gc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpID8gc3RhdGUu
cm9vdEVsZW1lbnRTdHlsZSgpLT56b29tKCkgOiBSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKTsK
KyAgICAgICAgICAgIHN0YXRlLnNldEVmZmVjdGl2ZVpvb20oZG9jWm9vbSk7CisgICAgICAgICAg
ICBzdGF0ZS5zZXRab29tKGRvY1pvb20pOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc1BlcmNlbnRhZ2UoKSkgewotICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0
eWxlUmVzb2x2ZXIpOworICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0YXRlKTsKICAg
ICAgICAgICAgIGlmIChmbG9hdCBwZXJjZW50ID0gcHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFs
dWUoKSkKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKHBlcmNlbnQgLyAx
MDAuMGYpOworICAgICAgICAgICAgICAgIHN0YXRlLnNldFpvb20ocGVyY2VudCAvIDEwMC4wZik7
CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIHsKLSAgICAg
ICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgICAgIHJl
c2V0RWZmZWN0aXZlWm9vbShzdGF0ZSk7CiAgICAgICAgICAgICBpZiAoZmxvYXQgbnVtYmVyID0g
cHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSkKLSAgICAgICAgICAgICAgICBzdHlsZVJl
c29sdmVyLT5zZXRab29tKG51bWJlcik7CisgICAgICAgICAgICAgICAgc3RhdGUuc2V0Wm9vbShu
dW1iZXIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNjQxLDQyICsxNjQ4LDQyIEBAIHB1Ymxp
YzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eURpc3BsYXkgewogcHJpdmF0ZToKLSAgICBzdGF0aWMg
aW5saW5lIGJvb2wgaXNWYWxpZERpc3BsYXlWYWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBFRGlzcGxheSBkaXNwbGF5UHJvcGVydHlWYWx1ZSkKKyAgICBzdGF0aWMgaW5saW5lIGJv
b2wgaXNWYWxpZERpc3BsYXlWYWx1ZShSZXNvbHZlU3RhdGUmIHN0YXRlLCBFRGlzcGxheSBkaXNw
bGF5UHJvcGVydHlWYWx1ZSkKICAgICB7CiAjaWYgRU5BQkxFKFNWRykKLSAgICAgICAgaWYgKHN0
eWxlUmVzb2x2ZXItPmVsZW1lbnQoKSAmJiBzdHlsZVJlc29sdmVyLT5lbGVtZW50KCktPmlzU1ZH
RWxlbWVudCgpICYmIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnN0eWxlVHlwZSgpID09IE5PUFNF
VURPKQorICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpICYmIHN0YXRlLmVsZW1lbnQoKS0+aXNT
VkdFbGVtZW50KCkgJiYgc3RhdGUuc3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCiAg
ICAgICAgICAgICByZXR1cm4gKGRpc3BsYXlQcm9wZXJ0eVZhbHVlID09IElOTElORSB8fCBkaXNw
bGF5UHJvcGVydHlWYWx1ZSA9PSBCTE9DSyB8fCBkaXNwbGF5UHJvcGVydHlWYWx1ZSA9PSBOT05F
KTsKICNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShzdHlsZVJlc29sdmVyKTsKKyAgICAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICAgICAgVU5VU0VEX1BBUkFNKGRpc3BsYXlQcm9wZXJ0
eVZhbHVlKTsKICNlbmRpZgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShD
U1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgRURpc3Bs
YXkgZGlzcGxheSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmRpc3BsYXkoKTsKLSAg
ICAgICAgaWYgKCFpc1ZhbGlkRGlzcGxheVZhbHVlKHN0eWxlUmVzb2x2ZXIsIGRpc3BsYXkpKQor
ICAgICAgICBFRGlzcGxheSBkaXNwbGF5ID0gc3RhdGUucGFyZW50U3R5bGUoKS0+ZGlzcGxheSgp
OworICAgICAgICBpZiAoIWlzVmFsaWREaXNwbGF5VmFsdWUoc3RhdGUsIGRpc3BsYXkpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXREaXNw
bGF5KGRpc3BsYXkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREaXNwbGF5KGRpc3BsYXkp
OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJ
bml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0g
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldERpc3BsYXkoUmVuZGVyU3R5bGU6Omlu
aXRpYWxEaXNwbGF5KCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREaXNwbGF5KFJlbmRl
clN0eWxlOjppbml0aWFsRGlzcGxheSgpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFJl
c29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICgh
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICBFRGlzcGxheSBkaXNwbGF5ID0gKnN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
dWUpOwogCi0gICAgICAgIGlmICghaXNWYWxpZERpc3BsYXlWYWx1ZShzdHlsZVJlc29sdmVyLCBk
aXNwbGF5KSkKKyAgICAgICAgaWYgKCFpc1ZhbGlkRGlzcGxheVZhbHVlKHN0YXRlLCBkaXNwbGF5
KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXREaXNwbGF5KGRpc3BsYXkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREaXNwbGF5
KGRpc3BsYXkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFu
ZGxlcigpCkBAIC0xNjg5LDIxICsxNjk2LDIxIEBAIHRlbXBsYXRlIDxDbGlwUGF0aE9wZXJhdGlv
biogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlCiBj
bGFzcyBBcHBseVByb3BlcnR5Q2xpcFBhdGggewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNl
dFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgUGFzc1JlZlB0cjxDbGlwUGF0aE9wZXJhdGlvbj4g
dmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAg
ICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odmFsdWUpOwogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLCAwKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCAwKTsK
ICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1NoYXBlKCkpIHsKLSAgICAg
ICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBTaGFwZUNsaXBQYXRo
T3BlcmF0aW9uOjpjcmVhdGUoYmFzaWNTaGFwZUZvclZhbHVlKHN0eWxlUmVzb2x2ZXIsIHByaW1p
dGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUo
c3RhdGUuc3R5bGUoKSwgU2hhcGVDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGJhc2ljU2hhcGVG
b3JWYWx1ZShzdGF0ZSwgcHJpbWl0aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUoKSkpKTsKICAgICAg
ICAgICAgIH0KICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZl
VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewog
ICAgICAgICAgICAgICAgIFN0cmluZyBjc3NVUkxWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLT5nZXRT
dHJpbmdWYWx1ZSgpOwotICAgICAgICAgICAgICAgIEtVUkwgdXJsID0gc3R5bGVSZXNvbHZlci0+
ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoY3NzVVJMVmFsdWUpOworICAgICAgICAgICAgICAgIEtV
UkwgdXJsID0gc3RhdGUuZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoY3NzVVJMVmFsdWUpOwogICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCBkb2Vzbid0IHdvcmsgd2l0aCBmb3J3YXJkIG9yIGV4
dGVybmFsIFNWRyByZWZlcmVuY2VzIChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTkwNDA1KQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCksIFJlZmVyZW5jZUNsaXBQYXRoT3BlcmF0aW9uOjpjcmVhdGUoY3NzVVJMVmFsdWUs
IHVybC5mcmFnbWVudElkZW50aWZpZXIoKSkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0
YXRlLnN0eWxlKCksIFJlZmVyZW5jZUNsaXBQYXRoT3BlcmF0aW9uOjpjcmVhdGUoY3NzVVJMVmFs
dWUsIHVybC5mcmFnbWVudElkZW50aWZpZXIoKSkpOwogICAgICAgICAgICAgfQogI2VuZGlmCiAg
ICAgICAgIH0KQEAgLTE3MjAsMTggKzE3MjcsMTggQEAgdGVtcGxhdGUgPEV4Y2x1c2lvblNoYXBl
VmFsdWUqIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW4K
IGNsYXNzIEFwcGx5UHJvcGVydHlFeGNsdXNpb25TaGFwZSB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBQYXNzUmVmUHRyPEV4Y2x1c2lvblNo
YXBlVmFsdWU+IHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CiAgICAgICAgICAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgMCk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5
bGUoKSwgMCk7CiAgICAgICAgICAgICAvLyBGSVhNRSBCdWcgMTAyNTcxOiBMYXlvdXQgZm9yIHRo
ZSB2YWx1ZSAnb3V0c2lkZS1zaGFwZScgaXMgbm90IHlldCBpbXBsZW1lbnRlZAogICAgICAgICAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVPdXRzaWRl
U2hhcGUpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
RXhjbHVzaW9uU2hhcGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKCkpOworICAgICAgICAgICAg
ICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0ZU91
dHNpZGVWYWx1ZSgpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1No
YXBlKCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gc2hh
cGUgPSBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZhbHVlKGJhc2ljU2hhcGVGb3JW
YWx1ZShzdHlsZVJlc29sdmVyLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVWYWx1ZSgpKSk7Ci0g
ICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc2hhcGUucmVs
ZWFzZSgpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gc2hh
cGUgPSBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZhbHVlKGJhc2ljU2hhcGVGb3JW
YWx1ZShzdGF0ZSwgcHJpbWl0aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUoKSkpOworICAgICAgICAg
ICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIHNoYXBlLnJlbGVhc2UoKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xNzQ2LDIxICsxNzUzLDIxIEBAIHB1YmxpYzoK
ICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1JFU09MVVRJT04pCiBjbGFzcyBBcHBseVByb3BlcnR5SW1h
Z2VSZXNvbHV0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIp
CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURl
ZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29s
dXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRJbWFn
ZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjpp
bml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJ
RCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFn
ZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdl
UmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU25hcCwgSW1h
Z2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU25h
cD46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAg
ICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8ZmxvYXQsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNv
bHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb24sIGZsb2F0LCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24+OjphcHBseUluaGVyaXRWYWx1ZShw
cm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRC
YXNlPEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25T
b3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29s
dXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbml0aWFs
SW1hZ2VSZXNvbHV0aW9uU291cmNlPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3Rh
dGUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU25h
cCwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFw
LCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNu
YXAsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNuYXA+OjphcHBseUluaGVy
aXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0
QmFzZTxmbG9hdCwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVy
U3R5bGU6OnNldEltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbElt
YWdlUmVzb2x1dGlvbj46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUm
IHN0YXRlKQogICAgIHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVz
b2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdl
UmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25Tb3VyY2Us
IEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0
aW9uU291cmNlPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7
Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25TbmFwLCAm
UmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZS
ZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwg
JlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU25hcD46OmFwcGx5SW5pdGlhbFZh
bHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVm
YXVsdEJhc2U8ZmxvYXQsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJl
bmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OmluaXRp
YWxJbWFnZVJlc29sdXRpb24+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJl
c29sdmVyKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlv
blNvdXJjZSwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1
dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdl
UmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291
cmNlPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBBcHBs
eVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjpp
bWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OnNl
dEltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbEltYWdlUmVzb2x1dGlvblNuYXA+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlE
LCBzdGF0ZSk7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxmbG9hdCwgJlJlbmRl
clN0eWxlOjppbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVz
b2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvbj46OmFw
cGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3Bl
cnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0x
NzgwLDkgKzE3ODcsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgcmVzb2x1dGlvbiA9IHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0RQUFgpOwogICAgICAgICB9Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldEltYWdlUmVzb2x1dGlvblNvdXJjZShzb3VyY2UpOwotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25TbmFwKHNuYXApOwotICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb24ocmVzb2x1dGlvbik7Cisg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvblNvdXJjZShzb3VyY2UpOwor
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25TbmFwKHNuYXApOworICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb24ocmVzb2x1dGlvbik7CiAgICAg
fQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZUJ1aWxkZXIuaAppbmRleCA0ZmZlODUyMzRjMTNkMGZiYjE0NDZlMDY4ODFjOWY3ZmVm
YzcwNjdiLi5hNWM2MmUxNGU3MGM5NmQwMjM3Y2QzY2EzNjE0MGMzZWY5ODdmM2IyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlQnVpbGRlci5oCkBAIC0zMiwxOSArMzIsMjAgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQ1NTVmFsdWU7CitjbGFzcyBSZXNvbHZlU3RhdGU7CiBjbGFzcyBTdHls
ZUJ1aWxkZXI7CiBjbGFzcyBTdHlsZVJlc29sdmVyOwogCiBjbGFzcyBQcm9wZXJ0eUhhbmRsZXIg
ewogcHVibGljOgotICAgIHR5cGVkZWYgdm9pZCAoKkluaGVyaXRGdW5jdGlvbikoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciopOwotICAgIHR5cGVkZWYgdm9pZCAoKkluaXRpYWxGdW5jdGlv
bikoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciopOwotICAgIHR5cGVkZWYgdm9pZCAoKkFw
cGx5RnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqLCBDU1NWYWx1ZSopOwor
ICAgIHR5cGVkZWYgdm9pZCAoKkluaGVyaXRGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwgUmVzb2x2
ZVN0YXRlJik7CisgICAgdHlwZWRlZiB2b2lkICgqSW5pdGlhbEZ1bmN0aW9uKShDU1NQcm9wZXJ0
eUlELCBSZXNvbHZlU3RhdGUmKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpBcHBseUZ1bmN0aW9uKShD
U1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmLCBDU1NWYWx1ZSopOwogICAgIFByb3BlcnR5SGFu
ZGxlcigpIDogbV9pbmhlcml0KDApLCBtX2luaXRpYWwoMCksIG1fYXBwbHkoMCkgeyB9CiAgICAg
UHJvcGVydHlIYW5kbGVyKEluaGVyaXRGdW5jdGlvbiBpbmhlcml0LCBJbml0aWFsRnVuY3Rpb24g
aW5pdGlhbCwgQXBwbHlGdW5jdGlvbiBhcHBseSkgOiBtX2luaGVyaXQoaW5oZXJpdCksIG1faW5p
dGlhbChpbml0aWFsKSwgbV9hcHBseShhcHBseSkgeyB9Ci0gICAgdm9pZCBhcHBseUluaGVyaXRW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIpIGNvbnN0IHsgQVNTRVJUKG1faW5oZXJpdCk7ICgqbV9pbmhlcml0KShwcm9wZXJ0eUlELCBz
dHlsZVJlc29sdmVyKTsgfQotICAgIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKSBjb25zdCB7IEFTU0VS
VChtX2luaXRpYWwpOyAoKm1faW5pdGlhbCkocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7IH0K
LSAgICB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpIGNvbnN0IHsgQVNTRVJUKG1fYXBw
bHkpOyAoKm1fYXBwbHkpKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsgfQorICAg
IHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBSZXNvbHZl
U3RhdGUmIHN0YXRlKSBjb25zdCB7IEFTU0VSVChtX2luaGVyaXQpOyAoKm1faW5oZXJpdCkocHJv
cGVydHlJRCwgc3RhdGUpOyB9CisgICAgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUpIGNvbnN0IHsgQVNTRVJUKG1faW5p
dGlhbCk7ICgqbV9pbml0aWFsKShwcm9wZXJ0eUlELCBzdGF0ZSk7IH0KKyAgICB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NW
YWx1ZSogdmFsdWUpIGNvbnN0IHsgQVNTRVJUKG1fYXBwbHkpOyAoKm1fYXBwbHkpKHByb3BlcnR5
SUQsIHN0YXRlLCB2YWx1ZSk7IH0KICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBt
X2luaGVyaXQgJiYgbV9pbml0aWFsICYmIG1fYXBwbHk7IH0KICAgICBJbmhlcml0RnVuY3Rpb24g
aW5oZXJpdEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbmhlcml0OyB9CiAgICAgSW5pdGlh
bEZ1bmN0aW9uIGluaXRpYWxGdW5jdGlvbigpIHsgcmV0dXJuIG1faW5pdGlhbDsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IGIyNjNkODA2Yjg1OTU4NmM3YzE0Y2ZmMzFm
OTgwYTQzMjUyMzY1YmEuLjM2YjJiOGJlNTFlOWYyNWQzODRlMGUzMzI1YzY5MjMyODJiZTE1NmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTQ0LDcgKzQ0LDYgQEAKICNp
bmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1JlZmxlY3RWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1J1
bGVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NTZWxlY3Rv
ckxpc3QuaCIKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKQEAgLTEyMCw2ICsxMTksNyBAQAog
I2luY2x1ZGUgIlN0eWxlUnVsZUltcG9ydC5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50
cy5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCisjaW5jbHVkZSAiU3R5bGVkRWxlbWVu
dC5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IgogI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgpAQCAtMTk4LDE0ICsx
OTgsMTQgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogI2RlZmluZSBIQU5ETEVfSU5I
RVJJVChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJbmhlcml0KSB7IFwKLSAgICBtX3N0eWxlLT5zZXQj
I1Byb3AobV9wYXJlbnRTdHlsZS0+cHJvcCgpKTsgXAorICAgIHN0YXRlLnN0eWxlKCktPnNldCMj
UHJvcChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5wcm9wKCkpOyAgICAgIFwKICAgICByZXR1cm47IFwK
IH0KIAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChwcm9wLCBQcm9wKSBcCiBI
QU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJbml0aWFsKSB7IFwKLSAgICBtX3N0
eWxlLT5zZXQjI1Byb3AoUmVuZGVyU3R5bGU6OmluaXRpYWwjI1Byb3AoKSk7IFwKKyAgICBzdGF0
ZS5zdHlsZSgpLT5zZXQjI1Byb3AoUmVuZGVyU3R5bGU6OmluaXRpYWwjI1Byb3AoKSk7ICAgICBc
CiAgICAgcmV0dXJuOyBcCiB9CiAKQEAgLTI2NiwzNSArMjY2LDE1IEBAIHN0YXRpYyBTdHlsZVBy
b3BlcnR5U2V0KiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkKIAogCiBTdHlsZVJlc29sdmVyOjpT
dHlsZVJlc29sdmVyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJT
dHlsZXMpCi0gICAgOiBtX2hhc1VBQXBwZWFyYW5jZShmYWxzZSkKLSAgICAsIG1fYmFja2dyb3Vu
ZERhdGEoQmFja2dyb3VuZEZpbGxMYXllcikKLSAgICAsIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwKDApCisgICAgOiBtX21hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGVBZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCgwKQogICAgICwgbV9tYXRjaGVkUHJvcGVydGllc0Nh
Y2hlU3dlZXBUaW1lcih0aGlzLCAmU3R5bGVSZXNvbHZlcjo6c3dlZXBNYXRjaGVkUHJvcGVydGll
c0NhY2hlKQogICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKLSAgICAsIG1fc2VsZWN0b3JDaGVj
a2VyKGRvY3VtZW50KQotICAgICwgbV9wYXJlbnRTdHlsZSgwKQotICAgICwgbV9yb290RWxlbWVu
dFN0eWxlKDApCi0gICAgLCBtX2VsZW1lbnQoMCkKLSAgICAsIG1fc3R5bGVkRWxlbWVudCgwKQot
ICAgICwgbV9yZWdpb25Gb3JTdHlsaW5nKDApCi0gICAgLCBtX2VsZW1lbnRMaW5rU3RhdGUoTm90
SW5zaWRlTGluaykKLSAgICAsIG1fcGFyZW50Tm9kZSgwKQotICAgICwgbV9saW5lSGVpZ2h0VmFs
dWUoMCkKLSAgICAsIG1fZm9udERpcnR5KGZhbHNlKQogICAgICwgbV9tYXRjaEF1dGhvckFuZFVz
ZXJTdHlsZXMobWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICwgbV9zYW1lT3JpZ2luT25s
eShmYWxzZSkKLSAgICAsIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KGZhbHNlKQogICAg
ICwgbV9mb250U2VsZWN0b3IoQ1NTRm9udFNlbGVjdG9yOjpjcmVhdGUoZG9jdW1lbnQpKQogI2lm
IEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCiAgICAgLCBtX3ZpZXdwb3J0U3R5bGVSZXNv
bHZlcihWaWV3cG9ydFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZShkb2N1bWVudCkpCiAjZW5kaWYKLSAg
ICAsIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpCi0gICAgLCBtX2FwcGx5UHJv
cGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpCiAgICAgLCBtX3N0eWxlQnVpbGRlcihTdHls
ZUJ1aWxkZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpKQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykK
LSAgICAsIG1faGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1fc3R5bGVN
YXAodGhpcykKIHsKICAgICBFbGVtZW50KiByb290ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVu
dCgpOwogCkBAIC02NDgsMTAwICs2MjgsMTAyIEBAIGlubGluZSBib29sIE1hdGNoaW5nVUFSdWxl
c1Njb3BlOjppc01hdGNoaW5nVUFSdWxlcygpCiAKIGJvb2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6
Om1fbWF0Y2hpbmdVQVJ1bGVzID0gZmFsc2U7CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVj
dE1hdGNoaW5nUnVsZXMoY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSYW5n
ZSYgcnVsZVJhbmdlKQordm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhS
dWxlU2V0KiBydWxlU2V0LCBSZXNvbHZlU3RhdGUmIHN0YXRlLCBSdWxlUmFuZ2UmIHJ1bGVSYW5n
ZSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCiB7Ci0gICAgQVNTRVJUKG1hdGNoUmVxdWVz
dC5ydWxlU2V0KTsKLSAgICBBU1NFUlQobV9lbGVtZW50KTsKKyAgICBBU1NFUlQocnVsZVNldCk7
CisgICAgQVNTRVJUKHN0YXRlLmVsZW1lbnQoKSk7CiAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHBzZXVkb0lkID0gbV9lbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpOworICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBzdGF0ZS5lbGVtZW50KCk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwc2V1ZG9J
ZCA9IGVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCk7CiAgICAgaWYgKCFwc2V1ZG9JZC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgQVNTRVJUKG1fc3R5bGVkRWxlbWVudCk7Ci0gICAgICAgIGNvbGxlY3RN
YXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+c2hhZG93UHNldWRvRWxl
bWVudFJ1bGVzKHBzZXVkb0lkLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAg
ICAgICAgQVNTRVJUKGVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpKTsKKyAgICAgICAgY29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVTZXQtPnNoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyhw
c2V1ZG9JZC5pbXBsKCkpLCBzdGF0ZSwgcnVsZVJhbmdlLCBzY29wZSk7CiAgICAgfQogCiAjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQotICAgIGlmIChtX2VsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgp
ICYmIHRvV2ViVlRURWxlbWVudChtX2VsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpKQotICAgICAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmN1ZVBz
ZXVkb1J1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBpZiAoZWxlbWVudC0+
aXNXZWJWVFRFbGVtZW50KCkgJiYgdG9XZWJWVFRFbGVtZW50KGVsZW1lbnQpLT53ZWJWVFROb2Rl
VHlwZSgpKQorICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZVNldC0+Y3Vl
UHNldWRvUnVsZXMoKSwgc3RhdGUsIHJ1bGVSYW5nZSwgc2NvcGUpOwogI2VuZGlmCiAgICAgLy8g
Q2hlY2sgd2hldGhlciBvdGhlciB0eXBlcyBvZiBydWxlcyBhcmUgYXBwbGljYWJsZSBpbiB0aGUg
Y3VycmVudCB0cmVlIHNjb3BlLiBDcml0ZXJpYSBmb3IgdGhpczoKICAgICAvLyBhKSBpdCdzIGEg
VUEgcnVsZQogICAgIC8vIGIpIHRoZSB0cmVlIHNjb3BlIGFsbG93cyBhdXRob3IgcnVsZXMKICAg
ICAvLyBjKSB0aGUgcnVsZXMgY29tZXMgZnJvbSBhIHNjb3BlZCBzdHlsZSBzaGVldCB3aXRoaW4g
dGhlIHNhbWUgdHJlZSBzY29wZQotICAgIFRyZWVTY29wZSogdHJlZVNjb3BlID0gbV9lbGVtZW50
LT50cmVlU2NvcGUoKTsKKyAgICBUcmVlU2NvcGUqIHRyZWVTY29wZSA9IGVsZW1lbnQtPnRyZWVT
Y29wZSgpOwogICAgIGlmICghTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVz
KCkKICAgICAgICAgJiYgIXRyZWVTY29wZS0+YXBwbHlBdXRob3JTdHlsZXMoKQotICAgICAgICAm
JiAoIW1hdGNoUmVxdWVzdC5zY29wZSB8fCBtYXRjaFJlcXVlc3Quc2NvcGUtPnRyZWVTY29wZSgp
ICE9IHRyZWVTY29wZSkpCisgICAgICAgICYmICghc2NvcGUgfHwgc2NvcGUtPnRyZWVTY29wZSgp
ICE9IHRyZWVTY29wZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIG5lZWQgdG8gY29s
bGVjdCB0aGUgcnVsZXMgZm9yIGlkLCBjbGFzcywgdGFnLCBhbmQgZXZlcnl0aGluZyBlbHNlIGlu
dG8gYSBidWZmZXIgYW5kCiAgICAgLy8gdGhlbiBzb3J0IHRoZSBidWZmZXIuCi0gICAgaWYgKG1f
ZWxlbWVudC0+aGFzSUQoKSkKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1h
dGNoUmVxdWVzdC5ydWxlU2V0LT5pZFJ1bGVzKG1fZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRp
b24oKS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgaWYgKG1fc3R5bGVk
RWxlbWVudCAmJiBtX3N0eWxlZEVsZW1lbnQtPmhhc0NsYXNzKCkpIHsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3N0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKS5zaXplKCk7ICsr
aSkKLSAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3Qu
cnVsZVNldC0+Y2xhc3NSdWxlcyhtX3N0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKVtpXS5pbXBs
KCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkp
CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlU2V0LT5pZFJ1bGVzKGVs
ZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSwgc3RhdGUsIHJ1bGVSYW5nZSwg
c2NvcGUpOworICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgc3RhdGUuc3R5bGVkRWxl
bWVudCgpLT5oYXNDbGFzcygpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3Rh
dGUuc3R5bGVkRWxlbWVudCgpLT5jbGFzc05hbWVzKCkuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZVNldC0+Y2xhc3NSdWxlcyhzdGF0ZS5z
dHlsZWRFbGVtZW50KCktPmNsYXNzTmFtZXMoKVtpXS5pbXBsKCkpLCBzdGF0ZSwgcnVsZVJhbmdl
LCBzY29wZSk7CiAgICAgfQogCi0gICAgaWYgKG1fZWxlbWVudC0+aXNMaW5rKCkpCi0gICAgICAg
IGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+bGlua1Bz
ZXVkb0NsYXNzUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgIGlmIChtX3Nl
bGVjdG9yQ2hlY2tlci5tYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhtX2VsZW1lbnQpKQotICAgICAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmZvY3Vz
UHNldWRvQ2xhc3NSdWxlcygpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgY29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT50YWdSdWxlcyhtX2Vs
ZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPnVuaXZl
cnNhbFJ1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBpZiAoZWxlbWVudC0+
aXNMaW5rKCkpCisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlU2V0LT5s
aW5rUHNldWRvQ2xhc3NSdWxlcygpLCBzdGF0ZSwgcnVsZVJhbmdlLCBzY29wZSk7CisgICAgaWYg
KG1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKGVsZW1lbnQpKQorICAgICAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0Zvckxpc3QocnVsZVNldC0+Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCksIHN0YXRlLCBy
dWxlUmFuZ2UsIHNjb3BlKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZVNl
dC0+dGFnUnVsZXMoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgc3RhdGUsIHJ1bGVSYW5n
ZSwgc2NvcGUpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlU2V0LT51bml2
ZXJzYWxSdWxlcygpLCBzdGF0ZSwgcnVsZVJhbmdlLCBzY29wZSk7CiB9CiAKLXZvaWQgU3R5bGVS
ZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oY29uc3QgTWF0Y2hSZXF1ZXN0
JiBtYXRjaFJlcXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQordm9pZCBTdHlsZVJlc29sdmVy
Ojpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihSdWxlU2V0KiBydWxlU2V0LCBSZXNvbHZl
U3RhdGUmIHN0YXRlLCBSdWxlUmFuZ2UmIHJ1bGVSYW5nZSwgY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGUpCiB7Ci0gICAgaWYgKCFtX3JlZ2lvbkZvclN0eWxpbmcpCisgICAgaWYgKCFzdGF0ZS5y
ZWdpb25Gb3JTdHlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVuc2lnbmVkIHNpemUg
PSBtYXRjaFJlcXVlc3QucnVsZVNldC0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXpl
KCk7CisgICAgRWxlbWVudCogcmVnaW9uU3R5bGluZ0VsZW1lbnQgPSB0b0VsZW1lbnQoc3RhdGUu
cmVnaW9uRm9yU3R5bGluZygpLT5ub2RlKCkpOworICAgIHVuc2lnbmVkIHNpemUgPSBydWxlU2V0
LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IENTU1NlbGVjdG9yKiByZWdp
b25TZWxlY3RvciA9IG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1
bGVTZXRzLmF0KGkpLnNlbGVjdG9yOwotICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3Rvcihy
ZWdpb25TZWxlY3Rvciwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fcmVnaW9uRm9yU3R5bGluZy0+
bm9kZSgpKSkpIHsKLSAgICAgICAgICAgIFJ1bGVTZXQqIHJlZ2lvblJ1bGVzID0gbWF0Y2hSZXF1
ZXN0LnJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNldC5n
ZXQoKTsKKyAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yID0gcnVsZVNl
dC0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5zZWxlY3RvcjsKKyAgICAgICAg
aWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9uU2VsZWN0b3IsIHJlZ2lvblN0eWxpbmdFbGVt
ZW50KSkgeworICAgICAgICAgICAgUnVsZVNldCogcmVnaW9uUnVsZXMgPSBydWxlU2V0LT5tX3Jl
Z2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCk7CiAgICAgICAgICAg
ICBBU1NFUlQocmVnaW9uUnVsZXMpOwotICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMo
TWF0Y2hSZXF1ZXN0KHJlZ2lvblJ1bGVzLCBtYXRjaFJlcXVlc3QuaW5jbHVkZUVtcHR5UnVsZXMs
IG1hdGNoUmVxdWVzdC5zY29wZSksIHJ1bGVSYW5nZSk7CisgICAgICAgICAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlcyhyZWdpb25SdWxlcywgc3RhdGUsIHJ1bGVSYW5nZSwgc2NvcGUpOwogICAgICAg
ICB9CiAgICAgfQogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNo
ZWRSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQordm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5k
VHJhbnNmZXJNYXRjaGVkUnVsZXMoUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJl
c3VsdCkKIHsKLSAgICBpZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgIGlmIChzdGF0
ZS5tYXRjaGVkUnVsZXMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNvcnRN
YXRjaGVkUnVsZXMoKTsKKyAgICBzb3J0TWF0Y2hlZFJ1bGVzKHN0YXRlLm1hdGNoZWRSdWxlcygp
KTsKIAotICAgIGlmIChtX3NlbGVjdG9yQ2hlY2tlci5tb2RlKCkgPT0gU2VsZWN0b3JDaGVja2Vy
OjpDb2xsZWN0aW5nUnVsZXMpIHsKLSAgICAgICAgaWYgKCFtX3J1bGVMaXN0KQotICAgICAgICAg
ICAgbV9ydWxlTGlzdCA9IFN0YXRpY0NTU1J1bGVMaXN0OjpjcmVhdGUoKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgKytpKQotICAgICAg
ICAgICAgbV9ydWxlTGlzdC0+cnVsZXMoKS5hcHBlbmQobV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUo
KS0+Y3JlYXRlQ1NTT01XcmFwcGVyKCkpOworICAgIGlmIChzdGF0ZS5tb2RlKCkgPT0gU2VsZWN0
b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpIHsKKyAgICAgICAgLy8gU2hvdWxkIG1vdmUgcnVs
ZUxpc3QgZnJvbSBzdGF0ZSB0byByZXN1bHQ/CisgICAgICAgIFN0YXRpY0NTU1J1bGVMaXN0KiBy
dWxlTGlzdCA9IHN0YXRlLmVuc3VyZVJ1bGVMaXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzdGF0ZS5tYXRjaGVkUnVsZXMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
IHJ1bGVMaXN0LT5ydWxlcygpLmFwcGVuZChzdGF0ZS5tYXRjaGVkUnVsZUF0KGkpLT5ydWxlKCkt
PmNyZWF0ZUNTU09NV3JhcHBlcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8v
IE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0byBvdXIgbGlzdCBv
ZiBkZWNsYXJhdGlvbnMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1
bGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChtX3N0eWxlICYmIG1fbWF0Y2hlZFJ1bGVz
W2ldLT5jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAgICAgICAgICAgIG1f
c3R5bGUtPnNldFVuaXF1ZSgpOwotICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQs
IG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPnByb3BlcnRpZXMoKSwgbV9tYXRjaGVkUnVsZXNb
aV0tPnJ1bGUoKSwgbV9tYXRjaGVkUnVsZXNbaV0tPmxpbmtNYXRjaFR5cGUoKSwgbV9tYXRjaGVk
UnVsZXNbaV0tPnByb3BlcnR5V2hpdGVsaXN0VHlwZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc3RhdGUubWF0Y2hlZFJ1bGVzKCkuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYg
KHN0YXRlLnN0eWxlKCkgJiYgc3RhdGUubWF0Y2hlZFJ1bGVBdChpKS0+Y29udGFpbnNVbmNvbW1v
bkF0dHJpYnV0ZVNlbGVjdG9yKCkpCisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRVbmlx
dWUoKTsKKyAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCBzdGF0ZS5tYXRjaGVk
UnVsZUF0KGkpLT5ydWxlKCktPnByb3BlcnRpZXMoKSwgc3RhdGUubWF0Y2hlZFJ1bGVBdChpKS0+
cnVsZSgpLCBzdGF0ZS5tYXRjaGVkUnVsZUF0KGkpLT5saW5rTWF0Y2hUeXBlKCksIHN0YXRlLm1h
dGNoZWRSdWxlQXQoaSktPnByb3BlcnR5V2hpdGVsaXN0VHlwZSgpKTsKICAgICB9CiB9CiAKLXZv
aWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVz
dWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNj
b3BlZEF1dGhvclJ1bGVzKFJlc29sdmVTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQp
CiB7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkgfHwgRU5BQkxFKFNIQURPV19ET00pCiAgICAg
aWYgKCFtX3Njb3BlUmVzb2x2ZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE1hdGNoIHNj
b3BlZCBhdXRob3IgcnVsZXMgYnkgdHJhdmVyc2luZyB0aGUgc2NvcGVkIGVsZW1lbnQgc3RhY2sg
KHJlYnVpbGQgaXQgaWYgaXQgZ290IGluY29uc2lzdGVudCkuCi0gICAgaWYgKG1fc2NvcGVSZXNv
bHZlci0+aGFzU2NvcGVkU3R5bGVzKCkgJiYgbV9zY29wZVJlc29sdmVyLT5lbnN1cmVTdGFja0Nv
bnNpc3RlbmN5KG1fZWxlbWVudCkpIHsKLSAgICAgICAgYm9vbCBhcHBseUF1dGhvclN0eWxlcyA9
IG1fZWxlbWVudC0+dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9yU3R5bGVzKCk7CisgICAgaWYgKG1f
c2NvcGVSZXNvbHZlci0+aGFzU2NvcGVkU3R5bGVzKCkgJiYgbV9zY29wZVJlc29sdmVyLT5lbnN1
cmVTdGFja0NvbnNpc3RlbmN5KHN0YXRlLmVsZW1lbnQoKSkpIHsKKyAgICAgICAgYm9vbCBhcHBs
eUF1dGhvclN0eWxlcyA9IHN0YXRlLmVsZW1lbnQoKS0+dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9y
U3R5bGVzKCk7CiAgICAgICAgIGJvb2wgZG9jdW1lbnRTY29wZSA9IHRydWU7CiAgICAgICAgIHVu
c2lnbmVkIHNjb3BlU2l6ZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tTaXplKCk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzY29wZVNpemU7ICsraSkgewotICAgICAgICAgICAg
bV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIHN0YXRlLm1hdGNoZWRSdWxlcygp
LmNsZWFyKCk7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVz
dWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKICAgICAgICAgICAgIGNvbnN0IFN0
eWxlU2NvcGVSZXNvbHZlcjo6U3RhY2tGcmFtZSYgZnJhbWUgPSBtX3Njb3BlUmVzb2x2ZXItPnN0
YWNrRnJhbWVBdChpKTsKQEAgLTc1NCwxMzcgKzczNiwxMzEgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVk
ZUVtcHQKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QoZnJhbWUubV9ydWxlU2V0LCBpbmNs
dWRlRW1wdHlSdWxlcywgZnJhbWUubV9zY29wZSk7CiAgICAgICAgICAgICBSdWxlUmFuZ2UgcnVs
ZVJhbmdlID0gcmVzdWx0LnJhbmdlcy5hdXRob3JSdWxlUmFuZ2UoKTsKLSAgICAgICAgICAgIGNv
bGxlY3RNYXRjaGluZ1J1bGVzKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICAgICAgICAg
IGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsK
LSAgICAgICAgICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworICAgICAg
ICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoZnJhbWUubV9ydWxlU2V0LCBzdGF0ZSwgcnVsZVJh
bmdlLCBmcmFtZS5tX3Njb3BlKTsKKyAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9y
UmVnaW9uKGZyYW1lLm1fcnVsZVNldCwgc3RhdGUsIHJ1bGVSYW5nZSwgZnJhbWUubV9zY29wZSk7
CisgICAgICAgICAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoc3RhdGUsIHJlc3VsdCk7
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtYXRjaEhvc3RSdWxlcyhyZXN1bHQsIGluY2x1ZGVF
bXB0eVJ1bGVzKTsKKyAgICBtYXRjaEhvc3RSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKICNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKLSAgICBV
TlVTRURfUEFSQU0oaW5jbHVkZUVtcHR5UnVsZXMpOwogI2VuZGlmCiB9CiAKLWlubGluZSBib29s
IFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKQor
aW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hv
c3RSdWxlcyhFbGVtZW50KiBlbGVtZW50KQogewogI2lmIEVOQUJMRShTSEFET1dfRE9NKQotICAg
IHJldHVybiBtX3Njb3BlUmVzb2x2ZXIgJiYgbV9zY29wZVJlc29sdmVyLT5zdHlsZVNoYXJpbmdD
YW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKG1fZWxlbWVudCk7CisgICAgcmV0dXJuIG1fc2NvcGVS
ZXNvbHZlciAmJiBtX3Njb3BlUmVzb2x2ZXItPnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNI
b3N0UnVsZXMoZWxlbWVudCk7CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogfQog
Ci12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQs
IGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1
bGVzKFJlc29sdmVTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQpCiB7CiAjaWYgRU5B
QkxFKFNIQURPV19ET00pCiAgICAgQVNTRVJUKG1fc2NvcGVSZXNvbHZlcik7CiAKLSAgICBtX21h
dGNoZWRSdWxlcy5jbGVhcigpOworICAgIHN0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAg
ICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGll
cy5zaXplKCkgLSAxOwogCiAgICAgVmVjdG9yPFJ1bGVTZXQqPiBtYXRjaGVkUnVsZXM7Ci0gICAg
bV9zY29wZVJlc29sdmVyLT5tYXRjaEhvc3RSdWxlcyhtX2VsZW1lbnQsIG1hdGNoZWRSdWxlcyk7
CisgICAgbV9zY29wZVJlc29sdmVyLT5tYXRjaEhvc3RSdWxlcyhzdGF0ZS5lbGVtZW50KCksIG1h
dGNoZWRSdWxlcyk7CiAgICAgaWYgKG1hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGNoZWRSdWxlcy5zaXplKCk7IGkgPiAw
OyAtLWkpIHsKICAgICAgICAgUnVsZVJhbmdlIHJ1bGVSYW5nZSA9IHJlc3VsdC5yYW5nZXMuYXV0
aG9yUnVsZVJhbmdlKCk7Ci0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1hdGNoUmVxdWVz
dChtYXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5UnVsZXMsIG1fZWxlbWVudCksIHJ1
bGVSYW5nZSk7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1hdGNoZWRSdWxlcy5hdChp
LTEpLCBzdGF0ZSwgcnVsZVJhbmdlLCBzdGF0ZS5lbGVtZW50KCkpOwogICAgIH0KLSAgICBzb3J0
QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRj
aGVkUnVsZXMoc3RhdGUsIHJlc3VsdCk7CiAjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7Ci0gICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVFbXB0
eVJ1bGVzKTsKICNlbmRpZgogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVs
ZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3ZvaWQgU3R5
bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhSZXNvbHZlU3RhdGUmIHN0YXRlLCBNYXRjaFJl
c3VsdCYgcmVzdWx0KQogewotICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgc3RhdGUu
bWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxl
ID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKLSAgICBpZiAoIW1fZWxl
bWVudCkKKyAgICBpZiAoIXN0YXRlLmVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gTWF0Y2ggZ2xvYmFsIGF1dGhvciBydWxlcy4KLSAgICBNYXRjaFJlcXVlc3QgbWF0Y2hSZXF1
ZXN0KG1fYXV0aG9yU3R5bGUuZ2V0KCksIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBSdWxlUmFu
Z2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy5hdXRob3JSdWxlUmFuZ2UoKTsKLSAgICBjb2xs
ZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgY29sbGVjdE1h
dGNoaW5nUnVsZXNGb3JSZWdpb24obWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgIHNvcnRB
bmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
KG1fYXV0aG9yU3R5bGUuZ2V0KCksIHN0YXRlLCBydWxlUmFuZ2UpOworICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yUmVnaW9uKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHN0YXRlLCBydWxlUmFuZ2Up
OworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKIAotICAg
IG1hdGNoU2NvcGVkQXV0aG9yUnVsZXMocmVzdWx0LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAg
bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKIH0KIAotdm9pZCBTdHlsZVJl
c29sdmVyOjptYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVF
bXB0eVJ1bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVzZXJSdWxlcyhSZXNvbHZlU3Rh
dGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0KQogewogICAgIGlmICghbV91c2VyU3R5bGUp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworICAg
IHN0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAKICAgICByZXN1bHQucmFuZ2VzLmxhc3RV
c2VyUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwotICAgIE1hdGNo
UmVxdWVzdCBtYXRjaFJlcXVlc3QobV91c2VyU3R5bGUuZ2V0KCksIGluY2x1ZGVFbXB0eVJ1bGVz
KTsKICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy51c2VyUnVsZVJhbmdl
KCk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwot
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdl
KTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtX3VzZXJTdHlsZS5nZXQoKSwgc3RhdGUsIHJ1
bGVSYW5nZSk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obV91c2VyU3R5bGUu
Z2V0KCksIHN0YXRlLCBydWxlUmFuZ2UpOwogCi0gICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1
bGVzKHJlc3VsdCk7CisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHN0YXRlLCByZXN1
bHQpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYg
cmVzdWx0LCBSdWxlU2V0KiBydWxlcykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVz
KFJlc29sdmVTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQsIFJ1bGVTZXQqIHJ1bGVz
KQogewotICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgc3RhdGUubWF0Y2hlZFJ1bGVz
KCkuY2xlYXIoKTsKICAgICAKICAgICByZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUgPSByZXN1bHQu
bWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0g
cmVzdWx0LnJhbmdlcy5VQVJ1bGVSYW5nZSgpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1h
dGNoUmVxdWVzdChydWxlcyksIHJ1bGVSYW5nZSk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMo
cnVsZXMsIHN0YXRlLCBydWxlUmFuZ2UpOwogCi0gICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1
bGVzKHJlc3VsdCk7CisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHN0YXRlLCByZXN1
bHQpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlz
dChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRj
aFJlcXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQordm9pZCBTdHlsZVJlc29sdmVyOjpjb2xs
ZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIFJl
c29sdmVTdGF0ZSYgc3RhdGUsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlLCBjb25zdCBDb250YWluZXJO
b2RlKiBzY29wZSkKIHsKICAgICBpZiAoIXJ1bGVzKQogICAgICAgICByZXR1cm47CiAKLSAgICAv
LyBJbiBzb21lIGNhc2VzIHdlIG1heSBlbmQgdXAgbG9va2luZyB1cCBzdHlsZSBmb3IgcmFuZG9t
IGVsZW1lbnRzIGluIHRoZSBtaWRkbGUgb2YgYSByZWN1cnNpdmUgdHJlZSByZXNvbHZlLgotICAg
IC8vIEFuY2VzdG9yIGlkZW50aWZpZXIgZmlsdGVyIHdvbid0IGJlIHVwLXRvLWRhdGUgaW4gdGhh
dCBjYXNlIGFuZCB3ZSBjYW4ndCB1c2UgdGhlIGZhc3QgcGF0aC4KLSAgICBib29sIGNhblVzZUZh
c3RSZWplY3QgPSBtX3NlbGVjdG9yRmlsdGVyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KG1fcGFy
ZW50Tm9kZSk7Ci0KICAgICB1bnNpZ25lZCBzaXplID0gcnVsZXMtPnNpemUoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGNvbnN0IFJ1bGVEYXRh
JiBydWxlRGF0YSA9IHJ1bGVzLT5hdChpKTsKLSAgICAgICAgaWYgKGNhblVzZUZhc3RSZWplY3Qg
JiYgbV9zZWxlY3RvckZpbHRlci5mYXN0UmVqZWN0U2VsZWN0b3I8UnVsZURhdGE6Om1heGltdW1J
ZGVudGlmaWVyQ291bnQ+KHJ1bGVEYXRhLmRlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNo
ZXMoKSkpCisgICAgICAgIGlmIChzdGF0ZS5jYW5Vc2VGYXN0UmVqZWN0KCkgJiYgbV9zZWxlY3Rv
ckZpbHRlci5mYXN0UmVqZWN0U2VsZWN0b3I8UnVsZURhdGE6Om1heGltdW1JZGVudGlmaWVyQ291
bnQ+KHJ1bGVEYXRhLmRlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoKSkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBTdHlsZVJ1bGUqIHJ1bGUgPSBydWxlRGF0YS5y
dWxlKCk7CiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxNYXRjaFJ1bGUoZG9jdW1lbnQoKSwgcnVsZSwg
dGhpcyk7Ci0gICAgICAgIGlmIChydWxlTWF0Y2hlcyhydWxlRGF0YSwgbWF0Y2hSZXF1ZXN0LnNj
b3BlKSkgeworICAgICAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAg
ICAgIGlmIChydWxlTWF0Y2hlcyhzdGF0ZSwgcnVsZURhdGEsIHNjb3BlLCBkeW5hbWljUHNldWRv
KSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRpZXMgdG8gYXBw
bHksIHRoZW4gaWdub3JlIGl0IGluIHRoZSBub24tZGVidWcgbW9kZS4KICAgICAgICAgICAgIGNv
bnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMgPSBydWxlLT5wcm9wZXJ0aWVzKCk7Ci0g
ICAgICAgICAgICBpZiAoIXByb3BlcnRpZXMgfHwgKHByb3BlcnRpZXMtPmlzRW1wdHkoKSAmJiAh
bWF0Y2hSZXF1ZXN0LmluY2x1ZGVFbXB0eVJ1bGVzKSkgeworICAgICAgICAgICAgaWYgKCFwcm9w
ZXJ0aWVzIHx8IChwcm9wZXJ0aWVzLT5pc0VtcHR5KCkgJiYgIXN0YXRlLmluY2x1ZGVFbXB0eVJ1
bGVzKCkpKSB7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRN
YXRjaFJ1bGUoY29va2llLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAvLyBGSVhNRTogRXhwb3NpbmcgdGhlIG5vbi1zdGFuZGFy
ZCBnZXRNYXRjaGVkQ1NTUnVsZXMgQVBJIHRvIHdlYiBpcyB0aGUgb25seSByZWFzb24gdGhpcyBp
cyBuZWVkZWQuCi0gICAgICAgICAgICBpZiAobV9zYW1lT3JpZ2luT25seSAmJiAhcnVsZURhdGEu
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUuc2Ft
ZU9yaWdpbk9ubHkoKSAmJiAhcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSB7
CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUo
Y29va2llLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBtYXRjaGluZyBub3JtYWwgcnVsZXMsIHNldCBhIHBz
ZXVkbyBiaXQgaWYKICAgICAgICAgICAgIC8vIHdlIHJlYWxseSBqdXN0IG1hdGNoZWQgYSBwc2V1
ZG8tZWxlbWVudC4KLSAgICAgICAgICAgIGlmIChtX2R5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8g
JiYgbV9wc2V1ZG9TdHlsZSA9PSBOT1BTRVVETykgewotICAgICAgICAgICAgICAgIGlmIChtX3Nl
bGVjdG9yQ2hlY2tlci5tb2RlKCkgPT0gU2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMp
IHsKKyAgICAgICAgICAgIGlmIChkeW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIHN0YXRlLnBz
ZXVkb1N0eWxlKCkgPT0gTk9QU0VVRE8pIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUubW9k
ZSgpID09IFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7CiAgICAgICAgICAgICAg
ICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFs
c2UpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaWYgKG1fZHluYW1pY1BzZXVkbyA8IEZJUlNUX0lOVEVSTkFMX1BTRVVE
T0lEKQotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZShtX2R5
bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgICAgIGlmIChkeW5hbWljUHNldWRvIDwgRklSU1Rf
SU5URVJOQUxfUFNFVURPSUQpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dEhhc1BzZXVkb1N0eWxlKGR5bmFtaWNQc2V1ZG8pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAvLyBVcGRhdGUgb3VyIGZpcnN0L2xhc3QgcnVsZSBpbmRpY2VzIGluIHRo
ZSBtYXRjaGVkIHJ1bGVzIGFycmF5LgogICAgICAgICAgICAgICAgICsrcnVsZVJhbmdlLmxhc3RS
dWxlSW5kZXg7CkBAIC04OTIsNyArODY4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0
TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGMKICAg
ICAgICAgICAgICAgICAgICAgcnVsZVJhbmdlLmZpcnN0UnVsZUluZGV4ID0gcnVsZVJhbmdlLmxh
c3RSdWxlSW5kZXg7CiAKICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBydWxlIHRvIG91ciBs
aXN0IG9mIG1hdGNoZWQgcnVsZXMuCi0gICAgICAgICAgICAgICAgYWRkTWF0Y2hlZFJ1bGUoJnJ1
bGVEYXRhKTsKKyAgICAgICAgICAgICAgICBhZGRNYXRjaGVkUnVsZShzdGF0ZSwgJnJ1bGVEYXRh
KTsKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVs
ZShjb29raWUsIHRydWUpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
fQpAQCAtOTA4LDMxICs4ODQsMzMgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVSdWxlcyhj
b25zdCBSdWxlRGF0YSogcjEsIGNvbnN0IFJ1bGVEYXRhKiByMikKICAgICByZXR1cm4gKHNwZWNp
ZmljaXR5MSA9PSBzcGVjaWZpY2l0eTIpID8gcjEtPnBvc2l0aW9uKCkgPCByMi0+cG9zaXRpb24o
KSA6IHNwZWNpZmljaXR5MSA8IHNwZWNpZmljaXR5MjsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVy
Ojpzb3J0TWF0Y2hlZFJ1bGVzKCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRSdWxl
cyhWZWN0b3I8Y29uc3QgUnVsZURhdGEqLCAzMj4mIG1hdGNoZWRSdWxlcykKIHsKLSAgICBzdGQ6
OnNvcnQobV9tYXRjaGVkUnVsZXMuYmVnaW4oKSwgbV9tYXRjaGVkUnVsZXMuZW5kKCksIGNvbXBh
cmVSdWxlcyk7CisgICAgc3RkOjpzb3J0KG1hdGNoZWRSdWxlcy5iZWdpbigpLCBtYXRjaGVkUnVs
ZXMuZW5kKCksIGNvbXBhcmVSdWxlcyk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hB
bGxSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGllcykK
K3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBbGxSdWxlcyhSZXNvbHZlU3RhdGUmIHN0YXRlLCBN
YXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGllcykKIHsKLSAgICBt
YXRjaFVBUnVsZXMocmVzdWx0KTsKKyAgICBtYXRjaFVBUnVsZXMoc3RhdGUsIHJlc3VsdCk7Cisg
ICAgLy8gLi4uLiBiYWQ/CisgICAgc3RhdGUuc2V0SW5jbHVkZUVtcHR5UnVsZXMoZmFsc2UpOwog
CiAgICAgLy8gTm93IHdlIGNoZWNrIHVzZXIgc2hlZXQgcnVsZXMuCiAgICAgaWYgKG1fbWF0Y2hB
dXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICBtYXRjaFVzZXJSdWxlcyhyZXN1bHQsIGZhbHNl
KTsKLSAgICAgICAgCisgICAgICAgIG1hdGNoVXNlclJ1bGVzKHN0YXRlLCByZXN1bHQpOworCiAg
ICAgLy8gTm93IGNoZWNrIGF1dGhvciBydWxlcywgYmVnaW5uaW5nIGZpcnN0IHdpdGggcHJlc2Vu
dGF0aW9uYWwgYXR0cmlidXRlcyBtYXBwZWQgZnJvbSBIVE1MLgotICAgIGlmIChtX3N0eWxlZEVs
ZW1lbnQpIHsKLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3R5
bGVkRWxlbWVudC0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CisgICAgaWYgKHN0YXRl
LnN0eWxlZEVsZW1lbnQoKSkgeworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJl
c3VsdCwgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgp
KTsKIAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sgYWRkaXRpb25hbCBtYXBwZWQgZGVjbGFyYXRp
b25zLgogICAgICAgICAvLyBUYWJsZXMgYW5kIHRhYmxlIGNlbGxzIHNoYXJlIGFuIGFkZGl0aW9u
YWwgbWFwcGVkIHJ1bGUgdGhhdCBtdXN0IGJlIGFwcGxpZWQKICAgICAgICAgLy8gYWZ0ZXIgYWxs
IGF0dHJpYnV0ZXMsIHNpbmNlIHRoZWlyIG1hcHBlZCBzdHlsZSBkZXBlbmRzIG9uIHRoZSB2YWx1
ZXMgb2YgbXVsdGlwbGUgYXR0cmlidXRlcy4KLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVy
dGllcyhyZXN1bHQsIG1fc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJp
YnV0ZVN0eWxlKCkpOworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwg
c3RhdGUuc3R5bGVkRWxlbWVudCgpLT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5
bGUoKSk7CiAKLSAgICAgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKSB7
CisgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmlzSFRNTEVsZW1lbnQoKSkgewogICAgICAg
ICAgICAgYm9vbCBpc0F1dG87Ci0gICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rp
b24gPSB0b0hUTUxFbGVtZW50KG1fc3R5bGVkRWxlbWVudCktPmRpcmVjdGlvbmFsaXR5SWZoYXNE
aXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CisgICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHRE
aXJlY3Rpb24gPSB0b0hUTUxFbGVtZW50KHN0YXRlLmVsZW1lbnQoKSktPmRpcmVjdGlvbmFsaXR5
SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CiAgICAgICAgICAgICBpZiAoaXNBdXRvKQog
ICAgICAgICAgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgdGV4dERpcmVjdGlv
biA9PSBMVFIgPyBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVmdERlY2xhcmF0
aW9uKCkpOwogICAgICAgICB9CkBAIC05NDAsMjEgKzkxOCwyMSBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFBy
b3BlcnRpZQogICAgIAogICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRob3Igc2hlZXRzIG5l
eHQuCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICBtYXRjaEF1
dGhvclJ1bGVzKHJlc3VsdCwgZmFsc2UpOworICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHN0YXRl
LCByZXN1bHQpOwogCiAgICAgLy8gTm93IGNoZWNrIG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRl
LgotICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQg
JiYgbV9zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpKSB7CisgICAgaWYgKG1fbWF0Y2hBdXRo
b3JBbmRVc2VyU3R5bGVzICYmIHN0YXRlLnN0eWxlZEVsZW1lbnQoKSAmJiBzdGF0ZS5zdHlsZWRF
bGVtZW50KCktPmlubGluZVN0eWxlKCkpIHsKICAgICAgICAgLy8gSW5saW5lIHN0eWxlIGlzIGlt
bXV0YWJsZSBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIENTU09NIHdyYXBwZXIuCiAgICAgICAgIC8v
IEZJWE1FOiBNZWRpYSBjb250cm9sIHNoYWRvdyB0cmVlcyBzZWVtIHRvIGhhdmUgcHJvYmxlbXMg
d2l0aCBjYWNoaW5nLgotICAgICAgICBib29sIGlzSW5saW5lU3R5bGVDYWNoZWFibGUgPSAhbV9z
dHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpLT5pc011dGFibGUoKSAmJiAhbV9zdHlsZWRFbGVt
ZW50LT5pc0luU2hhZG93VHJlZSgpOworICAgICAgICBib29sIGlzSW5saW5lU3R5bGVDYWNoZWFi
bGUgPSAhc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpLT5pc011dGFibGUoKSAm
JiAhc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pc0luU2hhZG93VHJlZSgpOwogICAgICAgICAvLyBG
SVhNRTogQ29uc3RpZnkuCi0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0
LCBtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCksIGlzSW5saW5lU3R5bGVDYWNoZWFibGUp
OworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGUuc3R5bGVk
RWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpLCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlKTsKICAgICB9
CiAKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8vIE5vdyBjaGVjayBTTUlMIGFuaW1hdGlvbiBvdmVy
cmlkZSBzdHlsZS4KLSAgICBpZiAoaW5jbHVkZVNNSUxQcm9wZXJ0aWVzICYmIG1fbWF0Y2hBdXRo
b3JBbmRVc2VyU3R5bGVzICYmIG1fc3R5bGVkRWxlbWVudCAmJiBtX3N0eWxlZEVsZW1lbnQtPmlz
U1ZHRWxlbWVudCgpKQotICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwg
c3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0
eWxlUHJvcGVydGllcygpLCBmYWxzZSAvKiBpc0NhY2hlYWJsZSAqLyk7CisgICAgaWYgKGluY2x1
ZGVTTUlMUHJvcGVydGllcyAmJiBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBzdGF0ZS5z
dHlsZWRFbGVtZW50KCkgJiYgc3RhdGUuZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSkKKyAgICAg
ICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRpY19jYXN0PFNWR0VsZW1l
bnQqPihzdGF0ZS5lbGVtZW50KCkpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSwgZmFs
c2UgLyogaXNDYWNoZWFibGUgKi8pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oaW5jbHVkZVNN
SUxQcm9wZXJ0aWVzKTsKICNlbmRpZgpAQCAtOTY5LDQ3ICs5NDcsMzggQEAgYm9vbCBTdHlsZVJl
c29sdmVyOjpjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcm
IGNsYXNzTmFtZXMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmluaXRFbGVtZW50KEVsZW1lbnQqIGUpCitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVy
Ojppbml0RWxlbWVudChSZXNvbHZlU3RhdGUmIHN0YXRlLCBFbGVtZW50KiBlKQogewotICAgIGlm
IChtX2VsZW1lbnQgIT0gZSkgewotICAgICAgICBtX2VsZW1lbnQgPSBlOwotICAgICAgICBtX3N0
eWxlZEVsZW1lbnQgPSBtX2VsZW1lbnQgJiYgbV9lbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSA/
IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihtX2VsZW1lbnQpIDogMDsKLSAgICAgICAgbV9l
bGVtZW50TGlua1N0YXRlID0gZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtTdGF0ZSgpLT5kZXRlcm1p
bmVMaW5rU3RhdGUobV9lbGVtZW50KTsKLSAgICAgICAgaWYgKGUgJiYgZSA9PSBlLT5kb2N1bWVu
dCgpLT5kb2N1bWVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0
RGlyZWN0aW9uU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOwotICAgICAgICAgICAgZS0+ZG9j
dW1lbnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudChmYWxzZSk7Ci0gICAg
ICAgIH0KKyAgICBzdGF0ZS5zZXRFbGVtZW50KGUpOworICAgIHN0YXRlLnNldEVsZW1lbnRMaW5r
U3RhdGUoZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtTdGF0ZSgpLT5kZXRlcm1pbmVMaW5rU3RhdGUo
ZSkpOworICAgIGlmIChlICYmIGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkp
IHsKKyAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0RGlyZWN0aW9uU2V0T25Eb2N1bWVudEVsZW1l
bnQoZmFsc2UpOworICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNldE9uRG9j
dW1lbnRFbGVtZW50KGZhbHNlKTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlLCBQc2V1ZG9JZCBwc2V1ZG9JRCkKK2lubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRG
b3JTdHlsZVJlc29sdmUoUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgRWxlbWVudCogZSwgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKQogewotICAgIG1fcHNldWRvU3R5bGUgPSBwc2V1ZG9JRDsKLQogICAg
IGlmIChlKSB7CiAgICAgICAgIE5vZGVSZW5kZXJpbmdDb250ZXh0IGNvbnRleHQoZSk7Ci0gICAg
ICAgIG1fcGFyZW50Tm9kZSA9IGNvbnRleHQucGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxl
KCk7Ci0gICAgICAgIG1fcGFyZW50U3R5bGUgPSBjb250ZXh0LnJlc2V0U3R5bGVJbmhlcml0YW5j
ZSgpID8gMCA6CisgICAgICAgIHN0YXRlLnNldFBhcmVudE5vZGUoY29udGV4dC5wYXJlbnROb2Rl
Rm9yUmVuZGVyaW5nQW5kU3R5bGUoKSk7CisgICAgICAgIHN0YXRlLnNldFBhcmVudFN0eWxlKGNv
bnRleHQucmVzZXRTdHlsZUluaGVyaXRhbmNlKCkgPyAwIDoKICAgICAgICAgICAgIHBhcmVudFN0
eWxlID8gcGFyZW50U3R5bGUgOgotICAgICAgICAgICAgbV9wYXJlbnROb2RlID8gbV9wYXJlbnRO
b2RlLT5yZW5kZXJTdHlsZSgpIDogMDsKLSAgICAgICAgbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9u
UG9pbnQgPSBjb250ZXh0Lmluc2VydGlvblBvaW50KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
bV9wYXJlbnROb2RlID0gMDsKLSAgICAgICAgbV9wYXJlbnRTdHlsZSA9IHBhcmVudFN0eWxlOwot
ICAgICAgICBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCA9IGZhbHNlOwotICAgIH0KKyAg
ICAgICAgICAgIHN0YXRlLnBhcmVudE5vZGUoKSA/IHN0YXRlLnBhcmVudE5vZGUoKS0+cmVuZGVy
U3R5bGUoKSA6IDApOworICAgICAgICBzdGF0ZS5zZXREaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9p
bnQoY29udGV4dC5pbnNlcnRpb25Qb2ludCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc3RhdGUu
c2V0UGFyZW50U3R5bGUocGFyZW50U3R5bGUpOwogCisgICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBt
YXkgZW5kIHVwIGxvb2tpbmcgdXAgc3R5bGUgZm9yIHJhbmRvbSBlbGVtZW50cyBpbiB0aGUgbWlk
ZGxlIG9mIGEgcmVjdXJzaXZlIHRyZWUgcmVzb2x2ZS4KKyAgICAvLyBBbmNlc3RvciBpZGVudGlm
aWVyIGZpbHRlciB3b24ndCBiZSB1cC10by1kYXRlIGluIHRoYXQgY2FzZSBhbmQgd2UgY2FuJ3Qg
dXNlIHRoZSBmYXN0IHBhdGguCisgICAgc3RhdGUuc2V0Q2FuVXNlRmFzdFJlamVjdChtX3NlbGVj
dG9yRmlsdGVyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KHN0YXRlLnBhcmVudE5vZGUoKSkpOwor
ICAgIAogICAgIE5vZGUqIGRvY0VsZW1lbnQgPSBlID8gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRF
bGVtZW50KCkgOiAwOwogICAgIFJlbmRlclN0eWxlKiBkb2NTdHlsZSA9IGRvY3VtZW50KCktPnJl
bmRlclN0eWxlKCk7Ci0gICAgbV9yb290RWxlbWVudFN0eWxlID0gZG9jRWxlbWVudCAmJiBlICE9
IGRvY0VsZW1lbnQgPyBkb2NFbGVtZW50LT5yZW5kZXJTdHlsZSgpIDogZG9jU3R5bGU7CisgICAg
c3RhdGUuc2V0Um9vdEVsZW1lbnRTdHlsZShkb2NFbGVtZW50ICYmIGUgIT0gZG9jRWxlbWVudCA/
IGRvY0VsZW1lbnQtPnJlbmRlclN0eWxlKCkgOiBkb2NTdHlsZSk7CiAKLSAgICBtX3N0eWxlID0g
MDsKLQotICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigpOwotCi0gICAgbV9ydWxl
TGlzdCA9IDA7Ci0KLSAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOworICAgIHN0YXRlLnBlbmRpbmdJ
bWFnZVByb3BlcnRpZXMoKS5jbGVhcigpOworICAgIHN0YXRlLnNldEZvbnREaXJ0eShmYWxzZSk7
CiB9CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjU3R5bGVTZWFyY2hUaHJlc2hvbGQgPSAxMDsK
QEAgLTEwNjAsMjcgKzEwMjksMjQgQEAgTm9kZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlQ291c2lu
TGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW4KICAgICByZXR1
cm4gMDsKIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRj
aGVzUnVsZVNldChSdWxlU2V0KiBydWxlU2V0KQorYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNo
YXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChFbGVtZW50KiBlbGVtZW50LCBSdWxlU2V0KiBy
dWxlU2V0KQogewogICAgIGlmICghcnVsZVNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAKLSAgICBtX3NlbGVjdG9yQ2hlY2tlci5zZXRNb2Rl
KFNlbGVjdG9yQ2hlY2tlcjo6U2hhcmluZ1J1bGVzKTsKICAgICBpbnQgZmlyc3RSdWxlSW5kZXgg
PSAtMSwgbGFzdFJ1bGVJbmRleCA9IC0xOwogICAgIFJ1bGVSYW5nZSBydWxlUmFuZ2UoZmlyc3RS
dWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1hdGNo
UmVxdWVzdChydWxlU2V0KSwgcnVsZVJhbmdlKTsKLSAgICBtX3NlbGVjdG9yQ2hlY2tlci5zZXRN
b2RlKFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpOwotICAgIGlmIChtX21hdGNoZWRS
dWxlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX21hdGNoZWRSdWxl
cy5jbGVhcigpOwotICAgIHJldHVybiB0cnVlOworICAgIFJlc29sdmVTdGF0ZSBzdGF0ZTsKKyAg
ICBzdGF0ZS5zZXRFbGVtZW50KGVsZW1lbnQpOworICAgIHN0YXRlLnNldE1vZGUoU2VsZWN0b3JD
aGVja2VyOjpTaGFyaW5nUnVsZXMpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVTZXQs
IHN0YXRlLCBydWxlUmFuZ2UpOworICAgIHJldHVybiAhc3RhdGUubWF0Y2hlZFJ1bGVzKCkuaXNF
bXB0eSgpOwogfQogCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoQ29udHJv
bChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAorYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5T
aGFyZVN0eWxlV2l0aENvbnRyb2woRWxlbWVudCogZWxlbWVudCwgU3R5bGVkRWxlbWVudCogc2hh
cmluZ0NhbmRpZGF0ZSkgY29uc3QKIHsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiB0aGlzSW5wdXRF
bGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50
KiBvdGhlcklucHV0RWxlbWVudCA9IG1fZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBI
VE1MSW5wdXRFbGVtZW50KiB0aGlzSW5wdXRFbGVtZW50ID0gc2hhcmluZ0NhbmRpZGF0ZS0+dG9J
bnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBvdGhlcklucHV0RWxlbWVudCA9
IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CiAKICAgICBpZiAoIXRoaXNJbnB1dEVsZW1lbnQg
fHwgIW90aGVySW5wdXRFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTAxLDI1
ICsxMDY3LDI1IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9s
KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQt
PmlzUmVxdWlyZWQoKSAhPSBvdGhlcklucHV0RWxlbWVudC0+aXNSZXF1aXJlZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2wo
KSAhPSBtX2VsZW1lbnQtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkpCisgICAgaWYgKHNoYXJpbmdD
YW5kaWRhdGUtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkgIT0gZWxlbWVudC0+aXNFbmFibGVkRm9y
bUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQtPmlz
RGVmYXVsdEJ1dHRvbkZvckZvcm0oKSAhPSBtX2VsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZv
cm0oKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgp
ICE9IGVsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29udGFpbnNWYWxpZGl0eVN0
eWxlUnVsZXMoKSkgewotICAgICAgICBib29sIHdpbGxWYWxpZGF0ZSA9IGVsZW1lbnQtPndpbGxW
YWxpZGF0ZSgpOworICAgIGlmIChlbGVtZW50LT5kb2N1bWVudCgpLT5jb250YWluc1ZhbGlkaXR5
U3R5bGVSdWxlcygpKSB7CisgICAgICAgIGJvb2wgd2lsbFZhbGlkYXRlID0gc2hhcmluZ0NhbmRp
ZGF0ZS0+d2lsbFZhbGlkYXRlKCk7CiAKLSAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAhPSBtX2Vs
ZW1lbnQtPndpbGxWYWxpZGF0ZSgpKQorICAgICAgICBpZiAod2lsbFZhbGlkYXRlICE9IGVsZW1l
bnQtPndpbGxWYWxpZGF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAg
IGlmICh3aWxsVmFsaWRhdGUgJiYgKGVsZW1lbnQtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQo
KSAhPSBtX2VsZW1lbnQtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkpCisgICAgICAgIGlm
ICh3aWxsVmFsaWRhdGUgJiYgKHNoYXJpbmdDYW5kaWRhdGUtPmlzVmFsaWRGb3JtQ29udHJvbEVs
ZW1lbnQoKSAhPSBlbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChlbGVtZW50LT5pc0luUmFuZ2UoKSAh
PSBtX2VsZW1lbnQtPmlzSW5SYW5nZSgpKQorICAgICAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+
aXNJblJhbmdlKCkgIT0gZWxlbWVudC0+aXNJblJhbmdlKCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgaWYgKGVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpICE9IG1fZWxlbWVu
dC0+aXNPdXRPZlJhbmdlKCkpCisgICAgICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5pc091dE9m
UmFuZ2UoKSAhPSBlbGVtZW50LT5pc091dE9mUmFuZ2UoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKQEAgLTExMzIsMjcgKzEwOTgsMjcgQEAgc3RhdGljIGlubGluZSBib29s
IGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmV0dXJuIGVs
ZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiB0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5oYXNEaXJl
Y3Rpb25BdXRvKCk7CiB9CiAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhh
c0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFbGVtZW50KiBzaGFyaW5n
Q2FuZGlkYXRlKSBjb25zdAorYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFz
SWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFJlc29sdmVTdGF0ZSYgc3RhdGUsIEVs
ZW1lbnQqIGVsZW1lbnQsIFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdDYW5kaWRhdGUpIGNvbnN0CiB7
Ci0gICAgaWYgKG1fZWxlbWVudC0+YXR0cmlidXRlRGF0YSgpID09IHNoYXJpbmdDYW5kaWRhdGUt
PmF0dHJpYnV0ZURhdGEoKSkKKyAgICBpZiAoZWxlbWVudC0+YXR0cmlidXRlRGF0YSgpID09IHNo
YXJpbmdDYW5kaWRhdGUtPmF0dHJpYnV0ZURhdGEoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgaWYgKG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpICE9
IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSkK
KyAgICBpZiAoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpICE9
IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1
dGUobGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0
dHIpKQorICAgIGlmIChlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSAhPSBzaGFy
aW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaWYgKCFtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcykgeworICAg
IGlmICghc3RhdGUuZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKCkpIHsKICAgICAgICAgaWYg
KHNoYXJpbmdDYW5kaWRhdGUtPmhhc0NsYXNzKCkgJiYgY2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxl
cyhzaGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05hbWVzKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0gZWxzZSBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aGFzQ2xhc3MoKSkgewogI2lm
IEVOQUJMRShTVkcpCiAgICAgICAgIC8vIFNWRyBlbGVtZW50cyByZXF1aXJlIGEgKHNsb3chKSBn
ZXRBdHRyaWJ1dGUgY29tcGFyaXNpb24gYmVjYXVzZSAiY2xhc3MiIGlzIGFuIGFuaW1hdGFibGUg
YXR0cmlidXRlIGZvciBTVkcuCi0gICAgICAgIGlmIChtX2VsZW1lbnQtPmlzU1ZHRWxlbWVudCgp
KSB7Ci0gICAgICAgICAgICBpZiAobV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSAh
PSBzaGFyaW5nQ2FuZGlkYXRlLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSkKKyAgICAgICAgaWYg
KGVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudC0+Z2V0
QXR0cmlidXRlKGNsYXNzQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Z2V0QXR0cmlidXRlKGNs
YXNzQXR0cikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGVsc2Ug
ewogI2VuZGlmCi0gICAgICAgICAgICBpZiAobV9lbGVtZW50LT5jbGFzc05hbWVzKCkgIT0gc2hh
cmluZ0NhbmRpZGF0ZS0+Y2xhc3NOYW1lcygpKQorICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmNs
YXNzTmFtZXMoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05hbWVzKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIH0KQEAgLTExNjAs
MTIgKzExMjYsMTIgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRl
bnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEUKICAgICB9IGVsc2UKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+cHJlc2VudGF0aW9u
QXR0cmlidXRlU3R5bGUoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5wcmVzZW50YXRpb25BdHRyaWJ1
dGVTdHlsZSgpKQorICAgIGlmICh0b1N0eWxlZEVsZW1lbnQoZWxlbWVudCktPnByZXNlbnRhdGlv
bkF0dHJpYnV0ZVN0eWxlKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+cHJlc2VudGF0aW9uQXR0cmli
dXRlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFBST0dSRVNT
X0VMRU1FTlQpCi0gICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShwcm9ncmVzc1RhZykpIHsK
LSAgICAgICAgaWYgKHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihtX2VsZW1lbnQp
LT5pc0RldGVybWluYXRlKCkgIT0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KHNo
YXJpbmdDYW5kaWRhdGUpLT5pc0RldGVybWluYXRlKCkpCisgICAgaWYgKGVsZW1lbnQtPmhhc1Rh
Z05hbWUocHJvZ3Jlc3NUYWcpKSB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jl
c3NFbGVtZW50Kj4oZWxlbWVudCktPmlzRGV0ZXJtaW5hdGUoKSAhPSBzdGF0aWNfY2FzdDxIVE1M
UHJvZ3Jlc3NFbGVtZW50Kj4oc2hhcmluZ0NhbmRpZGF0ZSktPmlzRGV0ZXJtaW5hdGUoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAjZW5kaWYKQEAgLTExNzMsNTggKzExMzks
NTkgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5
bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCog
ZWxlbWVudCkgY29uc3QKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVt
ZW50KFJlc29sdmVTdGF0ZSYgc3RhdGUsIFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdDYW5kaWRhdGUp
IGNvbnN0CiB7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC0+cmVuZGVyU3R5bGUo
KTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGUuZWxlbWVudCgpOworICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IHNoYXJpbmdDYW5kaWRhdGUtPnJlbmRlclN0eWxlKCk7CiAKICAgICBpZiAo
IXN0eWxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKHN0eWxlLT51bmlxdWUoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT50YWdRTmFtZSgpICE9IG1f
ZWxlbWVudC0+dGFnUU5hbWUoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+dGFnUU5hbWUo
KSAhPSBlbGVtZW50LT50YWdRTmFtZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KGVsZW1lbnQtPmlubGluZVN0eWxlKCkpCisgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmlubGlu
ZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+bmVlZHNT
dHlsZVJlY2FsYygpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5uZWVkc1N0eWxlUmVjYWxj
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChlbGVt
ZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oZWxlbWVudCkt
PmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRl
LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oZWxlbWVudCktPmFu
aW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5k
aWYKLSAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkgIT0gbV9lbGVtZW50LT5pc0xpbmsoKSkKKyAg
ICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aXNMaW5rKCkgIT0gZWxlbWVudC0+aXNMaW5rKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+aG92ZXJlZCgpICE9IG1fZWxl
bWVudC0+aG92ZXJlZCgpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5ob3ZlcmVkKCkgIT0g
ZWxlbWVudC0+aG92ZXJlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1l
bnQtPmFjdGl2ZSgpICE9IG1fZWxlbWVudC0+YWN0aXZlKCkpCisgICAgaWYgKHNoYXJpbmdDYW5k
aWRhdGUtPmFjdGl2ZSgpICE9IGVsZW1lbnQtPmFjdGl2ZSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKGVsZW1lbnQtPmZvY3VzZWQoKSAhPSBtX2VsZW1lbnQtPmZvY3VzZWQoKSkK
KyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+Zm9jdXNlZCgpICE9IGVsZW1lbnQtPmZvY3VzZWQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5zaGFkb3dQc2V1ZG9J
ZCgpICE9IG1fZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRp
ZGF0ZS0+c2hhZG93UHNldWRvSWQoKSAhPSBlbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQo
KS0+Y3NzVGFyZ2V0KCkpCisgICAgaWYgKGVsZW1lbnQgPT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZG9j
dW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXNo
YXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoZWxlbWVu
dCkpCisgICAgaWYgKCFzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdB
dHRyaWJ1dGVzKHN0YXRlLCBlbGVtZW50LCBzaGFyaW5nQ2FuZGlkYXRlKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmli
dXRlU3R5bGUoKSAhPSBtX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZSgpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5hZGRpdGlvbmFsUHJlc2Vu
dGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmFkZGl0aW9u
YWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFp
bnMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQorICAgIGlmIChzaGFy
aW5nQ2FuZGlkYXRlLT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhz
aGFyaW5nQ2FuZGlkYXRlLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQo
KSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzaGFyZSBz
dHlsZSBmb3Igb3B0aW9uIGFuZCBvcHRncm91cCB3aGVuZXZlciBwb3NzaWJsZS4KICAgICAvLyBC
ZWZvcmUgZG9pbmcgc28sIHdlIG5lZWQgdG8gcmVzb2x2ZSBpc3N1ZXMgaW4gSFRNTFNlbGVjdEVs
ZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcwogICAgIC8vIGFuZCBSZW5kZXJNZW51TGlzdDo6c2V0VGV4
dC4gU2VlIGFsc28gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NDA1
Ci0gICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUob3B0aW9uVGFnKSB8fCBlbGVtZW50LT5oYXNU
YWdOYW1lKG9wdGdyb3VwVGFnKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aGFzVGFnTmFt
ZShvcHRpb25UYWcpIHx8IHNoYXJpbmdDYW5kaWRhdGUtPmhhc1RhZ05hbWUob3B0Z3JvdXBUYWcp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBib29sIGlzQ29udHJvbCA9IGVsZW1lbnQt
PmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CisgICAgYm9vbCBpc0NvbnRyb2wgPSBzaGFyaW5nQ2Fu
ZGlkYXRlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpOwogCi0gICAgaWYgKGlzQ29udHJvbCAhPSBt
X2VsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgaWYgKGlzQ29udHJvbCAhPSBl
bGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAoaXNDb250cm9sICYmICFjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woZWxlbWVudCkp
CisgICAgaWYgKGlzQ29udHJvbCAmJiAhY2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKGVsZW1lbnQs
IHNoYXJpbmdDYW5kaWRhdGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoc3R5
bGUtPnRyYW5zaXRpb25zKCkgfHwgc3R5bGUtPmFuaW1hdGlvbnMoKSkKQEAgLTEyMzMsMTAgKzEy
MDAsMTAgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5
bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAgICAgLy8gVHVybiBvZmYgc3R5bGUgc2hhcmluZyBmb3IgZWxlbWVudHMgdGhhdCBjYW4g
Z2FpbiBsYXllcnMgZm9yIHJlYXNvbnMgb3V0c2lkZSBvZiB0aGUgc3R5bGUgc3lzdGVtLgogICAg
IC8vIFNlZSBjb21tZW50cyBpbiBSZW5kZXJPYmplY3Q6OnNldFN0eWxlKCkuCi0gICAgaWYgKGVs
ZW1lbnQtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGZyYW1l
VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdO
YW1lKG9iamVjdFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IGVsZW1l
bnQtPmhhc1RhZ05hbWUoY2FudmFzVGFnKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5oYXNU
YWdOYW1lKGlmcmFtZVRhZykgfHwgc2hhcmluZ0NhbmRpZGF0ZS0+aGFzVGFnTmFtZShmcmFtZVRh
ZykgfHwgc2hhcmluZ0NhbmRpZGF0ZS0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgc2hhcmluZ0Nh
bmRpZGF0ZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpIHx8IHNoYXJpbmdDYW5kaWRhdGUtPmhhc1Rh
Z05hbWUoYXBwbGV0VGFnKSB8fCBzaGFyaW5nQ2FuZGlkYXRlLT5oYXNUYWdOYW1lKGNhbnZhc1Rh
ZykKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKICAgICAgICAgLy8gV2l0aCBw
cm94eWluZywgdGhlIG1lZGlhIGVsZW1lbnRzIGFyZSBiYWNrZWQgYnkgYSBSZW5kZXJFbWJlZGRl
ZE9iamVjdC4KLSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZSh2aWRlb1RhZykgfHwgZWxl
bWVudC0+aGFzVGFnTmFtZShhdWRpb1RhZykKKyAgICAgICAgfHwgc2hhcmluZ0NhbmRpZGF0ZS0+
aGFzVGFnTmFtZSh2aWRlb1RhZykgfHwgc2hhcmluZ0NhbmRpZGF0ZS0+aGFzVGFnTmFtZShhdWRp
b1RhZykKICNlbmRpZgogICAgICAgICApCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyNDUs
MzEgKzEyMTIsMzEgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1l
bnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICBpZiAoZWxlbWVudEhhc0RpcmVj
dGlvbkF1dG8oZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVt
ZW50LT5pc0xpbmsoKSAmJiBtX2VsZW1lbnRMaW5rU3RhdGUgIT0gc3R5bGUtPmluc2lkZUxpbmso
KSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aXNMaW5rKCkgJiYgc3RhdGUuZWxlbWVudExp
bmtTdGF0ZSgpICE9IHN0eWxlLT5pbnNpZGVMaW5rKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICAvLyBEZW55IHNoYXJpbmcgc3R5bGVzIGJl
dHdlZW4gV2ViVlRUIGFuZCBub24tV2ViVlRUIG5vZGVzLgotICAgIGlmIChlbGVtZW50LT5pc1dl
YlZUVEVsZW1lbnQoKSAhPSBtX2VsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpKQorICAgIGlmIChz
aGFyaW5nQ2FuZGlkYXRlLT5pc1dlYlZUVEVsZW1lbnQoKSAhPSBlbGVtZW50LT5pc1dlYlZUVEVs
ZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQtPmlzV2Vi
VlRURWxlbWVudCgpICYmIG1fZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYgdG9XZWJWVFRF
bGVtZW50KGVsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpICE9IHRvV2ViVlRURWxlbWVudChtX2Vs
ZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5pc1dl
YlZUVEVsZW1lbnQoKSAmJiBlbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiB0b1dlYlZUVEVs
ZW1lbnQoZWxlbWVudCktPndlYlZUVE5vZGVUeXBlKCkgIT0gdG9XZWJWVFRFbGVtZW50KGVsZW1l
bnQpLT53ZWJWVFROb2RlVHlwZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5k
b2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSB8fCBtX2VsZW1lbnQg
PT0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQo
KSkKKyAgICBpZiAoZWxlbWVudCA9PSBzaGFyaW5nQ2FuZGlkYXRlLT5kb2N1bWVudCgpLT53ZWJr
aXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSB8fCBlbGVtZW50ID09IGVsZW1lbnQtPmRvY3Vt
ZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIFN0eWxlZEVsZW1l
bnQqIFN0eWxlUmVzb2x2ZXI6OmZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUqIG5vZGUs
IHVuc2lnbmVkJiBjb3VudCkgY29uc3QKK2lubGluZSBTdHlsZWRFbGVtZW50KiBTdHlsZVJlc29s
dmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhSZXNvbHZlU3RhdGUmIHN0YXRlLCBOb2Rl
KiBub2RlLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0CiB7CiAgICAgZm9yICg7IG5vZGU7IG5vZGUg
PSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewogICAgICAgICBpZiAoIW5vZGUtPmlzU3R5bGVk
RWxlbWVudCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjYW5TaGFyZVN0
eWxlV2l0aEVsZW1lbnQoc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpKSkKKyAgICAg
ICAgaWYgKGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChzdGF0ZSwgc3RhdGljX2Nhc3Q8U3R5bGVk
RWxlbWVudCo+KG5vZGUpKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAoY291bnQr
KyA9PSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQpCiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTEy
ODcsNDAgKzEyNTQsNDEgQEAgc3RhdGljIGlubGluZSBib29sIHBhcmVudEVsZW1lbnRQcmV2ZW50
c1NoYXJpbmcoY29uc3QgRWxlbWVudCogcGFyZW50RWxlbWVudCkKICAgICAgICAgfHwgcGFyZW50
RWxlbWVudC0+Y2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOwogfQogCi1S
ZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQorUmVuZGVyU3R5
bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKFJlc29sdmVTdGF0ZSYgc3RhdGUp
CiB7Ci0gICAgaWYgKCFtX3N0eWxlZEVsZW1lbnQgfHwgIW1fcGFyZW50U3R5bGUpCisgICAgaWYg
KCFzdGF0ZS5zdHlsZWRFbGVtZW50KCkgfHwgIXN0YXRlLnBhcmVudFN0eWxlKCkpCiAgICAgICAg
IHJldHVybiAwOworCiAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaGFzIGlubGluZSBzdHlsZSBpdCBp
cyBwcm9iYWJseSB1bmlxdWUuCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUo
KSkKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpKQogICAgICAg
ICByZXR1cm4gMDsKICNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmlz
U1ZHRWxlbWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihtX3N0eWxlZEVsZW1lbnQp
LT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxl
bWVudCgpLT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oc3RhdGUu
c3R5bGVkRWxlbWVudCgpKS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCiAgICAgICAg
IHJldHVybiAwOwogI2VuZGlmCiAgICAgLy8gSWRzIHN0b3Agc3R5bGUgc2hhcmluZyBpZiB0aGV5
IHNob3cgdXAgaW4gdGhlIHN0eWxlc2hlZXRzLgotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmhh
c0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKG1fc3R5bGVkRWxlbWVudC0+
aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQorICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVt
ZW50KCktPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKHN0YXRlLnN0
eWxlZEVsZW1lbnQoKS0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhtX2VsZW1lbnQt
PnBhcmVudEVsZW1lbnQoKSkpCisgICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmco
c3RhdGUuZWxlbWVudCgpLT5wYXJlbnRFbGVtZW50KCkpKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICBpZiAobV9zdHlsZWRFbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgIGlm
IChzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIGlmIChtX2VsZW1lbnQgPT0gbV9lbGVtZW50LT5kb2N1bWVudCgp
LT5jc3NUYXJnZXQoKSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudCgpID09IHN0YXRlLmRvY3VtZW50
KCktPmNzc1RhcmdldCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoZWxlbWVudEhhc0Rp
cmVjdGlvbkF1dG8obV9lbGVtZW50KSkKKyAgICBpZiAoZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8o
c3RhdGUuZWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBDYWNoZSB3aGV0
aGVyIG1fZWxlbWVudCBpcyBhZmZlY3RlZCBieSBhbnkga25vd24gY2xhc3Mgc2VsZWN0b3JzLgog
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBhIG1lbWJlciB2YXJpYWJsZS4gVGhlIHN0
eWxlIHNoYXJpbmcgY29kZSBjb3VsZCBiZSBmYWN0b3JlZCBvdXQgb2YgU3R5bGVSZXNvbHZlci4K
LSAgICBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyA9IG1fZWxlbWVudCAmJiBtX2VsZW1l
bnQtPmhhc0NsYXNzKCkgJiYgY2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhtX2VsZW1lbnQtPmNs
YXNzTmFtZXMoKSk7CisgICAgc3RhdGUuc2V0RWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKHN0
YXRlLmVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50KCktPmhhc0NsYXNzKCkgJiYgY2xhc3NOYW1l
c0FmZmVjdGVkQnlSdWxlcyhzdGF0ZS5lbGVtZW50KCktPmNsYXNzTmFtZXMoKSkpOwogCiAgICAg
Ly8gQ2hlY2sgcHJldmlvdXMgc2libGluZ3MgYW5kIHRoZWlyIGNvdXNpbnMuCiAgICAgdW5zaWdu
ZWQgY291bnQgPSAwOwogICAgIHVuc2lnbmVkIHZpc2l0ZWROb2RlQ291bnQgPSAwOwogICAgIFN0
eWxlZEVsZW1lbnQqIHNoYXJlRWxlbWVudCA9IDA7Ci0gICAgTm9kZSogY291c2luTGlzdCA9IG1f
c3R5bGVkRWxlbWVudC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgTm9kZSogY291c2luTGlzdCA9
IHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgd2hpbGUgKGNv
dXNpbkxpc3QpIHsKLSAgICAgICAgc2hhcmVFbGVtZW50ID0gZmluZFNpYmxpbmdGb3JTdHlsZVNo
YXJpbmcoY291c2luTGlzdCwgY291bnQpOworICAgICAgICBzaGFyZUVsZW1lbnQgPSBmaW5kU2li
bGluZ0ZvclN0eWxlU2hhcmluZyhzdGF0ZSwgY291c2luTGlzdCwgY291bnQpOwogICAgICAgICBp
ZiAoc2hhcmVFbGVtZW50KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNvdXNpbkxpc3Qg
PSBsb2NhdGVDb3VzaW5MaXN0KGNvdXNpbkxpc3QtPnBhcmVudEVsZW1lbnQoKSwgdmlzaXRlZE5v
ZGVDb3VudCk7CkBAIC0xMzMxLDIxICsxMjk5LDIxIEBAIFJlbmRlclN0eWxlKiBTdHlsZVJlc29s
dmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQ2Fu
J3Qgc2hhcmUgaWYgc2libGluZyBydWxlcyBhcHBseS4gVGhpcyBpcyBjaGVja2VkIGF0IHRoZSBl
bmQgYXMgaXQgc2hvdWxkIHJhcmVseSBmYWlsLgotICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRh
dGVNYXRjaGVzUnVsZVNldChtX3NpYmxpbmdSdWxlU2V0LmdldCgpKSkKKyAgICBpZiAoc3R5bGVT
aGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoc3RhdGUuZWxlbWVudCgpLCBtX3NpYmxpbmdS
dWxlU2V0LmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYg
YXR0cmlidXRlIHJ1bGVzIGFwcGx5LgotICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRj
aGVzUnVsZVNldChtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldC5nZXQoKSkpCisgICAgaWYgKHN0
eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KHN0YXRlLmVsZW1lbnQoKSwgbV91bmNv
bW1vbkF0dHJpYnV0ZVJ1bGVTZXQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICAvLyBD
YW4ndCBzaGFyZSBpZiBAaG9zdCBALXJ1bGVzIGFwcGx5LgotICAgIGlmIChzdHlsZVNoYXJpbmdD
YW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCkpCisgICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0
ZU1hdGNoZXNIb3N0UnVsZXMoc3RhdGUuZWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgLy8gVHJhY2tpbmcgY2hpbGQgaW5kZXggcmVxdWlyZXMgdW5pcXVlIHN0eWxlIGZvciBlYWNo
IG5vZGUuIFRoaXMgbWF5IGdldCBzZXQgYnkgdGhlIHNpYmxpbmcgcnVsZSBtYXRjaCBhYm92ZS4K
LSAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhtX2VsZW1lbnQtPnBhcmVudEVs
ZW1lbnQoKSkpCisgICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcoc3RhdGUuZWxl
bWVudCgpLT5wYXJlbnRFbGVtZW50KCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4g
c2hhcmVFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1h
dGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRj
aFVBUnVsZXMoUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCkKIHsKICAg
ICBNYXRjaGluZ1VBUnVsZXNTY29wZSBzY29wZTsKIApAQCAtMTM1NCwxNSArMTMyMiwxNSBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQogICAg
ICAgICByZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsKICAgICBSdWxlU2V0KiB1c2VyQWdlbnRT
dHlsZVNoZWV0ID0gbV9tZWRpdW0tPm1lZGlhVHlwZU1hdGNoU3BlY2lmaWMoInByaW50IikKICAg
ICAgICAgPyBkZWZhdWx0UHJpbnRTdHlsZSA6IGRlZmF1bHRTdHlsZTsKLSAgICBtYXRjaFVBUnVs
ZXMocmVzdWx0LCB1c2VyQWdlbnRTdHlsZVNoZWV0KTsKKyAgICBtYXRjaFVBUnVsZXMoc3RhdGUs
IHJlc3VsdCwgdXNlckFnZW50U3R5bGVTaGVldCk7CiAKICAgICAvLyBJbiBxdWlya3MgbW9kZSwg
d2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgcXVpcmtzIHVzZXIgYWdlbnQgc2hlZXQuCi0gICAgaWYg
KCFtX3NlbGVjdG9yQ2hlY2tlci5zdHJpY3RQYXJzaW5nKCkpCi0gICAgICAgIG1hdGNoVUFSdWxl
cyhyZXN1bHQsIGRlZmF1bHRRdWlya3NTdHlsZSk7CisgICAgaWYgKGRvY3VtZW50KCktPmluUXVp
cmtzTW9kZSgpKQorICAgICAgICBtYXRjaFVBUnVsZXMoc3RhdGUsIHJlc3VsdCwgZGVmYXVsdFF1
aXJrc1N0eWxlKTsKIAogICAgIC8vIElmIGRvY3VtZW50IHVzZXMgdmlldyBzb3VyY2Ugc3R5bGVz
IChpbiB2aWV3IHNvdXJjZSBtb2RlIG9yIGluIHhtbCB2aWV3ZXIgbW9kZSksIHRoZW4gd2UgbWF0
Y2ggcnVsZXMgZnJvbSB0aGUgdmlldyBzb3VyY2Ugc3R5bGUgc2hlZXQuCiAgICAgaWYgKGRvY3Vt
ZW50KCktPmlzVmlld1NvdXJjZSgpKQotICAgICAgICBtYXRjaFVBUnVsZXMocmVzdWx0LCB2aWV3
U291cmNlU3R5bGUoKSk7CisgICAgICAgIG1hdGNoVUFSdWxlcyhzdGF0ZSwgcmVzdWx0LCB2aWV3
U291cmNlU3R5bGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldFN0eWxlc0ZvclBhZ2luYXRpb25N
b2RlKFBhZ2luYXRpb246Ok1vZGUgcGFnaW5hdGlvbk1vZGUsIFJlbmRlclN0eWxlKiBzdHlsZSkK
QEAgLTE1NjAsMTA2ICsxNTI4LDEwNCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJl
c29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyUwogICAgICAg
ICByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsKICAgICB9CiAKLSAgICBpbml0RWxlbWVu
dChlbGVtZW50KTsKLSAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGVsZW1lbnQsIGRlZmF1bHRQYXJl
bnQpOwotICAgIG1fcmVnaW9uRm9yU3R5bGluZyA9IHJlZ2lvbkZvclN0eWxpbmc7Ci0gICAgaWYg
KHNoYXJpbmdCZWhhdmlvciA9PSBBbGxvd1N0eWxlU2hhcmluZyAmJiAhbV9kaXN0cmlidXRlZFRv
SW5zZXJ0aW9uUG9pbnQpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0gbG9j
YXRlU2hhcmVkU3R5bGUoKTsKKyAgICBSZXNvbHZlU3RhdGUgc3RhdGU7CisgICAgaW5pdEVsZW1l
bnQoc3RhdGUsIGVsZW1lbnQpOworICAgIGluaXRGb3JTdHlsZVJlc29sdmUoc3RhdGUsIGVsZW1l
bnQsIGRlZmF1bHRQYXJlbnQpOworICAgIHN0YXRlLnNldFJlZ2lvbkZvclN0eWxpbmcocmVnaW9u
Rm9yU3R5bGluZyk7CisKKyAgICBpZiAoc2hhcmluZ0JlaGF2aW9yID09IEFsbG93U3R5bGVTaGFy
aW5nICYmICFzdGF0ZS5kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQoKSkgeworICAgICAgICBS
ZW5kZXJTdHlsZSogc2hhcmVkU3R5bGUgPSBsb2NhdGVTaGFyZWRTdHlsZShzdGF0ZSk7CiAgICAg
ICAgIGlmIChzaGFyZWRTdHlsZSkKICAgICAgICAgICAgIHJldHVybiBzaGFyZWRTdHlsZTsKICAg
ICB9CiAKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGNsb25lRm9yUGFyZW50OworICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gc3R5bGU7CiAKLSAgICBpZiAobV9wYXJlbnRTdHlsZSkgewotICAgICAg
ICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgICAgICBtX3N0eWxlLT5pbmhl
cml0RnJvbShtX3BhcmVudFN0eWxlLCBpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkgPyBSZW5k
ZXJTdHlsZTo6QXRTaGFkb3dCb3VuZGFyeSA6IFJlbmRlclN0eWxlOjpOb3RBdFNoYWRvd0JvdW5k
YXJ5KTsKKyAgICBpZiAoc3RhdGUucGFyZW50U3R5bGUoKSkgeworICAgICAgICBzdHlsZSA9IFJl
bmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICAgICAgc3R5bGUtPmluaGVyaXRGcm9tKHN0YXRlLnBh
cmVudFN0eWxlKCksIGlzQXRTaGFkb3dCb3VuZGFyeShlbGVtZW50KSA/IFJlbmRlclN0eWxlOjpB
dFNoYWRvd0JvdW5kYXJ5IDogUmVuZGVyU3R5bGU6Ok5vdEF0U2hhZG93Qm91bmRhcnkpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIG1fc3R5bGUgPSBkZWZhdWx0U3R5bGVGb3JFbGVtZW50KCk7Ci0g
ICAgICAgIGNsb25lRm9yUGFyZW50ID0gUmVuZGVyU3R5bGU6OmNsb25lKHN0eWxlKCkpOwotICAg
ICAgICBtX3BhcmVudFN0eWxlID0gY2xvbmVGb3JQYXJlbnQuZ2V0KCk7CisgICAgICAgIHN0eWxl
ID0gZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpOworICAgICAgICBjbG9uZUZvclBhcmVudCA9IFJl
bmRlclN0eWxlOjpjbG9uZShzdHlsZS5nZXQoKSk7CisgICAgICAgIHN0YXRlLnNldFBhcmVudFN0
eWxlKGNsb25lRm9yUGFyZW50LmdldCgpKTsKICAgICB9CiAgICAgLy8gY29udGVudGVkaXRhYmxl
IGF0dHJpYnV0ZSAoaW1wbGVtZW50ZWQgYnkgLXdlYmtpdC11c2VyLW1vZGlmeSkgc2hvdWxkCiAg
ICAgLy8gYmUgcHJvcGFnYXRlZCBmcm9tIHNoYWRvdyBob3N0IHRvIGRpc3RyaWJ1dGVkIG5vZGUu
Ci0gICAgaWYgKG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KSB7CisgICAgaWYgKHN0YXRl
LmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCgpKSB7CiAgICAgICAgIGlmIChFbGVtZW50KiBw
YXJlbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGlmIChSZW5k
ZXJTdHlsZSogc3R5bGVPZlNoYWRvd0hvc3QgPSBwYXJlbnQtPnJlbmRlclN0eWxlKCkpCi0gICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0VXNlck1vZGlmeShzdHlsZU9mU2hhZG93SG9zdC0+dXNl
ck1vZGlmeSgpKTsKKyAgICAgICAgICAgICAgICBzdHlsZS0+c2V0VXNlck1vZGlmeShzdHlsZU9m
U2hhZG93SG9zdC0+dXNlck1vZGlmeSgpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChl
bGVtZW50LT5pc0xpbmsoKSkgewotICAgICAgICBtX3N0eWxlLT5zZXRJc0xpbmsodHJ1ZSk7Ci0g
ICAgICAgIEVJbnNpZGVMaW5rIGxpbmtTdGF0ZSA9IG1fZWxlbWVudExpbmtTdGF0ZTsKLSAgICAg
ICAgaWYgKG1fZWxlbWVudExpbmtTdGF0ZSAhPSBOb3RJbnNpZGVMaW5rKSB7CisgICAgICAgIHN0
eWxlLT5zZXRJc0xpbmsodHJ1ZSk7CisgICAgICAgIEVJbnNpZGVMaW5rIGxpbmtTdGF0ZSA9IHN0
YXRlLmVsZW1lbnRMaW5rU3RhdGUoKTsKKyAgICAgICAgaWYgKGxpbmtTdGF0ZSAhPSBOb3RJbnNp
ZGVMaW5rKSB7CiAgICAgICAgICAgICBib29sIGZvcmNlVmlzaXRlZCA9IEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRv
VmlzaXRlZCk7CiAgICAgICAgICAgICBpZiAoZm9yY2VWaXNpdGVkKQogICAgICAgICAgICAgICAg
IGxpbmtTdGF0ZSA9IEluc2lkZVZpc2l0ZWRMaW5rOwogICAgICAgICB9Ci0KLSAgICAgICAgbV9z
dHlsZS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdGUpOworICAgICAgICBzdHlsZS0+c2V0SW5zaWRl
TGluayhsaW5rU3RhdGUpOwogICAgIH0KIAogICAgIGVuc3VyZURlZmF1bHRTdHlsZVNoZWV0c0Zv
ckVsZW1lbnQoZWxlbWVudCk7CiAKKyAgICBzdGF0ZS5zZXRTdHlsZShzdHlsZS5nZXQoKSk7CisK
ICAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKICAgICBpZiAobWF0Y2hpbmdCZWhhdmlvciA9
PSBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcykKLSAgICAgICAgbWF0Y2hVQVJ1bGVzKG1hdGNoUmVz
dWx0KTsKKyAgICAgICAgbWF0Y2hVQVJ1bGVzKHN0YXRlLCBtYXRjaFJlc3VsdCk7CiAgICAgZWxz
ZQotICAgICAgICBtYXRjaEFsbFJ1bGVzKG1hdGNoUmVzdWx0LCBtYXRjaGluZ0JlaGF2aW9yICE9
IE1hdGNoQWxsUnVsZXNFeGNsdWRpbmdTTUlMKTsKKyAgICAgICAgbWF0Y2hBbGxSdWxlcyhzdGF0
ZSwgbWF0Y2hSZXN1bHQsIG1hdGNoaW5nQmVoYXZpb3IgIT0gTWF0Y2hBbGxSdWxlc0V4Y2x1ZGlu
Z1NNSUwpOwogCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhtYXRjaFJlc3VsdCwgZWxlbWVu
dCk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhzdGF0ZSwgbWF0Y2hSZXN1bHQsIGVsZW1l
bnQpOwogCiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRpc3BsYXkgYW5kIHRl
eHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0UmVuZGVyU3R5
bGUoc3R5bGUoKSwgbV9wYXJlbnRTdHlsZSwgZWxlbWVudCk7Ci0KLSAgICBpbml0RWxlbWVudCgw
KTsgLy8gQ2xlYXIgb3V0IGZvciB0aGUgbmV4dCByZXNvbHZlLgotCi0gICAgaWYgKGNsb25lRm9y
UGFyZW50KQotICAgICAgICBtX3BhcmVudFN0eWxlID0gMDsKKyAgICBhZGp1c3RSZW5kZXJTdHls
ZShzdGF0ZSwgc3R5bGUuZ2V0KCksIHN0YXRlLnBhcmVudFN0eWxlKCksIGVsZW1lbnQpOwogCiAg
ICAgZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCiAgICAgLy8gTm93IHJl
dHVybiB0aGUgc3R5bGUuCi0gICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOworICAgIHJldHVy
biBzdHlsZS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVz
b2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwg
Y29uc3QgU3R5bGVLZXlmcmFtZSoga2V5ZnJhbWUsIEtleWZyYW1lVmFsdWUmIGtleWZyYW1lVmFs
dWUpCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZy
YW1lKFJlc29sdmVTdGF0ZSYgc3RhdGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUs
IGNvbnN0IFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1lLCBLZXlmcmFtZVZhbHVlJiBrZXlmcmFtZVZh
bHVlKQogewogICAgIE1hdGNoUmVzdWx0IHJlc3VsdDsKICAgICBpZiAoa2V5ZnJhbWUtPnByb3Bl
cnRpZXMoKSkKICAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCBrZXlmcmFtZS0+
cHJvcGVydGllcygpKTsKIAotICAgIEFTU0VSVCghbV9zdHlsZSk7Ci0KICAgICAvLyBDcmVhdGUg
dGhlIHN0eWxlCi0gICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShlbGVtZW50U3R5bGUp
OworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoZWxl
bWVudFN0eWxlKTsKIAotICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBzdGF0ZS5zZXRT
dHlsZShzdHlsZS5nZXQoKSk7CisgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwogCiAg
ICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgd2l0aCAhaW1wb3J0YW50LiBTaW5jZSB0aGVy
ZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8gZGVjbCwgdGhlcmUncyBub3RoaW5nIHRvIG92ZXJy
aWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3QgcHJvcGVydGllcy4KICAgICBib29sIGluaGVyaXRl
ZE9ubHkgPSBmYWxzZTsKICAgICBpZiAoa2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkKLSAgICAgICAg
YXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihyZXN1bHQsIGZh
bHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25s
eSk7CisgICAgICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGll
cz4oc3RhdGUsIHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXpl
KCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKIAogICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVk
LCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4KLSAgICB1cGRhdGVGb250KCk7CisgICAgdXBk
YXRlRm9udChzdGF0ZSk7CiAKICAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUg
c3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUKLSAgICBpZiAobV9saW5lSGVpZ2h0VmFs
dWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX2xpbmVI
ZWlnaHRWYWx1ZSk7CisgICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKQorICAgICAgICBh
cHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLmxpbmVIZWln
aHRWYWx1ZSgpKTsKIAogICAgIC8vIE5vdyBkbyByZXN0IG9mIHRoZSBwcm9wZXJ0aWVzLgogICAg
IGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQotICAgICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0
aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNo
ZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworICAgICAgICBhcHBseU1h
dGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIHJlc3VsdCwgZmFs
c2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5
KTsKIAogICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkIGJ5IG9uZSBvZiB0aGUgbm9uLWVz
c2VudGlhbCBmb250IHByb3BzLAogICAgIC8vIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgYSBzZWNv
bmQgdGltZS4KLSAgICB1cGRhdGVGb250KCk7CisgICAgdXBkYXRlRm9udChzdGF0ZSk7CiAKICAg
ICAvLyBTdGFydCBsb2FkaW5nIHJlc291cmNlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0g
ICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoKTsKKyAgICBsb2FkUGVuZGluZ1Jlc291cmNlcyhzdGF0
ZSk7CiAgICAgCiAgICAgLy8gQWRkIGFsbCB0aGUgYW5pbWF0aW5nIHByb3BlcnRpZXMgdG8gdGhl
IGtleWZyYW1lLgogICAgIGlmIChjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZURlY2xhcmF0
aW9uID0ga2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkgewpAQCAtMTY3NSw3ICsxNjQxLDcgQEAgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25z
dCBSZW5kZXJTdHlsZSogZWxlbWUKIAogICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVz
b2x2ZXIoKTsKIAotICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3R5
bGUucmVsZWFzZSgpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9y
QW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIEtl
eWZyYW1lTGlzdCYgbGlzdCkKQEAgLTE2OTYsMTUgKzE2NjIsMTYgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJT
dHlsZSogZWwKIAogICAgIC8vIENvbnN0cnVjdCBhbmQgcG9wdWxhdGUgdGhlIHN0eWxlIGZvciBl
YWNoIGtleWZyYW1lCiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZUtleWZyYW1lPiA+JiBr
ZXlmcmFtZXMgPSBrZXlmcmFtZXNSdWxlLT5rZXlmcmFtZXMoKTsKKyAgICBSZXNvbHZlU3RhdGUg
c3RhdGU7CisgICAgaW5pdEVsZW1lbnQoc3RhdGUsIGUpOworICAgIGluaXRGb3JTdHlsZVJlc29s
dmUoc3RhdGUsIGUpOworICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlmcmFt
ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgLy8gQXBwbHkgdGhlIGRlY2xhcmF0aW9uIHRvIHRo
ZSBzdHlsZS4gVGhpcyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiB0aGUgbG9naWMgaW4gc3R5
bGVGb3JFbGVtZW50Ci0gICAgICAgIGluaXRFbGVtZW50KGUpOwotICAgICAgICBpbml0Rm9yU3R5
bGVSZXNvbHZlKGUpOwotCiAgICAgICAgIGNvbnN0IFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1lID0g
a2V5ZnJhbWVzW2ldLmdldCgpOwogCiAgICAgICAgIEtleWZyYW1lVmFsdWUga2V5ZnJhbWVWYWx1
ZSgwLCAwKTsKLSAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1l
KGVsZW1lbnRTdHlsZSwga2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKKyAgICAgICAga2V5ZnJh
bWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKHN0YXRlLCBlbGVtZW50U3R5bGUsIGtl
eWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7CiAKICAgICAgICAgLy8gQWRkIHRoaXMga2V5ZnJhbWUg
c3R5bGUgdG8gYWxsIHRoZSBpbmRpY2F0ZWQga2V5IHRpbWVzCiAgICAgICAgIFZlY3RvcjxmbG9h
dD4ga2V5czsKQEAgLTE3MjQsNyArMTY5MSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJh
bWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsCiAg
ICAgICAgICAgICB6ZXJvUGVyY2VudEtleWZyYW1lLT5zZXRLZXlUZXh0KCIwJSIpOwogICAgICAg
ICB9CiAgICAgICAgIEtleWZyYW1lVmFsdWUga2V5ZnJhbWVWYWx1ZSgwLCAwKTsKLSAgICAgICAg
a2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKGVsZW1lbnRTdHlsZSwgemVy
b1BlcmNlbnRLZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOworICAgICAgICBrZXlmcmFtZVZhbHVl
LnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoc3RhdGUsIGVsZW1lbnRTdHlsZSwgemVyb1BlcmNl
bnRLZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOwogICAgICAgICBsaXN0Lmluc2VydChrZXlmcmFt
ZVZhbHVlKTsKICAgICB9CiAKQEAgLTE3MzYsNjIgKzE3MDMsNjggQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJT
dHlsZSogZWwKICAgICAgICAgICAgIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUtPnNldEtleVRleHQo
IjEwMCUiKTsKICAgICAgICAgfQogICAgICAgICBLZXlmcmFtZVZhbHVlIGtleWZyYW1lVmFsdWUo
MSwgMCk7Ci0gICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShl
bGVtZW50U3R5bGUsIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKKyAg
ICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKHN0YXRlLCBlbGVt
ZW50U3R5bGUsIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKICAgICAg
ICAgbGlzdC5pbnNlcnQoa2V5ZnJhbWVWYWx1ZSk7CiAgICAgfQogfQogCiBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQg
cHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7Ci0gICAgQVNT
RVJUKG1fcGFyZW50U3R5bGUpOwogICAgIGlmICghZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAg
ICBpbml0RWxlbWVudChlKTsKKyAgICBSZXNvbHZlU3RhdGUgc3RhdGU7CisgICAgaW5pdEVsZW1l
bnQoc3RhdGUsIGUpOworICAgIGluaXRGb3JTdHlsZVJlc29sdmUoc3RhdGUsIGUsIHBhcmVudFN0
eWxlKTsKIAotICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSwgcGFyZW50U3R5bGUsIHBzZXVkbyk7
Ci0gICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLSAgICBtX3N0eWxlLT5pbmhl
cml0RnJvbShtX3BhcmVudFN0eWxlKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0g
UmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgIHN0eWxlLT5pbmhlcml0RnJvbShzdGF0ZS5wYXJl
bnRTdHlsZSgpKTsKKyAgICBzdGF0ZS5zZXRQc2V1ZG9TdHlsZShwc2V1ZG8pOworICAgIHN0YXRl
LnNldFN0eWxlKHN0eWxlLmdldCgpKTsKIAogICAgIC8vIFNpbmNlIHdlIGRvbid0IHVzZSBwc2V1
ZG8tZWxlbWVudHMgaW4gYW55IG9mIG91ciBxdWlyay9wcmludCB1c2VyIGFnZW50IHJ1bGVzLCBk
b24ndCB3YXN0ZSB0aW1lIHdhbGtpbmcKICAgICAvLyB0aG9zZSBydWxlcy4KIAogICAgIC8vIENo
ZWNrIFVBLCB1c2VyIGFuZCBhdXRob3IgcnVsZXMuCisKICAgICBNYXRjaFJlc3VsdCBtYXRjaFJl
c3VsdDsKLSAgICBtYXRjaFVBUnVsZXMobWF0Y2hSZXN1bHQpOworICAgIG1hdGNoVUFSdWxlcyhz
dGF0ZSwgbWF0Y2hSZXN1bHQpOwogCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVz
KSB7Ci0gICAgICAgIG1hdGNoVXNlclJ1bGVzKG1hdGNoUmVzdWx0LCBmYWxzZSk7Ci0gICAgICAg
IG1hdGNoQXV0aG9yUnVsZXMobWF0Y2hSZXN1bHQsIGZhbHNlKTsKKyAgICAgICAgbWF0Y2hVc2Vy
UnVsZXMoc3RhdGUsIG1hdGNoUmVzdWx0KTsKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhzdGF0
ZSwgbWF0Y2hSZXN1bHQpOwogICAgIH0KIAogICAgIGlmIChtYXRjaFJlc3VsdC5tYXRjaGVkUHJv
cGVydGllcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbV9zdHlsZS0+c2V0
U3R5bGVUeXBlKHBzZXVkbyk7CisgICAgc3R5bGUtPnNldFN0eWxlVHlwZShwc2V1ZG8pOwogCi0g
ICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhtYXRjaFJlc3VsdCwgZSk7CisgICAgYXBwbHlNYXRj
aGVkUHJvcGVydGllcyhzdGF0ZSwgbWF0Y2hSZXN1bHQsIGUpOwogCiAgICAgLy8gQ2xlYW4gdXAg
b3VyIHN0eWxlIG9iamVjdCdzIGRpc3BsYXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90
aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0UmVuZGVyU3R5bGUoc3R5bGUoKSwgcGFyZW50U3R5bGUs
IDApOworICAgIGFkanVzdFJlbmRlclN0eWxlKHN0YXRlLCBzdHlsZS5nZXQoKSwgc3RhdGUucGFy
ZW50U3R5bGUoKSwgMCk7CiAKICAgICAvLyBTdGFydCBsb2FkaW5nIHJlc291cmNlcyByZWZlcmVu
Y2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoKTsKKyAgICBsb2Fk
UGVuZGluZ1Jlc291cmNlcyhzdGF0ZSk7CiAKICAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHls
ZVJlc29sdmVyKCk7CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4g
bV9zdHlsZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHN0eWxlLnJlbGVhc2UoKTsKIH0KIAogUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKGludCBwYWdl
SW5kZXgpCiB7Ci0gICAgaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLT5kb2N1bWVudEVs
ZW1lbnQoKSk7IC8vIG1fcm9vdEVsZW1lbnRTdHlsZSB3aWxsIGJlIHNldCB0byB0aGUgZG9jdW1l
bnQgc3R5bGUuCisgICAgUmVzb2x2ZVN0YXRlIHN0YXRlOworICAgIGluaXRGb3JTdHlsZVJlc29s
dmUoc3RhdGUsIGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKTsgLy8gbV9yb290RWxlbWVu
dFN0eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBkb2N1bWVudCBzdHlsZS4KIAotICAgIG1fc3R5bGUg
PSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgbV9zdHlsZS0+aW5oZXJpdEZyb20obV9yb290
RWxlbWVudFN0eWxlKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gUmVuZGVyU3R5
bGU6OmNyZWF0ZSgpOworICAgIHN0eWxlLT5pbmhlcml0RnJvbShzdGF0ZS5yb290RWxlbWVudFN0
eWxlKCkpOworICAgIHN0YXRlLnNldEVsZW1lbnQoZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50
KCkpOworICAgIHN0YXRlLnNldFN0eWxlKHN0eWxlLmdldCgpKTsKIAotICAgIGNvbnN0IGJvb2wg
aXNMZWZ0ID0gaXNMZWZ0UGFnZShwYWdlSW5kZXgpOworICAgIGNvbnN0IGJvb2wgaXNMZWZ0ID0g
aXNMZWZ0UGFnZShzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHBhZ2VJbmRleCk7CiAgICAgY29u
c3QgYm9vbCBpc0ZpcnN0ID0gaXNGaXJzdFBhZ2UocGFnZUluZGV4KTsKICAgICBjb25zdCBTdHJp
bmcgcGFnZSA9IHBhZ2VOYW1lKHBhZ2VJbmRleCk7CiAgICAgCkBAIC0xODAwLDQyICsxNzczLDQ1
IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZShp
bnQgcGFnZUluZGV4KQogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV91c2VyU3R5bGUuZ2V0
KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CiAgICAgLy8gT25seSBjb25zaWRlciB0aGUgZ2xv
YmFsIGF1dGhvciBSdWxlU2V0IGZvciBAcGFnZSBydWxlcywgYXMgcGVyIHRoZSBIVE1MNSBzcGVj
LgogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV9hdXRob3JTdHlsZS5nZXQoKSwgaXNMZWZ0
LCBpc0ZpcnN0LCBwYWdlKTsKLSAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAgc3RhdGUu
c2V0TGluZUhlaWdodFZhbHVlKDApOwogICAgIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOwog
I2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFy
aWFibGVEZWZpbml0aW9ucz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0
aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRp
ZXM8VmFyaWFibGVEZWZpbml0aW9ucz4oc3RhdGUsIHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5t
YXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKICNlbmRpZgotICAg
IGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBm
YWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9u
bHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4o
c3RhdGUsIHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkg
LSAxLCBpbmhlcml0ZWRPbmx5KTsKIAogICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBn
byBhaGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4KLSAgICB1cGRhdGVGb250KCk7CisgICAgdXBkYXRl
Rm9udChzdGF0ZSk7CiAKICAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3Vy
ZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUuCi0gICAgaWYgKG1fbGluZUhlaWdodFZhbHVl
KQotICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5lSGVp
Z2h0VmFsdWUpOworICAgIGlmIChzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSkKKyAgICAgICAgYXBw
bHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0
VmFsdWUoKSk7CiAKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVy
dGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAt
IDEsIGluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3Jp
dHlQcm9wZXJ0aWVzPihzdGF0ZSwgcmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9w
ZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwogCiAgICAgLy8gU3RhcnQgbG9hZGlu
ZyByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nUmVz
b3VyY2VzKCk7CisgICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoc3RhdGUpOwogCiAgICAgZG9jdW1l
bnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCiAgICAgLy8gTm93IHJldHVybiB0aGUg
c3R5bGUuCi0gICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOworICAgIHJldHVybiBzdHlsZS5y
ZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OmRl
ZmF1bHRTdHlsZUZvckVsZW1lbnQoKQogewotICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3Jl
YXRlKCk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVh
dGUoKTsKKyAgICBSZXNvbHZlU3RhdGUgc3RhdGU7CisgICAgc3RhdGUuc2V0RWxlbWVudChkb2N1
bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSk7CisgICAgc3RhdGUuc2V0U3R5bGUoc3R5bGUuZ2V0
KCkpOwogICAgIC8vIE1ha2Ugc3VyZSBvdXIgZm9udHMgYXJlIGluaXRpYWxpemVkIGlmIHdlIGRv
bid0IGluaGVyaXQgdGhlbSBmcm9tIG91ciBwYXJlbnQgc3R5bGUuCiAgICAgaWYgKFNldHRpbmdz
KiBzZXR0aW5ncyA9IGRvY3VtZW50U2V0dGluZ3MoKSkgewotICAgICAgICBpbml0aWFsaXplRm9u
dFN0eWxlKHNldHRpbmdzKTsKLSAgICAgICAgbV9zdHlsZS0+Zm9udCgpLnVwZGF0ZShmb250U2Vs
ZWN0b3IoKSk7CisgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc3RhdGUsIHNldHRpbmdzKTsK
KyAgICAgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogICAgIH0gZWxz
ZQotICAgICAgICBtX3N0eWxlLT5mb250KCkudXBkYXRlKDApOworICAgICAgICBzdHlsZS0+Zm9u
dCgpLnVwZGF0ZSgwKTsKIAotICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1
cm4gc3R5bGUucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJl
c29sdmVyOjpzdHlsZUZvclRleHQoVGV4dCogdGV4dE5vZGUpCkBAIC0xOTMwLDcgKzE5MDYsNyBA
QCBzdGF0aWMgYm9vbCBpc0Rpc3BsYXlGbGV4aWJsZUJveChFRGlzcGxheSBkaXNwbGF5KQogICAg
IHJldHVybiBkaXNwbGF5ID09IEZMRVggfHwgZGlzcGxheSA9PSBJTkxJTkVfRkxFWDsKIH0KIAot
dm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUs
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVudCAqZSkKK3ZvaWQgU3R5bGVSZXNvbHZl
cjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQgKmUpCiB7CiAgICAgQVNTRVJU
KHBhcmVudFN0eWxlKTsKIApAQCAtMTk0Miw3ICsxOTE4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHkKICAgICAgICAgLy8gcHJvcGVydHkuCiAgICAgICAgIC8vIFNpdGVzIGFsc28gY29tbW9u
bHkgdXNlIGRpc3BsYXk6aW5saW5lL2Jsb2NrIG9uIDx0ZD5zIGFuZCA8dGFibGU+cy4gSW4gcXVp
cmtzIG1vZGUgd2UgZm9yY2UKICAgICAgICAgLy8gdGhlc2UgdGFncyB0byByZXRhaW4gdGhlaXIg
ZGlzcGxheSB0eXBlcy4KLSAgICAgICAgaWYgKCFtX3NlbGVjdG9yQ2hlY2tlci5zdHJpY3RQYXJz
aW5nKCkgJiYgZSkgeworICAgICAgICBpZiAoZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkgJiYg
ZSkgewogICAgICAgICAgICAgaWYgKGUtPmhhc1RhZ05hbWUodGRUYWcpKSB7CiAgICAgICAgICAg
ICAgICAgc3R5bGUtPnNldERpc3BsYXkoVEFCTEVfQ0VMTCk7CiAgICAgICAgICAgICAgICAgc3R5
bGUtPnNldEZsb2F0aW5nKE5vRmxvYXQpOwpAQCAtMTk4OSw3ICsxOTY1LDcgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHkKIAogICAgICAgICAvLyBBYnNvbHV0ZS9maXhlZCBwb3NpdGlvbmVkIGVs
ZW1lbnRzLCBmbG9hdGluZyBlbGVtZW50cyBhbmQgdGhlIGRvY3VtZW50IGVsZW1lbnQgbmVlZCBi
bG9jay1saWtlIG91dHNpZGUgZGlzcGxheS4KICAgICAgICAgaWYgKHN0eWxlLT5oYXNPdXRPZkZs
b3dQb3NpdGlvbigpIHx8IHN0eWxlLT5pc0Zsb2F0aW5nKCkgfHwgKGUgJiYgZS0+ZG9jdW1lbnQo
KS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gZSkpCi0gICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxh
eShlcXVpdmFsZW50QmxvY2tEaXNwbGF5KHN0eWxlLT5kaXNwbGF5KCksIHN0eWxlLT5pc0Zsb2F0
aW5nKCksIG1fc2VsZWN0b3JDaGVja2VyLnN0cmljdFBhcnNpbmcoKSkpOworICAgICAgICAgICAg
c3R5bGUtPnNldERpc3BsYXkoZXF1aXZhbGVudEJsb2NrRGlzcGxheShzdHlsZS0+ZGlzcGxheSgp
LCBzdHlsZS0+aXNGbG9hdGluZygpLCAhZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpKTsKIAog
ICAgICAgICAvLyBGSVhNRTogRG9uJ3Qgc3VwcG9ydCB0aGlzIG11dGF0aW9uIGZvciBwc2V1ZG8g
c3R5bGVzIGxpa2UgZmlyc3QtbGV0dGVyIG9yIGZpcnN0LWxpbmUsIHNpbmNlIGl0J3Mgbm90IGNv
bXBsZXRlbHkKICAgICAgICAgLy8gY2xlYXIgaG93IHRoYXQgc2hvdWxkIHdvcmsuCkBAIC0yMDE5
LDcgKzE5OTUsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRl
clN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eQogCiAgICAgICAgIGlmIChpc0Rp
c3BsYXlGbGV4aWJsZUJveChwYXJlbnRTdHlsZS0+ZGlzcGxheSgpKSkgewogICAgICAgICAgICAg
c3R5bGUtPnNldEZsb2F0aW5nKE5vRmxvYXQpOwotICAgICAgICAgICAgc3R5bGUtPnNldERpc3Bs
YXkoZXF1aXZhbGVudEJsb2NrRGlzcGxheShzdHlsZS0+ZGlzcGxheSgpLCBzdHlsZS0+aXNGbG9h
dGluZygpLCBtX3NlbGVjdG9yQ2hlY2tlci5zdHJpY3RQYXJzaW5nKCkpKTsKKyAgICAgICAgICAg
IHN0eWxlLT5zZXREaXNwbGF5KGVxdWl2YWxlbnRCbG9ja0Rpc3BsYXkoc3R5bGUtPmRpc3BsYXko
KSwgc3R5bGUtPmlzRmxvYXRpbmcoKSwgIWRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKSk7CiAg
ICAgICAgIH0KIAogI2lmIEVOQUJMRShESUFMT0dfRUxFTUVOVCkKQEAgLTIxMjMsNyArMjA5OSw3
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0
eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5CiAKICAgICAvLyBMZXQgdGhlIHRoZW1lIGFsc28g
aGF2ZSBhIGNyYWNrIGF0IGFkanVzdGluZyB0aGUgc3R5bGUuCiAgICAgaWYgKHN0eWxlLT5oYXNB
cHBlYXJhbmNlKCkpCi0gICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+YWRqdXN0
U3R5bGUodGhpcywgc3R5bGUsIGUsIG1faGFzVUFBcHBlYXJhbmNlLCBtX2JvcmRlckRhdGEsIG1f
YmFja2dyb3VuZERhdGEsIG1fYmFja2dyb3VuZENvbG9yKTsKKyAgICAgICAgUmVuZGVyVGhlbWU6
OmRlZmF1bHRUaGVtZSgpLT5hZGp1c3RTdHlsZSh0aGlzLCBzdHlsZSwgZSwgc3RhdGUuaGFzVUFB
cHBlYXJhbmNlKCksIHN0YXRlLmJvcmRlckRhdGEoKSwgc3RhdGUuYmFja2dyb3VuZERhdGEoKSwg
c3RhdGUuYmFja2dyb3VuZENvbG9yKCkpOwogCiAgICAgLy8gSWYgd2UgaGF2ZSBmaXJzdC1sZXR0
ZXIgcHNldWRvIHN0eWxlLCBkbyBub3Qgc2hhcmUgdGhpcyBzdHlsZS4KICAgICBpZiAoc3R5bGUt
Pmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCkBAIC0yMjA0LDI3ICsyMTgwLDE3IEBAIHN0
YXRpYyB2b2lkIGNoZWNrRm9yT3JpZW50YXRpb25DaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlKQog
ICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKIH0KIAot
dm9pZCBTdHlsZVJlc29sdmVyOjp1cGRhdGVGb250KCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6dXBk
YXRlRm9udChSZXNvbHZlU3RhdGUmIHN0YXRlKQogewotICAgIGlmICghbV9mb250RGlydHkpCisg
ICAgaWYgKCFzdGF0ZS5mb250RGlydHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2hlY2tG
b3JUZXh0U2l6ZUFkanVzdCgpOwotICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShzdHls
ZSgpLCBtX3BhcmVudFN0eWxlKTsKLSAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3R5bGUoKSwgbV9w
YXJlbnRTdHlsZSk7Ci0gICAgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShzdHlsZSgpKTsKLSAg
ICBtX3N0eWxlLT5mb250KCkudXBkYXRlKG1fZm9udFNlbGVjdG9yKTsKLSAgICBtX2ZvbnREaXJ0
eSA9IGZhbHNlOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNhY2hlQm9yZGVyQW5kQmFja2dy
b3VuZCgpCi17Ci0gICAgbV9oYXNVQUFwcGVhcmFuY2UgPSBtX3N0eWxlLT5oYXNBcHBlYXJhbmNl
KCk7Ci0gICAgaWYgKG1faGFzVUFBcHBlYXJhbmNlKSB7Ci0gICAgICAgIG1fYm9yZGVyRGF0YSA9
IG1fc3R5bGUtPmJvcmRlcigpOwotICAgICAgICBtX2JhY2tncm91bmREYXRhID0gKm1fc3R5bGUt
PmJhY2tncm91bmRMYXllcnMoKTsKLSAgICAgICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBtX3N0eWxl
LT5iYWNrZ3JvdW5kQ29sb3IoKTsKLSAgICB9CisgICAgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdChz
dGF0ZS5zdHlsZSgpKTsKKyAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uoc3RhdGUsIHN0
YXRlLnN0eWxlKCksIHN0YXRlLnBhcmVudFN0eWxlKCkpOworICAgIGNoZWNrRm9yWm9vbUNoYW5n
ZShzdGF0ZSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucGFyZW50U3R5bGUoKSk7CisgICAgY2hlY2tG
b3JPcmllbnRhdGlvbkNoYW5nZShzdGF0ZS5zdHlsZSgpKTsKKyAgICBzdGF0ZS5zdHlsZSgpLT5m
b250KCkudXBkYXRlKG1fZm9udFNlbGVjdG9yKTsKKyAgICBzdGF0ZS5zZXRGb250RGlydHkoZmFs
c2UpOwogfQogCiBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBTdHlsZVJlc29sdmVyOjpzdHlsZVJ1
bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKQEAgLTIy
MzcsNjUgKzIyMDMsNjkgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6
cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgUHMKICAgICBpZiAoIWUgfHwg
IWUtPmRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIG1fc2VsZWN0b3JDaGVja2VyLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpDb2xs
ZWN0aW5nUnVsZXMpOwotCi0gICAgaW5pdEVsZW1lbnQoZSk7Ci0gICAgaW5pdEZvclN0eWxlUmVz
b2x2ZShlLCAwLCBwc2V1ZG9JZCk7CisgICAgUmVzb2x2ZVN0YXRlIHN0YXRlOworICAgIGluaXRF
bGVtZW50KHN0YXRlLCBlKTsKKyAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKHN0YXRlLCBlKTsKKyAg
ICBzdGF0ZS5zZXRQc2V1ZG9TdHlsZShwc2V1ZG9JZCk7CisgICAgc3RhdGUuc2V0TW9kZShTZWxl
Y3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7CiAKICAgICBNYXRjaFJlc3VsdCBkdW1teTsK
ICAgICBpZiAocnVsZXNUb0luY2x1ZGUgJiBVQUFuZFVzZXJDU1NSdWxlcykgewogICAgICAgICAv
LyBGaXJzdCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB1c2VyIGFnZW50IHNoZWV0LgotICAgICAg
ICBtYXRjaFVBUnVsZXMoZHVtbXkpOworICAgICAgICBtYXRjaFVBUnVsZXMoc3RhdGUsIGR1bW15
KTsKIAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sgdXNlciBzaGVldCBydWxlcy4KLSAgICAgICAg
aWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICAgICAgbWF0Y2hVc2VyUnVs
ZXMoZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CisgICAgICAgIGlmICht
X21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykgeworICAgICAgICAgICAgc3RhdGUuc2V0SW5jbHVk
ZUVtcHR5UnVsZXMocnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKKyAgICAgICAgICAg
IG1hdGNoVXNlclJ1bGVzKHN0YXRlLCBkdW1teSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBp
ZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgKHJ1bGVzVG9JbmNsdWRlICYgQXV0aG9y
Q1NTUnVsZXMpKSB7Ci0gICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVzVG9JbmNsdWRl
ICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcyk7Ci0KKyAgICAgICAgc3RhdGUuc2V0U2FtZU9yaWdpbk9u
bHkoIShydWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2luQ1NTUnVsZXMpKTsKKyAgICAgICAgc3Rh
dGUuc2V0SW5jbHVkZUVtcHR5UnVsZXMocnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsK
KyAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRob3Igc2hlZXRzLgot
ICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKGR1bW15LCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NT
UnVsZXMpOwotCi0gICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSBmYWxzZTsKKyAgICAgICAgbWF0
Y2hBdXRob3JSdWxlcyhzdGF0ZSwgZHVtbXkpOwogICAgIH0KLQotICAgIG1fc2VsZWN0b3JDaGVj
a2VyLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpSZXNvbHZpbmdTdHlsZSk7Ci0KLSAgICByZXR1
cm4gbV9ydWxlTGlzdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHN0YXRlLnJ1bGVMaXN0KCkucmVs
ZWFzZSgpOwogfQogCi1pbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpydWxlTWF0Y2hlcyhjb25z
dCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQoraW5saW5l
IGJvb2wgU3R5bGVSZXNvbHZlcjo6cnVsZU1hdGNoZXMoUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgY29u
c3QgUnVsZURhdGEmIHJ1bGVEYXRhLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgUHNldWRv
SWQmIGR5bmFtaWNQc2V1ZG8pCiB7Ci0gICAgbV9keW5hbWljUHNldWRvID0gTk9QU0VVRE87Cisg
ICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRlLmVsZW1lbnQoKTsKIAogICAgIGlmIChydWxlRGF0
YS5oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoKSkgewogICAgICAgICAvLyBXZSBrbm93IHRoaXMg
c2VsZWN0b3IgZG9lcyBub3QgaW5jbHVkZSBhbnkgcHNldWRvIGVsZW1lbnRzLgotICAgICAgICBp
ZiAobV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETykKKyAgICAgICAgaWYgKHN0YXRlLnBzZXVkb1N0
eWxlKCkgIT0gTk9QU0VVRE8pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIC8v
IFdlIGtub3cgYSBzdWZmaWNpZW50bHkgc2ltcGxlIHNpbmdsZSBwYXJ0IHNlbGVjdG9yIG1hdGNo
ZXMgc2ltcGx5IGJlY2F1c2Ugd2UgZm91bmQgaXQgZnJvbSB0aGUgcnVsZSBoYXNoLgogICAgICAg
ICAvLyBUaGlzIGlzIGxpbWl0ZWQgdG8gSFRNTCBvbmx5IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hl
Y2sgdGhlIG5hbWVzcGFjZS4KLSAgICAgICAgaWYgKHJ1bGVEYXRhLmhhc1JpZ2h0bW9zdFNlbGVj
dG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKCkgJiYgbV9lbGVtZW50LT5pc0hUTUxFbGVt
ZW50KCkpIHsKKyAgICAgICAgaWYgKHJ1bGVEYXRhLmhhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hp
bmdIVE1MQmFzZWRPblJ1bGVIYXNoKCkgJiYgZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKSB7CiAg
ICAgICAgICAgICBpZiAoIXJ1bGVEYXRhLmhhc011bHRpcGFydFNlbGVjdG9yKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHJ1bGVEYXRhLnNl
bGVjdG9yKCktPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZyAmJiAhU2VsZWN0b3JDaGVja2Vy
Ojp0YWdNYXRjaGVzKG1fZWxlbWVudCwgcnVsZURhdGEuc2VsZWN0b3IoKS0+dGFnUU5hbWUoKSkp
CisgICAgICAgIGlmIChydWxlRGF0YS5zZWxlY3RvcigpLT5tX21hdGNoID09IENTU1NlbGVjdG9y
OjpUYWcgJiYgIVNlbGVjdG9yQ2hlY2tlcjo6dGFnTWF0Y2hlcyhlbGVtZW50LCBydWxlRGF0YS5z
ZWxlY3RvcigpLT50YWdRTmFtZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVj
dG9yKG1fZWxlbWVudCwgcnVsZURhdGEuc2VsZWN0b3IoKSkpCisgICAgICAgIGlmICghU2VsZWN0
b3JDaGVja2VyOjpmYXN0Q2hlY2tSaWdodG1vc3RBdHRyaWJ1dGVTZWxlY3RvcihlbGVtZW50LCBy
dWxlRGF0YS5zZWxlY3RvcigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
cmV0dXJuIG1fc2VsZWN0b3JDaGVja2VyLmZhc3RDaGVjayhydWxlRGF0YS5zZWxlY3RvcigpLCBt
X2VsZW1lbnQpOworCisgICAgICAgIHJldHVybiBTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVjayhy
dWxlRGF0YS5zZWxlY3RvcigpLCBlbGVtZW50KTsKICAgICB9CiAKICAgICAvLyBTbG93IHBhdGgu
Ci0gICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1
bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0
Y2hFbmFibGVkKTsKLSAgICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IHN0eWxlKCk7CisgICAgU2Vs
ZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVEYXRhLnNl
bGVjdG9yKCksIGVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRW5hYmxlZCk7
CisgICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBzdGF0ZS5zdHlsZSgpOwogICAgIGNvbnRleHQu
c2NvcGUgPSBzY29wZTsKLSAgICBjb250ZXh0LnBzZXVkb1N0eWxlID0gbV9wc2V1ZG9TdHlsZTsK
LSAgICBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gbV9zZWxlY3RvckNoZWNrZXIubWF0
Y2goY29udGV4dCwgbV9keW5hbWljUHNldWRvLCBET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3ko
KSk7CisgICAgY29udGV4dC5wc2V1ZG9TdHlsZSA9IHN0YXRlLnBzZXVkb1N0eWxlKCk7CisKKyAg
ICAvLyBvbi1zdGFjaworICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZG9jdW1l
bnQoKSk7CisgICAgc2VsZWN0b3JDaGVja2VyLnNldE1vZGUoc3RhdGUubW9kZSgpKTsKKyAgICBT
ZWxlY3RvckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gc2VsZWN0b3JDaGVja2VyLm1hdGNoKGNvbnRl
eHQsIGR5bmFtaWNQc2V1ZG8sIERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSgpKTsKICAgICBp
ZiAobWF0Y2ggIT0gU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAobV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETyAmJiBtX3BzZXVk
b1N0eWxlICE9IG1fZHluYW1pY1BzZXVkbykKKyAgICBpZiAoc3RhdGUucHNldWRvU3R5bGUoKSAh
PSBOT1BTRVVETyAmJiBzdGF0ZS5wc2V1ZG9TdHlsZSgpICE9IGR5bmFtaWNQc2V1ZG8pCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIzMDUsMTAgKzIyNzUs
OSBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9uU2VsZWN0b3IoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZQogICAgIGlmICghcmVnaW9uU2VsZWN0b3IgfHwg
IXJlZ2lvbkVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fcHNldWRvU3R5
bGUgPSBOT1BTRVVETzsKLQorICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZG9j
dW1lbnQoKSk7CiAgICAgZm9yIChjb25zdCBDU1NTZWxlY3RvciogcyA9IHJlZ2lvblNlbGVjdG9y
OyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKQotICAgICAgICBpZiAobV9zZWxlY3Rv
ckNoZWNrZXIubWF0Y2hlcyhzLCByZWdpb25FbGVtZW50KSkKKyAgICAgICAgaWYgKHNlbGVjdG9y
Q2hlY2tlci5tYXRjaGVzKHMsIHJlZ2lvbkVsZW1lbnQpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzI4LDkgKzIyOTcsOSBAQCBMZW5ndGggU3R5
bGVSZXNvbHZlcjo6Y29udmVydFRvRmxvYXRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlLCBSZQogfQogCiB0ZW1wbGF0ZSA8U3R5bGVSZXNvbHZlcjo6U3R5bGVBcHBsaWNh
dGlvblBhc3MgcGFzcz4KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKGNvbnN0
IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgYm9vbCBpc0lt
cG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgcHJvcGVy
dHlXaGl0ZWxpc3RUeXBlKQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnRpZXMoUmVz
b2x2ZVN0YXRlJiBzdGF0ZSwgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5
bGVSdWxlKiBydWxlLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHksIFByb3Bl
cnR5V2hpdGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5cGUpCiB7Ci0gICAgQVNTRVJUKChw
cm9wZXJ0eVdoaXRlbGlzdFR5cGUgIT0gUHJvcGVydHlXaGl0ZWxpc3RSZWdpb24pIHx8IG1fcmVn
aW9uRm9yU3R5bGluZyk7CisgICAgQVNTRVJUKChwcm9wZXJ0eVdoaXRlbGlzdFR5cGUgIT0gUHJv
cGVydHlXaGl0ZWxpc3RSZWdpb24pIHx8IHN0YXRlLnJlZ2lvbkZvclN0eWxpbmcoKSk7CiAgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6d2lsbFByb2Nlc3NSdWxlKGRvY3VtZW50KCksIHJ1bGUsIHRoaXMpOwogCiAgICAg
dW5zaWduZWQgcHJvcGVydHlDb3VudCA9IHByb3BlcnRpZXMtPnByb3BlcnR5Q291bnQoKTsKQEAg
LTIzNTgsNyArMjMyNyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKGNv
bnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsCiAgICAgICAgIGNhc2Ug
VmFyaWFibGVEZWZpbml0aW9uczoKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKENTU1Byb3Bl
cnR5VmFyaWFibGUgPCBmaXJzdENTU1Byb3BlcnR5LCBDU1NfdmFyaWFibGVfaXNfYmVmb3JlX2Zp
cnN0X3Byb3BlcnR5KTsKICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVZh
cmlhYmxlKQotICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJy
ZW50LnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIGN1cnJl
bnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAg
ICAgICAgIGNhc2UgSGlnaFByaW9yaXR5UHJvcGVydGllczoKQEAgLTIzNzEsNDIgKzIzNDAsNDMg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0
eVNldCogcHJvcGVydGllcywgU3R5bGVSdWwKICNlbmRpZgogICAgICAgICAgICAgLy8gZ2l2ZSBz
cGVjaWFsIHByaW9yaXR5IHRvIGZvbnQteHh4LCBjb2xvciBwcm9wZXJ0aWVzLCBldGMKICAgICAg
ICAgICAgIGlmIChwcm9wZXJ0eSA8IENTU1Byb3BlcnR5TGluZUhlaWdodCkKLSAgICAgICAgICAg
ICAgICBhcHBseVByb3BlcnR5KGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKKyAgICAg
ICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBjdXJyZW50LmlkKCksIGN1cnJlbnQudmFs
dWUoKSk7CiAgICAgICAgICAgICAvLyB3ZSBhcHBseSBsaW5lLWhlaWdodCBsYXRlcgogICAgICAg
ICAgICAgZWxzZSBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQotICAgICAg
ICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gY3VycmVudC52YWx1ZSgpOworICAgICAgICAg
ICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZShjdXJyZW50LnZhbHVlKCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG93UHJpb3JpdHlQcm9wZXJ0aWVzOgogICAgICAg
ICAgICAgaWYgKHByb3BlcnR5ID4gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQotICAgICAgICAgICAg
ICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOworICAgICAg
ICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1
ZSgpKTsKICAgICAgICAgfQogICAgIH0KICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZFByb2Nlc3NSdWxlKGNvb2tpZSk7CiB9CiAKIHRlbXBsYXRlIDxTdHlsZVJlc29sdmVyOjpTdHls
ZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgYm9vbCBpc0ltcG9ydGFu
dCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5KQordm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKFJlc29sdmVTdGF0ZSYgc3Rh
dGUsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgYm9vbCBpc0ltcG9ydGFudCwgaW50
IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5KQogewogICAgIGlm
IChzdGFydEluZGV4ID09IC0xKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9zdHlsZS0+
aW5zaWRlTGluaygpICE9IE5vdEluc2lkZUxpbmspIHsKKyAgICBpZiAoc3RhdGUuc3R5bGUoKS0+
aW5zaWRlTGluaygpICE9IE5vdEluc2lkZUxpbmspIHsKICAgICAgICAgZm9yIChpbnQgaSA9IHN0
YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewogICAgICAgICAgICAgY29uc3QgTWF0Y2hl
ZFByb3BlcnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3Bl
cnRpZXNbaV07CiAgICAgICAgICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gbWF0Y2hlZFBy
b3BlcnRpZXMubGlua01hdGNoVHlwZTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBi
ZSBuaWNlciB0byBwYXNzIHRoZXNlIGFzIGFyZ3VtZW50cyBidXQgdGhhdCByZXF1aXJlcyBjaGFu
Z2VzIGluIG1hbnkgcGxhY2VzLgotICAgICAgICAgICAgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFy
U3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbms7Ci0gICAg
ICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBsaW5rTWF0Y2hUeXBl
ICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7CisgICAgICAgICAgICBzdGF0ZS5zZXRB
cHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUobGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tl
cjo6TWF0Y2hMaW5rKTsKKyAgICAgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUobGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVk
KTsKIAotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0aWVzPHBhc3M+KG1hdGNoZWRQcm9wZXJ0aWVz
LnByb3BlcnRpZXMuZ2V0KCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRSdWxlc1tpXSwgaXNJbXBvcnRh
bnQsIGluaGVyaXRlZE9ubHksIHN0YXRpY19jYXN0PFByb3BlcnR5V2hpdGVsaXN0VHlwZT4obWF0
Y2hlZFByb3BlcnRpZXMud2hpdGVsaXN0VHlwZSkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0
aWVzPHBhc3M+KHN0YXRlLCBtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRj
aFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0
aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlz
dFR5cGUpKTsKICAgICAgICAgfQotICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZSA9IHRydWU7Ci0gICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGZh
bHNlOworICAgICAgICAvLyBuZWVkIHRvIHJldmVydD8gSSB0aGluaywgd2UgZG9uJ3QgbmVlZC4u
LgorICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSk7Cisg
ICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9
IGVuZEluZGV4OyArK2kpIHsKICAgICAgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIG1hdGNo
ZWRQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXNbaV07Ci0gICAgICAg
IGFwcGx5UHJvcGVydGllczxwYXNzPihtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgp
LCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5
LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndo
aXRlbGlzdFR5cGUpKTsKKyAgICAgICAgYXBwbHlQcm9wZXJ0aWVzPHBhc3M+KHN0YXRlLCBtYXRj
aGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNb
aV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRl
bGlzdFR5cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUpKTsKICAgICB9CiB9CiAK
QEAgLTI1MDUsOSArMjQ3NSwxMSBAQCBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUluTWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBSZQogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMo
Y29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQor
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKFJlc29sdmVTdGF0ZSYg
c3RhdGUsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QgRWxlbWVudCogZWxl
bWVudCkKIHsKICAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0g
c3RhdGUuc3R5bGUoKTsKKyAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJl
bnRTdHlsZSgpOwogICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9IG1hdGNoUmVzdWx0LmlzQ2FjaGVh
YmxlID8gY29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChtYXRjaFJlc3VsdC5tYXRjaGVkUHJv
cGVydGllcy5kYXRhKCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSkgOiAw
OwogICAgIGJvb2wgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAgICAgY29uc3QgTWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZUl0ZW0qIGNhY2hlSXRlbSA9IDA7CkBAIC0yNTE1LDE1ICsyNDg3LDE2
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRj
aFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIC8vIFdlIGNhbiBidWlsZCB1cCB0
aGUgc3R5bGUgYnkgY29weWluZyBub24taW5oZXJpdGVkIHByb3BlcnRpZXMgZnJvbSBhbiBlYXJs
aWVyIHN0eWxlIG9iamVjdCBidWlsdCB1c2luZyB0aGUgc2FtZSBleGFjdAogICAgICAgICAvLyBz
dHlsZSBkZWNsYXJhdGlvbnMuIFdlIHRoZW4gb25seSBuZWVkIHRvIGFwcGx5IHRoZSBpbmhlcml0
ZWQgcHJvcGVydGllcywgaWYgYW55LCBhcyB0aGVpciB2YWx1ZXMgY2FuIGRlcGVuZCBvbiB0aGUg
CiAgICAgICAgIC8vIGVsZW1lbnQgY29udGV4dC4gVGhpcyBpcyBmYXN0IGFuZCBzYXZlcyBtZW1v
cnkgYnkgcmV1c2luZyB0aGUgc3R5bGUgZGF0YSBzdHJ1Y3R1cmVzLgotICAgICAgICBtX3N0eWxl
LT5jb3B5Tm9uSW5oZXJpdGVkRnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKLSAg
ICAgICAgaWYgKG1fcGFyZW50U3R5bGUtPmluaGVyaXRlZERhdGFTaGFyZWQoY2FjaGVJdGVtLT5w
YXJlbnRSZW5kZXJTdHlsZS5nZXQoKSkgJiYgIWlzQXRTaGFkb3dCb3VuZGFyeShlbGVtZW50KSkg
ewotICAgICAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXR1cyA9IG1fc3R5bGUtPmluc2lkZUxp
bmsoKTsKKyAgICAgICAgc3R5bGUtPmNvcHlOb25Jbmhlcml0ZWRGcm9tKGNhY2hlSXRlbS0+cmVu
ZGVyU3R5bGUuZ2V0KCkpOworICAgICAgICAvLyBvcnoKKyAgICAgICAgaWYgKHBhcmVudFN0eWxl
LT5pbmhlcml0ZWREYXRhU2hhcmVkKGNhY2hlSXRlbS0+cGFyZW50UmVuZGVyU3R5bGUuZ2V0KCkp
ICYmICFpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkpIHsKKyAgICAgICAgICAgIEVJbnNpZGVM
aW5rIGxpbmtTdGF0dXMgPSBzdHlsZS0+aW5zaWRlTGluaygpOwogICAgICAgICAgICAgLy8gSWYg
dGhlIGNhY2hlIGl0ZW0gcGFyZW50IHN0eWxlIGhhcyBpZGVudGljYWwgaW5oZXJpdGVkIHByb3Bl
cnRpZXMgdG8gdGhlIGN1cnJlbnQgcGFyZW50IHN0eWxlIHRoZW4gdGhlCiAgICAgICAgICAgICAv
LyByZXN1bHRpbmcgc3R5bGUgd2lsbCBiZSBpZGVudGljYWwgdG9vLiBXZSBjb3B5IHRoZSBpbmhl
cml0ZWQgcHJvcGVydGllcyBvdmVyIGZyb20gdGhlIGNhY2hlIGFuZCBhcmUgZG9uZS4KLSAgICAg
ICAgICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkp
OworICAgICAgICAgICAgc3R5bGUtPmluaGVyaXRGcm9tKGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUu
Z2V0KCkpOwogCiAgICAgICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5IHRoZSBsaW5rIHN0YXR1cyBp
cyB0cmVhdGVkIGxpa2UgYW4gaW5oZXJpdGVkIHByb3BlcnR5LiBXZSBuZWVkIHRvIGV4cGxpY2l0
bHkgcmVzdG9yZSBpdC4KLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEluc2lkZUxpbmsobGlua1N0
YXR1cyk7CisgICAgICAgICAgICBzdHlsZS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdHVzKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkg
PSB0cnVlOyAKQEAgLTI1MzEsNjAgKzI1MDQsNjAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QK
IAogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgIC8vIEZpcnN0IGFwcGx5IGFsbCB2YXJp
YWJsZSBkZWZpbml0aW9ucywgYXMgdGhleSBtYXkgYmUgdXNlZCBkdXJpbmcgYXBwbGljYXRpb24g
b2YgbGF0ZXIgcHJvcGVydGllcy4KLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxl
RGVmaW5pdGlvbnM+KG1hdGNoUmVzdWx0LCBmYWxzZSwgMCwgbWF0Y2hSZXN1bHQubWF0Y2hlZFBy
b3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRj
aFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1
dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGll
czxWYXJpYWJsZURlZmluaXRpb25zPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5
SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmlu
aXRpb25zPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxl
LCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAg
ICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KHN0YXRlLCBtYXRj
aFJlc3VsdCwgZmFsc2UsIDAsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAt
IDEsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJp
YWJsZURlZmluaXRpb25zPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJh
bmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxl
RGVmaW5pdGlvbnM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2Vz
LmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5o
ZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRp
b25zPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVB
UnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7
CiAjZW5kaWYKIAogICAgIC8vIE5vdyB3ZSBoYXZlIGFsbCBvZiB0aGUgbWF0Y2hlZCBydWxlcyBp
biB0aGUgYXBwcm9wcmlhdGUgb3JkZXIuIFdhbGsgdGhlIHJ1bGVzIGFuZCBhcHBseQogICAgIC8v
IGhpZ2gtcHJpb3JpdHkgcHJvcGVydGllcyBmaXJzdCwgaS5lLiwgdGhvc2UgcHJvcGVydGllcyB0
aGF0IG90aGVyIHByb3BlcnRpZXMgZGVwZW5kIG9uLgogICAgIC8vIFRoZSBvcmRlciBpcyAoMSkg
aGlnaC1wcmlvcml0eSBub3QgaW1wb3J0YW50LCAoMikgaGlnaC1wcmlvcml0eSBpbXBvcnRhbnQs
ICgzKSBub3JtYWwgbm90IGltcG9ydGFudAogICAgIC8vIGFuZCAoNCkgbm9ybWFsIGltcG9ydGFu
dC4KLSAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGll
czxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgZmFsc2UsIDAsIG1hdGNoUmVz
dWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0g
ICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJl
c3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1
bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5
TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRy
dWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMu
bGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVz
dWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFw
cGx5SW5oZXJpdGVkT25seSk7Ci0KLSAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVu
ZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBtX3N0eWxlLT5lZmZlY3RpdmVab29tKCkpIHsK
LSAgICAgICAgbV9mb250RGlydHkgPSB0cnVlOworICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1
ZSgwKTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+
KHN0YXRlLCBtYXRjaFJlc3VsdCwgZmFsc2UsIDAsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0
aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUs
IG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5s
YXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgdHJ1ZSwg
bWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0
VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGll
czxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNo
UmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUs
IGFwcGx5SW5oZXJpdGVkT25seSk7CisKKyAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+
cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKSB7
CisgICAgICAgIHN0YXRlLnNldEZvbnREaXJ0eSh0cnVlKTsKICAgICAgICAgYXBwbHlJbmhlcml0
ZWRPbmx5ID0gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQs
IGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgotICAgIHVwZGF0ZUZvbnQoKTsKKyAgICB1cGRh
dGVGb250KHN0YXRlKTsKIAogICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBz
dXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZS4KLSAgICBpZiAobV9saW5lSGVpZ2h0VmFs
dWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX2xpbmVI
ZWlnaHRWYWx1ZSk7CisgICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKQorICAgICAgICBh
cHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLmxpbmVIZWln
aHRWYWx1ZSgpKTsKIAogICAgIC8vIE1hbnkgcHJvcGVydGllcyBkZXBlbmQgb24gdGhlIGZvbnQu
IElmIGl0IGNoYW5nZXMgd2UganVzdCBhcHBseSBhbGwgcHJvcGVydGllcy4KLSAgICBpZiAoY2Fj
aGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpICE9IG1f
c3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKQorICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVt
LT5yZW5kZXJTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgIT0gc3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpKQogICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkgPSBmYWxzZTsKIAogICAgIC8vIE5vdyBk
byB0aGUgbm9ybWFsIHByaW9yaXR5IFVBIHByb3BlcnRpZXMuCi0gICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9y
aXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhl
cml0ZWRPbmx5KTsKICAgICAKICAgICAvLyBDYWNoZSBvdXIgYm9yZGVyIGFuZCBiYWNrZ3JvdW5k
IHNvIHRoYXQgd2UgY2FuIGV4YW1pbmUgdGhlbSBsYXRlci4KLSAgICBjYWNoZUJvcmRlckFuZEJh
Y2tncm91bmQoKTsKKyAgICBzdGF0ZS5jYWNoZUJvcmRlckFuZEJhY2tncm91bmQoc3RhdGUuc3R5
bGUoKSk7CiAgICAgCiAgICAgLy8gTm93IGRvIHRoZSBhdXRob3IgYW5kIHVzZXIgbm9ybWFsIHBy
aW9yaXR5IHByb3BlcnRpZXMgYW5kIGFsbCB0aGUgIWltcG9ydGFudCBwcm9wZXJ0aWVzLgotICAg
IGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3Vs
dCwgZmFsc2UsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlICsgMSwgbWF0Y2hSZXN1bHQu
bWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBh
cHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQs
IHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJh
bmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1h
dGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVz
ZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8
TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhl
cml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVy
dGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RV
QVJ1bGUgKyAxLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBs
eUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQ
cm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5m
aXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJ
bmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJv
cGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmly
c3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0
ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGll
cz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1
bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwog
ICAgCiAgICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0
eWxlLgotICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CisgICAgbG9hZFBlbmRpbmdSZXNvdXJj
ZXMoc3RhdGUpOwogICAgIAotICAgIEFTU0VSVCghbV9mb250RGlydHkpOworICAgIEFTU0VSVCgh
c3RhdGUuZm9udERpcnR5KCkpOwogICAgIAogICAgIGlmIChjYWNoZUl0ZW0gfHwgIWNhY2hlSGFz
aCkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNDYWNoZWFibGVJbk1hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUobV9lbGVtZW50LCBtX3N0eWxlLmdldCgpLCBtX3BhcmVudFN0eWxlKSkKKyAgICBp
ZiAoIWlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKGVsZW1lbnQsIHN0eWxlLCBw
YXJlbnRTdHlsZSkpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRUb01hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGUobV9zdHlsZS5nZXQoKSwgbV9wYXJlbnRTdHlsZSwgY2FjaGVIYXNoLCBtYXRjaFJlc3Vs
dCk7CisgICAgYWRkVG9NYXRjaGVkUHJvcGVydGllc0NhY2hlKHN0eWxlLCBwYXJlbnRTdHlsZSwg
Y2FjaGVIYXNoLCBtYXRjaFJlc3VsdCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJl
UGFnZVJ1bGVzKGNvbnN0IFN0eWxlUnVsZVBhZ2UqIHIxLCBjb25zdCBTdHlsZVJ1bGVQYWdlKiBy
MikKQEAgLTI2NDYsMTAgKzI2MTksMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFBhZ2VS
dWxlc0Zvckxpc3QoVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYgbWF0Y2hlZFJ1bGVzLAogICAgIH0K
IH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjppc0xlZnRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0
Citib29sIFN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2UoUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50
U3R5bGUsIGludCBwYWdlSW5kZXgpIGNvbnN0CiB7CiAgICAgYm9vbCBpc0ZpcnN0UGFnZUxlZnQg
PSBmYWxzZTsKLSAgICBpZiAoIW1fcm9vdEVsZW1lbnRTdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpKQorICAgIGlmICghcm9vdEVsZW1lbnRTdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpKQogICAgICAgICBpc0ZpcnN0UGFnZUxlZnQgPSB0cnVlOwogCiAgICAgcmV0dXJuIChwYWdl
SW5kZXggKyAoaXNGaXJzdFBhZ2VMZWZ0ID8gMSA6IDApKSAlIDI7CkBAIC0yNzQ1LDE4ICsyNzE4
LDMyIEBAIENTU1N0eWxlUnVsZSogU3R5bGVSZXNvbHZlcjo6ZW5zdXJlRnVsbENTU09NV3JhcHBl
ckZvckluc3BlY3RvcihTdHlsZVJ1bGUqIHJ1bGUpCiAgICAgcmV0dXJuIG1fc3R5bGVSdWxlVG9D
U1NPTVdyYXBwZXJNYXAuZ2V0KHJ1bGUpLmdldCgpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwg
UmVuZGVyU3R5bGUqIHN0eWxlKQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5V2l0
aFZhbHVlQ2hlY2tpbmcoUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlKQogewotICAgIGluaXRFbGVtZW50KDApOwotICAgIGluaXRGb3JTdHlsZVJl
c29sdmUoMCwgc3R5bGUpOwotICAgIG1fc3R5bGUgPSBzdHlsZTsKLSAgICBhcHBseVByb3BlcnR5
VG9DdXJyZW50U3R5bGUoaWQsIHZhbHVlKTsKKyAgICBpZiAodmFsdWUpCisgICAgICAgIGFwcGx5
UHJvcGVydHkoc3RhdGUsIGlkLCB2YWx1ZSk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlGb250UHJvcGVydHlUb1N0eWxlKFJlbmRlclN0
eWxlKiB0YXJnZXQsIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHJlZmVyZW5jZSkKIHsKLSAgICBp
ZiAodmFsdWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoaWQsIHZhbHVlKTsKKyAgICBSZXNvbHZl
U3RhdGUgc3RhdGU7CisgICAgaW5pdEVsZW1lbnQoc3RhdGUsIDApOworICAgIGluaXRGb3JTdHls
ZVJlc29sdmUoc3RhdGUsIDAsIHRhcmdldCk7CisgICAgc3RhdGUuc2V0RWxlbWVudChkb2N1bWVu
dCgpLT5kb2N1bWVudEVsZW1lbnQoKSk7CisgICAgc3RhdGUuc2V0U3R5bGUodGFyZ2V0KTsKKwor
ICAgIGFwcGx5UHJvcGVydHlXaXRoVmFsdWVDaGVja2luZyhzdGF0ZSwgQ1NTUHJvcGVydHlGb250
RmFtaWx5LCByZWZlcmVuY2UtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250RmFt
aWx5KS5nZXQoKSk7CisgICAgYXBwbHlQcm9wZXJ0eVdpdGhWYWx1ZUNoZWNraW5nKHN0YXRlLCBD
U1NQcm9wZXJ0eUZvbnRTdHlsZSwgcmVmZXJlbmNlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1By
b3BlcnR5Rm9udFN0eWxlKS5nZXQoKSk7CisgICAgYXBwbHlQcm9wZXJ0eVdpdGhWYWx1ZUNoZWNr
aW5nKHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCByZWZlcmVuY2UtPmdldFByb3BlcnR5
Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250VmFyaWFudCkuZ2V0KCkpOworICAgIGFwcGx5UHJvcGVy
dHlXaXRoVmFsdWVDaGVja2luZyhzdGF0ZSwgQ1NTUHJvcGVydHlGb250V2VpZ2h0LCByZWZlcmVu
Y2UtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0KS5nZXQoKSk7CisK
KyAgICAvLyBBcyBkZXNjcmliZWQgaW4gQlVHNjYyOTEsIHNldHRpbmcgZm9udC1zaXplIGFuZCBs
aW5lLWhlaWdodCBvbiBhIGZvbnQgbWF5IGVudGFpbCBhIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21w
dXRlTGVuZ3RoRG91YmxlIGNhbGwsCisgICAgLy8gd2hpY2ggYXNzdW1lcyB0aGUgZm9udE1ldHJp
Y3MgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIGFmZmVjdGVkIGZvbnQsIG90aGVyd2lzZSBhIGNyYXNo
IG9jY3VycyAoc2VlIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0Lzk2MTIyKS4KKyAg
ICAvLyBUaGUgdXBkYXRlRm9udCgpIGNhbGxzIGJlbG93IHVwZGF0ZSB0aGUgZm9udE1ldHJpY3Mg
YW5kIGVuc3VyZSB0aGUgcHJvcGVyIHNldHRpbmcgb2YgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdo
dC4KKyAgICB1cGRhdGVGb250KHN0YXRlKTsKKyAgICBhcHBseVByb3BlcnR5V2l0aFZhbHVlQ2hl
Y2tpbmcoc3RhdGUsIENTU1Byb3BlcnR5Rm9udFNpemUsIHJlZmVyZW5jZS0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXplKS5nZXQoKSk7CisgICAgdXBkYXRlRm9udChzdGF0
ZSk7CisgICAgYXBwbHlQcm9wZXJ0eVdpdGhWYWx1ZUNoZWNraW5nKHN0YXRlLCBDU1NQcm9wZXJ0
eUxpbmVIZWlnaHQsIHJlZmVyZW5jZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUxp
bmVIZWlnaHQpLmdldCgpKTsKIH0KIAogaW5saW5lIGJvb2wgaXNWYWxpZFZpc2l0ZWRMaW5rUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKQEAgLTI4NTEsMjAgKzI4MzgsNyBAQCBpbmxpbmUgYm9v
bCBTdHlsZVJlc29sdmVyOjppc1ZhbGlkQ3VlU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
KQogICAgIHJldHVybiBmYWxzZTsKIH0KICNlbmRpZgotLy8gU1ZHIGhhbmRsZXMgem9vbWluZyBp
biBhIGRpZmZlcmVudCB3YXkgY29tcGFyZWQgdG8gQ1NTLiBUaGUgd2hvbGUgZG9jdW1lbnQgaXMg
c2NhbGVkIGluc3RlYWQKLS8vIG9mIGVhY2ggaW5kaXZpZHVhbCBsZW5ndGggdmFsdWUgaW4gdGhl
IHJlbmRlciBzdHlsZSAvIHRyZWUuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoKigp
Ci0vLyBtdWx0aXBsaWVzIGVhY2ggcmVzb2x2ZWQgbGVuZ3RoIHdpdGggdGhlIHpvb20gbXVsdGlw
bGllciAtIHNvIGZvciBTVkcgd2UgbmVlZCB0byBkaXNhYmxlIHRoYXQuCi0vLyBUaG91Z2ggYWxs
IENTUyB2YWx1ZXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBvdXRlcm1vc3QgPHN2Zz4gZWxlbWVu
dHMgKHdpZHRoL2hlaWdodC9ib3JkZXIvcGFkZGluZy4uLikKLS8vIG5lZWQgdG8gcmVzcGVjdCB0
aGUgc2NhbGluZy4gUmVuZGVyQm94ICh0aGUgcGFyZW50IGNsYXNzIG9mIFJlbmRlclNWR1Jvb3Qp
IGdyYWJzIHZhbHVlcyBsaWtlCi0vLyB3aWR0aC9oZWlnaHQvYm9yZGVyL3BhZGRpbmcvLi4uIGZy
b20gdGhlIFJlbmRlclN0eWxlIC0+IGZvciBTVkcgdGhlc2UgdmFsdWVzIHdvdWxkIG5ldmVyIHNj
YWxlLAotLy8gaWYgd2UnZCBwYXNzIGEgMS4wIHpvb20gZmFjdG9yIGV2ZXJ5aHdlcmUuIFNvIHdl
IG9ubHkgcGFzcyBhIHpvb20gZmFjdG9yIG9mIDEuMCBmb3Igc3BlY2lmaWMKLS8vIHByb3BlcnRp
ZXMgdGhhdCBhcmUgTk9UIGFsbG93ZWQgdG8gc2NhbGUgd2l0aGluIGEgem9vbWVkIFNWRyBkb2N1
bWVudCAobGV0dGVyL3dvcmQtc3BhY2luZy9mb250LXNpemUpLgotYm9vbCBTdHlsZVJlc29sdmVy
Ojp1c2VTVkdab29tUnVsZXMoKQotewotICAgIHJldHVybiBtX2VsZW1lbnQgJiYgbV9lbGVtZW50
LT5pc1NWR0VsZW1lbnQoKTsKLX0KLQotc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0
aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVj
dG9yLCBMZW5ndGgmIHdvcmtpbmdMZW5ndGgpCitzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tC
cmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgUmVzb2x2ZVN0YXRlJiBz
dGF0ZSwgTGVuZ3RoJiB3b3JraW5nTGVuZ3RoKQogewogICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdE1pbkNvbnRlbnQpIHsKICAgICAgICAgd29ya2lu
Z0xlbmd0aCA9IExlbmd0aChNaW5Db250ZW50KTsKQEAgLTI4NzYsNyArMjg1MCw3IEBAIHN0YXRp
YyBib29sIGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlLCBTdHlsZVJlc29sCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHdv
cmtpbmdMZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdl
ckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZl
cnNpb24gfCBBdXRvQ29udmVyc2lvbj4oc2VsZWN0b3ItPnN0eWxlKCksIHNlbGVjdG9yLT5yb290
RWxlbWVudFN0eWxlKCksIHNlbGVjdG9yLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAg
IHdvcmtpbmdMZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50
ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNv
bnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1l
bnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwogICAgIGlmICh3b3Jr
aW5nTGVuZ3RoLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjg4
NiwxMiArMjg2MCwxMiBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgU3R5bGVSZXNvbAogICAgIHJldHVybiB0cnVl
OwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tNaW5NYXgoQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlLCBTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgR3JpZFRyYWNrU2l6
ZSYgdHJhY2tTaXplKQorc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrTWluTWF4KENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgR3JpZFRyYWNr
U2l6ZSYgdHJhY2tTaXplKQogewogICAgIFBhaXIqIG1pbk1heFRyYWNrQnJlYWR0aCA9IHByaW1p
dGl2ZVZhbHVlLT5nZXRQYWlyVmFsdWUoKTsKICAgICBpZiAoIW1pbk1heFRyYWNrQnJlYWR0aCkg
ewogICAgICAgICBMZW5ndGggd29ya2luZ0xlbmd0aDsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlk
VHJhY2tCcmVhZHRoKHByaW1pdGl2ZVZhbHVlLCBzZWxlY3Rvciwgd29ya2luZ0xlbmd0aCkpCisg
ICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChwcmltaXRpdmVWYWx1ZSwgc3RhdGUs
IHdvcmtpbmdMZW5ndGgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHRy
YWNrU2l6ZS5zZXRMZW5ndGgod29ya2luZ0xlbmd0aCk7CkBAIC0yOTAwLDE0ICsyODc0LDE0IEBA
IHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja01pbk1heChDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUsIFN0eWxlUmVzb2x2CiAKICAgICBMZW5ndGggbWluVHJhY2tCcmVhZHRoOwog
ICAgIExlbmd0aCBtYXhUcmFja0JyZWFkdGg7Ci0gICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tCcmVh
ZHRoKG1pbk1heFRyYWNrQnJlYWR0aC0+Zmlyc3QoKSwgc2VsZWN0b3IsIG1pblRyYWNrQnJlYWR0
aCkgfHwgIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgobWluTWF4VHJhY2tCcmVhZHRoLT5zZWNvbmQo
KSwgc2VsZWN0b3IsIG1heFRyYWNrQnJlYWR0aCkpCisgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tC
cmVhZHRoKG1pbk1heFRyYWNrQnJlYWR0aC0+Zmlyc3QoKSwgc3RhdGUsIG1pblRyYWNrQnJlYWR0
aCkgfHwgIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgobWluTWF4VHJhY2tCcmVhZHRoLT5zZWNvbmQo
KSwgc3RhdGUsIG1heFRyYWNrQnJlYWR0aCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IHRyYWNrU2l6ZS5zZXRNaW5NYXgobWluVHJhY2tCcmVhZHRoLCBtYXhUcmFja0JyZWFkdGgpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tHcm91cChD
U1NWYWx1ZSogdmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBWZWN0b3I8R3JpZFRyYWNr
U2l6ZT4mIHRyYWNrU2l6ZXMpCitzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tHcm91cChDU1NW
YWx1ZSogdmFsdWUsIFJlc29sdmVTdGF0ZSYgc3RhdGUsIFZlY3RvcjxHcmlkVHJhY2tTaXplPiYg
dHJhY2tTaXplcykKIHsKICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0yOTE4LDcgKzI4OTIsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlk
VHJhY2tHcm91cChDU1NWYWx1ZSogdmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBWZWN0
bwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIEdyaWRUcmFja1NpemUgdHJh
Y2tTaXplOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja01pbk1heChzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KGN1cnJWYWx1ZSksIHNlbGVjdG9yLCB0cmFja1NpemUpKQorICAg
ICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja01pbk1heChzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KGN1cnJWYWx1ZSksIHN0YXRlLCB0cmFja1NpemUpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgICAgIHRyYWNrU2l6ZXMuYXBwZW5kKHRyYWNrU2l6ZSk7CkBAIC0yOTI2
LDcgKzI5MDAsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tHcm91cChDU1NWYWx1ZSog
dmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBWZWN0bwogICAgIHJldHVybiB0cnVlOwog
fQogCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tMaXN0KENTU1ZhbHVlKiB2YWx1ZSwgVmVj
dG9yPEdyaWRUcmFja1NpemU+JiB0cmFja1NpemVzLCBTdHlsZVJlc29sdmVyKiBzZWxlY3RvcikK
K3N0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3QoQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8
R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6ZXMsIFJlc29sdmVTdGF0ZSYgc3RhdGUpCiB7CiAgICAg
Ly8gSGFuZGxlICdub25lJy4KICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewpA
QCAtMjkzNCw3ICsyOTA4LDcgQEAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrTGlzdChDU1NW
YWx1ZSogdmFsdWUsIFZlY3RvcjxHcmlkVHJhY2tTaXplPiYgdHJhY2tTaXoKICAgICAgICAgcmV0
dXJuIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZTsKICAgICB9CiAK
LSAgICByZXR1cm4gY3JlYXRlR3JpZFRyYWNrR3JvdXAodmFsdWUsIHNlbGVjdG9yLCB0cmFja1Np
emVzKTsKKyAgICByZXR1cm4gY3JlYXRlR3JpZFRyYWNrR3JvdXAodmFsdWUsIHN0YXRlLCB0cmFj
a1NpemVzKTsKIH0KIAogCkBAIC0yOTgwLDkgKzI5NTQsOSBAQCBzdGF0aWMgYm9vbCBoYXNWYXJp
YWJsZVJlZmVyZW5jZShDU1NWYWx1ZSogdmFsdWUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12
b2lkIFN0eWxlUmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJsZXMoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlLCBWZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiYg
a25vd25FeHByZXNzaW9ucykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyhS
ZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFZl
Y3RvcjxzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiA+JiBrbm93bkV4cHJlc3Npb25z
KQogewotICAgIHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+IGV4cHJlc3Npb24oaWQs
IHZhbHVlLT5zZXJpYWxpemVSZXNvbHZpbmdWYXJpYWJsZXMoKnN0eWxlKCktPnZhcmlhYmxlcygp
KSk7CisgICAgc3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gZXhwcmVzc2lvbihpZCwg
dmFsdWUtPnNlcmlhbGl6ZVJlc29sdmluZ1ZhcmlhYmxlcygqc3RhdGUuc3R5bGUoKS0+dmFyaWFi
bGVzKCkpKTsKIAogICAgIGlmIChrbm93bkV4cHJlc3Npb25zLmNvbnRhaW5zKGV4cHJlc3Npb24p
KQogICAgICAgICByZXR1cm47IC8vIGN5Y2xlIGRldGVjdGVkLgpAQCAtMjk5NywzNiArMjk3MSwz
NiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJsZXMoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8cwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCByZXN1bHRTZXQtPnByb3BlcnR5Q291bnQoKTsgaSsrKSB7CiAgICAgICAgIFN0eWxlUHJvcGVy
dHlTZXQ6OlByb3BlcnR5UmVmZXJlbmNlIHByb3BlcnR5ID0gcmVzdWx0U2V0LT5wcm9wZXJ0eUF0
KGkpOwogICAgICAgICBpZiAocHJvcGVydHkuaWQoKSAhPSBDU1NQcm9wZXJ0eVZhcmlhYmxlICYm
IGhhc1ZhcmlhYmxlUmVmZXJlbmNlKHByb3BlcnR5LnZhbHVlKCkpKQotICAgICAgICAgICAgcmVz
b2x2ZVZhcmlhYmxlcyhwcm9wZXJ0eS5pZCgpLCBwcm9wZXJ0eS52YWx1ZSgpLCBrbm93bkV4cHJl
c3Npb25zKTsKKyAgICAgICAgICAgIHJlc29sdmVWYXJpYWJsZXMoc3RhdGUsIHByb3BlcnR5Lmlk
KCksIHByb3BlcnR5LnZhbHVlKCksIGtub3duRXhwcmVzc2lvbnMpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBhcHBseVByb3BlcnR5KHByb3BlcnR5LmlkKCksIHByb3BlcnR5LnZhbHVlKCkp
OworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgcHJvcGVydHkuaWQoKSwgcHJvcGVy
dHkudmFsdWUoKSk7CiAgICAgfQogfQogI2VuZGlmCiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogewogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAg
IGlmIChpZCAhPSBDU1NQcm9wZXJ0eVZhcmlhYmxlICYmIGhhc1ZhcmlhYmxlUmVmZXJlbmNlKHZh
bHVlKSkgewogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4g
PiBrbm93bkV4cHJlc3Npb25zOwotICAgICAgICByZXNvbHZlVmFyaWFibGVzKGlkLCB2YWx1ZSwg
a25vd25FeHByZXNzaW9ucyk7CisgICAgICAgIHJlc29sdmVWYXJpYWJsZXMoc3RhdGUsIGlkLCB2
YWx1ZSwga25vd25FeHByZXNzaW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYK
IAotICAgIGJvb2wgaXNJbmhlcml0ID0gbV9wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRl
ZFZhbHVlKCk7Ci0gICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8
fCAoIW1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKKyAgICBib29s
IGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVudE5vZGUoKSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1
ZSgpOworICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgKCFz
dGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7CiAKLSAgICBB
U1NFUlQoIWlzSW5oZXJpdCB8fCAhaXNJbml0aWFsKTsgLy8gaXNJbmhlcml0IC0+ICFpc0luaXRp
YWwgJiYgaXNJbml0aWFsIC0+ICFpc0luaGVyaXQKLSAgICBBU1NFUlQoIWlzSW5oZXJpdCB8fCAo
bV9wYXJlbnROb2RlICYmIG1fcGFyZW50U3R5bGUpKTsgLy8gaXNJbmhlcml0IC0+IChtX3BhcmVu
dE5vZGUgJiYgbV9wYXJlbnRTdHlsZSkKKyAgICBBU1NFUlQoIWlzSW5oZXJpdCB8fCAhaXNJbml0
aWFsKTsKKyAgICBBU1NFUlQoIWlzSW5oZXJpdCB8fCAoc3RhdGUucGFyZW50Tm9kZSgpICYmIHN0
YXRlLnBhcmVudFN0eWxlKCkpKTsKIAotICAgIGlmICghYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlKCkgJiYgKCFhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgfHwgIWlzVmFsaWRW
aXNpdGVkTGlua1Byb3BlcnR5KGlkKSkpIHsKKyAgICBpZiAoIXN0YXRlLmFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSgpICYmICghc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSgpIHx8ICFpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShpZCkpKSB7CiAgICAgICAgIC8vIExp
bWl0IHRoZSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb25seSB0aGUgb25lcyBo
b25vcmVkIGJ5IDp2aXNpdGVkLgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGlz
SW5oZXJpdCAmJiAhbV9wYXJlbnRTdHlsZS0+aGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRp
ZXMoKSAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQotICAgICAgICBt
X3BhcmVudFN0eWxlLT5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpOworICAg
IGlmIChpc0luaGVyaXQgJiYgIXN0YXRlLnBhcmVudFN0eWxlKCktPmhhc0V4cGxpY2l0bHlJbmhl
cml0ZWRQcm9wZXJ0aWVzKCkgJiYgIUNTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlk
KSkKKyAgICAgICAgc3RhdGUucGFyZW50U3R5bGUoKS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRl
ZFByb3BlcnRpZXMoKTsKIAogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgIGlmIChpZCA9
PSBDU1NQcm9wZXJ0eVZhcmlhYmxlKSB7CkBAIC0zMDM0LDcgKzMwMDgsNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgICAgICBDU1NWYXJpYWJsZVZhbHVlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PENTU1Zh
cmlhYmxlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIEFTU0VSVCghdmFyaWFibGUtPm5hbWUoKS5p
c0VtcHR5KCkpOwogICAgICAgICBBU1NFUlQoIXZhcmlhYmxlLT52YWx1ZSgpLmlzRW1wdHkoKSk7
Ci0gICAgICAgIG1fc3R5bGUtPnNldFZhcmlhYmxlKHZhcmlhYmxlLT5uYW1lKCksIHZhcmlhYmxl
LT52YWx1ZSgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VmFyaWFibGUodmFyaWFibGUt
Pm5hbWUoKSwgdmFyaWFibGUtPnZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2Vu
ZGlmCkBAIC0zMDQzLDE3ICszMDE3LDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY29uc3QgUHJvcGVy
dHlIYW5kbGVyJiBoYW5kbGVyID0gbV9zdHlsZUJ1aWxkZXIucHJvcGVydHlIYW5kbGVyKGlkKTsK
ICAgICBpZiAoaGFuZGxlci5pc1ZhbGlkKCkpIHsKICAgICAgICAgaWYgKGlzSW5oZXJpdCkKLSAg
ICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbmhlcml0VmFsdWUoaWQsIHRoaXMpOworICAgICAgICAg
ICAgaGFuZGxlci5hcHBseUluaGVyaXRWYWx1ZShpZCwgc3RhdGUpOwogICAgICAgICBlbHNlIGlm
IChpc0luaXRpYWwpCi0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5pdGlhbFZhbHVlKGlkLCB0
aGlzKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbml0aWFsVmFsdWUoaWQsIHN0YXRlKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgaGFuZGxlci5hcHBseVZhbHVlKGlkLCB0aGlzLCB2
YWx1ZSk7CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5VmFsdWUoaWQsIHN0YXRlLCB2YWx1ZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUgPSB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpID8gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih2YWx1ZSkgOiAwOwogCi0gICAgZmxvYXQgem9vbUZhY3RvciA9IG1fc3R5
bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBmbG9hdCB6b29tRmFjdG9yID0gc3RhdGUuc3R5bGUo
KS0+ZWZmZWN0aXZlWm9vbSgpOwogCiAgICAgLy8gV2hhdCBmb2xsb3dzIGlzIGEgbGlzdCB0aGF0
IG1hcHMgdGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIgY29ycmVzcG9uZGluZyBmcm9udC1l
bmQKICAgICAvLyBSZW5kZXJTdHlsZSB2YWx1ZXMuIFNob3J0aGFuZHMgKGUuZy4gYm9yZGVyLCBi
YWNrZ3JvdW5kKSBvY2N1ciBpbiB0aGlzIGxpc3QgYXMgd2VsbCBhbmQKQEAgLTMwNjcsNyArMzA0
MSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAvLyBub3RlIGlzIGEgcmVtaW5kZXIgdGhh
dCBldmVudHVhbGx5ICJpbmhlcml0IiBuZWVkcyB0byBiZSBzdXBwb3J0ZWQuCiAKICAgICAgICAg
ICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5jbGVhckNvbnRl
bnQoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhckNvbnRlbnQoKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKQEAgLTMwNzksMTkgKzMwNTMs
MTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFs
dWUoKTsKICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzR3JhZGllbnRWYWx1ZSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZElt
YWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+KGl0ZW0pLT5ncmFkaWVu
dFdpdGhTdHlsZXNSZXNvbHZlZCh0aGlzKS5nZXQoKSksIGRpZFNldCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6
OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NHcmFkaWVudFZhbHVlKj4oaXRlbSktPmdyYWRpZW50V2l0
aFN0eWxlc1Jlc29sdmVkKHN0YXRlKS5nZXQoKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoU3R5
bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFs
dWUqPihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxD
U1NJbWFnZUdlbmVyYXRvclZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAg
ICAgICBkaWRTZXQgPSB0cnVlOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQogICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNJbWFnZVNldFZhbHVlKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJv
cGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVNldFZhbHVlKj4oaXRlbSkpLCBkaWRT
ZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KHNldE9y
UGVuZGluZ0Zyb21WYWx1ZShzdGF0ZSwgQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxD
U1NJbWFnZVNldFZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBk
aWRTZXQgPSB0cnVlOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAg
ICAgaWYgKGl0ZW0tPmlzSW1hZ2VWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5
bGUtPnNldENvbnRlbnQoY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVu
dCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChjYWNoZWRPclBlbmRpbmdGcm9t
VmFsdWUoc3RhdGUsIENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1
ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzEw
MiwxNyArMzA3NiwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBjb250ZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0
ZW0pOwogCiAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNTdHJpbmcoKSkgewot
ICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNvbnRlbnRWYWx1ZS0+Z2V0
U3RyaW5nVmFsdWUoKS5pbXBsKCksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldENvbnRlbnQoY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwo
KSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNBdHRyKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IENhbiBhIG5hbWVzcGFjZSBiZSBzcGVjaWZpZWQgZm9yIGFuIGF0
dHIoZm9vKT8KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3R5bGUtPnN0eWxlVHlwZSgpID09
IE5PUFNFVURPKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0VW5pcXVlKCk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBO
T1BTRVVETykKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFVuaXF1
ZSgpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBt
X3BhcmVudFN0eWxlLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
LnBhcmVudFN0eWxlKCktPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgICAgICAgICBRdWFsaWZp
ZWROYW1lIGF0dHIobnVsbEF0b20sIGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBs
KCksIG51bGxBdG9tKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSA9IG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0dHIpOwotICAgICAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUu
aW1wbCgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlID0gc3RhdGUuZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgICAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQodmFsdWUuaXNOdWxsKCkgPyBlbXB0
eUF0b20gOiB2YWx1ZS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNl
dCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQg
dGhlIGF0dHJpYnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZQogICAgICAgICAgICAgICAgICAg
ICBtX2ZlYXR1cmVzLmF0dHJzSW5SdWxlcy5hZGQoYXR0ci5sb2NhbE5hbWUoKS5pbXBsKCkpOwpA
QCAtMzEyMywyNCArMzA5NywyNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgICAgICBp
ZiAobGlzdFN0eWxlSWRlbnQgIT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgICAgICAgICAg
ICAgbGlzdFN0eWxlVHlwZSA9IHN0YXRpY19jYXN0PEVMaXN0U3R5bGVUeXBlPihsaXN0U3R5bGVJ
ZGVudCAtIENTU1ZhbHVlRGlzYyk7CiAgICAgICAgICAgICAgICAgICAgIE93blB0cjxDb3VudGVy
Q29udGVudD4gY291bnRlciA9IGFkb3B0UHRyKG5ldyBDb3VudGVyQ29udGVudChjb3VudGVyVmFs
dWUtPmlkZW50aWZpZXIoKSwgbGlzdFN0eWxlVHlwZSwgY291bnRlclZhbHVlLT5zZXBhcmF0b3Io
KSkpOwotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNvdW50ZXIucmVs
ZWFzZSgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRD
b250ZW50KGNvdW50ZXIucmVsZWFzZSgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBk
aWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAoY29udGVudFZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVPcGVuUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0
eWxlLT5zZXRDb250ZW50KE9QRU5fUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KE9QRU5fUVVPVEUsIGRpZFNldCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDbG9zZVF1b3RlOgot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChDTE9TRV9RVU9URSwg
ZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRl
bnQoQ0xPU0VfUVVPVEUsIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQg
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVOb09wZW5RdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ2xv
c2VRdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoTk9f
Q0xPU0VfUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRDb250ZW50KE5PX0NMT1NFX1FVT1RFLCBkaWRTZXQpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMzE1MCwxNiArMzEyNCwxNiBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
ICghZGlkU2V0KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyQ29udGVudCgpOworICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyQ29udGVudCgpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVF1b3RlczoKICAgICAgICAg
aWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKG1fcGFyZW50
U3R5bGUtPnF1b3RlcygpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFF1b3Rlcyhz
dGF0ZS5wYXJlbnRTdHlsZSgpLT5xdW90ZXMoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0
UXVvdGVzKDApOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVvdGVzKDApOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxp
c3QoKSkgewpAQCAtMzE3Nyw0MyArMzE1MSw0MyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAg
ICAgIFN0cmluZyBlbmRRdW90ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oc2Vj
b25kKS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAgICAgICBxdW90ZXMtPmFkZFBhaXIo
c3RkOjptYWtlX3BhaXIoc3RhcnRRdW90ZSwgZW5kUXVvdGUpKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhxdW90ZXMpOworICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0UXVvdGVzKHF1b3Rlcyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKSB7CiAgICAgICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpjcmVhdGUoKSk7CisgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0UXVvdGVzKFF1b3Rlc0RhdGE6OmNyZWF0ZSgpKTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHk6IHsKICAg
ICAgICAgLy8gbGlzdCBvZiBzdHJpbmdzIGFuZCBpZHMKICAgICAgICAgaWYgKGlzSW5oZXJpdCkg
ewotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IG1f
cGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAg
ICAgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnBhcmVu
dEZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldEdlbmVyaWNGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1p
bHkoKSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KHBhcmVudEZvbnRE
ZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRJc1NwZWNpZmllZEZvbnQocGFyZW50Rm9udERlc2NyaXB0aW9uLmlzU3BlY2lmaWVkRm9udCgp
KTsKLSAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAg
ICAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaXNJbml0aWFsKSB7CiAg
ICAgICAgICAgICBGb250RGVzY3JpcHRpb24gaW5pdGlhbERlc2MgPSBGb250RGVzY3JpcHRpb24o
KTsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxl
LT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gYWRqdXN0IHRoZSBzaXplIHRvIGFjY291bnQgZm9yIHRoZSBnZW5lcmljIGZhbWlseSBj
aGFuZ2UgZnJvbSBtb25vc3BhY2UKICAgICAgICAgICAgIC8vIHRvIG5vbi1tb25vc3BhY2UuCiAg
ICAgICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgJiYgZm9udERlc2Ny
aXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSkKLSAgICAgICAgICAgICAgICBzZXRGb250U2l6
ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1
ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEsIGZhbHNlKSk7Cisg
ICAgICAgICAgICAgICAgc2V0Rm9udFNpemUoc3RhdGUsIGZvbnREZXNjcmlwdGlvbiwgZm9udFNp
emVGb3JLZXl3b3JkKGRvY3VtZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlv
bi5rZXl3b3JkU2l6ZSgpIC0gMSwgZmFsc2UpKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRHZW5lcmljRmFtaWx5KGluaXRpYWxEZXNjLmdlbmVyaWNGYW1pbHkoKSk7CiAgICAgICAg
ICAgICBpZiAoIWluaXRpYWxEZXNjLmZpcnN0RmFtaWx5KCkuZmFtaWx5SXNFbXB0eSgpKQogICAg
ICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbHkoaW5pdGlhbERlc2MuZmlyc3RG
YW1pbHkoKSk7Ci0gICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsKKyAgICAgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCF2YWx1ZS0+
aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9u
KCk7CiAgICAgICAgIEZvbnRGYW1pbHkmIGZpcnN0RmFtaWx5ID0gZm9udERlc2NyaXB0aW9uLmZp
cnN0RmFtaWx5KCk7CiAgICAgICAgIEZvbnRGYW1pbHkqIGN1cnJGYW1pbHkgPSAwOwogCkBAIC0z
MjgyLDQzICszMjU2LDQzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIC8vIElmIGN1cnJGYW1pbHkg
aXMgbm9uLXplcm8gdGhlbiB3ZSBzZXQgYXQgbGVhc3Qgb25lIGZhbWlseSBvbiB0aGlzIGRlc2Ny
aXB0aW9uLgogICAgICAgICBpZiAoY3VyckZhbWlseSkgewogICAgICAgICAgICAgaWYgKGZvbnRE
ZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1
bHRTaXplKCkgIT0gb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpCi0gICAgICAgICAgICAg
ICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1l
bnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAx
LCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpKTsKKyAgICAgICAgICAgICAgICBzZXRG
b250U2l6ZShzdGF0ZSwgZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1l
bnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAx
LCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpKTsKIAotICAgICAgICAgICAgc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgICAgICBzdGF0ZS5zZXRGb250
RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47
CiAgICAgfQogLy8gc2hvcnRoYW5kIHByb3BlcnRpZXMKICAgICBjYXNlIENTU1Byb3BlcnR5QmFj
a2dyb3VuZDoKICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgbV9zdHlsZS0+
Y2xlYXJCYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRCYWNrZ3Jv
dW5kQ29sb3IoQ29sb3IoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhckJhY2tn
cm91bmRMYXllcnMoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJhY2tncm91bmRD
b2xvcihDb2xvcigpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAg
ICAgIG1fc3R5bGUtPmluaGVyaXRCYWNrZ3JvdW5kTGF5ZXJzKCptX3BhcmVudFN0eWxlLT5iYWNr
Z3JvdW5kTGF5ZXJzKCkpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0QmFja2dyb3VuZENvbG9y
KG1fcGFyZW50U3R5bGUtPmJhY2tncm91bmRDb2xvcigpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPmluaGVyaXRCYWNrZ3JvdW5kTGF5ZXJzKCpzdGF0ZS5wYXJlbnRTdHlsZSgpLT5iYWNr
Z3JvdW5kTGF5ZXJzKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0QmFja2dyb3Vu
ZENvbG9yKHN0YXRlLnBhcmVudFN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpKTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2s6CiAgICAg
ICAgIGlmIChpc0luaXRpYWwpCi0gICAgICAgICAgICBtX3N0eWxlLT5jbGVhck1hc2tMYXllcnMo
KTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyTWFza0xheWVycygpOwogICAgICAg
ICBlbHNlIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0TWFza0xh
eWVycygqbV9wYXJlbnRTdHlsZS0+bWFza0xheWVycygpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPmluaGVyaXRNYXNrTGF5ZXJzKCpzdGF0ZS5wYXJlbnRTdHlsZSgpLT5tYXNrTGF5ZXJz
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnQ6CiAgICAgICAg
IGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb24gPSBtX3BhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIG1f
c3R5bGUtPnNldExpbmVIZWlnaHQobV9wYXJlbnRTdHlsZS0+c3BlY2lmaWVkTGluZUhlaWdodCgp
KTsKLSAgICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKLSAgICAgICAgICAgIHNldEZv
bnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpOworICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUhlaWdodChzdGF0ZS5wYXJlbnRTdHlsZSgp
LT5zcGVjaWZpZWRMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdo
dFZhbHVlKDApOworICAgICAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKSB7CiAgICAgICAgICAgICBT
ZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudFNldHRpbmdzKCk7CiAgICAgICAgICAgICBBU1NF
UlQoc2V0dGluZ3MpOyAvLyBJZiB3ZSdyZSBkb2luZyBzdHlsZSByZXNvbHV0aW9uLCB0aGlzIGRv
Y3VtZW50IHNob3VsZCBhbHdheXMgYmUgaW4gYSBmcmFtZSBhbmQgdGh1cyBoYXZlIHNldHRpbmdz
CiAgICAgICAgICAgICBpZiAoIXNldHRpbmdzKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOworICAgICAgICAgICAgaW5p
dGlhbGl6ZUZvbnRTdHlsZShzdGF0ZSwgc2V0dGluZ3MpOwogICAgICAgICB9IGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRl
clN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLSAgICAgICAgICAgIG1fbGluZUhlaWdodFZh
bHVlID0gMDsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVy
U3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgc3RhdGUuc2V0TGluZUhl
aWdodFZhbHVlKDApOwogCiAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uOwogICAgICAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Gb250
KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpLCBmb250RGVzY3JpcHRpb24pOwpAQCAtMzMzNCwy
NyArMzMwOCwyNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRVc2VQcmludGVyRm9udChkb2N1bWVudCgpLT5wcmludGluZygpIHx8ICFzZXR0aW5ncy0+
c2NyZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWQoKSk7CiAKICAgICAgICAgICAgICAgICAvLyBI
YW5kbGUgdGhlIHpvb20gZmFjdG9yLgotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQo
KSwgbV9zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIGZvbnRE
ZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIHVzZVNWR1pvb21SdWxlcygpKSk7Ci0gICAgICAg
ICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9t
U3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBzdGF0ZS5zdHlsZSgpLCBmb250RGVzY3JpcHRpb24u
aXNBYnNvbHV0ZVNpemUoKSwgZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSwgc3RhdGUu
dXNlU1ZHWm9vbVJ1bGVzKCkpKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3Jp
cHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlm
ICh2YWx1ZS0+aXNGb250VmFsdWUoKSkgewogICAgICAgICAgICAgRm9udFZhbHVlKiBmb250ID0g
c3RhdGljX2Nhc3Q8Rm9udFZhbHVlKj4odmFsdWUpOwogICAgICAgICAgICAgaWYgKCFmb250LT5z
dHlsZSB8fCAhZm9udC0+dmFyaWFudCB8fCAhZm9udC0+d2VpZ2h0CiAgICAgICAgICAgICAgICAg
fHwgIWZvbnQtPnNpemUgfHwgIWZvbnQtPmxpbmVIZWlnaHQgfHwgIWZvbnQtPmZhbWlseSkKICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5Rm9udFN0eWxlLCBmb250LT5zdHlsZS5nZXQoKSk7Ci0gICAgICAgICAgICBhcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIGZvbnQtPnZhcmlhbnQuZ2V0KCkpOwotICAgICAg
ICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGZvbnQtPndlaWdodC5n
ZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRT
dHlsZSwgZm9udC0+c3R5bGUuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0
ZSwgQ1NTUHJvcGVydHlGb250VmFyaWFudCwgZm9udC0+dmFyaWFudC5nZXQoKSk7CisgICAgICAg
ICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGZvbnQtPndl
aWdodC5nZXQoKSk7CiAgICAgICAgICAgICAvLyBUaGUgcHJldmlvdXMgcHJvcGVydGllcyBjYW4g
ZGlydHkgb3VyIGZvbnQgYnV0IHRoZXkgZG9uJ3QgdHJ5IHRvIHJlYWQgdGhlIGZvbnQncwogICAg
ICAgICAgICAgLy8gcHJvcGVydGllcyBiYWNrLCB3aGljaCBpcyBzYWZlLiBIb3dldmVyIGlmIGZv
bnQtc2l6ZSBpcyB1c2luZyB0aGUgJ2V4JyB1bml0LCBpdCB3aWxsCiAgICAgICAgICAgICAvLyBu
ZWVkIHF1ZXJ5IHRoZSBkaXJ0aWVkIGZvbnQncyB4LWhlaWdodCB0byBnZXQgdGhlIGNvbXB1dGVk
IHNpemUuIFRvIGJlIHNhZmUgaW4gdGhpcwogICAgICAgICAgICAgLy8gY2FzZSwgbGV0J3MganVz
dCB1cGRhdGUgdGhlIGZvbnQgbm93LgotICAgICAgICAgICAgdXBkYXRlRm9udCgpOwotICAgICAg
ICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBmb250LT5zaXplLmdldCgp
KTsKKyAgICAgICAgICAgIHVwZGF0ZUZvbnQoc3RhdGUpOworICAgICAgICAgICAgYXBwbHlQcm9w
ZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlGb250U2l6ZSwgZm9udC0+c2l6ZS5nZXQoKSk7CiAKLSAg
ICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gZm9udC0+bGluZUhlaWdodC5nZXQoKTsKKyAg
ICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZShmb250LT5saW5lSGVpZ2h0LmdldCgp
KTsKIAotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIGZv
bnQtPmZhbWlseS5nZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQ
cm9wZXJ0eUZvbnRGYW1pbHksIGZvbnQtPmZhbWlseS5nZXQoKSk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuOwogCkBAIC0zMzY0LDExICszMzM4LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdzogewogICAgICAgICBpZiAoaXNJbmhlcml0KSB7
CiAgICAgICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93KQotICAgICAgICAg
ICAgICAgIHJldHVybiBtX3N0eWxlLT5zZXRUZXh0U2hhZG93KG1fcGFyZW50U3R5bGUtPnRleHRT
aGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCptX3BhcmVudFN0eWxlLT50ZXh0U2hh
ZG93KCkpKSA6IG51bGxwdHIpOwotICAgICAgICAgICAgcmV0dXJuIG1fc3R5bGUtPnNldEJveFNo
YWRvdyhtX3BhcmVudFN0eWxlLT5ib3hTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRh
KCptX3BhcmVudFN0eWxlLT5ib3hTaGFkb3coKSkpIDogbnVsbHB0cik7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0YXRlLnN0eWxlKCktPnNldFRleHRTaGFkb3coc3RhdGUucGFyZW50U3R5bGUo
KS0+dGV4dFNoYWRvdygpID8gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoKnN0YXRlLnBhcmVudFN0
eWxlKCktPnRleHRTaGFkb3coKSkpIDogbnVsbHB0cik7CisgICAgICAgICAgICByZXR1cm4gc3Rh
dGUuc3R5bGUoKS0+c2V0Qm94U2hhZG93KHN0YXRlLnBhcmVudFN0eWxlKCktPmJveFNoYWRvdygp
ID8gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoKnN0YXRlLnBhcmVudFN0eWxlKCktPmJveFNoYWRv
dygpKSkgOiBudWxscHRyKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXNJbml0aWFsIHx8IHBy
aW1pdGl2ZVZhbHVlKSAvLyBpbml0aWFsIHwgbm9uZQotICAgICAgICAgICAgcmV0dXJuIGlkID09
IENTU1Byb3BlcnR5VGV4dFNoYWRvdyA/IG1fc3R5bGUtPnNldFRleHRTaGFkb3cobnVsbHB0cikg
OiBtX3N0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgICAgICAgICByZXR1cm4gaWQg
PT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93ID8gc3RhdGUuc3R5bGUoKS0+c2V0VGV4dFNoYWRvdyhu
dWxscHRyKSA6IHN0YXRlLnN0eWxlKCktPnNldEJveFNoYWRvdyhudWxscHRyKTsKIAogICAgICAg
ICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzM3
OCwyOSArMzM1MiwyOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKCFjdXJyVmFsdWUt
PmlzU2hhZG93VmFsdWUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IFNoYWRvd1ZhbHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8U2hhZG93VmFsdWUqPihjdXJyVmFsdWUp
OwotICAgICAgICAgICAgaW50IHggPSBpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUo
KSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGludCB5ID0g
aXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwg
em9vbUZhY3Rvcik7Ci0gICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5i
bHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29t
RmFjdG9yKSA6IDA7Ci0gICAgICAgICAgICBpbnQgc3ByZWFkID0gaXRlbS0+c3ByZWFkID8gaXRl
bS0+c3ByZWFkLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxl
LCB6b29tRmFjdG9yKSA6IDA7CisgICAgICAgICAgICBpbnQgeCA9IGl0ZW0tPngtPmNvbXB1dGVM
ZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21G
YWN0b3IpOworICAgICAgICAgICAgaW50IHkgPSBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4o
c3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAg
ICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5n
dGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0
b3IpIDogMDsKKyAgICAgICAgICAgIGludCBzcHJlYWQgPSBpdGVtLT5zcHJlYWQgPyBpdGVtLT5z
cHJlYWQtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVu
dFN0eWxlKCksIHpvb21GYWN0b3IpIDogMDsKICAgICAgICAgICAgIFNoYWRvd1N0eWxlIHNoYWRv
d1N0eWxlID0gaXRlbS0+c3R5bGUgJiYgaXRlbS0+c3R5bGUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVJbnNldCA/IEluc2V0IDogTm9ybWFsOwogICAgICAgICAgICAgQ29sb3IgY29sb3I7CiAgICAg
ICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCi0gICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZy
b21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7Ci0gICAgICAgICAgICBlbHNlIGlm
IChtX3N0eWxlKQotICAgICAgICAgICAgICAgIGNvbG9yID0gbV9zdHlsZS0+Y29sb3IoKTsKKyAg
ICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCBpdGVt
LT5jb2xvci5nZXQoKSk7CisgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS5zdHlsZSgpKQorICAg
ICAgICAgICAgICAgIGNvbG9yID0gc3RhdGUuc3R5bGUoKS0+Y29sb3IoKTsKIAogICAgICAgICAg
ICAgT3duUHRyPFNoYWRvd0RhdGE+IHNoYWRvd0RhdGEgPSBhZG9wdFB0cihuZXcgU2hhZG93RGF0
YShJbnRQb2ludCh4LCB5KSwgYmx1ciwgc3ByZWFkLCBzaGFkb3dTdHlsZSwgaWQgPT0gQ1NTUHJv
cGVydHlXZWJraXRCb3hTaGFkb3csIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRy
YW5zcGFyZW50KSk7CiAgICAgICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93
KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFRleHRTaGFkb3coc2hhZG93RGF0YS5yZWxl
YXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUg
Zmlyc3QgZW50cnkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0U2hhZG93
KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYg
dGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4
KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5Cisg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVs
ZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhl
IGZpcnN0IGVudHJ5CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9B
TkRfSU5JVElBTChib3hSZWZsZWN0LCBCb3hSZWZsZWN0KQogICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJveFJlZmxlY3QoUmVuZGVyU3R5bGU6
OmluaXRpYWxCb3hSZWZsZWN0KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Qm94
UmVmbGVjdChSZW5kZXJTdHlsZTo6aW5pdGlhbEJveFJlZmxlY3QoKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzQxMSwxMyArMzM4NSwxNSBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgICAgICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiByZWZsZWN0aW9uID0gU3R5bGVSZWZsZWN0
aW9uOjpjcmVhdGUoKTsKICAgICAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0aW9uKCpyZWZsZWN0
VmFsdWUtPmRpcmVjdGlvbigpKTsKICAgICAgICAgaWYgKHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCkp
Ci0gICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVjdFZhbHVlLT5vZmZzZXQo
KS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVy
c2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUs
IHpvb21GYWN0b3IpKTsKKyAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChyZWZsZWN0
VmFsdWUtPm9mZnNldCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8
IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0YXRlLnN0eWxlKCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3RvcikpOwogICAgICAgICBOaW5lUGll
Y2VJbWFnZSBtYXNrOwogICAgICAgICBtYXNrLnNldE1hc2tEZWZhdWx0cygpOwotICAgICAgICBt
X3N0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUtPm1hc2soKSwgbWFz
ayk7CisKKyAgICAgICAgQ1NTVG9TdHlsZU1hcCBzdHlsZU1hcChzdGF0ZSk7CisgICAgICAgIHN0
eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUtPm1hc2soKSwgbWFzayk7
CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2sobWFzayk7CiAKLSAgICAgICAgbV9zdHlsZS0+
c2V0Qm94UmVmbGVjdChyZWZsZWN0aW9uLnJlbGVhc2UoKSk7CisgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldEJveFJlZmxlY3QocmVmbGVjdGlvbi5yZWxlYXNlKCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlTcmM6IC8vIE9ubHkgdXNlZCBpbiBAZm9udC1m
YWNlIHJ1bGVzLgpAQCAtMzQyNiwyOSArMzQwMiwyOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGU6CiAgICAgICAgIGlm
IChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1bGVDb2xvciht
X3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKS5pc1ZhbGlkKCkgPyBtX3BhcmVudFN0eWxl
LT5jb2x1bW5SdWxlQ29sb3IoKSA6IG1fcGFyZW50U3R5bGUtPmNvbG9yKCkpOwotICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVsZVN0eWxlKG1fcGFyZW50U3R5bGUtPmNvbHVtblJ1bGVT
dHlsZSgpKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1bGVXaWR0aChtX3BhcmVu
dFN0eWxlLT5jb2x1bW5SdWxlV2lkdGgoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRDb2x1bW5SdWxlQ29sb3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+Y29sdW1uUnVsZUNvbG9yKCku
aXNWYWxpZCgpID8gc3RhdGUucGFyZW50U3R5bGUoKS0+Y29sdW1uUnVsZUNvbG9yKCkgOiBzdGF0
ZS5wYXJlbnRTdHlsZSgpLT5jb2xvcigpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dENvbHVtblJ1bGVTdHlsZShzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jb2x1bW5SdWxlU3R5bGUoKSk7
CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb2x1bW5SdWxlV2lkdGgoc3RhdGUucGFy
ZW50U3R5bGUoKS0+Y29sdW1uUnVsZVdpZHRoKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5p
dGlhbCkKLSAgICAgICAgICAgIG1fc3R5bGUtPnJlc2V0Q29sdW1uUnVsZSgpOworICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+cmVzZXRDb2x1bW5SdWxlKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZToKICAgICAgICAgaWYgKCFpc0luaGVyaXQp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVEaXJlY3Rp
b24obV9wYXJlbnRTdHlsZS0+bWFycXVlZURpcmVjdGlvbigpKTsKLSAgICAgICAgbV9zdHlsZS0+
c2V0TWFycXVlZUluY3JlbWVudChtX3BhcmVudFN0eWxlLT5tYXJxdWVlSW5jcmVtZW50KCkpOwot
ICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQobV9wYXJlbnRTdHlsZS0+bWFycXVlZVNw
ZWVkKCkpOwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KG1fcGFyZW50U3R5
bGUtPm1hcnF1ZWVMb29wQ291bnQoKSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVCZWhh
dmlvcihtX3BhcmVudFN0eWxlLT5tYXJxdWVlQmVoYXZpb3IoKSk7CisgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldE1hcnF1ZWVEaXJlY3Rpb24oc3RhdGUucGFyZW50U3R5bGUoKS0+bWFycXVlZURp
cmVjdGlvbigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUluY3JlbWVudChz
dGF0ZS5wYXJlbnRTdHlsZSgpLT5tYXJxdWVlSW5jcmVtZW50KCkpOworICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQoc3RhdGUucGFyZW50U3R5bGUoKS0+bWFycXVlZVNwZWVk
KCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlTG9vcENvdW50KHN0YXRlLnBh
cmVudFN0eWxlKCktPm1hcnF1ZWVMb29wQ291bnQoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldE1hcnF1ZWVCZWhhdmlvcihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5tYXJxdWVlQmVoYXZpb3Io
KSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVJl
cGV0aXRpb246IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFycXVlZUxv
b3BDb3VudCwgTWFycXVlZUxvb3BDb3VudCkKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlSW5maW5pdGUpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVl
TG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCisgICAgICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0
IGZvcmV2ZXIuCiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKQot
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1ZS0+
Z2V0SW50VmFsdWUoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlTG9v
cENvdW50KHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVNwZWVkOiB7CkBAIC0zNDU4
LDE5ICszNDM0LDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGlmIChpbnQgaWRlbnQgPSBwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAgc3dpdGNoIChpZGVudCkgewog
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNsb3c6Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0TWFycXVlZVNwZWVkKDUwMCk7IC8vIDUwMCBtc2VjLgorICAgICAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZCg1MDApOyAvLyA1MDAgbXNlYy4KICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKDg1KTsgLy8gODVtc2VjLiBUaGUgV2luSUUg
ZGVmYXVsdC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQo
ODUpOyAvLyA4NW1zZWMuIFRoZSBXaW5JRSBkZWZhdWx0LgogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhc3Q6Ci0gICAgICAgICAgICAgICAgbV9zdHls
ZS0+c2V0TWFycXVlZVNwZWVkKDEwKTsgLy8gMTBtc2VjLiBTdXBlciBmYXN0LgorICAgICAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZCgxMCk7IC8vIDEwbXNlYy4gU3Vw
ZXIgZmFzdC4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNUaW1lKCkpCi0gICAgICAgICAgICBtX3N0eWxl
LT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGludCwgQ1NTUHJp
bWl0aXZlVmFsdWU6Ok1pbGxpc2Vjb25kcz4oKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGludCwgQ1NTUHJp
bWl0aXZlVmFsdWU6Ok1pbGxpc2Vjb25kcz4oKSk7CiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2
ZVZhbHVlLT5pc051bWJlcigpKSAvLyBGb3Igc2Nyb2xsYW1vdW50IHN1cHBvcnQuCi0gICAgICAg
ICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVl
KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2
ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFycXVlZUluY3JlbWVudDogewpAQCAtMzQ4MCwxOSArMzQ1Niwx
OSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkp
IHsKICAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgxLCBGaXhlZCkpOyAvLyAxcHguCisgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMSwgRml4ZWQp
KTsgLy8gMXB4LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NW
YWx1ZU5vcm1hbDoKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50
KExlbmd0aCg2LCBGaXhlZCkpOyAvLyA2cHguIFRoZSBXaW5JRSBkZWZhdWx0LgorICAgICAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDYsIEZpeGVk
KSk7IC8vIDZweC4gVGhlIFdpbklFIGRlZmF1bHQuCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2U6Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCisgICAgICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZp
eGVkKSk7IC8vIDM2cHguCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMZW5ndGggbWFycXVlZUxlbmd0aCA9IGNvbnZl
cnRUb0ludExlbmd0aChwcmltaXRpdmVWYWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxl
KTsKKyAgICAgICAgICAgIExlbmd0aCBtYXJxdWVlTGVuZ3RoID0gY29udmVydFRvSW50TGVuZ3Ro
KHByaW1pdGl2ZVZhbHVlLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkp
OwogICAgICAgICAgICAgaWYgKCFtYXJxdWVlTGVuZ3RoLmlzVW5kZWZpbmVkKCkpCi0gICAgICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChtYXJxdWVlTGVuZ3RoKTsKKyAg
ICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KG1hcnF1ZWVM
ZW5ndGgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNTAxLDE5ICsz
NDc3LDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRMb2NhbGUobnVsbEF0b20p
OworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TG9jYWxlKG51bGxBdG9tKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TG9jYWxlKHByaW1pdGl2ZVZhbHVlLT5n
ZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
biA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24obV9zdHlsZS0+bG9j
YWxlKCkpKTsKLSAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Cisg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMb2NhbGUocHJpbWl0aXZlVmFsdWUtPmdldFN0
cmluZ1ZhbHVlKCkpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0g
c3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTY3Jp
cHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihzdGF0ZS5zdHlsZSgpLT5sb2Nh
bGUoKSkpOworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4
dFNpemVBZGp1c3Q6IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodGV4dFNp
emVBZGp1c3QsIFRleHRTaXplQWRqdXN0KQogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlIHx8
ICFwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgc2V0VGV4dFNpemVBZGp1c3QocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVBdXRvKTsKKyAgICAgICAgc3RhdGUuc2V0VGV4dFNpemVBZGp1c3QocHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNp
ZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCkBAIC0zNTI0LDcgKzM1MDAsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldERh
c2hib2FyZFJlZ2lvbnMoUmVuZGVyU3R5bGU6Om5vbmVEYXNoYm9hcmRSZWdpb25zKCkpOworICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RGFzaGJvYXJkUmVnaW9ucyhSZW5kZXJTdHlsZTo6
bm9uZURhc2hib2FyZFJlZ2lvbnMoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IApAQCAtMzU0OSw5ICszNTI1LDkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBsZWZ0
ID0gTGVuZ3RoKCk7CiAKICAgICAgICAgICAgIGlmIChyZWdpb24tPm1faXNDaXJjbGUpCi0gICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVn
aW9uOjpDaXJjbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBy
ZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOworICAgICAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hib2FyZFJlZ2lvbjo6Q2lyY2xlLCBy
ZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9uID09IGZpcnN0
ID8gZmFsc2UgOiB0cnVlKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lvbi0+bV9pc1JlY3Rh
bmdsZSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVE
YXNoYm9hcmRSZWdpb246OlJlY3RhbmdsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBi
b3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CisgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVn
aW9uOjpSZWN0YW5nbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0
LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwogICAgICAgICAgICAgcmVnaW9uID0g
cmVnaW9uLT5tX25leHQuZ2V0KCk7CiAgICAgICAgIH0KIApAQCAtMzU2NCw4ICszNTQwLDggQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QXBwUmVnaW9uOiB7CiAgICAg
ICAgIGlmICghcHJpbWl0aXZlVmFsdWUgfHwgIXByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXREcmFnZ2FibGVSZWdpb25N
b2RlKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRHJhZyA/IERyYWdnYWJs
ZVJlZ2lvbkRyYWcgOiBEcmFnZ2FibGVSZWdpb25Ob0RyYWcpOwotICAgICAgICBtX2VsZW1lbnQt
PmRvY3VtZW50KCktPnNldEhhc0Fubm90YXRlZFJlZ2lvbnModHJ1ZSk7CisgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldERyYWdnYWJsZVJlZ2lvbk1vZGUocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVEcmFnID8gRHJhZ2dhYmxlUmVnaW9uRHJhZyA6IERyYWdnYWJsZVJlZ2lv
bk5vRHJhZyk7CisgICAgICAgIHN0YXRlLmRvY3VtZW50KCktPnNldEhhc0Fubm90YXRlZFJlZ2lv
bnModHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTM1ODEsMjEgKzM1
NTcsMjEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICByZXN1bHQgKj0gMzsKICAgICAg
ICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlVGhp
Y2spCiAgICAgICAgICAgICAgICAgcmVzdWx0ICo9IDU7Ci0gICAgICAgICAgICB3aWR0aCA9IENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVzdWx0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VN
UyktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9v
bUZhY3Rvcik7CisgICAgICAgICAgICB3aWR0aCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
cmVzdWx0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+
KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwg
bV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHdpZHRoID0gcHJp
bWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJv
b3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICBtX3N0eWxlLT5zZXRUZXh0U3Ryb2tlV2lkdGgod2lkdGgpOworICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0U3Ryb2tlV2lkdGgod2lkdGgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm06IHsKICAgICAg
ICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodHJhbnNmb3JtLCBUcmFuc2Zvcm0pOwogICAg
ICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgICAgIGNyZWF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbnModmFsdWUsIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgb3BlcmF0
aW9ucyk7Ci0gICAgICAgIG1fc3R5bGUtPnNldFRyYW5zZm9ybShvcGVyYXRpb25zKTsKKyAgICAg
ICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUu
cm9vdEVsZW1lbnRTdHlsZSgpLCBvcGVyYXRpb25zKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0VHJhbnNmb3JtKG9wZXJhdGlvbnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2ZTogewpAQCAtMzYwNSwzNCArMzU4MSwzNCBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIG1fc3R5
bGUtPnNldFBlcnNwZWN0aXZlKDApOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UGVy
c3BlY3RpdmUoMCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBm
bG9hdCBwZXJzcGVjdGl2ZVZhbHVlOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVu
Z3RoKCkpCi0gICAgICAgICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmNv
bXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rv
cik7CisgICAgICAgICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1
dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwg
em9vbUZhY3Rvcik7CiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigp
KSB7CiAgICAgICAgICAgICAvLyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdHJlYXQgdmFs
dWVsZXNzIG51bWJlcnMgYXMgcHguCi0gICAgICAgICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlKCks
IG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICBwZXJzcGVjdGl2
ZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShwcmltaXRpdmVWYWx1ZS0+Z2V0RG91
YmxlVmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCktPmNvbXB1dGVMZW5ndGg8Zmxv
YXQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7
CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChwZXJz
cGVjdGl2ZVZhbHVlID49IDAuMGYpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRQZXJzcGVjdGl2
ZShwZXJzcGVjdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFBlcnNw
ZWN0aXZlKHBlcnNwZWN0aXZlVmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb246CiAgICAgICAgIGlmIChpc0luaXRpYWwpCi0g
ICAgICAgICAgICBtX3N0eWxlLT5jbGVhckFuaW1hdGlvbnMoKTsKKyAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPmNsZWFyQW5pbWF0aW9ucygpOwogICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQp
Ci0gICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0QW5pbWF0aW9ucyhtX3BhcmVudFN0eWxlLT5h
bmltYXRpb25zKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEFuaW1hdGlv
bnMoc3RhdGUucGFyZW50U3R5bGUoKS0+YW5pbWF0aW9ucygpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uOgogICAgICAgICBpZiAoaXNJbml0
aWFsKQotICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJUcmFuc2l0aW9ucygpOworICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJUcmFuc2l0aW9ucygpOwogICAgICAgICBlbHNlIGlmIChp
c0luaGVyaXQpCi0gICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0VHJhbnNpdGlvbnMobV9wYXJl
bnRTdHlsZS0+dHJhbnNpdGlvbnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5pbmhl
cml0VHJhbnNpdGlvbnMoc3RhdGUucGFyZW50U3R5bGUoKS0+dHJhbnNpdGlvbnMoKSk7CiAgICAg
ICAgIHJldHVybjsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogewpAQCAtMzY0MCw4ICszNjE2LDggQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwog
Ci0gICAgICAgIENvbG9yIGNvbCA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZh
bHVlKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0VGFwSGlnaGxpZ2h0Q29sb3IoY29sKTsKKyAgICAg
ICAgQ29sb3IgY29sID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoc3RhdGUsIHByaW1pdGl2ZVZh
bHVlKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGFwSGlnaGxpZ2h0Q29sb3IoY29sKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzY1MCw3ICszNjI2LDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodXNlVG91Y2hPdmVy
Zmxvd1Njcm9sbGluZywgVXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZyk7CiAgICAgICAgIGlmICgh
cHJpbWl0aXZlVmFsdWUpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgbV9zdHlsZS0+c2V0
VXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZyhwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBD
U1NWYWx1ZVRvdWNoKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VXNlVG91Y2hPdmVyZmxv
d1Njcm9sbGluZyhwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVRvdWNoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzY5Myw5ICszNjY5LDkgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWF4TG9naWNhbFdpZHRoOgogICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dpY2FsSGVpZ2h0OgogICAgIHsKLSAgICAgICAg
Q1NTUHJvcGVydHlJRCBuZXdJZCA9IENTU1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQ
cm9wZXJ0eShpZCwgbV9zdHlsZS0+ZGlyZWN0aW9uKCksIG1fc3R5bGUtPndyaXRpbmdNb2RlKCkp
OworICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJl
Y3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBzdGF0ZS5zdHlsZSgpLT5kaXJlY3Rpb24oKSwgc3RhdGUu
c3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7CiAgICAgICAgIEFTU0VSVChuZXdJZCAhPSBpZCk7Ci0g
ICAgICAgIHJldHVybiBhcHBseVByb3BlcnR5KG5ld0lkLCB2YWx1ZSk7CisgICAgICAgIHJldHVy
biBhcHBseVByb3BlcnR5KHN0YXRlLCBuZXdJZCwgdmFsdWUpOwogICAgIH0KICAgICBjYXNlIENT
U1Byb3BlcnR5Rm9udFN0cmV0Y2g6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2U6CkBAIC0zNzI1
LDEyICszNzAxLDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9J
TklUSUFMKHdyaXRpbmdNb2RlLCBXcml0aW5nTW9kZSk7CiAgICAgICAgIAogICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICBzZXRXcml0aW5nTW9kZSgqcHJpbWl0aXZlVmFs
dWUpOworICAgICAgICAgICAgc3RhdGUuc2V0V3JpdGluZ01vZGUoKnByaW1pdGl2ZVZhbHVlKTsK
IAogICAgICAgICAvLyBGSVhNRTogSXQgaXMgbm90IG9rIHRvIG1vZGlmeSBkb2N1bWVudCBzdGF0
ZSB3aGlsZSBhcHBseWluZyBzdHlsZS4KLSAgICAgICAgaWYgKG1fZWxlbWVudCAmJiBtX2VsZW1l
bnQgPT0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKLSAgICAgICAg
ICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxl
bWVudCh0cnVlKTsKLQorICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpICYmIHN0YXRlLmVsZW1l
bnQoKSA9PSBzdGF0ZS5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKKyAgICAgICAgICAg
IHN0YXRlLmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQodHJ1
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM3MzgsNyArMzcxMyw3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRleHRPcmllbnRhdGlv
biwgVGV4dE9yaWVudGF0aW9uKTsKIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUpCi0gICAg
ICAgICAgICBzZXRUZXh0T3JpZW50YXRpb24oKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAg
IHN0YXRlLnNldFRleHRPcmllbnRhdGlvbigqcHJpbWl0aXZlVmFsdWUpOwogCiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0zNzQ2LDcgKzM3MjEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRMaW5lQm94Q29udGFpbjogewogICAgICAgICBIQU5ETEVfSU5IRVJJ
VF9BTkRfSU5JVElBTChsaW5lQm94Q29udGFpbiwgTGluZUJveENvbnRhaW4pCiAgICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZSAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZU5vbmUpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldExpbmVCb3hDb250YWluKExpbmVCb3hD
b250YWluTm9uZSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaW5lQm94Q29udGFp
bihMaW5lQm94Q29udGFpbk5vbmUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
QEAgLTM3NTQsMjEgKzM3MjksMjEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICBDU1NMaW5lQm94Q29udGFpblZhbHVlKiBsaW5lQm94Q29udGFpblZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTTGluZUJveENvbnRhaW5WYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgbV9z
dHlsZS0+c2V0TGluZUJveENvbnRhaW4obGluZUJveENvbnRhaW5WYWx1ZS0+dmFsdWUoKSk7Cisg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVCb3hDb250YWluKGxpbmVCb3hDb250YWluVmFs
dWUtPnZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gQ1NTIEZvbnRz
IE1vZHVsZSBMZXZlbCAzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRGZWF0dXJlU2V0
dGluZ3M6IHsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKSB7Ci0gICAgICAgICAgICBzZXRGb250RGVzY3Jp
cHRpb24obV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkubWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5n
cygpKTsKKyAgICAgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihzdGF0ZS5mb250RGVz
Y3JpcHRpb24oKS5tYWtlTm9ybWFsRmVhdHVyZVNldHRpbmdzKCkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlv
biBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgQ1NT
VmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwogICAg
ICAgICBSZWZQdHI8Rm9udEZlYXR1cmVTZXR0aW5ncz4gc2V0dGluZ3MgPSBGb250RmVhdHVyZVNl
dHRpbmdzOjpjcmVhdGUoKTsKICAgICAgICAgaW50IGxlbiA9IGxpc3QtPmxlbmd0aCgpOwpAQCAt
Mzc4MCw3ICszNzU1LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHNldHRpbmdzLT5hcHBl
bmQoRm9udEZlYXR1cmUoZmVhdHVyZS0+dGFnKCksIGZlYXR1cmUtPnZhbHVlKCkpKTsKICAgICAg
ICAgfQogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmVhdHVyZVNldHRpbmdzKHNldHRpbmdz
LnJlbGVhc2UoKSk7Ci0gICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzc4OCwyMyArMzc2MywyMyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGaWx0ZXI6IHsKICAgICAgICAgSEFORExFX0lO
SEVSSVRfQU5EX0lOSVRJQUwoZmlsdGVyLCBGaWx0ZXIpOwogICAgICAgICBGaWx0ZXJPcGVyYXRp
b25zIG9wZXJhdGlvbnM7Ci0gICAgICAgIGlmIChjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKHZhbHVl
LCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIG9wZXJhdGlvbnMpKQotICAgICAgICAgICAg
bV9zdHlsZS0+c2V0RmlsdGVyKG9wZXJhdGlvbnMpOworICAgICAgICBpZiAoY3JlYXRlRmlsdGVy
T3BlcmF0aW9ucyhzdGF0ZSwgdmFsdWUsIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50
U3R5bGUoKSwgb3BlcmF0aW9ucykpCisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRGaWx0
ZXIob3BlcmF0aW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0R3JpZENvbHVtbnM6IHsKICAgICAgICAgVmVjdG9yPEdyaWRUcmFj
a1NpemU+IHRyYWNrU2l6ZXM7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1
ZSwgdHJhY2tTaXplcywgdGhpcykpCisgICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2
YWx1ZSwgdHJhY2tTaXplcywgc3RhdGUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBt
X3N0eWxlLT5zZXRHcmlkQ29sdW1ucyh0cmFja1NpemVzKTsKKyAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0R3JpZENvbHVtbnModHJhY2tTaXplcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRSb3dzOiB7CiAgICAgICAgIFZlY3RvcjxHcmlk
VHJhY2tTaXplPiB0cmFja1NpemVzOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3Qo
dmFsdWUsIHRyYWNrU2l6ZXMsIHRoaXMpKQorICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xp
c3QodmFsdWUsIHRyYWNrU2l6ZXMsIHN0YXRlKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgbV9zdHlsZS0+c2V0R3JpZFJvd3ModHJhY2tTaXplcyk7CisgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldEdyaWRSb3dzKHRyYWNrU2l6ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0zODEyLDE0ICszNzg3LDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIEdyaWRQb3NpdGlvbiBj
b2x1bW47CiAgICAgICAgIGlmICghY3JlYXRlR3JpZFBvc2l0aW9uKHZhbHVlLCBjb2x1bW4pKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRHcmlkSXRlbUNvbHVtbihj
b2x1bW4pOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRHcmlkSXRlbUNvbHVtbihjb2x1bW4p
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlk
Um93OiB7CiAgICAgICAgIEdyaWRQb3NpdGlvbiByb3c7CiAgICAgICAgIGlmICghY3JlYXRlR3Jp
ZFBvc2l0aW9uKHZhbHVlLCByb3cpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0
eWxlLT5zZXRHcmlkSXRlbVJvdyhyb3cpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRHcmlk
SXRlbVJvdyhyb3cpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIFRoZXNlIHByb3Bl
cnRpZXMgYXJlIGltcGxlbWVudGVkIGluIHRoZSBTdHlsZUJ1aWxkZXIgbG9va3VwIHRhYmxlLgpA
QCAtNDEwOSw5MSArNDA4NCw5MSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogI2lmIEVOQUJMRShTVkcpCiAgICAg
ZGVmYXVsdDoKICAgICAgICAgLy8gVHJ5IHRoZSBTVkcgcHJvcGVydGllcwotICAgICAgICBhcHBs
eVNWR1Byb3BlcnR5KGlkLCB2YWx1ZSk7CisgICAgICAgIGFwcGx5U1ZHUHJvcGVydHkoc3RhdGUs
IGlkLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgIH0KIH0KIAotUGFzc1Jl
ZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVS
ZXNvbHZlcjo6c3R5bGVJbWFnZShSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc0ltYWdlVmFsdWUo
KSkKLSAgICAgICAgcmV0dXJuIGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgc3Rh
dGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KHZhbHVlKSk7CisgICAgICAgIHJldHVybiBjYWNoZWRP
clBlbmRpbmdGcm9tVmFsdWUoc3RhdGUsIHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZh
bHVlKj4odmFsdWUpKTsKIAogICAgIGlmICh2YWx1ZS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkp
IHsKICAgICAgICAgaWYgKHZhbHVlLT5pc0dyYWRpZW50VmFsdWUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENT
U0dyYWRpZW50VmFsdWUqPih2YWx1ZSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMp
LmdldCgpKTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9w
ZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KHZhbHVlKSk7CisgICAg
ICAgICAgICByZXR1cm4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRlLCBwcm9wZXJ0
eSwgc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+KHZhbHVlKS0+Z3JhZGllbnRXaXRoU3R5
bGVzUmVzb2x2ZWQoc3RhdGUpLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVu
ZGluZ0Zyb21WYWx1ZShzdGF0ZSwgcHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJh
dG9yVmFsdWUqPih2YWx1ZSkpOwogICAgIH0KIAogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQog
ICAgIGlmICh2YWx1ZS0+aXNJbWFnZVNldFZhbHVlKCkpCi0gICAgICAgIHJldHVybiBzZXRPclBl
bmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPih2
YWx1ZSkpOworICAgICAgICByZXR1cm4gc2V0T3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRlLCBwcm9w
ZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KHZhbHVlKSk7CiAjZW5kaWYKIAog
ICAgIGlmICh2YWx1ZS0+aXNDdXJzb3JJbWFnZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBjdXJz
b3JPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0N1cnNvckltYWdl
VmFsdWUqPih2YWx1ZSkpOworICAgICAgICByZXR1cm4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVl
KHN0YXRlLCBwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSo+KHZhbHVl
KSk7CiAKICAgICByZXR1cm4gMDsKIH0KIAotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJl
c29sdmVyOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwg
Q1NTSW1hZ2VWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2
ZXI6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVZhbHVlKiB2YWx1ZSkKIHsKICAgICBSZWZQdHI8U3R5
bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoKTsKICAgICBpZiAo
aW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgIG1fcGVuZGluZ0ltYWdl
UHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICAgICAgc3RhdGUucGVuZGluZ0lt
YWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOwogICAgIHJldHVybiBpbWFnZS5y
ZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Z2Vu
ZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdl
R2VuZXJhdG9yVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29s
dmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSogdmFsdWUpCiB7CiAg
ICAgaWYgKHZhbHVlLT5pc1BlbmRpbmcoKSkgewotICAgICAgICBtX3BlbmRpbmdJbWFnZVByb3Bl
cnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIHN0YXRlLnBlbmRpbmdJbWFnZVBy
b3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIFN0eWxlUGVu
ZGluZ0ltYWdlOjpjcmVhdGUodmFsdWUpOwogICAgIH0KICAgICByZXR1cm4gU3R5bGVHZW5lcmF0
ZWRJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKIH0KIAogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQot
UGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdGcm9tVmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VTZXRWYWx1ZSogdmFsdWUpCitQYXNz
UmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnNldE9yUGVuZGluZ0Zyb21WYWx1ZShS
ZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVNldFZh
bHVlKiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2Fj
aGVkT3JQZW5kaW5nSW1hZ2VTZXQoZG9jdW1lbnQoKSk7CisgICAgUmVmUHRyPFN0eWxlSW1hZ2U+
IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KHN0YXRlLmRvY3VtZW50KCkp
OwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9w
ZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBzdGF0
ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgcmV0
dXJuIGltYWdlLnJlbGVhc2UoKTsKIH0KICNlbmRpZgogCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IFN0eWxlUmVzb2x2ZXI6OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5LCBDU1NDdXJzb3JJbWFnZVZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFn
ZT4gU3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKFJlc29sdmVTdGF0ZSYg
c3RhdGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0N1cnNvckltYWdlVmFsdWUqIHZhbHVl
KQogewotICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRp
bmdJbWFnZShkb2N1bWVudCgpKTsKKyAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1
ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2Uoc3RhdGUuZG9jdW1lbnQoKSk7CiAgICAgaWYgKGltYWdl
ICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICBtX3BlbmRpbmdJbWFnZVByb3Bl
cnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIHN0YXRlLnBlbmRpbmdJbWFnZVBy
b3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFz
ZSgpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKQor
dm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KFJlbmRlclN0eWxlKiBz
dHlsZSkKIHsKLSAgICBpZiAobV9zdHlsZS0+dGV4dFNpemVBZGp1c3QoKSkKKyAgICBpZiAoc3R5
bGUtPnRleHRTaXplQWRqdXN0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZvbnREZXNjcmlw
dGlvbiBuZXdGb250RGVzY3JpcHRpb24obV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkpOworICAg
IEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24oc3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpKTsKICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG5ld0ZvbnREZXNj
cmlwdGlvbi5zcGVjaWZpZWRTaXplKCkpOwotICAgIG1fc3R5bGUtPnNldEZvbnREZXNjcmlwdGlv
bihuZXdGb250RGVzY3JpcHRpb24pOworICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3
Rm9udERlc2NyaXB0aW9uKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0Zvclpvb21D
aGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit2b2lk
IFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShSZXNvbHZlU3RhdGUmIHN0YXRlLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBpZiAo
c3R5bGUtPmVmZmVjdGl2ZVpvb20oKSA9PSBwYXJlbnRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9
IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKICAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERl
c2NyaXB0aW9uKGNoaWxkRm9udCk7Ci0gICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9u
LCBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpKTsKKyAgICBzZXRGb250U2l6ZShzdGF0ZSwgbmV3
Rm9udERlc2NyaXB0aW9uLCBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpKTsKICAgICBzdHlsZS0+
c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQgU3R5bGVS
ZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQordm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0Zvckdl
bmVyaWNGYW1pbHlDaGFuZ2UoUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7CiAgICAgY29uc3QgRm9udERlc2NyaXB0aW9u
JiBjaGlsZEZvbnQgPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CiAKQEAgLTQyMjcsMTEgKzQy
MDIsMTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uo
UmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSoKICAgICB9CiAKICAgICBGb250RGVzY3Jp
cHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGNoaWxkRm9udCk7Ci0gICAgc2V0Rm9udFNpemUobmV3
Rm9udERlc2NyaXB0aW9uLCBzaXplKTsKKyAgICBzZXRGb250U2l6ZShzdGF0ZSwgbmV3Rm9udERl
c2NyaXB0aW9uLCBzaXplKTsKICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnRE
ZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHls
ZShTZXR0aW5ncyogc2V0dGluZ3MpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250
U3R5bGUoUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgU2V0dGluZ3MqIHNldHRpbmdzKQogewogICAgIEZv
bnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEdl
bmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseSk7CkBAIC00MjQzLDE2
ICs0MjE4LDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0
aW5ncyogc2V0dGluZ3MpCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLmFw
cGVuZEZhbWlseSgwKTsKICAgICB9CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXpl
KENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7Ci0gICAgc2V0Rm9udFNpemUo
Zm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVN
ZWRpdW0sIGZhbHNlKSk7Ci0gICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6
aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0gICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwotICAgIHNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgIHNldEZvbnRTaXplKHN0YXRl
LCBmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1
ZU1lZGl1bSwgZmFsc2UpKTsKKyAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KFJlbmRl
clN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFs
dWUoMCk7CisgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiB9
CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGZsb2F0IHNpemUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXpl
KFJlc29sdmVTdGF0ZSYgc3RhdGUsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBm
bG9hdCBzaXplKQogeworICAgIEFTU0VSVChzdGF0ZS5lbGVtZW50KCkpOwogICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRD
b21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQoKSwg
bV9zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNpemUsIHVz
ZVNWR1pvb21SdWxlcygpKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShn
ZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShzdGF0ZS5kb2N1bWVudCgpLCBzdGF0ZS5z
dHlsZSgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwgc3RhdGUudXNl
U1ZHWm9vbVJ1bGVzKCkpKTsKIH0KIAogZmxvYXQgU3R5bGVSZXNvbHZlcjo6Z2V0Q29tcHV0ZWRT
aXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBSZW5kZXJTdHlsZSogc3R5
bGUsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wgdXNlU1ZH
Wm9vbVJ1bGVzKQpAQCAtNDQ1MCw3ICs0NDI2LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjb2xv
ckZyb21QcmltaXRpdmVWYWx1ZUlzRGVyaXZlZEZyb21FbGVtZW50KENTU1ByaW1pdGl2ZVZhbHUK
ICAgICB9CiB9CiAKLUNvbG9yIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
KENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwgYm9vbCBmb3JWaXNpdGVkTGluaykgY29uc3QKK0Nv
bG9yIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKFJlc29sdmVTdGF0ZSYg
c3RhdGUsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwgYm9vbCBmb3JWaXNpdGVkTGluaykKIHsK
ICAgICBpZiAodmFsdWUtPmlzUkdCQ29sb3IoKSkKICAgICAgICAgcmV0dXJuIENvbG9yKHZhbHVl
LT5nZXRSR0JBMzJWYWx1ZSgpKTsKQEAgLTQ0NjAsMTUgKzQ0MzYsMTUgQEAgQ29sb3IgU3R5bGVS
ZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVl
LCBib29sIGZvclYKICAgICBjYXNlIDA6CiAgICAgICAgIHJldHVybiBDb2xvcigpOwogICAgIGNh
c2UgQ1NTVmFsdWVXZWJraXRUZXh0OgotICAgICAgICByZXR1cm4gbV9lbGVtZW50LT5kb2N1bWVu
dCgpLT50ZXh0Q29sb3IoKTsKKyAgICAgICAgcmV0dXJuIHN0YXRlLmRvY3VtZW50KCktPnRleHRD
b2xvcigpOwogICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRMaW5rOgotICAgICAgICByZXR1cm4gKG1f
ZWxlbWVudC0+aXNMaW5rKCkgJiYgZm9yVmlzaXRlZExpbmspID8gbV9lbGVtZW50LT5kb2N1bWVu
dCgpLT52aXNpdGVkTGlua0NvbG9yKCkgOiBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmxpbmtDb2xv
cigpOworICAgICAgICByZXR1cm4gKHN0YXRlLmVsZW1lbnQoKS0+aXNMaW5rKCkgJiYgZm9yVmlz
aXRlZExpbmspID8gc3RhdGUuZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtDb2xvcigpIDogc3RhdGUu
ZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEFjdGl2ZWxp
bms6Ci0gICAgICAgIHJldHVybiBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmFjdGl2ZUxpbmtDb2xv
cigpOworICAgICAgICByZXR1cm4gc3RhdGUuZG9jdW1lbnQoKS0+YWN0aXZlTGlua0NvbG9yKCk7
CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9yOgogICAgICAgICByZXR1cm4g
UmVuZGVyVGhlbWU6OmZvY3VzUmluZ0NvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZUN1cnJlbnRj
b2xvcjoKLSAgICAgICAgcmV0dXJuIG1fc3R5bGUtPmNvbG9yKCk7CisgICAgICAgIHJldHVybiBz
dGF0ZS5zdHlsZSgpLT5jb2xvcigpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBjb2xv
ckZvckNTU1ZhbHVlKGlkZW50KTsKICAgICB9CkBAIC00ODAwLDE5ICs0Nzc2LDE5IEBAIHN0YXRp
YyBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZmlsdGVyT3BlcmF0aW9uRm9yVHlwZShX
ZWJLaXRDU1NGaWx0ZXJWYWx1CiB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJM
RShTVkcpCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCkKK3Zv
aWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTVkdEb2N1bWVudHMoUmVzb2x2ZVN0YXRlJiBz
dGF0ZSkKIHsKLSAgICBpZiAoIW1fc3R5bGUtPmhhc0ZpbHRlcigpIHx8IG1fcGVuZGluZ1NWR0Rv
Y3VtZW50cy5pc0VtcHR5KCkpCisgICAgaWYgKCFzdGF0ZS5zdHlsZSgpLT5oYXNGaWx0ZXIoKSB8
fCBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2Vs
ZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7Ci0gICAgVmVjdG9yPFJl
ZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBtX3N0eWxlLT5tdXRh
YmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNo
ZWRSZXNvdXJjZUxvYWRlciA9IHN0YXRlLmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVy
KCk7CisgICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlv
bnMgPSBzdGF0ZS5zdHlsZSgpLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlck9w
ZXJhdGlvbnMuYXQoaSk7CiAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlv
blR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkgewogICAgICAgICAgICAgUmVm
ZXJlbmNlRmlsdGVyT3BlcmF0aW9uKiByZWZlcmVuY2VGaWx0ZXIgPSBzdGF0aWNfY2FzdDxSZWZl
cmVuY2VGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24uZ2V0KCkpOwogCi0gICAgICAg
ICAgICBXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKiB2YWx1ZSA9IG1fcGVuZGluZ1NWR0RvY3Vt
ZW50cy5nZXQocmVmZXJlbmNlRmlsdGVyKS5nZXQoKTsKKyAgICAgICAgICAgIFdlYktpdENTU1NW
R0RvY3VtZW50VmFsdWUqIHZhbHVlID0gc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cygpLmdldChy
ZWZlcmVuY2VGaWx0ZXIpLmdldCgpOwogICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIENhY2hlZFNWR0RvY3VtZW50KiBjYWNoZWRE
b2N1bWVudCA9IHZhbHVlLT5sb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKQEAgLTQ4MjMsMzQg
KzQ3OTksMzQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cygp
CiAgICAgICAgICAgICByZWZlcmVuY2VGaWx0ZXItPnNldENhY2hlZFNWR0RvY3VtZW50UmVmZXJl
bmNlKGFkb3B0UHRyKG5ldyBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShjYWNoZWREb2N1bWVu
dCkpKTsKICAgICAgICAgfQogICAgIH0KLSAgICBtX3BlbmRpbmdTVkdEb2N1bWVudHMuY2xlYXIo
KTsKKyAgICBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzKCkuY2xlYXIoKTsKIH0KICNlbmRpZgog
CiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQotU3R5bGVTaGFkZXIqIFN0eWxlUmVzb2x2ZXI6OnN0
eWxlU2hhZGVyKENTU1ZhbHVlKiB2YWx1ZSkKK1N0eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVyOjpz
dHlsZVNoYWRlcihSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAg
aWYgKHZhbHVlLT5pc1dlYktpdENTU1NoYWRlclZhbHVlKCkpCi0gICAgICAgIHJldHVybiBjYWNo
ZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NTaGFk
ZXJWYWx1ZSo+KHZhbHVlKSk7CisgICAgICAgIHJldHVybiBjYWNoZWRPclBlbmRpbmdTdHlsZVNo
YWRlckZyb21WYWx1ZShzdGF0ZSwgc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTU2hhZGVyVmFsdWUqPih2
YWx1ZSkpOwogICAgIHJldHVybiAwOwogfQogCi1TdHlsZVNoYWRlciogU3R5bGVSZXNvbHZlcjo6
Y2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NTU2hhZGVyVmFsdWUq
IHZhbHVlKQorU3R5bGVTaGFkZXIqIFN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ1N0eWxl
U2hhZGVyRnJvbVZhbHVlKFJlc29sdmVTdGF0ZSYgc3RhdGUsIFdlYktpdENTU1NoYWRlclZhbHVl
KiB2YWx1ZSkKIHsKICAgICBTdHlsZVNoYWRlciogc2hhZGVyID0gdmFsdWUtPmNhY2hlZE9yUGVu
ZGluZ1NoYWRlcigpOwogICAgIGlmIChzaGFkZXIgJiYgc2hhZGVyLT5pc1BlbmRpbmdTaGFkZXIo
KSkKLSAgICAgICAgbV9oYXNQZW5kaW5nU2hhZGVycyA9IHRydWU7CisgICAgICAgIHN0YXRlLnNl
dEhhc1BlbmRpbmdTaGFkZXJzKHRydWUpOwogICAgIHJldHVybiBzaGFkZXI7CiB9CiAKLXZvaWQg
U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJzKCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6
bG9hZFBlbmRpbmdTaGFkZXJzKFJlc29sdmVTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKCFtX3N0
eWxlLT5oYXNGaWx0ZXIoKSB8fCAhbV9oYXNQZW5kaW5nU2hhZGVycykKKyAgICBpZiAoIXN0YXRl
LnN0eWxlKCktPmhhc0ZpbHRlcigpIHx8ICFzdGF0ZS5oYXNQZW5kaW5nU2hhZGVycygpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VM
b2FkZXIgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7Cisg
ICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gc3RhdGUuZWxl
bWVudCgpLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogCi0gICAgVmVjdG9y
PFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBtX3N0eWxlLT5t
dXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOworICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3Bl
cmF0aW9uPiA+JiBmaWx0ZXJPcGVyYXRpb25zID0gc3RhdGUuc3R5bGUoKS0+bXV0YWJsZUZpbHRl
cigpLm9wZXJhdGlvbnMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVyT3Bl
cmF0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBm
aWx0ZXJPcGVyYXRpb24gPSBmaWx0ZXJPcGVyYXRpb25zLmF0KGkpOwogICAgICAgICBpZiAoZmls
dGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNU
T00pIHsKQEAgLTQ4NjcsNyArNDg0Myw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRp
bmdTaGFkZXJzKCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBtX2hhc1Bl
bmRpbmdTaGFkZXJzID0gZmFsc2U7CisgICAgc3RhdGUuc2V0SGFzUGVuZGluZ1NoYWRlcnMoZmFs
c2UpOwogfQogCiBzdGF0aWMgYm9vbCBzb3J0UGFyYW1ldGVyc0J5TmFtZUNvbXBhcmF0b3IoY29u
c3QgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4mIGEsIGNvbnN0IFJlZlB0cjxDdXN0b21G
aWx0ZXJQYXJhbWV0ZXI+JiBiKQpAQCAtNDkwNSwxNiArNDg4MSwxNiBAQCBQYXNzUmVmUHRyPEN1
c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJOdW1i
ZXJQYXJhbWV0ZQogICAgIHJldHVybiBudW1iZXJQYXJhbWV0ZXIucmVsZWFzZSgpOwogfQogCi1Q
YXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0
b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxp
c3QqIHZhbHVlcykKK1Bhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29s
dmVyOjpwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcihSZXNvbHZlU3RhdGUmIHN0
YXRlLCBjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlTGlzdCogdmFsdWVzKQogewogICAgIFJl
ZlB0cjxDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXI+IHRyYW5zZm9ybVBhcmFtZXRlciA9
IEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcjo6Y3JlYXRlKG5hbWUpOwogICAgIFRyYW5z
Zm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25z
KHZhbHVlcywgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKTsKKyAgICBj
cmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlcywgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9v
dEVsZW1lbnRTdHlsZSgpLCBvcGVyYXRpb25zKTsKICAgICB0cmFuc2Zvcm1QYXJhbWV0ZXItPnNl
dE9wZXJhdGlvbnMob3BlcmF0aW9ucyk7CiAgICAgcmV0dXJuIHRyYW5zZm9ybVBhcmFtZXRlci5y
ZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJl
c29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWUsIENT
U1ZhbHVlKiBwYXJhbWV0ZXJWYWx1ZSkKK1Bhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVy
PiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihSZXNvbHZlU3RhdGUm
IHN0YXRlLCBjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlKiBwYXJhbWV0ZXJWYWx1ZSkKIHsK
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG90aGVyIHBhcmFtZXRlcnMgdHlwZXMgcGFyc2luZy4K
ICAgICAvLyBib29sZWFuczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc2NDM4CkBAIC00OTM3LDcgKzQ5MTMsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFt
ZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIoY29ucwogICAg
IC8vIGFyZSB0cmFuc2Zvcm1zLiBwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlciB3
aWxsCiAgICAgLy8gcmV0dXJuIDAgaWYgdGhhdCBhc3N1bXB0aW9uIGlzIGluY29ycmVjdC4KICAg
ICBpZiAodmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApLT5pc1dlYktpdENTU1RyYW5z
Zm9ybVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBh
cmFtZXRlcihuYW1lLCB2YWx1ZXMpOworICAgICAgICByZXR1cm4gcGFyc2VDdXN0b21GaWx0ZXJU
cmFuc2Zvcm1QYXJhbWV0ZXIoc3RhdGUsIG5hbWUsIHZhbHVlcyk7CiAKICAgICAvLyBXZSBjYW4g
aGF2ZSBvbmx5IGFycmF5cyBvZiBib29sZWFucyBvciBudW1iZXJzLCBzbyB1c2UgdGhlIGZpcnN0
IHZhbHVlIHRvIGNob29zZSBiZXR3ZWVuIHRob3NlIHR3by4KICAgICAvLyBXZSBuZWVkIHVwIHRv
IDQgdmFsdWVzIChhbGwgYm9vbGVhbnMgb3IgYWxsIG51bWJlcnMpLgpAQCAtNDk1NCw3ICs0OTMw
LDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBh
cnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKGNvbnMKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBT
dHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QoQ1NTVmFsdWUqIHBh
cmFtZXRlcnNWYWx1ZSwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVyTGlzdCkK
K2Jvb2wgU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KFJlc29s
dmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiBwYXJhbWV0ZXJzVmFsdWUsIEN1c3RvbUZpbHRlclBh
cmFtZXRlckxpc3QmIHBhcmFtZXRlckxpc3QpCiB7CiAgICAgSGFzaFNldDxTdHJpbmc+IGtub3du
UGFyYW1ldGVyTmFtZXM7CiAgICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgcGFyYW1ldGVySXRlcmF0
b3IocGFyYW1ldGVyc1ZhbHVlKTsKQEAgLTQ5NzksNyArNDk1NSw3IEBAIGJvb2wgU3R5bGVSZXNv
bHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KENTU1ZhbHVlKiBwYXJhbWV0ZXJz
VmFsdWUsIEN1CiAgICAgICAgIGlmICghaXRlcmF0b3IuaGFzTW9yZSgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFt
ZXRlcj4gcGFyYW1ldGVyID0gcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIobmFtZSwgaXRlcmF0
b3IudmFsdWUoKSk7CisgICAgICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcmFt
ZXRlciA9IHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKHN0YXRlLCBuYW1lLCBpdGVyYXRvci52
YWx1ZSgpKTsKICAgICAgICAgaWYgKCFwYXJhbWV0ZXIpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIHBhcmFtZXRlckxpc3QuYXBwZW5kKHBhcmFtZXRlci5yZWxlYXNlKCkpOwpA
QCAtNDk5MSw3ICs0OTY3LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRl
clBhcmFtZXRlckxpc3QoQ1NTVmFsdWUqIHBhcmFtZXRlcnNWYWx1ZSwgQ3UKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2
ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWJLaXRDU1NGaWx0ZXJWYWx1ZSogZmls
dGVyVmFsdWUpCitQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZl
cjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFJlc29sdmVTdGF0ZSYgc3RhdGUsIFdlYktp
dENTU0ZpbHRlclZhbHVlKiBmaWx0ZXJWYWx1ZSkKIHsKICAgICBBU1NFUlQoZmlsdGVyVmFsdWUt
Pmxlbmd0aCgpKTsKIApAQCAtNTAwMiw3ICs0OTc4LDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0
ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihX
ZWIKICAgICB1bnNpZ25lZCBzaGFkZXJzTGlzdExlbmd0aCA9IHNoYWRlcnNMaXN0LT5sZW5ndGgo
KTsKICAgICBBU1NFUlQoc2hhZGVyc0xpc3RMZW5ndGgpOwogCi0gICAgUmVmUHRyPFN0eWxlU2hh
ZGVyPiB2ZXJ0ZXhTaGFkZXIgPSBzdHlsZVNoYWRlcihzaGFkZXJzTGlzdC0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygwKSk7CisgICAgUmVmUHRyPFN0eWxlU2hhZGVyPiB2ZXJ0ZXhTaGFkZXIgPSBz
dHlsZVNoYWRlcihzdGF0ZSwgc2hhZGVyc0xpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkp
OwogICAgIFJlZlB0cjxTdHlsZVNoYWRlcj4gZnJhZ21lbnRTaGFkZXI7CiAgICAgQ3VzdG9tRmls
dGVyUHJvZ3JhbVR5cGUgcHJvZ3JhbVR5cGUgPSBQUk9HUkFNX1RZUEVfQkxFTkRTX0VMRU1FTlRf
VEVYVFVSRTsKICAgICBDdXN0b21GaWx0ZXJQcm9ncmFtTWl4U2V0dGluZ3MgbWl4U2V0dGluZ3M7
CkBAIC01MDE1LDcgKzQ5OTEsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4g
U3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFdlYgogICAgICAgICAg
ICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXRlcmF0b3IobWl4RnVuY3Rpb24pOwogCiAgICAgICAg
ICAgICBBU1NFUlQobWl4RnVuY3Rpb24tPmxlbmd0aCgpKTsKLSAgICAgICAgICAgIGZyYWdtZW50
U2hhZGVyID0gc3R5bGVTaGFkZXIoaXRlcmF0b3IudmFsdWUoKSk7CisgICAgICAgICAgICBmcmFn
bWVudFNoYWRlciA9IHN0eWxlU2hhZGVyKHN0YXRlLCBpdGVyYXRvci52YWx1ZSgpKTsKICAgICAg
ICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKIAogICAgICAgICAgICAgQVNTRVJUKG1peEZ1bmN0
aW9uLT5sZW5ndGgoKSA8PSAzKTsKQEAgLTUwMzEsNyArNTAwNyw3IEBAIFBhc3NSZWZQdHI8Q3Vz
dG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVy
YXRpb24oV2ViCiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBw
cm9ncmFtVHlwZSA9IFBST0dSQU1fVFlQRV9OT19FTEVNRU5UX1RFWFRVUkU7Ci0gICAgICAgICAg
ICBmcmFnbWVudFNoYWRlciA9IHN0eWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyT3JNaXhGdW5jdGlv
bik7CisgICAgICAgICAgICBmcmFnbWVudFNoYWRlciA9IHN0eWxlU2hhZGVyKHN0YXRlLCBmcmFn
bWVudFNoYWRlck9yTWl4RnVuY3Rpb24pOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNTA4
Nyw3ICs1MDYzLDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVz
b2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWIKICAgICAgICAgcGFyYW1ldGVy
c1ZhbHVlID0gZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMik7CiAgICAgCiAg
ICAgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCBwYXJhbWV0ZXJMaXN0OwotICAgIGlmIChwYXJh
bWV0ZXJzVmFsdWUgJiYgIXBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChwYXJhbWV0ZXJz
VmFsdWUsIHBhcmFtZXRlckxpc3QpKQorICAgIGlmIChwYXJhbWV0ZXJzVmFsdWUgJiYgIXBhcnNl
Q3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChzdGF0ZSwgcGFyYW1ldGVyc1ZhbHVlLCBwYXJhbWV0
ZXJMaXN0KSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgUmVmUHRyPFN0eWxlQ3VzdG9t
RmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6Y3JlYXRl
KHZlcnRleFNoYWRlci5yZWxlYXNlKCksIGZyYWdtZW50U2hhZGVyLnJlbGVhc2UoKSwgcHJvZ3Jh
bVR5cGUsIG1peFNldHRpbmdzLCBtZXNoVHlwZSk7CkBAIC01MDk1LDcgKzUwNzEsNyBAQCBQYXNz
UmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9t
RmlsdGVyT3BlcmF0aW9uKFdlYgogfQogI2VuZGlmCiAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6Y3Jl
YXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBGaWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25z
KQorYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKFJlc29sdmVTdGF0
ZSYgc3RhdGUsIENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0
eWxlKiByb290U3R5bGUsIEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpCiB7CiAgICAg
QVNTRVJUKG91dE9wZXJhdGlvbnMuaXNFbXB0eSgpKTsKICAgICAKQEAgLTUxMjgsNyArNTEwNCw3
IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSog
aW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQogICAgICAgICBpZiAob3BlcmF0aW9uVHlwZSA9PSBGaWx0ZXJPcGVyYXRpb246OkNVU1RP
TSkgewotICAgICAgICAgICAgUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gb3BlcmF0aW9u
ID0gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKGZpbHRlclZhbHVlKTsKKyAgICAgICAgICAg
IFJlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IG9wZXJhdGlvbiA9IGNyZWF0ZUN1c3RvbUZp
bHRlck9wZXJhdGlvbihzdGF0ZSwgZmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgaWYgKCFvcGVy
YXRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgCkBAIC01
MTQ2LDEyICs1MTIyLDEyIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0
aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgICAgIFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWUqIHN2
Z0RvY3VtZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKj4o
YXJndW1lbnQpOwotICAgICAgICAgICAgS1VSTCB1cmwgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCkt
PmNvbXBsZXRlVVJMKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpKTsKKyAgICAgICAgICAgIEtVUkwg
dXJsID0gLyptX2VsZW1lbnQtPiovZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoc3ZnRG9jdW1lbnRW
YWx1ZS0+dXJsKCkpOwogCiAgICAgICAgICAgICBSZWZQdHI8UmVmZXJlbmNlRmlsdGVyT3BlcmF0
aW9uPiBvcGVyYXRpb24gPSBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShzdmdEb2N1
bWVudFZhbHVlLT51cmwoKSwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigpLCBvcGVyYXRpb25UeXBl
KTsKLSAgICAgICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVu
Y2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsKKyAg
ICAgICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3Zn
RG9jdW1lbnRWYWx1ZS0+dXJsKCksIHN0YXRlLmRvY3VtZW50KCkpKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKCFzdmdEb2N1bWVudFZhbHVlLT5sb2FkUmVxdWVzdGVkKCkpCi0gICAgICAgICAgICAg
ICAgICAgIG1fcGVuZGluZ1NWR0RvY3VtZW50cy5zZXQob3BlcmF0aW9uLmdldCgpLCBzdmdEb2N1
bWVudFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50
cygpLnNldChvcGVyYXRpb24uZ2V0KCksIHN2Z0RvY3VtZW50VmFsdWUpOwogICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKHN2Z0RvY3VtZW50VmFsdWUtPmNhY2hlZFNWR0RvY3VtZW50KCkpCiAgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbi0+c2V0Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2Uo
YWRvcHRQdHIobmV3IENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKHN2Z0RvY3VtZW50VmFsdWUt
PmNhY2hlZFNWR0RvY3VtZW50KCkpKSk7CiAgICAgICAgICAgICB9CkBAIC01MjM1LDcgKzUyMTEs
NyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUq
IGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZQogICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVt
LT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlLCByb290U3R5bGUs
IHpvb21GYWN0b3IpIDogMDsKICAgICAgICAgICAgIENvbG9yIGNvbG9yOwogICAgICAgICAgICAg
aWYgKGl0ZW0tPmNvbG9yKQotICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0
aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0KCkpOworICAgICAgICAgICAgICAgIGNvbG9yID0gY29s
b3JGcm9tUHJpbWl0aXZlVmFsdWUoc3RhdGUsIGl0ZW0tPmNvbG9yLmdldCgpKTsKIAogICAgICAg
ICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKERyb3BTaGFkb3dGaWx0ZXJPcGVy
YXRpb246OmNyZWF0ZShsb2NhdGlvbiwgYmx1ciwgY29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiBD
b2xvcjo6dHJhbnNwYXJlbnQsIG9wZXJhdGlvblR5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtNTI1NSw3ICs1MjMxLDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVy
YXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUKIAogUGFzc1JlZlB0
cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGlu
Z0ltYWdlKiBwZW5kaW5nSW1hZ2UpCiB7Ci0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hl
ZFJlc291cmNlTG9hZGVyID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxv
YWRlcigpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9
IGRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAKICAgICBpZiAocGVuZGluZ0lt
YWdlLT5jc3NJbWFnZVZhbHVlKCkpIHsKICAgICAgICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VWYWx1
ZSA9IHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VWYWx1ZSgpOwpAQCAtNTI4MywyNSArNTI1OSwyNSBA
QCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2Uo
U3R5bGVQZW5kaW5nSW1hZ2UqIHBlbmRpbgogICAgIHJldHVybiAwOwogfQogCi12b2lkIFN0eWxl
UmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBl
bmRpbmdJbWFnZXMoUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAobV9wZW5kaW5nSW1h
Z2VQcm9wZXJ0aWVzLmlzRW1wdHkoKSkKKyAgICBpZiAoc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVy
dGllcygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUGVuZGluZ0ltYWdlUHJv
cGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGVuZCA9IG1fcGVuZGluZ0ltYWdlUHJvcGVy
dGllcy5lbmQoKS5rZXlzKCk7Ci0gICAgZm9yIChQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29u
c3RfaXRlcmF0b3I6OktleXMgaXQgPSBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuYmVnaW4oKS5r
ZXlzKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpj
b25zdF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCku
ZW5kKCkua2V5cygpOworICAgIGZvciAoUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0
ZXJhdG9yOjpLZXlzIGl0ID0gc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmJlZ2luKCku
a2V5cygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgQ1NTUHJvcGVydHlJRCBjdXJyZW50
UHJvcGVydHkgPSAqaXQ7CiAKICAgICAgICAgc3dpdGNoIChjdXJyZW50UHJvcGVydHkpIHsKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZTogewotICAgICAgICAgICAgZm9y
IChGaWxsTGF5ZXIqIGJhY2tncm91bmRMYXllciA9IG1fc3R5bGUtPmFjY2Vzc0JhY2tncm91bmRM
YXllcnMoKTsgYmFja2dyb3VuZExheWVyOyBiYWNrZ3JvdW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5
ZXItPm5leHQoKSkgeworICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIGJhY2tncm91bmRMYXll
ciA9IHN0YXRlLnN0eWxlKCktPmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKTsgYmFja2dyb3VuZExh
eWVyOyBiYWNrZ3JvdW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkgewogICAgICAg
ICAgICAgICAgIGlmIChiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkgJiYgYmFja2dyb3VuZExheWVy
LT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQogICAgICAgICAgICAgICAgICAgICBiYWNrZ3Jv
dW5kTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5k
aW5nSW1hZ2UqPihiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkpKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q29u
dGVudDogewotICAgICAgICAgICAgZm9yIChDb250ZW50RGF0YSogY29udGVudERhdGEgPSBjb25z
dF9jYXN0PENvbnRlbnREYXRhKj4obV9zdHlsZS0+Y29udGVudERhdGEoKSk7IGNvbnRlbnREYXRh
OyBjb250ZW50RGF0YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAo
Q29udGVudERhdGEqIGNvbnRlbnREYXRhID0gY29uc3RfY2FzdDxDb250ZW50RGF0YSo+KHN0YXRl
LnN0eWxlKCktPmNvbnRlbnREYXRhKCkpOyBjb250ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250
ZW50RGF0YS0+bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnREYXRhLT5pc0lt
YWdlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2UgPSBzdGF0aWNf
Y2FzdDxJbWFnZUNvbnRlbnREYXRhKj4oY29udGVudERhdGEpLT5pbWFnZSgpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpIHsKQEAgLTUzMTQsNyArNTI5
MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUN1cnNvcjogewot
ICAgICAgICAgICAgaWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBtX3N0eWxlLT5jdXJzb3Jz
KCkpIHsKKyAgICAgICAgICAgIGlmIChDdXJzb3JMaXN0KiBjdXJzb3JMaXN0ID0gc3RhdGUuc3R5
bGUoKS0+Y3Vyc29ycygpKSB7CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjdXJzb3JMaXN0LT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgICAgICBDdXJzb3JE
YXRhJiBjdXJyZW50Q3Vyc29yID0gY3Vyc29yTGlzdC0+YXQoaSk7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChTdHlsZUltYWdlKiBpbWFnZSA9IGN1cnJlbnRDdXJzb3IuaW1hZ2UoKSkgewpAQCAt
NTMyNiwxNyArNTMwMiwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2Vz
KCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlMaXN0U3R5bGVJbWFnZTogewotICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmxpc3RTdHlsZUlt
YWdlKCkgJiYgbV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAg
ICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVuZGluZ0ltYWdl
KHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2Uo
KSkpKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpICYm
IHN0YXRlLnN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGlzdFN0eWxlSW1hZ2UobG9hZFBlbmRpbmdJ
bWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KHN0YXRlLnN0eWxlKCktPmxpc3RT
dHlsZUltYWdlKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAgIGlmIChtX3N0
eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpICYmIG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCkt
PmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVySW1h
Z2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+
KG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCkpKSk7CisgICAgICAgICAgICBpZiAoc3RhdGUu
c3R5bGUoKS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBzdGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFn
ZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldEJvcmRlckltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5
bGVQZW5kaW5nSW1hZ2UqPihzdGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJveFJlZmxlY3Q6IHsKLSAgICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxl
Y3Rpb24gPSBtX3N0eWxlLT5ib3hSZWZsZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChTdHlsZVJl
ZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBzdGF0ZS5zdHlsZSgpLT5ib3hSZWZsZWN0KCkpIHsKICAg
ICAgICAgICAgICAgICBjb25zdCBOaW5lUGllY2VJbWFnZSYgbWFza0ltYWdlID0gcmVmbGVjdGlv
bi0+bWFzaygpOwogICAgICAgICAgICAgICAgIGlmIChtYXNrSW1hZ2UuaW1hZ2UoKSAmJiBtYXNr
SW1hZ2UuaW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkgewogICAgICAgICAgICAgICAgICAgICBS
ZWZQdHI8U3R5bGVJbWFnZT4gbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19j
YXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obWFza0ltYWdlLmltYWdlKCkpKTsKQEAgLTUzNDYsMTIg
KzUzMjIsMTIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFza0JveEltYWdlU291cmNlOiB7Ci0gICAgICAgICAgICBpZiAobV9zdHlsZS0+bWFza0JveElt
YWdlU291cmNlKCkgJiYgbV9zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCktPmlzUGVuZGluZ0lt
YWdlKCkpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFza0JveEltYWdlU291cmNlKGxv
YWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0eWxlLT5t
YXNrQm94SW1hZ2VTb3VyY2UoKSkpKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5t
YXNrQm94SW1hZ2VTb3VyY2UoKSAmJiBzdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2Uo
KS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRN
YXNrQm94SW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRp
bmdJbWFnZSo+KHN0YXRlLnN0eWxlKCktPm1hc2tCb3hJbWFnZVNvdXJjZSgpKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tJbWFnZTogewotICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IG1fc3R5
bGUtPmFjY2Vzc01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXIt
Pm5leHQoKSkgeworICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IHN0YXRl
LnN0eWxlKCktPmFjY2Vzc01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNr
TGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChtYXNrTGF5ZXItPmltYWdlKCkg
JiYgbWFza0xheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQogICAgICAgICAgICAgICAg
ICAgICBtYXNrTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5
bGVQZW5kaW5nSW1hZ2UqPihtYXNrTGF5ZXItPmltYWdlKCkpKSk7CiAgICAgICAgICAgICB9CkBA
IC01MzYyLDIyICs1MzM4LDIyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFn
ZXMoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmNs
ZWFyKCk7CisgICAgc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmNsZWFyKCk7CiB9CiAK
LXZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdSZXNvdXJjZXMoKQordm9pZCBTdHlsZVJl
c29sdmVyOjpsb2FkUGVuZGluZ1Jlc291cmNlcyhSZXNvbHZlU3RhdGUmIHN0YXRlKQogewogICAg
IC8vIFN0YXJ0IGxvYWRpbmcgaW1hZ2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBs
b2FkUGVuZGluZ0ltYWdlcygpOworICAgIGxvYWRQZW5kaW5nSW1hZ2VzKHN0YXRlKTsKIAogI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKICAgICAvLyBTdGFydCBsb2FkaW5nIHRoZSBzaGFkZXJzIHJl
ZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ1NoYWRlcnMoKTsKKyAgICBs
b2FkUGVuZGluZ1NoYWRlcnMoc3RhdGUpOwogI2VuZGlmCiAgICAgCiAjaWYgRU5BQkxFKENTU19G
SUxURVJTKSAmJiBFTkFCTEUoU1ZHKQogICAgIC8vIFN0YXJ0IGxvYWRpbmcgdGhlIFNWRyBEb2N1
bWVudHMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nU1ZHRG9jdW1l
bnRzKCk7CisgICAgbG9hZFBlbmRpbmdTVkdEb2N1bWVudHMoc3RhdGUpOwogI2VuZGlmCiB9CiAK
QEAgLTU0MjUsNyArNTQwMSw2IEBAIHZvaWQgTWVkaWFRdWVyeVJlc3VsdDo6cmVwb3J0TWVtb3J5
VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uCiB2b2lkIFN0eWxl
UmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVj
dEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5m
bywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwotICAgIGluZm8uYWRkTWVtYmVyKG1f
c3R5bGUpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fYXV0aG9yU3R5bGUpOwogICAgIGluZm8uYWRk
TWVtYmVyKG1fdXNlclN0eWxlKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2ZlYXR1cmVzKTsKQEAg
LTU0MzQsMzEgKzU0MDksMTYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2Fn
ZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogICAgIGluZm8uYWRk
TWVtYmVyKG1fa2V5ZnJhbWVzUnVsZU1hcCk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9tYXRjaGVk
UHJvcGVydGllc0NhY2hlKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX21hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGVTd2VlcFRpbWVyKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX21hdGNoZWRSdWxlcyk7CiAK
LSAgICBpbmZvLmFkZE1lbWJlcihtX3J1bGVMaXN0KTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3Bl
bmRpbmdJbWFnZVByb3BlcnRpZXMpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fbWVkaXVtKTsKICAg
ICBpbmZvLmFkZE1lbWJlcihtX3Jvb3REZWZhdWx0U3R5bGUpOwogICAgIGluZm8uYWRkTWVtYmVy
KG1fZG9jdW1lbnQpOwogCi0gICAgLy8gRklYTUU6IHBvaW50ZXIgdG8gUmVuZGVyU3R5bGUgY291
bGQgcG9pbnQgdG8gYW4gYWxyZWFkeSBkZWxldGVkIG9iamVjdC4KLSAgICBpbmZvLmlnbm9yZU1l
bWJlcihtX3BhcmVudFN0eWxlKTsKLSAgICBpbmZvLmlnbm9yZU1lbWJlcihtX3Jvb3RFbGVtZW50
U3R5bGUpOwotCi0gICAgaW5mby5hZGRNZW1iZXIobV9lbGVtZW50KTsKLSAgICBpbmZvLmFkZE1l
bWJlcihtX3N0eWxlZEVsZW1lbnQpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fcmVnaW9uRm9yU3R5
bGluZyk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9wYXJlbnROb2RlKTsKLSAgICBpbmZvLmFkZE1l
bWJlcihtX2xpbmVIZWlnaHRWYWx1ZSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9mb250U2VsZWN0
b3IpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVz
dWx0cyk7CiAgICAgaW5mby5pZ25vcmVNZW1iZXIobV9zdHlsZUJ1aWxkZXIpOwogICAgIGluZm8u
YWRkTWVtYmVyKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXApOwogICAgIGluZm8uYWRkTWVt
YmVyKG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCk7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJT
KSAmJiBFTkFCTEUoU1ZHKQotICAgIGluZm8uYWRkTWVtYmVyKG1fcGVuZGluZ1NWR0RvY3VtZW50
cyk7Ci0jZW5kaWYKICAgICBpbmZvLmFkZE1lbWJlcihtX3Njb3BlUmVzb2x2ZXIpOwogCiAgICAg
Ly8gRklYTUU6IG1vdmUgdGhpcyB0byBhIHBsYWNlIHdoZXJlIGl0IHdvdWxkIGJlIGNhbGxlZCBv
bmx5IG9uY2U/CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5o
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCAzMzM2NmM3Njc5MTFl
NzMwMTlmOTQ5NGJjZWI0ZGM4YjBjODc0NzU4Li41YzU0YzMwNDNmYTZiMTQ0N2E2NjAyZDA4ZmNi
OTJhY2MyMTVlM2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTIzLDExICsy
MywxMyBAQAogI2RlZmluZSBTdHlsZVJlc29sdmVyX2gKIAogI2luY2x1ZGUgIkNTU1J1bGUuaCIK
KyNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgogI2luY2x1ZGUgIkNTU1RvU3R5bGVNYXAuaCIKICNp
bmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJMaW5rSGFzaC5oIgogI2luY2x1ZGUg
Ik1lZGlhUXVlcnlFeHAuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlJl
c29sdmVTdGF0ZS5oIgogI2luY2x1ZGUgIlJ1bGVGZWF0dXJlLmgiCiAjaW5jbHVkZSAiUnVsZVNl
dC5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKQEAgLTM2LDYgKzM4LDkg
QEAKICNpbmNsdWRlICJTdHlsZUluaGVyaXRlZERhdGEuaCIKICNpbmNsdWRlICJTdHlsZVNjb3Bl
UmVzb2x2ZXIuaCIKICNpbmNsdWRlICJWaWV3cG9ydFN0eWxlUmVzb2x2ZXIuaCIKKyNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiV2ViS2l0Q1NTU1ZHRG9j
dW1lbnRWYWx1ZS5oIgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTg2LDYgKzkxLDcg
QEAgY2xhc3MgU3R5bGVJbWFnZTsKIGNsYXNzIFN0eWxlS2V5ZnJhbWU7CiBjbGFzcyBTdHlsZVBl
bmRpbmdJbWFnZTsKIGNsYXNzIFN0eWxlUHJvcGVydHlTZXQ7CitjbGFzcyBSZXNvbHZlU3RhdGU7
CiBjbGFzcyBTdHlsZVJ1bGU7CiAjaWYgRU5BQkxFKFNIQURPV19ET00pCiBjbGFzcyBTdHlsZVJ1
bGVIb3N0OwpAQCAtMTMyLDYgKzEzOCw5IEBAIGVudW0gUnVsZU1hdGNoaW5nQmVoYXZpb3Igewog
ICAgIE1hdGNoT25seVVzZXJBZ2VudFJ1bGVzLAogfTsKIAorI2lmbmRlZiBUQVNBSworI2VuZGlm
CisKIC8vIFRoaXMgY2xhc3Mgc2VsZWN0cyBhIFJlbmRlclN0eWxlIGZvciBhIGdpdmVuIGVsZW1l
bnQgYmFzZWQgb24gYSBjb2xsZWN0aW9uIG9mIHN0eWxlc2hlZXRzLgogY2xhc3MgU3R5bGVSZXNv
bHZlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3R5bGVSZXNvbHZlcik7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwpAQCAtMTYxLDIwICsxNzAsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JEb2N1bWVudChEb2N1bWVudCosIENT
U0ZvbnRTZWxlY3RvciogPSAwKTsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9Ci0gICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVt
ZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50U3R5bGU7IH0KLSAgICBFbGVt
ZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CiAgICAgRG9jdW1lbnQq
IGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQotICAgIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gc3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCk7IH0KLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlw
dGlvbigpIHsgcmV0dXJuIHBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAg
dm9pZCBzZXRGb250RGVzY3JpcHRpb24oY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24pIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnRE
ZXNjcmlwdGlvbik7IH0KLSAgICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8
PSBzdHlsZSgpLT5zZXRab29tKGYpOyB9Ci0gICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0
IGYpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQotICAg
IHZvaWQgc2V0VGV4dFNpemVBZGp1c3QoYm9vbCBiKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCkt
PnNldFRleHRTaXplQWRqdXN0KGIpOyB9Ci0gICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5n
TW9kZSB3cml0aW5nTW9kZSkgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRXcml0aW5nTW9k
ZSh3cml0aW5nTW9kZSk7IH0KLSAgICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50
YXRpb24gdGV4dE9yaWVudGF0aW9uKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRP
cmllbnRhdGlvbih0ZXh0T3JpZW50YXRpb24pOyB9Ci0gICAgYm9vbCBoYXNQYXJlbnROb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9wYXJlbnROb2RlOyB9CiAKICAgICB2b2lkIHJlc2V0QXV0aG9yU3R5
bGUoKTsKICAgICB2b2lkIGFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3
LCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mKTsKQEAgLTE5OCwxNyArMTk0
LDE3IEBAIHByaXZhdGU6CiAgICAgfQogI2VuZGlmCiAKLSAgICB2b2lkIGluaXRGb3JTdHlsZVJl
c29sdmUoRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0g
Tk9QU0VVRE8pOwotICAgIHZvaWQgaW5pdEVsZW1lbnQoRWxlbWVudCopOworICAgIHZvaWQgaW5p
dEZvclN0eWxlUmVzb2x2ZShSZXNvbHZlU3RhdGUmLCBFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlID0gMCk7CisgICAgdm9pZCBpbml0RWxlbWVudChSZXNvbHZlU3RhdGUmLCBFbGVt
ZW50Kik7CiAgICAgdm9pZCBjb2xsZWN0RmVhdHVyZXMoKTsKLSAgICBSZW5kZXJTdHlsZSogbG9j
YXRlU2hhcmVkU3R5bGUoKTsKLSAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNS
dWxlU2V0KFJ1bGVTZXQqKTsKLSAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNI
b3N0UnVsZXMoKTsKKyAgICBSZW5kZXJTdHlsZSogbG9jYXRlU2hhcmVkU3R5bGUoUmVzb2x2ZVN0
YXRlJik7CisgICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChFbGVt
ZW50KiwgUnVsZVNldCopOworICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hv
c3RSdWxlcyhFbGVtZW50Kik7CiAgICAgTm9kZSogbG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBw
YXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdDsKLSAgICBTdHlsZWRFbGVt
ZW50KiBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiwgdW5zaWduZWQmIGNvdW50KSBj
b25zdDsKLSAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50Kikg
Y29uc3Q7CisgICAgU3R5bGVkRWxlbWVudCogZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoUmVz
b2x2ZVN0YXRlJiwgTm9kZSosIHVuc2lnbmVkJiBjb3VudCkgY29uc3Q7CisgICAgYm9vbCBjYW5T
aGFyZVN0eWxlV2l0aEVsZW1lbnQoUmVzb2x2ZVN0YXRlJiwgU3R5bGVkRWxlbWVudCopIGNvbnN0
OwogCi0gICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JLZXlmcmFtZShjb25zdCBS
ZW5kZXJTdHlsZSosIGNvbnN0IFN0eWxlS2V5ZnJhbWUqLCBLZXlmcmFtZVZhbHVlJik7CisgICAg
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JLZXlmcmFtZShSZXNvbHZlU3RhdGUmLCBj
b25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFN0eWxlS2V5ZnJhbWUqLCBLZXlmcmFtZVZhbHVlJik7
CiAKIHB1YmxpYzoKICAgICAvLyBUaGVzZSBtZXRob2RzIHdpbGwgZ2l2ZSBiYWNrIHRoZSBzZXQg
b2YgcnVsZXMgdGhhdCBtYXRjaGVkIGZvciBhIGdpdmVuIGVsZW1lbnQgKG9yIGEgcHNldWRvLWVs
ZW1lbnQpLgpAQCAtMjMxLDI1ICsyMjcsMjggQEAgcHVibGljOgogICAgIHN0YXRpYyBpbnQgbGVn
YWN5Rm9udFNpemUoRG9jdW1lbnQqLCBpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbCBzaG91bGRVc2VG
aXhlZERlZmF1bHRTaXplKTsKIAogcHVibGljOgorICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVdpdGhW
YWx1ZUNoZWNraW5nKFJlc29sdmVTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7Cisg
ICAgdm9pZCBhcHBseUZvbnRQcm9wZXJ0eVRvU3R5bGUoUmVuZGVyU3R5bGUqIHRhcmdldCwgY29u
c3QgU3R5bGVQcm9wZXJ0eVNldCogcmVmZXJlbmNlKTsKKyNpZiAwCisgICAgLy8gYmFkIG1ldGhv
ZHMgLi4uIEkgdGhpbmsuCiAgICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0
eUlELCBDU1NWYWx1ZSosIFJlbmRlclN0eWxlKik7CiAKICAgICB2b2lkIGFwcGx5UHJvcGVydHlU
b0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOworI2VuZGlmCiAKLSAgICB2
b2lkIHVwZGF0ZUZvbnQoKTsKLSAgICB2b2lkIGluaXRpYWxpemVGb250U3R5bGUoU2V0dGluZ3Mq
KTsKKyAgICB2b2lkIHVwZGF0ZUZvbnQoUmVzb2x2ZVN0YXRlJik7CisgICAgdm9pZCBpbml0aWFs
aXplRm9udFN0eWxlKFJlc29sdmVTdGF0ZSYsIFNldHRpbmdzKik7CiAKICAgICBzdGF0aWMgZmxv
YXQgZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqLCBmbG9hdCB6b29t
RmFjdG9yLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBFU21hcnRN
aW5pbXVtRm9yRm9udFNpemUgPSBVc2VTbWFydE1pbmltdW1Gb3JGb250Rml6ZSk7CiAKLSAgICB2
b2lkIHNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNpemUpOworICAgIHN0YXRp
YyB2b2lkIHNldEZvbnRTaXplKFJlc29sdmVTdGF0ZSYsIEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0
IHNpemUpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBmbG9hdCBnZXRDb21wdXRlZFNpemVGcm9t
U3BlY2lmaWVkU2l6ZShEb2N1bWVudCosIFJlbmRlclN0eWxlKiwgYm9vbCBpc0Fic29sdXRlU2l6
ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMpOwogCiBwdWJsaWM6
Ci0gICAgYm9vbCB1c2VTVkdab29tUnVsZXMoKTsKLQogICAgIHN0YXRpYyBib29sIGNvbG9yRnJv
bVByaW1pdGl2ZVZhbHVlSXNEZXJpdmVkRnJvbUVsZW1lbnQoQ1NTUHJpbWl0aXZlVmFsdWUqKTsK
LSAgICBDb2xvciBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZSosIGJv
b2wgZm9yVmlzaXRlZExpbmsgPSBmYWxzZSkgY29uc3Q7CisgICAgc3RhdGljIENvbG9yIGNvbG9y
RnJvbVByaW1pdGl2ZVZhbHVlKFJlc29sdmVTdGF0ZSYsIENTU1ByaW1pdGl2ZVZhbHVlKiwgYm9v
bCBmb3JWaXNpdGVkTGluayA9IGZhbHNlKTsKIAogICAgIGJvb2wgaGFzU2VsZWN0b3JGb3JJZChj
b25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKICAgICBib29sIGhhc1NlbGVjdG9yRm9yQ2xhc3Mo
Y29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CkBAIC0yODEsMzQgKzI4MCwzNCBAQCBwdWJsaWM6
CiAgICAgQ1NTU3R5bGVSdWxlKiBlbnN1cmVGdWxsQ1NTT01XcmFwcGVyRm9ySW5zcGVjdG9yKFN0
eWxlUnVsZSopOwogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIGJvb2wgY3JlYXRlRmls
dGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5bGUsIFJl
bmRlclN0eWxlKiByb290U3R5bGUsIEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOwor
ICAgIGJvb2wgY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhSZXNvbHZlU3RhdGUmLCBDU1NWYWx1ZSog
aW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIEZp
bHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOwogI2lmIEVOQUJMRShDU1NfU0hBREVSUykK
LSAgICBTdHlsZVNoYWRlciogc3R5bGVTaGFkZXIoQ1NTVmFsdWUqKTsKLSAgICBTdHlsZVNoYWRl
ciogY2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NTU2hhZGVyVmFs
dWUqKTsKLSAgICBib29sIHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChDU1NWYWx1ZSos
IEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmKTsKLSAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRl
clBhcmFtZXRlcj4gcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1l
LCBDU1NWYWx1ZSopOworICAgIFN0eWxlU2hhZGVyKiBzdHlsZVNoYWRlcihSZXNvbHZlU3RhdGUm
LCBDU1NWYWx1ZSopOworICAgIFN0eWxlU2hhZGVyKiBjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRl
ckZyb21WYWx1ZShSZXNvbHZlU3RhdGUmLCBXZWJLaXRDU1NTaGFkZXJWYWx1ZSopOworICAgIGJv
b2wgcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KFJlc29sdmVTdGF0ZSYsIENTU1ZhbHVl
KiwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYpOworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmls
dGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihSZXNvbHZlU3RhdGUmLCBj
b25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlKik7CiAgICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0
ZXJQYXJhbWV0ZXI+IHBhcnNlQ3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXIoY29uc3QgU3RyaW5n
JiBuYW1lLCBDU1NWYWx1ZUxpc3QqKTsKICAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFt
ZXRlcj4gcGFyc2VDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1l
LCBDU1NWYWx1ZUxpc3QqKTsKLSAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4g
cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBD
U1NWYWx1ZUxpc3QqKTsKLSAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gY3Jl
YXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFdlYktpdENTU0ZpbHRlclZhbHVlKik7Ci0gICAgdm9p
ZCBsb2FkUGVuZGluZ1NoYWRlcnMoKTsKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFt
ZXRlcj4gcGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIoUmVzb2x2ZVN0YXRlJiwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqKTsKKyAgICBQYXNzUmVmUHRyPEN1c3Rv
bUZpbHRlck9wZXJhdGlvbj4gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFJlc29sdmVTdGF0
ZSYsIFdlYktpdENTU0ZpbHRlclZhbHVlKik7CisgICAgdm9pZCBsb2FkUGVuZGluZ1NoYWRlcnMo
UmVzb2x2ZVN0YXRlJik7CiAjZW5kaWYKICNpZiBFTkFCTEUoU1ZHKQotICAgIHZvaWQgbG9hZFBl
bmRpbmdTVkdEb2N1bWVudHMoKTsKKyAgICB2b2lkIGxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKFJl
c29sdmVTdGF0ZSYpOwogI2VuZGlmCiAjZW5kaWYgLy8gRU5BQkxFKENTU19GSUxURVJTKQogCi0g
ICAgdm9pZCBsb2FkUGVuZGluZ1Jlc291cmNlcygpOworICAgIHZvaWQgbG9hZFBlbmRpbmdSZXNv
dXJjZXMoUmVzb2x2ZVN0YXRlJik7CiAKIHByaXZhdGU6CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBm
aXhlcyB1cCB0aGUgZGVmYXVsdCBmb250IHNpemUgaWYgaXQgZGV0ZWN0cyB0aGF0IHRoZSBjdXJy
ZW50IGdlbmVyaWMgZm9udCBmYW1pbHkgaGFzIGNoYW5nZWQuIC1kd2gKLSAgICB2b2lkIGNoZWNr
Rm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSk7Ci0gICAgdm9pZCBjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpOwotICAgIHZvaWQgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgpOwor
ICAgIHZvaWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlc29sdmVTdGF0ZSYsIFJlbmRl
clN0eWxlKiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIGNoZWNrRm9yWm9v
bUNoYW5nZShSZXNvbHZlU3RhdGUmLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSk7CisgICAgdm9pZCBjaGVja0ZvclRleHRTaXplQWRqdXN0KFJlbmRlclN0eWxlKik7CiAK
LSAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZVRvQWRqdXN0LCBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQqKTsKKyAgICB2b2lkIGFkanVzdFJlbmRl
clN0eWxlKFJlc29sdmVTdGF0ZSYsIFJlbmRlclN0eWxlKiBzdHlsZVRvQWRqdXN0LCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQqKTsKIAotICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUo
Y29uc3QgUnVsZURhdGEqIHJ1bGUpIHsgbV9tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOyB9Cisg
ICAgdm9pZCBhZGRNYXRjaGVkUnVsZShSZXNvbHZlU3RhdGUmIHN0YXRlLCBjb25zdCBSdWxlRGF0
YSogcnVsZSkgeyBzdGF0ZS5tYXRjaGVkUnVsZXMoKS5hcHBlbmQocnVsZSk7IH0KIAogICAgIHN0
cnVjdCBSdWxlUmFuZ2UgewogICAgICAgICBSdWxlUmFuZ2UoaW50JiBmaXJzdFJ1bGVJbmRleCwg
aW50JiBsYXN0UnVsZUluZGV4KTogZmlyc3RSdWxlSW5kZXgoZmlyc3RSdWxlSW5kZXgpLCBsYXN0
UnVsZUluZGV4KGxhc3RSdWxlSW5kZXgpIHsgfQpAQCAtMzUyLDM4ICszNTEsMjggQEAgcHJpdmF0
ZToKICAgICAgICAgYm9vbCBpc0NhY2hlYWJsZTsKICAgICB9OwogCi0gICAgc3RydWN0IE1hdGNo
UmVxdWVzdCB7Ci0gICAgICAgIE1hdGNoUmVxdWVzdChSdWxlU2V0KiBydWxlU2V0LCBib29sIGlu
Y2x1ZGVFbXB0eVJ1bGVzID0gZmFsc2UsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0gMCkK
LSAgICAgICAgICAgIDogcnVsZVNldChydWxlU2V0KQotICAgICAgICAgICAgLCBpbmNsdWRlRW1w
dHlSdWxlcyhpbmNsdWRlRW1wdHlSdWxlcykKLSAgICAgICAgICAgICwgc2NvcGUoc2NvcGUpIHsg
fQotICAgICAgICBjb25zdCBSdWxlU2V0KiBydWxlU2V0OwotICAgICAgICBjb25zdCBib29sIGlu
Y2x1ZGVFbXB0eVJ1bGVzOwotICAgICAgICBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZTsKLSAg
ICB9OwotCiAgICAgc3RhdGljIHZvaWQgYWRkTWF0Y2hlZFByb3BlcnRpZXMoTWF0Y2hSZXN1bHQm
LCBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqID0gMCwgdW5z
aWduZWQgbGlua01hdGNoVHlwZSA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwsIFByb3BlcnR5
V2hpdGVsaXN0VHlwZSA9IFByb3BlcnR5V2hpdGVsaXN0Tm9uZSk7CiAgICAgdm9pZCBhZGRFbGVt
ZW50U3R5bGVQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiwgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCos
IGJvb2wgaXNDYWNoZWFibGUgPSB0cnVlKTsKIAotICAgIHZvaWQgbWF0Y2hBbGxSdWxlcyhNYXRj
aFJlc3VsdCYsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWVzKTsKLSAgICB2b2lkIG1hdGNoVUFS
dWxlcyhNYXRjaFJlc3VsdCYpOwotICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0Jiwg
UnVsZVNldCopOwotICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wg
aW5jbHVkZUVtcHR5UnVsZXMpOwotICAgIHZvaWQgbWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQm
LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICB2b2lkIG1hdGNoU2NvcGVkQXV0aG9yUnVs
ZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICB2b2lkIG1hdGNo
SG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgdm9p
ZCBtYXRjaEFsbFJ1bGVzKFJlc29sdmVTdGF0ZSYgcmVxdWVzdCwgTWF0Y2hSZXN1bHQmLCBib29s
IGluY2x1ZGVTTUlMUHJvcGVydGllcyk7CisgICAgdm9pZCBtYXRjaFVBUnVsZXMoUmVzb2x2ZVN0
YXRlJiwgTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIG1hdGNoVUFSdWxlcyhSZXNvbHZlU3RhdGUm
LCBNYXRjaFJlc3VsdCYsIFJ1bGVTZXQqKTsKKyAgICB2b2lkIG1hdGNoQXV0aG9yUnVsZXMoUmVz
b2x2ZVN0YXRlJiwgTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIG1hdGNoVXNlclJ1bGVzKFJlc29s
dmVTdGF0ZSYsIE1hdGNoUmVzdWx0Jik7CisgICAgdm9pZCBtYXRjaFNjb3BlZEF1dGhvclJ1bGVz
KFJlc29sdmVTdGF0ZSYsIE1hdGNoUmVzdWx0Jik7CisgICAgdm9pZCBtYXRjaEhvc3RSdWxlcyhS
ZXNvbHZlU3RhdGUmLCBNYXRjaFJlc3VsdCYpOwogCi0gICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdS
dWxlcyhjb25zdCBNYXRjaFJlcXVlc3QmLCBSdWxlUmFuZ2UmKTsKLSAgICB2b2lkIGNvbGxlY3RN
YXRjaGluZ1J1bGVzRm9yUmVnaW9uKGNvbnN0IE1hdGNoUmVxdWVzdCYsIFJ1bGVSYW5nZSYpOwot
ICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0
YT4qLCBjb25zdCBNYXRjaFJlcXVlc3QmLCBSdWxlUmFuZ2UmKTsKKyAgICB2b2lkIGNvbGxlY3RN
YXRjaGluZ1J1bGVzKFJ1bGVTZXQqLCBSZXNvbHZlU3RhdGUmLCBSdWxlUmFuZ2UmLCBjb25zdCBD
b250YWluZXJOb2RlKiBzY29wZSA9IDApOworICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNG
b3JSZWdpb24oUnVsZVNldCosIFJlc29sdmVTdGF0ZSYsIFJ1bGVSYW5nZSYsIGNvbnN0IENvbnRh
aW5lck5vZGUqIHNjb3BlID0gMCk7CisgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxp
c3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIFJlc29sdmVTdGF0ZSYsIFJ1bGVSYW5nZSYsIGNv
bnN0IENvbnRhaW5lck5vZGUqKTsKIAogICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0
IFJ1bGVEYXRhJikgY29uc3Q7Ci0gICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7Ci0gICAgdm9p
ZCBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIHNv
cnRNYXRjaGVkUnVsZXMoVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+JiBtYXRjaGVkUnVsZXMp
OworICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKFJlc29sdmVTdGF0ZSYsIE1h
dGNoUmVzdWx0Jik7CiAKLSAgICBib29sIHJ1bGVNYXRjaGVzKGNvbnN0IFJ1bGVEYXRhJiwgY29u
c3QgQ29udGFpbmVyTm9kZSogc2NvcGUpOworICAgIGJvb2wgcnVsZU1hdGNoZXMoUmVzb2x2ZVN0
YXRlJiwgY29uc3QgUnVsZURhdGEmLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgUHNldWRv
SWQmIGR5bmFtaWNQc2V1ZG8pOwogICAgIGJvb2wgY2hlY2tSZWdpb25TZWxlY3Rvcihjb25zdCBD
U1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IsIEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOwotICAg
IHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYsIGNvbnN0IEVs
ZW1lbnQqKTsKKyAgICB2b2lkIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoUmVzb2x2ZVN0YXRlJiwg
Y29uc3QgTWF0Y2hSZXN1bHQmLCBjb25zdCBFbGVtZW50Kik7CiAgICAgZW51bSBTdHlsZUFwcGxp
Y2F0aW9uUGFzcyB7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCiAgICAgICAgIFZhcmlhYmxl
RGVmaW5pdGlvbnMsCkBAIC0zOTIsMTEgKzM4MSwxMSBAQCBwcml2YXRlOgogICAgICAgICBMb3dQ
cmlvcml0eVByb3BlcnRpZXMKICAgICB9OwogICAgIHRlbXBsYXRlIDxTdHlsZUFwcGxpY2F0aW9u
UGFzcyBwYXNzPgotICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJl
c3VsdCYsIGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29s
IGluaGVyaXRlZE9ubHkpOworICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhSZXNvbHZl
U3RhdGUmLCBjb25zdCBNYXRjaFJlc3VsdCYsIGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRl
eCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpOwogICAgIHRlbXBsYXRlIDxTdHls
ZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgotICAgIHZvaWQgYXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0
eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSosIGJvb2wgaXNJbXBvcnRhbnQs
IGJvb2wgaW5oZXJpdGVkT25seSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlID0gUHJvcGVydHlXaGl0
ZWxpc3ROb25lKTsKKyAgICB2b2lkIGFwcGx5UHJvcGVydGllcyhSZXNvbHZlU3RhdGUmLCBjb25z
dCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqLCBib29sIGlzSW1wb3J0
YW50LCBib29sIGluaGVyaXRlZE9ubHksIFByb3BlcnR5V2hpdGVsaXN0VHlwZSA9IFByb3BlcnR5
V2hpdGVsaXN0Tm9uZSk7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCi0gICAgdm9pZCByZXNv
bHZlVmFyaWFibGVzKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgVmVjdG9yPHN0ZDo6cGFpcjxD
U1NQcm9wZXJ0eUlELCBTdHJpbmc+ID4mIGtub3duRXhwcmVzc2lvbnMpOworICAgIHZvaWQgcmVz
b2x2ZVZhcmlhYmxlcyhSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIFZl
Y3RvcjxzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiA+JiBrbm93bkV4cHJlc3Npb25z
KTsKICNlbmRpZgogICAgIHN0YXRpYyBib29sIGlzVmFsaWRSZWdpb25TdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5SUQpOwogI2lmIEVOQUJMRShWSURFT19UUkFDSykKQEAgLTQwNiw4ICszOTUsOCBA
QCBwcml2YXRlOgogICAgIHZvaWQgbWF0Y2hQYWdlUnVsZXNGb3JMaXN0KFZlY3RvcjxTdHlsZVJ1
bGVQYWdlKj4mIG1hdGNoZWRSdWxlcywgY29uc3QgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYsIGJv
b2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7
CiAgICAgU2V0dGluZ3MqIGRvY3VtZW50U2V0dGluZ3MoKSB7IHJldHVybiBtX2RvY3VtZW50LT5z
ZXR0aW5ncygpOyB9CiAKLSAgICBib29sIGlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7
Ci0gICAgYm9vbCBpc1JpZ2h0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdCB7IHJldHVybiAhaXNM
ZWZ0UGFnZShwYWdlSW5kZXgpOyB9CisgICAgYm9vbCBpc0xlZnRQYWdlKFJlbmRlclN0eWxlKiwg
aW50IHBhZ2VJbmRleCkgY29uc3Q7CisgICAgYm9vbCBpc1JpZ2h0UGFnZShSZW5kZXJTdHlsZSog
cm9vdEVsZW1lbnRTdHlsZSwgaW50IHBhZ2VJbmRleCkgY29uc3QgeyByZXR1cm4gIWlzTGVmdFBh
Z2Uocm9vdEVsZW1lbnRTdHlsZSwgcGFnZUluZGV4KTsgfQogICAgIGJvb2wgaXNGaXJzdFBhZ2Uo
aW50IHBhZ2VJbmRleCkgY29uc3Q7CiAgICAgU3RyaW5nIHBhZ2VOYW1lKGludCBwYWdlSW5kZXgp
IGNvbnN0OwogCkBAIC00MTgsMzMgKzQwNywyMyBAQCBwcml2YXRlOgogICAgIE93blB0cjxSdWxl
U2V0PiBtX3NpYmxpbmdSdWxlU2V0OwogICAgIE93blB0cjxSdWxlU2V0PiBtX3VuY29tbW9uQXR0
cmlidXRlUnVsZVNldDsKIAotICAgIGJvb2wgbV9oYXNVQUFwcGVhcmFuY2U7Ci0gICAgQm9yZGVy
RGF0YSBtX2JvcmRlckRhdGE7Ci0gICAgRmlsbExheWVyIG1fYmFja2dyb3VuZERhdGE7Ci0gICAg
Q29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7Ci0KICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3Ry
aW5nSW1wbCosIFJlZlB0cjxTdHlsZVJ1bGVLZXlmcmFtZXM+ID4gS2V5ZnJhbWVzUnVsZU1hcDsK
ICAgICBLZXlmcmFtZXNSdWxlTWFwIG1fa2V5ZnJhbWVzUnVsZU1hcDsKIAogcHVibGljOgogICAg
IHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVOb3RZZXRBdmFpbGFibGUoKSB7IHJldHVybiBzX3N0
eWxlTm90WWV0QXZhaWxhYmxlOyB9CiAKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxl
SW1hZ2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1h
Z2U+IGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVZhbHVl
Kik7Ci0gICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFs
dWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSopOworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2UoUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVy
dHlJRCwgQ1NTVmFsdWUqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBjYWNo
ZWRPclBlbmRpbmdGcm9tVmFsdWUoUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTSW1h
Z2VWYWx1ZSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGdlbmVyYXRlZE9y
UGVuZGluZ0Zyb21WYWx1ZShSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZUdl
bmVyYXRvclZhbHVlKik7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAgUGFzc1JlZlB0
cjxTdHlsZUltYWdlPiBzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1h
Z2VTZXRWYWx1ZSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHNldE9yUGVu
ZGluZ0Zyb21WYWx1ZShSZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVNldFZh
bHVlKik7CiAjZW5kaWYKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGN1cnNvck9yUGVuZGlu
Z0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NDdXJzb3JJbWFnZVZhbHVlKik7Ci0KLSAgICBi
b29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlOyB9Ci0gICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVk
TGlua1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gY3Vyc29yT3JQZW5kaW5n
RnJvbVZhbHVlKFJlc29sdmVTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIENTU0N1cnNvckltYWdlVmFs
dWUqKTsKIAogICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvSW50TGVuZ3RoKENTU1ByaW1pdGl2
ZVZhbHVlKiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVs
dGlwbGllciA9IDEpOwogICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvRmxvYXRMZW5ndGgoQ1NT
UHJpbWl0aXZlVmFsdWUqLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRv
dWJsZSBtdWx0aXBsaWVyID0gMSk7CiAKLSAgICBDU1NUb1N0eWxlTWFwKiBzdHlsZU1hcCgpIHsg
cmV0dXJuICZtX3N0eWxlTWFwOyB9Ci0KICAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9y
eU9iamVjdEluZm8qKSBjb25zdDsKICAgICAKIHByaXZhdGU6CkBAIC00NTIsMTkgKzQzMSwxOSBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGNv
bnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYsIFJ1bGVTZXQmIHVzZXJTdHlsZSk7
CiAKLSAgICB2b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOworICAgIHZvaWQgY2FjaGVC
b3JkZXJBbmRCYWNrZ3JvdW5kKFJlc29sdmVTdGF0ZSYsIFJlbmRlclN0eWxlKik7CiAKIHByaXZh
dGU6Ci0gICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCopIGNv
bnN0OworICAgIGJvb2wgY2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKEVsZW1lbnQqLCBTdHlsZWRF
bGVtZW50KikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwg
Q1NTVmFsdWUqKTsKKyAgICB2b2lkIGFwcGx5UHJvcGVydHkoUmVzb2x2ZVN0YXRlJiwgQ1NTUHJv
cGVydHlJRCwgQ1NTVmFsdWUqKTsKIAogI2lmIEVOQUJMRShTVkcpCi0gICAgdm9pZCBhcHBseVNW
R1Byb3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CisgICAgdm9pZCBhcHBseVNWR1By
b3BlcnR5KFJlc29sdmVTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CiAjZW5kaWYK
IAogICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRp
bmdJbWFnZSopOwotICAgIHZvaWQgbG9hZFBlbmRpbmdJbWFnZXMoKTsKKyAgICB2b2lkIGxvYWRQ
ZW5kaW5nSW1hZ2VzKFJlc29sdmVTdGF0ZSYpOwogCiAgICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1
dGVNYXRjaGVkUHJvcGVydGllc0hhc2goY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMqLCB1bnNpZ25l
ZCBzaXplKTsKICAgICBzdHJ1Y3QgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0gewpAQCAtNDgy
LDcgKzQ2MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGUoVGltZXI8U3R5bGVSZXNvbHZlcj4qKTsKIAogICAgIGJvb2wgY2xhc3NOYW1lc0FmZmVjdGVk
QnlSdWxlcyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJikgY29uc3Q7Ci0gICAgYm9vbCBzaGFyaW5n
Q2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1l
bnQqKSBjb25zdDsKKyAgICBib29sIHNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFm
ZmVjdGluZ0F0dHJpYnV0ZXMoUmVzb2x2ZVN0YXRlJiwgRWxlbWVudCosIFN0eWxlZEVsZW1lbnQq
KSBjb25zdDsKIAogICAgIHVuc2lnbmVkIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9u
c1NpbmNlTGFzdFN3ZWVwOwogCkBAIC00OTEsMzkgKzQ3MCwxMyBAQCBwcml2YXRlOgogCiAgICAg
VGltZXI8U3R5bGVSZXNvbHZlcj4gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlU3dlZXBUaW1lcjsK
IAotICAgIC8vIEEgYnVmZmVyIHVzZWQgdG8gaG9sZCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMg
Zm9yIGFuIGVsZW1lbnQsIGFuZCBhIHRlbXBvcmFyeSBidWZmZXIgdXNlZCBmb3IKLSAgICAvLyBt
ZXJnZSBzb3J0aW5nLgotICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiBtX21hdGNoZWRS
dWxlczsKLQotICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4gbV9ydWxlTGlzdDsKLQotICAg
IHR5cGVkZWYgSGFzaE1hcDxDU1NQcm9wZXJ0eUlELCBSZWZQdHI8Q1NTVmFsdWU+ID4gUGVuZGlu
Z0ltYWdlUHJvcGVydHlNYXA7Ci0gICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXAgbV9wZW5kaW5n
SW1hZ2VQcm9wZXJ0aWVzOwotCiAgICAgT3duUHRyPE1lZGlhUXVlcnlFdmFsdWF0b3I+IG1fbWVk
aXVtOwogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9yb290RGVmYXVsdFN0eWxlOwogCi0gICAg
UHNldWRvSWQgbV9keW5hbWljUHNldWRvOwotICAgIFBzZXVkb0lkIG1fcHNldWRvU3R5bGU7Ci0K
ICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKLSAgICBTZWxlY3RvckNoZWNrZXIgbV9zZWxlY3Rv
ckNoZWNrZXI7CiAgICAgU2VsZWN0b3JGaWx0ZXIgbV9zZWxlY3RvckZpbHRlcjsKIAotICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKLSAgICBSZW5kZXJTdHlsZSogbV9wYXJlbnRTdHls
ZTsKLSAgICBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlOwotICAgIEVsZW1lbnQqIG1f
ZWxlbWVudDsKLSAgICBTdHlsZWRFbGVtZW50KiBtX3N0eWxlZEVsZW1lbnQ7Ci0gICAgUmVuZGVy
UmVnaW9uKiBtX3JlZ2lvbkZvclN0eWxpbmc7Ci0gICAgRUluc2lkZUxpbmsgbV9lbGVtZW50TGlu
a1N0YXRlOwotICAgIGJvb2wgbV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXM7Ci0gICAgQ29u
dGFpbmVyTm9kZSogbV9wYXJlbnROb2RlOwotICAgIENTU1ZhbHVlKiBtX2xpbmVIZWlnaHRWYWx1
ZTsKLSAgICBib29sIG1fZm9udERpcnR5OwogICAgIGJvb2wgbV9tYXRjaEF1dGhvckFuZFVzZXJT
dHlsZXM7Ci0gICAgYm9vbCBtX3NhbWVPcmlnaW5Pbmx5OwotICAgIGJvb2wgbV9kaXN0cmlidXRl
ZFRvSW5zZXJ0aW9uUG9pbnQ7CiAKICAgICBSZWZQdHI8Q1NTRm9udFNlbGVjdG9yPiBtX2ZvbnRT
ZWxlY3RvcjsKICAgICBWZWN0b3I8T3duUHRyPE1lZGlhUXVlcnlSZXN1bHQ+ID4gbV92aWV3cG9y
dERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzOwpAQCAtNTMyLDIzICs0ODUsMTIgQEAgcHJpdmF0
ZToKICAgICBSZWZQdHI8Vmlld3BvcnRTdHlsZVJlc29sdmVyPiBtX3ZpZXdwb3J0U3R5bGVSZXNv
bHZlcjsKICNlbmRpZgogCi0gICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsK
LSAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsKICAgICBjb25zdCBT
dHlsZUJ1aWxkZXImIG1fc3R5bGVCdWlsZGVyOwogICAgIAogICAgIEhhc2hNYXA8U3R5bGVSdWxl
KiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiBtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwOwog
ICAgIEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4gbV9zdHlsZVNoZWV0Q1NTT01XcmFw
cGVyU2V0OwogCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGJvb2wgbV9oYXNQZW5kaW5n
U2hhZGVyczsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZH
KQotICAgIEhhc2hNYXA8RmlsdGVyT3BlcmF0aW9uKiwgUmVmUHRyPFdlYktpdENTU1NWR0RvY3Vt
ZW50VmFsdWU+ID4gbV9wZW5kaW5nU1ZHRG9jdW1lbnRzOwotI2VuZGlmCi0KICAgICBPd25QdHI8
U3R5bGVTY29wZVJlc29sdmVyPiBtX3Njb3BlUmVzb2x2ZXI7Ci0gICAgQ1NTVG9TdHlsZU1hcCBt
X3N0eWxlTWFwOwogCiAgICAgZnJpZW5kIGNsYXNzIFN0eWxlQnVpbGRlcjsKICAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiwgY29uc3QgTWF0Y2hlZFBy
b3BlcnRpZXMmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oCmluZGV4IGU0MWFhZWY0YTFl
YjUwOGU4YjU2M2FhODViYmVmZjM5ODMyOTBlN2QuLmY1ODQwMmZhOWZhZDNiMjFmNzBiMWRlYmE4
Mzg1YmY5Y2U4YmU1MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaApAQCAtOTksNiAr
OTksMTggQEAgaW5saW5lIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIFN0eWxlZEVsZW1lbnQ6OnBy
ZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkKICAgICByZXR1cm4gYXR0cmlidXRlRGF0YSgpLT5w
cmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpOwogfQogCitpbmxpbmUgU3R5bGVkRWxlbWVudCog
dG9TdHlsZWRFbGVtZW50KE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKCFub2RlIHx8IG5vZGUt
PmlzU3R5bGVkRWxlbWVudCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVu
dCo+KG5vZGUpOworfQorCitpbmxpbmUgY29uc3QgU3R5bGVkRWxlbWVudCogdG9TdHlsZWRFbGVt
ZW50KGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKCFub2RlIHx8IG5vZGUtPmlzU3R5
bGVkRWxlbWVudCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVkRWxlbWVu
dCo+KG5vZGUpOworfQorCiB9IC8vbmFtZXNwYWNlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKaW5k
ZXggNzIwY2E3M2JjZWM5YzNlZGIxNjljMmY0N2I2ZjhjMjY4NzU5OTkyMy4uZDhmM2UyYmYyNTE4
ZGFmNTZhMzcxZDI0M2IyN2U0MmQ5YTEwOTdmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0yMDA5LDE5
ICsyMDA5LDkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoY29uc3Qg
U3RyaW5nJiBuZXdGb250KQogCiAgICAgLy8gTm93IG1hcCB0aGUgZm9udCBwcm9wZXJ0eSBsb25n
aGFuZHMgaW50byB0aGUgc3R5bGUuCiAgICAgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciA9
IGNhbnZhcygpLT5zdHlsZVJlc29sdmVyKCk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9w
ZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpLmdldCgpLCBuZXdTdHlsZS5nZXQoKSk7
Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3Bl
cnR5Rm9udFN0eWxlLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0
eUZvbnRTdHlsZSkuZ2V0KCkpOwotICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb0N1
cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50KS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNv
bHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFdlaWdodCwg
cGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0KS5n
ZXQoKSk7Ci0KLSAgICAvLyBBcyBkZXNjcmliZWQgaW4gQlVHNjYyOTEsIHNldHRpbmcgZm9udC1z
aXplIGFuZCBsaW5lLWhlaWdodCBvbiBhIGZvbnQgbWF5IGVudGFpbCBhIENTU1ByaW1pdGl2ZVZh
bHVlOjpjb21wdXRlTGVuZ3RoRG91YmxlIGNhbGwsCi0gICAgLy8gd2hpY2ggYXNzdW1lcyB0aGUg
Zm9udE1ldHJpY3MgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIGFmZmVjdGVkIGZvbnQsIG90aGVyd2lz
ZSBhIGNyYXNoIG9jY3VycyAoc2VlIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0Lzk2
MTIyKS4KLSAgICAvLyBUaGUgdXBkYXRlRm9udCgpIGNhbGxzIGJlbG93IHVwZGF0ZSB0aGUgZm9u
dE1ldHJpY3MgYW5kIGVuc3VyZSB0aGUgcHJvcGVyIHNldHRpbmcgb2YgZm9udC1zaXplIGFuZCBs
aW5lLWhlaWdodC4KLSAgICBzdHlsZVJlc29sdmVyLT51cGRhdGVGb250KCk7Ci0gICAgc3R5bGVS
ZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFNpemUs
IHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpLmdl
dCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLT51cGRhdGVGb250KCk7Ci0gICAgc3R5bGVSZXNvbHZl
ci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFy
c2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQo
KSk7CisgICAgc3R5bGVSZXNvbHZlci0+YXBwbHlGb250UHJvcGVydHlUb1N0eWxlKG5ld1N0eWxl
LmdldCgpLCBwYXJzZWRTdHlsZS5nZXQoKSk7CiAKKyAgICAvLyBvawogICAgIG1vZGlmaWFibGVT
dGF0ZSgpLm1fZm9udCA9IG5ld1N0eWxlLT5mb250KCk7CiAgICAgbW9kaWZpYWJsZVN0YXRlKCku
bV9mb250LnVwZGF0ZShzdHlsZVJlc29sdmVyLT5mb250U2VsZWN0b3IoKSk7CiAgICAgbW9kaWZp
YWJsZVN0YXRlKCkubV9yZWFsaXplZEZvbnQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAppbmRleCBkMDlhNTUxNWQ4MzA1Y2U3YWU2MDhhOTBk
ZjdmODg0ZjQ1ZDRlNTBkLi4yZGVkZWY3NzU3YTk3MWI5OWVhZDAyMWQwYjUwYTFlODVjYWRiM2Yz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaApAQCAt
MTI5LDYgKzEyOSw3IEBAIGNsYXNzIFJlbmRlclN0eWxlOiBwdWJsaWMgUmVmQ291bnRlZDxSZW5k
ZXJTdHlsZT4gewogICAgIGZyaWVuZCBjbGFzcyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRD
b2xvcjsgLy8gVXNlZCBieSBDU1MgYW5pbWF0aW9ucy4gV2UgY2FuJ3QgYWxsb3cgdGhlbSB0byBh
bmltYXRlIGJhc2VkIG9mZiB2aXNpdGVkIGNvbG9ycy4KICAgICBmcmllbmQgY2xhc3MgUmVuZGVy
U1ZHUmVzb3VyY2U7IC8vIEZJWE1FOiBOZWVkcyB0byBhbHRlciB0aGUgdmlzaXRlZCBzdGF0ZSBi
eSBoYW5kLiBTaG91bGQgY2xlYW4gdGhlIFNWRyBjb2RlIHVwIGFuZCBtb3ZlIGl0IGludG8gUmVu
ZGVyU3R5bGUgcGVyaGFwcy4KICAgICBmcmllbmQgY2xhc3MgUmVuZGVyVHJlZUFzVGV4dDsgLy8g
RklYTUU6IE9ubHkgbmVlZGVkIHNvIHRoZSByZW5kZXIgdHJlZSBjYW4ga2VlcCBseWluZyBhbmQg
ZHVtcCB0aGUgd3JvbmcgY29sb3JzLiAgUmViYXNlbGluaW5nIHdvdWxkIGFsbG93IHRoaXMgdG8g
YmUgeWFua2VkLgorICAgIGZyaWVuZCBjbGFzcyBSZXNvbHZlU3RhdGU7IC8vIFNldHMgbWVtYmVy
cyBkaXJlY3RseS4KICAgICBmcmllbmQgY2xhc3MgU3R5bGVCdWlsZGVyOyAvLyBTZXRzIG1lbWJl
cnMgZGlyZWN0bHkuCiAgICAgZnJpZW5kIGNsYXNzIFN0eWxlUmVzb2x2ZXI7IC8vIFNldHMgbWVt
YmVycyBkaXJlY3RseS4KIHByb3RlY3RlZDoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184927</attachid>
            <date>2013-01-27 18:25:59 -0800</date>
            <delta_ts>2013-01-29 03:13:05 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-96421-20130128112247.patch</filename>
            <type>text/plain</type>
            <size>336993</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwMmU0NTM5Y2ZiY2ExZTdmODk4ZmZkZWZhNWE2NjRhNzViMWE2NzljLi4z
ZGM0MDYxNDBjMzc1ZTlhN2UzZjFhNWM3NGRlYTk0NTNlMDNmOWNmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzAwIEBACisyMDEzLTAxLTI1ICBUYWthc2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xl
LmNvbT4KKworICAgICAgICBTcGxpdCBwZXItcmVzb2x2ZSBsb2dpYyBvdXQgZnJvbSBTdHlsZVJl
c29sdmVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTY0MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bXBsZW1lbnRlZCBjbGFzcyBSZXNvbHZlU3RhdGUgYW5kIG1vdmVkIGFsbCBtZW1iZXIgdmFyaWFi
bGVzCisgICAgICAgIHVzZWQgb25seSBmb3IgcGVyLXJlc29sdmUgbG9naWMuCisgICAgICAgIFRo
aXMgaXMgdGhlIGZpcnN0IHN0ZXAgdG8gZW5hYmxlIFN0eWxlUmVzb2x2ZXIgdG8gcmVzb2x2ZSBz
dHlsZXMgb2YKKyAgICAgICAgbXVsdGlwbGUgZWxlbWVudHMgaW4gcGFyYWxsZWwuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCBiZWNhdXNlIGp1c3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2Vi
Q29yZS5neXBpOgorICAgICAgICBBZGRlZCBSZXNvbHZlU3RhdGUuaC4KKyAgICAgICAgKiBjc3Mv
QmFzaWNTaGFwZUZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9MZW5n
dGgpOgorICAgICAgICAoV2ViQ29yZTo6YmFzaWNTaGFwZUZvclZhbHVlKToKKyAgICAgICAgKiBj
c3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
Y3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3JhZGllbnRW
YWx1ZTo6Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQpOgorICAgICAgICAqIGNzcy9DU1NHcmFk
aWVudFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENTU0dyYWRpZW50VmFs
dWUpOgorICAgICAgICAqIGNzcy9DU1NUb1N0eWxlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1RvU3R5bGVNYXA6OnN0eWxlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTVG9TdHlsZU1hcDo6cm9vdEVsZW1lbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NUb1N0eWxlTWFwOjp1c2VTVkdab29tUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9TdHlsZU1hcDo6c3R5bGVJbWFnZSk6CisgICAgICAgIFVzZSBSZXNvbHZlU3RhdGUgdG8gb2J0
YWluIHN0eWxlLCByb290RWxlbWVudFN0eWxlIGFuZCBzbyBvbiBpbnN0ZWFkCisgICAgICAgIG9m
IFN0eWxlUmVzb2x2ZXIuCisgICAgICAgICogY3NzL0NTU1RvU3R5bGVNYXAuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoQ1NTVG9TdHlsZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NUb1N0eWxlTWFwOjpDU1NUb1N0eWxlTWFwKToKKyAgICAgICAgKiBjc3MvUmVzb2x2ZVN0YXRl
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChSZXNvbHZlU3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZVN0YXRlOjpSZXNvbHZlU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb2x2ZVN0YXRlOjpzdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZl
U3RhdGU6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6cm9v
dEVsZW1lbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OmVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZVN0YXRlOjpzdHlsZWRFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6ZG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb2x2ZVN0YXRlOjpyZWdpb25Gb3JTdHlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29s
dmVTdGF0ZTo6bW9kZSk6CisgICAgICAgIE1vdmVkIFN0eWxlUmVzb2x2ZXIncyBtb2RlIGZyb20g
bV9zZWxlY3RvckNoZWNrZXIgdG8gUmVzb2x2ZVN0YXRlLgorICAgICAgICBTbyB3ZSBkb24ndCBu
ZWVkIHRvIGtlZXAgU2VsZWN0b3JDaGVja2VyIGFzIGEgbWVtYmVyIHZhcmlhYmxlIG9mCisgICAg
ICAgIFN0eWxlUmVzb2x2ZXIuCisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OnBzZXVk
b1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6cGFyZW50Tm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OmVsZW1lbnRMaW5rU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb2x2ZVN0YXRlOjpkaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZVN0YXRlOjpzZXRDYW5Vc2VGYXN0UmVqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6Y2FuVXNlRmFzdFJlamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OnNldFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c29sdmVTdGF0ZTo6c2V0Um9vdEVsZW1lbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
bHZlU3RhdGU6OnNldEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZVN0YXRlOjpz
ZXRFbGVtZW50TGlua1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6c2V0
UGFyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OnNldFBhcmVudFN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6c2V0RGlzdHJpYnV0ZWRUb0lu
c2VydGlvblBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6c2V0TW9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OnNldFJlZ2lvbkZvclN0eWxpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZVN0YXRlOjpzZXRQc2V1ZG9TdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OmZvbnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvbHZlU3RhdGU6OnBhcmVudEZvbnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvbHZlU3RhdGU6OnNldEZvbnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvbHZlU3RhdGU6OnNldFpvb20pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZVN0YXRl
OjpzZXRFZmZlY3RpdmVab29tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6c2V0
VGV4dFNpemVBZGp1c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZVN0YXRlOjpzZXRXcml0
aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OnNldFRleHRPcmllbnRh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OnNldEFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OnNldEFwcGx5
UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZVN0
YXRlOjphcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b2x2ZVN0YXRlOjphcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc29sdmVTdGF0ZTo6bWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c29sdmVTdGF0ZTo6bWF0Y2hlZFJ1bGVBdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3Rh
dGU6OnNldEVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvbHZlU3RhdGU6OmVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvbHZlU3RhdGU6OmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvbHZlU3RhdGU6OnBlbmRpbmdJbWFnZVByb3BlcnRpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb2x2ZVN0YXRlOjpwZW5kaW5nU1ZHRG9jdW1lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc29sdmVTdGF0ZTo6c2V0TGluZUhlaWdodFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc29sdmVTdGF0ZTo6bGluZUhlaWdodFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c29sdmVTdGF0ZTo6aGFzUGFyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3Rh
dGU6OnNldEZvbnREaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OmZvbnRE
aXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OmVuc3VyZVJ1bGVMaXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6cnVsZUxpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb2x2ZVN0YXRlOjpzZXRIYXNQZW5kaW5nU2hhZGVycyk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvbHZlU3RhdGU6Omhhc1BlbmRpbmdTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc29sdmVTdGF0ZTo6dXNlU1ZHWm9vbVJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29s
dmVTdGF0ZTo6aGFzVUFBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0
ZTo6Ym9yZGVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OmJhY2tncm91
bmREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6YmFja2dyb3VuZENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6c2V0SW5jbHVkZUVtcHR5UnVsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZVN0YXRlOjpzZXRTYW1lT3JpZ2luT25seSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvbHZlU3RhdGU6OmluY2x1ZGVFbXB0eVJ1bGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc29sdmVTdGF0ZTo6c2FtZU9yaWdpbk9ubHkpOgorICAgICAgICAqIGNz
cy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmFwcGx5U1ZHUHJvcGVydHkpOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6
OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hl
Y2tlcjo6bWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmZhc3RD
aGVjayk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5oOgorICAgICAgICAoU2VsZWN0
b3JDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzRnJhbWVGb2N1c2VkKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6bWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MpOgor
ICAgICAgICAqIGNzcy9TdHlsZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUV4cGFuZGluZzo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUV4cGFuZGluZzo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eUV4cGFuZGluZzo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTo6YXBwbHlJbml0aWFsVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlOjphcHBseVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEZWZhdWx0OjphcHBseVZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlOdW1iZXI6OmFwcGx5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVN0eWxlSW1hZ2U6OmFwcGx5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUF1dG86OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBdXRvOjphcHBseUluaXRpYWxWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QXV0bzo6YXBwbHlWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q2xpcDo6Y29udmVydFRvTGVuZ3RoKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q2xpcDo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNsaXA6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eUNvbG9yOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5Q29sb3I6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDb2xvcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5Q29sb3I6OmFwcGx5Q29sb3JWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5RGlyZWN0aW9uOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlMZW5ndGg6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eVN0cmluZzo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5Qm9yZGVyUmFkaXVzOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlGaWxsTGF5ZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlGaWxsTGF5ZXI6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGaWxsTGF5ZXI6OmFwcGx5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGg6OmFwcGx5VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnQ6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250OjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFNpemU6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250U2l6ZTo6YXBwbHlJbml0aWFsVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250V2VpZ2h0OjphcHBseVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250VmFyaWFudExpZ2F0dXJlczo6YXBwbHlJ
bmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRWYXJpYW50
TGlnYXR1cmVzOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVyZXM6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyOjphcHBseUluaGVyaXRWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjo6YXBw
bHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUJvcmRlcklt
YWdlTW9kaWZpZXI6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eUJvcmRlckltYWdlU291cmNlOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlDb3VudGVyOjplbXB0eUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlDb3VudGVyOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5Q291bnRlcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5Q3Vyc29yOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5Q3Vyc29yOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5Q3Vyc29yOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlUZXh0QWxpZ246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eVRleHREZWNvcmF0aW9uOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlQYWdlU2l6ZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eVBhZ2VTaXplOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5UGFnZVNpemU6OmFwcGx5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRFbXBoYXNpc1N0eWxlOjphcHBseUluaGVyaXRWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5VGV4dEVtcGhhc2lzU3R5bGU6OmFw
cGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RW1w
aGFzaXNTdHlsZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
QW5pbWF0aW9uOjptYXApOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFuaW1hdGlv
bjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFu
aW1hdGlvbjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eUFuaW1hdGlvbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5T3V0bGluZVN0eWxlOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5T3V0bGluZVN0eWxlOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5T3V0bGluZVN0eWxlOjphcHBseVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlSZXNpemU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eVZlcnRpY2FsQWxpZ246OmFwcGx5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlvOjphcHBseUluaGVyaXRWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QXNwZWN0UmF0aW86OmFwcGx5SW5pdGlhbFZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBc3BlY3RSYXRpbzo6YXBwbHlW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Wm9vbTo6cmVzZXRFZmZlY3Rp
dmVab29tKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlab29tOjphcHBseUluaGVy
aXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Wm9vbTo6YXBwbHlJbml0
aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVpvb206OmFwcGx5VmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURpc3BsYXk6OmlzVmFsaWREaXNw
bGF5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURpc3BsYXk6OmFwcGx5
SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEaXNwbGF5Ojph
cHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGlzcGxh
eTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q2xpcFBhdGg6
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUV4Y2x1c2lvblNo
YXBlOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlJbWFnZVJl
c29sdXRpb246OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJv
cGVydHlJbWFnZVJlc29sdXRpb246OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlJbWFnZVJlc29sdXRpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAq
IGNzcy9TdHlsZUJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUHJvcGVy
dHlIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5SGFuZGxlcjo6YXBwbHlJbmhl
cml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlIYW5kbGVyOjphcHBseUluaXRp
YWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eUhhbmRsZXI6OmFwcGx5VmFsdWUp
OgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcik6CisgICAgICAg
IFNpbmNlIFJlc29sdmVTdGF0ZSBwcm92aWRlcyBhbGwgaW5mb3JtYXRpb24sIG5vIG5lZWQgdG8g
aGF2ZQorICAgICAgICBhbnkgaW5zdGFuY2Ugb2YgQ1NTVG9TdHlsZU1hcCBhbmQgbm8gbmVlZCB0
byBtYWtlIFNlbGVjdG9yQ2hlY2tlcgorICAgICAgICBhIG1lbWJlciB2YXJpYWJsZSBvZiBTdHls
ZVJlc29sdmVyLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNo
aW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29y
dEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6Om1hdGNoVUFSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpj
b2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c29ydE1hdGNoZWRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRGb3JTdHlsZVJl
c29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2Fu
ZGlkYXRlTWF0Y2hlc1J1bGVTZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmZpbmRTaWJsaW5nRm9yU3R5
bGVTaGFyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJl
ZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjp1cGRhdGVGb250KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnJ1bGVNYXRjaGVzKToKKyAgICAgICAgbV9keW5h
bWljUHNldWRvIGlzIHVzZWQgYmV0d2VlbiB0aGlzIHJ1bGVNYXRjaGVzIGFuZAorICAgICAgICBj
b2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QuIFNvIGFkZGVkIG9uZSBwYXJhbWV0ZXIgdG8gcmV0
dXJuCisgICAgICAgIHdoYXQgZHluYW1pYyBwc2V1ZG8gYW4gZWxlbWVudCBtYXRjaGVzLiBSZW1v
dmVkIG1fZHluYW1pY1BzZXVkbworICAgICAgICBmcm9tIFN0eWxlUmVzb2x2ZXIuCisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVdpdGhWYWx1ZUNoZWNraW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5Rm9udFByb3BlcnR5VG9TdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUdyaWRUcmFja01pbk1heCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHcmlkVHJhY2tH
cm91cCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHcmlkVHJhY2tMaXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJsZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250U2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJh
bWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0
ZXJQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0
b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6bG9hZFBlbmRpbmdSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6Cisg
ICAgICAgIChTdHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OmFkZE1hdGNoZWRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmlzUmln
aHRQYWdlKToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6dG9TdHlsZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5oOgorCiAyMDEzLTAxLTI3ICBab2x0YW4gQXJ2YWkgIDx6YXJ2YWlA
aW5mLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIEZpeGluZyBhdG9taWNJbmNyZW1lbnQgaW1wbGVt
ZW50YXRpb24gZm9yIFdpbmRvd3MgYnkgZHJvcHBpbmcgc3VwcG9ydCBiZWZvcmUgWFAgU1AyLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggM2Q2ZTIzMTI4OTFhMGE4NDMwOTYzZDRl
M2QyNDQ4Nzg5OTk0OTYwMC4uMmFhNzNlNTczOWI3ZDM4Yjc5ZjJiZWFiOTBjY2Q1MTU5ZmY5NTEz
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yNjQzLDYgKzI2NDMsNyBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9SZWN0LmggXAogCVNvdXJj
ZS9XZWJDb3JlL2Nzcy9SR0JDb2xvci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9SR0JDb2xv
ci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9jc3MvUmVzb2x2ZVN0YXRlLmggXAogCVNvdXJjZS9XZWJD
b3JlL2Nzcy9SdWxlRmVhdHVyZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlRmVhdHVy
ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAgXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXgg
Mjk5OGM5ZDUxNGQ3ZDUyYjFjOWJhZGJjZWM5NzZjNWVhMzNiMzQ0Ni4uNGQ5ZmI5MWQxZWU2Nzcz
NzY2ZjllYzI4MmRlNWZkZTljNDY3MDFiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFy
Z2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0xNTIzLDYgKzE1MjMs
NyBAQCBIRUFERVJTICs9IFwKICAgICBjc3MvTWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oIFwKICAg
ICBjc3MvTWVkaWFRdWVyeU1hdGNoZXIuaCBcCiAgICAgY3NzL1JHQkNvbG9yLmggXAorICAgIGNz
cy9SZXNvbHZlU3RhdGUuaCBcCiAgICAgY3NzL1NlbGVjdG9yQ2hlY2tlci5oIFwKICAgICBjc3Mv
U2hhZG93VmFsdWUuaCBcCiAgICAgY3NzL1NpYmxpbmdUcmF2ZXJzYWxTdHJhdGVnaWVzLmggXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCmluZGV4IDRkNTg2ODEyYzE5YTc4ODhhNzAzMmM3Njc1NzExYTczMDQ4NGJl
OTguLjkwODA4MTYyMzU4NjZhN2ZmYzFlNmI3MzkyMjEyNzk3MjI0YWUzM2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKQEAgLTE1NTksNiArMTU1OSw3IEBACiAgICAgICAgICAgICAnY3NzL1JHQkNvbG9yLmNw
cCcsCiAgICAgICAgICAgICAnY3NzL1JHQkNvbG9yLmgnLAogICAgICAgICAgICAgJ2Nzcy9SZWN0
LmgnLAorICAgICAgICAgICAgJ2Nzcy9SZXNvbHZlU3RhdGUuaCcsCiAgICAgICAgICAgICAnY3Nz
L1J1bGVGZWF0dXJlLmNwcCcsCiAgICAgICAgICAgICAnY3NzL1J1bGVGZWF0dXJlLmgnLAogICAg
ICAgICAgICAgJ2Nzcy9SdWxlU2V0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFw
ZUZ1bmN0aW9ucy5jcHAKaW5kZXggM2E4Zjc5NTNiNmY5NmIwMTJmODQzMjM3YTJlMTJhMGZkZjRj
YjEyMS4uYzRiMjQ5YzI4NzZiNjNjNzIzOWE4OTVkNDA1ZDVjZmYzYTUwOTNjMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25zLmNwcApAQCAtMTAwLDEyICsxMDAsMTIg
QEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsdWVGb3JCYXNpY1NoYXBlKGNvbnN0IEJhc2ljU2hh
cGUqIGJhc2ljU2hhcGUpCiAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlPFBh
c3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gPihiYXNpY1NoYXBlVmFsdWUucmVsZWFzZSgpKTsKIH0K
IAotc3RhdGljIExlbmd0aCBjb252ZXJ0VG9MZW5ndGgoY29uc3QgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlKQorc3RhdGljIExlbmd0aCBjb252
ZXJ0VG9MZW5ndGgoUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVl
KQogewotICAgIHJldHVybiB2YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZl
cnNpb24gfCBGaXhlZEZsb2F0Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgVmlld3Bv
cnRQZXJjZW50YWdlQ29udmVyc2lvbj4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNv
bHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3Rp
dmVab29tKCkpOworICAgIHJldHVybiB2YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdl
ckNvbnZlcnNpb24gfCBGaXhlZEZsb2F0Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwg
Vmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwogfQogCi1QYXNz
UmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NCYXNpY1NoYXBlKiBiYXNpY1NoYXBlVmFsdWUpCitQ
YXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShSZXNvbHZlU3RhdGUmIHN0
YXRlLCBjb25zdCBDU1NCYXNpY1NoYXBlKiBiYXNpY1NoYXBlVmFsdWUpCiB7CiAgICAgUmVmUHRy
PEJhc2ljU2hhcGU+IGJhc2ljU2hhcGU7CiAKQEAgLTExNCwxNCArMTE0LDE0IEBAIFBhc3NSZWZQ
dHI8QmFzaWNTaGFwZT4gYmFzaWNTaGFwZUZvclZhbHVlKGNvbnN0IFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIGNvCiAgICAgICAgIGNvbnN0IENTU0Jhc2ljU2hhcGVSZWN0YW5nbGUqIHJl
Y3RWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IENTU0Jhc2ljU2hhcGVSZWN0YW5nbGUgKj4oYmFz
aWNTaGFwZVZhbHVlKTsKICAgICAgICAgUmVmUHRyPEJhc2ljU2hhcGVSZWN0YW5nbGU+IHJlY3Qg
PSBCYXNpY1NoYXBlUmVjdGFuZ2xlOjpjcmVhdGUoKTsKIAotICAgICAgICByZWN0LT5zZXRYKGNv
bnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0VmFsdWUtPngoKSkpOwotICAgICAgICBy
ZWN0LT5zZXRZKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0VmFsdWUtPnkoKSkp
OwotICAgICAgICByZWN0LT5zZXRXaWR0aChjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwg
cmVjdFZhbHVlLT53aWR0aCgpKSk7Ci0gICAgICAgIHJlY3QtPnNldEhlaWdodChjb252ZXJ0VG9M
ZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdFZhbHVlLT5oZWlnaHQoKSkpOworICAgICAgICByZWN0
LT5zZXRYKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdFZhbHVlLT54KCkpKTsKKyAgICAgICAg
cmVjdC0+c2V0WShjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3RWYWx1ZS0+eSgpKSk7CisgICAg
ICAgIHJlY3QtPnNldFdpZHRoKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdFZhbHVlLT53aWR0
aCgpKSk7CisgICAgICAgIHJlY3QtPnNldEhlaWdodChjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJl
Y3RWYWx1ZS0+aGVpZ2h0KCkpKTsKICAgICAgICAgaWYgKHJlY3RWYWx1ZS0+cmFkaXVzWCgpKSB7
Ci0gICAgICAgICAgICByZWN0LT5zZXRDb3JuZXJSYWRpdXNYKGNvbnZlcnRUb0xlbmd0aChzdHls
ZVJlc29sdmVyLCByZWN0VmFsdWUtPnJhZGl1c1goKSkpOworICAgICAgICAgICAgcmVjdC0+c2V0
Q29ybmVyUmFkaXVzWChjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3RWYWx1ZS0+cmFkaXVzWCgp
KSk7CiAgICAgICAgICAgICBpZiAocmVjdFZhbHVlLT5yYWRpdXNZKCkpCi0gICAgICAgICAgICAg
ICAgcmVjdC0+c2V0Q29ybmVyUmFkaXVzWShjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwg
cmVjdFZhbHVlLT5yYWRpdXNZKCkpKTsKKyAgICAgICAgICAgICAgICByZWN0LT5zZXRDb3JuZXJS
YWRpdXNZKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdFZhbHVlLT5yYWRpdXNZKCkpKTsKICAg
ICAgICAgfQogICAgICAgICBiYXNpY1NoYXBlID0gcmVjdC5yZWxlYXNlKCk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtMTMwLDkgKzEzMCw5IEBAIFBhc3NSZWZQdHI8QmFzaWNTaGFwZT4gYmFzaWNTaGFw
ZUZvclZhbHVlKGNvbnN0IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIGNvCiAgICAgICAg
IGNvbnN0IENTU0Jhc2ljU2hhcGVDaXJjbGUqIGNpcmNsZVZhbHVlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQ1NTQmFzaWNTaGFwZUNpcmNsZSAqPihiYXNpY1NoYXBlVmFsdWUpOwogICAgICAgICBSZWZQ
dHI8QmFzaWNTaGFwZUNpcmNsZT4gY2lyY2xlID0gQmFzaWNTaGFwZUNpcmNsZTo6Y3JlYXRlKCk7
CiAKLSAgICAgICAgY2lyY2xlLT5zZXRDZW50ZXJYKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29s
dmVyLCBjaXJjbGVWYWx1ZS0+Y2VudGVyWCgpKSk7Ci0gICAgICAgIGNpcmNsZS0+c2V0Q2VudGVy
WShjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgY2lyY2xlVmFsdWUtPmNlbnRlclkoKSkp
OwotICAgICAgICBjaXJjbGUtPnNldFJhZGl1cyhjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZl
ciwgY2lyY2xlVmFsdWUtPnJhZGl1cygpKSk7CisgICAgICAgIGNpcmNsZS0+c2V0Q2VudGVyWChj
b252ZXJ0VG9MZW5ndGgoc3RhdGUsIGNpcmNsZVZhbHVlLT5jZW50ZXJYKCkpKTsKKyAgICAgICAg
Y2lyY2xlLT5zZXRDZW50ZXJZKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgY2lyY2xlVmFsdWUtPmNl
bnRlclkoKSkpOworICAgICAgICBjaXJjbGUtPnNldFJhZGl1cyhjb252ZXJ0VG9MZW5ndGgoc3Rh
dGUsIGNpcmNsZVZhbHVlLT5yYWRpdXMoKSkpOwogCiAgICAgICAgIGJhc2ljU2hhcGUgPSBjaXJj
bGUucmVsZWFzZSgpOwogICAgICAgICBicmVhazsKQEAgLTE0MSwxMCArMTQxLDEwIEBAIFBhc3NS
ZWZQdHI8QmFzaWNTaGFwZT4gYmFzaWNTaGFwZUZvclZhbHVlKGNvbnN0IFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIGNvCiAgICAgICAgIGNvbnN0IENTU0Jhc2ljU2hhcGVFbGxpcHNlKiBl
bGxpcHNlVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBDU1NCYXNpY1NoYXBlRWxsaXBzZSAqPihi
YXNpY1NoYXBlVmFsdWUpOwogICAgICAgICBSZWZQdHI8QmFzaWNTaGFwZUVsbGlwc2U+IGVsbGlw
c2UgPSBCYXNpY1NoYXBlRWxsaXBzZTo6Y3JlYXRlKCk7CiAKLSAgICAgICAgZWxsaXBzZS0+c2V0
Q2VudGVyWChjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgZWxsaXBzZVZhbHVlLT5jZW50
ZXJYKCkpKTsKLSAgICAgICAgZWxsaXBzZS0+c2V0Q2VudGVyWShjb252ZXJ0VG9MZW5ndGgoc3R5
bGVSZXNvbHZlciwgZWxsaXBzZVZhbHVlLT5jZW50ZXJZKCkpKTsKLSAgICAgICAgZWxsaXBzZS0+
c2V0UmFkaXVzWChjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgZWxsaXBzZVZhbHVlLT5y
YWRpdXNYKCkpKTsKLSAgICAgICAgZWxsaXBzZS0+c2V0UmFkaXVzWShjb252ZXJ0VG9MZW5ndGgo
c3R5bGVSZXNvbHZlciwgZWxsaXBzZVZhbHVlLT5yYWRpdXNZKCkpKTsKKyAgICAgICAgZWxsaXBz
ZS0+c2V0Q2VudGVyWChjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIGVsbGlwc2VWYWx1ZS0+Y2VudGVy
WCgpKSk7CisgICAgICAgIGVsbGlwc2UtPnNldENlbnRlclkoY29udmVydFRvTGVuZ3RoKHN0YXRl
LCBlbGxpcHNlVmFsdWUtPmNlbnRlclkoKSkpOworICAgICAgICBlbGxpcHNlLT5zZXRSYWRpdXNY
KGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgZWxsaXBzZVZhbHVlLT5yYWRpdXNYKCkpKTsKKyAgICAg
ICAgZWxsaXBzZS0+c2V0UmFkaXVzWShjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIGVsbGlwc2VWYWx1
ZS0+cmFkaXVzWSgpKSk7CiAKICAgICAgICAgYmFzaWNTaGFwZSA9IGVsbGlwc2UucmVsZWFzZSgp
OwogICAgICAgICBicmVhazsKQEAgLTE1Niw3ICsxNTYsNyBAQCBQYXNzUmVmUHRyPEJhc2ljU2hh
cGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBjbwogICAgICAgICBwb2x5Z29uLT5zZXRXaW5kUnVsZShwb2x5Z29uVmFsdWUtPndpbmRSdWxl
KCkpOwogICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiA+JiB2
YWx1ZXMgPSBwb2x5Z29uVmFsdWUtPnZhbHVlcygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgaSArPSAyKQotICAgICAgICAgICAgcG9seWdvbi0+YXBw
ZW5kUG9pbnQoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHZhbHVlcy5hdChpKS5nZXQo
KSksIGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCB2YWx1ZXMuYXQoaSArIDEpLmdldCgp
KSk7CisgICAgICAgICAgICBwb2x5Z29uLT5hcHBlbmRQb2ludChjb252ZXJ0VG9MZW5ndGgoc3Rh
dGUsIHZhbHVlcy5hdChpKS5nZXQoKSksIGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgdmFsdWVzLmF0
KGkgKyAxKS5nZXQoKSkpOwogCiAgICAgICAgIGJhc2ljU2hhcGUgPSBwb2x5Z29uLnJlbGVhc2Uo
KTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNT
aGFwZUZ1bmN0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMu
aAppbmRleCBkMzYwN2U5MDk5MjljMzQxYjBjMDY5ZDNlNWNlYjYxZjEzZjExNzE5Li42YmYzZWU1
ZTRmMWEyYzY2ZTZhNGQ1M2MxMTBlMWQxMzgzNjliZjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9C
YXNpY1NoYXBlRnVuY3Rpb25zLmgKQEAgLTM3LDEwICszNywxMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBCYXNpY1NoYXBlOwogY2xhc3MgQ1NTQmFzaWNTaGFwZTsKIGNsYXNzIENTU1Zh
bHVlOwotY2xhc3MgU3R5bGVSZXNvbHZlcjsKK2NsYXNzIFJlc29sdmVTdGF0ZTsKIAogUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gdmFsdWVGb3JCYXNpY1NoYXBlKGNvbnN0IEJhc2ljU2hhcGUqKTsKLVBh
c3NSZWZQdHI8QmFzaWNTaGFwZT4gYmFzaWNTaGFwZUZvclZhbHVlKGNvbnN0IFN0eWxlUmVzb2x2
ZXIqLCBjb25zdCBDU1NCYXNpY1NoYXBlKik7CitQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2lj
U2hhcGVGb3JWYWx1ZShSZXNvbHZlU3RhdGUmLCBjb25zdCBDU1NCYXNpY1NoYXBlKik7CiAKIH0K
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCmluZGV4IGYxNTE4
ZDhkYWM3NDgwYzRlMjM5N2U1MmRmYTk0MmJjZThkYzZhODEuLjQ5ZTk1ZmUwNjZmY2E4NjBkYzQx
MDFmZmI2OTU3MzhlOTVlNDgxZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NH
cmFkaWVudFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1
ZS5jcHAKQEAgLTExNSwxMSArMTE1LDExIEBAIHN0cnVjdCBHcmFkaWVudFN0b3AgewogICAgIHsg
fQogfTsKIAotUGFzc1JlZlB0cjxDU1NHcmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpn
cmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZChTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQor
UGFzc1JlZlB0cjxDU1NHcmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdp
dGhTdHlsZXNSZXNvbHZlZChSZXNvbHZlU3RhdGUmIHN0YXRlKQogewogICAgIGJvb2wgZGVyaXZl
ZCA9IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N0b3BzLnNpemUoKTsg
aSsrKQotICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWVJ
c0Rlcml2ZWRGcm9tRWxlbWVudChtX3N0b3BzW2ldLm1fY29sb3IuZ2V0KCkpKSB7CisgICAgICAg
IGlmIChTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZUlzRGVyaXZlZEZyb21F
bGVtZW50KG1fc3RvcHNbaV0ubV9jb2xvci5nZXQoKSkpIHsKICAgICAgICAgICAgIG1fc3RvcHNb
aV0ubV9jb2xvcklzRGVyaXZlZEZyb21FbGVtZW50ID0gdHJ1ZTsKICAgICAgICAgICAgIGRlcml2
ZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzgsNyArMTM4LDcgQEAgUGFzc1Jl
ZlB0cjxDU1NHcmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhTdHls
ZXNSZXNvbHZlZChTdHlsZVIKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cmVzdWx0LT5tX3N0b3BzLnNpemUoKTsgaSsrKQotICAgICAgICByZXN1bHQtPm1fc3RvcHNbaV0u
bV9yZXNvbHZlZENvbG9yID0gc3R5bGVSZXNvbHZlci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUo
cmVzdWx0LT5tX3N0b3BzW2ldLm1fY29sb3IuZ2V0KCkpOworICAgICAgICByZXN1bHQtPm1fc3Rv
cHNbaV0ubV9yZXNvbHZlZENvbG9yID0gU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZl
VmFsdWUoc3RhdGUsIHJlc3VsdC0+bV9zdG9wc1tpXS5tX2NvbG9yLmdldCgpKTsKIAogICAgIHJl
dHVybiByZXN1bHQucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0dyYWRpZW50VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVl
LmgKaW5kZXggNmYwMDUzNTkwN2UxNTc3OWEwODAyNzJjODg2ZmQ2YjgwOTdjODAwZC4uODM1NTdl
NTMyMTVmNWY5NmE2MDVjMWZlOWVkOTU1MzdlMzQ5ZDdiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
R3JhZGllbnRWYWx1ZS5oCkBAIC0zNSw2ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIEdyYWRpZW50OworY2xhc3MgUmVzb2x2ZVN0YXRlOwog
CiBlbnVtIENTU0dyYWRpZW50VHlwZSB7CiAgICAgQ1NTRGVwcmVjYXRlZExpbmVhckdyYWRpZW50
LApAQCAtODQsNyArODUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNBbHBoYShjb25zdCBSZW5k
ZXJPYmplY3QqKSBjb25zdDsKIAogICAgIHZvaWQgbG9hZFN1YmltYWdlcyhDYWNoZWRSZXNvdXJj
ZUxvYWRlciopIHsgfQotICAgIFBhc3NSZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gZ3JhZGllbnRX
aXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGVSZXNvbHZlciopOworICAgIFBhc3NSZWZQdHI8Q1NTR3Jh
ZGllbnRWYWx1ZT4gZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoUmVzb2x2ZVN0YXRlJik7CiAK
IHByb3RlY3RlZDoKICAgICBDU1NHcmFkaWVudFZhbHVlKENsYXNzVHlwZSBjbGFzc1R5cGUsIENT
U0dyYWRpZW50UmVwZWF0IHJlcGVhdCwgQ1NTR3JhZGllbnRUeXBlIGdyYWRpZW50VHlwZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAppbmRleCAwMjQ0ZDhhM2FkNTc4ZjZlMTNmNmNk
MWRiZTZhOGQyNDNlZDgwN2IwLi4xODRjNDcwOWE5ZjAyN2M0NDJiYmYwMTg4NTY5NjcwMDZlZjZh
MTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCkBAIC00MywyMiArNDMsMjIg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZW5kZXJTdHlsZSogQ1NTVG9TdHlsZU1hcDo6c3R5
bGUoKSBjb25zdAogewotICAgIHJldHVybiBtX3Jlc29sdmVyLT5zdHlsZSgpOworICAgIHJldHVy
biBtX3N0YXRlLnN0eWxlKCk7CiB9Ci0gICAgCisKIFJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFw
Ojpyb290RWxlbWVudFN0eWxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+cm9v
dEVsZW1lbnRTdHlsZSgpOworICAgIHJldHVybiBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKTsK
IH0KIAogYm9vbCBDU1NUb1N0eWxlTWFwOjp1c2VTVkdab29tUnVsZXMoKSBjb25zdAogewotICAg
IHJldHVybiBtX3Jlc29sdmVyLT51c2VTVkdab29tUnVsZXMoKTsKKyAgICByZXR1cm4gbV9zdGF0
ZS51c2VTVkdab29tUnVsZXMoKTsKIH0KLSAgICAKKwogUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBD
U1NUb1N0eWxlTWFwOjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgQ1NTVmFs
dWUqIHZhbHVlKQogewotICAgIHJldHVybiBtX3Jlc29sdmVyLT5zdHlsZUltYWdlKHByb3BlcnR5
SWQsIHZhbHVlKTsKKyAgICByZXR1cm4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShtX3N0YXRl
LCBwcm9wZXJ0eUlkLCB2YWx1ZSk7CiB9CiAKIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEF0
dGFjaG1lbnQoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgKaW5kZXggNmJhYjQwYmZjZDc3ZTEyNWFiMDhm
MDA4ZjEwZTdhM2U2ODI3OTE0ZS4uMTE2ZDM0ODAyZjU1NjBiNzE0NjZkMDc5MGRiMzVhMDQ5YjYz
YjQwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCkBAIC0yNywyMCArMjcsMTkgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGaWxsTGF5ZXI7Ci1jbGFzcyBDU1NWYWx1
ZTsKIGNsYXNzIEFuaW1hdGlvbjsKK2NsYXNzIENTU1ZhbHVlOworY2xhc3MgRmlsbExheWVyOwor
Y2xhc3MgTmluZVBpZWNlSW1hZ2U7CiBjbGFzcyBSZW5kZXJTdHlsZTsKK2NsYXNzIFJlc29sdmVT
dGF0ZTsKIGNsYXNzIFN0eWxlSW1hZ2U7Ci1jbGFzcyBTdHlsZVJlc29sdmVyOwotY2xhc3MgTmlu
ZVBpZWNlSW1hZ2U7CiAKIGNsYXNzIENTU1RvU3R5bGVNYXAgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKENTU1RvU3R5bGVNYXApOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotCiBw
dWJsaWM6Ci0gICAgQ1NTVG9TdHlsZU1hcChTdHlsZVJlc29sdmVyKiByZXNvbHZlcikgOiBtX3Jl
c29sdmVyKHJlc29sdmVyKSB7IH0KKyAgICBDU1NUb1N0eWxlTWFwKFJlc29sdmVTdGF0ZSYgc3Rh
dGUpIDogbV9zdGF0ZShzdGF0ZSkgeyB9CiAKICAgICB2b2lkIG1hcEZpbGxBdHRhY2htZW50KENT
U1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CiAgICAgdm9pZCBtYXBGaWxsQ2xp
cChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwpAQCAtNjksMTkgKzY4LDEy
IEBAIHB1YmxpYzoKICAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KENTU1ZhbHVlKiwg
TmluZVBpZWNlSW1hZ2UmKTsKIAogcHJpdmF0ZToKLSAgICAvLyBGSVhNRTogVGhlc2UgYWNjZXNz
b3JzIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIFJlc29sdmVTdGF0ZSBvYmplY3QKLSAgICAvLyBz
aW1pbGFyIHRvIGhvdyBQYWludEluZm8vTGF5b3V0U3RhdGUgY2FjaGUgdmFsdWVzIG5lZWRlZCBm
b3IKLSAgICAvLyB0aGUgY3VycmVudCBwYWludC9sYXlvdXQuCiAgICAgUmVuZGVyU3R5bGUqIHN0
eWxlKCkgY29uc3Q7CiAgICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdDsK
ICAgICBib29sIHVzZVNWR1pvb21SdWxlcygpIGNvbnN0OwotCi0gICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIGJlIHBhcnQgb2Ygc29tZSBzb3J0IG9mIFN0eWxlSW1hZ2VDYWNoZSBvYmplY3Qgd2hp
Y2gKLSAgICAvLyBpcyBoZWxkIGJ5IHRoZSBTdHlsZVJlc29sdmVyLCBhbmQgbGlrZWx5IHByb3Zp
ZGVkIHRvIHRoaXMgb2JqZWN0Ci0gICAgLy8gZHVyaW5nIHRoZSByZXNvbHZlLgogICAgIFBhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwog
Ci0gICAgU3R5bGVSZXNvbHZlciogbV9yZXNvbHZlcjsKKyAgICBSZXNvbHZlU3RhdGUmIG1fc3Rh
dGU7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUmVzb2x2ZVN0YXRl
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUmVzb2x2ZVN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTEwNDFh
OWQ4OGM5ODVhYWYyM2MwYTk3MDg4ZGJkNDMzMWViMDg1MQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9SZXNvbHZlU3RhdGUuaApAQCAtMCwwICsxLDIzNSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUmVzb2x2ZVN0
YXRlX2gKKyNkZWZpbmUgUmVzb2x2ZVN0YXRlX2gKKworI2luY2x1ZGUgIkNTU1J1bGVMaXN0Lmgi
CisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVk
ZSAiU2VsZWN0b3JDaGVja2VyLmgiCisjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUo
U1ZHKQorI2luY2x1ZGUgIldlYktpdENTU1NWR0RvY3VtZW50VmFsdWUuaCIKKyNlbmRpZgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhhc2hNYXA8
Q1NTUHJvcGVydHlJRCwgUmVmUHRyPENTU1ZhbHVlPiA+IFBlbmRpbmdJbWFnZVByb3BlcnR5TWFw
OworI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKK3R5cGVkZWYgSGFzaE1h
cDxGaWx0ZXJPcGVyYXRpb24qLCBSZWZQdHI8V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZT4gPiBQ
ZW5kaW5nU1ZHRG9jdW1lbnRNYXA7CisjZW5kaWYKKworY2xhc3MgUmVuZGVyUmVnaW9uOworY2xh
c3MgUnVsZURhdGE7CisKK2NsYXNzIFJlc29sdmVTdGF0ZSB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoUmVzb2x2ZVN0YXRlKTsKK3B1YmxpYzoKKyAgICBSZXNvbHZlU3RhdGUoKQorICAgIDog
bV9lbGVtZW50KDApCisgICAgLCBtX3N0eWxlKDApCisgICAgLCBtX2luY2x1ZGVFbXB0eVJ1bGVz
KGZhbHNlKQorICAgICwgbV9zYW1lT3JpZ2luT25seShmYWxzZSkKKyAgICAsIG1fcHNldWRvU3R5
bGUoTk9QU0VVRE8pCisgICAgLCBtX21vZGUoU2VsZWN0b3JDaGVja2VyOjpSZXNvbHZpbmdTdHls
ZSkKKyAgICAsIG1fcmVnaW9uRm9yU3R5bGluZygwKQorICAgICwgbV9lbGVtZW50TGlua1N0YXRl
KE5vdEluc2lkZUxpbmspCisgICAgLCBtX3BhcmVudE5vZGUoMCkKKyAgICAsIG1fcGFyZW50U3R5
bGUoMCkKKyAgICAsIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KGZhbHNlKQorICAgICwg
bV9yb290RWxlbWVudFN0eWxlKDApCisgICAgLCBtX2NhblVzZUZhc3RSZWplY3QoZmFsc2UpCisg
ICAgLCBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyhmYWxzZSkKKyAgICAsIG1fYXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpCisgICAgLCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUoZmFsc2UpCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICwgbV9oYXNQ
ZW5kaW5nU2hhZGVycyhmYWxzZSkKKyNlbmRpZgorICAgICwgbV9saW5lSGVpZ2h0VmFsdWUoMCkK
KyAgICAsIG1fZm9udERpcnR5KGZhbHNlKQorICAgICwgbV9oYXNVQUFwcGVhcmFuY2UoZmFsc2Up
CisgICAgLCBtX2JhY2tncm91bmREYXRhKEJhY2tncm91bmRGaWxsTGF5ZXIpIHsgfQorCitwdWJs
aWM6CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQor
ICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5
bGU7IH0KKyAgICBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcm9vdEVsZW1lbnRTdHlsZTsgfQorICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX2VsZW1lbnQ7IH0KKyAgICBTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9zdHlsZWRFbGVtZW50OyB9CisgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9lbGVtZW50LT5kb2N1bWVudCgpOyB9CisgICAgUmVuZGVyUmVnaW9u
KiByZWdpb25Gb3JTdHlsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9yZWdpb25Gb3JTdHlsaW5nOyB9
CisgICAgU2VsZWN0b3JDaGVja2VyOjpNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7
IH0KKyAgICBQc2V1ZG9JZCBwc2V1ZG9TdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHNldWRvU3R5
bGU7IH0KKyAgICBjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9wYXJlbnROb2RlOyB9CisgICAgRUluc2lkZUxpbmsgZWxlbWVudExpbmtTdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZWxlbWVudExpbmtTdGF0ZTsgfQorICAgIGJvb2wgZGlzdHJpYnV0ZWRU
b0luc2VydGlvblBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9u
UG9pbnQ7IH0KKworICAgIHZvaWQgc2V0Q2FuVXNlRmFzdFJlamVjdChib29sIGNhblVzZUZhc3RS
ZWplY3QpIHsgbV9jYW5Vc2VGYXN0UmVqZWN0ID0gY2FuVXNlRmFzdFJlamVjdDsgfQorICAgIGJv
b2wgY2FuVXNlRmFzdFJlamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FuVXNlRmFzdFJlamVjdDsg
fQorCisgICAgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpIHsgbV9zdHlsZSA9IHN0
eWxlOyB9CisgICAgdm9pZCBzZXRSb290RWxlbWVudFN0eWxlKFJlbmRlclN0eWxlKiByb290RWxl
bWVudFN0eWxlKSB7IG1fcm9vdEVsZW1lbnRTdHlsZSA9IHJvb3RFbGVtZW50U3R5bGU7IH0KKyAg
ICB2b2lkIHNldEVsZW1lbnQoRWxlbWVudCogZSkgeyBtX2VsZW1lbnQgPSBlOyBtX3N0eWxlZEVs
ZW1lbnQgPSBlICYmIGUtPmlzU3R5bGVkRWxlbWVudCgpID8gdG9TdHlsZWRFbGVtZW50KGUpIDog
MDsgfQorICAgIHZvaWQgc2V0RWxlbWVudExpbmtTdGF0ZShFSW5zaWRlTGluayBlbGVtZW50TGlu
a1N0YXRlKSB7IG1fZWxlbWVudExpbmtTdGF0ZSA9IGVsZW1lbnRMaW5rU3RhdGU7IH0KKyAgICB2
b2lkIHNldFBhcmVudE5vZGUoQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSkgeyBtX3BhcmVudE5v
ZGUgPSBwYXJlbnROb2RlOyB9CisgICAgdm9pZCBzZXRQYXJlbnRTdHlsZShSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUpIHsgbV9wYXJlbnRTdHlsZSA9IHBhcmVudFN0eWxlOyB9CisgICAgdm9pZCBz
ZXREaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQoYm9vbCBkaXN0cmlidXRlZFRvSW5zZXJ0aW9u
UG9pbnQpIHsgbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQgPSBkaXN0cmlidXRlZFRvSW5z
ZXJ0aW9uUG9pbnQ7IH0KKyAgICB2b2lkIHNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpNb2RlIG1v
ZGUpIHsgbV9tb2RlID0gbW9kZTsgfQorICAgIHZvaWQgc2V0UmVnaW9uRm9yU3R5bGluZyhSZW5k
ZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcpIHsgbV9yZWdpb25Gb3JTdHlsaW5nID0gcmVnaW9u
Rm9yU3R5bGluZzsgfQorICAgIHZvaWQgc2V0UHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvU3R5
bGUpIHsgbV9wc2V1ZG9TdHlsZSA9IHBzZXVkb1N0eWxlOyB9CisKKyAgICBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHN0eWxlKCktPmZvbnREZXNjcmlw
dGlvbigpOyB9CisgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRp
b24oKSB7IHJldHVybiBwYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsgfQorCisgICAg
dm9pZCBzZXRGb250RGVzY3JpcHRpb24oY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24pIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnRE
ZXNjcmlwdGlvbik7IH0KKworICAgIHZvaWQgc2V0Wm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5
IHw9IHN0eWxlKCktPnNldFpvb20oZik7IH0KKyAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxv
YXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRFZmZlY3RpdmVab29tKGYpOyB9CisK
KyAgICB2b2lkIHNldFRleHRTaXplQWRqdXN0KGJvb2wgYikgeyBtX2ZvbnREaXJ0eSB8PSBzdHls
ZSgpLT5zZXRUZXh0U2l6ZUFkanVzdChiKTsgfQorICAgIHZvaWQgc2V0V3JpdGluZ01vZGUoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0V3JpdGlu
Z01vZGUod3JpdGluZ01vZGUpOyB9CisgICAgdm9pZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4dE9y
aWVudGF0aW9uIHRleHRPcmllbnRhdGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRU
ZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQorCisgICAgdm9pZCBzZXRBcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUoYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUpIHsg
bV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgPSBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGU7IH0KKyAgICB2b2lkIHNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoYm9vbCBh
cHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKSB7IG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRl
ZExpbmtTdHlsZSA9IGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7IH0KKyAgICBib29s
IGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlOyB9CisgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
OyB9CisKKyAgICBWZWN0b3I8Y29uc3QgUnVsZURhdGEqLCAzMj4mIG1hdGNoZWRSdWxlcygpIHsg
cmV0dXJuIG1fbWF0Y2hlZFJ1bGVzOyB9CisgICAgY29uc3QgUnVsZURhdGEqIG1hdGNoZWRSdWxl
QXQoaW50IGluZGV4KSB7IHJldHVybiBtX21hdGNoZWRSdWxlc1tpbmRleF07IH0KKworICAgIHZv
aWQgc2V0RWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKGJvb2wgYWZmZWN0ZWRCeUNsYXNzUnVs
ZXMpIHsgbV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMgPSBhZmZlY3RlZEJ5Q2xhc3NSdWxl
czsgfQorICAgIGJvb2wgZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKCkgY29uc3QgeyByZXR1
cm4gbV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXM7IH0KKyAgICAKKyAgICB2b2lkIGNhY2hl
Qm9yZGVyQW5kQmFja2dyb3VuZChSZW5kZXJTdHlsZSogc3R5bGUpCisgICAgeworICAgICAgICBB
U1NFUlQoc3R5bGUpOworICAgICAgICBtX2hhc1VBQXBwZWFyYW5jZSA9IHN0eWxlLT5oYXNBcHBl
YXJhbmNlKCk7CisgICAgICAgIGlmIChtX2hhc1VBQXBwZWFyYW5jZSkgeworICAgICAgICAgICAg
bV9ib3JkZXJEYXRhID0gc3R5bGUtPmJvcmRlcigpOworICAgICAgICAgICAgbV9iYWNrZ3JvdW5k
RGF0YSA9ICpzdHlsZS0+YmFja2dyb3VuZExheWVycygpOworICAgICAgICAgICAgbV9iYWNrZ3Jv
dW5kQ29sb3IgPSBzdHlsZS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcCYgcGVuZGluZ0ltYWdlUHJvcGVydGllcygpIHsg
cmV0dXJuIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllczsgfQorCisjaWYgRU5BQkxFKENTU19GSUxU
RVJTKSAmJiBFTkFCTEUoU1ZHKQorICAgIFBlbmRpbmdTVkdEb2N1bWVudE1hcCYgcGVuZGluZ1NW
R0RvY3VtZW50cygpIHsgcmV0dXJuIG1fcGVuZGluZ1NWR0RvY3VtZW50czsgfQorI2VuZGlmCisK
KyAgICB2b2lkIHNldExpbmVIZWlnaHRWYWx1ZShDU1NWYWx1ZSogdmFsdWUpIHsgbV9saW5lSGVp
Z2h0VmFsdWUgPSB2YWx1ZTsgfQorICAgIENTU1ZhbHVlKiBsaW5lSGVpZ2h0VmFsdWUoKSB7IHJl
dHVybiBtX2xpbmVIZWlnaHRWYWx1ZTsgfQorCisgICAgYm9vbCBoYXNQYXJlbnROb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9wYXJlbnROb2RlOyB9CisKKyAgICB2b2lkIHNldEZvbnREaXJ0eShib29s
IGRpcnR5KSB7IG1fZm9udERpcnR5ID0gZGlydHk7IH0KKyAgICBib29sIGZvbnREaXJ0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fZm9udERpcnR5OyB9CisKKyAgICBTdGF0aWNDU1NSdWxlTGlzdCogZW5z
dXJlUnVsZUxpc3QoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3J1bGVMaXN0KQorICAgICAgICAg
ICAgbV9ydWxlTGlzdCA9IFN0YXRpY0NTU1J1bGVMaXN0OjpjcmVhdGUoKTsKKyAgICAgICAgcmV0
dXJuIG1fcnVsZUxpc3QuZ2V0KCk7CisgICAgfQorCisgICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVM
aXN0PiYgcnVsZUxpc3QoKSB7IHJldHVybiBtX3J1bGVMaXN0OyB9CisKKyNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCisgICAgdm9pZCBzZXRIYXNQZW5kaW5nU2hhZGVycyhib29sIGhhc1BlbmRpbmdT
aGFkZXJzKSB7IG1faGFzUGVuZGluZ1NoYWRlcnMgPSBoYXNQZW5kaW5nU2hhZGVyczsgfQorICAg
IGJvb2wgaGFzUGVuZGluZ1NoYWRlcnMoKSBjb25zdCB7IHJldHVybiBtX2hhc1BlbmRpbmdTaGFk
ZXJzOyB9CisjZW5kaWYKKworLy8gU1ZHIGhhbmRsZXMgem9vbWluZyBpbiBhIGRpZmZlcmVudCB3
YXkgY29tcGFyZWQgdG8gQ1NTLiBUaGUgd2hvbGUgZG9jdW1lbnQgaXMgc2NhbGVkIGluc3RlYWQK
Ky8vIG9mIGVhY2ggaW5kaXZpZHVhbCBsZW5ndGggdmFsdWUgaW4gdGhlIHJlbmRlciBzdHlsZSAv
IHRyZWUuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoKigpCisvLyBtdWx0aXBsaWVz
IGVhY2ggcmVzb2x2ZWQgbGVuZ3RoIHdpdGggdGhlIHpvb20gbXVsdGlwbGllciAtIHNvIGZvciBT
Vkcgd2UgbmVlZCB0byBkaXNhYmxlIHRoYXQuCisvLyBUaG91Z2ggYWxsIENTUyB2YWx1ZXMgdGhh
dCBjYW4gYmUgYXBwbGllZCB0byBvdXRlcm1vc3QgPHN2Zz4gZWxlbWVudHMgKHdpZHRoL2hlaWdo
dC9ib3JkZXIvcGFkZGluZy4uLikKKy8vIG5lZWQgdG8gcmVzcGVjdCB0aGUgc2NhbGluZy4gUmVu
ZGVyQm94ICh0aGUgcGFyZW50IGNsYXNzIG9mIFJlbmRlclNWR1Jvb3QpIGdyYWJzIHZhbHVlcyBs
aWtlCisvLyB3aWR0aC9oZWlnaHQvYm9yZGVyL3BhZGRpbmcvLi4uIGZyb20gdGhlIFJlbmRlclN0
eWxlIC0+IGZvciBTVkcgdGhlc2UgdmFsdWVzIHdvdWxkIG5ldmVyIHNjYWxlLAorLy8gaWYgd2Un
ZCBwYXNzIGEgMS4wIHpvb20gZmFjdG9yIGV2ZXJ5aHdlcmUuIFNvIHdlIG9ubHkgcGFzcyBhIHpv
b20gZmFjdG9yIG9mIDEuMCBmb3Igc3BlY2lmaWMKKy8vIHByb3BlcnRpZXMgdGhhdCBhcmUgTk9U
IGFsbG93ZWQgdG8gc2NhbGUgd2l0aGluIGEgem9vbWVkIFNWRyBkb2N1bWVudCAobGV0dGVyL3dv
cmQtc3BhY2luZy9mb250LXNpemUpLgorICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3Qg
eyByZXR1cm4gbV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCk7IH0KKworICAg
IGJvb2wgaGFzVUFBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNVQUFwcGVhcmFuY2U7
IH0KKyAgICBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXJEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9i
b3JkZXJEYXRhOyB9CisgICAgY29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kRGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2dyb3VuZERhdGE7IH0KKyAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQorCisgICAgdm9pZCBzZXRJbmNs
dWRlRW1wdHlSdWxlcyhib29sIGluY2x1ZGVFbXB0eVJ1bGVzKSB7IG1faW5jbHVkZUVtcHR5UnVs
ZXMgPSBpbmNsdWRlRW1wdHlSdWxlczsgfQorICAgIHZvaWQgc2V0U2FtZU9yaWdpbk9ubHkoYm9v
bCBzYW1lT3JpZ2luT25seSkgeyBtX3NhbWVPcmlnaW5Pbmx5ID0gc2FtZU9yaWdpbk9ubHk7IH0K
KyAgICBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbmNsdWRlRW1w
dHlSdWxlczsgfQorICAgIGJvb2wgc2FtZU9yaWdpbk9ubHkoKSBjb25zdCB7IHJldHVybiBtX3Nh
bWVPcmlnaW5Pbmx5OyB9CisKK3ByaXZhdGU6CisgICAgRWxlbWVudCogbV9lbGVtZW50OworICAg
IFJlbmRlclN0eWxlKiBtX3N0eWxlOworICAgIFN0eWxlZEVsZW1lbnQqIG1fc3R5bGVkRWxlbWVu
dDsKKworICAgIGJvb2wgbV9pbmNsdWRlRW1wdHlSdWxlczsgLy8gc2hvdWxkIGJlIG1vdmVkIHRv
IE1hdGNoUmVxdWVzdD8KKyAgICBib29sIG1fc2FtZU9yaWdpbk9ubHk7IC8vIHNob3VsZCBiZSBt
b3ZlZCB0byBNYXRjaFJlcXVlc3Q/CisgICAgUHNldWRvSWQgbV9wc2V1ZG9TdHlsZTsgLy8gc2hv
dWxkIGJlIG1vdmVkIHRvIE1hdGNoUmVxdWVzdD8KKyAgICBTZWxlY3RvckNoZWNrZXI6Ok1vZGUg
bV9tb2RlOworCisgICAgUmVuZGVyUmVnaW9uKiBtX3JlZ2lvbkZvclN0eWxpbmc7CisgICAgRUlu
c2lkZUxpbmsgbV9lbGVtZW50TGlua1N0YXRlOworCisgICAgQ29udGFpbmVyTm9kZSogbV9wYXJl
bnROb2RlOworICAgIFJlbmRlclN0eWxlKiBtX3BhcmVudFN0eWxlOworICAgIGJvb2wgbV9kaXN0
cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQ7IC8vIG9ubHkgc3R5bGVGb3JFbGVtZW50IG5lZWRzLgor
ICAgIFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGU7IC8vIGFwcGx5UHJvcGVydHkgbmVl
ZHMuCisKKyAgICBib29sIG1fY2FuVXNlRmFzdFJlamVjdDsgLy8gY29sbGVjdE1hdGNoZWRSdWxl
c0Zvckxpc3QgdXNlcy4KKyAgICBib29sIG1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzOyAv
LyBzaWJsaW5nIHN0eWxlIHNoYXJpbmcgbmVlZHMuCisKKyAgICAvLyBBIGJ1ZmZlciB1c2VkIHRv
IGhvbGQgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIGZvciBhbiBlbGVtZW50LAorICAgIC8vIGFu
ZCBhIHRlbXBvcmFyeSBidWZmZXIgdXNlZCBmb3IgbWVyZ2Ugc29ydGluZy4KKyAgICBWZWN0b3I8
Y29uc3QgUnVsZURhdGEqLCAzMj4gbV9tYXRjaGVkUnVsZXM7CisgICAgUmVmUHRyPFN0YXRpY0NT
U1J1bGVMaXN0PiBtX3J1bGVMaXN0OworCisgICAgLy8gYXBwbHlQcm9wZXJ0eSBuZWVkcy4KKyAg
ICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOworICAgIGJvb2wgbV9hcHBseVBy
b3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOworCisgICAgLy8gUGVuZGluZ0ltYWdlUHJvcGVydGll
cyBhcmUgcGVyLXJlc29sdmluZyBtZW1iZXIuCisgICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXAg
bV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzOworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBi
b29sIG1faGFzUGVuZGluZ1NoYWRlcnM7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
ICYmIEVOQUJMRShTVkcpCisgICAgUGVuZGluZ1NWR0RvY3VtZW50TWFwIG1fcGVuZGluZ1NWR0Rv
Y3VtZW50czsKKyNlbmRpZgorICAgIENTU1ZhbHVlKiBtX2xpbmVIZWlnaHRWYWx1ZTsgLy8gY2Fj
aGU7IHVwZGF0ZWQgaW4gYXBwbHlQcm9wZXJ0eS4KKyAgICBib29sIG1fZm9udERpcnR5OworCisg
ICAgLy8gYm9yZGVyLWFuZC1iYWNrZ3JvdW5kIGNhY2hlLCBpdCBpcyBiZXR0ZXIgdG8gbW92ZSB0
byBhbm90aGVyIHBsYWNlPworICAgIGJvb2wgbV9oYXNVQUFwcGVhcmFuY2U7CisgICAgQm9yZGVy
RGF0YSBtX2JvcmRlckRhdGE7CisgICAgRmlsbExheWVyIG1fYmFja2dyb3VuZERhdGE7CisgICAg
Q29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBSZXNvbHZlU3RhdGVfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5
bGVTZWxlY3Rvci5jcHAKaW5kZXggNjE0NWJiMWYxNjI1YjhmZTRkMTY3NjA3YmJiYThiZmQ5YTFi
MDExOS4uYzA3ZWZjODdkYWJmZTRkMWE5NmU0ZGZkZWFhMzQzZGZjOTQxY2JiZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtNDksNyArNDksNyBAQAog
I2RlZmluZSBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJbmhlcml0KSBcCiB7
IFwKLSAgICBzdmdzdHlsZS0+c2V0IyNQcm9wKG1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnBy
b3AoKSk7IFwKKyAgICBzdmdzdHlsZS0+c2V0IyNQcm9wKHN0YXRlLnBhcmVudFN0eWxlKCktPnN2
Z1N0eWxlKCktPnByb3AoKSk7IFwKICAgICByZXR1cm47IFwKIH0KIApAQCAtMTAyLDE3ICsxMDIs
MTcgQEAgc3RhdGljIENvbG9yIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoU1ZHQ29sb3IqIHN2
Z0NvbG9yLCBjb25zdCBDb2xvciYgZmdDb2xvcikKICAgICByZXR1cm4gY29sb3I7CiB9CiAKLXZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoUmVzb2x2
ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAg
IEFTU0VSVCh2YWx1ZSk7CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
MDsKICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgcHJpbWl0aXZl
VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAotICAgIFNW
R1JlbmRlclN0eWxlKiBzdmdzdHlsZSA9IG1fc3R5bGUtPmFjY2Vzc1NWR1N0eWxlKCk7CisgICAg
U1ZHUmVuZGVyU3R5bGUqIHN2Z3N0eWxlID0gc3RhdGUuc3R5bGUoKS0+YWNjZXNzU1ZHU3R5bGUo
KTsKIAotICAgIGJvb2wgaXNJbmhlcml0ID0gbV9wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVy
aXRlZFZhbHVlKCk7Ci0gICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUo
KSB8fCAoIW1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKKyAgICBi
b29sIGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVudE5vZGUoKSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRW
YWx1ZSgpOworICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwg
KCFzdGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7CiAKICAg
ICAvLyBXaGF0IGZvbGxvd3MgaXMgYSBsaXN0IHRoYXQgbWFwcyB0aGUgQ1NTIHByb3BlcnRpZXMg
aW50byB0aGVpcgogICAgIC8vIGNvcnJlc3BvbmRpbmcgZnJvbnQtZW5kIFJlbmRlclN0eWxlIHZh
bHVlcy4gU2hvcnRoYW5kcyhlLmcuIGJvcmRlciwKQEAgLTIyOSwzNCArMjI5LDM0IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGaWxsOgogICAgICAgICB7CiAgICAg
ICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVy
U3R5bGUqIHN2Z1BhcmVudFN0eWxlID0gbV9wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKTsKLSAgICAg
ICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KHN2Z1BhcmVudFN0eWxlLT5maWxsUGFp
bnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHls
ZS0+ZmlsbFBhaW50VXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVBy
b3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgICAgICAgICAgICAgIGNvbnN0IFNWR1Jl
bmRlclN0eWxlKiBzdmdQYXJlbnRTdHlsZSA9IHN0YXRlLnBhcmVudFN0eWxlKCktPnN2Z1N0eWxl
KCk7CisgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChzdmdQYXJlbnRTdHls
ZS0+ZmlsbFBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50Q29sb3IoKSwgc3Zn
UGFyZW50U3R5bGUtPmZpbGxQYWludFVyaSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFy
U3R5bGUoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNJbml0
aWFsKSB7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChTVkdSZW5kZXJT
dHlsZTo6aW5pdGlhbEZpbGxQYWludFR5cGUoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxs
UGFpbnRDb2xvcigpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludFVyaSgpLCBhcHBs
eVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KFNWR1JlbmRlclN0
eWxlOjppbml0aWFsRmlsbFBhaW50VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQ
YWludENvbG9yKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50VXJpKCksIHN0YXRl
LmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNp
dGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdQYWludCgpKSB7CiAgICAgICAgICAgICAgICAg
U1ZHUGFpbnQqIHN2Z1BhaW50ID0gc3RhdGljX2Nhc3Q8U1ZHUGFpbnQqPih2YWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCks
IGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIG1fc3R5bGUtPmNvbG9yKCkpLCBz
dmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRG
aWxsUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVl
KHN2Z1BhaW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBzdGF0
ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlz
aXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2U6CiAgICAgICAgIHsKICAgICAg
ICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJT
dHlsZSogc3ZnUGFyZW50U3R5bGUgPSBtX3BhcmVudFN0eWxlLT5zdmdTdHlsZSgpOwotICAgICAg
ICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYXJlbnRTdHlsZS0+c3Ryb2tl
UGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludENvbG9yKCksIHN2Z1BhcmVu
dFN0eWxlLT5zdHJva2VQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwg
YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBjb25z
dCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5z
dmdTdHlsZSgpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQ
YXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWlu
dENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludFVyaSgpLCBzdGF0ZS5hcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtT
dHlsZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0cm9r
ZVBhaW50KFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRUeXBlKCksIFNWR1JlbmRl
clN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRDb2xvcigpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlh
bFN0cm9rZVBhaW50VXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVBy
b3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRTdHJva2VQYWludChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VHlwZSgpLCBT
VkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6
OmluaXRpYWxTdHJva2VQYWludFVyaSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGUoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlz
U1ZHUGFpbnQoKSkgewogICAgICAgICAgICAgICAgIFNWR1BhaW50KiBzdmdQYWludCA9IHN0YXRp
Y19jYXN0PFNWR1BhaW50Kj4odmFsdWUpOwotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRT
dHJva2VQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFs
dWUoc3ZnUGFpbnQsIG1fc3R5bGUtPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkp
OworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYWludC0+cGFp
bnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0eWxl
KCktPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTM2Myw3ICszNjMs
NyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRT
dHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFya2VyU3RhcnRSZXNv
dXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywg
bV9lbGVtZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFya2Vy
U3RhcnRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklT
dHJpbmcocywgc3RhdGUuZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmtlck1pZDoKQEAgLTM3Nyw3ICszNzcsNyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJp
bmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFya2VyTWlkUmVzb3VyY2Uo
U1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxl
bWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hcmtlck1pZFJl
c291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhz
LCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5TWFya2VyRW5kOgpAQCAtMzkxLDcgKzM5MSw3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1VSSSkKICAgICAgICAgICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVl
KCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXJrZXJFbmRSZXNvdXJjZShTVkdVUklS
ZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgbV9lbGVtZW50LT5k
b2N1bWVudCgpKSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFya2VyRW5kUmVzb3VyY2Uo
U1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRl
LmRvY3VtZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlTdHJva2VMaW5lY2FwOgpAQCAtNDI4LDcgKzQyOCw3IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VS
SSkKICAgICAgICAgICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7
CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWx0ZXJSZXNvdXJjZShTVkdVUklSZWZlcmVu
Y2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVu
dCgpKSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsdGVyUmVzb3VyY2UoU1ZHVVJJUmVm
ZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50
KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlNYXNrOgpAQCAtNDQyLDcgKzQ0Miw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlT
VkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAg
ICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAg
ICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2
Z3N0eWxlLT5zZXRNYXNrZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRp
ZmllckZyb21JUklTdHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAgICAg
ICBzdmdzdHlsZS0+c2V0TWFza2VyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElk
ZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50KCkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDbGlwUGF0aDoKQEAg
LTQ1Niw3ICs0NTYsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2
ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0Q2xp
cHBlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0
cmluZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRDbGlwcGVyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9t
SVJJU3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0QW5jaG9yOgpAQCAtNDc3LDE0ICs0
NzcsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgSEFORExFX0lO
SEVSSVRfQU5EX0lOSVRJQUwoc3RvcENvbG9yLCBTdG9wQ29sb3IpOwogICAgICAgICAgICAgaWYg
KHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0b3BD
b2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFs
dWUpLCBtX3N0eWxlLT5jb2xvcigpKSk7CisgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0
b3BDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4o
dmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMaWdodGluZ0NvbG9yOgogICAgICAgICB7
CiAgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChsaWdodGluZ0NvbG9yLCBM
aWdodGluZ0NvbG9yKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAg
ICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRMaWdodGluZ0NvbG9yKGNvbG9yRnJvbVNWR0NvbG9y
Q1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSksIG1fc3R5bGUtPmNvbG9yKCkp
KTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TGlnaHRpbmdDb2xvcihjb2xvckZyb21T
VkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5zdHls
ZSgpLT5jb2xvcigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5Rmxvb2RPcGFjaXR5OgpAQCAtNTA5LDcgKzUwOSw3IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFM
KGZsb29kQ29sb3IsIEZsb29kQ29sb3IpOwogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0Nv
bG9yKCkpCi0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZsb29kQ29sb3IoY29sb3JGcm9t
U1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgbV9zdHlsZS0+
Y29sb3IoKSkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGbG9vZENvbG9yKGNvbG9y
RnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSksIHN0YXRl
LnN0eWxlKCktPmNvbG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbDoKQEAgLTU0OSw3
ICs1NDksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRTdmdTaGFkb3c6IHsKICAgICAgICAgICAgIGlmIChpc0luaGVy
aXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN2Z3N0eWxlLT5zZXRTaGFkb3coYWRvcHRQdHIo
bV9wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKS0+c2hhZG93KCkgPyBuZXcgU2hhZG93RGF0YSgqbV9w
YXJlbnRTdHlsZS0+c3ZnU3R5bGUoKS0+c2hhZG93KCkpIDogMCkpOworICAgICAgICAgICAgICAg
IHJldHVybiBzdmdzdHlsZS0+c2V0U2hhZG93KGFkb3B0UHRyKHN0YXRlLnBhcmVudFN0eWxlKCkt
PnN2Z1N0eWxlKCktPnNoYWRvdygpID8gbmV3IFNoYWRvd0RhdGEoKnN0YXRlLnBhcmVudFN0eWxl
KCktPnN2Z1N0eWxlKCktPnNoYWRvdygpKSA6IDApKTsKICAgICAgICAgICAgIGlmIChpc0luaXRp
YWwgfHwgcHJpbWl0aXZlVmFsdWUpIC8vIGluaXRpYWwgfCBub25lCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHN2Z3N0eWxlLT5zZXRTaGFkb3cobnVsbHB0cik7CiAKQEAgLTU2NCwxMiArNTY0LDEy
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAoIWZpcnN0VmFsdWUtPmlzU2hhZG93
VmFsdWUoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBTaGFkb3dWYWx1
ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1ZhbHVlKj4oZmlyc3RWYWx1ZSk7Ci0gICAgICAg
ICAgICBJbnRQb2ludCBsb2NhdGlvbihpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUo
KSwgbV9yb290RWxlbWVudFN0eWxlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0
ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpKTsK
LSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVM
ZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpIDogMDsKKyAgICAgICAgICAg
IEludFBvaW50IGxvY2F0aW9uKGl0ZW0tPngtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHls
ZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpLAorICAgICAgICAgICAgICAgIGl0ZW0tPnkt
PmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxl
KCkpKTsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNv
bXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkp
IDogMDsKICAgICAgICAgICAgIENvbG9yIGNvbG9yOwogICAgICAgICAgICAgaWYgKGl0ZW0tPmNv
bG9yKQotICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRl
bS0+Y29sb3IuZ2V0KCkpOworICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0
aXZlVmFsdWUoc3RhdGUsIGl0ZW0tPmNvbG9yLmdldCgpKTsKIAogICAgICAgICAgICAgLy8gLXdl
YmtpdC1zdmctc2hhZG93IGRvZXMgc2hvdWxkIG5vdCBoYXZlIGEgc3ByZWFkIG9yIHN0eWxlCiAg
ICAgICAgICAgICBBU1NFUlQoIWl0ZW0tPnNwcmVhZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXIuY3BwCmluZGV4IDFmNWUwYzAyNDgxYzk4MjliYjY5YmE2NWY1MTgzNTlhNDQ4N2Rk
ZWIuLmZiZDM3Mjk3YjZhNGU5ZTM1ZWYyNjE4ZmUxNjZjMzg0ZDRiOGRjNjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCkBAIC02OSwxOSArNjksOTAgQEAgU2VsZWN0b3JD
aGVja2VyOjpTZWxlY3RvckNoZWNrZXIoRG9jdW1lbnQqIGRvY3VtZW50KQogewogfQogCi1ib29s
IFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hlcyhjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVs
ZW1lbnQqIGVsZW1lbnQsIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IpIGNvbnN0CituYW1l
c3BhY2UgeworCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGYXN0Q2hlY2thYmxlUmVsYXRpb24oQ1NT
U2VsZWN0b3I6OlJlbGF0aW9uIHJlbGF0aW9uKQogewotICAgIGlmIChpc0Zhc3RDaGVja2FibGVT
ZWxlY3RvciAmJiAhZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKCFmYXN0
Q2hlY2tSaWdodG1vc3RTZWxlY3RvcihzZWxlY3RvciwgZWxlbWVudCwgVmlzaXRlZE1hdGNoRGlz
YWJsZWQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gZmFzdENo
ZWNrKHNlbGVjdG9yLCBlbGVtZW50KTsKKyAgICByZXR1cm4gcmVsYXRpb24gPT0gQ1NTU2VsZWN0
b3I6OkRlc2NlbmRhbnQgfHwgcmVsYXRpb24gPT0gQ1NTU2VsZWN0b3I6OkNoaWxkIHx8IHJlbGF0
aW9uID09IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcjsKK30KKworc3RhdGljIGlubGluZSBib29s
IGlzRmFzdENoZWNrYWJsZU1hdGNoKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAg
ICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlNldCkgeworICAgICAgICAv
LyBTdHlsZSBhdHRyaWJ1dGUgaXMgZ2VuZXJhdGVkIGxhemlseSBidXQgdGhlIGZhc3QgcGF0aCBk
b2Vzbid0IHRyaWdnZXIgaXQuCisgICAgICAgIC8vIERpc2FsbG93IHRoZW0gaGVyZSByYXRoZXIg
dGhhbiBtYWtpbmcgdGhlIGZhc3QgcGF0aCBtb3JlIGJyYW5jaHkuCisgICAgICAgIHJldHVybiBz
ZWxlY3Rvci0+YXR0cmlidXRlKCkgIT0gc3R5bGVBdHRyOwogICAgIH0KKyAgICBpZiAoc2VsZWN0
b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkV4YWN0KQorICAgICAgICByZXR1cm4gc2VsZWN0
b3ItPmF0dHJpYnV0ZSgpICE9IHN0eWxlQXR0ciAmJiBIVE1MRG9jdW1lbnQ6OmlzQ2FzZVNlbnNp
dGl2ZUF0dHJpYnV0ZShzZWxlY3Rvci0+YXR0cmlidXRlKCkpOworICAgIHJldHVybiBzZWxlY3Rv
ci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6VGFnIHx8IHNlbGVjdG9yLT5tX21hdGNoID09IENT
U1NlbGVjdG9yOjpJZCB8fCBzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3M7
Cit9CiAKLSAgICBQc2V1ZG9JZCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87Ci0gICAg
cmV0dXJuIG1hdGNoKFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KHNlbGVjdG9yLCBlbGVtZW50LCBT
ZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaERpc2FibGVkKSwgaWdub3JlRHluYW1pY1BzZXVk
bywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KCkpID09IFNlbGVjdG9yTWF0Y2hlczsKK3N0
YXRpYyBpbmxpbmUgYm9vbCBpc0Zhc3RDaGVja2FibGVSaWdodG1vc3RTZWxlY3Rvcihjb25zdCBD
U1NTZWxlY3Rvciogc2VsZWN0b3IpCit7CisgICAgaWYgKCFpc0Zhc3RDaGVja2FibGVSZWxhdGlv
bihzZWxlY3Rvci0+cmVsYXRpb24oKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gaXNGYXN0Q2hlY2thYmxlTWF0Y2goc2VsZWN0b3IpIHx8IFNlbGVjdG9yQ2hlY2tlcjo6aXND
b21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKHNlbGVjdG9yKTsKIH0KIAotbmFtZXNwYWNlIHsKK2lu
bGluZSBib29sIGNoZWNrVGFnVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIHJldHVybiBTZWxlY3RvckNoZWNrZXI6OnRhZ01h
dGNoZXMoZWxlbWVudCwgc2VsZWN0b3ItPnRhZ1FOYW1lKCkpOworfQorCitpbmxpbmUgYm9vbCBj
aGVja0NsYXNzVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3Iq
IHNlbGVjdG9yKQoreworICAgIHJldHVybiBlbGVtZW50LT5oYXNDbGFzcygpICYmIHN0YXRpY19j
YXN0PGNvbnN0IFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+Y2xhc3NOYW1lcygpLmNvbnRhaW5z
KHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7Cit9CisKK2lubGluZSBib29sIGNoZWNrSURWYWx1
ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCit7
CisgICAgcmV0dXJuIGVsZW1lbnQtPmhhc0lEKCkgJiYgZWxlbWVudC0+aWRGb3JTdHlsZVJlc29s
dXRpb24oKS5pbXBsKCkgPT0gc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpOworfQorCitpbmxpbmUg
Ym9vbCBjaGVja0V4YWN0QXR0cmlidXRlVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29u
c3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIHJldHVybiBTZWxlY3RvckNoZWNrZXI6
OmNoZWNrRXhhY3RBdHRyaWJ1dGUoZWxlbWVudCwgc2VsZWN0b3ItPmF0dHJpYnV0ZSgpLCBzZWxl
Y3Rvci0+dmFsdWUoKS5pbXBsKCkpOworfQorCitpbmxpbmUgYm9vbCBjb21tb25Qc2V1ZG9DbGFz
c1NlbGVjdG9yTWF0Y2hlcyhjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rv
ciogc2VsZWN0b3IsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0
Y2hUeXBlKQoreworICAgIEFTU0VSVChTZWxlY3RvckNoZWNrZXI6OmlzQ29tbW9uUHNldWRvQ2xh
c3NTZWxlY3RvcihzZWxlY3RvcikpOworICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb1R5cGUo
KSkgeworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xpbms6CisgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQW55TGluazoKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmlzTGluaygpOwor
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQ6CisgICAgICAgIHJldHVybiBlbGVt
ZW50LT5pc0xpbmsoKSAmJiB2aXNpdGVkTWF0Y2hUeXBlID09IFNlbGVjdG9yQ2hlY2tlcjo6Vmlz
aXRlZE1hdGNoRW5hYmxlZDsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Gb2N1czoKKyAg
ICAgICAgcmV0dXJuIG1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKGVsZW1lbnQpOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworaW5saW5lIGJvb2wgZmFzdENoZWNrUmlnaHRtb3N0U2VsZWN0b3IoY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBTZWxlY3RvckNoZWNr
ZXI6OlZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZSkKK3sKKyAgICBBU1NFUlQoU2Vs
ZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVTZWxlY3RvcihzZWxlY3RvcikpOworCisgICAg
c3dpdGNoIChzZWxlY3Rvci0+bV9tYXRjaCkgeworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlRhZzoK
KyAgICAgICAgcmV0dXJuIGNoZWNrVGFnVmFsdWUoZWxlbWVudCwgc2VsZWN0b3IpOworICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OkNsYXNzOgorICAgICAgICByZXR1cm4gY2hlY2tDbGFzc1ZhbHVlKGVs
ZW1lbnQsIHNlbGVjdG9yKTsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpJZDoKKyAgICAgICAgcmV0
dXJuIGNoZWNrSURWYWx1ZShlbGVtZW50LCBzZWxlY3Rvcik7CisgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6RXhhY3Q6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2V0OgorICAgICAgICByZXR1cm4gY2hl
Y2tFeGFjdEF0dHJpYnV0ZVZhbHVlKGVsZW1lbnQsIHNlbGVjdG9yKTsKKyAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9DbGFzczoKKyAgICAgICAgcmV0dXJuIGNvbW1vblBzZXVkb0NsYXNzU2Vs
ZWN0b3JNYXRjaGVzKGVsZW1lbnQsIHNlbGVjdG9yLCB2aXNpdGVkTWF0Y2hUeXBlKTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQogCiB0ZW1wbGF0ZSA8Ym9vbCBjaGVja1ZhbHVlKGNvbnN0IEVsZW1lbnQqLCBj
b25zdCBDU1NTZWxlY3RvciopPgogaW5saW5lIGJvb2wgZmFzdENoZWNrU2luZ2xlU2VsZWN0b3Io
Y29uc3QgQ1NTU2VsZWN0b3IqJiBzZWxlY3RvciwgY29uc3QgRWxlbWVudComIGVsZW1lbnQsIGNv
bnN0IENTU1NlbGVjdG9yKiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiYg
dG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KQpAQCAtMTE3LDUxICsxODgsMzQgQEAg
aW5saW5lIGJvb2wgZmFzdENoZWNrU2luZ2xlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqJiBz
ZWxlY3RvciwgY29uc3QgRWxlbWVudCoKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWlubGluZSBi
b29sIGNoZWNrQ2xhc3NWYWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxl
Y3Rvciogc2VsZWN0b3IpCi17Ci0gICAgcmV0dXJuIGVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgc3Rh
dGljX2Nhc3Q8Y29uc3QgU3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5jbGFzc05hbWVzKCkuY29u
dGFpbnMoc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpKTsKIH0KIAotaW5saW5lIGJvb2wgY2hlY2tJ
RFZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3Rv
cikKLXsKLSAgICByZXR1cm4gZWxlbWVudC0+aGFzSUQoKSAmJiBlbGVtZW50LT5pZEZvclN0eWxl
UmVzb2x1dGlvbigpLmltcGwoKSA9PSBzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCk7Ci19Ci0KLWlu
bGluZSBib29sIGNoZWNrRXhhY3RBdHRyaWJ1dGVWYWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50
LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCi17Ci0gICAgcmV0dXJuIFNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tFeGFjdEF0dHJpYnV0ZShlbGVtZW50LCBzZWxlY3Rvci0+YXR0cmlidXRlKCks
IHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7Ci19Ci0KLWlubGluZSBib29sIGNoZWNrVGFnVmFs
dWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQor
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNvbnN0IENTU1Nl
bGVjdG9yKiBzZWxlY3RvcikKIHsKLSAgICByZXR1cm4gU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRj
aGVzKGVsZW1lbnQsIHNlbGVjdG9yLT50YWdRTmFtZSgpKTsKLX0KLQorICAgIGlmICghaXNGYXN0
Q2hlY2thYmxlUmlnaHRtb3N0U2VsZWN0b3Ioc2VsZWN0b3IpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgZm9yIChzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCk7IHNlbGVjdG9y
OyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKKyAgICAgICAgaWYgKCFpc0Zh
c3RDaGVja2FibGVSZWxhdGlvbihzZWxlY3Rvci0+cmVsYXRpb24oKSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghaXNGYXN0Q2hlY2thYmxlTWF0Y2goc2VsZWN0b3Ip
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hlY2tSaWdodG1vc3RTZWxlY3Rv
cihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIFZp
c2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZSkgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVj
a2VyOjptYXRjaGVzKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCogZWxlbWVu
dCwgYm9vbCBpc0Zhc3RDaGVja2FibGVTZWxlY3RvcikgY29uc3QKIHsKLSAgICBBU1NFUlQoaXNG
YXN0Q2hlY2thYmxlU2VsZWN0b3Ioc2VsZWN0b3IpKTsKLQotICAgIHN3aXRjaCAoc2VsZWN0b3It
Pm1fbWF0Y2gpIHsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpUYWc6Ci0gICAgICAgIHJldHVybiBj
aGVja1RhZ1ZhbHVlKGVsZW1lbnQsIHNlbGVjdG9yKTsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpD
bGFzczoKLSAgICAgICAgcmV0dXJuIGNoZWNrQ2xhc3NWYWx1ZShlbGVtZW50LCBzZWxlY3Rvcik7
Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6SWQ6Ci0gICAgICAgIHJldHVybiBjaGVja0lEVmFsdWUo
ZWxlbWVudCwgc2VsZWN0b3IpOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkV4YWN0OgotICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlNldDoKLSAgICAgICAgcmV0dXJuIGNoZWNrRXhhY3RBdHRyaWJ1dGVW
YWx1ZShlbGVtZW50LCBzZWxlY3Rvcik7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3M6Ci0gICAgICAgIHJldHVybiBjb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yTWF0Y2hlcyhlbGVt
ZW50LCBzZWxlY3RvciwgdmlzaXRlZE1hdGNoVHlwZSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgaWYgKGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yICYm
ICFlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkgeworICAgICAgICBpZiAoIWZhc3RDaGVja1JpZ2h0
bW9zdFNlbGVjdG9yKHNlbGVjdG9yLCBlbGVtZW50LCBWaXNpdGVkTWF0Y2hEaXNhYmxlZCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBmYXN0Q2hlY2soc2VsZWN0
b3IsIGVsZW1lbnQpOwogICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQc2V1ZG9JZCBp
Z25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgcmV0dXJuIG1hdGNoKFNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0KHNlbGVjdG9yLCBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0
ZWRNYXRjaERpc2FibGVkKSwgaWdub3JlRHluYW1pY1BzZXVkbywgRE9NU2libGluZ1RyYXZlcnNh
bFN0cmF0ZWd5KCkpID09IFNlbGVjdG9yTWF0Y2hlczsKIH0KIAotYm9vbCBTZWxlY3RvckNoZWNr
ZXI6OmZhc3RDaGVjayhjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQq
IGVsZW1lbnQpIGNvbnN0Citib29sIFNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrKGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvciwgY29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBBU1NF
UlQoZmFzdENoZWNrUmlnaHRtb3N0U2VsZWN0b3Ioc2VsZWN0b3IsIGVsZW1lbnQsIFZpc2l0ZWRN
YXRjaEVuYWJsZWQpKTsKIApAQCAtMjAyLDQzICsyNTYsNiBAQCBib29sIFNlbGVjdG9yQ2hlY2tl
cjo6ZmFzdENoZWNrKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgY29uc3QgRWxlbWVudCog
ZWxlbQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNGYXN0Q2hl
Y2thYmxlUmVsYXRpb24oQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHJlbGF0aW9uKQotewotICAgIHJl
dHVybiByZWxhdGlvbiA9PSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCB8fCByZWxhdGlvbiA9PSBD
U1NTZWxlY3Rvcjo6Q2hpbGQgfHwgcmVsYXRpb24gPT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9y
OwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNGYXN0Q2hlY2thYmxlTWF0Y2goY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NT
ZWxlY3Rvcjo6U2V0KSB7Ci0gICAgICAgIC8vIFN0eWxlIGF0dHJpYnV0ZSBpcyBnZW5lcmF0ZWQg
bGF6aWx5IGJ1dCB0aGUgZmFzdCBwYXRoIGRvZXNuJ3QgdHJpZ2dlciBpdC4KLSAgICAgICAgLy8g
RGlzYWxsb3cgdGhlbSBoZXJlIHJhdGhlciB0aGFuIG1ha2luZyB0aGUgZmFzdCBwYXRoIG1vcmUg
YnJhbmNoeS4KLSAgICAgICAgcmV0dXJuIHNlbGVjdG9yLT5hdHRyaWJ1dGUoKSAhPSBzdHlsZUF0
dHI7Ci0gICAgfQotICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6RXhh
Y3QpCi0gICAgICAgIHJldHVybiBzZWxlY3Rvci0+YXR0cmlidXRlKCkgIT0gc3R5bGVBdHRyICYm
IEhUTUxEb2N1bWVudDo6aXNDYXNlU2Vuc2l0aXZlQXR0cmlidXRlKHNlbGVjdG9yLT5hdHRyaWJ1
dGUoKSk7Ci0gICAgcmV0dXJuIHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpUYWcg
fHwgc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkIHx8IHNlbGVjdG9yLT5tX21h
dGNoID09IENTU1NlbGVjdG9yOjpDbGFzczsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzRmFz
dENoZWNrYWJsZVJpZ2h0bW9zdFNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikK
LXsKLSAgICBpZiAoIWlzRmFzdENoZWNrYWJsZVJlbGF0aW9uKHNlbGVjdG9yLT5yZWxhdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBpc0Zhc3RDaGVja2FibGVNYXRj
aChzZWxlY3RvcikgfHwgU2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0
b3Ioc2VsZWN0b3IpOwotfQotCi1ib29sIFNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxl
U2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQotewotICAgIGlmICghaXNGYXN0
Q2hlY2thYmxlUmlnaHRtb3N0U2VsZWN0b3Ioc2VsZWN0b3IpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgZm9yIChzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCk7IHNlbGVjdG9y
OyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKLSAgICAgICAgaWYgKCFpc0Zh
c3RDaGVja2FibGVSZWxhdGlvbihzZWxlY3Rvci0+cmVsYXRpb24oKSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghaXNGYXN0Q2hlY2thYmxlTWF0Y2goc2VsZWN0b3Ip
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQogLy8gUmVjdXJzaXZlIGNoZWNrIG9mIHNlbGVjdG9ycyBhbmQgY29tYmluYXRvcnMKIC8vIEl0
IGNhbiByZXR1cm4gNCBkaWZmZXJlbnQgdmFsdWVzOgogLy8gKiBTZWxlY3Rvck1hdGNoZXMgICAg
ICAgICAgLSB0aGUgc2VsZWN0b3IgbWF0Y2hlcyB0aGUgZWxlbWVudCBlCkBAIC05OTMsMjMgKzEw
MTAsNiBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IENTU1NlbAogICAgIH0KIH0KIAotYm9vbCBTZWxlY3Rv
ckNoZWNrZXI6OmNvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3JNYXRjaGVzKGNvbnN0IEVsZW1lbnQq
IGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgVmlzaXRlZE1hdGNoVHlwZSB2
aXNpdGVkTWF0Y2hUeXBlKSBjb25zdAotewotICAgIEFTU0VSVChpc0NvbW1vblBzZXVkb0NsYXNz
U2VsZWN0b3Ioc2VsZWN0b3IpKTsKLSAgICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkp
IHsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5rOgotICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0FueUxpbms6Ci0gICAgICAgIHJldHVybiBlbGVtZW50LT5pc0xpbmsoKTsKLSAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkOgotICAgICAgICByZXR1cm4gZWxlbWVu
dC0+aXNMaW5rKCkgJiYgdmlzaXRlZE1hdGNoVHlwZSA9PSBWaXNpdGVkTWF0Y2hFbmFibGVkOwot
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZvY3VzOgotICAgICAgICByZXR1cm4gbWF0Y2hl
c0ZvY3VzUHNldWRvQ2xhc3MoZWxlbWVudCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCiB1bnNpZ25lZCBT
ZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtNYXRjaFR5cGUoY29uc3QgQ1NTU2VsZWN0b3Iq
IHNlbGVjdG9yKQogewogICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBNYXRjaEFsbDsKQEAg
LTEwNTUsMTEgKzEwNTUsNiBAQCB1bnNpZ25lZCBTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxp
bmtNYXRjaFR5cGUoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQogICAgIHJldHVybiBsaW5r
TWF0Y2hUeXBlOwogfQogCi1ib29sIFNlbGVjdG9yQ2hlY2tlcjo6aXNGcmFtZUZvY3VzZWQoY29u
c3QgRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICByZXR1cm4gZWxlbWVudC0+ZG9jdW1lbnQoKS0+
ZnJhbWUoKSAmJiBlbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+aXNG
b2N1c2VkQW5kQWN0aXZlKCk7Ci19Ci0KIHRlbXBsYXRlCiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNo
IFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2goY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBQ
c2V1ZG9JZCYsIGNvbnN0IERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSYpIGNvbnN0OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKaW5kZXggMzkzOWJjMzU0ZTRhM2NkNzIzNDc3
ZjM4ZWY2MmFmZGM0ZDZmZWVmYi4uNmQ2Mjk1M2E4ODJmYzZiNmYyZDY0OTVjYmE3NTRkYmMwMDhi
YjE2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaApAQCAtODIsNyArODIsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBjaGVja09uZShjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4
dCYsIGNvbnN0IFNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSYpIGNvbnN0OwogCiAgICAgc3RhdGlj
IGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqKTsKLSAgICBi
b29sIGZhc3RDaGVjayhjb25zdCBDU1NTZWxlY3RvciosIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsK
KyAgICBzdGF0aWMgYm9vbCBmYXN0Q2hlY2soY29uc3QgQ1NTU2VsZWN0b3IqLCBjb25zdCBFbGVt
ZW50Kik7CiAKICAgICBib29sIHN0cmljdFBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmlj
dFBhcnNpbmc7IH0KIApAQCAtOTEsNyArOTEsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9v
bCB0YWdNYXRjaGVzKGNvbnN0IEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAg
c3RhdGljIGJvb2wgaXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9y
Kik7Ci0gICAgYm9vbCBtYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhjb25zdCBFbGVtZW50KikgY29u
c3Q7CiAgICAgc3RhdGljIGJvb2wgZmFzdENoZWNrUmlnaHRtb3N0QXR0cmlidXRlU2VsZWN0b3Io
Y29uc3QgRWxlbWVudCosIGNvbnN0IENTU1NlbGVjdG9yKik7CiAgICAgc3RhdGljIGJvb2wgY2hl
Y2tFeGFjdEF0dHJpYnV0ZShjb25zdCBFbGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgc2Vs
ZWN0b3JBdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmdJbXBsKiB2YWx1ZSk7CiAKQEAg
LTEwMCwxMCArOTksNiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgYm9vbCBjaGVja1Njcm9s
bGJhclBzZXVkb0NsYXNzKERvY3VtZW50KiwgY29uc3QgQ1NTU2VsZWN0b3IqKSBjb25zdDsKLSAg
ICBzdGF0aWMgYm9vbCBpc0ZyYW1lRm9jdXNlZChjb25zdCBFbGVtZW50Kik7Ci0KLSAgICBib29s
IGZhc3RDaGVja1JpZ2h0bW9zdFNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiwgY29uc3QgRWxl
bWVudCosIFZpc2l0ZWRNYXRjaFR5cGUpIGNvbnN0OwotICAgIGJvb2wgY29tbW9uUHNldWRvQ2xh
c3NTZWxlY3Rvck1hdGNoZXMoY29uc3QgRWxlbWVudCosIGNvbnN0IENTU1NlbGVjdG9yKiwgVmlz
aXRlZE1hdGNoVHlwZSkgY29uc3Q7CiAKICAgICBib29sIG1fc3RyaWN0UGFyc2luZzsKICAgICBi
b29sIG1fZG9jdW1lbnRJc0hUTUw7CkBAIC0xMjEsNyArMTE2LDEyIEBAIGlubGluZSBib29sIFNl
bGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKGNvbnN0IENTU1NlbGVj
dG9yKiBzZWxlCiAgICAgICAgIHx8IHBzZXVkb1R5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0Zv
Y3VzOwogfQogCi1pbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoZXNGb2N1c1BzZXVk
b0NsYXNzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CitpbmxpbmUgYm9vbCBpc0ZyYW1l
Rm9jdXNlZChjb25zdCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIHJldHVybiBlbGVtZW50LT5k
b2N1bWVudCgpLT5mcmFtZSgpICYmIGVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVj
dGlvbigpLT5pc0ZvY3VzZWRBbmRBY3RpdmUoKTsKK30KKworaW5saW5lIGJvb2wgbWF0Y2hlc0Zv
Y3VzUHNldWRvQ2xhc3MoY29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBpZiAoSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGNvbnN0X2Nhc3Q8RWxlbWVudCo+
KGVsZW1lbnQpLCBDU1NTZWxlY3Rvcjo6UHNldWRvRm9jdXMpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAKaW5kZXggNmQ3OGM2ODQ0NDJjYzdlMjRl
YmY5YTYyODY3YmQ4ODk5ZmU3OThlNi4uN2ZmOGEzNTY0OWUzYWMzOGM5MjA0NTRhNzdmZmRlYWJh
ODZhNzhjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAKQEAgLTYxLDcgKzYxLDcg
QEAgY2xhc3MgQXBwbHlQcm9wZXJ0eUV4cGFuZGluZyB7CiBwdWJsaWM6CiAKICAgICB0ZW1wbGF0
ZSA8Q1NTUHJvcGVydHlJRCBpZD4KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlJbmhlcml0
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyKQorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewogICAgICAgICBpZiAo
aWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNjksMjAg
KzY5LDIwIEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgU3R5bGVCdWlsZGVyJiB0YWJsZSA9IFN0
eWxlQnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVyKCk7CiAgICAgICAgIGNvbnN0IFByb3BlcnR5
SGFuZGxlciYgaGFuZGxlciA9IHRhYmxlLnByb3BlcnR5SGFuZGxlcihpZCk7CiAgICAgICAgIGlm
IChoYW5kbGVyLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbmhlcml0VmFs
dWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5
SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAg
ICAgYXBwbHlJbmhlcml0VmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAg
ICAgICAgYXBwbHlJbmhlcml0VmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsK
LSAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8dGhyZWU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2
ZXIpOwotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTxmb3VyPihwcm9wZXJ0eUlELCBzdHlsZVJl
c29sdmVyKTsKLSAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwgc3R5
bGVSZXNvbHZlcik7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPG9uZT4ocHJvcGVydHlJRCwg
c3RhdGUpOworICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTx0d28+KHByb3BlcnR5SUQsIHN0YXRl
KTsKKyAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8dGhyZWU+KHByb3BlcnR5SUQsIHN0YXRlKTsK
KyAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8Zm91cj4ocHJvcGVydHlJRCwgc3RhdGUpOworICAg
ICAgICBhcHBseUluaGVyaXRWYWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQog
CiAgICAgdGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQ+Ci0gICAgc3RhdGljIGlubGluZSB2b2lk
IGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlJbml0aWFsVmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsK
ICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5SW52YWxpZCkKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTkwLDIwICs5MCwyMCBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFN0eWxlQnVpbGRl
ciYgdGFibGUgPSBTdHlsZUJ1aWxkZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpOwogICAgICAgICBj
b25zdCBQcm9wZXJ0eUhhbmRsZXImIGhhbmRsZXIgPSB0YWJsZS5wcm9wZXJ0eUhhbmRsZXIoaWQp
OwogICAgICAgICBpZiAoaGFuZGxlci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBoYW5kbGVyLmFw
cGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICAgICAg
aGFuZGxlci5hcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5p
dGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSkK
ICAgICB7Ci0gICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPG9uZT4ocHJvcGVydHlJRCwgc3R5bGVS
ZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPHR3bz4ocHJvcGVydHlJRCwgc3R5
bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPHRocmVlPihwcm9wZXJ0eUlE
LCBzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8Zm91cj4ocHJvcGVy
dHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPGZpdmU+KHBy
b3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTxvbmU+
KHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8dHdvPihwcm9w
ZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPHRocmVlPihwcm9wZXJ0
eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPGZvdXI+KHByb3BlcnR5SUQs
IHN0YXRlKTsKKyAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwgc3Rh
dGUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDxDU1NQcm9wZXJ0eUlEIGlkPgotICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyBpbmxp
bmUgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRl
JiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKGlkID09IENTU1By
b3BlcnR5SW52YWxpZCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExMSwxOSArMTExLDE5IEBA
IHB1YmxpYzoKICAgICAgICAgY29uc3QgU3R5bGVCdWlsZGVyJiB0YWJsZSA9IFN0eWxlQnVpbGRl
cjo6c2hhcmVkU3R5bGVCdWlsZGVyKCk7CiAgICAgICAgIGNvbnN0IFByb3BlcnR5SGFuZGxlciYg
aGFuZGxlciA9IHRhYmxlLnByb3BlcnR5SGFuZGxlcihpZCk7CiAgICAgICAgIGlmIChoYW5kbGVy
LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBz
dHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5VmFsdWUocHJv
cGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgewogICAgICAgICBpZiAoIWV4cGFuZFZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIGFwcGx5VmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7
Ci0gICAgICAgIGFwcGx5VmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1
ZSk7Ci0gICAgICAgIGFwcGx5VmFsdWU8dGhyZWU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIs
IHZhbHVlKTsKLSAgICAgICAgYXBwbHlWYWx1ZTxmb3VyPihwcm9wZXJ0eUlELCBzdHlsZVJlc29s
dmVyLCB2YWx1ZSk7Ci0gICAgICAgIGFwcGx5VmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwgc3R5bGVS
ZXNvbHZlciwgdmFsdWUpOworICAgICAgICBhcHBseVZhbHVlPG9uZT4ocHJvcGVydHlJRCwgc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgYXBwbHlWYWx1ZTx0d28+KHByb3BlcnR5SUQsIHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIGFwcGx5VmFsdWU8dGhyZWU+KHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIGFwcGx5VmFsdWU8Zm91cj4ocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgYXBwbHlWYWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOwogICAg
IH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQ
cm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZh
cHBseVZhbHVlKTsgfQogfTsKQEAgLTEzNCw5ICsxMzQsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBTZXR0ZXJUeXBlIHZhbHVlKSB7IChz
dHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KICAgICBzdGF0aWMgR2V0dGVyVHlwZSB2
YWx1ZShSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+KmdldHRlckZ1bmN0aW9u
KSgpOyB9CiAgICAgc3RhdGljIEluaXRpYWxUeXBlIGluaXRpYWwoKSB7IHJldHVybiAoKmluaXRp
YWxGdW5jdGlvbikoKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIHsgc2V0VmFsdWUoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgdmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOyB9
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlcikgeyBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBpbml0aWFsKCkpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiwgQ1NTVmFsdWUqKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlKSB7IHNldFZhbHVl
KHN0YXRlLnN0eWxlKCksIHZhbHVlKHN0YXRlLnBhcmVudFN0eWxlKCkpKTsgfQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3Rh
dGUpIHsgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgaW5pdGlhbCgpKTsgfQorICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiwgQ1NTVmFsdWUqKSB7
IH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQ
cm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZh
cHBseVZhbHVlKTsgfQogfTsKIApAQCAtMTQ0LDEwICsxNDQsMTAgQEAgdGVtcGxhdGUgPHR5cGVu
YW1lIEdldHRlclR5cGUsIEdldHRlclR5cGUgKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24p
KCkgY29uc3QKIGNsYXNzIEFwcGx5UHJvcGVydHlEZWZhdWx0IHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIFNldHRlclR5cGUgdmFsdWUpIHsg
KHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFs
dWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVz
b2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLCAqc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkpOwor
ICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgKnN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWUpKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBj
cmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xNjAsMTYgKzE2MCwxNiBAQCB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgTnVtYmVyVHlwZSwgTnVtYmVyVHlwZSAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlv
bikoKSBjb25zdAogY2xhc3MgQXBwbHlQcm9wZXJ0eU51bWJlciB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBOdW1iZXJUeXBlIHZhbHVlKSB7
IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFJl
c29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICgh
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IGlkTWFwc1RvTWludXNPbmUpCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLCAtMSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCAt
MSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZTxOdW1iZXJUeXBlPihDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwg
cHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlPE51bWJlclR5cGU+KENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfTlVNQkVSKSk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFu
ZGxlcigpCiAgICAgewpAQCAtMTgxLDcgKzE4MSw3IEBAIHB1YmxpYzoKIHRlbXBsYXRlIDxTdHls
ZUltYWdlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVu
ZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoUGFzc1JlZlB0cjxTdHlsZUltYWdlPiksIFN0eWxl
SW1hZ2UqICgqaW5pdGlhbEZ1bmN0aW9uKSgpLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5PgogY2xh
c3MgQXBwbHlQcm9wZXJ0eVN0eWxlSW1hZ2UgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NT
VmFsdWUqIHZhbHVlKSB7IChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24p
KHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2UocHJvcGVydHksIHZhbHVlKSk7IH0KKyAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUsIENT
U1ZhbHVlKiB2YWx1ZSkgeyAoc3RhdGUuc3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShTdHlsZVJl
c29sdmVyOjpzdHlsZUltYWdlKHN0YXRlLCBwcm9wZXJ0eSwgdmFsdWUpKTsgfQogICAgIHN0YXRp
YyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewogICAgICAgICBQcm9wZXJ0
eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxTdHlsZUltYWdlKiwg
Z2V0dGVyRnVuY3Rpb24sIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4sIHNldHRlckZ1bmN0aW9uLCBT
dHlsZUltYWdlKiwgaW5pdGlhbEZ1bmN0aW9uPjo6Y3JlYXRlSGFuZGxlcigpOwpAQCAtMTk4LDI4
ICsxOTgsMjggQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGhhc0F1dG8oUmVuZGVyU3R5bGUq
IHN0eWxlKSB7IHJldHVybiAoc3R5bGUtPipoYXNBdXRvRnVuY3Rpb24pKCk7IH0KICAgICBzdGF0
aWMgdm9pZCBzZXRBdXRvKFJlbmRlclN0eWxlKiBzdHlsZSkgeyAoc3R5bGUtPipzZXRBdXRvRnVu
Y3Rpb24pKCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBw
bHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7
Ci0gICAgICAgIGlmIChoYXNBdXRvKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKQotICAg
ICAgICAgICAgc2V0QXV0byhzdHlsZVJlc29sdmVyLT5zdHlsZSgpKTsKKyAgICAgICAgaWYgKGhh
c0F1dG8oc3RhdGUucGFyZW50U3R5bGUoKSkpCisgICAgICAgICAgICBzZXRBdXRvKHN0YXRlLnN0
eWxlKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCB2YWx1ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAg
ICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCB2YWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikgeyBzZXRBdXRvKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCkpOyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVy
dHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSkgeyBzZXRBdXRvKHN0YXRlLnN0eWxlKCkpOyB9CiAK
LSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZh
bHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IGF1dG9JZGVudGl0eSkKLSAgICAgICAgICAgIHNl
dEF1dG8oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSk7CisgICAgICAgICAgICBzZXRBdXRvKHN0YXRl
LnN0eWxlKCkpOwogICAgICAgICBlbHNlIGlmICh2YWx1ZVR5cGUgPT0gTnVtYmVyKQotICAgICAg
ICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgKnByaW1pdGl2ZVZhbHVlKTsK
KyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksICpwcmltaXRpdmVWYWx1ZSk7CiAg
ICAgICAgIGVsc2UgaWYgKHZhbHVlVHlwZSA9PSBDb21wdXRlTGVuZ3RoKQotICAgICAgICAgICAg
c2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVM
ZW5ndGg8VD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1l
bnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKTsKKyAg
ICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5jb21wdXRl
TGVuZ3RoPFQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUu
c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5
SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUlu
aGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KQEAgLTIyNywy
NyArMjI3LDI3IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUNsaXAgewogcHJpdmF0
ZToKLSAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0xlbmd0aChTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIExlbmd0aCBj
b252ZXJ0VG9MZW5ndGgoUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJpbWl0aXZlVmFsdWUqIHZh
bHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJ
bnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgRnJhY3Rpb25Db252ZXJzaW9u
IHwgQXV0b0NvbnZlcnNpb24+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXIt
PnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2Vy
Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgRnJhY3Rpb25Db252ZXJzaW9uIHwgQXV0
b0NvbnZlcnNpb24+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3Rh
dGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICB9CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0g
ICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0
eWxlKCk7CisgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IHN0YXRlLnBhcmVudFN0
eWxlKCk7CiAgICAgICAgIGlmICghcGFyZW50U3R5bGUtPmhhc0NsaXAoKSkKLSAgICAgICAgICAg
IHJldHVybiBhcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q2xpcChwYXJlbnRTdHlsZS0+Y2xpcFRv
cCgpLCBwYXJlbnRTdHlsZS0+Y2xpcFJpZ2h0KCksIHBhcmVudFN0eWxlLT5jbGlwQm90dG9tKCks
IHBhcmVudFN0eWxlLT5jbGlwTGVmdCgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0SGFzQ2xpcCh0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiBhcHBseUluaXRpYWxWYWx1
ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENsaXAocGFy
ZW50U3R5bGUtPmNsaXBUb3AoKSwgcGFyZW50U3R5bGUtPmNsaXBSaWdodCgpLCBwYXJlbnRTdHls
ZS0+Y2xpcEJvdHRvbSgpLCBwYXJlbnRTdHlsZS0+Y2xpcExlZnQoKSk7CisgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldEhhc0NsaXAodHJ1ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBw
bHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
cikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNv
bHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSk7Ci0gICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0NsaXAoZmFsc2UpOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRDbGlwKExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgp
KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQ2xpcChmYWxzZSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0yNTUsMTUgKzI1NSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odmFsdWUpOwogCiAgICAgICAgIGlmIChSZWN0KiByZWN0ID0gcHJpbWl0aXZlVmFsdWUtPmdl
dFJlY3RWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBMZW5ndGggdG9wID0gY29udmVydFRvTGVuZ3Ro
KHN0eWxlUmVzb2x2ZXIsIHJlY3QtPnRvcCgpKTsKLSAgICAgICAgICAgIExlbmd0aCByaWdodCA9
IGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0LT5yaWdodCgpKTsKLSAgICAgICAg
ICAgIExlbmd0aCBib3R0b20gPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+
Ym90dG9tKCkpOwotICAgICAgICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgoc3R5
bGVSZXNvbHZlciwgcmVjdC0+bGVmdCgpKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldENsaXAodG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsKLSAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0NsaXAodHJ1ZSk7CisgICAgICAgICAgICBMZW5n
dGggdG9wID0gY29udmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0LT50b3AoKSk7CisgICAgICAgICAg
ICBMZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3QtPnJpZ2h0KCkpOwor
ICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdC0+
Ym90dG9tKCkpOworICAgICAgICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgoc3Rh
dGUsIHJlY3QtPmxlZnQoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDbGlwKHRv
cCwgcmlnaHQsIGJvdHRvbSwgbGVmdCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRI
YXNDbGlwKHRydWUpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlQXV0bykgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSk7Ci0gICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKGZhbHNlKTsKKyAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENsaXAoTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgo
KSwgTGVuZ3RoKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQ2xpcChmYWxz
ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI4MSw0MCArMjgxLDQwIEBAIHRlbXBsYXRlIDxD
b2xvckluaGVyaXQgaW5oZXJpdENvbG9yRnJvbVBhcmVudCwKICAgICAgICAgICBDb2xvciAoKmlu
aXRpYWxGdW5jdGlvbikoKSA9ICZkZWZhdWx0SW5pdGlhbENvbG9yPgogY2xhc3MgQXBwbHlQcm9w
ZXJ0eUNvbG9yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUp
CiAgICAgewogICAgICAgICAvLyBWaXNpdGVkIGxpbmsgc3R5bGUgY2FuIG5ldmVyIGV4cGxpY2l0
bHkgaW5oZXJpdCBmcm9tIHBhcmVudCB2aXNpdGVkIGxpbmsgc3R5bGUgc28gbm8gc2VwYXJhdGUg
Z2V0dGVycyBhcmUgbmVlZGVkLgotICAgICAgICBDb2xvciBjb2xvciA9IChzdHlsZVJlc29sdmVy
LT5wYXJlbnRTdHlsZSgpLT4qZ2V0dGVyRnVuY3Rpb24pKCk7Ci0gICAgICAgIGFwcGx5Q29sb3JW
YWx1ZShzdHlsZVJlc29sdmVyLCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IChzdHlsZVJlc29s
dmVyLT5wYXJlbnRTdHlsZSgpLT4qZGVmYXVsdEZ1bmN0aW9uKSgpKTsKKyAgICAgICAgQ29sb3Ig
Y29sb3IgPSAoc3RhdGUucGFyZW50U3R5bGUoKS0+KmdldHRlckZ1bmN0aW9uKSgpOworICAgICAg
ICBhcHBseUNvbG9yVmFsdWUoc3RhdGUsIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogKHN0YXRl
LnBhcmVudFN0eWxlKCktPipkZWZhdWx0RnVuY3Rpb24pKCkpOwogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVy
dHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIGFwcGx5Q29sb3JWYWx1
ZShzdHlsZVJlc29sdmVyLCBpbml0aWFsRnVuY3Rpb24oKSk7CisgICAgICAgIGFwcGx5Q29sb3JW
YWx1ZShzdGF0ZSwgaW5pdGlhbEZ1bmN0aW9uKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAg
aWYgKGluaGVyaXRDb2xvckZyb21QYXJlbnQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCi0gICAgICAgICAgICBhcHBseUluaGVyaXRWYWx1ZShw
cm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVl
KHByb3BlcnR5SUQsIHN0YXRlKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc3R5
bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpCi0gICAgICAgICAgICAg
ICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZl
ci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUpKTsKLSAgICAgICAgICAg
IGlmIChzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpCi0g
ICAgICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPip2aXNpdGVkTGlua1NldHRl
ckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRp
dmVWYWx1ZSwgLyogZm9yVmlzaXRlZExpbmsgKi8gdHJ1ZSkpOworICAgICAgICAgICAgaWYgKHN0
YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKQorICAgICAgICAgICAgICAgIChzdGF0
ZS5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1p
dGl2ZVZhbHVlKHN0YXRlLCBwcmltaXRpdmVWYWx1ZSkpOworICAgICAgICAgICAgaWYgKHN0YXRl
LmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSkKKyAgICAgICAgICAgICAgICAoc3Rh
dGUuc3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0dGVyRnVuY3Rpb24pKFN0eWxlUmVzb2x2ZXI6OmNv
bG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCBwcmltaXRpdmVWYWx1ZSwgLyogZm9yVmlzaXRl
ZExpbmsgKi8gdHJ1ZSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBw
bHlDb2xvclZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENvbG9yJiBj
b2xvcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUNvbG9yVmFsdWUoUmVzb2x2ZVN0YXRlJiBzdGF0
ZSwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIHsKLSAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXIt
PmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKQotICAgICAgICAgICAgKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoY29sb3IpOwotICAgICAgICBpZiAoc3R5bGVS
ZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKQotICAgICAgICAgICAg
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPip2aXNpdGVkTGlua1NldHRlckZ1bmN0aW9uKShjb2xv
cik7CisgICAgICAgIGlmIChzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSkKKyAg
ICAgICAgICAgIChzdGF0ZS5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKGNvbG9yKTsKKyAgICAg
ICAgaWYgKHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSkKKyAgICAgICAg
ICAgIChzdGF0ZS5zdHlsZSgpLT4qdmlzaXRlZExpbmtTZXR0ZXJGdW5jdGlvbikoY29sb3IpOwog
ICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0
dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1
ZSwgJmFwcGx5VmFsdWUpOyB9CkBAIC0zMjMsMTEgKzMyMywxMSBAQCBwdWJsaWM6CiB0ZW1wbGF0
ZSA8VGV4dERpcmVjdGlvbiAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwg
dm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoVGV4dERpcmVjdGlvbiksIFRleHRE
aXJlY3Rpb24gKCppbml0aWFsRnVuY3Rpb24pKCk+CiBjbGFzcyBBcHBseVByb3BlcnR5RGlyZWN0
aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVl
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBS
ZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBBcHBs
eVByb3BlcnR5RGVmYXVsdDxUZXh0RGlyZWN0aW9uLCBnZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVj
dGlvbiwgc2V0dGVyRnVuY3Rpb24sIFRleHREaXJlY3Rpb24sIGluaXRpYWxGdW5jdGlvbj46OmFw
cGx5VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBFbGVt
ZW50KiBlbGVtZW50ID0gc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpOwotICAgICAgICBpZiAoZWxl
bWVudCAmJiBzdHlsZVJlc29sdmVyLT5lbGVtZW50KCkgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+
ZG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0PFRleHREaXJl
Y3Rpb24sIGdldHRlckZ1bmN0aW9uLCBUZXh0RGlyZWN0aW9uLCBzZXR0ZXJGdW5jdGlvbiwgVGV4
dERpcmVjdGlvbiwgaW5pdGlhbEZ1bmN0aW9uPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdGF0
ZSwgdmFsdWUpOworICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGUuZWxlbWVudCgpOwor
ICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmRv
Y3VtZW50RWxlbWVudCgpKQogICAgICAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0RGly
ZWN0aW9uU2V0T25Eb2N1bWVudEVsZW1lbnQodHJ1ZSk7CiAgICAgfQogCkBAIC0zNTQsNyArMzU0
LDcgQEAgdGVtcGxhdGUgPExlbmd0aCAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBj
b25zdCwKIGNsYXNzIEFwcGx5UHJvcGVydHlMZW5ndGggewogcHVibGljOgogICAgIHN0YXRpYyB2
b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgTGVuZ3RoIHZhbHVlKSB7IChzdHlsZS0+
KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1
ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0
ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM2MiwzOSArMzYyLDM5
IEBAIHB1YmxpYzoKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIGlmIChub25l
RW5hYmxlZCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsK
ICAgICAgICAgICAgIGlmIChub25lVW5kZWZpbmVkKQotICAgICAgICAgICAgICAgIHNldFZhbHVl
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChVbmRlZmluZWQpKTsKKyAgICAgICAgICAg
ICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoVW5kZWZpbmVkKSk7CiAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgTGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExl
bmd0aCgpKTsKICAgICAgICAgfQogICAgICAgICBpZiAobGVnYWN5SW50cmluc2ljRW5hYmxlZCkg
ewogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
SW50cmluc2ljKQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCksIExlbmd0aChJbnRyaW5zaWMpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5z
dHlsZSgpLCBMZW5ndGgoSW50cmluc2ljKSk7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU1pbkludHJpbnNpYykKLSAgICAgICAgICAg
ICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoTWluSW50cmluc2lj
KSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKE1pbklu
dHJpbnNpYykpOwogICAgICAgICB9CiAgICAgICAgIGlmIChpbnRyaW5zaWNFbmFibGVkKSB7CiAg
ICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVXZWJr
aXRNaW5Db250ZW50KQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCksIExlbmd0aChNaW5Db250ZW50KSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3Rh
dGUuc3R5bGUoKSwgTGVuZ3RoKE1pbkNvbnRlbnQpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlV2Via2l0TWF4Q29udGVudCkKLSAg
ICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoTWF4
Q29udGVudCkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0
aChNYXhDb250ZW50KSk7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdEZpbGxBdmFpbGFibGUpCi0gICAgICAgICAgICAgICAg
c2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKEZpbGxBdmFpbGFibGUpKTsK
KyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoRmlsbEF2YWls
YWJsZSkpOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVXZWJraXRGaXRDb250ZW50KQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChGaXRDb250ZW50KSk7CisgICAgICAgICAgICAg
ICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKEZpdENvbnRlbnQpKTsKICAgICAgICAg
fQogCiAgICAgICAgIGlmIChhdXRvRW5hYmxlZCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLCBMZW5ndGgoKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBM
ZW5ndGgoKSk7CiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7
Ci0gICAgICAgICAgICBMZW5ndGggbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5n
dGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxl
bWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7Cisg
ICAgICAgICAgICBMZW5ndGggbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8
TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgICAgICBsZW5ndGguc2V0UXVpcmsocHJp
bWl0aXZlVmFsdWUtPmlzUXVpcmtWYWx1ZSgpKTsKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCksIGxlbmd0aCk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5z
dHlsZSgpLCBsZW5ndGgpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1Bl
cmNlbnRhZ2UoKSkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCks
IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCkpOworICAg
ICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5n
ZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KSk7CiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKQotICAgICAgICAgICAgc2V0
VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jc3ND
YWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNv
bHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3Rp
dmVab29tKCkpKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgo
cHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdGF0ZS5zdHlsZSgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSkpKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVmlld3BvcnRQZXJjZW50
YWdlTGVuZ3RoKCkpCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpOworICAgICAgICAg
ICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2Vu
dGFnZUxlbmd0aCgpKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0
ZUhhbmRsZXIoKQpAQCAtNDA5LDE2ICs0MDksMTYgQEAgdGVtcGxhdGUgPFN0cmluZ0lkZW50QmVo
YXZpb3IgaWRlbnRCZWhhdmlvciwgY29uc3QgQXRvbWljU3RyaW5nJiAoUmVuZGVyU3R5bGU6OioK
IGNsYXNzIEFwcGx5UHJvcGVydHlTdHJpbmcgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNl
dFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgeyAo
c3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1
ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNv
bHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBpZiAoKGlkZW50QmVoYXZpb3IgPT0gTWFwTm9uZVRv
TnVsbCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAg
ICAgICAgICB8fCAoaWRlbnRCZWhhdmlvciA9PSBNYXBBdXRvVG9OdWxsICYmIHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykpCi0gICAgICAgICAgICBzZXRWYWx1ZShz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCBudWxsQXRvbSk7CisgICAgICAgICAgICBzZXRWYWx1ZShz
dGF0ZS5zdHlsZSgpLCBudWxsQXRvbSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldFZh
bHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1
ZSgpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIHByaW1pdGl2ZVZhbHVl
LT5nZXRTdHJpbmdWYWx1ZSgpKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBj
cmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC00MzEsNyArNDMxLDcgQEAgdGVtcGxhdGUgPExlbmd0
aFNpemUgKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRl
clN0eWxlOjoKIGNsYXNzIEFwcGx5UHJvcGVydHlCb3JkZXJSYWRpdXMgewogcHVibGljOgogICAg
IHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgTGVuZ3RoU2l6ZSB2YWx1
ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBp
ZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC00
NDgsMTcgKzQ0OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIGVsc2UgaWYgKHBhaXItPmZpcnN0KCkt
PmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCiAgICAgICAgICAgICByYWRpdXNXaWR0aCA9
IHBhaXItPmZpcnN0KCktPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpOwogICAgICAgICBlbHNl
IGlmIChwYWlyLT5maXJzdCgpLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKQot
ICAgICAgICAgICAgcmFkaXVzV2lkdGggPSBMZW5ndGgoKHBhaXItPmZpcnN0KCktPmNzc0NhbGNW
YWx1ZSgpLT50b0NhbGNWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVy
LT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKSkpKTsKKyAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gTGVuZ3RoKChwYWlyLT5maXJzdCgp
LT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gcGFpci0+Zmlyc3QoKS0+Y29tcHV0ZUxl
bmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RF
bGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsK
KyAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gcGFpci0+Zmlyc3QoKS0+Y29tcHV0ZUxlbmd0aDxM
ZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5
bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaWYgKHBhaXItPnNlY29uZCgpLT5pc1Bl
cmNlbnRhZ2UoKSkKICAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IExlbmd0aChwYWlyLT5zZWNv
bmQoKS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CiAgICAgICAgIGVsc2UgaWYgKHBhaXIt
PnNlY29uZCgpLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKQogICAgICAgICAgICAgcmFk
aXVzSGVpZ2h0ID0gcGFpci0+c2Vjb25kKCktPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpOwog
ICAgICAgICBlbHNlIGlmIChwYWlyLT5zZWNvbmQoKS0+aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdp
dGhMZW5ndGgoKSkKLSAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IExlbmd0aCgocGFpci0+c2Vj
b25kKCktPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPmVmZmVjdGl2ZVpvb20oKSkpKTsKKyAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IExlbmd0
aCgocGFpci0+c2Vjb25kKCktPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdGF0ZS5zdHls
ZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKSkpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmFkaXVzSGVpZ2h0ID0gcGFpci0+
c2Vjb25kKCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBz
dHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBwYWlyLT5zZWNv
bmQoKS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVt
ZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaW50
IHdpZHRoID0gcmFkaXVzV2lkdGgudmFsdWUoKTsKICAgICAgICAgaW50IGhlaWdodCA9IHJhZGl1
c0hlaWdodC52YWx1ZSgpOwogICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCkBA
IC00NjksNyArNDY5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmFkaXVzV2lkdGggPSByYWRp
dXNIZWlnaHQ7IC8vIE51bGwgb3V0IHRoZSBvdGhlciB2YWx1ZS4KIAogICAgICAgICBMZW5ndGhT
aXplIHNpemUocmFkaXVzV2lkdGgsIHJhZGl1c0hlaWdodCk7Ci0gICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIHNpemUpOworICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHls
ZSgpLCBzaXplKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5k
bGVyKCkKICAgICB7CkBAIC01MDMsMTEgKzUwMywxMSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwK
ICAgICAgICAgICB2b2lkIChDU1NUb1N0eWxlTWFwOjoqbWFwRmlsbEZ1bmN0aW9uKShDU1NQcm9w
ZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUZpbGxM
YXllciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBh
cHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAg
IHsKLSAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOworICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGls
ZCA9IChzdGF0ZS5zdHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7CiAgICAgICAgIEZp
bGxMYXllciogcHJldkNoaWxkID0gMDsKLSAgICAgICAgY29uc3QgRmlsbExheWVyKiBjdXJyUGFy
ZW50ID0gKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPipsYXllcnNGdW5jdGlvbikoKTsK
KyAgICAgICAgY29uc3QgRmlsbExheWVyKiBjdXJyUGFyZW50ID0gKHN0YXRlLnBhcmVudFN0eWxl
KCktPipsYXllcnNGdW5jdGlvbikoKTsKICAgICAgICAgd2hpbGUgKGN1cnJQYXJlbnQgJiYgKGN1
cnJQYXJlbnQtPip0ZXN0RnVuY3Rpb24pKCkpIHsKICAgICAgICAgICAgIGlmICghY3VyckNoaWxk
KSB7CiAgICAgICAgICAgICAgICAgLyogTmVlZCB0byBtYWtlIGEgbmV3IGxheWVyLiovCkBAIC01
MjcsMTggKzUyNywxOSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5
SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBGaWxsTGF5ZXIqIGN1cnJD
aGlsZCA9IChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7
CisgICAgICAgIEZpbGxMYXllciogY3VyckNoaWxkID0gKHN0YXRlLnN0eWxlKCktPiphY2Nlc3NM
YXllcnNGdW5jdGlvbikoKTsKICAgICAgICAgKGN1cnJDaGlsZC0+KnNldEZ1bmN0aW9uKSgoKmlu
aXRpYWxGdW5jdGlvbikoZmlsbExheWVyVHlwZSkpOwogICAgICAgICBmb3IgKGN1cnJDaGlsZCA9
IGN1cnJDaGlsZC0+bmV4dCgpOyBjdXJyQ2hpbGQ7IGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4
dCgpKQogICAgICAgICAgICAgKGN1cnJDaGlsZC0+KmNsZWFyRnVuY3Rpb24pKCk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgewotICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7CisgICAgICAgIEZpbGxMYXllciogY3Vy
ckNoaWxkID0gKHN0YXRlLnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5jdGlvbikoKTsKICAgICAg
ICAgRmlsbExheWVyKiBwcmV2Q2hpbGQgPSAwOworICAgICAgICBDU1NUb1N0eWxlTWFwIHN0eWxl
TWFwKHN0YXRlKTsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpCiAjaWYgRU5BQkxF
KENTU19JTUFHRV9TRVQpCiAgICAgICAgICYmICF2YWx1ZS0+aXNJbWFnZVNldFZhbHVlKCkKQEAg
LTU1MiwxMiArNTUzLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY3VyckNoaWxk
ID0gbmV3IEZpbGxMYXllcihmaWxsTGF5ZXJUeXBlKTsKICAgICAgICAgICAgICAgICAgICAgcHJl
dkNoaWxkLT5zZXROZXh0KGN1cnJDaGlsZCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT4qbWFwRmlsbEZ1bmN0aW9uKShwcm9w
ZXJ0eUlkLCBjdXJyQ2hpbGQsIHZhbHVlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7
CisgICAgICAgICAgICAgICAgKHN0eWxlTWFwLiptYXBGaWxsRnVuY3Rpb24pKHByb3BlcnR5SWQs
IGN1cnJDaGlsZCwgdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKICAgICAg
ICAgICAgICAgICBwcmV2Q2hpbGQgPSBjdXJyQ2hpbGQ7CiAgICAgICAgICAgICAgICAgY3VyckNo
aWxkID0gY3VyckNoaWxkLT5uZXh0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+Km1hcEZpbGxGdW5jdGlv
bikocHJvcGVydHlJZCwgY3VyckNoaWxkLCB2YWx1ZSk7CisgICAgICAgICAgICAoc3R5bGVNYXAu
Km1hcEZpbGxGdW5jdGlvbikocHJvcGVydHlJZCwgY3VyckNoaWxkLCB2YWx1ZSk7CiAgICAgICAg
ICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsKICAgICAgICAgfQogICAgICAgICB3
aGlsZSAoY3VyckNoaWxkKSB7CkBAIC01ODMsNyArNTg0LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQsCiBjbGFzcyBBcHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aCB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBUIHZhbHVlKSB7IChzdHlsZS0+
KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1
ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0
ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIC8vIG5vdGU6IENTU1By
b3BlcnR5TGV0dGVyL1dvcmRTcGFjaW5nIHJpZ2h0IG5vdyBzZXRzIHRvIHplcm8gaWYgaXQncyBu
b3QgYSBwcmltaXRpdmUgdmFsdWUgZm9yIHNvbWUgcmVhc29uLi4uCiAgICAgICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKQEAgLTYwMiwxMyArNjAzLDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgfSBlbHNlIGlmICh0aGlja25lc3NFbmFibGVkICYmIGlkZW50ID09IENTU1ZhbHVlVGhp
Y2spIHsKICAgICAgICAgICAgIGxlbmd0aCA9IDU7CiAgICAgICAgIH0gZWxzZSBpZiAoaWRlbnQg
PT0gQ1NTVmFsdWVJbnZhbGlkKSB7Ci0gICAgICAgICAgICBmbG9hdCB6b29tID0gKHN2Z1pvb21F
bmFibGVkICYmIHN0eWxlUmVzb2x2ZXItPnVzZVNWR1pvb21SdWxlcygpKSA/IDEuMGYgOiBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAgICAgICBmbG9hdCB6
b29tID0gKHN2Z1pvb21FbmFibGVkICYmIHN0YXRlLnVzZVNWR1pvb21SdWxlcygpKSA/IDEuMGYg
OiBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CiAKICAgICAgICAgICAgIC8vIEFueSBv
cmlnaW5hbCByZXN1bHQgdGhhdCB3YXMgPj0gMSBzaG91bGQgbm90IGJlIGFsbG93ZWQgdG8gZmFs
bCBiZWxvdyAxLgogICAgICAgICAgICAgLy8gVGhpcyBrZWVwcyBib3JkZXIgbGluZXMgZnJvbSB2
YW5pc2hpbmcuCi0gICAgICAgICAgICBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxl
bmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVu
dFN0eWxlKCksIHpvb20pOworICAgICAgICAgICAgbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNv
bXB1dGVMZW5ndGg8VD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6
b29tKTsKICAgICAgICAgICAgIGlmICh6b29tIDwgMS4wZiAmJiBsZW5ndGggPCAxLjApIHsKLSAg
ICAgICAgICAgICAgICBUIG9yaWdpbmFsTGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVM
ZW5ndGg8VD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1l
bnRTdHlsZSgpLCAxLjApOworICAgICAgICAgICAgICAgIFQgb3JpZ2luYWxMZW5ndGggPSBwcmlt
aXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlKCksIDEuMCk7CiAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsTGVuZ3RoID49
IDEuMCkKICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gMS4wOwogICAgICAgICAgICAgfQpA
QCAtNjE4LDcgKzYxOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGxlbmd0aCA9IDA7CiAgICAg
ICAgIH0KIAotICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBsZW5ndGgp
OworICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBsZW5ndGgpOwogICAgIH0KICAgICBz
dGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTYzMCwyOCAr
NjMxLDI4IEBAIHB1YmxpYzoKIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBUIChGb250RGVzY3JpcHRp
b246OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoRm9udERlc2NyaXB0aW9uOjoqc2V0
dGVyRnVuY3Rpb24pKFQpLCBUIGluaXRpYWxWYWx1ZT4KIGNsYXNzIEFwcGx5UHJvcGVydHlGb250
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewot
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+
Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIChmb250RGVzY3JpcHRpb24uKnNldHRlckZ1bmN0
aW9uKSgoc3R5bGVSZXNvbHZlci0+cGFyZW50Rm9udERlc2NyaXB0aW9uKCkuKmdldHRlckZ1bmN0
aW9uKSgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnRE
ZXNjcmlwdGlvbik7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBz
dGF0ZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgKGZvbnREZXNjcmlwdGlvbi4qc2V0dGVy
RnVuY3Rpb24pKChzdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS4qZ2V0dGVyRnVuY3Rpb24p
KCkpOworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5p
dGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAg
ICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9u
dERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24g
PSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgKGZvbnREZXNjcmlwdGlvbi4qc2V0
dGVyRnVuY3Rpb24pKGluaXRpYWxWYWx1ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZv
bnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBzdGF0ZS5zZXRGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFJl
c29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICgh
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERlc2Ny
aXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAgICAg
ICAoZm9udERlc2NyaXB0aW9uLipzZXR0ZXJGdW5jdGlvbikoKnByaW1pdGl2ZVZhbHVlKTsKLSAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAg
IH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJu
IFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwg
JmFwcGx5VmFsdWUpOyB9CkBAIC02NzYsNTAgKzY3Nyw1MCBAQCBwcml2YXRlOgogICAgICAgICBy
ZXR1cm4gc2l6ZSAvIDEuMmY7CiAgICAgfQogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIp
CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2
ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIGZsb2F0IHNpemUgPSBzdHlsZVJlc29sdmVy
LT5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCk7CisgICAg
ICAgIGZsb2F0IHNpemUgPSBzdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRT
aXplKCk7CiAKICAgICAgICAgaWYgKHNpemUgPCAwKQogICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtl
eXdvcmRTaXplKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigp
LmtleXdvcmRTaXplKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250U2l6ZShmb250
RGVzY3JpcHRpb24sIHNpemUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3Jp
cHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0S2V5d29yZFNpemUoc3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkua2V5d29yZFNp
emUoKSk7CisgICAgICAgIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKHN0YXRlLCBmb250RGVz
Y3JpcHRpb24sIHNpemUpOworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERl
c2NyaXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVz
b2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAg
ICAgICAgZmxvYXQgc2l6ZSA9IHN0eWxlUmVzb2x2ZXItPmZvbnRTaXplRm9yS2V5d29yZChzdHls
ZVJlc29sdmVyLT5kb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9uLnVz
ZUZpeGVkRGVmYXVsdFNpemUoKSk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgZmxvYXQgc2l6ZSA9IFN0
eWxlUmVzb2x2ZXI6OmZvbnRTaXplRm9yS2V5d29yZChzdGF0ZS5kb2N1bWVudCgpLCBDU1NWYWx1
ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7CiAKICAgICAg
ICAgaWYgKHNpemUgPCAwKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1ZhbHVlWHhTbWFsbCAr
IDEpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24s
IHNpemUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERl
c2NyaXB0aW9uKTsKKyAgICAgICAgU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoc3RhdGUsIGZv
bnREZXNjcmlwdGlvbiwgc2l6ZSk7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihm
b250RGVzY3JpcHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAg
ICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZv
bnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigp
OworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERl
c2NyaXB0aW9uKCk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZSgwKTsK
ICAgICAgICAgZmxvYXQgcGFyZW50U2l6ZSA9IDA7CiAgICAgICAgIGJvb2wgcGFyZW50SXNBYnNv
bHV0ZVNpemUgPSBmYWxzZTsKICAgICAgICAgZmxvYXQgc2l6ZSA9IDA7CiAKLSAgICAgICAgaWYg
KHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpIHsKLSAgICAgICAgICAgIHBhcmVudFNpemUg
PSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZp
ZWRTaXplKCk7Ci0gICAgICAgICAgICBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9IHN0eWxlUmVzb2x2
ZXItPnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmlzQWJzb2x1dGVTaXplKCk7Cisg
ICAgICAgIGlmIChzdGF0ZS5wYXJlbnRTdHlsZSgpKSB7CisgICAgICAgICAgICBwYXJlbnRTaXpl
ID0gc3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOworICAgICAg
ICAgICAgcGFyZW50SXNBYnNvbHV0ZVNpemUgPSBzdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24o
KS5pc0Fic29sdXRlU2l6ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGludCBpZGVudCA9
IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CkBAIC03MzMsNyArNzM0LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVhMYXJnZToKICAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVYeExhcmdlOgogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFh4eExhcmdlOgot
ICAgICAgICAgICAgICAgIHNpemUgPSBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdvcmQo
c3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgaWRlbnQsIGZvbnREZXNjcmlwdGlvbi51c2VGaXhl
ZERlZmF1bHRTaXplKCkpOworICAgICAgICAgICAgICAgIHNpemUgPSBTdHlsZVJlc29sdmVyOjpm
b250U2l6ZUZvcktleXdvcmQoc3RhdGUuZG9jdW1lbnQoKSwgaWRlbnQsIGZvbnREZXNjcmlwdGlv
bi51c2VGaXhlZERlZmF1bHRTaXplKCkpOwogICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRLZXl3b3JkU2l6ZShpZGVudCAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlcjoKQEAgLTc1MSwx
MyArNzUyLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fi
c29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8ICEocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgp
IHx8IHByaW1pdGl2ZVZhbHVlLT5pc0ZvbnRSZWxhdGl2ZUxlbmd0aCgpKSk7CiAgICAgICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgc2l6ZSA9
IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZVJlc29sdmVyLT5wYXJl
bnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIDEuMCwgdHJ1ZSk7
CisgICAgICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZs
b2F0PihzdGF0ZS5wYXJlbnRTdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIDEuMCwg
dHJ1ZSk7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdl
KCkpCiAgICAgICAgICAgICAgICAgc2l6ZSA9IChwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1
ZSgpICogcGFyZW50U2l6ZSkgLyAxMDAuMGY7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZS0+aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKLSAgICAgICAgICAg
ICAgICBzaXplID0gcHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShz
dHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0
eWxlKCkpLT5ldmFsdWF0ZShwYXJlbnRTaXplKTsKKyAgICAgICAgICAgICAgICBzaXplID0gcHJp
bWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdGF0ZS5wYXJlbnRTdHls
ZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpLT5ldmFsdWF0ZShwYXJlbnRTaXplKTsKICAg
ICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxl
bmd0aCgpKQotICAgICAgICAgICAgICAgIHNpemUgPSB2YWx1ZUZvckxlbmd0aChwcmltaXRpdmVW
YWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCksIDAsIHN0eWxlUmVzb2x2ZXItPmRvY3Vt
ZW50KCktPnJlbmRlclZpZXcoKSk7CisgICAgICAgICAgICAgICAgc2l6ZSA9IHZhbHVlRm9yTGVu
Z3RoKHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSwgMCwgc3RhdGUu
ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTc2OSw4ICs3NzAsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIC8vIENhcCBmb250IHNpemUgaGVyZSB0byBtYWtlIHN1cmUgdGhhdCBkb2Vzbid0IGhhcHBl
bi4KICAgICAgICAgc2l6ZSA9IG1pbihtYXhpbXVtQWxsb3dlZEZvbnRTaXplLCBzaXplKTsKIAot
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUp
OwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsKKyAgICAgICAgU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoc3RhdGUsIGZvbnREZXNj
cmlwdGlvbiwgc2l6ZSk7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVz
Y3JpcHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC03NzksMTIgKzc4MCwxMiBA
QCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlGb250V2VpZ2h0IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIEZvbnREZXNjcmlw
dGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsK
KyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNj
cmlwdGlvbigpOwogICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7
CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVJbnZhbGlkOgogICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC03OTgsNyArNzk5LDcgQEAgcHVibGljOgogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgqcHJpbWl0aXZlVmFsdWUpOwog
ICAgICAgICB9Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVy
KCkKICAgICB7CkBAIC04MDksMzAgKzgxMCwzMCBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJv
cGVydHlGb250VmFyaWFudExpZ2F0dXJlcyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBw
bHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
cikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNv
bHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBw
YXJlbnRGb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRGb250RGVzY3JpcHRp
b24oKTsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVz
b2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBjb25zdCBGb250RGVzY3JpcHRpb24m
IHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpOwor
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2Ny
aXB0aW9uKCk7CiAKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbW1vbkxpZ2F0dXJlc1N0
YXRlKHBhcmVudEZvbnREZXNjcmlwdGlvbi5jb21tb25MaWdhdHVyZXNTdGF0ZSgpKTsKICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldERpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZShwYXJlbnRG
b250RGVzY3JpcHRpb24uZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKCkpOwogICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0SGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKHBhcmVudEZvbnREZXNj
cmlwdGlvbi5oaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUoKSk7CiAKLSAgICAgICAgc3R5bGVSZXNv
bHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIHN0YXRl
LnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVy
dHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlv
biBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKKyAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlw
dGlvbigpOwogCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21tb25MaWdhdHVyZXNTdGF0
ZShGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKTsKICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldERpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZShGb250RGVzY3JpcHRpb246
Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEhpc3Rv
cmljYWxMaWdhdHVyZXNTdGF0ZShGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRl
KTsKIAotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlv
bik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBGb250RGVzY3JpcHRpb246OkxpZ2F0dXJlc1N0
YXRlIGNvbW1vbkxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVy
ZXNTdGF0ZTsKICAgICAgICAgRm9udERlc2NyaXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBkaXNjcmV0
aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0
YXRlOwpAQCAtODc4LDExICs4NzksMTEgQEAgcHVibGljOgogICAgICAgICB9CiAjZW5kaWYKIAot
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+
Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dENvbW1vbkxpZ2F0dXJlc1N0YXRlKGNvbW1vbkxpZ2F0dXJlc1N0YXRlKTsKICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldERpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZShkaXNjcmV0aW9uYXJ5
TGlnYXR1cmVzU3RhdGUpOwogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SGlzdG9yaWNhbExp
Z2F0dXJlc1N0YXRlKGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSk7Ci0gICAgICAgIHN0eWxlUmVz
b2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBzdGF0
ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKICAgICBzdGF0
aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtODk4LDEzICs4OTksMTQgQEAg
dGVtcGxhdGUgPEJvcmRlckltYWdlVHlwZSBib3JkZXJJbWFnZVR5cGUsCiAgICAgICAgICAgdm9p
ZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoY29uc3QgTmluZVBpZWNlSW1hZ2UmKT4K
IGNsYXNzIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAg
ICBOaW5lUGllY2VJbWFnZSBpbWFnZTsKICAgICAgICAgaWYgKGJvcmRlckltYWdlVHlwZSA9PSBC
b3JkZXJNYXNrKQogICAgICAgICAgICAgaW1hZ2Uuc2V0TWFza0RlZmF1bHRzKCk7Ci0gICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlKHByb3BlcnR5LCB2
YWx1ZSwgaW1hZ2UpOwotICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1
bmN0aW9uKShpbWFnZSk7CisgICAgICAgIENTU1RvU3R5bGVNYXAgc3R5bGVNYXAoc3RhdGUpOwor
ICAgICAgICBzdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZShwcm9wZXJ0eSwgdmFsdWUsIGltYWdl
KTsKKyAgICAgICAgKHN0YXRlLnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoaW1hZ2UpOwogICAg
IH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC05MjEs
MjkgKzkyMywyOSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBpbmxpbmUgY29uc3QgTmluZVBpZWNl
SW1hZ2UmIGdldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gdHlwZSA9PSBCb3Jk
ZXJJbWFnZSA/IHN0eWxlLT5ib3JkZXJJbWFnZSgpIDogc3R5bGUtPm1hc2tCb3hJbWFnZSgpOyB9
CiAgICAgc3RhdGljIGlubGluZSB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgY29u
c3QgTmluZVBpZWNlSW1hZ2UmIHZhbHVlKSB7IHJldHVybiB0eXBlID09IEJvcmRlckltYWdlID8g
c3R5bGUtPnNldEJvcmRlckltYWdlKHZhbHVlKSA6IHN0eWxlLT5zZXRNYXNrQm94SW1hZ2UodmFs
dWUpOyB9CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBh
cHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAg
IHsKLSAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSkpOworICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdGF0ZS5z
dHlsZSgpKSk7CiAgICAgICAgIHN3aXRjaCAobW9kaWZpZXIpIHsKICAgICAgICAgY2FzZSBPdXRz
ZXQ6Ci0gICAgICAgICAgICBpbWFnZS5jb3B5T3V0c2V0RnJvbShnZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbWFnZS5jb3B5T3V0c2V0RnJvbShn
ZXRWYWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBSZXBlYXQ6Ci0gICAgICAgICAgICBpbWFnZS5jb3B5UmVwZWF0RnJvbShnZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbWFnZS5jb3B5
UmVwZWF0RnJvbShnZXRWYWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBTbGljZToKLSAgICAgICAgICAgIGltYWdlLmNvcHlJbWFnZVNs
aWNlc0Zyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOworICAgICAg
ICAgICAgaW1hZ2UuY29weUltYWdlU2xpY2VzRnJvbShnZXRWYWx1ZShzdGF0ZS5wYXJlbnRTdHls
ZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXaWR0aDoKLSAgICAgICAg
ICAgIGltYWdlLmNvcHlCb3JkZXJTbGljZXNGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnBh
cmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGltYWdlLmNvcHlCb3JkZXJTbGljZXNGcm9tKGdl
dFZhbHVlKHN0YXRlLnBhcmVudFN0eWxlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGltYWdlKTsKKyAg
ICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgaW1hZ2UpOwogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVy
dHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIE5pbmVQaWVjZUltYWdl
IGltYWdlKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpKTsKKyAgICAgICAgTmluZVBp
ZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3RhdGUuc3R5bGUoKSkpOwogICAgICAgICBzd2l0Y2gg
KG1vZGlmaWVyKSB7CiAgICAgICAgIGNhc2UgT3V0c2V0OgogICAgICAgICAgICAgaW1hZ2Uuc2V0
T3V0c2V0KExlbmd0aEJveCgwKSk7CkBAIC05NjIsMjcgKzk2NCwyOCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBpbWFnZS5zZXRCb3JkZXJTbGljZXModHlwZSA9PSBCb3JkZXJJbWFnZSA/IExlbmd0
aEJveChMZW5ndGgoMSwgUmVsYXRpdmUpLCBMZW5ndGgoMSwgUmVsYXRpdmUpLCBMZW5ndGgoMSwg
UmVsYXRpdmUpLCBMZW5ndGgoMSwgUmVsYXRpdmUpKSA6IExlbmd0aEJveCgpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCksIGltYWdlKTsKKyAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgaW1hZ2UpOwog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgIHsKLSAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSkpOworICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRW
YWx1ZShzdGF0ZS5zdHlsZSgpKSk7CisgICAgICAgIENTU1RvU3R5bGVNYXAgc3R5bGVNYXAoc3Rh
dGUpOwogICAgICAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7CiAgICAgICAgIGNhc2UgT3V0c2V0Ogot
ICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1h
cE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOworICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0
KHN0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgUmVwZWF0OgotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQodmFsdWUsIGltYWdlKTsKKyAgICAgICAg
ICAgIHN0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KHZhbHVlLCBpbWFnZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTbGljZToKLSAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlU2xpY2UodmFsdWUsIGltYWdlKTsK
KyAgICAgICAgICAgIHN0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlU2xpY2UodmFsdWUsIGltYWdl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdpZHRoOgotICAgICAgICAgICAg
aW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQ
aWVjZUltYWdlUXVhZCh2YWx1ZSkpOworICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2Vz
KHN0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KLSAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
aW1hZ2UpOworICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBpbWFnZSk7CiAgICAgfQog
CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJv
cGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBw
bHlWYWx1ZSk7IH0KQEAgLTk5MSw3ICs5OTQsNyBAQCBwdWJsaWM6CiB0ZW1wbGF0ZSA8Q1NTUHJv
cGVydHlJRCBpZCwgU3R5bGVJbWFnZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFBhc3NSZWZQdHI8U3R5
bGVJbWFnZT4pLCBTdHlsZUltYWdlKiAoKmluaXRpYWxGdW5jdGlvbikoKT4KIGNsYXNzIEFwcGx5
UHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSogdmFsdWUpIHsgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbiko
c3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShpZCwgdmFsdWUpKTsgfQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUq
IHZhbHVlKSB7IChzdGF0ZS5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKFN0eWxlUmVzb2x2ZXI6
OnN0eWxlSW1hZ2Uoc3RhdGUsIGlkLCB2YWx1ZSkpOyB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFu
ZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CiAgICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5k
bGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPFN0eWxlSW1hZ2UqLCBnZXR0ZXJGdW5jdGlv
biwgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiwgc2V0dGVyRnVuY3Rpb24sIFN0eWxlSW1hZ2UqLCBp
bml0aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5kbGVyKCk7CkBAIC0xMDAzLDExICsxMDA2LDExIEBA
IGVudW0gQ291bnRlckJlaGF2aW9yIHtJbmNyZW1lbnQgPSAwLCBSZXNldH07CiB0ZW1wbGF0ZSA8
Q291bnRlckJlaGF2aW9yIGNvdW50ZXJCZWhhdmlvcj4KIGNsYXNzIEFwcGx5UHJvcGVydHlDb3Vu
dGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBlbXB0eUZ1bmN0aW9uKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqKSB7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRp
YyB2b2lkIGVtcHR5RnVuY3Rpb24oQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJikgeyB9Cisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0
YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIENvdW50ZXJEaXJlY3RpdmVNYXAmIG1hcCA9IHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7Ci0gICAgICAg
IENvdW50ZXJEaXJlY3RpdmVNYXAmIHBhcmVudE1hcCA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0
eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7CisgICAgICAgIENvdW50ZXJEaXJlY3Rp
dmVNYXAmIG1hcCA9IHN0YXRlLnN0eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7Cisg
ICAgICAgIENvdW50ZXJEaXJlY3RpdmVNYXAmIHBhcmVudE1hcCA9IHN0YXRlLnBhcmVudFN0eWxl
KCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7CiAKICAgICAgICAgdHlwZWRlZiBDb3VudGVy
RGlyZWN0aXZlTWFwOjppdGVyYXRvciBJdGVyYXRvcjsKICAgICAgICAgSXRlcmF0b3IgZW5kID0g
cGFyZW50TWFwLmVuZCgpOwpAQCAtMTAyMCwxNCArMTAyMywxNCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUp
CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUm
IHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1Zh
bHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIENTU1ZhbHVlTGlzdCog
bGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKIAotICAgICAgICBDb3Vu
dGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5hY2Nlc3NDb3Vu
dGVyRGlyZWN0aXZlcygpOworICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdGF0
ZS5zdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwogICAgICAgICB0eXBlZGVmIENv
dW50ZXJEaXJlY3RpdmVNYXA6Oml0ZXJhdG9yIEl0ZXJhdG9yOwogCiAgICAgICAgIEl0ZXJhdG9y
IGVuZCA9IG1hcC5lbmQoKTsKQEAgLTEwNjMsNDIgKzEwNjYsNDIgQEAgcHVibGljOgogCiBjbGFz
cyBBcHBseVByb3BlcnR5Q3Vyc29yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVT
dGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRD
dXJzb3Ioc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Y3Vyc29yKCkpOwotICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3JMaXN0KHN0eWxlUmVzb2x2ZXItPnBhcmVu
dFN0eWxlKCktPmN1cnNvcnMoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEN1cnNvcihz
dGF0ZS5wYXJlbnRTdHlsZSgpLT5jdXJzb3IoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dEN1cnNvckxpc3Qoc3RhdGUucGFyZW50U3R5bGUoKS0+Y3Vyc29ycygpKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENT
U1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5jbGVhckN1cnNvckxpc3QoKTsKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0Q3Vyc29yKFJlbmRlclN0eWxlOjppbml0aWFsQ3Vyc29yKCkpOworICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhckN1cnNvckxpc3QoKTsKKyAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0Q3Vyc29yKFJlbmRlclN0eWxlOjppbml0aWFsQ3Vyc29yKCkpOwogICAgIH0KIAot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7
CisgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyQ3Vyc29yTGlzdCgpOwogICAgICAgICBpZiAo
dmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKICAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9
IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKICAgICAgICAgICAgIGludCBsZW4g
PSBsaXN0LT5sZW5ndGgoKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dEN1cnNvcihDVVJTT1JfQVVUTyk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDdXJz
b3IoQ1VSU09SX0FVVE8pOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkr
KykgewogICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gbGlzdC0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjayhpKTsKICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNDdXJzb3JJbWFnZVZh
bHVlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSogaW1hZ2Ug
PSBzdGF0aWNfY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlKj4oaXRlbSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChpbWFnZS0+dXBkYXRlSWZTVkdDdXJzb3JJc1VzZWQoc3R5bGVSZXNvbHZlci0+
ZWxlbWVudCgpKSkgLy8gRWxlbWVudHMgd2l0aCBTVkcgY3Vyc29ycyBhcmUgbm90IGFsbG93ZWQg
dG8gc2hhcmUgc3R5bGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRVbmlxdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+YWRkQ3Vyc29yKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlD
dXJzb3IsIGltYWdlKSwgaW1hZ2UtPmhvdFNwb3QoKSk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChpbWFnZS0+dXBkYXRlSWZTVkdDdXJzb3JJc1VzZWQoc3RhdGUuZWxlbWVudCgpKSkgLy8gRWxl
bWVudHMgd2l0aCBTVkcgY3Vyc29ycyBhcmUgbm90IGFsbG93ZWQgdG8gc2hhcmUgc3R5bGUuCisg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRVbmlxdWUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+YWRkQ3Vyc29yKFN0eWxlUmVzb2x2ZXI6OnN0
eWxlSW1hZ2Uoc3RhdGUsIENTU1Byb3BlcnR5Q3Vyc29yLCBpbWFnZSksIGltYWdlLT5ob3RTcG90
KCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNJZGVudCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKCpwcmltaXRpdmVWYWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDdXJzb3IoKnByaW1p
dGl2ZVZhbHVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0g
ZWxzZSBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewogICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzSWRlbnQoKSAm
JiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5jdXJzb3IoKSAhPSBFQ3Vyc29yKCpwcmltaXRpdmVW
YWx1ZSkpCi0gICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29y
KCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzSWRl
bnQoKSAmJiBzdGF0ZS5zdHlsZSgpLT5jdXJzb3IoKSAhPSBFQ3Vyc29yKCpwcmltaXRpdmVWYWx1
ZSkpCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q3Vyc29yKCpwcmltaXRpdmVW
YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTExMDcsNyArMTExMCw3IEBAIHB1YmxpYzoK
IAogY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHRBbGlnbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAg
ICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC0xMTE1LDEzICsxMTE4LDEzIEBAIHB1YmxpYzoKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7
CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpICE9IENTU1ZhbHVlV2Vi
a2l0TWF0Y2hQYXJlbnQpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRU
ZXh0QWxpZ24oKnByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoc3R5bGVSZXNvbHZl
ci0+cGFyZW50U3R5bGUoKS0+dGV4dEFsaWduKCkgPT0gVEFTVEFSVCkKLSAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbihzdHlsZVJlc29sdmVyLT5wYXJlbnRT
dHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBMRUZUIDogUklHSFQpOwotICAgICAg
ICBlbHNlIGlmIChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBU
QUVORCkKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbihz
dHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBS
SUdIVCA6IExFRlQpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEFsaWduKCpw
cmltaXRpdmVWYWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKHN0YXRlLnBhcmVudFN0eWxlKCktPnRl
eHRBbGlnbigpID09IFRBU1RBUlQpCisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0
QWxpZ24oc3RhdGUucGFyZW50U3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gTEVG
VCA6IFJJR0hUKTsKKyAgICAgICAgZWxzZSBpZiAoc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dEFs
aWduKCkgPT0gVEFFTkQpCisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0QWxpZ24o
c3RhdGUucGFyZW50U3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gUklHSFQgOiBM
RUZUKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0VGV4dEFsaWduKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigpKTsK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRBbGlnbihzdGF0ZS5wYXJlbnRTdHls
ZSgpLT50ZXh0QWxpZ24oKSk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3Jl
YXRlSGFuZGxlcigpCiAgICAgewpAQCAtMTEzMiw3ICsxMTM1LDcgQEAgcHVibGljOgogCiBjbGFz
cyBBcHBseVByb3BlcnR5VGV4dERlY29yYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
Q1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAg
RVRleHREZWNvcmF0aW9uIHQgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHREZWNvcmF0aW9uKCk7
CiAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSh2YWx1ZSk7IGkuaGFzTW9yZSgp
OyBpLmFkdmFuY2UoKSkgewpAQCAtMTE0MCw3ICsxMTQzLDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgQVNTRVJUKGl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSk7CiAgICAgICAgICAgICB0IHw9ICpz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwogICAgICAgICB9Ci0gICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHREZWNvcmF0aW9uKHQpOworICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRUZXh0RGVjb3JhdGlvbih0KTsKICAgICB9CiAgICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xMTUxLDcgKzExNTQsNyBA
QCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTExNjIsMTUgKzExNjUsMTUgQEAgcHVibGljOgogICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3JtYWwpCiAgICAgICAgICAgICBs
aW5lSGVpZ2h0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCk7CiAgICAgICAgIGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7Ci0gICAgICAgICAgICBkb3VibGUg
bXVsdGlwbGllciA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLSAg
ICAgICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT50ZXh0U2l6ZUFkanVzdCgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHN0eWxlUmVzb2x2ZXItPmRvY3Vt
ZW50KCktPmZyYW1lKCkpCisgICAgICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IHN0YXRlLnN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpLT50
ZXh0U2l6ZUFkanVzdCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHN0
YXRlLmRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxpZXIg
Kj0gZnJhbWUtPnRleHRab29tRmFjdG9yKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBs
aW5lSGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIG11bHRp
cGxpZXIpOworICAgICAgICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRl
TGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBt
dWx0aXBsaWVyKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50
YWdlKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBwZXJjZW50YWdlIHNob3VsZCBub3QgYmUg
cmVzdHJpY3RlZCB0byBhbiBpbnRlZ2VyIGhlcmUuCi0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0g
TGVuZ3RoKChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250U2l6ZSgpICogcHJpbWl0aXZlVmFs
dWUtPmdldEludFZhbHVlKCkpIC8gMTAwLCBGaXhlZCk7CisgICAgICAgICAgICBsaW5lSGVpZ2h0
ID0gTGVuZ3RoKChzdGF0ZS5zdHlsZSgpLT5mb250U2l6ZSgpICogcHJpbWl0aXZlVmFsdWUtPmdl
dEludFZhbHVlKCkpIC8gMTAwLCBGaXhlZCk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZl
VmFsdWUtPmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBudW1iZXIgYW5kIHBl
cmNlbnRhZ2UgdmFsdWVzIHNob3VsZCBwcm9kdWNlIHRoZSBzYW1lIHR5cGUgb2YgTGVuZ3RoIChp
ZS4gRml4ZWQgb3IgUGVyY2VudCkuCiAgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKHBy
aW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpICogMTAwLjAsIFBlcmNlbnQpOwpAQCAtMTE3
OCw3ICsxMTgxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2
ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRMaW5lSGVp
Z2h0KGxpbmVIZWlnaHQpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KGxp
bmVIZWlnaHQpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRs
ZXIoKQogICAgIHsKQEAgLTEyNjUsMTEgKzEyNjgsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqKSB7IH0KLSAgICBzdGF0aWMgdm9pZCBh
cHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKikgeyB9Ci0gICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0
VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJikgeyB9CisgICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJikgeyB9CisgICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRl
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5yZXNldFBhZ2VTaXplVHlwZSgpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5yZXNldFBhZ2VT
aXplVHlwZSgpOwogICAgICAgICBMZW5ndGggd2lkdGg7CiAgICAgICAgIExlbmd0aCBoZWlnaHQ7
CiAgICAgICAgIFBhZ2VTaXplVHlwZSBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfQVVUTzsKQEAg
LTEyODUsOCArMTI4OCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAvLyA8bGVuZ3RoPnsy
fQogICAgICAgICAgICAgICAgIGlmICghc2Vjb25kLT5pc0xlbmd0aCgpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgd2lkdGggPSBmaXJzdC0+Y29tcHV0ZUxl
bmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RF
bGVtZW50U3R5bGUoKSk7Ci0gICAgICAgICAgICAgICAgaGVpZ2h0ID0gc2Vjb25kLT5jb21wdXRl
TGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9v
dEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICB3aWR0aCA9IGZpcnN0LT5jb21wdXRl
TGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsK
KyAgICAgICAgICAgICAgICBoZWlnaHQgPSBzZWNvbmQtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihz
dGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOwogICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAvLyA8cGFnZS1zaXplPiA8b3JpZW50YXRpb24+CiAgICAg
ICAgICAgICAgICAgLy8gVGhlIHZhbHVlIG9yZGVyIGlzIGd1YXJhbnRlZWQuIFNlZSBDU1NQYXJz
ZXI6OnBhcnNlU2l6ZVBhcmFtZXRlci4KQEAgLTEzMDQsNyArMTMwNyw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewogICAgICAgICAgICAg
ICAgIC8vIDxsZW5ndGg+CiAgICAgICAgICAgICAgICAgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpF
X1JFU09MVkVEOwotICAgICAgICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gcHJpbWl0aXZlVmFs
dWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJl
c29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkpOworICAgICAgICAgICAgICAgIHdpZHRoID0gaGVp
Z2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAg
ICAgICAgICAgY2FzZSAwOgpAQCAtMTMzMCwyOSArMTMzMywyOSBAQCBwdWJsaWM6CiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0UGFnZVNpemVUeXBlKHBhZ2VTaXplVHlwZSk7Ci0gICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFBhZ2VTaXplKExlbmd0aFNpemUod2lkdGgsIGhl
aWdodCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRQYWdlU2l6ZVR5cGUocGFnZVNpemVU
eXBlKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UGFnZVNpemUoTGVuZ3RoU2l6ZSh3aWR0
aCwgaGVpZ2h0KSk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFu
ZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBs
eUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CiB9OwogCiBjbGFzcyBBcHBseVByb3BlcnR5
VGV4dEVtcGhhc2lzU3R5bGUgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJp
dFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRl
JiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRF
bXBoYXNpc0ZpbGwoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzRmls
bCgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFy
ayhzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNNYXJrKCkpOwotICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHN0
eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7Cisg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoc3RhdGUucGFyZW50U3R5
bGUoKS0+dGV4dEVtcGhhc2lzRmlsbCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4
dEVtcGhhc2lzTWFyayhzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNNYXJrKCkpOwor
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHN0YXRlLnBh
cmVudFN0eWxlKCktPnRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRF
bXBoYXNpc0ZpbGwoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRF
bXBoYXNpc01hcmsoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNNYXJrKCkpOwotICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKFJl
bmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzQ3VzdG9tTWFyaygpKTsKKyAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRF
bXBoYXNpc0ZpbGwoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01h
cmsoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNNYXJrKCkpOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKFJlbmRlclN0eWxlOjppbml0aWFs
VGV4dEVtcGhhc2lzQ3VzdG9tTWFyaygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFJl
c29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2
YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewogICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0g
c3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwpAQCAtMTM2NiwxMSArMTM2OSwxMSBA
QCBwdWJsaWM6CiAKICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwogICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUZpbGxlZCB8fCB2YWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZU9wZW4pCi0gICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoKnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbCgqdmFsdWUpOwogICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0
VGV4dEVtcGhhc2lzTWFyaygqdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKCp2YWx1ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51
bGxBdG9tKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3Rv
bU1hcmsobnVsbEF0b20pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTEz
NzksMjAgKzEzODIsMjAgQEAgcHVibGljOgogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAog
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoVGV4dEVtcGhhc2lzRmls
bEZpbGxlZCk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1w
aGFzaXNNYXJrKFRleHRFbXBoYXNpc01hcmtDdXN0b20pOwotICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhwcmltaXRpdmVWYWx1ZS0+
Z2V0U3RyaW5nVmFsdWUoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1w
aGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQpOworICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJrQ3VzdG9tKTsKKyAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsocHJpbWl0aXZl
VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9t
TWFyayhudWxsQXRvbSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1
c3RvbU1hcmsobnVsbEF0b20pOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSA9PSBDU1NWYWx1ZUZpbGxlZCB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBD
U1NWYWx1ZU9wZW4pIHsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRl
eHRFbXBoYXNpc0ZpbGwoKnByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFya0F1dG8pOwor
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbCgqcHJpbWl0aXZl
VmFsdWUpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhU
ZXh0RW1waGFzaXNNYXJrQXV0byk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGxG
aWxsZWQpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhh
c2lzTWFyaygqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
VGV4dEVtcGhhc2lzRmlsbChUZXh0RW1waGFzaXNGaWxsRmlsbGVkKTsKKyAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoKnByaW1pdGl2ZVZhbHVlKTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtMTQxNSwxNCArMTQxOCwxOCBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGJvb2wgdGVzdChjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbikgeyByZXR1cm4gKGFuaW1hdGlv
bi0+KnRlc3RGdW5jdGlvbikoKTsgfQogICAgIHN0YXRpYyB2b2lkIGNsZWFyKEFuaW1hdGlvbiog
YW5pbWF0aW9uKSB7IChhbmltYXRpb24tPipjbGVhckZ1bmN0aW9uKSgpOyB9CiAgICAgc3RhdGlj
IFQgaW5pdGlhbCgpIHsgcmV0dXJuICgqaW5pdGlhbEZ1bmN0aW9uKSgpOyB9Ci0gICAgc3RhdGlj
IHZvaWQgbWFwKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIEFuaW1hdGlvbiogYW5pbWF0
aW9uLCBDU1NWYWx1ZSogdmFsdWUpIHsgKHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPiptYXBG
dW5jdGlvbikoYW5pbWF0aW9uLCB2YWx1ZSk7IH0KKyAgICBzdGF0aWMgdm9pZCBtYXAoUmVzb2x2
ZVN0YXRlJiBzdGF0ZSwgQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIENTU1RvU3R5bGVNYXAgc3R5bGVNYXAoc3RhdGUpOworICAgICAgICAoc3R5
bGVNYXAuKm1hcEZ1bmN0aW9uKShhbmltYXRpb24sIHZhbHVlKTsKKyAgICB9CiAgICAgc3RhdGlj
IEFuaW1hdGlvbkxpc3QqIGFjY2Vzc0FuaW1hdGlvbnMoUmVuZGVyU3R5bGUqIHN0eWxlKSB7IHJl
dHVybiAoc3R5bGUtPiphbmltYXRpb25HZXR0ZXJGdW5jdGlvbikoKTsgfQogICAgIHN0YXRpYyBj
b25zdCBBbmltYXRpb25MaXN0KiBhbmltYXRpb25zKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1
cm4gKHN0eWxlLT4qaW1tdXRhYmxlQW5pbWF0aW9uR2V0dGVyRnVuY3Rpb24pKCk7IH0KIAotICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NT
UHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEFuaW1hdGlv
bkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpOwot
ICAgICAgICBjb25zdCBBbmltYXRpb25MaXN0KiBwYXJlbnRMaXN0ID0gYW5pbWF0aW9ucyhzdHls
ZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKTsKKyAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9
IGFjY2Vzc0FuaW1hdGlvbnMoc3RhdGUuc3R5bGUoKSk7CisgICAgICAgIGNvbnN0IEFuaW1hdGlv
bkxpc3QqIHBhcmVudExpc3QgPSBhbmltYXRpb25zKHN0YXRlLnBhcmVudFN0eWxlKCkpOwogICAg
ICAgICBzaXplX3QgaSA9IDAsIHBhcmVudFNpemUgPSBwYXJlbnRMaXN0ID8gcGFyZW50TGlzdC0+
c2l6ZSgpIDogMDsKICAgICAgICAgZm9yICggOyBpIDwgcGFyZW50U2l6ZSAmJiB0ZXN0KHBhcmVu
dExpc3QtPmFuaW1hdGlvbihpKSk7ICsraSkgewogICAgICAgICAgICAgaWYgKGxpc3QtPnNpemUo
KSA8PSBpKQpAQCAtMTQzNiw5ICsxNDQzLDkgQEAgcHVibGljOgogICAgICAgICAgICAgY2xlYXIo
bGlzdC0+YW5pbWF0aW9uKGkpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRp
YWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgQW5pbWF0aW9u
TGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSk7Cisg
ICAgICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0YXRlLnN0eWxl
KCkpOwogICAgICAgICBpZiAobGlzdC0+aXNFbXB0eSgpKQogICAgICAgICAgICAgbGlzdC0+YXBw
ZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOwogICAgICAgICBzZXRWYWx1ZShsaXN0LT5hbmltYXRp
b24oMCksIGluaXRpYWwoKSk7CkBAIC0xNDQ4LDIyICsxNDU1LDIyIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGNsZWFyKGxpc3QtPmFuaW1hdGlvbihpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAg
ICBBbmltYXRpb25MaXN0KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9ucyhzdHlsZVJlc29sdmVyLT5z
dHlsZSgpKTsKKyAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMo
c3RhdGUuc3R5bGUoKSk7CiAgICAgICAgIHNpemVfdCBjaGlsZEluZGV4ID0gMDsKICAgICAgICAg
aWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CiAgICAgICAgICAgICAvKiBXYWxrIGVhY2ggdmFs
dWUgYW5kIHB1dCBpdCBpbnRvIGFuIGFuaW1hdGlvbiwgY3JlYXRpbmcgbmV3IGFuaW1hdGlvbnMg
YXMgbmVlZGVkLiAqLwogICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0g
dmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewogICAgICAgICAgICAgICAgIGlmIChj
aGlsZEluZGV4IDw9IGxpc3QtPnNpemUoKSkKICAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBw
ZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOwotICAgICAgICAgICAgICAgIG1hcChzdHlsZVJlc29s
dmVyLCBsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksIGkudmFsdWUoKSk7CisgICAgICAgICAg
ICAgICAgbWFwKHN0YXRlLCBsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksIGkudmFsdWUoKSk7
CiAgICAgICAgICAgICAgICAgKytjaGlsZEluZGV4OwogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgaWYgKGxpc3QtPmlzRW1wdHkoKSkKICAgICAgICAgICAgICAg
ICBsaXN0LT5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7Ci0gICAgICAgICAgICBtYXAoc3R5
bGVSZXNvbHZlciwgbGlzdC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCB2YWx1ZSk7CisgICAgICAg
ICAgICBtYXAoc3RhdGUsIGxpc3QtPmFuaW1hdGlvbihjaGlsZEluZGV4KSwgdmFsdWUpOwogICAg
ICAgICAgICAgY2hpbGRJbmRleCA9IDE7CiAgICAgICAgIH0KICAgICAgICAgZm9yICggOyBjaGls
ZEluZGV4IDwgbGlzdC0+c2l6ZSgpOyArK2NoaWxkSW5kZXgpIHsKQEAgLTE0NzcsMjIgKzE0ODQs
MjIgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5T3V0bGluZVN0eWxlIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBw
bHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0
YXRlKQogICAgIHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPE91dGxpbmVJc0F1
dG8sICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVu
ZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0
eWxlOjppbml0aWFsT3V0bGluZVN0eWxlSXNBdXRvPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVy
dHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxF
Qm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZS
ZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVS
ZXNvbHZlcik7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRv
LCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRl
clN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHls
ZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5
SUQsIHN0YXRlKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEVCb3JkZXJTdHls
ZSwgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxl
OjpzZXRPdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9y
ZGVyU3R5bGU+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0
ZSkKICAgICB7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRv
LCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRl
clN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHls
ZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5
SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8RUJv
cmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVu
ZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6Omlu
aXRpYWxCb3JkZXJTdHlsZT46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVz
b2x2ZXIpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8T3V0bGluZUlzQXV0bywg
JlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJT
dHlsZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6
OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlE
LCBzdGF0ZSk7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFQm9yZGVyU3R5bGUs
ICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6
c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRl
clN0eWxlPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3Rh
dGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0
PE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5l
SXNBdXRvLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0
bywgJlJlbmRlclN0eWxlOjppbml0aWFsT3V0bGluZVN0eWxlSXNBdXRvPjo6YXBwbHlWYWx1ZShw
cm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlE
ZWZhdWx0PEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGUsIEVCb3JkZXJT
dHlsZSwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRl
clN0eWxlOjppbml0aWFsQm9yZGVyU3R5bGU+OjphcHBseVZhbHVlKHByb3BlcnR5SUQsIHN0eWxl
UmVzb2x2ZXIsIHZhbHVlKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8T3V0bGluZUlz
QXV0bywgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZS
ZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVy
U3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8+OjphcHBseVZhbHVlKHByb3BlcnR5SUQs
IHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVCb3JkZXJTdHls
ZSwgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxl
OjpzZXRPdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9y
ZGVyU3R5bGU+OjphcHBseVZhbHVlKHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1ZSk7CiAgICAgfQog
CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJv
cGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBw
bHlWYWx1ZSk7IH0KQEAgLTE1MDAsNyArMTUwNyw3IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQ
cm9wZXJ0eVJlc2l6ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUp
CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUm
IHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTEyLDEzICsxNTE5LDEz
IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBjYXNlIENTU1ZhbHVlQXV0bzoKLSAgICAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3Mg
PSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5zZXR0aW5ncygpKQorICAgICAgICAgICAgaWYg
KFNldHRpbmdzKiBzZXR0aW5ncyA9IHN0YXRlLmRvY3VtZW50KCktPnNldHRpbmdzKCkpCiAgICAg
ICAgICAgICAgICAgciA9IHNldHRpbmdzLT50ZXh0QXJlYXNBcmVSZXNpemFibGUoKSA/IFJFU0la
RV9CT1RIIDogUkVTSVpFX05PTkU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIHIgPSAqcHJpbWl0aXZlVmFsdWU7CiAgICAgICAgIH0KLSAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0UmVzaXplKHIpOworICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRSZXNpemUocik7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBj
cmVhdGVIYW5kbGVyKCkKQEAgLTE1MzAsNyArMTUzNyw3IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBw
bHlQcm9wZXJ0eVZlcnRpY2FsQWxpZ24gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFs
dWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVz
b2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTUzOCw5
ICsxNTQ1LDkgQEAgcHVibGljOgogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAogICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbigqcHJpbWl0aXZlVmFsdWUpOwor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ24oKnByaW1p
dGl2ZVZhbHVlKTsKIAotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRWZXJ0aWNh
bEFsaWduTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2Vy
Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBW
aWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHls
ZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVm
ZmVjdGl2ZVpvb20oKSkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFsaWdu
TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVy
c2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBWaWV3cG9y
dFBlcmNlbnRhZ2VDb252ZXJzaW9uPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0
eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpOwogICAgIH0KIAogICAgIHN0
YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC0xNTUyLDMyICsxNTU5LDMy
IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlvIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVl
KENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBpZiAo
IXN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmhhc0FzcGVjdFJhdGlvKCkpCisgICAgICAg
IGlmICghc3RhdGUucGFyZW50U3R5bGUoKS0+aGFzQXNwZWN0UmF0aW8oKSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0
aW8odHJ1ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlv
RGVub21pbmF0b3Ioc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+YXNwZWN0UmF0aW9EZW5v
bWluYXRvcigpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0
aW9OdW1lcmF0b3Ioc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+YXNwZWN0UmF0aW9OdW1l
cmF0b3IoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKHRydWUp
OworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKHN0YXRl
LnBhcmVudFN0eWxlKCktPmFzcGVjdFJhdGlvRGVub21pbmF0b3IoKSk7CisgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldEFzcGVjdFJhdGlvTnVtZXJhdG9yKHN0YXRlLnBhcmVudFN0eWxlKCktPmFz
cGVjdFJhdGlvTnVtZXJhdG9yKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5p
dGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0
YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhh
c0FzcGVjdFJhdGlvKFJlbmRlclN0eWxlOjppbml0aWFsSGFzQXNwZWN0UmF0aW8oKSk7Ci0gICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvRGVub21pbmF0b3IoUmVu
ZGVyU3R5bGU6OmluaXRpYWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKCkpOwotICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihSZW5kZXJTdHlsZTo6
aW5pdGlhbEFzcGVjdFJhdGlvTnVtZXJhdG9yKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRIYXNBc3BlY3RSYXRpbyhSZW5kZXJTdHlsZTo6aW5pdGlhbEhhc0FzcGVjdFJhdGlvKCkpOwor
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKFJlbmRlclN0
eWxlOjppbml0aWFsQXNwZWN0UmF0aW9EZW5vbWluYXRvcigpKTsKKyAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3IoUmVuZGVyU3R5bGU6OmluaXRpYWxBc3BlY3RS
YXRpb051bWVyYXRvcigpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1
ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0
ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlz
QXNwZWN0UmF0aW9WYWx1ZSgpKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRIYXNBc3BlY3RSYXRpbyhmYWxzZSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRIYXNBc3BlY3RSYXRpbyhmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgQ1NTQXNwZWN0UmF0aW9WYWx1ZSogYXNwZWN0UmF0aW9WYWx1ZSA9IHN0YXRpY19j
YXN0PENTU0FzcGVjdFJhdGlvVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKHRydWUpOwotICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKGFzcGVjdFJhdGlvVmFsdWUtPmRl
bm9taW5hdG9yVmFsdWUoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFz
cGVjdFJhdGlvTnVtZXJhdG9yKGFzcGVjdFJhdGlvVmFsdWUtPm51bWVyYXRvclZhbHVlKCkpOwor
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0cnVlKTsKKyAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihhc3BlY3RSYXRpb1ZhbHVl
LT5kZW5vbWluYXRvclZhbHVlKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRBc3BlY3RS
YXRpb051bWVyYXRvcihhc3BlY3RSYXRpb1ZhbHVlLT5udW1lcmF0b3JWYWx1ZSgpKTsKICAgICB9
CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtMTU4OCw0
OCArMTU5NSw0OCBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlab29tIHsKIHByaXZh
dGU6Ci0gICAgc3RhdGljIHZvaWQgcmVzZXRFZmZlY3RpdmVab29tKFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgcmVzZXRFZmZlY3RpdmVab29tKFJlc29sdmVT
dGF0ZSYgc3RhdGUpCiAgICAgewogICAgICAgICAvLyBSZXNldCB0aGUgem9vbSBpbiBlZmZlY3Qu
IFRoaXMgYWxsb3dzIHRoZSBzZXRab29tIG1ldGhvZCB0byBhY2N1cmF0ZWx5IGNvbXB1dGUgYSBu
ZXcgem9vbSBpbiBlZmZlY3QuCi0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEVmZmVjdGl2ZVpv
b20oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSA/IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAg
ICAgICAgc3RhdGUuc2V0RWZmZWN0aXZlWm9vbShzdGF0ZS5wYXJlbnRTdHlsZSgpID8gc3RhdGUu
cGFyZW50U3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpIDogUmVuZGVyU3R5bGU6OmluaXRpYWxab29t
KCkpOwogICAgIH0KIAogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0
ZSkKICAgICB7Ci0gICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKLSAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9vbShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgp
LT56b29tKCkpOworICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3RhdGUpOworICAgICAgICBz
dGF0ZS5zZXRab29tKHN0YXRlLnBhcmVudFN0eWxlKCktPnpvb20oKSk7CiAgICAgfQogCi0gICAg
c3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgcmVzZXRFZmZl
Y3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29t
KFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICAgICAgcmVzZXRFZmZlY3RpdmVab29t
KHN0YXRlKTsKKyAgICAgICAgc3RhdGUuc2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20o
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQodmFsdWUtPmlzUHJpbWl0aXZlVmFs
dWUoKSk7CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCiAgICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkgewotICAgICAgICAgICAgcmVz
ZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAgICAgICAgICByZXNl
dEVmZmVjdGl2ZVpvb20oc3RhdGUpOworICAgICAgICAgICAgc3RhdGUuc2V0Wm9vbShSZW5kZXJT
dHlsZTo6aW5pdGlhbFpvb20oKSk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVSZXNldCkgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c2V0RWZmZWN0aXZlWm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7Ci0gICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsK
KyAgICAgICAgICAgIHN0YXRlLnNldEVmZmVjdGl2ZVpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxa
b29tKCkpOworICAgICAgICAgICAgc3RhdGUuc2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpv
b20oKSk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVEb2N1bWVudCkgewotICAgICAgICAgICAgZmxvYXQgZG9jWm9vbSA9IHN0eWxlUmVz
b2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSA/IHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5
bGUoKS0+em9vbSgpIDogUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCk7Ci0gICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zZXRFZmZlY3RpdmVab29tKGRvY1pvb20pOwotICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c2V0Wm9vbShkb2Nab29tKTsKKyAgICAgICAgICAgIGZsb2F0IGRvY1pvb20g
PSBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkgPyBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCktPnpv
b20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpOworICAgICAgICAgICAgc3RhdGUuc2V0
RWZmZWN0aXZlWm9vbShkb2Nab29tKTsKKyAgICAgICAgICAgIHN0YXRlLnNldFpvb20oZG9jWm9v
bSk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKSB7
Ci0gICAgICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7CisgICAgICAg
ICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3RhdGUpOwogICAgICAgICAgICAgaWYgKGZsb2F0IHBl
cmNlbnQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKQotICAgICAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnNldFpvb20ocGVyY2VudCAvIDEwMC4wZik7CisgICAgICAgICAgICAg
ICAgc3RhdGUuc2V0Wm9vbShwZXJjZW50IC8gMTAwLjBmKTsKICAgICAgICAgfSBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgewotICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVa
b29tKHN0eWxlUmVzb2x2ZXIpOworICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0YXRl
KTsKICAgICAgICAgICAgIGlmIChmbG9hdCBudW1iZXIgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0Rmxv
YXRWYWx1ZSgpKQotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20obnVtYmVy
KTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zZXRab29tKG51bWJlcik7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTE2NDEsNDIgKzE2NDgsNDIgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3Bl
cnR5RGlzcGxheSB7CiBwcml2YXRlOgotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkRGlz
cGxheVZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIEVEaXNwbGF5IGRpc3BsYXlQ
cm9wZXJ0eVZhbHVlKQorICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkRGlzcGxheVZhbHVl
KFJlc29sdmVTdGF0ZSYgc3RhdGUsIEVEaXNwbGF5IGRpc3BsYXlQcm9wZXJ0eVZhbHVlKQogICAg
IHsKICNpZiBFTkFCTEUoU1ZHKQotICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgp
ICYmIHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkgJiYgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCisgICAgICAgIGlmIChzdGF0
ZS5lbGVtZW50KCkgJiYgc3RhdGUuZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0ZS5z
dHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETykKICAgICAgICAgICAgIHJldHVybiAoZGlz
cGxheVByb3BlcnR5VmFsdWUgPT0gSU5MSU5FIHx8IGRpc3BsYXlQcm9wZXJ0eVZhbHVlID09IEJM
T0NLIHx8IGRpc3BsYXlQcm9wZXJ0eVZhbHVlID09IE5PTkUpOwogI2Vsc2UKLSAgICAgICAgVU5V
U0VEX1BBUkFNKHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgICAgICBVTlVTRURfUEFSQU0oZGlzcGxheVByb3BlcnR5VmFsdWUpOwogI2VuZGlmCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFJlc29sdmVT
dGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBFRGlzcGxheSBkaXNwbGF5ID0gc3R5bGVSZXNv
bHZlci0+cGFyZW50U3R5bGUoKS0+ZGlzcGxheSgpOwotICAgICAgICBpZiAoIWlzVmFsaWREaXNw
bGF5VmFsdWUoc3R5bGVSZXNvbHZlciwgZGlzcGxheSkpCisgICAgICAgIEVEaXNwbGF5IGRpc3Bs
YXkgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5kaXNwbGF5KCk7CisgICAgICAgIGlmICghaXNWYWxp
ZERpc3BsYXlWYWx1ZShzdGF0ZSwgZGlzcGxheSkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldERpc3BsYXkoZGlzcGxheSk7CisgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldERpc3BsYXkoZGlzcGxheSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0
eUlELCBSZXNvbHZlU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0RGlzcGxheShSZW5kZXJTdHlsZTo6aW5pdGlhbERpc3BsYXkoKSk7CisgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldERpc3BsYXkoUmVuZGVyU3R5bGU6OmluaXRpYWxEaXNwbGF5
KCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEVEaXNwbGF5IGRpc3BsYXkgPSAq
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKLSAgICAgICAgaWYgKCFp
c1ZhbGlkRGlzcGxheVZhbHVlKHN0eWxlUmVzb2x2ZXIsIGRpc3BsYXkpKQorICAgICAgICBpZiAo
IWlzVmFsaWREaXNwbGF5VmFsdWUoc3RhdGUsIGRpc3BsYXkpKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldERpc3BsYXkoZGlzcGxheSk7
CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldERpc3BsYXkoZGlzcGxheSk7CiAgICAgfQogCiAg
ICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTE2ODksMjEgKzE2
OTYsMjEgQEAgdGVtcGxhdGUgPENsaXBQYXRoT3BlcmF0aW9uKiAoUmVuZGVyU3R5bGU6OipnZXR0
ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGUKIGNsYXNzIEFwcGx5UHJvcGVydHlDbGlw
UGF0aCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0
eWxlLCBQYXNzUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0
ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmIHN0
YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkgewogICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZh
bHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAg
ICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIDApOworICAgICAgICAg
ICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIDApOwogICAgICAgICAgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzU2hhcGUoKSkgewotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIFNoYXBlQ2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZShiYXNp
Y1NoYXBlRm9yVmFsdWUoc3R5bGVSZXNvbHZlciwgcHJpbWl0aXZlVmFsdWUtPmdldFNoYXBlVmFs
dWUoKSkpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBTaGFwZUNs
aXBQYXRoT3BlcmF0aW9uOjpjcmVhdGUoYmFzaWNTaGFwZUZvclZhbHVlKHN0YXRlLCBwcmltaXRp
dmVWYWx1ZS0+Z2V0U2hhcGVWYWx1ZSgpKSkpOwogICAgICAgICAgICAgfQogI2lmIEVOQUJMRShT
VkcpCiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgp
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5n
IGNzc1VSTFZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7Ci0gICAgICAg
ICAgICAgICAgS1VSTCB1cmwgPSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVS
TChjc3NVUkxWYWx1ZSk7CisgICAgICAgICAgICAgICAgS1VSTCB1cmwgPSBzdGF0ZS5kb2N1bWVu
dCgpLT5jb21wbGV0ZVVSTChjc3NVUkxWYWx1ZSk7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IEl0IGRvZXNuJ3Qgd29yayB3aXRoIGZvcndhcmQgb3IgZXh0ZXJuYWwgU1ZHIHJlZmVyZW5jZXMg
KHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA0MDUpCi0gICAg
ICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgUmVmZXJlbmNlQ2xp
cFBhdGhPcGVyYXRpb246OmNyZWF0ZShjc3NVUkxWYWx1ZSwgdXJsLmZyYWdtZW50SWRlbnRpZmll
cigpKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgUmVmZXJlbmNl
Q2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZShjc3NVUkxWYWx1ZSwgdXJsLmZyYWdtZW50SWRlbnRp
ZmllcigpKSk7CiAgICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgfQpAQCAtMTcyMCwxOCAr
MTcyNywxOCBAQCB0ZW1wbGF0ZSA8RXhjbHVzaW9uU2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoq
Z2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbgogY2xhc3MgQXBwbHlQcm9wZXJ0eUV4
Y2x1c2lvblNoYXBlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJT
dHlsZSogc3R5bGUsIFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gdmFsdWUpIHsgKHN0
eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2
ZVN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwog
ICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0
bykKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAwKTsK
KyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCAwKTsKICAgICAgICAgICAg
IC8vIEZJWE1FIEJ1ZyAxMDI1NzE6IExheW91dCBmb3IgdGhlIHZhbHVlICdvdXRzaWRlLXNoYXBl
JyBpcyBub3QgeWV0IGltcGxlbWVudGVkCiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU91dHNpZGVTaGFwZSkKLSAgICAgICAgICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBFeGNsdXNpb25TaGFwZVZhbHVlOjpj
cmVhdGVPdXRzaWRlVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5
bGUoKSwgRXhjbHVzaW9uU2hhcGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVlKCkpOwogICAgICAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzU2hhcGUoKSkgewotICAgICAgICAgICAg
ICAgIFJlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBzaGFwZSA9IEV4Y2x1c2lvblNoYXBlVmFs
dWU6OmNyZWF0ZVNoYXBlVmFsdWUoYmFzaWNTaGFwZUZvclZhbHVlKHN0eWxlUmVzb2x2ZXIsIHBy
aW1pdGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpKTsKLSAgICAgICAgICAgICAgICBzZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzaGFwZS5yZWxlYXNlKCkpOworICAgICAgICAgICAg
ICAgIFJlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBzaGFwZSA9IEV4Y2x1c2lvblNoYXBlVmFs
dWU6OmNyZWF0ZVNoYXBlVmFsdWUoYmFzaWNTaGFwZUZvclZhbHVlKHN0YXRlLCBwcmltaXRpdmVW
YWx1ZS0+Z2V0U2hhcGVWYWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUu
c3R5bGUoKSwgc2hhcGUucmVsZWFzZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KQEAgLTE3NDYsMjEgKzE3NTMsMjEgQEAgcHVibGljOgogI2lmIEVOQUJMRShDU1NfSU1BR0Vf
UkVTT0xVVElPTikKIGNsYXNzIEFwcGx5UHJvcGVydHlJbWFnZVJlc29sdXRpb24gewogcHVibGlj
OgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3Rh
dGUpCiAgICAgewotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0
aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNv
bHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1h
Z2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25T
b3VyY2U+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAg
ICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5k
ZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRl
clN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVu
ZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25TbmFwPjo6YXBwbHlJbmhlcml0VmFsdWUo
cHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0
QmFzZTxmbG9hdCwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVy
U3R5bGU6OnNldEltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbElt
YWdlUmVzb2x1dGlvbj46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2
ZXIpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU291
cmNlLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9u
U291cmNlLCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNv
bHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25Tb3VyY2U+
OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIEFwcGx5UHJv
cGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmltYWdl
UmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6c2V0SW1h
Z2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbml0
aWFsSW1hZ2VSZXNvbHV0aW9uU25hcD46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0
YXRlKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPGZsb2F0LCAmUmVuZGVyU3R5
bGU6OmltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0
aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uPjo6YXBwbHlJ
bmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAg
ICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVy
U3R5bGU6OmltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVu
ZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNl
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25Tb3VyY2U+OjphcHBseUluaXRp
YWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgQXBwbHlQcm9wZXJ0
eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNv
bHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJl
c29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJ
bWFnZVJlc29sdXRpb25TbmFwPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVS
ZXNvbHZlcik7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxmbG9hdCwgJlJlbmRl
clN0eWxlOjppbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVz
b2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvbj46OmFw
cGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBBcHBs
eVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6
OmltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5
bGU6OnNldEltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVu
ZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25Tb3VyY2U+OjphcHBseUluaXRpYWxWYWx1
ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJ
bWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNuYXAsIElt
YWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU25hcCwg
SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9u
U25hcD46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgQXBw
bHlQcm9wZXJ0eURlZmF1bHRCYXNlPGZsb2F0LCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlv
biwgZmxvYXQsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRl
clN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVy
dHlJRCwgc3RhdGUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgUmVzb2x2ZVN0YXRlJiBz
dGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1
ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE3ODAsOSArMTc4Nyw5IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXNvbHV0aW9uID0gcHJpbWl0
aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWCk7CiAg
ICAgICAgIH0KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0
aW9uU291cmNlKHNvdXJjZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldElt
YWdlUmVzb2x1dGlvblNuYXAoc25hcCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldEltYWdlUmVzb2x1dGlvbihyZXNvbHV0aW9uKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlKHNvdXJjZSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldEltYWdlUmVzb2x1dGlvblNuYXAoc25hcCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dEltYWdlUmVzb2x1dGlvbihyZXNvbHV0aW9uKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVy
dHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5oCmluZGV4
IDRmZmU4NTIzNGMxM2QwZmJiMTQ0NmUwNjg4MWM5ZjdmZWZjNzA2N2IuLmE1YzYyZTE0ZTcwYzk2
ZDAyMzdjZDNjYTM2MTQwYzNlZjk4N2YzYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZUJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmgK
QEAgLTMyLDE5ICszMiwyMCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU1NWYWx1
ZTsKK2NsYXNzIFJlc29sdmVTdGF0ZTsKIGNsYXNzIFN0eWxlQnVpbGRlcjsKIGNsYXNzIFN0eWxl
UmVzb2x2ZXI7CiAKIGNsYXNzIFByb3BlcnR5SGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdHlwZWRl
ZiB2b2lkICgqSW5oZXJpdEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKik7
Ci0gICAgdHlwZWRlZiB2b2lkICgqSW5pdGlhbEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKik7Ci0gICAgdHlwZWRlZiB2b2lkICgqQXBwbHlGdW5jdGlvbikoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciosIENTU1ZhbHVlKik7CisgICAgdHlwZWRlZiB2b2lkICgqSW5o
ZXJpdEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBSZXNvbHZlU3RhdGUmKTsKKyAgICB0eXBlZGVm
IHZvaWQgKCpJbml0aWFsRnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYpOwor
ICAgIHR5cGVkZWYgdm9pZCAoKkFwcGx5RnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIFJlc29sdmVT
dGF0ZSYsIENTU1ZhbHVlKik7CiAgICAgUHJvcGVydHlIYW5kbGVyKCkgOiBtX2luaGVyaXQoMCks
IG1faW5pdGlhbCgwKSwgbV9hcHBseSgwKSB7IH0KICAgICBQcm9wZXJ0eUhhbmRsZXIoSW5oZXJp
dEZ1bmN0aW9uIGluaGVyaXQsIEluaXRpYWxGdW5jdGlvbiBpbml0aWFsLCBBcHBseUZ1bmN0aW9u
IGFwcGx5KSA6IG1faW5oZXJpdChpbmhlcml0KSwgbV9pbml0aWFsKGluaXRpYWwpLCBtX2FwcGx5
KGFwcGx5KSB7IH0KLSAgICB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikgY29uc3QgeyBBU1NFUlQobV9p
bmhlcml0KTsgKCptX2luaGVyaXQpKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOyB9Ci0gICAg
dm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIGNvbnN0IHsgQVNTRVJUKG1faW5pdGlhbCk7ICgqbV9pbml0
aWFsKShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsgfQotICAgIHZvaWQgYXBwbHlWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkgY29uc3QgeyBBU1NFUlQobV9hcHBseSk7ICgqbV9hcHBseSkocHJvcGVy
dHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOyB9CisgICAgdm9pZCBhcHBseUluaGVyaXRWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUpIGNvbnN0IHsg
QVNTRVJUKG1faW5oZXJpdCk7ICgqbV9pbmhlcml0KShwcm9wZXJ0eUlELCBzdGF0ZSk7IH0KKyAg
ICB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgUmVzb2x2
ZVN0YXRlJiBzdGF0ZSkgY29uc3QgeyBBU1NFUlQobV9pbml0aWFsKTsgKCptX2luaXRpYWwpKHBy
b3BlcnR5SUQsIHN0YXRlKTsgfQorICAgIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIFJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkgY29uc3QgeyBB
U1NFUlQobV9hcHBseSk7ICgqbV9hcHBseSkocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsgfQog
ICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5oZXJpdCAmJiBtX2luaXRpYWwg
JiYgbV9hcHBseTsgfQogICAgIEluaGVyaXRGdW5jdGlvbiBpbmhlcml0RnVuY3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX2luaGVyaXQ7IH0KICAgICBJbml0aWFsRnVuY3Rpb24gaW5pdGlhbEZ1bmN0
aW9uKCkgeyByZXR1cm4gbV9pbml0aWFsOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5j
cHAKaW5kZXggNjg3YjM2OTMxMTJlMjE3NDQwM2ZjODc1N2ExNzAwZWQ4YjRhOTM5Ni4uM2FiMGE4
MDViNGYyYTJmMjU5ZjcwMTZhYjdjNzcxNDNkYmE4YjEwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmNwcApAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZh
bHVlTWFwcGluZ3MuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAi
Q1NTUmVmbGVjdFZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKICNpbmNsdWRlICJD
U1NTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgogI2luY2x1ZGUgIkNT
U1N0eWxlUnVsZS5oIgpAQCAtMTIyLDYgKzEyMSw3IEBACiAjaW5jbHVkZSAiU3R5bGVSdWxlSW1w
b3J0LmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAjaW5jbHVkZSAiU3R5bGVT
aGVldExpc3QuaCIKKyNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiVGV4dC5o
IgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiVHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uLmgiCkBAIC0yMDAsMTQgKzIwMCwxNCBAQCB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwogCiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlm
IChpc0luaGVyaXQpIHsgXAotICAgIG1fc3R5bGUtPnNldCMjUHJvcChtX3BhcmVudFN0eWxlLT5w
cm9wKCkpOyBcCisgICAgc3RhdGUuc3R5bGUoKS0+c2V0IyNQcm9wKHN0YXRlLnBhcmVudFN0eWxl
KCktPnByb3AoKSk7ICAgICAgXAogICAgIHJldHVybjsgXAogfQogCiAjZGVmaW5lIEhBTkRMRV9J
TkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKIEhBTkRMRV9JTkhFUklUKHByb3AsIFBy
b3ApIFwKIGlmIChpc0luaXRpYWwpIHsgXAotICAgIG1fc3R5bGUtPnNldCMjUHJvcChSZW5kZXJT
dHlsZTo6aW5pdGlhbCMjUHJvcCgpKTsgXAorICAgIHN0YXRlLnN0eWxlKCktPnNldCMjUHJvcChS
ZW5kZXJTdHlsZTo6aW5pdGlhbCMjUHJvcCgpKTsgICAgIFwKICAgICByZXR1cm47IFwKIH0KIApA
QCAtMjY5LDM1ICsyNjksMTUgQEAgc3RhdGljIFN0eWxlUHJvcGVydHlTZXQqIHJpZ2h0VG9MZWZ0
RGVjbGFyYXRpb24oKQogCiAKIFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQq
IGRvY3VtZW50LCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICA6IG1faGFzVUFB
cHBlYXJhbmNlKGZhbHNlKQotICAgICwgbV9iYWNrZ3JvdW5kRGF0YShCYWNrZ3JvdW5kRmlsbExh
eWVyKQotICAgICwgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VMYXN0U3dl
ZXAoMCkKKyAgICA6IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3
ZWVwKDApCiAgICAgLCBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyKHRoaXMsICZT
dHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpCiAgICAgLCBtX2RvY3Vt
ZW50KGRvY3VtZW50KQotICAgICwgbV9zZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQpCi0gICAgLCBt
X3BhcmVudFN0eWxlKDApCi0gICAgLCBtX3Jvb3RFbGVtZW50U3R5bGUoMCkKLSAgICAsIG1fZWxl
bWVudCgwKQotICAgICwgbV9zdHlsZWRFbGVtZW50KDApCi0gICAgLCBtX3JlZ2lvbkZvclN0eWxp
bmcoMCkKLSAgICAsIG1fZWxlbWVudExpbmtTdGF0ZShOb3RJbnNpZGVMaW5rKQotICAgICwgbV9w
YXJlbnROb2RlKDApCi0gICAgLCBtX2xpbmVIZWlnaHRWYWx1ZSgwKQotICAgICwgbV9mb250RGly
dHkoZmFsc2UpCiAgICAgLCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyhtYXRjaEF1dGhvckFu
ZFVzZXJTdHlsZXMpCi0gICAgLCBtX3NhbWVPcmlnaW5Pbmx5KGZhbHNlKQotICAgICwgbV9kaXN0
cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQoZmFsc2UpCiAgICAgLCBtX2ZvbnRTZWxlY3RvcihDU1NG
b250U2VsZWN0b3I6OmNyZWF0ZShkb2N1bWVudCkpCiAjaWYgRU5BQkxFKENTU19ERVZJQ0VfQURB
UFRBVElPTikKICAgICAsIG1fdmlld3BvcnRTdHlsZVJlc29sdmVyKFZpZXdwb3J0U3R5bGVSZXNv
bHZlcjo6Y3JlYXRlKGRvY3VtZW50KSkKICNlbmRpZgotICAgICwgbV9hcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGUodHJ1ZSkKLSAgICAsIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZShmYWxzZSkKICAgICAsIG1fc3R5bGVCdWlsZGVyKFN0eWxlQnVpbGRlcjo6c2hhcmVkU3R5bGVC
dWlsZGVyKCkpCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgICwgbV9oYXNQZW5kaW5nU2hh
ZGVycyhmYWxzZSkKLSNlbmRpZgotICAgICwgbV9zdHlsZU1hcCh0aGlzKQogewogICAgIEVsZW1l
bnQqIHJvb3QgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CiAKQEAgLTY1NywxMDAgKzYz
NywxMDIgQEAgaW5saW5lIGJvb2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1
bGVzKCkKIAogYm9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6bV9tYXRjaGluZ1VBUnVsZXMgPSBm
YWxzZTsKIAotdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBN
YXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVJhbmdlJiBydWxlUmFuZ2UpCit2b2lkIFN0
eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzKFJ1bGVTZXQqIHJ1bGVTZXQsIFJlc29s
dmVTdGF0ZSYgc3RhdGUsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlLCBjb25zdCBDb250YWluZXJOb2Rl
KiBzY29wZSkKIHsKLSAgICBBU1NFUlQobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQpOwotICAgIEFTU0VS
VChtX2VsZW1lbnQpOworICAgIEFTU0VSVChydWxlU2V0KTsKKyAgICBBU1NFUlQoc3RhdGUuZWxl
bWVudCgpKTsKIAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHNldWRvSWQgPSBtX2VsZW1lbnQt
PnNoYWRvd1BzZXVkb0lkKCk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRlLmVsZW1lbnQo
KTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHBzZXVkb0lkID0gZWxlbWVudC0+c2hhZG93UHNl
dWRvSWQoKTsKICAgICBpZiAoIXBzZXVkb0lkLmlzRW1wdHkoKSkgewotICAgICAgICBBU1NFUlQo
bV9zdHlsZWRFbGVtZW50KTsKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1h
dGNoUmVxdWVzdC5ydWxlU2V0LT5zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMocHNldWRvSWQuaW1w
bCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgICAgICBBU1NFUlQoZWxlbWVudC0+
aXNTdHlsZWRFbGVtZW50KCkpOworICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qo
cnVsZVNldC0+c2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKHBzZXVkb0lkLmltcGwoKSksIHN0YXRl
LCBydWxlUmFuZ2UsIHNjb3BlKTsKICAgICB9CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0g
ICAgaWYgKG1fZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYgdG9XZWJWVFRFbGVtZW50KG1f
ZWxlbWVudCktPndlYlZUVE5vZGVUeXBlKCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+Y3VlUHNldWRvUnVsZXMoKSwgbWF0Y2hSZXF1
ZXN0LCBydWxlUmFuZ2UpOworICAgIGlmIChlbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiB0
b1dlYlZUVEVsZW1lbnQoZWxlbWVudCktPndlYlZUVE5vZGVUeXBlKCkpCisgICAgICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlU2V0LT5jdWVQc2V1ZG9SdWxlcygpLCBzdGF0ZSwg
cnVsZVJhbmdlLCBzY29wZSk7CiAjZW5kaWYKICAgICAvLyBDaGVjayB3aGV0aGVyIG90aGVyIHR5
cGVzIG9mIHJ1bGVzIGFyZSBhcHBsaWNhYmxlIGluIHRoZSBjdXJyZW50IHRyZWUgc2NvcGUuIENy
aXRlcmlhIGZvciB0aGlzOgogICAgIC8vIGEpIGl0J3MgYSBVQSBydWxlCiAgICAgLy8gYikgdGhl
IHRyZWUgc2NvcGUgYWxsb3dzIGF1dGhvciBydWxlcwogICAgIC8vIGMpIHRoZSBydWxlcyBjb21l
cyBmcm9tIGEgc2NvcGVkIHN0eWxlIHNoZWV0IHdpdGhpbiB0aGUgc2FtZSB0cmVlIHNjb3BlCi0g
ICAgVHJlZVNjb3BlKiB0cmVlU2NvcGUgPSBtX2VsZW1lbnQtPnRyZWVTY29wZSgpOworICAgIFRy
ZWVTY29wZSogdHJlZVNjb3BlID0gZWxlbWVudC0+dHJlZVNjb3BlKCk7CiAgICAgaWYgKCFNYXRj
aGluZ1VBUnVsZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQogICAgICAgICAmJiAhdHJlZVNj
b3BlLT5hcHBseUF1dGhvclN0eWxlcygpCi0gICAgICAgICYmICghbWF0Y2hSZXF1ZXN0LnNjb3Bl
IHx8IG1hdGNoUmVxdWVzdC5zY29wZS0+dHJlZVNjb3BlKCkgIT0gdHJlZVNjb3BlKSkKKyAgICAg
ICAgJiYgKCFzY29wZSB8fCBzY29wZS0+dHJlZVNjb3BlKCkgIT0gdHJlZVNjb3BlKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gV2UgbmVlZCB0byBjb2xsZWN0IHRoZSBydWxlcyBmb3IgaWQs
IGNsYXNzLCB0YWcsIGFuZCBldmVyeXRoaW5nIGVsc2UgaW50byBhIGJ1ZmZlciBhbmQKICAgICAv
LyB0aGVuIHNvcnQgdGhlIGJ1ZmZlci4KLSAgICBpZiAobV9lbGVtZW50LT5oYXNJRCgpKQotICAg
ICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmlk
UnVsZXMobV9lbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSksIG1hdGNoUmVx
dWVzdCwgcnVsZVJhbmdlKTsKLSAgICBpZiAobV9zdHlsZWRFbGVtZW50ICYmIG1fc3R5bGVkRWxl
bWVudC0+aGFzQ2xhc3MoKSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3R5
bGVkRWxlbWVudC0+Y2xhc3NOYW1lcygpLnNpemUoKTsgKytpKQotICAgICAgICAgICAgY29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5jbGFzc1J1bGVzKG1f
c3R5bGVkRWxlbWVudC0+Y2xhc3NOYW1lcygpW2ldLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVs
ZVJhbmdlKTsKKyAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSkKKyAgICAgICAgY29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JMaXN0KHJ1bGVTZXQtPmlkUnVsZXMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29s
dXRpb24oKS5pbXBsKCkpLCBzdGF0ZSwgcnVsZVJhbmdlLCBzY29wZSk7CisgICAgaWYgKHN0YXRl
LnN0eWxlZEVsZW1lbnQoKSAmJiBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmhhc0NsYXNzKCkpIHsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmNs
YXNzTmFtZXMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yTGlzdChydWxlU2V0LT5jbGFzc1J1bGVzKHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+Y2xhc3NO
YW1lcygpW2ldLmltcGwoKSksIHN0YXRlLCBydWxlUmFuZ2UsIHNjb3BlKTsKICAgICB9CiAKLSAg
ICBpZiAobV9lbGVtZW50LT5pc0xpbmsoKSkKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNG
b3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5saW5rUHNldWRvQ2xhc3NSdWxlcygpLCBtYXRj
aFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1hdGNoZXNG
b2N1c1BzZXVkb0NsYXNzKG1fZWxlbWVudCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCksIG1h
dGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qo
bWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPnRhZ1J1bGVzKG1fZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1w
bCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+dW5pdmVyc2FsUnVsZXMoKSwgbWF0Y2hSZXF1
ZXN0LCBydWxlUmFuZ2UpOworICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSkKKyAgICAgICAgY29s
bGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVTZXQtPmxpbmtQc2V1ZG9DbGFzc1J1bGVzKCks
IHN0YXRlLCBydWxlUmFuZ2UsIHNjb3BlKTsKKyAgICBpZiAobWF0Y2hlc0ZvY3VzUHNldWRvQ2xh
c3MoZWxlbWVudCkpCisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlU2V0
LT5mb2N1c1BzZXVkb0NsYXNzUnVsZXMoKSwgc3RhdGUsIHJ1bGVSYW5nZSwgc2NvcGUpOworICAg
IGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlU2V0LT50YWdSdWxlcyhlbGVtZW50LT5s
b2NhbE5hbWUoKS5pbXBsKCkpLCBzdGF0ZSwgcnVsZVJhbmdlLCBzY29wZSk7CisgICAgY29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVTZXQtPnVuaXZlcnNhbFJ1bGVzKCksIHN0YXRlLCBy
dWxlUmFuZ2UsIHNjb3BlKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hp
bmdSdWxlc0ZvclJlZ2lvbihjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVJh
bmdlJiBydWxlUmFuZ2UpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yUmVnaW9uKFJ1bGVTZXQqIHJ1bGVTZXQsIFJlc29sdmVTdGF0ZSYgc3RhdGUsIFJ1bGVSYW5n
ZSYgcnVsZVJhbmdlLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKIHsKLSAgICBpZiAoIW1f
cmVnaW9uRm9yU3R5bGluZykKKyAgICBpZiAoIXN0YXRlLnJlZ2lvbkZvclN0eWxpbmcoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgdW5zaWduZWQgc2l6ZSA9IG1hdGNoUmVxdWVzdC5ydWxlU2V0
LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKKyAgICBFbGVtZW50KiByZWdp
b25TdHlsaW5nRWxlbWVudCA9IHRvRWxlbWVudChzdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCktPm5v
ZGUoKSk7CisgICAgdW5zaWduZWQgc2l6ZSA9IHJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5k
UnVsZVNldHMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKLSAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yID0gbWF0Y2hSZXF1
ZXN0LnJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkuc2VsZWN0b3I7
Ci0gICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKHJlZ2lvblNlbGVjdG9yLCBzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obV9yZWdpb25Gb3JTdHlsaW5nLT5ub2RlKCkpKSkgewotICAgICAgICAg
ICAgUnVsZVNldCogcmVnaW9uUnVsZXMgPSBtYXRjaFJlcXVlc3QucnVsZVNldC0+bV9yZWdpb25T
ZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5ydWxlU2V0LmdldCgpOworICAgICAgICBjb25zdCBD
U1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IgPSBydWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0Fu
ZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9yOworICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3Rv
cihyZWdpb25TZWxlY3RvciwgcmVnaW9uU3R5bGluZ0VsZW1lbnQpKSB7CisgICAgICAgICAgICBS
dWxlU2V0KiByZWdpb25SdWxlcyA9IHJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNl
dHMuYXQoaSkucnVsZVNldC5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVChyZWdpb25SdWxlcyk7
Ci0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QocmVnaW9uUnVs
ZXMsIG1hdGNoUmVxdWVzdC5pbmNsdWRlRW1wdHlSdWxlcywgbWF0Y2hSZXF1ZXN0LnNjb3BlKSwg
cnVsZVJhbmdlKTsKKyAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJlZ2lvblJ1bGVz
LCBzdGF0ZSwgcnVsZVJhbmdlLCBzY29wZSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQg
U3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0JiBy
ZXN1bHQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhS
ZXNvbHZlU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0KQogewotICAgIGlmIChtX21h
dGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgaWYgKHN0YXRlLm1hdGNoZWRSdWxlcygpLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc29ydE1hdGNoZWRSdWxlcygpOworICAgIHNv
cnRNYXRjaGVkUnVsZXMoc3RhdGUubWF0Y2hlZFJ1bGVzKCkpOwogCi0gICAgaWYgKG1fc2VsZWN0
b3JDaGVja2VyLm1vZGUoKSA9PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcykgewot
ICAgICAgICBpZiAoIW1fcnVsZUxpc3QpCi0gICAgICAgICAgICBtX3J1bGVMaXN0ID0gU3RhdGlj
Q1NTUnVsZUxpc3Q6OmNyZWF0ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX3J1bGVMaXN0LT5ydWxl
cygpLmFwcGVuZChtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5jcmVhdGVDU1NPTVdyYXBwZXIo
KSk7CisgICAgaWYgKHN0YXRlLm1vZGUoKSA9PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdS
dWxlcykgeworICAgICAgICAvLyBTaG91bGQgbW92ZSBydWxlTGlzdCBmcm9tIHN0YXRlIHRvIHJl
c3VsdD8KKyAgICAgICAgU3RhdGljQ1NTUnVsZUxpc3QqIHJ1bGVMaXN0ID0gc3RhdGUuZW5zdXJl
UnVsZUxpc3QoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLm1hdGNo
ZWRSdWxlcygpLnNpemUoKTsgKytpKQorICAgICAgICAgICAgcnVsZUxpc3QtPnJ1bGVzKCkuYXBw
ZW5kKHN0YXRlLm1hdGNoZWRSdWxlQXQoaSktPnJ1bGUoKS0+Y3JlYXRlQ1NTT01XcmFwcGVyKCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gTm93IHRyYW5zZmVyIHRoZSBzZXQg
b2YgbWF0Y2hlZCBydWxlcyBvdmVyIHRvIG91ciBsaXN0IG9mIGRlY2xhcmF0aW9ucy4KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsKLSAg
ICAgICAgaWYgKG1fc3R5bGUgJiYgbV9tYXRjaGVkUnVsZXNbaV0tPmNvbnRhaW5zVW5jb21tb25B
dHRyaWJ1dGVTZWxlY3RvcigpKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0VW5pcXVlKCk7Ci0g
ICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgbV9tYXRjaGVkUnVsZXNbaV0tPnJ1
bGUoKS0+cHJvcGVydGllcygpLCBtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLCBtX21hdGNoZWRS
dWxlc1tpXS0+bGlua01hdGNoVHlwZSgpLCBtX21hdGNoZWRSdWxlc1tpXS0+cHJvcGVydHlXaGl0
ZWxpc3RUeXBlKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5tYXRjaGVk
UnVsZXMoKS5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoc3RhdGUuc3R5bGUoKSAmJiBzdGF0
ZS5tYXRjaGVkUnVsZUF0KGkpLT5jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFVuaXF1ZSgpOworICAgICAgICBhZGRNYXRj
aGVkUHJvcGVydGllcyhyZXN1bHQsIHN0YXRlLm1hdGNoZWRSdWxlQXQoaSktPnJ1bGUoKS0+cHJv
cGVydGllcygpLCBzdGF0ZS5tYXRjaGVkUnVsZUF0KGkpLT5ydWxlKCksIHN0YXRlLm1hdGNoZWRS
dWxlQXQoaSktPmxpbmtNYXRjaFR5cGUoKSwgc3RhdGUubWF0Y2hlZFJ1bGVBdChpKS0+cHJvcGVy
dHlXaGl0ZWxpc3RUeXBlKCkpOwogICAgIH0KIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjptYXRj
aFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5
UnVsZXMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoUmVzb2x2
ZVN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCkKIHsKICNpZiBFTkFCTEUoU1RZTEVf
U0NPUEVEKSB8fCBFTkFCTEUoU0hBRE9XX0RPTSkKICAgICBpZiAoIW1fc2NvcGVSZXNvbHZlcikK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gTWF0Y2ggc2NvcGVkIGF1dGhvciBydWxlcyBieSB0
cmF2ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVudCBzdGFjayAocmVidWlsZCBpdCBpZiBpdCBnb3Qg
aW5jb25zaXN0ZW50KS4KLSAgICBpZiAobV9zY29wZVJlc29sdmVyLT5oYXNTY29wZWRTdHlsZXMo
KSAmJiBtX3Njb3BlUmVzb2x2ZXItPmVuc3VyZVN0YWNrQ29uc2lzdGVuY3kobV9lbGVtZW50KSkg
ewotICAgICAgICBib29sIGFwcGx5QXV0aG9yU3R5bGVzID0gbV9lbGVtZW50LT50cmVlU2NvcGUo
KS0+YXBwbHlBdXRob3JTdHlsZXMoKTsKKyAgICBpZiAobV9zY29wZVJlc29sdmVyLT5oYXNTY29w
ZWRTdHlsZXMoKSAmJiBtX3Njb3BlUmVzb2x2ZXItPmVuc3VyZVN0YWNrQ29uc2lzdGVuY3koc3Rh
dGUuZWxlbWVudCgpKSkgeworICAgICAgICBib29sIGFwcGx5QXV0aG9yU3R5bGVzID0gc3RhdGUu
ZWxlbWVudCgpLT50cmVlU2NvcGUoKS0+YXBwbHlBdXRob3JTdHlsZXMoKTsKICAgICAgICAgYm9v
bCBkb2N1bWVudFNjb3BlID0gdHJ1ZTsKICAgICAgICAgdW5zaWduZWQgc2NvcGVTaXplID0gbV9z
Y29wZVJlc29sdmVyLT5zdGFja1NpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNjb3BlU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigp
OworICAgICAgICAgICAgc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKICAgICAgICAgICAg
IHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMu
c2l6ZSgpIC0gMTsKIAogICAgICAgICAgICAgY29uc3QgU3R5bGVTY29wZVJlc29sdmVyOjpTdGFj
a0ZyYW1lJiBmcmFtZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tGcmFtZUF0KGkpOwpAQCAtNzYz
LDEzNyArNzQ1LDEzMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVs
ZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdAogICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgTWF0Y2hSZXF1ZXN0
IG1hdGNoUmVxdWVzdChmcmFtZS5tX3J1bGVTZXQsIGluY2x1ZGVFbXB0eVJ1bGVzLCBmcmFtZS5t
X3Njb3BlKTsKICAgICAgICAgICAgIFJ1bGVSYW5nZSBydWxlUmFuZ2UgPSByZXN1bHQucmFuZ2Vz
LmF1dGhvclJ1bGVSYW5nZSgpOwotICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0
Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNG
b3JSZWdpb24obWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgICAgICAgICAgc29ydEFuZFRy
YW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7CisgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdS
dWxlcyhmcmFtZS5tX3J1bGVTZXQsIHN0YXRlLCBydWxlUmFuZ2UsIGZyYW1lLm1fc2NvcGUpOwor
ICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oZnJhbWUubV9ydWxlU2V0
LCBzdGF0ZSwgcnVsZVJhbmdlLCBmcmFtZS5tX3Njb3BlKTsKKyAgICAgICAgICAgIHNvcnRBbmRU
cmFuc2Zlck1hdGNoZWRSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIG1hdGNoSG9zdFJ1bGVzKHJlc3VsdCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIG1hdGNo
SG9zdFJ1bGVzKHN0YXRlLCByZXN1bHQpOwogI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOwotICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlRW1w
dHlSdWxlcyk7CiAjZW5kaWYKIH0KIAotaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVT
aGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcygpCitpbmxpbmUgYm9vbCBTdHlsZVJlc29s
dmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKEVsZW1lbnQqIGVsZW1l
bnQpCiB7CiAjaWYgRU5BQkxFKFNIQURPV19ET00pCi0gICAgcmV0dXJuIG1fc2NvcGVSZXNvbHZl
ciAmJiBtX3Njb3BlUmVzb2x2ZXItPnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVs
ZXMobV9lbGVtZW50KTsKKyAgICByZXR1cm4gbV9zY29wZVJlc29sdmVyICYmIG1fc2NvcGVSZXNv
bHZlci0+c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhlbGVtZW50KTsKICNl
bHNlCiAgICAgcmV0dXJuIGZhbHNlOworICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKICNlbmRp
ZgogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiBy
ZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNo
SG9zdFJ1bGVzKFJlc29sdmVTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQpCiB7CiAj
aWYgRU5BQkxFKFNIQURPV19ET00pCiAgICAgQVNTRVJUKG1fc2NvcGVSZXNvbHZlcik7CiAKLSAg
ICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIHN0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFy
KCk7CiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJv
cGVydGllcy5zaXplKCkgLSAxOwogCiAgICAgVmVjdG9yPFJ1bGVTZXQqPiBtYXRjaGVkUnVsZXM7
Ci0gICAgbV9zY29wZVJlc29sdmVyLT5tYXRjaEhvc3RSdWxlcyhtX2VsZW1lbnQsIG1hdGNoZWRS
dWxlcyk7CisgICAgbV9zY29wZVJlc29sdmVyLT5tYXRjaEhvc3RSdWxlcyhzdGF0ZS5lbGVtZW50
KCksIG1hdGNoZWRSdWxlcyk7CiAgICAgaWYgKG1hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGNoZWRSdWxlcy5zaXplKCk7
IGkgPiAwOyAtLWkpIHsKICAgICAgICAgUnVsZVJhbmdlIHJ1bGVSYW5nZSA9IHJlc3VsdC5yYW5n
ZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1hdGNo
UmVxdWVzdChtYXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5UnVsZXMsIG1fZWxlbWVu
dCksIHJ1bGVSYW5nZSk7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1hdGNoZWRSdWxl
cy5hdChpLTEpLCBzdGF0ZSwgcnVsZVJhbmdlLCBzdGF0ZS5lbGVtZW50KCkpOwogICAgIH0KLSAg
ICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKKyAgICBzb3J0QW5kVHJhbnNm
ZXJNYXRjaGVkUnVsZXMoc3RhdGUsIHJlc3VsdCk7CiAjZWxzZQorICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7Ci0gICAgVU5VU0VEX1BBUkFNKGluY2x1
ZGVFbXB0eVJ1bGVzKTsKICNlbmRpZgogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0
aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3Zv
aWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhSZXNvbHZlU3RhdGUmIHN0YXRlLCBN
YXRjaFJlc3VsdCYgcmVzdWx0KQogewotICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAg
c3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRo
b3JSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKLSAgICBpZiAo
IW1fZWxlbWVudCkKKyAgICBpZiAoIXN0YXRlLmVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gTWF0Y2ggZ2xvYmFsIGF1dGhvciBydWxlcy4KLSAgICBNYXRjaFJlcXVlc3QgbWF0
Y2hSZXF1ZXN0KG1fYXV0aG9yU3R5bGUuZ2V0KCksIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBS
dWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy5hdXRob3JSdWxlUmFuZ2UoKTsKLSAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgY29s
bGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAg
IHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHN0YXRlLCBydWxlUmFuZ2UpOworICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHN0YXRlLCBydWxl
UmFuZ2UpOworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhzdGF0ZSwgcmVzdWx0KTsK
IAotICAgIG1hdGNoU2NvcGVkQXV0aG9yUnVsZXMocmVzdWx0LCBpbmNsdWRlRW1wdHlSdWxlcyk7
CisgICAgbWF0Y2hTY29wZWRBdXRob3JSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKIH0KIAotdm9pZCBT
dHlsZVJlc29sdmVyOjptYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGlu
Y2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVzZXJSdWxlcyhSZXNv
bHZlU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0KQogewogICAgIGlmICghbV91c2Vy
U3R5bGUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigp
OworICAgIHN0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAKICAgICByZXN1bHQucmFuZ2Vz
Lmxhc3RVc2VyUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwotICAg
IE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QobV91c2VyU3R5bGUuZ2V0KCksIGluY2x1ZGVFbXB0
eVJ1bGVzKTsKICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy51c2VyUnVs
ZVJhbmdlKCk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0Y2hSZXF1ZXN0LCBydWxlUmFu
Z2UpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1hdGNoUmVxdWVzdCwgcnVs
ZVJhbmdlKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtX3VzZXJTdHlsZS5nZXQoKSwgc3Rh
dGUsIHJ1bGVSYW5nZSk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obV91c2Vy
U3R5bGUuZ2V0KCksIHN0YXRlLCBydWxlUmFuZ2UpOwogCi0gICAgc29ydEFuZFRyYW5zZmVyTWF0
Y2hlZFJ1bGVzKHJlc3VsdCk7CisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHN0YXRl
LCByZXN1bHQpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRjaFJl
c3VsdCYgcmVzdWx0LCBSdWxlU2V0KiBydWxlcykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hV
QVJ1bGVzKFJlc29sdmVTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQsIFJ1bGVTZXQq
IHJ1bGVzKQogewotICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgc3RhdGUubWF0Y2hl
ZFJ1bGVzKCkuY2xlYXIoKTsKICAgICAKICAgICByZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUgPSBy
ZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKICAgICBSdWxlUmFuZ2UgcnVsZVJh
bmdlID0gcmVzdWx0LnJhbmdlcy5VQVJ1bGVSYW5nZSgpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzKE1hdGNoUmVxdWVzdChydWxlcyksIHJ1bGVSYW5nZSk7CisgICAgY29sbGVjdE1hdGNoaW5n
UnVsZXMocnVsZXMsIHN0YXRlLCBydWxlUmFuZ2UpOwogCi0gICAgc29ydEFuZFRyYW5zZmVyTWF0
Y2hlZFJ1bGVzKHJlc3VsdCk7CisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHN0YXRl
LCByZXN1bHQpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgY29uc3QgTWF0Y2hSZXF1ZXN0
JiBtYXRjaFJlcXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQordm9pZCBTdHlsZVJlc29sdmVy
Ojpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVs
ZXMsIFJlc29sdmVTdGF0ZSYgc3RhdGUsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlLCBjb25zdCBDb250
YWluZXJOb2RlKiBzY29wZSkKIHsKICAgICBpZiAoIXJ1bGVzKQogICAgICAgICByZXR1cm47CiAK
LSAgICAvLyBJbiBzb21lIGNhc2VzIHdlIG1heSBlbmQgdXAgbG9va2luZyB1cCBzdHlsZSBmb3Ig
cmFuZG9tIGVsZW1lbnRzIGluIHRoZSBtaWRkbGUgb2YgYSByZWN1cnNpdmUgdHJlZSByZXNvbHZl
LgotICAgIC8vIEFuY2VzdG9yIGlkZW50aWZpZXIgZmlsdGVyIHdvbid0IGJlIHVwLXRvLWRhdGUg
aW4gdGhhdCBjYXNlIGFuZCB3ZSBjYW4ndCB1c2UgdGhlIGZhc3QgcGF0aC4KLSAgICBib29sIGNh
blVzZUZhc3RSZWplY3QgPSBtX3NlbGVjdG9yRmlsdGVyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50
KG1fcGFyZW50Tm9kZSk7Ci0KICAgICB1bnNpZ25lZCBzaXplID0gcnVsZXMtPnNpemUoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGNvbnN0IFJ1
bGVEYXRhJiBydWxlRGF0YSA9IHJ1bGVzLT5hdChpKTsKLSAgICAgICAgaWYgKGNhblVzZUZhc3RS
ZWplY3QgJiYgbV9zZWxlY3RvckZpbHRlci5mYXN0UmVqZWN0U2VsZWN0b3I8UnVsZURhdGE6Om1h
eGltdW1JZGVudGlmaWVyQ291bnQ+KHJ1bGVEYXRhLmRlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZp
ZXJIYXNoZXMoKSkpCisgICAgICAgIGlmIChzdGF0ZS5jYW5Vc2VGYXN0UmVqZWN0KCkgJiYgbV9z
ZWxlY3RvckZpbHRlci5mYXN0UmVqZWN0U2VsZWN0b3I8UnVsZURhdGE6Om1heGltdW1JZGVudGlm
aWVyQ291bnQ+KHJ1bGVEYXRhLmRlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoKSkp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBTdHlsZVJ1bGUqIHJ1bGUgPSBydWxl
RGF0YS5ydWxlKCk7CiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29r
aWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxNYXRjaFJ1bGUoZG9jdW1lbnQoKSwg
cnVsZSwgdGhpcyk7Ci0gICAgICAgIGlmIChydWxlTWF0Y2hlcyhydWxlRGF0YSwgbWF0Y2hSZXF1
ZXN0LnNjb3BlKSkgeworICAgICAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvID0gTk9QU0VVRE87
CisgICAgICAgIGlmIChydWxlTWF0Y2hlcyhzdGF0ZSwgcnVsZURhdGEsIHNjb3BlLCBkeW5hbWlj
UHNldWRvKSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRpZXMg
dG8gYXBwbHksIHRoZW4gaWdub3JlIGl0IGluIHRoZSBub24tZGVidWcgbW9kZS4KICAgICAgICAg
ICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMgPSBydWxlLT5wcm9wZXJ0aWVz
KCk7Ci0gICAgICAgICAgICBpZiAoIXByb3BlcnRpZXMgfHwgKHByb3BlcnRpZXMtPmlzRW1wdHko
KSAmJiAhbWF0Y2hSZXF1ZXN0LmluY2x1ZGVFbXB0eVJ1bGVzKSkgeworICAgICAgICAgICAgaWYg
KCFwcm9wZXJ0aWVzIHx8IChwcm9wZXJ0aWVzLT5pc0VtcHR5KCkgJiYgIXN0YXRlLmluY2x1ZGVF
bXB0eVJ1bGVzKCkpKSB7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBGSVhNRTogRXhwb3NpbmcgdGhlIG5vbi1z
dGFuZGFyZCBnZXRNYXRjaGVkQ1NTUnVsZXMgQVBJIHRvIHdlYiBpcyB0aGUgb25seSByZWFzb24g
dGhpcyBpcyBuZWVkZWQuCi0gICAgICAgICAgICBpZiAobV9zYW1lT3JpZ2luT25seSAmJiAhcnVs
ZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSB7CisgICAgICAgICAgICBpZiAoc3Rh
dGUuc2FtZU9yaWdpbk9ubHkoKSAmJiAhcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
bigpKSB7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRj
aFJ1bGUoY29va2llLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBtYXRjaGluZyBub3JtYWwgcnVsZXMsIHNl
dCBhIHBzZXVkbyBiaXQgaWYKICAgICAgICAgICAgIC8vIHdlIHJlYWxseSBqdXN0IG1hdGNoZWQg
YSBwc2V1ZG8tZWxlbWVudC4KLSAgICAgICAgICAgIGlmIChtX2R5bmFtaWNQc2V1ZG8gIT0gTk9Q
U0VVRE8gJiYgbV9wc2V1ZG9TdHlsZSA9PSBOT1BTRVVETykgewotICAgICAgICAgICAgICAgIGlm
IChtX3NlbGVjdG9yQ2hlY2tlci5tb2RlKCkgPT0gU2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5n
UnVsZXMpIHsKKyAgICAgICAgICAgIGlmIChkeW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIHN0
YXRlLnBzZXVkb1N0eWxlKCkgPT0gTk9QU0VVRE8pIHsKKyAgICAgICAgICAgICAgICBpZiAoc3Rh
dGUubW9kZSgpID09IFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7CiAgICAgICAg
ICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tp
ZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaWYgKG1fZHluYW1pY1BzZXVkbyA8IEZJUlNUX0lOVEVSTkFM
X1BTRVVET0lEKQotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRIYXNQc2V1ZG9TdHls
ZShtX2R5bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgICAgIGlmIChkeW5hbWljUHNldWRvIDwg
RklSU1RfSU5URVJOQUxfUFNFVURPSUQpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldEhhc1BzZXVkb1N0eWxlKGR5bmFtaWNQc2V1ZG8pOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgb3VyIGZpcnN0L2xhc3QgcnVsZSBpbmRpY2Vz
IGluIHRoZSBtYXRjaGVkIHJ1bGVzIGFycmF5LgogICAgICAgICAgICAgICAgICsrcnVsZVJhbmdl
Lmxhc3RSdWxlSW5kZXg7CkBAIC05MDEsNyArODc4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpj
b2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMs
IGMKICAgICAgICAgICAgICAgICAgICAgcnVsZVJhbmdlLmZpcnN0UnVsZUluZGV4ID0gcnVsZVJh
bmdlLmxhc3RSdWxlSW5kZXg7CiAKICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBydWxlIHRv
IG91ciBsaXN0IG9mIG1hdGNoZWQgcnVsZXMuCi0gICAgICAgICAgICAgICAgYWRkTWF0Y2hlZFJ1
bGUoJnJ1bGVEYXRhKTsKKyAgICAgICAgICAgICAgICBhZGRNYXRjaGVkUnVsZShzdGF0ZSwgJnJ1
bGVEYXRhKTsKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1h
dGNoUnVsZShjb29raWUsIHRydWUpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQpAQCAtOTE3LDMxICs4OTQsMzMgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVS
dWxlcyhjb25zdCBSdWxlRGF0YSogcjEsIGNvbnN0IFJ1bGVEYXRhKiByMikKICAgICByZXR1cm4g
KHNwZWNpZmljaXR5MSA9PSBzcGVjaWZpY2l0eTIpID8gcjEtPnBvc2l0aW9uKCkgPCByMi0+cG9z
aXRpb24oKSA6IHNwZWNpZmljaXR5MSA8IHNwZWNpZmljaXR5MjsKIH0KIAotdm9pZCBTdHlsZVJl
c29sdmVyOjpzb3J0TWF0Y2hlZFJ1bGVzKCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydE1hdGNo
ZWRSdWxlcyhWZWN0b3I8Y29uc3QgUnVsZURhdGEqLCAzMj4mIG1hdGNoZWRSdWxlcykKIHsKLSAg
ICBzdGQ6OnNvcnQobV9tYXRjaGVkUnVsZXMuYmVnaW4oKSwgbV9tYXRjaGVkUnVsZXMuZW5kKCks
IGNvbXBhcmVSdWxlcyk7CisgICAgc3RkOjpzb3J0KG1hdGNoZWRSdWxlcy5iZWdpbigpLCBtYXRj
aGVkUnVsZXMuZW5kKCksIGNvbXBhcmVSdWxlcyk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6
bWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVTTUlMUHJvcGVy
dGllcykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBbGxSdWxlcyhSZXNvbHZlU3RhdGUmIHN0
YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGllcykKIHsK
LSAgICBtYXRjaFVBUnVsZXMocmVzdWx0KTsKKyAgICBtYXRjaFVBUnVsZXMoc3RhdGUsIHJlc3Vs
dCk7CisgICAgLy8gLi4uLiBiYWQ/CisgICAgc3RhdGUuc2V0SW5jbHVkZUVtcHR5UnVsZXMoZmFs
c2UpOwogCiAgICAgLy8gTm93IHdlIGNoZWNrIHVzZXIgc2hlZXQgcnVsZXMuCiAgICAgaWYgKG1f
bWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICBtYXRjaFVzZXJSdWxlcyhyZXN1bHQs
IGZhbHNlKTsKLSAgICAgICAgCisgICAgICAgIG1hdGNoVXNlclJ1bGVzKHN0YXRlLCByZXN1bHQp
OworCiAgICAgLy8gTm93IGNoZWNrIGF1dGhvciBydWxlcywgYmVnaW5uaW5nIGZpcnN0IHdpdGgg
cHJlc2VudGF0aW9uYWwgYXR0cmlidXRlcyBtYXBwZWQgZnJvbSBIVE1MLgotICAgIGlmIChtX3N0
eWxlZEVsZW1lbnQpIHsKLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQs
IG1fc3R5bGVkRWxlbWVudC0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CisgICAgaWYg
KHN0YXRlLnN0eWxlZEVsZW1lbnQoKSkgeworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0
aWVzKHJlc3VsdCwgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVT
dHlsZSgpKTsKIAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sgYWRkaXRpb25hbCBtYXBwZWQgZGVj
bGFyYXRpb25zLgogICAgICAgICAvLyBUYWJsZXMgYW5kIHRhYmxlIGNlbGxzIHNoYXJlIGFuIGFk
ZGl0aW9uYWwgbWFwcGVkIHJ1bGUgdGhhdCBtdXN0IGJlIGFwcGxpZWQKICAgICAgICAgLy8gYWZ0
ZXIgYWxsIGF0dHJpYnV0ZXMsIHNpbmNlIHRoZWlyIG1hcHBlZCBzdHlsZSBkZXBlbmRzIG9uIHRo
ZSB2YWx1ZXMgb2YgbXVsdGlwbGUgYXR0cmlidXRlcy4KLSAgICAgICAgYWRkRWxlbWVudFN0eWxl
UHJvcGVydGllcyhyZXN1bHQsIG1fc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlv
bkF0dHJpYnV0ZVN0eWxlKCkpOworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJl
c3VsdCwgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmli
dXRlU3R5bGUoKSk7CiAKLSAgICAgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aXNIVE1MRWxlbWVu
dCgpKSB7CisgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmlzSFRNTEVsZW1lbnQoKSkgewog
ICAgICAgICAgICAgYm9vbCBpc0F1dG87Ci0gICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHRE
aXJlY3Rpb24gPSB0b0hUTUxFbGVtZW50KG1fc3R5bGVkRWxlbWVudCktPmRpcmVjdGlvbmFsaXR5
SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CisgICAgICAgICAgICBUZXh0RGlyZWN0aW9u
IHRleHREaXJlY3Rpb24gPSB0b0hUTUxFbGVtZW50KHN0YXRlLmVsZW1lbnQoKSktPmRpcmVjdGlv
bmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CiAgICAgICAgICAgICBpZiAoaXNB
dXRvKQogICAgICAgICAgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgdGV4dERp
cmVjdGlvbiA9PSBMVFIgPyBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVmdERl
Y2xhcmF0aW9uKCkpOwogICAgICAgICB9CkBAIC05NDksMjEgKzkyOCwyMSBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRl
U01JTFByb3BlcnRpZQogICAgIAogICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRob3Igc2hl
ZXRzIG5leHQuCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICBt
YXRjaEF1dGhvclJ1bGVzKHJlc3VsdCwgZmFsc2UpOworICAgICAgICBtYXRjaEF1dGhvclJ1bGVz
KHN0YXRlLCByZXN1bHQpOwogCiAgICAgLy8gTm93IGNoZWNrIG91ciBpbmxpbmUgc3R5bGUgYXR0
cmlidXRlLgotICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0eWxlZEVs
ZW1lbnQgJiYgbV9zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpKSB7CisgICAgaWYgKG1fbWF0
Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIHN0YXRlLnN0eWxlZEVsZW1lbnQoKSAmJiBzdGF0ZS5z
dHlsZWRFbGVtZW50KCktPmlubGluZVN0eWxlKCkpIHsKICAgICAgICAgLy8gSW5saW5lIHN0eWxl
IGlzIGltbXV0YWJsZSBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIENTU09NIHdyYXBwZXIuCiAgICAg
ICAgIC8vIEZJWE1FOiBNZWRpYSBjb250cm9sIHNoYWRvdyB0cmVlcyBzZWVtIHRvIGhhdmUgcHJv
YmxlbXMgd2l0aCBjYWNoaW5nLgotICAgICAgICBib29sIGlzSW5saW5lU3R5bGVDYWNoZWFibGUg
PSAhbV9zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpLT5pc011dGFibGUoKSAmJiAhbV9zdHls
ZWRFbGVtZW50LT5pc0luU2hhZG93VHJlZSgpOworICAgICAgICBib29sIGlzSW5saW5lU3R5bGVD
YWNoZWFibGUgPSAhc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpLT5pc011dGFi
bGUoKSAmJiAhc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pc0luU2hhZG93VHJlZSgpOwogICAgICAg
ICAvLyBGSVhNRTogQ29uc3RpZnkuCi0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMo
cmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCksIGlzSW5saW5lU3R5bGVDYWNo
ZWFibGUpOworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGUu
c3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpLCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlKTsK
ICAgICB9CiAKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8vIE5vdyBjaGVjayBTTUlMIGFuaW1hdGlv
biBvdmVycmlkZSBzdHlsZS4KLSAgICBpZiAoaW5jbHVkZVNNSUxQcm9wZXJ0aWVzICYmIG1fbWF0
Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3R5bGVkRWxlbWVudCAmJiBtX3N0eWxlZEVsZW1l
bnQtPmlzU1ZHRWxlbWVudCgpKQotICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJl
c3VsdCwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3R5bGVkRWxlbWVudCktPmFuaW1hdGVk
U01JTFN0eWxlUHJvcGVydGllcygpLCBmYWxzZSAvKiBpc0NhY2hlYWJsZSAqLyk7CisgICAgaWYg
KGluY2x1ZGVTTUlMUHJvcGVydGllcyAmJiBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBz
dGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgc3RhdGUuZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSkK
KyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRpY19jYXN0PFNW
R0VsZW1lbnQqPihzdGF0ZS5lbGVtZW50KCkpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMo
KSwgZmFsc2UgLyogaXNDYWNoZWFibGUgKi8pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oaW5j
bHVkZVNNSUxQcm9wZXJ0aWVzKTsKICNlbmRpZgpAQCAtOTc4LDQ3ICs5NTcsMzggQEAgYm9vbCBT
dHlsZVJlc29sdmVyOjpjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKGNvbnN0IFNwYWNlU3BsaXRT
dHJpbmcmIGNsYXNzTmFtZXMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWlubGluZSB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KEVsZW1lbnQqIGUpCitpbmxpbmUgdm9pZCBTdHlsZVJl
c29sdmVyOjppbml0RWxlbWVudChSZXNvbHZlU3RhdGUmIHN0YXRlLCBFbGVtZW50KiBlKQogewot
ICAgIGlmIChtX2VsZW1lbnQgIT0gZSkgewotICAgICAgICBtX2VsZW1lbnQgPSBlOwotICAgICAg
ICBtX3N0eWxlZEVsZW1lbnQgPSBtX2VsZW1lbnQgJiYgbV9lbGVtZW50LT5pc1N0eWxlZEVsZW1l
bnQoKSA/IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihtX2VsZW1lbnQpIDogMDsKLSAgICAg
ICAgbV9lbGVtZW50TGlua1N0YXRlID0gZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtTdGF0ZSgpLT5k
ZXRlcm1pbmVMaW5rU3RhdGUobV9lbGVtZW50KTsKLSAgICAgICAgaWYgKGUgJiYgZSA9PSBlLT5k
b2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgZS0+ZG9jdW1lbnQo
KS0+c2V0RGlyZWN0aW9uU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOwotICAgICAgICAgICAg
ZS0+ZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudChmYWxzZSk7
Ci0gICAgICAgIH0KKyAgICBzdGF0ZS5zZXRFbGVtZW50KGUpOworICAgIHN0YXRlLnNldEVsZW1l
bnRMaW5rU3RhdGUoZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtTdGF0ZSgpLT5kZXRlcm1pbmVMaW5r
U3RhdGUoZSkpOworICAgIGlmIChlICYmIGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVt
ZW50KCkpIHsKKyAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0RGlyZWN0aW9uU2V0T25Eb2N1bWVu
dEVsZW1lbnQoZmFsc2UpOworICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNl
dE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlLCBQc2V1ZG9JZCBwc2V1ZG9JRCkKK2lubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmluaXRGb3JTdHlsZVJlc29sdmUoUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgRWxlbWVudCogZSwgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewotICAgIG1fcHNldWRvU3R5bGUgPSBwc2V1ZG9JRDsK
LQogICAgIGlmIChlKSB7CiAgICAgICAgIE5vZGVSZW5kZXJpbmdDb250ZXh0IGNvbnRleHQoZSk7
Ci0gICAgICAgIG1fcGFyZW50Tm9kZSA9IGNvbnRleHQucGFyZW50Tm9kZUZvclJlbmRlcmluZ0Fu
ZFN0eWxlKCk7Ci0gICAgICAgIG1fcGFyZW50U3R5bGUgPSBjb250ZXh0LnJlc2V0U3R5bGVJbmhl
cml0YW5jZSgpID8gMCA6CisgICAgICAgIHN0YXRlLnNldFBhcmVudE5vZGUoY29udGV4dC5wYXJl
bnROb2RlRm9yUmVuZGVyaW5nQW5kU3R5bGUoKSk7CisgICAgICAgIHN0YXRlLnNldFBhcmVudFN0
eWxlKGNvbnRleHQucmVzZXRTdHlsZUluaGVyaXRhbmNlKCkgPyAwIDoKICAgICAgICAgICAgIHBh
cmVudFN0eWxlID8gcGFyZW50U3R5bGUgOgotICAgICAgICAgICAgbV9wYXJlbnROb2RlID8gbV9w
YXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMDsKLSAgICAgICAgbV9kaXN0cmlidXRlZFRvSW5z
ZXJ0aW9uUG9pbnQgPSBjb250ZXh0Lmluc2VydGlvblBvaW50KCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgbV9wYXJlbnROb2RlID0gMDsKLSAgICAgICAgbV9wYXJlbnRTdHlsZSA9IHBhcmVudFN0
eWxlOwotICAgICAgICBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCA9IGZhbHNlOwotICAg
IH0KKyAgICAgICAgICAgIHN0YXRlLnBhcmVudE5vZGUoKSA/IHN0YXRlLnBhcmVudE5vZGUoKS0+
cmVuZGVyU3R5bGUoKSA6IDApOworICAgICAgICBzdGF0ZS5zZXREaXN0cmlidXRlZFRvSW5zZXJ0
aW9uUG9pbnQoY29udGV4dC5pbnNlcnRpb25Qb2ludCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
c3RhdGUuc2V0UGFyZW50U3R5bGUocGFyZW50U3R5bGUpOwogCisgICAgLy8gSW4gc29tZSBjYXNl
cyB3ZSBtYXkgZW5kIHVwIGxvb2tpbmcgdXAgc3R5bGUgZm9yIHJhbmRvbSBlbGVtZW50cyBpbiB0
aGUgbWlkZGxlIG9mIGEgcmVjdXJzaXZlIHRyZWUgcmVzb2x2ZS4KKyAgICAvLyBBbmNlc3RvciBp
ZGVudGlmaWVyIGZpbHRlciB3b24ndCBiZSB1cC10by1kYXRlIGluIHRoYXQgY2FzZSBhbmQgd2Ug
Y2FuJ3QgdXNlIHRoZSBmYXN0IHBhdGguCisgICAgc3RhdGUuc2V0Q2FuVXNlRmFzdFJlamVjdCht
X3NlbGVjdG9yRmlsdGVyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KHN0YXRlLnBhcmVudE5vZGUo
KSkpOworICAgIAogICAgIE5vZGUqIGRvY0VsZW1lbnQgPSBlID8gZS0+ZG9jdW1lbnQoKS0+ZG9j
dW1lbnRFbGVtZW50KCkgOiAwOwogICAgIFJlbmRlclN0eWxlKiBkb2NTdHlsZSA9IGRvY3VtZW50
KCktPnJlbmRlclN0eWxlKCk7Ci0gICAgbV9yb290RWxlbWVudFN0eWxlID0gZG9jRWxlbWVudCAm
JiBlICE9IGRvY0VsZW1lbnQgPyBkb2NFbGVtZW50LT5yZW5kZXJTdHlsZSgpIDogZG9jU3R5bGU7
CisgICAgc3RhdGUuc2V0Um9vdEVsZW1lbnRTdHlsZShkb2NFbGVtZW50ICYmIGUgIT0gZG9jRWxl
bWVudCA/IGRvY0VsZW1lbnQtPnJlbmRlclN0eWxlKCkgOiBkb2NTdHlsZSk7CiAKLSAgICBtX3N0
eWxlID0gMDsKLQotICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigpOwotCi0gICAg
bV9ydWxlTGlzdCA9IDA7Ci0KLSAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOworICAgIHN0YXRlLnBl
bmRpbmdJbWFnZVByb3BlcnRpZXMoKS5jbGVhcigpOworICAgIHN0YXRlLnNldEZvbnREaXJ0eShm
YWxzZSk7CiB9CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjU3R5bGVTZWFyY2hUaHJlc2hvbGQg
PSAxMDsKQEAgLTEwNjksMjcgKzEwMzksMjQgQEAgTm9kZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRl
Q291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW4KICAg
ICByZXR1cm4gMDsKIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRh
dGVNYXRjaGVzUnVsZVNldChSdWxlU2V0KiBydWxlU2V0KQorYm9vbCBTdHlsZVJlc29sdmVyOjpz
dHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChFbGVtZW50KiBlbGVtZW50LCBSdWxl
U2V0KiBydWxlU2V0KQogewogICAgIGlmICghcnVsZVNldCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAKLSAgICBtX3NlbGVjdG9yQ2hlY2tlci5z
ZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6U2hhcmluZ1J1bGVzKTsKICAgICBpbnQgZmlyc3RSdWxl
SW5kZXggPSAtMSwgbGFzdFJ1bGVJbmRleCA9IC0xOwogICAgIFJ1bGVSYW5nZSBydWxlUmFuZ2Uo
Zmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
KE1hdGNoUmVxdWVzdChydWxlU2V0KSwgcnVsZVJhbmdlKTsKLSAgICBtX3NlbGVjdG9yQ2hlY2tl
ci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpOwotICAgIGlmIChtX21h
dGNoZWRSdWxlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX21hdGNo
ZWRSdWxlcy5jbGVhcigpOwotICAgIHJldHVybiB0cnVlOworICAgIFJlc29sdmVTdGF0ZSBzdGF0
ZTsKKyAgICBzdGF0ZS5zZXRFbGVtZW50KGVsZW1lbnQpOworICAgIHN0YXRlLnNldE1vZGUoU2Vs
ZWN0b3JDaGVja2VyOjpTaGFyaW5nUnVsZXMpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1
bGVTZXQsIHN0YXRlLCBydWxlUmFuZ2UpOworICAgIHJldHVybiAhc3RhdGUubWF0Y2hlZFJ1bGVz
KCkuaXNFbXB0eSgpOwogfQogCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRo
Q29udHJvbChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAorYm9vbCBTdHlsZVJlc29sdmVy
OjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woRWxlbWVudCogZWxlbWVudCwgU3R5bGVkRWxlbWVu
dCogc2hhcmluZ0NhbmRpZGF0ZSkgY29uc3QKIHsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiB0aGlz
SW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBIVE1MSW5wdXRF
bGVtZW50KiBvdGhlcklucHV0RWxlbWVudCA9IG1fZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsK
KyAgICBIVE1MSW5wdXRFbGVtZW50KiB0aGlzSW5wdXRFbGVtZW50ID0gc2hhcmluZ0NhbmRpZGF0
ZS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBvdGhlcklucHV0RWxl
bWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CiAKICAgICBpZiAoIXRoaXNJbnB1dEVs
ZW1lbnQgfHwgIW90aGVySW5wdXRFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
MTEwLDI1ICsxMDc3LDI1IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhD
b250cm9sKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKHRoaXNJbnB1dEVs
ZW1lbnQtPmlzUmVxdWlyZWQoKSAhPSBvdGhlcklucHV0RWxlbWVudC0+aXNSZXF1aXJlZCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNFbmFibGVkRm9ybUNv
bnRyb2woKSAhPSBtX2VsZW1lbnQtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkpCisgICAgaWYgKHNo
YXJpbmdDYW5kaWRhdGUtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkgIT0gZWxlbWVudC0+aXNFbmFi
bGVkRm9ybUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1l
bnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSAhPSBtX2VsZW1lbnQtPmlzRGVmYXVsdEJ1dHRv
bkZvckZvcm0oKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aXNEZWZhdWx0QnV0dG9uRm9y
Rm9ybSgpICE9IGVsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29udGFpbnNWYWxp
ZGl0eVN0eWxlUnVsZXMoKSkgewotICAgICAgICBib29sIHdpbGxWYWxpZGF0ZSA9IGVsZW1lbnQt
PndpbGxWYWxpZGF0ZSgpOworICAgIGlmIChlbGVtZW50LT5kb2N1bWVudCgpLT5jb250YWluc1Zh
bGlkaXR5U3R5bGVSdWxlcygpKSB7CisgICAgICAgIGJvb2wgd2lsbFZhbGlkYXRlID0gc2hhcmlu
Z0NhbmRpZGF0ZS0+d2lsbFZhbGlkYXRlKCk7CiAKLSAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAh
PSBtX2VsZW1lbnQtPndpbGxWYWxpZGF0ZSgpKQorICAgICAgICBpZiAod2lsbFZhbGlkYXRlICE9
IGVsZW1lbnQtPndpbGxWYWxpZGF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIGlmICh3aWxsVmFsaWRhdGUgJiYgKGVsZW1lbnQtPmlzVmFsaWRGb3JtQ29udHJvbEVs
ZW1lbnQoKSAhPSBtX2VsZW1lbnQtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkpCisgICAg
ICAgIGlmICh3aWxsVmFsaWRhdGUgJiYgKHNoYXJpbmdDYW5kaWRhdGUtPmlzVmFsaWRGb3JtQ29u
dHJvbEVsZW1lbnQoKSAhPSBlbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChlbGVtZW50LT5pc0luUmFu
Z2UoKSAhPSBtX2VsZW1lbnQtPmlzSW5SYW5nZSgpKQorICAgICAgICBpZiAoc2hhcmluZ0NhbmRp
ZGF0ZS0+aXNJblJhbmdlKCkgIT0gZWxlbWVudC0+aXNJblJhbmdlKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKGVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpICE9IG1f
ZWxlbWVudC0+aXNPdXRPZlJhbmdlKCkpCisgICAgICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5p
c091dE9mUmFuZ2UoKSAhPSBlbGVtZW50LT5pc091dE9mUmFuZ2UoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTExNDEsMjcgKzExMDgsMjcgQEAgc3RhdGljIGlubGlu
ZSBib29sIGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmV0
dXJuIGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiB0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5o
YXNEaXJlY3Rpb25BdXRvKCk7CiB9CiAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRp
ZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFbGVtZW50KiBz
aGFyaW5nQ2FuZGlkYXRlKSBjb25zdAorYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlk
YXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFJlc29sdmVTdGF0ZSYgc3Rh
dGUsIEVsZW1lbnQqIGVsZW1lbnQsIFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdDYW5kaWRhdGUpIGNv
bnN0CiB7Ci0gICAgaWYgKG1fZWxlbWVudC0+YXR0cmlidXRlRGF0YSgpID09IHNoYXJpbmdDYW5k
aWRhdGUtPmF0dHJpYnV0ZURhdGEoKSkKKyAgICBpZiAoZWxlbWVudC0+YXR0cmlidXRlRGF0YSgp
ID09IHNoYXJpbmdDYW5kaWRhdGUtPmF0dHJpYnV0ZURhdGEoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgaWYgKG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0
dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdB
dHRyKSkKKyAgICBpZiAoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0
dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdB
dHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2VsZW1lbnQtPmZhc3RHZXRB
dHRyaWJ1dGUobGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUo
bGFuZ0F0dHIpKQorICAgIGlmIChlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSAh
PSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcykg
eworICAgIGlmICghc3RhdGUuZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKCkpIHsKICAgICAg
ICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmhhc0NsYXNzKCkgJiYgY2xhc3NOYW1lc0FmZmVjdGVk
QnlSdWxlcyhzaGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05hbWVzKCkpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0gZWxzZSBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aGFzQ2xhc3MoKSkg
ewogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIC8vIFNWRyBlbGVtZW50cyByZXF1aXJlIGEgKHNs
b3chKSBnZXRBdHRyaWJ1dGUgY29tcGFyaXNpb24gYmVjYXVzZSAiY2xhc3MiIGlzIGFuIGFuaW1h
dGFibGUgYXR0cmlidXRlIGZvciBTVkcuCi0gICAgICAgIGlmIChtX2VsZW1lbnQtPmlzU1ZHRWxl
bWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAobV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NB
dHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSkKKyAgICAg
ICAgaWYgKGVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAoZWxlbWVu
dC0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Z2V0QXR0cmli
dXRlKGNsYXNzQXR0cikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
IGVsc2UgewogI2VuZGlmCi0gICAgICAgICAgICBpZiAobV9lbGVtZW50LT5jbGFzc05hbWVzKCkg
IT0gc2hhcmluZ0NhbmRpZGF0ZS0+Y2xhc3NOYW1lcygpKQorICAgICAgICAgICAgaWYgKGVsZW1l
bnQtPmNsYXNzTmFtZXMoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05hbWVzKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIH0KQEAg
LTExNjksMTIgKzExMzYsMTIgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRl
SGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEUKICAgICB9IGVsc2UK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+cHJlc2Vu
dGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5wcmVzZW50YXRpb25B
dHRyaWJ1dGVTdHlsZSgpKQorICAgIGlmICh0b1N0eWxlZEVsZW1lbnQoZWxlbWVudCktPnByZXNl
bnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+cHJlc2VudGF0aW9u
QXR0cmlidXRlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFBS
T0dSRVNTX0VMRU1FTlQpCi0gICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShwcm9ncmVzc1Rh
ZykpIHsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihtX2Vs
ZW1lbnQpLT5pc0RldGVybWluYXRlKCkgIT0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVu
dCo+KHNoYXJpbmdDYW5kaWRhdGUpLT5pc0RldGVybWluYXRlKCkpCisgICAgaWYgKGVsZW1lbnQt
Pmhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcpKSB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1M
UHJvZ3Jlc3NFbGVtZW50Kj4oZWxlbWVudCktPmlzRGV0ZXJtaW5hdGUoKSAhPSBzdGF0aWNfY2Fz
dDxIVE1MUHJvZ3Jlc3NFbGVtZW50Kj4oc2hhcmluZ0NhbmRpZGF0ZSktPmlzRGV0ZXJtaW5hdGUo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAjZW5kaWYKQEAgLTExODIsNTgg
KzExNDksNTkgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRp
Y2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEUKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxl
bWVudCogZWxlbWVudCkgY29uc3QKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdp
dGhFbGVtZW50KFJlc29sdmVTdGF0ZSYgc3RhdGUsIFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdDYW5k
aWRhdGUpIGNvbnN0CiB7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC0+cmVuZGVy
U3R5bGUoKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGUuZWxlbWVudCgpOworICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9IHNoYXJpbmdDYW5kaWRhdGUtPnJlbmRlclN0eWxlKCk7CiAKICAg
ICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKHN0eWxlLT51bmlx
dWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT50YWdRTmFtZSgp
ICE9IG1fZWxlbWVudC0+dGFnUU5hbWUoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+dGFn
UU5hbWUoKSAhPSBlbGVtZW50LT50YWdRTmFtZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKGVsZW1lbnQtPmlubGluZVN0eWxlKCkpCisgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUt
PmlubGluZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+
bmVlZHNTdHlsZVJlY2FsYygpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5uZWVkc1N0eWxl
UmVjYWxjKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNpZiBFTkFCTEUoU1ZHKQotICAgIGlm
IChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oZWxl
bWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQorICAgIGlmIChzaGFyaW5nQ2Fu
ZGlkYXRlLT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oZWxlbWVu
dCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAjZW5kaWYKLSAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkgIT0gbV9lbGVtZW50LT5pc0xpbmso
KSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aXNMaW5rKCkgIT0gZWxlbWVudC0+aXNMaW5r
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+aG92ZXJlZCgpICE9
IG1fZWxlbWVudC0+aG92ZXJlZCgpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5ob3ZlcmVk
KCkgIT0gZWxlbWVudC0+aG92ZXJlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KGVsZW1lbnQtPmFjdGl2ZSgpICE9IG1fZWxlbWVudC0+YWN0aXZlKCkpCisgICAgaWYgKHNoYXJp
bmdDYW5kaWRhdGUtPmFjdGl2ZSgpICE9IGVsZW1lbnQtPmFjdGl2ZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmZvY3VzZWQoKSAhPSBtX2VsZW1lbnQtPmZvY3Vz
ZWQoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+Zm9jdXNlZCgpICE9IGVsZW1lbnQtPmZv
Y3VzZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5zaGFkb3dQ
c2V1ZG9JZCgpICE9IG1fZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKSkKKyAgICBpZiAoc2hhcmlu
Z0NhbmRpZGF0ZS0+c2hhZG93UHNldWRvSWQoKSAhPSBlbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9j
dW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCisgICAgaWYgKGVsZW1lbnQgPT0gc2hhcmluZ0NhbmRpZGF0
ZS0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoIXNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMo
ZWxlbWVudCkpCisgICAgaWYgKCFzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZl
Y3RpbmdBdHRyaWJ1dGVzKHN0YXRlLCBlbGVtZW50LCBzaGFyaW5nQ2FuZGlkYXRlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9u
QXR0cmlidXRlU3R5bGUoKSAhPSBtX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRp
b25BdHRyaWJ1dGVTdHlsZSgpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5hZGRpdGlvbmFs
UHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmFk
ZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMu
Y29udGFpbnMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQorICAgIGlm
IChzaGFyaW5nQ2FuZGlkYXRlLT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250
YWlucyhzaGFyaW5nQ2FuZGlkYXRlLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxl
Q2hpbGQoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hp
bGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBz
aGFyZSBzdHlsZSBmb3Igb3B0aW9uIGFuZCBvcHRncm91cCB3aGVuZXZlciBwb3NzaWJsZS4KICAg
ICAvLyBCZWZvcmUgZG9pbmcgc28sIHdlIG5lZWQgdG8gcmVzb2x2ZSBpc3N1ZXMgaW4gSFRNTFNl
bGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcwogICAgIC8vIGFuZCBSZW5kZXJNZW51TGlzdDo6
c2V0VGV4dC4gU2VlIGFsc28gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg4NDA1Ci0gICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUob3B0aW9uVGFnKSB8fCBlbGVtZW50
LT5oYXNUYWdOYW1lKG9wdGdyb3VwVGFnKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aGFz
VGFnTmFtZShvcHRpb25UYWcpIHx8IHNoYXJpbmdDYW5kaWRhdGUtPmhhc1RhZ05hbWUob3B0Z3Jv
dXBUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBib29sIGlzQ29udHJvbCA9IGVs
ZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CisgICAgYm9vbCBpc0NvbnRyb2wgPSBzaGFy
aW5nQ2FuZGlkYXRlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpOwogCi0gICAgaWYgKGlzQ29udHJv
bCAhPSBtX2VsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgaWYgKGlzQ29udHJv
bCAhPSBlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAoaXNDb250cm9sICYmICFjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woZWxl
bWVudCkpCisgICAgaWYgKGlzQ29udHJvbCAmJiAhY2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKGVs
ZW1lbnQsIHNoYXJpbmdDYW5kaWRhdGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBp
ZiAoc3R5bGUtPnRyYW5zaXRpb25zKCkgfHwgc3R5bGUtPmFuaW1hdGlvbnMoKSkKQEAgLTEyNDIs
MTAgKzEyMTAsMTAgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1l
bnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAgICAgLy8gVHVybiBvZmYgc3R5bGUgc2hhcmluZyBmb3IgZWxlbWVudHMgdGhh
dCBjYW4gZ2FpbiBsYXllcnMgZm9yIHJlYXNvbnMgb3V0c2lkZSBvZiB0aGUgc3R5bGUgc3lzdGVt
LgogICAgIC8vIFNlZSBjb21tZW50cyBpbiBSZW5kZXJPYmplY3Q6OnNldFN0eWxlKCkuCi0gICAg
aWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1l
KGZyYW1lVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBlbGVtZW50LT5o
YXNUYWdOYW1lKG9iamVjdFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8
IGVsZW1lbnQtPmhhc1RhZ05hbWUoY2FudmFzVGFnKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRl
LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykgfHwgc2hhcmluZ0NhbmRpZGF0ZS0+aGFzVGFnTmFtZShm
cmFtZVRhZykgfHwgc2hhcmluZ0NhbmRpZGF0ZS0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgc2hh
cmluZ0NhbmRpZGF0ZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpIHx8IHNoYXJpbmdDYW5kaWRhdGUt
Pmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBzaGFyaW5nQ2FuZGlkYXRlLT5oYXNUYWdOYW1lKGNh
bnZhc1RhZykKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKICAgICAgICAgLy8g
V2l0aCBwcm94eWluZywgdGhlIG1lZGlhIGVsZW1lbnRzIGFyZSBiYWNrZWQgYnkgYSBSZW5kZXJF
bWJlZGRlZE9iamVjdC4KLSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZSh2aWRlb1RhZykg
fHwgZWxlbWVudC0+aGFzVGFnTmFtZShhdWRpb1RhZykKKyAgICAgICAgfHwgc2hhcmluZ0NhbmRp
ZGF0ZS0+aGFzVGFnTmFtZSh2aWRlb1RhZykgfHwgc2hhcmluZ0NhbmRpZGF0ZS0+aGFzVGFnTmFt
ZShhdWRpb1RhZykKICNlbmRpZgogICAgICAgICApCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTEyNTQsMzEgKzEyMjIsMzEgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0
aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICBpZiAoZWxlbWVudEhh
c0RpcmVjdGlvbkF1dG8oZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlm
IChlbGVtZW50LT5pc0xpbmsoKSAmJiBtX2VsZW1lbnRMaW5rU3RhdGUgIT0gc3R5bGUtPmluc2lk
ZUxpbmsoKSkKKyAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aXNMaW5rKCkgJiYgc3RhdGUuZWxl
bWVudExpbmtTdGF0ZSgpICE9IHN0eWxlLT5pbnNpZGVMaW5rKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICAvLyBEZW55IHNoYXJpbmcgc3R5
bGVzIGJldHdlZW4gV2ViVlRUIGFuZCBub24tV2ViVlRUIG5vZGVzLgotICAgIGlmIChlbGVtZW50
LT5pc1dlYlZUVEVsZW1lbnQoKSAhPSBtX2VsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpKQorICAg
IGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5pc1dlYlZUVEVsZW1lbnQoKSAhPSBlbGVtZW50LT5pc1dl
YlZUVEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQt
PmlzV2ViVlRURWxlbWVudCgpICYmIG1fZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYgdG9X
ZWJWVFRFbGVtZW50KGVsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpICE9IHRvV2ViVlRURWxlbWVu
dChtX2VsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpKQorICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRl
LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiBlbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiB0b1dl
YlZUVEVsZW1lbnQoZWxlbWVudCktPndlYlZUVE5vZGVUeXBlKCkgIT0gdG9XZWJWVFRFbGVtZW50
KGVsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5k
aWYKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBpZiAoZWxlbWVudCA9PSBlbGVt
ZW50LT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSB8fCBtX2Vs
ZW1lbnQgPT0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVs
ZW1lbnQoKSkKKyAgICBpZiAoZWxlbWVudCA9PSBzaGFyaW5nQ2FuZGlkYXRlLT5kb2N1bWVudCgp
LT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSB8fCBlbGVtZW50ID09IGVsZW1lbnQt
PmRvY3VtZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIFN0eWxl
ZEVsZW1lbnQqIFN0eWxlUmVzb2x2ZXI6OmZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUq
IG5vZGUsIHVuc2lnbmVkJiBjb3VudCkgY29uc3QKK2lubGluZSBTdHlsZWRFbGVtZW50KiBTdHls
ZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhSZXNvbHZlU3RhdGUmIHN0YXRl
LCBOb2RlKiBub2RlLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0CiB7CiAgICAgZm9yICg7IG5vZGU7
IG5vZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewogICAgICAgICBpZiAoIW5vZGUtPmlz
U3R5bGVkRWxlbWVudCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjYW5T
aGFyZVN0eWxlV2l0aEVsZW1lbnQoc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpKSkK
KyAgICAgICAgaWYgKGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChzdGF0ZSwgc3RhdGljX2Nhc3Q8
U3R5bGVkRWxlbWVudCo+KG5vZGUpKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAo
Y291bnQrKyA9PSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQpCiAgICAgICAgICAgICByZXR1cm4gMDsK
QEAgLTEyOTYsNDAgKzEyNjQsNDEgQEAgc3RhdGljIGlubGluZSBib29sIHBhcmVudEVsZW1lbnRQ
cmV2ZW50c1NoYXJpbmcoY29uc3QgRWxlbWVudCogcGFyZW50RWxlbWVudCkKICAgICAgICAgfHwg
cGFyZW50RWxlbWVudC0+Y2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOwog
fQogCi1SZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQorUmVu
ZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKFJlc29sdmVTdGF0ZSYg
c3RhdGUpCiB7Ci0gICAgaWYgKCFtX3N0eWxlZEVsZW1lbnQgfHwgIW1fcGFyZW50U3R5bGUpCisg
ICAgaWYgKCFzdGF0ZS5zdHlsZWRFbGVtZW50KCkgfHwgIXN0YXRlLnBhcmVudFN0eWxlKCkpCiAg
ICAgICAgIHJldHVybiAwOworCiAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaGFzIGlubGluZSBzdHls
ZSBpdCBpcyBwcm9iYWJseSB1bmlxdWUuCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aW5saW5l
U3R5bGUoKSkKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpKQog
ICAgICAgICByZXR1cm4gMDsKICNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChtX3N0eWxlZEVsZW1l
bnQtPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihtX3N0eWxlZEVs
ZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKKyAgICBpZiAoc3RhdGUuc3R5
bGVkRWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4o
c3RhdGUuc3R5bGVkRWxlbWVudCgpKS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCiAg
ICAgICAgIHJldHVybiAwOwogI2VuZGlmCiAgICAgLy8gSWRzIHN0b3Agc3R5bGUgc2hhcmluZyBp
ZiB0aGV5IHNob3cgdXAgaW4gdGhlIHN0eWxlc2hlZXRzLgotICAgIGlmIChtX3N0eWxlZEVsZW1l
bnQtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKG1fc3R5bGVkRWxl
bWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQorICAgIGlmIChzdGF0ZS5zdHls
ZWRFbGVtZW50KCktPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKHN0
YXRlLnN0eWxlZEVsZW1lbnQoKS0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQogICAg
ICAgICByZXR1cm4gMDsKLSAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhtX2Vs
ZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkpCisgICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1No
YXJpbmcoc3RhdGUuZWxlbWVudCgpLT5wYXJlbnRFbGVtZW50KCkpKQogICAgICAgICByZXR1cm4g
MDsKLSAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQor
ICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkp
CiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChtX2VsZW1lbnQgPT0gbV9lbGVtZW50LT5kb2N1
bWVudCgpLT5jc3NUYXJnZXQoKSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudCgpID09IHN0YXRlLmRv
Y3VtZW50KCktPmNzc1RhcmdldCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoZWxlbWVu
dEhhc0RpcmVjdGlvbkF1dG8obV9lbGVtZW50KSkKKyAgICBpZiAoZWxlbWVudEhhc0RpcmVjdGlv
bkF1dG8oc3RhdGUuZWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBDYWNo
ZSB3aGV0aGVyIG1fZWxlbWVudCBpcyBhZmZlY3RlZCBieSBhbnkga25vd24gY2xhc3Mgc2VsZWN0
b3JzLgogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBhIG1lbWJlciB2YXJpYWJsZS4g
VGhlIHN0eWxlIHNoYXJpbmcgY29kZSBjb3VsZCBiZSBmYWN0b3JlZCBvdXQgb2YgU3R5bGVSZXNv
bHZlci4KLSAgICBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyA9IG1fZWxlbWVudCAmJiBt
X2VsZW1lbnQtPmhhc0NsYXNzKCkgJiYgY2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhtX2VsZW1l
bnQtPmNsYXNzTmFtZXMoKSk7CisgICAgc3RhdGUuc2V0RWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1
bGVzKHN0YXRlLmVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50KCktPmhhc0NsYXNzKCkgJiYgY2xh
c3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhzdGF0ZS5lbGVtZW50KCktPmNsYXNzTmFtZXMoKSkpOwog
CiAgICAgLy8gQ2hlY2sgcHJldmlvdXMgc2libGluZ3MgYW5kIHRoZWlyIGNvdXNpbnMuCiAgICAg
dW5zaWduZWQgY291bnQgPSAwOwogICAgIHVuc2lnbmVkIHZpc2l0ZWROb2RlQ291bnQgPSAwOwog
ICAgIFN0eWxlZEVsZW1lbnQqIHNoYXJlRWxlbWVudCA9IDA7Ci0gICAgTm9kZSogY291c2luTGlz
dCA9IG1fc3R5bGVkRWxlbWVudC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgTm9kZSogY291c2lu
TGlzdCA9IHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgd2hp
bGUgKGNvdXNpbkxpc3QpIHsKLSAgICAgICAgc2hhcmVFbGVtZW50ID0gZmluZFNpYmxpbmdGb3JT
dHlsZVNoYXJpbmcoY291c2luTGlzdCwgY291bnQpOworICAgICAgICBzaGFyZUVsZW1lbnQgPSBm
aW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhzdGF0ZSwgY291c2luTGlzdCwgY291bnQpOwogICAg
ICAgICBpZiAoc2hhcmVFbGVtZW50KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNvdXNp
bkxpc3QgPSBsb2NhdGVDb3VzaW5MaXN0KGNvdXNpbkxpc3QtPnBhcmVudEVsZW1lbnQoKSwgdmlz
aXRlZE5vZGVDb3VudCk7CkBAIC0xMzQwLDIxICsxMzA5LDIxIEBAIFJlbmRlclN0eWxlKiBTdHls
ZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAg
Ly8gQ2FuJ3Qgc2hhcmUgaWYgc2libGluZyBydWxlcyBhcHBseS4gVGhpcyBpcyBjaGVja2VkIGF0
IHRoZSBlbmQgYXMgaXQgc2hvdWxkIHJhcmVseSBmYWlsLgotICAgIGlmIChzdHlsZVNoYXJpbmdD
YW5kaWRhdGVNYXRjaGVzUnVsZVNldChtX3NpYmxpbmdSdWxlU2V0LmdldCgpKSkKKyAgICBpZiAo
c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoc3RhdGUuZWxlbWVudCgpLCBtX3Np
YmxpbmdSdWxlU2V0LmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gQ2FuJ3Qgc2hh
cmUgaWYgYXR0cmlidXRlIHJ1bGVzIGFwcGx5LgotICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRh
dGVNYXRjaGVzUnVsZVNldChtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldC5nZXQoKSkpCisgICAg
aWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KHN0YXRlLmVsZW1lbnQoKSwg
bV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gMDsKICAg
ICAvLyBDYW4ndCBzaGFyZSBpZiBAaG9zdCBALXJ1bGVzIGFwcGx5LgotICAgIGlmIChzdHlsZVNo
YXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCkpCisgICAgaWYgKHN0eWxlU2hhcmluZ0Nh
bmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoc3RhdGUuZWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgLy8gVHJhY2tpbmcgY2hpbGQgaW5kZXggcmVxdWlyZXMgdW5pcXVlIHN0eWxlIGZv
ciBlYWNoIG5vZGUuIFRoaXMgbWF5IGdldCBzZXQgYnkgdGhlIHNpYmxpbmcgcnVsZSBtYXRjaCBh
Ym92ZS4KLSAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhtX2VsZW1lbnQtPnBh
cmVudEVsZW1lbnQoKSkpCisgICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcoc3Rh
dGUuZWxlbWVudCgpLT5wYXJlbnRFbGVtZW50KCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICBy
ZXR1cm4gc2hhcmVFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2
ZXI6Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQordm9pZCBTdHlsZVJlc29sdmVy
OjptYXRjaFVBUnVsZXMoUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCkK
IHsKICAgICBNYXRjaGluZ1VBUnVsZXNTY29wZSBzY29wZTsKIApAQCAtMTM2MywxNSArMTMzMiwx
NSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0
KQogICAgICAgICByZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsKICAgICBSdWxlU2V0KiB1c2Vy
QWdlbnRTdHlsZVNoZWV0ID0gbV9tZWRpdW0tPm1lZGlhVHlwZU1hdGNoU3BlY2lmaWMoInByaW50
IikKICAgICAgICAgPyBkZWZhdWx0UHJpbnRTdHlsZSA6IGRlZmF1bHRTdHlsZTsKLSAgICBtYXRj
aFVBUnVsZXMocmVzdWx0LCB1c2VyQWdlbnRTdHlsZVNoZWV0KTsKKyAgICBtYXRjaFVBUnVsZXMo
c3RhdGUsIHJlc3VsdCwgdXNlckFnZW50U3R5bGVTaGVldCk7CiAKICAgICAvLyBJbiBxdWlya3Mg
bW9kZSwgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgcXVpcmtzIHVzZXIgYWdlbnQgc2hlZXQuCi0g
ICAgaWYgKCFtX3NlbGVjdG9yQ2hlY2tlci5zdHJpY3RQYXJzaW5nKCkpCi0gICAgICAgIG1hdGNo
VUFSdWxlcyhyZXN1bHQsIGRlZmF1bHRRdWlya3NTdHlsZSk7CisgICAgaWYgKGRvY3VtZW50KCkt
PmluUXVpcmtzTW9kZSgpKQorICAgICAgICBtYXRjaFVBUnVsZXMoc3RhdGUsIHJlc3VsdCwgZGVm
YXVsdFF1aXJrc1N0eWxlKTsKIAogICAgIC8vIElmIGRvY3VtZW50IHVzZXMgdmlldyBzb3VyY2Ug
c3R5bGVzIChpbiB2aWV3IHNvdXJjZSBtb2RlIG9yIGluIHhtbCB2aWV3ZXIgbW9kZSksIHRoZW4g
d2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdmlldyBzb3VyY2Ugc3R5bGUgc2hlZXQuCiAgICAgaWYg
KGRvY3VtZW50KCktPmlzVmlld1NvdXJjZSgpKQotICAgICAgICBtYXRjaFVBUnVsZXMocmVzdWx0
LCB2aWV3U291cmNlU3R5bGUoKSk7CisgICAgICAgIG1hdGNoVUFSdWxlcyhzdGF0ZSwgcmVzdWx0
LCB2aWV3U291cmNlU3R5bGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldFN0eWxlc0ZvclBhZ2lu
YXRpb25Nb2RlKFBhZ2luYXRpb246Ok1vZGUgcGFnaW5hdGlvbk1vZGUsIFJlbmRlclN0eWxlKiBz
dHlsZSkKQEAgLTE1NjksMTA2ICsxNTM4LDEwNCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBT
dHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyUwog
ICAgICAgICByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsKICAgICB9CiAKLSAgICBpbml0
RWxlbWVudChlbGVtZW50KTsKLSAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGVsZW1lbnQsIGRlZmF1
bHRQYXJlbnQpOwotICAgIG1fcmVnaW9uRm9yU3R5bGluZyA9IHJlZ2lvbkZvclN0eWxpbmc7Ci0g
ICAgaWYgKHNoYXJpbmdCZWhhdmlvciA9PSBBbGxvd1N0eWxlU2hhcmluZyAmJiAhbV9kaXN0cmli
dXRlZFRvSW5zZXJ0aW9uUG9pbnQpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxl
ID0gbG9jYXRlU2hhcmVkU3R5bGUoKTsKKyAgICBSZXNvbHZlU3RhdGUgc3RhdGU7CisgICAgaW5p
dEVsZW1lbnQoc3RhdGUsIGVsZW1lbnQpOworICAgIGluaXRGb3JTdHlsZVJlc29sdmUoc3RhdGUs
IGVsZW1lbnQsIGRlZmF1bHRQYXJlbnQpOworICAgIHN0YXRlLnNldFJlZ2lvbkZvclN0eWxpbmco
cmVnaW9uRm9yU3R5bGluZyk7CisKKyAgICBpZiAoc2hhcmluZ0JlaGF2aW9yID09IEFsbG93U3R5
bGVTaGFyaW5nICYmICFzdGF0ZS5kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQoKSkgeworICAg
ICAgICBSZW5kZXJTdHlsZSogc2hhcmVkU3R5bGUgPSBsb2NhdGVTaGFyZWRTdHlsZShzdGF0ZSk7
CiAgICAgICAgIGlmIChzaGFyZWRTdHlsZSkKICAgICAgICAgICAgIHJldHVybiBzaGFyZWRTdHls
ZTsKICAgICB9CiAKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGNsb25lRm9yUGFyZW50OworICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGU7CiAKLSAgICBpZiAobV9wYXJlbnRTdHlsZSkgewot
ICAgICAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgICAgICBtX3N0eWxl
LT5pbmhlcml0RnJvbShtX3BhcmVudFN0eWxlLCBpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkg
PyBSZW5kZXJTdHlsZTo6QXRTaGFkb3dCb3VuZGFyeSA6IFJlbmRlclN0eWxlOjpOb3RBdFNoYWRv
d0JvdW5kYXJ5KTsKKyAgICBpZiAoc3RhdGUucGFyZW50U3R5bGUoKSkgeworICAgICAgICBzdHls
ZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICAgICAgc3R5bGUtPmluaGVyaXRGcm9tKHN0
YXRlLnBhcmVudFN0eWxlKCksIGlzQXRTaGFkb3dCb3VuZGFyeShlbGVtZW50KSA/IFJlbmRlclN0
eWxlOjpBdFNoYWRvd0JvdW5kYXJ5IDogUmVuZGVyU3R5bGU6Ok5vdEF0U2hhZG93Qm91bmRhcnkp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fc3R5bGUgPSBkZWZhdWx0U3R5bGVGb3JFbGVtZW50
KCk7Ci0gICAgICAgIGNsb25lRm9yUGFyZW50ID0gUmVuZGVyU3R5bGU6OmNsb25lKHN0eWxlKCkp
OwotICAgICAgICBtX3BhcmVudFN0eWxlID0gY2xvbmVGb3JQYXJlbnQuZ2V0KCk7CisgICAgICAg
IHN0eWxlID0gZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpOworICAgICAgICBjbG9uZUZvclBhcmVu
dCA9IFJlbmRlclN0eWxlOjpjbG9uZShzdHlsZS5nZXQoKSk7CisgICAgICAgIHN0YXRlLnNldFBh
cmVudFN0eWxlKGNsb25lRm9yUGFyZW50LmdldCgpKTsKICAgICB9CiAgICAgLy8gY29udGVudGVk
aXRhYmxlIGF0dHJpYnV0ZSAoaW1wbGVtZW50ZWQgYnkgLXdlYmtpdC11c2VyLW1vZGlmeSkgc2hv
dWxkCiAgICAgLy8gYmUgcHJvcGFnYXRlZCBmcm9tIHNoYWRvdyBob3N0IHRvIGRpc3RyaWJ1dGVk
IG5vZGUuCi0gICAgaWYgKG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KSB7CisgICAgaWYg
KHN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCgpKSB7CiAgICAgICAgIGlmIChFbGVt
ZW50KiBwYXJlbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGlm
IChSZW5kZXJTdHlsZSogc3R5bGVPZlNoYWRvd0hvc3QgPSBwYXJlbnQtPnJlbmRlclN0eWxlKCkp
Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0VXNlck1vZGlmeShzdHlsZU9mU2hhZG93SG9z
dC0+dXNlck1vZGlmeSgpKTsKKyAgICAgICAgICAgICAgICBzdHlsZS0+c2V0VXNlck1vZGlmeShz
dHlsZU9mU2hhZG93SG9zdC0+dXNlck1vZGlmeSgpKTsKICAgICAgICAgfQogICAgIH0KIAogICAg
IGlmIChlbGVtZW50LT5pc0xpbmsoKSkgewotICAgICAgICBtX3N0eWxlLT5zZXRJc0xpbmsodHJ1
ZSk7Ci0gICAgICAgIEVJbnNpZGVMaW5rIGxpbmtTdGF0ZSA9IG1fZWxlbWVudExpbmtTdGF0ZTsK
LSAgICAgICAgaWYgKG1fZWxlbWVudExpbmtTdGF0ZSAhPSBOb3RJbnNpZGVMaW5rKSB7CisgICAg
ICAgIHN0eWxlLT5zZXRJc0xpbmsodHJ1ZSk7CisgICAgICAgIEVJbnNpZGVMaW5rIGxpbmtTdGF0
ZSA9IHN0YXRlLmVsZW1lbnRMaW5rU3RhdGUoKTsKKyAgICAgICAgaWYgKGxpbmtTdGF0ZSAhPSBO
b3RJbnNpZGVMaW5rKSB7CiAgICAgICAgICAgICBib29sIGZvcmNlVmlzaXRlZCA9IEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlbGVtZW50LCBDU1NTZWxlY3Rvcjo6
UHNldWRvVmlzaXRlZCk7CiAgICAgICAgICAgICBpZiAoZm9yY2VWaXNpdGVkKQogICAgICAgICAg
ICAgICAgIGxpbmtTdGF0ZSA9IEluc2lkZVZpc2l0ZWRMaW5rOwogICAgICAgICB9Ci0KLSAgICAg
ICAgbV9zdHlsZS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdGUpOworICAgICAgICBzdHlsZS0+c2V0
SW5zaWRlTGluayhsaW5rU3RhdGUpOwogICAgIH0KIAogICAgIGVuc3VyZURlZmF1bHRTdHlsZVNo
ZWV0c0ZvckVsZW1lbnQoZWxlbWVudCk7CiAKKyAgICBzdGF0ZS5zZXRTdHlsZShzdHlsZS5nZXQo
KSk7CisKICAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKICAgICBpZiAobWF0Y2hpbmdCZWhh
dmlvciA9PSBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcykKLSAgICAgICAgbWF0Y2hVQVJ1bGVzKG1h
dGNoUmVzdWx0KTsKKyAgICAgICAgbWF0Y2hVQVJ1bGVzKHN0YXRlLCBtYXRjaFJlc3VsdCk7CiAg
ICAgZWxzZQotICAgICAgICBtYXRjaEFsbFJ1bGVzKG1hdGNoUmVzdWx0LCBtYXRjaGluZ0JlaGF2
aW9yICE9IE1hdGNoQWxsUnVsZXNFeGNsdWRpbmdTTUlMKTsKKyAgICAgICAgbWF0Y2hBbGxSdWxl
cyhzdGF0ZSwgbWF0Y2hSZXN1bHQsIG1hdGNoaW5nQmVoYXZpb3IgIT0gTWF0Y2hBbGxSdWxlc0V4
Y2x1ZGluZ1NNSUwpOwogCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhtYXRjaFJlc3VsdCwg
ZWxlbWVudCk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhzdGF0ZSwgbWF0Y2hSZXN1bHQs
IGVsZW1lbnQpOwogCiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRpc3BsYXkg
YW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0UmVu
ZGVyU3R5bGUoc3R5bGUoKSwgbV9wYXJlbnRTdHlsZSwgZWxlbWVudCk7Ci0KLSAgICBpbml0RWxl
bWVudCgwKTsgLy8gQ2xlYXIgb3V0IGZvciB0aGUgbmV4dCByZXNvbHZlLgotCi0gICAgaWYgKGNs
b25lRm9yUGFyZW50KQotICAgICAgICBtX3BhcmVudFN0eWxlID0gMDsKKyAgICBhZGp1c3RSZW5k
ZXJTdHlsZShzdGF0ZSwgc3R5bGUuZ2V0KCksIHN0YXRlLnBhcmVudFN0eWxlKCksIGVsZW1lbnQp
OwogCiAgICAgZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCiAgICAgLy8g
Tm93IHJldHVybiB0aGUgc3R5bGUuCi0gICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOworICAg
IHJldHVybiBzdHlsZS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0
eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRT
dHlsZSwgY29uc3QgU3R5bGVLZXlmcmFtZSoga2V5ZnJhbWUsIEtleWZyYW1lVmFsdWUmIGtleWZy
YW1lVmFsdWUpCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZv
cktleWZyYW1lKFJlc29sdmVTdGF0ZSYgc3RhdGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZW50
U3R5bGUsIGNvbnN0IFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1lLCBLZXlmcmFtZVZhbHVlJiBrZXlm
cmFtZVZhbHVlKQogewogICAgIE1hdGNoUmVzdWx0IHJlc3VsdDsKICAgICBpZiAoa2V5ZnJhbWUt
PnByb3BlcnRpZXMoKSkKICAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCBrZXlm
cmFtZS0+cHJvcGVydGllcygpKTsKIAotICAgIEFTU0VSVCghbV9zdHlsZSk7Ci0KICAgICAvLyBD
cmVhdGUgdGhlIHN0eWxlCi0gICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShlbGVtZW50
U3R5bGUpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xv
bmUoZWxlbWVudFN0eWxlKTsKIAotICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBzdGF0
ZS5zZXRTdHlsZShzdHlsZS5nZXQoKSk7CisgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDAp
OwogCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgd2l0aCAhaW1wb3J0YW50LiBTaW5j
ZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8gZGVjbCwgdGhlcmUncyBub3RoaW5nIHRv
IG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3QgcHJvcGVydGllcy4KICAgICBib29sIGlu
aGVyaXRlZE9ubHkgPSBmYWxzZTsKICAgICBpZiAoa2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkKLSAg
ICAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihyZXN1
bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJp
dGVkT25seSk7CisgICAgICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJv
cGVydGllcz4oc3RhdGUsIHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGll
cy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKIAogICAgIC8vIElmIG91ciBmb250IGdvdCBk
aXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4KLSAgICB1cGRhdGVGb250KCk7Cisg
ICAgdXBkYXRlRm9udChzdGF0ZSk7CiAKICAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3
ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUKLSAgICBpZiAobV9saW5lSGVp
Z2h0VmFsdWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBt
X2xpbmVIZWlnaHRWYWx1ZSk7CisgICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKQorICAg
ICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLmxp
bmVIZWlnaHRWYWx1ZSgpKTsKIAogICAgIC8vIE5vdyBkbyByZXN0IG9mIHRoZSBwcm9wZXJ0aWVz
LgogICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQotICAgICAgICBhcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0
Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworICAgICAgICBh
cHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIHJlc3Vs
dCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0
ZWRPbmx5KTsKIAogICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkIGJ5IG9uZSBvZiB0aGUg
bm9uLWVzc2VudGlhbCBmb250IHByb3BzLAogICAgIC8vIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQg
YSBzZWNvbmQgdGltZS4KLSAgICB1cGRhdGVGb250KCk7CisgICAgdXBkYXRlRm9udChzdGF0ZSk7
CiAKICAgICAvLyBTdGFydCBsb2FkaW5nIHJlc291cmNlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5
bGUuCi0gICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoKTsKKyAgICBsb2FkUGVuZGluZ1Jlc291cmNl
cyhzdGF0ZSk7CiAgICAgCiAgICAgLy8gQWRkIGFsbCB0aGUgYW5pbWF0aW5nIHByb3BlcnRpZXMg
dG8gdGhlIGtleWZyYW1lLgogICAgIGlmIChjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZURl
Y2xhcmF0aW9uID0ga2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkgewpAQCAtMTY4NCw3ICsxNjUxLDcg
QEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFt
ZShjb25zdCBSZW5kZXJTdHlsZSogZWxlbWUKIAogICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0
eWxlUmVzb2x2ZXIoKTsKIAotICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1
cm4gc3R5bGUucmVsZWFzZSgpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5
bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZW50U3R5
bGUsIEtleWZyYW1lTGlzdCYgbGlzdCkKQEAgLTE3MDUsMTUgKzE2NzIsMTYgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBS
ZW5kZXJTdHlsZSogZWwKIAogICAgIC8vIENvbnN0cnVjdCBhbmQgcG9wdWxhdGUgdGhlIHN0eWxl
IGZvciBlYWNoIGtleWZyYW1lCiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZUtleWZyYW1l
PiA+JiBrZXlmcmFtZXMgPSBrZXlmcmFtZXNSdWxlLT5rZXlmcmFtZXMoKTsKKyAgICBSZXNvbHZl
U3RhdGUgc3RhdGU7CisgICAgaW5pdEVsZW1lbnQoc3RhdGUsIGUpOworICAgIGluaXRGb3JTdHls
ZVJlc29sdmUoc3RhdGUsIGUpOworICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBr
ZXlmcmFtZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgLy8gQXBwbHkgdGhlIGRlY2xhcmF0aW9u
IHRvIHRoZSBzdHlsZS4gVGhpcyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiB0aGUgbG9naWMg
aW4gc3R5bGVGb3JFbGVtZW50Ci0gICAgICAgIGluaXRFbGVtZW50KGUpOwotICAgICAgICBpbml0
Rm9yU3R5bGVSZXNvbHZlKGUpOwotCiAgICAgICAgIGNvbnN0IFN0eWxlS2V5ZnJhbWUqIGtleWZy
YW1lID0ga2V5ZnJhbWVzW2ldLmdldCgpOwogCiAgICAgICAgIEtleWZyYW1lVmFsdWUga2V5ZnJh
bWVWYWx1ZSgwLCAwKTsKLSAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktl
eWZyYW1lKGVsZW1lbnRTdHlsZSwga2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKKyAgICAgICAg
a2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKHN0YXRlLCBlbGVtZW50U3R5
bGUsIGtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7CiAKICAgICAgICAgLy8gQWRkIHRoaXMga2V5
ZnJhbWUgc3R5bGUgdG8gYWxsIHRoZSBpbmRpY2F0ZWQga2V5IHRpbWVzCiAgICAgICAgIFZlY3Rv
cjxmbG9hdD4ga2V5czsKQEAgLTE3MzMsNyArMTcwMSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUq
IGVsCiAgICAgICAgICAgICB6ZXJvUGVyY2VudEtleWZyYW1lLT5zZXRLZXlUZXh0KCIwJSIpOwog
ICAgICAgICB9CiAgICAgICAgIEtleWZyYW1lVmFsdWUga2V5ZnJhbWVWYWx1ZSgwLCAwKTsKLSAg
ICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKGVsZW1lbnRTdHls
ZSwgemVyb1BlcmNlbnRLZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOworICAgICAgICBrZXlmcmFt
ZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoc3RhdGUsIGVsZW1lbnRTdHlsZSwgemVy
b1BlcmNlbnRLZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOwogICAgICAgICBsaXN0Lmluc2VydChr
ZXlmcmFtZVZhbHVlKTsKICAgICB9CiAKQEAgLTE3NDUsNjIgKzE3MTMsNjggQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBS
ZW5kZXJTdHlsZSogZWwKICAgICAgICAgICAgIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUtPnNldEtl
eVRleHQoIjEwMCUiKTsKICAgICAgICAgfQogICAgICAgICBLZXlmcmFtZVZhbHVlIGtleWZyYW1l
VmFsdWUoMSwgMCk7Ci0gICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlm
cmFtZShlbGVtZW50U3R5bGUsIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUp
KTsKKyAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKHN0YXRl
LCBlbGVtZW50U3R5bGUsIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsK
ICAgICAgICAgbGlzdC5pbnNlcnQoa2V5ZnJhbWVWYWx1ZSk7CiAgICAgfQogfQogCiBQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNl
dWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7Ci0g
ICAgQVNTRVJUKG1fcGFyZW50U3R5bGUpOwogICAgIGlmICghZSkKICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICBpbml0RWxlbWVudChlKTsKKyAgICBSZXNvbHZlU3RhdGUgc3RhdGU7CisgICAgaW5p
dEVsZW1lbnQoc3RhdGUsIGUpOworICAgIGluaXRGb3JTdHlsZVJlc29sdmUoc3RhdGUsIGUsIHBh
cmVudFN0eWxlKTsKIAotICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSwgcGFyZW50U3R5bGUsIHBz
ZXVkbyk7Ci0gICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLSAgICBtX3N0eWxl
LT5pbmhlcml0RnJvbShtX3BhcmVudFN0eWxlKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0
eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgIHN0eWxlLT5pbmhlcml0RnJvbShzdGF0
ZS5wYXJlbnRTdHlsZSgpKTsKKyAgICBzdGF0ZS5zZXRQc2V1ZG9TdHlsZShwc2V1ZG8pOworICAg
IHN0YXRlLnNldFN0eWxlKHN0eWxlLmdldCgpKTsKIAogICAgIC8vIFNpbmNlIHdlIGRvbid0IHVz
ZSBwc2V1ZG8tZWxlbWVudHMgaW4gYW55IG9mIG91ciBxdWlyay9wcmludCB1c2VyIGFnZW50IHJ1
bGVzLCBkb24ndCB3YXN0ZSB0aW1lIHdhbGtpbmcKICAgICAvLyB0aG9zZSBydWxlcy4KIAogICAg
IC8vIENoZWNrIFVBLCB1c2VyIGFuZCBhdXRob3IgcnVsZXMuCisKICAgICBNYXRjaFJlc3VsdCBt
YXRjaFJlc3VsdDsKLSAgICBtYXRjaFVBUnVsZXMobWF0Y2hSZXN1bHQpOworICAgIG1hdGNoVUFS
dWxlcyhzdGF0ZSwgbWF0Y2hSZXN1bHQpOwogCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2Vy
U3R5bGVzKSB7Ci0gICAgICAgIG1hdGNoVXNlclJ1bGVzKG1hdGNoUmVzdWx0LCBmYWxzZSk7Ci0g
ICAgICAgIG1hdGNoQXV0aG9yUnVsZXMobWF0Y2hSZXN1bHQsIGZhbHNlKTsKKyAgICAgICAgbWF0
Y2hVc2VyUnVsZXMoc3RhdGUsIG1hdGNoUmVzdWx0KTsKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxl
cyhzdGF0ZSwgbWF0Y2hSZXN1bHQpOwogICAgIH0KIAogICAgIGlmIChtYXRjaFJlc3VsdC5tYXRj
aGVkUHJvcGVydGllcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbV9zdHls
ZS0+c2V0U3R5bGVUeXBlKHBzZXVkbyk7CisgICAgc3R5bGUtPnNldFN0eWxlVHlwZShwc2V1ZG8p
OwogCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhtYXRjaFJlc3VsdCwgZSk7CisgICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllcyhzdGF0ZSwgbWF0Y2hSZXN1bHQsIGUpOwogCiAgICAgLy8gQ2xl
YW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRpc3BsYXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFt
b25nIG90aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0UmVuZGVyU3R5bGUoc3R5bGUoKSwgcGFyZW50
U3R5bGUsIDApOworICAgIGFkanVzdFJlbmRlclN0eWxlKHN0YXRlLCBzdHlsZS5nZXQoKSwgc3Rh
dGUucGFyZW50U3R5bGUoKSwgMCk7CiAKICAgICAvLyBTdGFydCBsb2FkaW5nIHJlc291cmNlcyBy
ZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoKTsKKyAg
ICBsb2FkUGVuZGluZ1Jlc291cmNlcyhzdGF0ZSk7CiAKICAgICBkb2N1bWVudCgpLT5kaWRBY2Nl
c3NTdHlsZVJlc29sdmVyKCk7CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICBy
ZXR1cm4gbV9zdHlsZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHN0eWxlLnJlbGVhc2UoKTsKIH0K
IAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKGlu
dCBwYWdlSW5kZXgpCiB7Ci0gICAgaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLT5kb2N1
bWVudEVsZW1lbnQoKSk7IC8vIG1fcm9vdEVsZW1lbnRTdHlsZSB3aWxsIGJlIHNldCB0byB0aGUg
ZG9jdW1lbnQgc3R5bGUuCisgICAgUmVzb2x2ZVN0YXRlIHN0YXRlOworICAgIGluaXRGb3JTdHls
ZVJlc29sdmUoc3RhdGUsIGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKTsgLy8gbV9yb290
RWxlbWVudFN0eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBkb2N1bWVudCBzdHlsZS4KIAotICAgIG1f
c3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgbV9zdHlsZS0+aW5oZXJpdEZyb20o
bV9yb290RWxlbWVudFN0eWxlKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gUmVu
ZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgIHN0eWxlLT5pbmhlcml0RnJvbShzdGF0ZS5yb290RWxl
bWVudFN0eWxlKCkpOworICAgIHN0YXRlLnNldEVsZW1lbnQoZG9jdW1lbnQoKS0+ZG9jdW1lbnRF
bGVtZW50KCkpOworICAgIHN0YXRlLnNldFN0eWxlKHN0eWxlLmdldCgpKTsKIAotICAgIGNvbnN0
IGJvb2wgaXNMZWZ0ID0gaXNMZWZ0UGFnZShwYWdlSW5kZXgpOworICAgIGNvbnN0IGJvb2wgaXNM
ZWZ0ID0gaXNMZWZ0UGFnZShzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHBhZ2VJbmRleCk7CiAg
ICAgY29uc3QgYm9vbCBpc0ZpcnN0ID0gaXNGaXJzdFBhZ2UocGFnZUluZGV4KTsKICAgICBjb25z
dCBTdHJpbmcgcGFnZSA9IHBhZ2VOYW1lKHBhZ2VJbmRleCk7CiAgICAgCkBAIC0xODA5LDQyICsx
NzgzLDQ1IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9y
UGFnZShpbnQgcGFnZUluZGV4KQogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV91c2VyU3R5
bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CiAgICAgLy8gT25seSBjb25zaWRlciB0
aGUgZ2xvYmFsIGF1dGhvciBSdWxlU2V0IGZvciBAcGFnZSBydWxlcywgYXMgcGVyIHRoZSBIVE1M
NSBzcGVjLgogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV9hdXRob3JTdHlsZS5nZXQoKSwg
aXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKLSAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAg
c3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwogICAgIGJvb2wgaW5oZXJpdGVkT25seSA9IGZh
bHNlOwogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRp
ZXM8VmFyaWFibGVEZWZpbml0aW9ucz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQ
cm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFBy
b3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4oc3RhdGUsIHJlc3VsdCwgZmFsc2UsIDAsIHJl
c3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKICNlbmRp
ZgotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4ocmVz
dWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVy
aXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVy
dGllcz4oc3RhdGUsIHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5z
aXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKIAogICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0
aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4KLSAgICB1cGRhdGVGb250KCk7CisgICAg
dXBkYXRlRm9udChzdGF0ZSk7CiAKICAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBh
cmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUuCi0gICAgaWYgKG1fbGluZUhlaWdo
dFZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9s
aW5lSGVpZ2h0VmFsdWUpOworICAgIGlmIChzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSkKKyAgICAg
ICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5l
SGVpZ2h0VmFsdWUoKSk7CiAKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5
UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNp
emUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93
UHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgcmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNo
ZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwogCiAgICAgLy8gU3RhcnQg
bG9hZGluZyByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5k
aW5nUmVzb3VyY2VzKCk7CisgICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoc3RhdGUpOwogCiAgICAg
ZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCiAgICAgLy8gTm93IHJldHVy
biB0aGUgc3R5bGUuCi0gICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOworICAgIHJldHVybiBz
dHlsZS5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2
ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKQogewotICAgIG1fc3R5bGUgPSBSZW5kZXJTdHls
ZTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IFJlbmRlclN0eWxl
OjpjcmVhdGUoKTsKKyAgICBSZXNvbHZlU3RhdGUgc3RhdGU7CisgICAgc3RhdGUuc2V0RWxlbWVu
dChkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSk7CisgICAgc3RhdGUuc2V0U3R5bGUoc3R5
bGUuZ2V0KCkpOwogICAgIC8vIE1ha2Ugc3VyZSBvdXIgZm9udHMgYXJlIGluaXRpYWxpemVkIGlm
IHdlIGRvbid0IGluaGVyaXQgdGhlbSBmcm9tIG91ciBwYXJlbnQgc3R5bGUuCiAgICAgaWYgKFNl
dHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50U2V0dGluZ3MoKSkgewotICAgICAgICBpbml0aWFs
aXplRm9udFN0eWxlKHNldHRpbmdzKTsKLSAgICAgICAgbV9zdHlsZS0+Zm9udCgpLnVwZGF0ZShm
b250U2VsZWN0b3IoKSk7CisgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc3RhdGUsIHNldHRp
bmdzKTsKKyAgICAgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogICAg
IH0gZWxzZQotICAgICAgICBtX3N0eWxlLT5mb250KCkudXBkYXRlKDApOworICAgICAgICBzdHls
ZS0+Zm9udCgpLnVwZGF0ZSgwKTsKIAotICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKKyAg
ICByZXR1cm4gc3R5bGUucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBT
dHlsZVJlc29sdmVyOjpzdHlsZUZvclRleHQoVGV4dCogdGV4dE5vZGUpCkBAIC0xOTM5LDcgKzE5
MTYsNyBAQCBzdGF0aWMgYm9vbCBpc0Rpc3BsYXlGbGV4aWJsZUJveChFRGlzcGxheSBkaXNwbGF5
KQogICAgIHJldHVybiBkaXNwbGF5ID09IEZMRVggfHwgZGlzcGxheSA9PSBJTkxJTkVfRkxFWDsK
IH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSog
c3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVudCAqZSkKK3ZvaWQgU3R5bGVS
ZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQgKmUpCiB7CiAgICAg
QVNTRVJUKHBhcmVudFN0eWxlKTsKIApAQCAtMTk1MSw3ICsxOTI4LDcgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHkKICAgICAgICAgLy8gcHJvcGVydHkuCiAgICAgICAgIC8vIFNpdGVzIGFsc28g
Y29tbW9ubHkgdXNlIGRpc3BsYXk6aW5saW5lL2Jsb2NrIG9uIDx0ZD5zIGFuZCA8dGFibGU+cy4g
SW4gcXVpcmtzIG1vZGUgd2UgZm9yY2UKICAgICAgICAgLy8gdGhlc2UgdGFncyB0byByZXRhaW4g
dGhlaXIgZGlzcGxheSB0eXBlcy4KLSAgICAgICAgaWYgKCFtX3NlbGVjdG9yQ2hlY2tlci5zdHJp
Y3RQYXJzaW5nKCkgJiYgZSkgeworICAgICAgICBpZiAoZG9jdW1lbnQoKS0+aW5RdWlya3NNb2Rl
KCkgJiYgZSkgewogICAgICAgICAgICAgaWYgKGUtPmhhc1RhZ05hbWUodGRUYWcpKSB7CiAgICAg
ICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoVEFCTEVfQ0VMTCk7CiAgICAgICAgICAgICAg
ICAgc3R5bGUtPnNldEZsb2F0aW5nKE5vRmxvYXQpOwpAQCAtMTk5OCw3ICsxOTc1LDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHkKIAogICAgICAgICAvLyBBYnNvbHV0ZS9maXhlZCBwb3NpdGlv
bmVkIGVsZW1lbnRzLCBmbG9hdGluZyBlbGVtZW50cyBhbmQgdGhlIGRvY3VtZW50IGVsZW1lbnQg
bmVlZCBibG9jay1saWtlIG91dHNpZGUgZGlzcGxheS4KICAgICAgICAgaWYgKHN0eWxlLT5oYXNP
dXRPZkZsb3dQb3NpdGlvbigpIHx8IHN0eWxlLT5pc0Zsb2F0aW5nKCkgfHwgKGUgJiYgZS0+ZG9j
dW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gZSkpCi0gICAgICAgICAgICBzdHlsZS0+c2V0
RGlzcGxheShlcXVpdmFsZW50QmxvY2tEaXNwbGF5KHN0eWxlLT5kaXNwbGF5KCksIHN0eWxlLT5p
c0Zsb2F0aW5nKCksIG1fc2VsZWN0b3JDaGVja2VyLnN0cmljdFBhcnNpbmcoKSkpOworICAgICAg
ICAgICAgc3R5bGUtPnNldERpc3BsYXkoZXF1aXZhbGVudEJsb2NrRGlzcGxheShzdHlsZS0+ZGlz
cGxheSgpLCBzdHlsZS0+aXNGbG9hdGluZygpLCAhZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkp
KTsKIAogICAgICAgICAvLyBGSVhNRTogRG9uJ3Qgc3VwcG9ydCB0aGlzIG11dGF0aW9uIGZvciBw
c2V1ZG8gc3R5bGVzIGxpa2UgZmlyc3QtbGV0dGVyIG9yIGZpcnN0LWxpbmUsIHNpbmNlIGl0J3Mg
bm90IGNvbXBsZXRlbHkKICAgICAgICAgLy8gY2xlYXIgaG93IHRoYXQgc2hvdWxkIHdvcmsuCkBA
IC0yMDI4LDcgKzIwMDUsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxl
KFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eQogCiAgICAgICAgIGlm
IChpc0Rpc3BsYXlGbGV4aWJsZUJveChwYXJlbnRTdHlsZS0+ZGlzcGxheSgpKSkgewogICAgICAg
ICAgICAgc3R5bGUtPnNldEZsb2F0aW5nKE5vRmxvYXQpOwotICAgICAgICAgICAgc3R5bGUtPnNl
dERpc3BsYXkoZXF1aXZhbGVudEJsb2NrRGlzcGxheShzdHlsZS0+ZGlzcGxheSgpLCBzdHlsZS0+
aXNGbG9hdGluZygpLCBtX3NlbGVjdG9yQ2hlY2tlci5zdHJpY3RQYXJzaW5nKCkpKTsKKyAgICAg
ICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KGVxdWl2YWxlbnRCbG9ja0Rpc3BsYXkoc3R5bGUtPmRp
c3BsYXkoKSwgc3R5bGUtPmlzRmxvYXRpbmcoKSwgIWRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgp
KSk7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShESUFMT0dfRUxFTUVOVCkKQEAgLTIxMzIsNyAr
MjEwOSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5
bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5CiAKICAgICAvLyBMZXQgdGhlIHRoZW1l
IGFsc28gaGF2ZSBhIGNyYWNrIGF0IGFkanVzdGluZyB0aGUgc3R5bGUuCiAgICAgaWYgKHN0eWxl
LT5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+
YWRqdXN0U3R5bGUodGhpcywgc3R5bGUsIGUsIG1faGFzVUFBcHBlYXJhbmNlLCBtX2JvcmRlckRh
dGEsIG1fYmFja2dyb3VuZERhdGEsIG1fYmFja2dyb3VuZENvbG9yKTsKKyAgICAgICAgUmVuZGVy
VGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1c3RTdHlsZSh0aGlzLCBzdHlsZSwgZSwgc3RhdGUu
aGFzVUFBcHBlYXJhbmNlKCksIHN0YXRlLmJvcmRlckRhdGEoKSwgc3RhdGUuYmFja2dyb3VuZERh
dGEoKSwgc3RhdGUuYmFja2dyb3VuZENvbG9yKCkpOwogCiAgICAgLy8gSWYgd2UgaGF2ZSBmaXJz
dC1sZXR0ZXIgcHNldWRvIHN0eWxlLCBkbyBub3Qgc2hhcmUgdGhpcyBzdHlsZS4KICAgICBpZiAo
c3R5bGUtPmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCkBAIC0yMjEzLDI3ICsyMTkwLDE3
IEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9yT3JpZW50YXRpb25DaGFuZ2UoUmVuZGVyU3R5bGUqIHN0
eWxlKQogICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsK
IH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjp1cGRhdGVGb250KCkKK3ZvaWQgU3R5bGVSZXNvbHZl
cjo6dXBkYXRlRm9udChSZXNvbHZlU3RhdGUmIHN0YXRlKQogewotICAgIGlmICghbV9mb250RGly
dHkpCisgICAgaWYgKCFzdGF0ZS5mb250RGlydHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Y2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgpOwotICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5n
ZShzdHlsZSgpLCBtX3BhcmVudFN0eWxlKTsKLSAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3R5bGUo
KSwgbV9wYXJlbnRTdHlsZSk7Ci0gICAgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShzdHlsZSgp
KTsKLSAgICBtX3N0eWxlLT5mb250KCkudXBkYXRlKG1fZm9udFNlbGVjdG9yKTsKLSAgICBtX2Zv
bnREaXJ0eSA9IGZhbHNlOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNhY2hlQm9yZGVyQW5k
QmFja2dyb3VuZCgpCi17Ci0gICAgbV9oYXNVQUFwcGVhcmFuY2UgPSBtX3N0eWxlLT5oYXNBcHBl
YXJhbmNlKCk7Ci0gICAgaWYgKG1faGFzVUFBcHBlYXJhbmNlKSB7Ci0gICAgICAgIG1fYm9yZGVy
RGF0YSA9IG1fc3R5bGUtPmJvcmRlcigpOwotICAgICAgICBtX2JhY2tncm91bmREYXRhID0gKm1f
c3R5bGUtPmJhY2tncm91bmRMYXllcnMoKTsKLSAgICAgICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBt
X3N0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKTsKLSAgICB9CisgICAgY2hlY2tGb3JUZXh0U2l6ZUFk
anVzdChzdGF0ZS5zdHlsZSgpKTsKKyAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uoc3Rh
dGUsIHN0YXRlLnN0eWxlKCksIHN0YXRlLnBhcmVudFN0eWxlKCkpOworICAgIGNoZWNrRm9yWm9v
bUNoYW5nZShzdGF0ZSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucGFyZW50U3R5bGUoKSk7CisgICAg
Y2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShzdGF0ZS5zdHlsZSgpKTsKKyAgICBzdGF0ZS5zdHls
ZSgpLT5mb250KCkudXBkYXRlKG1fZm9udFNlbGVjdG9yKTsKKyAgICBzdGF0ZS5zZXRGb250RGly
dHkoZmFsc2UpOwogfQogCiBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBTdHlsZVJlc29sdmVyOjpz
dHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkK
QEAgLTIyNDYsNjUgKzIyMTMsNjkgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNv
bHZlcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgUHMKICAgICBpZiAo
IWUgfHwgIWUtPmRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIG1fc2VsZWN0b3JDaGVja2VyLnNldE1vZGUoU2VsZWN0b3JDaGVja2Vy
OjpDb2xsZWN0aW5nUnVsZXMpOwotCi0gICAgaW5pdEVsZW1lbnQoZSk7Ci0gICAgaW5pdEZvclN0
eWxlUmVzb2x2ZShlLCAwLCBwc2V1ZG9JZCk7CisgICAgUmVzb2x2ZVN0YXRlIHN0YXRlOworICAg
IGluaXRFbGVtZW50KHN0YXRlLCBlKTsKKyAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKHN0YXRlLCBl
KTsKKyAgICBzdGF0ZS5zZXRQc2V1ZG9TdHlsZShwc2V1ZG9JZCk7CisgICAgc3RhdGUuc2V0TW9k
ZShTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7CiAKICAgICBNYXRjaFJlc3VsdCBk
dW1teTsKICAgICBpZiAocnVsZXNUb0luY2x1ZGUgJiBVQUFuZFVzZXJDU1NSdWxlcykgewogICAg
ICAgICAvLyBGaXJzdCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB1c2VyIGFnZW50IHNoZWV0Lgot
ICAgICAgICBtYXRjaFVBUnVsZXMoZHVtbXkpOworICAgICAgICBtYXRjaFVBUnVsZXMoc3RhdGUs
IGR1bW15KTsKIAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sgdXNlciBzaGVldCBydWxlcy4KLSAg
ICAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICAgICAgbWF0Y2hV
c2VyUnVsZXMoZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CisgICAgICAg
IGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykgeworICAgICAgICAgICAgc3RhdGUuc2V0
SW5jbHVkZUVtcHR5UnVsZXMocnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKKyAgICAg
ICAgICAgIG1hdGNoVXNlclJ1bGVzKHN0YXRlLCBkdW1teSk7CisgICAgICAgIH0KICAgICB9CiAK
ICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgKHJ1bGVzVG9JbmNsdWRlICYg
QXV0aG9yQ1NTUnVsZXMpKSB7Ci0gICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVzVG9J
bmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcyk7Ci0KKyAgICAgICAgc3RhdGUuc2V0U2FtZU9y
aWdpbk9ubHkoIShydWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2luQ1NTUnVsZXMpKTsKKyAgICAg
ICAgc3RhdGUuc2V0SW5jbHVkZUVtcHR5UnVsZXMocnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1
bGVzKTsKKyAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRob3Igc2hl
ZXRzLgotICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKGR1bW15LCBydWxlc1RvSW5jbHVkZSAmIEVt
cHR5Q1NTUnVsZXMpOwotCi0gICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSBmYWxzZTsKKyAgICAg
ICAgbWF0Y2hBdXRob3JSdWxlcyhzdGF0ZSwgZHVtbXkpOwogICAgIH0KLQotICAgIG1fc2VsZWN0
b3JDaGVja2VyLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpSZXNvbHZpbmdTdHlsZSk7Ci0KLSAg
ICByZXR1cm4gbV9ydWxlTGlzdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHN0YXRlLnJ1bGVMaXN0
KCkucmVsZWFzZSgpOwogfQogCi1pbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpydWxlTWF0Y2hl
cyhjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQor
aW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6cnVsZU1hdGNoZXMoUmVzb2x2ZVN0YXRlJiBzdGF0
ZSwgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwg
UHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pCiB7Ci0gICAgbV9keW5hbWljUHNldWRvID0gTk9QU0VV
RE87CisgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRlLmVsZW1lbnQoKTsKIAogICAgIGlmIChy
dWxlRGF0YS5oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoKSkgewogICAgICAgICAvLyBXZSBrbm93
IHRoaXMgc2VsZWN0b3IgZG9lcyBub3QgaW5jbHVkZSBhbnkgcHNldWRvIGVsZW1lbnRzLgotICAg
ICAgICBpZiAobV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETykKKyAgICAgICAgaWYgKHN0YXRlLnBz
ZXVkb1N0eWxlKCkgIT0gTk9QU0VVRE8pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIC8vIFdlIGtub3cgYSBzdWZmaWNpZW50bHkgc2ltcGxlIHNpbmdsZSBwYXJ0IHNlbGVjdG9y
IG1hdGNoZXMgc2ltcGx5IGJlY2F1c2Ugd2UgZm91bmQgaXQgZnJvbSB0aGUgcnVsZSBoYXNoLgog
ICAgICAgICAvLyBUaGlzIGlzIGxpbWl0ZWQgdG8gSFRNTCBvbmx5IHNvIHdlIGRvbid0IG5lZWQg
dG8gY2hlY2sgdGhlIG5hbWVzcGFjZS4KLSAgICAgICAgaWYgKHJ1bGVEYXRhLmhhc1JpZ2h0bW9z
dFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKCkgJiYgbV9lbGVtZW50LT5pc0hU
TUxFbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKHJ1bGVEYXRhLmhhc1JpZ2h0bW9zdFNlbGVjdG9y
TWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKCkgJiYgZWxlbWVudC0+aXNIVE1MRWxlbWVudCgp
KSB7CiAgICAgICAgICAgICBpZiAoIXJ1bGVEYXRhLmhhc011bHRpcGFydFNlbGVjdG9yKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHJ1bGVE
YXRhLnNlbGVjdG9yKCktPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZyAmJiAhU2VsZWN0b3JD
aGVja2VyOjp0YWdNYXRjaGVzKG1fZWxlbWVudCwgcnVsZURhdGEuc2VsZWN0b3IoKS0+dGFnUU5h
bWUoKSkpCisgICAgICAgIGlmIChydWxlRGF0YS5zZWxlY3RvcigpLT5tX21hdGNoID09IENTU1Nl
bGVjdG9yOjpUYWcgJiYgIVNlbGVjdG9yQ2hlY2tlcjo6dGFnTWF0Y2hlcyhlbGVtZW50LCBydWxl
RGF0YS5zZWxlY3RvcigpLT50YWdRTmFtZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdEF0dHJpYnV0
ZVNlbGVjdG9yKG1fZWxlbWVudCwgcnVsZURhdGEuc2VsZWN0b3IoKSkpCisgICAgICAgIGlmICgh
U2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hlY2tSaWdodG1vc3RBdHRyaWJ1dGVTZWxlY3RvcihlbGVt
ZW50LCBydWxlRGF0YS5zZWxlY3RvcigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgcmV0dXJuIG1fc2VsZWN0b3JDaGVja2VyLmZhc3RDaGVjayhydWxlRGF0YS5zZWxlY3Rv
cigpLCBtX2VsZW1lbnQpOworCisgICAgICAgIHJldHVybiBTZWxlY3RvckNoZWNrZXI6OmZhc3RD
aGVjayhydWxlRGF0YS5zZWxlY3RvcigpLCBlbGVtZW50KTsKICAgICB9CiAKICAgICAvLyBTbG93
IHBhdGguCi0gICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250
ZXh0KHJ1bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNp
dGVkTWF0Y2hFbmFibGVkKTsKLSAgICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IHN0eWxlKCk7Cisg
ICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVE
YXRhLnNlbGVjdG9yKCksIGVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRW5h
YmxlZCk7CisgICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBzdGF0ZS5zdHlsZSgpOwogICAgIGNv
bnRleHQuc2NvcGUgPSBzY29wZTsKLSAgICBjb250ZXh0LnBzZXVkb1N0eWxlID0gbV9wc2V1ZG9T
dHlsZTsKLSAgICBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gbV9zZWxlY3RvckNoZWNr
ZXIubWF0Y2goY29udGV4dCwgbV9keW5hbWljUHNldWRvLCBET01TaWJsaW5nVHJhdmVyc2FsU3Ry
YXRlZ3koKSk7CisgICAgY29udGV4dC5wc2V1ZG9TdHlsZSA9IHN0YXRlLnBzZXVkb1N0eWxlKCk7
CisKKyAgICAvLyBvbi1zdGFjaworICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIo
ZG9jdW1lbnQoKSk7CisgICAgc2VsZWN0b3JDaGVja2VyLnNldE1vZGUoc3RhdGUubW9kZSgpKTsK
KyAgICBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gc2VsZWN0b3JDaGVja2VyLm1hdGNo
KGNvbnRleHQsIGR5bmFtaWNQc2V1ZG8sIERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSgpKTsK
ICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETyAmJiBt
X3BzZXVkb1N0eWxlICE9IG1fZHluYW1pY1BzZXVkbykKKyAgICBpZiAoc3RhdGUucHNldWRvU3R5
bGUoKSAhPSBOT1BTRVVETyAmJiBzdGF0ZS5wc2V1ZG9TdHlsZSgpICE9IGR5bmFtaWNQc2V1ZG8p
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIzMTQsMTAg
KzIyODUsOSBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9uU2VsZWN0b3IoY29uc3Qg
Q1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZQogICAgIGlmICghcmVnaW9uU2VsZWN0
b3IgfHwgIXJlZ2lvbkVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fcHNl
dWRvU3R5bGUgPSBOT1BTRVVETzsKLQorICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNr
ZXIoZG9jdW1lbnQoKSk7CiAgICAgZm9yIChjb25zdCBDU1NTZWxlY3RvciogcyA9IHJlZ2lvblNl
bGVjdG9yOyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKQotICAgICAgICBpZiAobV9z
ZWxlY3RvckNoZWNrZXIubWF0Y2hlcyhzLCByZWdpb25FbGVtZW50KSkKKyAgICAgICAgaWYgKHNl
bGVjdG9yQ2hlY2tlci5tYXRjaGVzKHMsIHJlZ2lvbkVsZW1lbnQpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzM3LDkgKzIzMDcsOSBAQCBMZW5n
dGggU3R5bGVSZXNvbHZlcjo6Y29udmVydFRvRmxvYXRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlLCBSZQogfQogCiB0ZW1wbGF0ZSA8U3R5bGVSZXNvbHZlcjo6U3R5bGVB
cHBsaWNhdGlvblBhc3MgcGFzcz4KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVz
KGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgYm9v
bCBpc0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUg
cHJvcGVydHlXaGl0ZWxpc3RUeXBlKQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnRp
ZXMoUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGll
cywgU3R5bGVSdWxlKiBydWxlLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHks
IFByb3BlcnR5V2hpdGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5cGUpCiB7Ci0gICAgQVNT
RVJUKChwcm9wZXJ0eVdoaXRlbGlzdFR5cGUgIT0gUHJvcGVydHlXaGl0ZWxpc3RSZWdpb24pIHx8
IG1fcmVnaW9uRm9yU3R5bGluZyk7CisgICAgQVNTRVJUKChwcm9wZXJ0eVdoaXRlbGlzdFR5cGUg
IT0gUHJvcGVydHlXaGl0ZWxpc3RSZWdpb24pIHx8IHN0YXRlLnJlZ2lvbkZvclN0eWxpbmcoKSk7
CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbFByb2Nlc3NSdWxlKGRvY3VtZW50KCksIHJ1bGUsIHRoaXMpOwog
CiAgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IHByb3BlcnRpZXMtPnByb3BlcnR5Q291bnQo
KTsKQEAgLTIzNjcsNyArMjMzNyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsCiAgICAgICAg
IGNhc2UgVmFyaWFibGVEZWZpbml0aW9uczoKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKENT
U1Byb3BlcnR5VmFyaWFibGUgPCBmaXJzdENTU1Byb3BlcnR5LCBDU1NfdmFyaWFibGVfaXNfYmVm
b3JlX2ZpcnN0X3Byb3BlcnR5KTsKICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9w
ZXJ0eVZhcmlhYmxlKQotICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgp
LCBjdXJyZW50LnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUs
IGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogI2Vu
ZGlmCiAgICAgICAgIGNhc2UgSGlnaFByaW9yaXR5UHJvcGVydGllczoKQEAgLTIzODAsNDIgKzIz
NTAsNDMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnRpZXMoY29uc3QgU3R5bGVQ
cm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWwKICNlbmRpZgogICAgICAgICAgICAgLy8g
Z2l2ZSBzcGVjaWFsIHByaW9yaXR5IHRvIGZvbnQteHh4LCBjb2xvciBwcm9wZXJ0aWVzLCBldGMK
ICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA8IENTU1Byb3BlcnR5TGluZUhlaWdodCkKLSAgICAg
ICAgICAgICAgICBhcHBseVByb3BlcnR5KGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsK
KyAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBjdXJyZW50LmlkKCksIGN1cnJl
bnQudmFsdWUoKSk7CiAgICAgICAgICAgICAvLyB3ZSBhcHBseSBsaW5lLWhlaWdodCBsYXRlcgog
ICAgICAgICAgICAgZWxzZSBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQot
ICAgICAgICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gY3VycmVudC52YWx1ZSgpOworICAg
ICAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZShjdXJyZW50LnZhbHVlKCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG93UHJpb3JpdHlQcm9wZXJ0aWVzOgog
ICAgICAgICAgICAgaWYgKHByb3BlcnR5ID4gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQotICAgICAg
ICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOwor
ICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIGN1cnJlbnQuaWQoKSwgY3VycmVu
dC52YWx1ZSgpKTsKICAgICAgICAgfQogICAgIH0KICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZFByb2Nlc3NSdWxlKGNvb2tpZSk7CiB9CiAKIHRlbXBsYXRlIDxTdHlsZVJlc29sdmVy
OjpTdHlsZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1h
dGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgYm9vbCBpc0lt
cG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5
KQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKFJlc29sdmVTdGF0
ZSYgc3RhdGUsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgYm9vbCBpc0ltcG9ydGFu
dCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5KQogewog
ICAgIGlmIChzdGFydEluZGV4ID09IC0xKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9z
dHlsZS0+aW5zaWRlTGluaygpICE9IE5vdEluc2lkZUxpbmspIHsKKyAgICBpZiAoc3RhdGUuc3R5
bGUoKS0+aW5zaWRlTGluaygpICE9IE5vdEluc2lkZUxpbmspIHsKICAgICAgICAgZm9yIChpbnQg
aSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewogICAgICAgICAgICAgY29uc3Qg
TWF0Y2hlZFByb3BlcnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hl
ZFByb3BlcnRpZXNbaV07CiAgICAgICAgICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gbWF0
Y2hlZFByb3BlcnRpZXMubGlua01hdGNoVHlwZTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3
b3VsZCBiZSBuaWNlciB0byBwYXNzIHRoZXNlIGFzIGFyZ3VtZW50cyBidXQgdGhhdCByZXF1aXJl
cyBjaGFuZ2VzIGluIG1hbnkgcGxhY2VzLgotICAgICAgICAgICAgbV9hcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbms7
Ci0gICAgICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBsaW5rTWF0
Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7CisgICAgICAgICAgICBzdGF0
ZS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUobGlua01hdGNoVHlwZSAmIFNlbGVjdG9y
Q2hlY2tlcjo6TWF0Y2hMaW5rKTsKKyAgICAgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlU
b1Zpc2l0ZWRMaW5rU3R5bGUobGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hW
aXNpdGVkKTsKIAotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0aWVzPHBhc3M+KG1hdGNoZWRQcm9w
ZXJ0aWVzLnByb3BlcnRpZXMuZ2V0KCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRSdWxlc1tpXSwgaXNJ
bXBvcnRhbnQsIGluaGVyaXRlZE9ubHksIHN0YXRpY19jYXN0PFByb3BlcnR5V2hpdGVsaXN0VHlw
ZT4obWF0Y2hlZFByb3BlcnRpZXMud2hpdGVsaXN0VHlwZSkpOworICAgICAgICAgICAgYXBwbHlQ
cm9wZXJ0aWVzPHBhc3M+KHN0YXRlLCBtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgp
LCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5
LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndo
aXRlbGlzdFR5cGUpKTsKICAgICAgICAgfQotICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSA9IHRydWU7Ci0gICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSA9IGZhbHNlOworICAgICAgICAvLyBuZWVkIHRvIHJldmVydD8gSSB0aGluaywgd2UgZG9uJ3Qg
bmVlZC4uLgorICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1
ZSk7CisgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFs
c2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGZvciAoaW50IGkgPSBzdGFydEluZGV4
OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKICAgICAgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMm
IG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXNbaV07Ci0g
ICAgICAgIGFwcGx5UHJvcGVydGllczxwYXNzPihtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVz
LmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0
ZWRPbmx5LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1hdGNoZWRQcm9wZXJ0
aWVzLndoaXRlbGlzdFR5cGUpKTsKKyAgICAgICAgYXBwbHlQcm9wZXJ0aWVzPHBhc3M+KHN0YXRl
LCBtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVk
UnVsZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNfY2FzdDxQcm9wZXJ0
eVdoaXRlbGlzdFR5cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUpKTsKICAgICB9
CiB9CiAKQEAgLTI1MTQsOSArMjQ4NSwxMSBAQCBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUluTWF0
Y2hlZFByb3BlcnRpZXNDYWNoZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBSZQogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdCBFbGVtZW50KiBlbGVt
ZW50KQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKFJlc29sdmVT
dGF0ZSYgc3RhdGUsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QgRWxlbWVu
dCogZWxlbWVudCkKIHsKICAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gc3RhdGUuc3R5bGUoKTsKKyAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBzdGF0
ZS5wYXJlbnRTdHlsZSgpOwogICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9IG1hdGNoUmVzdWx0Lmlz
Q2FjaGVhYmxlID8gY29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChtYXRjaFJlc3VsdC5tYXRj
aGVkUHJvcGVydGllcy5kYXRhKCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUo
KSkgOiAwOwogICAgIGJvb2wgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAgICAgY29uc3Qg
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0qIGNhY2hlSXRlbSA9IDA7CkBAIC0yNTI0LDE1ICsy
NDk3LDE2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25z
dCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIC8vIFdlIGNhbiBidWls
ZCB1cCB0aGUgc3R5bGUgYnkgY29weWluZyBub24taW5oZXJpdGVkIHByb3BlcnRpZXMgZnJvbSBh
biBlYXJsaWVyIHN0eWxlIG9iamVjdCBidWlsdCB1c2luZyB0aGUgc2FtZSBleGFjdAogICAgICAg
ICAvLyBzdHlsZSBkZWNsYXJhdGlvbnMuIFdlIHRoZW4gb25seSBuZWVkIHRvIGFwcGx5IHRoZSBp
bmhlcml0ZWQgcHJvcGVydGllcywgaWYgYW55LCBhcyB0aGVpciB2YWx1ZXMgY2FuIGRlcGVuZCBv
biB0aGUgCiAgICAgICAgIC8vIGVsZW1lbnQgY29udGV4dC4gVGhpcyBpcyBmYXN0IGFuZCBzYXZl
cyBtZW1vcnkgYnkgcmV1c2luZyB0aGUgc3R5bGUgZGF0YSBzdHJ1Y3R1cmVzLgotICAgICAgICBt
X3N0eWxlLT5jb3B5Tm9uSW5oZXJpdGVkRnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgp
KTsKLSAgICAgICAgaWYgKG1fcGFyZW50U3R5bGUtPmluaGVyaXRlZERhdGFTaGFyZWQoY2FjaGVJ
dGVtLT5wYXJlbnRSZW5kZXJTdHlsZS5nZXQoKSkgJiYgIWlzQXRTaGFkb3dCb3VuZGFyeShlbGVt
ZW50KSkgewotICAgICAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXR1cyA9IG1fc3R5bGUtPmlu
c2lkZUxpbmsoKTsKKyAgICAgICAgc3R5bGUtPmNvcHlOb25Jbmhlcml0ZWRGcm9tKGNhY2hlSXRl
bS0+cmVuZGVyU3R5bGUuZ2V0KCkpOworICAgICAgICAvLyBvcnoKKyAgICAgICAgaWYgKHBhcmVu
dFN0eWxlLT5pbmhlcml0ZWREYXRhU2hhcmVkKGNhY2hlSXRlbS0+cGFyZW50UmVuZGVyU3R5bGUu
Z2V0KCkpICYmICFpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkpIHsKKyAgICAgICAgICAgIEVJ
bnNpZGVMaW5rIGxpbmtTdGF0dXMgPSBzdHlsZS0+aW5zaWRlTGluaygpOwogICAgICAgICAgICAg
Ly8gSWYgdGhlIGNhY2hlIGl0ZW0gcGFyZW50IHN0eWxlIGhhcyBpZGVudGljYWwgaW5oZXJpdGVk
IHByb3BlcnRpZXMgdG8gdGhlIGN1cnJlbnQgcGFyZW50IHN0eWxlIHRoZW4gdGhlCiAgICAgICAg
ICAgICAvLyByZXN1bHRpbmcgc3R5bGUgd2lsbCBiZSBpZGVudGljYWwgdG9vLiBXZSBjb3B5IHRo
ZSBpbmhlcml0ZWQgcHJvcGVydGllcyBvdmVyIGZyb20gdGhlIGNhY2hlIGFuZCBhcmUgZG9uZS4K
LSAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUu
Z2V0KCkpOworICAgICAgICAgICAgc3R5bGUtPmluaGVyaXRGcm9tKGNhY2hlSXRlbS0+cmVuZGVy
U3R5bGUuZ2V0KCkpOwogCiAgICAgICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5IHRoZSBsaW5rIHN0
YXR1cyBpcyB0cmVhdGVkIGxpa2UgYW4gaW5oZXJpdGVkIHByb3BlcnR5LiBXZSBuZWVkIHRvIGV4
cGxpY2l0bHkgcmVzdG9yZSBpdC4KLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEluc2lkZUxpbmso
bGlua1N0YXR1cyk7CisgICAgICAgICAgICBzdHlsZS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdHVz
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBhcHBseUluaGVyaXRl
ZE9ubHkgPSB0cnVlOyAKQEAgLTI1NDAsNjAgKzI1MTQsNjAgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwg
Y29uc3QKIAogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgIC8vIEZpcnN0IGFwcGx5IGFs
bCB2YXJpYWJsZSBkZWZpbml0aW9ucywgYXMgdGhleSBtYXkgYmUgdXNlZCBkdXJpbmcgYXBwbGlj
YXRpb24gb2YgbGF0ZXIgcHJvcGVydGllcy4KLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZh
cmlhYmxlRGVmaW5pdGlvbnM+KG1hdGNoUmVzdWx0LCBmYWxzZSwgMCwgbWF0Y2hSZXN1bHQubWF0
Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KG1hdGNoUmVzdWx0LCB0cnVl
LCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMu
bGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1
bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUs
IGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJs
ZURlZmluaXRpb25zPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0
VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5
KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KHN0YXRl
LCBtYXRjaFJlc3VsdCwgZmFsc2UsIDAsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNp
emUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGll
czxWYXJpYWJsZURlZmluaXRpb25zPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVz
dWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9y
UnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZh
cmlhYmxlRGVmaW5pdGlvbnM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQu
cmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFw
cGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURl
ZmluaXRpb25zPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5m
aXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVk
T25seSk7CiAjZW5kaWYKIAogICAgIC8vIE5vdyB3ZSBoYXZlIGFsbCBvZiB0aGUgbWF0Y2hlZCBy
dWxlcyBpbiB0aGUgYXBwcm9wcmlhdGUgb3JkZXIuIFdhbGsgdGhlIHJ1bGVzIGFuZCBhcHBseQog
ICAgIC8vIGhpZ2gtcHJpb3JpdHkgcHJvcGVydGllcyBmaXJzdCwgaS5lLiwgdGhvc2UgcHJvcGVy
dGllcyB0aGF0IG90aGVyIHByb3BlcnRpZXMgZGVwZW5kIG9uLgogICAgIC8vIFRoZSBvcmRlciBp
cyAoMSkgaGlnaC1wcmlvcml0eSBub3QgaW1wb3J0YW50LCAoMikgaGlnaC1wcmlvcml0eSBpbXBv
cnRhbnQsICgzKSBub3JtYWwgbm90IGltcG9ydGFudAogICAgIC8vIGFuZCAoNCkgbm9ybWFsIGlt
cG9ydGFudC4KLSAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7Ci0gICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgZmFsc2UsIDAsIG1h
dGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25s
eSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPiht
YXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgbWF0
Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAg
IGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1
bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5y
YW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hl
ZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1h
dGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1
bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0KLSAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRl
bS0+cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBtX3N0eWxlLT5lZmZlY3RpdmVab29t
KCkpIHsKLSAgICAgICAgbV9mb250RGlydHkgPSB0cnVlOworICAgIHN0YXRlLnNldExpbmVIZWln
aHRWYWx1ZSgwKTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3Bl
cnRpZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgZmFsc2UsIDAsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQ
cm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRj
aGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQs
IHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJh
bmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwg
dHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdl
cy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUs
IG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RV
QVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisKKyAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hl
SXRlbS0+cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBzdHlsZS0+ZWZmZWN0aXZlWm9v
bSgpKSB7CisgICAgICAgIHN0YXRlLnNldEZvbnREaXJ0eSh0cnVlKTsKICAgICAgICAgYXBwbHlJ
bmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRp
cnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgotICAgIHVwZGF0ZUZvbnQoKTsKKyAg
ICB1cGRhdGVGb250KHN0YXRlKTsKIAogICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdl
IGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZS4KLSAgICBpZiAobV9saW5lSGVp
Z2h0VmFsdWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBt
X2xpbmVIZWlnaHRWYWx1ZSk7CisgICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKQorICAg
ICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLmxp
bmVIZWlnaHRWYWx1ZSgpKTsKIAogICAgIC8vIE1hbnkgcHJvcGVydGllcyBkZXBlbmQgb24gdGhl
IGZvbnQuIElmIGl0IGNoYW5nZXMgd2UganVzdCBhcHBseSBhbGwgcHJvcGVydGllcy4KLSAgICBp
ZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmZvbnREZXNjcmlwdGlvbigp
ICE9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKQorICAgIGlmIChjYWNoZUl0ZW0gJiYgY2Fj
aGVJdGVtLT5yZW5kZXJTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgIT0gc3R5bGUtPmZvbnREZXNj
cmlwdGlvbigpKQogICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkgPSBmYWxzZTsKIAogICAgIC8v
IE5vdyBkbyB0aGUgbm9ybWFsIHByaW9yaXR5IFVBIHByb3BlcnRpZXMuCi0gICAgYXBwbHlNYXRj
aGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCBmYWxzZSwg
bWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVB
UnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExv
d1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1
bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBw
bHlJbmhlcml0ZWRPbmx5KTsKICAgICAKICAgICAvLyBDYWNoZSBvdXIgYm9yZGVyIGFuZCBiYWNr
Z3JvdW5kIHNvIHRoYXQgd2UgY2FuIGV4YW1pbmUgdGhlbSBsYXRlci4KLSAgICBjYWNoZUJvcmRl
ckFuZEJhY2tncm91bmQoKTsKKyAgICBzdGF0ZS5jYWNoZUJvcmRlckFuZEJhY2tncm91bmQoc3Rh
dGUuc3R5bGUoKSk7CiAgICAgCiAgICAgLy8gTm93IGRvIHRoZSBhdXRob3IgYW5kIHVzZXIgbm9y
bWFsIHByaW9yaXR5IHByb3BlcnRpZXMgYW5kIGFsbCB0aGUgIWltcG9ydGFudCBwcm9wZXJ0aWVz
LgotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRj
aFJlc3VsdCwgZmFsc2UsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlICsgMSwgbWF0Y2hS
ZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsK
LSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hS
ZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVz
dWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRy
dWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMu
bGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1
bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBw
bHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5
UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2Vz
Lmxhc3RVQVJ1bGUgKyAxLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAx
LCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJp
b3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJh
bmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9y
aXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5n
ZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJ
bmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJv
cGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmly
c3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9u
bHkpOwogICAgCiAgICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0
aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CisgICAgbG9hZFBlbmRpbmdS
ZXNvdXJjZXMoc3RhdGUpOwogICAgIAotICAgIEFTU0VSVCghbV9mb250RGlydHkpOworICAgIEFT
U0VSVCghc3RhdGUuZm9udERpcnR5KCkpOwogICAgIAogICAgIGlmIChjYWNoZUl0ZW0gfHwgIWNh
Y2hlSGFzaCkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNDYWNoZWFibGVJbk1hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUobV9lbGVtZW50LCBtX3N0eWxlLmdldCgpLCBtX3BhcmVudFN0eWxlKSkK
KyAgICBpZiAoIWlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKGVsZW1lbnQsIHN0
eWxlLCBwYXJlbnRTdHlsZSkpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRUb01hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGUobV9zdHlsZS5nZXQoKSwgbV9wYXJlbnRTdHlsZSwgY2FjaGVIYXNoLCBtYXRj
aFJlc3VsdCk7CisgICAgYWRkVG9NYXRjaGVkUHJvcGVydGllc0NhY2hlKHN0eWxlLCBwYXJlbnRT
dHlsZSwgY2FjaGVIYXNoLCBtYXRjaFJlc3VsdCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBj
b21wYXJlUGFnZVJ1bGVzKGNvbnN0IFN0eWxlUnVsZVBhZ2UqIHIxLCBjb25zdCBTdHlsZVJ1bGVQ
YWdlKiByMikKQEAgLTI2NTUsMTAgKzI2MjksMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRj
aFBhZ2VSdWxlc0Zvckxpc3QoVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYgbWF0Y2hlZFJ1bGVzLAog
ICAgIH0KIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjppc0xlZnRQYWdlKGludCBwYWdlSW5kZXgp
IGNvbnN0Citib29sIFN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2UoUmVuZGVyU3R5bGUqIHJvb3RF
bGVtZW50U3R5bGUsIGludCBwYWdlSW5kZXgpIGNvbnN0CiB7CiAgICAgYm9vbCBpc0ZpcnN0UGFn
ZUxlZnQgPSBmYWxzZTsKLSAgICBpZiAoIW1fcm9vdEVsZW1lbnRTdHlsZS0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpKQorICAgIGlmICghcm9vdEVsZW1lbnRTdHlsZS0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpKQogICAgICAgICBpc0ZpcnN0UGFnZUxlZnQgPSB0cnVlOwogCiAgICAgcmV0dXJu
IChwYWdlSW5kZXggKyAoaXNGaXJzdFBhZ2VMZWZ0ID8gMSA6IDApKSAlIDI7CkBAIC0yNzU0LDE4
ICsyNzI4LDMyIEBAIENTU1N0eWxlUnVsZSogU3R5bGVSZXNvbHZlcjo6ZW5zdXJlRnVsbENTU09N
V3JhcHBlckZvckluc3BlY3RvcihTdHlsZVJ1bGUqIHJ1bGUpCiAgICAgcmV0dXJuIG1fc3R5bGVS
dWxlVG9DU1NPTVdyYXBwZXJNYXAuZ2V0KHJ1bGUpLmdldCgpOwogfQogCi12b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlKQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5V2l0aFZhbHVlQ2hlY2tpbmcoUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogewotICAgIGluaXRFbGVtZW50KDApOwotICAgIGluaXRGb3JT
dHlsZVJlc29sdmUoMCwgc3R5bGUpOwotICAgIG1fc3R5bGUgPSBzdHlsZTsKLSAgICBhcHBseVBy
b3BlcnR5VG9DdXJyZW50U3R5bGUoaWQsIHZhbHVlKTsKKyAgICBpZiAodmFsdWUpCisgICAgICAg
IGFwcGx5UHJvcGVydHkoc3RhdGUsIGlkLCB2YWx1ZSk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlGb250UHJvcGVydHlUb1N0eWxlKFJl
bmRlclN0eWxlKiB0YXJnZXQsIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHJlZmVyZW5jZSkKIHsK
LSAgICBpZiAodmFsdWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoaWQsIHZhbHVlKTsKKyAgICBS
ZXNvbHZlU3RhdGUgc3RhdGU7CisgICAgaW5pdEVsZW1lbnQoc3RhdGUsIDApOworICAgIGluaXRG
b3JTdHlsZVJlc29sdmUoc3RhdGUsIDAsIHRhcmdldCk7CisgICAgc3RhdGUuc2V0RWxlbWVudChk
b2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSk7CisgICAgc3RhdGUuc2V0U3R5bGUodGFyZ2V0
KTsKKworICAgIGFwcGx5UHJvcGVydHlXaXRoVmFsdWVDaGVja2luZyhzdGF0ZSwgQ1NTUHJvcGVy
dHlGb250RmFtaWx5LCByZWZlcmVuY2UtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlG
b250RmFtaWx5KS5nZXQoKSk7CisgICAgYXBwbHlQcm9wZXJ0eVdpdGhWYWx1ZUNoZWNraW5nKHN0
YXRlLCBDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgcmVmZXJlbmNlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KENTU1Byb3BlcnR5Rm9udFN0eWxlKS5nZXQoKSk7CisgICAgYXBwbHlQcm9wZXJ0eVdpdGhWYWx1
ZUNoZWNraW5nKHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCByZWZlcmVuY2UtPmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250VmFyaWFudCkuZ2V0KCkpOworICAgIGFwcGx5
UHJvcGVydHlXaXRoVmFsdWVDaGVja2luZyhzdGF0ZSwgQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBy
ZWZlcmVuY2UtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0KS5nZXQo
KSk7CisKKyAgICAvLyBBcyBkZXNjcmliZWQgaW4gQlVHNjYyOTEsIHNldHRpbmcgZm9udC1zaXpl
IGFuZCBsaW5lLWhlaWdodCBvbiBhIGZvbnQgbWF5IGVudGFpbCBhIENTU1ByaW1pdGl2ZVZhbHVl
Ojpjb21wdXRlTGVuZ3RoRG91YmxlIGNhbGwsCisgICAgLy8gd2hpY2ggYXNzdW1lcyB0aGUgZm9u
dE1ldHJpY3MgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIGFmZmVjdGVkIGZvbnQsIG90aGVyd2lzZSBh
IGNyYXNoIG9jY3VycyAoc2VlIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0Lzk2MTIy
KS4KKyAgICAvLyBUaGUgdXBkYXRlRm9udCgpIGNhbGxzIGJlbG93IHVwZGF0ZSB0aGUgZm9udE1l
dHJpY3MgYW5kIGVuc3VyZSB0aGUgcHJvcGVyIHNldHRpbmcgb2YgZm9udC1zaXplIGFuZCBsaW5l
LWhlaWdodC4KKyAgICB1cGRhdGVGb250KHN0YXRlKTsKKyAgICBhcHBseVByb3BlcnR5V2l0aFZh
bHVlQ2hlY2tpbmcoc3RhdGUsIENTU1Byb3BlcnR5Rm9udFNpemUsIHJlZmVyZW5jZS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXplKS5nZXQoKSk7CisgICAgdXBkYXRlRm9u
dChzdGF0ZSk7CisgICAgYXBwbHlQcm9wZXJ0eVdpdGhWYWx1ZUNoZWNraW5nKHN0YXRlLCBDU1NQ
cm9wZXJ0eUxpbmVIZWlnaHQsIHJlZmVyZW5jZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9w
ZXJ0eUxpbmVIZWlnaHQpLmdldCgpKTsKIH0KIAogaW5saW5lIGJvb2wgaXNWYWxpZFZpc2l0ZWRM
aW5rUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKQEAgLTI4NjAsMjAgKzI4NDgsNyBAQCBpbmxp
bmUgYm9vbCBTdHlsZVJlc29sdmVyOjppc1ZhbGlkQ3VlU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkKQogICAgIHJldHVybiBmYWxzZTsKIH0KICNlbmRpZgotLy8gU1ZHIGhhbmRsZXMgem9v
bWluZyBpbiBhIGRpZmZlcmVudCB3YXkgY29tcGFyZWQgdG8gQ1NTLiBUaGUgd2hvbGUgZG9jdW1l
bnQgaXMgc2NhbGVkIGluc3RlYWQKLS8vIG9mIGVhY2ggaW5kaXZpZHVhbCBsZW5ndGggdmFsdWUg
aW4gdGhlIHJlbmRlciBzdHlsZSAvIHRyZWUuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVu
Z3RoKigpCi0vLyBtdWx0aXBsaWVzIGVhY2ggcmVzb2x2ZWQgbGVuZ3RoIHdpdGggdGhlIHpvb20g
bXVsdGlwbGllciAtIHNvIGZvciBTVkcgd2UgbmVlZCB0byBkaXNhYmxlIHRoYXQuCi0vLyBUaG91
Z2ggYWxsIENTUyB2YWx1ZXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBvdXRlcm1vc3QgPHN2Zz4g
ZWxlbWVudHMgKHdpZHRoL2hlaWdodC9ib3JkZXIvcGFkZGluZy4uLikKLS8vIG5lZWQgdG8gcmVz
cGVjdCB0aGUgc2NhbGluZy4gUmVuZGVyQm94ICh0aGUgcGFyZW50IGNsYXNzIG9mIFJlbmRlclNW
R1Jvb3QpIGdyYWJzIHZhbHVlcyBsaWtlCi0vLyB3aWR0aC9oZWlnaHQvYm9yZGVyL3BhZGRpbmcv
Li4uIGZyb20gdGhlIFJlbmRlclN0eWxlIC0+IGZvciBTVkcgdGhlc2UgdmFsdWVzIHdvdWxkIG5l
dmVyIHNjYWxlLAotLy8gaWYgd2UnZCBwYXNzIGEgMS4wIHpvb20gZmFjdG9yIGV2ZXJ5aHdlcmUu
IFNvIHdlIG9ubHkgcGFzcyBhIHpvb20gZmFjdG9yIG9mIDEuMCBmb3Igc3BlY2lmaWMKLS8vIHBy
b3BlcnRpZXMgdGhhdCBhcmUgTk9UIGFsbG93ZWQgdG8gc2NhbGUgd2l0aGluIGEgem9vbWVkIFNW
RyBkb2N1bWVudCAobGV0dGVyL3dvcmQtc3BhY2luZy9mb250LXNpemUpLgotYm9vbCBTdHlsZVJl
c29sdmVyOjp1c2VTVkdab29tUnVsZXMoKQotewotICAgIHJldHVybiBtX2VsZW1lbnQgJiYgbV9l
bGVtZW50LT5pc1NWR0VsZW1lbnQoKTsKLX0KLQotc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNr
QnJlYWR0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFN0eWxlUmVzb2x2ZXIq
IHNlbGVjdG9yLCBMZW5ndGgmIHdvcmtpbmdMZW5ndGgpCitzdGF0aWMgYm9vbCBjcmVhdGVHcmlk
VHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgUmVzb2x2ZVN0
YXRlJiBzdGF0ZSwgTGVuZ3RoJiB3b3JraW5nTGVuZ3RoKQogewogICAgIGlmIChwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdE1pbkNvbnRlbnQpIHsKICAgICAgICAg
d29ya2luZ0xlbmd0aCA9IExlbmd0aChNaW5Db250ZW50KTsKQEAgLTI4ODUsNyArMjg2MCw3IEBA
IHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlLCBTdHlsZVJlc29sCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAot
ICAgIHdvcmtpbmdMZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVk
SW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFn
ZUNvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oc2VsZWN0b3ItPnN0eWxlKCksIHNlbGVjdG9y
LT5yb290RWxlbWVudFN0eWxlKCksIHNlbGVjdG9yLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkp
OworICAgIHdvcmtpbmdMZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZp
eGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2Vu
dGFnZUNvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9v
dEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwogICAgIGlm
ICh3b3JraW5nTGVuZ3RoLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApA
QCAtMjg5NSwxMiArMjg3MCwxMiBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRo
KENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgU3R5bGVSZXNvbAogICAgIHJldHVy
biB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tNaW5NYXgoQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgR3JpZFRy
YWNrU2l6ZSYgdHJhY2tTaXplKQorc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrTWluTWF4KENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgR3Jp
ZFRyYWNrU2l6ZSYgdHJhY2tTaXplKQogewogICAgIFBhaXIqIG1pbk1heFRyYWNrQnJlYWR0aCA9
IHByaW1pdGl2ZVZhbHVlLT5nZXRQYWlyVmFsdWUoKTsKICAgICBpZiAoIW1pbk1heFRyYWNrQnJl
YWR0aCkgewogICAgICAgICBMZW5ndGggd29ya2luZ0xlbmd0aDsKLSAgICAgICAgaWYgKCFjcmVh
dGVHcmlkVHJhY2tCcmVhZHRoKHByaW1pdGl2ZVZhbHVlLCBzZWxlY3Rvciwgd29ya2luZ0xlbmd0
aCkpCisgICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChwcmltaXRpdmVWYWx1ZSwg
c3RhdGUsIHdvcmtpbmdMZW5ndGgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
ICAgIHRyYWNrU2l6ZS5zZXRMZW5ndGgod29ya2luZ0xlbmd0aCk7CkBAIC0yOTA5LDE0ICsyODg0
LDE0IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja01pbk1heChDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUsIFN0eWxlUmVzb2x2CiAKICAgICBMZW5ndGggbWluVHJhY2tCcmVh
ZHRoOwogICAgIExlbmd0aCBtYXhUcmFja0JyZWFkdGg7Ci0gICAgaWYgKCFjcmVhdGVHcmlkVHJh
Y2tCcmVhZHRoKG1pbk1heFRyYWNrQnJlYWR0aC0+Zmlyc3QoKSwgc2VsZWN0b3IsIG1pblRyYWNr
QnJlYWR0aCkgfHwgIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgobWluTWF4VHJhY2tCcmVhZHRoLT5z
ZWNvbmQoKSwgc2VsZWN0b3IsIG1heFRyYWNrQnJlYWR0aCkpCisgICAgaWYgKCFjcmVhdGVHcmlk
VHJhY2tCcmVhZHRoKG1pbk1heFRyYWNrQnJlYWR0aC0+Zmlyc3QoKSwgc3RhdGUsIG1pblRyYWNr
QnJlYWR0aCkgfHwgIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgobWluTWF4VHJhY2tCcmVhZHRoLT5z
ZWNvbmQoKSwgc3RhdGUsIG1heFRyYWNrQnJlYWR0aCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIHRyYWNrU2l6ZS5zZXRNaW5NYXgobWluVHJhY2tCcmVhZHRoLCBtYXhUcmFja0JyZWFk
dGgpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tH
cm91cChDU1NWYWx1ZSogdmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBWZWN0b3I8R3Jp
ZFRyYWNrU2l6ZT4mIHRyYWNrU2l6ZXMpCitzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tHcm91
cChDU1NWYWx1ZSogdmFsdWUsIFJlc29sdmVTdGF0ZSYgc3RhdGUsIFZlY3RvcjxHcmlkVHJhY2tT
aXplPiYgdHJhY2tTaXplcykKIHsKICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0yOTI3LDcgKzI5MDIsNyBAQCBzdGF0aWMgYm9vbCBjcmVh
dGVHcmlkVHJhY2tHcm91cChDU1NWYWx1ZSogdmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9y
LCBWZWN0bwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIEdyaWRUcmFja1Np
emUgdHJhY2tTaXplOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja01pbk1heChzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGN1cnJWYWx1ZSksIHNlbGVjdG9yLCB0cmFja1NpemUp
KQorICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja01pbk1heChzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KGN1cnJWYWx1ZSksIHN0YXRlLCB0cmFja1NpemUpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHRyYWNrU2l6ZXMuYXBwZW5kKHRyYWNrU2l6ZSk7CkBA
IC0yOTM1LDcgKzI5MTAsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tHcm91cChDU1NW
YWx1ZSogdmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBWZWN0bwogICAgIHJldHVybiB0
cnVlOwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tMaXN0KENTU1ZhbHVlKiB2YWx1
ZSwgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0cmFja1NpemVzLCBTdHlsZVJlc29sdmVyKiBzZWxl
Y3RvcikKK3N0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3QoQ1NTVmFsdWUqIHZhbHVlLCBW
ZWN0b3I8R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6ZXMsIFJlc29sdmVTdGF0ZSYgc3RhdGUpCiB7
CiAgICAgLy8gSGFuZGxlICdub25lJy4KICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkgewpAQCAtMjk0Myw3ICsyOTE4LDcgQEAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrTGlz
dChDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxHcmlkVHJhY2tTaXplPiYgdHJhY2tTaXoKICAgICAg
ICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZTsKICAg
ICB9CiAKLSAgICByZXR1cm4gY3JlYXRlR3JpZFRyYWNrR3JvdXAodmFsdWUsIHNlbGVjdG9yLCB0
cmFja1NpemVzKTsKKyAgICByZXR1cm4gY3JlYXRlR3JpZFRyYWNrR3JvdXAodmFsdWUsIHN0YXRl
LCB0cmFja1NpemVzKTsKIH0KIAogCkBAIC0yOTg5LDkgKzI5NjQsOSBAQCBzdGF0aWMgYm9vbCBo
YXNWYXJpYWJsZVJlZmVyZW5jZShDU1NWYWx1ZSogdmFsdWUpCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJsZXMoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmlu
Zz4gPiYga25vd25FeHByZXNzaW9ucykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlh
YmxlcyhSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUsIFZlY3RvcjxzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiA+JiBrbm93bkV4cHJl
c3Npb25zKQogewotICAgIHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+IGV4cHJlc3Np
b24oaWQsIHZhbHVlLT5zZXJpYWxpemVSZXNvbHZpbmdWYXJpYWJsZXMoKnN0eWxlKCktPnZhcmlh
YmxlcygpKSk7CisgICAgc3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gZXhwcmVzc2lv
bihpZCwgdmFsdWUtPnNlcmlhbGl6ZVJlc29sdmluZ1ZhcmlhYmxlcygqc3RhdGUuc3R5bGUoKS0+
dmFyaWFibGVzKCkpKTsKIAogICAgIGlmIChrbm93bkV4cHJlc3Npb25zLmNvbnRhaW5zKGV4cHJl
c3Npb24pKQogICAgICAgICByZXR1cm47IC8vIGN5Y2xlIGRldGVjdGVkLgpAQCAtMzAwNiwzNiAr
Mjk4MSwzNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJsZXMoQ1NTUHJvcGVy
dHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8cwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCByZXN1bHRTZXQtPnByb3BlcnR5Q291bnQoKTsgaSsrKSB7CiAgICAgICAgIFN0eWxl
UHJvcGVydHlTZXQ6OlByb3BlcnR5UmVmZXJlbmNlIHByb3BlcnR5ID0gcmVzdWx0U2V0LT5wcm9w
ZXJ0eUF0KGkpOwogICAgICAgICBpZiAocHJvcGVydHkuaWQoKSAhPSBDU1NQcm9wZXJ0eVZhcmlh
YmxlICYmIGhhc1ZhcmlhYmxlUmVmZXJlbmNlKHByb3BlcnR5LnZhbHVlKCkpKQotICAgICAgICAg
ICAgcmVzb2x2ZVZhcmlhYmxlcyhwcm9wZXJ0eS5pZCgpLCBwcm9wZXJ0eS52YWx1ZSgpLCBrbm93
bkV4cHJlc3Npb25zKTsKKyAgICAgICAgICAgIHJlc29sdmVWYXJpYWJsZXMoc3RhdGUsIHByb3Bl
cnR5LmlkKCksIHByb3BlcnR5LnZhbHVlKCksIGtub3duRXhwcmVzc2lvbnMpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBhcHBseVByb3BlcnR5KHByb3BlcnR5LmlkKCksIHByb3BlcnR5LnZh
bHVlKCkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgcHJvcGVydHkuaWQoKSwg
cHJvcGVydHkudmFsdWUoKSk7CiAgICAgfQogfQogI2VuZGlmCiAKLXZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogewogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVT
KQogICAgIGlmIChpZCAhPSBDU1NQcm9wZXJ0eVZhcmlhYmxlICYmIGhhc1ZhcmlhYmxlUmVmZXJl
bmNlKHZhbHVlKSkgewogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0
cmluZz4gPiBrbm93bkV4cHJlc3Npb25zOwotICAgICAgICByZXNvbHZlVmFyaWFibGVzKGlkLCB2
YWx1ZSwga25vd25FeHByZXNzaW9ucyk7CisgICAgICAgIHJlc29sdmVWYXJpYWJsZXMoc3RhdGUs
IGlkLCB2YWx1ZSwga25vd25FeHByZXNzaW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAj
ZW5kaWYKIAotICAgIGJvb2wgaXNJbmhlcml0ID0gbV9wYXJlbnROb2RlICYmIHZhbHVlLT5pc0lu
aGVyaXRlZFZhbHVlKCk7Ci0gICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFs
dWUoKSB8fCAoIW1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKKyAg
ICBib29sIGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVudE5vZGUoKSAmJiB2YWx1ZS0+aXNJbmhlcml0
ZWRWYWx1ZSgpOworICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkg
fHwgKCFzdGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7CiAK
LSAgICBBU1NFUlQoIWlzSW5oZXJpdCB8fCAhaXNJbml0aWFsKTsgLy8gaXNJbmhlcml0IC0+ICFp
c0luaXRpYWwgJiYgaXNJbml0aWFsIC0+ICFpc0luaGVyaXQKLSAgICBBU1NFUlQoIWlzSW5oZXJp
dCB8fCAobV9wYXJlbnROb2RlICYmIG1fcGFyZW50U3R5bGUpKTsgLy8gaXNJbmhlcml0IC0+ICht
X3BhcmVudE5vZGUgJiYgbV9wYXJlbnRTdHlsZSkKKyAgICBBU1NFUlQoIWlzSW5oZXJpdCB8fCAh
aXNJbml0aWFsKTsKKyAgICBBU1NFUlQoIWlzSW5oZXJpdCB8fCAoc3RhdGUucGFyZW50Tm9kZSgp
ICYmIHN0YXRlLnBhcmVudFN0eWxlKCkpKTsKIAotICAgIGlmICghYXBwbHlQcm9wZXJ0eVRvUmVn
dWxhclN0eWxlKCkgJiYgKCFhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgfHwgIWlz
VmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KGlkKSkpIHsKKyAgICBpZiAoIXN0YXRlLmFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSgpICYmICghc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZSgpIHx8ICFpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShpZCkpKSB7CiAgICAgICAg
IC8vIExpbWl0IHRoZSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb25seSB0aGUg
b25lcyBob25vcmVkIGJ5IDp2aXNpdGVkLgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKGlzSW5oZXJpdCAmJiAhbV9wYXJlbnRTdHlsZS0+aGFzRXhwbGljaXRseUluaGVyaXRlZFBy
b3BlcnRpZXMoKSAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQotICAg
ICAgICBtX3BhcmVudFN0eWxlLT5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygp
OworICAgIGlmIChpc0luaGVyaXQgJiYgIXN0YXRlLnBhcmVudFN0eWxlKCktPmhhc0V4cGxpY2l0
bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkgJiYgIUNTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3Bl
cnR5KGlkKSkKKyAgICAgICAgc3RhdGUucGFyZW50U3R5bGUoKS0+c2V0SGFzRXhwbGljaXRseUlu
aGVyaXRlZFByb3BlcnRpZXMoKTsKIAogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgIGlm
IChpZCA9PSBDU1NQcm9wZXJ0eVZhcmlhYmxlKSB7CkBAIC0zMDQzLDcgKzMwMTgsNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICBDU1NWYXJpYWJsZVZhbHVlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0
PENTU1ZhcmlhYmxlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIEFTU0VSVCghdmFyaWFibGUtPm5h
bWUoKS5pc0VtcHR5KCkpOwogICAgICAgICBBU1NFUlQoIXZhcmlhYmxlLT52YWx1ZSgpLmlzRW1w
dHkoKSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldFZhcmlhYmxlKHZhcmlhYmxlLT5uYW1lKCksIHZh
cmlhYmxlLT52YWx1ZSgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VmFyaWFibGUodmFy
aWFibGUtPm5hbWUoKSwgdmFyaWFibGUtPnZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogI2VuZGlmCkBAIC0zMDUyLDE3ICszMDI3LDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY29uc3Qg
UHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0gbV9zdHlsZUJ1aWxkZXIucHJvcGVydHlIYW5kbGVy
KGlkKTsKICAgICBpZiAoaGFuZGxlci5pc1ZhbGlkKCkpIHsKICAgICAgICAgaWYgKGlzSW5oZXJp
dCkKLSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbmhlcml0VmFsdWUoaWQsIHRoaXMpOworICAg
ICAgICAgICAgaGFuZGxlci5hcHBseUluaGVyaXRWYWx1ZShpZCwgc3RhdGUpOwogICAgICAgICBl
bHNlIGlmIChpc0luaXRpYWwpCi0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5pdGlhbFZhbHVl
KGlkLCB0aGlzKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbml0aWFsVmFsdWUoaWQsIHN0
YXRlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgaGFuZGxlci5hcHBseVZhbHVlKGlkLCB0
aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5VmFsdWUoaWQsIHN0YXRlLCB2
YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUgPSB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpID8gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkgOiAwOwogCi0gICAgZmxvYXQgem9vbUZhY3RvciA9
IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBmbG9hdCB6b29tRmFjdG9yID0gc3RhdGUu
c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwogCiAgICAgLy8gV2hhdCBmb2xsb3dzIGlzIGEgbGlz
dCB0aGF0IG1hcHMgdGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIgY29ycmVzcG9uZGluZyBm
cm9udC1lbmQKICAgICAvLyBSZW5kZXJTdHlsZSB2YWx1ZXMuIFNob3J0aGFuZHMgKGUuZy4gYm9y
ZGVyLCBiYWNrZ3JvdW5kKSBvY2N1ciBpbiB0aGlzIGxpc3QgYXMgd2VsbCBhbmQKQEAgLTMwNzYs
NyArMzA1MSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAvLyBub3RlIGlzIGEgcmVtaW5k
ZXIgdGhhdCBldmVudHVhbGx5ICJpbmhlcml0IiBuZWVkcyB0byBiZSBzdXBwb3J0ZWQuCiAKICAg
ICAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5jbGVh
ckNvbnRlbnQoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhckNvbnRlbnQo
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKQEAgLTMwODgsMTkg
KzMwNjMsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9
IGkudmFsdWUoKTsKICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZUdlbmVyYXRvclZh
bHVlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzR3JhZGllbnRWYWx1ZSgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChTdHlsZUdlbmVy
YXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+KGl0ZW0pLT5n
cmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCh0aGlzKS5nZXQoKSksIGRpZFNldCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVk
SW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NHcmFkaWVudFZhbHVlKj4oaXRlbSktPmdyYWRp
ZW50V2l0aFN0eWxlc1Jlc29sdmVkKHN0YXRlKS5nZXQoKSksIGRpZFNldCk7CiAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRl
bnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJh
dG9yVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNf
Y2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwogICAgICAgICAg
ICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQogICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNJbWFnZVNldFZhbHVlKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChzZXRPclBlbmRpbmdGcm9tVmFsdWUo
Q1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVNldFZhbHVlKj4oaXRlbSkp
LCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50
KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShzdGF0ZSwgQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNf
Y2FzdDxDU1NJbWFnZVNldFZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAg
ICAgICBkaWRTZXQgPSB0cnVlOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1fc3R5bGUtPnNldENvbnRlbnQoY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5
Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChjYWNoZWRPclBlbmRp
bmdGcm9tVmFsdWUoc3RhdGUsIENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1h
Z2VWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQpA
QCAtMzExMSwxNyArMzA4NiwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBjb250ZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KGl0ZW0pOwogCiAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNTdHJpbmco
KSkgewotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNvbnRlbnRWYWx1
ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgp
LmltcGwoKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNBdHRyKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IENhbiBhIG5hbWVzcGFjZSBiZSBzcGVjaWZpZWQgZm9y
IGFuIGF0dHIoZm9vKT8KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3R5bGUtPnN0eWxlVHlw
ZSgpID09IE5PUFNFVURPKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0VW5p
cXVlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5zdHlsZVR5cGUo
KSA9PSBOT1BTRVVETykKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dFVuaXF1ZSgpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtX3BhcmVudFN0eWxlLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlLnBhcmVudFN0eWxlKCktPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgICAgICAgICBR
dWFsaWZpZWROYW1lIGF0dHIobnVsbEF0b20sIGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUo
KS5pbXBsKCksIG51bGxBdG9tKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSA9IG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0dHIpOwotICAgICAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDog
dmFsdWUuaW1wbCgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlID0gc3RhdGUuZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUoYXR0cik7CisgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQodmFsdWUuaXNOdWxsKCkg
PyBlbXB0eUF0b20gOiB2YWx1ZS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAg
IGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBmYWN0
IHRoYXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZQogICAgICAgICAgICAg
ICAgICAgICBtX2ZlYXR1cmVzLmF0dHJzSW5SdWxlcy5hZGQoYXR0ci5sb2NhbE5hbWUoKS5pbXBs
KCkpOwpAQCAtMzEzMiwyNCArMzEwNywyNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAg
ICAgICBpZiAobGlzdFN0eWxlSWRlbnQgIT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgICAg
ICAgICAgICAgbGlzdFN0eWxlVHlwZSA9IHN0YXRpY19jYXN0PEVMaXN0U3R5bGVUeXBlPihsaXN0
U3R5bGVJZGVudCAtIENTU1ZhbHVlRGlzYyk7CiAgICAgICAgICAgICAgICAgICAgIE93blB0cjxD
b3VudGVyQ29udGVudD4gY291bnRlciA9IGFkb3B0UHRyKG5ldyBDb3VudGVyQ29udGVudChjb3Vu
dGVyVmFsdWUtPmlkZW50aWZpZXIoKSwgbGlzdFN0eWxlVHlwZSwgY291bnRlclZhbHVlLT5zZXBh
cmF0b3IoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNvdW50
ZXIucmVsZWFzZSgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRDb250ZW50KGNvdW50ZXIucmVsZWFzZSgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAg
ICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVPcGVuUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRDb250ZW50KE9QRU5fUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KE9QRU5fUVVPVEUsIGRpZFNldCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDbG9zZVF1
b3RlOgotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChDTE9TRV9R
VU9URSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dENvbnRlbnQoQ0xPU0VfUVVPVEUsIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBk
aWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb09wZW5RdW90ZToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc3R5bGUtPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwg
ZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZU5vQ2xvc2VRdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRl
bnQoTk9fQ0xPU0VfUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRDb250ZW50KE5PX0NMT1NFX1FVT1RFLCBkaWRTZXQpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMzE1OSwxNiArMzEzNCwxNiBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGlmICghZGlkU2V0KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyQ29udGVudCgp
OworICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyQ29udGVudCgpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVF1b3RlczoKICAg
ICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKG1f
cGFyZW50U3R5bGUtPnF1b3RlcygpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFF1
b3RlcyhzdGF0ZS5wYXJlbnRTdHlsZSgpLT5xdW90ZXMoKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgbV9zdHls
ZS0+c2V0UXVvdGVzKDApOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVvdGVzKDAp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh2YWx1ZS0+aXNW
YWx1ZUxpc3QoKSkgewpAQCAtMzE4Niw0MyArMzE2MSw0MyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICAgICAgICAgIFN0cmluZyBlbmRRdW90ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4oc2Vjb25kKS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAgICAgICBxdW90ZXMtPmFk
ZFBhaXIoc3RkOjptYWtlX3BhaXIoc3RhcnRRdW90ZSwgZW5kUXVvdGUpKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhxdW90ZXMpOworICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0UXVvdGVzKHF1b3Rlcyk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKSB7CiAgICAgICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAg
ICAgIG1fc3R5bGUtPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpjcmVhdGUoKSk7CisgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVvdGVzKFF1b3Rlc0RhdGE6OmNyZWF0ZSgpKTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHk6
IHsKICAgICAgICAgLy8gbGlzdCBvZiBzdHJpbmdzIGFuZCBpZHMKICAgICAgICAgaWYgKGlzSW5o
ZXJpdCkgewotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlwdGlv
biA9IG1fcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwor
ICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IHN0YXRl
LnBhcmVudEZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZv
bnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmdlbmVy
aWNGYW1pbHkoKSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KHBhcmVu
dEZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRJc1NwZWNpZmllZEZvbnQocGFyZW50Rm9udERlc2NyaXB0aW9uLmlzU3BlY2lmaWVk
Rm9udCgpKTsKLSAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OworICAgICAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaXNJbml0aWFs
KSB7CiAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gaW5pdGlhbERlc2MgPSBGb250RGVzY3Jp
cHRpb24oKTsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBt
X3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBm
b250RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBzaXplIHRvIGFjY291bnQgZm9yIHRoZSBnZW5lcmljIGZh
bWlseSBjaGFuZ2UgZnJvbSBtb25vc3BhY2UKICAgICAgICAgICAgIC8vIHRvIG5vbi1tb25vc3Bh
Y2UuCiAgICAgICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgJiYgZm9u
dERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSkKLSAgICAgICAgICAgICAgICBzZXRG
b250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBD
U1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEsIGZhbHNl
KSk7CisgICAgICAgICAgICAgICAgc2V0Rm9udFNpemUoc3RhdGUsIGZvbnREZXNjcmlwdGlvbiwg
Zm9udFNpemVGb3JLZXl3b3JkKGRvY3VtZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNj
cmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0gMSwgZmFsc2UpKTsKICAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KGluaXRpYWxEZXNjLmdlbmVyaWNGYW1pbHkoKSk7CiAg
ICAgICAgICAgICBpZiAoIWluaXRpYWxEZXNjLmZpcnN0RmFtaWx5KCkuZmFtaWx5SXNFbXB0eSgp
KQogICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbHkoaW5pdGlhbERlc2Mu
Zmlyc3RGYW1pbHkoKSk7Ci0gICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKTsKKyAgICAgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCF2
YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwor
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgICAgIEZvbnRGYW1pbHkmIGZpcnN0RmFtaWx5ID0gZm9udERlc2NyaXB0
aW9uLmZpcnN0RmFtaWx5KCk7CiAgICAgICAgIEZvbnRGYW1pbHkqIGN1cnJGYW1pbHkgPSAwOwog
CkBAIC0zMjkxLDQzICszMjY2LDQzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIC8vIElmIGN1cnJG
YW1pbHkgaXMgbm9uLXplcm8gdGhlbiB3ZSBzZXQgYXQgbGVhc3Qgb25lIGZhbWlseSBvbiB0aGlz
IGRlc2NyaXB0aW9uLgogICAgICAgICBpZiAoY3VyckZhbWlseSkgewogICAgICAgICAgICAgaWYg
KGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNjcmlwdGlvbi51c2VGaXhl
ZERlZmF1bHRTaXplKCkgIT0gb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpCi0gICAgICAg
ICAgICAgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQo
ZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXpl
KCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpKTsKKyAgICAgICAgICAgICAg
ICBzZXRGb250U2l6ZShzdGF0ZSwgZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQo
ZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXpl
KCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpKTsKIAotICAgICAgICAgICAg
c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgICAgICBzdGF0ZS5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogLy8gc2hvcnRoYW5kIHByb3BlcnRpZXMKICAgICBjYXNlIENTU1Byb3Bl
cnR5QmFja2dyb3VuZDoKICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgbV9z
dHlsZS0+Y2xlYXJCYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRC
YWNrZ3JvdW5kQ29sb3IoQ29sb3IoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVh
ckJhY2tncm91bmRMYXllcnMoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJhY2tn
cm91bmRDb2xvcihDb2xvcigpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0luaGVyaXQpIHsKLSAg
ICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRCYWNrZ3JvdW5kTGF5ZXJzKCptX3BhcmVudFN0eWxl
LT5iYWNrZ3JvdW5kTGF5ZXJzKCkpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0QmFja2dyb3Vu
ZENvbG9yKG1fcGFyZW50U3R5bGUtPmJhY2tncm91bmRDb2xvcigpKTsKKyAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPmluaGVyaXRCYWNrZ3JvdW5kTGF5ZXJzKCpzdGF0ZS5wYXJlbnRTdHlsZSgp
LT5iYWNrZ3JvdW5kTGF5ZXJzKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0QmFj
a2dyb3VuZENvbG9yKHN0YXRlLnBhcmVudFN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpKTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2s6
CiAgICAgICAgIGlmIChpc0luaXRpYWwpCi0gICAgICAgICAgICBtX3N0eWxlLT5jbGVhck1hc2tM
YXllcnMoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyTWFza0xheWVycygpOwog
ICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0
TWFza0xheWVycygqbV9wYXJlbnRTdHlsZS0+bWFza0xheWVycygpKTsKKyAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPmluaGVyaXRNYXNrTGF5ZXJzKCpzdGF0ZS5wYXJlbnRTdHlsZSgpLT5tYXNr
TGF5ZXJzKCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnQ6CiAg
ICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBtX3BhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAg
ICAgIG1fc3R5bGUtPnNldExpbmVIZWlnaHQobV9wYXJlbnRTdHlsZS0+c3BlY2lmaWVkTGluZUhl
aWdodCgpKTsKLSAgICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKLSAgICAgICAgICAg
IHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICAgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigp
OworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUhlaWdodChzdGF0ZS5wYXJlbnRT
dHlsZSgpLT5zcGVjaWZpZWRMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgc3RhdGUuc2V0TGlu
ZUhlaWdodFZhbHVlKDApOworICAgICAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKSB7CiAgICAgICAg
ICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudFNldHRpbmdzKCk7CiAgICAgICAgICAg
ICBBU1NFUlQoc2V0dGluZ3MpOyAvLyBJZiB3ZSdyZSBkb2luZyBzdHlsZSByZXNvbHV0aW9uLCB0
aGlzIGRvY3VtZW50IHNob3VsZCBhbHdheXMgYmUgaW4gYSBmcmFtZSBhbmQgdGh1cyBoYXZlIHNl
dHRpbmdzCiAgICAgICAgICAgICBpZiAoIXNldHRpbmdzKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOworICAgICAgICAg
ICAgaW5pdGlhbGl6ZUZvbnRTdHlsZShzdGF0ZSwgc2V0dGluZ3MpOwogICAgICAgICB9IGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRMaW5lSGVpZ2h0
KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLSAgICAgICAgICAgIG1fbGluZUhl
aWdodFZhbHVlID0gMDsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQo
UmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgc3RhdGUuc2V0
TGluZUhlaWdodFZhbHVlKDApOwogCiAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uOwogICAgICAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0
ZW1Gb250KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpLCBmb250RGVzY3JpcHRpb24pOwpAQCAt
MzM0MywyNyArMzMxOCwyNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChkb2N1bWVudCgpLT5wcmludGluZygpIHx8ICFzZXR0
aW5ncy0+c2NyZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWQoKSk7CiAKICAgICAgICAgICAgICAg
ICAvLyBIYW5kbGUgdGhlIHpvb20gZmFjdG9yLgotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9j
dW1lbnQoKSwgbV9zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCks
IGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIHVzZVNWR1pvb21SdWxlcygpKSk7Ci0g
ICAgICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAg
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNp
emVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBzdGF0ZS5zdHlsZSgpLCBmb250RGVzY3Jp
cHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSwg
c3RhdGUudXNlU1ZHWm9vbVJ1bGVzKCkpKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zZXRGb250
RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBl
bHNlIGlmICh2YWx1ZS0+aXNGb250VmFsdWUoKSkgewogICAgICAgICAgICAgRm9udFZhbHVlKiBm
b250ID0gc3RhdGljX2Nhc3Q8Rm9udFZhbHVlKj4odmFsdWUpOwogICAgICAgICAgICAgaWYgKCFm
b250LT5zdHlsZSB8fCAhZm9udC0+dmFyaWFudCB8fCAhZm9udC0+d2VpZ2h0CiAgICAgICAgICAg
ICAgICAgfHwgIWZvbnQtPnNpemUgfHwgIWZvbnQtPmxpbmVIZWlnaHQgfHwgIWZvbnQtPmZhbWls
eSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBhcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5Rm9udFN0eWxlLCBmb250LT5zdHlsZS5nZXQoKSk7Ci0gICAgICAgICAgICBhcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIGZvbnQtPnZhcmlhbnQuZ2V0KCkpOwot
ICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGZvbnQtPndl
aWdodC5nZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0
eUZvbnRTdHlsZSwgZm9udC0+c3R5bGUuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0
eShzdGF0ZSwgQ1NTUHJvcGVydHlGb250VmFyaWFudCwgZm9udC0+dmFyaWFudC5nZXQoKSk7Cisg
ICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGZv
bnQtPndlaWdodC5nZXQoKSk7CiAgICAgICAgICAgICAvLyBUaGUgcHJldmlvdXMgcHJvcGVydGll
cyBjYW4gZGlydHkgb3VyIGZvbnQgYnV0IHRoZXkgZG9uJ3QgdHJ5IHRvIHJlYWQgdGhlIGZvbnQn
cwogICAgICAgICAgICAgLy8gcHJvcGVydGllcyBiYWNrLCB3aGljaCBpcyBzYWZlLiBIb3dldmVy
IGlmIGZvbnQtc2l6ZSBpcyB1c2luZyB0aGUgJ2V4JyB1bml0LCBpdCB3aWxsCiAgICAgICAgICAg
ICAvLyBuZWVkIHF1ZXJ5IHRoZSBkaXJ0aWVkIGZvbnQncyB4LWhlaWdodCB0byBnZXQgdGhlIGNv
bXB1dGVkIHNpemUuIFRvIGJlIHNhZmUgaW4gdGhpcwogICAgICAgICAgICAgLy8gY2FzZSwgbGV0
J3MganVzdCB1cGRhdGUgdGhlIGZvbnQgbm93LgotICAgICAgICAgICAgdXBkYXRlRm9udCgpOwot
ICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBmb250LT5zaXpl
LmdldCgpKTsKKyAgICAgICAgICAgIHVwZGF0ZUZvbnQoc3RhdGUpOworICAgICAgICAgICAgYXBw
bHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlGb250U2l6ZSwgZm9udC0+c2l6ZS5nZXQoKSk7
CiAKLSAgICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gZm9udC0+bGluZUhlaWdodC5nZXQo
KTsKKyAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZShmb250LT5saW5lSGVpZ2h0
LmdldCgpKTsKIAotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1p
bHksIGZvbnQtPmZhbWlseS5nZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRl
LCBDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIGZvbnQtPmZhbWlseS5nZXQoKSk7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuOwogCkBAIC0zMzczLDExICszMzQ4LDExIEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdzogewogICAgICAgICBpZiAoaXNJbmhl
cml0KSB7CiAgICAgICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93KQotICAg
ICAgICAgICAgICAgIHJldHVybiBtX3N0eWxlLT5zZXRUZXh0U2hhZG93KG1fcGFyZW50U3R5bGUt
PnRleHRTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCptX3BhcmVudFN0eWxlLT50
ZXh0U2hhZG93KCkpKSA6IG51bGxwdHIpOwotICAgICAgICAgICAgcmV0dXJuIG1fc3R5bGUtPnNl
dEJveFNoYWRvdyhtX3BhcmVudFN0eWxlLT5ib3hTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFk
b3dEYXRhKCptX3BhcmVudFN0eWxlLT5ib3hTaGFkb3coKSkpIDogbnVsbHB0cik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlKCktPnNldFRleHRTaGFkb3coc3RhdGUucGFyZW50
U3R5bGUoKS0+dGV4dFNoYWRvdygpID8gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoKnN0YXRlLnBh
cmVudFN0eWxlKCktPnRleHRTaGFkb3coKSkpIDogbnVsbHB0cik7CisgICAgICAgICAgICByZXR1
cm4gc3RhdGUuc3R5bGUoKS0+c2V0Qm94U2hhZG93KHN0YXRlLnBhcmVudFN0eWxlKCktPmJveFNo
YWRvdygpID8gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoKnN0YXRlLnBhcmVudFN0eWxlKCktPmJv
eFNoYWRvdygpKSkgOiBudWxscHRyKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXNJbml0aWFs
IHx8IHByaW1pdGl2ZVZhbHVlKSAvLyBpbml0aWFsIHwgbm9uZQotICAgICAgICAgICAgcmV0dXJu
IGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdyA/IG1fc3R5bGUtPnNldFRleHRTaGFkb3cobnVs
bHB0cikgOiBtX3N0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgICAgICAgICByZXR1
cm4gaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93ID8gc3RhdGUuc3R5bGUoKS0+c2V0VGV4dFNo
YWRvdyhudWxscHRyKSA6IHN0YXRlLnN0eWxlKCktPnNldEJveFNoYWRvdyhudWxscHRyKTsKIAog
ICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMzM4NywyOSArMzM2MiwyOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKCFjdXJy
VmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIFNoYWRvd1ZhbHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8U2hhZG93VmFsdWUqPihjdXJy
VmFsdWUpOwotICAgICAgICAgICAgaW50IHggPSBpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4o
c3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGlu
dCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRT
dHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBp
dGVtLT5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxl
LCB6b29tRmFjdG9yKSA6IDA7Ci0gICAgICAgICAgICBpbnQgc3ByZWFkID0gaXRlbS0+c3ByZWFk
ID8gaXRlbS0+c3ByZWFkLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVu
dFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7CisgICAgICAgICAgICBpbnQgeCA9IGl0ZW0tPngtPmNv
bXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCks
IHpvb21GYWN0b3IpOworICAgICAgICAgICAgaW50IHkgPSBpdGVtLT55LT5jb21wdXRlTGVuZ3Ro
PGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9y
KTsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1
dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpv
b21GYWN0b3IpIDogMDsKKyAgICAgICAgICAgIGludCBzcHJlYWQgPSBpdGVtLT5zcHJlYWQgPyBp
dGVtLT5zcHJlYWQtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290
RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpIDogMDsKICAgICAgICAgICAgIFNoYWRvd1N0eWxl
IHNoYWRvd1N0eWxlID0gaXRlbS0+c3R5bGUgJiYgaXRlbS0+c3R5bGUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVJbnNldCA/IEluc2V0IDogTm9ybWFsOwogICAgICAgICAgICAgQ29sb3IgY29sb3I7
CiAgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCi0gICAgICAgICAgICAgICAgY29sb3IgPSBj
b2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7Ci0gICAgICAgICAgICBl
bHNlIGlmIChtX3N0eWxlKQotICAgICAgICAgICAgICAgIGNvbG9yID0gbV9zdHlsZS0+Y29sb3Io
KTsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRl
LCBpdGVtLT5jb2xvci5nZXQoKSk7CisgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS5zdHlsZSgp
KQorICAgICAgICAgICAgICAgIGNvbG9yID0gc3RhdGUuc3R5bGUoKS0+Y29sb3IoKTsKIAogICAg
ICAgICAgICAgT3duUHRyPFNoYWRvd0RhdGE+IHNoYWRvd0RhdGEgPSBhZG9wdFB0cihuZXcgU2hh
ZG93RGF0YShJbnRQb2ludCh4LCB5KSwgYmx1ciwgc3ByZWFkLCBzaGFkb3dTdHlsZSwgaWQgPT0g
Q1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3csIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29s
b3I6OnRyYW5zcGFyZW50KSk7CiAgICAgICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlUZXh0
U2hhZG93KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFRleHRTaGFkb3coc2hhZG93RGF0
YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5v
dCB0aGUgZmlyc3QgZW50cnkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0
U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxp
c3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CiAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBp
LmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVu
dHJ5CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Qm94U2hhZG93KHNoYWRvd0Rh
dGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBu
b3QgdGhlIGZpcnN0IGVudHJ5CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewogICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChib3hSZWZsZWN0LCBCb3hSZWZsZWN0KQogICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJveFJlZmxlY3QoUmVuZGVy
U3R5bGU6OmluaXRpYWxCb3hSZWZsZWN0KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0Qm94UmVmbGVjdChSZW5kZXJTdHlsZTo6aW5pdGlhbEJveFJlZmxlY3QoKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzQyMCwxMyArMzM5NSwxNSBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgICAgICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiByZWZsZWN0aW9uID0gU3R5bGVS
ZWZsZWN0aW9uOjpjcmVhdGUoKTsKICAgICAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0aW9uKCpy
ZWZsZWN0VmFsdWUtPmRpcmVjdGlvbigpKTsKICAgICAgICAgaWYgKHJlZmxlY3RWYWx1ZS0+b2Zm
c2V0KCkpCi0gICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVjdFZhbHVlLT5v
ZmZzZXQoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50
Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50
U3R5bGUsIHpvb21GYWN0b3IpKTsKKyAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChy
ZWZsZWN0VmFsdWUtPm9mZnNldCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVy
c2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0YXRlLnN0
eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3RvcikpOwogICAgICAgICBO
aW5lUGllY2VJbWFnZSBtYXNrOwogICAgICAgICBtYXNrLnNldE1hc2tEZWZhdWx0cygpOwotICAg
ICAgICBtX3N0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUtPm1hc2so
KSwgbWFzayk7CisKKyAgICAgICAgQ1NTVG9TdHlsZU1hcCBzdHlsZU1hcChzdGF0ZSk7CisgICAg
ICAgIHN0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUtPm1hc2soKSwg
bWFzayk7CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2sobWFzayk7CiAKLSAgICAgICAgbV9z
dHlsZS0+c2V0Qm94UmVmbGVjdChyZWZsZWN0aW9uLnJlbGVhc2UoKSk7CisgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldEJveFJlZmxlY3QocmVmbGVjdGlvbi5yZWxlYXNlKCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlTcmM6IC8vIE9ubHkgdXNlZCBpbiBA
Zm9udC1mYWNlIHJ1bGVzLgpAQCAtMzQzNSwyOSArMzQxMiwyOSBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
ICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGU6CiAgICAg
ICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1bGVD
b2xvcihtX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKS5pc1ZhbGlkKCkgPyBtX3BhcmVu
dFN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKSA6IG1fcGFyZW50U3R5bGUtPmNvbG9yKCkpOwotICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVsZVN0eWxlKG1fcGFyZW50U3R5bGUtPmNvbHVt
blJ1bGVTdHlsZSgpKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1bGVXaWR0aCht
X3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlV2lkdGgoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRDb2x1bW5SdWxlQ29sb3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+Y29sdW1uUnVsZUNv
bG9yKCkuaXNWYWxpZCgpID8gc3RhdGUucGFyZW50U3R5bGUoKS0+Y29sdW1uUnVsZUNvbG9yKCkg
OiBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jb2xvcigpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldENvbHVtblJ1bGVTdHlsZShzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jb2x1bW5SdWxlU3R5
bGUoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb2x1bW5SdWxlV2lkdGgoc3Rh
dGUucGFyZW50U3R5bGUoKS0+Y29sdW1uUnVsZVdpZHRoKCkpOwogICAgICAgICB9IGVsc2UgaWYg
KGlzSW5pdGlhbCkKLSAgICAgICAgICAgIG1fc3R5bGUtPnJlc2V0Q29sdW1uUnVsZSgpOworICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+cmVzZXRDb2x1bW5SdWxlKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZToKICAgICAgICAgaWYgKCFpc0lu
aGVyaXQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVE
aXJlY3Rpb24obV9wYXJlbnRTdHlsZS0+bWFycXVlZURpcmVjdGlvbigpKTsKLSAgICAgICAgbV9z
dHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChtX3BhcmVudFN0eWxlLT5tYXJxdWVlSW5jcmVtZW50
KCkpOwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQobV9wYXJlbnRTdHlsZS0+bWFy
cXVlZVNwZWVkKCkpOwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KG1fcGFy
ZW50U3R5bGUtPm1hcnF1ZWVMb29wQ291bnQoKSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldE1hcnF1
ZWVCZWhhdmlvcihtX3BhcmVudFN0eWxlLT5tYXJxdWVlQmVoYXZpb3IoKSk7CisgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVEaXJlY3Rpb24oc3RhdGUucGFyZW50U3R5bGUoKS0+bWFy
cXVlZURpcmVjdGlvbigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUluY3Jl
bWVudChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5tYXJxdWVlSW5jcmVtZW50KCkpOworICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQoc3RhdGUucGFyZW50U3R5bGUoKS0+bWFycXVl
ZVNwZWVkKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlTG9vcENvdW50KHN0
YXRlLnBhcmVudFN0eWxlKCktPm1hcnF1ZWVMb29wQ291bnQoKSk7CisgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldE1hcnF1ZWVCZWhhdmlvcihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5tYXJxdWVlQmVo
YXZpb3IoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFy
cXVlZVJlcGV0aXRpb246IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFy
cXVlZUxvb3BDb3VudCwgTWFycXVlZUxvb3BDb3VudCkKICAgICAgICAgaWYgKCFwcmltaXRpdmVW
YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlSW5maW5pdGUpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRN
YXJxdWVlTG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCisgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMg
cmVwZWF0IGZvcmV2ZXIuCiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJl
cigpKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmltaXRpdmVW
YWx1ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJx
dWVlTG9vcENvdW50KHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVNwZWVkOiB7CkBA
IC0zNDY3LDE5ICszNDQ0LDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGlmIChpbnQgaWRlbnQg
PSBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAgc3dpdGNoIChpZGVu
dCkgewogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNsb3c6Ci0gICAgICAgICAgICAgICAgbV9z
dHlsZS0+c2V0TWFycXVlZVNwZWVkKDUwMCk7IC8vIDUwMCBtc2VjLgorICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZCg1MDApOyAvLyA1MDAgbXNlYy4KICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKDg1KTsgLy8gODVtc2VjLiBUaGUg
V2luSUUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVl
U3BlZWQoODUpOyAvLyA4NW1zZWMuIFRoZSBXaW5JRSBkZWZhdWx0LgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhc3Q6Ci0gICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKDEwKTsgLy8gMTBtc2VjLiBTdXBlciBmYXN0LgorICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZCgxMCk7IC8vIDEwbXNl
Yy4gU3VwZXIgZmFzdC4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNUaW1lKCkpCi0gICAgICAgICAgICBt
X3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGludCwg
Q1NTUHJpbWl0aXZlVmFsdWU6Ok1pbGxpc2Vjb25kcz4oKSk7CisgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGludCwg
Q1NTUHJpbWl0aXZlVmFsdWU6Ok1pbGxpc2Vjb25kcz4oKSk7CiAgICAgICAgIGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSAvLyBGb3Igc2Nyb2xsYW1vdW50IHN1cHBvcnQuCi0g
ICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmdldElu
dFZhbHVlKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZUluY3JlbWVudDogewpAQCAtMzQ4OSwxOSAr
MzQ2NiwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkp
IHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoKLSAgICAgICAgICAgICAgICBtX3N0
eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgxLCBGaXhlZCkpOyAvLyAxcHguCisgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMSwg
Rml4ZWQpKTsgLy8gMXB4LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5j
cmVtZW50KExlbmd0aCg2LCBGaXhlZCkpOyAvLyA2cHguIFRoZSBXaW5JRSBkZWZhdWx0LgorICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDYs
IEZpeGVkKSk7IC8vIDZweC4gVGhlIFdpbklFIGRlZmF1bHQuCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2U6Ci0gICAgICAgICAgICAgICAgbV9z
dHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCisg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgo
MzYsIEZpeGVkKSk7IC8vIDM2cHguCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMZW5ndGggbWFycXVlZUxlbmd0aCA9
IGNvbnZlcnRUb0ludExlbmd0aChwcmltaXRpdmVWYWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVu
dFN0eWxlKTsKKyAgICAgICAgICAgIExlbmd0aCBtYXJxdWVlTGVuZ3RoID0gY29udmVydFRvSW50
TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0
eWxlKCkpOwogICAgICAgICAgICAgaWYgKCFtYXJxdWVlTGVuZ3RoLmlzVW5kZWZpbmVkKCkpCi0g
ICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChtYXJxdWVlTGVuZ3Ro
KTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KG1h
cnF1ZWVMZW5ndGgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNTEw
LDE5ICszNDg3LDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRMb2NhbGUobnVs
bEF0b20pOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TG9jYWxlKG51bGxBdG9tKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TG9jYWxlKHByaW1pdGl2ZVZh
bHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24obV9zdHls
ZS0+bG9jYWxlKCkpKTsKLSAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlv
bik7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMb2NhbGUocHJpbWl0aXZlVmFsdWUt
PmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRTY3JpcHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihzdGF0ZS5zdHlsZSgp
LT5sb2NhbGUoKSkpOworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VGV4dFNpemVBZGp1c3Q6IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwo
dGV4dFNpemVBZGp1c3QsIFRleHRTaXplQWRqdXN0KQogICAgICAgICBpZiAoIXByaW1pdGl2ZVZh
bHVlIHx8ICFwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgc2V0VGV4dFNpemVBZGp1c3QocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVBdXRvKTsKKyAgICAgICAgc3RhdGUuc2V0VGV4dFNpemVBZGp1c3QocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCkBAIC0zNTMzLDcgKzM1MTAsNyBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIG1fc3R5bGUt
PnNldERhc2hib2FyZFJlZ2lvbnMoUmVuZGVyU3R5bGU6Om5vbmVEYXNoYm9hcmRSZWdpb25zKCkp
OworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RGFzaGJvYXJkUmVnaW9ucyhSZW5kZXJT
dHlsZTo6bm9uZURhc2hib2FyZFJlZ2lvbnMoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIApAQCAtMzU0MywxMCArMzUyMCwxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogCiAgICAgICAgIERh
c2hib2FyZFJlZ2lvbiogZmlyc3QgPSByZWdpb247CiAgICAgICAgIHdoaWxlIChyZWdpb24pIHsK
LSAgICAgICAgICAgIExlbmd0aCB0b3AgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT50b3Ao
KSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKLSAgICAgICAgICAgIExlbmd0aCByaWdo
dCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPnJpZ2h0KCksIHN0eWxlKCksIG1fcm9vdEVs
ZW1lbnRTdHlsZSk7Ci0gICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29udmVydFRvSW50TGVu
Z3RoKHJlZ2lvbi0+Ym90dG9tKCksIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAg
ICAgICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmxlZnQoKSwg
c3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKKyAgICAgICAgICAgIExlbmd0aCB0b3AgPSBj
b252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT50b3AoKSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9v
dEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgIExlbmd0aCByaWdodCA9IGNvbnZlcnRUb0lu
dExlbmd0aChyZWdpb24tPnJpZ2h0KCksIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50
U3R5bGUoKSk7CisgICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29udmVydFRvSW50TGVuZ3Ro
KHJlZ2lvbi0+Ym90dG9tKCksIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUo
KSk7CisgICAgICAgICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24t
PmxlZnQoKSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKIAogICAg
ICAgICAgICAgaWYgKHRvcC5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHRvcCA9IExl
bmd0aCgpOwpAQCAtMzU1OCwxMyArMzUzNSwxMyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAg
ICAgIGxlZnQgPSBMZW5ndGgoKTsKIAogICAgICAgICAgICAgaWYgKHJlZ2lvbi0+bV9pc0NpcmNs
ZSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNo
Ym9hcmRSZWdpb246OkNpcmNsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20s
IGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CisgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpD
aXJjbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24g
PT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwogICAgICAgICAgICAgZWxzZSBpZiAocmVnaW9uLT5t
X2lzUmVjdGFuZ2xlKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hib2FyZFJlZ2lv
bihTdHlsZURhc2hib2FyZFJlZ2lvbjo6UmVjdGFuZ2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwg
cmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKKyAg
ICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNo
Ym9hcmRSZWdpb246OlJlY3RhbmdsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0
b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CiAgICAgICAgICAgICBy
ZWdpb24gPSByZWdpb24tPm1fbmV4dC5nZXQoKTsKICAgICAgICAgfQogCi0gICAgICAgIG1fZWxl
bWVudC0+ZG9jdW1lbnQoKS0+c2V0SGFzQW5ub3RhdGVkUmVnaW9ucyh0cnVlKTsKKyAgICAgICAg
c3RhdGUuZG9jdW1lbnQoKS0+c2V0SGFzQW5ub3RhdGVkUmVnaW9ucyh0cnVlKTsKIAogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMzU3Myw4ICszNTUwLDggQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0QXBwUmVnaW9uOiB7CiAgICAgICAgIGlmICghcHJpbWl0aXZl
VmFsdWUgfHwgIXByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBtX3N0eWxlLT5zZXREcmFnZ2FibGVSZWdpb25Nb2RlKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlRHJhZyA/IERyYWdnYWJsZVJlZ2lvbkRyYWcgOiBEcmFn
Z2FibGVSZWdpb25Ob0RyYWcpOwotICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnNldEhh
c0Fubm90YXRlZFJlZ2lvbnModHJ1ZSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldERyYWdn
YWJsZVJlZ2lvbk1vZGUocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVEcmFn
ID8gRHJhZ2dhYmxlUmVnaW9uRHJhZyA6IERyYWdnYWJsZVJlZ2lvbk5vRHJhZyk7CisgICAgICAg
IHN0YXRlLmRvY3VtZW50KCktPnNldEhhc0Fubm90YXRlZFJlZ2lvbnModHJ1ZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTM1OTAsMjEgKzM1NjcsMjEgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICAgICAgICAgICAgICByZXN1bHQgKj0gMzsKICAgICAgICAgICAgIGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlVGhpY2spCiAgICAgICAgICAgICAg
ICAgcmVzdWx0ICo9IDU7Ci0gICAgICAgICAgICB3aWR0aCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUocmVzdWx0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyktPmNvbXB1dGVMZW5ndGg8
ZmxvYXQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAg
ICAgICB3aWR0aCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVzdWx0LCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0VNUyktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlKCksIHN0
YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgd2lkdGggPSBwcmltaXRp
dmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxl
LCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHdpZHRoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1
dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwg
em9vbUZhY3Rvcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBtX3N0
eWxlLT5zZXRUZXh0U3Ryb2tlV2lkdGgod2lkdGgpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRUZXh0U3Ryb2tlV2lkdGgod2lkdGgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm06IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRf
QU5EX0lOSVRJQUwodHJhbnNmb3JtLCBUcmFuc2Zvcm0pOwogICAgICAgICBUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFs
dWUsIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgb3BlcmF0aW9ucyk7Ci0gICAgICAgIG1f
c3R5bGUtPnNldFRyYW5zZm9ybShvcGVyYXRpb25zKTsKKyAgICAgICAgY3JlYXRlVHJhbnNmb3Jt
T3BlcmF0aW9ucyh2YWx1ZSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgp
LCBvcGVyYXRpb25zKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VHJhbnNmb3JtKG9wZXJh
dGlvbnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRQZXJzcGVjdGl2ZTogewpAQCAtMzYxNCwzNCArMzU5MSwzNCBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
ICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFBlcnNwZWN0aXZl
KDApOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UGVyc3BlY3RpdmUoMCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBmbG9hdCBwZXJzcGVjdGl2ZVZh
bHVlOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCi0gICAgICAgICAg
ICBwZXJzcGVjdGl2ZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+
KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICBw
ZXJzcGVjdGl2ZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0
YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CiAgICAg
ICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAv
LyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdHJlYXQgdmFsdWVsZXNzIG51bWJlcnMgYXMg
cHguCi0gICAgICAgICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QWCktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHls
ZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZShwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QWCktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlKCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChwZXJzcGVjdGl2ZVZhbHVlID49IDAu
MGYpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRQZXJzcGVjdGl2ZShwZXJzcGVjdGl2ZVZhbHVl
KTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFBlcnNwZWN0aXZlKHBlcnNwZWN0aXZl
VmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRBbmltYXRpb246CiAgICAgICAgIGlmIChpc0luaXRpYWwpCi0gICAgICAgICAgICBtX3N0eWxl
LT5jbGVhckFuaW1hdGlvbnMoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyQW5p
bWF0aW9ucygpOwogICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICBtX3N0
eWxlLT5pbmhlcml0QW5pbWF0aW9ucyhtX3BhcmVudFN0eWxlLT5hbmltYXRpb25zKCkpOworICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEFuaW1hdGlvbnMoc3RhdGUucGFyZW50U3R5
bGUoKS0+YW5pbWF0aW9ucygpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUcmFuc2l0aW9uOgogICAgICAgICBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAg
bV9zdHlsZS0+Y2xlYXJUcmFuc2l0aW9ucygpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
Y2xlYXJUcmFuc2l0aW9ucygpOwogICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCi0gICAgICAg
ICAgICBtX3N0eWxlLT5pbmhlcml0VHJhbnNpdGlvbnMobV9wYXJlbnRTdHlsZS0+dHJhbnNpdGlv
bnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0VHJhbnNpdGlvbnMoc3Rh
dGUucGFyZW50U3R5bGUoKS0+dHJhbnNpdGlvbnMoKSk7CiAgICAgICAgIHJldHVybjsKICNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUYXBIaWdobGln
aHRDb2xvcjogewpAQCAtMzY0OSw4ICszNjI2LDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgaWYg
KCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIENvbG9yIGNv
bCA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgbV9z
dHlsZS0+c2V0VGFwSGlnaGxpZ2h0Q29sb3IoY29sKTsKKyAgICAgICAgQ29sb3IgY29sID0gY29s
b3JGcm9tUHJpbWl0aXZlVmFsdWUoc3RhdGUsIHByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0VGFwSGlnaGxpZ2h0Q29sb3IoY29sKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICNlbmRpZgpAQCAtMzY1OSw3ICszNjM2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
SEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZywgVXNl
VG91Y2hPdmVyZmxvd1Njcm9sbGluZyk7CiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgbV9zdHlsZS0+c2V0VXNlVG91Y2hPdmVyZmxvd1Nj
cm9sbGluZyhwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVRvdWNoKTsKKyAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZyhwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVRvdWNoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICNlbmRpZgpAQCAtMzcwMiw5ICszNjc5LDkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWF4TG9naWNhbFdpZHRoOgogICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXhMb2dpY2FsSGVpZ2h0OgogICAgIHsKLSAgICAgICAgQ1NTUHJvcGVydHlJRCBuZXdJ
ZCA9IENTU1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShpZCwgbV9zdHls
ZS0+ZGlyZWN0aW9uKCksIG1fc3R5bGUtPndyaXRpbmdNb2RlKCkpOworICAgICAgICBDU1NQcm9w
ZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5
KGlkLCBzdGF0ZS5zdHlsZSgpLT5kaXJlY3Rpb24oKSwgc3RhdGUuc3R5bGUoKS0+d3JpdGluZ01v
ZGUoKSk7CiAgICAgICAgIEFTU0VSVChuZXdJZCAhPSBpZCk7Ci0gICAgICAgIHJldHVybiBhcHBs
eVByb3BlcnR5KG5ld0lkLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBhcHBseVByb3BlcnR5KHN0
YXRlLCBuZXdJZCwgdmFsdWUpOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0cmV0
Y2g6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2U6CkBAIC0zNzM0LDEyICszNzExLDExIEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHdyaXRpbmdNb2Rl
LCBXcml0aW5nTW9kZSk7CiAgICAgICAgIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUpCi0g
ICAgICAgICAgICBzZXRXcml0aW5nTW9kZSgqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAg
c3RhdGUuc2V0V3JpdGluZ01vZGUoKnByaW1pdGl2ZVZhbHVlKTsKIAogICAgICAgICAvLyBGSVhN
RTogSXQgaXMgbm90IG9rIHRvIG1vZGlmeSBkb2N1bWVudCBzdGF0ZSB3aGlsZSBhcHBseWluZyBz
dHlsZS4KLSAgICAgICAgaWYgKG1fZWxlbWVudCAmJiBtX2VsZW1lbnQgPT0gbV9lbGVtZW50LT5k
b2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKLSAgICAgICAgICAgIG1fZWxlbWVudC0+ZG9j
dW1lbnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCh0cnVlKTsKLQorICAg
ICAgICBpZiAoc3RhdGUuZWxlbWVudCgpICYmIHN0YXRlLmVsZW1lbnQoKSA9PSBzdGF0ZS5kb2N1
bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHN0YXRlLmRvY3VtZW50KCkt
PnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQodHJ1ZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTM3NDcsNyArMzcyMyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIEhB
TkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRleHRPcmllbnRhdGlvbiwgVGV4dE9yaWVudGF0aW9u
KTsKIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICBzZXRUZXh0T3Jp
ZW50YXRpb24oKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRlLnNldFRleHRPcmll
bnRhdGlvbigqcHJpbWl0aXZlVmFsdWUpOwogCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0z
NzU1LDcgKzM3MzEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRM
aW5lQm94Q29udGFpbjogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChsaW5l
Qm94Q29udGFpbiwgTGluZUJveENvbnRhaW4pCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSAm
JiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAg
ICAgIG1fc3R5bGUtPnNldExpbmVCb3hDb250YWluKExpbmVCb3hDb250YWluTm9uZSk7CisgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaW5lQm94Q29udGFpbihMaW5lQm94Q29udGFpbk5v
bmUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM3NjMsMjEgKzM3Mzks
MjEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBDU1NMaW5l
Qm94Q29udGFpblZhbHVlKiBsaW5lQm94Q29udGFpblZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTTGlu
ZUJveENvbnRhaW5WYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TGluZUJveENv
bnRhaW4obGluZUJveENvbnRhaW5WYWx1ZS0+dmFsdWUoKSk7CisgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldExpbmVCb3hDb250YWluKGxpbmVCb3hDb250YWluVmFsdWUtPnZhbHVlKCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gQ1NTIEZvbnRzIE1vZHVsZSBMZXZlbCAzCiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRGZWF0dXJlU2V0dGluZ3M6IHsKICAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlTm9ybWFsKSB7Ci0gICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24obV9zdHlsZS0+Zm9u
dERlc2NyaXB0aW9uKCkubWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygpKTsKKyAgICAgICAgICAg
IHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihzdGF0ZS5mb250RGVzY3JpcHRpb24oKS5tYWtlTm9y
bWFsRmVhdHVyZVNldHRpbmdzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9u
dERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24g
PSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0g
c3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwogICAgICAgICBSZWZQdHI8Rm9udEZl
YXR1cmVTZXR0aW5ncz4gc2V0dGluZ3MgPSBGb250RmVhdHVyZVNldHRpbmdzOjpjcmVhdGUoKTsK
ICAgICAgICAgaW50IGxlbiA9IGxpc3QtPmxlbmd0aCgpOwpAQCAtMzc4OSw3ICszNzY1LDcgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHNldHRpbmdzLT5hcHBlbmQoRm9udEZlYXR1cmUoZmVh
dHVyZS0+dGFnKCksIGZlYXR1cmUtPnZhbHVlKCkpKTsKICAgICAgICAgfQogICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0RmVhdHVyZVNldHRpbmdzKHNldHRpbmdzLnJlbGVhc2UoKSk7Ci0gICAg
ICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBzdGF0ZS5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMzc5NywyMyArMzc3MywyMyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRGaWx0ZXI6IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwo
ZmlsdGVyLCBGaWx0ZXIpOwogICAgICAgICBGaWx0ZXJPcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0g
ICAgICAgIGlmIChjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKHZhbHVlLCBzdHlsZSgpLCBtX3Jvb3RF
bGVtZW50U3R5bGUsIG9wZXJhdGlvbnMpKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0RmlsdGVy
KG9wZXJhdGlvbnMpOworICAgICAgICBpZiAoY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhzdGF0ZSwg
dmFsdWUsIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgb3BlcmF0aW9u
cykpCisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRGaWx0ZXIob3BlcmF0aW9ucyk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
R3JpZENvbHVtbnM6IHsKICAgICAgICAgVmVjdG9yPEdyaWRUcmFja1NpemU+IHRyYWNrU2l6ZXM7
Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwgdHJhY2tTaXplcywgdGhp
cykpCisgICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwgdHJhY2tTaXplcywg
c3RhdGUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRHcmlkQ29s
dW1ucyh0cmFja1NpemVzKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0R3JpZENvbHVtbnMo
dHJhY2tTaXplcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEdyaWRSb3dzOiB7CiAgICAgICAgIFZlY3RvcjxHcmlkVHJhY2tTaXplPiB0cmFja1Np
emVzOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRyYWNrU2l6ZXMs
IHRoaXMpKQorICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRyYWNrU2l6
ZXMsIHN0YXRlKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0R3Jp
ZFJvd3ModHJhY2tTaXplcyk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEdyaWRSb3dzKHRy
YWNrU2l6ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zODIxLDE0ICszNzk3LDE0
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIEdyaWRQb3NpdGlvbiBjb2x1bW47CiAgICAgICAgIGlm
ICghY3JlYXRlR3JpZFBvc2l0aW9uKHZhbHVlLCBjb2x1bW4pKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBtX3N0eWxlLT5zZXRHcmlkSXRlbUNvbHVtbihjb2x1bW4pOworICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRHcmlkSXRlbUNvbHVtbihjb2x1bW4pOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkUm93OiB7CiAgICAgICAgIEdy
aWRQb3NpdGlvbiByb3c7CiAgICAgICAgIGlmICghY3JlYXRlR3JpZFBvc2l0aW9uKHZhbHVlLCBy
b3cpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRHcmlkSXRlbVJv
dyhyb3cpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRHcmlkSXRlbVJvdyhyb3cpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgYXJlIGltcGxlbWVu
dGVkIGluIHRoZSBTdHlsZUJ1aWxkZXIgbG9va3VwIHRhYmxlLgpAQCAtNDExOCw5MSArNDA5NCw5
MSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIGRlZmF1bHQ6CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAg
Ly8gVHJ5IHRoZSBTVkcgcHJvcGVydGllcwotICAgICAgICBhcHBseVNWR1Byb3BlcnR5KGlkLCB2
YWx1ZSk7CisgICAgICAgIGFwcGx5U1ZHUHJvcGVydHkoc3RhdGUsIGlkLCB2YWx1ZSk7CiAjZW5k
aWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBT
dHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVl
KiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFn
ZShSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSog
dmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc0ltYWdlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJu
IGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VW
YWx1ZSo+KHZhbHVlKSk7CisgICAgICAgIHJldHVybiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUo
c3RhdGUsIHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4odmFsdWUpKTsKIAog
ICAgIGlmICh2YWx1ZS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKICAgICAgICAgaWYgKHZh
bHVlLT5pc0dyYWRpZW50VmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBl
bmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPih2
YWx1ZSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpLmdldCgpKTsKLSAgICAgICAg
cmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gZ2Vu
ZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRlLCBwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NT
R3JhZGllbnRWYWx1ZSo+KHZhbHVlKS0+Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoc3RhdGUp
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShzdGF0
ZSwgcHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPih2YWx1ZSkp
OwogICAgIH0KIAogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQogICAgIGlmICh2YWx1ZS0+aXNJ
bWFnZVNldFZhbHVlKCkpCi0gICAgICAgIHJldHVybiBzZXRPclBlbmRpbmdGcm9tVmFsdWUocHJv
cGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPih2YWx1ZSkpOworICAgICAgICBy
ZXR1cm4gc2V0T3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRlLCBwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8
Q1NTSW1hZ2VTZXRWYWx1ZSo+KHZhbHVlKSk7CiAjZW5kaWYKIAogICAgIGlmICh2YWx1ZS0+aXND
dXJzb3JJbWFnZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBjdXJzb3JPclBlbmRpbmdGcm9tVmFs
dWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0N1cnNvckltYWdlVmFsdWUqPih2YWx1ZSkpOwor
ICAgICAgICByZXR1cm4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRlLCBwcm9wZXJ0eSwg
c3RhdGljX2Nhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSo+KHZhbHVlKSk7CiAKICAgICByZXR1cm4g
MDsKIH0KIAotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBl
bmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VWYWx1ZSogdmFs
dWUpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGlu
Z0Zyb21WYWx1ZShSZXNvbHZlU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBD
U1NJbWFnZVZhbHVlKiB2YWx1ZSkKIHsKICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2
YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoKTsKICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlz
UGVuZGluZ0ltYWdlKCkpCi0gICAgICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJv
cGVydHksIHZhbHVlKTsKKyAgICAgICAgc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNl
dChwcm9wZXJ0eSwgdmFsdWUpOwogICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CiB9CiAKLVBh
c3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJv
bVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqIHZh
bHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBl
bmRpbmdGcm9tVmFsdWUoUmVzb2x2ZVN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc1Bl
bmRpbmcoKSkgewotICAgICAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5
LCB2YWx1ZSk7CisgICAgICAgIHN0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJv
cGVydHksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIFN0eWxlUGVuZGluZ0ltYWdlOjpjcmVhdGUo
dmFsdWUpOwogICAgIH0KICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHZh
bHVlKTsKIH0KIAogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQotUGFzc1JlZlB0cjxTdHlsZUlt
YWdlPiBTdHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSwgQ1NTSW1hZ2VTZXRWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IFN0eWxlUmVzb2x2ZXI6OnNldE9yUGVuZGluZ0Zyb21WYWx1ZShSZXNvbHZlU3RhdGUmIHN0YXRl
LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVNldFZhbHVlKiB2YWx1ZSkKIHsKLSAg
ICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2VT
ZXQoZG9jdW1lbnQoKSk7CisgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNh
Y2hlZE9yUGVuZGluZ0ltYWdlU2V0KHN0YXRlLmRvY3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAm
JiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0
aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2Uo
KTsKIH0KICNlbmRpZgogCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmN1
cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NDdXJzb3JJ
bWFnZVZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6
Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKFJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIENTU0N1cnNvckltYWdlVmFsdWUqIHZhbHVlKQogewotICAgIFJlZlB0cjxT
dHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZShkb2N1bWVudCgp
KTsKKyAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5n
SW1hZ2Uoc3RhdGUuZG9jdW1lbnQoKSk7CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRp
bmdJbWFnZSgpKQotICAgICAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5
LCB2YWx1ZSk7CisgICAgICAgIHN0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJv
cGVydHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogCi12b2lkIFN0
eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKQordm9pZCBTdHlsZVJlc29sdmVy
OjpjaGVja0ZvclRleHRTaXplQWRqdXN0KFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKLSAgICBpZiAo
bV9zdHlsZS0+dGV4dFNpemVBZGp1c3QoKSkKKyAgICBpZiAoc3R5bGUtPnRleHRTaXplQWRqdXN0
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3Jp
cHRpb24obV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkpOworICAgIEZvbnREZXNjcmlwdGlvbiBu
ZXdGb250RGVzY3JpcHRpb24oc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKTsKICAgICBuZXdGb250
RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRT
aXplKCkpOwotICAgIG1fc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRp
b24pOworICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsK
IH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUq
IHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNo
ZWNrRm9yWm9vbUNoYW5nZShSZXNvbHZlU3RhdGUmIHN0YXRlLCBSZW5kZXJTdHlsZSogc3R5bGUs
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBpZiAoc3R5bGUtPmVmZmVjdGl2ZVpv
b20oKSA9PSBwYXJlbnRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9IHN0eWxlLT5mb250RGVzY3Jp
cHRpb24oKTsKICAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGNoaWxkRm9u
dCk7Ci0gICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9uLCBjaGlsZEZvbnQuc3BlY2lm
aWVkU2l6ZSgpKTsKKyAgICBzZXRGb250U2l6ZShzdGF0ZSwgbmV3Rm9udERlc2NyaXB0aW9uLCBj
aGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpKTsKICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9u
KG5ld0ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JH
ZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlKQordm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uo
UmVzb2x2ZVN0YXRlJiBzdGF0ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUpCiB7CiAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBjaGlsZEZvbnQgPSBzdHls
ZS0+Zm9udERlc2NyaXB0aW9uKCk7CiAKQEAgLTQyMzYsMTEgKzQyMTIsMTEgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxl
LCBSZW5kZXJTdHlsZSoKICAgICB9CiAKICAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2Ny
aXB0aW9uKGNoaWxkRm9udCk7Ci0gICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9uLCBz
aXplKTsKKyAgICBzZXRGb250U2l6ZShzdGF0ZSwgbmV3Rm9udERlc2NyaXB0aW9uLCBzaXplKTsK
ICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CiB9CiAK
LXZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0aW5ncyogc2V0dGlu
Z3MpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUoUmVzb2x2ZVN0YXRl
JiBzdGF0ZSwgU2V0dGluZ3MqIHNldHRpbmdzKQogewogICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb247CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERl
c2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseSk7CkBAIC00MjUyLDE2ICs0MjI4LDE3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0aW5ncyogc2V0dGluZ3MpCiAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLmFwcGVuZEZhbWlseSgwKTsKICAg
ICB9CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0g
Q1NTVmFsdWVYeFNtYWxsICsgMSk7Ci0gICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBm
b250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZhbHNlKSk7Ci0g
ICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQo
KSk7Ci0gICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwotICAgIHNldEZvbnREZXNjcmlwdGlvbihm
b250RGVzY3JpcHRpb24pOworICAgIHNldEZvbnRTaXplKHN0YXRlLCBmb250RGVzY3JpcHRpb24s
IGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZmFsc2UpKTsK
KyAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGlu
ZUhlaWdodCgpKTsKKyAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CisgICAgc3RhdGUu
c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQgU3R5bGVSZXNv
bHZlcjo6c2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0
IHNpemUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKFJlc29sdmVTdGF0ZSYgc3Rh
dGUsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQogeworICAg
IEFTU0VSVChzdGF0ZS5lbGVtZW50KCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZp
ZWRTaXplKHNpemUpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29t
cHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQoKSwgbV9zdHlsZS5nZXQoKSwgZm9u
dERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNpemUsIHVzZVNWR1pvb21SdWxlcygpKSk7
CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9t
U3BlY2lmaWVkU2l6ZShzdGF0ZS5kb2N1bWVudCgpLCBzdGF0ZS5zdHlsZSgpLCBmb250RGVzY3Jp
cHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwgc3RhdGUudXNlU1ZHWm9vbVJ1bGVzKCkpKTsK
IH0KIAogZmxvYXQgU3R5bGVSZXNvbHZlcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNp
emUoRG9jdW1lbnQqIGRvY3VtZW50LCBSZW5kZXJTdHlsZSogc3R5bGUsIGJvb2wgaXNBYnNvbHV0
ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKQpAQCAtNDQ1
OSw3ICs0NDM2LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1
ZUlzRGVyaXZlZEZyb21FbGVtZW50KENTU1ByaW1pdGl2ZVZhbHUKICAgICB9CiB9CiAKLUNvbG9y
IFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVl
KiB2YWx1ZSwgYm9vbCBmb3JWaXNpdGVkTGluaykgY29uc3QKK0NvbG9yIFN0eWxlUmVzb2x2ZXI6
OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKFJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ByaW1pdGl2
ZVZhbHVlKiB2YWx1ZSwgYm9vbCBmb3JWaXNpdGVkTGluaykKIHsKICAgICBpZiAodmFsdWUtPmlz
UkdCQ29sb3IoKSkKICAgICAgICAgcmV0dXJuIENvbG9yKHZhbHVlLT5nZXRSR0JBMzJWYWx1ZSgp
KTsKQEAgLTQ0NjksMTUgKzQ0NDYsMTUgQEAgQ29sb3IgU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9t
UHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlLCBib29sIGZvclYKICAgICBj
YXNlIDA6CiAgICAgICAgIHJldHVybiBDb2xvcigpOwogICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRU
ZXh0OgotICAgICAgICByZXR1cm4gbV9lbGVtZW50LT5kb2N1bWVudCgpLT50ZXh0Q29sb3IoKTsK
KyAgICAgICAgcmV0dXJuIHN0YXRlLmRvY3VtZW50KCktPnRleHRDb2xvcigpOwogICAgIGNhc2Ug
Q1NTVmFsdWVXZWJraXRMaW5rOgotICAgICAgICByZXR1cm4gKG1fZWxlbWVudC0+aXNMaW5rKCkg
JiYgZm9yVmlzaXRlZExpbmspID8gbV9lbGVtZW50LT5kb2N1bWVudCgpLT52aXNpdGVkTGlua0Nv
bG9yKCkgOiBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmxpbmtDb2xvcigpOworICAgICAgICByZXR1
cm4gKHN0YXRlLmVsZW1lbnQoKS0+aXNMaW5rKCkgJiYgZm9yVmlzaXRlZExpbmspID8gc3RhdGUu
ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtDb2xvcigpIDogc3RhdGUuZG9jdW1lbnQoKS0+bGlua0Nv
bG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEFjdGl2ZWxpbms6Ci0gICAgICAgIHJldHVy
biBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmFjdGl2ZUxpbmtDb2xvcigpOworICAgICAgICByZXR1
cm4gc3RhdGUuZG9jdW1lbnQoKS0+YWN0aXZlTGlua0NvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1
ZVdlYmtpdEZvY3VzUmluZ0NvbG9yOgogICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmZvY3Vz
UmluZ0NvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZUN1cnJlbnRjb2xvcjoKLSAgICAgICAgcmV0
dXJuIG1fc3R5bGUtPmNvbG9yKCk7CisgICAgICAgIHJldHVybiBzdGF0ZS5zdHlsZSgpLT5jb2xv
cigpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBjb2xvckZvckNTU1ZhbHVlKGlkZW50
KTsKICAgICB9CkBAIC00ODA5LDE5ICs0Nzg2LDE5IEBAIHN0YXRpYyBGaWx0ZXJPcGVyYXRpb246
Ok9wZXJhdGlvblR5cGUgZmlsdGVyT3BlcmF0aW9uRm9yVHlwZShXZWJLaXRDU1NGaWx0ZXJWYWx1
CiB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCi12b2lkIFN0eWxl
UmVzb2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6
bG9hZFBlbmRpbmdTVkdEb2N1bWVudHMoUmVzb2x2ZVN0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAo
IW1fc3R5bGUtPmhhc0ZpbHRlcigpIHx8IG1fcGVuZGluZ1NWR0RvY3VtZW50cy5pc0VtcHR5KCkp
CisgICAgaWYgKCFzdGF0ZS5zdHlsZSgpLT5oYXNGaWx0ZXIoKSB8fCBzdGF0ZS5wZW5kaW5nU1ZH
RG9jdW1lbnRzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDYWNoZWRSZXNv
dXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCkt
PmNhY2hlZFJlc291cmNlTG9hZGVyKCk7Ci0gICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRp
b24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBtX3N0eWxlLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0
aW9ucygpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9
IHN0YXRlLmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CisgICAgVmVjdG9yPFJl
ZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBzdGF0ZS5zdHlsZSgp
LT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBmaWx0ZXJPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxGaWx0
ZXJPcGVyYXRpb24+IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlck9wZXJhdGlvbnMuYXQoaSk7CiAg
ICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSA9PSBGaWx0ZXJP
cGVyYXRpb246OlJFRkVSRU5DRSkgewogICAgICAgICAgICAgUmVmZXJlbmNlRmlsdGVyT3BlcmF0
aW9uKiByZWZlcmVuY2VGaWx0ZXIgPSBzdGF0aWNfY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRp
b24qPihmaWx0ZXJPcGVyYXRpb24uZ2V0KCkpOwogCi0gICAgICAgICAgICBXZWJLaXRDU1NTVkdE
b2N1bWVudFZhbHVlKiB2YWx1ZSA9IG1fcGVuZGluZ1NWR0RvY3VtZW50cy5nZXQocmVmZXJlbmNl
RmlsdGVyKS5nZXQoKTsKKyAgICAgICAgICAgIFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWUqIHZh
bHVlID0gc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cygpLmdldChyZWZlcmVuY2VGaWx0ZXIpLmdl
dCgpOwogICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIENhY2hlZFNWR0RvY3VtZW50KiBjYWNoZWREb2N1bWVudCA9IHZhbHVlLT5s
b2FkKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKQEAgLTQ4MzIsMzQgKzQ4MDksMzQgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cygpCiAgICAgICAgICAgICByZWZl
cmVuY2VGaWx0ZXItPnNldENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGFkb3B0UHRyKG5ldyBD
YWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShjYWNoZWREb2N1bWVudCkpKTsKICAgICAgICAgfQog
ICAgIH0KLSAgICBtX3BlbmRpbmdTVkdEb2N1bWVudHMuY2xlYXIoKTsKKyAgICBzdGF0ZS5wZW5k
aW5nU1ZHRG9jdW1lbnRzKCkuY2xlYXIoKTsKIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKENTU19T
SEFERVJTKQotU3R5bGVTaGFkZXIqIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhZGVyKENTU1ZhbHVl
KiB2YWx1ZSkKK1N0eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYWRlcihSZXNvbHZl
U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc1dlYktp
dENTU1NoYWRlclZhbHVlKCkpCi0gICAgICAgIHJldHVybiBjYWNoZWRPclBlbmRpbmdTdHlsZVNo
YWRlckZyb21WYWx1ZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NTaGFkZXJWYWx1ZSo+KHZhbHVlKSk7
CisgICAgICAgIHJldHVybiBjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShzdGF0
ZSwgc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTU2hhZGVyVmFsdWUqPih2YWx1ZSkpOwogICAgIHJldHVy
biAwOwogfQogCi1TdHlsZVNoYWRlciogU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nU3R5
bGVTaGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NTU2hhZGVyVmFsdWUqIHZhbHVlKQorU3R5bGVTaGFk
ZXIqIFN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKFJl
c29sdmVTdGF0ZSYgc3RhdGUsIFdlYktpdENTU1NoYWRlclZhbHVlKiB2YWx1ZSkKIHsKICAgICBT
dHlsZVNoYWRlciogc2hhZGVyID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ1NoYWRlcigpOwogICAg
IGlmIChzaGFkZXIgJiYgc2hhZGVyLT5pc1BlbmRpbmdTaGFkZXIoKSkKLSAgICAgICAgbV9oYXNQ
ZW5kaW5nU2hhZGVycyA9IHRydWU7CisgICAgICAgIHN0YXRlLnNldEhhc1BlbmRpbmdTaGFkZXJz
KHRydWUpOwogICAgIHJldHVybiBzaGFkZXI7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bG9h
ZFBlbmRpbmdTaGFkZXJzKCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJz
KFJlc29sdmVTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKCFtX3N0eWxlLT5oYXNGaWx0ZXIoKSB8
fCAhbV9oYXNQZW5kaW5nU2hhZGVycykKKyAgICBpZiAoIXN0YXRlLnN0eWxlKCktPmhhc0ZpbHRl
cigpIHx8ICFzdGF0ZS5oYXNQZW5kaW5nU2hhZGVycygpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2VsZW1lbnQt
PmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CisgICAgQ2FjaGVkUmVzb3VyY2VM
b2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gc3RhdGUuZWxlbWVudCgpLT5kb2N1bWVudCgp
LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVy
YXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBtX3N0eWxlLT5tdXRhYmxlRmlsdGVyKCkub3Bl
cmF0aW9ucygpOworICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJP
cGVyYXRpb25zID0gc3RhdGUuc3R5bGUoKS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVyT3BlcmF0aW9ucy5zaXplKCk7ICsr
aSkgewogICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmaWx0ZXJPcGVyYXRpb24gPSBm
aWx0ZXJPcGVyYXRpb25zLmF0KGkpOwogICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLT5nZXRP
cGVyYXRpb25UeXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT00pIHsKQEAgLTQ4NzYsNyAr
NDg1Myw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJzKCkKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBtX2hhc1BlbmRpbmdTaGFkZXJzID0gZmFs
c2U7CisgICAgc3RhdGUuc2V0SGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpOwogfQogCiBzdGF0aWMg
Ym9vbCBzb3J0UGFyYW1ldGVyc0J5TmFtZUNvbXBhcmF0b3IoY29uc3QgUmVmUHRyPEN1c3RvbUZp
bHRlclBhcmFtZXRlcj4mIGEsIGNvbnN0IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+JiBi
KQpAQCAtNDkxNCwxNiArNDg5MSwxNiBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRl
cj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZQogICAgIHJl
dHVybiBudW1iZXJQYXJhbWV0ZXIucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEN1c3RvbUZp
bHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1Q
YXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqIHZhbHVlcykKK1Bhc3NS
ZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZp
bHRlclRyYW5zZm9ybVBhcmFtZXRlcihSZXNvbHZlU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcm
IG5hbWUsIENTU1ZhbHVlTGlzdCogdmFsdWVzKQogewogICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJU
cmFuc2Zvcm1QYXJhbWV0ZXI+IHRyYW5zZm9ybVBhcmFtZXRlciA9IEN1c3RvbUZpbHRlclRyYW5z
Zm9ybVBhcmFtZXRlcjo6Y3JlYXRlKG5hbWUpOwogICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3Bl
cmF0aW9uczsKLSAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlcywgc3R5bGUoKSwg
bV9yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKTsKKyAgICBjcmVhdGVUcmFuc2Zvcm1PcGVy
YXRpb25zKHZhbHVlcywgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBv
cGVyYXRpb25zKTsKICAgICB0cmFuc2Zvcm1QYXJhbWV0ZXItPnNldE9wZXJhdGlvbnMob3BlcmF0
aW9ucyk7CiAgICAgcmV0dXJuIHRyYW5zZm9ybVBhcmFtZXRlci5yZWxlYXNlKCk7CiB9CiAKLVBh
c3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3Rv
bUZpbHRlclBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlKiBwYXJhbWV0ZXJW
YWx1ZSkKK1Bhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpw
YXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihSZXNvbHZlU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJp
bmcmIG5hbWUsIENTU1ZhbHVlKiBwYXJhbWV0ZXJWYWx1ZSkKIHsKICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IG90aGVyIHBhcmFtZXRlcnMgdHlwZXMgcGFyc2luZy4KICAgICAvLyBib29sZWFuczog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NDM4CkBAIC00OTQ2LDcg
KzQ5MjMsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZl
cjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIoY29ucwogICAgIC8vIGFyZSB0cmFuc2Zvcm1z
LiBwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlciB3aWxsCiAgICAgLy8gcmV0dXJu
IDAgaWYgdGhhdCBhc3N1bXB0aW9uIGlzIGluY29ycmVjdC4KICAgICBpZiAodmFsdWVzLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDApLT5pc1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKCkpCi0gICAg
ICAgIHJldHVybiBwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcihuYW1lLCB2YWx1
ZXMpOworICAgICAgICByZXR1cm4gcGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIo
c3RhdGUsIG5hbWUsIHZhbHVlcyk7CiAKICAgICAvLyBXZSBjYW4gaGF2ZSBvbmx5IGFycmF5cyBv
ZiBib29sZWFucyBvciBudW1iZXJzLCBzbyB1c2UgdGhlIGZpcnN0IHZhbHVlIHRvIGNob29zZSBi
ZXR3ZWVuIHRob3NlIHR3by4KICAgICAvLyBXZSBuZWVkIHVwIHRvIDQgdmFsdWVzIChhbGwgYm9v
bGVhbnMgb3IgYWxsIG51bWJlcnMpLgpAQCAtNDk2Myw3ICs0OTQwLDcgQEAgUGFzc1JlZlB0cjxD
dXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFy
YW1ldGVyKGNvbnMKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpwYXJz
ZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QoQ1NTVmFsdWUqIHBhcmFtZXRlcnNWYWx1ZSwgQ3Vz
dG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVyTGlzdCkKK2Jvb2wgU3R5bGVSZXNvbHZl
cjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KFJlc29sdmVTdGF0ZSYgc3RhdGUsIENT
U1ZhbHVlKiBwYXJhbWV0ZXJzVmFsdWUsIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHBhcmFt
ZXRlckxpc3QpCiB7CiAgICAgSGFzaFNldDxTdHJpbmc+IGtub3duUGFyYW1ldGVyTmFtZXM7CiAg
ICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgcGFyYW1ldGVySXRlcmF0b3IocGFyYW1ldGVyc1ZhbHVl
KTsKQEAgLTQ5ODgsNyArNDk2NSw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21G
aWx0ZXJQYXJhbWV0ZXJMaXN0KENTU1ZhbHVlKiBwYXJhbWV0ZXJzVmFsdWUsIEN1CiAgICAgICAg
IGlmICghaXRlcmF0b3IuaGFzTW9yZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAKLSAgICAgICAgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyYW1ldGVyID0g
cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIobmFtZSwgaXRlcmF0b3IudmFsdWUoKSk7CisgICAg
ICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcmFtZXRlciA9IHBhcnNlQ3VzdG9t
RmlsdGVyUGFyYW1ldGVyKHN0YXRlLCBuYW1lLCBpdGVyYXRvci52YWx1ZSgpKTsKICAgICAgICAg
aWYgKCFwYXJhbWV0ZXIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHBhcmFt
ZXRlckxpc3QuYXBwZW5kKHBhcmFtZXRlci5yZWxlYXNlKCkpOwpAQCAtNTAwMCw3ICs0OTc3LDcg
QEAgYm9vbCBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QoQ1NT
VmFsdWUqIHBhcmFtZXRlcnNWYWx1ZSwgQ3UKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUGFzc1Jl
ZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZp
bHRlck9wZXJhdGlvbihXZWJLaXRDU1NGaWx0ZXJWYWx1ZSogZmlsdGVyVmFsdWUpCitQYXNzUmVm
UHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmls
dGVyT3BlcmF0aW9uKFJlc29sdmVTdGF0ZSYgc3RhdGUsIFdlYktpdENTU0ZpbHRlclZhbHVlKiBm
aWx0ZXJWYWx1ZSkKIHsKICAgICBBU1NFUlQoZmlsdGVyVmFsdWUtPmxlbmd0aCgpKTsKIApAQCAt
NTAxMSw3ICs0OTg4LDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxl
UmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWIKICAgICB1bnNpZ25lZCBz
aGFkZXJzTGlzdExlbmd0aCA9IHNoYWRlcnNMaXN0LT5sZW5ndGgoKTsKICAgICBBU1NFUlQoc2hh
ZGVyc0xpc3RMZW5ndGgpOwogCi0gICAgUmVmUHRyPFN0eWxlU2hhZGVyPiB2ZXJ0ZXhTaGFkZXIg
PSBzdHlsZVNoYWRlcihzaGFkZXJzTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7Cisg
ICAgUmVmUHRyPFN0eWxlU2hhZGVyPiB2ZXJ0ZXhTaGFkZXIgPSBzdHlsZVNoYWRlcihzdGF0ZSwg
c2hhZGVyc0xpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOwogICAgIFJlZlB0cjxTdHls
ZVNoYWRlcj4gZnJhZ21lbnRTaGFkZXI7CiAgICAgQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGUgcHJv
Z3JhbVR5cGUgPSBQUk9HUkFNX1RZUEVfQkxFTkRTX0VMRU1FTlRfVEVYVFVSRTsKICAgICBDdXN0
b21GaWx0ZXJQcm9ncmFtTWl4U2V0dGluZ3MgbWl4U2V0dGluZ3M7CkBAIC01MDI0LDcgKzUwMDEs
NyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3Jl
YXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFdlYgogICAgICAgICAgICAgQ1NTVmFsdWVMaXN0SXRl
cmF0b3IgaXRlcmF0b3IobWl4RnVuY3Rpb24pOwogCiAgICAgICAgICAgICBBU1NFUlQobWl4RnVu
Y3Rpb24tPmxlbmd0aCgpKTsKLSAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyID0gc3R5bGVTaGFk
ZXIoaXRlcmF0b3IudmFsdWUoKSk7CisgICAgICAgICAgICBmcmFnbWVudFNoYWRlciA9IHN0eWxl
U2hhZGVyKHN0YXRlLCBpdGVyYXRvci52YWx1ZSgpKTsKICAgICAgICAgICAgIGl0ZXJhdG9yLmFk
dmFuY2UoKTsKIAogICAgICAgICAgICAgQVNTRVJUKG1peEZ1bmN0aW9uLT5sZW5ndGgoKSA8PSAz
KTsKQEAgLTUwNDAsNyArNTAxNyw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9u
PiBTdHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oV2ViCiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwcm9ncmFtVHlwZSA9IFBST0dS
QU1fVFlQRV9OT19FTEVNRU5UX1RFWFRVUkU7Ci0gICAgICAgICAgICBmcmFnbWVudFNoYWRlciA9
IHN0eWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyT3JNaXhGdW5jdGlvbik7CisgICAgICAgICAgICBm
cmFnbWVudFNoYWRlciA9IHN0eWxlU2hhZGVyKHN0YXRlLCBmcmFnbWVudFNoYWRlck9yTWl4RnVu
Y3Rpb24pOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNTA5Niw3ICs1MDczLDcgQEAgUGFz
c1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3Rv
bUZpbHRlck9wZXJhdGlvbihXZWIKICAgICAgICAgcGFyYW1ldGVyc1ZhbHVlID0gZmlsdGVyVmFs
dWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMik7CiAgICAgCiAgICAgQ3VzdG9tRmlsdGVyUGFy
YW1ldGVyTGlzdCBwYXJhbWV0ZXJMaXN0OwotICAgIGlmIChwYXJhbWV0ZXJzVmFsdWUgJiYgIXBh
cnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChwYXJhbWV0ZXJzVmFsdWUsIHBhcmFtZXRlckxp
c3QpKQorICAgIGlmIChwYXJhbWV0ZXJzVmFsdWUgJiYgIXBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1l
dGVyTGlzdChzdGF0ZSwgcGFyYW1ldGVyc1ZhbHVlLCBwYXJhbWV0ZXJMaXN0KSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgCiAgICAgUmVmUHRyPFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbT4gcHJv
Z3JhbSA9IFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKHZlcnRleFNoYWRlci5yZWxl
YXNlKCksIGZyYWdtZW50U2hhZGVyLnJlbGVhc2UoKSwgcHJvZ3JhbVR5cGUsIG1peFNldHRpbmdz
LCBtZXNoVHlwZSk7CkBAIC01MTA0LDcgKzUwODEsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRl
ck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFdl
YgogfQogI2VuZGlmCiAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9u
cyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcm9v
dFN0eWxlLCBGaWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKQorYm9vbCBTdHlsZVJlc29s
dmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKFJlc29sdmVTdGF0ZSYgc3RhdGUsIENTU1ZhbHVl
KiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIEZp
bHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpCiB7CiAgICAgQVNTRVJUKG91dE9wZXJhdGlv
bnMuaXNFbXB0eSgpKTsKICAgICAKQEAgLTUxMzcsNyArNTExNCw3IEBAIGJvb2wgU3R5bGVSZXNv
bHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5
bGUqIHN0eWxlCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBpZiAo
b3BlcmF0aW9uVHlwZSA9PSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSkgewotICAgICAgICAgICAg
UmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gb3BlcmF0aW9uID0gY3JlYXRlQ3VzdG9tRmls
dGVyT3BlcmF0aW9uKGZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIFJlZlB0cjxDdXN0b21GaWx0
ZXJPcGVyYXRpb24+IG9wZXJhdGlvbiA9IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihzdGF0
ZSwgZmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgaWYgKCFvcGVyYXRpb24pCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgCkBAIC01MTU1LDEyICs1MTMyLDEyIEBA
IGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5W
YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgICAgIFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWUqIHN2Z0RvY3VtZW50VmFsdWUgPSBz
dGF0aWNfY2FzdDxXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKj4oYXJndW1lbnQpOwotICAgICAg
ICAgICAgS1VSTCB1cmwgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN2Z0Rv
Y3VtZW50VmFsdWUtPnVybCgpKTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gLyptX2VsZW1lbnQt
PiovZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCkpOwogCiAg
ICAgICAgICAgICBSZWZQdHI8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPiBvcGVyYXRpb24gPSBS
ZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShzdmdEb2N1bWVudFZhbHVlLT51cmwoKSwg
dXJsLmZyYWdtZW50SWRlbnRpZmllcigpLCBvcGVyYXRpb25UeXBlKTsKLSAgICAgICAgICAgIGlm
IChTVkdVUklSZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1
ZS0+dXJsKCksIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgICAgIGlmIChTVkdV
UklSZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJs
KCksIHN0YXRlLmRvY3VtZW50KCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFzdmdEb2N1bWVu
dFZhbHVlLT5sb2FkUmVxdWVzdGVkKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fcGVuZGluZ1NW
R0RvY3VtZW50cy5zZXQob3BlcmF0aW9uLmdldCgpLCBzdmdEb2N1bWVudFZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cygpLnNldChvcGVyYXRpb24u
Z2V0KCksIHN2Z0RvY3VtZW50VmFsdWUpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN2Z0Rv
Y3VtZW50VmFsdWUtPmNhY2hlZFNWR0RvY3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbi0+c2V0Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UoYWRvcHRQdHIobmV3IENhY2hl
ZFNWR0RvY3VtZW50UmVmZXJlbmNlKHN2Z0RvY3VtZW50VmFsdWUtPmNhY2hlZFNWR0RvY3VtZW50
KCkpKSk7CiAgICAgICAgICAgICB9CkBAIC01MjQ0LDcgKzUyMjEsNyBAQCBib29sIFN0eWxlUmVz
b2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0
eWxlKiBzdHlsZQogICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1
ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpIDogMDsK
ICAgICAgICAgICAgIENvbG9yIGNvbG9yOwogICAgICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQot
ICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29s
b3IuZ2V0KCkpOworICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFs
dWUoc3RhdGUsIGl0ZW0tPmNvbG9yLmdldCgpKTsKIAogICAgICAgICAgICAgb3BlcmF0aW9ucy5v
cGVyYXRpb25zKCkuYXBwZW5kKERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShsb2Nh
dGlvbiwgYmx1ciwgY29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6dHJhbnNwYXJlbnQs
IG9wZXJhdGlvblR5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTI2NCw3ICs1MjQxLDcg
QEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBp
blZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUKIAogUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHls
ZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW5nSW1h
Z2UpCiB7Ci0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0g
bV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworICAgIENhY2hl
ZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IGRvY3VtZW50KCktPmNhY2hl
ZFJlc291cmNlTG9hZGVyKCk7CiAKICAgICBpZiAocGVuZGluZ0ltYWdlLT5jc3NJbWFnZVZhbHVl
KCkpIHsKICAgICAgICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VWYWx1ZSA9IHBlbmRpbmdJbWFnZS0+
Y3NzSW1hZ2VWYWx1ZSgpOwpAQCAtNTI5MiwyNSArNTI2OSwyNSBAQCBQYXNzUmVmUHRyPFN0eWxl
SW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2Uq
IHBlbmRpbgogICAgIHJldHVybiAwOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5k
aW5nSW1hZ2VzKCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoUmVzb2x2
ZVN0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAobV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmlzRW1w
dHkoKSkKKyAgICBpZiAoc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0
ZXJhdG9yOjpLZXlzIGVuZCA9IG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5lbmQoKS5rZXlzKCk7
Ci0gICAgZm9yIChQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMg
aXQgPSBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuYmVnaW4oKS5rZXlzKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5
cyBlbmQgPSBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuZW5kKCkua2V5cygpOworICAg
IGZvciAoUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0ID0g
c3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmJlZ2luKCkua2V5cygpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKICAgICAgICAgQ1NTUHJvcGVydHlJRCBjdXJyZW50UHJvcGVydHkgPSAqaXQ7CiAK
ICAgICAgICAgc3dpdGNoIChjdXJyZW50UHJvcGVydHkpIHsKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRJbWFnZTogewotICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIGJhY2tn
cm91bmRMYXllciA9IG1fc3R5bGUtPmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKTsgYmFja2dyb3Vu
ZExheWVyOyBiYWNrZ3JvdW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkgeworICAg
ICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIGJhY2tncm91bmRMYXllciA9IHN0YXRlLnN0eWxlKCkt
PmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKTsgYmFja2dyb3VuZExheWVyOyBiYWNrZ3JvdW5kTGF5
ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChiYWNr
Z3JvdW5kTGF5ZXItPmltYWdlKCkgJiYgYmFja2dyb3VuZExheWVyLT5pbWFnZSgpLT5pc1BlbmRp
bmdJbWFnZSgpKQogICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kTGF5ZXItPnNldEltYWdl
KGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihiYWNrZ3Jv
dW5kTGF5ZXItPmltYWdlKCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q29udGVudDogewotICAgICAgICAg
ICAgZm9yIChDb250ZW50RGF0YSogY29udGVudERhdGEgPSBjb25zdF9jYXN0PENvbnRlbnREYXRh
Kj4obV9zdHlsZS0+Y29udGVudERhdGEoKSk7IGNvbnRlbnREYXRhOyBjb250ZW50RGF0YSA9IGNv
bnRlbnREYXRhLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoQ29udGVudERhdGEqIGNvbnRl
bnREYXRhID0gY29uc3RfY2FzdDxDb250ZW50RGF0YSo+KHN0YXRlLnN0eWxlKCktPmNvbnRlbnRE
YXRhKCkpOyBjb250ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50RGF0YS0+bmV4dCgpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnREYXRhLT5pc0ltYWdlKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxJbWFnZUNvbnRlbnRE
YXRhKj4oY29udGVudERhdGEpLT5pbWFnZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaW1h
Z2UtPmlzUGVuZGluZ0ltYWdlKCkpIHsKQEAgLTUzMjMsNyArNTMwMCw3IEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUN1cnNvcjogewotICAgICAgICAgICAgaWYgKEN1
cnNvckxpc3QqIGN1cnNvckxpc3QgPSBtX3N0eWxlLT5jdXJzb3JzKCkpIHsKKyAgICAgICAgICAg
IGlmIChDdXJzb3JMaXN0KiBjdXJzb3JMaXN0ID0gc3RhdGUuc3R5bGUoKS0+Y3Vyc29ycygpKSB7
CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjdXJzb3JMaXN0LT5zaXpl
KCk7ICsraSkgewogICAgICAgICAgICAgICAgICAgICBDdXJzb3JEYXRhJiBjdXJyZW50Q3Vyc29y
ID0gY3Vyc29yTGlzdC0+YXQoaSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChTdHlsZUltYWdl
KiBpbWFnZSA9IGN1cnJlbnRDdXJzb3IuaW1hZ2UoKSkgewpAQCAtNTMzNSwxNyArNTMxMiwxNyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZTog
ewotICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkgJiYgbV9zdHlsZS0+
bGlzdFN0eWxlSW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICBtX3N0
eWxlLT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxl
UGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSkpKTsKKyAgICAgICAgICAg
IGlmIChzdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpICYmIHN0YXRlLnN0eWxlKCktPmxp
c3RTdHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0TGlzdFN0eWxlSW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxT
dHlsZVBlbmRpbmdJbWFnZSo+KHN0YXRlLnN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCkpKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVySW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAgIGlmIChtX3N0eWxlLT5ib3JkZXJJbWFnZVNv
dXJjZSgpICYmIG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkp
Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVySW1hZ2VTb3VyY2UobG9hZFBlbmRp
bmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPmJvcmRlcklt
YWdlU291cmNlKCkpKSk7CisgICAgICAgICAgICBpZiAoc3RhdGUuc3R5bGUoKS0+Ym9yZGVySW1h
Z2VTb3VyY2UoKSAmJiBzdGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNvdXJjZSgpLT5pc1BlbmRp
bmdJbWFnZSgpKQorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJvcmRlckltYWdl
U291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihz
dGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6IHsK
LSAgICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtX3N0eWxlLT5i
b3hSZWZsZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rp
b24gPSBzdGF0ZS5zdHlsZSgpLT5ib3hSZWZsZWN0KCkpIHsKICAgICAgICAgICAgICAgICBjb25z
dCBOaW5lUGllY2VJbWFnZSYgbWFza0ltYWdlID0gcmVmbGVjdGlvbi0+bWFzaygpOwogICAgICAg
ICAgICAgICAgIGlmIChtYXNrSW1hZ2UuaW1hZ2UoKSAmJiBtYXNrSW1hZ2UuaW1hZ2UoKS0+aXNQ
ZW5kaW5nSW1hZ2UoKSkgewogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJbWFnZT4g
bG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0lt
YWdlKj4obWFza0ltYWdlLmltYWdlKCkpKTsKQEAgLTUzNTUsMTIgKzUzMzIsMTIgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNl
OiB7Ci0gICAgICAgICAgICBpZiAobV9zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCkgJiYgbV9z
dHlsZS0+bWFza0JveEltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0TWFza0JveEltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3Rh
dGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2Uo
KSkpKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2Uo
KSAmJiBzdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2Uo
KSkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXNrQm94SW1hZ2VTb3VyY2Uo
bG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KHN0YXRlLnN0
eWxlKCktPm1hc2tCb3hJbWFnZVNvdXJjZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZTogewotICAgICAg
ICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IG1fc3R5bGUtPmFjY2Vzc01hc2tMYXll
cnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkgeworICAgICAg
ICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IHN0YXRlLnN0eWxlKCktPmFjY2Vzc01h
c2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkgewog
ICAgICAgICAgICAgICAgIGlmIChtYXNrTGF5ZXItPmltYWdlKCkgJiYgbWFza0xheWVyLT5pbWFn
ZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQogICAgICAgICAgICAgICAgICAgICBtYXNrTGF5ZXItPnNl
dEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPiht
YXNrTGF5ZXItPmltYWdlKCkpKSk7CiAgICAgICAgICAgICB9CkBAIC01MzcxLDIyICs1MzQ4LDIy
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICB9CiAg
ICAgfQogCi0gICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmNsZWFyKCk7CisgICAgc3RhdGUu
cGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmNsZWFyKCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZl
cjo6bG9hZFBlbmRpbmdSZXNvdXJjZXMoKQordm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGlu
Z1Jlc291cmNlcyhSZXNvbHZlU3RhdGUmIHN0YXRlKQogewogICAgIC8vIFN0YXJ0IGxvYWRpbmcg
aW1hZ2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ0ltYWdlcygp
OworICAgIGxvYWRQZW5kaW5nSW1hZ2VzKHN0YXRlKTsKIAogI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKICAgICAvLyBTdGFydCBsb2FkaW5nIHRoZSBzaGFkZXJzIHJlZmVyZW5jZWQgYnkgdGhpcyBz
dHlsZS4KLSAgICBsb2FkUGVuZGluZ1NoYWRlcnMoKTsKKyAgICBsb2FkUGVuZGluZ1NoYWRlcnMo
c3RhdGUpOwogI2VuZGlmCiAgICAgCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUo
U1ZHKQogICAgIC8vIFN0YXJ0IGxvYWRpbmcgdGhlIFNWRyBEb2N1bWVudHMgcmVmZXJlbmNlZCBi
eSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCk7CisgICAgbG9hZFBl
bmRpbmdTVkdEb2N1bWVudHMoc3RhdGUpOwogI2VuZGlmCiB9CiAKQEAgLTU0MzQsNyArNTQxMSw2
IEBAIHZvaWQgTWVkaWFRdWVyeVJlc3VsdDo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0
SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlcG9ydE1l
bW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAg
ICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1l
bW9yeVR5cGVzOjpDU1MpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fc3R5bGUpOwogICAgIGluZm8u
YWRkTWVtYmVyKG1fYXV0aG9yU3R5bGUpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fdXNlclN0eWxl
KTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2ZlYXR1cmVzKTsKQEAgLTU0NDMsMzEgKzU0MTksMTYg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZv
KiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogICAgIGluZm8uYWRkTWVtYmVyKG1fa2V5ZnJhbWVz
UnVsZU1hcCk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9tYXRjaGVkUHJvcGVydGllc0NhY2hlKTsK
ICAgICBpbmZvLmFkZE1lbWJlcihtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyKTsK
LSAgICBpbmZvLmFkZE1lbWJlcihtX21hdGNoZWRSdWxlcyk7CiAKLSAgICBpbmZvLmFkZE1lbWJl
cihtX3J1bGVMaXN0KTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3BlbmRpbmdJbWFnZVByb3BlcnRp
ZXMpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fbWVkaXVtKTsKICAgICBpbmZvLmFkZE1lbWJlciht
X3Jvb3REZWZhdWx0U3R5bGUpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fZG9jdW1lbnQpOwogCi0g
ICAgLy8gRklYTUU6IHBvaW50ZXIgdG8gUmVuZGVyU3R5bGUgY291bGQgcG9pbnQgdG8gYW4gYWxy
ZWFkeSBkZWxldGVkIG9iamVjdC4KLSAgICBpbmZvLmlnbm9yZU1lbWJlcihtX3BhcmVudFN0eWxl
KTsKLSAgICBpbmZvLmlnbm9yZU1lbWJlcihtX3Jvb3RFbGVtZW50U3R5bGUpOwotCi0gICAgaW5m
by5hZGRNZW1iZXIobV9lbGVtZW50KTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3N0eWxlZEVsZW1l
bnQpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fcmVnaW9uRm9yU3R5bGluZyk7Ci0gICAgaW5mby5h
ZGRNZW1iZXIobV9wYXJlbnROb2RlKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX2xpbmVIZWlnaHRW
YWx1ZSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9mb250U2VsZWN0b3IpOwogICAgIGluZm8uYWRk
TWVtYmVyKG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cyk7CiAgICAgaW5mby5p
Z25vcmVNZW1iZXIobV9zdHlsZUJ1aWxkZXIpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fc3R5bGVS
dWxlVG9DU1NPTVdyYXBwZXJNYXApOwogICAgIGluZm8uYWRkTWVtYmVyKG1fc3R5bGVTaGVldENT
U09NV3JhcHBlclNldCk7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQot
ICAgIGluZm8uYWRkTWVtYmVyKG1fcGVuZGluZ1NWR0RvY3VtZW50cyk7Ci0jZW5kaWYKICAgICBp
bmZvLmFkZE1lbWJlcihtX3Njb3BlUmVzb2x2ZXIpOwogCiAgICAgLy8gRklYTUU6IG1vdmUgdGhp
cyB0byBhIHBsYWNlIHdoZXJlIGl0IHdvdWxkIGJlIGNhbGxlZCBvbmx5IG9uY2U/CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCAzMzM2NmM3Njc5MTFlNzMwMTlmOTQ5NGJjZWI0ZGM4
YjBjODc0NzU4Li41YzU0YzMwNDNmYTZiMTQ0N2E2NjAyZDA4ZmNiOTJhY2MyMTVlM2YyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTIzLDExICsyMywxMyBAQAogI2RlZmluZSBT
dHlsZVJlc29sdmVyX2gKIAogI2luY2x1ZGUgIkNTU1J1bGUuaCIKKyNpbmNsdWRlICJDU1NSdWxl
TGlzdC5oIgogI2luY2x1ZGUgIkNTU1RvU3R5bGVNYXAuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxp
c3QuaCIKICNpbmNsdWRlICJMaW5rSGFzaC5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFeHAuaCIK
ICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlJlc29sdmVTdGF0ZS5oIgogI2lu
Y2x1ZGUgIlJ1bGVGZWF0dXJlLmgiCiAjaW5jbHVkZSAiUnVsZVNldC5oIgogI2luY2x1ZGUgIlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKQEAgLTM2LDYgKzM4LDkgQEAKICNpbmNsdWRlICJTdHls
ZUluaGVyaXRlZERhdGEuaCIKICNpbmNsdWRlICJTdHlsZVNjb3BlUmVzb2x2ZXIuaCIKICNpbmNs
dWRlICJWaWV3cG9ydFN0eWxlUmVzb2x2ZXIuaCIKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYm
IEVOQUJMRShTVkcpCisjaW5jbHVkZSAiV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZS5oIgorI2Vu
ZGlmCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTg2LDYgKzkxLDcgQEAgY2xhc3MgU3R5bGVJbWFn
ZTsKIGNsYXNzIFN0eWxlS2V5ZnJhbWU7CiBjbGFzcyBTdHlsZVBlbmRpbmdJbWFnZTsKIGNsYXNz
IFN0eWxlUHJvcGVydHlTZXQ7CitjbGFzcyBSZXNvbHZlU3RhdGU7CiBjbGFzcyBTdHlsZVJ1bGU7
CiAjaWYgRU5BQkxFKFNIQURPV19ET00pCiBjbGFzcyBTdHlsZVJ1bGVIb3N0OwpAQCAtMTMyLDYg
KzEzOCw5IEBAIGVudW0gUnVsZU1hdGNoaW5nQmVoYXZpb3IgewogICAgIE1hdGNoT25seVVzZXJB
Z2VudFJ1bGVzLAogfTsKIAorI2lmbmRlZiBUQVNBSworI2VuZGlmCisKIC8vIFRoaXMgY2xhc3Mg
c2VsZWN0cyBhIFJlbmRlclN0eWxlIGZvciBhIGdpdmVuIGVsZW1lbnQgYmFzZWQgb24gYSBjb2xs
ZWN0aW9uIG9mIHN0eWxlc2hlZXRzLgogY2xhc3MgU3R5bGVSZXNvbHZlciB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoU3R5bGVSZXNvbHZlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpA
QCAtMTYxLDIwICsxNzAsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gc3R5bGVGb3JEb2N1bWVudChEb2N1bWVudCosIENTU0ZvbnRTZWxlY3RvciogPSAw
KTsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0
KCk7IH0KLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Bh
cmVudFN0eWxlOyB9Ci0gICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7
IHJldHVybiBtX3Jvb3RFbGVtZW50U3R5bGU7IH0KLSAgICBFbGVtZW50KiBlbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9kb2N1bWVudDsgfQotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uKCkgeyByZXR1cm4gc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICBj
b25zdCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHBh
cmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAgdm9pZCBzZXRGb250RGVzY3Jp
cHRpb24oY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9mb250RGly
dHkgfD0gc3R5bGUoKS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KLSAg
ICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRab29t
KGYpOyB9Ci0gICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkg
fD0gc3R5bGUoKS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQotICAgIHZvaWQgc2V0VGV4dFNpemVB
ZGp1c3QoYm9vbCBiKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRTaXplQWRqdXN0
KGIpOyB9Ci0gICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkg
eyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7IH0K
LSAgICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRpb24gdGV4dE9yaWVudGF0
aW9uKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRPcmllbnRhdGlvbih0ZXh0T3Jp
ZW50YXRpb24pOyB9Ci0gICAgYm9vbCBoYXNQYXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9w
YXJlbnROb2RlOyB9CiAKICAgICB2b2lkIHJlc2V0QXV0aG9yU3R5bGUoKTsKICAgICB2b2lkIGFw
cGVuZEF1dGhvclN0eWxlU2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UmVm
UHRyPENTU1N0eWxlU2hlZXQ+ID4mKTsKQEAgLTE5OCwxNyArMTk0LDE3IEBAIHByaXZhdGU6CiAg
ICAgfQogI2VuZGlmCiAKLSAgICB2b2lkIGluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCosIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VVRE8pOwotICAgIHZv
aWQgaW5pdEVsZW1lbnQoRWxlbWVudCopOworICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShS
ZXNvbHZlU3RhdGUmLCBFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCk7Cisg
ICAgdm9pZCBpbml0RWxlbWVudChSZXNvbHZlU3RhdGUmLCBFbGVtZW50Kik7CiAgICAgdm9pZCBj
b2xsZWN0RmVhdHVyZXMoKTsKLSAgICBSZW5kZXJTdHlsZSogbG9jYXRlU2hhcmVkU3R5bGUoKTsK
LSAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqKTsK
LSAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKTsKKyAgICBS
ZW5kZXJTdHlsZSogbG9jYXRlU2hhcmVkU3R5bGUoUmVzb2x2ZVN0YXRlJik7CisgICAgYm9vbCBz
dHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChFbGVtZW50KiwgUnVsZVNldCopOwor
ICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhFbGVtZW50Kik7
CiAgICAgTm9kZSogbG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2
aXNpdGVkTm9kZUNvdW50KSBjb25zdDsKLSAgICBTdHlsZWRFbGVtZW50KiBmaW5kU2libGluZ0Zv
clN0eWxlU2hhcmluZyhOb2RlKiwgdW5zaWduZWQmIGNvdW50KSBjb25zdDsKLSAgICBib29sIGNh
blNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KikgY29uc3Q7CisgICAgU3R5bGVk
RWxlbWVudCogZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoUmVzb2x2ZVN0YXRlJiwgTm9kZSos
IHVuc2lnbmVkJiBjb3VudCkgY29uc3Q7CisgICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aEVsZW1l
bnQoUmVzb2x2ZVN0YXRlJiwgU3R5bGVkRWxlbWVudCopIGNvbnN0OwogCi0gICAgUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0
IFN0eWxlS2V5ZnJhbWUqLCBLZXlmcmFtZVZhbHVlJik7CisgICAgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gc3R5bGVGb3JLZXlmcmFtZShSZXNvbHZlU3RhdGUmLCBjb25zdCBSZW5kZXJTdHlsZSos
IGNvbnN0IFN0eWxlS2V5ZnJhbWUqLCBLZXlmcmFtZVZhbHVlJik7CiAKIHB1YmxpYzoKICAgICAv
LyBUaGVzZSBtZXRob2RzIHdpbGwgZ2l2ZSBiYWNrIHRoZSBzZXQgb2YgcnVsZXMgdGhhdCBtYXRj
aGVkIGZvciBhIGdpdmVuIGVsZW1lbnQgKG9yIGEgcHNldWRvLWVsZW1lbnQpLgpAQCAtMjMxLDI1
ICsyMjcsMjggQEAgcHVibGljOgogICAgIHN0YXRpYyBpbnQgbGVnYWN5Rm9udFNpemUoRG9jdW1l
bnQqLCBpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplKTsK
IAogcHVibGljOgorICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVdpdGhWYWx1ZUNoZWNraW5nKFJlc29s
dmVTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CisgICAgdm9pZCBhcHBseUZvbnRQ
cm9wZXJ0eVRvU3R5bGUoUmVuZGVyU3R5bGUqIHRhcmdldCwgY29uc3QgU3R5bGVQcm9wZXJ0eVNl
dCogcmVmZXJlbmNlKTsKKyNpZiAwCisgICAgLy8gYmFkIG1ldGhvZHMgLi4uIEkgdGhpbmsuCiAg
ICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIFJl
bmRlclN0eWxlKik7CiAKICAgICB2b2lkIGFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQ
cm9wZXJ0eUlELCBDU1NWYWx1ZSopOworI2VuZGlmCiAKLSAgICB2b2lkIHVwZGF0ZUZvbnQoKTsK
LSAgICB2b2lkIGluaXRpYWxpemVGb250U3R5bGUoU2V0dGluZ3MqKTsKKyAgICB2b2lkIHVwZGF0
ZUZvbnQoUmVzb2x2ZVN0YXRlJik7CisgICAgdm9pZCBpbml0aWFsaXplRm9udFN0eWxlKFJlc29s
dmVTdGF0ZSYsIFNldHRpbmdzKik7CiAKICAgICBzdGF0aWMgZmxvYXQgZ2V0Q29tcHV0ZWRTaXpl
RnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqLCBmbG9hdCB6b29tRmFjdG9yLCBib29sIGlzQWJz
b2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBFU21hcnRNaW5pbXVtRm9yRm9udFNpemUg
PSBVc2VTbWFydE1pbmltdW1Gb3JGb250Rml6ZSk7CiAKLSAgICB2b2lkIHNldEZvbnRTaXplKEZv
bnREZXNjcmlwdGlvbiYsIGZsb2F0IHNpemUpOworICAgIHN0YXRpYyB2b2lkIHNldEZvbnRTaXpl
KFJlc29sdmVTdGF0ZSYsIEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNpemUpOwogCiBwcml2YXRl
OgogICAgIHN0YXRpYyBmbG9hdCBnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1
bWVudCosIFJlbmRlclN0eWxlKiwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVk
U2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMpOwogCiBwdWJsaWM6Ci0gICAgYm9vbCB1c2VTVkda
b29tUnVsZXMoKTsKLQogICAgIHN0YXRpYyBib29sIGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlSXNE
ZXJpdmVkRnJvbUVsZW1lbnQoQ1NTUHJpbWl0aXZlVmFsdWUqKTsKLSAgICBDb2xvciBjb2xvckZy
b21QcmltaXRpdmVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZSosIGJvb2wgZm9yVmlzaXRlZExpbmsg
PSBmYWxzZSkgY29uc3Q7CisgICAgc3RhdGljIENvbG9yIGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
KFJlc29sdmVTdGF0ZSYsIENTU1ByaW1pdGl2ZVZhbHVlKiwgYm9vbCBmb3JWaXNpdGVkTGluayA9
IGZhbHNlKTsKIAogICAgIGJvb2wgaGFzU2VsZWN0b3JGb3JJZChjb25zdCBBdG9taWNTdHJpbmcm
KSBjb25zdDsKICAgICBib29sIGhhc1NlbGVjdG9yRm9yQ2xhc3MoY29uc3QgQXRvbWljU3RyaW5n
JikgY29uc3Q7CkBAIC0yODEsMzQgKzI4MCwzNCBAQCBwdWJsaWM6CiAgICAgQ1NTU3R5bGVSdWxl
KiBlbnN1cmVGdWxsQ1NTT01XcmFwcGVyRm9ySW5zcGVjdG9yKFN0eWxlUnVsZSopOwogCiAjaWYg
RU5BQkxFKENTU19GSUxURVJTKQotICAgIGJvb2wgY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NW
YWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5
bGUsIEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOworICAgIGJvb2wgY3JlYXRlRmls
dGVyT3BlcmF0aW9ucyhSZXNvbHZlU3RhdGUmLCBDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5
bGUqIGluU3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIEZpbHRlck9wZXJhdGlvbnMmIG91
dE9wZXJhdGlvbnMpOwogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBTdHlsZVNoYWRlciog
c3R5bGVTaGFkZXIoQ1NTVmFsdWUqKTsKLSAgICBTdHlsZVNoYWRlciogY2FjaGVkT3JQZW5kaW5n
U3R5bGVTaGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NTU2hhZGVyVmFsdWUqKTsKLSAgICBib29sIHBh
cnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChDU1NWYWx1ZSosIEN1c3RvbUZpbHRlclBhcmFt
ZXRlckxpc3QmKTsKLSAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyc2VD
dXN0b21GaWx0ZXJQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZSopOworICAg
IFN0eWxlU2hhZGVyKiBzdHlsZVNoYWRlcihSZXNvbHZlU3RhdGUmLCBDU1NWYWx1ZSopOworICAg
IFN0eWxlU2hhZGVyKiBjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShSZXNvbHZl
U3RhdGUmLCBXZWJLaXRDU1NTaGFkZXJWYWx1ZSopOworICAgIGJvb2wgcGFyc2VDdXN0b21GaWx0
ZXJQYXJhbWV0ZXJMaXN0KFJlc29sdmVTdGF0ZSYsIENTU1ZhbHVlKiwgQ3VzdG9tRmlsdGVyUGFy
YW1ldGVyTGlzdCYpOworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJz
ZUN1c3RvbUZpbHRlclBhcmFtZXRlcihSZXNvbHZlU3RhdGUmLCBjb25zdCBTdHJpbmcmIG5hbWUs
IENTU1ZhbHVlKik7CiAgICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcnNl
Q3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxp
c3QqKTsKICAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyc2VDdXN0b21G
aWx0ZXJOdW1iZXJQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqKTsK
LSAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyc2VDdXN0b21GaWx0ZXJU
cmFuc2Zvcm1QYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqKTsKLSAg
ICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gY3JlYXRlQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uKFdlYktpdENTU0ZpbHRlclZhbHVlKik7Ci0gICAgdm9pZCBsb2FkUGVuZGluZ1NoYWRl
cnMoKTsKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyc2VDdXN0b21G
aWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIoUmVzb2x2ZVN0YXRlJiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBDU1NWYWx1ZUxpc3QqKTsKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4g
Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFJlc29sdmVTdGF0ZSYsIFdlYktpdENTU0ZpbHRl
clZhbHVlKik7CisgICAgdm9pZCBsb2FkUGVuZGluZ1NoYWRlcnMoUmVzb2x2ZVN0YXRlJik7CiAj
ZW5kaWYKICNpZiBFTkFCTEUoU1ZHKQotICAgIHZvaWQgbG9hZFBlbmRpbmdTVkdEb2N1bWVudHMo
KTsKKyAgICB2b2lkIGxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKFJlc29sdmVTdGF0ZSYpOwogI2Vu
ZGlmCiAjZW5kaWYgLy8gRU5BQkxFKENTU19GSUxURVJTKQogCi0gICAgdm9pZCBsb2FkUGVuZGlu
Z1Jlc291cmNlcygpOworICAgIHZvaWQgbG9hZFBlbmRpbmdSZXNvdXJjZXMoUmVzb2x2ZVN0YXRl
Jik7CiAKIHByaXZhdGU6CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBmaXhlcyB1cCB0aGUgZGVmYXVs
dCBmb250IHNpemUgaWYgaXQgZGV0ZWN0cyB0aGF0IHRoZSBjdXJyZW50IGdlbmVyaWMgZm9udCBm
YW1pbHkgaGFzIGNoYW5nZWQuIC1kd2gKLSAgICB2b2lkIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNo
YW5nZShSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7Ci0gICAgdm9pZCBj
aGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
OwotICAgIHZvaWQgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgpOworICAgIHZvaWQgY2hlY2tGb3JH
ZW5lcmljRmFtaWx5Q2hhbmdlKFJlc29sdmVTdGF0ZSYsIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIGNoZWNrRm9yWm9vbUNoYW5nZShSZXNvbHZlU3Rh
dGUmLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgdm9pZCBj
aGVja0ZvclRleHRTaXplQWRqdXN0KFJlbmRlclN0eWxlKik7CiAKLSAgICB2b2lkIGFkanVzdFJl
bmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZVRvQWRqdXN0LCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUsIEVsZW1lbnQqKTsKKyAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlKFJlc29sdmVTdGF0
ZSYsIFJlbmRlclN0eWxlKiBzdHlsZVRvQWRqdXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUs
IEVsZW1lbnQqKTsKIAotICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29uc3QgUnVsZURhdGEqIHJ1
bGUpIHsgbV9tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOyB9CisgICAgdm9pZCBhZGRNYXRjaGVk
UnVsZShSZXNvbHZlU3RhdGUmIHN0YXRlLCBjb25zdCBSdWxlRGF0YSogcnVsZSkgeyBzdGF0ZS5t
YXRjaGVkUnVsZXMoKS5hcHBlbmQocnVsZSk7IH0KIAogICAgIHN0cnVjdCBSdWxlUmFuZ2Ugewog
ICAgICAgICBSdWxlUmFuZ2UoaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4
KTogZmlyc3RSdWxlSW5kZXgoZmlyc3RSdWxlSW5kZXgpLCBsYXN0UnVsZUluZGV4KGxhc3RSdWxl
SW5kZXgpIHsgfQpAQCAtMzUyLDM4ICszNTEsMjggQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBp
c0NhY2hlYWJsZTsKICAgICB9OwogCi0gICAgc3RydWN0IE1hdGNoUmVxdWVzdCB7Ci0gICAgICAg
IE1hdGNoUmVxdWVzdChSdWxlU2V0KiBydWxlU2V0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzID0g
ZmFsc2UsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0gMCkKLSAgICAgICAgICAgIDogcnVs
ZVNldChydWxlU2V0KQotICAgICAgICAgICAgLCBpbmNsdWRlRW1wdHlSdWxlcyhpbmNsdWRlRW1w
dHlSdWxlcykKLSAgICAgICAgICAgICwgc2NvcGUoc2NvcGUpIHsgfQotICAgICAgICBjb25zdCBS
dWxlU2V0KiBydWxlU2V0OwotICAgICAgICBjb25zdCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzOwot
ICAgICAgICBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZTsKLSAgICB9OwotCiAgICAgc3RhdGlj
IHZvaWQgYWRkTWF0Y2hlZFByb3BlcnRpZXMoTWF0Y2hSZXN1bHQmLCBjb25zdCBTdHlsZVByb3Bl
cnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqID0gMCwgdW5zaWduZWQgbGlua01hdGNoVHlw
ZSA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwsIFByb3BlcnR5V2hpdGVsaXN0VHlwZSA9IFBy
b3BlcnR5V2hpdGVsaXN0Tm9uZSk7CiAgICAgdm9pZCBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVz
KE1hdGNoUmVzdWx0JiwgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCosIGJvb2wgaXNDYWNoZWFibGUg
PSB0cnVlKTsKIAotICAgIHZvaWQgbWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5j
bHVkZVNNSUxQcm9wZXJ0aWVzKTsKLSAgICB2b2lkIG1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYp
OwotICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0JiwgUnVsZVNldCopOwotICAgIHZv
aWQgbWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMp
OwotICAgIHZvaWQgbWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0
eVJ1bGVzKTsKLSAgICB2b2lkIG1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmLCBi
b29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICB2b2lkIG1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVz
dWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgdm9pZCBtYXRjaEFsbFJ1bGVzKFJl
c29sdmVTdGF0ZSYgcmVxdWVzdCwgTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVTTUlMUHJvcGVy
dGllcyk7CisgICAgdm9pZCBtYXRjaFVBUnVsZXMoUmVzb2x2ZVN0YXRlJiwgTWF0Y2hSZXN1bHQm
KTsKKyAgICB2b2lkIG1hdGNoVUFSdWxlcyhSZXNvbHZlU3RhdGUmLCBNYXRjaFJlc3VsdCYsIFJ1
bGVTZXQqKTsKKyAgICB2b2lkIG1hdGNoQXV0aG9yUnVsZXMoUmVzb2x2ZVN0YXRlJiwgTWF0Y2hS
ZXN1bHQmKTsKKyAgICB2b2lkIG1hdGNoVXNlclJ1bGVzKFJlc29sdmVTdGF0ZSYsIE1hdGNoUmVz
dWx0Jik7CisgICAgdm9pZCBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKFJlc29sdmVTdGF0ZSYsIE1h
dGNoUmVzdWx0Jik7CisgICAgdm9pZCBtYXRjaEhvc3RSdWxlcyhSZXNvbHZlU3RhdGUmLCBNYXRj
aFJlc3VsdCYpOwogCi0gICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBNYXRjaFJl
cXVlc3QmLCBSdWxlUmFuZ2UmKTsKLSAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVn
aW9uKGNvbnN0IE1hdGNoUmVxdWVzdCYsIFJ1bGVSYW5nZSYpOwotICAgIHZvaWQgY29sbGVjdE1h
dGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBjb25zdCBNYXRjaFJl
cXVlc3QmLCBSdWxlUmFuZ2UmKTsKKyAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzKFJ1bGVT
ZXQqLCBSZXNvbHZlU3RhdGUmLCBSdWxlUmFuZ2UmLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29w
ZSA9IDApOworICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oUnVsZVNldCos
IFJlc29sdmVTdGF0ZSYsIFJ1bGVSYW5nZSYsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0g
MCk7CisgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1
bGVEYXRhPiosIFJlc29sdmVTdGF0ZSYsIFJ1bGVSYW5nZSYsIGNvbnN0IENvbnRhaW5lck5vZGUq
KTsKIAogICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJikgY29uc3Q7
Ci0gICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7Ci0gICAgdm9pZCBzb3J0QW5kVHJhbnNmZXJN
YXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIHNvcnRNYXRjaGVkUnVsZXMoVmVj
dG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+JiBtYXRjaGVkUnVsZXMpOworICAgIHZvaWQgc29ydEFu
ZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKFJlc29sdmVTdGF0ZSYsIE1hdGNoUmVzdWx0Jik7CiAKLSAg
ICBib29sIHJ1bGVNYXRjaGVzKGNvbnN0IFJ1bGVEYXRhJiwgY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGUpOworICAgIGJvb2wgcnVsZU1hdGNoZXMoUmVzb2x2ZVN0YXRlJiwgY29uc3QgUnVsZURh
dGEmLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8p
OwogICAgIGJvb2wgY2hlY2tSZWdpb25TZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciogcmVnaW9u
U2VsZWN0b3IsIEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOwotICAgIHZvaWQgYXBwbHlNYXRjaGVk
UHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYsIGNvbnN0IEVsZW1lbnQqKTsKKyAgICB2b2lk
IGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoUmVzb2x2ZVN0YXRlJiwgY29uc3QgTWF0Y2hSZXN1bHQm
LCBjb25zdCBFbGVtZW50Kik7CiAgICAgZW51bSBTdHlsZUFwcGxpY2F0aW9uUGFzcyB7CiAjaWYg
RU5BQkxFKENTU19WQVJJQUJMRVMpCiAgICAgICAgIFZhcmlhYmxlRGVmaW5pdGlvbnMsCkBAIC0z
OTIsMTEgKzM4MSwxMSBAQCBwcml2YXRlOgogICAgICAgICBMb3dQcmlvcml0eVByb3BlcnRpZXMK
ICAgICB9OwogICAgIHRlbXBsYXRlIDxTdHlsZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgotICAgIHZv
aWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYsIGJvb2wgaW1wb3J0
YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpOwor
ICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhSZXNvbHZlU3RhdGUmLCBjb25zdCBNYXRj
aFJlc3VsdCYsIGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBi
b29sIGluaGVyaXRlZE9ubHkpOwogICAgIHRlbXBsYXRlIDxTdHlsZUFwcGxpY2F0aW9uUGFzcyBw
YXNzPgotICAgIHZvaWQgYXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHBy
b3BlcnRpZXMsIFN0eWxlUnVsZSosIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25s
eSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlID0gUHJvcGVydHlXaGl0ZWxpc3ROb25lKTsKKyAgICB2
b2lkIGFwcGx5UHJvcGVydGllcyhSZXNvbHZlU3RhdGUmLCBjb25zdCBTdHlsZVByb3BlcnR5U2V0
KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRl
ZE9ubHksIFByb3BlcnR5V2hpdGVsaXN0VHlwZSA9IFByb3BlcnR5V2hpdGVsaXN0Tm9uZSk7CiAj
aWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCi0gICAgdm9pZCByZXNvbHZlVmFyaWFibGVzKENTU1By
b3BlcnR5SUQsIENTU1ZhbHVlKiwgVmVjdG9yPHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJp
bmc+ID4mIGtub3duRXhwcmVzc2lvbnMpOworICAgIHZvaWQgcmVzb2x2ZVZhcmlhYmxlcyhSZXNv
bHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIFZlY3RvcjxzdGQ6OnBhaXI8Q1NT
UHJvcGVydHlJRCwgU3RyaW5nPiA+JiBrbm93bkV4cHJlc3Npb25zKTsKICNlbmRpZgogICAgIHN0
YXRpYyBib29sIGlzVmFsaWRSZWdpb25TdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQpOwogI2lm
IEVOQUJMRShWSURFT19UUkFDSykKQEAgLTQwNiw4ICszOTUsOCBAQCBwcml2YXRlOgogICAgIHZv
aWQgbWF0Y2hQYWdlUnVsZXNGb3JMaXN0KFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIG1hdGNoZWRS
dWxlcywgY29uc3QgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYsIGJvb2wgaXNMZWZ0UGFnZSwgYm9v
bCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7CiAgICAgU2V0dGluZ3MqIGRv
Y3VtZW50U2V0dGluZ3MoKSB7IHJldHVybiBtX2RvY3VtZW50LT5zZXR0aW5ncygpOyB9CiAKLSAg
ICBib29sIGlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0gICAgYm9vbCBpc1JpZ2h0
UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdCB7IHJldHVybiAhaXNMZWZ0UGFnZShwYWdlSW5kZXgp
OyB9CisgICAgYm9vbCBpc0xlZnRQYWdlKFJlbmRlclN0eWxlKiwgaW50IHBhZ2VJbmRleCkgY29u
c3Q7CisgICAgYm9vbCBpc1JpZ2h0UGFnZShSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSwg
aW50IHBhZ2VJbmRleCkgY29uc3QgeyByZXR1cm4gIWlzTGVmdFBhZ2Uocm9vdEVsZW1lbnRTdHls
ZSwgcGFnZUluZGV4KTsgfQogICAgIGJvb2wgaXNGaXJzdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29u
c3Q7CiAgICAgU3RyaW5nIHBhZ2VOYW1lKGludCBwYWdlSW5kZXgpIGNvbnN0OwogCkBAIC00MTgs
MzMgKzQwNywyMyBAQCBwcml2YXRlOgogICAgIE93blB0cjxSdWxlU2V0PiBtX3NpYmxpbmdSdWxl
U2V0OwogICAgIE93blB0cjxSdWxlU2V0PiBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldDsKIAot
ICAgIGJvb2wgbV9oYXNVQUFwcGVhcmFuY2U7Ci0gICAgQm9yZGVyRGF0YSBtX2JvcmRlckRhdGE7
Ci0gICAgRmlsbExheWVyIG1fYmFja2dyb3VuZERhdGE7Ci0gICAgQ29sb3IgbV9iYWNrZ3JvdW5k
Q29sb3I7Ci0KICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIFJlZlB0cjxT
dHlsZVJ1bGVLZXlmcmFtZXM+ID4gS2V5ZnJhbWVzUnVsZU1hcDsKICAgICBLZXlmcmFtZXNSdWxl
TWFwIG1fa2V5ZnJhbWVzUnVsZU1hcDsKIAogcHVibGljOgogICAgIHN0YXRpYyBSZW5kZXJTdHls
ZSogc3R5bGVOb3RZZXRBdmFpbGFibGUoKSB7IHJldHVybiBzX3N0eWxlTm90WWV0QXZhaWxhYmxl
OyB9CiAKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJ
RCwgQ1NTVmFsdWUqKTsKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGNhY2hlZE9yUGVuZGlu
Z0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVZhbHVlKik7Ci0gICAgUGFzc1JlZlB0
cjxTdHlsZUltYWdlPiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwg
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlSW1h
Z2U+IHN0eWxlSW1hZ2UoUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBjYWNoZWRPclBlbmRpbmdGcm9tVmFs
dWUoUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VWYWx1ZSopOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShS
ZXNvbHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKik7CiAj
aWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzZXRP
clBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VTZXRWYWx1ZSopOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHNldE9yUGVuZGluZ0Zyb21WYWx1ZShSZXNv
bHZlU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVNldFZhbHVlKik7CiAjZW5kaWYKLSAg
ICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9w
ZXJ0eUlELCBDU1NDdXJzb3JJbWFnZVZhbHVlKik7Ci0KLSAgICBib29sIGFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlOyB9Ci0gICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOyB9CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKFJlc29sdmVT
dGF0ZSYsIENTU1Byb3BlcnR5SUQsIENTU0N1cnNvckltYWdlVmFsdWUqKTsKIAogICAgIHN0YXRp
YyBMZW5ndGggY29udmVydFRvSW50TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiwgUmVuZGVyU3R5
bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEpOwogICAg
IHN0YXRpYyBMZW5ndGggY29udmVydFRvRmxvYXRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqLCBS
ZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyID0g
MSk7CiAKLSAgICBDU1NUb1N0eWxlTWFwKiBzdHlsZU1hcCgpIHsgcmV0dXJuICZtX3N0eWxlTWFw
OyB9Ci0KICAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25z
dDsKICAgICAKIHByaXZhdGU6CkBAIC00NTIsMTkgKzQzMSwxOSBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8
Q1NTU3R5bGVTaGVldD4gPiYsIFJ1bGVTZXQmIHVzZXJTdHlsZSk7CiAKLSAgICB2b2lkIGNhY2hl
Qm9yZGVyQW5kQmFja2dyb3VuZCgpOworICAgIHZvaWQgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5k
KFJlc29sdmVTdGF0ZSYsIFJlbmRlclN0eWxlKik7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBjYW5T
aGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCopIGNvbnN0OworICAgIGJvb2wgY2Fu
U2hhcmVTdHlsZVdpdGhDb250cm9sKEVsZW1lbnQqLCBTdHlsZWRFbGVtZW50KikgY29uc3Q7CiAK
LSAgICB2b2lkIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKKyAgICB2
b2lkIGFwcGx5UHJvcGVydHkoUmVzb2x2ZVN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUq
KTsKIAogI2lmIEVOQUJMRShTVkcpCi0gICAgdm9pZCBhcHBseVNWR1Byb3BlcnR5KENTU1Byb3Bl
cnR5SUQsIENTU1ZhbHVlKik7CisgICAgdm9pZCBhcHBseVNWR1Byb3BlcnR5KFJlc29sdmVTdGF0
ZSYsIENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CiAjZW5kaWYKIAogICAgIFBhc3NSZWZQdHI8
U3R5bGVJbWFnZT4gbG9hZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSopOwotICAgIHZv
aWQgbG9hZFBlbmRpbmdJbWFnZXMoKTsKKyAgICB2b2lkIGxvYWRQZW5kaW5nSW1hZ2VzKFJlc29s
dmVTdGF0ZSYpOwogCiAgICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVNYXRjaGVkUHJvcGVydGll
c0hhc2goY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMqLCB1bnNpZ25lZCBzaXplKTsKICAgICBzdHJ1
Y3QgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0gewpAQCAtNDgyLDcgKzQ2MSw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoVGltZXI8U3R5bGVSZXNv
bHZlcj4qKTsKIAogICAgIGJvb2wgY2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhjb25zdCBTcGFj
ZVNwbGl0U3RyaW5nJikgY29uc3Q7Ci0gICAgYm9vbCBzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRp
Y2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKKyAgICBi
b29sIHNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMo
UmVzb2x2ZVN0YXRlJiwgRWxlbWVudCosIFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKIAogICAgIHVu
c2lnbmVkIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwOwog
CkBAIC00OTEsMzkgKzQ3MCwxMyBAQCBwcml2YXRlOgogCiAgICAgVGltZXI8U3R5bGVSZXNvbHZl
cj4gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlU3dlZXBUaW1lcjsKIAotICAgIC8vIEEgYnVmZmVy
IHVzZWQgdG8gaG9sZCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgZm9yIGFuIGVsZW1lbnQsIGFu
ZCBhIHRlbXBvcmFyeSBidWZmZXIgdXNlZCBmb3IKLSAgICAvLyBtZXJnZSBzb3J0aW5nLgotICAg
IFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiBtX21hdGNoZWRSdWxlczsKLQotICAgIFJlZlB0
cjxTdGF0aWNDU1NSdWxlTGlzdD4gbV9ydWxlTGlzdDsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxD
U1NQcm9wZXJ0eUlELCBSZWZQdHI8Q1NTVmFsdWU+ID4gUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA7
Ci0gICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzOwot
CiAgICAgT3duUHRyPE1lZGlhUXVlcnlFdmFsdWF0b3I+IG1fbWVkaXVtOwogICAgIFJlZlB0cjxS
ZW5kZXJTdHlsZT4gbV9yb290RGVmYXVsdFN0eWxlOwogCi0gICAgUHNldWRvSWQgbV9keW5hbWlj
UHNldWRvOwotICAgIFBzZXVkb0lkIG1fcHNldWRvU3R5bGU7Ci0KICAgICBEb2N1bWVudCogbV9k
b2N1bWVudDsKLSAgICBTZWxlY3RvckNoZWNrZXIgbV9zZWxlY3RvckNoZWNrZXI7CiAgICAgU2Vs
ZWN0b3JGaWx0ZXIgbV9zZWxlY3RvckZpbHRlcjsKIAotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
bV9zdHlsZTsKLSAgICBSZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZTsKLSAgICBSZW5kZXJTdHls
ZSogbV9yb290RWxlbWVudFN0eWxlOwotICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKLSAgICBTdHls
ZWRFbGVtZW50KiBtX3N0eWxlZEVsZW1lbnQ7Ci0gICAgUmVuZGVyUmVnaW9uKiBtX3JlZ2lvbkZv
clN0eWxpbmc7Ci0gICAgRUluc2lkZUxpbmsgbV9lbGVtZW50TGlua1N0YXRlOwotICAgIGJvb2wg
bV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXM7Ci0gICAgQ29udGFpbmVyTm9kZSogbV9wYXJl
bnROb2RlOwotICAgIENTU1ZhbHVlKiBtX2xpbmVIZWlnaHRWYWx1ZTsKLSAgICBib29sIG1fZm9u
dERpcnR5OwogICAgIGJvb2wgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXM7Ci0gICAgYm9vbCBt
X3NhbWVPcmlnaW5Pbmx5OwotICAgIGJvb2wgbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQ7
CiAKICAgICBSZWZQdHI8Q1NTRm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKICAgICBWZWN0
b3I8T3duUHRyPE1lZGlhUXVlcnlSZXN1bHQ+ID4gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVl
cnlSZXN1bHRzOwpAQCAtNTMyLDIzICs0ODUsMTIgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Vmll
d3BvcnRTdHlsZVJlc29sdmVyPiBtX3ZpZXdwb3J0U3R5bGVSZXNvbHZlcjsKICNlbmRpZgogCi0g
ICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsKLSAgICBib29sIG1fYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsKICAgICBjb25zdCBTdHlsZUJ1aWxkZXImIG1fc3R5
bGVCdWlsZGVyOwogICAgIAogICAgIEhhc2hNYXA8U3R5bGVSdWxlKiwgUmVmUHRyPENTU1N0eWxl
UnVsZT4gPiBtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwOwogICAgIEhhc2hTZXQ8UmVmUHRy
PENTU1N0eWxlU2hlZXQ+ID4gbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0OwogCi0jaWYgRU5B
QkxFKENTU19TSEFERVJTKQotICAgIGJvb2wgbV9oYXNQZW5kaW5nU2hhZGVyczsKLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQotICAgIEhhc2hNYXA8Rmls
dGVyT3BlcmF0aW9uKiwgUmVmUHRyPFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWU+ID4gbV9wZW5k
aW5nU1ZHRG9jdW1lbnRzOwotI2VuZGlmCi0KICAgICBPd25QdHI8U3R5bGVTY29wZVJlc29sdmVy
PiBtX3Njb3BlUmVzb2x2ZXI7Ci0gICAgQ1NTVG9TdHlsZU1hcCBtX3N0eWxlTWFwOwogCiAgICAg
ZnJpZW5kIGNsYXNzIFN0eWxlQnVpbGRlcjsKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiwgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vU3R5bGVkRWxlbWVudC5oCmluZGV4IGU0MWFhZWY0YTFlYjUwOGU4YjU2M2FhODViYmVm
ZjM5ODMyOTBlN2QuLmY1ODQwMmZhOWZhZDNiMjFmNzBiMWRlYmE4Mzg1YmY5Y2U4YmU1MTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaApAQCAtOTksNiArOTksMTggQEAgaW5saW5lIGNv
bnN0IFN0eWxlUHJvcGVydHlTZXQqIFN0eWxlZEVsZW1lbnQ6OnByZXNlbnRhdGlvbkF0dHJpYnV0
ZVN0eWxlKCkKICAgICByZXR1cm4gYXR0cmlidXRlRGF0YSgpLT5wcmVzZW50YXRpb25BdHRyaWJ1
dGVTdHlsZSgpOwogfQogCitpbmxpbmUgU3R5bGVkRWxlbWVudCogdG9TdHlsZWRFbGVtZW50KE5v
ZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKCFub2RlIHx8IG5vZGUtPmlzU3R5bGVkRWxlbWVudCgp
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpOworfQorCitp
bmxpbmUgY29uc3QgU3R5bGVkRWxlbWVudCogdG9TdHlsZWRFbGVtZW50KGNvbnN0IE5vZGUqIG5v
ZGUpCit7CisgICAgQVNTRVJUKCFub2RlIHx8IG5vZGUtPmlzU3R5bGVkRWxlbWVudCgpKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVkRWxlbWVudCo+KG5vZGUpOworfQorCiB9
IC8vbmFtZXNwYWNlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKaW5kZXggNzIwY2E3M2JjZWM5YzNl
ZGIxNjljMmY0N2I2ZjhjMjY4NzU5OTkyMy4uZDhmM2UyYmYyNTE4ZGFmNTZhMzcxZDI0M2IyN2U0
MmQ5YTEwOTdmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0yMDA5LDE5ICsyMDA5LDkgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoY29uc3QgU3RyaW5nJiBuZXdGb250KQog
CiAgICAgLy8gTm93IG1hcCB0aGUgZm9udCBwcm9wZXJ0eSBsb25naGFuZHMgaW50byB0aGUgc3R5
bGUuCiAgICAgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciA9IGNhbnZhcygpLT5zdHlsZVJl
c29sdmVyKCk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJv
cGVydHlGb250RmFtaWx5LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9w
ZXJ0eUZvbnRGYW1pbHkpLmdldCgpLCBuZXdTdHlsZS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNvbHZl
ci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFN0eWxlLCBwYXJz
ZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSkuZ2V0KCkp
OwotICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9w
ZXJ0eUZvbnRWYXJpYW50LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9w
ZXJ0eUZvbnRWYXJpYW50KS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0
eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFdlaWdodCwgcGFyc2VkU3R5bGUtPmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0KS5nZXQoKSk7Ci0KLSAgICAvLyBB
cyBkZXNjcmliZWQgaW4gQlVHNjYyOTEsIHNldHRpbmcgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdo
dCBvbiBhIGZvbnQgbWF5IGVudGFpbCBhIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3Ro
RG91YmxlIGNhbGwsCi0gICAgLy8gd2hpY2ggYXNzdW1lcyB0aGUgZm9udE1ldHJpY3MgYXJlIGF2
YWlsYWJsZSBmb3IgdGhlIGFmZmVjdGVkIGZvbnQsIG90aGVyd2lzZSBhIGNyYXNoIG9jY3VycyAo
c2VlIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0Lzk2MTIyKS4KLSAgICAvLyBUaGUg
dXBkYXRlRm9udCgpIGNhbGxzIGJlbG93IHVwZGF0ZSB0aGUgZm9udE1ldHJpY3MgYW5kIGVuc3Vy
ZSB0aGUgcHJvcGVyIHNldHRpbmcgb2YgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdodC4KLSAgICBz
dHlsZVJlc29sdmVyLT51cGRhdGVGb250KCk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9w
ZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFNpemUsIHBhcnNlZFN0eWxlLT5nZXRQ
cm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpLmdldCgpKTsKLSAgICBzdHlsZVJl
c29sdmVyLT51cGRhdGVGb250KCk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRv
Q3VycmVudFN0eWxlKENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VkU3R5bGUtPmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQoKSk7CisgICAgc3R5bGVSZXNv
bHZlci0+YXBwbHlGb250UHJvcGVydHlUb1N0eWxlKG5ld1N0eWxlLmdldCgpLCBwYXJzZWRTdHls
ZS5nZXQoKSk7CiAKKyAgICAvLyBvawogICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fZm9udCA9IG5l
d1N0eWxlLT5mb250KCk7CiAgICAgbW9kaWZpYWJsZVN0YXRlKCkubV9mb250LnVwZGF0ZShzdHls
ZVJlc29sdmVyLT5mb250U2VsZWN0b3IoKSk7CiAgICAgbW9kaWZpYWJsZVN0YXRlKCkubV9yZWFs
aXplZEZvbnQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuaAppbmRleCBkMDlhNTUxNWQ4MzA1Y2U3YWU2MDhhOTBkZjdmODg0ZjQ1ZDRlNTBkLi4y
ZGVkZWY3NzU3YTk3MWI5OWVhZDAyMWQwYjUwYTFlODVjYWRiM2YzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaApAQCAtMTI5LDYgKzEyOSw3IEBAIGNs
YXNzIFJlbmRlclN0eWxlOiBwdWJsaWMgUmVmQ291bnRlZDxSZW5kZXJTdHlsZT4gewogICAgIGZy
aWVuZCBjbGFzcyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcjsgLy8gVXNlZCBieSBD
U1MgYW5pbWF0aW9ucy4gV2UgY2FuJ3QgYWxsb3cgdGhlbSB0byBhbmltYXRlIGJhc2VkIG9mZiB2
aXNpdGVkIGNvbG9ycy4KICAgICBmcmllbmQgY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2U7IC8vIEZJ
WE1FOiBOZWVkcyB0byBhbHRlciB0aGUgdmlzaXRlZCBzdGF0ZSBieSBoYW5kLiBTaG91bGQgY2xl
YW4gdGhlIFNWRyBjb2RlIHVwIGFuZCBtb3ZlIGl0IGludG8gUmVuZGVyU3R5bGUgcGVyaGFwcy4K
ICAgICBmcmllbmQgY2xhc3MgUmVuZGVyVHJlZUFzVGV4dDsgLy8gRklYTUU6IE9ubHkgbmVlZGVk
IHNvIHRoZSByZW5kZXIgdHJlZSBjYW4ga2VlcCBseWluZyBhbmQgZHVtcCB0aGUgd3JvbmcgY29s
b3JzLiAgUmViYXNlbGluaW5nIHdvdWxkIGFsbG93IHRoaXMgdG8gYmUgeWFua2VkLgorICAgIGZy
aWVuZCBjbGFzcyBSZXNvbHZlU3RhdGU7IC8vIFNldHMgbWVtYmVycyBkaXJlY3RseS4KICAgICBm
cmllbmQgY2xhc3MgU3R5bGVCdWlsZGVyOyAvLyBTZXRzIG1lbWJlcnMgZGlyZWN0bHkuCiAgICAg
ZnJpZW5kIGNsYXNzIFN0eWxlUmVzb2x2ZXI7IC8vIFNldHMgbWVtYmVycyBkaXJlY3RseS4KIHBy
b3RlY3RlZDoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185211</attachid>
            <date>2013-01-29 03:03:39 -0800</date>
            <delta_ts>2013-01-30 00:44:57 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-96421-20130129200025.patch</filename>
            <type>text/plain</type>
            <size>307997</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmYWU0ZDQxY2UyNjI1YTE0ZmIyMGJkYjkwODY2ZTAwZmRlZTM0OTA1Li4z
ODRkZTEzOTNjYTU3NTE1YzRjNmQ5NzgyYjMxMjk3MWRkYjMwYTNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjM1IEBACisyMDEzLTAxLTI5ICBUYWthc2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xl
LmNvbT4KKworICAgICAgICBTcGxpdCBwZXItcmVzb2x2ZSBsb2dpYyBvdXQgZnJvbSBTdHlsZVJl
c29sdmVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTY0MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bXBsZW1lbnRlZCBjbGFzcyBSZXNvbHZlU3RhdGUgYW5kIG1vdmVkIGFsbCBtZW1iZXIgdmFyaWFi
bGVzCisgICAgICAgIHVzZWQgb25seSBmb3IgcGVyLXJlc29sdmUgbG9naWMuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLCBiZWNhdXNlIGp1c3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBjc3Mv
QmFzaWNTaGFwZUZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9MZW5n
dGgpOgorICAgICAgICAoV2ViQ29yZTo6YmFzaWNTaGFwZUZvclZhbHVlKToKKyAgICAgICAgKiBj
c3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIFJl
cGxhY2VkIFN0eWxlUmVzb2x2ZXIgd2l0aCBTdHlsZVJlc29sdmVyU3RhdGUuCisgICAgICAgICog
Y3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3JhZGllbnRW
YWx1ZTo6Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQpOgorICAgICAgICAqIGNzcy9DU1NHcmFk
aWVudFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENTU0dyYWRpZW50VmFs
dWUpOgorICAgICAgICAqIGNzcy9DU1NUb1N0eWxlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1RvU3R5bGVNYXA6OnN0eWxlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTVG9TdHlsZU1hcDo6cm9vdEVsZW1lbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NUb1N0eWxlTWFwOjp1c2VTVkdab29tUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9TdHlsZU1hcDo6c3R5bGVJbWFnZSk6CisgICAgICAgIFJlcGxhY2VkIFN0eWxlUmVzb2x2ZXIg
d2l0aCBTdHlsZVJlc29sdmVyU3RhdGUuCisgICAgICAgICogY3NzL0NTU1RvU3R5bGVNYXAuaDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ1NTVG9TdHlsZU1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpDU1NUb1N0eWxlTWFwKToKKyAgICAgICAgVXNlIFN0eWxl
UmVzb2x2ZXJTdGF0ZSB0byBvYnRhaW4gc3R5bGUsIHJvb3RFbGVtZW50U3R5bGUgYW5kIHNvIG9u
CisgICAgICAgIGluc3RlYWQgb2YgU3R5bGVSZXNvbHZlci4KKyAgICAgICAgKiBjc3MvU1ZHQ1NT
U3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBs
eVNWR1Byb3BlcnR5KToKKyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlFeHBhbmRpbmc6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlFeHBhbmRpbmc6OmFwcGx5SW5pdGlhbFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlFeHBhbmRpbmc6OmFwcGx5VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlOjphcHBseUluaGVy
aXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U6OmFw
cGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEZWZhdWx0
QmFzZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGVmYXVs
dDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5TnVtYmVyOjph
cHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlTdHlsZUltYWdlOjph
cHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBdXRvOjphcHBseUlu
aGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QXV0bzo6YXBwbHlJ
bml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUF1dG86OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNsaXA6OmNvbnZlcnRUb0xl
bmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q2xpcDo6YXBwbHlJbmhlcml0
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNsaXA6OmFwcGx5SW5pdGlh
bFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwOjphcHBseVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDb2xvcjo6YXBwbHlJbmhlcml0VmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvbG9yOjphcHBseUluaXRpYWxW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q29sb3I6OmFwcGx5VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvbG9yOjphcHBseUNvbG9yVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURpcmVjdGlvbjo6YXBwbHlWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5TGVuZ3RoOjphcHBseVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlTdHJpbmc6OmFwcGx5VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUJvcmRlclJhZGl1czo6YXBwbHlWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RmlsbExheWVyOjphcHBseUluaGVyaXRWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RmlsbExheWVyOjphcHBseUluaXRpYWxW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RmlsbExheWVyOjphcHBseVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDb21wdXRlTGVuZ3RoOjphcHBs
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250OjphcHBseUluaGVy
aXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udDo6YXBwbHlJbml0
aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnQ6OmFwcGx5VmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseUluaGVy
aXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFNpemU6OmFwcGx5
SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250U2l6ZTo6
YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFdlaWdodDo6
YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFZhcmlhbnRM
aWdhdHVyZXM6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJv
cGVydHlGb250VmFyaWFudExpZ2F0dXJlczo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzOjphcHBseVZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZTo6YXBwbHlWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjo6YXBw
bHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUJvcmRlcklt
YWdlTW9kaWZpZXI6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZTo6YXBwbHlWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291bnRlcjo6ZW1wdHlGdW5jdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291bnRlcjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvdW50ZXI6OmFwcGx5VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUN1cnNvcjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUN1cnNvcjo6YXBwbHlJbml0aWFsVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUN1cnNvcjo6YXBwbHlWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5VGV4dEFsaWduOjphcHBseVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RGVjb3JhdGlvbjo6YXBwbHlWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5TGluZUhlaWdodDo6YXBwbHlWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5UGFnZVNpemU6OmFwcGx5SW5oZXJpdFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlQYWdlU2l6ZTo6YXBwbHlJbml0aWFs
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVBhZ2VTaXplOjphcHBseVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RW1waGFzaXNTdHlsZTo6
YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRF
bXBoYXNpc1N0eWxlOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5VGV4dEVtcGhhc2lzU3R5bGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjo6bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlBbmltYXRpb246OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlBbmltYXRpb246OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlBbmltYXRpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6YXBwbHlJbml0aWFsVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6YXBwbHlW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5UmVzaXplOjphcHBseVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlWZXJ0aWNhbEFsaWduOjphcHBseVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBc3BlY3RSYXRpbzo6YXBwbHlJ
bmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlv
OjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QXNw
ZWN0UmF0aW86OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVpv
b206OnJlc2V0RWZmZWN0aXZlWm9vbSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
Wm9vbTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eVpvb206OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlab29tOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEaXNw
bGF5Ojppc1ZhbGlkRGlzcGxheVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlEaXNwbGF5OjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5RGlzcGxheTo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eURpc3BsYXk6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUNsaXBQYXRoOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJv
cGVydHlFeGNsdXNpb25TaGFwZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5SW1hZ2VSZXNvbHV0aW9uOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5SW1hZ2VSZXNvbHV0aW9uOjphcHBseUluaXRpYWxWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5SW1hZ2VSZXNvbHV0aW9uOjphcHBseVZh
bHVlKToKKyAgICAgICAgUmVwbGFjZWQgU3R5bGVSZXNvbHZlciB3aXRoIFN0eWxlUmVzb2x2ZXJT
dGF0ZS4KKyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFByb3BlcnR5SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eUhh
bmRsZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5SGFu
ZGxlcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlIYW5k
bGVyOjphcHBseVZhbHVlKToKKyAgICAgICAgUmVwbGFjZWQgU3R5bGVSZXNvbHZlciB3aXRoIFN0
eWxlUmVzb2x2ZXJTdGF0ZS4KKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVz
b2x2ZXIpOgorICAgICAgICBTaW5jZSBTdHlsZVJlc29sdmVyU3RhdGUgcHJvdmlkZXMgYWxsIGlu
Zm9ybWF0aW9uLCBubyBuZWVkIHRvIGhhdmUKKyAgICAgICAgYW55IGluc3RhbmNlIG9mIENTU1Rv
U3R5bGVNYXAuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hp
bmdSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hp
bmdSdWxlc0ZvclJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzb3J0
QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6bWF0Y2hVQVJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNv
bGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzb3J0TWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
Om1hdGNoQWxsUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6aW5pdEVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6aW5pdEZvclN0eWxlUmVz
b2x2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5k
aWRhdGVNYXRjaGVzUnVsZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpj
YW5TaGFyZVN0eWxlV2l0aENvbnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6ZmluZFNpYmxpbmdGb3JTdHls
ZVNoYXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVk
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpkZWZhdWx0U3R5bGVGb3JFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnJ1bGVNYXRjaGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9uU2VsZWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6aXNMZWZ0UGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnR5V2l0aFZhbHVlQ2hlY2tpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlGb250UHJvcGVydHlUb1N0eWxlKToKKyAgICAgICAgQWRk
ZWQgYSBuZXcgaW50ZXJmYWNlIHRvIHVwZGF0ZSBhIGdpdmVuIHJlbmRlciBzdHlsZSBieSB1c2lu
ZyBhIGdpdmVuCisgICAgICAgIFN0eWxlUHJvcGVydHlTZXQuIFRoaXMgaXMgbmVlZGVkIGJ5IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUdyaWRUcmFja0JyZWFkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR3JpZFRyYWNrTWlu
TWF4KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0dyb3VwKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0
eWxlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5k
aW5nRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRl
ZE9yUGVuZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpz
ZXRPclBlbmRpbmdGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6Y2hlY2tGb3Jab29tQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnNldEZvbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OnN0eWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNh
Y2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcik6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRl
ckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmls
dGVyT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZp
bHRlck9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBl
bmRpbmdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGlu
Z0ltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1Jl
c291cmNlcyk6CisgICAgICAgIEFkZGVkIG9uZSBtb3JlIHBhcmFtZXRlciwgU3R5bGVSZXNvbHZl
clN0YXRlJiBzdGF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnJlcG9ydE1l
bW9yeVVzYWdlKToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoU3R5
bGVSZXNvbHZlclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXJTdGF0ZTo6
U3R5bGVSZXNvbHZlclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXJTdGF0
ZTo6c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlclN0YXRlOjpwYXJlbnRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyU3RhdGU6OnJvb3RFbGVtZW50
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlclN0YXRlOjplbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXJTdGF0ZTo6ZG9jdW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlclN0YXRlOjpmb250RGVzY3JpcHRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlclN0YXRlOjpwYXJlbnRGb250RGVzY3JpcHRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlclN0YXRlOjpzZXRGb250RGVzY3JpcHRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlclN0YXRlOjpzZXRab29tKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXJTdGF0ZTo6c2V0RWZmZWN0aXZlWm9vbSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyU3RhdGU6OnNldFRleHRTaXplQWRqdXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXJTdGF0ZTo6c2V0V3JpdGluZ01vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlclN0YXRlOjpzZXRUZXh0T3JpZW50YXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlclN0YXRlOjpoYXNQYXJlbnROb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXJTdGF0ZTo6dXNlU1ZHWm9vbVJ1bGVzKToKKyAg
ICAgICAgVGhlc2UgbWV0aG9kcyBhcmUgbW92ZWQgZnJvbSBTdHlsZVJlc29sdmVyLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChTdHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmFkZE1hdGNoZWRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OmlzUmlnaHRQYWdlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpzZXRGb250KToKKyAgICAgICAgTW9kaWZpZWQgdG8gdXNlIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5Rm9udFByb3BlcnR5VG9TdHlsZS4KKwogMjAxMy0wMS0yOCAgQmVuamFtaW4gUG91bGFp
biAgPGJlbmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgU3RyaW5nIGNvbnN0cnVjdGVkIGZy
b20gTGl0ZXJhbHMgc2hvdWxkIGJlIG5vbi1lbXB0eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2lj
U2hhcGVGdW5jdGlvbnMuY3BwCmluZGV4IDNhOGY3OTUzYjZmOTZiMDEyZjg0MzIzN2EyZTEyYTBm
ZGY0Y2IxMjEuLjgxZDA0ZDE4MWJmNTgxNTE2YTZjZWNiODEzODkzZmY2NmM3MjA2MzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25zLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5jcHAKQEAgLTEwMCwxMiArMTAw
LDEyIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlRm9yQmFzaWNTaGFwZShjb25zdCBCYXNp
Y1NoYXBlKiBiYXNpY1NoYXBlKQogICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZTxQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+ID4oYmFzaWNTaGFwZVZhbHVlLnJlbGVhc2UoKSk7
CiB9CiAKLXN0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKGNvbnN0IFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkKK3N0YXRpYyBMZW5ndGgg
Y29udmVydFRvTGVuZ3RoKGNvbnN0IFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIENTU1ByaW1p
dGl2ZVZhbHVlKiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gdmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxG
aXhlZEludGVnZXJDb252ZXJzaW9uIHwgRml4ZWRGbG9hdENvbnZlcnNpb24gfCBQZXJjZW50Q29u
dmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICByZXR1cm4gdmFsdWUtPmNvbnZlcnRUb0xl
bmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgRml4ZWRGbG9hdENvbnZlcnNpb24gfCBQZXJj
ZW50Q29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0YXRlLnN0eWxl
KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpKTsKIH0KIAotUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUoY29u
c3QgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTQmFzaWNTaGFwZSogYmFz
aWNTaGFwZVZhbHVlKQorUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUo
Y29uc3QgU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSwgY29uc3QgQ1NTQmFzaWNTaGFwZSogYmFz
aWNTaGFwZVZhbHVlKQogewogICAgIFJlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlOwogCkBA
IC0xMTQsMTQgKzExNCwxNCBAQCBQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JW
YWx1ZShjb25zdCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBjbwogICAgICAgICBjb25z
dCBDU1NCYXNpY1NoYXBlUmVjdGFuZ2xlKiByZWN0VmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBD
U1NCYXNpY1NoYXBlUmVjdGFuZ2xlICo+KGJhc2ljU2hhcGVWYWx1ZSk7CiAgICAgICAgIFJlZlB0
cjxCYXNpY1NoYXBlUmVjdGFuZ2xlPiByZWN0ID0gQmFzaWNTaGFwZVJlY3RhbmdsZTo6Y3JlYXRl
KCk7CiAKLSAgICAgICAgcmVjdC0+c2V0WChjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwg
cmVjdFZhbHVlLT54KCkpKTsKLSAgICAgICAgcmVjdC0+c2V0WShjb252ZXJ0VG9MZW5ndGgoc3R5
bGVSZXNvbHZlciwgcmVjdFZhbHVlLT55KCkpKTsKLSAgICAgICAgcmVjdC0+c2V0V2lkdGgoY29u
dmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+d2lkdGgoKSkpOwotICAgICAg
ICByZWN0LT5zZXRIZWlnaHQoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1
ZS0+aGVpZ2h0KCkpKTsKKyAgICAgICAgcmVjdC0+c2V0WChjb252ZXJ0VG9MZW5ndGgoc3RhdGUs
IHJlY3RWYWx1ZS0+eCgpKSk7CisgICAgICAgIHJlY3QtPnNldFkoY29udmVydFRvTGVuZ3RoKHN0
YXRlLCByZWN0VmFsdWUtPnkoKSkpOworICAgICAgICByZWN0LT5zZXRXaWR0aChjb252ZXJ0VG9M
ZW5ndGgoc3RhdGUsIHJlY3RWYWx1ZS0+d2lkdGgoKSkpOworICAgICAgICByZWN0LT5zZXRIZWln
aHQoY29udmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0VmFsdWUtPmhlaWdodCgpKSk7CiAgICAgICAg
IGlmIChyZWN0VmFsdWUtPnJhZGl1c1goKSkgewotICAgICAgICAgICAgcmVjdC0+c2V0Q29ybmVy
UmFkaXVzWChjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdFZhbHVlLT5yYWRpdXNY
KCkpKTsKKyAgICAgICAgICAgIHJlY3QtPnNldENvcm5lclJhZGl1c1goY29udmVydFRvTGVuZ3Ro
KHN0YXRlLCByZWN0VmFsdWUtPnJhZGl1c1goKSkpOwogICAgICAgICAgICAgaWYgKHJlY3RWYWx1
ZS0+cmFkaXVzWSgpKQotICAgICAgICAgICAgICAgIHJlY3QtPnNldENvcm5lclJhZGl1c1koY29u
dmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+cmFkaXVzWSgpKSk7CisgICAg
ICAgICAgICAgICAgcmVjdC0+c2V0Q29ybmVyUmFkaXVzWShjb252ZXJ0VG9MZW5ndGgoc3RhdGUs
IHJlY3RWYWx1ZS0+cmFkaXVzWSgpKSk7CiAgICAgICAgIH0KICAgICAgICAgYmFzaWNTaGFwZSA9
IHJlY3QucmVsZWFzZSgpOwogICAgICAgICBicmVhazsKQEAgLTEzMCw5ICsxMzAsOSBAQCBQYXNz
UmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBjbwogICAgICAgICBjb25zdCBDU1NCYXNpY1NoYXBlQ2lyY2xlKiBj
aXJjbGVWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IENTU0Jhc2ljU2hhcGVDaXJjbGUgKj4oYmFz
aWNTaGFwZVZhbHVlKTsKICAgICAgICAgUmVmUHRyPEJhc2ljU2hhcGVDaXJjbGU+IGNpcmNsZSA9
IEJhc2ljU2hhcGVDaXJjbGU6OmNyZWF0ZSgpOwogCi0gICAgICAgIGNpcmNsZS0+c2V0Q2VudGVy
WChjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgY2lyY2xlVmFsdWUtPmNlbnRlclgoKSkp
OwotICAgICAgICBjaXJjbGUtPnNldENlbnRlclkoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2
ZXIsIGNpcmNsZVZhbHVlLT5jZW50ZXJZKCkpKTsKLSAgICAgICAgY2lyY2xlLT5zZXRSYWRpdXMo
Y29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIGNpcmNsZVZhbHVlLT5yYWRpdXMoKSkpOwor
ICAgICAgICBjaXJjbGUtPnNldENlbnRlclgoY29udmVydFRvTGVuZ3RoKHN0YXRlLCBjaXJjbGVW
YWx1ZS0+Y2VudGVyWCgpKSk7CisgICAgICAgIGNpcmNsZS0+c2V0Q2VudGVyWShjb252ZXJ0VG9M
ZW5ndGgoc3RhdGUsIGNpcmNsZVZhbHVlLT5jZW50ZXJZKCkpKTsKKyAgICAgICAgY2lyY2xlLT5z
ZXRSYWRpdXMoY29udmVydFRvTGVuZ3RoKHN0YXRlLCBjaXJjbGVWYWx1ZS0+cmFkaXVzKCkpKTsK
IAogICAgICAgICBiYXNpY1NoYXBlID0gY2lyY2xlLnJlbGVhc2UoKTsKICAgICAgICAgYnJlYWs7
CkBAIC0xNDEsMTAgKzE0MSwxMCBAQCBQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVG
b3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBjbwogICAgICAgICBj
b25zdCBDU1NCYXNpY1NoYXBlRWxsaXBzZSogZWxsaXBzZVZhbHVlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQ1NTQmFzaWNTaGFwZUVsbGlwc2UgKj4oYmFzaWNTaGFwZVZhbHVlKTsKICAgICAgICAgUmVm
UHRyPEJhc2ljU2hhcGVFbGxpcHNlPiBlbGxpcHNlID0gQmFzaWNTaGFwZUVsbGlwc2U6OmNyZWF0
ZSgpOwogCi0gICAgICAgIGVsbGlwc2UtPnNldENlbnRlclgoY29udmVydFRvTGVuZ3RoKHN0eWxl
UmVzb2x2ZXIsIGVsbGlwc2VWYWx1ZS0+Y2VudGVyWCgpKSk7Ci0gICAgICAgIGVsbGlwc2UtPnNl
dENlbnRlclkoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIGVsbGlwc2VWYWx1ZS0+Y2Vu
dGVyWSgpKSk7Ci0gICAgICAgIGVsbGlwc2UtPnNldFJhZGl1c1goY29udmVydFRvTGVuZ3RoKHN0
eWxlUmVzb2x2ZXIsIGVsbGlwc2VWYWx1ZS0+cmFkaXVzWCgpKSk7Ci0gICAgICAgIGVsbGlwc2Ut
PnNldFJhZGl1c1koY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIGVsbGlwc2VWYWx1ZS0+
cmFkaXVzWSgpKSk7CisgICAgICAgIGVsbGlwc2UtPnNldENlbnRlclgoY29udmVydFRvTGVuZ3Ro
KHN0YXRlLCBlbGxpcHNlVmFsdWUtPmNlbnRlclgoKSkpOworICAgICAgICBlbGxpcHNlLT5zZXRD
ZW50ZXJZKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgZWxsaXBzZVZhbHVlLT5jZW50ZXJZKCkpKTsK
KyAgICAgICAgZWxsaXBzZS0+c2V0UmFkaXVzWChjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIGVsbGlw
c2VWYWx1ZS0+cmFkaXVzWCgpKSk7CisgICAgICAgIGVsbGlwc2UtPnNldFJhZGl1c1koY29udmVy
dFRvTGVuZ3RoKHN0YXRlLCBlbGxpcHNlVmFsdWUtPnJhZGl1c1koKSkpOwogCiAgICAgICAgIGJh
c2ljU2hhcGUgPSBlbGxpcHNlLnJlbGVhc2UoKTsKICAgICAgICAgYnJlYWs7CkBAIC0xNTYsNyAr
MTU2LDcgQEAgUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUoY29uc3Qg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgY28KICAgICAgICAgcG9seWdvbi0+c2V0V2lu
ZFJ1bGUocG9seWdvblZhbHVlLT53aW5kUnVsZSgpKTsKICAgICAgICAgY29uc3QgVmVjdG9yPFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gPiYgdmFsdWVzID0gcG9seWdvblZhbHVlLT52YWx1ZXMo
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7IGkgKz0g
MikKLSAgICAgICAgICAgIHBvbHlnb24tPmFwcGVuZFBvaW50KGNvbnZlcnRUb0xlbmd0aChzdHls
ZVJlc29sdmVyLCB2YWx1ZXMuYXQoaSkuZ2V0KCkpLCBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNv
bHZlciwgdmFsdWVzLmF0KGkgKyAxKS5nZXQoKSkpOworICAgICAgICAgICAgcG9seWdvbi0+YXBw
ZW5kUG9pbnQoY29udmVydFRvTGVuZ3RoKHN0YXRlLCB2YWx1ZXMuYXQoaSkuZ2V0KCkpLCBjb252
ZXJ0VG9MZW5ndGgoc3RhdGUsIHZhbHVlcy5hdChpICsgMSkuZ2V0KCkpKTsKIAogICAgICAgICBi
YXNpY1NoYXBlID0gcG9seWdvbi5yZWxlYXNlKCk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25zLmgKaW5kZXggZDM2MDdlOTA5OTI5YzM0MWIwYzA2
OWQzZTVjZWI2MWYxM2YxMTcxOS4uOTRlYjJlZTRjZmM2ZTY1N2U4OTlkNjA1NDM5ZDg4NTA5YjY4
MWNiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5oCkBAIC0zNywx
MCArMzcsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQmFzaWNTaGFwZTsKIGNsYXNz
IENTU0Jhc2ljU2hhcGU7CiBjbGFzcyBDU1NWYWx1ZTsKLWNsYXNzIFN0eWxlUmVzb2x2ZXI7Citj
bGFzcyBTdHlsZVJlc29sdmVyU3RhdGU7CiAKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlRm9y
QmFzaWNTaGFwZShjb25zdCBCYXNpY1NoYXBlKik7Ci1QYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJh
c2ljU2hhcGVGb3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyKiwgY29uc3QgQ1NTQmFzaWNTaGFw
ZSopOworUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUoY29uc3QgU3R5
bGVSZXNvbHZlclN0YXRlJiwgY29uc3QgQ1NTQmFzaWNTaGFwZSopOwogCiB9CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCBmMTUxOGQ4ZGFjNzQ4MGM0
ZTIzOTdlNTJkZmE5NDJiY2U4ZGM2YTgxLi5iNWU1MThiZDBhMTg5ZmZjY2U2MTBjNWQzZThkYjQw
ZDYwY2E5YjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCkBAIC0x
MTUsMTEgKzExNSwxMSBAQCBzdHJ1Y3QgR3JhZGllbnRTdG9wIHsKICAgICB7IH0KIH07CiAKLVBh
c3NSZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6Z3JhZGllbnRXaXRo
U3R5bGVzUmVzb2x2ZWQoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKK1Bhc3NSZWZQdHI8
Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6Z3JhZGllbnRXaXRoU3R5bGVzUmVz
b2x2ZWQoY29uc3QgU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSkKIHsKICAgICBib29sIGRlcml2
ZWQgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdG9wcy5zaXplKCk7
IGkrKykKLSAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
SXNEZXJpdmVkRnJvbUVsZW1lbnQobV9zdG9wc1tpXS5tX2NvbG9yLmdldCgpKSkgeworICAgICAg
ICBpZiAoU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWVJc0Rlcml2ZWRGcm9t
RWxlbWVudChtX3N0b3BzW2ldLm1fY29sb3IuZ2V0KCkpKSB7CiAgICAgICAgICAgICBtX3N0b3Bz
W2ldLm1fY29sb3JJc0Rlcml2ZWRGcm9tRWxlbWVudCA9IHRydWU7CiAgICAgICAgICAgICBkZXJp
dmVkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM4LDcgKzEzOCw3IEBAIFBhc3NS
ZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6Z3JhZGllbnRXaXRoU3R5
bGVzUmVzb2x2ZWQoU3R5bGVSCiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlc3VsdC0+bV9zdG9wcy5zaXplKCk7IGkrKykKLSAgICAgICAgcmVzdWx0LT5tX3N0b3BzW2ld
Lm1fcmVzb2x2ZWRDb2xvciA9IHN0eWxlUmVzb2x2ZXItPmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
KHJlc3VsdC0+bV9zdG9wc1tpXS5tX2NvbG9yLmdldCgpKTsKKyAgICAgICAgcmVzdWx0LT5tX3N0
b3BzW2ldLm1fcmVzb2x2ZWRDb2xvciA9IFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2
ZVZhbHVlKHN0YXRlLCByZXN1bHQtPm1fc3RvcHNbaV0ubV9jb2xvci5nZXQoKSk7CiAKICAgICBy
ZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NHcmFkaWVudFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1
ZS5oCmluZGV4IDZmMDA1MzU5MDdlMTU3NzlhMDgwMjcyYzg4NmZkNmI4MDk3YzgwMGQuLjE2NjNm
NGUwYzE4NWY2ZWM3MjA0NmRlYzMyYzhmNzg3OGIwZjJhMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0dyYWRpZW50VmFsdWUuaApAQCAtMzUsNiArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBHcmFkaWVudDsKK2NsYXNzIFN0eWxlUmVzb2x2ZXJT
dGF0ZTsKIAogZW51bSBDU1NHcmFkaWVudFR5cGUgewogICAgIENTU0RlcHJlY2F0ZWRMaW5lYXJH
cmFkaWVudCwKQEAgLTg0LDcgKzg1LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzQWxwaGEoY29u
c3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAKICAgICB2b2lkIGxvYWRTdWJpbWFnZXMoQ2FjaGVk
UmVzb3VyY2VMb2FkZXIqKSB7IH0KLSAgICBQYXNzUmVmUHRyPENTU0dyYWRpZW50VmFsdWU+IGdy
YWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlUmVzb2x2ZXIqKTsKKyAgICBQYXNzUmVmUHRy
PENTU0dyYWRpZW50VmFsdWU+IGdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKGNvbnN0IFN0eWxl
UmVzb2x2ZXJTdGF0ZSYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgQ1NTR3JhZGllbnRWYWx1ZShDbGFz
c1R5cGUgY2xhc3NUeXBlLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXQsIENTU0dyYWRpZW50VHlw
ZSBncmFkaWVudFR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHls
ZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKaW5kZXggMDI0
NGQ4YTNhZDU3OGY2ZTEzZjZjZDFkYmU2YThkMjQzZWQ4MDdiMC4uMGNmN2Q0NjgzYzAxZjA0NDZk
YWUzYzgxMmE5NWVkZjBlZGNjMzVhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1RvU3R5bGVNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNw
cApAQCAtNDMsMjIgKzQzLDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyU3R5bGUq
IENTU1RvU3R5bGVNYXA6OnN0eWxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+
c3R5bGUoKTsKKyAgICByZXR1cm4gbV9zdHlsZVJlc29sdmVyU3RhdGUuc3R5bGUoKTsKIH0KLSAg
ICAKKwogUmVuZGVyU3R5bGUqIENTU1RvU3R5bGVNYXA6OnJvb3RFbGVtZW50U3R5bGUoKSBjb25z
dAogewotICAgIHJldHVybiBtX3Jlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCk7CisgICAgcmV0
dXJuIG1fc3R5bGVSZXNvbHZlclN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKTsKIH0KIAogYm9vbCBD
U1NUb1N0eWxlTWFwOjp1c2VTVkdab29tUnVsZXMoKSBjb25zdAogewotICAgIHJldHVybiBtX3Jl
c29sdmVyLT51c2VTVkdab29tUnVsZXMoKTsKKyAgICByZXR1cm4gbV9zdHlsZVJlc29sdmVyU3Rh
dGUudXNlU1ZHWm9vbVJ1bGVzKCk7CiB9Ci0gICAgCisKIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4g
Q1NTVG9TdHlsZU1hcDo6c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQsIENTU1Zh
bHVlKiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+c3R5bGVJbWFnZShwcm9wZXJ0
eUlkLCB2YWx1ZSk7CisgICAgcmV0dXJuIFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UobV9zdHls
ZVJlc29sdmVyU3RhdGUsIHByb3BlcnR5SWQsIHZhbHVlKTsKIH0KIAogdm9pZCBDU1NUb1N0eWxl
TWFwOjptYXBGaWxsQXR0YWNobWVudChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBD
U1NWYWx1ZSogdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHls
ZU1hcC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuaAppbmRleCA2YmFiNDBi
ZmNkNzdlMTI1YWIwOGYwMDhmMTBlN2EzZTY4Mjc5MTRlLi43MjE5MTMwNmZhYjAxMmI1MjFjYjMw
NWY0ZGI3NmY0NGZlNmU0Nzk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9T
dHlsZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgKQEAgLTI3
LDIwICsyNywxOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbGxMYXllcjsK
LWNsYXNzIENTU1ZhbHVlOwogY2xhc3MgQW5pbWF0aW9uOworY2xhc3MgQ1NTVmFsdWU7CitjbGFz
cyBGaWxsTGF5ZXI7CitjbGFzcyBOaW5lUGllY2VJbWFnZTsKIGNsYXNzIFJlbmRlclN0eWxlOwor
Y2xhc3MgU3R5bGVSZXNvbHZlclN0YXRlOwogY2xhc3MgU3R5bGVJbWFnZTsKLWNsYXNzIFN0eWxl
UmVzb2x2ZXI7Ci1jbGFzcyBOaW5lUGllY2VJbWFnZTsKIAogY2xhc3MgQ1NTVG9TdHlsZU1hcCB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ1NTVG9TdHlsZU1hcCk7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci0KIHB1YmxpYzoKLSAgICBDU1NUb1N0eWxlTWFwKFN0eWxlUmVzb2x2
ZXIqIHJlc29sdmVyKSA6IG1fcmVzb2x2ZXIocmVzb2x2ZXIpIHsgfQorICAgIENTU1RvU3R5bGVN
YXAoU3R5bGVSZXNvbHZlclN0YXRlJiBzdHlsZVJlc29sdmVyU3RhdGUpIDogbV9zdHlsZVJlc29s
dmVyU3RhdGUoc3R5bGVSZXNvbHZlclN0YXRlKSB7IH0KIAogICAgIHZvaWQgbWFwRmlsbEF0dGFj
aG1lbnQoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKICAgICB2b2lkIG1h
cEZpbGxDbGlwKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CkBAIC02OSwx
OSArNjgsMTIgQEAgcHVibGljOgogICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQoQ1NT
VmFsdWUqLCBOaW5lUGllY2VJbWFnZSYpOwogCiBwcml2YXRlOgotICAgIC8vIEZJWE1FOiBUaGVz
ZSBhY2Nlc3NvcnMgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgUmVzb2x2ZVN0YXRlIG9iamVjdAot
ICAgIC8vIHNpbWlsYXIgdG8gaG93IFBhaW50SW5mby9MYXlvdXRTdGF0ZSBjYWNoZSB2YWx1ZXMg
bmVlZGVkIGZvcgotICAgIC8vIHRoZSBjdXJyZW50IHBhaW50L2xheW91dC4KICAgICBSZW5kZXJT
dHlsZSogc3R5bGUoKSBjb25zdDsKICAgICBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgp
IGNvbnN0OwogICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3Q7Ci0KLSAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgYmUgcGFydCBvZiBzb21lIHNvcnQgb2YgU3R5bGVJbWFnZUNhY2hlIG9i
amVjdCB3aGljaAotICAgIC8vIGlzIGhlbGQgYnkgdGhlIFN0eWxlUmVzb2x2ZXIsIGFuZCBsaWtl
bHkgcHJvdmlkZWQgdG8gdGhpcyBvYmplY3QKLSAgICAvLyBkdXJpbmcgdGhlIHJlc29sdmUuCiAg
ICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1Zh
bHVlKik7CiAKLSAgICBTdHlsZVJlc29sdmVyKiBtX3Jlc29sdmVyOworICAgIFN0eWxlUmVzb2x2
ZXJTdGF0ZSYgbV9zdHlsZVJlc29sdmVyU3RhdGU7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXggNjE0NWJiMWYxNjI1YjhmZTRkMTY3NjA3
YmJiYThiZmQ5YTFiMDExOS4uYTk1MzBmOTRjYmNmNWQ4OGViM2JlMjZkNTJiZWM4NmFiNjgzNmJh
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtNDks
NyArNDksNyBAQAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJ
bmhlcml0KSBcCiB7IFwKLSAgICBzdmdzdHlsZS0+c2V0IyNQcm9wKG1fcGFyZW50U3R5bGUtPnN2
Z1N0eWxlKCktPnByb3AoKSk7IFwKKyAgICBzdmdzdHlsZS0+c2V0IyNQcm9wKHN0YXRlLm1fcGFy
ZW50U3R5bGUtPnN2Z1N0eWxlKCktPnByb3AoKSk7IFwKICAgICByZXR1cm47IFwKIH0KIApAQCAt
MTAyLDE3ICsxMDIsMTcgQEAgc3RhdGljIENvbG9yIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUo
U1ZHQ29sb3IqIHN2Z0NvbG9yLCBjb25zdCBDb2xvciYgZmdDb2xvcikKICAgICByZXR1cm4gY29s
b3I7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJv
cGVydHkoY29uc3QgU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogewogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gMDsKICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFs
dWUoKSkKICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbHVlKTsKIAotICAgIFNWR1JlbmRlclN0eWxlKiBzdmdzdHlsZSA9IG1fc3R5bGUt
PmFjY2Vzc1NWR1N0eWxlKCk7CisgICAgU1ZHUmVuZGVyU3R5bGUqIHN2Z3N0eWxlID0gc3RhdGUu
bV9zdHlsZS0+YWNjZXNzU1ZHU3R5bGUoKTsKIAotICAgIGJvb2wgaXNJbmhlcml0ID0gbV9wYXJl
bnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7Ci0gICAgYm9vbCBpc0luaXRpYWwg
PSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAoIW1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJ
bmhlcml0ZWRWYWx1ZSgpKTsKKyAgICBib29sIGlzSW5oZXJpdCA9IHN0YXRlLm1fcGFyZW50Tm9k
ZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpOworICAgIGJvb2wgaXNJbml0aWFsID0gdmFs
dWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgKCFzdGF0ZS5tX3BhcmVudE5vZGUgJiYgdmFsdWUtPmlz
SW5oZXJpdGVkVmFsdWUoKSk7CiAKICAgICAvLyBXaGF0IGZvbGxvd3MgaXMgYSBsaXN0IHRoYXQg
bWFwcyB0aGUgQ1NTIHByb3BlcnRpZXMgaW50byB0aGVpcgogICAgIC8vIGNvcnJlc3BvbmRpbmcg
ZnJvbnQtZW5kIFJlbmRlclN0eWxlIHZhbHVlcy4gU2hvcnRoYW5kcyhlLmcuIGJvcmRlciwKQEAg
LTIyOSwzNCArMjI5LDM0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlGaWxsOgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1BhcmVudFN0eWxlID0gbV9wYXJlbnRT
dHlsZS0+c3ZnU3R5bGUoKTsKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50
KHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLT5maWxsUGFp
bnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50VXJpKCksIGFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAg
ICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQYXJlbnRTdHlsZSA9IHN0YXRl
Lm1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCk7CisgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dEZpbGxQYWludChzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHls
ZS0+ZmlsbFBhaW50Q29sb3IoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFVyaSgpLCBzdGF0
ZS5tX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSwgc3RhdGUubV9hcHBseVByb3BlcnR5VG9W
aXNpdGVkTGlua1N0eWxlKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUt
PnNldEZpbGxQYWludChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludFR5cGUoKSwgU1ZH
UmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRDb2xvcigpLCBTVkdSZW5kZXJTdHlsZTo6aW5p
dGlhbEZpbGxQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+
c2V0RmlsbFBhaW50KFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50VHlwZSgpLCBTVkdS
ZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludENvbG9yKCksIFNWR1JlbmRlclN0eWxlOjppbml0
aWFsRmlsbFBhaW50VXJpKCksIHN0YXRlLm1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlLCBz
dGF0ZS5tX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdQYWlu
dCgpKSB7CiAgICAgICAgICAgICAgICAgU1ZHUGFpbnQqIHN2Z1BhaW50ID0gc3RhdGljX2Nhc3Q8
U1ZHUGFpbnQqPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWlu
dChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFp
bnQsIG1fc3R5bGUtPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlUb1Jl
Z3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgICAg
ICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBj
b2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5tX3N0eWxlLT5jb2xvcigp
KSwgc3ZnUGFpbnQtPnVyaSgpLCBzdGF0ZS5tX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSwg
c3RhdGUubV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlT
dHJva2U6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAg
ICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBtX3BhcmVudFN0
eWxlLT5zdmdTdHlsZSgpOwotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWlu
dChzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLT5zdHJv
a2VQYWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludFVyaSgpLCBhcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgp
KTsKKyAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUg
PSBzdGF0ZS5tX3BhcmVudFN0eWxlLT5zdmdTdHlsZSgpOworICAgICAgICAgICAgICAgIHN2Z3N0
eWxlLT5zZXRTdHJva2VQYWludChzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRUeXBlKCksIHN2
Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQ
YWludFVyaSgpLCBzdGF0ZS5tX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSwgc3RhdGUubV9h
cHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAg
ICAgICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ry
b2tlUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRDb2xvcigp
LCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VXJpKCksIGFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAg
ICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChTVkdSZW5kZXJTdHlsZTo6aW5p
dGlhbFN0cm9rZVBhaW50VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50
Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFVyaSgpLCBzdGF0ZS5t
X2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSwgc3RhdGUubV9hcHBseVByb3BlcnR5VG9WaXNp
dGVkTGlua1N0eWxlKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkgewogICAgICAgICAgICAgICAgIFNW
R1BhaW50KiBzdmdQYWludCA9IHN0YXRpY19jYXN0PFNWR1BhaW50Kj4odmFsdWUpOwotICAgICAg
ICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCks
IGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIG1fc3R5bGUtPmNvbG9yKCkpLCBz
dmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRT
dHJva2VQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFs
dWUoc3ZnUGFpbnQsIHN0YXRlLm1fc3R5bGUtPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIHN0
YXRlLm1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlLCBzdGF0ZS5tX2FwcGx5UHJvcGVydHlU
b1Zpc2l0ZWRMaW5rU3R5bGUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTM2Myw3ICszNjMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZH
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAg
aWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAg
cyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdz
dHlsZS0+c2V0TWFya2VyU3RhcnRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRl
bnRpZmllckZyb21JUklTdHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAg
ICAgICBzdmdzdHlsZS0+c2V0TWFya2VyU3RhcnRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZy
YWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUubV9lbGVtZW50LT5kb2N1bWVu
dCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1By
b3BlcnR5TWFya2VyTWlkOgpAQCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAg
ICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAg
ICAgIHN2Z3N0eWxlLT5zZXRNYXJrZXJNaWRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdt
ZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVudCgpKSk7Cisg
ICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFya2VyTWlkUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNl
OjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLm1fZWxlbWVudC0+ZG9j
dW1lbnQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eU1hcmtlckVuZDoKQEAgLTM5MSw3ICszOTEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAg
ICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAg
ICAgICAgICBzdmdzdHlsZS0+c2V0TWFya2VyRW5kUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpm
cmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkp
OworICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hcmtlckVuZFJlc291cmNlKFNWR1VSSVJlZmVy
ZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5tX2VsZW1lbnQt
PmRvY3VtZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlTdHJva2VMaW5lY2FwOgpAQCAtNDI4LDcgKzQyOCw3IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VS
SSkKICAgICAgICAgICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7
CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWx0ZXJSZXNvdXJjZShTVkdVUklSZWZlcmVu
Y2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVu
dCgpKSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsdGVyUmVzb3VyY2UoU1ZHVVJJUmVm
ZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLm1fZWxlbWVu
dC0+ZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eU1hc2s6CkBAIC00NDIsNyArNDQyLDcgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICAgICAgICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAg
ICAgICAgICAgICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAg
ICAgICAgICAgc3Znc3R5bGUtPnNldE1hc2tlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJh
Z21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkpKTsK
KyAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXNrZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6
OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUubV9lbGVtZW50LT5kb2N1
bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5Q2xpcFBhdGg6CkBAIC00NTYsNyArNDU2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICAgICAgICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAg
ICAgICAgICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAg
ICAgICAgc3Znc3R5bGUtPnNldENsaXBwZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdt
ZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVudCgpKSk7Cisg
ICAgICAgICAgICBzdmdzdHlsZS0+c2V0Q2xpcHBlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6
ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5tX2VsZW1lbnQtPmRvY3Vt
ZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlUZXh0QW5jaG9yOgpAQCAtNDc3LDE0ICs0NzcsMTQgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICAgICAgewogICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoc3RvcENv
bG9yLCBTdG9wQ29sb3IpOwogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0g
ICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0b3BDb2xvcihjb2xvckZyb21TVkdDb2xvckNT
U1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBtX3N0eWxlLT5jb2xvcigpKSk7
CisgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0b3BDb2xvcihjb2xvckZyb21TVkdDb2xv
ckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5tX3N0eWxlLT5j
b2xvcigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlMaWdodGluZ0NvbG9yOgogICAgICAgICB7CiAgICAgICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChsaWdodGluZ0NvbG9yLCBMaWdodGluZ0NvbG9yKTsKICAgICAgICAg
ICAgIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRMaWdodGluZ0NvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZH
Q29sb3IqPih2YWx1ZSksIG1fc3R5bGUtPmNvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBzdmdz
dHlsZS0+c2V0TGlnaHRpbmdDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19j
YXN0PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5tX3N0eWxlLT5jb2xvcigpKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rmxvb2RPcGFj
aXR5OgpAQCAtNTA5LDcgKzUwOSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGZsb29kQ29sb3IsIEZsb29kQ29sb3Ip
OwogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAgICAgICAgICAg
c3Znc3R5bGUtPnNldEZsb29kQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNf
Y2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgbV9zdHlsZS0+Y29sb3IoKSkpOworICAgICAgICAgICAg
ICAgIHN2Z3N0eWxlLT5zZXRGbG9vZENvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3Rh
dGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSksIHN0YXRlLm1fc3R5bGUtPmNvbG9yKCkpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlw
aE9yaWVudGF0aW9uSG9yaXpvbnRhbDoKQEAgLTU0OSw3ICs1NDksNyBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTdmdT
aGFkb3c6IHsKICAgICAgICAgICAgIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHN2Z3N0eWxlLT5zZXRTaGFkb3coYWRvcHRQdHIobV9wYXJlbnRTdHlsZS0+c3ZnU3R5bGUo
KS0+c2hhZG93KCkgPyBuZXcgU2hhZG93RGF0YSgqbV9wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKS0+
c2hhZG93KCkpIDogMCkpOworICAgICAgICAgICAgICAgIHJldHVybiBzdmdzdHlsZS0+c2V0U2hh
ZG93KGFkb3B0UHRyKHN0YXRlLm1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRvdygpID8g
bmV3IFNoYWRvd0RhdGEoKnN0YXRlLm1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRvdygp
KSA6IDApKTsKICAgICAgICAgICAgIGlmIChpc0luaXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUpIC8v
IGluaXRpYWwgfCBub25lCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN2Z3N0eWxlLT5zZXRTaGFk
b3cobnVsbHB0cik7CiAKQEAgLTU2NCwxMiArNTY0LDEyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgICAgICBpZiAoIWZpcnN0VmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNo
YWRvd1ZhbHVlKj4oZmlyc3RWYWx1ZSk7Ci0gICAgICAgICAgICBJbnRQb2ludCBsb2NhdGlvbihp
dGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50
PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpKTsKLSAgICAgICAgICAgIGludCBibHVyID0g
aXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jv
b3RFbGVtZW50U3R5bGUpIDogMDsKKyAgICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uKGl0ZW0t
PngtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5tX3Jvb3RFbGVtZW50
U3R5bGUpLAorICAgICAgICAgICAgICAgIGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0
ZS5zdHlsZSgpLCBzdGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUpKTsKKyAgICAgICAgICAgIGludCBi
bHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5t
X3N0eWxlLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpIDogMDsKICAgICAgICAgICAgIENvbG9y
IGNvbG9yOwogICAgICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQotICAgICAgICAgICAgICAgIGNv
bG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoc3RhdGUsIGl0ZW0tPmNv
bG9yLmdldCgpKTsKIAogICAgICAgICAgICAgLy8gLXdlYmtpdC1zdmctc2hhZG93IGRvZXMgc2hv
dWxkIG5vdCBoYXZlIGEgc3ByZWFkIG9yIHN0eWxlCiAgICAgICAgICAgICBBU1NFUlQoIWl0ZW0t
PnNwcmVhZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCmluZGV4IDZkNzhjNjg0NDQy
Y2M3ZTI0ZWJmOWE2Mjg2N2JkODg5OWZlNzk4ZTYuLmJlMzEwNzBjYjUxYTBkMzQ1OTQ0MmQ5MmM2
OWRkYjVmNzViM2MzZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCkBAIC02MSw3
ICs2MSw3IEBAIGNsYXNzIEFwcGx5UHJvcGVydHlFeHBhbmRpbmcgewogcHVibGljOgogCiAgICAg
dGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQ+Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5
SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlKQogICAgIHsK
ICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5SW52YWxpZCkKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTY5LDIwICs2OSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFN0eWxlQnVpbGRl
ciYgdGFibGUgPSBTdHlsZUJ1aWxkZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpOwogICAgICAgICBj
b25zdCBQcm9wZXJ0eUhhbmRsZXImIGhhbmRsZXIgPSB0YWJsZS5wcm9wZXJ0eUhhbmRsZXIoaWQp
OwogICAgICAgICBpZiAoaGFuZGxlci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBoYW5kbGVyLmFw
cGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICAgICAg
aGFuZGxlci5hcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5o
ZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlclN0YXRlJiBz
dGF0ZSkKICAgICB7Ci0gICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPG9uZT4ocHJvcGVydHlJRCwg
c3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPHR3bz4ocHJvcGVydHlJ
RCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPHRocmVlPihwcm9w
ZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8Zm91cj4o
cHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPGZp
dmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBhcHBseUluaGVyaXRWYWx1
ZTxvbmU+KHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8dHdv
Pihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPHRocmVlPihw
cm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPGZvdXI+KHByb3Bl
cnR5SUQsIHN0YXRlKTsKKyAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8Zml2ZT4ocHJvcGVydHlJ
RCwgc3RhdGUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDxDU1NQcm9wZXJ0eUlEIGlkPgotICAg
IHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIGlubGluZSB2
b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlclN0YXRlJiBzdGF0ZSkKICAgICB7CiAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUlu
dmFsaWQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC05MCwyMCArOTAsMjAgQEAgcHVibGljOgog
ICAgICAgICBjb25zdCBTdHlsZUJ1aWxkZXImIHRhYmxlID0gU3R5bGVCdWlsZGVyOjpzaGFyZWRT
dHlsZUJ1aWxkZXIoKTsKICAgICAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0g
dGFibGUucHJvcGVydHlIYW5kbGVyKGlkKTsKICAgICAgICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgp
KQotICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHls
ZVJlc29sdmVyKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbml0aWFsVmFsdWUocHJvcGVy
dHlJRCwgc3RhdGUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikK
KyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBhcHBseUluaXRp
YWxWYWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUlu
aXRpYWxWYWx1ZTx0d28+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBs
eUluaXRpYWxWYWx1ZTx0aHJlZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAg
IGFwcGx5SW5pdGlhbFZhbHVlPGZvdXI+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAg
ICAgICBhcHBseUluaXRpYWxWYWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsK
KyAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAg
ICAgIGFwcGx5SW5pdGlhbFZhbHVlPHR3bz4ocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBh
cHBseUluaXRpYWxWYWx1ZTx0aHJlZT4ocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBhcHBs
eUluaXRpYWxWYWx1ZTxmb3VyPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5p
dGlhbFZhbHVlPGZpdmU+KHByb3BlcnR5SUQsIHN0YXRlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0
ZSA8Q1NTUHJvcGVydHlJRCBpZD4KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUludmFsaWQpCiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0xMTEsMTkgKzExMSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIGNv
bnN0IFN0eWxlQnVpbGRlciYgdGFibGUgPSBTdHlsZUJ1aWxkZXI6OnNoYXJlZFN0eWxlQnVpbGRl
cigpOwogICAgICAgICBjb25zdCBQcm9wZXJ0eUhhbmRsZXImIGhhbmRsZXIgPSB0YWJsZS5wcm9w
ZXJ0eUhhbmRsZXIoaWQpOwogICAgICAgICBpZiAoaGFuZGxlci5pc1ZhbGlkKCkpCi0gICAgICAg
ICAgICBoYW5kbGVyLmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUp
OworICAgICAgICAgICAgaGFuZGxlci5hcHBseVZhbHVlKHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1
ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
KyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAg
aWYgKCFleHBhbmRWYWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBhcHBseVZh
bHVlPG9uZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBhcHBs
eVZhbHVlPHR3bz4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBh
cHBseVZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7Ci0gICAg
ICAgIGFwcGx5VmFsdWU8Zm91cj4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwot
ICAgICAgICBhcHBseVZhbHVlPGZpdmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVl
KTsKKyAgICAgICAgYXBwbHlWYWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIGFwcGx5VmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAgICAg
ICBhcHBseVZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBh
cHBseVZhbHVlPGZvdXI+KHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGFwcGx5
VmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKICAgICB9CiAgICAgc3RhdGlj
IFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVy
KCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0K
IH07CkBAIC0xMzQsOSArMTM0LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVl
KFJlbmRlclN0eWxlKiBzdHlsZSwgU2V0dGVyVHlwZSB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJG
dW5jdGlvbikodmFsdWUpOyB9CiAgICAgc3RhdGljIEdldHRlclR5cGUgdmFsdWUoUmVuZGVyU3R5
bGUqIHN0eWxlKSB7IHJldHVybiAoc3R5bGUtPipnZXR0ZXJGdW5jdGlvbikoKTsgfQogICAgIHN0
YXRpYyBJbml0aWFsVHlwZSBpbml0aWFsKCkgeyByZXR1cm4gKCppbml0aWFsRnVuY3Rpb24pKCk7
IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKSB7IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCksIHZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsgfQotICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIpIHsgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgaW5pdGlhbCgpKTsg
fQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciosIENTU1ZhbHVlKikgeyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSkgeyBzZXRWYWx1ZShzdGF0ZS5z
dHlsZSgpLCB2YWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7IH0KKyAgICBzdGF0aWMgdm9pZCBh
cHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRl
KSB7IHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIGluaXRpYWwoKSk7IH0KKyAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYsIENTU1ZhbHVl
KikgeyB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1
cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVl
LCAmYXBwbHlWYWx1ZSk7IH0KIH07CiAKQEAgLTE0NCwxMCArMTQ0LDEwIEBAIHRlbXBsYXRlIDx0
eXBlbmFtZSBHZXR0ZXJUeXBlLCBHZXR0ZXJUeXBlIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0
aW9uKSgpIGNvbnN0CiBjbGFzcyBBcHBseVByb3BlcnR5RGVmYXVsdCB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBTZXR0ZXJUeXBlIHZhbHVl
KSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgc2V0VmFsdWUo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgKnN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsdWUpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksICpzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKSk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0
eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtMTYwLDE2ICsxNjAsMTYgQEAgdGVt
cGxhdGUgPHR5cGVuYW1lIE51bWJlclR5cGUsIE51bWJlclR5cGUgKFJlbmRlclN0eWxlOjoqZ2V0
dGVyRnVuY3Rpb24pKCkgY29uc3QKIGNsYXNzIEFwcGx5UHJvcGVydHlOdW1iZXIgewogcHVibGlj
OgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgTnVtYmVyVHlw
ZSB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBpZE1hcHNUb01pbnVzT25lKQotICAgICAgICAgICAgc2V0
VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgLTEpOworICAgICAgICAgICAgc2V0VmFsdWUo
c3RhdGUuc3R5bGUoKSwgLTEpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRWYWx1ZShz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWU8TnVtYmVyVHlw
ZT4oQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgICAgIHNldFZhbHVl
KHN0YXRlLnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZTxOdW1iZXJUeXBlPihDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlI
YW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTE4MSw3ICsxODEsNyBAQCBwdWJsaWM6
CiB0ZW1wbGF0ZSA8U3R5bGVJbWFnZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFBhc3NSZWZQdHI8U3R5
bGVJbWFnZT4pLCBTdHlsZUltYWdlKiAoKmluaXRpYWxGdW5jdGlvbikoKSwgQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eT4KIGNsYXNzIEFwcGx5UHJvcGVydHlTdHlsZUltYWdlIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
KnNldHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKHByb3BlcnR5LCB2YWx1
ZSkpOyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpIHsgKHN0YXRlLnN0eWxlKCktPipz
ZXR0ZXJGdW5jdGlvbikoU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShzdGF0ZSwgcHJvcGVydHks
IHZhbHVlKSk7IH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQog
ICAgIHsKICAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVm
YXVsdEJhc2U8U3R5bGVJbWFnZSosIGdldHRlckZ1bmN0aW9uLCBQYXNzUmVmUHRyPFN0eWxlSW1h
Z2U+LCBzZXR0ZXJGdW5jdGlvbiwgU3R5bGVJbWFnZSosIGluaXRpYWxGdW5jdGlvbj46OmNyZWF0
ZUhhbmRsZXIoKTsKQEAgLTE5OCwyOCArMTk4LDI4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9v
bCBoYXNBdXRvKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gKHN0eWxlLT4qaGFzQXV0b0Z1
bmN0aW9uKSgpOyB9CiAgICAgc3RhdGljIHZvaWQgc2V0QXV0byhSZW5kZXJTdHlsZSogc3R5bGUp
IHsgKHN0eWxlLT4qc2V0QXV0b0Z1bmN0aW9uKSgpOyB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXJTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBpZiAoaGFzQXV0byhzdHlsZVJl
c29sdmVyLT5wYXJlbnRTdHlsZSgpKSkKLSAgICAgICAgICAgIHNldEF1dG8oc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKSk7CisgICAgICAgIGlmIChoYXNBdXRvKHN0YXRlLnBhcmVudFN0eWxlKCkpKQor
ICAgICAgICAgICAgc2V0QXV0byhzdGF0ZS5zdHlsZSgpKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgdmFsdWUoc3R5bGVSZXNvbHZl
ci0+cGFyZW50U3R5bGUoKSkpOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwg
dmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIpIHsgc2V0QXV0byhzdHlsZVJlc29sdmVyLT5zdHlsZSgpKTsgfQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3Rh
dGUpIHsgc2V0QXV0byhzdGF0ZS5zdHlsZSgpKTsgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1
ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBp
ZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBhdXRvSWRlbnRpdHkpCi0gICAgICAgICAgICBzZXRBdXRvKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCkpOworICAgICAgICAgICAgc2V0QXV0byhzdGF0ZS5zdHlsZSgpKTsKICAgICAg
ICAgZWxzZSBpZiAodmFsdWVUeXBlID09IE51bWJlcikKLSAgICAgICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksICpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBzZXRW
YWx1ZShzdGF0ZS5zdHlsZSgpLCAqcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICBlbHNlIGlmICh2
YWx1ZVR5cGUgPT0gQ29tcHV0ZUxlbmd0aCkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSk7CisgICAgICAgICAgICBzZXRWYWx1
ZShzdGF0ZS5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdGF0ZS5z
dHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFu
ZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBs
eUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBAIC0yMjcsMjcgKzIyNywyNyBAQCBwdWJs
aWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlDbGlwIHsKIHByaXZhdGU6Ci0gICAgc3RhdGljIExl
bmd0aCBjb252ZXJ0VG9MZW5ndGgoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTUHJp
bWl0aXZlVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKGNv
bnN0IFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdl
ckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IEZyYWN0aW9uQ29udmVyc2lvbiB8IEF1
dG9Db252ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290
RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7
CisgICAgICAgIHJldHVybiB2YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZl
cnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IEZyYWN0aW9uQ29udmVyc2lvbiB8IEF1dG9Db252
ZXJzaW9uPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgfQogcHVibGljOgotICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUpCiAgICAgewot
ICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRT
dHlsZSgpOworICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRT
dHlsZSgpOwogICAgICAgICBpZiAoIXBhcmVudFN0eWxlLT5oYXNDbGlwKCkpCi0gICAgICAgICAg
ICByZXR1cm4gYXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0g
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENsaXAocGFyZW50U3R5bGUtPmNsaXBU
b3AoKSwgcGFyZW50U3R5bGUtPmNsaXBSaWdodCgpLCBwYXJlbnRTdHlsZS0+Y2xpcEJvdHRvbSgp
LCBwYXJlbnRTdHlsZS0+Y2xpcExlZnQoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldEhhc0NsaXAodHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gYXBwbHlJbml0aWFsVmFs
dWUocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDbGlwKHBh
cmVudFN0eWxlLT5jbGlwVG9wKCksIHBhcmVudFN0eWxlLT5jbGlwUmlnaHQoKSwgcGFyZW50U3R5
bGUtPmNsaXBCb3R0b20oKSwgcGFyZW50U3R5bGUtPmNsaXBMZWZ0KCkpOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRIYXNDbGlwKHRydWUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldENsaXAoTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCkpOwot
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKGZhbHNlKTsKKyAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpLCBM
ZW5ndGgoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc0NsaXAoZmFsc2UpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjU1LDE1ICsyNTUsMTUgQEAgcHVibGljOgogICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAogICAgICAgICBpZiAoUmVjdCogcmVjdCA9IHByaW1p
dGl2ZVZhbHVlLT5nZXRSZWN0VmFsdWUoKSkgewotICAgICAgICAgICAgTGVuZ3RoIHRvcCA9IGNv
bnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0LT50b3AoKSk7Ci0gICAgICAgICAgICBM
ZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+cmlnaHQo
KSk7Ci0gICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29udmVydFRvTGVuZ3RoKHN0eWxlUmVz
b2x2ZXIsIHJlY3QtPmJvdHRvbSgpKTsKLSAgICAgICAgICAgIExlbmd0aCBsZWZ0ID0gY29udmVy
dFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3QtPmxlZnQoKSk7Ci0gICAgICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDbGlwKHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCk7Ci0g
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKHRydWUpOworICAg
ICAgICAgICAgTGVuZ3RoIHRvcCA9IGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdC0+dG9wKCkp
OworICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0
LT5yaWdodCgpKTsKKyAgICAgICAgICAgIExlbmd0aCBib3R0b20gPSBjb252ZXJ0VG9MZW5ndGgo
c3RhdGUsIHJlY3QtPmJvdHRvbSgpKTsKKyAgICAgICAgICAgIExlbmd0aCBsZWZ0ID0gY29udmVy
dFRvTGVuZ3RoKHN0YXRlLCByZWN0LT5sZWZ0KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0Q2xpcCh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpOworICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0SGFzQ2xpcCh0cnVlKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pIHsKLSAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPnNldENsaXAoTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSwgTGVu
Z3RoKCkpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SGFzQ2xpcChm
YWxzZSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDbGlwKExlbmd0aCgpLCBMZW5n
dGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dEhhc0NsaXAoZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yODEsNDAgKzI4MSw0MCBA
QCB0ZW1wbGF0ZSA8Q29sb3JJbmhlcml0IGluaGVyaXRDb2xvckZyb21QYXJlbnQsCiAgICAgICAg
ICAgQ29sb3IgKCppbml0aWFsRnVuY3Rpb24pKCkgPSAmZGVmYXVsdEluaXRpYWxDb2xvcj4KIGNs
YXNzIEFwcGx5UHJvcGVydHlDb2xvciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJ
bmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikK
KyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyU3RhdGUmIHN0YXRlKQogICAgIHsKICAgICAgICAgLy8gVmlzaXRlZCBsaW5rIHN0eWxl
IGNhbiBuZXZlciBleHBsaWNpdGx5IGluaGVyaXQgZnJvbSBwYXJlbnQgdmlzaXRlZCBsaW5rIHN0
eWxlIHNvIG5vIHNlcGFyYXRlIGdldHRlcnMgYXJlIG5lZWRlZC4KLSAgICAgICAgQ29sb3IgY29s
b3IgPSAoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+KmdldHRlckZ1bmN0aW9uKSgpOwot
ICAgICAgICBhcHBseUNvbG9yVmFsdWUoc3R5bGVSZXNvbHZlciwgY29sb3IuaXNWYWxpZCgpID8g
Y29sb3IgOiAoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+KmRlZmF1bHRGdW5jdGlvbiko
KSk7CisgICAgICAgIENvbG9yIGNvbG9yID0gKHN0YXRlLnBhcmVudFN0eWxlKCktPipnZXR0ZXJG
dW5jdGlvbikoKTsKKyAgICAgICAgYXBwbHlDb2xvclZhbHVlKHN0YXRlLCBjb2xvci5pc1ZhbGlk
KCkgPyBjb2xvciA6IChzdGF0ZS5wYXJlbnRTdHlsZSgpLT4qZGVmYXVsdEZ1bmN0aW9uKSgpKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5p
dGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUpCiAgICAg
ewotICAgICAgICBhcHBseUNvbG9yVmFsdWUoc3R5bGVSZXNvbHZlciwgaW5pdGlhbEZ1bmN0aW9u
KCkpOworICAgICAgICBhcHBseUNvbG9yVmFsdWUoc3RhdGUsIGluaXRpYWxGdW5jdGlvbigpKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIGlmIChpbmhlcml0Q29sb3JGcm9tUGFyZW50
ICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKQot
ICAgICAgICAgICAgYXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7
CisgICAgICAgICAgICBhcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CiAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSgpKQotICAgICAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
KHByaW1pdGl2ZVZhbHVlKSk7Ci0gICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+YXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKQotICAgICAgICAgICAgICAgIChzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT4qdmlzaXRlZExpbmtTZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZlci0+
Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUsIC8qIGZvclZpc2l0ZWRMaW5r
ICovIHRydWUpKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5tX2FwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSkKKyAgICAgICAgICAgICAgICAoc3RhdGUuc3R5bGUoKS0+KnNldHRlckZ1bmN0aW9u
KShTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShzdGF0ZSwgcHJpbWl0aXZl
VmFsdWUpKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5tX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUpCisgICAgICAgICAgICAgICAgKHN0YXRlLnN0eWxlKCktPip2aXNpdGVkTGlua1Nl
dHRlckZ1bmN0aW9uKShTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShzdGF0
ZSwgcHJpbWl0aXZlVmFsdWUsIC8qIGZvclZpc2l0ZWRMaW5rICovIHRydWUpKTsKICAgICAgICAg
fQogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5Q29sb3JWYWx1ZShTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgc3RhdGljIHZvaWQgYXBw
bHlDb2xvclZhbHVlKFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIGNvbnN0IENvbG9yJiBjb2xv
cikKICAgICB7Ci0gICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKSkKLSAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qc2V0dGVy
RnVuY3Rpb24pKGNvbG9yKTsKLSAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSkKLSAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT4qdmlzaXRlZExpbmtTZXR0ZXJGdW5jdGlvbikoY29sb3IpOworICAgICAgICBpZiAoc3Rh
dGUubV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUpCisgICAgICAgICAgICAoc3RhdGUuc3R5
bGUoKS0+KnNldHRlckZ1bmN0aW9uKShjb2xvcik7CisgICAgICAgIGlmIChzdGF0ZS5tX2FwcGx5
UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUpCisgICAgICAgICAgICAoc3RhdGUuc3R5bGUoKS0+
KnZpc2l0ZWRMaW5rU2V0dGVyRnVuY3Rpb24pKGNvbG9yKTsKICAgICB9CiAKICAgICBzdGF0aWMg
UHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIo
JmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQpA
QCAtMzIzLDExICszMjMsMTEgQEAgcHVibGljOgogdGVtcGxhdGUgPFRleHREaXJlY3Rpb24gKFJl
bmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoq
c2V0dGVyRnVuY3Rpb24pKFRleHREaXJlY3Rpb24pLCBUZXh0RGlyZWN0aW9uICgqaW5pdGlhbEZ1
bmN0aW9uKSgpPgogY2xhc3MgQXBwbHlQcm9wZXJ0eURpcmVjdGlvbiB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlclN0YXRlJiBz
dGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1
bHQ8VGV4dERpcmVjdGlvbiwgZ2V0dGVyRnVuY3Rpb24sIFRleHREaXJlY3Rpb24sIHNldHRlckZ1
bmN0aW9uLCBUZXh0RGlyZWN0aW9uLCBpbml0aWFsRnVuY3Rpb24+OjphcHBseVZhbHVlKHByb3Bl
cnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9
IHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKTsKLSAgICAgICAgaWYgKGVsZW1lbnQgJiYgc3R5bGVS
ZXNvbHZlci0+ZWxlbWVudCgpID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVu
dCgpKQorICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxUZXh0RGlyZWN0aW9uLCBnZXR0ZXJG
dW5jdGlvbiwgVGV4dERpcmVjdGlvbiwgc2V0dGVyRnVuY3Rpb24sIFRleHREaXJlY3Rpb24sIGlu
aXRpYWxGdW5jdGlvbj46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRlLmVsZW1lbnQoKTsKKyAgICAgICAgaWYgKGVs
ZW1lbnQgJiYgZWxlbWVudCA9PSBlbGVtZW50LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQo
KSkKICAgICAgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPnNldERpcmVjdGlvblNldE9uRG9j
dW1lbnRFbGVtZW50KHRydWUpOwogICAgIH0KIApAQCAtMzU0LDcgKzM1NCw3IEBAIHRlbXBsYXRl
IDxMZW5ndGggKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsCiBjbGFzcyBB
cHBseVByb3BlcnR5TGVuZ3RoIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShS
ZW5kZXJTdHlsZSogc3R5bGUsIExlbmd0aCB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlv
bikodmFsdWUpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRl
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zNjIsMzkgKzM2MiwzOSBAQCBwdWJs
aWM6CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBpZiAobm9uZUVuYWJsZWQg
JiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7CiAgICAgICAg
ICAgICBpZiAobm9uZVVuZGVmaW5lZCkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoVW5kZWZpbmVkKSk7CisgICAgICAgICAgICAgICAgc2V0
VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKFVuZGVmaW5lZCkpOwogICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0
aCgpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoKSk7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKGxlZ2FjeUludHJpbnNpY0VuYWJsZWQpIHsKICAgICAg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUludHJpbnNp
YykKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5n
dGgoSW50cmluc2ljKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwg
TGVuZ3RoKEludHJpbnNpYykpOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVNaW5JbnRyaW5zaWMpCi0gICAgICAgICAgICAgICAgc2V0
VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKE1pbkludHJpbnNpYykpOworICAg
ICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aChNaW5JbnRyaW5zaWMp
KTsKICAgICAgICAgfQogICAgICAgICBpZiAoaW50cmluc2ljRW5hYmxlZCkgewogICAgICAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlV2Via2l0TWluQ29u
dGVudCkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBM
ZW5ndGgoTWluQ29udGVudCkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxl
KCksIExlbmd0aChNaW5Db250ZW50KSk7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdE1heENvbnRlbnQpCi0gICAgICAgICAg
ICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKE1heENvbnRlbnQp
KTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoTWF4Q29u
dGVudCkpOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVXZWJraXRGaWxsQXZhaWxhYmxlKQotICAgICAgICAgICAgICAgIHNldFZhbHVl
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChGaWxsQXZhaWxhYmxlKSk7CisgICAgICAg
ICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKEZpbGxBdmFpbGFibGUpKTsK
ICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlV2Via2l0Rml0Q29udGVudCkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLCBMZW5ndGgoRml0Q29udGVudCkpOworICAgICAgICAgICAgICAgIHNldFZh
bHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aChGaXRDb250ZW50KSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAoYXV0b0VuYWJsZWQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NT
VmFsdWVBdXRvKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
TGVuZ3RoKCkpOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKCkp
OwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewotICAgICAg
ICAgICAgTGVuZ3RoIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0
aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHls
ZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICAg
ICAgTGVuZ3RoIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4o
c3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCkpOwogICAgICAgICAgICAgbGVuZ3RoLnNldFF1aXJrKHByaW1pdGl2ZVZh
bHVlLT5pc1F1aXJrVmFsdWUoKSk7Ci0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCBsZW5ndGgpOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwg
bGVuZ3RoKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdl
KCkpCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgo
cHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpKTsKKyAgICAgICAgICAg
IHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91Ymxl
VmFsdWUoKSwgUGVyY2VudCkpOwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXND
YWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVl
KCktPnRvQ2FsY1ZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJv
b3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgp
KSkpOworICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKHByaW1pdGl2
ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3RhdGUuc3R5bGUoKSwgc3RhdGUu
cm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CiAg
ICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0
aCgpKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgcHJpbWl0
aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKTsKKyAgICAgICAgICAgIHNldFZh
bHVlKHN0YXRlLnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5n
dGgoKSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVy
KCkKQEAgLTQwOSwxNiArNDA5LDE2IEBAIHRlbXBsYXRlIDxTdHJpbmdJZGVudEJlaGF2aW9yIGlk
ZW50QmVoYXZpb3IsIGNvbnN0IEF0b21pY1N0cmluZyYgKFJlbmRlclN0eWxlOjoqCiBjbGFzcyBB
cHBseVByb3BlcnR5U3RyaW5nIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShS
ZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpIHsgKHN0eWxlLT4q
c2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVl
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
clN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbHVlKTsKICAgICAgICAgaWYgKChpZGVudEJlaGF2aW9yID09IE1hcE5vbmVUb051
bGwgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQogICAgICAg
ICAgICAgfHwgKGlkZW50QmVoYXZpb3IgPT0gTWFwQXV0b1RvTnVsbCAmJiBwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgbnVsbEF0b20pOworICAgICAgICAgICAgc2V0VmFsdWUoc3Rh
dGUuc3R5bGUoKSwgbnVsbEF0b20pOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUo
KSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+
Z2V0U3RyaW5nVmFsdWUoKSk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3Jl
YXRlSGFuZGxlcigpCiAgICAgewpAQCAtNDMxLDcgKzQzMSw3IEBAIHRlbXBsYXRlIDxMZW5ndGhT
aXplIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJT
dHlsZTo6CiBjbGFzcyBBcHBseVByb3BlcnR5Qm9yZGVyUmFkaXVzIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIExlbmd0aFNpemUgdmFsdWUp
IHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NT
VmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAg
ICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtNDQ4LDE3ICs0NDgsMTcgQEAgcHVibGljOgogICAgICAgICBlbHNlIGlmIChwYWlyLT5maXJz
dCgpLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKQogICAgICAgICAgICAgcmFkaXVzV2lk
dGggPSBwYWlyLT5maXJzdCgpLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKICAgICAgICAg
ZWxzZSBpZiAocGFpci0+Zmlyc3QoKS0+aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgo
KSkKLSAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gTGVuZ3RoKChwYWlyLT5maXJzdCgpLT5jc3ND
YWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNv
bHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3Rp
dmVab29tKCkpKSk7CisgICAgICAgICAgICByYWRpdXNXaWR0aCA9IExlbmd0aCgocGFpci0+Zmly
c3QoKS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0YXRlLnN0eWxlKCksIHN0YXRlLnJv
b3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICByYWRpdXNXaWR0aCA9IHBhaXItPmZpcnN0KCktPmNvbXB1
dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5y
b290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSk7CisgICAgICAgICAgICByYWRpdXNXaWR0aCA9IHBhaXItPmZpcnN0KCktPmNvbXB1dGVMZW5n
dGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRl
LnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIGlmIChwYWlyLT5zZWNvbmQoKS0+
aXNQZXJjZW50YWdlKCkpCiAgICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBMZW5ndGgocGFpci0+
c2Vjb25kKCktPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwogICAgICAgICBlbHNlIGlmIChw
YWlyLT5zZWNvbmQoKS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKICAgICAgICAgICAg
IHJhZGl1c0hlaWdodCA9IHBhaXItPnNlY29uZCgpLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgo
KTsKICAgICAgICAgZWxzZSBpZiAocGFpci0+c2Vjb25kKCktPmlzQ2FsY3VsYXRlZFBlcmNlbnRh
Z2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBMZW5ndGgoKHBhaXIt
PnNlY29uZCgpLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CisgICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBM
ZW5ndGgoKHBhaXItPnNlY29uZCgpLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3RhdGUu
c3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3Rp
dmVab29tKCkpKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IHBh
aXItPnNlY29uZCgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICAgICAgcmFkaXVzSGVpZ2h0ID0gcGFpci0+
c2Vjb25kKCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290
RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAg
IGludCB3aWR0aCA9IHJhZGl1c1dpZHRoLnZhbHVlKCk7CiAgICAgICAgIGludCBoZWlnaHQgPSBy
YWRpdXNIZWlnaHQudmFsdWUoKTsKICAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAw
KQpAQCAtNDY5LDcgKzQ2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJhZGl1c1dpZHRoID0g
cmFkaXVzSGVpZ2h0OyAvLyBOdWxsIG91dCB0aGUgb3RoZXIgdmFsdWUuCiAKICAgICAgICAgTGVu
Z3RoU2l6ZSBzaXplKHJhZGl1c1dpZHRoLCByYWRpdXNIZWlnaHQpOwotICAgICAgICBzZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzaXplKTsKKyAgICAgICAgc2V0VmFsdWUoc3RhdGUu
c3R5bGUoKSwgc2l6ZSk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRl
SGFuZGxlcigpCiAgICAgewpAQCAtNTAzLDExICs1MDMsMTEgQEAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQsCiAgICAgICAgICAgdm9pZCAoQ1NTVG9TdHlsZU1hcDo6Km1hcEZpbGxGdW5jdGlvbikoQ1NT
UHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKT4KIGNsYXNzIEFwcGx5UHJvcGVydHlG
aWxsTGF5ZXIgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZv
aWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlclN0YXRlJiBz
dGF0ZSkKICAgICB7Ci0gICAgICAgIEZpbGxMYXllciogY3VyckNoaWxkID0gKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5jdGlvbikoKTsKKyAgICAgICAgRmlsbExheWVy
KiBjdXJyQ2hpbGQgPSAoc3RhdGUuc3R5bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOwog
ICAgICAgICBGaWxsTGF5ZXIqIHByZXZDaGlsZCA9IDA7Ci0gICAgICAgIGNvbnN0IEZpbGxMYXll
ciogY3VyclBhcmVudCA9IChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT4qbGF5ZXJzRnVu
Y3Rpb24pKCk7CisgICAgICAgIGNvbnN0IEZpbGxMYXllciogY3VyclBhcmVudCA9IChzdGF0ZS5w
YXJlbnRTdHlsZSgpLT4qbGF5ZXJzRnVuY3Rpb24pKCk7CiAgICAgICAgIHdoaWxlIChjdXJyUGFy
ZW50ICYmIChjdXJyUGFyZW50LT4qdGVzdEZ1bmN0aW9uKSgpKSB7CiAgICAgICAgICAgICBpZiAo
IWN1cnJDaGlsZCkgewogICAgICAgICAgICAgICAgIC8qIE5lZWQgdG8gbWFrZSBhIG5ldyBsYXll
ci4qLwpAQCAtNTI3LDE4ICs1MjcsMTkgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAg
RmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KmFjY2Vzc0xh
eWVyc0Z1bmN0aW9uKSgpOworICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChzdGF0ZS5z
dHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7CiAgICAgICAgIChjdXJyQ2hpbGQtPipz
ZXRGdW5jdGlvbikoKCppbml0aWFsRnVuY3Rpb24pKGZpbGxMYXllclR5cGUpKTsKICAgICAgICAg
Zm9yIChjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgY3VyckNoaWxkOyBjdXJyQ2hpbGQg
PSBjdXJyQ2hpbGQtPm5leHQoKSkKICAgICAgICAgICAgIChjdXJyQ2hpbGQtPipjbGVhckZ1bmN0
aW9uKSgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlclN0YXRlJiBz
dGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hp
bGQgPSAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOwor
ICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChzdGF0ZS5zdHlsZSgpLT4qYWNjZXNzTGF5
ZXJzRnVuY3Rpb24pKCk7CiAgICAgICAgIEZpbGxMYXllciogcHJldkNoaWxkID0gMDsKKyAgICAg
ICAgQ1NTVG9TdHlsZU1hcCBzdHlsZU1hcChzdGF0ZSk7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNW
YWx1ZUxpc3QoKQogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQogICAgICAgICAmJiAhdmFsdWUt
PmlzSW1hZ2VTZXRWYWx1ZSgpCkBAIC01NTIsMTIgKzU1MywxMiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIGN1cnJDaGlsZCA9IG5ldyBGaWxsTGF5ZXIoZmlsbExheWVyVHlwZSk7CiAg
ICAgICAgICAgICAgICAgICAgIHByZXZDaGlsZC0+c2V0TmV4dChjdXJyQ2hpbGQpOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+
Km1hcEZpbGxGdW5jdGlvbikocHJvcGVydHlJZCwgY3VyckNoaWxkLCB2YWx1ZUxpc3QtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soaSkpOworICAgICAgICAgICAgICAgIChzdHlsZU1hcC4qbWFwRmls
bEZ1bmN0aW9uKShwcm9wZXJ0eUlkLCBjdXJyQ2hpbGQsIHZhbHVlTGlzdC0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjayhpKSk7CiAgICAgICAgICAgICAgICAgcHJldkNoaWxkID0gY3VyckNoaWxkOwog
ICAgICAgICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxl
TWFwKCktPiptYXBGaWxsRnVuY3Rpb24pKHByb3BlcnR5SWQsIGN1cnJDaGlsZCwgdmFsdWUpOwor
ICAgICAgICAgICAgKHN0eWxlTWFwLiptYXBGaWxsRnVuY3Rpb24pKHByb3BlcnR5SWQsIGN1cnJD
aGlsZCwgdmFsdWUpOwogICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7
CiAgICAgICAgIH0KICAgICAgICAgd2hpbGUgKGN1cnJDaGlsZCkgewpAQCAtNTgzLDcgKzU4NCw3
IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBULAogY2xhc3MgQXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5n
dGggewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHls
ZSwgVCB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgewogICAgICAgICAvLyBub3RlOiBDU1NQcm9wZXJ0eUxldHRlci9Xb3JkU3BhY2luZyByaWdo
dCBub3cgc2V0cyB0byB6ZXJvIGlmIGl0J3Mgbm90IGEgcHJpbWl0aXZlIHZhbHVlIGZvciBzb21l
IHJlYXNvbi4uLgogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCkBAIC02
MDIsMTMgKzYwMywxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0gZWxzZSBpZiAodGhpY2tuZXNzRW5h
YmxlZCAmJiBpZGVudCA9PSBDU1NWYWx1ZVRoaWNrKSB7CiAgICAgICAgICAgICBsZW5ndGggPSA1
OwogICAgICAgICB9IGVsc2UgaWYgKGlkZW50ID09IENTU1ZhbHVlSW52YWxpZCkgewotICAgICAg
ICAgICAgZmxvYXQgem9vbSA9IChzdmdab29tRW5hYmxlZCAmJiBzdHlsZVJlc29sdmVyLT51c2VT
Vkdab29tUnVsZXMoKSkgPyAxLjBmIDogc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZl
Wm9vbSgpOworICAgICAgICAgICAgZmxvYXQgem9vbSA9IChzdmdab29tRW5hYmxlZCAmJiBzdGF0
ZS51c2VTVkdab29tUnVsZXMoKSkgPyAxLjBmIDogc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpOwogCiAgICAgICAgICAgICAvLyBBbnkgb3JpZ2luYWwgcmVzdWx0IHRoYXQgd2FzID49IDEg
c2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIGZhbGwgYmVsb3cgMS4KICAgICAgICAgICAgIC8vIFRo
aXMga2VlcHMgYm9yZGVyIGxpbmVzIGZyb20gdmFuaXNoaW5nLgotICAgICAgICAgICAgbGVuZ3Ro
ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4oc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tKTsKKyAgICAgICAgICAg
IGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0YXRlLnN0eWxlKCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7CiAgICAgICAgICAgICBpZiAoem9vbSA8
IDEuMGYgJiYgbGVuZ3RoIDwgMS4wKSB7Ci0gICAgICAgICAgICAgICAgVCBvcmlnaW5hbExlbmd0
aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgMS4wKTsKKyAgICAgICAgICAg
ICAgICBUIG9yaWdpbmFsTGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4o
c3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCAxLjApOwogICAgICAgICAg
ICAgICAgIGlmIChvcmlnaW5hbExlbmd0aCA+PSAxLjApCiAgICAgICAgICAgICAgICAgICAgIGxl
bmd0aCA9IDEuMDsKICAgICAgICAgICAgIH0KQEAgLTYxOCw3ICs2MTksNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBsZW5ndGggPSAwOwogICAgICAgICB9CiAKLSAgICAgICAgc2V0VmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgbGVuZ3RoKTsKKyAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5
bGUoKSwgbGVuZ3RoKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVI
YW5kbGVyKCkKICAgICB7CkBAIC02MzAsMjggKzYzMSwyOCBAQCBwdWJsaWM6CiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgVCAoRm9udERlc2NyaXB0aW9uOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3Qs
IHZvaWQgKEZvbnREZXNjcmlwdGlvbjo6KnNldHRlckZ1bmN0aW9uKShUKSwgVCBpbml0aWFsVmFs
dWU+CiBjbGFzcyBBcHBseVByb3BlcnR5Rm9udCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9u
IGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOwotICAg
ICAgICAoZm9udERlc2NyaXB0aW9uLipzZXR0ZXJGdW5jdGlvbikoKHN0eWxlUmVzb2x2ZXItPnBh
cmVudEZvbnREZXNjcmlwdGlvbigpLipnZXR0ZXJGdW5jdGlvbikoKSk7Ci0gICAgICAgIHN0eWxl
UmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7
CisgICAgICAgIChmb250RGVzY3JpcHRpb24uKnNldHRlckZ1bmN0aW9uKSgoc3RhdGUucGFyZW50
Rm9udERlc2NyaXB0aW9uKCkuKmdldHRlckZ1bmN0aW9uKSgpKTsKKyAgICAgICAgc3RhdGUuc2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOwor
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgICAgIChmb250RGVzY3JpcHRpb24uKnNldHRlckZ1bmN0aW9uKShpbml0
aWFsVmFsdWUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyU3RhdGUm
IHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsdWUpOwotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVS
ZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgKGZvbnREZXNj
cmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24pKCpwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAgIHN0eWxl
UmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBz
dGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKICAgICBz
dGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhh
bmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVl
KTsgfQpAQCAtNjc2LDUwICs2NzcsNTAgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNpemUg
LyAxLjJmOwogICAgIH0KIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXJTdGF0
ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBmbG9hdCBzaXplID0gc3R5bGVSZXNvbHZlci0+cGFy
ZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOworICAgICAgICBm
bG9hdCBzaXplID0gc3RhdGUucGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lm
aWVkU2l6ZSgpOwogCiAgICAgICAgIGlmIChzaXplIDwgMCkKICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRLZXl3b3JkU2l6ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKS5rZXl3b3JkU2l6ZSgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUo
Zm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKHN0YXRlLnBhcmVudFN0eWxlKCktPmZvbnRE
ZXNjcmlwdGlvbigpLmtleXdvcmRTaXplKCkpOworICAgICAgICBTdHlsZVJlc29sdmVyOjpzZXRG
b250U2l6ZShzdGF0ZSwgZm9udERlc2NyaXB0aW9uLCBzaXplKTsKKyAgICAgICAgc3RhdGUuc2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUpCiAgICAgewotICAg
ICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGZsb2F0IHNpemUgPSBzdHlsZVJlc29s
dmVyLT5mb250U2l6ZUZvcktleXdvcmQoc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgQ1NTVmFs
dWVNZWRpdW0sIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpOworICAgICAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+Zm9udERl
c2NyaXB0aW9uKCk7CisgICAgICAgIGZsb2F0IHNpemUgPSBTdHlsZVJlc29sdmVyOjpmb250U2l6
ZUZvcktleXdvcmQoc3RhdGUuZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZvbnREZXNjcmlw
dGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpOwogCiAgICAgICAgIGlmIChzaXplIDwgMCkKICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNp
emUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKLSAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICAgICAgc3R5
bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAg
IFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKHN0YXRlLCBmb250RGVzY3JpcHRpb24sIHNpemUp
OworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlclN0
YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsdWUpOwogCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24g
PSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwog
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoMCk7CiAgICAgICAgIGZsb2F0
IHBhcmVudFNpemUgPSAwOwogICAgICAgICBib29sIHBhcmVudElzQWJzb2x1dGVTaXplID0gZmFs
c2U7CiAgICAgICAgIGZsb2F0IHNpemUgPSAwOwogCi0gICAgICAgIGlmIChzdHlsZVJlc29sdmVy
LT5wYXJlbnRTdHlsZSgpKSB7Ci0gICAgICAgICAgICBwYXJlbnRTaXplID0gc3R5bGVSZXNvbHZl
ci0+cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOwotICAg
ICAgICAgICAgcGFyZW50SXNBYnNvbHV0ZVNpemUgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHls
ZSgpLT5mb250RGVzY3JpcHRpb24oKS5pc0Fic29sdXRlU2l6ZSgpOworICAgICAgICBpZiAoc3Rh
dGUucGFyZW50U3R5bGUoKSkgeworICAgICAgICAgICAgcGFyZW50U2l6ZSA9IHN0YXRlLnBhcmVu
dEZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKKyAgICAgICAgICAgIHBhcmVudElz
QWJzb2x1dGVTaXplID0gc3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkuaXNBYnNvbHV0ZVNp
emUoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpbnQgaWRlbnQgPSBwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSkgewpAQCAtNzMzLDcgKzczNCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVYTGFyZ2U6CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlWHhMYXJnZToK
ICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRYeHhMYXJnZToKLSAgICAgICAgICAgICAg
ICBzaXplID0gc3R5bGVSZXNvbHZlci0+Zm9udFNpemVGb3JLZXl3b3JkKHN0eWxlUmVzb2x2ZXIt
PmRvY3VtZW50KCksIGlkZW50LCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgp
KTsKKyAgICAgICAgICAgICAgICBzaXplID0gU3R5bGVSZXNvbHZlcjo6Zm9udFNpemVGb3JLZXl3
b3JkKHN0YXRlLmRvY3VtZW50KCksIGlkZW50LCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZh
dWx0U2l6ZSgpKTsKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNp
emUoaWRlbnQgLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMYXJnZXI6CkBAIC03NTEsMTMgKzc1MiwxMyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUocGFy
ZW50SXNBYnNvbHV0ZVNpemUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCAhKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSB8fCBwcmltaXRpdmVW
YWx1ZS0+aXNGb250UmVsYXRpdmVMZW5ndGgoKSkpOwogICAgICAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLT5pc0xlbmd0aCgpKQotICAgICAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1
ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5
bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCAxLjAsIHRydWUpOworICAgICAgICAgICAg
ICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUucGFy
ZW50U3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCAxLjAsIHRydWUpOwogICAgICAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKQogICAgICAgICAg
ICAgICAgIHNpemUgPSAocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSAqIHBhcmVudFNp
emUpIC8gMTAwLjBmOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2Fs
Y3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgc2l6ZSA9IHBy
aW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGVSZXNvbHZlci0+
cGFyZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpKS0+ZXZhbHVh
dGUocGFyZW50U2l6ZSk7CisgICAgICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLT5j
c3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSwgc3RhdGUucm9v
dEVsZW1lbnRTdHlsZSgpKS0+ZXZhbHVhdGUocGFyZW50U2l6ZSk7CiAgICAgICAgICAgICBlbHNl
IGlmIChwcmltaXRpdmVWYWx1ZS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKLSAgICAg
ICAgICAgICAgICBzaXplID0gdmFsdWVGb3JMZW5ndGgocHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0
UGVyY2VudGFnZUxlbmd0aCgpLCAwLCBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5yZW5kZXJW
aWV3KCkpOworICAgICAgICAgICAgICAgIHNpemUgPSB2YWx1ZUZvckxlbmd0aChwcmltaXRpdmVW
YWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCksIDAsIHN0YXRlLmRvY3VtZW50KCktPnJl
bmRlclZpZXcoKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CkBAIC03NjksOCArNzcwLDggQEAgcHVibGljOgogICAgICAgICAvLyBDYXAgZm9u
dCBzaXplIGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgZG9lc24ndCBoYXBwZW4uCiAgICAgICAgIHNp
emUgPSBtaW4obWF4aW11bUFsbG93ZWRGb250U2l6ZSwgc2l6ZSk7CiAKLSAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICAgICAgc3R5
bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAg
IFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKHN0YXRlLCBmb250RGVzY3JpcHRpb24sIHNpemUp
OworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzc5LDEyICs3ODAsMTIgQEAgcHVibGljOgogCiBj
bGFzcyBBcHBseVByb3BlcnR5Rm9udFdlaWdodCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAg
ICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAg
IEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24o
KTsKICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAg
ICBjYXNlIENTU1ZhbHVlSW52YWxpZDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtNzk4LDcgKzc5OSw3IEBAIHB1YmxpYzoKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoKnByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAg
fQotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAg
ewpAQCAtODA5LDMwICs4MTAsMzAgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5Rm9u
dFZhcmlhbnRMaWdhdHVyZXMgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJp
dFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
clN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFy
ZW50Rm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+cGFyZW50Rm9udERlc2NyaXB0aW9u
KCk7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29s
dmVyLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBw
YXJlbnRGb250RGVzY3JpcHRpb24gPSBzdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKTsKKyAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLmZvbnREZXNjcmlw
dGlvbigpOwogCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21tb25MaWdhdHVyZXNTdGF0
ZShwYXJlbnRGb250RGVzY3JpcHRpb24uY29tbW9uTGlnYXR1cmVzU3RhdGUoKSk7CiAgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUocGFyZW50Rm9u
dERlc2NyaXB0aW9uLmRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSgpKTsKICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldEhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZShwYXJlbnRGb250RGVzY3Jp
cHRpb24uaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKCkpOwogCi0gICAgICAgIHN0eWxlUmVzb2x2
ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBzdGF0ZS5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7
CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250RGVz
Y3JpcHRpb24oKTsKIAogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tbW9uTGlnYXR1cmVz
U3RhdGUoRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSk7CiAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoRm9udERlc2NyaXB0
aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRI
aXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUoRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNT
dGF0ZSk7CiAKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnRE
ZXNjcmlwdGlvbik7CisgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlclN0YXRlJiBz
dGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgRm9udERlc2NyaXB0aW9uOjpM
aWdhdHVyZXNTdGF0ZSBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6Tm9y
bWFsTGlnYXR1cmVzU3RhdGU7CiAgICAgICAgIEZvbnREZXNjcmlwdGlvbjo6TGlnYXR1cmVzU3Rh
dGUgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxM
aWdhdHVyZXNTdGF0ZTsKQEAgLTg3OCwxMSArODc5LDExIEBAIHB1YmxpYzoKICAgICAgICAgfQog
I2VuZGlmCiAKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxl
UmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRDb21tb25MaWdhdHVyZXNTdGF0ZShjb21tb25MaWdhdHVyZXNTdGF0ZSk7CiAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoZGlz
Y3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEhp
c3RvcmljYWxMaWdhdHVyZXNTdGF0ZShoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUpOwotICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAg
ICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQog
CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTg5OCwxMyAr
ODk5LDE0IEBAIHRlbXBsYXRlIDxCb3JkZXJJbWFnZVR5cGUgYm9yZGVySW1hZ2VUeXBlLAogICAg
ICAgICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKGNvbnN0IE5pbmVQaWVj
ZUltYWdlJik+CiBjbGFzcyBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2UgewogcHVibGljOgotICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgIHsKICAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2U7CiAgICAgICAgIGlmIChib3Jk
ZXJJbWFnZVR5cGUgPT0gQm9yZGVyTWFzaykKICAgICAgICAgICAgIGltYWdlLnNldE1hc2tEZWZh
dWx0cygpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJ
bWFnZShwcm9wZXJ0eSwgdmFsdWUsIGltYWdlKTsKLSAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoaW1hZ2UpOworICAgICAgICBDU1NUb1N0eWxlTWFwIHN0
eWxlTWFwKHN0YXRlKTsKKyAgICAgICAgc3R5bGVNYXAubWFwTmluZVBpZWNlSW1hZ2UocHJvcGVy
dHksIHZhbHVlLCBpbWFnZSk7CisgICAgICAgIChzdGF0ZS5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rp
b24pKGltYWdlKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhh
bmRsZXIoKQpAQCAtOTIxLDI5ICs5MjMsMjkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgaW5saW5l
IGNvbnN0IE5pbmVQaWVjZUltYWdlJiBnZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0
dXJuIHR5cGUgPT0gQm9yZGVySW1hZ2UgPyBzdHlsZS0+Ym9yZGVySW1hZ2UoKSA6IHN0eWxlLT5t
YXNrQm94SW1hZ2UoKTsgfQogICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRWYWx1ZShSZW5kZXJT
dHlsZSogc3R5bGUsIGNvbnN0IE5pbmVQaWVjZUltYWdlJiB2YWx1ZSkgeyByZXR1cm4gdHlwZSA9
PSBCb3JkZXJJbWFnZSA/IHN0eWxlLT5zZXRCb3JkZXJJbWFnZSh2YWx1ZSkgOiBzdHlsZS0+c2V0
TWFza0JveEltYWdlKHZhbHVlKTsgfQogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5o
ZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlclN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdl
dFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpKTsKKyAgICAgICAgTmluZVBpZWNlSW1hZ2Ug
aW1hZ2UoZ2V0VmFsdWUoc3RhdGUuc3R5bGUoKSkpOwogICAgICAgICBzd2l0Y2ggKG1vZGlmaWVy
KSB7CiAgICAgICAgIGNhc2UgT3V0c2V0OgotICAgICAgICAgICAgaW1hZ2UuY29weU91dHNldEZy
b20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOworICAgICAgICAgICAg
aW1hZ2UuY29weU91dHNldEZyb20oZ2V0VmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVwZWF0OgotICAgICAgICAgICAgaW1hZ2Uu
Y29weVJlcGVhdEZyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOwor
ICAgICAgICAgICAgaW1hZ2UuY29weVJlcGVhdEZyb20oZ2V0VmFsdWUoc3RhdGUucGFyZW50U3R5
bGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2xpY2U6Ci0gICAgICAg
ICAgICBpbWFnZS5jb3B5SW1hZ2VTbGljZXNGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnBh
cmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGltYWdlLmNvcHlJbWFnZVNsaWNlc0Zyb20oZ2V0
VmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgV2lkdGg6Ci0gICAgICAgICAgICBpbWFnZS5jb3B5Qm9yZGVyU2xpY2VzRnJvbShnZXRW
YWx1ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbWFnZS5j
b3B5Qm9yZGVyU2xpY2VzRnJvbShnZXRWYWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCBpbWFnZSk7CisgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIGltYWdl
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUpCiAg
ICAgewotICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdHlsZVJlc29sdmVy
LT5zdHlsZSgpKSk7CisgICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKHN0YXRl
LnN0eWxlKCkpKTsKICAgICAgICAgc3dpdGNoIChtb2RpZmllcikgewogICAgICAgICBjYXNlIE91
dHNldDoKICAgICAgICAgICAgIGltYWdlLnNldE91dHNldChMZW5ndGhCb3goMCkpOwpAQCAtOTYy
LDI3ICs5NjQsMjggQEAgcHVibGljOgogICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2Vz
KHR5cGUgPT0gQm9yZGVySW1hZ2UgPyBMZW5ndGhCb3goTGVuZ3RoKDEsIFJlbGF0aXZlKSwgTGVu
Z3RoKDEsIFJlbGF0aXZlKSwgTGVuZ3RoKDEsIFJlbGF0aXZlKSwgTGVuZ3RoKDEsIFJlbGF0aXZl
KSkgOiBMZW5ndGhCb3goKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBpbWFnZSk7CisgICAgICAgIHNldFZh
bHVlKHN0YXRlLnN0eWxlKCksIGltYWdlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpKTsK
KyAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3RhdGUuc3R5bGUoKSkpOwor
ICAgICAgICBDU1NUb1N0eWxlTWFwIHN0eWxlTWFwKHN0YXRlKTsKICAgICAgICAgc3dpdGNoICht
b2RpZmllcikgewogICAgICAgICBjYXNlIE91dHNldDoKLSAgICAgICAgICAgIGltYWdlLnNldE91
dHNldChzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVF1YWQodmFs
dWUpKTsKKyAgICAgICAgICAgIGltYWdlLnNldE91dHNldChzdHlsZU1hcC5tYXBOaW5lUGllY2VJ
bWFnZVF1YWQodmFsdWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlcGVh
dDoKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUlt
YWdlUmVwZWF0KHZhbHVlLCBpbWFnZSk7CisgICAgICAgICAgICBzdHlsZU1hcC5tYXBOaW5lUGll
Y2VJbWFnZVJlcGVhdCh2YWx1ZSwgaW1hZ2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgU2xpY2U6Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBO
aW5lUGllY2VJbWFnZVNsaWNlKHZhbHVlLCBpbWFnZSk7CisgICAgICAgICAgICBzdHlsZU1hcC5t
YXBOaW5lUGllY2VJbWFnZVNsaWNlKHZhbHVlLCBpbWFnZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBXaWR0aDoKLSAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyhz
dHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVF1YWQodmFsdWUpKTsK
KyAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyhzdHlsZU1hcC5tYXBOaW5lUGllY2VJ
bWFnZVF1YWQodmFsdWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGltYWdlKTsKKyAgICAgICAgc2V0VmFs
dWUoc3RhdGUuc3R5bGUoKSwgaW1hZ2UpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhh
bmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhl
cml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBAIC05OTEsNyAr
OTk0LDcgQEAgcHVibGljOgogdGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQsIFN0eWxlSW1hZ2Uq
IChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHls
ZTo6KnNldHRlckZ1bmN0aW9uKShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+KSwgU3R5bGVJbWFnZSog
KCppbml0aWFsRnVuY3Rpb24pKCk+CiBjbGFzcyBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VTb3Vy
Y2UgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1h
Z2UoaWQsIHZhbHVlKSk7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3RhdGUu
c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKHN0YXRl
LCBpZCwgdmFsdWUpKTsgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxl
cigpCiAgICAgewogICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVy
dHlEZWZhdWx0QmFzZTxTdHlsZUltYWdlKiwgZ2V0dGVyRnVuY3Rpb24sIFBhc3NSZWZQdHI8U3R5
bGVJbWFnZT4sIHNldHRlckZ1bmN0aW9uLCBTdHlsZUltYWdlKiwgaW5pdGlhbEZ1bmN0aW9uPjo6
Y3JlYXRlSGFuZGxlcigpOwpAQCAtMTAwMywxMSArMTAwNiwxMSBAQCBlbnVtIENvdW50ZXJCZWhh
dmlvciB7SW5jcmVtZW50ID0gMCwgUmVzZXR9OwogdGVtcGxhdGUgPENvdW50ZXJCZWhhdmlvciBj
b3VudGVyQmVoYXZpb3I+CiBjbGFzcyBBcHBseVByb3BlcnR5Q291bnRlciB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIHZvaWQgZW1wdHlGdW5jdGlvbihDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KikgeyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBlbXB0eUZ1bmN0
aW9uKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYpIHsgfQorICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYg
c3RhdGUpCiAgICAgewotICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwotICAgICAgICBDb3Vu
dGVyRGlyZWN0aXZlTWFwJiBwYXJlbnRNYXAgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgp
LT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOworICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFw
JiBtYXAgPSBzdGF0ZS5zdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOworICAgICAg
ICBDb3VudGVyRGlyZWN0aXZlTWFwJiBwYXJlbnRNYXAgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5h
Y2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwogCiAgICAgICAgIHR5cGVkZWYgQ291bnRlckRpcmVj
dGl2ZU1hcDo6aXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IHBhcmVu
dE1hcC5lbmQoKTsKQEAgLTEwMjAsMTQgKzEwMjMsMTQgQEAgcHVibGljOgogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlclN0YXRl
JiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNW
YWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBDU1NWYWx1ZUxpc3Qq
IGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CiAKLSAgICAgICAgQ291
bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+YWNjZXNzQ291
bnRlckRpcmVjdGl2ZXMoKTsKKyAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3Rh
dGUuc3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKICAgICAgICAgdHlwZWRlZiBD
b3VudGVyRGlyZWN0aXZlTWFwOjppdGVyYXRvciBJdGVyYXRvcjsKIAogICAgICAgICBJdGVyYXRv
ciBlbmQgPSBtYXAuZW5kKCk7CkBAIC0xMDYzLDQyICsxMDY2LDQyIEBAIHB1YmxpYzoKIAogY2xh
c3MgQXBwbHlQcm9wZXJ0eUN1cnNvciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJ
bmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikK
KyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0Q3Vyc29yKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmN1cnNvcigpKTsKLSAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yTGlzdChzdHlsZVJlc29sdmVy
LT5wYXJlbnRTdHlsZSgpLT5jdXJzb3JzKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRD
dXJzb3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+Y3Vyc29yKCkpOworICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRDdXJzb3JMaXN0KHN0YXRlLnBhcmVudFN0eWxlKCktPmN1cnNvcnMoKSk7CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlKQogICAgIHsKLSAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7Ci0gICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEN1
cnNvcigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7CisgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldEN1cnNvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEN1cnNvcigp
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PmNsZWFyQ3Vyc29yTGlzdCgpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhckN1cnNvckxp
c3QoKTsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CiAgICAgICAgICAgICBD
U1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CiAg
ICAgICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3IoQ1VSU09SX0FVVE8pOworICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0Q3Vyc29yKENVUlNPUl9BVVRPKTsKICAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9
IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CiAgICAgICAgICAgICAgICAgaWYgKGl0
ZW0tPmlzQ3Vyc29ySW1hZ2VWYWx1ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIENTU0N1cnNv
ckltYWdlVmFsdWUqIGltYWdlID0gc3RhdGljX2Nhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSo+KGl0
ZW0pOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPnVwZGF0ZUlmU1ZHQ3Vyc29ySXNV
c2VkKHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKSkpIC8vIEVsZW1lbnRzIHdpdGggU1ZHIGN1cnNv
cnMgYXJlIG5vdCBhbGxvd2VkIHRvIHNoYXJlIHN0eWxlLgotICAgICAgICAgICAgICAgICAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VW5pcXVlKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmFkZEN1cnNvcihzdHlsZVJlc29sdmVyLT5zdHls
ZUltYWdlKENTU1Byb3BlcnR5Q3Vyc29yLCBpbWFnZSksIGltYWdlLT5ob3RTcG90KCkpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPnVwZGF0ZUlmU1ZHQ3Vyc29ySXNVc2VkKHN0YXRl
LmVsZW1lbnQoKSkpIC8vIEVsZW1lbnRzIHdpdGggU1ZHIGN1cnNvcnMgYXJlIG5vdCBhbGxvd2Vk
IHRvIHNoYXJlIHN0eWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0VW5pcXVlKCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmFkZEN1cnNv
cihTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKHN0YXRlLCBDU1NQcm9wZXJ0eUN1cnNvciwgaW1h
Z2UpLCBpbWFnZS0+aG90U3BvdCgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0t
PmlzUHJpbWl0aXZlVmFsdWUoKSkgewogICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0
ZW0pOwogICAgICAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzSWRlbnQoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNv
cigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0Q3Vyc29yKCpwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsK
ICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLT5pc0lkZW50KCkgJiYgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y3Vyc29yKCkgIT0g
RUN1cnNvcigqcHJpbWl0aXZlVmFsdWUpKQotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5pc0lkZW50KCkgJiYgc3RhdGUuc3R5bGUoKS0+Y3Vyc29yKCkgIT0gRUN1
cnNvcigqcHJpbWl0aXZlVmFsdWUpKQorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMTA3LDcg
KzExMTAsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlUZXh0QWxpZ24gewogcHVi
bGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTExNSwxMyArMTExOCwxMyBAQCBwdWJsaWM6CiAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSAhPSBDU1NWYWx1ZVdlYmtpdE1hdGNoUGFyZW50KQotICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKCpwcmltaXRpdmVWYWx1ZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigpID09
IFRBU1RBUlQpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0QWxp
Z24oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
ID8gTEVGVCA6IFJJR0hUKTsKLSAgICAgICAgZWxzZSBpZiAoc3R5bGVSZXNvbHZlci0+cGFyZW50
U3R5bGUoKS0+dGV4dEFsaWduKCkgPT0gVEFFTkQpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpID8gUklHSFQgOiBMRUZUKTsKKyAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldFRleHRBbGlnbigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICBlbHNlIGlm
IChzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBUQVNUQVJUKQorICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0YXRlLnBhcmVudFN0eWxlKCktPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSA/IExFRlQgOiBSSUdIVCk7CisgICAgICAgIGVsc2UgaWYgKHN0
YXRlLnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigpID09IFRBRU5EKQorICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0YXRlLnBhcmVudFN0eWxlKCktPmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSA/IFJJR0hUIDogTEVGVCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbihzdHlsZVJlc29sdmVyLT5wYXJl
bnRTdHlsZSgpLT50ZXh0QWxpZ24oKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRU
ZXh0QWxpZ24oc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dEFsaWduKCkpOwogICAgIH0KICAgICBz
dGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTExMzIsNyAr
MTEzNSw3IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHREZWNvcmF0aW9uIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEVUZXh0RGVjb3JhdGlvbiB0ID0gUmVuZGVy
U3R5bGU6OmluaXRpYWxUZXh0RGVjb3JhdGlvbigpOwogICAgICAgICBmb3IgKENTU1ZhbHVlTGlz
dEl0ZXJhdG9yIGkodmFsdWUpOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKQEAgLTExNDAs
NyArMTE0Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEFTU0VSVChpdGVtLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpOwogICAgICAgICAgICAgdCB8PSAqc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPihpdGVtKTsKICAgICAgICAgfQotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRUZXh0RGVjb3JhdGlvbih0KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dERlY29y
YXRpb24odCk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxl
cigpCiAgICAgewpAQCAtMTE1MSw3ICsxMTU0LDcgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVBy
b3BlcnR5TGluZUhlaWdodCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFs
dWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTYyLDE1
ICsxMTY1LDE1IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICAgICAgbGluZUhlaWdodCA9IFJlbmRlclN0
eWxlOjppbml0aWFsTGluZUhlaWdodCgpOwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS0+aXNMZW5ndGgoKSkgewotICAgICAgICAgICAgZG91YmxlIG11bHRpcGxpZXIgPSBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgICAgICAgICBpZiAoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+dGV4dFNpemVBZGp1c3QoKSkgewotICAgICAgICAgICAgICAgIGlm
IChGcmFtZSogZnJhbWUgPSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5mcmFtZSgpKQorICAg
ICAgICAgICAgZG91YmxlIG11bHRpcGxpZXIgPSBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29t
KCk7CisgICAgICAgICAgICBpZiAoc3RhdGUuc3R5bGUoKS0+dGV4dFNpemVBZGp1c3QoKSkgewor
ICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBzdGF0ZS5kb2N1bWVudCgpLT5mcmFt
ZSgpKQogICAgICAgICAgICAgICAgICAgICBtdWx0aXBsaWVyICo9IGZyYW1lLT50ZXh0Wm9vbUZh
Y3RvcigpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2
ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5
bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBtdWx0aXBsaWVyKTsKKyAgICAgICAgICAg
IGxpbmVIZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRl
LnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgbXVsdGlwbGllcik7CiAgICAgICAg
IH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKSB7CiAgICAgICAgICAg
ICAvLyBGSVhNRTogcGVyY2VudGFnZSBzaG91bGQgbm90IGJlIHJlc3RyaWN0ZWQgdG8gYW4gaW50
ZWdlciBoZXJlLgotICAgICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0aCgoc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+Zm9udFNpemUoKSAqIHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKSAv
IDEwMCwgRml4ZWQpOworICAgICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0aCgoc3RhdGUuc3R5
bGUoKS0+Zm9udFNpemUoKSAqIHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKSAvIDEwMCwg
Rml4ZWQpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7
CiAgICAgICAgICAgICAvLyBGSVhNRTogbnVtYmVyIGFuZCBwZXJjZW50YWdlIHZhbHVlcyBzaG91
bGQgcHJvZHVjZSB0aGUgc2FtZSB0eXBlIG9mIExlbmd0aCAoaWUuIEZpeGVkIG9yIFBlcmNlbnQp
LgogICAgICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91
YmxlVmFsdWUoKSAqIDEwMC4wLCBQZXJjZW50KTsKQEAgLTExNzgsNyArMTE4MSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJj
ZW50YWdlTGVuZ3RoKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TGluZUhlaWdodChsaW5lSGVpZ2h0KTsKKyAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUhlaWdodChsaW5lSGVpZ2h0KTsKICAgICB9CiAg
ICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xMjY1
LDExICsxMjY4LDExIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIHB1
YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKikgeyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciopIHsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXJTdGF0ZSYpIHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYpIHsgfQorICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
cmVzZXRQYWdlU2l6ZVR5cGUoKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+cmVzZXRQYWdlU2l6
ZVR5cGUoKTsKICAgICAgICAgTGVuZ3RoIHdpZHRoOwogICAgICAgICBMZW5ndGggaGVpZ2h0Owog
ICAgICAgICBQYWdlU2l6ZVR5cGUgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX0FVVE87CkBAIC0x
Mjg1LDggKzEyODgsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgLy8gPGxlbmd0aD57Mn0K
ICAgICAgICAgICAgICAgICBpZiAoIXNlY29uZC0+aXNMZW5ndGgoKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIHdpZHRoID0gZmlyc3QtPmNvbXB1dGVMZW5n
dGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxl
bWVudFN0eWxlKCkpOwotICAgICAgICAgICAgICAgIGhlaWdodCA9IHNlY29uZC0+Y29tcHV0ZUxl
bmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RF
bGVtZW50U3R5bGUoKSk7CisgICAgICAgICAgICAgICAgd2lkdGggPSBmaXJzdC0+Y29tcHV0ZUxl
bmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSk7Cisg
ICAgICAgICAgICAgICAgaGVpZ2h0ID0gc2Vjb25kLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3Rh
dGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgLy8gPHBhZ2Utc2l6ZT4gPG9yaWVudGF0aW9uPgogICAgICAg
ICAgICAgICAgIC8vIFRoZSB2YWx1ZSBvcmRlciBpcyBndWFyYW50ZWVkLiBTZWUgQ1NTUGFyc2Vy
OjpwYXJzZVNpemVQYXJhbWV0ZXIuCkBAIC0xMzA0LDcgKzEzMDcsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAg
ICAvLyA8bGVuZ3RoPgogICAgICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9S
RVNPTFZFRDsKLSAgICAgICAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNv
bHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICB3aWR0aCA9IGhlaWdo
dCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwg
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICAg
ICAgICAgIGNhc2UgMDoKQEAgLTEzMzAsMjkgKzEzMzMsMjkgQEAgcHVibGljOgogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPnNldFBhZ2VTaXplVHlwZShwYWdlU2l6ZVR5cGUpOwotICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRQYWdlU2l6ZShMZW5ndGhTaXplKHdpZHRoLCBoZWln
aHQpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UGFnZVNpemVUeXBlKHBhZ2VTaXplVHlw
ZSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFBhZ2VTaXplKExlbmd0aFNpemUod2lkdGgs
IGhlaWdodCkpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRs
ZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJ
bml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQogfTsKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eVRl
eHRFbXBoYXNpc1N0eWxlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXJT
dGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRU
ZXh0RW1waGFzaXNGaWxsKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNp
c0ZpbGwoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNp
c01hcmsoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzTWFyaygpKTsK
LSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFy
ayhzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNDdXN0b21NYXJrKCkp
OworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKHN0YXRlLnBhcmVu
dFN0eWxlKCktPnRleHRFbXBoYXNpc0ZpbGwoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dFRleHRFbXBoYXNpc01hcmsoc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzTWFyaygp
KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhzdGF0
ZS5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNDdXN0b21NYXJrKCkpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoUmVuZGVyU3R5bGU6Omlu
aXRpYWxUZXh0RW1waGFzaXNGaWxsKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRUZXh0RW1waGFzaXNNYXJrKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzTWFy
aygpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3Vz
dG9tTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7Cisg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoUmVuZGVyU3R5bGU6Omlu
aXRpYWxUZXh0RW1waGFzaXNGaWxsKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0
RW1waGFzaXNNYXJrKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzTWFyaygpKTsKKyAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhSZW5kZXJTdHls
ZTo6aW5pdGlhbFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ewogICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKICAgICAgICAgICAgIENTU1Zh
bHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKQEAgLTEz
NjYsMTEgKzEzNjksMTEgQEAgcHVibGljOgogCiAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKICAg
ICAgICAgICAgICAgICBpZiAodmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVGaWxsZWQgfHwg
dmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVPcGVuKQotICAgICAgICAgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKCp2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoKnZhbHVl
KTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoKnZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyaygqdmFsdWUpOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhh
c2lzQ3VzdG9tTWFyayhudWxsQXRvbSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRU
ZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCkBAIC0xMzc5LDIwICsxMzgyLDIwIEBAIHB1YmxpYzoKICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWx1ZSk7CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1N0cmluZygpKSB7
Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxs
KFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJrQ3VzdG9tKTsKLSAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmso
cHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChUZXh0RW1waGFzaXNGaWxsRmlsbGVkKTsKKyAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFy
a0N1c3RvbSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0
b21NYXJrKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRl
eHRFbXBoYXNpc0N1c3RvbU1hcmsobnVsbEF0b20pOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKTsKIAogICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVGaWxsZWQgfHwgcHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVPcGVuKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKCpwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFRleHRFbXBo
YXNpc01hcmtBdXRvKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNp
c0ZpbGwoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRl
eHRFbXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFya0F1dG8pOwogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChU
ZXh0RW1waGFzaXNGaWxsRmlsbGVkKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldFRleHRFbXBoYXNpc01hcmsoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoVGV4dEVtcGhhc2lzRmlsbEZpbGxlZCk7
CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKCpwcmltaXRp
dmVWYWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE0MTUsMTQgKzE0MTgsMTggQEAgcHVi
bGljOgogICAgIHN0YXRpYyBib29sIHRlc3QoY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24pIHsg
cmV0dXJuIChhbmltYXRpb24tPip0ZXN0RnVuY3Rpb24pKCk7IH0KICAgICBzdGF0aWMgdm9pZCBj
bGVhcihBbmltYXRpb24qIGFuaW1hdGlvbikgeyAoYW5pbWF0aW9uLT4qY2xlYXJGdW5jdGlvbiko
KTsgfQogICAgIHN0YXRpYyBUIGluaXRpYWwoKSB7IHJldHVybiAoKmluaXRpYWxGdW5jdGlvbiko
KTsgfQotICAgIHN0YXRpYyB2b2lkIG1hcChTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBB
bmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdHlsZVJlc29sdmVyLT5z
dHlsZU1hcCgpLT4qbWFwRnVuY3Rpb24pKGFuaW1hdGlvbiwgdmFsdWUpOyB9CisgICAgc3RhdGlj
IHZvaWQgbWFwKFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIEFuaW1hdGlvbiogYW5pbWF0aW9u
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBDU1NUb1N0eWxlTWFwIHN0eWxlTWFw
KHN0YXRlKTsKKyAgICAgICAgKHN0eWxlTWFwLiptYXBGdW5jdGlvbikoYW5pbWF0aW9uLCB2YWx1
ZSk7CisgICAgfQogICAgIHN0YXRpYyBBbmltYXRpb25MaXN0KiBhY2Nlc3NBbmltYXRpb25zKFJl
bmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gKHN0eWxlLT4qYW5pbWF0aW9uR2V0dGVyRnVuY3Rp
b24pKCk7IH0KICAgICBzdGF0aWMgY29uc3QgQW5pbWF0aW9uTGlzdCogYW5pbWF0aW9ucyhSZW5k
ZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+KmltbXV0YWJsZUFuaW1hdGlvbkdldHRl
ckZ1bmN0aW9uKSgpOyB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3Rh
dGUpCiAgICAgewotICAgICAgICBBbmltYXRpb25MaXN0KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9u
cyhzdHlsZVJlc29sdmVyLT5zdHlsZSgpKTsKLSAgICAgICAgY29uc3QgQW5pbWF0aW9uTGlzdCog
cGFyZW50TGlzdCA9IGFuaW1hdGlvbnMoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSk7Cisg
ICAgICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0YXRlLnN0eWxl
KCkpOworICAgICAgICBjb25zdCBBbmltYXRpb25MaXN0KiBwYXJlbnRMaXN0ID0gYW5pbWF0aW9u
cyhzdGF0ZS5wYXJlbnRTdHlsZSgpKTsKICAgICAgICAgc2l6ZV90IGkgPSAwLCBwYXJlbnRTaXpl
ID0gcGFyZW50TGlzdCA/IHBhcmVudExpc3QtPnNpemUoKSA6IDA7CiAgICAgICAgIGZvciAoIDsg
aSA8IHBhcmVudFNpemUgJiYgdGVzdChwYXJlbnRMaXN0LT5hbmltYXRpb24oaSkpOyArK2kpIHsK
ICAgICAgICAgICAgIGlmIChsaXN0LT5zaXplKCkgPD0gaSkKQEAgLTE0MzYsOSArMTQ0Myw5IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGNsZWFyKGxpc3QtPmFuaW1hdGlvbihpKSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlclN0YXRl
JiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmlt
YXRpb25zKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpOworICAgICAgICBBbmltYXRpb25MaXN0KiBs
aXN0ID0gYWNjZXNzQW5pbWF0aW9ucyhzdGF0ZS5zdHlsZSgpKTsKICAgICAgICAgaWYgKGxpc3Qt
PmlzRW1wdHkoKSkKICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChBbmltYXRpb246OmNyZWF0ZSgp
KTsKICAgICAgICAgc2V0VmFsdWUobGlzdC0+YW5pbWF0aW9uKDApLCBpbml0aWFsKCkpOwpAQCAt
MTQ0OCwyMiArMTQ1NSwyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjbGVhcihsaXN0LT5hbmlt
YXRpb24oaSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlclN0YXRl
JiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgQW5pbWF0aW9uTGlzdCog
bGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSk7CisgICAgICAg
IEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0YXRlLnN0eWxlKCkpOwog
ICAgICAgICBzaXplX3QgY2hpbGRJbmRleCA9IDA7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1
ZUxpc3QoKSkgewogICAgICAgICAgICAgLyogV2FsayBlYWNoIHZhbHVlIGFuZCBwdXQgaXQgaW50
byBhbiBhbmltYXRpb24sIGNyZWF0aW5nIG5ldyBhbmltYXRpb25zIGFzIG5lZWRlZC4gKi8KICAg
ICAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUo
KTsgaS5hZHZhbmNlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGRJbmRleCA8PSBsaXN0
LT5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChBbmltYXRpb246OmNy
ZWF0ZSgpKTsKLSAgICAgICAgICAgICAgICBtYXAoc3R5bGVSZXNvbHZlciwgbGlzdC0+YW5pbWF0
aW9uKGNoaWxkSW5kZXgpLCBpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1hcChzdGF0ZSwg
bGlzdC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCBpLnZhbHVlKCkpOwogICAgICAgICAgICAgICAg
ICsrY2hpbGRJbmRleDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGlmIChsaXN0LT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEFu
aW1hdGlvbjo6Y3JlYXRlKCkpOwotICAgICAgICAgICAgbWFwKHN0eWxlUmVzb2x2ZXIsIGxpc3Qt
PmFuaW1hdGlvbihjaGlsZEluZGV4KSwgdmFsdWUpOworICAgICAgICAgICAgbWFwKHN0YXRlLCBs
aXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksIHZhbHVlKTsKICAgICAgICAgICAgIGNoaWxkSW5k
ZXggPSAxOwogICAgICAgICB9CiAgICAgICAgIGZvciAoIDsgY2hpbGRJbmRleCA8IGxpc3QtPnNp
emUoKTsgKytjaGlsZEluZGV4KSB7CkBAIC0xNDc3LDIyICsxNDg0LDIyIEBAIHB1YmxpYzoKIAog
Y2xhc3MgQXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSkKICAgICB7
Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVy
U3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpz
ZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlh
bE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxl
UmVzb2x2ZXIpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8RUJvcmRlclN0eWxl
LCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6
OnNldE91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3Jk
ZXJTdHlsZT46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwor
ICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8T3V0bGluZUlzQXV0bywgJlJlbmRlclN0
eWxlOjpvdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6c2V0
T3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxP
dXRsaW5lU3R5bGVJc0F1dG8+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7
CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFQm9yZGVyU3R5bGUsICZSZW5kZXJT
dHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGlu
ZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6
YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOwogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUpCiAg
ICAgewotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8T3V0bGluZUlzQXV0bywgJlJl
bmRlclN0eWxlOjpvdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHls
ZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Omlu
aXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBz
dHlsZVJlc29sdmVyKTsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEVCb3JkZXJT
dHlsZSwgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0
eWxlOjpzZXRPdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjppbml0aWFs
Qm9yZGVyU3R5bGU+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVy
KTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPE91dGxpbmVJc0F1dG8sICZSZW5k
ZXJTdHlsZTo6b3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6
OnNldE91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjppbml0
aWFsT3V0bGluZVN0eWxlSXNBdXRvPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3Rh
dGUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8RUJvcmRlclN0eWxlLCAmUmVu
ZGVyU3R5bGU6Om91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldE91
dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHls
ZT46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyU3RhdGUmIHN0
YXRlLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVs
dDxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGlu
ZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1
dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5VmFsdWUo
cHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBBcHBseVByb3BlcnR5
RGVmYXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVy
U3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5k
ZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdHls
ZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0PE91dGxpbmVJ
c0F1dG8sICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAm
UmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRl
clN0eWxlOjppbml0aWFsT3V0bGluZVN0eWxlSXNBdXRvPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlE
LCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5
bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHls
ZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJv
cmRlclN0eWxlPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOwogICAgIH0K
IAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFBy
b3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFw
cGx5VmFsdWUpOyB9CkBAIC0xNTAwLDcgKzE1MDcsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5
UHJvcGVydHlSZXNpemUgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVl
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
clN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTUxMiwxMyAr
MTUxOSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgY2FzZSBDU1NWYWx1ZUF1dG86Ci0gICAgICAgICAgICBpZiAoU2V0dGluZ3MqIHNl
dHRpbmdzID0gc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKSkKKyAgICAgICAg
ICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBzdGF0ZS5kb2N1bWVudCgpLT5zZXR0aW5ncygp
KQogICAgICAgICAgICAgICAgIHIgPSBzZXR0aW5ncy0+dGV4dEFyZWFzQXJlUmVzaXphYmxlKCkg
PyBSRVNJWkVfQk9USCA6IFJFU0laRV9OT05FOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICByID0gKnByaW1pdGl2ZVZhbHVlOwogICAgICAgICB9Ci0g
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFJlc2l6ZShyKTsKKyAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0UmVzaXplKHIpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhh
bmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC0xNTMwLDcgKzE1MzcsNyBAQCBwdWJsaWM6CiAKIGNs
YXNzIEFwcGx5UHJvcGVydHlWZXJ0aWNhbEFsaWduIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTE1MzgsOSArMTU0NSw5IEBAIHB1YmxpYzoKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1
ZSk7CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKQotICAgICAgICAg
ICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ24oKnByaW1p
dGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZS5zdHlsZSgpLT5zZXRWZXJ0aWNh
bEFsaWduKCpwcmltaXRpdmVWYWx1ZSk7CiAKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0VmVydGljYWxBbGlnbkxlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3Ro
PEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRD
b252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4oc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
VmVydGljYWxBbGlnbkxlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVk
SW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJz
aW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUu
cm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKTsKICAg
ICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtMTU1
MiwzMiArMTU1OSwzMiBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlBc3BlY3RSYXRp
byB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlKQog
ICAgIHsKLSAgICAgICAgaWYgKCFzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5oYXNBc3Bl
Y3RSYXRpbygpKQorICAgICAgICBpZiAoIXN0YXRlLnBhcmVudFN0eWxlKCktPmhhc0FzcGVjdFJh
dGlvKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldEhhc0FzcGVjdFJhdGlvKHRydWUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxl
KCktPmFzcGVjdFJhdGlvRGVub21pbmF0b3IoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldEFzcGVjdFJhdGlvTnVtZXJhdG9yKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxl
KCktPmFzcGVjdFJhdGlvTnVtZXJhdG9yKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRI
YXNBc3BlY3RSYXRpbyh0cnVlKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0QXNwZWN0UmF0
aW9EZW5vbWluYXRvcihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb0Rlbm9taW5hdG9y
KCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihzdGF0
ZS5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb051bWVyYXRvcigpKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUpCiAgICAgewotICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyhSZW5kZXJTdHlsZTo6aW5pdGlh
bEhhc0FzcGVjdFJhdGlvKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRB
c3BlY3RSYXRpb0Rlbm9taW5hdG9yKFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9EZW5v
bWluYXRvcigpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0
aW9OdW1lcmF0b3IoUmVuZGVyU3R5bGU6OmluaXRpYWxBc3BlY3RSYXRpb051bWVyYXRvcigpKTsK
KyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8oUmVuZGVyU3R5bGU6Omlu
aXRpYWxIYXNBc3BlY3RSYXRpbygpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0QXNwZWN0
UmF0aW9EZW5vbWluYXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlvRGVub21pbmF0
b3IoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEFzcGVjdFJhdGlvTnVtZXJhdG9yKFJl
bmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9OdW1lcmF0b3IoKSk7CiAgICAgfQogCi0gICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc0FzcGVjdFJhdGlvVmFsdWUoKSkgewotICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8oZmFsc2Up
OworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8oZmFsc2UpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIENTU0FzcGVjdFJhdGlvVmFs
dWUqIGFzcGVjdFJhdGlvVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NBc3BlY3RSYXRpb1ZhbHVlKj4o
dmFsdWUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRp
byh0cnVlKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9E
ZW5vbWluYXRvcihhc3BlY3RSYXRpb1ZhbHVlLT5kZW5vbWluYXRvclZhbHVlKCkpOwotICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihhc3BlY3RS
YXRpb1ZhbHVlLT5udW1lcmF0b3JWYWx1ZSgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
SGFzQXNwZWN0UmF0aW8odHJ1ZSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEFzcGVjdFJh
dGlvRGVub21pbmF0b3IoYXNwZWN0UmF0aW9WYWx1ZS0+ZGVub21pbmF0b3JWYWx1ZSgpKTsKKyAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3IoYXNwZWN0UmF0aW9W
YWx1ZS0+bnVtZXJhdG9yVmFsdWUoKSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFu
ZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTE1ODgsNDggKzE1OTUsNDggQEAgcHVibGljOgogCiBj
bGFzcyBBcHBseVByb3BlcnR5Wm9vbSB7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHJlc2V0
RWZmZWN0aXZlWm9vbShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2
b2lkIHJlc2V0RWZmZWN0aXZlWm9vbShTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlKQogICAgIHsK
ICAgICAgICAgLy8gUmVzZXQgdGhlIHpvb20gaW4gZWZmZWN0LiBUaGlzIGFsbG93cyB0aGUgc2V0
Wm9vbSBtZXRob2QgdG8gYWNjdXJhdGVseSBjb21wdXRlIGEgbmV3IHpvb20gaW4gZWZmZWN0Lgot
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXItPnBh
cmVudFN0eWxlKCkgPyBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5lZmZlY3RpdmVab29t
KCkgOiBSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAgICAgIHN0YXRlLnNldEVmZmVj
dGl2ZVpvb20oc3RhdGUucGFyZW50U3R5bGUoKSA/IHN0YXRlLnBhcmVudFN0eWxlKCktPmVmZmVj
dGl2ZVpvb20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKICAgICB9CiAKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUpCiAgICAgewotICAg
ICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIHN0eWxlUmVz
b2x2ZXItPnNldFpvb20oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+em9vbSgpKTsKKyAg
ICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0YXRlKTsKKyAgICAgICAgc3RhdGUuc2V0Wm9vbShz
dGF0ZS5wYXJlbnRTdHlsZSgpLT56b29tKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIHJlc2V0RWZmZWN0aXZlWm9v
bShzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9vbShSZW5kZXJT
dHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdGF0ZSk7
CisgICAgICAgIHN0YXRlLnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpOwogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAogICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKLSAgICAgICAgICAgIHJlc2V0
RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOworICAgICAgICAgICAgcmVzZXRF
ZmZlY3RpdmVab29tKHN0YXRlKTsKKyAgICAgICAgICAgIHN0YXRlLnNldFpvb20oUmVuZGVyU3R5
bGU6OmluaXRpYWxab29tKCkpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlUmVzZXQpIHsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnNldEVmZmVjdGl2ZVpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwotICAgICAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7Cisg
ICAgICAgICAgICBzdGF0ZS5zZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9v
bSgpKTsKKyAgICAgICAgICAgIHN0YXRlLnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29t
KCkpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENT
U1ZhbHVlRG9jdW1lbnQpIHsKLSAgICAgICAgICAgIGZsb2F0IGRvY1pvb20gPSBzdHlsZVJlc29s
dmVyLT5yb290RWxlbWVudFN0eWxlKCkgPyBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxl
KCktPnpvb20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpOwotICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c2V0RWZmZWN0aXZlWm9vbShkb2Nab29tKTsKLSAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnNldFpvb20oZG9jWm9vbSk7CisgICAgICAgICAgICBmbG9hdCBkb2Nab29tID0g
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpID8gc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLT56b29t
KCkgOiBSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKTsKKyAgICAgICAgICAgIHN0YXRlLnNldEVm
ZmVjdGl2ZVpvb20oZG9jWm9vbSk7CisgICAgICAgICAgICBzdGF0ZS5zZXRab29tKGRvY1pvb20p
OwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkgewot
ICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOworICAgICAgICAg
ICAgcmVzZXRFZmZlY3RpdmVab29tKHN0YXRlKTsKICAgICAgICAgICAgIGlmIChmbG9hdCBwZXJj
ZW50ID0gcHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSkKLSAgICAgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zZXRab29tKHBlcmNlbnQgLyAxMDAuMGYpOworICAgICAgICAgICAgICAg
IHN0YXRlLnNldFpvb20ocGVyY2VudCAvIDEwMC4wZik7CiAgICAgICAgIH0gZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9v
bShzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdGF0ZSk7
CiAgICAgICAgICAgICBpZiAoZmxvYXQgbnVtYmVyID0gcHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0
VmFsdWUoKSkKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKG51bWJlcik7
CisgICAgICAgICAgICAgICAgc3RhdGUuc2V0Wm9vbShudW1iZXIpOwogICAgICAgICB9CiAgICAg
fQogCkBAIC0xNjQxLDQyICsxNjQ4LDQyIEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0
eURpc3BsYXkgewogcHJpdmF0ZToKLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZERpc3Bs
YXlWYWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBFRGlzcGxheSBkaXNwbGF5UHJv
cGVydHlWYWx1ZSkKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZERpc3BsYXlWYWx1ZShj
b25zdCBTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlLCBFRGlzcGxheSBkaXNwbGF5UHJvcGVydHlW
YWx1ZSkKICAgICB7CiAjaWYgRU5BQkxFKFNWRykKLSAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXIt
PmVsZW1lbnQoKSAmJiBzdHlsZVJlc29sdmVyLT5lbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpICYm
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnN0eWxlVHlwZSgpID09IE5PUFNFVURPKQorICAgICAg
ICBpZiAoc3RhdGUuZWxlbWVudCgpICYmIHN0YXRlLmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkg
JiYgc3RhdGUuc3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCiAgICAgICAgICAgICBy
ZXR1cm4gKGRpc3BsYXlQcm9wZXJ0eVZhbHVlID09IElOTElORSB8fCBkaXNwbGF5UHJvcGVydHlW
YWx1ZSA9PSBCTE9DSyB8fCBkaXNwbGF5UHJvcGVydHlWYWx1ZSA9PSBOT05FKTsKICNlbHNlCi0g
ICAgICAgIFVOVVNFRF9QQVJBTShzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICAgICAgVU5VU0VEX1BBUkFNKGRpc3BsYXlQcm9wZXJ0eVZhbHVlKTsKICNl
bmRpZgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgRURpc3BsYXkgZGlz
cGxheSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmRpc3BsYXkoKTsKLSAgICAgICAg
aWYgKCFpc1ZhbGlkRGlzcGxheVZhbHVlKHN0eWxlUmVzb2x2ZXIsIGRpc3BsYXkpKQorICAgICAg
ICBFRGlzcGxheSBkaXNwbGF5ID0gc3RhdGUucGFyZW50U3R5bGUoKS0+ZGlzcGxheSgpOworICAg
ICAgICBpZiAoIWlzVmFsaWREaXNwbGF5VmFsdWUoc3RhdGUsIGRpc3BsYXkpKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXREaXNwbGF5KGRp
c3BsYXkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREaXNwbGF5KGRpc3BsYXkpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFs
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSkKICAgICB7Ci0g
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldERpc3BsYXkoUmVuZGVyU3R5bGU6Omlu
aXRpYWxEaXNwbGF5KCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREaXNwbGF5KFJlbmRl
clN0eWxlOjppbml0aWFsRGlzcGxheSgpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICBFRGlzcGxheSBkaXNwbGF5ID0gKnN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odmFsdWUpOwogCi0gICAgICAgIGlmICghaXNWYWxpZERpc3BsYXlWYWx1ZShzdHlsZVJlc29s
dmVyLCBkaXNwbGF5KSkKKyAgICAgICAgaWYgKCFpc1ZhbGlkRGlzcGxheVZhbHVlKHN0YXRlLCBk
aXNwbGF5KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXREaXNwbGF5KGRpc3BsYXkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRE
aXNwbGF5KGRpc3BsYXkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3Jl
YXRlSGFuZGxlcigpCkBAIC0xNjg5LDIxICsxNjk2LDIxIEBAIHRlbXBsYXRlIDxDbGlwUGF0aE9w
ZXJhdGlvbiogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJl
bmRlCiBjbGFzcyBBcHBseVByb3BlcnR5Q2xpcFBhdGggewogcHVibGljOgogICAgIHN0YXRpYyB2
b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgUGFzc1JlZlB0cjxDbGlwUGF0aE9wZXJh
dGlvbj4gdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgIHsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLCAwKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5z
dHlsZSgpLCAwKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1NoYXBl
KCkpIHsKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBT
aGFwZUNsaXBQYXRoT3BlcmF0aW9uOjpjcmVhdGUoYmFzaWNTaGFwZUZvclZhbHVlKHN0eWxlUmVz
b2x2ZXIsIHByaW1pdGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpKSk7CisgICAgICAgICAgICAg
ICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgU2hhcGVDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRl
KGJhc2ljU2hhcGVGb3JWYWx1ZShzdGF0ZSwgcHJpbWl0aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUo
KSkpKTsKICAgICAgICAgICAgIH0KICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICAgICAgZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1VSSSkgewogICAgICAgICAgICAgICAgIFN0cmluZyBjc3NVUkxWYWx1ZSA9IHByaW1pdGl2
ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwotICAgICAgICAgICAgICAgIEtVUkwgdXJsID0gc3R5
bGVSZXNvbHZlci0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoY3NzVVJMVmFsdWUpOworICAgICAg
ICAgICAgICAgIEtVUkwgdXJsID0gc3RhdGUuZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoY3NzVVJM
VmFsdWUpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCBkb2Vzbid0IHdvcmsgd2l0aCBm
b3J3YXJkIG9yIGV4dGVybmFsIFNWRyByZWZlcmVuY2VzIChzZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNDA1KQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIFJlZmVyZW5jZUNsaXBQYXRoT3BlcmF0aW9uOjpjcmVhdGUo
Y3NzVVJMVmFsdWUsIHVybC5mcmFnbWVudElkZW50aWZpZXIoKSkpOworICAgICAgICAgICAgICAg
IHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIFJlZmVyZW5jZUNsaXBQYXRoT3BlcmF0aW9uOjpjcmVh
dGUoY3NzVVJMVmFsdWUsIHVybC5mcmFnbWVudElkZW50aWZpZXIoKSkpOwogICAgICAgICAgICAg
fQogI2VuZGlmCiAgICAgICAgIH0KQEAgLTE3MjAsMTggKzE3MjcsMTggQEAgdGVtcGxhdGUgPEV4
Y2x1c2lvblNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0
LCB2b2lkIChSZW4KIGNsYXNzIEFwcGx5UHJvcGVydHlFeGNsdXNpb25TaGFwZSB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBQYXNzUmVmUHRy
PEV4Y2x1c2lvblNoYXBlVmFsdWU+IHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2
YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKSB7CiAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICAg
ICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgMCk7CisgICAgICAgICAgICAgICAg
c2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgMCk7CiAgICAgICAgICAgICAvLyBGSVhNRSBCdWcgMTAy
NTcxOiBMYXlvdXQgZm9yIHRoZSB2YWx1ZSAnb3V0c2lkZS1zaGFwZScgaXMgbm90IHlldCBpbXBs
ZW1lbnRlZAogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVPdXRzaWRlU2hhcGUpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgRXhjbHVzaW9uU2hhcGVWYWx1ZTo6Y3JlYXRlT3V0c2lkZVZhbHVl
KCkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIEV4Y2x1c2lvblNo
YXBlVmFsdWU6OmNyZWF0ZU91dHNpZGVWYWx1ZSgpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5pc1NoYXBlKCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8RXhjbHVz
aW9uU2hhcGVWYWx1ZT4gc2hhcGUgPSBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZh
bHVlKGJhc2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJlc29sdmVyLCBwcmltaXRpdmVWYWx1ZS0+Z2V0
U2hhcGVWYWx1ZSgpKSk7Ci0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgc2hhcGUucmVsZWFzZSgpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8RXhjbHVz
aW9uU2hhcGVWYWx1ZT4gc2hhcGUgPSBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVTaGFwZVZh
bHVlKGJhc2ljU2hhcGVGb3JWYWx1ZShzdGF0ZSwgcHJpbWl0aXZlVmFsdWUtPmdldFNoYXBlVmFs
dWUoKSkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIHNoYXBlLnJl
bGVhc2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xNzQ2LDIxICsx
NzUzLDIxIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1JFU09MVVRJT04pCiBjbGFz
cyBBcHBseVByb3BlcnR5SW1hZ2VSZXNvbHV0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlKQogICAgIHsK
LSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNvdXJjZSwg
JlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJj
ZSwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlv
blNvdXJjZSwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlPjo6YXBw
bHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIEFwcGx5
UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6Omlt
YWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6c2V0
SW1hZ2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjpp
bml0aWFsSW1hZ2VSZXNvbHV0aW9uU25hcD46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQs
IHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8ZmxvYXQs
ICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRJ
bWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRp
b24+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAg
ICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRl
clN0eWxlOjppbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJl
bmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJj
ZSwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlPjo6YXBwbHlJbmhl
cml0VmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVs
dEJhc2U8SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25T
bmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlv
blNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVz
b2x1dGlvblNuYXA+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAg
ICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxmbG9hdCwgJlJlbmRlclN0eWxlOjppbWFnZVJl
c29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvbiwgZmxvYXQs
ICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvbj46OmFwcGx5SW5oZXJpdFZhbHVl
KHByb3BlcnR5SUQsIHN0YXRlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRp
YWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlKQogICAgIHsKLSAgICAgICAgQXBw
bHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxl
OjppbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0
eWxlOjpzZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJl
bmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlPjo6YXBwbHlJbml0aWFsVmFs
dWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZh
dWx0QmFzZTxJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlv
blNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0
aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VS
ZXNvbHV0aW9uU25hcD46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2
ZXIpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8ZmxvYXQsICZSZW5kZXJTdHls
ZTo6aW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRp
b24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24+OjphcHBseUlu
aXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgQXBwbHlQcm9w
ZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbWFn
ZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjpz
ZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0
eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlPjo6YXBwbHlJbml0aWFsVmFsdWUocHJv
cGVydHlJRCwgc3RhdGUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VS
ZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJl
c29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdl
UmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNuYXA+
OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIEFwcGx5UHJv
cGVydHlEZWZhdWx0QmFzZTxmbG9hdCwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb24sIGZs
b2F0LCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHls
ZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvbj46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQs
IHN0YXRlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYg
c3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzVmFs
dWVMaXN0KCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNzgwLDkgKzE3ODcsOSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbiA9IHByaW1p
dGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQUFgpOwog
ICAgICAgICB9Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEltYWdlUmVzb2x1
dGlvblNvdXJjZShzb3VyY2UpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRJ
bWFnZVJlc29sdXRpb25TbmFwKHNuYXApOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRJbWFnZVJlc29sdXRpb24ocmVzb2x1dGlvbik7CisgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldEltYWdlUmVzb2x1dGlvblNvdXJjZShzb3VyY2UpOworICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRJbWFnZVJlc29sdXRpb25TbmFwKHNuYXApOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRJbWFnZVJlc29sdXRpb24ocmVzb2x1dGlvbik7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3Bl
cnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaAppbmRl
eCA0ZmZlODUyMzRjMTNkMGZiYjE0NDZlMDY4ODFjOWY3ZmVmYzcwNjdiLi41YzlhMzQzOThkODVi
MmE4MGE2MTMwYjk4OGNiOTIxMWFkZjc3ZWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5o
CkBAIC0zNCwxNyArMzQsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ1NTVmFsdWU7
CiBjbGFzcyBTdHlsZUJ1aWxkZXI7CiBjbGFzcyBTdHlsZVJlc29sdmVyOworY2xhc3MgU3R5bGVS
ZXNvbHZlclN0YXRlOwogCiBjbGFzcyBQcm9wZXJ0eUhhbmRsZXIgewogcHVibGljOgotICAgIHR5
cGVkZWYgdm9pZCAoKkluaGVyaXRGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciopOwotICAgIHR5cGVkZWYgdm9pZCAoKkluaXRpYWxGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciopOwotICAgIHR5cGVkZWYgdm9pZCAoKkFwcGx5RnVuY3Rpb24pKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqLCBDU1NWYWx1ZSopOworICAgIHR5cGVkZWYgdm9pZCAo
KkluaGVyaXRGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlclN0YXRlJik7Cisg
ICAgdHlwZWRlZiB2b2lkICgqSW5pdGlhbEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyU3RhdGUmKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpBcHBseUZ1bmN0aW9uKShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyU3RhdGUmLCBDU1NWYWx1ZSopOwogICAgIFByb3BlcnR5SGFu
ZGxlcigpIDogbV9pbmhlcml0KDApLCBtX2luaXRpYWwoMCksIG1fYXBwbHkoMCkgeyB9CiAgICAg
UHJvcGVydHlIYW5kbGVyKEluaGVyaXRGdW5jdGlvbiBpbmhlcml0LCBJbml0aWFsRnVuY3Rpb24g
aW5pdGlhbCwgQXBwbHlGdW5jdGlvbiBhcHBseSkgOiBtX2luaGVyaXQoaW5oZXJpdCksIG1faW5p
dGlhbChpbml0aWFsKSwgbV9hcHBseShhcHBseSkgeyB9Ci0gICAgdm9pZCBhcHBseUluaGVyaXRW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIpIGNvbnN0IHsgQVNTRVJUKG1faW5oZXJpdCk7ICgqbV9pbmhlcml0KShwcm9wZXJ0eUlELCBz
dHlsZVJlc29sdmVyKTsgfQotICAgIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKSBjb25zdCB7IEFTU0VS
VChtX2luaXRpYWwpOyAoKm1faW5pdGlhbCkocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7IH0K
LSAgICB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpIGNvbnN0IHsgQVNTRVJUKG1fYXBw
bHkpOyAoKm1fYXBwbHkpKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsgfQorICAg
IHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyU3RhdGUmIHN0YXRlKSBjb25zdCB7IEFTU0VSVChtX2luaGVyaXQpOyAoKm1faW5oZXJp
dCkocHJvcGVydHlJRCwgc3RhdGUpOyB9CisgICAgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUpIGNvbnN0IHsg
QVNTRVJUKG1faW5pdGlhbCk7ICgqbV9pbml0aWFsKShwcm9wZXJ0eUlELCBzdGF0ZSk7IH0KKyAg
ICB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpIGNvbnN0IHsgQVNTRVJUKG1fYXBwbHkpOyAo
Km1fYXBwbHkpKHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1ZSk7IH0KICAgICBib29sIGlzVmFsaWQo
KSBjb25zdCB7IHJldHVybiBtX2luaGVyaXQgJiYgbV9pbml0aWFsICYmIG1fYXBwbHk7IH0KICAg
ICBJbmhlcml0RnVuY3Rpb24gaW5oZXJpdEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbmhl
cml0OyB9CiAgICAgSW5pdGlhbEZ1bmN0aW9uIGluaXRpYWxGdW5jdGlvbigpIHsgcmV0dXJuIG1f
aW5pdGlhbDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDY4N2IzNjkz
MTEyZTIxNzQ0MDNmYzg3NTdhMTcwMGVkOGI0YTkzOTYuLmExZjQwNDc2ODFhNzZhMzVkMmRiNTgw
ZmFmNTBhODUyYTgzMjEyN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAg
LTQ0LDcgKzQ0LDYgQEAKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCiAj
aW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1JlZmxlY3RWYWx1ZS5o
IgotI2luY2x1ZGUgIkNTU1J1bGVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIKICNp
bmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKQEAg
LTEyMiw2ICsxMjEsNyBAQAogI2luY2x1ZGUgIlN0eWxlUnVsZUltcG9ydC5oIgogI2luY2x1ZGUg
IlN0eWxlU2hlZXRDb250ZW50cy5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCisjaW5j
bHVkZSAiU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bi5oIgpAQCAtMjAwLDE0ICsyMDAsMTQgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAog
I2RlZmluZSBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJbmhlcml0KSB7IFwK
LSAgICBtX3N0eWxlLT5zZXQjI1Byb3AobV9wYXJlbnRTdHlsZS0+cHJvcCgpKTsgXAorICAgIHN0
YXRlLm1fc3R5bGUtPnNldCMjUHJvcChzdGF0ZS5tX3BhcmVudFN0eWxlLT5wcm9wKCkpOyBcCiAg
ICAgcmV0dXJuOyBcCiB9CiAKICNkZWZpbmUgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwocHJv
cCwgUHJvcCkgXAogSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAogaWYgKGlzSW5pdGlhbCkg
eyBcCi0gICAgbV9zdHlsZS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkp
OyBcCisgICAgc3RhdGUubV9zdHlsZS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQ
cm9wKCkpOyBcCiAgICAgcmV0dXJuOyBcCiB9CiAKQEAgLTI2OSwzNSArMjY5LDE2IEBAIHN0YXRp
YyBTdHlsZVByb3BlcnR5U2V0KiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkKIAogCiBTdHlsZVJl
c29sdmVyOjpTdHlsZVJlc29sdmVyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBtYXRjaEF1dGhv
ckFuZFVzZXJTdHlsZXMpCi0gICAgOiBtX2hhc1VBQXBwZWFyYW5jZShmYWxzZSkKLSAgICAsIG1f
YmFja2dyb3VuZERhdGEoQmFja2dyb3VuZEZpbGxMYXllcikKLSAgICAsIG1fbWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwKDApCisgICAgOiBtX21hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCgwKQogICAgICwgbV9tYXRjaGVkUHJv
cGVydGllc0NhY2hlU3dlZXBUaW1lcih0aGlzLCAmU3R5bGVSZXNvbHZlcjo6c3dlZXBNYXRjaGVk
UHJvcGVydGllc0NhY2hlKQogICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fc2Vs
ZWN0b3JDaGVja2VyKGRvY3VtZW50KQotICAgICwgbV9wYXJlbnRTdHlsZSgwKQotICAgICwgbV9y
b290RWxlbWVudFN0eWxlKDApCi0gICAgLCBtX2VsZW1lbnQoMCkKLSAgICAsIG1fc3R5bGVkRWxl
bWVudCgwKQotICAgICwgbV9yZWdpb25Gb3JTdHlsaW5nKDApCi0gICAgLCBtX2VsZW1lbnRMaW5r
U3RhdGUoTm90SW5zaWRlTGluaykKLSAgICAsIG1fcGFyZW50Tm9kZSgwKQotICAgICwgbV9saW5l
SGVpZ2h0VmFsdWUoMCkKLSAgICAsIG1fZm9udERpcnR5KGZhbHNlKQogICAgICwgbV9tYXRjaEF1
dGhvckFuZFVzZXJTdHlsZXMobWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICwgbV9zYW1l
T3JpZ2luT25seShmYWxzZSkKLSAgICAsIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KGZh
bHNlKQogICAgICwgbV9mb250U2VsZWN0b3IoQ1NTRm9udFNlbGVjdG9yOjpjcmVhdGUoZG9jdW1l
bnQpKQogI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCiAgICAgLCBtX3ZpZXdwb3J0
U3R5bGVSZXNvbHZlcihWaWV3cG9ydFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZShkb2N1bWVudCkpCiAj
ZW5kaWYKLSAgICAsIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpCi0gICAgLCBt
X2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpCiAgICAgLCBtX3N0eWxlQnVp
bGRlcihTdHlsZUJ1aWxkZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpKQotI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKLSAgICAsIG1faGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpCi0jZW5kaWYKLSAgICAs
IG1fc3R5bGVNYXAodGhpcykKIHsKICAgICBFbGVtZW50KiByb290ID0gZG9jdW1lbnQtPmRvY3Vt
ZW50RWxlbWVudCgpOwogCkBAIC02NTcsMjYgKzYzOCwyNyBAQCBpbmxpbmUgYm9vbCBNYXRjaGlu
Z1VBUnVsZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQogCiBib29sIE1hdGNoaW5nVUFSdWxl
c1Njb3BlOjptX21hdGNoaW5nVUFSdWxlcyA9IGZhbHNlOwogCi12b2lkIFN0eWxlUmVzb2x2ZXI6
OmNvbGxlY3RNYXRjaGluZ1J1bGVzKGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBS
dWxlUmFuZ2UmIHJ1bGVSYW5nZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5n
UnVsZXMoU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSwgY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRj
aFJlcXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQogewogICAgIEFTU0VSVChtYXRjaFJlcXVl
c3QucnVsZVNldCk7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCk7CisgICAgQVNTRVJUKHN0YXRlLm1f
ZWxlbWVudCk7CiAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHBzZXVkb0lkID0gbV9lbGVtZW50
LT5zaGFkb3dQc2V1ZG9JZCgpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50
KCk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwc2V1ZG9JZCA9IGVsZW1lbnQtPnNoYWRvd1Bz
ZXVkb0lkKCk7CiAgICAgaWYgKCFwc2V1ZG9JZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgQVNTRVJU
KG1fc3R5bGVkRWxlbWVudCk7Ci0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCht
YXRjaFJlcXVlc3QucnVsZVNldC0+c2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKHBzZXVkb0lkLmlt
cGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICAgICAgQVNTRVJUKHN0YXRlLm1f
c3R5bGVkRWxlbWVudCk7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChzdGF0
ZSwgbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPnNoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyhwc2V1ZG9J
ZC5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CiAgICAgfQogCiAjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQotICAgIGlmIChtX2VsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpICYmIHRv
V2ViVlRURWxlbWVudChtX2VsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpKQotICAgICAgICBjb2xs
ZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmN1ZVBzZXVkb1J1
bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBpZiAoZWxlbWVudC0+aXNXZWJW
VFRFbGVtZW50KCkgJiYgdG9XZWJWVFRFbGVtZW50KGVsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgp
KQorICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qoc3RhdGUsIG1hdGNoUmVxdWVz
dC5ydWxlU2V0LT5jdWVQc2V1ZG9SdWxlcygpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CiAj
ZW5kaWYKICAgICAvLyBDaGVjayB3aGV0aGVyIG90aGVyIHR5cGVzIG9mIHJ1bGVzIGFyZSBhcHBs
aWNhYmxlIGluIHRoZSBjdXJyZW50IHRyZWUgc2NvcGUuIENyaXRlcmlhIGZvciB0aGlzOgogICAg
IC8vIGEpIGl0J3MgYSBVQSBydWxlCiAgICAgLy8gYikgdGhlIHRyZWUgc2NvcGUgYWxsb3dzIGF1
dGhvciBydWxlcwogICAgIC8vIGMpIHRoZSBydWxlcyBjb21lcyBmcm9tIGEgc2NvcGVkIHN0eWxl
IHNoZWV0IHdpdGhpbiB0aGUgc2FtZSB0cmVlIHNjb3BlCi0gICAgVHJlZVNjb3BlKiB0cmVlU2Nv
cGUgPSBtX2VsZW1lbnQtPnRyZWVTY29wZSgpOworICAgIFRyZWVTY29wZSogdHJlZVNjb3BlID0g
ZWxlbWVudC0+dHJlZVNjb3BlKCk7CiAgICAgaWYgKCFNYXRjaGluZ1VBUnVsZXNTY29wZTo6aXNN
YXRjaGluZ1VBUnVsZXMoKQogICAgICAgICAmJiAhdHJlZVNjb3BlLT5hcHBseUF1dGhvclN0eWxl
cygpCiAgICAgICAgICYmICghbWF0Y2hSZXF1ZXN0LnNjb3BlIHx8IG1hdGNoUmVxdWVzdC5zY29w
ZS0+dHJlZVNjb3BlKCkgIT0gdHJlZVNjb3BlKSkKQEAgLTY4NCw3MyArNjY2LDc0IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMoY29uc3QgTWF0Y2hSZXF1ZXN0JiBt
YXRjaFJlcXVlc3QsIFJ1bGVSCiAKICAgICAvLyBXZSBuZWVkIHRvIGNvbGxlY3QgdGhlIHJ1bGVz
IGZvciBpZCwgY2xhc3MsIHRhZywgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBpbnRvIGEgYnVmZmVyIGFu
ZAogICAgIC8vIHRoZW4gc29ydCB0aGUgYnVmZmVyLgotICAgIGlmIChtX2VsZW1lbnQtPmhhc0lE
KCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVs
ZVNldC0+aWRSdWxlcyhtX2VsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSwg
bWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQgJiYgbV9z
dHlsZWRFbGVtZW50LT5oYXNDbGFzcygpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9zdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgICAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmNsYXNz
UnVsZXMobV9zdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKClbaV0uaW1wbCgpKSwgbWF0Y2hSZXF1
ZXN0LCBydWxlUmFuZ2UpOworICAgIGlmIChlbGVtZW50LT5oYXNJRCgpKQorICAgICAgICBjb2xs
ZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qoc3RhdGUsIG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5pZFJ1
bGVzKGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0
LCBydWxlUmFuZ2UpOworICAgIGlmIChzdGF0ZS5tX3N0eWxlZEVsZW1lbnQgJiYgc3RhdGUubV9z
dHlsZWRFbGVtZW50LT5oYXNDbGFzcygpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc3RhdGUubV9zdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKCkuc2l6ZSgpOyArK2kpCisgICAg
ICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qoc3RhdGUsIG1hdGNoUmVxdWVzdC5y
dWxlU2V0LT5jbGFzc1J1bGVzKHN0YXRlLm1fc3R5bGVkRWxlbWVudC0+Y2xhc3NOYW1lcygpW2ld
LmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKICAgICB9CiAKLSAgICBpZiAobV9l
bGVtZW50LT5pc0xpbmsoKSkKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1h
dGNoUmVxdWVzdC5ydWxlU2V0LT5saW5rUHNldWRvQ2xhc3NSdWxlcygpLCBtYXRjaFJlcXVlc3Qs
IHJ1bGVSYW5nZSk7Ci0gICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1hdGNoZXNGb2N1c1BzZXVk
b0NsYXNzKG1fZWxlbWVudCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCht
YXRjaFJlcXVlc3QucnVsZVNldC0+Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCksIG1hdGNoUmVxdWVz
dCwgcnVsZVJhbmdlKTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1
ZXN0LnJ1bGVTZXQtPnRhZ1J1bGVzKG1fZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgbWF0
Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCht
YXRjaFJlcXVlc3QucnVsZVNldC0+dW5pdmVyc2FsUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBydWxl
UmFuZ2UpOworICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSkKKyAgICAgICAgY29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JMaXN0KHN0YXRlLCBtYXRjaFJlcXVlc3QucnVsZVNldC0+bGlua1BzZXVkb0Ns
YXNzUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGlmIChtX3NlbGVjdG9y
Q2hlY2tlci5tYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhlbGVtZW50KSkKKyAgICAgICAgY29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JMaXN0KHN0YXRlLCBtYXRjaFJlcXVlc3QucnVsZVNldC0+Zm9jdXNQ
c2V1ZG9DbGFzc1J1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBjb2xsZWN0
TWF0Y2hpbmdSdWxlc0Zvckxpc3Qoc3RhdGUsIG1hdGNoUmVxdWVzdC5ydWxlU2V0LT50YWdSdWxl
cyhlbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7
CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHN0YXRlLCBtYXRjaFJlcXVlc3QucnVs
ZVNldC0+dW5pdmVyc2FsUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogfQogCi12
b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKGNvbnN0IE1h
dGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBSdWxlUmFuZ2UmIHJ1bGVSYW5nZSkKK3ZvaWQgU3R5
bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oU3R5bGVSZXNvbHZlclN0
YXRlJiBzdGF0ZSwgY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSYW5nZSYg
cnVsZVJhbmdlKQogewotICAgIGlmICghbV9yZWdpb25Gb3JTdHlsaW5nKQorICAgIGlmICghc3Rh
dGUubV9yZWdpb25Gb3JTdHlsaW5nKQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBz
aXplID0gbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMu
c2l6ZSgpOworICAgIEVsZW1lbnQqIHJlZ2lvblN0eWxpbmdFbGVtZW50ID0gdG9FbGVtZW50KHN0
YXRlLm1fcmVnaW9uRm9yU3R5bGluZy0+bm9kZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yKiByZWdpb25TZWxl
Y3RvciA9IG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRz
LmF0KGkpLnNlbGVjdG9yOwotICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihyZWdpb25T
ZWxlY3Rvciwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fcmVnaW9uRm9yU3R5bGluZy0+bm9kZSgp
KSkpIHsKKyAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9uU2VsZWN0b3IsIHJl
Z2lvblN0eWxpbmdFbGVtZW50KSkgewogICAgICAgICAgICAgUnVsZVNldCogcmVnaW9uUnVsZXMg
PSBtYXRjaFJlcXVlc3QucnVsZVNldC0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChp
KS5ydWxlU2V0LmdldCgpOwogICAgICAgICAgICAgQVNTRVJUKHJlZ2lvblJ1bGVzKTsKLSAgICAg
ICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1hdGNoUmVxdWVzdChyZWdpb25SdWxlcywgbWF0
Y2hSZXF1ZXN0LmluY2x1ZGVFbXB0eVJ1bGVzLCBtYXRjaFJlcXVlc3Quc2NvcGUpLCBydWxlUmFu
Z2UpOworICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoc3RhdGUsIE1hdGNoUmVxdWVz
dChyZWdpb25SdWxlcywgbWF0Y2hSZXF1ZXN0LmluY2x1ZGVFbXB0eVJ1bGVzLCBtYXRjaFJlcXVl
c3Quc2NvcGUpLCBydWxlUmFuZ2UpOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFN0eWxl
UmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0
KQordm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoU3R5bGVS
ZXNvbHZlclN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCkKIHsKLSAgICBpZiAobV9t
YXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgIGlmIChzdGF0ZS5tX21hdGNoZWRSdWxlcy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKKyAgICBz
b3J0TWF0Y2hlZFJ1bGVzKHN0YXRlLm1fbWF0Y2hlZFJ1bGVzKTsKIAogICAgIGlmIChtX3NlbGVj
dG9yQ2hlY2tlci5tb2RlKCkgPT0gU2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpIHsK
LSAgICAgICAgaWYgKCFtX3J1bGVMaXN0KQotICAgICAgICAgICAgbV9ydWxlTGlzdCA9IFN0YXRp
Y0NTU1J1bGVMaXN0OjpjcmVhdGUoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9ydWxlTGlzdC0+cnVs
ZXMoKS5hcHBlbmQobV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+Y3JlYXRlQ1NTT01XcmFwcGVy
KCkpOworICAgICAgICBpZiAoIXN0YXRlLm1fcnVsZUxpc3QpCisgICAgICAgICAgICBzdGF0ZS5t
X3J1bGVMaXN0ID0gU3RhdGljQ1NTUnVsZUxpc3Q6OmNyZWF0ZSgpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUubV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyArK2kpCisgICAg
ICAgICAgICBzdGF0ZS5tX3J1bGVMaXN0LT5ydWxlcygpLmFwcGVuZChzdGF0ZS5tX21hdGNoZWRS
dWxlc1tpXS0+cnVsZSgpLT5jcmVhdGVDU1NPTVdyYXBwZXIoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICAvLyBOb3cgdHJhbnNmZXIgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIG92
ZXIgdG8gb3VyIGxpc3Qgb2YgZGVjbGFyYXRpb25zLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAobV9zdHlsZSAm
JiBtX21hdGNoZWRSdWxlc1tpXS0+Y29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkp
Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRVbmlxdWUoKTsKLSAgICAgICAgYWRkTWF0Y2hlZFBy
b3BlcnRpZXMocmVzdWx0LCBtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5wcm9wZXJ0aWVzKCks
IG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCksIG1fbWF0Y2hlZFJ1bGVzW2ldLT5saW5rTWF0Y2hU
eXBlKCksIG1fbWF0Y2hlZFJ1bGVzW2ldLT5wcm9wZXJ0eVdoaXRlbGlzdFR5cGUoKSk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLm1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsr
KSB7CisgICAgICAgIGlmIChzdGF0ZS5tX3N0eWxlICYmIHN0YXRlLm1fbWF0Y2hlZFJ1bGVzW2ld
LT5jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKKyAgICAgICAgICAgIHN0YXRl
Lm1fc3R5bGUtPnNldFVuaXF1ZSgpOworICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1
bHQsIHN0YXRlLm1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPnByb3BlcnRpZXMoKSwgc3RhdGUu
bV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKSwgc3RhdGUubV9tYXRjaGVkUnVsZXNbaV0tPmxpbmtN
YXRjaFR5cGUoKSwgc3RhdGUubV9tYXRjaGVkUnVsZXNbaV0tPnByb3BlcnR5V2hpdGVsaXN0VHlw
ZSgpKTsKICAgICB9CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JS
dWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBT
dHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKFN0eWxlUmVzb2x2ZXJTdGF0ZSYg
c3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7CiAj
aWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkgfHwgRU5BQkxFKFNIQURPV19ET00pCiAgICAgaWYgKCFt
X3Njb3BlUmVzb2x2ZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE1hdGNoIHNjb3BlZCBh
dXRob3IgcnVsZXMgYnkgdHJhdmVyc2luZyB0aGUgc2NvcGVkIGVsZW1lbnQgc3RhY2sgKHJlYnVp
bGQgaXQgaWYgaXQgZ290IGluY29uc2lzdGVudCkuCi0gICAgaWYgKG1fc2NvcGVSZXNvbHZlci0+
aGFzU2NvcGVkU3R5bGVzKCkgJiYgbV9zY29wZVJlc29sdmVyLT5lbnN1cmVTdGFja0NvbnNpc3Rl
bmN5KG1fZWxlbWVudCkpIHsKLSAgICAgICAgYm9vbCBhcHBseUF1dGhvclN0eWxlcyA9IG1fZWxl
bWVudC0+dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9yU3R5bGVzKCk7CisgICAgaWYgKG1fc2NvcGVS
ZXNvbHZlci0+aGFzU2NvcGVkU3R5bGVzKCkgJiYgbV9zY29wZVJlc29sdmVyLT5lbnN1cmVTdGFj
a0NvbnNpc3RlbmN5KHN0YXRlLm1fZWxlbWVudCkpIHsKKyAgICAgICAgYm9vbCBhcHBseUF1dGhv
clN0eWxlcyA9IHN0YXRlLm1fZWxlbWVudC0+dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9yU3R5bGVz
KCk7CiAgICAgICAgIGJvb2wgZG9jdW1lbnRTY29wZSA9IHRydWU7CiAgICAgICAgIHVuc2lnbmVk
IHNjb3BlU2l6ZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tTaXplKCk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzY29wZVNpemU7ICsraSkgewotICAgICAgICAgICAgbV9tYXRj
aGVkUnVsZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIHN0YXRlLm1fbWF0Y2hlZFJ1bGVzLmNsZWFy
KCk7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0Lm1h
dGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKICAgICAgICAgICAgIGNvbnN0IFN0eWxlU2Nv
cGVSZXNvbHZlcjo6U3RhY2tGcmFtZSYgZnJhbWUgPSBtX3Njb3BlUmVzb2x2ZXItPnN0YWNrRnJh
bWVBdChpKTsKQEAgLTc2NSwxMTUgKzc0OCwxMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRj
aFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHQK
IAogICAgICAgICAgICAgTWF0Y2hSZXF1ZXN0IG1hdGNoUmVxdWVzdChmcmFtZS5tX3J1bGVTZXQs
IGluY2x1ZGVFbXB0eVJ1bGVzLCBmcmFtZS5tX3Njb3BlKTsKICAgICAgICAgICAgIFJ1bGVSYW5n
ZSBydWxlUmFuZ2UgPSByZXN1bHQucmFuZ2VzLmF1dGhvclJ1bGVSYW5nZSgpOwotICAgICAgICAg
ICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgICAg
ICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obWF0Y2hSZXF1ZXN0LCBydWxlUmFu
Z2UpOwotICAgICAgICAgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7Cisg
ICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhzdGF0ZSwgbWF0Y2hSZXF1ZXN0LCBydWxl
UmFuZ2UpOworICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oc3RhdGUs
IG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICAgICAgICAgIHNvcnRBbmRUcmFuc2Zlck1h
dGNoZWRSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIG1hdGNo
SG9zdFJ1bGVzKHJlc3VsdCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIG1hdGNoSG9zdFJ1bGVz
KHN0YXRlLCByZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKICAgICBVTlVTRURfUEFSQU0o
aW5jbHVkZUVtcHR5UnVsZXMpOwogI2VuZGlmCiB9CiAKLWlubGluZSBib29sIFN0eWxlUmVzb2x2
ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKQoraW5saW5lIGJvb2wg
U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhFbGVt
ZW50KiBlbGVtZW50KQogewogI2lmIEVOQUJMRShTSEFET1dfRE9NKQotICAgIHJldHVybiBtX3Nj
b3BlUmVzb2x2ZXIgJiYgbV9zY29wZVJlc29sdmVyLT5zdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRj
aGVzSG9zdFJ1bGVzKG1fZWxlbWVudCk7CisgICAgcmV0dXJuIG1fc2NvcGVSZXNvbHZlciAmJiBt
X3Njb3BlUmVzb2x2ZXItPnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoZWxl
bWVudCk7CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsKKyAgICBVTlVTRURfUEFSQU0oZWxlbWVu
dCk7CiAjZW5kaWYKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRj
aFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBTdHlsZVJlc29s
dmVyOjptYXRjaEhvc3RSdWxlcyhTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3Vs
dCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogewogI2lmIEVOQUJMRShTSEFET1df
RE9NKQogICAgIEFTU0VSVChtX3Njb3BlUmVzb2x2ZXIpOwogCi0gICAgbV9tYXRjaGVkUnVsZXMu
Y2xlYXIoKTsKKyAgICBzdGF0ZS5tX21hdGNoZWRSdWxlcy5jbGVhcigpOwogICAgIHJlc3VsdC5y
YW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0g
MTsKIAogICAgIFZlY3RvcjxSdWxlU2V0Kj4gbWF0Y2hlZFJ1bGVzOwotICAgIG1fc2NvcGVSZXNv
bHZlci0+bWF0Y2hIb3N0UnVsZXMobV9lbGVtZW50LCBtYXRjaGVkUnVsZXMpOworICAgIG1fc2Nv
cGVSZXNvbHZlci0+bWF0Y2hIb3N0UnVsZXMoc3RhdGUubV9lbGVtZW50LCBtYXRjaGVkUnVsZXMp
OwogICAgIGlmIChtYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpID4gMDsgLS1pKSB7CiAg
ICAgICAgIFJ1bGVSYW5nZSBydWxlUmFuZ2UgPSByZXN1bHQucmFuZ2VzLmF1dGhvclJ1bGVSYW5n
ZSgpOwotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QobWF0Y2hlZFJ1
bGVzLmF0KGktMSksIGluY2x1ZGVFbXB0eVJ1bGVzLCBtX2VsZW1lbnQpLCBydWxlUmFuZ2UpOwor
ICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhzdGF0ZSwgTWF0Y2hSZXF1ZXN0KG1hdGNoZWRS
dWxlcy5hdChpLTEpLCBpbmNsdWRlRW1wdHlSdWxlcywgc3RhdGUubV9lbGVtZW50KSwgcnVsZVJh
bmdlKTsKICAgICB9Ci0gICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7Cisg
ICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHN0YXRlLCByZXN1bHQpOwogI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOwogICAgIFVO
VVNFRF9QQVJBTShpbmNsdWRlRW1wdHlSdWxlcyk7CiAjZW5kaWYKIH0KIAotdm9pZCBTdHlsZVJl
c29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVk
ZUVtcHR5UnVsZXMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoU3R5bGVS
ZXNvbHZlclN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1w
dHlSdWxlcykKIHsKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIHN0YXRlLm1fbWF0
Y2hlZFJ1bGVzLmNsZWFyKCk7CiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJl
c3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogCi0gICAgaWYgKCFtX2VsZW1lbnQp
CisgICAgaWYgKCFzdGF0ZS5tX2VsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE1h
dGNoIGdsb2JhbCBhdXRob3IgcnVsZXMuCiAgICAgTWF0Y2hSZXF1ZXN0IG1hdGNoUmVxdWVzdCht
X2F1dGhvclN0eWxlLmdldCgpLCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgUnVsZVJhbmdlIHJ1
bGVSYW5nZSA9IHJlc3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAgY29sbGVjdE1h
dGNoaW5nUnVsZXMobWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzRm9yUmVnaW9uKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICBzb3J0QW5kVHJh
bnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhzdGF0
ZSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9y
UmVnaW9uKHN0YXRlLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgc29ydEFuZFRyYW5z
ZmVyTWF0Y2hlZFJ1bGVzKHN0YXRlLCByZXN1bHQpOwogCi0gICAgbWF0Y2hTY29wZWRBdXRob3JS
dWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBtYXRjaFNjb3BlZEF1dGhvclJ1
bGVzKHN0YXRlLCByZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKIH0KIAotdm9pZCBTdHlsZVJl
c29sdmVyOjptYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVF
bXB0eVJ1bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVzZXJSdWxlcyhTdHlsZVJlc29s
dmVyU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1
bGVzKQogewogICAgIGlmICghbV91c2VyU3R5bGUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIHN0YXRlLm1fbWF0Y2hlZFJ1bGVzLmNsZWFy
KCk7CiAKICAgICByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJv
cGVydGllcy5zaXplKCkgLSAxOwogICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QobV91c2Vy
U3R5bGUuZ2V0KCksIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdl
ID0gcmVzdWx0LnJhbmdlcy51c2VyUnVsZVJhbmdlKCk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVs
ZXMobWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9y
UmVnaW9uKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxl
cyhzdGF0ZSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yUmVnaW9uKHN0YXRlLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CiAKLSAgICBzb3J0
QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRj
aGVkUnVsZXMoc3RhdGUsIHJlc3VsdCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hV
QVJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIFJ1bGVTZXQqIHJ1bGVzKQordm9pZCBTdHlsZVJl
c29sdmVyOjptYXRjaFVBUnVsZXMoU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1
bHQmIHJlc3VsdCwgUnVsZVNldCogcnVsZXMpCiB7Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIo
KTsKKyAgICBzdGF0ZS5tX21hdGNoZWRSdWxlcy5jbGVhcigpOwogICAgIAogICAgIHJlc3VsdC5y
YW5nZXMubGFzdFVBUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwog
ICAgIFJ1bGVSYW5nZSBydWxlUmFuZ2UgPSByZXN1bHQucmFuZ2VzLlVBUnVsZVJhbmdlKCk7Ci0g
ICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KHJ1bGVzKSwgcnVsZVJhbmdlKTsK
KyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhzdGF0ZSwgTWF0Y2hSZXF1ZXN0KHJ1bGVzKSwgcnVs
ZVJhbmdlKTsKIAotICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworICAg
IHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKIH0KIAotdm9pZCBT
dHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1
bGVEYXRhPiogcnVsZXMsIGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBSdWxlUmFu
Z2UmIHJ1bGVSYW5nZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNG
b3JMaXN0KFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4q
IHJ1bGVzLCBjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVJhbmdlJiBydWxl
UmFuZ2UpCiB7CiAgICAgaWYgKCFydWxlcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gSW4g
c29tZSBjYXNlcyB3ZSBtYXkgZW5kIHVwIGxvb2tpbmcgdXAgc3R5bGUgZm9yIHJhbmRvbSBlbGVt
ZW50cyBpbiB0aGUgbWlkZGxlIG9mIGEgcmVjdXJzaXZlIHRyZWUgcmVzb2x2ZS4KLSAgICAvLyBB
bmNlc3RvciBpZGVudGlmaWVyIGZpbHRlciB3b24ndCBiZSB1cC10by1kYXRlIGluIHRoYXQgY2Fz
ZSBhbmQgd2UgY2FuJ3QgdXNlIHRoZSBmYXN0IHBhdGguCi0gICAgYm9vbCBjYW5Vc2VGYXN0UmVq
ZWN0ID0gbV9zZWxlY3RvckZpbHRlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChtX3BhcmVudE5v
ZGUpOwotCiAgICAgdW5zaWduZWQgc2l6ZSA9IHJ1bGVzLT5zaXplKCk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBjb25zdCBSdWxlRGF0YSYgcnVs
ZURhdGEgPSBydWxlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChjYW5Vc2VGYXN0UmVqZWN0ICYmIG1f
c2VsZWN0b3JGaWx0ZXIuZmFzdFJlamVjdFNlbGVjdG9yPFJ1bGVEYXRhOjptYXhpbXVtSWRlbnRp
ZmllckNvdW50PihydWxlRGF0YS5kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCkp
KQorICAgICAgICBpZiAoc3RhdGUubV9jYW5Vc2VGYXN0UmVqZWN0ICYmIG1fc2VsZWN0b3JGaWx0
ZXIuZmFzdFJlamVjdFNlbGVjdG9yPFJ1bGVEYXRhOjptYXhpbXVtSWRlbnRpZmllckNvdW50Pihy
dWxlRGF0YS5kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCkpKQogICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgU3R5bGVSdWxlKiBydWxlID0gcnVsZURhdGEucnVsZSgp
OwogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTWF0Y2hSdWxlKGRvY3VtZW50KCksIHJ1bGUsIHRoaXMp
OwotICAgICAgICBpZiAocnVsZU1hdGNoZXMocnVsZURhdGEsIG1hdGNoUmVxdWVzdC5zY29wZSkp
IHsKKyAgICAgICAgaWYgKHJ1bGVNYXRjaGVzKHN0YXRlLCBydWxlRGF0YSwgbWF0Y2hSZXF1ZXN0
LnNjb3BlKSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRpZXMg
dG8gYXBwbHksIHRoZW4gaWdub3JlIGl0IGluIHRoZSBub24tZGVidWcgbW9kZS4KICAgICAgICAg
ICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMgPSBydWxlLT5wcm9wZXJ0aWVz
KCk7CiAgICAgICAgICAgICBpZiAoIXByb3BlcnRpZXMgfHwgKHByb3BlcnRpZXMtPmlzRW1wdHko
KSAmJiAhbWF0Y2hSZXF1ZXN0LmluY2x1ZGVFbXB0eVJ1bGVzKSkgewpAQCAtODgxLDE5ICs4NjMs
MTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29u
c3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGMKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIEZJWE1FOiBFeHBvc2luZyB0aGUgbm9uLXN0
YW5kYXJkIGdldE1hdGNoZWRDU1NSdWxlcyBBUEkgdG8gd2ViIGlzIHRoZSBvbmx5IHJlYXNvbiB0
aGlzIGlzIG5lZWRlZC4KLSAgICAgICAgICAgIGlmIChtX3NhbWVPcmlnaW5Pbmx5ICYmICFydWxl
RGF0YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkpIHsKKyAgICAgICAgICAgIGlmIChzdGF0
ZS5tX3NhbWVPcmlnaW5Pbmx5ICYmICFydWxlRGF0YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
KCkpIHsKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNo
UnVsZShjb29raWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIC8vIElmIHdlJ3JlIG1hdGNoaW5nIG5vcm1hbCBydWxlcywgc2V0
IGEgcHNldWRvIGJpdCBpZgogICAgICAgICAgICAgLy8gd2UgcmVhbGx5IGp1c3QgbWF0Y2hlZCBh
IHBzZXVkby1lbGVtZW50LgotICAgICAgICAgICAgaWYgKG1fZHluYW1pY1BzZXVkbyAhPSBOT1BT
RVVETyAmJiBtX3BzZXVkb1N0eWxlID09IE5PUFNFVURPKSB7CisgICAgICAgICAgICBpZiAoc3Rh
dGUubV9keW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIHN0YXRlLm1fcHNldWRvU3R5bGUgPT0g
Tk9QU0VVRE8pIHsKICAgICAgICAgICAgICAgICBpZiAobV9zZWxlY3RvckNoZWNrZXIubW9kZSgp
ID09IFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7CiAgICAgICAgICAgICAgICAg
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2Up
OwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fZHluYW1pY1BzZXVkbyA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lE
KQotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZShtX2R5bmFt
aWNQc2V1ZG8pOworICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5tX2R5bmFtaWNQc2V1ZG8gPCBG
SVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUubV9zdHls
ZS0+c2V0SGFzUHNldWRvU3R5bGUoc3RhdGUubV9keW5hbWljUHNldWRvKTsKICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIG91ciBmaXJzdC9sYXN0IHJ1bGUg
aW5kaWNlcyBpbiB0aGUgbWF0Y2hlZCBydWxlcyBhcnJheS4KICAgICAgICAgICAgICAgICArK3J1
bGVSYW5nZS5sYXN0UnVsZUluZGV4OwpAQCAtOTAxLDcgKzg4Myw3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4q
IHJ1bGVzLCBjCiAgICAgICAgICAgICAgICAgICAgIHJ1bGVSYW5nZS5maXJzdFJ1bGVJbmRleCA9
IHJ1bGVSYW5nZS5sYXN0UnVsZUluZGV4OwogCiAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMg
cnVsZSB0byBvdXIgbGlzdCBvZiBtYXRjaGVkIHJ1bGVzLgotICAgICAgICAgICAgICAgIGFkZE1h
dGNoZWRSdWxlKCZydWxlRGF0YSk7CisgICAgICAgICAgICAgICAgYWRkTWF0Y2hlZFJ1bGUoc3Rh
dGUsICZydWxlRGF0YSk7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRNYXRjaFJ1bGUoY29va2llLCB0cnVlKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KQEAgLTkxNywzMSArODk5LDMxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBj
b21wYXJlUnVsZXMoY29uc3QgUnVsZURhdGEqIHIxLCBjb25zdCBSdWxlRGF0YSogcjIpCiAgICAg
cmV0dXJuIChzcGVjaWZpY2l0eTEgPT0gc3BlY2lmaWNpdHkyKSA/IHIxLT5wb3NpdGlvbigpIDwg
cjItPnBvc2l0aW9uKCkgOiBzcGVjaWZpY2l0eTEgPCBzcGVjaWZpY2l0eTI7CiB9CiAKLXZvaWQg
U3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRSdWxlcygpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNv
cnRNYXRjaGVkUnVsZXMoVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+JiBtYXRjaGVkUnVsZXMp
CiB7Ci0gICAgc3RkOjpzb3J0KG1fbWF0Y2hlZFJ1bGVzLmJlZ2luKCksIG1fbWF0Y2hlZFJ1bGVz
LmVuZCgpLCBjb21wYXJlUnVsZXMpOworICAgIHN0ZDo6c29ydChtYXRjaGVkUnVsZXMuYmVnaW4o
KSwgbWF0Y2hlZFJ1bGVzLmVuZCgpLCBjb21wYXJlUnVsZXMpOwogfQogCi12b2lkIFN0eWxlUmVz
b2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01J
TFByb3BlcnRpZXMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoU3R5bGVSZXNv
bHZlclN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFBy
b3BlcnRpZXMpCiB7Ci0gICAgbWF0Y2hVQVJ1bGVzKHJlc3VsdCk7CisgICAgbWF0Y2hVQVJ1bGVz
KHN0YXRlLCByZXN1bHQpOwogCiAgICAgLy8gTm93IHdlIGNoZWNrIHVzZXIgc2hlZXQgcnVsZXMu
CiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICBtYXRjaFVzZXJS
dWxlcyhyZXN1bHQsIGZhbHNlKTsKLSAgICAgICAgCisgICAgICAgIG1hdGNoVXNlclJ1bGVzKHN0
YXRlLCByZXN1bHQsIGZhbHNlKTsKKwogICAgIC8vIE5vdyBjaGVjayBhdXRob3IgcnVsZXMsIGJl
Z2lubmluZyBmaXJzdCB3aXRoIHByZXNlbnRhdGlvbmFsIGF0dHJpYnV0ZXMgbWFwcGVkIGZyb20g
SFRNTC4KLSAgICBpZiAobV9zdHlsZWRFbGVtZW50KSB7Ci0gICAgICAgIGFkZEVsZW1lbnRTdHls
ZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQtPnByZXNlbnRhdGlvbkF0dHJpYnV0
ZVN0eWxlKCkpOworICAgIGlmIChzdGF0ZS5tX3N0eWxlZEVsZW1lbnQpIHsKKyAgICAgICAgYWRk
RWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRlLm1fc3R5bGVkRWxlbWVudC0+cHJl
c2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CiAKICAgICAgICAgLy8gTm93IHdlIGNoZWNrIGFk
ZGl0aW9uYWwgbWFwcGVkIGRlY2xhcmF0aW9ucy4KICAgICAgICAgLy8gVGFibGVzIGFuZCB0YWJs
ZSBjZWxscyBzaGFyZSBhbiBhZGRpdGlvbmFsIG1hcHBlZCBydWxlIHRoYXQgbXVzdCBiZSBhcHBs
aWVkCiAgICAgICAgIC8vIGFmdGVyIGFsbCBhdHRyaWJ1dGVzLCBzaW5jZSB0aGVpciBtYXBwZWQg
c3R5bGUgZGVwZW5kcyBvbiB0aGUgdmFsdWVzIG9mIG11bHRpcGxlIGF0dHJpYnV0ZXMuCi0gICAg
ICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQtPmFk
ZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKKyAgICAgICAgYWRkRWxlbWVu
dFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRlLm1fc3R5bGVkRWxlbWVudC0+YWRkaXRpb25h
bFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOwogCi0gICAgICAgIGlmIChtX3N0eWxlZEVs
ZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBpZiAoc3RhdGUubV9zdHlsZWRFbGVt
ZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNBdXRvOwotICAgICAg
ICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVudChtX3N0eWxl
ZEVsZW1lbnQpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOwor
ICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVudChz
dGF0ZS5tX3N0eWxlZEVsZW1lbnQpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0
ZShpc0F1dG8pOwogICAgICAgICAgICAgaWYgKGlzQXV0bykKICAgICAgICAgICAgICAgICBhZGRN
YXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIHRleHREaXJlY3Rpb24gPT0gTFRSID8gbGVmdFRvUmln
aHREZWNsYXJhdGlvbigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpKTsKICAgICAgICAgfQpA
QCAtOTQ5LDIxICs5MzEsMjEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKE1h
dGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWUKICAgICAKICAgICAv
LyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cyBuZXh0LgogICAgIGlmIChtX21hdGNo
QXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhyZXN1bHQsIGZh
bHNlKTsKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhzdGF0ZSwgcmVzdWx0LCBmYWxzZSk7CiAK
ICAgICAvLyBOb3cgY2hlY2sgb3VyIGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCi0gICAgaWYgKG1f
bWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3R5bGVkRWxlbWVudCAmJiBtX3N0eWxlZEVs
ZW1lbnQtPmlubGluZVN0eWxlKCkpIHsKKyAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHls
ZXMgJiYgc3RhdGUubV9zdHlsZWRFbGVtZW50ICYmIHN0YXRlLm1fc3R5bGVkRWxlbWVudC0+aW5s
aW5lU3R5bGUoKSkgewogICAgICAgICAvLyBJbmxpbmUgc3R5bGUgaXMgaW1tdXRhYmxlIGFzIGxv
bmcgYXMgdGhlcmUgaXMgbm8gQ1NTT00gd3JhcHBlci4KICAgICAgICAgLy8gRklYTUU6IE1lZGlh
IGNvbnRyb2wgc2hhZG93IHRyZWVzIHNlZW0gdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIGNhY2hpbmcu
Ci0gICAgICAgIGJvb2wgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSA9ICFtX3N0eWxlZEVsZW1lbnQt
PmlubGluZVN0eWxlKCktPmlzTXV0YWJsZSgpICYmICFtX3N0eWxlZEVsZW1lbnQtPmlzSW5TaGFk
b3dUcmVlKCk7CisgICAgICAgIGJvb2wgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSA9ICFzdGF0ZS5t
X3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCktPmlzTXV0YWJsZSgpICYmICFzdGF0ZS5tX3N0
eWxlZEVsZW1lbnQtPmlzSW5TaGFkb3dUcmVlKCk7CiAgICAgICAgIC8vIEZJWE1FOiBDb25zdGlm
eS4KLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3R5bGVkRWxl
bWVudC0+aW5saW5lU3R5bGUoKSwgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSk7CisgICAgICAgIGFk
ZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBzdGF0ZS5tX3N0eWxlZEVsZW1lbnQtPmlu
bGluZVN0eWxlKCksIGlzSW5saW5lU3R5bGVDYWNoZWFibGUpOwogICAgIH0KIAogI2lmIEVOQUJM
RShTVkcpCiAgICAgLy8gTm93IGNoZWNrIFNNSUwgYW5pbWF0aW9uIG92ZXJyaWRlIHN0eWxlLgot
ICAgIGlmIChpbmNsdWRlU01JTFByb3BlcnRpZXMgJiYgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHls
ZXMgJiYgbV9zdHlsZWRFbGVtZW50ICYmIG1fc3R5bGVkRWxlbWVudC0+aXNTVkdFbGVtZW50KCkp
Ci0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBzdGF0aWNfY2FzdDxT
VkdFbGVtZW50Kj4obV9zdHlsZWRFbGVtZW50KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVz
KCksIGZhbHNlIC8qIGlzQ2FjaGVhYmxlICovKTsKKyAgICBpZiAoaW5jbHVkZVNNSUxQcm9wZXJ0
aWVzICYmIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIHN0YXRlLm1fc3R5bGVkRWxlbWVu
dCAmJiBzdGF0ZS5tX3N0eWxlZEVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKQorICAgICAgICBhZGRF
bGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHN0
YXRlLm1fc3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpLCBmYWxz
ZSAvKiBpc0NhY2hlYWJsZSAqLyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlU01J
TFByb3BlcnRpZXMpOwogI2VuZGlmCkBAIC05NzgsNDcgKzk2MCw0MSBAQCBib29sIFN0eWxlUmVz
b2x2ZXI6OmNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMoY29uc3QgU3BhY2VTcGxpdFN0cmluZyYg
Y2xhc3NOYW1lcwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVSZXNv
bHZlcjo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKK2lubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmluaXRFbGVtZW50KFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIEVsZW1lbnQqIGUpCiB7Ci0g
ICAgaWYgKG1fZWxlbWVudCAhPSBlKSB7Ci0gICAgICAgIG1fZWxlbWVudCA9IGU7Ci0gICAgICAg
IG1fc3R5bGVkRWxlbWVudCA9IG1fZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlzU3R5bGVkRWxlbWVu
dCgpID8gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fZWxlbWVudCkgOiAwOwotICAgICAg
ICBtX2VsZW1lbnRMaW5rU3RhdGUgPSBkb2N1bWVudCgpLT52aXNpdGVkTGlua1N0YXRlKCktPmRl
dGVybWluZUxpbmtTdGF0ZShtX2VsZW1lbnQpOwotICAgICAgICBpZiAoZSAmJiBlID09IGUtPmRv
Y3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBlLT5kb2N1bWVudCgp
LT5zZXREaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudChmYWxzZSk7Ci0gICAgICAgICAgICBl
LT5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsK
LSAgICAgICAgfQorICAgIHN0YXRlLm1fZWxlbWVudCA9IGU7CisgICAgc3RhdGUubV9zdHlsZWRF
bGVtZW50ID0gc3RhdGUubV9lbGVtZW50ICYmIHN0YXRlLm1fZWxlbWVudC0+aXNTdHlsZWRFbGVt
ZW50KCkgPyBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oc3RhdGUubV9lbGVtZW50KSA6IDA7
CisgICAgc3RhdGUubV9lbGVtZW50TGlua1N0YXRlID0gZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtT
dGF0ZSgpLT5kZXRlcm1pbmVMaW5rU3RhdGUoZSk7CisgICAgaWYgKGUgJiYgZSA9PSBlLT5kb2N1
bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkgeworICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRE
aXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudChmYWxzZSk7CisgICAgICAgIGUtPmRvY3VtZW50
KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOwogICAgIH0KIH0K
IAotaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50
KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFBzZXVkb0lkIHBzZXVkb0lEKQoraW5saW5l
IHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEZvclN0eWxlUmVzb2x2ZShTdHlsZVJlc29sdmVyU3Rh
dGUmIHN0YXRlLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFBzZXVkb0lk
IHBzZXVkb0lEKQogewotICAgIG1fcHNldWRvU3R5bGUgPSBwc2V1ZG9JRDsKKyAgICBzdGF0ZS5t
X3BzZXVkb1N0eWxlID0gcHNldWRvSUQ7CiAKICAgICBpZiAoZSkgewogICAgICAgICBOb2RlUmVu
ZGVyaW5nQ29udGV4dCBjb250ZXh0KGUpOwotICAgICAgICBtX3BhcmVudE5vZGUgPSBjb250ZXh0
LnBhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHlsZSgpOwotICAgICAgICBtX3BhcmVudFN0eWxl
ID0gY29udGV4dC5yZXNldFN0eWxlSW5oZXJpdGFuY2UoKSA/IDAgOgorICAgICAgICBzdGF0ZS5t
X3BhcmVudE5vZGUgPSBjb250ZXh0LnBhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHlsZSgpOwor
ICAgICAgICBzdGF0ZS5tX3BhcmVudFN0eWxlID0gY29udGV4dC5yZXNldFN0eWxlSW5oZXJpdGFu
Y2UoKSA/IDAgOgogICAgICAgICAgICAgcGFyZW50U3R5bGUgPyBwYXJlbnRTdHlsZSA6Ci0gICAg
ICAgICAgICBtX3BhcmVudE5vZGUgPyBtX3BhcmVudE5vZGUtPnJlbmRlclN0eWxlKCkgOiAwOwot
ICAgICAgICBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCA9IGNvbnRleHQuaW5zZXJ0aW9u
UG9pbnQoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3BhcmVudE5vZGUgPSAwOwotICAgICAg
ICBtX3BhcmVudFN0eWxlID0gcGFyZW50U3R5bGU7Ci0gICAgICAgIG1fZGlzdHJpYnV0ZWRUb0lu
c2VydGlvblBvaW50ID0gZmFsc2U7Ci0gICAgfQorICAgICAgICAgICAgc3RhdGUubV9wYXJlbnRO
b2RlID8gc3RhdGUubV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMDsKKyAgICAgICAgc3Rh
dGUubV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQgPSBjb250ZXh0Lmluc2VydGlvblBvaW50
KCk7CisgICAgfSBlbHNlCisgICAgICAgIHN0YXRlLm1fcGFyZW50U3R5bGUgPSBwYXJlbnRTdHls
ZTsKIAorICAgIC8vIEluIHNvbWUgY2FzZXMgd2UgbWF5IGVuZCB1cCBsb29raW5nIHVwIHN0eWxl
IGZvciByYW5kb20gZWxlbWVudHMgaW4gdGhlIG1pZGRsZSBvZiBhIHJlY3Vyc2l2ZSB0cmVlIHJl
c29sdmUuCisgICAgLy8gQW5jZXN0b3IgaWRlbnRpZmllciBmaWx0ZXIgd29uJ3QgYmUgdXAtdG8t
ZGF0ZSBpbiB0aGF0IGNhc2UgYW5kIHdlIGNhbid0IHVzZSB0aGUgZmFzdCBwYXRoLgorICAgIHN0
YXRlLm1fY2FuVXNlRmFzdFJlamVjdCA9IG1fc2VsZWN0b3JGaWx0ZXIucGFyZW50U3RhY2tJc0Nv
bnNpc3RlbnQoc3RhdGUubV9wYXJlbnROb2RlKTsKKyAgICAKICAgICBOb2RlKiBkb2NFbGVtZW50
ID0gZSA/IGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpIDogMDsKICAgICBSZW5kZXJT
dHlsZSogZG9jU3R5bGUgPSBkb2N1bWVudCgpLT5yZW5kZXJTdHlsZSgpOwotICAgIG1fcm9vdEVs
ZW1lbnRTdHlsZSA9IGRvY0VsZW1lbnQgJiYgZSAhPSBkb2NFbGVtZW50ID8gZG9jRWxlbWVudC0+
cmVuZGVyU3R5bGUoKSA6IGRvY1N0eWxlOwotCi0gICAgbV9zdHlsZSA9IDA7Ci0KLSAgICBtX3Bl
bmRpbmdJbWFnZVByb3BlcnRpZXMuY2xlYXIoKTsKKyAgICBzdGF0ZS5tX3Jvb3RFbGVtZW50U3R5
bGUgPSBkb2NFbGVtZW50ICYmIGUgIT0gZG9jRWxlbWVudCA/IGRvY0VsZW1lbnQtPnJlbmRlclN0
eWxlKCkgOiBkb2NTdHlsZTsKIAotICAgIG1fcnVsZUxpc3QgPSAwOwotCi0gICAgbV9mb250RGly
dHkgPSBmYWxzZTsKKyAgICBzdGF0ZS5tX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuY2xlYXIoKTsK
KyAgICBzdGF0ZS5tX2ZvbnREaXJ0eSA9IGZhbHNlOwogfQogCiBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgY1N0eWxlU2VhcmNoVGhyZXNob2xkID0gMTA7CkBAIC0xMDY5LDI3ICsxMDQ1LDI2IEBAIE5v
ZGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNp
Z25lZCYgdmlzaXRlZE5vZGVDb3VuCiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgU3R5bGVSZXNv
bHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoUnVsZVNldCogcnVsZVNl
dCkKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVT
ZXQoRWxlbWVudCogZWxlbWVudCwgUnVsZVNldCogcnVsZVNldCkKIHsKICAgICBpZiAoIXJ1bGVT
ZXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwog
CiAgICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlNoYXJpbmdS
dWxlcyk7CiAgICAgaW50IGZpcnN0UnVsZUluZGV4ID0gLTEsIGxhc3RSdWxlSW5kZXggPSAtMTsK
ICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlKGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsK
LSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QocnVsZVNldCksIHJ1bGVSYW5n
ZSk7CisgICAgU3R5bGVSZXNvbHZlclN0YXRlIHN0YXRlOworICAgIHN0YXRlLm1fZWxlbWVudCA9
IGVsZW1lbnQ7CisgICAgc3RhdGUubV9zdHlsZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U3R5bGVk
RWxlbWVudCo+KGVsZW1lbnQpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHN0YXRlLCBNYXRj
aFJlcXVlc3QocnVsZVNldCksIHJ1bGVSYW5nZSk7CiAgICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0
TW9kZShTZWxlY3RvckNoZWNrZXI6OlJlc29sdmluZ1N0eWxlKTsKLSAgICBpZiAobV9tYXRjaGVk
UnVsZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tYXRjaGVkUnVs
ZXMuY2xlYXIoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gIXN0YXRlLm1fbWF0Y2hl
ZFJ1bGVzLmlzRW1wdHkoKTsKIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxl
V2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKK2Jvb2wgU3R5bGVSZXNv
bHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKGNvbnN0IFN0eWxlUmVzb2x2ZXJTdGF0ZSYg
c3RhdGUsIFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgSFRNTElucHV0RWxl
bWVudCogdGhpc0lucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAg
SFRNTElucHV0RWxlbWVudCogb3RoZXJJbnB1dEVsZW1lbnQgPSBtX2VsZW1lbnQtPnRvSW5wdXRF
bGVtZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogb3RoZXJJbnB1dEVsZW1lbnQgPSBzdGF0
ZS5tX2VsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CiAKICAgICBpZiAoIXRoaXNJbnB1dEVsZW1l
bnQgfHwgIW90aGVySW5wdXRFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTEw
LDI1ICsxMDg1LDI1IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250
cm9sKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKHRoaXNJbnB1dEVsZW1l
bnQtPmlzUmVxdWlyZWQoKSAhPSBvdGhlcklucHV0RWxlbWVudC0+aXNSZXF1aXJlZCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRy
b2woKSAhPSBtX2VsZW1lbnQtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkpCisgICAgaWYgKGVsZW1l
bnQtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkgIT0gc3RhdGUubV9lbGVtZW50LT5pc0VuYWJsZWRG
b3JtQ29udHJvbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+
aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpICE9IG1fZWxlbWVudC0+aXNEZWZhdWx0QnV0dG9uRm9y
Rm9ybSgpKQorICAgIGlmIChlbGVtZW50LT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgIT0gc3Rh
dGUubV9lbGVtZW50LT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmIChtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNvbnRhaW5zVmFsaWRpdHlT
dHlsZVJ1bGVzKCkpIHsKKyAgICBpZiAoc3RhdGUubV9lbGVtZW50LT5kb2N1bWVudCgpLT5jb250
YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpKSB7CiAgICAgICAgIGJvb2wgd2lsbFZhbGlkYXRlID0g
ZWxlbWVudC0+d2lsbFZhbGlkYXRlKCk7CiAKLSAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAhPSBt
X2VsZW1lbnQtPndpbGxWYWxpZGF0ZSgpKQorICAgICAgICBpZiAod2lsbFZhbGlkYXRlICE9IHN0
YXRlLm1fZWxlbWVudC0+d2lsbFZhbGlkYXRlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAmJiAoZWxlbWVudC0+aXNWYWxpZEZvcm1Db250
cm9sRWxlbWVudCgpICE9IG1fZWxlbWVudC0+aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpKSkK
KyAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAmJiAoZWxlbWVudC0+aXNWYWxpZEZvcm1Db250cm9s
RWxlbWVudCgpICE9IHN0YXRlLm1fZWxlbWVudC0+aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoZWxlbWVudC0+aXNJ
blJhbmdlKCkgIT0gbV9lbGVtZW50LT5pc0luUmFuZ2UoKSkKKyAgICAgICAgaWYgKGVsZW1lbnQt
PmlzSW5SYW5nZSgpICE9IHN0YXRlLm1fZWxlbWVudC0+aXNJblJhbmdlKCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKGVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpICE9
IG1fZWxlbWVudC0+aXNPdXRPZlJhbmdlKCkpCisgICAgICAgIGlmIChlbGVtZW50LT5pc091dE9m
UmFuZ2UoKSAhPSBzdGF0ZS5tX2VsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTE0MSwyNyArMTExNiwyNyBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oRWxlbWVudCogZWxlbWVudCkKICAgICBy
ZXR1cm4gZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmIHRvSFRNTEVsZW1lbnQoZWxlbWVudCkt
Pmhhc0RpcmVjdGlvbkF1dG8oKTsKIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2Fu
ZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQq
IHNoYXJpbmdDYW5kaWRhdGUpIGNvbnN0Citib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5k
aWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoY29uc3QgU3R5bGVSZXNv
bHZlclN0YXRlJiBzdGF0ZSwgU3R5bGVkRWxlbWVudCogc2hhcmluZ0NhbmRpZGF0ZSkgY29uc3QK
IHsKLSAgICBpZiAobV9lbGVtZW50LT5hdHRyaWJ1dGVEYXRhKCkgPT0gc2hhcmluZ0NhbmRpZGF0
ZS0+YXR0cmlidXRlRGF0YSgpKQorICAgIGlmIChzdGF0ZS5tX2VsZW1lbnQtPmF0dHJpYnV0ZURh
dGEoKSA9PSBzaGFyaW5nQ2FuZGlkYXRlLT5hdHRyaWJ1dGVEYXRhKCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIGlmIChtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6Omxh
bmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjps
YW5nQXR0cikpCisgICAgaWYgKHN0YXRlLm1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTUxO
YW1lczo6bGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1M
TmFtZXM6OmxhbmdBdHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2VsZW1l
bnQtPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RH
ZXRBdHRyaWJ1dGUobGFuZ0F0dHIpKQorICAgIGlmIChzdGF0ZS5tX2VsZW1lbnQtPmZhc3RHZXRB
dHRyaWJ1dGUobGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUo
bGFuZ0F0dHIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIW1fZWxlbWVudEFm
ZmVjdGVkQnlDbGFzc1J1bGVzKSB7CisgICAgaWYgKCFzdGF0ZS5tX2VsZW1lbnRBZmZlY3RlZEJ5
Q2xhc3NSdWxlcykgewogICAgICAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aGFzQ2xhc3MoKSAm
JiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKHNoYXJpbmdDYW5kaWRhdGUtPmNsYXNzTmFtZXMo
KSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBlbHNlIGlmIChzaGFyaW5nQ2Fu
ZGlkYXRlLT5oYXNDbGFzcygpKSB7CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgLy8gU1ZHIGVs
ZW1lbnRzIHJlcXVpcmUgYSAoc2xvdyEpIGdldEF0dHJpYnV0ZSBjb21wYXJpc2lvbiBiZWNhdXNl
ICJjbGFzcyIgaXMgYW4gYW5pbWF0YWJsZSBhdHRyaWJ1dGUgZm9yIFNWRy4KLSAgICAgICAgaWYg
KG1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChtX2VsZW1lbnQt
PmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmdldEF0dHJpYnV0
ZShjbGFzc0F0dHIpKQorICAgICAgICBpZiAoc3RhdGUubV9lbGVtZW50LT5pc1NWR0VsZW1lbnQo
KSkgeworICAgICAgICAgICAgaWYgKHN0YXRlLm1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKGNsYXNz
QXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGVsc2UgewogI2VuZGlmCi0gICAg
ICAgICAgICBpZiAobV9lbGVtZW50LT5jbGFzc05hbWVzKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+
Y2xhc3NOYW1lcygpKQorICAgICAgICAgICAgaWYgKHN0YXRlLm1fZWxlbWVudC0+Y2xhc3NOYW1l
cygpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmNsYXNzTmFtZXMoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgfQpAQCAtMTE2OSwxMiArMTE0
NCwxMiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxT
dHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoU3R5bGVkRQogICAgIH0gZWxzZQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5wcmVzZW50YXRpb25BdHRyaWJ1
dGVTdHlsZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUtPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
KCkpCisgICAgaWYgKHN0YXRlLm1fc3R5bGVkRWxlbWVudC0+cHJlc2VudGF0aW9uQXR0cmlidXRl
U3R5bGUoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkK
LSAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKHByb2dyZXNzVGFnKSkgewotICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KG1fZWxlbWVudCktPmlzRGV0ZXJt
aW5hdGUoKSAhPSBzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50Kj4oc2hhcmluZ0NhbmRp
ZGF0ZSktPmlzRGV0ZXJtaW5hdGUoKSkKKyAgICBpZiAoc3RhdGUubV9lbGVtZW50LT5oYXNUYWdO
YW1lKHByb2dyZXNzVGFnKSkgeworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNz
RWxlbWVudCo+KHN0YXRlLm1fZWxlbWVudCktPmlzRGV0ZXJtaW5hdGUoKSAhPSBzdGF0aWNfY2Fz
dDxIVE1MUHJvZ3Jlc3NFbGVtZW50Kj4oc2hhcmluZ0NhbmRpZGF0ZSktPmlzRGV0ZXJtaW5hdGUo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAjZW5kaWYKQEAgLTExODIsNyAr
MTE1Nyw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNh
bFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1l
bnQqIGVsZW1lbnQpIGNvbnN0Citib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRo
RWxlbWVudChjb25zdCBTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlLCBTdHlsZWRFbGVtZW50KiBl
bGVtZW50KSBjb25zdAogewogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnQtPnJlbmRl
clN0eWxlKCk7CiAKQEAgLTExOTAsMzEgKzExNjUsMzEgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpj
YW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChzdHlsZS0+dW5pcXVlKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+dGFnUU5hbWUoKSAhPSBtX2VsZW1lbnQtPnRh
Z1FOYW1lKCkpCisgICAgaWYgKGVsZW1lbnQtPnRhZ1FOYW1lKCkgIT0gc3RhdGUubV9lbGVtZW50
LT50YWdRTmFtZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1lbnQtPmlu
bGluZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZWxlbWVudC0+bmVl
ZHNTdHlsZVJlY2FsYygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjaWYgRU5BQkxFKFNWRykK
LSAgICBpZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVu
dCo+KGVsZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKKyAgICBpZiAoZWxl
bWVudC0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHN0YXRlLm1f
ZWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAjZW5kaWYKLSAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkgIT0gbV9lbGVtZW50LT5p
c0xpbmsoKSkKKyAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkgIT0gc3RhdGUubV9lbGVtZW50LT5p
c0xpbmsoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5ob3ZlcmVk
KCkgIT0gbV9lbGVtZW50LT5ob3ZlcmVkKCkpCisgICAgaWYgKGVsZW1lbnQtPmhvdmVyZWQoKSAh
PSBzdGF0ZS5tX2VsZW1lbnQtPmhvdmVyZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChlbGVtZW50LT5hY3RpdmUoKSAhPSBtX2VsZW1lbnQtPmFjdGl2ZSgpKQorICAgIGlmIChl
bGVtZW50LT5hY3RpdmUoKSAhPSBzdGF0ZS5tX2VsZW1lbnQtPmFjdGl2ZSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmZvY3VzZWQoKSAhPSBtX2VsZW1lbnQtPmZv
Y3VzZWQoKSkKKyAgICBpZiAoZWxlbWVudC0+Zm9jdXNlZCgpICE9IHN0YXRlLm1fZWxlbWVudC0+
Zm9jdXNlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPnNoYWRv
d1BzZXVkb0lkKCkgIT0gbV9lbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpKQorICAgIGlmIChlbGVt
ZW50LT5zaGFkb3dQc2V1ZG9JZCgpICE9IHN0YXRlLm1fZWxlbWVudC0+c2hhZG93UHNldWRvSWQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50ID09IGVsZW1lbnQtPmRv
Y3VtZW50KCktPmNzc1RhcmdldCgpKQorICAgIGlmIChzdGF0ZS5tX2VsZW1lbnQgPT0gZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoIXNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMo
ZWxlbWVudCkpCisgICAgaWYgKCFzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZl
Y3RpbmdBdHRyaWJ1dGVzKHN0YXRlLCBlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChlbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAh
PSBtX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgp
KQorICAgIGlmIChlbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUo
KSAhPSBzdGF0ZS5tX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1
dGVTdHlsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoZWxlbWVudC0+aGFz
SUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMoZWxlbWVudC0+aWRGb3JTdHls
ZVJlc29sdXRpb24oKS5pbXBsKCkpKQpAQCAtMTIzMCwxMCArMTIwNSwxMCBAQCBib29sIFN0eWxl
UmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50
KSBjb25zdAogCiAgICAgYm9vbCBpc0NvbnRyb2wgPSBlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxl
bWVudCgpOwogCi0gICAgaWYgKGlzQ29udHJvbCAhPSBtX2VsZW1lbnQtPmlzRm9ybUNvbnRyb2xF
bGVtZW50KCkpCisgICAgaWYgKGlzQ29udHJvbCAhPSBzdGF0ZS5tX2VsZW1lbnQtPmlzRm9ybUNv
bnRyb2xFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChpc0NvbnRy
b2wgJiYgIWNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChlbGVtZW50KSkKKyAgICBpZiAoaXNDb250
cm9sICYmICFjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woc3RhdGUsIGVsZW1lbnQpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoc3R5bGUtPnRyYW5zaXRpb25zKCkgfHwgc3R5bGUt
PmFuaW1hdGlvbnMoKSkKQEAgLTEyNTEsMzQgKzEyMjYsMzQgQEAgYm9vbCBTdHlsZVJlc29sdmVy
OjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKLSAgICBpZiAoZWxlbWVudEhhc0RpcmVj
dGlvbkF1dG8oZWxlbWVudCkpCisgICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKHN0YXRl
Lm1fZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5p
c0xpbmsoKSAmJiBtX2VsZW1lbnRMaW5rU3RhdGUgIT0gc3R5bGUtPmluc2lkZUxpbmsoKSkKKyAg
ICBpZiAoZWxlbWVudC0+aXNMaW5rKCkgJiYgc3RhdGUubV9lbGVtZW50TGlua1N0YXRlICE9IHN0
eWxlLT5pbnNpZGVMaW5rKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIEVOQUJMRShW
SURFT19UUkFDSykKICAgICAvLyBEZW55IHNoYXJpbmcgc3R5bGVzIGJldHdlZW4gV2ViVlRUIGFu
ZCBub24tV2ViVlRUIG5vZGVzLgotICAgIGlmIChlbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAh
PSBtX2VsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpKQorICAgIGlmIChlbGVtZW50LT5pc1dlYlZU
VEVsZW1lbnQoKSAhPSBzdGF0ZS5tX2VsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYg
bV9lbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiB0b1dlYlZUVEVsZW1lbnQoZWxlbWVudCkt
PndlYlZUVE5vZGVUeXBlKCkgIT0gdG9XZWJWVFRFbGVtZW50KG1fZWxlbWVudCktPndlYlZUVE5v
ZGVUeXBlKCkpCisgICAgaWYgKGVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpICYmIHN0YXRlLm1f
ZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYgdG9XZWJWVFRFbGVtZW50KHN0YXRlLm1fZWxl
bWVudCktPndlYlZUVE5vZGVUeXBlKCkgIT0gdG9XZWJWVFRFbGVtZW50KHN0YXRlLm1fZWxlbWVu
dCktPndlYlZUVE5vZGVUeXBlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIGlmIChlbGVtZW50ID09IGVsZW1lbnQtPmRv
Y3VtZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpIHx8IG1fZWxlbWVudCA9
PSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgp
KQorICAgIGlmIChzdGF0ZS5tX2VsZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0
Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCkgfHwgc3RhdGUubV9lbGVtZW50ID09IHN0YXRlLm1f
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxp
bmUgU3R5bGVkRWxlbWVudCogU3R5bGVSZXNvbHZlcjo6ZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJp
bmcoTm9kZSogbm9kZSwgdW5zaWduZWQmIGNvdW50KSBjb25zdAoraW5saW5lIFN0eWxlZEVsZW1l
bnQqIFN0eWxlUmVzb2x2ZXI6OmZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKGNvbnN0IFN0eWxl
UmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIE5vZGUqIG5vZGUsIHVuc2lnbmVkJiBjb3VudCkgY29uc3QK
IHsKICAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7CiAg
ICAgICAgIGlmICghbm9kZS0+aXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgaWYgKGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChzdGF0aWNfY2FzdDxTdHls
ZWRFbGVtZW50Kj4obm9kZSkpKQorICAgICAgICBpZiAoY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50
KHN0YXRlLCBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSkpKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGlmIChjb3VudCsrID09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkKICAg
ICAgICAgICAgIHJldHVybiAwOwpAQCAtMTI5Niw0MCArMTI3MSw0MSBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgcGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhjb25zdCBFbGVtZW50KiBwYXJlbnRF
bGVtZW50KQogICAgICAgICB8fCBwYXJlbnRFbGVtZW50LT5jaGlsZHJlbkFmZmVjdGVkQnlEaXJl
Y3RBZGphY2VudFJ1bGVzKCk7CiB9CiAKLVJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2Nh
dGVTaGFyZWRTdHlsZSgpCitSZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVk
U3R5bGUoU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoIW1fc3R5bGVkRWxl
bWVudCB8fCAhbV9wYXJlbnRTdHlsZSkKKyAgICBpZiAoIXN0YXRlLm1fc3R5bGVkRWxlbWVudCB8
fCAhc3RhdGUubV9wYXJlbnRTdHlsZSkKICAgICAgICAgcmV0dXJuIDA7CisKICAgICAvLyBJZiB0
aGUgZWxlbWVudCBoYXMgaW5saW5lIHN0eWxlIGl0IGlzIHByb2JhYmx5IHVuaXF1ZS4KLSAgICBp
ZiAobV9zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpKQorICAgIGlmIChzdGF0ZS5tX3N0eWxl
ZEVsZW1lbnQtPmlubGluZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiAwOwogI2lmIEVOQUJMRShT
VkcpCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudCo+KG1fc3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVy
dGllcygpKQorICAgIGlmIChzdGF0ZS5tX3N0eWxlZEVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpICYm
IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihzdGF0ZS5tX3N0eWxlZEVsZW1lbnQpLT5hbmltYXRl
ZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKICAgICAv
LyBJZHMgc3RvcCBzdHlsZSBzaGFyaW5nIGlmIHRoZXkgc2hvdyB1cCBpbiB0aGUgc3R5bGVzaGVl
dHMuCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0lu
UnVsZXMuY29udGFpbnMobV9zdHlsZWRFbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmlt
cGwoKSkpCisgICAgaWYgKHN0YXRlLm1fc3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1
cmVzLmlkc0luUnVsZXMuY29udGFpbnMoc3RhdGUubV9zdHlsZWRFbGVtZW50LT5pZEZvclN0eWxl
UmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChwYXJlbnRF
bGVtZW50UHJldmVudHNTaGFyaW5nKG1fZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSkKKyAgICBp
ZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhzdGF0ZS5lbGVtZW50KCktPnBhcmVudEVs
ZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmhh
c1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgaWYgKHN0YXRlLm1fc3R5bGVkRWxlbWVudC0+
aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKG1f
ZWxlbWVudCA9PSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNzc1RhcmdldCgpKQorICAgIGlmIChz
dGF0ZS5tX2VsZW1lbnQgPT0gc3RhdGUuZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCiAgICAgICAg
IHJldHVybiAwOwotICAgIGlmIChlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhtX2VsZW1lbnQpKQor
ICAgIGlmIChlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhzdGF0ZS5tX2VsZW1lbnQpKQogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIC8vIENhY2hlIHdoZXRoZXIgbV9lbGVtZW50IGlzIGFmZmVjdGVk
IGJ5IGFueSBrbm93biBjbGFzcyBzZWxlY3RvcnMuCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
bid0IGJlIGEgbWVtYmVyIHZhcmlhYmxlLiBUaGUgc3R5bGUgc2hhcmluZyBjb2RlIGNvdWxkIGJl
IGZhY3RvcmVkIG91dCBvZiBTdHlsZVJlc29sdmVyLgotICAgIG1fZWxlbWVudEFmZmVjdGVkQnlD
bGFzc1J1bGVzID0gbV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBjbGFzc05h
bWVzQWZmZWN0ZWRCeVJ1bGVzKG1fZWxlbWVudC0+Y2xhc3NOYW1lcygpKTsKKyAgICBzdGF0ZS5t
X2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyA9IHN0YXRlLmVsZW1lbnQoKSAmJiBzdGF0ZS5l
bGVtZW50KCktPmhhc0NsYXNzKCkgJiYgY2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhzdGF0ZS5l
bGVtZW50KCktPmNsYXNzTmFtZXMoKSk7CiAKICAgICAvLyBDaGVjayBwcmV2aW91cyBzaWJsaW5n
cyBhbmQgdGhlaXIgY291c2lucy4KICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgdW5zaWdu
ZWQgdmlzaXRlZE5vZGVDb3VudCA9IDA7CiAgICAgU3R5bGVkRWxlbWVudCogc2hhcmVFbGVtZW50
ID0gMDsKLSAgICBOb2RlKiBjb3VzaW5MaXN0ID0gbV9zdHlsZWRFbGVtZW50LT5wcmV2aW91c1Np
YmxpbmcoKTsKKyAgICBOb2RlKiBjb3VzaW5MaXN0ID0gc3RhdGUubV9zdHlsZWRFbGVtZW50LT5w
cmV2aW91c1NpYmxpbmcoKTsKICAgICB3aGlsZSAoY291c2luTGlzdCkgewotICAgICAgICBzaGFy
ZUVsZW1lbnQgPSBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhjb3VzaW5MaXN0LCBjb3VudCk7
CisgICAgICAgIHNoYXJlRWxlbWVudCA9IGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKHN0YXRl
LCBjb3VzaW5MaXN0LCBjb3VudCk7CiAgICAgICAgIGlmIChzaGFyZUVsZW1lbnQpCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY291c2luTGlzdCA9IGxvY2F0ZUNvdXNpbkxpc3QoY291c2lu
TGlzdC0+cGFyZW50RWxlbWVudCgpLCB2aXNpdGVkTm9kZUNvdW50KTsKQEAgLTEzNDAsMjEgKzEz
MTYsMjEgQEAgUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkK
ICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBDYW4ndCBzaGFyZSBpZiBzaWJsaW5nIHJ1bGVz
IGFwcGx5LiBUaGlzIGlzIGNoZWNrZWQgYXQgdGhlIGVuZCBhcyBpdCBzaG91bGQgcmFyZWx5IGZh
aWwuCi0gICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KG1fc2libGlu
Z1J1bGVTZXQuZ2V0KCkpKQorICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVs
ZVNldChzdGF0ZS5tX2VsZW1lbnQsIG1fc2libGluZ1J1bGVTZXQuZ2V0KCkpKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICAvLyBDYW4ndCBzaGFyZSBpZiBhdHRyaWJ1dGUgcnVsZXMgYXBwbHkuCi0g
ICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KG1fdW5jb21tb25BdHRy
aWJ1dGVSdWxlU2V0LmdldCgpKSkKKyAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hl
c1J1bGVTZXQoc3RhdGUubV9lbGVtZW50LCBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldC5nZXQo
KSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIENhbid0IHNoYXJlIGlmIEBob3N0IEAtcnVs
ZXMgYXBwbHkuCi0gICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMo
KSkKKyAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhzdGF0ZS5t
X2VsZW1lbnQpKQogICAgICAgICByZXR1cm4gMDsKICAgICAvLyBUcmFja2luZyBjaGlsZCBpbmRl
eCByZXF1aXJlcyB1bmlxdWUgc3R5bGUgZm9yIGVhY2ggbm9kZS4gVGhpcyBtYXkgZ2V0IHNldCBi
eSB0aGUgc2libGluZyBydWxlIG1hdGNoIGFib3ZlLgotICAgIGlmIChwYXJlbnRFbGVtZW50UHJl
dmVudHNTaGFyaW5nKG1fZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSkKKyAgICBpZiAocGFyZW50
RWxlbWVudFByZXZlbnRzU2hhcmluZyhzdGF0ZS5tX2VsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkp
CiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBzaGFyZUVsZW1lbnQtPnJlbmRlclN0eWxl
KCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0JiBy
ZXN1bHQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhTdHlsZVJlc29sdmVyU3Rh
dGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0KQogewogICAgIE1hdGNoaW5nVUFSdWxlc1Nj
b3BlIHNjb3BlOwogCkBAIC0xMzYzLDE1ICsxMzM5LDE1IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
bWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiAgICAgICAgIHJlc3VsdC5pc0NhY2hl
YWJsZSA9IGZhbHNlOwogICAgIFJ1bGVTZXQqIHVzZXJBZ2VudFN0eWxlU2hlZXQgPSBtX21lZGl1
bS0+bWVkaWFUeXBlTWF0Y2hTcGVjaWZpYygicHJpbnQiKQogICAgICAgICA/IGRlZmF1bHRQcmlu
dFN0eWxlIDogZGVmYXVsdFN0eWxlOwotICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQsIHVzZXJBZ2Vu
dFN0eWxlU2hlZXQpOworICAgIG1hdGNoVUFSdWxlcyhzdGF0ZSwgcmVzdWx0LCB1c2VyQWdlbnRT
dHlsZVNoZWV0KTsKIAogICAgIC8vIEluIHF1aXJrcyBtb2RlLCB3ZSBtYXRjaCBydWxlcyBmcm9t
IHRoZSBxdWlya3MgdXNlciBhZ2VudCBzaGVldC4KICAgICBpZiAoIW1fc2VsZWN0b3JDaGVja2Vy
LnN0cmljdFBhcnNpbmcoKSkKLSAgICAgICAgbWF0Y2hVQVJ1bGVzKHJlc3VsdCwgZGVmYXVsdFF1
aXJrc1N0eWxlKTsKKyAgICAgICAgbWF0Y2hVQVJ1bGVzKHN0YXRlLCByZXN1bHQsIGRlZmF1bHRR
dWlya3NTdHlsZSk7CiAKICAgICAvLyBJZiBkb2N1bWVudCB1c2VzIHZpZXcgc291cmNlIHN0eWxl
cyAoaW4gdmlldyBzb3VyY2UgbW9kZSBvciBpbiB4bWwgdmlld2VyIG1vZGUpLCB0aGVuIHdlIG1h
dGNoIHJ1bGVzIGZyb20gdGhlIHZpZXcgc291cmNlIHN0eWxlIHNoZWV0LgogICAgIGlmIChkb2N1
bWVudCgpLT5pc1ZpZXdTb3VyY2UoKSkKLSAgICAgICAgbWF0Y2hVQVJ1bGVzKHJlc3VsdCwgdmll
d1NvdXJjZVN0eWxlKCkpOworICAgICAgICBtYXRjaFVBUnVsZXMoc3RhdGUsIHJlc3VsdCwgdmll
d1NvdXJjZVN0eWxlKCkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRTdHlsZXNGb3JQYWdpbmF0aW9u
TW9kZShQYWdpbmF0aW9uOjpNb2RlIHBhZ2luYXRpb25Nb2RlLCBSZW5kZXJTdHlsZSogc3R5bGUp
CkBAIC0xNTY5LDEwNiArMTU0NSwxMDQgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVS
ZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIFJlbmRlclMKICAgICAg
ICAgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CiAgICAgfQogCi0gICAgaW5pdEVsZW1l
bnQoZWxlbWVudCk7Ci0gICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlbGVtZW50LCBkZWZhdWx0UGFy
ZW50KTsKLSAgICBtX3JlZ2lvbkZvclN0eWxpbmcgPSByZWdpb25Gb3JTdHlsaW5nOwotICAgIGlm
IChzaGFyaW5nQmVoYXZpb3IgPT0gQWxsb3dTdHlsZVNoYXJpbmcgJiYgIW1fZGlzdHJpYnV0ZWRU
b0luc2VydGlvblBvaW50KSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzaGFyZWRTdHlsZSA9IGxv
Y2F0ZVNoYXJlZFN0eWxlKCk7CisgICAgU3R5bGVSZXNvbHZlclN0YXRlIHN0YXRlOworICAgIGlu
aXRFbGVtZW50KHN0YXRlLCBlbGVtZW50KTsKKyAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKHN0YXRl
LCBlbGVtZW50LCBkZWZhdWx0UGFyZW50KTsKKyAgICBzdGF0ZS5tX3JlZ2lvbkZvclN0eWxpbmcg
PSByZWdpb25Gb3JTdHlsaW5nOworCisgICAgaWYgKHNoYXJpbmdCZWhhdmlvciA9PSBBbGxvd1N0
eWxlU2hhcmluZyAmJiAhc3RhdGUubV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQpIHsKKyAg
ICAgICAgUmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0gbG9jYXRlU2hhcmVkU3R5bGUoc3RhdGUp
OwogICAgICAgICBpZiAoc2hhcmVkU3R5bGUpCiAgICAgICAgICAgICByZXR1cm4gc2hhcmVkU3R5
bGU7CiAgICAgfQogCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjbG9uZUZvclBhcmVudDsKKyAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlOwogCi0gICAgaWYgKG1fcGFyZW50U3R5bGUpIHsK
LSAgICAgICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLSAgICAgICAgbV9zdHls
ZS0+aW5oZXJpdEZyb20obV9wYXJlbnRTdHlsZSwgaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1lbnQp
ID8gUmVuZGVyU3R5bGU6OkF0U2hhZG93Qm91bmRhcnkgOiBSZW5kZXJTdHlsZTo6Tm90QXRTaGFk
b3dCb3VuZGFyeSk7CisgICAgaWYgKHN0YXRlLm1fcGFyZW50U3R5bGUpIHsKKyAgICAgICAgc3R5
bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgICAgIHN0eWxlLT5pbmhlcml0RnJvbShz
dGF0ZS5tX3BhcmVudFN0eWxlLCBpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkgPyBSZW5kZXJT
dHlsZTo6QXRTaGFkb3dCb3VuZGFyeSA6IFJlbmRlclN0eWxlOjpOb3RBdFNoYWRvd0JvdW5kYXJ5
KTsKICAgICB9IGVsc2UgewotICAgICAgICBtX3N0eWxlID0gZGVmYXVsdFN0eWxlRm9yRWxlbWVu
dCgpOwotICAgICAgICBjbG9uZUZvclBhcmVudCA9IFJlbmRlclN0eWxlOjpjbG9uZShzdHlsZSgp
KTsKLSAgICAgICAgbV9wYXJlbnRTdHlsZSA9IGNsb25lRm9yUGFyZW50LmdldCgpOworICAgICAg
ICBzdHlsZSA9IGRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKTsKKyAgICAgICAgY2xvbmVGb3JQYXJl
bnQgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoc3R5bGUuZ2V0KCkpOworICAgICAgICBzdGF0ZS5tX3Bh
cmVudFN0eWxlID0gY2xvbmVGb3JQYXJlbnQuZ2V0KCk7CiAgICAgfQogICAgIC8vIGNvbnRlbnRl
ZGl0YWJsZSBhdHRyaWJ1dGUgKGltcGxlbWVudGVkIGJ5IC13ZWJraXQtdXNlci1tb2RpZnkpIHNo
b3VsZAogICAgIC8vIGJlIHByb3BhZ2F0ZWQgZnJvbSBzaGFkb3cgaG9zdCB0byBkaXN0cmlidXRl
ZCBub2RlLgotICAgIGlmIChtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCkgeworICAgIGlm
IChzdGF0ZS5tX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCkgewogICAgICAgICBpZiAoRWxl
bWVudCogcGFyZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICBp
ZiAoUmVuZGVyU3R5bGUqIHN0eWxlT2ZTaGFkb3dIb3N0ID0gcGFyZW50LT5yZW5kZXJTdHlsZSgp
KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFVzZXJNb2RpZnkoc3R5bGVPZlNoYWRvd0hv
c3QtPnVzZXJNb2RpZnkoKSk7CisgICAgICAgICAgICAgICAgc3R5bGUtPnNldFVzZXJNb2RpZnko
c3R5bGVPZlNoYWRvd0hvc3QtPnVzZXJNb2RpZnkoKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAg
ICBpZiAoZWxlbWVudC0+aXNMaW5rKCkpIHsKLSAgICAgICAgbV9zdHlsZS0+c2V0SXNMaW5rKHRy
dWUpOwotICAgICAgICBFSW5zaWRlTGluayBsaW5rU3RhdGUgPSBtX2VsZW1lbnRMaW5rU3RhdGU7
Ci0gICAgICAgIGlmIChtX2VsZW1lbnRMaW5rU3RhdGUgIT0gTm90SW5zaWRlTGluaykgeworICAg
ICAgICBzdHlsZS0+c2V0SXNMaW5rKHRydWUpOworICAgICAgICBFSW5zaWRlTGluayBsaW5rU3Rh
dGUgPSBzdGF0ZS5tX2VsZW1lbnRMaW5rU3RhdGU7CisgICAgICAgIGlmIChsaW5rU3RhdGUgIT0g
Tm90SW5zaWRlTGluaykgewogICAgICAgICAgICAgYm9vbCBmb3JjZVZpc2l0ZWQgPSBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZWxlbWVudCwgQ1NTU2VsZWN0b3I6
OlBzZXVkb1Zpc2l0ZWQpOwogICAgICAgICAgICAgaWYgKGZvcmNlVmlzaXRlZCkKICAgICAgICAg
ICAgICAgICBsaW5rU3RhdGUgPSBJbnNpZGVWaXNpdGVkTGluazsKICAgICAgICAgfQotCi0gICAg
ICAgIG1fc3R5bGUtPnNldEluc2lkZUxpbmsobGlua1N0YXRlKTsKKyAgICAgICAgc3R5bGUtPnNl
dEluc2lkZUxpbmsobGlua1N0YXRlKTsKICAgICB9CiAKICAgICBlbnN1cmVEZWZhdWx0U3R5bGVT
aGVldHNGb3JFbGVtZW50KGVsZW1lbnQpOwogCisgICAgc3RhdGUubV9zdHlsZSA9IHN0eWxlLmdl
dCgpOworCiAgICAgTWF0Y2hSZXN1bHQgbWF0Y2hSZXN1bHQ7CiAgICAgaWYgKG1hdGNoaW5nQmVo
YXZpb3IgPT0gTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpCi0gICAgICAgIG1hdGNoVUFSdWxlcyht
YXRjaFJlc3VsdCk7CisgICAgICAgIG1hdGNoVUFSdWxlcyhzdGF0ZSwgbWF0Y2hSZXN1bHQpOwog
ICAgIGVsc2UKLSAgICAgICAgbWF0Y2hBbGxSdWxlcyhtYXRjaFJlc3VsdCwgbWF0Y2hpbmdCZWhh
dmlvciAhPSBNYXRjaEFsbFJ1bGVzRXhjbHVkaW5nU01JTCk7CisgICAgICAgIG1hdGNoQWxsUnVs
ZXMoc3RhdGUsIG1hdGNoUmVzdWx0LCBtYXRjaGluZ0JlaGF2aW9yICE9IE1hdGNoQWxsUnVsZXNF
eGNsdWRpbmdTTUlMKTsKIAotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1bHQs
IGVsZW1lbnQpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoc3RhdGUsIG1hdGNoUmVzdWx0
LCBlbGVtZW50KTsKIAogICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5
IGFuZCB0ZXh0IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJl
bmRlclN0eWxlKHN0eWxlKCksIG1fcGFyZW50U3R5bGUsIGVsZW1lbnQpOwotCi0gICAgaW5pdEVs
ZW1lbnQoMCk7IC8vIENsZWFyIG91dCBmb3IgdGhlIG5leHQgcmVzb2x2ZS4KLQotICAgIGlmIChj
bG9uZUZvclBhcmVudCkKLSAgICAgICAgbV9wYXJlbnRTdHlsZSA9IDA7CisgICAgYWRqdXN0UmVu
ZGVyU3R5bGUoc3RhdGUsIHN0eWxlLmdldCgpLCBzdGF0ZS5tX3BhcmVudFN0eWxlLCBlbGVtZW50
KTsKIAogICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIAogICAgIC8v
IE5vdyByZXR1cm4gdGhlIHN0eWxlLgotICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKKyAg
ICByZXR1cm4gc3R5bGUucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBT
dHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZW50
U3R5bGUsIGNvbnN0IFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1lLCBLZXlmcmFtZVZhbHVlJiBrZXlm
cmFtZVZhbHVlKQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVG
b3JLZXlmcmFtZShTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlLCBjb25zdCBSZW5kZXJTdHlsZSog
ZWxlbWVudFN0eWxlLCBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSwgS2V5ZnJhbWVWYWx1
ZSYga2V5ZnJhbWVWYWx1ZSkKIHsKICAgICBNYXRjaFJlc3VsdCByZXN1bHQ7CiAgICAgaWYgKGtl
eWZyYW1lLT5wcm9wZXJ0aWVzKCkpCiAgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3Vs
dCwga2V5ZnJhbWUtPnByb3BlcnRpZXMoKSk7CiAKLSAgICBBU1NFUlQoIW1fc3R5bGUpOwotCiAg
ICAgLy8gQ3JlYXRlIHRoZSBzdHlsZQotICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUo
ZWxlbWVudFN0eWxlKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gUmVuZGVyU3R5
bGU6OmNsb25lKGVsZW1lbnRTdHlsZSk7CiAKLSAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7Cisg
ICAgc3RhdGUubV9zdHlsZSA9IHN0eWxlLmdldCgpOworICAgIHN0YXRlLm1fbGluZUhlaWdodFZh
bHVlID0gMDsKIAogICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gYm90aGVyIHdpdGggIWltcG9ydGFu
dC4gU2luY2UgdGhlcmUgaXMgb25seSBldmVyIG9uZQogICAgIC8vIGRlY2wsIHRoZXJlJ3Mgbm90
aGluZyB0byBvdmVycmlkZS4gU28ganVzdCBhZGQgdGhlIGZpcnN0IHByb3BlcnRpZXMuCiAgICAg
Ym9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAgICAgaWYgKGtleWZyYW1lLT5wcm9wZXJ0aWVz
KCkpCi0gICAgICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGll
cz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEs
IGluaGVyaXRlZE9ubHkpOworICAgICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlv
cml0eVByb3BlcnRpZXM+KHN0YXRlLCByZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFBy
b3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CiAKICAgICAvLyBJZiBvdXIgZm9u
dCBnb3QgZGlydGllZCwgZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRlRm9u
dCgpOworICAgIHVwZGF0ZUZvbnQoc3RhdGUpOwogCiAgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0
IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplCi0gICAgaWYgKG1f
bGluZUhlaWdodFZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhl
aWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOworICAgIGlmIChzdGF0ZS5tX2xpbmVIZWlnaHRWYWx1
ZSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBz
dGF0ZS5tX2xpbmVIZWlnaHRWYWx1ZSk7CiAKICAgICAvLyBOb3cgZG8gcmVzdCBvZiB0aGUgcHJv
cGVydGllcy4KICAgICBpZiAoa2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkKLSAgICAgICAgYXBwbHlN
YXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHJlc3VsdCwgZmFsc2UsIDAs
IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKKyAg
ICAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRl
LCByZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwg
aW5oZXJpdGVkT25seSk7CiAKICAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCBieSBvbmUg
b2YgdGhlIG5vbi1lc3NlbnRpYWwgZm9udCBwcm9wcywKICAgICAvLyBnbyBhaGVhZCBhbmQgdXBk
YXRlIGl0IGEgc2Vjb25kIHRpbWUuCi0gICAgdXBkYXRlRm9udCgpOworICAgIHVwZGF0ZUZvbnQo
c3RhdGUpOwogCiAgICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0
aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CisgICAgbG9hZFBlbmRpbmdS
ZXNvdXJjZXMoc3RhdGUpOwogICAgIAogICAgIC8vIEFkZCBhbGwgdGhlIGFuaW1hdGluZyBwcm9w
ZXJ0aWVzIHRvIHRoZSBrZXlmcmFtZS4KICAgICBpZiAoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCog
c3R5bGVEZWNsYXJhdGlvbiA9IGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpIHsKQEAgLTE2ODQsNyAr
MTY1OCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9y
S2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lCiAKICAgICBkb2N1bWVudCgpLT5kaWRB
Y2Nlc3NTdHlsZVJlc29sdmVyKCk7CiAKLSAgICByZXR1cm4gbV9zdHlsZS5yZWxlYXNlKCk7Cisg
ICAgcmV0dXJuIHN0eWxlLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjprZXlm
cmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSogZWxl
bWVudFN0eWxlLCBLZXlmcmFtZUxpc3QmIGxpc3QpCkBAIC0xNzA1LDE1ICsxNjc5LDE2IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGVsCiAKICAgICAvLyBDb25zdHJ1Y3QgYW5kIHBvcHVsYXRlIHRo
ZSBzdHlsZSBmb3IgZWFjaCBrZXlmcmFtZQogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVL
ZXlmcmFtZT4gPiYga2V5ZnJhbWVzID0ga2V5ZnJhbWVzUnVsZS0+a2V5ZnJhbWVzKCk7CisgICAg
U3R5bGVSZXNvbHZlclN0YXRlIHN0YXRlOworICAgIGluaXRFbGVtZW50KHN0YXRlLCBlKTsKKyAg
ICBpbml0Rm9yU3R5bGVSZXNvbHZlKHN0YXRlLCBlKTsKKyAgICAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwga2V5ZnJhbWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIC8vIEFwcGx5IHRo
ZSBkZWNsYXJhdGlvbiB0byB0aGUgc3R5bGUuIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24g
b2YgdGhlIGxvZ2ljIGluIHN0eWxlRm9yRWxlbWVudAotICAgICAgICBpbml0RWxlbWVudChlKTsK
LSAgICAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlKTsKLQogICAgICAgICBjb25zdCBTdHlsZUtl
eWZyYW1lKiBrZXlmcmFtZSA9IGtleWZyYW1lc1tpXS5nZXQoKTsKIAogICAgICAgICBLZXlmcmFt
ZVZhbHVlIGtleWZyYW1lVmFsdWUoMCwgMCk7Ci0gICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5
bGUoc3R5bGVGb3JLZXlmcmFtZShlbGVtZW50U3R5bGUsIGtleWZyYW1lLCBrZXlmcmFtZVZhbHVl
KSk7CisgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShzdGF0
ZSwgZWxlbWVudFN0eWxlLCBrZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOwogCiAgICAgICAgIC8v
IEFkZCB0aGlzIGtleWZyYW1lIHN0eWxlIHRvIGFsbCB0aGUgaW5kaWNhdGVkIGtleSB0aW1lcwog
ICAgICAgICBWZWN0b3I8ZmxvYXQ+IGtleXM7CkBAIC0xNzMzLDcgKzE3MDgsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0
IFJlbmRlclN0eWxlKiBlbAogICAgICAgICAgICAgemVyb1BlcmNlbnRLZXlmcmFtZS0+c2V0S2V5
VGV4dCgiMCUiKTsKICAgICAgICAgfQogICAgICAgICBLZXlmcmFtZVZhbHVlIGtleWZyYW1lVmFs
dWUoMCwgMCk7Ci0gICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFt
ZShlbGVtZW50U3R5bGUsIHplcm9QZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKKyAg
ICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKHN0YXRlLCBlbGVt
ZW50U3R5bGUsIHplcm9QZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKICAgICAgICAg
bGlzdC5pbnNlcnQoa2V5ZnJhbWVWYWx1ZSk7CiAgICAgfQogCkBAIC0xNzQ1LDYyICsxNzIwLDY3
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVu
dCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsCiAgICAgICAgICAgICBodW5kcmVkUGVyY2VudEtl
eWZyYW1lLT5zZXRLZXlUZXh0KCIxMDAlIik7CiAgICAgICAgIH0KICAgICAgICAgS2V5ZnJhbWVW
YWx1ZSBrZXlmcmFtZVZhbHVlKDEsIDApOwotICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxl
KHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCBodW5kcmVkUGVyY2VudEtleWZyYW1lLCBr
ZXlmcmFtZVZhbHVlKSk7CisgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JL
ZXlmcmFtZShzdGF0ZSwgZWxlbWVudFN0eWxlLCBodW5kcmVkUGVyY2VudEtleWZyYW1lLCBrZXlm
cmFtZVZhbHVlKSk7CiAgICAgICAgIGxpc3QuaW5zZXJ0KGtleWZyYW1lVmFsdWUpOwogICAgIH0K
IH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVG
b3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywgRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlKQogewotICAgIEFTU0VSVChtX3BhcmVudFN0eWxlKTsKICAgICBpZiAoIWUpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgaW5pdEVsZW1lbnQoZSk7CisgICAgU3R5bGVSZXNvbHZlclN0
YXRlIHN0YXRlOworICAgIGluaXRFbGVtZW50KHN0YXRlLCBlKTsKKyAgICBpbml0Rm9yU3R5bGVS
ZXNvbHZlKHN0YXRlLCBlLCBwYXJlbnRTdHlsZSwgcHNldWRvKTsKIAotICAgIGluaXRGb3JTdHls
ZVJlc29sdmUoZSwgcGFyZW50U3R5bGUsIHBzZXVkbyk7Ci0gICAgbV9zdHlsZSA9IFJlbmRlclN0
eWxlOjpjcmVhdGUoKTsKLSAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShtX3BhcmVudFN0eWxlKTsK
KyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwor
ICAgIHN0eWxlLT5pbmhlcml0RnJvbShzdGF0ZS5tX3BhcmVudFN0eWxlKTsKKyAgICBzdGF0ZS5t
X3N0eWxlID0gc3R5bGUuZ2V0KCk7CiAKICAgICAvLyBTaW5jZSB3ZSBkb24ndCB1c2UgcHNldWRv
LWVsZW1lbnRzIGluIGFueSBvZiBvdXIgcXVpcmsvcHJpbnQgdXNlciBhZ2VudCBydWxlcywgZG9u
J3Qgd2FzdGUgdGltZSB3YWxraW5nCiAgICAgLy8gdGhvc2UgcnVsZXMuCiAKICAgICAvLyBDaGVj
ayBVQSwgdXNlciBhbmQgYXV0aG9yIHJ1bGVzLgorCiAgICAgTWF0Y2hSZXN1bHQgbWF0Y2hSZXN1
bHQ7Ci0gICAgbWF0Y2hVQVJ1bGVzKG1hdGNoUmVzdWx0KTsKKyAgICBtYXRjaFVBUnVsZXMoc3Rh
dGUsIG1hdGNoUmVzdWx0KTsKIAogICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykg
ewotICAgICAgICBtYXRjaFVzZXJSdWxlcyhtYXRjaFJlc3VsdCwgZmFsc2UpOwotICAgICAgICBt
YXRjaEF1dGhvclJ1bGVzKG1hdGNoUmVzdWx0LCBmYWxzZSk7CisgICAgICAgIG1hdGNoVXNlclJ1
bGVzKHN0YXRlLCBtYXRjaFJlc3VsdCwgZmFsc2UpOworICAgICAgICBtYXRjaEF1dGhvclJ1bGVz
KHN0YXRlLCBtYXRjaFJlc3VsdCwgZmFsc2UpOwogICAgIH0KIAogICAgIGlmIChtYXRjaFJlc3Vs
dC5tYXRjaGVkUHJvcGVydGllcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
bV9zdHlsZS0+c2V0U3R5bGVUeXBlKHBzZXVkbyk7CisgICAgc3R5bGUtPnNldFN0eWxlVHlwZShw
c2V1ZG8pOwogCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhtYXRjaFJlc3VsdCwgZSk7Cisg
ICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhzdGF0ZSwgbWF0Y2hSZXN1bHQsIGUpOwogCiAgICAg
Ly8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRpc3BsYXkgYW5kIHRleHQgZGVjb3JhdGlv
bnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0UmVuZGVyU3R5bGUoc3R5bGUoKSwg
cGFyZW50U3R5bGUsIDApOworICAgIGFkanVzdFJlbmRlclN0eWxlKHN0YXRlLCBzdHlsZS5nZXQo
KSwgc3RhdGUucGFyZW50U3R5bGUoKSwgMCk7CiAKICAgICAvLyBTdGFydCBsb2FkaW5nIHJlc291
cmNlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMo
KTsKKyAgICBsb2FkUGVuZGluZ1Jlc291cmNlcyhzdGF0ZSk7CiAKICAgICBkb2N1bWVudCgpLT5k
aWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4K
LSAgICByZXR1cm4gbV9zdHlsZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHN0eWxlLnJlbGVhc2Uo
KTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQ
YWdlKGludCBwYWdlSW5kZXgpCiB7Ci0gICAgaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgp
LT5kb2N1bWVudEVsZW1lbnQoKSk7IC8vIG1fcm9vdEVsZW1lbnRTdHlsZSB3aWxsIGJlIHNldCB0
byB0aGUgZG9jdW1lbnQgc3R5bGUuCisgICAgU3R5bGVSZXNvbHZlclN0YXRlIHN0YXRlOworICAg
IGluaXRGb3JTdHlsZVJlc29sdmUoc3RhdGUsIGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgp
KTsgLy8gbV9yb290RWxlbWVudFN0eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBkb2N1bWVudCBzdHls
ZS4KIAotICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgbV9zdHlsZS0+
aW5oZXJpdEZyb20obV9yb290RWxlbWVudFN0eWxlKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IHN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgIHN0eWxlLT5pbmhlcml0RnJvbShz
dGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUpOworICAgIHN0YXRlLm1fZWxlbWVudCA9IGRvY3VtZW50
KCktPmRvY3VtZW50RWxlbWVudCgpOworICAgIHN0YXRlLm1fc3R5bGUgPSBzdHlsZS5nZXQoKTsK
IAotICAgIGNvbnN0IGJvb2wgaXNMZWZ0ID0gaXNMZWZ0UGFnZShwYWdlSW5kZXgpOworICAgIGNv
bnN0IGJvb2wgaXNMZWZ0ID0gaXNMZWZ0UGFnZShzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHBh
Z2VJbmRleCk7CiAgICAgY29uc3QgYm9vbCBpc0ZpcnN0ID0gaXNGaXJzdFBhZ2UocGFnZUluZGV4
KTsKICAgICBjb25zdCBTdHJpbmcgcGFnZSA9IHBhZ2VOYW1lKHBhZ2VJbmRleCk7CiAgICAgCkBA
IC0xODA5LDQyICsxNzg5LDQ1IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2
ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3Vs
dCwgbV91c2VyU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CiAgICAgLy8gT25s
eSBjb25zaWRlciB0aGUgZ2xvYmFsIGF1dGhvciBSdWxlU2V0IGZvciBAcGFnZSBydWxlcywgYXMg
cGVyIHRoZSBIVE1MNSBzcGVjLgogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV9hdXRob3JT
dHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKLSAgICBtX2xpbmVIZWlnaHRWYWx1
ZSA9IDA7CisgICAgc3RhdGUubV9saW5lSGVpZ2h0VmFsdWUgPSAwOwogICAgIGJvb2wgaW5oZXJp
dGVkT25seSA9IGZhbHNlOwogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQotICAgIGFwcGx5TWF0
Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVz
dWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworICAgIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4oc3RhdGUsIHJlc3VsdCwg
ZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRP
bmx5KTsKICNlbmRpZgotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJv
cGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUo
KSAtIDEsIGluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFBy
aW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVk
UHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKIAogICAgIC8vIElmIG91ciBm
b250IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4KLSAgICB1cGRhdGVG
b250KCk7CisgICAgdXBkYXRlRm9udChzdGF0ZSk7CiAKICAgICAvLyBMaW5lLWhlaWdodCBpcyBz
ZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUuCi0gICAgaWYg
KG1fbGluZUhlaWdodFZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGlu
ZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOworICAgIGlmIChzdGF0ZS5tX2xpbmVIZWlnaHRW
YWx1ZSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0
LCBzdGF0ZS5tX2xpbmVIZWlnaHRWYWx1ZSk7CiAKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
PExvd1ByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQ
cm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFBy
b3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgcmVzdWx0LCBmYWxzZSwgMCwg
cmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwogCiAg
ICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgot
ICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CisgICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoc3Rh
dGUpOwogCiAgICAgZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCiAgICAg
Ly8gTm93IHJldHVybiB0aGUgc3R5bGUuCi0gICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOwor
ICAgIHJldHVybiBzdHlsZS5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IFN0eWxlUmVzb2x2ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKQogewotICAgIG1fc3R5bGUg
PSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9
IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBTdHlsZVJlc29sdmVyU3RhdGUgc3RhdGU7Cisg
ICAgc3RhdGUubV9lbGVtZW50ID0gZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAg
c3RhdGUubV9zdHlsZSA9IHN0eWxlLmdldCgpOwogICAgIC8vIE1ha2Ugc3VyZSBvdXIgZm9udHMg
YXJlIGluaXRpYWxpemVkIGlmIHdlIGRvbid0IGluaGVyaXQgdGhlbSBmcm9tIG91ciBwYXJlbnQg
c3R5bGUuCiAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50U2V0dGluZ3MoKSkg
ewotICAgICAgICBpbml0aWFsaXplRm9udFN0eWxlKHNldHRpbmdzKTsKLSAgICAgICAgbV9zdHls
ZS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CisgICAgICAgIGluaXRpYWxpemVGb250
U3R5bGUoc3RhdGUsIHNldHRpbmdzKTsKKyAgICAgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoZm9u
dFNlbGVjdG9yKCkpOwogICAgIH0gZWxzZQotICAgICAgICBtX3N0eWxlLT5mb250KCkudXBkYXRl
KDApOworICAgICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKIAotICAgIHJldHVybiBtX3N0
eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3R5bGUucmVsZWFzZSgpOwogfQogCiBQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclRleHQoVGV4dCogdGV4dE5v
ZGUpCkBAIC0xOTM5LDcgKzE5MjIsNyBAQCBzdGF0aWMgYm9vbCBpc0Rpc3BsYXlGbGV4aWJsZUJv
eChFRGlzcGxheSBkaXNwbGF5KQogICAgIHJldHVybiBkaXNwbGF5ID09IEZMRVggfHwgZGlzcGxh
eSA9PSBJTkxJTkVfRkxFWDsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJT
dHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVu
dCAqZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoY29uc3QgU3R5bGVS
ZXNvbHZlclN0YXRlJiBzdGF0ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUsIEVsZW1lbnQgKmUpCiB7CiAgICAgQVNTRVJUKHBhcmVudFN0eWxlKTsKIApAQCAt
MjEzMiw3ICsyMTE1LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShS
ZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHkKIAogICAgIC8vIExldCB0
aGUgdGhlbWUgYWxzbyBoYXZlIGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBzdHlsZS4KICAgICBp
ZiAoc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRU
aGVtZSgpLT5hZGp1c3RTdHlsZSh0aGlzLCBzdHlsZSwgZSwgbV9oYXNVQUFwcGVhcmFuY2UsIG1f
Ym9yZGVyRGF0YSwgbV9iYWNrZ3JvdW5kRGF0YSwgbV9iYWNrZ3JvdW5kQ29sb3IpOworICAgICAg
ICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmFkanVzdFN0eWxlKHRoaXMsIHN0eWxlLCBl
LCBzdGF0ZS5tX2hhc1VBQXBwZWFyYW5jZSwgc3RhdGUubV9ib3JkZXJEYXRhLCBzdGF0ZS5tX2Jh
Y2tncm91bmREYXRhLCBzdGF0ZS5tX2JhY2tncm91bmRDb2xvcik7CiAKICAgICAvLyBJZiB3ZSBo
YXZlIGZpcnN0LWxldHRlciBwc2V1ZG8gc3R5bGUsIGRvIG5vdCBzaGFyZSB0aGlzIHN0eWxlLgog
ICAgIGlmIChzdHlsZS0+aGFzUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSKSkKQEAgLTIyMTMsMjYg
KzIxOTYsMjYgQEAgc3RhdGljIHZvaWQgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShSZW5kZXJT
dHlsZSogc3R5bGUpCiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3Jp
cHRpb24pOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQordm9pZCBTdHls
ZVJlc29sdmVyOjp1cGRhdGVGb250KFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0gICAg
aWYgKCFtX2ZvbnREaXJ0eSkKKyAgICBpZiAoIXN0YXRlLm1fZm9udERpcnR5KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBjaGVja0ZvclRleHRTaXplQWRqdXN0KCk7Ci0gICAgY2hlY2tGb3JHZW5l
cmljRmFtaWx5Q2hhbmdlKHN0eWxlKCksIG1fcGFyZW50U3R5bGUpOwotICAgIGNoZWNrRm9yWm9v
bUNoYW5nZShzdHlsZSgpLCBtX3BhcmVudFN0eWxlKTsKLSAgICBjaGVja0Zvck9yaWVudGF0aW9u
Q2hhbmdlKHN0eWxlKCkpOwotICAgIG1fc3R5bGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0
b3IpOwotICAgIG1fZm9udERpcnR5ID0gZmFsc2U7CisgICAgY2hlY2tGb3JUZXh0U2l6ZUFkanVz
dChzdGF0ZS5zdHlsZSgpKTsKKyAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uoc3RhdGUs
IHN0YXRlLnN0eWxlKCksIHN0YXRlLm1fcGFyZW50U3R5bGUpOworICAgIGNoZWNrRm9yWm9vbUNo
YW5nZShzdGF0ZSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUubV9wYXJlbnRTdHlsZSk7CisgICAgY2hl
Y2tGb3JPcmllbnRhdGlvbkNoYW5nZShzdGF0ZS5zdHlsZSgpKTsKKyAgICBzdGF0ZS5zdHlsZSgp
LT5mb250KCkudXBkYXRlKG1fZm9udFNlbGVjdG9yKTsKKyAgICBzdGF0ZS5tX2ZvbnREaXJ0eSA9
IGZhbHNlOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNhY2hlQm9yZGVyQW5kQmFja2dyb3Vu
ZCgpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZChTdHlsZVJl
c29sdmVyU3RhdGUmIHN0YXRlKQogewotICAgIG1faGFzVUFBcHBlYXJhbmNlID0gbV9zdHlsZS0+
aGFzQXBwZWFyYW5jZSgpOwotICAgIGlmIChtX2hhc1VBQXBwZWFyYW5jZSkgewotICAgICAgICBt
X2JvcmRlckRhdGEgPSBtX3N0eWxlLT5ib3JkZXIoKTsKLSAgICAgICAgbV9iYWNrZ3JvdW5kRGF0
YSA9ICptX3N0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAgIG1fYmFja2dyb3VuZENv
bG9yID0gbV9zdHlsZS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgc3RhdGUubV9oYXNVQUFwcGVh
cmFuY2UgPSBzdGF0ZS5tX3N0eWxlLT5oYXNBcHBlYXJhbmNlKCk7CisgICAgaWYgKHN0YXRlLm1f
aGFzVUFBcHBlYXJhbmNlKSB7CisgICAgICAgIHN0YXRlLm1fYm9yZGVyRGF0YSA9IHN0YXRlLm1f
c3R5bGUtPmJvcmRlcigpOworICAgICAgICBzdGF0ZS5tX2JhY2tncm91bmREYXRhID0gKnN0YXRl
Lm1fc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKTsKKyAgICAgICAgc3RhdGUubV9iYWNrZ3JvdW5k
Q29sb3IgPSBzdGF0ZS5tX3N0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKTsKICAgICB9CiB9CiAKQEAg
LTIyNDYsNjUgKzIyMjksNjUgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZl
cjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgUHMKICAgICBpZiAoIWUg
fHwgIWUtPmRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIG1fc2VsZWN0b3JDaGVja2VyLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpD
b2xsZWN0aW5nUnVsZXMpOworICAgIFN0eWxlUmVzb2x2ZXJTdGF0ZSBzdGF0ZTsKKyAgICBpbml0
RWxlbWVudChzdGF0ZSwgZSk7CisgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShzdGF0ZSwgZSwgMCwg
cHNldWRvSWQpOwogCi0gICAgaW5pdEVsZW1lbnQoZSk7Ci0gICAgaW5pdEZvclN0eWxlUmVzb2x2
ZShlLCAwLCBwc2V1ZG9JZCk7CisgICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0TW9kZShTZWxlY3Rv
ckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7CiAKICAgICBNYXRjaFJlc3VsdCBkdW1teTsKICAg
ICBpZiAocnVsZXNUb0luY2x1ZGUgJiBVQUFuZFVzZXJDU1NSdWxlcykgewogICAgICAgICAvLyBG
aXJzdCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB1c2VyIGFnZW50IHNoZWV0LgotICAgICAgICBt
YXRjaFVBUnVsZXMoZHVtbXkpOworICAgICAgICBtYXRjaFVBUnVsZXMoc3RhdGUsIGR1bW15KTsK
IAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sgdXNlciBzaGVldCBydWxlcy4KICAgICAgICAgaWYg
KG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICAgICAgbWF0Y2hVc2VyUnVsZXMo
ZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CisgICAgICAgICAgICBtYXRj
aFVzZXJSdWxlcyhzdGF0ZSwgZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7
CiAgICAgfQogCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIChydWxlc1Rv
SW5jbHVkZSAmIEF1dGhvckNTU1J1bGVzKSkgewotICAgICAgICBtX3NhbWVPcmlnaW5Pbmx5ID0g
IShydWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2luQ1NTUnVsZXMpOwotCisgICAgICAgIHN0YXRl
Lm1fc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxl
cyk7CisgICAgICAgIAogICAgICAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0
cy4KLSAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhkdW1teSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0
eUNTU1J1bGVzKTsKLQotICAgICAgICBtX3NhbWVPcmlnaW5Pbmx5ID0gZmFsc2U7CisgICAgICAg
IG1hdGNoQXV0aG9yUnVsZXMoc3RhdGUsIGR1bW15LCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NT
UnVsZXMpOwogICAgIH0KIAogICAgIG1fc2VsZWN0b3JDaGVja2VyLnNldE1vZGUoU2VsZWN0b3JD
aGVja2VyOjpSZXNvbHZpbmdTdHlsZSk7CiAKLSAgICByZXR1cm4gbV9ydWxlTGlzdC5yZWxlYXNl
KCk7CisgICAgcmV0dXJuIHN0YXRlLm1fcnVsZUxpc3QucmVsZWFzZSgpOwogfQogCi1pbmxpbmUg
Ym9vbCBTdHlsZVJlc29sdmVyOjpydWxlTWF0Y2hlcyhjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEs
IGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQoraW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6
cnVsZU1hdGNoZXMoU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSwgY29uc3QgUnVsZURhdGEmIHJ1
bGVEYXRhLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKIHsKLSAgICBtX2R5bmFtaWNQc2V1
ZG8gPSBOT1BTRVVETzsKKyAgICBzdGF0ZS5tX2R5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKIAog
ICAgIGlmIChydWxlRGF0YS5oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoKSkgewogICAgICAgICAv
LyBXZSBrbm93IHRoaXMgc2VsZWN0b3IgZG9lcyBub3QgaW5jbHVkZSBhbnkgcHNldWRvIGVsZW1l
bnRzLgotICAgICAgICBpZiAobV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETykKKyAgICAgICAgaWYg
KHN0YXRlLm1fcHNldWRvU3R5bGUgIT0gTk9QU0VVRE8pCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIC8vIFdlIGtub3cgYSBzdWZmaWNpZW50bHkgc2ltcGxlIHNpbmdsZSBwYXJ0
IHNlbGVjdG9yIG1hdGNoZXMgc2ltcGx5IGJlY2F1c2Ugd2UgZm91bmQgaXQgZnJvbSB0aGUgcnVs
ZSBoYXNoLgogICAgICAgICAvLyBUaGlzIGlzIGxpbWl0ZWQgdG8gSFRNTCBvbmx5IHNvIHdlIGRv
bid0IG5lZWQgdG8gY2hlY2sgdGhlIG5hbWVzcGFjZS4KLSAgICAgICAgaWYgKHJ1bGVEYXRhLmhh
c1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKCkgJiYgbV9lbGVt
ZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKHJ1bGVEYXRhLmhhc1JpZ2h0bW9z
dFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKCkgJiYgc3RhdGUubV9lbGVtZW50
LT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGlmICghcnVsZURhdGEuaGFzTXVsdGlw
YXJ0U2VsZWN0b3IoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQot
ICAgICAgICBpZiAocnVsZURhdGEuc2VsZWN0b3IoKS0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6
VGFnICYmICFTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMobV9lbGVtZW50LCBydWxlRGF0YS5z
ZWxlY3RvcigpLT50YWdRTmFtZSgpKSkKKyAgICAgICAgaWYgKHJ1bGVEYXRhLnNlbGVjdG9yKCkt
Pm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZyAmJiAhU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRj
aGVzKHN0YXRlLm1fZWxlbWVudCwgcnVsZURhdGEuc2VsZWN0b3IoKS0+dGFnUU5hbWUoKSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghU2VsZWN0b3JDaGVja2VyOjpm
YXN0Q2hlY2tSaWdodG1vc3RBdHRyaWJ1dGVTZWxlY3RvcihtX2VsZW1lbnQsIHJ1bGVEYXRhLnNl
bGVjdG9yKCkpKQorICAgICAgICBpZiAoIVNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrUmlnaHRt
b3N0QXR0cmlidXRlU2VsZWN0b3Ioc3RhdGUubV9lbGVtZW50LCBydWxlRGF0YS5zZWxlY3Rvcigp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIG1fc2VsZWN0b3JD
aGVja2VyLmZhc3RDaGVjayhydWxlRGF0YS5zZWxlY3RvcigpLCBtX2VsZW1lbnQpOworCisgICAg
ICAgIHJldHVybiBtX3NlbGVjdG9yQ2hlY2tlci5mYXN0Q2hlY2socnVsZURhdGEuc2VsZWN0b3Io
KSwgc3RhdGUubV9lbGVtZW50KTsKICAgICB9CiAKICAgICAvLyBTbG93IHBhdGguCi0gICAgU2Vs
ZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVEYXRhLnNl
bGVjdG9yKCksIG1fZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFibGVk
KTsKLSAgICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IHN0eWxlKCk7CisgICAgU2VsZWN0b3JDaGVj
a2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVEYXRhLnNlbGVjdG9yKCks
IHN0YXRlLm1fZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFibGVkKTsK
KyAgICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IHN0YXRlLnN0eWxlKCk7CiAgICAgY29udGV4dC5z
Y29wZSA9IHNjb3BlOwotICAgIGNvbnRleHQucHNldWRvU3R5bGUgPSBtX3BzZXVkb1N0eWxlOwot
ICAgIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2ggbWF0Y2ggPSBtX3NlbGVjdG9yQ2hlY2tlci5tYXRj
aChjb250ZXh0LCBtX2R5bmFtaWNQc2V1ZG8sIERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSgp
KTsKKyAgICBjb250ZXh0LnBzZXVkb1N0eWxlID0gc3RhdGUubV9wc2V1ZG9TdHlsZTsKKyAgICBT
ZWxlY3RvckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gbV9zZWxlY3RvckNoZWNrZXIubWF0Y2goY29u
dGV4dCwgc3RhdGUubV9keW5hbWljUHNldWRvLCBET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3ko
KSk7CiAgICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaGVzKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fcHNldWRvU3R5bGUgIT0gTk9QU0VVRE8g
JiYgbV9wc2V1ZG9TdHlsZSAhPSBtX2R5bmFtaWNQc2V1ZG8pCisgICAgaWYgKHN0YXRlLm1fcHNl
dWRvU3R5bGUgIT0gTk9QU0VVRE8gJiYgc3RhdGUubV9wc2V1ZG9TdHlsZSAhPSBzdGF0ZS5tX2R5
bmFtaWNQc2V1ZG8pCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
QEAgLTIzMTQsOCArMjI5Nyw2IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2hlY2tSZWdpb25TZWxl
Y3Rvcihjb25zdCBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IsIEVsZW1lCiAgICAgaWYgKCFy
ZWdpb25TZWxlY3RvciB8fCAhcmVnaW9uRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgbV9wc2V1ZG9TdHlsZSA9IE5PUFNFVURPOwotCiAgICAgZm9yIChjb25zdCBDU1NTZWxl
Y3RvciogcyA9IHJlZ2lvblNlbGVjdG9yOyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMp
KQogICAgICAgICBpZiAobV9zZWxlY3RvckNoZWNrZXIubWF0Y2hlcyhzLCByZWdpb25FbGVtZW50
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjMzNyw5ICsyMzE4LDkgQEAgTGVuZ3Ro
IFN0eWxlUmVzb2x2ZXI6OmNvbnZlcnRUb0Zsb2F0TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSwgUmUKIH0KIAogdGVtcGxhdGUgPFN0eWxlUmVzb2x2ZXI6OlN0eWxlQXBw
bGljYXRpb25QYXNzIHBhc3M+Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyhj
b25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wg
aXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlIHBy
b3BlcnR5V2hpdGVsaXN0VHlwZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVz
KFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3Bl
cnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRP
bmx5LCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgcHJvcGVydHlXaGl0ZWxpc3RUeXBlKQogewotICAg
IEFTU0VSVCgocHJvcGVydHlXaGl0ZWxpc3RUeXBlICE9IFByb3BlcnR5V2hpdGVsaXN0UmVnaW9u
KSB8fCBtX3JlZ2lvbkZvclN0eWxpbmcpOworICAgIEFTU0VSVCgocHJvcGVydHlXaGl0ZWxpc3RU
eXBlICE9IFByb3BlcnR5V2hpdGVsaXN0UmVnaW9uKSB8fCBzdGF0ZS5tX3JlZ2lvbkZvclN0eWxp
bmcpOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxQcm9jZXNzUnVsZShkb2N1bWVudCgpLCBydWxlLCB0aGlz
KTsKIAogICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBwcm9wZXJ0aWVzLT5wcm9wZXJ0eUNv
dW50KCk7CkBAIC0yMzY3LDcgKzIzNDgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bAogICAg
ICAgICBjYXNlIFZhcmlhYmxlRGVmaW5pdGlvbnM6CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChDU1NQcm9wZXJ0eVZhcmlhYmxlIDwgZmlyc3RDU1NQcm9wZXJ0eSwgQ1NTX3ZhcmlhYmxlX2lz
X2JlZm9yZV9maXJzdF9wcm9wZXJ0eSk7CiAgICAgICAgICAgICBpZiAocHJvcGVydHkgPT0gQ1NT
UHJvcGVydHlWYXJpYWJsZSkKLSAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KGN1cnJlbnQu
aWQoKSwgY3VycmVudC52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0
YXRlLCBjdXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CiAgICAgICAgICAgICBicmVhazsK
ICNlbmRpZgogICAgICAgICBjYXNlIEhpZ2hQcmlvcml0eVByb3BlcnRpZXM6CkBAIC0yMzgwLDQy
ICsyMzYxLDQyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0
eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsCiAjZW5kaWYKICAgICAgICAgICAg
IC8vIGdpdmUgc3BlY2lhbCBwcmlvcml0eSB0byBmb250LXh4eCwgY29sb3IgcHJvcGVydGllcywg
ZXRjCiAgICAgICAgICAgICBpZiAocHJvcGVydHkgPCBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpCi0g
ICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShjdXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUo
KSk7CisgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgY3VycmVudC5pZCgpLCBj
dXJyZW50LnZhbHVlKCkpOwogICAgICAgICAgICAgLy8gd2UgYXBwbHkgbGluZS1oZWlnaHQgbGF0
ZXIKICAgICAgICAgICAgIGVsc2UgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5TGluZUhlaWdo
dCkKLSAgICAgICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IGN1cnJlbnQudmFsdWUoKTsK
KyAgICAgICAgICAgICAgICBzdGF0ZS5tX2xpbmVIZWlnaHRWYWx1ZSA9IGN1cnJlbnQudmFsdWUo
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvd1ByaW9yaXR5UHJvcGVydGll
czoKICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA+IENTU1Byb3BlcnR5TGluZUhlaWdodCkKLSAg
ICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgp
KTsKKyAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBjdXJyZW50LmlkKCksIGN1
cnJlbnQudmFsdWUoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRQcm9jZXNzUnVsZShjb29raWUpOwogfQogCiB0ZW1wbGF0ZSA8U3R5bGVSZXNv
bHZlcjo6U3R5bGVBcHBsaWNhdGlvblBhc3MgcGFzcz4KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGJvb2wg
aXNJbXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVk
T25seSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhTdHlsZVJl
c29sdmVyU3RhdGUmIHN0YXRlLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGJvb2wg
aXNJbXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVk
T25seSkKIHsKICAgICBpZiAoc3RhcnRJbmRleCA9PSAtMSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKG1fc3R5bGUtPmluc2lkZUxpbmsoKSAhPSBOb3RJbnNpZGVMaW5rKSB7CisgICAgaWYg
KHN0YXRlLm1fc3R5bGUtPmluc2lkZUxpbmsoKSAhPSBOb3RJbnNpZGVMaW5rKSB7CiAgICAgICAg
IGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKICAgICAgICAg
ICAgIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNoUmVz
dWx0Lm1hdGNoZWRQcm9wZXJ0aWVzW2ldOwogICAgICAgICAgICAgdW5zaWduZWQgbGlua01hdGNo
VHlwZSA9IG1hdGNoZWRQcm9wZXJ0aWVzLmxpbmtNYXRjaFR5cGU7CiAgICAgICAgICAgICAvLyBG
SVhNRTogSXQgd291bGQgYmUgbmljZXIgdG8gcGFzcyB0aGVzZSBhcyBhcmd1bWVudHMgYnV0IHRo
YXQgcmVxdWlyZXMgY2hhbmdlcyBpbiBtYW55IHBsYWNlcy4KLSAgICAgICAgICAgIG1fYXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlID0gbGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hMaW5rOwotICAgICAgICAgICAgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
ID0gbGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOworICAgICAg
ICAgICAgc3RhdGUubV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgPSBsaW5rTWF0Y2hUeXBl
ICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbms7CisgICAgICAgICAgICBzdGF0ZS5tX2FwcGx5
UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVj
a2VyOjpNYXRjaFZpc2l0ZWQ7CiAKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydGllczxwYXNzPiht
YXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVs
ZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdo
aXRlbGlzdFR5cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUpKTsKKyAgICAgICAg
ICAgIGFwcGx5UHJvcGVydGllczxwYXNzPihzdGF0ZSwgbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVy
dGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFudCwgaW5o
ZXJpdGVkT25seSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPihtYXRjaGVkUHJv
cGVydGllcy53aGl0ZWxpc3RUeXBlKSk7CiAgICAgICAgIH0KLSAgICAgICAgbV9hcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUgPSB0cnVlOwotICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUgPSBmYWxzZTsKKyAgICAgICAgc3RhdGUubV9hcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUgPSB0cnVlOworICAgICAgICBzdGF0ZS5tX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBmb3IgKGludCBp
ID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgKytpKSB7CiAgICAgICAgIGNvbnN0IE1hdGNo
ZWRQcm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9w
ZXJ0aWVzW2ldOwotICAgICAgICBhcHBseVByb3BlcnRpZXM8cGFzcz4obWF0Y2hlZFByb3BlcnRp
ZXMucHJvcGVydGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9y
dGFudCwgaW5oZXJpdGVkT25seSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPiht
YXRjaGVkUHJvcGVydGllcy53aGl0ZWxpc3RUeXBlKSk7CisgICAgICAgIGFwcGx5UHJvcGVydGll
czxwYXNzPihzdGF0ZSwgbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy5nZXQoKSwgbWF0Y2hS
ZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFudCwgaW5oZXJpdGVkT25seSwgc3RhdGlj
X2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPihtYXRjaGVkUHJvcGVydGllcy53aGl0ZWxpc3RU
eXBlKSk7CiAgICAgfQogfQogCkBAIC0yNTE0LDcgKzI0OTUsNyBAQCBzdGF0aWMgYm9vbCBpc0Nh
Y2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBj
b25zdCBSZQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdCBF
bGVtZW50KiBlbGVtZW50KQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0
aWVzKFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJl
c3VsdCwgY29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBBU1NFUlQoZWxlbWVudCk7CiAg
ICAgdW5zaWduZWQgY2FjaGVIYXNoID0gbWF0Y2hSZXN1bHQuaXNDYWNoZWFibGUgPyBjb21wdXRl
TWF0Y2hlZFByb3BlcnRpZXNIYXNoKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmRhdGEo
KSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpKSA6IDA7CkBAIC0yNTI0LDE1
ICsyNTA1LDE1IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhj
b25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIC8vIFdlIGNhbiBi
dWlsZCB1cCB0aGUgc3R5bGUgYnkgY29weWluZyBub24taW5oZXJpdGVkIHByb3BlcnRpZXMgZnJv
bSBhbiBlYXJsaWVyIHN0eWxlIG9iamVjdCBidWlsdCB1c2luZyB0aGUgc2FtZSBleGFjdAogICAg
ICAgICAvLyBzdHlsZSBkZWNsYXJhdGlvbnMuIFdlIHRoZW4gb25seSBuZWVkIHRvIGFwcGx5IHRo
ZSBpbmhlcml0ZWQgcHJvcGVydGllcywgaWYgYW55LCBhcyB0aGVpciB2YWx1ZXMgY2FuIGRlcGVu
ZCBvbiB0aGUgCiAgICAgICAgIC8vIGVsZW1lbnQgY29udGV4dC4gVGhpcyBpcyBmYXN0IGFuZCBz
YXZlcyBtZW1vcnkgYnkgcmV1c2luZyB0aGUgc3R5bGUgZGF0YSBzdHJ1Y3R1cmVzLgotICAgICAg
ICBtX3N0eWxlLT5jb3B5Tm9uSW5oZXJpdGVkRnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdl
dCgpKTsKLSAgICAgICAgaWYgKG1fcGFyZW50U3R5bGUtPmluaGVyaXRlZERhdGFTaGFyZWQoY2Fj
aGVJdGVtLT5wYXJlbnRSZW5kZXJTdHlsZS5nZXQoKSkgJiYgIWlzQXRTaGFkb3dCb3VuZGFyeShl
bGVtZW50KSkgewotICAgICAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXR1cyA9IG1fc3R5bGUt
Pmluc2lkZUxpbmsoKTsKKyAgICAgICAgc3RhdGUubV9zdHlsZS0+Y29weU5vbkluaGVyaXRlZEZy
b20oY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7CisgICAgICAgIGlmIChzdGF0ZS5tX3Bh
cmVudFN0eWxlLT5pbmhlcml0ZWREYXRhU2hhcmVkKGNhY2hlSXRlbS0+cGFyZW50UmVuZGVyU3R5
bGUuZ2V0KCkpICYmICFpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkpIHsKKyAgICAgICAgICAg
IEVJbnNpZGVMaW5rIGxpbmtTdGF0dXMgPSBzdGF0ZS5tX3N0eWxlLT5pbnNpZGVMaW5rKCk7CiAg
ICAgICAgICAgICAvLyBJZiB0aGUgY2FjaGUgaXRlbSBwYXJlbnQgc3R5bGUgaGFzIGlkZW50aWNh
bCBpbmhlcml0ZWQgcHJvcGVydGllcyB0byB0aGUgY3VycmVudCBwYXJlbnQgc3R5bGUgdGhlbiB0
aGUKICAgICAgICAgICAgIC8vIHJlc3VsdGluZyBzdHlsZSB3aWxsIGJlIGlkZW50aWNhbCB0b28u
IFdlIGNvcHkgdGhlIGluaGVyaXRlZCBwcm9wZXJ0aWVzIG92ZXIgZnJvbSB0aGUgY2FjaGUgYW5k
IGFyZSBkb25lLgotICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEZyb20oY2FjaGVJdGVtLT5y
ZW5kZXJTdHlsZS5nZXQoKSk7CisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5pbmhlcml0RnJv
bShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKIAogICAgICAgICAgICAgLy8gVW5mb3J0
dW5hdGVseSB0aGUgbGluayBzdGF0dXMgaXMgdHJlYXRlZCBsaWtlIGFuIGluaGVyaXRlZCBwcm9w
ZXJ0eS4gV2UgbmVlZCB0byBleHBsaWNpdGx5IHJlc3RvcmUgaXQuCi0gICAgICAgICAgICBtX3N0
eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0dXMpOworICAgICAgICAgICAgc3RhdGUubV9zdHls
ZS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdHVzKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkgPSB0cnVlOyAKQEAgLTI1NDAsNjAgKzI1
MjEsNjAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0
IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKIAogI2lmIEVOQUJMRShDU1NfVkFSSUFC
TEVTKQogICAgIC8vIEZpcnN0IGFwcGx5IGFsbCB2YXJpYWJsZSBkZWZpbml0aW9ucywgYXMgdGhl
eSBtYXkgYmUgdXNlZCBkdXJpbmcgYXBwbGljYXRpb24gb2YgbGF0ZXIgcHJvcGVydGllcy4KLSAg
ICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KG1hdGNoUmVzdWx0
LCBmYWxzZSwgMCwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBw
bHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVm
aW5pdGlvbnM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRo
b3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVk
T25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPiht
YXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNo
UmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihtYXRjaFJlc3VsdCwgdHJ1
ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFz
dFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
PFZhcmlhYmxlRGVmaW5pdGlvbnM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgZmFsc2UsIDAsIG1hdGNo
UmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7
CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihzdGF0ZSwg
bWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1h
dGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAg
ICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KHN0YXRlLCBtYXRj
aFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVz
dWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlN
YXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihzdGF0ZSwgbWF0Y2hSZXN1bHQs
IHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2Vz
Lmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAjZW5kaWYKIAogICAgIC8vIE5vdyB3
ZSBoYXZlIGFsbCBvZiB0aGUgbWF0Y2hlZCBydWxlcyBpbiB0aGUgYXBwcm9wcmlhdGUgb3JkZXIu
IFdhbGsgdGhlIHJ1bGVzIGFuZCBhcHBseQogICAgIC8vIGhpZ2gtcHJpb3JpdHkgcHJvcGVydGll
cyBmaXJzdCwgaS5lLiwgdGhvc2UgcHJvcGVydGllcyB0aGF0IG90aGVyIHByb3BlcnRpZXMgZGVw
ZW5kIG9uLgogICAgIC8vIFRoZSBvcmRlciBpcyAoMSkgaGlnaC1wcmlvcml0eSBub3QgaW1wb3J0
YW50LCAoMikgaGlnaC1wcmlvcml0eSBpbXBvcnRhbnQsICgzKSBub3JtYWwgbm90IGltcG9ydGFu
dAogICAgIC8vIGFuZCAoNCkgbm9ybWFsIGltcG9ydGFudC4KLSAgICBtX2xpbmVIZWlnaHRWYWx1
ZSA9IDA7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVz
PihtYXRjaFJlc3VsdCwgZmFsc2UsIDAsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNp
emUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGll
czxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQu
cmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxl
LCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFBy
aW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5m
aXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVy
aXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVy
dGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwg
bWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0KLSAg
ICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20o
KSAhPSBtX3N0eWxlLT5lZmZlY3RpdmVab29tKCkpIHsKLSAgICAgICAgbV9mb250RGlydHkgPSB0
cnVlOworICAgIHN0YXRlLm1fbGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBhcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgZmFs
c2UsIDAsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5o
ZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9w
ZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJz
dEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhl
cml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3Bl
cnRpZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0
VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVk
T25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVz
PihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVs
ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisK
KyAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpv
b20oKSAhPSBzdGF0ZS5tX3N0eWxlLT5lZmZlY3RpdmVab29tKCkpIHsKKyAgICAgICAgc3RhdGUu
bV9mb250RGlydHkgPSB0cnVlOwogICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkgPSBmYWxzZTsK
ICAgICB9CiAKICAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgZ28gYWhlYWQgYW5kIHVw
ZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRlRm9udCgpOworICAgIHVwZGF0ZUZvbnQoc3RhdGUpOwog
CiAgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBv
biB0aGUgZm9udC1zaXplLgotICAgIGlmIChtX2xpbmVIZWlnaHRWYWx1ZSkKLSAgICAgICAgYXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fbGluZUhlaWdodFZhbHVlKTsKKyAg
ICBpZiAoc3RhdGUubV9saW5lSGVpZ2h0VmFsdWUpCisgICAgICAgIGFwcGx5UHJvcGVydHkoc3Rh
dGUsIENTU1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUubV9saW5lSGVpZ2h0VmFsdWUpOwogCiAg
ICAgLy8gTWFueSBwcm9wZXJ0aWVzIGRlcGVuZCBvbiB0aGUgZm9udC4gSWYgaXQgY2hhbmdlcyB3
ZSBqdXN0IGFwcGx5IGFsbCBwcm9wZXJ0aWVzLgotICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJ
dGVtLT5yZW5kZXJTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgIT0gbV9zdHlsZS0+Zm9udERlc2Ny
aXB0aW9uKCkpCisgICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5m
b250RGVzY3JpcHRpb24oKSAhPSBzdGF0ZS5tX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKSkKICAg
ICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAKICAgICAvLyBOb3cgZG8gdGhlIG5v
cm1hbCBwcmlvcml0eSBVQSBwcm9wZXJ0aWVzLgotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8
TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgZmFsc2UsIG1hdGNoUmVzdWx0LnJh
bmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5o
ZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3Bl
cnRpZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgZmFsc2UsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJz
dFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25s
eSk7CiAgICAgCiAgICAgLy8gQ2FjaGUgb3VyIGJvcmRlciBhbmQgYmFja2dyb3VuZCBzbyB0aGF0
IHdlIGNhbiBleGFtaW5lIHRoZW0gbGF0ZXIuCi0gICAgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5k
KCk7CisgICAgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKHN0YXRlKTsKICAgICAKICAgICAvLyBO
b3cgZG8gdGhlIGF1dGhvciBhbmQgdXNlciBub3JtYWwgcHJpb3JpdHkgcHJvcGVydGllcyBhbmQg
YWxsIHRoZSAhaW1wb3J0YW50IHByb3BlcnRpZXMuCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGll
czxMb3dQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQu
cmFuZ2VzLmxhc3RVQVJ1bGUgKyAxLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXpl
KCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8
TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBh
cHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3Jp
dHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0
VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVk
T25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+
KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNo
UmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5
TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1
bHQsIGZhbHNlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSArIDEsIG1hdGNoUmVzdWx0
Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAg
YXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRj
aFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hS
ZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0
Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQs
IHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2Vz
Lmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAgICAKICAgICAvLyBTdGFydCBsb2Fk
aW5nIHJlc291cmNlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdS
ZXNvdXJjZXMoKTsKKyAgICBsb2FkUGVuZGluZ1Jlc291cmNlcyhzdGF0ZSk7CiAgICAgCi0gICAg
QVNTRVJUKCFtX2ZvbnREaXJ0eSk7CisgICAgQVNTRVJUKCFzdGF0ZS5tX2ZvbnREaXJ0eSk7CiAg
ICAgCiAgICAgaWYgKGNhY2hlSXRlbSB8fCAhY2FjaGVIYXNoKQogICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKCFpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShtX2VsZW1lbnQsIG1f
c3R5bGUuZ2V0KCksIG1fcGFyZW50U3R5bGUpKQorICAgIGlmICghaXNDYWNoZWFibGVJbk1hdGNo
ZWRQcm9wZXJ0aWVzQ2FjaGUoc3RhdGUubV9lbGVtZW50LCBzdGF0ZS5tX3N0eWxlLCBzdGF0ZS5t
X3BhcmVudFN0eWxlKSkKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFRvTWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZShtX3N0eWxlLmdldCgpLCBtX3BhcmVudFN0eWxlLCBjYWNoZUhhc2gsIG1hdGNoUmVz
dWx0KTsKKyAgICBhZGRUb01hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoc3RhdGUubV9zdHlsZSwgc3Rh
dGUubV9wYXJlbnRTdHlsZSwgY2FjaGVIYXNoLCBtYXRjaFJlc3VsdCk7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBjb21wYXJlUGFnZVJ1bGVzKGNvbnN0IFN0eWxlUnVsZVBhZ2UqIHIxLCBjb25z
dCBTdHlsZVJ1bGVQYWdlKiByMikKQEAgLTI2NTUsMTAgKzI2MzYsMTAgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjptYXRjaFBhZ2VSdWxlc0Zvckxpc3QoVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYgbWF0
Y2hlZFJ1bGVzLAogICAgIH0KIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjppc0xlZnRQYWdlKGlu
dCBwYWdlSW5kZXgpIGNvbnN0Citib29sIFN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2UoUmVuZGVy
U3R5bGUqIHJvb3RFbGVtZW50U3R5bGUsIGludCBwYWdlSW5kZXgpIGNvbnN0CiB7CiAgICAgYm9v
bCBpc0ZpcnN0UGFnZUxlZnQgPSBmYWxzZTsKLSAgICBpZiAoIW1fcm9vdEVsZW1lbnRTdHlsZS0+
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAgIGlmICghcm9vdEVsZW1lbnRTdHlsZS0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICBpc0ZpcnN0UGFnZUxlZnQgPSB0cnVlOwog
CiAgICAgcmV0dXJuIChwYWdlSW5kZXggKyAoaXNGaXJzdFBhZ2VMZWZ0ID8gMSA6IDApKSAlIDI7
CkBAIC0yNzU0LDE4ICsyNzM1LDMyIEBAIENTU1N0eWxlUnVsZSogU3R5bGVSZXNvbHZlcjo6ZW5z
dXJlRnVsbENTU09NV3JhcHBlckZvckluc3BlY3RvcihTdHlsZVJ1bGUqIHJ1bGUpCiAgICAgcmV0
dXJuIG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAuZ2V0KHJ1bGUpLmdldCgpOwogfQogCi12
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlKQordm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnR5V2l0aFZhbHVlQ2hlY2tpbmcoU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0
ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogewotICAgIGluaXRFbGVtZW50
KDApOwotICAgIGluaXRGb3JTdHlsZVJlc29sdmUoMCwgc3R5bGUpOwotICAgIG1fc3R5bGUgPSBz
dHlsZTsKLSAgICBhcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoaWQsIHZhbHVlKTsKKyAgICBp
ZiAodmFsdWUpCisgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIGlkLCB2YWx1ZSk7CiB9CiAK
LXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlGb250
UHJvcGVydHlUb1N0eWxlKFJlbmRlclN0eWxlKiB0YXJnZXQsIGNvbnN0IFN0eWxlUHJvcGVydHlT
ZXQqIHJlZmVyZW5jZSkKIHsKLSAgICBpZiAodmFsdWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHko
aWQsIHZhbHVlKTsKKyAgICBTdHlsZVJlc29sdmVyU3RhdGUgc3RhdGU7CisgICAgaW5pdEVsZW1l
bnQoc3RhdGUsIDApOworICAgIGluaXRGb3JTdHlsZVJlc29sdmUoc3RhdGUsIDAsIHRhcmdldCk7
CisgICAgc3RhdGUubV9lbGVtZW50ID0gZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7Cisg
ICAgc3RhdGUubV9zdHlsZSA9IHRhcmdldDsKKworICAgIGFwcGx5UHJvcGVydHlXaXRoVmFsdWVD
aGVja2luZyhzdGF0ZSwgQ1NTUHJvcGVydHlGb250RmFtaWx5LCByZWZlcmVuY2UtPmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KS5nZXQoKSk7CisgICAgYXBwbHlQcm9w
ZXJ0eVdpdGhWYWx1ZUNoZWNraW5nKHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgcmVmZXJl
bmNlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFN0eWxlKS5nZXQoKSk7Cisg
ICAgYXBwbHlQcm9wZXJ0eVdpdGhWYWx1ZUNoZWNraW5nKHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRW
YXJpYW50LCByZWZlcmVuY2UtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250VmFy
aWFudCkuZ2V0KCkpOworICAgIGFwcGx5UHJvcGVydHlXaXRoVmFsdWVDaGVja2luZyhzdGF0ZSwg
Q1NTUHJvcGVydHlGb250V2VpZ2h0LCByZWZlcmVuY2UtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NT
UHJvcGVydHlGb250V2VpZ2h0KS5nZXQoKSk7CisKKyAgICAvLyBBcyBkZXNjcmliZWQgaW4gQlVH
NjYyOTEsIHNldHRpbmcgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdodCBvbiBhIGZvbnQgbWF5IGVu
dGFpbCBhIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoRG91YmxlIGNhbGwsCisgICAg
Ly8gd2hpY2ggYXNzdW1lcyB0aGUgZm9udE1ldHJpY3MgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIGFm
ZmVjdGVkIGZvbnQsIG90aGVyd2lzZSBhIGNyYXNoIG9jY3VycyAoc2VlIGh0dHA6Ly90cmFjLndl
YmtpdC5vcmcvY2hhbmdlc2V0Lzk2MTIyKS4KKyAgICAvLyBUaGUgdXBkYXRlRm9udCgpIGNhbGxz
IGJlbG93IHVwZGF0ZSB0aGUgZm9udE1ldHJpY3MgYW5kIGVuc3VyZSB0aGUgcHJvcGVyIHNldHRp
bmcgb2YgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdodC4KKyAgICB1cGRhdGVGb250KHN0YXRlKTsK
KyAgICBhcHBseVByb3BlcnR5V2l0aFZhbHVlQ2hlY2tpbmcoc3RhdGUsIENTU1Byb3BlcnR5Rm9u
dFNpemUsIHJlZmVyZW5jZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXpl
KS5nZXQoKSk7CisgICAgdXBkYXRlRm9udChzdGF0ZSk7CisgICAgYXBwbHlQcm9wZXJ0eVdpdGhW
YWx1ZUNoZWNraW5nKHN0YXRlLCBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHJlZmVyZW5jZS0+Z2V0
UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpLmdldCgpKTsKIH0KIAogaW5s
aW5lIGJvb2wgaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKQEAg
LTI4NjAsMjAgKzI4NTUsNyBAQCBpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjppc1ZhbGlkQ3Vl
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKQogICAgIHJldHVybiBmYWxzZTsKIH0KICNl
bmRpZgotLy8gU1ZHIGhhbmRsZXMgem9vbWluZyBpbiBhIGRpZmZlcmVudCB3YXkgY29tcGFyZWQg
dG8gQ1NTLiBUaGUgd2hvbGUgZG9jdW1lbnQgaXMgc2NhbGVkIGluc3RlYWQKLS8vIG9mIGVhY2gg
aW5kaXZpZHVhbCBsZW5ndGggdmFsdWUgaW4gdGhlIHJlbmRlciBzdHlsZSAvIHRyZWUuIENTU1By
aW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoKigpCi0vLyBtdWx0aXBsaWVzIGVhY2ggcmVzb2x2
ZWQgbGVuZ3RoIHdpdGggdGhlIHpvb20gbXVsdGlwbGllciAtIHNvIGZvciBTVkcgd2UgbmVlZCB0
byBkaXNhYmxlIHRoYXQuCi0vLyBUaG91Z2ggYWxsIENTUyB2YWx1ZXMgdGhhdCBjYW4gYmUgYXBw
bGllZCB0byBvdXRlcm1vc3QgPHN2Zz4gZWxlbWVudHMgKHdpZHRoL2hlaWdodC9ib3JkZXIvcGFk
ZGluZy4uLikKLS8vIG5lZWQgdG8gcmVzcGVjdCB0aGUgc2NhbGluZy4gUmVuZGVyQm94ICh0aGUg
cGFyZW50IGNsYXNzIG9mIFJlbmRlclNWR1Jvb3QpIGdyYWJzIHZhbHVlcyBsaWtlCi0vLyB3aWR0
aC9oZWlnaHQvYm9yZGVyL3BhZGRpbmcvLi4uIGZyb20gdGhlIFJlbmRlclN0eWxlIC0+IGZvciBT
VkcgdGhlc2UgdmFsdWVzIHdvdWxkIG5ldmVyIHNjYWxlLAotLy8gaWYgd2UnZCBwYXNzIGEgMS4w
IHpvb20gZmFjdG9yIGV2ZXJ5aHdlcmUuIFNvIHdlIG9ubHkgcGFzcyBhIHpvb20gZmFjdG9yIG9m
IDEuMCBmb3Igc3BlY2lmaWMKLS8vIHByb3BlcnRpZXMgdGhhdCBhcmUgTk9UIGFsbG93ZWQgdG8g
c2NhbGUgd2l0aGluIGEgem9vbWVkIFNWRyBkb2N1bWVudCAobGV0dGVyL3dvcmQtc3BhY2luZy9m
b250LXNpemUpLgotYm9vbCBTdHlsZVJlc29sdmVyOjp1c2VTVkdab29tUnVsZXMoKQotewotICAg
IHJldHVybiBtX2VsZW1lbnQgJiYgbV9lbGVtZW50LT5pc1NWR0VsZW1lbnQoKTsKLX0KLQotc3Rh
dGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBMZW5ndGgmIHdvcmtpbmdMZW5ndGgp
CitzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSwgY29uc3QgU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSwgTGVuZ3RoJiB3
b3JraW5nTGVuZ3RoKQogewogICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBD
U1NWYWx1ZVdlYmtpdE1pbkNvbnRlbnQpIHsKICAgICAgICAgd29ya2luZ0xlbmd0aCA9IExlbmd0
aChNaW5Db250ZW50KTsKQEAgLTI4ODUsNyArMjg2Nyw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdy
aWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBTdHlsZVJl
c29sCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHdvcmtpbmdMZW5ndGggPSBw
cmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQ
ZXJjZW50Q29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24gfCBBdXRvQ29u
dmVyc2lvbj4oc2VsZWN0b3ItPnN0eWxlKCksIHNlbGVjdG9yLT5yb290RWxlbWVudFN0eWxlKCks
IHNlbGVjdG9yLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAgIHdvcmtpbmdMZW5ndGgg
PSBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24g
fCBQZXJjZW50Q29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24gfCBBdXRv
Q29udmVyc2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0
ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwogICAgIGlmICh3b3JraW5nTGVuZ3RoLmlzVW5k
ZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjg5NSwxMiArMjg3NywxMiBA
QCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSwgU3R5bGVSZXNvbAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMg
Ym9vbCBjcmVhdGVHcmlkVHJhY2tNaW5NYXgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZh
bHVlLCBTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgR3JpZFRyYWNrU2l6ZSYgdHJhY2tTaXplKQor
c3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrTWluTWF4KENTU1ByaW1pdGl2ZVZhbHVlKiBwcmlt
aXRpdmVWYWx1ZSwgY29uc3QgU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSwgR3JpZFRyYWNrU2l6
ZSYgdHJhY2tTaXplKQogewogICAgIFBhaXIqIG1pbk1heFRyYWNrQnJlYWR0aCA9IHByaW1pdGl2
ZVZhbHVlLT5nZXRQYWlyVmFsdWUoKTsKICAgICBpZiAoIW1pbk1heFRyYWNrQnJlYWR0aCkgewog
ICAgICAgICBMZW5ndGggd29ya2luZ0xlbmd0aDsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJh
Y2tCcmVhZHRoKHByaW1pdGl2ZVZhbHVlLCBzZWxlY3Rvciwgd29ya2luZ0xlbmd0aCkpCisgICAg
ICAgIGlmICghY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChwcmltaXRpdmVWYWx1ZSwgc3RhdGUsIHdv
cmtpbmdMZW5ndGgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHRyYWNr
U2l6ZS5zZXRMZW5ndGgod29ya2luZ0xlbmd0aCk7CkBAIC0yOTA5LDE0ICsyODkxLDE0IEBAIHN0
YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja01pbk1heChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUsIFN0eWxlUmVzb2x2CiAKICAgICBMZW5ndGggbWluVHJhY2tCcmVhZHRoOwogICAg
IExlbmd0aCBtYXhUcmFja0JyZWFkdGg7Ci0gICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tCcmVhZHRo
KG1pbk1heFRyYWNrQnJlYWR0aC0+Zmlyc3QoKSwgc2VsZWN0b3IsIG1pblRyYWNrQnJlYWR0aCkg
fHwgIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgobWluTWF4VHJhY2tCcmVhZHRoLT5zZWNvbmQoKSwg
c2VsZWN0b3IsIG1heFRyYWNrQnJlYWR0aCkpCisgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tCcmVh
ZHRoKG1pbk1heFRyYWNrQnJlYWR0aC0+Zmlyc3QoKSwgc3RhdGUsIG1pblRyYWNrQnJlYWR0aCkg
fHwgIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgobWluTWF4VHJhY2tCcmVhZHRoLT5zZWNvbmQoKSwg
c3RhdGUsIG1heFRyYWNrQnJlYWR0aCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHRy
YWNrU2l6ZS5zZXRNaW5NYXgobWluVHJhY2tCcmVhZHRoLCBtYXhUcmFja0JyZWFkdGgpOwogICAg
IHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tHcm91cChDU1NW
YWx1ZSogdmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBWZWN0b3I8R3JpZFRyYWNrU2l6
ZT4mIHRyYWNrU2l6ZXMpCitzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tHcm91cChDU1NWYWx1
ZSogdmFsdWUsIGNvbnN0IFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIFZlY3RvcjxHcmlkVHJh
Y2tTaXplPiYgdHJhY2tTaXplcykKIHsKICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yOTI3LDcgKzI5MDksNyBAQCBzdGF0aWMgYm9vbCBj
cmVhdGVHcmlkVHJhY2tHcm91cChDU1NWYWx1ZSogdmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVj
dG9yLCBWZWN0bwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIEdyaWRUcmFj
a1NpemUgdHJhY2tTaXplOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja01pbk1heChzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGN1cnJWYWx1ZSksIHNlbGVjdG9yLCB0cmFja1Np
emUpKQorICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja01pbk1heChzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KGN1cnJWYWx1ZSksIHN0YXRlLCB0cmFja1NpemUpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHRyYWNrU2l6ZXMuYXBwZW5kKHRyYWNrU2l6ZSk7
CkBAIC0yOTM1LDcgKzI5MTcsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tHcm91cChD
U1NWYWx1ZSogdmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBWZWN0bwogICAgIHJldHVy
biB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tMaXN0KENTU1ZhbHVlKiB2
YWx1ZSwgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0cmFja1NpemVzLCBTdHlsZVJlc29sdmVyKiBz
ZWxlY3RvcikKK3N0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3QoQ1NTVmFsdWUqIHZhbHVl
LCBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6ZXMsIGNvbnN0IFN0eWxlUmVzb2x2ZXJT
dGF0ZSYgc3RhdGUpCiB7CiAgICAgLy8gSGFuZGxlICdub25lJy4KICAgICBpZiAodmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkgewpAQCAtMjk0Myw3ICsyOTI1LDcgQEAgc3RhdGljIGJvb2wgY3Jl
YXRlR3JpZFRyYWNrTGlzdChDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxHcmlkVHJhY2tTaXplPiYg
dHJhY2tTaXoKICAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENT
U1ZhbHVlTm9uZTsKICAgICB9CiAKLSAgICByZXR1cm4gY3JlYXRlR3JpZFRyYWNrR3JvdXAodmFs
dWUsIHNlbGVjdG9yLCB0cmFja1NpemVzKTsKKyAgICByZXR1cm4gY3JlYXRlR3JpZFRyYWNrR3Jv
dXAodmFsdWUsIHN0YXRlLCB0cmFja1NpemVzKTsKIH0KIAogCkBAIC0yOTg5LDkgKzI5NzEsOSBA
QCBzdGF0aWMgYm9vbCBoYXNWYXJpYWJsZVJlZmVyZW5jZShDU1NWYWx1ZSogdmFsdWUpCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJsZXMo
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8c3RkOjpwYWlyPENTU1By
b3BlcnR5SUQsIFN0cmluZz4gPiYga25vd25FeHByZXNzaW9ucykKK3ZvaWQgU3R5bGVSZXNvbHZl
cjo6cmVzb2x2ZVZhcmlhYmxlcyhTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwg
U3RyaW5nPiA+JiBrbm93bkV4cHJlc3Npb25zKQogewotICAgIHN0ZDo6cGFpcjxDU1NQcm9wZXJ0
eUlELCBTdHJpbmc+IGV4cHJlc3Npb24oaWQsIHZhbHVlLT5zZXJpYWxpemVSZXNvbHZpbmdWYXJp
YWJsZXMoKnN0eWxlKCktPnZhcmlhYmxlcygpKSk7CisgICAgc3RkOjpwYWlyPENTU1Byb3BlcnR5
SUQsIFN0cmluZz4gZXhwcmVzc2lvbihpZCwgdmFsdWUtPnNlcmlhbGl6ZVJlc29sdmluZ1Zhcmlh
Ymxlcygqc3RhdGUuc3R5bGUoKS0+dmFyaWFibGVzKCkpKTsKIAogICAgIGlmIChrbm93bkV4cHJl
c3Npb25zLmNvbnRhaW5zKGV4cHJlc3Npb24pKQogICAgICAgICByZXR1cm47IC8vIGN5Y2xlIGRl
dGVjdGVkLgpAQCAtMzAwNiwzNiArMjk4OCwzNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlc29s
dmVWYXJpYWJsZXMoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8cwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHRTZXQtPnByb3BlcnR5Q291bnQoKTsg
aSsrKSB7CiAgICAgICAgIFN0eWxlUHJvcGVydHlTZXQ6OlByb3BlcnR5UmVmZXJlbmNlIHByb3Bl
cnR5ID0gcmVzdWx0U2V0LT5wcm9wZXJ0eUF0KGkpOwogICAgICAgICBpZiAocHJvcGVydHkuaWQo
KSAhPSBDU1NQcm9wZXJ0eVZhcmlhYmxlICYmIGhhc1ZhcmlhYmxlUmVmZXJlbmNlKHByb3BlcnR5
LnZhbHVlKCkpKQotICAgICAgICAgICAgcmVzb2x2ZVZhcmlhYmxlcyhwcm9wZXJ0eS5pZCgpLCBw
cm9wZXJ0eS52YWx1ZSgpLCBrbm93bkV4cHJlc3Npb25zKTsKKyAgICAgICAgICAgIHJlc29sdmVW
YXJpYWJsZXMoc3RhdGUsIHByb3BlcnR5LmlkKCksIHByb3BlcnR5LnZhbHVlKCksIGtub3duRXhw
cmVzc2lvbnMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcHBseVByb3BlcnR5KHByb3Bl
cnR5LmlkKCksIHByb3BlcnR5LnZhbHVlKCkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShz
dGF0ZSwgcHJvcGVydHkuaWQoKSwgcHJvcGVydHkudmFsdWUoKSk7CiAgICAgfQogfQogI2VuZGlm
CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoU3R5bGVS
ZXNvbHZlclN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQog
ewogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgIGlmIChpZCAhPSBDU1NQcm9wZXJ0eVZh
cmlhYmxlICYmIGhhc1ZhcmlhYmxlUmVmZXJlbmNlKHZhbHVlKSkgewogICAgICAgICBWZWN0b3I8
c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiBrbm93bkV4cHJlc3Npb25zOwotICAg
ICAgICByZXNvbHZlVmFyaWFibGVzKGlkLCB2YWx1ZSwga25vd25FeHByZXNzaW9ucyk7CisgICAg
ICAgIHJlc29sdmVWYXJpYWJsZXMoc3RhdGUsIGlkLCB2YWx1ZSwga25vd25FeHByZXNzaW9ucyk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAotICAgIGJvb2wgaXNJbmhlcml0ID0g
bV9wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7Ci0gICAgYm9vbCBpc0lu
aXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAoIW1fcGFyZW50Tm9kZSAmJiB2YWx1
ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKKyAgICBib29sIGlzSW5oZXJpdCA9IHN0YXRlLm1fcGFy
ZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpOworICAgIGJvb2wgaXNJbml0aWFs
ID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgKCFzdGF0ZS5tX3BhcmVudE5vZGUgJiYgdmFs
dWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7CiAKICAgICBBU1NFUlQoIWlzSW5oZXJpdCB8fCAhaXNJ
bml0aWFsKTsgLy8gaXNJbmhlcml0IC0+ICFpc0luaXRpYWwgJiYgaXNJbml0aWFsIC0+ICFpc0lu
aGVyaXQKLSAgICBBU1NFUlQoIWlzSW5oZXJpdCB8fCAobV9wYXJlbnROb2RlICYmIG1fcGFyZW50
U3R5bGUpKTsgLy8gaXNJbmhlcml0IC0+IChtX3BhcmVudE5vZGUgJiYgbV9wYXJlbnRTdHlsZSkK
KyAgICBBU1NFUlQoIWlzSW5oZXJpdCB8fCAoc3RhdGUubV9wYXJlbnROb2RlICYmIHN0YXRlLm1f
cGFyZW50U3R5bGUpKTsgLy8gaXNJbmhlcml0IC0+IChzdGF0ZS5tX3BhcmVudE5vZGUgJiYgc3Rh
dGUubV9wYXJlbnRTdHlsZSkKIAotICAgIGlmICghYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxl
KCkgJiYgKCFhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgfHwgIWlzVmFsaWRWaXNp
dGVkTGlua1Byb3BlcnR5KGlkKSkpIHsKKyAgICBpZiAoIXN0YXRlLm1fYXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlICYmICghc3RhdGUubV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
IHx8ICFpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShpZCkpKSB7CiAgICAgICAgIC8vIExpbWl0
IHRoZSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb25seSB0aGUgb25lcyBob25v
cmVkIGJ5IDp2aXNpdGVkLgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGlzSW5o
ZXJpdCAmJiAhbV9wYXJlbnRTdHlsZS0+aGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMo
KSAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQotICAgICAgICBtX3Bh
cmVudFN0eWxlLT5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpOworICAgIGlm
IChpc0luaGVyaXQgJiYgIXN0YXRlLm1fcGFyZW50U3R5bGUtPmhhc0V4cGxpY2l0bHlJbmhlcml0
ZWRQcm9wZXJ0aWVzKCkgJiYgIUNTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkK
KyAgICAgICAgc3RhdGUubV9wYXJlbnRTdHlsZS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFBy
b3BlcnRpZXMoKTsKIAogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgIGlmIChpZCA9PSBD
U1NQcm9wZXJ0eVZhcmlhYmxlKSB7CkBAIC0zMDQzLDcgKzMwMjUsNyBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgICAgICBDU1NWYXJpYWJsZVZhbHVlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PENTU1Zhcmlh
YmxlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIEFTU0VSVCghdmFyaWFibGUtPm5hbWUoKS5pc0Vt
cHR5KCkpOwogICAgICAgICBBU1NFUlQoIXZhcmlhYmxlLT52YWx1ZSgpLmlzRW1wdHkoKSk7Ci0g
ICAgICAgIG1fc3R5bGUtPnNldFZhcmlhYmxlKHZhcmlhYmxlLT5uYW1lKCksIHZhcmlhYmxlLT52
YWx1ZSgpKTsKKyAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0VmFyaWFibGUodmFyaWFibGUtPm5h
bWUoKSwgdmFyaWFibGUtPnZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlm
CkBAIC0zMDUyLDE3ICszMDM0LDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY29uc3QgUHJvcGVydHlI
YW5kbGVyJiBoYW5kbGVyID0gbV9zdHlsZUJ1aWxkZXIucHJvcGVydHlIYW5kbGVyKGlkKTsKICAg
ICBpZiAoaGFuZGxlci5pc1ZhbGlkKCkpIHsKICAgICAgICAgaWYgKGlzSW5oZXJpdCkKLSAgICAg
ICAgICAgIGhhbmRsZXIuYXBwbHlJbmhlcml0VmFsdWUoaWQsIHRoaXMpOworICAgICAgICAgICAg
aGFuZGxlci5hcHBseUluaGVyaXRWYWx1ZShpZCwgc3RhdGUpOwogICAgICAgICBlbHNlIGlmIChp
c0luaXRpYWwpCi0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5pdGlhbFZhbHVlKGlkLCB0aGlz
KTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbml0aWFsVmFsdWUoaWQsIHN0YXRlKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgaGFuZGxlci5hcHBseVZhbHVlKGlkLCB0aGlzLCB2YWx1
ZSk7CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5VmFsdWUoaWQsIHN0YXRlLCB2YWx1ZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpID8gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWx1ZSkgOiAwOwogCi0gICAgZmxvYXQgem9vbUZhY3RvciA9IG1fc3R5bGUt
PmVmZmVjdGl2ZVpvb20oKTsKKyAgICBmbG9hdCB6b29tRmFjdG9yID0gc3RhdGUubV9zdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpOwogCiAgICAgLy8gV2hhdCBmb2xsb3dzIGlzIGEgbGlzdCB0aGF0IG1h
cHMgdGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIgY29ycmVzcG9uZGluZyBmcm9udC1lbmQK
ICAgICAvLyBSZW5kZXJTdHlsZSB2YWx1ZXMuIFNob3J0aGFuZHMgKGUuZy4gYm9yZGVyLCBiYWNr
Z3JvdW5kKSBvY2N1ciBpbiB0aGlzIGxpc3QgYXMgd2VsbCBhbmQKQEAgLTMwNzYsNyArMzA1OCw3
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAvLyBub3RlIGlzIGEgcmVtaW5kZXIgdGhhdCBl
dmVudHVhbGx5ICJpbmhlcml0IiBuZWVkcyB0byBiZSBzdXBwb3J0ZWQuCiAKICAgICAgICAgICAg
IGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5jbGVhckNvbnRlbnQo
KTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5jbGVhckNvbnRlbnQoKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKQEAgLTMwODgsMTkgKzMwNzAsMTkg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFsdWUo
KTsKICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzR3JhZGllbnRWYWx1ZSgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdl
OjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+KGl0ZW0pLT5ncmFkaWVudFdp
dGhTdHlsZXNSZXNvbHZlZCh0aGlzKS5nZXQoKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNy
ZWF0ZShzdGF0aWNfY2FzdDxDU1NHcmFkaWVudFZhbHVlKj4oaXRlbSktPmdyYWRpZW50V2l0aFN0
eWxlc1Jlc29sdmVkKHN0YXRlKS5nZXQoKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoU3R5bGVH
ZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUq
PihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tX3N0eWxl
LT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAg
ICBkaWRTZXQgPSB0cnVlOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQogICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNJbWFnZVNldFZhbHVlKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVy
dHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVNldFZhbHVlKj4oaXRlbSkpLCBkaWRTZXQp
OworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRDb250ZW50KHNldE9yUGVu
ZGluZ0Zyb21WYWx1ZShzdGF0ZSwgQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJ
bWFnZVNldFZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRT
ZXQgPSB0cnVlOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAg
aWYgKGl0ZW0tPmlzSW1hZ2VWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUt
PnNldENvbnRlbnQoY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwg
c3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAg
ICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0Q29udGVudChjYWNoZWRPclBlbmRpbmdGcm9tVmFs
dWUoc3RhdGUsIENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+
KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzExMSwx
NyArMzA5MywxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBjb250ZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0p
OwogCiAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNTdHJpbmcoKSkgewotICAg
ICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNvbnRlbnRWYWx1ZS0+Z2V0U3Ry
aW5nVmFsdWUoKS5pbXBsKCksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1f
c3R5bGUtPnNldENvbnRlbnQoY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwoKSwg
ZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNBdHRyKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IENhbiBhIG5hbWVzcGFjZSBiZSBzcGVjaWZpZWQgZm9yIGFuIGF0dHIo
Zm9vKT8KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3R5bGUtPnN0eWxlVHlwZSgpID09IE5P
UFNFVURPKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0VW5pcXVlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5tX3N0eWxlLT5zdHlsZVR5cGUoKSA9PSBOT1BT
RVVETykKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldFVuaXF1ZSgp
OwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3Bh
cmVudFN0eWxlLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1f
cGFyZW50U3R5bGUtPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgICAgICAgICBRdWFsaWZpZWRO
YW1lIGF0dHIobnVsbEF0b20sIGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCks
IG51bGxBdG9tKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSA9IG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0dHIpOwotICAgICAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUuaW1w
bCgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZh
bHVlID0gc3RhdGUubV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldENvbnRlbnQodmFsdWUuaXNOdWxsKCkgPyBlbXB0eUF0
b20gOiB2YWx1ZS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQgdGhl
IGF0dHJpYnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZQogICAgICAgICAgICAgICAgICAgICBt
X2ZlYXR1cmVzLmF0dHJzSW5SdWxlcy5hZGQoYXR0ci5sb2NhbE5hbWUoKS5pbXBsKCkpOwpAQCAt
MzEzMiwyNCArMzExNCwyNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgICAgICBpZiAo
bGlzdFN0eWxlSWRlbnQgIT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgICAgICAgICAgICAg
bGlzdFN0eWxlVHlwZSA9IHN0YXRpY19jYXN0PEVMaXN0U3R5bGVUeXBlPihsaXN0U3R5bGVJZGVu
dCAtIENTU1ZhbHVlRGlzYyk7CiAgICAgICAgICAgICAgICAgICAgIE93blB0cjxDb3VudGVyQ29u
dGVudD4gY291bnRlciA9IGFkb3B0UHRyKG5ldyBDb3VudGVyQ29udGVudChjb3VudGVyVmFsdWUt
PmlkZW50aWZpZXIoKSwgbGlzdFN0eWxlVHlwZSwgY291bnRlclZhbHVlLT5zZXBhcmF0b3IoKSkp
OwotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNvdW50ZXIucmVsZWFz
ZSgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRDb250
ZW50KGNvdW50ZXIucmVsZWFzZSgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRT
ZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAoY29udGVudFZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVPcGVuUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRDb250ZW50KE9QRU5fUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZS5tX3N0eWxlLT5zZXRDb250ZW50KE9QRU5fUVVPVEUsIGRpZFNldCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDbG9zZVF1b3RlOgotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChDTE9TRV9RVU9URSwgZGlk
U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldENvbnRlbnQo
Q0xPU0VfUVVPVEUsIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVOb09wZW5RdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5
bGUtPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0KTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ2xvc2VR
dW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoTk9fQ0xP
U0VfUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tX3N0eWxl
LT5zZXRDb250ZW50KE5PX0NMT1NFX1FVT1RFLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMzE1OSwxNiArMzE0MSwxNiBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgh
ZGlkU2V0KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyQ29udGVudCgpOworICAgICAg
ICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPmNsZWFyQ29udGVudCgpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVF1b3RlczoKICAgICAgICAgaWYg
KGlzSW5oZXJpdCkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKG1fcGFyZW50U3R5
bGUtPnF1b3RlcygpKTsKKyAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldFF1b3RlcyhzdGF0
ZS5tX3BhcmVudFN0eWxlLT5xdW90ZXMoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVv
dGVzKDApOworICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0UXVvdGVzKDApOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3Qo
KSkgewpAQCAtMzE4Niw0MyArMzE2OCw0MyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAg
IFN0cmluZyBlbmRRdW90ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oc2Vjb25k
KS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAgICAgICBxdW90ZXMtPmFkZFBhaXIoc3Rk
OjptYWtlX3BhaXIoc3RhcnRRdW90ZSwgZW5kUXVvdGUpKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhxdW90ZXMpOworICAgICAgICAgICAgc3RhdGUubV9z
dHlsZS0+c2V0UXVvdGVzKHF1b3Rlcyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKSB7CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAgIG1fc3R5
bGUtPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpjcmVhdGUoKSk7CisgICAgICAgICAgICAgICAgc3Rh
dGUubV9zdHlsZS0+c2V0UXVvdGVzKFF1b3Rlc0RhdGE6OmNyZWF0ZSgpKTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHk6IHsKICAgICAg
ICAgLy8gbGlzdCBvZiBzdHJpbmdzIGFuZCBpZHMKICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewot
ICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IG1fcGFy
ZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9u
IGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAg
ICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLm1fcGFyZW50
U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZv
bnREZXNjcmlwdGlvbiA9IHN0YXRlLm1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0
aW9uLmdlbmVyaWNGYW1pbHkoKSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFt
aWx5KHBhcmVudEZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpKTsKICAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQocGFyZW50Rm9udERlc2NyaXB0aW9uLmlz
U3BlY2lmaWVkRm9udCgpKTsKLSAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVz
Y3JpcHRpb24pOworICAgICAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
aXNJbml0aWFsKSB7CiAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gaW5pdGlhbERlc2MgPSBG
b250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5tX3N0eWxlLT5mb250RGVzY3JpcHRpb24o
KTsKICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBzaXplIHRvIGFjY291bnQg
Zm9yIHRoZSBnZW5lcmljIGZhbWlseSBjaGFuZ2UgZnJvbSBtb25vc3BhY2UKICAgICAgICAgICAg
IC8vIHRvIG5vbi1tb25vc3BhY2UuCiAgICAgICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmtl
eXdvcmRTaXplKCkgJiYgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSkKLSAg
ICAgICAgICAgICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5
d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24ua2V5d29y
ZFNpemUoKSAtIDEsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgc2V0Rm9udFNpemUoc3RhdGUs
IGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKGRvY3VtZW50KCksIENTU1ZhbHVl
WHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0gMSwgZmFsc2UpKTsKICAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KGluaXRpYWxEZXNjLmdl
bmVyaWNGYW1pbHkoKSk7CiAgICAgICAgICAgICBpZiAoIWluaXRpYWxEZXNjLmZpcnN0RmFtaWx5
KCkuZmFtaWx5SXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRG
YW1pbHkoaW5pdGlhbERlc2MuZmlyc3RGYW1pbHkoKSk7Ci0gICAgICAgICAgICBzZXRGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIHN0YXRlLnNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gc3RhdGUubV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIEZvbnRGYW1pbHkm
IGZpcnN0RmFtaWx5ID0gZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7CiAgICAgICAgIEZv
bnRGYW1pbHkqIGN1cnJGYW1pbHkgPSAwOwogCkBAIC0zMjkxLDQzICszMjczLDQzIEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgIC8vIElmIGN1cnJGYW1pbHkgaXMgbm9uLXplcm8gdGhlbiB3ZSBzZXQg
YXQgbGVhc3Qgb25lIGZhbWlseSBvbiB0aGlzIGRlc2NyaXB0aW9uLgogICAgICAgICBpZiAoY3Vy
ckZhbWlseSkgewogICAgICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgp
ICYmIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkgIT0gb2xkRmFtaWx5VXNl
ZEZpeGVkRGVmYXVsdFNpemUpCi0gICAgICAgICAgICAgICAgc2V0Rm9udFNpemUoZm9udERlc2Ny
aXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsg
Zm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVm
YXVsdFNpemUpKTsKKyAgICAgICAgICAgICAgICBzZXRGb250U2l6ZShzdGF0ZSwgZm9udERlc2Ny
aXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsg
Zm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVm
YXVsdFNpemUpKTsKIAotICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbik7CisgICAgICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogLy8gc2hvcnRoYW5kIHBy
b3BlcnRpZXMKICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZDoKICAgICAgICAgaWYgKGlz
SW5pdGlhbCkgewotICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJCYWNrZ3JvdW5kTGF5ZXJzKCk7
Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoKSk7CisgICAg
ICAgICAgICBzdGF0ZS5tX3N0eWxlLT5jbGVhckJhY2tncm91bmRMYXllcnMoKTsKKyAgICAgICAg
ICAgIHN0YXRlLm1fc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihDb2xvcigpKTsKICAgICAgICAg
fSBlbHNlIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRCYWNr
Z3JvdW5kTGF5ZXJzKCptX3BhcmVudFN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkpOwotICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKG1fcGFyZW50U3R5bGUtPmJhY2tncm91
bmRDb2xvcigpKTsKKyAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPmluaGVyaXRCYWNrZ3JvdW5k
TGF5ZXJzKCpzdGF0ZS5tX3BhcmVudFN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkpOworICAgICAg
ICAgICAgc3RhdGUubV9zdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKHN0YXRlLm1fcGFyZW50U3R5
bGUtPmJhY2tncm91bmRDb2xvcigpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2s6CiAgICAgICAgIGlmIChpc0luaXRpYWwpCi0gICAg
ICAgICAgICBtX3N0eWxlLT5jbGVhck1hc2tMYXllcnMoKTsKKyAgICAgICAgICAgIHN0YXRlLm1f
c3R5bGUtPmNsZWFyTWFza0xheWVycygpOwogICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCi0g
ICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0TWFza0xheWVycygqbV9wYXJlbnRTdHlsZS0+bWFz
a0xheWVycygpKTsKKyAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPmluaGVyaXRNYXNrTGF5ZXJz
KCpzdGF0ZS5tX3BhcmVudFN0eWxlLT5tYXNrTGF5ZXJzKCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnQ6CiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAg
ICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3BhcmVudFN0eWxlLT5m
b250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldExpbmVIZWlnaHQobV9w
YXJlbnRTdHlsZS0+c3BlY2lmaWVkTGluZUhlaWdodCgpKTsKLSAgICAgICAgICAgIG1fbGluZUhl
aWdodFZhbHVlID0gMDsKLSAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0
YXRlLm1fcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgc3RhdGUu
bV9zdHlsZS0+c2V0TGluZUhlaWdodChzdGF0ZS5tX3BhcmVudFN0eWxlLT5zcGVjaWZpZWRMaW5l
SGVpZ2h0KCkpOworICAgICAgICAgICAgc3RhdGUubV9saW5lSGVpZ2h0VmFsdWUgPSAwOworICAg
ICAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAg
ICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKSB7CiAgICAgICAgICAgICBTZXR0aW5ncyogc2V0dGlu
Z3MgPSBkb2N1bWVudFNldHRpbmdzKCk7CiAgICAgICAgICAgICBBU1NFUlQoc2V0dGluZ3MpOyAv
LyBJZiB3ZSdyZSBkb2luZyBzdHlsZSByZXNvbHV0aW9uLCB0aGlzIGRvY3VtZW50IHNob3VsZCBh
bHdheXMgYmUgaW4gYSBmcmFtZSBhbmQgdGh1cyBoYXZlIHNldHRpbmdzCiAgICAgICAgICAgICBp
ZiAoIXNldHRpbmdzKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGluaXRp
YWxpemVGb250U3R5bGUoc2V0dGluZ3MpOworICAgICAgICAgICAgaW5pdGlhbGl6ZUZvbnRTdHls
ZShzdGF0ZSwgc2V0dGluZ3MpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlKSB7
Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFs
TGluZUhlaWdodCgpKTsKLSAgICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKKyAgICAg
ICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxM
aW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgc3RhdGUubV9saW5lSGVpZ2h0VmFsdWUgPSAwOwog
CiAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgICAgICAg
ICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Gb250KHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpLCBmb250RGVzY3JpcHRpb24pOwpAQCAtMzM0MywyNyArMzMyNSwyNyBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVy
Rm9udChkb2N1bWVudCgpLT5wcmludGluZygpIHx8ICFzZXR0aW5ncy0+c2NyZWVuRm9udFN1YnN0
aXR1dGlvbkVuYWJsZWQoKSk7CiAKICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIHpvb20g
ZmFjdG9yLgotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUo
Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQoKSwgbV9zdHlsZS5nZXQo
KSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIGZvbnREZXNjcmlwdGlvbi5zcGVj
aWZpZWRTaXplKCksIHVzZVNWR1pvb21SdWxlcygpKSk7Ci0gICAgICAgICAgICAgICAgc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShk
b2N1bWVudCgpLCBzdGF0ZS5tX3N0eWxlLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUo
KSwgZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSwgc3RhdGUudXNlU1ZHWm9vbVJ1bGVz
KCkpKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNGb250
VmFsdWUoKSkgewogICAgICAgICAgICAgRm9udFZhbHVlKiBmb250ID0gc3RhdGljX2Nhc3Q8Rm9u
dFZhbHVlKj4odmFsdWUpOwogICAgICAgICAgICAgaWYgKCFmb250LT5zdHlsZSB8fCAhZm9udC0+
dmFyaWFudCB8fCAhZm9udC0+d2VpZ2h0CiAgICAgICAgICAgICAgICAgfHwgIWZvbnQtPnNpemUg
fHwgIWZvbnQtPmxpbmVIZWlnaHQgfHwgIWZvbnQtPmZhbWlseSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlLCBm
b250LT5zdHlsZS5nZXQoKSk7Ci0gICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
Rm9udFZhcmlhbnQsIGZvbnQtPnZhcmlhbnQuZ2V0KCkpOwotICAgICAgICAgICAgYXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGZvbnQtPndlaWdodC5nZXQoKSk7CisgICAgICAg
ICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgZm9udC0+c3R5
bGUuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlG
b250VmFyaWFudCwgZm9udC0+dmFyaWFudC5nZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3Bl
cnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGZvbnQtPndlaWdodC5nZXQoKSk7CiAg
ICAgICAgICAgICAvLyBUaGUgcHJldmlvdXMgcHJvcGVydGllcyBjYW4gZGlydHkgb3VyIGZvbnQg
YnV0IHRoZXkgZG9uJ3QgdHJ5IHRvIHJlYWQgdGhlIGZvbnQncwogICAgICAgICAgICAgLy8gcHJv
cGVydGllcyBiYWNrLCB3aGljaCBpcyBzYWZlLiBIb3dldmVyIGlmIGZvbnQtc2l6ZSBpcyB1c2lu
ZyB0aGUgJ2V4JyB1bml0LCBpdCB3aWxsCiAgICAgICAgICAgICAvLyBuZWVkIHF1ZXJ5IHRoZSBk
aXJ0aWVkIGZvbnQncyB4LWhlaWdodCB0byBnZXQgdGhlIGNvbXB1dGVkIHNpemUuIFRvIGJlIHNh
ZmUgaW4gdGhpcwogICAgICAgICAgICAgLy8gY2FzZSwgbGV0J3MganVzdCB1cGRhdGUgdGhlIGZv
bnQgbm93LgotICAgICAgICAgICAgdXBkYXRlRm9udCgpOwotICAgICAgICAgICAgYXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBmb250LT5zaXplLmdldCgpKTsKKyAgICAgICAgICAg
IHVwZGF0ZUZvbnQoc3RhdGUpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NT
UHJvcGVydHlGb250U2l6ZSwgZm9udC0+c2l6ZS5nZXQoKSk7CiAKLSAgICAgICAgICAgIG1fbGlu
ZUhlaWdodFZhbHVlID0gZm9udC0+bGluZUhlaWdodC5nZXQoKTsKKyAgICAgICAgICAgIHN0YXRl
Lm1fbGluZUhlaWdodFZhbHVlID0gZm9udC0+bGluZUhlaWdodC5nZXQoKTsKIAotICAgICAgICAg
ICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIGZvbnQtPmZhbWlseS5nZXQo
KSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRGYW1p
bHksIGZvbnQtPmZhbWlseS5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogCkBA
IC0zMzczLDExICszMzU1LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJveFNoYWRvdzogewogICAgICAgICBpZiAoaXNJbmhlcml0KSB7CiAgICAgICAgICAgICBp
ZiAoaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93KQotICAgICAgICAgICAgICAgIHJldHVybiBt
X3N0eWxlLT5zZXRUZXh0U2hhZG93KG1fcGFyZW50U3R5bGUtPnRleHRTaGFkb3coKSA/IGFkb3B0
UHRyKG5ldyBTaGFkb3dEYXRhKCptX3BhcmVudFN0eWxlLT50ZXh0U2hhZG93KCkpKSA6IG51bGxw
dHIpOwotICAgICAgICAgICAgcmV0dXJuIG1fc3R5bGUtPnNldEJveFNoYWRvdyhtX3BhcmVudFN0
eWxlLT5ib3hTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCptX3BhcmVudFN0eWxl
LT5ib3hTaGFkb3coKSkpIDogbnVsbHB0cik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRl
Lm1fc3R5bGUtPnNldFRleHRTaGFkb3coc3RhdGUubV9wYXJlbnRTdHlsZS0+dGV4dFNoYWRvdygp
ID8gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoKnN0YXRlLm1fcGFyZW50U3R5bGUtPnRleHRTaGFk
b3coKSkpIDogbnVsbHB0cik7CisgICAgICAgICAgICByZXR1cm4gc3RhdGUubV9zdHlsZS0+c2V0
Qm94U2hhZG93KHN0YXRlLm1fcGFyZW50U3R5bGUtPmJveFNoYWRvdygpID8gYWRvcHRQdHIobmV3
IFNoYWRvd0RhdGEoKnN0YXRlLm1fcGFyZW50U3R5bGUtPmJveFNoYWRvdygpKSkgOiBudWxscHRy
KTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXNJbml0aWFsIHx8IHByaW1pdGl2ZVZhbHVlKSAv
LyBpbml0aWFsIHwgbm9uZQotICAgICAgICAgICAgcmV0dXJuIGlkID09IENTU1Byb3BlcnR5VGV4
dFNoYWRvdyA/IG1fc3R5bGUtPnNldFRleHRTaGFkb3cobnVsbHB0cikgOiBtX3N0eWxlLT5zZXRC
b3hTaGFkb3cobnVsbHB0cik7CisgICAgICAgICAgICByZXR1cm4gaWQgPT0gQ1NTUHJvcGVydHlU
ZXh0U2hhZG93ID8gc3RhdGUubV9zdHlsZS0+c2V0VGV4dFNoYWRvdyhudWxscHRyKSA6IHN0YXRl
Lm1fc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKIAogICAgICAgICBpZiAoIXZhbHVlLT5p
c1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzM4NywyOSArMzM2OSwyOSBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzU2hhZG93VmFsdWUo
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIFNoYWRvd1ZhbHVlKiBp
dGVtID0gc3RhdGljX2Nhc3Q8U2hhZG93VmFsdWUqPihjdXJyVmFsdWUpOwotICAgICAgICAgICAg
aW50IHggPSBpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVu
dFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGludCB5ID0gaXRlbS0+eS0+Y29tcHV0
ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7Ci0g
ICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVu
Z3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7Ci0g
ICAgICAgICAgICBpbnQgc3ByZWFkID0gaXRlbS0+c3ByZWFkID8gaXRlbS0+c3ByZWFkLT5jb21w
dXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSA6
IDA7CisgICAgICAgICAgICBpbnQgeCA9IGl0ZW0tPngtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0
ZS5zdHlsZSgpLCBzdGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAg
ICAgICAgaW50IHkgPSBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwg
c3RhdGUubV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGludCBi
bHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5z
dHlsZSgpLCBzdGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpIDogMDsKKyAgICAg
ICAgICAgIGludCBzcHJlYWQgPSBpdGVtLT5zcHJlYWQgPyBpdGVtLT5zcHJlYWQtPmNvbXB1dGVM
ZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21G
YWN0b3IpIDogMDsKICAgICAgICAgICAgIFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxlID0gaXRlbS0+
c3R5bGUgJiYgaXRlbS0+c3R5bGUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnNldCA/IEluc2V0
IDogTm9ybWFsOwogICAgICAgICAgICAgQ29sb3IgY29sb3I7CiAgICAgICAgICAgICBpZiAoaXRl
bS0+Y29sb3IpCi0gICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1
ZShpdGVtLT5jb2xvci5nZXQoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChtX3N0eWxlKQotICAg
ICAgICAgICAgICAgIGNvbG9yID0gbV9zdHlsZS0+Y29sb3IoKTsKKyAgICAgICAgICAgICAgICBj
b2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCBpdGVtLT5jb2xvci5nZXQoKSk7
CisgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS5tX3N0eWxlKQorICAgICAgICAgICAgICAgIGNv
bG9yID0gc3RhdGUubV9zdHlsZS0+Y29sb3IoKTsKIAogICAgICAgICAgICAgT3duUHRyPFNoYWRv
d0RhdGE+IHNoYWRvd0RhdGEgPSBhZG9wdFB0cihuZXcgU2hhZG93RGF0YShJbnRQb2ludCh4LCB5
KSwgYmx1ciwgc3ByZWFkLCBzaGFkb3dTdHlsZSwgaWQgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3hT
aGFkb3csIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFyZW50KSk7CiAg
ICAgICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93KQotICAgICAgICAgICAg
ICAgIG1fc3R5bGUtPnNldFRleHRTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgo
KSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKKyAg
ICAgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRUZXh0U2hhZG93KHNoYWRvd0RhdGEucmVs
ZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhl
IGZpcnN0IGVudHJ5CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8g
dGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CisgICAgICAgICAgICAgICAg
c3RhdGUubV9zdHlsZS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4
KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Qm94UmVmbGVjdDogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChib3hS
ZWZsZWN0LCBCb3hSZWZsZWN0KQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUpIHsKLSAgICAg
ICAgICAgIG1fc3R5bGUtPnNldEJveFJlZmxlY3QoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3hSZWZs
ZWN0KCkpOworICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0Qm94UmVmbGVjdChSZW5kZXJT
dHlsZTo6aW5pdGlhbEJveFJlZmxlY3QoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIApAQCAtMzQyMCwxMyArMzQwMiwxNSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBSZWZQdHI8
U3R5bGVSZWZsZWN0aW9uPiByZWZsZWN0aW9uID0gU3R5bGVSZWZsZWN0aW9uOjpjcmVhdGUoKTsK
ICAgICAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0aW9uKCpyZWZsZWN0VmFsdWUtPmRpcmVjdGlv
bigpKTsKICAgICAgICAgaWYgKHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCkpCi0gICAgICAgICAgICBy
ZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVjdFZhbHVlLT5vZmZzZXQoKS0+Y29udmVydFRvTGVu
Z3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0
ZWRDb252ZXJzaW9uPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpKTsK
KyAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChyZWZsZWN0VmFsdWUtPm9mZnNldCgp
LT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJz
aW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0YXRlLnN0eWxlKCksIHN0YXRlLm1fcm9vdEVs
ZW1lbnRTdHlsZSwgem9vbUZhY3RvcikpOwogICAgICAgICBOaW5lUGllY2VJbWFnZSBtYXNrOwog
ICAgICAgICBtYXNrLnNldE1hc2tEZWZhdWx0cygpOwotICAgICAgICBtX3N0eWxlTWFwLm1hcE5p
bmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUtPm1hc2soKSwgbWFzayk7CisKKyAgICAgICAg
Q1NTVG9TdHlsZU1hcCBzdHlsZU1hcChzdGF0ZSk7CisgICAgICAgIHN0eWxlTWFwLm1hcE5pbmVQ
aWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUtPm1hc2soKSwgbWFzayk7CiAgICAgICAgIHJlZmxl
Y3Rpb24tPnNldE1hc2sobWFzayk7CiAKLSAgICAgICAgbV9zdHlsZS0+c2V0Qm94UmVmbGVjdChy
ZWZsZWN0aW9uLnJlbGVhc2UoKSk7CisgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldEJveFJlZmxl
Y3QocmVmbGVjdGlvbi5yZWxlYXNlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNh
c2UgQ1NTUHJvcGVydHlTcmM6IC8vIE9ubHkgdXNlZCBpbiBAZm9udC1mYWNlIHJ1bGVzLgpAQCAt
MzQzNSwyOSArMzQxOSwyOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGU6CiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsK
LSAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1bGVDb2xvcihtX3BhcmVudFN0eWxlLT5j
b2x1bW5SdWxlQ29sb3IoKS5pc1ZhbGlkKCkgPyBtX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlQ29s
b3IoKSA6IG1fcGFyZW50U3R5bGUtPmNvbG9yKCkpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0
Q29sdW1uUnVsZVN0eWxlKG1fcGFyZW50U3R5bGUtPmNvbHVtblJ1bGVTdHlsZSgpKTsKLSAgICAg
ICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1bGVXaWR0aChtX3BhcmVudFN0eWxlLT5jb2x1bW5S
dWxlV2lkdGgoKSk7CisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRDb2x1bW5SdWxlQ29s
b3Ioc3RhdGUubV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkuaXNWYWxpZCgpID8gc3Rh
dGUubV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkgOiBzdGF0ZS5tX3BhcmVudFN0eWxl
LT5jb2xvcigpKTsKKyAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldENvbHVtblJ1bGVTdHls
ZShzdGF0ZS5tX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlU3R5bGUoKSk7CisgICAgICAgICAgICBz
dGF0ZS5tX3N0eWxlLT5zZXRDb2x1bW5SdWxlV2lkdGgoc3RhdGUubV9wYXJlbnRTdHlsZS0+Y29s
dW1uUnVsZVdpZHRoKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAg
ICAgIG1fc3R5bGUtPnJlc2V0Q29sdW1uUnVsZSgpOworICAgICAgICAgICAgc3RhdGUubV9zdHls
ZS0+cmVzZXRDb2x1bW5SdWxlKCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFycXVlZToKICAgICAgICAgaWYgKCFpc0luaGVyaXQpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVEaXJlY3Rpb24obV9wYXJlbnRTdHls
ZS0+bWFycXVlZURpcmVjdGlvbigpKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3Jl
bWVudChtX3BhcmVudFN0eWxlLT5tYXJxdWVlSW5jcmVtZW50KCkpOwotICAgICAgICBtX3N0eWxl
LT5zZXRNYXJxdWVlU3BlZWQobV9wYXJlbnRTdHlsZS0+bWFycXVlZVNwZWVkKCkpOwotICAgICAg
ICBtX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KG1fcGFyZW50U3R5bGUtPm1hcnF1ZWVMb29w
Q291bnQoKSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVCZWhhdmlvcihtX3BhcmVudFN0
eWxlLT5tYXJxdWVlQmVoYXZpb3IoKSk7CisgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldE1hcnF1
ZWVEaXJlY3Rpb24oc3RhdGUubV9wYXJlbnRTdHlsZS0+bWFycXVlZURpcmVjdGlvbigpKTsKKyAg
ICAgICAgc3RhdGUubV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChzdGF0ZS5tX3BhcmVudFN0
eWxlLT5tYXJxdWVlSW5jcmVtZW50KCkpOworICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRNYXJx
dWVlU3BlZWQoc3RhdGUubV9wYXJlbnRTdHlsZS0+bWFycXVlZVNwZWVkKCkpOworICAgICAgICBz
dGF0ZS5tX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KHN0YXRlLm1fcGFyZW50U3R5bGUtPm1h
cnF1ZWVMb29wQ291bnQoKSk7CisgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldE1hcnF1ZWVCZWhh
dmlvcihzdGF0ZS5tX3BhcmVudFN0eWxlLT5tYXJxdWVlQmVoYXZpb3IoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVJlcGV0aXRpb246IHsKICAg
ICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFycXVlZUxvb3BDb3VudCwgTWFycXVl
ZUxvb3BDb3VudCkKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
SW5maW5pdGUpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsg
Ly8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5z
ZXRNYXJxdWVlTG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCiAgICAg
ICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKQotICAgICAgICAgICAgbV9z
dHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7
CisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KHByaW1pdGl2
ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVNwZWVkOiB7CkBAIC0zNDY3LDE5ICszNDUxLDE5IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgICAgIGlmIChpbnQgaWRlbnQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSkgewogICAgICAgICAgICAgc3dpdGNoIChpZGVudCkgewogICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZVNsb3c6Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVk
KDUwMCk7IC8vIDUwMCBtc2VjLgorICAgICAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldE1h
cnF1ZWVTcGVlZCg1MDApOyAvLyA1MDAgbXNlYy4KICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0TWFycXVlZVNwZWVkKDg1KTsgLy8gODVtc2VjLiBUaGUgV2luSUUgZGVmYXVsdC4KKyAgICAg
ICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoODUpOyAvLyA4NW1zZWMu
IFRoZSBXaW5JRSBkZWZhdWx0LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Y2FzZSBDU1NWYWx1ZUZhc3Q6Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNw
ZWVkKDEwKTsgLy8gMTBtc2VjLiBTdXBlciBmYXN0LgorICAgICAgICAgICAgICAgIHN0YXRlLm1f
c3R5bGUtPnNldE1hcnF1ZWVTcGVlZCgxMCk7IC8vIDEwbXNlYy4gU3VwZXIgZmFzdC4KICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS0+aXNUaW1lKCkpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3Bl
ZWQocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGludCwgQ1NTUHJpbWl0aXZlVmFsdWU6Ok1p
bGxpc2Vjb25kcz4oKSk7CisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRNYXJxdWVlU3Bl
ZWQocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGludCwgQ1NTUHJpbWl0aXZlVmFsdWU6Ok1p
bGxpc2Vjb25kcz4oKSk7CiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJl
cigpKSAvLyBGb3Igc2Nyb2xsYW1vdW50IHN1cHBvcnQuCi0gICAgICAgICAgICBtX3N0eWxlLT5z
ZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOworICAgICAgICAg
ICAgc3RhdGUubV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRW
YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFycXVlZUluY3JlbWVudDogewpAQCAtMzQ4OSwxOSArMzQ3MywxOSBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAg
IHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVTbWFsbDoKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVt
ZW50KExlbmd0aCgxLCBGaXhlZCkpOyAvLyAxcHguCisgICAgICAgICAgICAgICAgc3RhdGUubV9z
dHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMSwgRml4ZWQpKTsgLy8gMXB4LgogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAg
ICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCg2LCBGaXhl
ZCkpOyAvLyA2cHguIFRoZSBXaW5JRSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIHN0YXRlLm1f
c3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDYsIEZpeGVkKSk7IC8vIDZweC4gVGhl
IFdpbklFIGRlZmF1bHQuCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlTGFyZ2U6Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3Jl
bWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCisgICAgICAgICAgICAgICAgc3RhdGUu
bV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHgu
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBMZW5ndGggbWFycXVlZUxlbmd0aCA9IGNvbnZlcnRUb0ludExlbmd0aChw
cmltaXRpdmVWYWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKKyAgICAgICAgICAg
IExlbmd0aCBtYXJxdWVlTGVuZ3RoID0gY29udmVydFRvSW50TGVuZ3RoKHByaW1pdGl2ZVZhbHVl
LCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUpOwogICAgICAgICAgICAg
aWYgKCFtYXJxdWVlTGVuZ3RoLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgbV9zdHls
ZS0+c2V0TWFycXVlZUluY3JlbWVudChtYXJxdWVlTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBz
dGF0ZS5tX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KG1hcnF1ZWVMZW5ndGgpOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNTEwLDE5ICszNDk0LDE5IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8p
Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRMb2NhbGUobnVsbEF0b20pOworICAgICAgICAgICAg
c3RhdGUubV9zdHlsZS0+c2V0TG9jYWxlKG51bGxBdG9tKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0TG9jYWxlKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgp
KTsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0U2NyaXB0KGxvY2Fs
ZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24obV9zdHlsZS0+bG9jYWxlKCkpKTsKLSAgICAg
ICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgICAgICBzdGF0
ZS5tX3N0eWxlLT5zZXRMb2NhbGUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwor
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUubV9zdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTY3JpcHQobG9j
YWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihzdGF0ZS5tX3N0eWxlLT5sb2NhbGUoKSkp
OworICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFNpemVB
ZGp1c3Q6IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodGV4dFNpemVBZGp1
c3QsIFRleHRTaXplQWRqdXN0KQogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlIHx8ICFwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc2V0
VGV4dFNpemVBZGp1c3QocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRv
KTsKKyAgICAgICAgc3RhdGUuc2V0VGV4dFNpemVBZGp1c3QocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVBdXRvKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNpZiBFTkFC
TEUoREFTSEJPQVJEX1NVUFBPUlQpCkBAIC0zNTMzLDcgKzM1MTcsNyBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hib2Fy
ZFJlZ2lvbnMoUmVuZGVyU3R5bGU6Om5vbmVEYXNoYm9hcmRSZWdpb25zKCkpOworICAgICAgICAg
ICAgc3RhdGUubV9zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9ucyhSZW5kZXJTdHlsZTo6bm9uZURh
c2hib2FyZFJlZ2lvbnMoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAt
MzU0MywxMCArMzUyNywxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogCiAgICAgICAgIERhc2hib2FyZFJlZ2lv
biogZmlyc3QgPSByZWdpb247CiAgICAgICAgIHdoaWxlIChyZWdpb24pIHsKLSAgICAgICAgICAg
IExlbmd0aCB0b3AgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT50b3AoKSwgc3R5bGUoKSwg
bV9yb290RWxlbWVudFN0eWxlKTsKLSAgICAgICAgICAgIExlbmd0aCByaWdodCA9IGNvbnZlcnRU
b0ludExlbmd0aChyZWdpb24tPnJpZ2h0KCksIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7
Ci0gICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+
Ym90dG9tKCksIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAgICAgICAgICBMZW5n
dGggbGVmdCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmxlZnQoKSwgc3R5bGUoKSwgbV9y
b290RWxlbWVudFN0eWxlKTsKKyAgICAgICAgICAgIExlbmd0aCB0b3AgPSBjb252ZXJ0VG9JbnRM
ZW5ndGgocmVnaW9uLT50b3AoKSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUubV9yb290RWxlbWVudFN0
eWxlKTsKKyAgICAgICAgICAgIExlbmd0aCByaWdodCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdp
b24tPnJpZ2h0KCksIHN0YXRlLnN0eWxlKCksIHN0YXRlLm1fcm9vdEVsZW1lbnRTdHlsZSk7Cisg
ICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+Ym90
dG9tKCksIHN0YXRlLnN0eWxlKCksIHN0YXRlLm1fcm9vdEVsZW1lbnRTdHlsZSk7CisgICAgICAg
ICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmxlZnQoKSwgc3Rh
dGUuc3R5bGUoKSwgc3RhdGUubV9yb290RWxlbWVudFN0eWxlKTsKIAogICAgICAgICAgICAgaWYg
KHRvcC5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHRvcCA9IExlbmd0aCgpOwpAQCAt
MzU1OCwxMyArMzU0MiwxMyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIGxlZnQgPSBM
ZW5ndGgoKTsKIAogICAgICAgICAgICAgaWYgKHJlZ2lvbi0+bV9pc0NpcmNsZSkKLSAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246
OkNpcmNsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lv
biA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CisgICAgICAgICAgICAgICAgc3RhdGUubV9zdHls
ZS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpDaXJjbGUsIHJlZ2lv
bi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBm
YWxzZSA6IHRydWUpOwogICAgICAgICAgICAgZWxzZSBpZiAocmVnaW9uLT5tX2lzUmVjdGFuZ2xl
KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hi
b2FyZFJlZ2lvbjo6UmVjdGFuZ2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRv
bSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKKyAgICAgICAgICAgICAg
ICBzdGF0ZS5tX3N0eWxlLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246
OlJlY3RhbmdsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJl
Z2lvbiA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CiAgICAgICAgICAgICByZWdpb24gPSByZWdp
b24tPm1fbmV4dC5nZXQoKTsKICAgICAgICAgfQogCi0gICAgICAgIG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS0+c2V0SGFzQW5ub3RhdGVkUmVnaW9ucyh0cnVlKTsKKyAgICAgICAgc3RhdGUuZG9jdW1l
bnQoKS0+c2V0SGFzQW5ub3RhdGVkUmVnaW9ucyh0cnVlKTsKIAogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMzU3Myw4ICszNTU3LDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0QXBwUmVnaW9uOiB7CiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUgfHwgIXBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBt
X3N0eWxlLT5zZXREcmFnZ2FibGVSZWdpb25Nb2RlKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlRHJhZyA/IERyYWdnYWJsZVJlZ2lvbkRyYWcgOiBEcmFnZ2FibGVSZWdpb25O
b0RyYWcpOwotICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnNldEhhc0Fubm90YXRlZFJl
Z2lvbnModHJ1ZSk7CisgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldERyYWdnYWJsZVJlZ2lvbk1v
ZGUocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVEcmFnID8gRHJhZ2dhYmxl
UmVnaW9uRHJhZyA6IERyYWdnYWJsZVJlZ2lvbk5vRHJhZyk7CisgICAgICAgIHN0YXRlLmRvY3Vt
ZW50KCktPnNldEhhc0Fubm90YXRlZFJlZ2lvbnModHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAjZW5kaWYKQEAgLTM1OTAsMjEgKzM1NzQsMjEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
ICAgICAgICByZXN1bHQgKj0gMzsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlVGhpY2spCiAgICAgICAgICAgICAgICAgcmVzdWx0ICo9
IDU7Ci0gICAgICAgICAgICB3aWR0aCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVzdWx0
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxl
KCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICB3aWR0aCA9
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVzdWx0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0VNUyktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLm1fcm9vdEVs
ZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29t
cHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9y
KTsKKyAgICAgICAgICAgIHdpZHRoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8Zmxv
YXQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLm1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBtX3N0eWxlLT5zZXRUZXh0
U3Ryb2tlV2lkdGgod2lkdGgpOworICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRUZXh0U3Ryb2tl
V2lkdGgod2lkdGgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUcmFuc2Zvcm06IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwo
dHJhbnNmb3JtLCBUcmFuc2Zvcm0pOwogICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJh
dGlvbnM7Ci0gICAgICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWUsIHN0eWxlKCks
IG1fcm9vdEVsZW1lbnRTdHlsZSwgb3BlcmF0aW9ucyk7Ci0gICAgICAgIG1fc3R5bGUtPnNldFRy
YW5zZm9ybShvcGVyYXRpb25zKTsKKyAgICAgICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2
YWx1ZSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUubV9yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25z
KTsKKyAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0VHJhbnNmb3JtKG9wZXJhdGlvbnMpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2
ZTogewpAQCAtMzYxNCwzNCArMzU5OCwzNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgcmV0
dXJuOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZU5vbmUpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFBlcnNwZWN0aXZlKDApOworICAgICAg
ICAgICAgc3RhdGUubV9zdHlsZS0+c2V0UGVyc3BlY3RpdmUoMCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAogICAgICAgICBmbG9hdCBwZXJzcGVjdGl2ZVZhbHVlOwogICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCi0gICAgICAgICAgICBwZXJzcGVjdGl2
ZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlKCksIG1f
cm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICBwZXJzcGVjdGl2ZVZh
bHVlID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlKCks
IHN0YXRlLm1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CiAgICAgICAgIGVsc2UgaWYg
KHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAvLyBGb3IgYmFja3dh
cmQgY29tcGF0aWJpbGl0eSwgdHJlYXQgdmFsdWVsZXNzIG51bWJlcnMgYXMgcHguCi0gICAgICAg
ICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShwcmltaXRp
dmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCktPmNv
bXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rv
cik7CisgICAgICAgICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QWCktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLm1fcm9v
dEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgIGlmIChwZXJzcGVjdGl2ZVZhbHVlID49IDAuMGYpCi0gICAgICAg
ICAgICBtX3N0eWxlLT5zZXRQZXJzcGVjdGl2ZShwZXJzcGVjdGl2ZVZhbHVlKTsKKyAgICAgICAg
ICAgIHN0YXRlLm1fc3R5bGUtPnNldFBlcnNwZWN0aXZlKHBlcnNwZWN0aXZlVmFsdWUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb246
CiAgICAgICAgIGlmIChpc0luaXRpYWwpCi0gICAgICAgICAgICBtX3N0eWxlLT5jbGVhckFuaW1h
dGlvbnMoKTsKKyAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPmNsZWFyQW5pbWF0aW9ucygpOwog
ICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0
QW5pbWF0aW9ucyhtX3BhcmVudFN0eWxlLT5hbmltYXRpb25zKCkpOworICAgICAgICAgICAgc3Rh
dGUubV9zdHlsZS0+aW5oZXJpdEFuaW1hdGlvbnMoc3RhdGUubV9wYXJlbnRTdHlsZS0+YW5pbWF0
aW9ucygpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2l0aW9uOgogICAgICAgICBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgbV9zdHlsZS0+Y2xl
YXJUcmFuc2l0aW9ucygpOworICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+Y2xlYXJUcmFuc2l0
aW9ucygpOwogICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICBtX3N0eWxl
LT5pbmhlcml0VHJhbnNpdGlvbnMobV9wYXJlbnRTdHlsZS0+dHJhbnNpdGlvbnMoKSk7CisgICAg
ICAgICAgICBzdGF0ZS5tX3N0eWxlLT5pbmhlcml0VHJhbnNpdGlvbnMoc3RhdGUubV9wYXJlbnRT
dHlsZS0+dHJhbnNpdGlvbnMoKSk7CiAgICAgICAgIHJldHVybjsKICNpZiBFTkFCTEUoVE9VQ0hf
RVZFTlRTKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogewpA
QCAtMzY0OSw4ICszNjMzLDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgaWYgKCFwcmltaXRpdmVW
YWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIENvbG9yIGNvbCA9IGNvbG9yRnJv
bVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0VGFw
SGlnaGxpZ2h0Q29sb3IoY29sKTsKKyAgICAgICAgQ29sb3IgY29sID0gY29sb3JGcm9tUHJpbWl0
aXZlVmFsdWUoc3RhdGUsIHByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgc3RhdGUubV9zdHlsZS0+
c2V0VGFwSGlnaGxpZ2h0Q29sb3IoY29sKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRp
ZgpAQCAtMzY1OSw3ICszNjQzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgSEFORExFX0lOSEVS
SVRfQU5EX0lOSVRJQUwodXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZywgVXNlVG91Y2hPdmVyZmxv
d1Njcm9sbGluZyk7CiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgbV9zdHlsZS0+c2V0VXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZyhwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVRvdWNoKTsKKyAgICAgICAgc3RhdGUu
bV9zdHlsZS0+c2V0VXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZyhwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZVRvdWNoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRp
ZgpAQCAtMzcwMiw5ICszNjg2LDkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWF4TG9naWNhbFdpZHRoOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dp
Y2FsSGVpZ2h0OgogICAgIHsKLSAgICAgICAgQ1NTUHJvcGVydHlJRCBuZXdJZCA9IENTU1Byb3Bl
cnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShpZCwgbV9zdHlsZS0+ZGlyZWN0aW9u
KCksIG1fc3R5bGUtPndyaXRpbmdNb2RlKCkpOworICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lk
ID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBzdGF0ZS5t
X3N0eWxlLT5kaXJlY3Rpb24oKSwgc3RhdGUubV9zdHlsZS0+d3JpdGluZ01vZGUoKSk7CiAgICAg
ICAgIEFTU0VSVChuZXdJZCAhPSBpZCk7Ci0gICAgICAgIHJldHVybiBhcHBseVByb3BlcnR5KG5l
d0lkLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBhcHBseVByb3BlcnR5KHN0YXRlLCBuZXdJZCwg
dmFsdWUpOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0cmV0Y2g6CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVBhZ2U6CkBAIC0zNzM0LDEyICszNzE4LDExIEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHdyaXRpbmdNb2RlLCBXcml0aW5nTW9k
ZSk7CiAgICAgICAgIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICBz
ZXRXcml0aW5nTW9kZSgqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgc3RhdGUuc2V0V3Jp
dGluZ01vZGUoKnByaW1pdGl2ZVZhbHVlKTsKIAogICAgICAgICAvLyBGSVhNRTogSXQgaXMgbm90
IG9rIHRvIG1vZGlmeSBkb2N1bWVudCBzdGF0ZSB3aGlsZSBhcHBseWluZyBzdHlsZS4KLSAgICAg
ICAgaWYgKG1fZWxlbWVudCAmJiBtX2VsZW1lbnQgPT0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5k
b2N1bWVudEVsZW1lbnQoKSkKLSAgICAgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0
V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCh0cnVlKTsKLQorICAgICAgICBpZiAoc3Rh
dGUubV9lbGVtZW50ICYmIHN0YXRlLm1fZWxlbWVudCA9PSBzdGF0ZS5kb2N1bWVudCgpLT5kb2N1
bWVudEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHN0YXRlLmRvY3VtZW50KCktPnNldFdyaXRpbmdN
b2RlU2V0T25Eb2N1bWVudEVsZW1lbnQodHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTM3NDcsNyArMzczMCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIEhBTkRMRV9JTkhFUklU
X0FORF9JTklUSUFMKHRleHRPcmllbnRhdGlvbiwgVGV4dE9yaWVudGF0aW9uKTsKIAogICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICBzZXRUZXh0T3JpZW50YXRpb24oKnBy
aW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRlLnNldFRleHRPcmllbnRhdGlvbigqcHJp
bWl0aXZlVmFsdWUpOwogCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzU1LDcgKzM3Mzgs
NyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQm94Q29udGFp
bjogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChsaW5lQm94Q29udGFpbiwg
TGluZUJveENvbnRhaW4pCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSAmJiBwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIG1fc3R5bGUt
PnNldExpbmVCb3hDb250YWluKExpbmVCb3hDb250YWluTm9uZSk7CisgICAgICAgICAgICBzdGF0
ZS5tX3N0eWxlLT5zZXRMaW5lQm94Q29udGFpbihMaW5lQm94Q29udGFpbk5vbmUpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM3NjMsMjEgKzM3NDYsMjEgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBDU1NMaW5lQm94Q29udGFpblZh
bHVlKiBsaW5lQm94Q29udGFpblZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTTGluZUJveENvbnRhaW5W
YWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TGluZUJveENvbnRhaW4obGluZUJv
eENvbnRhaW5WYWx1ZS0+dmFsdWUoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVC
b3hDb250YWluKGxpbmVCb3hDb250YWluVmFsdWUtPnZhbHVlKCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgLy8gQ1NTIEZvbnRzIE1vZHVsZSBMZXZlbCAzCiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEZvbnRGZWF0dXJlU2V0dGluZ3M6IHsKICAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKSB7
Ci0gICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24obV9zdHlsZS0+Zm9udERlc2NyaXB0aW9u
KCkubWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygpKTsKKyAgICAgICAgICAgIHN0YXRlLnNldEZv
bnREZXNjcmlwdGlvbihzdGF0ZS5tX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKS5tYWtlTm9ybWFs
RmVhdHVyZVNldHRpbmdzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKIAot
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERl
c2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBz
dGF0ZS5tX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgQ1NTVmFsdWVMaXN0KiBs
aXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwogICAgICAgICBSZWZQdHI8
Rm9udEZlYXR1cmVTZXR0aW5ncz4gc2V0dGluZ3MgPSBGb250RmVhdHVyZVNldHRpbmdzOjpjcmVh
dGUoKTsKICAgICAgICAgaW50IGxlbiA9IGxpc3QtPmxlbmd0aCgpOwpAQCAtMzc4OSw3ICszNzcy
LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHNldHRpbmdzLT5hcHBlbmQoRm9udEZlYXR1
cmUoZmVhdHVyZS0+dGFnKCksIGZlYXR1cmUtPnZhbHVlKCkpKTsKICAgICAgICAgfQogICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0RmVhdHVyZVNldHRpbmdzKHNldHRpbmdzLnJlbGVhc2UoKSk7
Ci0gICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBz
dGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtMzc5NywyMyArMzc4MCwyMyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRGaWx0ZXI6IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUwoZmlsdGVyLCBGaWx0ZXIpOwogICAgICAgICBGaWx0ZXJPcGVyYXRpb25zIG9wZXJhdGlv
bnM7Ci0gICAgICAgIGlmIChjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKHZhbHVlLCBzdHlsZSgpLCBt
X3Jvb3RFbGVtZW50U3R5bGUsIG9wZXJhdGlvbnMpKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0
RmlsdGVyKG9wZXJhdGlvbnMpOworICAgICAgICBpZiAoY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhz
dGF0ZSwgdmFsdWUsIHN0YXRlLnN0eWxlKCksIHN0YXRlLm1fcm9vdEVsZW1lbnRTdHlsZSwgb3Bl
cmF0aW9ucykpCisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRGaWx0ZXIob3BlcmF0aW9u
cyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0R3JpZENvbHVtbnM6IHsKICAgICAgICAgVmVjdG9yPEdyaWRUcmFja1NpemU+IHRyYWNr
U2l6ZXM7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwgdHJhY2tTaXpl
cywgdGhpcykpCisgICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwgdHJhY2tT
aXplcywgc3RhdGUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRH
cmlkQ29sdW1ucyh0cmFja1NpemVzKTsKKyAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0R3JpZENv
bHVtbnModHJhY2tTaXplcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEdyaWRSb3dzOiB7CiAgICAgICAgIFZlY3RvcjxHcmlkVHJhY2tTaXplPiB0
cmFja1NpemVzOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRyYWNr
U2l6ZXMsIHRoaXMpKQorICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRy
YWNrU2l6ZXMsIHN0YXRlKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+
c2V0R3JpZFJvd3ModHJhY2tTaXplcyk7CisgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldEdyaWRS
b3dzKHRyYWNrU2l6ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zODIxLDE0ICsz
ODA0LDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIEdyaWRQb3NpdGlvbiBjb2x1bW47CiAgICAg
ICAgIGlmICghY3JlYXRlR3JpZFBvc2l0aW9uKHZhbHVlLCBjb2x1bW4pKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRHcmlkSXRlbUNvbHVtbihjb2x1bW4pOworICAg
ICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRHcmlkSXRlbUNvbHVtbihjb2x1bW4pOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkUm93OiB7CiAgICAg
ICAgIEdyaWRQb3NpdGlvbiByb3c7CiAgICAgICAgIGlmICghY3JlYXRlR3JpZFBvc2l0aW9uKHZh
bHVlLCByb3cpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRHcmlk
SXRlbVJvdyhyb3cpOworICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRHcmlkSXRlbVJvdyhyb3cp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgYXJlIGlt
cGxlbWVudGVkIGluIHRoZSBTdHlsZUJ1aWxkZXIgbG9va3VwIHRhYmxlLgpAQCAtNDExOCw5MSAr
NDEwMSw5MSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGRlZmF1bHQ6CiAjaWYgRU5BQkxFKFNWRykKICAg
ICAgICAgLy8gVHJ5IHRoZSBTVkcgcHJvcGVydGllcwotICAgICAgICBhcHBseVNWR1Byb3BlcnR5
KGlkLCB2YWx1ZSk7CisgICAgICAgIGFwcGx5U1ZHUHJvcGVydHkoc3RhdGUsIGlkLCB2YWx1ZSk7
CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxTdHlsZUlt
YWdlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENT
U1ZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5
bGVJbWFnZShTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
LCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc0ltYWdlVmFsdWUoKSkKLSAg
ICAgICAgcmV0dXJuIGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgc3RhdGljX2Nh
c3Q8Q1NTSW1hZ2VWYWx1ZSo+KHZhbHVlKSk7CisgICAgICAgIHJldHVybiBjYWNoZWRPclBlbmRp
bmdGcm9tVmFsdWUoc3RhdGUsIHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4o
dmFsdWUpKTsKIAogICAgIGlmICh2YWx1ZS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKICAg
ICAgICAgaWYgKHZhbHVlLT5pc0dyYWRpZW50VmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybiBn
ZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0dyYWRp
ZW50VmFsdWUqPih2YWx1ZSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpLmdldCgp
KTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwg
c3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KHZhbHVlKSk7CisgICAgICAgICAg
ICByZXR1cm4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRlLCBwcm9wZXJ0eSwgc3Rh
dGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+KHZhbHVlKS0+Z3JhZGllbnRXaXRoU3R5bGVzUmVz
b2x2ZWQoc3RhdGUpLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zy
b21WYWx1ZShzdGF0ZSwgcHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFs
dWUqPih2YWx1ZSkpOwogICAgIH0KIAogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQogICAgIGlm
ICh2YWx1ZS0+aXNJbWFnZVNldFZhbHVlKCkpCi0gICAgICAgIHJldHVybiBzZXRPclBlbmRpbmdG
cm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPih2YWx1ZSkp
OworICAgICAgICByZXR1cm4gc2V0T3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRlLCBwcm9wZXJ0eSwg
c3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KHZhbHVlKSk7CiAjZW5kaWYKIAogICAgIGlm
ICh2YWx1ZS0+aXNDdXJzb3JJbWFnZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBjdXJzb3JPclBl
bmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0N1cnNvckltYWdlVmFsdWUq
Pih2YWx1ZSkpOworICAgICAgICByZXR1cm4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKHN0YXRl
LCBwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSo+KHZhbHVlKSk7CiAK
ICAgICByZXR1cm4gMDsKIH0KIAotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVy
OjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1h
Z2VWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmNh
Y2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlLCBDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVZhbHVlKiB2YWx1ZSkKIHsKICAgICBSZWZQdHI8U3R5
bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoKTsKICAgICBpZiAo
aW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgIG1fcGVuZGluZ0ltYWdl
UHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICAgICAgc3RhdGUubV9wZW5kaW5n
SW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOwogICAgIHJldHVybiBpbWFnZS5y
ZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Z2Vu
ZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdl
R2VuZXJhdG9yVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29s
dmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0
ZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSogdmFsdWUp
CiB7CiAgICAgaWYgKHZhbHVlLT5pc1BlbmRpbmcoKSkgewotICAgICAgICBtX3BlbmRpbmdJbWFn
ZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIHN0YXRlLm1fcGVuZGlu
Z0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIFN0
eWxlUGVuZGluZ0ltYWdlOjpjcmVhdGUodmFsdWUpOwogICAgIH0KICAgICByZXR1cm4gU3R5bGVH
ZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKIH0KIAogI2lmIEVOQUJMRShDU1NfSU1BR0Vf
U0VUKQotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdG
cm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VTZXRWYWx1ZSogdmFsdWUp
CitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnNldE9yUGVuZGluZ0Zyb21W
YWx1ZShTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBD
U1NJbWFnZVNldFZhbHVlKiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2Ug
PSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2VTZXQoZG9jdW1lbnQoKSk7CisgICAgUmVmUHRy
PFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KHN0YXRl
LmRvY3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkK
LSAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOwor
ICAgICAgICBzdGF0ZS5tX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1
ZSk7CiAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKIH0KICNlbmRpZgogCi1QYXNzUmVmUHRy
PFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NDdXJzb3JJbWFnZVZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQ
dHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKFN0
eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0N1cnNv
ckltYWdlVmFsdWUqIHZhbHVlKQogewotICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZh
bHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZShkb2N1bWVudCgpKTsKKyAgICBSZWZQdHI8U3R5bGVJ
bWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2Uoc3RhdGUuZG9jdW1lbnQo
KSk7CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICBt
X3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIHN0
YXRlLm1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICBy
ZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9y
VGV4dFNpemVBZGp1c3QoKQordm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRq
dXN0KFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKLSAgICBpZiAobV9zdHlsZS0+dGV4dFNpemVBZGp1
c3QoKSkKKyAgICBpZiAoc3R5bGUtPnRleHRTaXplQWRqdXN0KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24obV9zdHlsZS0+Zm9udERl
c2NyaXB0aW9uKCkpOworICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24oc3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpKTsKICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0Q29tcHV0
ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkpOwotICAgIG1fc3R5bGUt
PnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOworICAgIHN0eWxlLT5zZXRG
b250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKIH0KIAotdm9pZCBTdHlsZVJlc29s
dmVyOjpjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShjb25z
dCBTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlLCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBpZiAoc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSA9PSBw
YXJlbnRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBjb25z
dCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsK
ICAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGNoaWxkRm9udCk7Ci0gICAg
c2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9uLCBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgp
KTsKKyAgICBzZXRGb250U2l6ZShzdGF0ZSwgbmV3Rm9udERlc2NyaXB0aW9uLCBjaGlsZEZvbnQu
c3BlY2lmaWVkU2l6ZSgpKTsKICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnRE
ZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFt
aWx5Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQor
dm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoY29uc3QgU3R5
bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUpCiB7CiAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBjaGlsZEZvbnQgPSBz
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CiAKQEAgLTQyMzYsMTEgKzQyMTksMTEgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqIHN0
eWxlLCBSZW5kZXJTdHlsZSoKICAgICB9CiAKICAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERl
c2NyaXB0aW9uKGNoaWxkRm9udCk7Ci0gICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9u
LCBzaXplKTsKKyAgICBzZXRGb250U2l6ZShzdGF0ZSwgbmV3Rm9udERlc2NyaXB0aW9uLCBzaXpl
KTsKICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CiB9
CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0aW5ncyogc2V0
dGluZ3MpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUoU3R5bGVSZXNv
bHZlclN0YXRlJiBzdGF0ZSwgU2V0dGluZ3MqIHNldHRpbmdzKQogewogICAgIEZvbnREZXNjcmlw
dGlvbiBmb250RGVzY3JpcHRpb247CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1p
bHkoRm9udERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseSk7CkBAIC00MjUyLDE2ICs0MjM1LDE3
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0aW5ncyogc2V0
dGluZ3MpCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLmFwcGVuZEZhbWls
eSgwKTsKICAgICB9CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVl
TWVkaXVtIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7Ci0gICAgc2V0Rm9udFNpemUoZm9udERlc2Ny
aXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZh
bHNlKSk7Ci0gICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExp
bmVIZWlnaHQoKSk7Ci0gICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwotICAgIHNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgIHNldEZvbnRTaXplKHN0YXRlLCBmb250RGVz
Y3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwg
ZmFsc2UpKTsKKyAgICBzdGF0ZS5tX3N0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjpp
bml0aWFsTGluZUhlaWdodCgpKTsKKyAgICBzdGF0ZS5tX2xpbmVIZWlnaHRWYWx1ZSA9IDA7Cisg
ICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQg
U3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGZsb2F0IHNpemUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKGNvbnN0IFN0
eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBmbG9hdCBzaXplKQogeworICAgIEFTU0VSVChzdGF0ZS5tX2VsZW1lbnQpOwogICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQo
KSwgbV9zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNpemUs
IHVzZVNWR1pvb21SdWxlcygpKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6
ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShzdGF0ZS5kb2N1bWVudCgpLCBzdGF0
ZS5tX3N0eWxlLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwgc3RhdGUu
dXNlU1ZHWm9vbVJ1bGVzKCkpKTsKIH0KIAogZmxvYXQgU3R5bGVSZXNvbHZlcjo6Z2V0Q29tcHV0
ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBSZW5kZXJTdHlsZSog
c3R5bGUsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wgdXNl
U1ZHWm9vbVJ1bGVzKQpAQCAtNDQ1OSw3ICs0NDQzLDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpj
b2xvckZyb21QcmltaXRpdmVWYWx1ZUlzRGVyaXZlZEZyb21FbGVtZW50KENTU1ByaW1pdGl2ZVZh
bHUKICAgICB9CiB9CiAKLUNvbG9yIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlKENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwgYm9vbCBmb3JWaXNpdGVkTGluaykgY29uc3QK
K0NvbG9yIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGNvbnN0IFN0eWxl
UmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwgYm9vbCBmb3JW
aXNpdGVkTGluaykKIHsKICAgICBpZiAodmFsdWUtPmlzUkdCQ29sb3IoKSkKICAgICAgICAgcmV0
dXJuIENvbG9yKHZhbHVlLT5nZXRSR0JBMzJWYWx1ZSgpKTsKQEAgLTQ0NjksMTUgKzQ0NTMsMTUg
QEAgQ29sb3IgU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0
aXZlVmFsdWUqIHZhbHVlLCBib29sIGZvclYKICAgICBjYXNlIDA6CiAgICAgICAgIHJldHVybiBD
b2xvcigpOwogICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRUZXh0OgotICAgICAgICByZXR1cm4gbV9l
bGVtZW50LT5kb2N1bWVudCgpLT50ZXh0Q29sb3IoKTsKKyAgICAgICAgcmV0dXJuIHN0YXRlLmRv
Y3VtZW50KCktPnRleHRDb2xvcigpOwogICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRMaW5rOgotICAg
ICAgICByZXR1cm4gKG1fZWxlbWVudC0+aXNMaW5rKCkgJiYgZm9yVmlzaXRlZExpbmspID8gbV9l
bGVtZW50LT5kb2N1bWVudCgpLT52aXNpdGVkTGlua0NvbG9yKCkgOiBtX2VsZW1lbnQtPmRvY3Vt
ZW50KCktPmxpbmtDb2xvcigpOworICAgICAgICByZXR1cm4gKHN0YXRlLm1fZWxlbWVudC0+aXNM
aW5rKCkgJiYgZm9yVmlzaXRlZExpbmspID8gc3RhdGUuZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtD
b2xvcigpIDogc3RhdGUuZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1
ZVdlYmtpdEFjdGl2ZWxpbms6Ci0gICAgICAgIHJldHVybiBtX2VsZW1lbnQtPmRvY3VtZW50KCkt
PmFjdGl2ZUxpbmtDb2xvcigpOworICAgICAgICByZXR1cm4gc3RhdGUuZG9jdW1lbnQoKS0+YWN0
aXZlTGlua0NvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9yOgog
ICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmZvY3VzUmluZ0NvbG9yKCk7CiAgICAgY2FzZSBD
U1NWYWx1ZUN1cnJlbnRjb2xvcjoKLSAgICAgICAgcmV0dXJuIG1fc3R5bGUtPmNvbG9yKCk7Cisg
ICAgICAgIHJldHVybiBzdGF0ZS5tX3N0eWxlLT5jb2xvcigpOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIHJldHVybiBjb2xvckZvckNTU1ZhbHVlKGlkZW50KTsKICAgICB9CkBAIC00ODA5LDE5ICs0
NzkzLDE5IEBAIHN0YXRpYyBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZmlsdGVyT3Bl
cmF0aW9uRm9yVHlwZShXZWJLaXRDU1NGaWx0ZXJWYWx1CiB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpICYmIEVOQUJMRShTVkcpCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU1ZH
RG9jdW1lbnRzKCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTVkdEb2N1bWVudHMo
U3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoIW1fc3R5bGUtPmhhc0ZpbHRl
cigpIHx8IG1fcGVuZGluZ1NWR0RvY3VtZW50cy5pc0VtcHR5KCkpCisgICAgaWYgKCFzdGF0ZS5t
X3N0eWxlLT5oYXNGaWx0ZXIoKSB8fCBzdGF0ZS5tX3BlbmRpbmdTVkdEb2N1bWVudHMuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVk
UmVzb3VyY2VMb2FkZXIgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9h
ZGVyKCk7Ci0gICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJh
dGlvbnMgPSBtX3N0eWxlLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOworICAgIENhY2hl
ZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IHN0YXRlLmRvY3VtZW50KCkt
PmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CisgICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRp
b24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBzdGF0ZS5tX3N0eWxlLT5tdXRhYmxlRmlsdGVyKCku
b3BlcmF0aW9ucygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJPcGVyYXRp
b25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRl
ck9wZXJhdGlvbiA9IGZpbHRlck9wZXJhdGlvbnMuYXQoaSk7CiAgICAgICAgIGlmIChmaWx0ZXJP
cGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5D
RSkgewogICAgICAgICAgICAgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKiByZWZlcmVuY2VGaWx0
ZXIgPSBzdGF0aWNfY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRp
b24uZ2V0KCkpOwogCi0gICAgICAgICAgICBXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKiB2YWx1
ZSA9IG1fcGVuZGluZ1NWR0RvY3VtZW50cy5nZXQocmVmZXJlbmNlRmlsdGVyKS5nZXQoKTsKKyAg
ICAgICAgICAgIFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWUqIHZhbHVlID0gc3RhdGUubV9wZW5k
aW5nU1ZHRG9jdW1lbnRzLmdldChyZWZlcmVuY2VGaWx0ZXIpLmdldCgpOwogICAgICAgICAgICAg
aWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIENhY2hl
ZFNWR0RvY3VtZW50KiBjYWNoZWREb2N1bWVudCA9IHZhbHVlLT5sb2FkKGNhY2hlZFJlc291cmNl
TG9hZGVyKTsKQEAgLTQ4MzIsMzQgKzQ4MTYsMzQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2Fk
UGVuZGluZ1NWR0RvY3VtZW50cygpCiAgICAgICAgICAgICByZWZlcmVuY2VGaWx0ZXItPnNldENh
Y2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGFkb3B0UHRyKG5ldyBDYWNoZWRTVkdEb2N1bWVudFJl
ZmVyZW5jZShjYWNoZWREb2N1bWVudCkpKTsKICAgICAgICAgfQogICAgIH0KLSAgICBtX3BlbmRp
bmdTVkdEb2N1bWVudHMuY2xlYXIoKTsKKyAgICBzdGF0ZS5tX3BlbmRpbmdTVkdEb2N1bWVudHMu
Y2xlYXIoKTsKIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQotU3R5bGVTaGFk
ZXIqIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhZGVyKENTU1ZhbHVlKiB2YWx1ZSkKK1N0eWxlU2hh
ZGVyKiBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYWRlcihTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRl
LCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc1dlYktpdENTU1NoYWRlclZh
bHVlKCkpCi0gICAgICAgIHJldHVybiBjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1
ZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NTaGFkZXJWYWx1ZSo+KHZhbHVlKSk7CisgICAgICAgIHJl
dHVybiBjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShzdGF0ZSwgc3RhdGljX2Nh
c3Q8V2ViS2l0Q1NTU2hhZGVyVmFsdWUqPih2YWx1ZSkpOwogICAgIHJldHVybiAwOwogfQogCi1T
dHlsZVNoYWRlciogU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9t
VmFsdWUoV2ViS2l0Q1NTU2hhZGVyVmFsdWUqIHZhbHVlKQorU3R5bGVTaGFkZXIqIFN0eWxlUmVz
b2x2ZXI6OmNhY2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKFN0eWxlUmVzb2x2ZXJT
dGF0ZSYgc3RhdGUsIFdlYktpdENTU1NoYWRlclZhbHVlKiB2YWx1ZSkKIHsKICAgICBTdHlsZVNo
YWRlciogc2hhZGVyID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ1NoYWRlcigpOwogICAgIGlmIChz
aGFkZXIgJiYgc2hhZGVyLT5pc1BlbmRpbmdTaGFkZXIoKSkKLSAgICAgICAgbV9oYXNQZW5kaW5n
U2hhZGVycyA9IHRydWU7CisgICAgICAgIHN0YXRlLm1faGFzUGVuZGluZ1NoYWRlcnMgPSB0cnVl
OwogICAgIHJldHVybiBzaGFkZXI7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRp
bmdTaGFkZXJzKCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJzKFN0eWxl
UmVzb2x2ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKCFtX3N0eWxlLT5oYXNGaWx0ZXIoKSB8
fCAhbV9oYXNQZW5kaW5nU2hhZGVycykKKyAgICBpZiAoIXN0YXRlLm1fc3R5bGUtPmhhc0ZpbHRl
cigpIHx8ICFzdGF0ZS5tX2hhc1BlbmRpbmdTaGFkZXJzKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2VsZW1lbnQt
PmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CisgICAgQ2FjaGVkUmVzb3VyY2VM
b2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gc3RhdGUubV9lbGVtZW50LT5kb2N1bWVudCgp
LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVy
YXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBtX3N0eWxlLT5tdXRhYmxlRmlsdGVyKCkub3Bl
cmF0aW9ucygpOworICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJP
cGVyYXRpb25zID0gc3RhdGUubV9zdHlsZS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVyT3BlcmF0aW9ucy5zaXplKCk7ICsr
aSkgewogICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmaWx0ZXJPcGVyYXRpb24gPSBm
aWx0ZXJPcGVyYXRpb25zLmF0KGkpOwogICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLT5nZXRP
cGVyYXRpb25UeXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT00pIHsKQEAgLTQ4NzYsNyAr
NDg2MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJzKCkKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBtX2hhc1BlbmRpbmdTaGFkZXJzID0gZmFs
c2U7CisgICAgc3RhdGUubV9oYXNQZW5kaW5nU2hhZGVycyA9IGZhbHNlOwogfQogCiBzdGF0aWMg
Ym9vbCBzb3J0UGFyYW1ldGVyc0J5TmFtZUNvbXBhcmF0b3IoY29uc3QgUmVmUHRyPEN1c3RvbUZp
bHRlclBhcmFtZXRlcj4mIGEsIGNvbnN0IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+JiBi
KQpAQCAtNDkxNCwxNiArNDg5OCwxNiBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRl
cj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZQogICAgIHJl
dHVybiBudW1iZXJQYXJhbWV0ZXIucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEN1c3RvbUZp
bHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1Q
YXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqIHZhbHVlcykKK1Bhc3NS
ZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZp
bHRlclRyYW5zZm9ybVBhcmFtZXRlcihjb25zdCBTdHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlLCBj
b25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlTGlzdCogdmFsdWVzKQogewogICAgIFJlZlB0cjxD
dXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXI+IHRyYW5zZm9ybVBhcmFtZXRlciA9IEN1c3Rv
bUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcjo6Y3JlYXRlKG5hbWUpOwogICAgIFRyYW5zZm9ybU9w
ZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVl
cywgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKTsKKyAgICBjcmVhdGVU
cmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlcywgc3RhdGUuc3R5bGUoKSwgc3RhdGUubV9yb290RWxl
bWVudFN0eWxlLCBvcGVyYXRpb25zKTsKICAgICB0cmFuc2Zvcm1QYXJhbWV0ZXItPnNldE9wZXJh
dGlvbnMob3BlcmF0aW9ucyk7CiAgICAgcmV0dXJuIHRyYW5zZm9ybVBhcmFtZXRlci5yZWxlYXNl
KCk7CiB9CiAKLVBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVy
OjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVl
KiBwYXJhbWV0ZXJWYWx1ZSkKK1Bhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHls
ZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihjb25zdCBTdHlsZVJlc29sdmVy
U3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlKiBwYXJhbWV0ZXJWYWx1
ZSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG90aGVyIHBhcmFtZXRlcnMgdHlwZXMgcGFy
c2luZy4KICAgICAvLyBib29sZWFuczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc2NDM4CkBAIC00OTQ2LDcgKzQ5MzAsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRl
clBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIoY29u
cwogICAgIC8vIGFyZSB0cmFuc2Zvcm1zLiBwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFt
ZXRlciB3aWxsCiAgICAgLy8gcmV0dXJuIDAgaWYgdGhhdCBhc3N1bXB0aW9uIGlzIGluY29ycmVj
dC4KICAgICBpZiAodmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApLT5pc1dlYktpdENT
U1RyYW5zZm9ybVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBwYXJzZUN1c3RvbUZpbHRlclRyYW5z
Zm9ybVBhcmFtZXRlcihuYW1lLCB2YWx1ZXMpOworICAgICAgICByZXR1cm4gcGFyc2VDdXN0b21G
aWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIoc3RhdGUsIG5hbWUsIHZhbHVlcyk7CiAKICAgICAvLyBX
ZSBjYW4gaGF2ZSBvbmx5IGFycmF5cyBvZiBib29sZWFucyBvciBudW1iZXJzLCBzbyB1c2UgdGhl
IGZpcnN0IHZhbHVlIHRvIGNob29zZSBiZXR3ZWVuIHRob3NlIHR3by4KICAgICAvLyBXZSBuZWVk
IHVwIHRvIDQgdmFsdWVzIChhbGwgYm9vbGVhbnMgb3IgYWxsIG51bWJlcnMpLgpAQCAtNDk2Myw3
ICs0OTQ3LDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2
ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKGNvbnMKICAgICByZXR1cm4gMDsKIH0KIAot
Ym9vbCBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QoQ1NTVmFs
dWUqIHBhcmFtZXRlcnNWYWx1ZSwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVy
TGlzdCkKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0
KGNvbnN0IFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiBwYXJhbWV0ZXJzVmFs
dWUsIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHBhcmFtZXRlckxpc3QpCiB7CiAgICAgSGFz
aFNldDxTdHJpbmc+IGtub3duUGFyYW1ldGVyTmFtZXM7CiAgICAgQ1NTVmFsdWVMaXN0SXRlcmF0
b3IgcGFyYW1ldGVySXRlcmF0b3IocGFyYW1ldGVyc1ZhbHVlKTsKQEAgLTQ5ODgsNyArNDk3Miw3
IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KENT
U1ZhbHVlKiBwYXJhbWV0ZXJzVmFsdWUsIEN1CiAgICAgICAgIGlmICghaXRlcmF0b3IuaGFzTW9y
ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgUmVmUHRy
PEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyYW1ldGVyID0gcGFyc2VDdXN0b21GaWx0ZXJQYXJh
bWV0ZXIobmFtZSwgaXRlcmF0b3IudmFsdWUoKSk7CisgICAgICAgIFJlZlB0cjxDdXN0b21GaWx0
ZXJQYXJhbWV0ZXI+IHBhcmFtZXRlciA9IHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKHN0YXRl
LCBuYW1lLCBpdGVyYXRvci52YWx1ZSgpKTsKICAgICAgICAgaWYgKCFwYXJhbWV0ZXIpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHBhcmFtZXRlckxpc3QuYXBwZW5kKHBhcmFt
ZXRlci5yZWxlYXNlKCkpOwpAQCAtNTAwMCw3ICs0OTg0LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVy
OjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QoQ1NTVmFsdWUqIHBhcmFtZXRlcnNWYWx1
ZSwgQ3UKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVy
YXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWJLaXRD
U1NGaWx0ZXJWYWx1ZSogZmlsdGVyVmFsdWUpCitQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJh
dGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFN0eWxlUmVz
b2x2ZXJTdGF0ZSYgc3RhdGUsIFdlYktpdENTU0ZpbHRlclZhbHVlKiBmaWx0ZXJWYWx1ZSkKIHsK
ICAgICBBU1NFUlQoZmlsdGVyVmFsdWUtPmxlbmd0aCgpKTsKIApAQCAtNTAxMSw3ICs0OTk1LDcg
QEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0
ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWIKICAgICB1bnNpZ25lZCBzaGFkZXJzTGlzdExlbmd0
aCA9IHNoYWRlcnNMaXN0LT5sZW5ndGgoKTsKICAgICBBU1NFUlQoc2hhZGVyc0xpc3RMZW5ndGgp
OwogCi0gICAgUmVmUHRyPFN0eWxlU2hhZGVyPiB2ZXJ0ZXhTaGFkZXIgPSBzdHlsZVNoYWRlcihz
aGFkZXJzTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7CisgICAgUmVmUHRyPFN0eWxl
U2hhZGVyPiB2ZXJ0ZXhTaGFkZXIgPSBzdHlsZVNoYWRlcihzdGF0ZSwgc2hhZGVyc0xpc3QtPml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOwogICAgIFJlZlB0cjxTdHlsZVNoYWRlcj4gZnJhZ21l
bnRTaGFkZXI7CiAgICAgQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGUgcHJvZ3JhbVR5cGUgPSBQUk9H
UkFNX1RZUEVfQkxFTkRTX0VMRU1FTlRfVEVYVFVSRTsKICAgICBDdXN0b21GaWx0ZXJQcm9ncmFt
TWl4U2V0dGluZ3MgbWl4U2V0dGluZ3M7CkBAIC01MDI0LDcgKzUwMDgsNyBAQCBQYXNzUmVmUHRy
PEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uKFdlYgogICAgICAgICAgICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXRlcmF0b3Io
bWl4RnVuY3Rpb24pOwogCiAgICAgICAgICAgICBBU1NFUlQobWl4RnVuY3Rpb24tPmxlbmd0aCgp
KTsKLSAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyID0gc3R5bGVTaGFkZXIoaXRlcmF0b3IudmFs
dWUoKSk7CisgICAgICAgICAgICBmcmFnbWVudFNoYWRlciA9IHN0eWxlU2hhZGVyKHN0YXRlLCBp
dGVyYXRvci52YWx1ZSgpKTsKICAgICAgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKIAogICAg
ICAgICAgICAgQVNTRVJUKG1peEZ1bmN0aW9uLT5sZW5ndGgoKSA8PSAzKTsKQEAgLTUwNDAsNyAr
NTAyNCw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVy
OjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oV2ViCiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBwcm9ncmFtVHlwZSA9IFBST0dSQU1fVFlQRV9OT19FTEVN
RU5UX1RFWFRVUkU7Ci0gICAgICAgICAgICBmcmFnbWVudFNoYWRlciA9IHN0eWxlU2hhZGVyKGZy
YWdtZW50U2hhZGVyT3JNaXhGdW5jdGlvbik7CisgICAgICAgICAgICBmcmFnbWVudFNoYWRlciA9
IHN0eWxlU2hhZGVyKHN0YXRlLCBmcmFnbWVudFNoYWRlck9yTWl4RnVuY3Rpb24pOwogICAgICAg
ICB9CiAgICAgfQogICAgIApAQCAtNTA5Niw3ICs1MDgwLDcgQEAgUGFzc1JlZlB0cjxDdXN0b21G
aWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlv
bihXZWIKICAgICAgICAgcGFyYW1ldGVyc1ZhbHVlID0gZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soMik7CiAgICAgCiAgICAgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCBwYXJh
bWV0ZXJMaXN0OwotICAgIGlmIChwYXJhbWV0ZXJzVmFsdWUgJiYgIXBhcnNlQ3VzdG9tRmlsdGVy
UGFyYW1ldGVyTGlzdChwYXJhbWV0ZXJzVmFsdWUsIHBhcmFtZXRlckxpc3QpKQorICAgIGlmIChw
YXJhbWV0ZXJzVmFsdWUgJiYgIXBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChzdGF0ZSwg
cGFyYW1ldGVyc1ZhbHVlLCBwYXJhbWV0ZXJMaXN0KSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
CiAgICAgUmVmUHRyPFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IFN0eWxlQ3Vz
dG9tRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKHZlcnRleFNoYWRlci5yZWxlYXNlKCksIGZyYWdtZW50
U2hhZGVyLnJlbGVhc2UoKSwgcHJvZ3JhbVR5cGUsIG1peFNldHRpbmdzLCBtZXNoVHlwZSk7CkBA
IC01MTA0LDcgKzUwODgsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5
bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFdlYgogfQogI2VuZGlmCiAK
LWJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5W
YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBGaWx0ZXJP
cGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKQorYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0
ZXJPcGVyYXRpb25zKFN0eWxlUmVzb2x2ZXJTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiBpblZhbHVl
LCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIEZpbHRlck9wZXJh
dGlvbnMmIG91dE9wZXJhdGlvbnMpCiB7CiAgICAgQVNTRVJUKG91dE9wZXJhdGlvbnMuaXNFbXB0
eSgpKTsKICAgICAKQEAgLTUxMzcsNyArNTEyMSw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3Jl
YXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxl
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBpZiAob3BlcmF0aW9u
VHlwZSA9PSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSkgewotICAgICAgICAgICAgUmVmUHRyPEN1
c3RvbUZpbHRlck9wZXJhdGlvbj4gb3BlcmF0aW9uID0gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uKGZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRp
b24+IG9wZXJhdGlvbiA9IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihzdGF0ZSwgZmlsdGVy
VmFsdWUpOwogICAgICAgICAgICAgaWYgKCFvcGVyYXRpb24pCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgCkBAIC01MTU1LDEyICs1MTM5LDEyIEBAIGJvb2wgU3R5
bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVu
ZGVyU3R5bGUqIHN0eWxlCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAg
IFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWUqIHN2Z0RvY3VtZW50VmFsdWUgPSBzdGF0aWNfY2Fz
dDxXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKj4oYXJndW1lbnQpOwotICAgICAgICAgICAgS1VS
TCB1cmwgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN2Z0RvY3VtZW50VmFs
dWUtPnVybCgpKTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gc3RhdGUuZG9jdW1lbnQoKS0+Y29t
cGxldGVVUkwoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCkpOwogCiAgICAgICAgICAgICBSZWZQdHI8
UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPiBvcGVyYXRpb24gPSBSZWZlcmVuY2VGaWx0ZXJPcGVy
YXRpb246OmNyZWF0ZShzdmdEb2N1bWVudFZhbHVlLT51cmwoKSwgdXJsLmZyYWdtZW50SWRlbnRp
ZmllcigpLCBvcGVyYXRpb25UeXBlKTsKLSAgICAgICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6
OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIG1fZWxlbWVu
dC0+ZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzRXh0
ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIHN0YXRlLmRvY3VtZW50
KCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFzdmdEb2N1bWVudFZhbHVlLT5sb2FkUmVxdWVz
dGVkKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fcGVuZGluZ1NWR0RvY3VtZW50cy5zZXQob3Bl
cmF0aW9uLmdldCgpLCBzdmdEb2N1bWVudFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgc3Rh
dGUubV9wZW5kaW5nU1ZHRG9jdW1lbnRzLnNldChvcGVyYXRpb24uZ2V0KCksIHN2Z0RvY3VtZW50
VmFsdWUpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN2Z0RvY3VtZW50VmFsdWUtPmNhY2hl
ZFNWR0RvY3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbi0+c2V0Q2FjaGVk
U1ZHRG9jdW1lbnRSZWZlcmVuY2UoYWRvcHRQdHIobmV3IENhY2hlZFNWR0RvY3VtZW50UmVmZXJl
bmNlKHN2Z0RvY3VtZW50VmFsdWUtPmNhY2hlZFNWR0RvY3VtZW50KCkpKSk7CiAgICAgICAgICAg
ICB9CkBAIC01MjQ0LDcgKzUyMjgsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRl
ck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZQogICAgICAg
ICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxp
bnQ+KHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpIDogMDsKICAgICAgICAgICAgIENvbG9y
IGNvbG9yOwogICAgICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQotICAgICAgICAgICAgICAgIGNv
bG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoc3RhdGUsIGl0ZW0tPmNv
bG9yLmdldCgpKTsKIAogICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5k
KERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShsb2NhdGlvbiwgYmx1ciwgY29sb3Iu
aXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6dHJhbnNwYXJlbnQsIG9wZXJhdGlvblR5cGUpKTsK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTI2NCw3ICs1MjQ4LDcgQEAgYm9vbCBTdHlsZVJlc29s
dmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHls
ZSogc3R5bGUKIAogUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpsb2FkUGVu
ZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW5nSW1hZ2UpCiB7Ci0gICAgQ2FjaGVk
UmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9lbGVtZW50LT5kb2N1bWVu
dCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBj
YWNoZWRSZXNvdXJjZUxvYWRlciA9IGRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7
CiAKICAgICBpZiAocGVuZGluZ0ltYWdlLT5jc3NJbWFnZVZhbHVlKCkpIHsKICAgICAgICAgQ1NT
SW1hZ2VWYWx1ZSogaW1hZ2VWYWx1ZSA9IHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VWYWx1ZSgpOwpA
QCAtNTI5MiwyNSArNTI3NiwyNSBAQCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2
ZXI6OmxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2UqIHBlbmRpbgogICAgIHJldHVy
biAwOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKK3ZvaWQg
U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoU3R5bGVSZXNvbHZlclN0YXRlJiBzdGF0
ZSkKIHsKLSAgICBpZiAobV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmlzRW1wdHkoKSkKKyAgICBp
ZiAoc3RhdGUubV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlz
IGVuZCA9IG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5lbmQoKS5rZXlzKCk7Ci0gICAgZm9yIChQ
ZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQgPSBtX3BlbmRp
bmdJbWFnZVByb3BlcnRpZXMuYmVnaW4oKS5rZXlzKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
IFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBzdGF0
ZS5tX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuZW5kKCkua2V5cygpOworICAgIGZvciAoUGVuZGlu
Z0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0ID0gc3RhdGUubV9wZW5k
aW5nSW1hZ2VQcm9wZXJ0aWVzLmJlZ2luKCkua2V5cygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgQ1NTUHJvcGVydHlJRCBjdXJyZW50UHJvcGVydHkgPSAqaXQ7CiAKICAgICAgICAgc3dp
dGNoIChjdXJyZW50UHJvcGVydHkpIHsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRJbWFnZTogewotICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIGJhY2tncm91bmRMYXllciA9
IG1fc3R5bGUtPmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKTsgYmFja2dyb3VuZExheWVyOyBiYWNr
Z3JvdW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkgeworICAgICAgICAgICAgZm9y
IChGaWxsTGF5ZXIqIGJhY2tncm91bmRMYXllciA9IHN0YXRlLm1fc3R5bGUtPmFjY2Vzc0JhY2tn
cm91bmRMYXllcnMoKTsgYmFja2dyb3VuZExheWVyOyBiYWNrZ3JvdW5kTGF5ZXIgPSBiYWNrZ3Jv
dW5kTGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kTGF5ZXIt
PmltYWdlKCkgJiYgYmFja2dyb3VuZExheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQog
ICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5n
SW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihiYWNrZ3JvdW5kTGF5ZXItPmlt
YWdlKCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q29udGVudDogewotICAgICAgICAgICAgZm9yIChDb250
ZW50RGF0YSogY29udGVudERhdGEgPSBjb25zdF9jYXN0PENvbnRlbnREYXRhKj4obV9zdHlsZS0+
Y29udGVudERhdGEoKSk7IGNvbnRlbnREYXRhOyBjb250ZW50RGF0YSA9IGNvbnRlbnREYXRhLT5u
ZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoQ29udGVudERhdGEqIGNvbnRlbnREYXRhID0gY29u
c3RfY2FzdDxDb250ZW50RGF0YSo+KHN0YXRlLm1fc3R5bGUtPmNvbnRlbnREYXRhKCkpOyBjb250
ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50RGF0YS0+bmV4dCgpKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKGNvbnRlbnREYXRhLT5pc0ltYWdlKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
U3R5bGVJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxJbWFnZUNvbnRlbnREYXRhKj4oY29udGVu
dERhdGEpLT5pbWFnZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzUGVuZGlu
Z0ltYWdlKCkpIHsKQEAgLTUzMjMsNyArNTMwNyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9h
ZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUN1cnNvcjogewotICAgICAgICAgICAgaWYgKEN1cnNvckxpc3QqIGN1
cnNvckxpc3QgPSBtX3N0eWxlLT5jdXJzb3JzKCkpIHsKKyAgICAgICAgICAgIGlmIChDdXJzb3JM
aXN0KiBjdXJzb3JMaXN0ID0gc3RhdGUubV9zdHlsZS0+Y3Vyc29ycygpKSB7CiAgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjdXJzb3JMaXN0LT5zaXplKCk7ICsraSkgewog
ICAgICAgICAgICAgICAgICAgICBDdXJzb3JEYXRhJiBjdXJyZW50Q3Vyc29yID0gY3Vyc29yTGlz
dC0+YXQoaSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChTdHlsZUltYWdlKiBpbWFnZSA9IGN1
cnJlbnRDdXJzb3IuaW1hZ2UoKSkgewpAQCAtNTMzNSwxNyArNTMxOSwxNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZTogewotICAgICAgICAg
ICAgaWYgKG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkgJiYgbV9zdHlsZS0+bGlzdFN0eWxlSW1h
Z2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRMaXN0
U3R5bGVJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdl
Kj4obV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSkpKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5t
X3N0eWxlLT5saXN0U3R5bGVJbWFnZSgpICYmIHN0YXRlLm1fc3R5bGUtPmxpc3RTdHlsZUltYWdl
KCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0
TGlzdFN0eWxlSW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJ
bWFnZSo+KHN0YXRlLm1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3Vy
Y2U6IHsKLSAgICAgICAgICAgIGlmIChtX3N0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpICYmIG1f
c3R5bGUtPmJvcmRlckltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVySW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0
aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCkp
KSk7CisgICAgICAgICAgICBpZiAoc3RhdGUubV9zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAm
JiBzdGF0ZS5tX3N0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQor
ICAgICAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldEJvcmRlckltYWdlU291cmNlKGxvYWRQ
ZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihzdGF0ZS5tX3N0eWxl
LT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6IHsKLSAgICAgICAgICAg
IGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtX3N0eWxlLT5ib3hSZWZsZWN0KCkp
IHsKKyAgICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBzdGF0ZS5t
X3N0eWxlLT5ib3hSZWZsZWN0KCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBOaW5lUGllY2VJ
bWFnZSYgbWFza0ltYWdlID0gcmVmbGVjdGlvbi0+bWFzaygpOwogICAgICAgICAgICAgICAgIGlm
IChtYXNrSW1hZ2UuaW1hZ2UoKSAmJiBtYXNrSW1hZ2UuaW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2Uo
KSkgewogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZGVkSW1hZ2Ug
PSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obWFza0lt
YWdlLmltYWdlKCkpKTsKQEAgLTUzNTUsMTIgKzUzMzksMTIgQEAgdm9pZCBTdHlsZVJlc29sdmVy
Ojpsb2FkUGVuZGluZ0ltYWdlcygpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlOiB7Ci0gICAgICAg
ICAgICBpZiAobV9zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCkgJiYgbV9zdHlsZS0+bWFza0Jv
eEltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgbV9zdHls
ZS0+c2V0TWFza0JveEltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5
bGVQZW5kaW5nSW1hZ2UqPihtX3N0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSkpKTsKKyAgICAg
ICAgICAgIGlmIChzdGF0ZS5tX3N0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSAmJiBzdGF0ZS5t
X3N0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAg
ICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRNYXNrQm94SW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJ
bWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KHN0YXRlLm1fc3R5bGUtPm1hc2tC
b3hJbWFnZVNvdXJjZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZTogewotICAgICAgICAgICAgZm9yIChG
aWxsTGF5ZXIqIG1hc2tMYXllciA9IG1fc3R5bGUtPmFjY2Vzc01hc2tMYXllcnMoKTsgbWFza0xh
eWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkgeworICAgICAgICAgICAgZm9yIChG
aWxsTGF5ZXIqIG1hc2tMYXllciA9IHN0YXRlLm1fc3R5bGUtPmFjY2Vzc01hc2tMYXllcnMoKTsg
bWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAg
ICAgIGlmIChtYXNrTGF5ZXItPmltYWdlKCkgJiYgbWFza0xheWVyLT5pbWFnZSgpLT5pc1BlbmRp
bmdJbWFnZSgpKQogICAgICAgICAgICAgICAgICAgICBtYXNrTGF5ZXItPnNldEltYWdlKGxvYWRQ
ZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrTGF5ZXItPmlt
YWdlKCkpKSk7CiAgICAgICAgICAgICB9CkBAIC01MzcxLDIyICs1MzU1LDIyIEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICB9CiAgICAgfQogCi0gICAg
bV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmNsZWFyKCk7CisgICAgc3RhdGUubV9wZW5kaW5nSW1h
Z2VQcm9wZXJ0aWVzLmNsZWFyKCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRp
bmdSZXNvdXJjZXMoKQordm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1Jlc291cmNlcyhT
dHlsZVJlc29sdmVyU3RhdGUmIHN0YXRlKQogewogICAgIC8vIFN0YXJ0IGxvYWRpbmcgaW1hZ2Vz
IHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ0ltYWdlcygpOworICAg
IGxvYWRQZW5kaW5nSW1hZ2VzKHN0YXRlKTsKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAg
ICAvLyBTdGFydCBsb2FkaW5nIHRoZSBzaGFkZXJzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4K
LSAgICBsb2FkUGVuZGluZ1NoYWRlcnMoKTsKKyAgICBsb2FkUGVuZGluZ1NoYWRlcnMoc3RhdGUp
OwogI2VuZGlmCiAgICAgCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQog
ICAgIC8vIFN0YXJ0IGxvYWRpbmcgdGhlIFNWRyBEb2N1bWVudHMgcmVmZXJlbmNlZCBieSB0aGlz
IHN0eWxlLgotICAgIGxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCk7CisgICAgbG9hZFBlbmRpbmdT
VkdEb2N1bWVudHMoc3RhdGUpOwogI2VuZGlmCiB9CiAKQEAgLTU0MzQsNyArNTQxOCw2IEBAIHZv
aWQgTWVkaWFRdWVyeVJlc3VsdDo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyog
bWVtb3J5T2JqZWN0SW5mbykgY29uCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVz
YWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVt
b3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5
cGVzOjpDU1MpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fc3R5bGUpOwogICAgIGluZm8uYWRkTWVt
YmVyKG1fYXV0aG9yU3R5bGUpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fdXNlclN0eWxlKTsKICAg
ICBpbmZvLmFkZE1lbWJlcihtX2ZlYXR1cmVzKTsKQEAgLTU0NDMsMzEgKzU0MjYsMTYgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1v
cnlPYmplY3RJbmZvKSBjb25zdAogICAgIGluZm8uYWRkTWVtYmVyKG1fa2V5ZnJhbWVzUnVsZU1h
cCk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9tYXRjaGVkUHJvcGVydGllc0NhY2hlKTsKICAgICBp
bmZvLmFkZE1lbWJlcihtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyKTsKLSAgICBp
bmZvLmFkZE1lbWJlcihtX21hdGNoZWRSdWxlcyk7CiAKLSAgICBpbmZvLmFkZE1lbWJlcihtX3J1
bGVMaXN0KTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMpOwog
ICAgIGluZm8uYWRkTWVtYmVyKG1fbWVkaXVtKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3Jvb3RE
ZWZhdWx0U3R5bGUpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fZG9jdW1lbnQpOwogCi0gICAgLy8g
RklYTUU6IHBvaW50ZXIgdG8gUmVuZGVyU3R5bGUgY291bGQgcG9pbnQgdG8gYW4gYWxyZWFkeSBk
ZWxldGVkIG9iamVjdC4KLSAgICBpbmZvLmlnbm9yZU1lbWJlcihtX3BhcmVudFN0eWxlKTsKLSAg
ICBpbmZvLmlnbm9yZU1lbWJlcihtX3Jvb3RFbGVtZW50U3R5bGUpOwotCi0gICAgaW5mby5hZGRN
ZW1iZXIobV9lbGVtZW50KTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3N0eWxlZEVsZW1lbnQpOwot
ICAgIGluZm8uYWRkTWVtYmVyKG1fcmVnaW9uRm9yU3R5bGluZyk7Ci0gICAgaW5mby5hZGRNZW1i
ZXIobV9wYXJlbnROb2RlKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX2xpbmVIZWlnaHRWYWx1ZSk7
CiAgICAgaW5mby5hZGRNZW1iZXIobV9mb250U2VsZWN0b3IpOwogICAgIGluZm8uYWRkTWVtYmVy
KG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cyk7CiAgICAgaW5mby5pZ25vcmVN
ZW1iZXIobV9zdHlsZUJ1aWxkZXIpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fc3R5bGVSdWxlVG9D
U1NPTVdyYXBwZXJNYXApOwogICAgIGluZm8uYWRkTWVtYmVyKG1fc3R5bGVTaGVldENTU09NV3Jh
cHBlclNldCk7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQotICAgIGlu
Zm8uYWRkTWVtYmVyKG1fcGVuZGluZ1NWR0RvY3VtZW50cyk7Ci0jZW5kaWYKICAgICBpbmZvLmFk
ZE1lbWJlcihtX3Njb3BlUmVzb2x2ZXIpOwogCiAgICAgLy8gRklYTUU6IG1vdmUgdGhpcyB0byBh
IHBsYWNlIHdoZXJlIGl0IHdvdWxkIGJlIGNhbGxlZCBvbmx5IG9uY2U/CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuaAppbmRleCAzMzM2NmM3Njc5MTFlNzMwMTlmOTQ5NGJjZWI0ZGM4YjBjODc0
NzU4Li41MGNhM2NiYjEyNmQzMWMzMGZlNmQ4N2Y1MGM4N2MzNTkyNjM5NmY0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTIzLDYgKzIzLDcgQEAKICNkZWZpbmUgU3R5bGVSZXNv
bHZlcl9oCiAKICNpbmNsdWRlICJDU1NSdWxlLmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIK
ICNpbmNsdWRlICJDU1NUb1N0eWxlTWFwLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAj
aW5jbHVkZSAiTGlua0hhc2guaCIKQEAgLTM2LDYgKzM3LDkgQEAKICNpbmNsdWRlICJTdHlsZUlu
aGVyaXRlZERhdGEuaCIKICNpbmNsdWRlICJTdHlsZVNjb3BlUmVzb2x2ZXIuaCIKICNpbmNsdWRl
ICJWaWV3cG9ydFN0eWxlUmVzb2x2ZXIuaCIKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVO
QUJMRShTVkcpCisjaW5jbHVkZSAiV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZS5oIgorI2VuZGlm
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTEzMiw2ICsxMzYsMTAyIEBAIGVudW0gUnVsZU1hdGNo
aW5nQmVoYXZpb3IgewogICAgIE1hdGNoT25seVVzZXJBZ2VudFJ1bGVzLAogfTsKIAordHlwZWRl
ZiBIYXNoTWFwPENTU1Byb3BlcnR5SUQsIFJlZlB0cjxDU1NWYWx1ZT4gPiBQZW5kaW5nSW1hZ2VQ
cm9wZXJ0eU1hcDsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCit0eXBl
ZGVmIEhhc2hNYXA8RmlsdGVyT3BlcmF0aW9uKiwgUmVmUHRyPFdlYktpdENTU1NWR0RvY3VtZW50
VmFsdWU+ID4gUGVuZGluZ1NWR0RvY3VtZW50TWFwOworI2VuZGlmCisKK2NsYXNzIFN0eWxlUmVz
b2x2ZXJTdGF0ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3R5bGVSZXNvbHZlclN0YXRl
KTsKK3B1YmxpYzoKKyAgICBTdHlsZVJlc29sdmVyU3RhdGUoKQorICAgIDogbV9lbGVtZW50KDAp
CisgICAgLCBtX3N0eWxlKDApCisgICAgLCBtX3N0eWxlZEVsZW1lbnQoMCkKKyAgICAsIG1fcGFy
ZW50Tm9kZSgwKQorICAgICwgbV9wYXJlbnRTdHlsZSgwKQorICAgICwgbV9yb290RWxlbWVudFN0
eWxlKDApCisgICAgLCBtX3JlZ2lvbkZvclN0eWxpbmcoMCkKKyAgICAsIG1fc2FtZU9yaWdpbk9u
bHkoZmFsc2UpCisgICAgLCBtX3BzZXVkb1N0eWxlKE5PUFNFVURPKQorICAgICwgbV9lbGVtZW50
TGlua1N0YXRlKE5vdEluc2lkZUxpbmspCisgICAgLCBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Q
b2ludChmYWxzZSkKKyAgICAsIG1fY2FuVXNlRmFzdFJlamVjdChmYWxzZSkKKyAgICAsIG1fZWxl
bWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKGZhbHNlKQorICAgICwgbV9hcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGUodHJ1ZSkKKyAgICAsIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZShmYWxzZSkKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgLCBtX2hhc1BlbmRpbmdTaGFk
ZXJzKGZhbHNlKQorI2VuZGlmCisgICAgLCBtX2xpbmVIZWlnaHRWYWx1ZSgwKQorICAgICwgbV9m
b250RGlydHkoZmFsc2UpCisgICAgLCBtX2hhc1VBQXBwZWFyYW5jZShmYWxzZSkKKyAgICAsIG1f
YmFja2dyb3VuZERhdGEoQmFja2dyb3VuZEZpbGxMYXllcikgeyB9CisgICAgICAgIAorICAgIFJl
bmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KKyAgICBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9CisgICAg
UmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVt
ZW50U3R5bGU7IH0KKyAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVt
ZW50OyB9CisgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50
LT5kb2N1bWVudCgpOyB9CisgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24oKSB7IHJldHVybiBzdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsgfQorICAgIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gcGFyZW50U3R5
bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICB2b2lkIHNldEZvbnREZXNjcmlwdGlvbihj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBz
dHlsZSgpLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsgfQorICAgIHZvaWQg
c2V0Wm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFpvb20oZik7IH0K
KyAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHls
ZSgpLT5zZXRFZmZlY3RpdmVab29tKGYpOyB9CisgICAgdm9pZCBzZXRUZXh0U2l6ZUFkanVzdChi
b29sIGIpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0VGV4dFNpemVBZGp1c3QoYik7IH0K
KyAgICB2b2lkIHNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IG1fZm9u
dERpcnR5IHw9IHN0eWxlKCktPnNldFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsgfQorICAgIHZv
aWQgc2V0VGV4dE9yaWVudGF0aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24pIHsg
bV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0VGV4dE9yaWVudGF0aW9uKHRleHRPcmllbnRhdGlv
bik7IH0KKyAgICBib29sIGhhc1BhcmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudE5v
ZGU7IH0KKworICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9lbGVt
ZW50ICYmIG1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCk7IH0KKworcHVibGljOgorICAgIC8vIEZJ
WE1FOiB0byBtYWtlIGl0IGVhc2llciB0byByZXZpZXcsIHRoZXNlIG1lbWJlciB2YXJpYWJsZXMg
YXJlCisgICAgLy8gcHVibGljLiBIb3dldmVyIHdlIHNob3VsZCBhZGQgbWV0aG9kcyB0byBhY2Nl
c3MgdGhlc2UgdmFyaWFibGVzLgorICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICBSZW5kZXJT
dHlsZSogbV9zdHlsZTsKKyAgICBTdHlsZWRFbGVtZW50KiBtX3N0eWxlZEVsZW1lbnQ7CisgICAg
Q29udGFpbmVyTm9kZSogbV9wYXJlbnROb2RlOworICAgIFJlbmRlclN0eWxlKiBtX3BhcmVudFN0
eWxlOworICAgIFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGU7CisKKyAgICBSZW5kZXJS
ZWdpb24qIG1fcmVnaW9uRm9yU3R5bGluZzsKKyAgICBib29sIG1fc2FtZU9yaWdpbk9ubHk7Cisg
ICAgUHNldWRvSWQgbV9wc2V1ZG9TdHlsZTsKKworICAgIEVJbnNpZGVMaW5rIG1fZWxlbWVudExp
bmtTdGF0ZTsKKworICAgIGJvb2wgbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQ7CisKKyAg
ICBib29sIG1fY2FuVXNlRmFzdFJlamVjdDsKKyAgICBib29sIG1fZWxlbWVudEFmZmVjdGVkQnlD
bGFzc1J1bGVzOworCisgICAgUHNldWRvSWQgbV9keW5hbWljUHNldWRvOworCisgICAgLy8gQSBi
dWZmZXIgdXNlZCB0byBob2xkIHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcyBmb3IgYW4gZWxlbWVu
dCwKKyAgICAvLyBhbmQgYSB0ZW1wb3JhcnkgYnVmZmVyIHVzZWQgZm9yIG1lcmdlIHNvcnRpbmcu
CisgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+IG1fbWF0Y2hlZFJ1bGVzOworICAgIFJl
ZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4gbV9ydWxlTGlzdDsKKworICAgIGJvb2wgbV9hcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGU7CisgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGU7CisKKyAgICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcCBtX3BlbmRpbmdJbWFnZVBy
b3BlcnRpZXM7CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIGJvb2wgbV9oYXNQZW5kaW5n
U2hhZGVyczsKKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykK
KyAgICBQZW5kaW5nU1ZHRG9jdW1lbnRNYXAgbV9wZW5kaW5nU1ZHRG9jdW1lbnRzOworI2VuZGlm
CisgICAgQ1NTVmFsdWUqIG1fbGluZUhlaWdodFZhbHVlOworICAgIGJvb2wgbV9mb250RGlydHk7
CisKKyAgICBib29sIG1faGFzVUFBcHBlYXJhbmNlOworICAgIEJvcmRlckRhdGEgbV9ib3JkZXJE
YXRhOworICAgIEZpbGxMYXllciBtX2JhY2tncm91bmREYXRhOworICAgIENvbG9yIG1fYmFja2dy
b3VuZENvbG9yOworfTsKKwogLy8gVGhpcyBjbGFzcyBzZWxlY3RzIGEgUmVuZGVyU3R5bGUgZm9y
IGEgZ2l2ZW4gZWxlbWVudCBiYXNlZCBvbiBhIGNvbGxlY3Rpb24gb2Ygc3R5bGVzaGVldHMuCiBj
bGFzcyBTdHlsZVJlc29sdmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHlsZVJlc29s
dmVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC0xNjEsMjUgKzI2MSwxMyBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JEb2N1bWVu
dChEb2N1bWVudCosIENTU0ZvbnRTZWxlY3RvciogPSAwKTsKIAotICAgIFJlbmRlclN0eWxlKiBz
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KLSAgICBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9Ci0gICAgUmVuZGVy
U3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50U3R5
bGU7IH0KLSAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9
CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQot
ICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gc3R5
bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBh
cmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlw
dGlvbigpOyB9Ci0gICAgdm9pZCBzZXRGb250RGVzY3JpcHRpb24oY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KLSAgICB2b2lkIHNldFpvb20oZmxvYXQgZikg
eyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRab29tKGYpOyB9Ci0gICAgdm9pZCBzZXRFZmZl
Y3RpdmVab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0RWZmZWN0aXZl
Wm9vbShmKTsgfQotICAgIHZvaWQgc2V0VGV4dFNpemVBZGp1c3QoYm9vbCBiKSB7IG1fZm9udERp
cnR5IHw9IHN0eWxlKCktPnNldFRleHRTaXplQWRqdXN0KGIpOyB9Ci0gICAgdm9pZCBzZXRXcml0
aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgp
LT5zZXRXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7IH0KLSAgICB2b2lkIHNldFRleHRPcmllbnRh
dGlvbihUZXh0T3JpZW50YXRpb24gdGV4dE9yaWVudGF0aW9uKSB7IG1fZm9udERpcnR5IHw9IHN0
eWxlKCktPnNldFRleHRPcmllbnRhdGlvbih0ZXh0T3JpZW50YXRpb24pOyB9Ci0gICAgYm9vbCBo
YXNQYXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnROb2RlOyB9CiAKICAgICB2b2lk
IHJlc2V0QXV0aG9yU3R5bGUoKTsKICAgICB2b2lkIGFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKHVu
c2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mKTsK
IAogcHJpdmF0ZToKKwogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpIHx8IEVOQUJMRShTSEFET1df
RE9NKQogICAgIFN0eWxlU2NvcGVSZXNvbHZlciogZW5zdXJlU2NvcGVSZXNvbHZlcigpCiAgICAg
ewpAQCAtMTk4LDE3ICsyODYsMTcgQEAgcHJpdmF0ZToKICAgICB9CiAjZW5kaWYKIAotICAgIHZv
aWQgaW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
ID0gMCwgUHNldWRvSWQgPSBOT1BTRVVETyk7Ci0gICAgdm9pZCBpbml0RWxlbWVudChFbGVtZW50
Kik7CisgICAgdm9pZCBpbml0Rm9yU3R5bGVSZXNvbHZlKFN0eWxlUmVzb2x2ZXJTdGF0ZSYsIEVs
ZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBQc2V1ZG9JZCA9IE5PUFNFVURP
KTsKKyAgICB2b2lkIGluaXRFbGVtZW50KFN0eWxlUmVzb2x2ZXJTdGF0ZSYsIEVsZW1lbnQqKTsK
ICAgICB2b2lkIGNvbGxlY3RGZWF0dXJlcygpOwotICAgIFJlbmRlclN0eWxlKiBsb2NhdGVTaGFy
ZWRTdHlsZSgpOwotICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQo
UnVsZVNldCopOwotICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxl
cygpOworICAgIFJlbmRlclN0eWxlKiBsb2NhdGVTaGFyZWRTdHlsZShTdHlsZVJlc29sdmVyU3Rh
dGUmKTsKKyAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KEVsZW1l
bnQqLCBSdWxlU2V0Kik7CisgICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9z
dFJ1bGVzKEVsZW1lbnQqKTsKICAgICBOb2RlKiBsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBh
cmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQ291bnQpIGNvbnN0OwotICAgIFN0eWxlZEVsZW1l
bnQqIGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUqLCB1bnNpZ25lZCYgY291bnQpIGNv
bnN0OwotICAgIGJvb2wgY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqKSBj
b25zdDsKKyAgICBTdHlsZWRFbGVtZW50KiBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhjb25z
dCBTdHlsZVJlc29sdmVyU3RhdGUmLCBOb2RlKiwgdW5zaWduZWQmIGNvdW50KSBjb25zdDsKKyAg
ICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChjb25zdCBTdHlsZVJlc29sdmVyU3RhdGUm
LCBTdHlsZWRFbGVtZW50KikgY29uc3Q7CiAKLSAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBz
dHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVLZXlmcmFtZSos
IEtleWZyYW1lVmFsdWUmKTsKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvcktl
eWZyYW1lKFN0eWxlUmVzb2x2ZXJTdGF0ZSYsIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5
bGVLZXlmcmFtZSosIEtleWZyYW1lVmFsdWUmKTsKIAogcHVibGljOgogICAgIC8vIFRoZXNlIG1l
dGhvZHMgd2lsbCBnaXZlIGJhY2sgdGhlIHNldCBvZiBydWxlcyB0aGF0IG1hdGNoZWQgZm9yIGEg
Z2l2ZW4gZWxlbWVudCAob3IgYSBwc2V1ZG8tZWxlbWVudCkuCkBAIC0yMzEsMjUgKzMxOSwyMiBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGludCBsZWdhY3lGb250U2l6ZShEb2N1bWVudCosIGludCBw
aXhlbEZvbnRTaXplLCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpOwogCiBwdWJsaWM6
Ci0gICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSos
IFJlbmRlclN0eWxlKik7Ci0KLSAgICB2b2lkIGFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShD
U1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOworICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVdpdGhWYWx1
ZUNoZWNraW5nKFN0eWxlUmVzb2x2ZXJTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7
CisgICAgdm9pZCBhcHBseUZvbnRQcm9wZXJ0eVRvU3R5bGUoUmVuZGVyU3R5bGUqIHRhcmdldCwg
Y29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcmVmZXJlbmNlKTsKIAotICAgIHZvaWQgdXBkYXRlRm9u
dCgpOwotICAgIHZvaWQgaW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0aW5ncyopOworICAgIHZvaWQg
dXBkYXRlRm9udChTdHlsZVJlc29sdmVyU3RhdGUmKTsKKyAgICB2b2lkIGluaXRpYWxpemVGb250
U3R5bGUoU3R5bGVSZXNvbHZlclN0YXRlJiwgU2V0dGluZ3MqKTsKIAogICAgIHN0YXRpYyBmbG9h
dCBnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCosIGZsb2F0IHpvb21G
YWN0b3IsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIEVTbWFydE1p
bmltdW1Gb3JGb250U2l6ZSA9IFVzZVNtYXJ0TWluaW11bUZvckZvbnRGaXplKTsKIAotICAgIHZv
aWQgc2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2l6ZSk7CisgICAgc3RhdGlj
IHZvaWQgc2V0Rm9udFNpemUoY29uc3QgU3R5bGVSZXNvbHZlclN0YXRlJiwgRm9udERlc2NyaXB0
aW9uJiwgZmxvYXQgc2l6ZSk7CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGZsb2F0IGdldENvbXB1
dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiwgUmVuZGVyU3R5bGUqLCBib29sIGlz
QWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBib29sIHVzZVNWR1pvb21SdWxlcyk7
CiAKIHB1YmxpYzoKLSAgICBib29sIHVzZVNWR1pvb21SdWxlcygpOwotCiAgICAgc3RhdGljIGJv
b2wgY29sb3JGcm9tUHJpbWl0aXZlVmFsdWVJc0Rlcml2ZWRGcm9tRWxlbWVudChDU1NQcmltaXRp
dmVWYWx1ZSopOwotICAgIENvbG9yIGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2
ZVZhbHVlKiwgYm9vbCBmb3JWaXNpdGVkTGluayA9IGZhbHNlKSBjb25zdDsKKyAgICBzdGF0aWMg
Q29sb3IgY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlclN0YXRlJiwg
Q1NTUHJpbWl0aXZlVmFsdWUqLCBib29sIGZvclZpc2l0ZWRMaW5rID0gZmFsc2UpOwogCiAgICAg
Ym9vbCBoYXNTZWxlY3RvckZvcklkKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwogICAgIGJv
b2wgaGFzU2VsZWN0b3JGb3JDbGFzcyhjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKQEAgLTI4
MSwzNCArMzY2LDM0IEBAIHB1YmxpYzoKICAgICBDU1NTdHlsZVJ1bGUqIGVuc3VyZUZ1bGxDU1NP
TVdyYXBwZXJGb3JJbnNwZWN0b3IoU3R5bGVSdWxlKik7CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCi0gICAgYm9vbCBjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBS
ZW5kZXJTdHlsZSogaW5TdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgRmlsdGVyT3BlcmF0
aW9ucyYgb3V0T3BlcmF0aW9ucyk7CisgICAgYm9vbCBjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKFN0
eWxlUmVzb2x2ZXJTdGF0ZSYsIENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogaW5TdHls
ZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9u
cyk7CiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIFN0eWxlU2hhZGVyKiBzdHlsZVNoYWRl
cihDU1NWYWx1ZSopOwotICAgIFN0eWxlU2hhZGVyKiBjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRl
ckZyb21WYWx1ZShXZWJLaXRDU1NTaGFkZXJWYWx1ZSopOwotICAgIGJvb2wgcGFyc2VDdXN0b21G
aWx0ZXJQYXJhbWV0ZXJMaXN0KENTU1ZhbHVlKiwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYp
OwotICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRl
clBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlKik7CisgICAgU3R5bGVTaGFk
ZXIqIHN0eWxlU2hhZGVyKFN0eWxlUmVzb2x2ZXJTdGF0ZSYsIENTU1ZhbHVlKik7CisgICAgU3R5
bGVTaGFkZXIqIGNhY2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKFN0eWxlUmVzb2x2
ZXJTdGF0ZSYsIFdlYktpdENTU1NoYWRlclZhbHVlKik7CisgICAgYm9vbCBwYXJzZUN1c3RvbUZp
bHRlclBhcmFtZXRlckxpc3QoY29uc3QgU3R5bGVSZXNvbHZlclN0YXRlJiwgQ1NTVmFsdWUqLCBD
dXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0Jik7CisgICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQ
YXJhbWV0ZXI+IHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKGNvbnN0IFN0eWxlUmVzb2x2ZXJT
dGF0ZSYsIGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWUqKTsKICAgICBQYXNzUmVmUHRyPEN1
c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyc2VDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlcihjb25z
dCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlTGlzdCopOwogICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmls
dGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlcihjb25zdCBTdHJp
bmcmIG5hbWUsIENTU1ZhbHVlTGlzdCopOwotICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFy
YW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcihjb25zdCBTdHJpbmcm
IG5hbWUsIENTU1ZhbHVlTGlzdCopOwotICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0
aW9uPiBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oV2ViS2l0Q1NTRmlsdGVyVmFsdWUqKTsK
LSAgICB2b2lkIGxvYWRQZW5kaW5nU2hhZGVycygpOworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmls
dGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcihjb25zdCBT
dHlsZVJlc29sdmVyU3RhdGUmLCBjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlTGlzdCopOwor
ICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBjcmVhdGVDdXN0b21GaWx0ZXJP
cGVyYXRpb24oU3R5bGVSZXNvbHZlclN0YXRlJiwgV2ViS2l0Q1NTRmlsdGVyVmFsdWUqKTsKKyAg
ICB2b2lkIGxvYWRQZW5kaW5nU2hhZGVycyhTdHlsZVJlc29sdmVyU3RhdGUmKTsKICNlbmRpZgog
I2lmIEVOQUJMRShTVkcpCi0gICAgdm9pZCBsb2FkUGVuZGluZ1NWR0RvY3VtZW50cygpOworICAg
IHZvaWQgbG9hZFBlbmRpbmdTVkdEb2N1bWVudHMoU3R5bGVSZXNvbHZlclN0YXRlJik7CiAjZW5k
aWYKICNlbmRpZiAvLyBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAKLSAgICB2b2lkIGxvYWRQZW5kaW5n
UmVzb3VyY2VzKCk7CisgICAgdm9pZCBsb2FkUGVuZGluZ1Jlc291cmNlcyhTdHlsZVJlc29sdmVy
U3RhdGUmKTsKIAogcHJpdmF0ZToKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGZpeGVzIHVwIHRoZSBk
ZWZhdWx0IGZvbnQgc2l6ZSBpZiBpdCBkZXRlY3RzIHRoYXQgdGhlIGN1cnJlbnQgZ2VuZXJpYyBm
b250IGZhbWlseSBoYXMgY2hhbmdlZC4gLWR3aAotICAgIHZvaWQgY2hlY2tGb3JHZW5lcmljRmFt
aWx5Q2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKLSAgICB2
b2lkIGNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSk7Ci0gICAgdm9pZCBjaGVja0ZvclRleHRTaXplQWRqdXN0KCk7CisgICAgdm9pZCBjaGVj
a0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoY29uc3QgU3R5bGVSZXNvbHZlclN0YXRlJiwgUmVuZGVy
U3R5bGUqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAgIHZvaWQgY2hlY2tGb3Jab29t
Q2hhbmdlKGNvbnN0IFN0eWxlUmVzb2x2ZXJTdGF0ZSYsIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIGNoZWNrRm9yVGV4dFNpemVBZGp1c3QoUmVuZGVy
U3R5bGUqKTsKIAotICAgIHZvaWQgYWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxl
VG9BZGp1c3QsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVudCopOworICAgIHZvaWQg
YWRqdXN0UmVuZGVyU3R5bGUoY29uc3QgU3R5bGVSZXNvbHZlclN0YXRlJiwgUmVuZGVyU3R5bGUq
IHN0eWxlVG9BZGp1c3QsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVudCopOwogCi0g
ICAgdm9pZCBhZGRNYXRjaGVkUnVsZShjb25zdCBSdWxlRGF0YSogcnVsZSkgeyBtX21hdGNoZWRS
dWxlcy5hcHBlbmQocnVsZSk7IH0KKyAgICB2b2lkIGFkZE1hdGNoZWRSdWxlKFN0eWxlUmVzb2x2
ZXJTdGF0ZSYgc3RhdGUsIGNvbnN0IFJ1bGVEYXRhKiBydWxlKSB7IHN0YXRlLm1fbWF0Y2hlZFJ1
bGVzLmFwcGVuZChydWxlKTsgfQogCiAgICAgc3RydWN0IFJ1bGVSYW5nZSB7CiAgICAgICAgIFJ1
bGVSYW5nZShpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgpOiBmaXJzdFJ1
bGVJbmRleChmaXJzdFJ1bGVJbmRleCksIGxhc3RSdWxlSW5kZXgobGFzdFJ1bGVJbmRleCkgeyB9
CkBAIC0zNjUsMjUgKzQ1MCwyNSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGFkZE1hdGNo
ZWRQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiwgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVy
dGllcywgU3R5bGVSdWxlKiA9IDAsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBTZWxlY3RvckNo
ZWNrZXI6Ok1hdGNoQWxsLCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgPSBQcm9wZXJ0eVdoaXRlbGlz
dE5vbmUpOwogICAgIHZvaWQgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhNYXRjaFJlc3VsdCYs
IGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqLCBib29sIGlzQ2FjaGVhYmxlID0gdHJ1ZSk7CiAKLSAg
ICB2b2lkIG1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVTTUlMUHJvcGVy
dGllcyk7Ci0gICAgdm9pZCBtYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmKTsKLSAgICB2b2lkIG1h
dGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYsIFJ1bGVTZXQqKTsKLSAgICB2b2lkIG1hdGNoQXV0aG9y
UnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICB2b2lkIG1h
dGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAg
dm9pZCBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1w
dHlSdWxlcyk7Ci0gICAgdm9pZCBtYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5j
bHVkZUVtcHR5UnVsZXMpOworICAgIHZvaWQgbWF0Y2hBbGxSdWxlcyhTdHlsZVJlc29sdmVyU3Rh
dGUmLCBNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWVzKTsKKyAgICB2b2lk
IG1hdGNoVUFSdWxlcyhTdHlsZVJlc29sdmVyU3RhdGUmLCBNYXRjaFJlc3VsdCYpOworICAgIHZv
aWQgbWF0Y2hVQVJ1bGVzKFN0eWxlUmVzb2x2ZXJTdGF0ZSYsIE1hdGNoUmVzdWx0JiwgUnVsZVNl
dCopOworICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhTdHlsZVJlc29sdmVyU3RhdGUmLCBNYXRj
aFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIHZvaWQgbWF0Y2hVc2VyUnVs
ZXMoU3R5bGVSZXNvbHZlclN0YXRlJiwgTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1
bGVzKTsKKyAgICB2b2lkIG1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoU3R5bGVSZXNvbHZlclN0YXRl
JiwgTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lkIG1hdGNo
SG9zdFJ1bGVzKFN0eWxlUmVzb2x2ZXJTdGF0ZSYsIE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRl
RW1wdHlSdWxlcyk7CiAKLSAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzKGNvbnN0IE1hdGNo
UmVxdWVzdCYsIFJ1bGVSYW5nZSYpOwotICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JS
ZWdpb24oY29uc3QgTWF0Y2hSZXF1ZXN0JiwgUnVsZVJhbmdlJik7Ci0gICAgdm9pZCBjb2xsZWN0
TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGNvbnN0IE1hdGNo
UmVxdWVzdCYsIFJ1bGVSYW5nZSYpOworICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXMoU3R5
bGVSZXNvbHZlclN0YXRlJiwgY29uc3QgTWF0Y2hSZXF1ZXN0JiwgUnVsZVJhbmdlJik7CisgICAg
dm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihTdHlsZVJlc29sdmVyU3RhdGUmLCBj
b25zdCBNYXRjaFJlcXVlc3QmLCBSdWxlUmFuZ2UmKTsKKyAgICB2b2lkIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzRm9yTGlzdChTdHlsZVJlc29sdmVyU3RhdGUmLCBjb25zdCBWZWN0b3I8UnVsZURhdGE+
KiwgY29uc3QgTWF0Y2hSZXF1ZXN0JiwgUnVsZVJhbmdlJik7CiAKICAgICBib29sIGZhc3RSZWpl
Y3RTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYpIGNvbnN0OwotICAgIHZvaWQgc29ydE1hdGNoZWRS
dWxlcygpOwotICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0
Jik7CisgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMy
PiYgbWF0Y2hlZFJ1bGVzKTsKKyAgICB2b2lkIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhT
dHlsZVJlc29sdmVyU3RhdGUmLCBNYXRjaFJlc3VsdCYpOwogCi0gICAgYm9vbCBydWxlTWF0Y2hl
cyhjb25zdCBSdWxlRGF0YSYsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKTsKKyAgICBib29s
IHJ1bGVNYXRjaGVzKFN0eWxlUmVzb2x2ZXJTdGF0ZSYsIGNvbnN0IFJ1bGVEYXRhJiwgY29uc3Qg
Q29udGFpbmVyTm9kZSogc2NvcGUpOwogICAgIGJvb2wgY2hlY2tSZWdpb25TZWxlY3Rvcihjb25z
dCBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IsIEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOwot
ICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYsIGNvbnN0
IEVsZW1lbnQqKTsKKyAgICB2b2lkIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoU3R5bGVSZXNvbHZl
clN0YXRlJiwgY29uc3QgTWF0Y2hSZXN1bHQmLCBjb25zdCBFbGVtZW50Kik7CiAgICAgZW51bSBT
dHlsZUFwcGxpY2F0aW9uUGFzcyB7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCiAgICAgICAg
IFZhcmlhYmxlRGVmaW5pdGlvbnMsCkBAIC0zOTIsMTEgKzQ3NywxMSBAQCBwcml2YXRlOgogICAg
ICAgICBMb3dQcmlvcml0eVByb3BlcnRpZXMKICAgICB9OwogICAgIHRlbXBsYXRlIDxTdHlsZUFw
cGxpY2F0aW9uUGFzcyBwYXNzPgotICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25z
dCBNYXRjaFJlc3VsdCYsIGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZElu
ZGV4LCBib29sIGluaGVyaXRlZE9ubHkpOworICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGll
cyhTdHlsZVJlc29sdmVyU3RhdGUmLCBjb25zdCBNYXRjaFJlc3VsdCYsIGJvb2wgaW1wb3J0YW50
LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpOwogICAg
IHRlbXBsYXRlIDxTdHlsZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgotICAgIHZvaWQgYXBwbHlQcm9w
ZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSosIGJv
b2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBl
ID0gUHJvcGVydHlXaGl0ZWxpc3ROb25lKTsKKyAgICB2b2lkIGFwcGx5UHJvcGVydGllcyhTdHls
ZVJlc29sdmVyU3RhdGUmLCBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHls
ZVJ1bGUqLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHksIFByb3BlcnR5V2hp
dGVsaXN0VHlwZSA9IFByb3BlcnR5V2hpdGVsaXN0Tm9uZSk7CiAjaWYgRU5BQkxFKENTU19WQVJJ
QUJMRVMpCi0gICAgdm9pZCByZXNvbHZlVmFyaWFibGVzKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVl
KiwgVmVjdG9yPHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+ID4mIGtub3duRXhwcmVz
c2lvbnMpOworICAgIHZvaWQgcmVzb2x2ZVZhcmlhYmxlcyhTdHlsZVJlc29sdmVyU3RhdGUmLCBD
U1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIFZlY3RvcjxzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwg
U3RyaW5nPiA+JiBrbm93bkV4cHJlc3Npb25zKTsKICNlbmRpZgogICAgIHN0YXRpYyBib29sIGlz
VmFsaWRSZWdpb25TdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQpOwogI2lmIEVOQUJMRShWSURF
T19UUkFDSykKQEAgLTQwNiw4ICs0OTEsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgbWF0Y2hQYWdl
UnVsZXNGb3JMaXN0KFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIG1hdGNoZWRSdWxlcywgY29uc3Qg
VmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFn
ZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7CiAgICAgU2V0dGluZ3MqIGRvY3VtZW50U2V0dGlu
Z3MoKSB7IHJldHVybiBtX2RvY3VtZW50LT5zZXR0aW5ncygpOyB9CiAKLSAgICBib29sIGlzTGVm
dFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0gICAgYm9vbCBpc1JpZ2h0UGFnZShpbnQgcGFn
ZUluZGV4KSBjb25zdCB7IHJldHVybiAhaXNMZWZ0UGFnZShwYWdlSW5kZXgpOyB9CisgICAgYm9v
bCBpc0xlZnRQYWdlKFJlbmRlclN0eWxlKiwgaW50IHBhZ2VJbmRleCkgY29uc3Q7CisgICAgYm9v
bCBpc1JpZ2h0UGFnZShSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSwgaW50IHBhZ2VJbmRl
eCkgY29uc3QgeyByZXR1cm4gIWlzTGVmdFBhZ2Uocm9vdEVsZW1lbnRTdHlsZSwgcGFnZUluZGV4
KTsgfQogICAgIGJvb2wgaXNGaXJzdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7CiAgICAgU3Ry
aW5nIHBhZ2VOYW1lKGludCBwYWdlSW5kZXgpIGNvbnN0OwogCkBAIC00MTgsMzMgKzUwMywyMyBA
QCBwcml2YXRlOgogICAgIE93blB0cjxSdWxlU2V0PiBtX3NpYmxpbmdSdWxlU2V0OwogICAgIE93
blB0cjxSdWxlU2V0PiBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldDsKIAotICAgIGJvb2wgbV9o
YXNVQUFwcGVhcmFuY2U7Ci0gICAgQm9yZGVyRGF0YSBtX2JvcmRlckRhdGE7Ci0gICAgRmlsbExh
eWVyIG1fYmFja2dyb3VuZERhdGE7Ci0gICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7Ci0KICAg
ICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIFJlZlB0cjxTdHlsZVJ1bGVLZXlm
cmFtZXM+ID4gS2V5ZnJhbWVzUnVsZU1hcDsKICAgICBLZXlmcmFtZXNSdWxlTWFwIG1fa2V5ZnJh
bWVzUnVsZU1hcDsKIAogcHVibGljOgogICAgIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVOb3RZ
ZXRBdmFpbGFibGUoKSB7IHJldHVybiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOyB9CiAKLSAgICBQ
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUq
KTsKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShD
U1NQcm9wZXJ0eUlELCBDU1NJbWFnZVZhbHVlKik7Ci0gICAgUGFzc1JlZlB0cjxTdHlsZUltYWdl
PiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1h
Z2UoU3R5bGVSZXNvbHZlclN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoU3R5
bGVSZXNvbHZlclN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VWYWx1ZSopOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShT
dHlsZVJlc29sdmVyU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZUdlbmVyYXRvclZhbHVl
Kik7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAgUGFzc1JlZlB0cjxTdHlsZUltYWdl
PiBzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VTZXRWYWx1ZSop
OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHNldE9yUGVuZGluZ0Zyb21WYWx1
ZShTdHlsZVJlc29sdmVyU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVNldFZhbHVlKik7
CiAjZW5kaWYKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGN1cnNvck9yUGVuZGluZ0Zyb21W
YWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NDdXJzb3JJbWFnZVZhbHVlKik7Ci0KLSAgICBib29sIGFw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlOyB9Ci0gICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOyB9
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gY3Vyc29yT3JQZW5kaW5nRnJvbVZh
bHVlKFN0eWxlUmVzb2x2ZXJTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIENTU0N1cnNvckltYWdlVmFs
dWUqKTsKIAogICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvSW50TGVuZ3RoKENTU1ByaW1pdGl2
ZVZhbHVlKiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVs
dGlwbGllciA9IDEpOwogICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvRmxvYXRMZW5ndGgoQ1NT
UHJpbWl0aXZlVmFsdWUqLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRv
dWJsZSBtdWx0aXBsaWVyID0gMSk7CiAKLSAgICBDU1NUb1N0eWxlTWFwKiBzdHlsZU1hcCgpIHsg
cmV0dXJuICZtX3N0eWxlTWFwOyB9Ci0KICAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9y
eU9iamVjdEluZm8qKSBjb25zdDsKICAgICAKIHByaXZhdGU6CkBAIC00NTIsMTkgKzUyNywxOSBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGNv
bnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYsIFJ1bGVTZXQmIHVzZXJTdHlsZSk7
CiAKLSAgICB2b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOworICAgIHZvaWQgY2FjaGVC
b3JkZXJBbmRCYWNrZ3JvdW5kKFN0eWxlUmVzb2x2ZXJTdGF0ZSYpOwogCiBwcml2YXRlOgotICAg
IGJvb2wgY2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKKyAg
ICBib29sIGNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChjb25zdCBTdHlsZVJlc29sdmVyU3RhdGUm
LCBTdHlsZWRFbGVtZW50KikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCwgQ1NTVmFsdWUqKTsKKyAgICB2b2lkIGFwcGx5UHJvcGVydHkoU3R5bGVSZXNvbHZl
clN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKIAogI2lmIEVOQUJMRShTVkcpCi0g
ICAgdm9pZCBhcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CisgICAg
dm9pZCBhcHBseVNWR1Byb3BlcnR5KGNvbnN0IFN0eWxlUmVzb2x2ZXJTdGF0ZSYsIENTU1Byb3Bl
cnR5SUQsIENTU1ZhbHVlKik7CiAjZW5kaWYKIAogICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4g
bG9hZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSopOwotICAgIHZvaWQgbG9hZFBlbmRp
bmdJbWFnZXMoKTsKKyAgICB2b2lkIGxvYWRQZW5kaW5nSW1hZ2VzKFN0eWxlUmVzb2x2ZXJTdGF0
ZSYpOwogCiAgICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVNYXRjaGVkUHJvcGVydGllc0hhc2go
Y29uc3QgTWF0Y2hlZFByb3BlcnRpZXMqLCB1bnNpZ25lZCBzaXplKTsKICAgICBzdHJ1Y3QgTWF0
Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0gewpAQCAtNDgyLDcgKzU1Nyw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoVGltZXI8U3R5bGVSZXNvbHZlcj4q
KTsKIAogICAgIGJvb2wgY2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhjb25zdCBTcGFjZVNwbGl0
U3RyaW5nJikgY29uc3Q7Ci0gICAgYm9vbCBzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5
bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKKyAgICBib29sIHNo
YXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoY29uc3Qg
U3R5bGVSZXNvbHZlclN0YXRlJiwgU3R5bGVkRWxlbWVudCopIGNvbnN0OwogCiAgICAgdW5zaWdu
ZWQgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VMYXN0U3dlZXA7CiAKQEAg
LTQ5MSwzOSArNTY2LDE4IEBAIHByaXZhdGU6CiAKICAgICBUaW1lcjxTdHlsZVJlc29sdmVyPiBt
X21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyOwogCi0gICAgLy8gQSBidWZmZXIgdXNl
ZCB0byBob2xkIHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcyBmb3IgYW4gZWxlbWVudCwgYW5kIGEg
dGVtcG9yYXJ5IGJ1ZmZlciB1c2VkIGZvcgotICAgIC8vIG1lcmdlIHNvcnRpbmcuCi0gICAgVmVj
dG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+IG1fbWF0Y2hlZFJ1bGVzOwotCi0gICAgUmVmUHRyPFN0
YXRpY0NTU1J1bGVMaXN0PiBtX3J1bGVMaXN0OwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPENTU1By
b3BlcnR5SUQsIFJlZlB0cjxDU1NWYWx1ZT4gPiBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDsKLSAg
ICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcCBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXM7Ci0KICAg
ICBPd25QdHI8TWVkaWFRdWVyeUV2YWx1YXRvcj4gbV9tZWRpdW07CiAgICAgUmVmUHRyPFJlbmRl
clN0eWxlPiBtX3Jvb3REZWZhdWx0U3R5bGU7CiAKLSAgICBQc2V1ZG9JZCBtX2R5bmFtaWNQc2V1
ZG87Ci0gICAgUHNldWRvSWQgbV9wc2V1ZG9TdHlsZTsKLQogICAgIERvY3VtZW50KiBtX2RvY3Vt
ZW50OworICAgIC8vIEZJWE1FOiBNYWtlIFNlbGVjdG9yQ2hlY2tlciBhbiBvbi1zdGFjayBvYmpl
Y3QgYW5kCisgICAgLy8gbW92ZSBzZWxlY3RvckNoZWNrZXIubW9kZSgpIHRvIFN0eWxlUmVzb2x2
ZXJTdGF0ZS4KKyAgICAvLyBzZWxlY3RvckNoZWNrZXIuc3RyaW5nUGFyc2luZygpIGNhbiBiZSBy
ZXBsYWNlZCB3aXRoCisgICAgLy8gIWRvY3VtZW50LmluUXVpcmtzTW9kZSgpLgogICAgIFNlbGVj
dG9yQ2hlY2tlciBtX3NlbGVjdG9yQ2hlY2tlcjsKICAgICBTZWxlY3RvckZpbHRlciBtX3NlbGVj
dG9yRmlsdGVyOwogCi0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwotICAgIFJlbmRl
clN0eWxlKiBtX3BhcmVudFN0eWxlOwotICAgIFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5
bGU7Ci0gICAgRWxlbWVudCogbV9lbGVtZW50OwotICAgIFN0eWxlZEVsZW1lbnQqIG1fc3R5bGVk
RWxlbWVudDsKLSAgICBSZW5kZXJSZWdpb24qIG1fcmVnaW9uRm9yU3R5bGluZzsKLSAgICBFSW5z
aWRlTGluayBtX2VsZW1lbnRMaW5rU3RhdGU7Ci0gICAgYm9vbCBtX2VsZW1lbnRBZmZlY3RlZEJ5
Q2xhc3NSdWxlczsKLSAgICBDb250YWluZXJOb2RlKiBtX3BhcmVudE5vZGU7Ci0gICAgQ1NTVmFs
dWUqIG1fbGluZUhlaWdodFZhbHVlOwotICAgIGJvb2wgbV9mb250RGlydHk7CiAgICAgYm9vbCBt
X21hdGNoQXV0aG9yQW5kVXNlclN0eWxlczsKLSAgICBib29sIG1fc2FtZU9yaWdpbk9ubHk7Ci0g
ICAgYm9vbCBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludDsKIAogICAgIFJlZlB0cjxDU1NG
b250U2VsZWN0b3I+IG1fZm9udFNlbGVjdG9yOwogICAgIFZlY3RvcjxPd25QdHI8TWVkaWFRdWVy
eVJlc3VsdD4gPiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHM7CkBAIC01MzIs
MjMgKzU4NiwxMiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxWaWV3cG9ydFN0eWxlUmVzb2x2ZXI+
IG1fdmlld3BvcnRTdHlsZVJlc29sdmVyOwogI2VuZGlmCiAKLSAgICBib29sIG1fYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlOwotICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlOwogICAgIGNvbnN0IFN0eWxlQnVpbGRlciYgbV9zdHlsZUJ1aWxkZXI7CiAgICAgCiAg
ICAgSGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+IG1fc3R5bGVSdWxl
VG9DU1NPTVdyYXBwZXJNYXA7CiAgICAgSGFzaFNldDxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiBt
X3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQ7CiAKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0g
ICAgYm9vbCBtX2hhc1BlbmRpbmdTaGFkZXJzOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpICYmIEVOQUJMRShTVkcpCi0gICAgSGFzaE1hcDxGaWx0ZXJPcGVyYXRpb24qLCBSZWZQ
dHI8V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZT4gPiBtX3BlbmRpbmdTVkdEb2N1bWVudHM7Ci0j
ZW5kaWYKLQogICAgIE93blB0cjxTdHlsZVNjb3BlUmVzb2x2ZXI+IG1fc2NvcGVSZXNvbHZlcjsK
LSAgICBDU1NUb1N0eWxlTWFwIG1fc3R5bGVNYXA7CiAKICAgICBmcmllbmQgY2xhc3MgU3R5bGVC
dWlsZGVyOwogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgTWF0Y2hlZFByb3BlcnRp
ZXMmLCBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKaW5kZXggNzIwY2E3
M2JjZWM5YzNlZGIxNjljMmY0N2I2ZjhjMjY4NzU5OTkyMy4uZDY2ZDM2YTczN2MyNDdhMDYyYTEy
NDU3Zjk0YmI5OTY1YzQzNjZiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0yMDA5LDE4ICsyMDA5LDcg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoY29uc3QgU3RyaW5nJiBu
ZXdGb250KQogCiAgICAgLy8gTm93IG1hcCB0aGUgZm9udCBwcm9wZXJ0eSBsb25naGFuZHMgaW50
byB0aGUgc3R5bGUuCiAgICAgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciA9IGNhbnZhcygp
LT5zdHlsZVJlc29sdmVyKCk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvU3R5
bGUoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpLmdldCgpLCBuZXdTdHlsZS5nZXQoKSk7Ci0gICAgc3R5
bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFN0
eWxlLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHls
ZSkuZ2V0KCkpOwotICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHls
ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50KS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBw
bHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFdlaWdodCwgcGFyc2VkU3R5
bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0KS5nZXQoKSk7Ci0K
LSAgICAvLyBBcyBkZXNjcmliZWQgaW4gQlVHNjYyOTEsIHNldHRpbmcgZm9udC1zaXplIGFuZCBs
aW5lLWhlaWdodCBvbiBhIGZvbnQgbWF5IGVudGFpbCBhIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21w
dXRlTGVuZ3RoRG91YmxlIGNhbGwsCi0gICAgLy8gd2hpY2ggYXNzdW1lcyB0aGUgZm9udE1ldHJp
Y3MgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIGFmZmVjdGVkIGZvbnQsIG90aGVyd2lzZSBhIGNyYXNo
IG9jY3VycyAoc2VlIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0Lzk2MTIyKS4KLSAg
ICAvLyBUaGUgdXBkYXRlRm9udCgpIGNhbGxzIGJlbG93IHVwZGF0ZSB0aGUgZm9udE1ldHJpY3Mg
YW5kIGVuc3VyZSB0aGUgcHJvcGVyIHNldHRpbmcgb2YgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdo
dC4KLSAgICBzdHlsZVJlc29sdmVyLT51cGRhdGVGb250KCk7Ci0gICAgc3R5bGVSZXNvbHZlci0+
YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFNpemUsIHBhcnNlZFN0
eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpLmdldCgpKTsKLSAg
ICBzdHlsZVJlc29sdmVyLT51cGRhdGVGb250KCk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQ
cm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VkU3R5bGUt
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQoKSk7CisgICAg
c3R5bGVSZXNvbHZlci0+YXBwbHlGb250UHJvcGVydHlUb1N0eWxlKG5ld1N0eWxlLmdldCgpLCBw
YXJzZWRTdHlsZS5nZXQoKSk7CiAKICAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX2ZvbnQgPSBuZXdT
dHlsZS0+Zm9udCgpOwogICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fZm9udC51cGRhdGUoc3R5bGVS
ZXNvbHZlci0+Zm9udFNlbGVjdG9yKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185416</attachid>
            <date>2013-01-30 00:45:02 -0800</date>
            <delta_ts>2013-01-30 01:15:10 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-96421-20130130174147.patch</filename>
            <type>text/plain</type>
            <size>139847</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxMTkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODliOGIwMWYzZTk2NzA1
MTVhYjI1NzU0NjQ4ZmY5NjM5MmEzMWU4ZC4uY2NjZGQwNWExMzY2M2FjZjUxY2Y2YjhjZWIxZTlh
ZTk1OTQ4NjBlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDEzLTAxLTMwICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBTcGxpdCBwZXItcmVz
b2x2ZSBsb2dpYyBvdXQgZnJvbSBTdHlsZVJlc29sdmVyLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY0MjEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCBjbGFzcyBTdHlsZVJlc29sdmVy
OjpTdGF0ZSBhbmQgYWRkZWQgbV9zdGF0ZSB0bworICAgICAgICBTdHlsZVJlc29sdmVyLiBBbGwg
bWVtYmVyIHZhcmlhYmxlcyB1c2VkIGZvciBwZXItcmVzb2x2ZSBsb2dpYyBhcmUKKyAgICAgICAg
bW92ZWQgaW50byB0aGUgc3RhdGUgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNh
dXNlIGp1c3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBjc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5
KToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24p
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hl
ZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0
aG9yUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5n
Q2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpt
YXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNo
VXNlclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxl
c0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRS
dWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRGb3JTdHlsZVJlc29sdmUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVT
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhD
b250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRh
dGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjphZGp1c3RSZW5kZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojp1cGRhdGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlQm9y
ZGVyQW5kQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1
ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpydWxlTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1Jl
Z2lvblNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0JyZWFkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlR3JpZFRyYWNrTWluTWF4KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRU
cmFja0dyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0xpc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTVkdEb2N1bWVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFk
ZXJGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRp
bmdTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9t
RmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6bG9hZFBlbmRpbmdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojpsb2FkUGVuZGluZ0ltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpy
ZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnJvb3RFbGVtZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250RGVzY3Jp
cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Wm9vbSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRFZmZlY3RpdmVab29tKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpoYXNQYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmFkZE1hdGNoZWRSdWxlKToKKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAg
ICAoU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OlN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlKToKKyAgICAgICAgQWRkZWQgIm1fc3RhdGUuIiB0byBhY2Nlc3Mg
bWVtYmVyIHZhcmlhYmxlcyB1c2VkIGZvciBwZXItcmVzb2x2ZSBsb2dpYy4KKwogMjAxMy0wMS0y
OSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBEb24n
dCB1cGRhdGVUaWxlQ292ZXJhZ2VNYXAoKSBmcm9tIHNldFNjcm9sbGluZ01vZGVJbmRpY2F0aW9u
IGlmIHdlIGRvbid0IG5lZWQgdG8uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZH
Q1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxl
Y3Rvci5jcHAKaW5kZXggNjE0NWJiMWYxNjI1YjhmZTRkMTY3NjA3YmJiYThiZmQ5YTFiMDExOS4u
ODljODJhOTFhNzYxZjhkNTQzNTU1ZWVkZDEzNzlkZDI3MDg5YzM0YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtNDksNyArNDksNyBAQAogI2RlZmlu
ZSBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJbmhlcml0KSBcCiB7IFwKLSAg
ICBzdmdzdHlsZS0+c2V0IyNQcm9wKG1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnByb3AoKSk7
IFwKKyAgICBzdmdzdHlsZS0+c2V0IyNQcm9wKHN0YXRlLm1fcGFyZW50U3R5bGUtPnN2Z1N0eWxl
KCktPnByb3AoKSk7IFwKICAgICByZXR1cm47IFwKIH0KIApAQCAtMTA5LDEwICsxMDksMTEgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAg
ICAgcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVl
KTsKIAotICAgIFNWR1JlbmRlclN0eWxlKiBzdmdzdHlsZSA9IG1fc3R5bGUtPmFjY2Vzc1NWR1N0
eWxlKCk7CisgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKyAgICBTVkdSZW5kZXJT
dHlsZSogc3Znc3R5bGUgPSBzdGF0ZS5tX3N0eWxlLT5hY2Nlc3NTVkdTdHlsZSgpOwogCi0gICAg
Ym9vbCBpc0luaGVyaXQgPSBtX3BhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUo
KTsKLSAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICghbV9w
YXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpOworICAgIGJvb2wgaXNJbmhl
cml0ID0gc3RhdGUubV9wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7Cisg
ICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAoIXN0YXRlLm1f
cGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKIAogICAgIC8vIFdoYXQg
Zm9sbG93cyBpcyBhIGxpc3QgdGhhdCBtYXBzIHRoZSBDU1MgcHJvcGVydGllcyBpbnRvIHRoZWly
CiAgICAgLy8gY29ycmVzcG9uZGluZyBmcm9udC1lbmQgUmVuZGVyU3R5bGUgdmFsdWVzLiBTaG9y
dGhhbmRzKGUuZy4gYm9yZGVyLApAQCAtMjI5LDcgKzIzMCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGaWxsOgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAo
aXNJbmhlcml0KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1Bh
cmVudFN0eWxlID0gbV9wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBj
b25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBzdGF0ZS5tX3BhcmVudFN0eWxl
LT5zdmdTdHlsZSgpOwogICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3Zn
UGFyZW50U3R5bGUtPmZpbGxQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludENv
bG9yKCksIHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVn
dWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMjM5LDE0ICsyNDAsMTQgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdQ
YWludCgpKSB7CiAgICAgICAgICAgICAgICAgU1ZHUGFpbnQqIHN2Z1BhaW50ID0gc3RhdGljX2Nh
c3Q8U1ZHUGFpbnQqPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQ
YWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3Zn
UGFpbnQsIG1fc3R5bGUtPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAg
ICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgp
LCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5tX3N0eWxlLT5jb2xv
cigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2U6CiAg
ICAgICAgIHsKICAgICAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgICAgICBj
b25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBtX3BhcmVudFN0eWxlLT5zdmdT
dHlsZSgpOworICAgICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQYXJlbnRT
dHlsZSA9IHN0YXRlLm1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCk7CiAgICAgICAgICAgICAgICAg
c3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludFR5cGUo
KSwgc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50Q29sb3IoKSwgc3ZnUGFyZW50U3R5bGUtPnN0
cm9rZVBhaW50VXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KQEAgLTI1Niw3ICsyNTcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZH
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR1BhaW50KCkpIHsKICAgICAgICAgICAgICAg
ICBTVkdQYWludCogc3ZnUGFpbnQgPSBzdGF0aWNfY2FzdDxTVkdQYWludCo+KHZhbHVlKTsKLSAg
ICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlw
ZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBtX3N0eWxlLT5jb2xvcigp
KSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+
c2V0U3Ryb2tlUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNT
U1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5tX3N0eWxlLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgp
LCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkBAIC0zNjMsNyArMzY0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBl
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmlt
aXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dE1hcmtlclN0YXJ0UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJG
cm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Zn
c3R5bGUtPnNldE1hcmtlclN0YXJ0UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElk
ZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLm1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1h
cmtlck1pZDoKQEAgLTM3Nyw3ICszNzgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZH
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAg
aWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAg
cyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdz
dHlsZS0+c2V0TWFya2VyTWlkUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50
aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAg
ICAgc3Znc3R5bGUtPnNldE1hcmtlck1pZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21l
bnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5tX2VsZW1lbnQtPmRvY3VtZW50KCkp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlNYXJrZXJFbmQ6CkBAIC0zOTEsNyArMzkyLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
ICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAg
ICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAg
c3Znc3R5bGUtPnNldE1hcmtlckVuZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJ
ZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAg
ICAgICAgIHN2Z3N0eWxlLT5zZXRNYXJrZXJFbmRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZy
YWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUubV9lbGVtZW50LT5kb2N1bWVu
dCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1By
b3BlcnR5U3Ryb2tlTGluZWNhcDoKQEAgLTQyOCw3ICs0MjksNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAg
ICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAg
ICAgICAgICBzdmdzdHlsZS0+c2V0RmlsdGVyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFn
bWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOwor
ICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbHRlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6
ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5tX2VsZW1lbnQtPmRvY3Vt
ZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlNYXNrOgpAQCAtNDQyLDcgKzQ0Myw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAg
ICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAg
ICAgICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAg
IHN2Z3N0eWxlLT5zZXRNYXNrZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRl
bnRpZmllckZyb21JUklTdHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAg
ICAgICBzdmdzdHlsZS0+c2V0TWFza2VyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVu
dElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLm1fZWxlbWVudC0+ZG9jdW1lbnQoKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUNsaXBQYXRoOgpAQCAtNDU2LDcgKzQ1Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlT
VkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAg
ICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAg
ICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2
Z3N0eWxlLT5zZXRDbGlwcGVyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50
aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAg
ICAgc3Znc3R5bGUtPnNldENsaXBwZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50
SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUubV9lbGVtZW50LT5kb2N1bWVudCgpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
VGV4dEFuY2hvcjoKQEAgLTQ3NywxNCArNDc4LDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHN0b3BDb2xvciwgU3Rv
cENvbG9yKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAg
ICAgICAgIHN2Z3N0eWxlLT5zZXRTdG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShz
dGF0aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgbV9zdHlsZS0+Y29sb3IoKSkpOworICAgICAg
ICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1
ZShzdGF0aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgc3RhdGUubV9zdHlsZS0+Y29sb3IoKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICBjYXNlIENTU1Byb3BlcnR5
TGlnaHRpbmdDb2xvcjoKICAgICAgICAgewogICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5E
X0lOSVRJQUwobGlnaHRpbmdDb2xvciwgTGlnaHRpbmdDb2xvcik7CiAgICAgICAgICAgICBpZiAo
dmFsdWUtPmlzU1ZHQ29sb3IoKSkKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TGlnaHRp
bmdDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4o
dmFsdWUpLCBtX3N0eWxlLT5jb2xvcigpKSk7CisgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dExpZ2h0aW5nQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2FzdDxTVkdD
b2xvcio+KHZhbHVlKSwgc3RhdGUubV9zdHlsZS0+Y29sb3IoKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZsb29kT3BhY2l0eToKQEAg
LTUwOSw3ICs1MTAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBI
QU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChmbG9vZENvbG9yLCBGbG9vZENvbG9yKTsKICAgICAg
ICAgICAgIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAgICAgICAgIHN2Z3N0eWxl
LT5zZXRGbG9vZENvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZH
Q29sb3IqPih2YWx1ZSksIG1fc3R5bGUtPmNvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBzdmdz
dHlsZS0+c2V0Rmxvb2RDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0
PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5tX3N0eWxlLT5jb2xvcigpKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5R2x5cGhPcmllbnRh
dGlvbkhvcml6b250YWw6CkBAIC01NDksNyArNTUwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U3ZnU2hhZG93OiB7
CiAgICAgICAgICAgICBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgICAgIHJldHVybiBzdmdz
dHlsZS0+c2V0U2hhZG93KGFkb3B0UHRyKG1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRv
dygpID8gbmV3IFNoYWRvd0RhdGEoKm1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRvdygp
KSA6IDApKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3Znc3R5bGUtPnNldFNoYWRvdyhhZG9w
dFB0cihzdGF0ZS5tX3BhcmVudFN0eWxlLT5zdmdTdHlsZSgpLT5zaGFkb3coKSA/IG5ldyBTaGFk
b3dEYXRhKCpzdGF0ZS5tX3BhcmVudFN0eWxlLT5zdmdTdHlsZSgpLT5zaGFkb3coKSkgOiAwKSk7
CiAgICAgICAgICAgICBpZiAoaXNJbml0aWFsIHx8IHByaW1pdGl2ZVZhbHVlKSAvLyBpbml0aWFs
IHwgbm9uZQogICAgICAgICAgICAgICAgIHJldHVybiBzdmdzdHlsZS0+c2V0U2hhZG93KG51bGxw
dHIpOwogCkBAIC01NjQsOSArNTY1LDkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1By
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlm
ICghZmlyc3RWYWx1ZS0+aXNTaGFkb3dWYWx1ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIFNoYWRvd1ZhbHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8U2hhZG93VmFsdWUq
PihmaXJzdFZhbHVlKTsKLSAgICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uKGl0ZW0tPngtPmNv
bXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCks
IG1fcm9vdEVsZW1lbnRTdHlsZSkpOwotICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVy
ID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRT
dHlsZSkgOiAwOworICAgICAgICAgICAgSW50UG9pbnQgbG9jYXRpb24oaXRlbS0+eC0+Y29tcHV0
ZUxlbmd0aDxpbnQ+KHN0YXRlLm1fc3R5bGUuZ2V0KCksIHN0YXRlLm1fcm9vdEVsZW1lbnRTdHls
ZSksCisgICAgICAgICAgICAgICAgaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLm1f
c3R5bGUuZ2V0KCksIHN0YXRlLm1fcm9vdEVsZW1lbnRTdHlsZSkpOworICAgICAgICAgICAgaW50
IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRl
Lm1fc3R5bGUuZ2V0KCksIHN0YXRlLm1fcm9vdEVsZW1lbnRTdHlsZSkgOiAwOwogICAgICAgICAg
ICAgQ29sb3IgY29sb3I7CiAgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCiAgICAgICAgICAg
ICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggOTU2Yjk4NGI3MmE1NDE5NjVh
NWUzOWI3NzlmNDg1ZmY3NDM2MDI0Yi4uYWE5YTg0YzcxZmU1ZjYyYzc3NzdkZDQ0YjNiMTQ3YjIw
NzM1MTcwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtNDQsNyArNDQs
NiBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKICNpbmNsdWRlICJD
U1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTUmVmbGVjdFZhbHVlLmgiCi0jaW5jbHVk
ZSAiQ1NTUnVsZUxpc3QuaCIKICNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNT
U1NlbGVjdG9yTGlzdC5oIgogI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgpAQCAtMjAwLDE0ICsx
OTksMTQgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogI2RlZmluZSBIQU5ETEVfSU5I
RVJJVChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJbmhlcml0KSB7IFwKLSAgICBtX3N0eWxlLT5zZXQj
I1Byb3AobV9wYXJlbnRTdHlsZS0+cHJvcCgpKTsgXAorICAgIG1fc3RhdGUubV9zdHlsZS0+c2V0
IyNQcm9wKG1fc3RhdGUubV9wYXJlbnRTdHlsZS0+cHJvcCgpKTsgXAogICAgIHJldHVybjsgXAog
fQogCiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKIEhB
TkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlmIChpc0luaXRpYWwpIHsgXAotICAgIG1fc3R5
bGUtPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMjUHJvcCgpKTsgXAorICAgIG1fc3Rh
dGUubV9zdHlsZS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBcCiAg
ICAgcmV0dXJuOyBcCiB9CiAKQEAgLTI2OSwzNCArMjY4LDE2IEBAIHN0YXRpYyBTdHlsZVByb3Bl
cnR5U2V0KiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkKIAogCiBTdHlsZVJlc29sdmVyOjpTdHls
ZVJlc29sdmVyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHls
ZXMpCi0gICAgOiBtX2hhc1VBQXBwZWFyYW5jZShmYWxzZSkKLSAgICAsIG1fYmFja2dyb3VuZERh
dGEoQmFja2dyb3VuZEZpbGxMYXllcikKLSAgICAsIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFk
ZGl0aW9uc1NpbmNlTGFzdFN3ZWVwKDApCisgICAgOiBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVB
ZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCgwKQogICAgICwgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hl
U3dlZXBUaW1lcih0aGlzLCAmU3R5bGVSZXNvbHZlcjo6c3dlZXBNYXRjaGVkUHJvcGVydGllc0Nh
Y2hlKQogICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fc2VsZWN0b3JDaGVja2Vy
KGRvY3VtZW50KQotICAgICwgbV9wYXJlbnRTdHlsZSgwKQotICAgICwgbV9yb290RWxlbWVudFN0
eWxlKDApCi0gICAgLCBtX2VsZW1lbnQoMCkKLSAgICAsIG1fc3R5bGVkRWxlbWVudCgwKQotICAg
ICwgbV9yZWdpb25Gb3JTdHlsaW5nKDApCi0gICAgLCBtX2VsZW1lbnRMaW5rU3RhdGUoTm90SW5z
aWRlTGluaykKLSAgICAsIG1fcGFyZW50Tm9kZSgwKQotICAgICwgbV9saW5lSGVpZ2h0VmFsdWUo
MCkKLSAgICAsIG1fZm9udERpcnR5KGZhbHNlKQogICAgICwgbV9tYXRjaEF1dGhvckFuZFVzZXJT
dHlsZXMobWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICwgbV9zYW1lT3JpZ2luT25seShm
YWxzZSkKLSAgICAsIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KGZhbHNlKQogICAgICwg
bV9mb250U2VsZWN0b3IoQ1NTRm9udFNlbGVjdG9yOjpjcmVhdGUoZG9jdW1lbnQpKQogI2lmIEVO
QUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCiAgICAgLCBtX3ZpZXdwb3J0U3R5bGVSZXNvbHZl
cihWaWV3cG9ydFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZShkb2N1bWVudCkpCiAjZW5kaWYKLSAgICAs
IG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpCi0gICAgLCBtX2FwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpCiAgICAgLCBtX3N0eWxlQnVpbGRlcihTdHlsZUJ1
aWxkZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpKQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAg
ICAsIG1faGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpCi0jZW5kaWYKICAgICAsIG1fc3R5bGVNYXAo
dGhpcykKIHsKICAgICBFbGVtZW50KiByb290ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgp
OwpAQCAtNjYwLDIzICs2NDEsMjYgQEAgYm9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6bV9tYXRj
aGluZ1VBUnVsZXMgPSBmYWxzZTsKIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5n
UnVsZXMoY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJh
bmdlKQogewogICAgIEFTU0VSVChtYXRjaFJlcXVlc3QucnVsZVNldCk7Ci0gICAgQVNTRVJUKG1f
ZWxlbWVudCk7CisgICAgQVNTRVJUKG1fc3RhdGUubV9lbGVtZW50KTsKIAotICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgcHNldWRvSWQgPSBtX2VsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCk7CisgICAg
U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGUubV9l
bGVtZW50OworICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBzdGF0ZS5tX3N0eWxl
ZEVsZW1lbnQ7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwc2V1ZG9JZCA9IGVsZW1lbnQtPnNo
YWRvd1BzZXVkb0lkKCk7CiAgICAgaWYgKCFwc2V1ZG9JZC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
QVNTRVJUKG1fc3R5bGVkRWxlbWVudCk7CisgICAgICAgIEFTU0VSVChzdHlsZWRFbGVtZW50KTsK
ICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0
LT5zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMocHNldWRvSWQuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0
LCBydWxlUmFuZ2UpOwogICAgIH0KIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBpZiAo
bV9lbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiB0b1dlYlZUVEVsZW1lbnQobV9lbGVtZW50
KS0+d2ViVlRUTm9kZVR5cGUoKSkKKyAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkg
JiYgdG9XZWJWVFRFbGVtZW50KGVsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpKQogICAgICAgICBj
b2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmN1ZVBzZXVk
b1J1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKICNlbmRpZgogICAgIC8vIENoZWNr
IHdoZXRoZXIgb3RoZXIgdHlwZXMgb2YgcnVsZXMgYXJlIGFwcGxpY2FibGUgaW4gdGhlIGN1cnJl
bnQgdHJlZSBzY29wZS4gQ3JpdGVyaWEgZm9yIHRoaXM6CiAgICAgLy8gYSkgaXQncyBhIFVBIHJ1
bGUKICAgICAvLyBiKSB0aGUgdHJlZSBzY29wZSBhbGxvd3MgYXV0aG9yIHJ1bGVzCiAgICAgLy8g
YykgdGhlIHJ1bGVzIGNvbWVzIGZyb20gYSBzY29wZWQgc3R5bGUgc2hlZXQgd2l0aGluIHRoZSBz
YW1lIHRyZWUgc2NvcGUKLSAgICBUcmVlU2NvcGUqIHRyZWVTY29wZSA9IG1fZWxlbWVudC0+dHJl
ZVNjb3BlKCk7CisgICAgVHJlZVNjb3BlKiB0cmVlU2NvcGUgPSBlbGVtZW50LT50cmVlU2NvcGUo
KTsKICAgICBpZiAoIU1hdGNoaW5nVUFSdWxlc1Njb3BlOjppc01hdGNoaW5nVUFSdWxlcygpCiAg
ICAgICAgICYmICF0cmVlU2NvcGUtPmFwcGx5QXV0aG9yU3R5bGVzKCkKICAgICAgICAgJiYgKCFt
YXRjaFJlcXVlc3Quc2NvcGUgfHwgbWF0Y2hSZXF1ZXN0LnNjb3BlLT50cmVlU2NvcGUoKSAhPSB0
cmVlU2NvcGUpKQpAQCAtNjg0LDMwICs2NjgsMzAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xs
ZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVIK
IAogICAgIC8vIFdlIG5lZWQgdG8gY29sbGVjdCB0aGUgcnVsZXMgZm9yIGlkLCBjbGFzcywgdGFn
LCBhbmQgZXZlcnl0aGluZyBlbHNlIGludG8gYSBidWZmZXIgYW5kCiAgICAgLy8gdGhlbiBzb3J0
IHRoZSBidWZmZXIuCi0gICAgaWYgKG1fZWxlbWVudC0+aGFzSUQoKSkKLSAgICAgICAgY29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5pZFJ1bGVzKG1fZWxl
bWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVS
YW5nZSk7Ci0gICAgaWYgKG1fc3R5bGVkRWxlbWVudCAmJiBtX3N0eWxlZEVsZW1lbnQtPmhhc0Ns
YXNzKCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0eWxlZEVsZW1lbnQt
PmNsYXNzTmFtZXMoKS5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+Y2xhc3NSdWxlcyhtX3N0eWxlZEVsZW1l
bnQtPmNsYXNzTmFtZXMoKVtpXS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Cisg
ICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkpCisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9y
TGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+aWRSdWxlcyhlbGVtZW50LT5pZEZvclN0eWxlUmVz
b2x1dGlvbigpLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBpZiAoc3R5
bGVkRWxlbWVudCAmJiBzdHlsZWRFbGVtZW50LT5oYXNDbGFzcygpKSB7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc3R5bGVkRWxlbWVudC0+Y2xhc3NOYW1lcygpLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5y
dWxlU2V0LT5jbGFzc1J1bGVzKHN0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKVtpXS5pbXBsKCkp
LCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CiAgICAgfQogCi0gICAgaWYgKG1fZWxlbWVudC0+
aXNMaW5rKCkpCisgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpKQogICAgICAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmxpbmtQc2V1ZG9DbGFzc1J1
bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICBpZiAobV9zZWxlY3RvckNoZWNr
ZXIubWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MobV9lbGVtZW50KSkKKyAgICBpZiAobV9zZWxlY3Rv
ckNoZWNrZXIubWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MoZWxlbWVudCkpCiAgICAgICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+Zm9jdXNQc2V1ZG9D
bGFzc1J1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPnRhZ1J1bGVzKG1fZWxlbWVudC0+
bG9jYWxOYW1lKCkuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+dGFnUnVsZXMoZWxl
bWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogICAg
IGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+dW5pdmVy
c2FsUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogfQogCiB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKGNvbnN0IE1hdGNoUmVxdWVzdCYg
bWF0Y2hSZXF1ZXN0LCBSdWxlUmFuZ2UmIHJ1bGVSYW5nZSkKIHsKLSAgICBpZiAoIW1fcmVnaW9u
Rm9yU3R5bGluZykKKyAgICBpZiAoIW1fc3RhdGUubV9yZWdpb25Gb3JTdHlsaW5nKQogICAgICAg
ICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBzaXplID0gbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPm1f
cmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNl
bGVjdG9yID0gbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNl
dHMuYXQoaSkuc2VsZWN0b3I7Ci0gICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKHJlZ2lv
blNlbGVjdG9yLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9yZWdpb25Gb3JTdHlsaW5nLT5ub2Rl
KCkpKSkgeworICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihyZWdpb25TZWxlY3Rvciwg
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fc3RhdGUubV9yZWdpb25Gb3JTdHlsaW5nLT5ub2RlKCkp
KSkgewogICAgICAgICAgICAgUnVsZVNldCogcmVnaW9uUnVsZXMgPSBtYXRjaFJlcXVlc3QucnVs
ZVNldC0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5ydWxlU2V0LmdldCgpOwog
ICAgICAgICAgICAgQVNTRVJUKHJlZ2lvblJ1bGVzKTsKICAgICAgICAgICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzKE1hdGNoUmVxdWVzdChyZWdpb25SdWxlcywgbWF0Y2hSZXF1ZXN0LmluY2x1ZGVF
bXB0eVJ1bGVzLCBtYXRjaFJlcXVlc3Quc2NvcGUpLCBydWxlUmFuZ2UpOwpAQCAtNzE3LDI0ICs3
MDEsMjUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lv
bihjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWUKIAogdm9pZCBTdHlsZVJlc29sdmVyOjpz
b3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKIHsKLSAgICBp
ZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7
CisgICAgaWYgKHN0YXRlLm1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgc29ydE1hdGNoZWRSdWxlcygpOwogCiAgICAgaWYgKG1fc2VsZWN0b3JDaGVja2Vy
Lm1vZGUoKSA9PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcykgewotICAgICAgICBp
ZiAoIW1fcnVsZUxpc3QpCi0gICAgICAgICAgICBtX3J1bGVMaXN0ID0gU3RhdGljQ1NTUnVsZUxp
c3Q6OmNyZWF0ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVk
UnVsZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX3J1bGVMaXN0LT5ydWxlcygpLmFwcGVu
ZChtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5jcmVhdGVDU1NPTVdyYXBwZXIoKSk7CisgICAg
ICAgIGlmICghc3RhdGUubV9ydWxlTGlzdCkKKyAgICAgICAgICAgIHN0YXRlLm1fcnVsZUxpc3Qg
PSBTdGF0aWNDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzdGF0ZS5tX21hdGNoZWRSdWxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHN0
YXRlLm1fcnVsZUxpc3QtPnJ1bGVzKCkuYXBwZW5kKHN0YXRlLm1fbWF0Y2hlZFJ1bGVzW2ldLT5y
dWxlKCktPmNyZWF0ZUNTU09NV3JhcHBlcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0byBvdXIg
bGlzdCBvZiBkZWNsYXJhdGlvbnMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0
Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChtX3N0eWxlICYmIG1fbWF0Y2hl
ZFJ1bGVzW2ldLT5jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAgICAgICAg
ICAgIG1fc3R5bGUtPnNldFVuaXF1ZSgpOwotICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhy
ZXN1bHQsIG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPnByb3BlcnRpZXMoKSwgbV9tYXRjaGVk
UnVsZXNbaV0tPnJ1bGUoKSwgbV9tYXRjaGVkUnVsZXNbaV0tPmxpbmtNYXRjaFR5cGUoKSwgbV9t
YXRjaGVkUnVsZXNbaV0tPnByb3BlcnR5V2hpdGVsaXN0VHlwZSgpKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc3RhdGUubV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgaWYgKHN0YXRlLm1fc3R5bGUgJiYgc3RhdGUubV9tYXRjaGVkUnVsZXNbaV0tPmNvbnRhaW5z
VW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQorICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+
c2V0VW5pcXVlKCk7CisgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGUu
bV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+cHJvcGVydGllcygpLCBzdGF0ZS5tX21hdGNoZWRS
dWxlc1tpXS0+cnVsZSgpLCBzdGF0ZS5tX21hdGNoZWRSdWxlc1tpXS0+bGlua01hdGNoVHlwZSgp
LCBzdGF0ZS5tX21hdGNoZWRSdWxlc1tpXS0+cHJvcGVydHlXaGl0ZWxpc3RUeXBlKCkpOwogICAg
IH0KIH0KIApAQCAtNzQ1LDEyICs3MzAsMTIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNj
b3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHQKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gTWF0Y2ggc2NvcGVkIGF1dGhvciBydWxlcyBieSB0cmF2
ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVudCBzdGFjayAocmVidWlsZCBpdCBpZiBpdCBnb3QgaW5j
b25zaXN0ZW50KS4KLSAgICBpZiAobV9zY29wZVJlc29sdmVyLT5oYXNTY29wZWRTdHlsZXMoKSAm
JiBtX3Njb3BlUmVzb2x2ZXItPmVuc3VyZVN0YWNrQ29uc2lzdGVuY3kobV9lbGVtZW50KSkgewot
ICAgICAgICBib29sIGFwcGx5QXV0aG9yU3R5bGVzID0gbV9lbGVtZW50LT50cmVlU2NvcGUoKS0+
YXBwbHlBdXRob3JTdHlsZXMoKTsKKyAgICBpZiAobV9zY29wZVJlc29sdmVyLT5oYXNTY29wZWRT
dHlsZXMoKSAmJiBtX3Njb3BlUmVzb2x2ZXItPmVuc3VyZVN0YWNrQ29uc2lzdGVuY3kobV9zdGF0
ZS5tX2VsZW1lbnQpKSB7CisgICAgICAgIGJvb2wgYXBwbHlBdXRob3JTdHlsZXMgPSBtX3N0YXRl
Lm1fZWxlbWVudC0+dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9yU3R5bGVzKCk7CiAgICAgICAgIGJv
b2wgZG9jdW1lbnRTY29wZSA9IHRydWU7CiAgICAgICAgIHVuc2lnbmVkIHNjb3BlU2l6ZSA9IG1f
c2NvcGVSZXNvbHZlci0+c3RhY2tTaXplKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzY29wZVNpemU7ICsraSkgewotICAgICAgICAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIo
KTsKKyAgICAgICAgICAgIG1fc3RhdGUubV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKICAgICAgICAg
ICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRp
ZXMuc2l6ZSgpIC0gMTsKIAogICAgICAgICAgICAgY29uc3QgU3R5bGVTY29wZVJlc29sdmVyOjpT
dGFja0ZyYW1lJiBmcmFtZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tGcmFtZUF0KGkpOwpAQCAt
NzgxLDcgKzc2Niw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxl
cyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0CiBpbmxpbmUgYm9vbCBTdHls
ZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCkKIHsKICNp
ZiBFTkFCTEUoU0hBRE9XX0RPTSkKLSAgICByZXR1cm4gbV9zY29wZVJlc29sdmVyICYmIG1fc2Nv
cGVSZXNvbHZlci0+c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhtX2VsZW1l
bnQpOworICAgIHJldHVybiBtX3Njb3BlUmVzb2x2ZXIgJiYgbV9zY29wZVJlc29sdmVyLT5zdHls
ZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKG1fc3RhdGUubV9lbGVtZW50KTsKICNl
bHNlCiAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCkBAIC03OTIsMTcgKzc3NywxNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wg
aW5jbHVkZUVtcHR5UnVsZXMpCiAjaWYgRU5BQkxFKFNIQURPV19ET00pCiAgICAgQVNTRVJUKG1f
c2NvcGVSZXNvbHZlcik7CiAKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIG1fc3Rh
dGUubV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JS
dWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKICAgICBWZWN0b3I8
UnVsZVNldCo+IG1hdGNoZWRSdWxlczsKLSAgICBtX3Njb3BlUmVzb2x2ZXItPm1hdGNoSG9zdFJ1
bGVzKG1fZWxlbWVudCwgbWF0Y2hlZFJ1bGVzKTsKKyAgICBtX3Njb3BlUmVzb2x2ZXItPm1hdGNo
SG9zdFJ1bGVzKG1fc3RhdGUubV9lbGVtZW50LCBtYXRjaGVkUnVsZXMpOwogICAgIGlmIChtYXRj
aGVkUnVsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpID4gMDsgLS1pKSB7CiAgICAgICAgIFJ1bGVSYW5n
ZSBydWxlUmFuZ2UgPSByZXN1bHQucmFuZ2VzLmF1dGhvclJ1bGVSYW5nZSgpOwotICAgICAgICBj
b2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QobWF0Y2hlZFJ1bGVzLmF0KGktMSksIGlu
Y2x1ZGVFbXB0eVJ1bGVzLCBtX2VsZW1lbnQpLCBydWxlUmFuZ2UpOworICAgICAgICBjb2xsZWN0
TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QobWF0Y2hlZFJ1bGVzLmF0KGktMSksIGluY2x1ZGVF
bXB0eVJ1bGVzLCBtX3N0YXRlLm1fZWxlbWVudCksIHJ1bGVSYW5nZSk7CiAgICAgfQogICAgIHNv
cnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOwogI2Vsc2UKQEAgLTgxMywxMCArNzk4
LDEwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMoTWF0Y2hSZXN1bHQmIHJl
c3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIAogdm9pZCBTdHlsZVJlc29sdmVyOjptYXRj
aEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMp
CiB7Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICBtX3N0YXRlLm1fbWF0Y2hlZFJ1
bGVzLmNsZWFyKCk7CiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3VsdC5t
YXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogCi0gICAgaWYgKCFtX2VsZW1lbnQpCisgICAg
aWYgKCFtX3N0YXRlLm1fZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gTWF0Y2gg
Z2xvYmFsIGF1dGhvciBydWxlcy4KQEAgLTgzNCw3ICs4MTksNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6Om1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5
UnVsZXMpCiAgICAgaWYgKCFtX3VzZXJTdHlsZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5tX21hdGNoZWRSdWxlcy5jbGVh
cigpOwogCiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUgPSByZXN1bHQubWF0Y2hlZFBy
b3BlcnRpZXMuc2l6ZSgpIC0gMTsKICAgICBNYXRjaFJlcXVlc3QgbWF0Y2hSZXF1ZXN0KG1fdXNl
clN0eWxlLmdldCgpLCBpbmNsdWRlRW1wdHlSdWxlcyk7CkBAIC04NDcsNyArODMyLDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjptYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29s
IGluY2x1ZGVFbXB0eVJ1bGVzKQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhN
YXRjaFJlc3VsdCYgcmVzdWx0LCBSdWxlU2V0KiBydWxlcykKIHsKLSAgICBtX21hdGNoZWRSdWxl
cy5jbGVhcigpOworICAgIG1fc3RhdGUubV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKICAgICAKICAg
ICByZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6
ZSgpIC0gMTsKICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy5VQVJ1bGVS
YW5nZSgpOwpAQCAtODYxLDkgKzg0NiwxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RN
YXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgYwogICAg
IGlmICghcnVsZXMpCiAgICAgICAgIHJldHVybjsKIAorICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3Rh
dGU7CiAgICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBtYXkgZW5kIHVwIGxvb2tpbmcgdXAgc3R5bGUg
Zm9yIHJhbmRvbSBlbGVtZW50cyBpbiB0aGUgbWlkZGxlIG9mIGEgcmVjdXJzaXZlIHRyZWUgcmVz
b2x2ZS4KICAgICAvLyBBbmNlc3RvciBpZGVudGlmaWVyIGZpbHRlciB3b24ndCBiZSB1cC10by1k
YXRlIGluIHRoYXQgY2FzZSBhbmQgd2UgY2FuJ3QgdXNlIHRoZSBmYXN0IHBhdGguCi0gICAgYm9v
bCBjYW5Vc2VGYXN0UmVqZWN0ID0gbV9zZWxlY3RvckZpbHRlci5wYXJlbnRTdGFja0lzQ29uc2lz
dGVudChtX3BhcmVudE5vZGUpOworICAgIGJvb2wgY2FuVXNlRmFzdFJlamVjdCA9IG1fc2VsZWN0
b3JGaWx0ZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQoc3RhdGUubV9wYXJlbnROb2RlKTsKIAog
ICAgIHVuc2lnbmVkIHNpemUgPSBydWxlcy0+c2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKQEAgLTg4MSwxOSArODY3LDE5IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4q
IHJ1bGVzLCBjCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAvLyBGSVhNRTogRXhwb3NpbmcgdGhlIG5vbi1zdGFuZGFyZCBnZXRNYXRjaGVkQ1NT
UnVsZXMgQVBJIHRvIHdlYiBpcyB0aGUgb25seSByZWFzb24gdGhpcyBpcyBuZWVkZWQuCi0gICAg
ICAgICAgICBpZiAobV9zYW1lT3JpZ2luT25seSAmJiAhcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbigpKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUubV9zYW1lT3JpZ2luT25seSAm
JiAhcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSB7CiAgICAgICAgICAgICAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAv
LyBJZiB3ZSdyZSBtYXRjaGluZyBub3JtYWwgcnVsZXMsIHNldCBhIHBzZXVkbyBiaXQgaWYKICAg
ICAgICAgICAgIC8vIHdlIHJlYWxseSBqdXN0IG1hdGNoZWQgYSBwc2V1ZG8tZWxlbWVudC4KLSAg
ICAgICAgICAgIGlmIChtX2R5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgbV9wc2V1ZG9TdHls
ZSA9PSBOT1BTRVVETykgeworICAgICAgICAgICAgaWYgKHN0YXRlLm1fZHluYW1pY1BzZXVkbyAh
PSBOT1BTRVVETyAmJiBzdGF0ZS5tX3BzZXVkb1N0eWxlID09IE5PUFNFVURPKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1vZGUoKSA9PSBTZWxlY3RvckNoZWNrZXI6
OkNvbGxlY3RpbmdSdWxlcykgewogICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChtX2R5
bmFtaWNQc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKLSAgICAgICAgICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0SGFzUHNldWRvU3R5bGUobV9keW5hbWljUHNldWRvKTsKKyAgICAgICAg
ICAgICAgICBpZiAoc3RhdGUubV9keW5hbWljUHNldWRvIDwgRklSU1RfSU5URVJOQUxfUFNFVURP
SUQpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldEhhc1BzZXVkb1N0eWxl
KHN0YXRlLm1fZHluYW1pY1BzZXVkbyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIC8vIFVwZGF0ZSBvdXIgZmlyc3QvbGFzdCBydWxlIGluZGljZXMgaW4gdGhlIG1hdGNo
ZWQgcnVsZXMgYXJyYXkuCiAgICAgICAgICAgICAgICAgKytydWxlUmFuZ2UubGFzdFJ1bGVJbmRl
eDsKQEAgLTkxOSw3ICs5MDUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVJ1bGVzKGNv
bnN0IFJ1bGVEYXRhKiByMSwgY29uc3QgUnVsZURhdGEqIHIyKQogCiB2b2lkIFN0eWxlUmVzb2x2
ZXI6OnNvcnRNYXRjaGVkUnVsZXMoKQogewotICAgIHN0ZDo6c29ydChtX21hdGNoZWRSdWxlcy5i
ZWdpbigpLCBtX21hdGNoZWRSdWxlcy5lbmQoKSwgY29tcGFyZVJ1bGVzKTsKKyAgICBzdGQ6OnNv
cnQobV9zdGF0ZS5tX21hdGNoZWRSdWxlcy5iZWdpbigpLCBtX3N0YXRlLm1fbWF0Y2hlZFJ1bGVz
LmVuZCgpLCBjb21wYXJlUnVsZXMpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxs
UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZXMpCkBA
IC05MjksMTkgKzkxNSwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0
Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZQogICAgIC8vIE5vdyB3
ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVzLgogICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0
eWxlcykKICAgICAgICAgbWF0Y2hVc2VyUnVsZXMocmVzdWx0LCBmYWxzZSk7Ci0gICAgICAgIAor
CiAgICAgLy8gTm93IGNoZWNrIGF1dGhvciBydWxlcywgYmVnaW5uaW5nIGZpcnN0IHdpdGggcHJl
c2VudGF0aW9uYWwgYXR0cmlidXRlcyBtYXBwZWQgZnJvbSBIVE1MLgotICAgIGlmIChtX3N0eWxl
ZEVsZW1lbnQpIHsKLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1f
c3R5bGVkRWxlbWVudC0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CisgICAgaWYgKG1f
c3RhdGUubV9zdHlsZWRFbGVtZW50KSB7CisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRp
ZXMocmVzdWx0LCBtX3N0YXRlLm1fc3R5bGVkRWxlbWVudC0+cHJlc2VudGF0aW9uQXR0cmlidXRl
U3R5bGUoKSk7CiAKICAgICAgICAgLy8gTm93IHdlIGNoZWNrIGFkZGl0aW9uYWwgbWFwcGVkIGRl
Y2xhcmF0aW9ucy4KICAgICAgICAgLy8gVGFibGVzIGFuZCB0YWJsZSBjZWxscyBzaGFyZSBhbiBh
ZGRpdGlvbmFsIG1hcHBlZCBydWxlIHRoYXQgbXVzdCBiZSBhcHBsaWVkCiAgICAgICAgIC8vIGFm
dGVyIGFsbCBhdHRyaWJ1dGVzLCBzaW5jZSB0aGVpciBtYXBwZWQgc3R5bGUgZGVwZW5kcyBvbiB0
aGUgdmFsdWVzIG9mIG11bHRpcGxlIGF0dHJpYnV0ZXMuCi0gICAgICAgIGFkZEVsZW1lbnRTdHls
ZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRp
b25BdHRyaWJ1dGVTdHlsZSgpKTsKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhy
ZXN1bHQsIG1fc3RhdGUubV9zdHlsZWRFbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0
cmlidXRlU3R5bGUoKSk7CiAKLSAgICAgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aXNIVE1MRWxl
bWVudCgpKSB7CisgICAgICAgIGlmIChtX3N0YXRlLm1fc3R5bGVkRWxlbWVudC0+aXNIVE1MRWxl
bWVudCgpKSB7CiAgICAgICAgICAgICBib29sIGlzQXV0bzsKLSAgICAgICAgICAgIFRleHREaXJl
Y3Rpb24gdGV4dERpcmVjdGlvbiA9IHRvSFRNTEVsZW1lbnQobV9zdHlsZWRFbGVtZW50KS0+ZGly
ZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoaXNBdXRvKTsKKyAgICAgICAgICAgIFRl
eHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IHRvSFRNTEVsZW1lbnQobV9zdGF0ZS5tX3N0eWxl
ZEVsZW1lbnQpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOwog
ICAgICAgICAgICAgaWYgKGlzQXV0bykKICAgICAgICAgICAgICAgICBhZGRNYXRjaGVkUHJvcGVy
dGllcyhyZXN1bHQsIHRleHREaXJlY3Rpb24gPT0gTFRSID8gbGVmdFRvUmlnaHREZWNsYXJhdGlv
bigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpKTsKICAgICAgICAgfQpAQCAtOTUyLDE4ICs5
MzgsMTggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiBy
ZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWUKICAgICAgICAgbWF0Y2hBdXRob3JSdWxl
cyhyZXN1bHQsIGZhbHNlKTsKIAogICAgIC8vIE5vdyBjaGVjayBvdXIgaW5saW5lIHN0eWxlIGF0
dHJpYnV0ZS4KLSAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdHlsZWRF
bGVtZW50ICYmIG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSkgeworICAgIGlmIChtX21h
dGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0YXRlLm1fc3R5bGVkRWxlbWVudCAmJiBtX3N0
YXRlLm1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSkgewogICAgICAgICAvLyBJbmxpbmUg
c3R5bGUgaXMgaW1tdXRhYmxlIGFzIGxvbmcgYXMgdGhlcmUgaXMgbm8gQ1NTT00gd3JhcHBlci4K
ICAgICAgICAgLy8gRklYTUU6IE1lZGlhIGNvbnRyb2wgc2hhZG93IHRyZWVzIHNlZW0gdG8gaGF2
ZSBwcm9ibGVtcyB3aXRoIGNhY2hpbmcuCi0gICAgICAgIGJvb2wgaXNJbmxpbmVTdHlsZUNhY2hl
YWJsZSA9ICFtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCktPmlzTXV0YWJsZSgpICYmICFt
X3N0eWxlZEVsZW1lbnQtPmlzSW5TaGFkb3dUcmVlKCk7CisgICAgICAgIGJvb2wgaXNJbmxpbmVT
dHlsZUNhY2hlYWJsZSA9ICFtX3N0YXRlLm1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKS0+
aXNNdXRhYmxlKCkgJiYgIW1fc3RhdGUubV9zdHlsZWRFbGVtZW50LT5pc0luU2hhZG93VHJlZSgp
OwogICAgICAgICAvLyBGSVhNRTogQ29uc3RpZnkuCi0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVBy
b3BlcnRpZXMocmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCksIGlzSW5saW5l
U3R5bGVDYWNoZWFibGUpOworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3Vs
dCwgbV9zdGF0ZS5tX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCksIGlzSW5saW5lU3R5bGVD
YWNoZWFibGUpOwogICAgIH0KIAogI2lmIEVOQUJMRShTVkcpCiAgICAgLy8gTm93IGNoZWNrIFNN
SUwgYW5pbWF0aW9uIG92ZXJyaWRlIHN0eWxlLgotICAgIGlmIChpbmNsdWRlU01JTFByb3BlcnRp
ZXMgJiYgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdHlsZWRFbGVtZW50ICYmIG1f
c3R5bGVkRWxlbWVudC0+aXNTVkdFbGVtZW50KCkpCi0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVBy
b3BlcnRpZXMocmVzdWx0LCBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obV9zdHlsZWRFbGVtZW50
KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCksIGZhbHNlIC8qIGlzQ2FjaGVhYmxlICov
KTsKKyAgICBpZiAoaW5jbHVkZVNNSUxQcm9wZXJ0aWVzICYmIG1fbWF0Y2hBdXRob3JBbmRVc2Vy
U3R5bGVzICYmIG1fc3RhdGUubV9zdHlsZWRFbGVtZW50ICYmIG1fc3RhdGUubV9zdHlsZWRFbGVt
ZW50LT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhy
ZXN1bHQsIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihtX3N0YXRlLm1fc3R5bGVkRWxlbWVudCkt
PmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpLCBmYWxzZSAvKiBpc0NhY2hlYWJsZSAqLyk7
CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlU01JTFByb3BlcnRpZXMpOwogI2VuZGlm
CkBAIC05ODAsMTAgKzk2NiwxMCBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNsYXNzTmFtZXNBZmZl
Y3RlZEJ5UnVsZXMoY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NOYW1lcwogCiBpbmxpbmUg
dm9pZCBTdHlsZVJlc29sdmVyOjppbml0RWxlbWVudChFbGVtZW50KiBlKQogewotICAgIGlmICht
X2VsZW1lbnQgIT0gZSkgewotICAgICAgICBtX2VsZW1lbnQgPSBlOwotICAgICAgICBtX3N0eWxl
ZEVsZW1lbnQgPSBtX2VsZW1lbnQgJiYgbV9lbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSA/IHN0
YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihtX2VsZW1lbnQpIDogMDsKLSAgICAgICAgbV9lbGVt
ZW50TGlua1N0YXRlID0gZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtTdGF0ZSgpLT5kZXRlcm1pbmVM
aW5rU3RhdGUobV9lbGVtZW50KTsKKyAgICBpZiAobV9zdGF0ZS5tX2VsZW1lbnQgIT0gZSkgewor
ICAgICAgICBtX3N0YXRlLm1fZWxlbWVudCA9IGU7CisgICAgICAgIG1fc3RhdGUubV9zdHlsZWRF
bGVtZW50ID0gbV9zdGF0ZS5tX2VsZW1lbnQgJiYgbV9zdGF0ZS5tX2VsZW1lbnQtPmlzU3R5bGVk
RWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fc3RhdGUubV9lbGVtZW50
KSA6IDA7CisgICAgICAgIG1fc3RhdGUubV9lbGVtZW50TGlua1N0YXRlID0gZG9jdW1lbnQoKS0+
dmlzaXRlZExpbmtTdGF0ZSgpLT5kZXRlcm1pbmVMaW5rU3RhdGUoZSk7CiAgICAgICAgIGlmIChl
ICYmIGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAg
IGUtPmRvY3VtZW50KCktPnNldERpcmVjdGlvblNldE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsK
ICAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVs
ZW1lbnQoZmFsc2UpOwpAQCAtOTkzLDMyICs5NzksMzMgQEAgaW5saW5lIHZvaWQgU3R5bGVSZXNv
bHZlcjo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKIAogaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZl
cjo6aW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUsIFBzZXVkb0lkIHBzZXVkb0lEKQogewotICAgIG1fcHNldWRvU3R5bGUgPSBwc2V1ZG9JRDsK
KyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworICAgIHN0YXRlLm1fcHNldWRvU3R5bGUgPSBw
c2V1ZG9JRDsKIAogICAgIGlmIChlKSB7CiAgICAgICAgIE5vZGVSZW5kZXJpbmdDb250ZXh0IGNv
bnRleHQoZSk7Ci0gICAgICAgIG1fcGFyZW50Tm9kZSA9IGNvbnRleHQucGFyZW50Tm9kZUZvclJl
bmRlcmluZ0FuZFN0eWxlKCk7Ci0gICAgICAgIG1fcGFyZW50U3R5bGUgPSBjb250ZXh0LnJlc2V0
U3R5bGVJbmhlcml0YW5jZSgpID8gMCA6CisgICAgICAgIHN0YXRlLm1fcGFyZW50Tm9kZSA9IGNv
bnRleHQucGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlKCk7CisgICAgICAgIHN0YXRlLm1f
cGFyZW50U3R5bGUgPSBjb250ZXh0LnJlc2V0U3R5bGVJbmhlcml0YW5jZSgpID8gMCA6CiAgICAg
ICAgICAgICBwYXJlbnRTdHlsZSA/IHBhcmVudFN0eWxlIDoKLSAgICAgICAgICAgIG1fcGFyZW50
Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDA7Ci0gICAgICAgIG1fZGlzdHJp
YnV0ZWRUb0luc2VydGlvblBvaW50ID0gY29udGV4dC5pbnNlcnRpb25Qb2ludCgpOworICAgICAg
ICAgICAgc3RhdGUubV9wYXJlbnROb2RlID8gc3RhdGUubV9wYXJlbnROb2RlLT5yZW5kZXJTdHls
ZSgpIDogMDsKKyAgICAgICAgc3RhdGUubV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQgPSBj
b250ZXh0Lmluc2VydGlvblBvaW50KCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9wYXJlbnRO
b2RlID0gMDsKLSAgICAgICAgbV9wYXJlbnRTdHlsZSA9IHBhcmVudFN0eWxlOwotICAgICAgICBt
X2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCA9IGZhbHNlOworICAgICAgICBzdGF0ZS5tX3Bh
cmVudE5vZGUgPSAwOworICAgICAgICBzdGF0ZS5tX3BhcmVudFN0eWxlID0gcGFyZW50U3R5bGU7
CisgICAgICAgIHN0YXRlLm1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50ID0gZmFsc2U7CiAg
ICAgfQogCiAgICAgTm9kZSogZG9jRWxlbWVudCA9IGUgPyBlLT5kb2N1bWVudCgpLT5kb2N1bWVu
dEVsZW1lbnQoKSA6IDA7CiAgICAgUmVuZGVyU3R5bGUqIGRvY1N0eWxlID0gZG9jdW1lbnQoKS0+
cmVuZGVyU3R5bGUoKTsKLSAgICBtX3Jvb3RFbGVtZW50U3R5bGUgPSBkb2NFbGVtZW50ICYmIGUg
IT0gZG9jRWxlbWVudCA/IGRvY0VsZW1lbnQtPnJlbmRlclN0eWxlKCkgOiBkb2NTdHlsZTsKKyAg
ICBzdGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUgPSBkb2NFbGVtZW50ICYmIGUgIT0gZG9jRWxlbWVu
dCA/IGRvY0VsZW1lbnQtPnJlbmRlclN0eWxlKCkgOiBkb2NTdHlsZTsKIAotICAgIG1fc3R5bGUg
PSAwOworICAgIHN0YXRlLm1fc3R5bGUgPSAwOwogCi0gICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0
aWVzLmNsZWFyKCk7CisgICAgc3RhdGUubV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmNsZWFyKCk7
CiAKLSAgICBtX3J1bGVMaXN0ID0gMDsKKyAgICBzdGF0ZS5tX3J1bGVMaXN0ID0gMDsKIAotICAg
IG1fZm9udERpcnR5ID0gZmFsc2U7CisgICAgc3RhdGUubV9mb250RGlydHkgPSBmYWxzZTsKIH0K
IAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNTdHlsZVNlYXJjaFRocmVzaG9sZCA9IDEwOwpAQCAt
MTA4MSwyMyArMTA2OCwyNCBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRp
ZGF0ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqIHJ1bGVTZXQpCiB7CiAgICAgaWYgKCFydWxlU2V0
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAg
ICBtX3N0YXRlLm1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAKICAgICBtX3NlbGVjdG9yQ2hlY2tl
ci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6U2hhcmluZ1J1bGVzKTsKICAgICBpbnQgZmlyc3RS
dWxlSW5kZXggPSAtMSwgbGFzdFJ1bGVJbmRleCA9IC0xOwogICAgIFJ1bGVSYW5nZSBydWxlUmFu
Z2UoZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwogICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzKE1hdGNoUmVxdWVzdChydWxlU2V0KSwgcnVsZVJhbmdlKTsKICAgICBtX3NlbGVjdG9yQ2hl
Y2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpOwotICAgIGlmICht
X21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgaWYgKG1fc3RhdGUubV9tYXRjaGVkUnVsZXMu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xl
YXIoKTsKKyAgICBtX3N0YXRlLm1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKFN0
eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CisgICAgY29uc3QgU3RhdGUmIHN0YXRlID0g
bV9zdGF0ZTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiB0aGlzSW5wdXRFbGVtZW50ID0gZWxlbWVu
dC0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBvdGhlcklucHV0RWxl
bWVudCA9IG1fZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50
KiBvdGhlcklucHV0RWxlbWVudCA9IHN0YXRlLm1fZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsK
IAogICAgIGlmICghdGhpc0lucHV0RWxlbWVudCB8fCAhb3RoZXJJbnB1dEVsZW1lbnQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTExMTgsMjUgKzExMDYsMjUgQEAgYm9vbCBTdHlsZVJlc29s
dmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29u
c3QKICAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+aXNSZXF1aXJlZCgpICE9IG90aGVySW5wdXRF
bGVtZW50LT5pc1JlcXVpcmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChl
bGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpICE9IG1fZWxlbWVudC0+aXNFbmFibGVkRm9y
bUNvbnRyb2woKSkKKyAgICBpZiAoZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSAhPSBz
dGF0ZS5tX2VsZW1lbnQtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgIT0gbV9l
bGVtZW50LT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkpCisgICAgaWYgKGVsZW1lbnQtPmlzRGVm
YXVsdEJ1dHRvbkZvckZvcm0oKSAhPSBzdGF0ZS5tX2VsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZv
ckZvcm0oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fZWxlbWVudC0+ZG9j
dW1lbnQoKS0+Y29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKSkgeworICAgIGlmIChzdGF0ZS5t
X2VsZW1lbnQtPmRvY3VtZW50KCktPmNvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCkpIHsKICAg
ICAgICAgYm9vbCB3aWxsVmFsaWRhdGUgPSBlbGVtZW50LT53aWxsVmFsaWRhdGUoKTsKIAotICAg
ICAgICBpZiAod2lsbFZhbGlkYXRlICE9IG1fZWxlbWVudC0+d2lsbFZhbGlkYXRlKCkpCisgICAg
ICAgIGlmICh3aWxsVmFsaWRhdGUgIT0gc3RhdGUubV9lbGVtZW50LT53aWxsVmFsaWRhdGUoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAod2lsbFZhbGlkYXRlICYm
IChlbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkgIT0gbV9lbGVtZW50LT5pc1Zh
bGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpKQorICAgICAgICBpZiAod2lsbFZhbGlkYXRlICYmIChl
bGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkgIT0gc3RhdGUubV9lbGVtZW50LT5p
c1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIGlmIChlbGVtZW50LT5pc0luUmFuZ2UoKSAhPSBtX2VsZW1lbnQtPmlzSW5SYW5n
ZSgpKQorICAgICAgICBpZiAoZWxlbWVudC0+aXNJblJhbmdlKCkgIT0gc3RhdGUubV9lbGVtZW50
LT5pc0luUmFuZ2UoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAo
ZWxlbWVudC0+aXNPdXRPZlJhbmdlKCkgIT0gbV9lbGVtZW50LT5pc091dE9mUmFuZ2UoKSkKKyAg
ICAgICAgaWYgKGVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpICE9IHN0YXRlLm1fZWxlbWVudC0+aXNP
dXRPZlJhbmdlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xMTUx
LDI1ICsxMTM5LDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50SGFzRGlyZWN0aW9uQXV0
byhFbGVtZW50KiBlbGVtZW50KQogCiBib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRh
dGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoU3R5bGVkRWxlbWVudCogc2hh
cmluZ0NhbmRpZGF0ZSkgY29uc3QKIHsKLSAgICBpZiAobV9lbGVtZW50LT5hdHRyaWJ1dGVEYXRh
KCkgPT0gc2hhcmluZ0NhbmRpZGF0ZS0+YXR0cmlidXRlRGF0YSgpKQorICAgIGNvbnN0IFN0YXRl
JiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgaWYgKHN0YXRlLm1fZWxlbWVudC0+YXR0cmlidXRlRGF0
YSgpID09IHNoYXJpbmdDYW5kaWRhdGUtPmF0dHJpYnV0ZURhdGEoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgaWYgKG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFu
Z0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6Omxh
bmdBdHRyKSkKKyAgICBpZiAoc3RhdGUubV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFhNTE5h
bWVzOjpsYW5nQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxO
YW1lczo6bGFuZ0F0dHIpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fZWxlbWVu
dC0+ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZmFzdEdl
dEF0dHJpYnV0ZShsYW5nQXR0cikpCisgICAgaWYgKHN0YXRlLm1fZWxlbWVudC0+ZmFzdEdldEF0
dHJpYnV0ZShsYW5nQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShs
YW5nQXR0cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghbV9lbGVtZW50QWZm
ZWN0ZWRCeUNsYXNzUnVsZXMpIHsKKyAgICBpZiAoIXN0YXRlLm1fZWxlbWVudEFmZmVjdGVkQnlD
bGFzc1J1bGVzKSB7CiAgICAgICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5oYXNDbGFzcygpICYm
IGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMoc2hhcmluZ0NhbmRpZGF0ZS0+Y2xhc3NOYW1lcygp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UgaWYgKHNoYXJpbmdDYW5k
aWRhdGUtPmhhc0NsYXNzKCkpIHsKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICAvLyBTVkcgZWxl
bWVudHMgcmVxdWlyZSBhIChzbG93ISkgZ2V0QXR0cmlidXRlIGNvbXBhcmlzaW9uIGJlY2F1c2Ug
ImNsYXNzIiBpcyBhbiBhbmltYXRhYmxlIGF0dHJpYnV0ZSBmb3IgU1ZHLgotICAgICAgICBpZiAo
bV9lbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+
Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Z2V0QXR0cmlidXRl
KGNsYXNzQXR0cikpCisgICAgICAgIGlmIChzdGF0ZS5tX2VsZW1lbnQtPmlzU1ZHRWxlbWVudCgp
KSB7CisgICAgICAgICAgICBpZiAoc3RhdGUubV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NB
dHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZWxzZSB7CiAjZW5kaWYKLSAgICAg
ICAgICAgIGlmIChtX2VsZW1lbnQtPmNsYXNzTmFtZXMoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5j
bGFzc05hbWVzKCkpCisgICAgICAgICAgICBpZiAoc3RhdGUubV9lbGVtZW50LT5jbGFzc05hbWVz
KCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Y2xhc3NOYW1lcygpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICB9CkBAIC0xMTc3LDEyICsxMTY2
LDEyIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0
eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFCiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPnByZXNlbnRhdGlvbkF0dHJpYnV0
ZVN0eWxlKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUo
KSkKKyAgICBpZiAoc3RhdGUubV9zdHlsZWRFbGVtZW50LT5wcmVzZW50YXRpb25BdHRyaWJ1dGVT
dHlsZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUtPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQot
ICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcpKSB7Ci0gICAgICAgIGlm
IChzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50Kj4obV9lbGVtZW50KS0+aXNEZXRlcm1p
bmF0ZSgpICE9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihzaGFyaW5nQ2FuZGlk
YXRlKS0+aXNEZXRlcm1pbmF0ZSgpKQorICAgIGlmIChzdGF0ZS5tX2VsZW1lbnQtPmhhc1RhZ05h
bWUocHJvZ3Jlc3NUYWcpKSB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NF
bGVtZW50Kj4oc3RhdGUubV9lbGVtZW50KS0+aXNEZXRlcm1pbmF0ZSgpICE9IHN0YXRpY19jYXN0
PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihzaGFyaW5nQ2FuZGlkYXRlKS0+aXNEZXRlcm1pbmF0ZSgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICNlbmRpZgpAQCAtMTE5MywxMiAr
MTE4MiwxMyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGlj
YWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoU3R5bGVkRQogYm9vbCBTdHlsZVJlc29sdmVyOjpj
YW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsK
ICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgIGNv
bnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAKICAgICBpZiAoIXN0eWxlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaWYgKHN0eWxlLT51bmlxdWUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChlbGVtZW50LT50YWdRTmFtZSgpICE9IG1fZWxlbWVudC0+dGFnUU5hbWUo
KSkKKyAgICBpZiAoZWxlbWVudC0+dGFnUU5hbWUoKSAhPSBzdGF0ZS5tX2VsZW1lbnQtPnRhZ1FO
YW1lKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZWxlbWVudC0+aW5saW5lU3R5
bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTIwOCwyMSArMTE5OCwyMSBAQCBib29s
IFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBl
bGVtZW50KSBjb25zdAogICAgIGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNf
Y2FzdDxTVkdFbGVtZW50Kj4oZWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKLSAgICBpZiAoZWxlbWVudC0+aXNMaW5r
KCkgIT0gbV9lbGVtZW50LT5pc0xpbmsoKSkKKyAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkgIT0g
c3RhdGUubV9lbGVtZW50LT5pc0xpbmsoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChlbGVtZW50LT5ob3ZlcmVkKCkgIT0gbV9lbGVtZW50LT5ob3ZlcmVkKCkpCisgICAgaWYgKGVs
ZW1lbnQtPmhvdmVyZWQoKSAhPSBzdGF0ZS5tX2VsZW1lbnQtPmhvdmVyZWQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5hY3RpdmUoKSAhPSBtX2VsZW1lbnQtPmFj
dGl2ZSgpKQorICAgIGlmIChlbGVtZW50LT5hY3RpdmUoKSAhPSBzdGF0ZS5tX2VsZW1lbnQtPmFj
dGl2ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmZvY3VzZWQo
KSAhPSBtX2VsZW1lbnQtPmZvY3VzZWQoKSkKKyAgICBpZiAoZWxlbWVudC0+Zm9jdXNlZCgpICE9
IHN0YXRlLm1fZWxlbWVudC0+Zm9jdXNlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKGVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCkgIT0gbV9lbGVtZW50LT5zaGFkb3dQc2V1ZG9J
ZCgpKQorICAgIGlmIChlbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpICE9IHN0YXRlLm1fZWxlbWVu
dC0+c2hhZG93UHNldWRvSWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChlbGVt
ZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmNzc1RhcmdldCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaWYgKCFzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3Rp
bmdBdHRyaWJ1dGVzKGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVs
ZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpICE9IG1fc3R5bGVk
RWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpCisgICAgaWYg
KGVsZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpICE9IHN0YXRl
Lm1fc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChlbGVtZW50LT5oYXNJRCgpICYmIG1f
ZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlv
bigpLmltcGwoKSkpCkBAIC0xMjM4LDcgKzEyMjgsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNh
blNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogCiAg
ICAgYm9vbCBpc0NvbnRyb2wgPSBlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpOwogCi0g
ICAgaWYgKGlzQ29udHJvbCAhPSBtX2VsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisg
ICAgaWYgKGlzQ29udHJvbCAhPSBzdGF0ZS5tX2VsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpc0NvbnRyb2wgJiYgIWNhblNo
YXJlU3R5bGVXaXRoQ29udHJvbChlbGVtZW50KSkKQEAgLTEyNjIsMjAgKzEyNTIsMjAgQEAgYm9v
bCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCog
ZWxlbWVudCkgY29uc3QKICAgICBpZiAoZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oZWxlbWVudCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSAmJiBt
X2VsZW1lbnRMaW5rU3RhdGUgIT0gc3R5bGUtPmluc2lkZUxpbmsoKSkKKyAgICBpZiAoZWxlbWVu
dC0+aXNMaW5rKCkgJiYgc3RhdGUubV9lbGVtZW50TGlua1N0YXRlICE9IHN0eWxlLT5pbnNpZGVM
aW5rKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykK
ICAgICAvLyBEZW55IHNoYXJpbmcgc3R5bGVzIGJldHdlZW4gV2ViVlRUIGFuZCBub24tV2ViVlRU
IG5vZGVzLgotICAgIGlmIChlbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAhPSBtX2VsZW1lbnQt
PmlzV2ViVlRURWxlbWVudCgpKQorICAgIGlmIChlbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAh
PSBzdGF0ZS5tX2VsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYgbV9lbGVtZW50LT5p
c1dlYlZUVEVsZW1lbnQoKSAmJiB0b1dlYlZUVEVsZW1lbnQoZWxlbWVudCktPndlYlZUVE5vZGVU
eXBlKCkgIT0gdG9XZWJWVFRFbGVtZW50KG1fZWxlbWVudCktPndlYlZUVE5vZGVUeXBlKCkpCisg
ICAgaWYgKGVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpICYmIHN0YXRlLm1fZWxlbWVudC0+aXNX
ZWJWVFRFbGVtZW50KCkgJiYgdG9XZWJWVFRFbGVtZW50KGVsZW1lbnQpLT53ZWJWVFROb2RlVHlw
ZSgpICE9IHRvV2ViVlRURWxlbWVudChzdGF0ZS5tX2VsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkKLSAgICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRDdXJy
ZW50RnVsbFNjcmVlbkVsZW1lbnQoKSB8fCBtX2VsZW1lbnQgPT0gbV9lbGVtZW50LT5kb2N1bWVu
dCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkKKyAgICBpZiAoZWxlbWVudCA9
PSBlbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSB8
fCBzdGF0ZS5tX2VsZW1lbnQgPT0gc3RhdGUubV9lbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRD
dXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlm
CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMjk2LDM2ICsxMjg2LDM4IEBAIGlubGluZSBTdHlsZWRF
bGVtZW50KiBTdHlsZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiBu
b2RlLCB1bnNpCiAKIFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHls
ZSgpCiB7Ci0gICAgaWYgKCFtX3N0eWxlZEVsZW1lbnQgfHwgIW1fcGFyZW50U3R5bGUpCisgICAg
U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKyAgICBpZiAoIXN0YXRlLm1fc3R5bGVkRWxlbWVudCB8
fCAhc3RhdGUubV9wYXJlbnRTdHlsZSkKICAgICAgICAgcmV0dXJuIDA7CisKICAgICAvLyBJZiB0
aGUgZWxlbWVudCBoYXMgaW5saW5lIHN0eWxlIGl0IGlzIHByb2JhYmx5IHVuaXF1ZS4KLSAgICBp
ZiAobV9zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpKQorICAgIGlmIChzdGF0ZS5tX3N0eWxl
ZEVsZW1lbnQtPmlubGluZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiAwOwogI2lmIEVOQUJMRShT
VkcpCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudCo+KG1fc3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVy
dGllcygpKQorICAgIGlmIChzdGF0ZS5tX3N0eWxlZEVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpICYm
IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihzdGF0ZS5tX3N0eWxlZEVsZW1lbnQpLT5hbmltYXRl
ZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKICAgICAv
LyBJZHMgc3RvcCBzdHlsZSBzaGFyaW5nIGlmIHRoZXkgc2hvdyB1cCBpbiB0aGUgc3R5bGVzaGVl
dHMuCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0lu
UnVsZXMuY29udGFpbnMobV9zdHlsZWRFbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmlt
cGwoKSkpCisgICAgaWYgKHN0YXRlLm1fc3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1
cmVzLmlkc0luUnVsZXMuY29udGFpbnMoc3RhdGUubV9zdHlsZWRFbGVtZW50LT5pZEZvclN0eWxl
UmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChwYXJlbnRF
bGVtZW50UHJldmVudHNTaGFyaW5nKG1fZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSkKKyAgICBp
ZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhzdGF0ZS5tX2VsZW1lbnQtPnBhcmVudEVs
ZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmhh
c1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgaWYgKHN0YXRlLm1fc3R5bGVkRWxlbWVudC0+
aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKG1f
ZWxlbWVudCA9PSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNzc1RhcmdldCgpKQorICAgIGlmIChz
dGF0ZS5tX2VsZW1lbnQgPT0gc3RhdGUubV9lbGVtZW50LT5kb2N1bWVudCgpLT5jc3NUYXJnZXQo
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKG1f
ZWxlbWVudCkpCisgICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKHN0YXRlLm1fZWxlbWVu
dCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQ2FjaGUgd2hldGhlciBtX2VsZW1lbnQg
aXMgYWZmZWN0ZWQgYnkgYW55IGtub3duIGNsYXNzIHNlbGVjdG9ycy4KICAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGRuJ3QgYmUgYSBtZW1iZXIgdmFyaWFibGUuIFRoZSBzdHlsZSBzaGFyaW5nIGNv
ZGUgY291bGQgYmUgZmFjdG9yZWQgb3V0IG9mIFN0eWxlUmVzb2x2ZXIuCi0gICAgbV9lbGVtZW50
QWZmZWN0ZWRCeUNsYXNzUnVsZXMgPSBtX2VsZW1lbnQgJiYgbV9lbGVtZW50LT5oYXNDbGFzcygp
ICYmIGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMobV9lbGVtZW50LT5jbGFzc05hbWVzKCkpOwor
ICAgIHN0YXRlLm1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzID0gc3RhdGUubV9lbGVtZW50
ICYmIHN0YXRlLm1fZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1
bGVzKHN0YXRlLm1fZWxlbWVudC0+Y2xhc3NOYW1lcygpKTsKIAogICAgIC8vIENoZWNrIHByZXZp
b3VzIHNpYmxpbmdzIGFuZCB0aGVpciBjb3VzaW5zLgogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsK
ICAgICB1bnNpZ25lZCB2aXNpdGVkTm9kZUNvdW50ID0gMDsKICAgICBTdHlsZWRFbGVtZW50KiBz
aGFyZUVsZW1lbnQgPSAwOwotICAgIE5vZGUqIGNvdXNpbkxpc3QgPSBtX3N0eWxlZEVsZW1lbnQt
PnByZXZpb3VzU2libGluZygpOworICAgIE5vZGUqIGNvdXNpbkxpc3QgPSBzdGF0ZS5tX3N0eWxl
ZEVsZW1lbnQtPnByZXZpb3VzU2libGluZygpOwogICAgIHdoaWxlIChjb3VzaW5MaXN0KSB7CiAg
ICAgICAgIHNoYXJlRWxlbWVudCA9IGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKGNvdXNpbkxp
c3QsIGNvdW50KTsKICAgICAgICAgaWYgKHNoYXJlRWxlbWVudCkKQEAgLTEzNDcsNyArMTMzOSw3
IEBAIFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAg
aWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgLy8gVHJhY2tpbmcgY2hpbGQgaW5kZXggcmVxdWlyZXMgdW5pcXVlIHN0eWxl
IGZvciBlYWNoIG5vZGUuIFRoaXMgbWF5IGdldCBzZXQgYnkgdGhlIHNpYmxpbmcgcnVsZSBtYXRj
aCBhYm92ZS4KLSAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhtX2VsZW1lbnQt
PnBhcmVudEVsZW1lbnQoKSkpCisgICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmco
c3RhdGUubV9lbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpKQogICAgICAgICByZXR1cm4gMDsKICAg
ICByZXR1cm4gc2hhcmVFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogfQpAQCAtMTU2NywxMCArMTU1
OSwxMSBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVs
ZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyUwogICAgICAgICByZXR1cm4gc19zdHlsZU5v
dFlldEF2YWlsYWJsZTsKICAgICB9CiAKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAg
IGluaXRFbGVtZW50KGVsZW1lbnQpOwogICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZWxlbWVudCwg
ZGVmYXVsdFBhcmVudCk7Ci0gICAgbV9yZWdpb25Gb3JTdHlsaW5nID0gcmVnaW9uRm9yU3R5bGlu
ZzsKLSAgICBpZiAoc2hhcmluZ0JlaGF2aW9yID09IEFsbG93U3R5bGVTaGFyaW5nICYmICFtX2Rp
c3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCkgeworICAgIHN0YXRlLm1fcmVnaW9uRm9yU3R5bGlu
ZyA9IHJlZ2lvbkZvclN0eWxpbmc7CisgICAgaWYgKHNoYXJpbmdCZWhhdmlvciA9PSBBbGxvd1N0
eWxlU2hhcmluZyAmJiAhc3RhdGUubV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQpIHsKICAg
ICAgICAgUmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0gbG9jYXRlU2hhcmVkU3R5bGUoKTsKICAg
ICAgICAgaWYgKHNoYXJlZFN0eWxlKQogICAgICAgICAgICAgcmV0dXJuIHNoYXJlZFN0eWxlOwpA
QCAtMTU3OCwzMyArMTU3MSwzMiBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29s
dmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyUwogCiAgICAgUmVm
UHRyPFJlbmRlclN0eWxlPiBjbG9uZUZvclBhcmVudDsKIAotICAgIGlmIChtX3BhcmVudFN0eWxl
KSB7Ci0gICAgICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgICAgIG1f
c3R5bGUtPmluaGVyaXRGcm9tKG1fcGFyZW50U3R5bGUsIGlzQXRTaGFkb3dCb3VuZGFyeShlbGVt
ZW50KSA/IFJlbmRlclN0eWxlOjpBdFNoYWRvd0JvdW5kYXJ5IDogUmVuZGVyU3R5bGU6Ok5vdEF0
U2hhZG93Qm91bmRhcnkpOworICAgIGlmIChzdGF0ZS5tX3BhcmVudFN0eWxlKSB7CisgICAgICAg
IHN0YXRlLm1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgICAgIHN0YXRlLm1f
c3R5bGUtPmluaGVyaXRGcm9tKHN0YXRlLm1fcGFyZW50U3R5bGUsIGlzQXRTaGFkb3dCb3VuZGFy
eShlbGVtZW50KSA/IFJlbmRlclN0eWxlOjpBdFNoYWRvd0JvdW5kYXJ5IDogUmVuZGVyU3R5bGU6
Ok5vdEF0U2hhZG93Qm91bmRhcnkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fc3R5bGUgPSBk
ZWZhdWx0U3R5bGVGb3JFbGVtZW50KCk7Ci0gICAgICAgIGNsb25lRm9yUGFyZW50ID0gUmVuZGVy
U3R5bGU6OmNsb25lKHN0eWxlKCkpOwotICAgICAgICBtX3BhcmVudFN0eWxlID0gY2xvbmVGb3JQ
YXJlbnQuZ2V0KCk7CisgICAgICAgIHN0YXRlLm1fc3R5bGUgPSBkZWZhdWx0U3R5bGVGb3JFbGVt
ZW50KCk7CisgICAgICAgIGNsb25lRm9yUGFyZW50ID0gUmVuZGVyU3R5bGU6OmNsb25lKHN0YXRl
Lm1fc3R5bGUuZ2V0KCkpOworICAgICAgICBzdGF0ZS5tX3BhcmVudFN0eWxlID0gY2xvbmVGb3JQ
YXJlbnQuZ2V0KCk7CiAgICAgfQogICAgIC8vIGNvbnRlbnRlZGl0YWJsZSBhdHRyaWJ1dGUgKGlt
cGxlbWVudGVkIGJ5IC13ZWJraXQtdXNlci1tb2RpZnkpIHNob3VsZAogICAgIC8vIGJlIHByb3Bh
Z2F0ZWQgZnJvbSBzaGFkb3cgaG9zdCB0byBkaXN0cmlidXRlZCBub2RlLgotICAgIGlmIChtX2Rp
c3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCkgeworICAgIGlmIChzdGF0ZS5tX2Rpc3RyaWJ1dGVk
VG9JbnNlcnRpb25Qb2ludCkgewogICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50ID0gZWxlbWVu
dC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxl
T2ZTaGFkb3dIb3N0ID0gcGFyZW50LT5yZW5kZXJTdHlsZSgpKQotICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldFVzZXJNb2RpZnkoc3R5bGVPZlNoYWRvd0hvc3QtPnVzZXJNb2RpZnkoKSk7Cisg
ICAgICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0VXNlck1vZGlmeShzdHlsZU9mU2hhZG93
SG9zdC0+dXNlck1vZGlmeSgpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChlbGVtZW50
LT5pc0xpbmsoKSkgewotICAgICAgICBtX3N0eWxlLT5zZXRJc0xpbmsodHJ1ZSk7Ci0gICAgICAg
IEVJbnNpZGVMaW5rIGxpbmtTdGF0ZSA9IG1fZWxlbWVudExpbmtTdGF0ZTsKLSAgICAgICAgaWYg
KG1fZWxlbWVudExpbmtTdGF0ZSAhPSBOb3RJbnNpZGVMaW5rKSB7CisgICAgICAgIHN0YXRlLm1f
c3R5bGUtPnNldElzTGluayh0cnVlKTsKKyAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXRlID0g
c3RhdGUubV9lbGVtZW50TGlua1N0YXRlOworICAgICAgICBpZiAobGlua1N0YXRlICE9IE5vdElu
c2lkZUxpbmspIHsKICAgICAgICAgICAgIGJvb2wgZm9yY2VWaXNpdGVkID0gSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1
ZG9WaXNpdGVkKTsKICAgICAgICAgICAgIGlmIChmb3JjZVZpc2l0ZWQpCiAgICAgICAgICAgICAg
ICAgbGlua1N0YXRlID0gSW5zaWRlVmlzaXRlZExpbms7CiAgICAgICAgIH0KLQotICAgICAgICBt
X3N0eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0ZSk7CisgICAgICAgIHN0YXRlLm1fc3R5bGUt
PnNldEluc2lkZUxpbmsobGlua1N0YXRlKTsKICAgICB9CiAKICAgICBlbnN1cmVEZWZhdWx0U3R5
bGVTaGVldHNGb3JFbGVtZW50KGVsZW1lbnQpOwpAQCAtMTYxOCwxNyArMTYxMCwxNyBAQCBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVu
dCogZWxlbWVudCwgUmVuZGVyUwogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1
bHQsIGVsZW1lbnQpOwogCiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRpc3Bs
YXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0
UmVuZGVyU3R5bGUoc3R5bGUoKSwgbV9wYXJlbnRTdHlsZSwgZWxlbWVudCk7CisgICAgYWRqdXN0
UmVuZGVyU3R5bGUoc3RhdGUubV9zdHlsZS5nZXQoKSwgc3RhdGUubV9wYXJlbnRTdHlsZSwgZWxl
bWVudCk7CiAKICAgICBpbml0RWxlbWVudCgwKTsgLy8gQ2xlYXIgb3V0IGZvciB0aGUgbmV4dCBy
ZXNvbHZlLgogCiAgICAgaWYgKGNsb25lRm9yUGFyZW50KQotICAgICAgICBtX3BhcmVudFN0eWxl
ID0gMDsKKyAgICAgICAgc3RhdGUubV9wYXJlbnRTdHlsZSA9IDA7CiAKICAgICBkb2N1bWVudCgp
LT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHls
ZS4KLSAgICByZXR1cm4gbV9zdHlsZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHN0YXRlLm1fc3R5
bGUucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVy
OjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIGNvbnN0
IFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1lLCBLZXlmcmFtZVZhbHVlJiBrZXlmcmFtZVZhbHVlKQpA
QCAtMTYzNywxMiArMTYyOSwxNCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29s
dmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZQogICAgIGlmIChr
ZXlmcmFtZS0+cHJvcGVydGllcygpKQogICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1
bHQsIGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpOwogCi0gICAgQVNTRVJUKCFtX3N0eWxlKTsKKyAg
ICBBU1NFUlQoIW1fc3RhdGUubV9zdHlsZSk7CisKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRl
OwogCiAgICAgLy8gQ3JlYXRlIHRoZSBzdHlsZQotICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y2xvbmUoZWxlbWVudFN0eWxlKTsKKyAgICBzdGF0ZS5tX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNs
b25lKGVsZW1lbnRTdHlsZSk7CiAKLSAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAgc3Rh
dGUubV9saW5lSGVpZ2h0VmFsdWUgPSAwOwogCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3Ro
ZXIgd2l0aCAhaW1wb3J0YW50LiBTaW5jZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8g
ZGVjbCwgdGhlcmUncyBub3RoaW5nIHRvIG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3Qg
cHJvcGVydGllcy4KQEAgLTE2NTQsOCArMTY0OCw4IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1l
CiAgICAgdXBkYXRlRm9udCgpOwogCiAgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2Ug
YXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplCi0gICAgaWYgKG1fbGluZUhlaWdo
dFZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9s
aW5lSGVpZ2h0VmFsdWUpOworICAgIGlmIChzdGF0ZS5tX2xpbmVIZWlnaHRWYWx1ZSkKKyAgICAg
ICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLm1fbGluZUhlaWdo
dFZhbHVlKTsKIAogICAgIC8vIE5vdyBkbyByZXN0IG9mIHRoZSBwcm9wZXJ0aWVzLgogICAgIGlm
IChrZXlmcmFtZS0+cHJvcGVydGllcygpKQpAQCAtMTY4Miw3ICsxNjc2LDcgQEAgUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5k
ZXJTdHlsZSogZWxlbWUKIAogICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIo
KTsKIAotICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3RhdGUubV9z
dHlsZS5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNG
b3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwg
S2V5ZnJhbWVMaXN0JiBsaXN0KQpAQCAtMTc1MCwxNSArMTc0NCwxNyBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRl
clN0eWxlKiBlbAogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1
ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUpCiB7Ci0gICAgQVNTRVJUKG1fcGFyZW50U3R5bGUpOworICAgIEFTU0VS
VChtX3N0YXRlLm1fcGFyZW50U3R5bGUpOwogICAgIGlmICghZSkKICAgICAgICAgcmV0dXJuIDA7
CiAKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworCiAgICAgaW5pdEVsZW1lbnQoZSk7CiAK
ICAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGUsIHBhcmVudFN0eWxlLCBwc2V1ZG8pOwotICAgIG1f
c3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgbV9zdHlsZS0+aW5oZXJpdEZyb20o
bV9wYXJlbnRTdHlsZSk7CisgICAgc3RhdGUubV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUo
KTsKKyAgICBzdGF0ZS5tX3N0eWxlLT5pbmhlcml0RnJvbShtX3N0YXRlLm1fcGFyZW50U3R5bGUp
OwogCiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgdXNlIHBzZXVkby1lbGVtZW50cyBpbiBhbnkgb2Yg
b3VyIHF1aXJrL3ByaW50IHVzZXIgYWdlbnQgcnVsZXMsIGRvbid0IHdhc3RlIHRpbWUgd2Fsa2lu
ZwogICAgIC8vIHRob3NlIHJ1bGVzLgpAQCAtMTc3NSwxMiArMTc3MSwxMiBAQCBQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRv
SWQgcHNldWRvLCBFbAogICAgIGlmIChtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbV9zdHlsZS0+c2V0U3R5bGVUeXBlKHBz
ZXVkbyk7CisgICAgc3RhdGUubV9zdHlsZS0+c2V0U3R5bGVUeXBlKHBzZXVkbyk7CiAKICAgICBh
cHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBlKTsKIAogICAgIC8vIENsZWFuIHVw
IG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRpb25zIChhbW9uZyBv
dGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRlclN0eWxlKHN0eWxlKCksIHBhcmVudFN0eWxl
LCAwKTsKKyAgICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0ZS5tX3N0eWxlLmdldCgpLCBtX3N0YXRl
Lm1fcGFyZW50U3R5bGUsIDApOwogCiAgICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVm
ZXJlbmNlZCBieSB0aGlzIHN0eWxlLgogICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CkBAIC0x
Nzg4LDE1ICsxNzg0LDE1IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6
OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sIEVsCiAgICAgZG9jdW1lbnQo
KS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCiAgICAgLy8gTm93IHJldHVybiB0aGUgc3R5
bGUuCi0gICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOworICAgIHJldHVybiBzdGF0ZS5tX3N0
eWxlLnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZl
cjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiB7CiAgICAgaW5pdEZvclN0eWxlUmVzb2x2
ZShkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSk7IC8vIG1fcm9vdEVsZW1lbnRTdHlsZSB3
aWxsIGJlIHNldCB0byB0aGUgZG9jdW1lbnQgc3R5bGUuCiAKLSAgICBtX3N0eWxlID0gUmVuZGVy
U3R5bGU6OmNyZWF0ZSgpOwotICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKG1fcm9vdEVsZW1lbnRT
dHlsZSk7CisgICAgbV9zdGF0ZS5tX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAg
IG1fc3RhdGUubV9zdHlsZS0+aW5oZXJpdEZyb20obV9zdGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUp
OwogCiAgICAgY29uc3QgYm9vbCBpc0xlZnQgPSBpc0xlZnRQYWdlKHBhZ2VJbmRleCk7CiAgICAg
Y29uc3QgYm9vbCBpc0ZpcnN0ID0gaXNGaXJzdFBhZ2UocGFnZUluZGV4KTsKQEAgLTE4MDcsNyAr
MTgwMyw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9y
UGFnZShpbnQgcGFnZUluZGV4KQogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV91c2VyU3R5
bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CiAgICAgLy8gT25seSBjb25zaWRlciB0
aGUgZ2xvYmFsIGF1dGhvciBSdWxlU2V0IGZvciBAcGFnZSBydWxlcywgYXMgcGVyIHRoZSBIVE1M
NSBzcGVjLgogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV9hdXRob3JTdHlsZS5nZXQoKSwg
aXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKLSAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAg
bV9zdGF0ZS5tX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CiAgICAgYm9vbCBpbmhlcml0ZWRPbmx5ID0g
ZmFsc2U7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCiAgICAgYXBwbHlNYXRjaGVkUHJvcGVy
dGllczxWYXJpYWJsZURlZmluaXRpb25zPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hl
ZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CkBAIC0xODE4LDggKzE4MTQs
OCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2Uo
aW50IHBhZ2VJbmRleCkKICAgICB1cGRhdGVGb250KCk7CiAKICAgICAvLyBMaW5lLWhlaWdodCBp
cyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUuCi0gICAg
aWYgKG1fbGluZUhlaWdodFZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOworICAgIGlmIChtX3N0YXRlLm1fbGluZUhl
aWdodFZhbHVlKQorICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwg
bV9zdGF0ZS5tX2xpbmVIZWlnaHRWYWx1ZSk7CiAKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
PExvd1ByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQ
cm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwogCkBAIC0xODI5LDIwICsxODI1
LDIwIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFn
ZShpbnQgcGFnZUluZGV4KQogICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIo
KTsKIAogICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgotICAgIHJldHVybiBtX3N0eWxlLnJl
bGVhc2UoKTsKKyAgICByZXR1cm4gbV9zdGF0ZS5tX3N0eWxlLnJlbGVhc2UoKTsKIH0KIAogUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVu
dCgpCiB7Ci0gICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBtX3N0YXRl
Lm1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgLy8gTWFrZSBzdXJlIG91ciBm
b250cyBhcmUgaW5pdGlhbGl6ZWQgaWYgd2UgZG9uJ3QgaW5oZXJpdCB0aGVtIGZyb20gb3VyIHBh
cmVudCBzdHlsZS4KICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5n
cygpKSB7CiAgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOwotICAgICAgICBt
X3N0eWxlLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgbV9zdGF0ZS5t
X3N0eWxlLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgbV9zdHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKKyAgICAgICAgbV9zdGF0ZS5tX3N0eWxlLT5m
b250KCkudXBkYXRlKDApOwogCi0gICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOworICAgIHJl
dHVybiBtX3N0YXRlLm1fc3R5bGUucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclRleHQoVGV4dCogdGV4dE5vZGUpCkBAIC0yMTMw
LDcgKzIxMjYsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRl
clN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eQogCiAgICAgLy8gTGV0IHRoZSB0
aGVtZSBhbHNvIGhhdmUgYSBjcmFjayBhdCBhZGp1c3RpbmcgdGhlIHN0eWxlLgogICAgIGlmIChz
dHlsZS0+aGFzQXBwZWFyYW5jZSgpKQotICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1l
KCktPmFkanVzdFN0eWxlKHRoaXMsIHN0eWxlLCBlLCBtX2hhc1VBQXBwZWFyYW5jZSwgbV9ib3Jk
ZXJEYXRhLCBtX2JhY2tncm91bmREYXRhLCBtX2JhY2tncm91bmRDb2xvcik7CisgICAgICAgIFJl
bmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+YWRqdXN0U3R5bGUodGhpcywgc3R5bGUsIGUsIG1f
c3RhdGUubV9oYXNVQUFwcGVhcmFuY2UsIG1fc3RhdGUubV9ib3JkZXJEYXRhLCBtX3N0YXRlLm1f
YmFja2dyb3VuZERhdGEsIG1fc3RhdGUubV9iYWNrZ3JvdW5kQ29sb3IpOwogCiAgICAgLy8gSWYg
d2UgaGF2ZSBmaXJzdC1sZXR0ZXIgcHNldWRvIHN0eWxlLCBkbyBub3Qgc2hhcmUgdGhpcyBzdHls
ZS4KICAgICBpZiAoc3R5bGUtPmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCkBAIC0yMjEz
LDI0ICsyMjA5LDI1IEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9yT3JpZW50YXRpb25DaGFuZ2UoUmVu
ZGVyU3R5bGUqIHN0eWxlKQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQogewot
ICAgIGlmICghbV9mb250RGlydHkpCisgICAgaWYgKCFtX3N0YXRlLm1fZm9udERpcnR5KQogICAg
ICAgICByZXR1cm47CiAKICAgICBjaGVja0ZvclRleHRTaXplQWRqdXN0KCk7Ci0gICAgY2hlY2tG
b3JHZW5lcmljRmFtaWx5Q2hhbmdlKHN0eWxlKCksIG1fcGFyZW50U3R5bGUpOwotICAgIGNoZWNr
Rm9yWm9vbUNoYW5nZShzdHlsZSgpLCBtX3BhcmVudFN0eWxlKTsKLSAgICBjaGVja0Zvck9yaWVu
dGF0aW9uQ2hhbmdlKHN0eWxlKCkpOwotICAgIG1fc3R5bGUtPmZvbnQoKS51cGRhdGUobV9mb250
U2VsZWN0b3IpOwotICAgIG1fZm9udERpcnR5ID0gZmFsc2U7CisgICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gbV9zdGF0ZS5tX3N0eWxlLmdldCgpOworICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNo
YW5nZShzdHlsZSwgbV9zdGF0ZS5tX3BhcmVudFN0eWxlKTsKKyAgICBjaGVja0Zvclpvb21DaGFu
Z2Uoc3R5bGUsIG1fc3RhdGUubV9wYXJlbnRTdHlsZSk7CisgICAgY2hlY2tGb3JPcmllbnRhdGlv
bkNoYW5nZShzdHlsZSk7CisgICAgbV9zdGF0ZS5tX3N0eWxlLT5mb250KCkudXBkYXRlKG1fZm9u
dFNlbGVjdG9yKTsKKyAgICBtX3N0YXRlLm1fZm9udERpcnR5ID0gZmFsc2U7CiB9CiAKIHZvaWQg
U3R5bGVSZXNvbHZlcjo6Y2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCkKIHsKLSAgICBtX2hhc1VB
QXBwZWFyYW5jZSA9IG1fc3R5bGUtPmhhc0FwcGVhcmFuY2UoKTsKLSAgICBpZiAobV9oYXNVQUFw
cGVhcmFuY2UpIHsKLSAgICAgICAgbV9ib3JkZXJEYXRhID0gbV9zdHlsZS0+Ym9yZGVyKCk7Ci0g
ICAgICAgIG1fYmFja2dyb3VuZERhdGEgPSAqbV9zdHlsZS0+YmFja2dyb3VuZExheWVycygpOwot
ICAgICAgICBtX2JhY2tncm91bmRDb2xvciA9IG1fc3R5bGUtPmJhY2tncm91bmRDb2xvcigpOwor
ICAgIG1fc3RhdGUubV9oYXNVQUFwcGVhcmFuY2UgPSBtX3N0YXRlLm1fc3R5bGUtPmhhc0FwcGVh
cmFuY2UoKTsKKyAgICBpZiAobV9zdGF0ZS5tX2hhc1VBQXBwZWFyYW5jZSkgeworICAgICAgICBt
X3N0YXRlLm1fYm9yZGVyRGF0YSA9IG1fc3RhdGUubV9zdHlsZS0+Ym9yZGVyKCk7CisgICAgICAg
IG1fc3RhdGUubV9iYWNrZ3JvdW5kRGF0YSA9ICptX3N0YXRlLm1fc3R5bGUtPmJhY2tncm91bmRM
YXllcnMoKTsKKyAgICAgICAgbV9zdGF0ZS5tX2JhY2tncm91bmRDb2xvciA9IG1fc3RhdGUubV9z
dHlsZS0+YmFja2dyb3VuZENvbG9yKCk7CiAgICAgfQogfQogCkBAIC0yMjYwLDQ5ICsyMjU3LDUx
IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlUnVs
ZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsIFBzCiAgICAgfQogCiAgICAgaWYgKG1fbWF0Y2hBdXRo
b3JBbmRVc2VyU3R5bGVzICYmIChydWxlc1RvSW5jbHVkZSAmIEF1dGhvckNTU1J1bGVzKSkgewot
ICAgICAgICBtX3NhbWVPcmlnaW5Pbmx5ID0gIShydWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2lu
Q1NTUnVsZXMpOworICAgICAgICBtX3N0YXRlLm1fc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVzVG9J
bmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcyk7CiAKICAgICAgICAgLy8gQ2hlY2sgdGhlIHJ1
bGVzIGluIGF1dGhvciBzaGVldHMuCiAgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoZHVtbXksIHJ1
bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CiAKLSAgICAgICAgbV9zYW1lT3JpZ2luT25s
eSA9IGZhbHNlOworICAgICAgICBtX3N0YXRlLm1fc2FtZU9yaWdpbk9ubHkgPSBmYWxzZTsKICAg
ICB9CiAKICAgICBtX3NlbGVjdG9yQ2hlY2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6UmVz
b2x2aW5nU3R5bGUpOwogCi0gICAgcmV0dXJuIG1fcnVsZUxpc3QucmVsZWFzZSgpOworICAgIHJl
dHVybiBtX3N0YXRlLm1fcnVsZUxpc3QucmVsZWFzZSgpOwogfQogCiBpbmxpbmUgYm9vbCBTdHls
ZVJlc29sdmVyOjpydWxlTWF0Y2hlcyhjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENv
bnRhaW5lck5vZGUqIHNjb3BlKQogewotICAgIG1fZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwor
ICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgc3RhdGUubV9keW5hbWljUHNldWRvID0g
Tk9QU0VVRE87CiAKICAgICBpZiAocnVsZURhdGEuaGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKCkp
IHsKICAgICAgICAgLy8gV2Uga25vdyB0aGlzIHNlbGVjdG9yIGRvZXMgbm90IGluY2x1ZGUgYW55
IHBzZXVkbyBlbGVtZW50cy4KLSAgICAgICAgaWYgKG1fcHNldWRvU3R5bGUgIT0gTk9QU0VVRE8p
CisgICAgICAgIGlmIChzdGF0ZS5tX3BzZXVkb1N0eWxlICE9IE5PUFNFVURPKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAvLyBXZSBrbm93IGEgc3VmZmljaWVudGx5IHNpbXBs
ZSBzaW5nbGUgcGFydCBzZWxlY3RvciBtYXRjaGVzIHNpbXBseSBiZWNhdXNlIHdlIGZvdW5kIGl0
IGZyb20gdGhlIHJ1bGUgaGFzaC4KICAgICAgICAgLy8gVGhpcyBpcyBsaW1pdGVkIHRvIEhUTUwg
b25seSBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSBuYW1lc3BhY2UuCi0gICAgICAgIGlm
IChydWxlRGF0YS5oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFz
aCgpICYmIG1fZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAgIGlmIChydWxlRGF0
YS5oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaCgpICYmIHN0
YXRlLm1fZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKSB7CiAgICAgICAgICAgICBpZiAoIXJ1bGVE
YXRhLmhhc011bHRpcGFydFNlbGVjdG9yKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHJ1bGVEYXRhLnNlbGVjdG9yKCktPm1fbWF0Y2ggPT0g
Q1NTU2VsZWN0b3I6OlRhZyAmJiAhU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKG1fZWxlbWVu
dCwgcnVsZURhdGEuc2VsZWN0b3IoKS0+dGFnUU5hbWUoKSkpCisgICAgICAgIGlmIChydWxlRGF0
YS5zZWxlY3RvcigpLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpUYWcgJiYgIVNlbGVjdG9yQ2hl
Y2tlcjo6dGFnTWF0Y2hlcyhzdGF0ZS5tX2VsZW1lbnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCktPnRh
Z1FOYW1lKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIVNlbGVj
dG9yQ2hlY2tlcjo6ZmFzdENoZWNrUmlnaHRtb3N0QXR0cmlidXRlU2VsZWN0b3IobV9lbGVtZW50
LCBydWxlRGF0YS5zZWxlY3RvcigpKSkKKyAgICAgICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmZh
c3RDaGVja1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVjdG9yKHN0YXRlLm1fZWxlbWVudCwgcnVsZURh
dGEuc2VsZWN0b3IoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVy
biBtX3NlbGVjdG9yQ2hlY2tlci5mYXN0Q2hlY2socnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVt
ZW50KTsKKworICAgICAgICByZXR1cm4gbV9zZWxlY3RvckNoZWNrZXIuZmFzdENoZWNrKHJ1bGVE
YXRhLnNlbGVjdG9yKCksIHN0YXRlLm1fZWxlbWVudCk7CiAgICAgfQogCiAgICAgLy8gU2xvdyBw
YXRoLgotICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgY29udGV4
dChydWxlRGF0YS5zZWxlY3RvcigpLCBtX2VsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRl
ZE1hdGNoRW5hYmxlZCk7Ci0gICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBzdHlsZSgpOworICAg
IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgY29udGV4dChydWxlRGF0
YS5zZWxlY3RvcigpLCBzdGF0ZS5tX2VsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1h
dGNoRW5hYmxlZCk7CisgICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBzdGF0ZS5tX3N0eWxlLmdl
dCgpOwogICAgIGNvbnRleHQuc2NvcGUgPSBzY29wZTsKLSAgICBjb250ZXh0LnBzZXVkb1N0eWxl
ID0gbV9wc2V1ZG9TdHlsZTsKLSAgICBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gbV9z
ZWxlY3RvckNoZWNrZXIubWF0Y2goY29udGV4dCwgbV9keW5hbWljUHNldWRvLCBET01TaWJsaW5n
VHJhdmVyc2FsU3RyYXRlZ3koKSk7CisgICAgY29udGV4dC5wc2V1ZG9TdHlsZSA9IHN0YXRlLm1f
cHNldWRvU3R5bGU7CisgICAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBtYXRjaCA9IG1fc2VsZWN0
b3JDaGVja2VyLm1hdGNoKGNvbnRleHQsIHN0YXRlLm1fZHluYW1pY1BzZXVkbywgRE9NU2libGlu
Z1RyYXZlcnNhbFN0cmF0ZWd5KCkpOwogICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckNoZWNrZXI6
OlNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX3BzZXVk
b1N0eWxlICE9IE5PUFNFVURPICYmIG1fcHNldWRvU3R5bGUgIT0gbV9keW5hbWljUHNldWRvKQor
ICAgIGlmIChzdGF0ZS5tX3BzZXVkb1N0eWxlICE9IE5PUFNFVURPICYmIHN0YXRlLm1fcHNldWRv
U3R5bGUgIT0gc3RhdGUubV9keW5hbWljUHNldWRvKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yMzEyLDcgKzIzMTEsNyBAQCBib29sIFN0eWxlUmVzb2x2
ZXI6OmNoZWNrUmVnaW9uU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9y
LCBFbGVtZQogICAgIGlmICghcmVnaW9uU2VsZWN0b3IgfHwgIXJlZ2lvbkVsZW1lbnQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fcHNldWRvU3R5bGUgPSBOT1BTRVVETzsKKyAgICBt
X3N0YXRlLm1fcHNldWRvU3R5bGUgPSBOT1BTRVVETzsKIAogICAgIGZvciAoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHMgPSByZWdpb25TZWxlY3RvcjsgczsgcyA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChz
KSkKICAgICAgICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1hdGNoZXMocywgcmVnaW9uRWxlbWVu
dCkpCkBAIC0yMzM3LDcgKzIzMzYsNyBAQCBMZW5ndGggU3R5bGVSZXNvbHZlcjo6Y29udmVydFRv
RmxvYXRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBSZQogdGVtcGxh
dGUgPFN0eWxlUmVzb2x2ZXI6OlN0eWxlQXBwbGljYXRpb25QYXNzIHBhc3M+CiB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0
aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25s
eSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlIHByb3BlcnR5V2hpdGVsaXN0VHlwZSkKIHsKLSAgICBB
U1NFUlQoKHByb3BlcnR5V2hpdGVsaXN0VHlwZSAhPSBQcm9wZXJ0eVdoaXRlbGlzdFJlZ2lvbikg
fHwgbV9yZWdpb25Gb3JTdHlsaW5nKTsKKyAgICBBU1NFUlQoKHByb3BlcnR5V2hpdGVsaXN0VHlw
ZSAhPSBQcm9wZXJ0eVdoaXRlbGlzdFJlZ2lvbikgfHwgbV9zdGF0ZS5tX3JlZ2lvbkZvclN0eWxp
bmcpOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxQcm9jZXNzUnVsZShkb2N1bWVudCgpLCBydWxlLCB0aGlz
KTsKIAogICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBwcm9wZXJ0aWVzLT5wcm9wZXJ0eUNv
dW50KCk7CkBAIC0yMzgxLDcgKzIzODAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bAogICAg
ICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkp
OwogICAgICAgICAgICAgLy8gd2UgYXBwbHkgbGluZS1oZWlnaHQgbGF0ZXIKICAgICAgICAgICAg
IGVsc2UgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5TGluZUhlaWdodCkKLSAgICAgICAgICAg
ICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IGN1cnJlbnQudmFsdWUoKTsKKyAgICAgICAgICAgICAg
ICBtX3N0YXRlLm1fbGluZUhlaWdodFZhbHVlID0gY3VycmVudC52YWx1ZSgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG93UHJpb3JpdHlQcm9wZXJ0aWVzOgogICAgICAgICAg
ICAgaWYgKHByb3BlcnR5ID4gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQpAQCAtMjM5NywxOCArMjM5
NiwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3Qg
TWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBib29sCiAgICAgaWYgKHN0YXJ0SW5kZXggPT0gLTEp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3N0eWxlLT5pbnNpZGVMaW5rKCkgIT0gTm90
SW5zaWRlTGluaykgeworICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgaWYgKHN0YXRl
Lm1fc3R5bGUtPmluc2lkZUxpbmsoKSAhPSBOb3RJbnNpZGVMaW5rKSB7CiAgICAgICAgIGZvciAo
aW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKICAgICAgICAgICAgIGNv
bnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNoUmVzdWx0Lm1h
dGNoZWRQcm9wZXJ0aWVzW2ldOwogICAgICAgICAgICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9
IG1hdGNoZWRQcm9wZXJ0aWVzLmxpbmtNYXRjaFR5cGU7CiAgICAgICAgICAgICAvLyBGSVhNRTog
SXQgd291bGQgYmUgbmljZXIgdG8gcGFzcyB0aGVzZSBhcyBhcmd1bWVudHMgYnV0IHRoYXQgcmVx
dWlyZXMgY2hhbmdlcyBpbiBtYW55IHBsYWNlcy4KLSAgICAgICAgICAgIG1fYXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlID0gbGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hM
aW5rOwotICAgICAgICAgICAgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlID0gbGlu
a01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOworICAgICAgICAgICAg
c3RhdGUubV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYgU2Vs
ZWN0b3JDaGVja2VyOjpNYXRjaExpbms7CisgICAgICAgICAgICBzdGF0ZS5tX2FwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpN
YXRjaFZpc2l0ZWQ7CiAKICAgICAgICAgICAgIGFwcGx5UHJvcGVydGllczxwYXNzPihtYXRjaGVk
UHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0s
IGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlz
dFR5cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUpKTsKICAgICAgICAgfQotICAg
ICAgICBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IHRydWU7Ci0gICAgICAgIG1fYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGZhbHNlOworICAgICAgICBzdGF0ZS5tX2Fw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IHRydWU7CisgICAgICAgIHN0YXRlLm1fYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKQEAg
LTI1MTUsNiArMjUxNSw3IEBAIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVy
dGllc0NhY2hlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFJlCiB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVz
dWx0LCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQogewogICAgIEFTU0VSVChlbGVtZW50KTsKKyAg
ICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9IG1hdGNo
UmVzdWx0LmlzQ2FjaGVhYmxlID8gY29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChtYXRjaFJl
c3VsdC5tYXRjaGVkUHJvcGVydGllcy5kYXRhKCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0
aWVzLnNpemUoKSkgOiAwOwogICAgIGJvb2wgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAg
ICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0qIGNhY2hlSXRlbSA9IDA7CkBAIC0y
NTIyLDE1ICsyNTIzLDE1IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVy
dGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIC8vIFdl
IGNhbiBidWlsZCB1cCB0aGUgc3R5bGUgYnkgY29weWluZyBub24taW5oZXJpdGVkIHByb3BlcnRp
ZXMgZnJvbSBhbiBlYXJsaWVyIHN0eWxlIG9iamVjdCBidWlsdCB1c2luZyB0aGUgc2FtZSBleGFj
dAogICAgICAgICAvLyBzdHlsZSBkZWNsYXJhdGlvbnMuIFdlIHRoZW4gb25seSBuZWVkIHRvIGFw
cGx5IHRoZSBpbmhlcml0ZWQgcHJvcGVydGllcywgaWYgYW55LCBhcyB0aGVpciB2YWx1ZXMgY2Fu
IGRlcGVuZCBvbiB0aGUgCiAgICAgICAgIC8vIGVsZW1lbnQgY29udGV4dC4gVGhpcyBpcyBmYXN0
IGFuZCBzYXZlcyBtZW1vcnkgYnkgcmV1c2luZyB0aGUgc3R5bGUgZGF0YSBzdHJ1Y3R1cmVzLgot
ICAgICAgICBtX3N0eWxlLT5jb3B5Tm9uSW5oZXJpdGVkRnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0
eWxlLmdldCgpKTsKLSAgICAgICAgaWYgKG1fcGFyZW50U3R5bGUtPmluaGVyaXRlZERhdGFTaGFy
ZWQoY2FjaGVJdGVtLT5wYXJlbnRSZW5kZXJTdHlsZS5nZXQoKSkgJiYgIWlzQXRTaGFkb3dCb3Vu
ZGFyeShlbGVtZW50KSkgewotICAgICAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXR1cyA9IG1f
c3R5bGUtPmluc2lkZUxpbmsoKTsKKyAgICAgICAgc3RhdGUubV9zdHlsZS0+Y29weU5vbkluaGVy
aXRlZEZyb20oY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7CisgICAgICAgIGlmIChzdGF0
ZS5tX3BhcmVudFN0eWxlLT5pbmhlcml0ZWREYXRhU2hhcmVkKGNhY2hlSXRlbS0+cGFyZW50UmVu
ZGVyU3R5bGUuZ2V0KCkpICYmICFpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkpIHsKKyAgICAg
ICAgICAgIEVJbnNpZGVMaW5rIGxpbmtTdGF0dXMgPSBzdGF0ZS5tX3N0eWxlLT5pbnNpZGVMaW5r
KCk7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY2FjaGUgaXRlbSBwYXJlbnQgc3R5bGUgaGFzIGlk
ZW50aWNhbCBpbmhlcml0ZWQgcHJvcGVydGllcyB0byB0aGUgY3VycmVudCBwYXJlbnQgc3R5bGUg
dGhlbiB0aGUKICAgICAgICAgICAgIC8vIHJlc3VsdGluZyBzdHlsZSB3aWxsIGJlIGlkZW50aWNh
bCB0b28uIFdlIGNvcHkgdGhlIGluaGVyaXRlZCBwcm9wZXJ0aWVzIG92ZXIgZnJvbSB0aGUgY2Fj
aGUgYW5kIGFyZSBkb25lLgotICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEZyb20oY2FjaGVJ
dGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7CisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5pbmhl
cml0RnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKIAogICAgICAgICAgICAgLy8g
VW5mb3J0dW5hdGVseSB0aGUgbGluayBzdGF0dXMgaXMgdHJlYXRlZCBsaWtlIGFuIGluaGVyaXRl
ZCBwcm9wZXJ0eS4gV2UgbmVlZCB0byBleHBsaWNpdGx5IHJlc3RvcmUgaXQuCi0gICAgICAgICAg
ICBtX3N0eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0dXMpOworICAgICAgICAgICAgc3RhdGUu
bV9zdHlsZS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdHVzKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkgPSB0cnVlOyAKQEAgLTI1NDgs
MTQgKzI1NDksMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVz
KGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICAvLyBoaWdoLXByaW9y
aXR5IHByb3BlcnRpZXMgZmlyc3QsIGkuZS4sIHRob3NlIHByb3BlcnRpZXMgdGhhdCBvdGhlciBw
cm9wZXJ0aWVzIGRlcGVuZCBvbi4KICAgICAvLyBUaGUgb3JkZXIgaXMgKDEpIGhpZ2gtcHJpb3Jp
dHkgbm90IGltcG9ydGFudCwgKDIpIGhpZ2gtcHJpb3JpdHkgaW1wb3J0YW50LCAoMykgbm9ybWFs
IG5vdCBpbXBvcnRhbnQKICAgICAvLyBhbmQgKDQpIG5vcm1hbCBpbXBvcnRhbnQuCi0gICAgbV9s
aW5lSGVpZ2h0VmFsdWUgPSAwOworICAgIHN0YXRlLm1fbGluZUhlaWdodFZhbHVlID0gMDsKICAg
ICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVz
dWx0LCBmYWxzZSwgMCwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlv
cml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmly
c3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5o
ZXJpdGVkT25seSk7CiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9w
ZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1
bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7
CiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRj
aFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKIAotICAgIGlmIChjYWNo
ZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IG1fc3R5
bGUtPmVmZmVjdGl2ZVpvb20oKSkgewotICAgICAgICBtX2ZvbnREaXJ0eSA9IHRydWU7CisgICAg
aWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCkg
IT0gc3RhdGUubV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKSB7CisgICAgICAgIHN0YXRlLm1fZm9u
dERpcnR5ID0gdHJ1ZTsKICAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAgICAg
fQogCkBAIC0yNTYzLDExICsyNTY0LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRj
aGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAg
dXBkYXRlRm9udCgpOwogCiAgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1
cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplLgotICAgIGlmIChtX2xpbmVIZWlnaHRWYWx1
ZSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fbGluZUhl
aWdodFZhbHVlKTsKKyAgICBpZiAoc3RhdGUubV9saW5lSGVpZ2h0VmFsdWUpCisgICAgICAgIGFw
cGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5tX2xpbmVIZWlnaHRWYWx1
ZSk7CiAKICAgICAvLyBNYW55IHByb3BlcnRpZXMgZGVwZW5kIG9uIHRoZSBmb250LiBJZiBpdCBj
aGFuZ2VzIHdlIGp1c3QgYXBwbHkgYWxsIHByb3BlcnRpZXMuCi0gICAgaWYgKGNhY2hlSXRlbSAm
JiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5mb250RGVzY3JpcHRpb24oKSAhPSBtX3N0eWxlLT5m
b250RGVzY3JpcHRpb24oKSkKKyAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVy
U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpICE9IHN0YXRlLm1fc3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpKQogICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkgPSBmYWxzZTsKIAogICAgIC8vIE5vdyBk
byB0aGUgbm9ybWFsIHByaW9yaXR5IFVBIHByb3BlcnRpZXMuCkBAIC0yNTg1LDEzICsyNTg2LDEz
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRj
aFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJj
ZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgogICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7
CiAgICAgCi0gICAgQVNTRVJUKCFtX2ZvbnREaXJ0eSk7CisgICAgQVNTRVJUKCFzdGF0ZS5tX2Zv
bnREaXJ0eSk7CiAgICAgCiAgICAgaWYgKGNhY2hlSXRlbSB8fCAhY2FjaGVIYXNoKQogICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKCFpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSht
X2VsZW1lbnQsIG1fc3R5bGUuZ2V0KCksIG1fcGFyZW50U3R5bGUpKQorICAgIGlmICghaXNDYWNo
ZWFibGVJbk1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoc3RhdGUubV9lbGVtZW50LCBzdGF0ZS5tX3N0
eWxlLmdldCgpLCBzdGF0ZS5tX3BhcmVudFN0eWxlKSkKICAgICAgICAgcmV0dXJuOwotICAgIGFk
ZFRvTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShtX3N0eWxlLmdldCgpLCBtX3BhcmVudFN0eWxlLCBj
YWNoZUhhc2gsIG1hdGNoUmVzdWx0KTsKKyAgICBhZGRUb01hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUo
c3RhdGUubV9zdHlsZS5nZXQoKSwgc3RhdGUubV9wYXJlbnRTdHlsZSwgY2FjaGVIYXNoLCBtYXRj
aFJlc3VsdCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlUGFnZVJ1bGVzKGNvbnN0
IFN0eWxlUnVsZVBhZ2UqIHIxLCBjb25zdCBTdHlsZVJ1bGVQYWdlKiByMikKQEAgLTI2NTYsNyAr
MjY1Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hQYWdlUnVsZXNGb3JMaXN0KFZlY3Rv
cjxTdHlsZVJ1bGVQYWdlKj4mIG1hdGNoZWRSdWxlcywKIGJvb2wgU3R5bGVSZXNvbHZlcjo6aXNM
ZWZ0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdAogewogICAgIGJvb2wgaXNGaXJzdFBhZ2VMZWZ0
ID0gZmFsc2U7Ci0gICAgaWYgKCFtX3Jvb3RFbGVtZW50U3R5bGUtPmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSkKKyAgICBpZiAoIW1fc3RhdGUubV9yb290RWxlbWVudFN0eWxlLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkpCiAgICAgICAgIGlzRmlyc3RQYWdlTGVmdCA9IHRydWU7CiAKICAgICBy
ZXR1cm4gKHBhZ2VJbmRleCArIChpc0ZpcnN0UGFnZUxlZnQgPyAxIDogMCkpICUgMjsKQEAgLTI3
NTYsNyArMjc1Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUo
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBSZW5kCiB7CiAgICAgaW5pdEVsZW1l
bnQoMCk7CiAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZSgwLCBzdHlsZSk7Ci0gICAgbV9zdHlsZSA9
IHN0eWxlOworICAgIG1fc3RhdGUubV9zdHlsZSA9IHN0eWxlOwogICAgIGFwcGx5UHJvcGVydHlU
b0N1cnJlbnRTdHlsZShpZCwgdmFsdWUpOwogfQogCkBAIC0yODY4LDEwICsyODY5LDEwIEBAIGlu
bGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OmlzVmFsaWRDdWVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQpCiAvLyBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5PVCBhbGxvd2VkIHRvIHNjYWxlIHdp
dGhpbiBhIHpvb21lZCBTVkcgZG9jdW1lbnQgKGxldHRlci93b3JkLXNwYWNpbmcvZm9udC1zaXpl
KS4KIGJvb2wgU3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKCkKIHsKLSAgICByZXR1cm4g
bV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCk7CisgICAgcmV0dXJuIG1fc3Rh
dGUubV9lbGVtZW50ICYmIG1fc3RhdGUubV9lbGVtZW50LT5pc1NWR0VsZW1lbnQoKTsKIH0KIAot
c3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBMZW5ndGgmIHdvcmtpbmdMZW5n
dGgpCitzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBMZW5n
dGgmIHdvcmtpbmdMZW5ndGgpCiB7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlV2Via2l0TWluQ29udGVudCkgewogICAgICAgICB3b3JraW5nTGVuZ3RoID0g
TGVuZ3RoKE1pbkNvbnRlbnQpOwpAQCAtMjg4Myw3ICsyODg0LDcgQEAgc3RhdGljIGJvb2wgY3Jl
YXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFN0
eWxlUmVzb2wKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgd29ya2luZ0xlbmd0
aCA9IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lv
biB8IFBlcmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbiB8IEF1
dG9Db252ZXJzaW9uPihzZWxlY3Rvci0+c3R5bGUoKSwgc2VsZWN0b3ItPnJvb3RFbGVtZW50U3R5
bGUoKSwgc2VsZWN0b3ItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgd29ya2luZ0xl
bmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVy
c2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbiB8
IEF1dG9Db252ZXJzaW9uPihzdGF0ZS5tX3N0eWxlLmdldCgpLCBzdGF0ZS5tX3Jvb3RFbGVtZW50
U3R5bGUsIHN0YXRlLm1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgaWYgKHdvcmtpbmdM
ZW5ndGguaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yODkzLDEy
ICsyODk0LDEyIEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBTdHlsZVJlc29sCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja01pbk1heChDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBHcmlkVHJhY2tTaXplJiB0
cmFja1NpemUpCitzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tNaW5NYXgoQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUs
IEdyaWRUcmFja1NpemUmIHRyYWNrU2l6ZSkKIHsKICAgICBQYWlyKiBtaW5NYXhUcmFja0JyZWFk
dGggPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UGFpclZhbHVlKCk7CiAgICAgaWYgKCFtaW5NYXhUcmFj
a0JyZWFkdGgpIHsKICAgICAgICAgTGVuZ3RoIHdvcmtpbmdMZW5ndGg7Ci0gICAgICAgIGlmICgh
Y3JlYXRlR3JpZFRyYWNrQnJlYWR0aChwcmltaXRpdmVWYWx1ZSwgc2VsZWN0b3IsIHdvcmtpbmdM
ZW5ndGgpKQorICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgocHJpbWl0aXZlVmFs
dWUsIHN0YXRlLCB3b3JraW5nTGVuZ3RoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICB0cmFja1NpemUuc2V0TGVuZ3RoKHdvcmtpbmdMZW5ndGgpOwpAQCAtMjkwNywxNCAr
MjkwOCwxNCBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tNaW5NYXgoQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBTdHlsZVJlc29sdgogCiAgICAgTGVuZ3RoIG1pblRyYWNr
QnJlYWR0aDsKICAgICBMZW5ndGggbWF4VHJhY2tCcmVhZHRoOwotICAgIGlmICghY3JlYXRlR3Jp
ZFRyYWNrQnJlYWR0aChtaW5NYXhUcmFja0JyZWFkdGgtPmZpcnN0KCksIHNlbGVjdG9yLCBtaW5U
cmFja0JyZWFkdGgpIHx8ICFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKG1pbk1heFRyYWNrQnJlYWR0
aC0+c2Vjb25kKCksIHNlbGVjdG9yLCBtYXhUcmFja0JyZWFkdGgpKQorICAgIGlmICghY3JlYXRl
R3JpZFRyYWNrQnJlYWR0aChtaW5NYXhUcmFja0JyZWFkdGgtPmZpcnN0KCksIHN0YXRlLCBtaW5U
cmFja0JyZWFkdGgpIHx8ICFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKG1pbk1heFRyYWNrQnJlYWR0
aC0+c2Vjb25kKCksIHN0YXRlLCBtYXhUcmFja0JyZWFkdGgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICB0cmFja1NpemUuc2V0TWluTWF4KG1pblRyYWNrQnJlYWR0aCwgbWF4VHJhY2tC
cmVhZHRoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRy
YWNrR3JvdXAoQ1NTVmFsdWUqIHZhbHVlLCBTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgVmVjdG9y
PEdyaWRUcmFja1NpemU+JiB0cmFja1NpemVzKQorc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNr
R3JvdXAoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUs
IFZlY3RvcjxHcmlkVHJhY2tTaXplPiYgdHJhY2tTaXplcykKIHsKICAgICBpZiAoIXZhbHVlLT5p
c1ZhbHVlTGlzdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yOTI1LDcgKzI5MjYsNyBA
QCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tHcm91cChDU1NWYWx1ZSogdmFsdWUsIFN0eWxl
UmVzb2x2ZXIqIHNlbGVjdG9yLCBWZWN0bwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgIEdyaWRUcmFja1NpemUgdHJhY2tTaXplOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRU
cmFja01pbk1heChzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGN1cnJWYWx1ZSksIHNl
bGVjdG9yLCB0cmFja1NpemUpKQorICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja01pbk1heChz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGN1cnJWYWx1ZSksIHN0YXRlLCB0cmFja1Np
emUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHRyYWNrU2l6ZXMuYXBw
ZW5kKHRyYWNrU2l6ZSk7CkBAIC0yOTMzLDcgKzI5MzQsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVH
cmlkVHJhY2tHcm91cChDU1NWYWx1ZSogdmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBW
ZWN0bwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tM
aXN0KENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0cmFja1NpemVzLCBT
dHlsZVJlc29sdmVyKiBzZWxlY3RvcikKK3N0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3Qo
Q1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6ZXMsIGNvbnN0
IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKIHsKICAgICAvLyBIYW5kbGUgJ25vbmUnLgog
ICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CkBAIC0yOTQxLDcgKzI5NDIsNyBA
QCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tMaXN0KENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9y
PEdyaWRUcmFja1NpemU+JiB0cmFja1NpegogICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lOwogICAgIH0KIAotICAgIHJldHVybiBjcmVhdGVH
cmlkVHJhY2tHcm91cCh2YWx1ZSwgc2VsZWN0b3IsIHRyYWNrU2l6ZXMpOworICAgIHJldHVybiBj
cmVhdGVHcmlkVHJhY2tHcm91cCh2YWx1ZSwgc3RhdGUsIHRyYWNrU2l6ZXMpOwogfQogCiAKQEAg
LTI5ODksNyArMjk5MCw3IEBAIHN0YXRpYyBib29sIGhhc1ZhcmlhYmxlUmVmZXJlbmNlKENTU1Zh
bHVlKiB2YWx1ZSkKIAogdm9pZCBTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFibGVzKENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPHN0ZDo6cGFpcjxDU1NQcm9wZXJ0
eUlELCBTdHJpbmc+ID4mIGtub3duRXhwcmVzc2lvbnMpCiB7Ci0gICAgc3RkOjpwYWlyPENTU1By
b3BlcnR5SUQsIFN0cmluZz4gZXhwcmVzc2lvbihpZCwgdmFsdWUtPnNlcmlhbGl6ZVJlc29sdmlu
Z1ZhcmlhYmxlcygqc3R5bGUoKS0+dmFyaWFibGVzKCkpKTsKKyAgICBzdGQ6OnBhaXI8Q1NTUHJv
cGVydHlJRCwgU3RyaW5nPiBleHByZXNzaW9uKGlkLCB2YWx1ZS0+c2VyaWFsaXplUmVzb2x2aW5n
VmFyaWFibGVzKCptX3N0YXRlLm1fc3R5bGUtPnZhcmlhYmxlcygpKSk7CiAKICAgICBpZiAoa25v
d25FeHByZXNzaW9ucy5jb250YWlucyhleHByZXNzaW9uKSkKICAgICAgICAgcmV0dXJuOyAvLyBj
eWNsZSBkZXRlY3RlZC4KQEAgLTMwMjEsMTkgKzMwMjIsMjAgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB9
CiAjZW5kaWYKIAotICAgIGJvb2wgaXNJbmhlcml0ID0gbV9wYXJlbnROb2RlICYmIHZhbHVlLT5p
c0luaGVyaXRlZFZhbHVlKCk7Ci0gICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFs
VmFsdWUoKSB8fCAoIW1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsK
KyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworICAgIGJvb2wgaXNJbmhlcml0ID0gc3RhdGUu
bV9wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7CisgICAgYm9vbCBpc0lu
aXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAoIXN0YXRlLm1fcGFyZW50Tm9kZSAm
JiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKIAogICAgIEFTU0VSVCghaXNJbmhlcml0IHx8
ICFpc0luaXRpYWwpOyAvLyBpc0luaGVyaXQgLT4gIWlzSW5pdGlhbCAmJiBpc0luaXRpYWwgLT4g
IWlzSW5oZXJpdAotICAgIEFTU0VSVCghaXNJbmhlcml0IHx8IChtX3BhcmVudE5vZGUgJiYgbV9w
YXJlbnRTdHlsZSkpOyAvLyBpc0luaGVyaXQgLT4gKG1fcGFyZW50Tm9kZSAmJiBtX3BhcmVudFN0
eWxlKQorICAgIEFTU0VSVCghaXNJbmhlcml0IHx8IChzdGF0ZS5tX3BhcmVudE5vZGUgJiYgc3Rh
dGUubV9wYXJlbnRTdHlsZSkpOyAvLyBpc0luaGVyaXQgLT4gKHN0YXRlLm1fcGFyZW50Tm9kZSAm
JiBzdGF0ZS5tX3BhcmVudFN0eWxlKQogCi0gICAgaWYgKCFhcHBseVByb3BlcnR5VG9SZWd1bGFy
U3R5bGUoKSAmJiAoIWFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSB8fCAhaXNWYWxp
ZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSkgeworICAgIGlmICghc3RhdGUubV9hcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUgJiYgKCFzdGF0ZS5tX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5r
U3R5bGUgfHwgIWlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KGlkKSkpIHsKICAgICAgICAgLy8g
TGltaXQgdGhlIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBvbmx5IHRoZSBvbmVz
IGhvbm9yZWQgYnkgOnZpc2l0ZWQuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAo
aXNJbmhlcml0ICYmICFtX3BhcmVudFN0eWxlLT5oYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVy
dGllcygpICYmICFDU1NQcm9wZXJ0eTo6aXNJbmhlcml0ZWRQcm9wZXJ0eShpZCkpCi0gICAgICAg
IG1fcGFyZW50U3R5bGUtPnNldEhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCk7Cisg
ICAgaWYgKGlzSW5oZXJpdCAmJiAhc3RhdGUubV9wYXJlbnRTdHlsZS0+aGFzRXhwbGljaXRseUlu
aGVyaXRlZFByb3BlcnRpZXMoKSAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHko
aWQpKQorICAgICAgICBzdGF0ZS5tX3BhcmVudFN0eWxlLT5zZXRIYXNFeHBsaWNpdGx5SW5oZXJp
dGVkUHJvcGVydGllcygpOwogCiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCiAgICAgaWYgKGlk
ID09IENTU1Byb3BlcnR5VmFyaWFibGUpIHsKQEAgLTMwNDEsNyArMzA0Myw3IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgICAgIENTU1ZhcmlhYmxlVmFsdWUqIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Q1NT
VmFyaWFibGVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZS0+bmFtZSgp
LmlzRW1wdHkoKSk7CiAgICAgICAgIEFTU0VSVCghdmFyaWFibGUtPnZhbHVlKCkuaXNFbXB0eSgp
KTsKLSAgICAgICAgbV9zdHlsZS0+c2V0VmFyaWFibGUodmFyaWFibGUtPm5hbWUoKSwgdmFyaWFi
bGUtPnZhbHVlKCkpOworICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRWYXJpYWJsZSh2YXJpYWJs
ZS0+bmFtZSgpLCB2YXJpYWJsZS0+dmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAj
ZW5kaWYKQEAgLTMwNjAsNyArMzA2Miw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAKICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpID8gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkgOiAwOwogCi0gICAgZmxvYXQgem9v
bUZhY3RvciA9IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBmbG9hdCB6b29tRmFjdG9y
ID0gc3RhdGUubV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwogCiAgICAgLy8gV2hhdCBmb2xsb3dz
IGlzIGEgbGlzdCB0aGF0IG1hcHMgdGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIgY29ycmVz
cG9uZGluZyBmcm9udC1lbmQKICAgICAvLyBSZW5kZXJTdHlsZSB2YWx1ZXMuIFNob3J0aGFuZHMg
KGUuZy4gYm9yZGVyLCBiYWNrZ3JvdW5kKSBvY2N1ciBpbiB0aGlzIGxpc3QgYXMgd2VsbCBhbmQK
QEAgLTMwNzQsNyArMzA3Niw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAvLyBub3RlIGlz
IGEgcmVtaW5kZXIgdGhhdCBldmVudHVhbGx5ICJpbmhlcml0IiBuZWVkcyB0byBiZSBzdXBwb3J0
ZWQuCiAKICAgICAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgICAgICBtX3N0
eWxlLT5jbGVhckNvbnRlbnQoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5jbGVh
ckNvbnRlbnQoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKQEAg
LTMwODYsMTkgKzMwODgsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBDU1NWYWx1
ZSogaXRlbSA9IGkudmFsdWUoKTsKICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZUdl
bmVyYXRvclZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzR3JhZGll
bnRWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChT
dHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+
KGl0ZW0pLT5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCh0aGlzKS5nZXQoKSksIGRpZFNldCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRDb250ZW50KFN0eWxl
R2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NHcmFkaWVudFZhbHVlKj4oaXRl
bSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpLmdldCgpKSwgZGlkU2V0KTsKICAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRlLm1fc3R5bGUtPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRl
KHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CiAg
ICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9T
RVQpCiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc0ltYWdlU2V0VmFsdWUoKSkg
ewotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zy
b21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUq
PihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNl
dENvbnRlbnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGlj
X2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAg
ICAgICAgZGlkU2V0ID0gdHJ1ZTsKICNlbmRpZgogICAgICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgICAgIGlmIChpdGVtLT5pc0ltYWdlVmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRDb250ZW50KGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0
eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPihpdGVtKSksIGRpZFNldCk7Cisg
ICAgICAgICAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldENvbnRlbnQoY2FjaGVkT3JQZW5k
aW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1
ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzEw
OSwxNyArMzExMSwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBjb250ZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0
ZW0pOwogCiAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNTdHJpbmcoKSkgewot
ICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNvbnRlbnRWYWx1ZS0+Z2V0
U3RyaW5nVmFsdWUoKS5pbXBsKCksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRl
Lm1fc3R5bGUtPnNldENvbnRlbnQoY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwo
KSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNBdHRyKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IENhbiBhIG5hbWVzcGFjZSBiZSBzcGVjaWZpZWQgZm9yIGFuIGF0
dHIoZm9vKT8KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3R5bGUtPnN0eWxlVHlwZSgpID09
IE5PUFNFVURPKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0VW5pcXVlKCk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5tX3N0eWxlLT5zdHlsZVR5cGUoKSA9PSBO
T1BTRVVETykKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldFVuaXF1
ZSgpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBt
X3BhcmVudFN0eWxlLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
Lm1fcGFyZW50U3R5bGUtPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgICAgICAgICBRdWFsaWZp
ZWROYW1lIGF0dHIobnVsbEF0b20sIGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBs
KCksIG51bGxBdG9tKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSA9IG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0dHIpOwotICAgICAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUu
aW1wbCgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlID0gc3RhdGUubV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgICAg
ICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldENvbnRlbnQodmFsdWUuaXNOdWxsKCkgPyBlbXB0
eUF0b20gOiB2YWx1ZS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNl
dCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQg
dGhlIGF0dHJpYnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZQogICAgICAgICAgICAgICAgICAg
ICBtX2ZlYXR1cmVzLmF0dHJzSW5SdWxlcy5hZGQoYXR0ci5sb2NhbE5hbWUoKS5pbXBsKCkpOwpA
QCAtMzEzMCwyNCArMzEzMiwyNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgICAgICBp
ZiAobGlzdFN0eWxlSWRlbnQgIT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgICAgICAgICAg
ICAgbGlzdFN0eWxlVHlwZSA9IHN0YXRpY19jYXN0PEVMaXN0U3R5bGVUeXBlPihsaXN0U3R5bGVJ
ZGVudCAtIENTU1ZhbHVlRGlzYyk7CiAgICAgICAgICAgICAgICAgICAgIE93blB0cjxDb3VudGVy
Q29udGVudD4gY291bnRlciA9IGFkb3B0UHRyKG5ldyBDb3VudGVyQ29udGVudChjb3VudGVyVmFs
dWUtPmlkZW50aWZpZXIoKSwgbGlzdFN0eWxlVHlwZSwgY291bnRlclZhbHVlLT5zZXBhcmF0b3Io
KSkpOwotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNvdW50ZXIucmVs
ZWFzZSgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRD
b250ZW50KGNvdW50ZXIucmVsZWFzZSgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBk
aWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAoY29udGVudFZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVPcGVuUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0
eWxlLT5zZXRDb250ZW50KE9QRU5fUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRDb250ZW50KE9QRU5fUVVPVEUsIGRpZFNldCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDbG9zZVF1b3RlOgot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChDTE9TRV9RVU9URSwg
ZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldENvbnRl
bnQoQ0xPU0VfUVVPVEUsIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQg
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVOb09wZW5RdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ2xv
c2VRdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoTk9f
Q0xPU0VfUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tX3N0
eWxlLT5zZXRDb250ZW50KE5PX0NMT1NFX1FVT1RFLCBkaWRTZXQpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMzE1NywxNiArMzE1OSwxNiBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
ICghZGlkU2V0KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyQ29udGVudCgpOworICAg
ICAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPmNsZWFyQ29udGVudCgpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVF1b3RlczoKICAgICAgICAg
aWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKG1fcGFyZW50
U3R5bGUtPnF1b3RlcygpKTsKKyAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldFF1b3Rlcyhz
dGF0ZS5tX3BhcmVudFN0eWxlLT5xdW90ZXMoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0
UXVvdGVzKDApOworICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0UXVvdGVzKDApOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxp
c3QoKSkgewpAQCAtMzE4NCwxOSArMzE4NiwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAg
ICAgIFN0cmluZyBlbmRRdW90ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oc2Vj
b25kKS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAgICAgICBxdW90ZXMtPmFkZFBhaXIo
c3RkOjptYWtlX3BhaXIoc3RhcnRRdW90ZSwgZW5kUXVvdGUpKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhxdW90ZXMpOworICAgICAgICAgICAgc3RhdGUu
bV9zdHlsZS0+c2V0UXVvdGVzKHF1b3Rlcyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKSB7CiAgICAgICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpjcmVhdGUoKSk7CisgICAgICAgICAgICAgICAg
c3RhdGUubV9zdHlsZS0+c2V0UXVvdGVzKFF1b3Rlc0RhdGE6OmNyZWF0ZSgpKTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHk6IHsKICAg
ICAgICAgLy8gbGlzdCBvZiBzdHJpbmdzIGFuZCBpZHMKICAgICAgICAgaWYgKGlzSW5oZXJpdCkg
ewotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IG1f
cGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAg
ICAgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLm1fcGFy
ZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9u
IGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLm1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAg
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkocGFyZW50Rm9udERlc2Ny
aXB0aW9uLmdlbmVyaWNGYW1pbHkoKSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
RmFtaWx5KHBhcmVudEZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpKTsKICAgICAgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQocGFyZW50Rm9udERlc2NyaXB0aW9u
LmlzU3BlY2lmaWVkRm9udCgpKTsKQEAgLTMyMDYsNyArMzIwOCw3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAK
ICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewogICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGlu
aXRpYWxEZXNjID0gRm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAg
ICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUubV9zdHlsZS0+Zm9u
dERlc2NyaXB0aW9uKCk7CiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgc2l6
ZSB0byBhY2NvdW50IGZvciB0aGUgZ2VuZXJpYyBmYW1pbHkgY2hhbmdlIGZyb20gbW9ub3NwYWNl
CiAgICAgICAgICAgICAvLyB0byBub24tbW9ub3NwYWNlLgogICAgICAgICAgICAgaWYgKGZvbnRE
ZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1
bHRTaXplKCkpCkBAIC0zMjIwLDcgKzMyMjIsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogCiAgICAgICAgIGlm
ICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEZv
bnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24o
KTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLm1fc3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICBGb250RmFtaWx5JiBmaXJzdEZhbWlseSA9
IGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpOwogICAgICAgICBGb250RmFtaWx5KiBjdXJy
RmFtaWx5ID0gMDsKIApAQCAtMzI5OCwyNCArMzMwMCwyNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogLy8gc2hv
cnRoYW5kIHByb3BlcnRpZXMKICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZDoKICAgICAg
ICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJCYWNrZ3JvdW5k
TGF5ZXJzKCk7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3Io
KSk7CisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5jbGVhckJhY2tncm91bmRMYXllcnMoKTsK
KyAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihDb2xvcigpKTsK
ICAgICAgICAgfSBlbHNlIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPmlu
aGVyaXRCYWNrZ3JvdW5kTGF5ZXJzKCptX3BhcmVudFN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkp
OwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKG1fcGFyZW50U3R5bGUt
PmJhY2tncm91bmRDb2xvcigpKTsKKyAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPmluaGVyaXRC
YWNrZ3JvdW5kTGF5ZXJzKCpzdGF0ZS5tX3BhcmVudFN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkp
OworICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKHN0YXRlLm1f
cGFyZW50U3R5bGUtPmJhY2tncm91bmRDb2xvcigpKTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2s6CiAgICAgICAgIGlmIChpc0luaXRp
YWwpCi0gICAgICAgICAgICBtX3N0eWxlLT5jbGVhck1hc2tMYXllcnMoKTsKKyAgICAgICAgICAg
IHN0YXRlLm1fc3R5bGUtPmNsZWFyTWFza0xheWVycygpOwogICAgICAgICBlbHNlIGlmIChpc0lu
aGVyaXQpCi0gICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0TWFza0xheWVycygqbV9wYXJlbnRT
dHlsZS0+bWFza0xheWVycygpKTsKKyAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPmluaGVyaXRN
YXNrTGF5ZXJzKCpzdGF0ZS5tX3BhcmVudFN0eWxlLT5tYXNrTGF5ZXJzKCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnQ6CiAgICAgICAgIGlmIChpc0luaGVyaXQp
IHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3BhcmVu
dFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldExpbmVI
ZWlnaHQobV9wYXJlbnRTdHlsZS0+c3BlY2lmaWVkTGluZUhlaWdodCgpKTsKLSAgICAgICAgICAg
IG1fbGluZUhlaWdodFZhbHVlID0gMDsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBzdGF0ZS5tX3BhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAg
ICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldExpbmVIZWlnaHQoc3RhdGUubV9wYXJlbnRTdHls
ZS0+c3BlY2lmaWVkTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgIHN0YXRlLm1fbGluZUhlaWdo
dFZhbHVlID0gMDsKICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkgewogICAgICAgICAgICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpOwpAQCAtMzMyNCw4ICszMzI2LDggQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBpbml0aWFs
aXplRm9udFN0eWxlKHNldHRpbmdzKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZSkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5p
dGlhbExpbmVIZWlnaHQoKSk7Ci0gICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7Cisg
ICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0
aWFsTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgIHN0YXRlLm1fbGluZUhlaWdodFZhbHVlID0g
MDsKIAogICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICAg
ICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lzdGVtRm9udChwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSwgZm9udERlc2NyaXB0aW9uKTsKQEAgLTMzNDEsNyArMzM0Myw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50
ZXJGb250KGRvY3VtZW50KCktPnByaW50aW5nKCkgfHwgIXNldHRpbmdzLT5zY3JlZW5Gb250U3Vi
c3RpdHV0aW9uRW5hYmxlZCgpKTsKIAogICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgem9v
bSBmYWN0b3IuCi0gICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6
ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBtX3N0eWxlLmdl
dCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgZm9udERlc2NyaXB0aW9uLnNw
ZWNpZmllZFNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKKyAgICAgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRT
aXplKGRvY3VtZW50KCksIHN0YXRlLm1fc3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fi
c29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29t
UnVsZXMoKSkpOwogICAgICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ZvbnRW
YWx1ZSgpKSB7CkBAIC0zMzU5LDcgKzMzNjEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAg
dXBkYXRlRm9udCgpOwogICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRT
aXplLCBmb250LT5zaXplLmdldCgpKTsKIAotICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUg
PSBmb250LT5saW5lSGVpZ2h0LmdldCgpOworICAgICAgICAgICAgc3RhdGUubV9saW5lSGVpZ2h0
VmFsdWUgPSBmb250LT5saW5lSGVpZ2h0LmdldCgpOwogCiAgICAgICAgICAgICBhcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udEZhbWlseSwgZm9udC0+ZmFtaWx5LmdldCgpKTsKICAgICAgICAg
fQpAQCAtMzM3MSwxMSArMzM3MywxMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3hTaGFkb3c6IHsKICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewogICAgICAgICAg
ICAgaWYgKGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdykKLSAgICAgICAgICAgICAgICByZXR1
cm4gbV9zdHlsZS0+c2V0VGV4dFNoYWRvdyhtX3BhcmVudFN0eWxlLT50ZXh0U2hhZG93KCkgPyBh
ZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqbV9wYXJlbnRTdHlsZS0+dGV4dFNoYWRvdygpKSkgOiBu
dWxscHRyKTsKLSAgICAgICAgICAgIHJldHVybiBtX3N0eWxlLT5zZXRCb3hTaGFkb3cobV9wYXJl
bnRTdHlsZS0+Ym94U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqbV9wYXJlbnRT
dHlsZS0+Ym94U2hhZG93KCkpKSA6IG51bGxwdHIpOworICAgICAgICAgICAgICAgIHJldHVybiBz
dGF0ZS5tX3N0eWxlLT5zZXRUZXh0U2hhZG93KHN0YXRlLm1fcGFyZW50U3R5bGUtPnRleHRTaGFk
b3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCpzdGF0ZS5tX3BhcmVudFN0eWxlLT50ZXh0
U2hhZG93KCkpKSA6IG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRlLm1fc3R5bGUt
PnNldEJveFNoYWRvdyhzdGF0ZS5tX3BhcmVudFN0eWxlLT5ib3hTaGFkb3coKSA/IGFkb3B0UHRy
KG5ldyBTaGFkb3dEYXRhKCpzdGF0ZS5tX3BhcmVudFN0eWxlLT5ib3hTaGFkb3coKSkpIDogbnVs
bHB0cik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzSW5pdGlhbCB8fCBwcmltaXRpdmVWYWx1
ZSkgLy8gaW5pdGlhbCB8IG5vbmUKLSAgICAgICAgICAgIHJldHVybiBpZCA9PSBDU1NQcm9wZXJ0
eVRleHRTaGFkb3cgPyBtX3N0eWxlLT5zZXRUZXh0U2hhZG93KG51bGxwdHIpIDogbV9zdHlsZS0+
c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuIGlkID09IENTU1Byb3Bl
cnR5VGV4dFNoYWRvdyA/IHN0YXRlLm1fc3R5bGUtPnNldFRleHRTaGFkb3cobnVsbHB0cikgOiBz
dGF0ZS5tX3N0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiAKICAgICAgICAgaWYgKCF2YWx1
ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMzODUsMjkgKzMzODcs
MjkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICghY3VyclZhbHVlLT5pc1NoYWRvd1Zh
bHVlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBTaGFkb3dWYWx1
ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1ZhbHVlKj4oY3VyclZhbHVlKTsKLSAgICAgICAg
ICAgIGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVs
ZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICBpbnQgeSA9IGl0ZW0tPnktPmNv
bXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3Ip
OwotICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0
ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikgOiAw
OwotICAgICAgICAgICAgaW50IHNwcmVhZCA9IGl0ZW0tPnNwcmVhZCA/IGl0ZW0tPnNwcmVhZC0+
Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rv
cikgOiAwOworICAgICAgICAgICAgaW50IHggPSBpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4o
c3RhdGUubV9zdHlsZS5nZXQoKSwgc3RhdGUubV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9y
KTsKKyAgICAgICAgICAgIGludCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRl
Lm1fc3R5bGUuZ2V0KCksIHN0YXRlLm1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7Cisg
ICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVu
Z3RoPGludD4oc3RhdGUubV9zdHlsZS5nZXQoKSwgc3RhdGUubV9yb290RWxlbWVudFN0eWxlLCB6
b29tRmFjdG9yKSA6IDA7CisgICAgICAgICAgICBpbnQgc3ByZWFkID0gaXRlbS0+c3ByZWFkID8g
aXRlbS0+c3ByZWFkLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUubV9zdHlsZS5nZXQoKSwgc3Rh
dGUubV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7CiAgICAgICAgICAgICBTaGFk
b3dTdHlsZSBzaGFkb3dTdHlsZSA9IGl0ZW0tPnN0eWxlICYmIGl0ZW0tPnN0eWxlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlSW5zZXQgPyBJbnNldCA6IE5vcm1hbDsKICAgICAgICAgICAgIENvbG9y
IGNvbG9yOwogICAgICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQogICAgICAgICAgICAgICAgIGNv
bG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0KCkpOwotICAgICAg
ICAgICAgZWxzZSBpZiAobV9zdHlsZSkKLSAgICAgICAgICAgICAgICBjb2xvciA9IG1fc3R5bGUt
PmNvbG9yKCk7CisgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS5tX3N0eWxlKQorICAgICAgICAg
ICAgICAgIGNvbG9yID0gc3RhdGUubV9zdHlsZS0+Y29sb3IoKTsKIAogICAgICAgICAgICAgT3du
UHRyPFNoYWRvd0RhdGE+IHNoYWRvd0RhdGEgPSBhZG9wdFB0cihuZXcgU2hhZG93RGF0YShJbnRQ
b2ludCh4LCB5KSwgYmx1ciwgc3ByZWFkLCBzaGFkb3dTdHlsZSwgaWQgPT0gQ1NTUHJvcGVydHlX
ZWJraXRCb3hTaGFkb3csIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFy
ZW50KSk7CiAgICAgICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93KQotICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldFRleHRTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCks
IGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3Qg
ZW50cnkKKyAgICAgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRUZXh0U2hhZG93KHNoYWRv
d0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBp
cyBub3QgdGhlIGZpcnN0IGVudHJ5CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAv
LyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CisgICAgICAg
ICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgp
LCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0
IGVudHJ5CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5J
VElBTChib3hSZWZsZWN0LCBCb3hSZWZsZWN0KQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUp
IHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJveFJlZmxlY3QoUmVuZGVyU3R5bGU6OmluaXRp
YWxCb3hSZWZsZWN0KCkpOworICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0Qm94UmVmbGVj
dChSZW5kZXJTdHlsZTo6aW5pdGlhbEJveFJlZmxlY3QoKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIApAQCAtMzQxOCwxMyArMzQyMCwxMyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiByZWZsZWN0aW9uID0gU3R5bGVSZWZsZWN0aW9uOjpj
cmVhdGUoKTsKICAgICAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0aW9uKCpyZWZsZWN0VmFsdWUt
PmRpcmVjdGlvbigpKTsKICAgICAgICAgaWYgKHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCkpCi0gICAg
ICAgICAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVjdFZhbHVlLT5vZmZzZXQoKS0+Y29u
dmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8
IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21G
YWN0b3IpKTsKKyAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChyZWZsZWN0VmFsdWUt
Pm9mZnNldCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNl
bnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0YXRlLm1fc3R5bGUuZ2V0KCks
IHN0YXRlLm1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikpOwogICAgICAgICBOaW5lUGll
Y2VJbWFnZSBtYXNrOwogICAgICAgICBtYXNrLnNldE1hc2tEZWZhdWx0cygpOwogICAgICAgICBt
X3N0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUtPm1hc2soKSwgbWFz
ayk7CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2sobWFzayk7CiAKLSAgICAgICAgbV9zdHls
ZS0+c2V0Qm94UmVmbGVjdChyZWZsZWN0aW9uLnJlbGVhc2UoKSk7CisgICAgICAgIHN0YXRlLm1f
c3R5bGUtPnNldEJveFJlZmxlY3QocmVmbGVjdGlvbi5yZWxlYXNlKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlTcmM6IC8vIE9ubHkgdXNlZCBpbiBAZm9u
dC1mYWNlIHJ1bGVzLgpAQCAtMzQzMywyOSArMzQzNSwyOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGU6CiAgICAgICAg
IGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1bGVDb2xv
cihtX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKS5pc1ZhbGlkKCkgPyBtX3BhcmVudFN0
eWxlLT5jb2x1bW5SdWxlQ29sb3IoKSA6IG1fcGFyZW50U3R5bGUtPmNvbG9yKCkpOwotICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVsZVN0eWxlKG1fcGFyZW50U3R5bGUtPmNvbHVtblJ1
bGVTdHlsZSgpKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1bGVXaWR0aChtX3Bh
cmVudFN0eWxlLT5jb2x1bW5SdWxlV2lkdGgoKSk7CisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxl
LT5zZXRDb2x1bW5SdWxlQ29sb3Ioc3RhdGUubV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9y
KCkuaXNWYWxpZCgpID8gc3RhdGUubV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkgOiBz
dGF0ZS5tX3BhcmVudFN0eWxlLT5jb2xvcigpKTsKKyAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUt
PnNldENvbHVtblJ1bGVTdHlsZShzdGF0ZS5tX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlU3R5bGUo
KSk7CisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRDb2x1bW5SdWxlV2lkdGgoc3RhdGUu
bV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZVdpZHRoKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGlz
SW5pdGlhbCkKLSAgICAgICAgICAgIG1fc3R5bGUtPnJlc2V0Q29sdW1uUnVsZSgpOworICAgICAg
ICAgICAgc3RhdGUubV9zdHlsZS0+cmVzZXRDb2x1bW5SdWxlKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZToKICAgICAgICAgaWYgKCFpc0luaGVy
aXQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVEaXJl
Y3Rpb24obV9wYXJlbnRTdHlsZS0+bWFycXVlZURpcmVjdGlvbigpKTsKLSAgICAgICAgbV9zdHls
ZS0+c2V0TWFycXVlZUluY3JlbWVudChtX3BhcmVudFN0eWxlLT5tYXJxdWVlSW5jcmVtZW50KCkp
OwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQobV9wYXJlbnRTdHlsZS0+bWFycXVl
ZVNwZWVkKCkpOwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KG1fcGFyZW50
U3R5bGUtPm1hcnF1ZWVMb29wQ291bnQoKSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVC
ZWhhdmlvcihtX3BhcmVudFN0eWxlLT5tYXJxdWVlQmVoYXZpb3IoKSk7CisgICAgICAgIHN0YXRl
Lm1fc3R5bGUtPnNldE1hcnF1ZWVEaXJlY3Rpb24oc3RhdGUubV9wYXJlbnRTdHlsZS0+bWFycXVl
ZURpcmVjdGlvbigpKTsKKyAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVu
dChzdGF0ZS5tX3BhcmVudFN0eWxlLT5tYXJxdWVlSW5jcmVtZW50KCkpOworICAgICAgICBzdGF0
ZS5tX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoc3RhdGUubV9wYXJlbnRTdHlsZS0+bWFycXVlZVNw
ZWVkKCkpOworICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KHN0YXRl
Lm1fcGFyZW50U3R5bGUtPm1hcnF1ZWVMb29wQ291bnQoKSk7CisgICAgICAgIHN0YXRlLm1fc3R5
bGUtPnNldE1hcnF1ZWVCZWhhdmlvcihzdGF0ZS5tX3BhcmVudFN0eWxlLT5tYXJxdWVlQmVoYXZp
b3IoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVl
ZVJlcGV0aXRpb246IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFycXVl
ZUxvb3BDb3VudCwgTWFycXVlZUxvb3BDb3VudCkKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1
ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlSW5maW5pdGUpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJx
dWVlTG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCisgICAgICAgICAg
ICBzdGF0ZS5tX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVw
ZWF0IGZvcmV2ZXIuCiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigp
KQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1
ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRNYXJxdWVl
TG9vcENvdW50KHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVNwZWVkOiB7CkBAIC0z
NDY1LDE5ICszNDY3LDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGlmIChpbnQgaWRlbnQgPSBw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAgc3dpdGNoIChpZGVudCkg
ewogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNsb3c6Ci0gICAgICAgICAgICAgICAgbV9zdHls
ZS0+c2V0TWFycXVlZVNwZWVkKDUwMCk7IC8vIDUwMCBtc2VjLgorICAgICAgICAgICAgICAgIHN0
YXRlLm1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCg1MDApOyAvLyA1MDAgbXNlYy4KICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKDg1KTsgLy8gODVtc2VjLiBUaGUgV2lu
SUUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRNYXJxdWVlU3Bl
ZWQoODUpOyAvLyA4NW1zZWMuIFRoZSBXaW5JRSBkZWZhdWx0LgogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhc3Q6Ci0gICAgICAgICAgICAgICAgbV9z
dHlsZS0+c2V0TWFycXVlZVNwZWVkKDEwKTsgLy8gMTBtc2VjLiBTdXBlciBmYXN0LgorICAgICAg
ICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCgxMCk7IC8vIDEwbXNlYy4g
U3VwZXIgZmFzdC4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNUaW1lKCkpCi0gICAgICAgICAgICBtX3N0
eWxlLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGludCwgQ1NT
UHJpbWl0aXZlVmFsdWU6Ok1pbGxpc2Vjb25kcz4oKSk7CisgICAgICAgICAgICBzdGF0ZS5tX3N0
eWxlLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGludCwgQ1NT
UHJpbWl0aXZlVmFsdWU6Ok1pbGxpc2Vjb25kcz4oKSk7CiAgICAgICAgIGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLT5pc051bWJlcigpKSAvLyBGb3Igc2Nyb2xsYW1vdW50IHN1cHBvcnQuCi0gICAg
ICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmdldEludFZh
bHVlKCkpOworICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKHByaW1p
dGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZUluY3JlbWVudDogewpAQCAtMzQ4NywxOSArMzQ4
OSwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsK
ICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoKLSAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgxLCBGaXhlZCkpOyAvLyAxcHguCisgICAgICAg
ICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMSwgRml4
ZWQpKTsgLy8gMXB4LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVt
ZW50KExlbmd0aCg2LCBGaXhlZCkpOyAvLyA2cHguIFRoZSBXaW5JRSBkZWZhdWx0LgorICAgICAg
ICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDYsIEZp
eGVkKSk7IC8vIDZweC4gVGhlIFdpbklFIGRlZmF1bHQuCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2U6Ci0gICAgICAgICAgICAgICAgbV9zdHls
ZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCisgICAg
ICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYs
IEZpeGVkKSk7IC8vIDM2cHguCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMZW5ndGggbWFycXVlZUxlbmd0aCA9IGNv
bnZlcnRUb0ludExlbmd0aChwcmltaXRpdmVWYWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0
eWxlKTsKKyAgICAgICAgICAgIExlbmd0aCBtYXJxdWVlTGVuZ3RoID0gY29udmVydFRvSW50TGVu
Z3RoKHByaW1pdGl2ZVZhbHVlLCBzdGF0ZS5tX3N0eWxlLmdldCgpLCBzdGF0ZS5tX3Jvb3RFbGVt
ZW50U3R5bGUpOwogICAgICAgICAgICAgaWYgKCFtYXJxdWVlTGVuZ3RoLmlzVW5kZWZpbmVkKCkp
Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChtYXJxdWVlTGVu
Z3RoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50
KG1hcnF1ZWVMZW5ndGgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0z
NTA4LDExICszNTEwLDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFs
dWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRMb2NhbGUo
bnVsbEF0b20pOworICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0TG9jYWxlKG51bGxBdG9t
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TG9jYWxlKHByaW1pdGl2
ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24obV9z
dHlsZS0+bG9jYWxlKCkpKTsKKyAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldExvY2FsZShw
cmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CisgICAgICAgIEZvbnREZXNjcmlwdGlv
biBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5tX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNjcmlwdChsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250
U2VsZWN0aW9uKHN0YXRlLm1fc3R5bGUtPmxvY2FsZSgpKSk7CiAgICAgICAgIHNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzUz
MSw3ICszNTMzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAg
ICAgICAgICBtX3N0eWxlLT5zZXREYXNoYm9hcmRSZWdpb25zKFJlbmRlclN0eWxlOjpub25lRGFz
aGJvYXJkUmVnaW9ucygpKTsKKyAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldERhc2hib2Fy
ZFJlZ2lvbnMoUmVuZGVyU3R5bGU6Om5vbmVEYXNoYm9hcmRSZWdpb25zKCkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM1NDEsMTAgKzM1NDMsMTAgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKIAogICAgICAgICBEYXNoYm9hcmRSZWdpb24qIGZpcnN0ID0gcmVnaW9uOwogICAgICAgICB3
aGlsZSAocmVnaW9uKSB7Ci0gICAgICAgICAgICBMZW5ndGggdG9wID0gY29udmVydFRvSW50TGVu
Z3RoKHJlZ2lvbi0+dG9wKCksIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAgICAg
ICAgICBMZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5yaWdodCgpLCBz
dHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOwotICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9
IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmJvdHRvbSgpLCBzdHlsZSgpLCBtX3Jvb3RFbGVt
ZW50U3R5bGUpOwotICAgICAgICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9JbnRMZW5ndGgo
cmVnaW9uLT5sZWZ0KCksIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7CisgICAgICAgICAg
ICBMZW5ndGggdG9wID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+dG9wKCksIHN0YXRlLm1f
c3R5bGUsIHN0YXRlLm1fcm9vdEVsZW1lbnRTdHlsZSk7CisgICAgICAgICAgICBMZW5ndGggcmln
aHQgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5yaWdodCgpLCBzdGF0ZS5tX3N0eWxlLCBz
dGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUpOworICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNv
bnZlcnRUb0ludExlbmd0aChyZWdpb24tPmJvdHRvbSgpLCBzdGF0ZS5tX3N0eWxlLCBzdGF0ZS5t
X3Jvb3RFbGVtZW50U3R5bGUpOworICAgICAgICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9J
bnRMZW5ndGgocmVnaW9uLT5sZWZ0KCksIHN0YXRlLm1fc3R5bGUsIHN0YXRlLm1fcm9vdEVsZW1l
bnRTdHlsZSk7CiAKICAgICAgICAgICAgIGlmICh0b3AuaXNVbmRlZmluZWQoKSkKICAgICAgICAg
ICAgICAgICB0b3AgPSBMZW5ndGgoKTsKQEAgLTM1NTYsMTMgKzM1NTgsMTMgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICAgICAgICAgICAgICBsZWZ0ID0gTGVuZ3RoKCk7CiAKICAgICAgICAgICAgIGlmIChy
ZWdpb24tPm1faXNDaXJjbGUpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0RGFzaGJvYXJk
UmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpDaXJjbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9w
LCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwor
ICAgICAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURh
c2hib2FyZFJlZ2lvbjo6Q2lyY2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRv
bSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKICAgICAgICAgICAgIGVs
c2UgaWYgKHJlZ2lvbi0+bV9pc1JlY3RhbmdsZSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246OlJlY3RhbmdsZSwgcmVnaW9u
LT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZh
bHNlIDogdHJ1ZSk7CisgICAgICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0RGFzaGJvYXJk
UmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpSZWN0YW5nbGUsIHJlZ2lvbi0+bV9sYWJlbCwg
dG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUp
OwogICAgICAgICAgICAgcmVnaW9uID0gcmVnaW9uLT5tX25leHQuZ2V0KCk7CiAgICAgICAgIH0K
IAotICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnNldEhhc0Fubm90YXRlZFJlZ2lvbnMo
dHJ1ZSk7CisgICAgICAgIHN0YXRlLm1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0SGFzQW5ub3Rh
dGVkUmVnaW9ucyh0cnVlKTsKIAogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzU3MSw4ICsz
NTczLDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QXBwUmVnaW9u
OiB7CiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUgfHwgIXByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXREcmFnZ2Fi
bGVSZWdpb25Nb2RlKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRHJhZyA/
IERyYWdnYWJsZVJlZ2lvbkRyYWcgOiBEcmFnZ2FibGVSZWdpb25Ob0RyYWcpOwotICAgICAgICBt
X2VsZW1lbnQtPmRvY3VtZW50KCktPnNldEhhc0Fubm90YXRlZFJlZ2lvbnModHJ1ZSk7CisgICAg
ICAgIHN0YXRlLm1fc3R5bGUtPnNldERyYWdnYWJsZVJlZ2lvbk1vZGUocHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVEcmFnID8gRHJhZ2dhYmxlUmVnaW9uRHJhZyA6IERyYWdn
YWJsZVJlZ2lvbk5vRHJhZyk7CisgICAgICAgIHN0YXRlLm1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+
c2V0SGFzQW5ub3RhdGVkUmVnaW9ucyh0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNl
bmRpZgpAQCAtMzU4OCwyMSArMzU5MCwyMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAg
IHJlc3VsdCAqPSAzOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVUaGljaykKICAgICAgICAgICAgICAgICByZXN1bHQgKj0gNTsKLSAg
ICAgICAgICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShyZXN1bHQsIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9y
b290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHdpZHRoID0gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKS0+
Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUubV9zdHlsZS5nZXQoKSwgc3RhdGUubV9yb290RWxl
bWVudFN0eWxlLCB6b29tRmFjdG9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB3aWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21w
dXRlTGVuZ3RoPGZsb2F0PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3Ip
OworICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9h
dD4oc3RhdGUubV9zdHlsZS5nZXQoKSwgc3RhdGUubV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFj
dG9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIG1fc3R5bGUtPnNl
dFRleHRTdHJva2VXaWR0aCh3aWR0aCk7CisgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldFRleHRT
dHJva2VXaWR0aCh3aWR0aCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybTogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5J
VElBTCh0cmFuc2Zvcm0sIFRyYW5zZm9ybSk7CiAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMg
b3BlcmF0aW9uczsKLSAgICAgICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZSwgc3R5
bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKTsKLSAgICAgICAgbV9zdHlsZS0+
c2V0VHJhbnNmb3JtKG9wZXJhdGlvbnMpOworICAgICAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRp
b25zKHZhbHVlLCBzdGF0ZS5tX3N0eWxlLmdldCgpLCBzdGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUs
IG9wZXJhdGlvbnMpOworICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRUcmFuc2Zvcm0ob3BlcmF0
aW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFBlcnNwZWN0aXZlOiB7CkBAIC0zNjEyLDM0ICszNjE0LDM0IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UGVyc3BlY3RpdmUo
MCk7CisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRQZXJzcGVjdGl2ZSgwKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGZsb2F0IHBlcnNwZWN0aXZlVmFs
dWU7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkKLSAgICAgICAgICAg
IHBlcnNwZWN0aXZlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4o
c3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHBl
cnNwZWN0aXZlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3Rh
dGUubV9zdHlsZS5nZXQoKSwgc3RhdGUubV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsK
ICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIHsKICAgICAgICAg
ICAgIC8vIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0cmVhdCB2YWx1ZWxlc3MgbnVtYmVy
cyBhcyBweC4KLSAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BYKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVu
dFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUubV9z
dHlsZS5nZXQoKSwgc3RhdGUubV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKHBlcnNwZWN0aXZl
VmFsdWUgPj0gMC4wZikKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFBlcnNwZWN0aXZlKHBlcnNw
ZWN0aXZlVmFsdWUpOworICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0UGVyc3BlY3RpdmUo
cGVyc3BlY3RpdmVWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEFuaW1hdGlvbjoKICAgICAgICAgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAg
ICAgIG1fc3R5bGUtPmNsZWFyQW5pbWF0aW9ucygpOworICAgICAgICAgICAgc3RhdGUubV9zdHls
ZS0+Y2xlYXJBbmltYXRpb25zKCk7CiAgICAgICAgIGVsc2UgaWYgKGlzSW5oZXJpdCkKLSAgICAg
ICAgICAgIG1fc3R5bGUtPmluaGVyaXRBbmltYXRpb25zKG1fcGFyZW50U3R5bGUtPmFuaW1hdGlv
bnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5pbmhlcml0QW5pbWF0aW9ucyhzdGF0
ZS5tX3BhcmVudFN0eWxlLT5hbmltYXRpb25zKCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246CiAgICAgICAgIGlmIChpc0luaXRpYWwpCi0g
ICAgICAgICAgICBtX3N0eWxlLT5jbGVhclRyYW5zaXRpb25zKCk7CisgICAgICAgICAgICBzdGF0
ZS5tX3N0eWxlLT5jbGVhclRyYW5zaXRpb25zKCk7CiAgICAgICAgIGVsc2UgaWYgKGlzSW5oZXJp
dCkKLSAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRUcmFuc2l0aW9ucyhtX3BhcmVudFN0eWxl
LT50cmFuc2l0aW9ucygpKTsKKyAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPmluaGVyaXRUcmFu
c2l0aW9ucyhzdGF0ZS5tX3BhcmVudFN0eWxlLT50cmFuc2l0aW9ucygpKTsKICAgICAgICAgcmV0
dXJuOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFRhcEhpZ2hsaWdodENvbG9yOiB7CkBAIC0zNjQ4LDcgKzM2NTAsNyBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgQ29sb3IgY29sID0gY29sb3JGcm9tUHJpbWl0
aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUpOwotICAgICAgICBtX3N0eWxlLT5zZXRUYXBIaWdobGln
aHRDb2xvcihjb2wpOworICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRUYXBIaWdobGlnaHRDb2xv
cihjb2wpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zNjU3LDcgKzM2NTks
NyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh1c2VU
b3VjaE92ZXJmbG93U2Nyb2xsaW5nLCBVc2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKTsKICAgICAg
ICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBtX3N0
eWxlLT5zZXRVc2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlVG91Y2gpOworICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRVc2VUb3Vj
aE92ZXJmbG93U2Nyb2xsaW5nKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
VG91Y2gpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zNzAwLDcgKzM3MDIs
NyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dpY2FsV2lk
dGg6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxIZWlnaHQ6CiAgICAgewot
ICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rp
b25Bd2FyZVByb3BlcnR5KGlkLCBtX3N0eWxlLT5kaXJlY3Rpb24oKSwgbV9zdHlsZS0+d3JpdGlu
Z01vZGUoKSk7CisgICAgICAgIENTU1Byb3BlcnR5SUQgbmV3SWQgPSBDU1NQcm9wZXJ0eTo6cmVz
b2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoaWQsIHN0YXRlLm1fc3R5bGUtPmRpcmVjdGlvbigp
LCBzdGF0ZS5tX3N0eWxlLT53cml0aW5nTW9kZSgpKTsKICAgICAgICAgQVNTRVJUKG5ld0lkICE9
IGlkKTsKICAgICAgICAgcmV0dXJuIGFwcGx5UHJvcGVydHkobmV3SWQsIHZhbHVlKTsKICAgICB9
CkBAIC0zNzM1LDkgKzM3MzcsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgc2V0V3JpdGlu
Z01vZGUoKnByaW1pdGl2ZVZhbHVlKTsKIAogICAgICAgICAvLyBGSVhNRTogSXQgaXMgbm90IG9r
IHRvIG1vZGlmeSBkb2N1bWVudCBzdGF0ZSB3aGlsZSBhcHBseWluZyBzdHlsZS4KLSAgICAgICAg
aWYgKG1fZWxlbWVudCAmJiBtX2VsZW1lbnQgPT0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kb2N1
bWVudEVsZW1lbnQoKSkKLSAgICAgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0V3Jp
dGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCh0cnVlKTsKLQorICAgICAgICBpZiAoc3RhdGUu
bV9lbGVtZW50ICYmIHN0YXRlLm1fZWxlbWVudCA9PSBzdGF0ZS5tX2VsZW1lbnQtPmRvY3VtZW50
KCktPmRvY3VtZW50RWxlbWVudCgpKQorICAgICAgICAgICAgc3RhdGUubV9lbGVtZW50LT5kb2N1
bWVudCgpLT5zZXRXcml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50KHRydWUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC0zNzUzLDcgKzM3NTQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQm94Q29udGFpbjogewogICAgICAgICBIQU5ETEVf
SU5IRVJJVF9BTkRfSU5JVElBTChsaW5lQm94Q29udGFpbiwgTGluZUJveENvbnRhaW4pCiAgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZSAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBD
U1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldExpbmVCb3hDb250YWluKExp
bmVCb3hDb250YWluTm9uZSk7CisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRMaW5lQm94
Q29udGFpbihMaW5lQm94Q29udGFpbk5vbmUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKQEAgLTM3NjEsMjEgKzM3NjIsMjEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICBDU1NMaW5lQm94Q29udGFpblZhbHVlKiBsaW5lQm94Q29udGFpblZh
bHVlID0gc3RhdGljX2Nhc3Q8Q1NTTGluZUJveENvbnRhaW5WYWx1ZSo+KHZhbHVlKTsKLSAgICAg
ICAgbV9zdHlsZS0+c2V0TGluZUJveENvbnRhaW4obGluZUJveENvbnRhaW5WYWx1ZS0+dmFsdWUo
KSk7CisgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldExpbmVCb3hDb250YWluKGxpbmVCb3hDb250
YWluVmFsdWUtPnZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gQ1NT
IEZvbnRzIE1vZHVsZSBMZXZlbCAzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRGZWF0
dXJlU2V0dGluZ3M6IHsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKSB7Ci0gICAgICAgICAgICBzZXRGb250
RGVzY3JpcHRpb24obV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkubWFrZU5vcm1hbEZlYXR1cmVT
ZXR0aW5ncygpKTsKKyAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihzdGF0ZS5tX3N0eWxl
LT5mb250RGVzY3JpcHRpb24oKS5tYWtlTm9ybWFsRmVhdHVyZVNldHRpbmdzKCkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxp
c3QoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnRE
ZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5tX3N0eWxlLT5mb250RGVzY3JpcHRp
b24oKTsKICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVM
aXN0Kj4odmFsdWUpOwogICAgICAgICBSZWZQdHI8Rm9udEZlYXR1cmVTZXR0aW5ncz4gc2V0dGlu
Z3MgPSBGb250RmVhdHVyZVNldHRpbmdzOjpjcmVhdGUoKTsKICAgICAgICAgaW50IGxlbiA9IGxp
c3QtPmxlbmd0aCgpOwpAQCAtMzc5NSwyMyArMzc5NiwyMyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRGaWx0ZXI6IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5E
X0lOSVRJQUwoZmlsdGVyLCBGaWx0ZXIpOwogICAgICAgICBGaWx0ZXJPcGVyYXRpb25zIG9wZXJh
dGlvbnM7Ci0gICAgICAgIGlmIChjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKHZhbHVlLCBzdHlsZSgp
LCBtX3Jvb3RFbGVtZW50U3R5bGUsIG9wZXJhdGlvbnMpKQotICAgICAgICAgICAgbV9zdHlsZS0+
c2V0RmlsdGVyKG9wZXJhdGlvbnMpOworICAgICAgICBpZiAoY3JlYXRlRmlsdGVyT3BlcmF0aW9u
cyh2YWx1ZSwgc3RhdGUubV9zdHlsZS5nZXQoKSwgc3RhdGUubV9yb290RWxlbWVudFN0eWxlLCBv
cGVyYXRpb25zKSkKKyAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldEZpbHRlcihvcGVyYXRp
b25zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRHcmlkQ29sdW1uczogewogICAgICAgICBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4gdHJh
Y2tTaXplczsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tMaXN0KHZhbHVlLCB0cmFja1Np
emVzLCB0aGlzKSkKKyAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tMaXN0KHZhbHVlLCB0cmFj
a1NpemVzLCBzdGF0ZSkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5bGUtPnNl
dEdyaWRDb2x1bW5zKHRyYWNrU2l6ZXMpOworICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRHcmlk
Q29sdW1ucyh0cmFja1NpemVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0R3JpZFJvd3M6IHsKICAgICAgICAgVmVjdG9yPEdyaWRUcmFja1NpemU+
IHRyYWNrU2l6ZXM7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwgdHJh
Y2tTaXplcywgdGhpcykpCisgICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwg
dHJhY2tTaXplcywgc3RhdGUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxl
LT5zZXRHcmlkUm93cyh0cmFja1NpemVzKTsKKyAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0R3Jp
ZFJvd3ModHJhY2tTaXplcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM4MTksMTQg
KzM4MjAsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgR3JpZFBvc2l0aW9uIGNvbHVtbjsKICAg
ICAgICAgaWYgKCFjcmVhdGVHcmlkUG9zaXRpb24odmFsdWUsIGNvbHVtbikpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIG1fc3R5bGUtPnNldEdyaWRJdGVtQ29sdW1uKGNvbHVtbik7Cisg
ICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldEdyaWRJdGVtQ29sdW1uKGNvbHVtbik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRSb3c6IHsKICAg
ICAgICAgR3JpZFBvc2l0aW9uIHJvdzsKICAgICAgICAgaWYgKCFjcmVhdGVHcmlkUG9zaXRpb24o
dmFsdWUsIHJvdykpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5bGUtPnNldEdy
aWRJdGVtUm93KHJvdyk7CisgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldEdyaWRJdGVtUm93KHJv
dyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gVGhlc2UgcHJvcGVydGllcyBhcmUg
aW1wbGVtZW50ZWQgaW4gdGhlIFN0eWxlQnVpbGRlciBsb29rdXAgdGFibGUuCkBAIC00MTQ4LDE0
ICs0MTQ5LDE0IEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y2FjaGVk
T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvCiB7CiAgICAgUmVmUHRyPFN0eWxl
SW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKCk7CiAgICAgaWYgKGlt
YWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICBtX3BlbmRpbmdJbWFnZVBy
b3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIG1fc3RhdGUubV9wZW5kaW5n
SW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOwogICAgIHJldHVybiBpbWFnZS5y
ZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Z2Vu
ZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdl
R2VuZXJhdG9yVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNQZW5kaW5nKCkpIHsK
LSAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOwor
ICAgICAgICBtX3N0YXRlLm1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHksIHZh
bHVlKTsKICAgICAgICAgcmV0dXJuIFN0eWxlUGVuZGluZ0ltYWdlOjpjcmVhdGUodmFsdWUpOwog
ICAgIH0KICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKQEAg
LTQxNjYsNyArNDE2Nyw3IEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6
c2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVyCiB7CiAgICAgUmVmUHRy
PFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3Vt
ZW50KCkpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAg
ICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAg
ICBtX3N0YXRlLm1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsK
ICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogI2VuZGlmCkBAIC00MTc1LDE4ICs0MTc2
LDIwIEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5k
aW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvCiB7CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+
IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKGRvY3VtZW50KCkpOwogICAgIGlm
IChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9wZW5kaW5nSW1h
Z2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBtX3N0YXRlLm1fcGVu
ZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1h
Z2UucmVsZWFzZSgpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVB
ZGp1c3QoKQogewotICAgIGlmIChtX3N0eWxlLT50ZXh0U2l6ZUFkanVzdCgpKQorICAgIFJlbmRl
clN0eWxlKiBzdHlsZSA9IG1fc3RhdGUubV9zdHlsZS5nZXQoKTsKKworICAgIGlmIChzdHlsZS0+
dGV4dFNpemVBZGp1c3QoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRm9udERlc2NyaXB0aW9u
IG5ld0ZvbnREZXNjcmlwdGlvbihtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKSk7CisgICAgRm9u
dERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkp
OwogICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUobmV3Rm9udERlc2NyaXB0
aW9uLnNwZWNpZmllZFNpemUoKSk7Ci0gICAgbV9zdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5l
d0ZvbnREZXNjcmlwdGlvbik7CisgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250
RGVzY3JpcHRpb24pOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5n
ZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKQEAgLTQyNTEs
MTUgKzQyNTQsMTUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKFNl
dHRpbmdzKiBzZXR0aW5ncykKICAgICB9CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRT
aXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7CiAgICAgc2V0Rm9udFNp
emUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFs
dWVNZWRpdW0sIGZhbHNlKSk7Ci0gICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHls
ZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0gICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOworICAg
IG1fc3RhdGUubV9zdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVI
ZWlnaHQoKSk7CisgICAgbV9zdGF0ZS5tX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CiAgICAgc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6
c2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUp
CiB7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7Ci0gICAgZm9u
dERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVk
U2l6ZShkb2N1bWVudCgpLCBtX3N0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0
ZVNpemUoKSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKKyAgICBmb250RGVzY3JpcHRpb24u
c2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50
KCksIG1fc3RhdGUubV9zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXpl
KCksIHNpemUsIHVzZVNWR1pvb21SdWxlcygpKSk7CiB9CiAKIGZsb2F0IFN0eWxlUmVzb2x2ZXI6
OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiBkb2N1bWVudCwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXpl
LCBib29sIHVzZVNWR1pvb21SdWxlcykKQEAgLTQ0NjIsMjAgKzQ0NjUsMjEgQEAgQ29sb3IgU3R5
bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHZh
bHVlLCBib29sIGZvclYKICAgICBpZiAodmFsdWUtPmlzUkdCQ29sb3IoKSkKICAgICAgICAgcmV0
dXJuIENvbG9yKHZhbHVlLT5nZXRSR0JBMzJWYWx1ZSgpKTsKIAorICAgIGNvbnN0IFN0YXRlJiBz
dGF0ZSA9IG1fc3RhdGU7CiAgICAgaW50IGlkZW50ID0gdmFsdWUtPmdldElkZW50KCk7CiAgICAg
c3dpdGNoIChpZGVudCkgewogICAgIGNhc2UgMDoKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAg
ICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFRleHQ6Ci0gICAgICAgIHJldHVybiBtX2VsZW1lbnQtPmRv
Y3VtZW50KCktPnRleHRDb2xvcigpOworICAgICAgICByZXR1cm4gc3RhdGUubV9lbGVtZW50LT5k
b2N1bWVudCgpLT50ZXh0Q29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0TGluazoKLSAg
ICAgICAgcmV0dXJuIChtX2VsZW1lbnQtPmlzTGluaygpICYmIGZvclZpc2l0ZWRMaW5rKSA/IG1f
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtDb2xvcigpIDogbV9lbGVtZW50LT5kb2N1
bWVudCgpLT5saW5rQ29sb3IoKTsKKyAgICAgICAgcmV0dXJuIChzdGF0ZS5tX2VsZW1lbnQtPmlz
TGluaygpICYmIGZvclZpc2l0ZWRMaW5rKSA/IHN0YXRlLm1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+
dmlzaXRlZExpbmtDb2xvcigpIDogc3RhdGUubV9lbGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29s
b3IoKTsKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0QWN0aXZlbGluazoKLSAgICAgICAgcmV0dXJu
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+YWN0aXZlTGlua0NvbG9yKCk7CisgICAgICAgIHJldHVy
biBzdGF0ZS5tX2VsZW1lbnQtPmRvY3VtZW50KCktPmFjdGl2ZUxpbmtDb2xvcigpOwogICAgIGNh
c2UgQ1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvcjoKICAgICAgICAgcmV0dXJuIFJlbmRlclRo
ZW1lOjpmb2N1c1JpbmdDb2xvcigpOwogICAgIGNhc2UgQ1NTVmFsdWVDdXJyZW50Y29sb3I6Ci0g
ICAgICAgIHJldHVybiBtX3N0eWxlLT5jb2xvcigpOworICAgICAgICByZXR1cm4gc3RhdGUubV9z
dHlsZS0+Y29sb3IoKTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gY29sb3JGb3JDU1NW
YWx1ZShpZGVudCk7CiAgICAgfQpAQCAtNDgwOSwxNyArNDgxMywxOCBAQCBzdGF0aWMgRmlsdGVy
T3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGZpbHRlck9wZXJhdGlvbkZvclR5cGUoV2ViS2l0Q1NT
RmlsdGVyVmFsdQogI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKIHZvaWQg
U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTVkdEb2N1bWVudHMoKQogewotICAgIGlmICghbV9z
dHlsZS0+aGFzRmlsdGVyKCkgfHwgbV9wZW5kaW5nU1ZHRG9jdW1lbnRzLmlzRW1wdHkoKSkKKyAg
ICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworICAgIGlmICghc3RhdGUubV9zdHlsZS0+aGFzRmls
dGVyKCkgfHwgc3RhdGUubV9wZW5kaW5nU1ZHRG9jdW1lbnRzLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVy
ID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwotICAgIFZl
Y3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJPcGVyYXRpb25zID0gbV9zdHls
ZS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKKyAgICBDYWNoZWRSZXNvdXJjZUxvYWRl
ciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBzdGF0ZS5tX2VsZW1lbnQtPmRvY3VtZW50KCktPmNh
Y2hlZFJlc291cmNlTG9hZGVyKCk7CisgICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+
ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBzdGF0ZS5tX3N0eWxlLT5tdXRhYmxlRmlsdGVyKCkub3Bl
cmF0aW9ucygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJPcGVyYXRpb25z
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRlck9w
ZXJhdGlvbiA9IGZpbHRlck9wZXJhdGlvbnMuYXQoaSk7CiAgICAgICAgIGlmIChmaWx0ZXJPcGVy
YXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkg
ewogICAgICAgICAgICAgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKiByZWZlcmVuY2VGaWx0ZXIg
PSBzdGF0aWNfY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24u
Z2V0KCkpOwogCi0gICAgICAgICAgICBXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKiB2YWx1ZSA9
IG1fcGVuZGluZ1NWR0RvY3VtZW50cy5nZXQocmVmZXJlbmNlRmlsdGVyKS5nZXQoKTsKKyAgICAg
ICAgICAgIFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWUqIHZhbHVlID0gc3RhdGUubV9wZW5kaW5n
U1ZHRG9jdW1lbnRzLmdldChyZWZlcmVuY2VGaWx0ZXIpLmdldCgpOwogICAgICAgICAgICAgaWYg
KCF2YWx1ZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIENhY2hlZFNW
R0RvY3VtZW50KiBjYWNoZWREb2N1bWVudCA9IHZhbHVlLT5sb2FkKGNhY2hlZFJlc291cmNlTG9h
ZGVyKTsKQEAgLTQ4MzAsNyArNDgzNSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRp
bmdTVkdEb2N1bWVudHMoKQogICAgICAgICAgICAgcmVmZXJlbmNlRmlsdGVyLT5zZXRDYWNoZWRT
VkdEb2N1bWVudFJlZmVyZW5jZShhZG9wdFB0cihuZXcgQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVu
Y2UoY2FjaGVkRG9jdW1lbnQpKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgbV9wZW5kaW5nU1ZH
RG9jdW1lbnRzLmNsZWFyKCk7CisgICAgc3RhdGUubV9wZW5kaW5nU1ZHRG9jdW1lbnRzLmNsZWFy
KCk7CiB9CiAjZW5kaWYKIApAQCAtNDg0NiwxOCArNDg1MSwxOCBAQCBTdHlsZVNoYWRlciogU3R5
bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NT
U2hhZGVyVgogewogICAgIFN0eWxlU2hhZGVyKiBzaGFkZXIgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5k
aW5nU2hhZGVyKCk7CiAgICAgaWYgKHNoYWRlciAmJiBzaGFkZXItPmlzUGVuZGluZ1NoYWRlcigp
KQotICAgICAgICBtX2hhc1BlbmRpbmdTaGFkZXJzID0gdHJ1ZTsKKyAgICAgICAgbV9zdGF0ZS5t
X2hhc1BlbmRpbmdTaGFkZXJzID0gdHJ1ZTsKICAgICByZXR1cm4gc2hhZGVyOwogfQogCiB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycygpCiB7Ci0gICAgaWYgKCFtX3N0eWxl
LT5oYXNGaWx0ZXIoKSB8fCAhbV9oYXNQZW5kaW5nU2hhZGVycykKKyAgICBpZiAoIW1fc3RhdGUu
bV9zdHlsZS0+aGFzRmlsdGVyKCkgfHwgIW1fc3RhdGUubV9oYXNQZW5kaW5nU2hhZGVycykKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNl
TG9hZGVyID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwor
ICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fc3RhdGUu
bV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogCi0gICAgVmVj
dG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBtX3N0eWxl
LT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOworICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVy
T3BlcmF0aW9uPiA+JiBmaWx0ZXJPcGVyYXRpb25zID0gbV9zdGF0ZS5tX3N0eWxlLT5tdXRhYmxl
RmlsdGVyKCkub3BlcmF0aW9ucygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0
ZXJPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRp
b24+IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlck9wZXJhdGlvbnMuYXQoaSk7CiAgICAgICAgIGlm
IChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246
OkNVU1RPTSkgewpAQCAtNDg3NCw3ICs0ODc5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2Fk
UGVuZGluZ1NoYWRlcnMoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIG1f
aGFzUGVuZGluZ1NoYWRlcnMgPSBmYWxzZTsKKyAgICBtX3N0YXRlLm1faGFzUGVuZGluZ1NoYWRl
cnMgPSBmYWxzZTsKIH0KIAogc3RhdGljIGJvb2wgc29ydFBhcmFtZXRlcnNCeU5hbWVDb21wYXJh
dG9yKGNvbnN0IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+JiBhLCBjb25zdCBSZWZQdHI8
Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiYgYikKQEAgLTQ5MTYsNyArNDkyMSw3IEBAIFBhc3NSZWZQ
dHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRl
clRyYW5zZm9ybVBhcmFtCiB7CiAgICAgUmVmUHRyPEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFt
ZXRlcj4gdHJhbnNmb3JtUGFyYW1ldGVyID0gQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVy
OjpjcmVhdGUobmFtZSk7CiAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAg
IGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWVzLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50
U3R5bGUsIG9wZXJhdGlvbnMpOworICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWVz
LCBtX3N0YXRlLm1fc3R5bGUuZ2V0KCksIG1fc3RhdGUubV9yb290RWxlbWVudFN0eWxlLCBvcGVy
YXRpb25zKTsKICAgICB0cmFuc2Zvcm1QYXJhbWV0ZXItPnNldE9wZXJhdGlvbnMob3BlcmF0aW9u
cyk7CiAgICAgcmV0dXJuIHRyYW5zZm9ybVBhcmFtZXRlci5yZWxlYXNlKCk7CiB9CkBAIC01MTUz
LDEyICs1MTU4LDEyIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9u
cyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAKICAgICAgICAgICAgIFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWUqIHN2Z0Rv
Y3VtZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKj4oYXJn
dW1lbnQpOwotICAgICAgICAgICAgS1VSTCB1cmwgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNv
bXBsZXRlVVJMKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpKTsKKyAgICAgICAgICAgIEtVUkwgdXJs
ID0gbV9zdGF0ZS5tX2VsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN2Z0RvY3VtZW50
VmFsdWUtPnVybCgpKTsKIAogICAgICAgICAgICAgUmVmUHRyPFJlZmVyZW5jZUZpbHRlck9wZXJh
dGlvbj4gb3BlcmF0aW9uID0gUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoc3ZnRG9j
dW1lbnRWYWx1ZS0+dXJsKCksIHVybC5mcmFnbWVudElkZW50aWZpZXIoKSwgb3BlcmF0aW9uVHlw
ZSk7Ci0gICAgICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0V4dGVybmFsVVJJUmVmZXJl
bmNlKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkpKSB7Cisg
ICAgICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0V4dGVybmFsVVJJUmVmZXJlbmNlKHN2
Z0RvY3VtZW50VmFsdWUtPnVybCgpLCBtX3N0YXRlLm1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsK
ICAgICAgICAgICAgICAgICBpZiAoIXN2Z0RvY3VtZW50VmFsdWUtPmxvYWRSZXF1ZXN0ZWQoKSkK
LSAgICAgICAgICAgICAgICAgICAgbV9wZW5kaW5nU1ZHRG9jdW1lbnRzLnNldChvcGVyYXRpb24u
Z2V0KCksIHN2Z0RvY3VtZW50VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLm1f
cGVuZGluZ1NWR0RvY3VtZW50cy5zZXQob3BlcmF0aW9uLmdldCgpLCBzdmdEb2N1bWVudFZhbHVl
KTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdmdEb2N1bWVudFZhbHVlLT5jYWNoZWRTVkdE
b2N1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24tPnNldENhY2hlZFNWR0Rv
Y3VtZW50UmVmZXJlbmNlKGFkb3B0UHRyKG5ldyBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShz
dmdEb2N1bWVudFZhbHVlLT5jYWNoZWRTVkdEb2N1bWVudCgpKSkpOwogICAgICAgICAgICAgfQpA
QCAtNTI2Miw3ICs1MjY3LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVy
YXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUKIAogUGFzc1JlZlB0
cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGlu
Z0ltYWdlKiBwZW5kaW5nSW1hZ2UpCiB7Ci0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hl
ZFJlc291cmNlTG9hZGVyID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxv
YWRlcigpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9
IG1fc3RhdGUubV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwog
CiAgICAgaWYgKHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VWYWx1ZSgpKSB7CiAgICAgICAgIENTU0lt
YWdlVmFsdWUqIGltYWdlVmFsdWUgPSBwZW5kaW5nSW1hZ2UtPmNzc0ltYWdlVmFsdWUoKTsKQEAg
LTUyOTIsMjMgKzUyOTcsMjMgQEAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVy
Ojpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW4KIAogdm9pZCBTdHls
ZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiB7Ci0gICAgaWYgKG1fcGVuZGluZ0ltYWdl
UHJvcGVydGllcy5pc0VtcHR5KCkpCisgICAgaWYgKG1fc3RhdGUubV9wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUGVuZGluZ0ltYWdlUHJv
cGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGVuZCA9IG1fcGVuZGluZ0ltYWdlUHJvcGVy
dGllcy5lbmQoKS5rZXlzKCk7Ci0gICAgZm9yIChQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29u
c3RfaXRlcmF0b3I6OktleXMgaXQgPSBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuYmVnaW4oKS5r
ZXlzKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpj
b25zdF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBtX3N0YXRlLm1fcGVuZGluZ0ltYWdlUHJvcGVydGll
cy5lbmQoKS5rZXlzKCk7CisgICAgZm9yIChQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3Rf
aXRlcmF0b3I6OktleXMgaXQgPSBtX3N0YXRlLm1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5iZWdp
bigpLmtleXMoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIENTU1Byb3BlcnR5SUQgY3Vy
cmVudFByb3BlcnR5ID0gKml0OwogCiAgICAgICAgIHN3aXRjaCAoY3VycmVudFByb3BlcnR5KSB7
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6IHsKLSAgICAgICAgICAg
IGZvciAoRmlsbExheWVyKiBiYWNrZ3JvdW5kTGF5ZXIgPSBtX3N0eWxlLT5hY2Nlc3NCYWNrZ3Jv
dW5kTGF5ZXJzKCk7IGJhY2tncm91bmRMYXllcjsgYmFja2dyb3VuZExheWVyID0gYmFja2dyb3Vu
ZExheWVyLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBiYWNrZ3JvdW5k
TGF5ZXIgPSBtX3N0YXRlLm1fc3R5bGUtPmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKTsgYmFja2dy
b3VuZExheWVyOyBiYWNrZ3JvdW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkgewog
ICAgICAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkgJiYgYmFja2dyb3Vu
ZExheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQogICAgICAgICAgICAgICAgICAgICBi
YWNrZ3JvdW5kTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5
bGVQZW5kaW5nSW1hZ2UqPihiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkpKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Q29udGVudDogewotICAgICAgICAgICAgZm9yIChDb250ZW50RGF0YSogY29udGVudERhdGEg
PSBjb25zdF9jYXN0PENvbnRlbnREYXRhKj4obV9zdHlsZS0+Y29udGVudERhdGEoKSk7IGNvbnRl
bnREYXRhOyBjb250ZW50RGF0YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKKyAgICAgICAgICAg
IGZvciAoQ29udGVudERhdGEqIGNvbnRlbnREYXRhID0gY29uc3RfY2FzdDxDb250ZW50RGF0YSo+
KG1fc3RhdGUubV9zdHlsZS0+Y29udGVudERhdGEoKSk7IGNvbnRlbnREYXRhOyBjb250ZW50RGF0
YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY29udGVudERh
dGEtPmlzSW1hZ2UoKSkgewogICAgICAgICAgICAgICAgICAgICBTdHlsZUltYWdlKiBpbWFnZSA9
IHN0YXRpY19jYXN0PEltYWdlQ29udGVudERhdGEqPihjb250ZW50RGF0YSktPmltYWdlKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkgewpAQCAtNTMy
MSw3ICs1MzI2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q3Vy
c29yOiB7Ci0gICAgICAgICAgICBpZiAoQ3Vyc29yTGlzdCogY3Vyc29yTGlzdCA9IG1fc3R5bGUt
PmN1cnNvcnMoKSkgeworICAgICAgICAgICAgaWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBt
X3N0YXRlLm1fc3R5bGUtPmN1cnNvcnMoKSkgewogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY3Vyc29yTGlzdC0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAg
ICAgQ3Vyc29yRGF0YSYgY3VycmVudEN1cnNvciA9IGN1cnNvckxpc3QtPmF0KGkpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoU3R5bGVJbWFnZSogaW1hZ2UgPSBjdXJyZW50Q3Vyc29yLmltYWdl
KCkpIHsKQEAgLTUzMzMsMTcgKzUzMzgsMTcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVu
ZGluZ0ltYWdlcygpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2U6IHsKLSAgICAgICAgICAgIGlmIChtX3N0eWxlLT5s
aXN0U3R5bGVJbWFnZSgpICYmIG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCktPmlzUGVuZGluZ0lt
YWdlKCkpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGlzdFN0eWxlSW1hZ2UobG9hZFBl
bmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPmxpc3RT
dHlsZUltYWdlKCkpKSk7CisgICAgICAgICAgICBpZiAobV9zdGF0ZS5tX3N0eWxlLT5saXN0U3R5
bGVJbWFnZSgpICYmIG1fc3RhdGUubV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKS0+aXNQZW5kaW5n
SW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBtX3N0YXRlLm1fc3R5bGUtPnNldExpc3RTdHlsZUlt
YWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0
YXRlLm1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U6IHsKLSAg
ICAgICAgICAgIGlmIChtX3N0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpICYmIG1fc3R5bGUtPmJv
cmRlckltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgbV9z
dHlsZS0+c2V0Qm9yZGVySW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxT
dHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCkpKSk7CisgICAg
ICAgICAgICBpZiAobV9zdGF0ZS5tX3N0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpICYmIG1fc3Rh
dGUubV9zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAg
ICAgICAgICAgICBtX3N0YXRlLm1fc3R5bGUtPnNldEJvcmRlckltYWdlU291cmNlKGxvYWRQZW5k
aW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRlLm1fc3R5bGUt
PmJvcmRlckltYWdlU291cmNlKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewotICAgICAgICAgICAg
aWYgKFN0eWxlUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1fc3R5bGUtPmJveFJlZmxlY3QoKSkg
eworICAgICAgICAgICAgaWYgKFN0eWxlUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1fc3RhdGUu
bV9zdHlsZS0+Ym94UmVmbGVjdCgpKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgTmluZVBpZWNl
SW1hZ2UmIG1hc2tJbWFnZSA9IHJlZmxlY3Rpb24tPm1hc2soKTsKICAgICAgICAgICAgICAgICBp
ZiAobWFza0ltYWdlLmltYWdlKCkgJiYgbWFza0ltYWdlLmltYWdlKCktPmlzUGVuZGluZ0ltYWdl
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRlZEltYWdl
ID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tJ
bWFnZS5pbWFnZSgpKSk7CkBAIC01MzUzLDEyICs1MzU4LDEyIEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZTogewotICAgICAg
ICAgICAgaWYgKG1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpICYmIG1fc3R5bGUtPm1hc2tC
b3hJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgIG1fc3R5
bGUtPnNldE1hc2tCb3hJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0
eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCkpKSk7CisgICAg
ICAgICAgICBpZiAobV9zdGF0ZS5tX3N0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSAmJiBtX3N0
YXRlLm1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAg
ICAgICAgICAgICAgIG1fc3RhdGUubV9zdHlsZS0+c2V0TWFza0JveEltYWdlU291cmNlKGxvYWRQ
ZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRlLm1fc3R5
bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZTogewotICAgICAgICAg
ICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IG1fc3R5bGUtPmFjY2Vzc01hc2tMYXllcnMo
KTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkgeworICAgICAgICAg
ICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IG1fc3RhdGUubV9zdHlsZS0+YWNjZXNzTWFz
a0xheWVycygpOyBtYXNrTGF5ZXI7IG1hc2tMYXllciA9IG1hc2tMYXllci0+bmV4dCgpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKG1hc2tMYXllci0+aW1hZ2UoKSAmJiBtYXNrTGF5ZXItPmltYWdl
KCktPmlzUGVuZGluZ0ltYWdlKCkpCiAgICAgICAgICAgICAgICAgICAgIG1hc2tMYXllci0+c2V0
SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1h
c2tMYXllci0+aW1hZ2UoKSkpKTsKICAgICAgICAgICAgIH0KQEAgLTUzNjksNyArNTM3NCw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICB9CiAgICAg
fQogCi0gICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5t
X3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuY2xlYXIoKTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVy
Ojpsb2FkUGVuZGluZ1Jlc291cmNlcygpCkBAIC01NDMyLDcgKzU0MzcsNiBAQCB2b2lkIE1lZGlh
UXVlcnlSZXN1bHQ6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9i
amVjdEluZm8pIGNvbgogdm9pZCBTdHlsZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1v
cnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogewogICAgIE1lbW9yeUNsYXNz
SW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NT
KTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3N0eWxlKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2F1
dGhvclN0eWxlKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3VzZXJTdHlsZSk7CiAgICAgaW5mby5h
ZGRNZW1iZXIobV9mZWF0dXJlcyk7CkBAIC01NDQxLDMzICs1NDQ1LDIwIEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0
SW5mbykgY29uc3QKICAgICBpbmZvLmFkZE1lbWJlcihtX2tleWZyYW1lc1J1bGVNYXApOwogICAg
IGluZm8uYWRkTWVtYmVyKG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZSk7CiAgICAgaW5mby5hZGRN
ZW1iZXIobV9tYXRjaGVkUHJvcGVydGllc0NhY2hlU3dlZXBUaW1lcik7Ci0gICAgaW5mby5hZGRN
ZW1iZXIobV9tYXRjaGVkUnVsZXMpOwogCi0gICAgaW5mby5hZGRNZW1iZXIobV9ydWxlTGlzdCk7
Ci0gICAgaW5mby5hZGRNZW1iZXIobV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKTsKICAgICBpbmZv
LmFkZE1lbWJlcihtX21lZGl1bSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9yb290RGVmYXVsdFN0
eWxlKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2RvY3VtZW50KTsKIAotICAgIC8vIEZJWE1FOiBw
b2ludGVyIHRvIFJlbmRlclN0eWxlIGNvdWxkIHBvaW50IHRvIGFuIGFscmVhZHkgZGVsZXRlZCBv
YmplY3QuCi0gICAgaW5mby5pZ25vcmVNZW1iZXIobV9wYXJlbnRTdHlsZSk7Ci0gICAgaW5mby5p
Z25vcmVNZW1iZXIobV9yb290RWxlbWVudFN0eWxlKTsKLQotICAgIGluZm8uYWRkTWVtYmVyKG1f
ZWxlbWVudCk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9zdHlsZWRFbGVtZW50KTsKLSAgICBpbmZv
LmFkZE1lbWJlcihtX3JlZ2lvbkZvclN0eWxpbmcpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fcGFy
ZW50Tm9kZSk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9saW5lSGVpZ2h0VmFsdWUpOwogICAgIGlu
Zm8uYWRkTWVtYmVyKG1fZm9udFNlbGVjdG9yKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3ZpZXdw
b3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMpOwogICAgIGluZm8uaWdub3JlTWVtYmVyKG1f
c3R5bGVCdWlsZGVyKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3N0eWxlUnVsZVRvQ1NTT01XcmFw
cGVyTWFwKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3N0eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQp
OwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKLSAgICBpbmZvLmFkZE1l
bWJlcihtX3BlbmRpbmdTVkdEb2N1bWVudHMpOwotI2VuZGlmCiAgICAgaW5mby5hZGRNZW1iZXIo
bV9zY29wZVJlc29sdmVyKTsKIAorICAgIGluZm8uYWRkTWVtYmVyKG1fc3RhdGUpOworCiAgICAg
Ly8gRklYTUU6IG1vdmUgdGhpcyB0byBhIHBsYWNlIHdoZXJlIGl0IHdvdWxkIGJlIGNhbGxlZCBv
bmx5IG9uY2U/CiAgICAgaW5mby5hZGRNZW1iZXIoZGVmYXVsdFN0eWxlKTsKICAgICBpbmZvLmFk
ZE1lbWJlcihkZWZhdWx0UXVpcmtzU3R5bGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgK
aW5kZXggMzMzNjZjNzY3OTExZTczMDE5Zjk0OTRiY2ViNGRjOGIwYzg3NDc1OC4uNzc2YmRkM2Fl
NzhhNDFiZTliYTQ0YzRmNjQ4Njc2OTRkYmFkZjgwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5oCkBAIC0yMyw2ICsyMyw3IEBACiAjZGVmaW5lIFN0eWxlUmVzb2x2ZXJfaAogCiAjaW5j
bHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgIkNTU1J1bGVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NT
VG9TdHlsZU1hcC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkxpbmtI
YXNoLmgiCkBAIC0zNiw2ICszNyw5IEBACiAjaW5jbHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgi
CiAjaW5jbHVkZSAiU3R5bGVTY29wZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVmlld3BvcnRTdHls
ZVJlc29sdmVyLmgiCisjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQorI2lu
Y2x1ZGUgIldlYktpdENTU1NWR0RvY3VtZW50VmFsdWUuaCIKKyNlbmRpZgogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CkBAIC0xNjEsMjAgKzE2NSwyMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JEb2N1bWVudChEb2N1bWVudCosIENTU0ZvbnRTZWxl
Y3RvciogPSAwKTsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3R5bGUuZ2V0KCk7IH0KLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJl
dHVybiBtX3BhcmVudFN0eWxlOyB9Ci0gICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUo
KSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50U3R5bGU7IH0KLSAgICBFbGVtZW50KiBlbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgUmVuZGVyU3R5bGUqIHN0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5tX3N0eWxlLmdldCgpOyB9CisgICAgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5tX3BhcmVudFN0eWxlOyB9
CisgICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLm1fcm9vdEVsZW1lbnRTdHlsZTsgfQorICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLm1fZWxlbWVudDsgfQogICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOyB9CiAg
ICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJldHVy
biBwYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsgfQotICAgIHZvaWQgc2V0Rm9udERl
c2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fZm9u
dERpcnR5IHw9IHN0eWxlKCktPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9
Ci0gICAgdm9pZCBzZXRab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0
Wm9vbShmKTsgfQotICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBmKSB7IG1fZm9udERp
cnR5IHw9IHN0eWxlKCktPnNldEVmZmVjdGl2ZVpvb20oZik7IH0KLSAgICB2b2lkIHNldFRleHRT
aXplQWRqdXN0KGJvb2wgYikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRUZXh0U2l6ZUFk
anVzdChiKTsgfQotICAgIHZvaWQgc2V0V3JpdGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0V3JpdGluZ01vZGUod3JpdGluZ01vZGUp
OyB9Ci0gICAgdm9pZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4dE9yaWVudGF0aW9uIHRleHRPcmll
bnRhdGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRUZXh0T3JpZW50YXRpb24odGV4
dE9yaWVudGF0aW9uKTsgfQotICAgIGJvb2wgaGFzUGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFyZW50Tm9kZTsgfQorICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fc3RhdGUubV9mb250RGlydHkgfD0gc3R5
bGUoKS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KKyAgICB2b2lkIHNl
dFpvb20oZmxvYXQgZikgeyBtX3N0YXRlLm1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFpvb20o
Zik7IH0KKyAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQgZikgeyBtX3N0YXRlLm1fZm9u
dERpcnR5IHw9IHN0eWxlKCktPnNldEVmZmVjdGl2ZVpvb20oZik7IH0KKyAgICB2b2lkIHNldFRl
eHRTaXplQWRqdXN0KGJvb2wgYikgeyBtX3N0YXRlLm1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNl
dFRleHRTaXplQWRqdXN0KGIpOyB9CisgICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSkgeyBtX3N0YXRlLm1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFdyaXRp
bmdNb2RlKHdyaXRpbmdNb2RlKTsgfQorICAgIHZvaWQgc2V0VGV4dE9yaWVudGF0aW9uKFRleHRP
cmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24pIHsgbV9zdGF0ZS5tX2ZvbnREaXJ0eSB8PSBzdHls
ZSgpLT5zZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQorICAgIGJvb2wgaGFz
UGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUubV9wYXJlbnROb2RlOyB9CiAKICAg
ICB2b2lkIHJlc2V0QXV0aG9yU3R5bGUoKTsKICAgICB2b2lkIGFwcGVuZEF1dGhvclN0eWxlU2hl
ZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+
ID4mKTsKQEAgLTMwOCw3ICszMTIsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhZGp1c3RSZW5k
ZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGVUb0FkanVzdCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlLCBFbGVtZW50Kik7CiAKLSAgICB2b2lkIGFkZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRh
KiBydWxlKSB7IG1fbWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxlKTsgfQorICAgIHZvaWQgYWRkTWF0
Y2hlZFJ1bGUoY29uc3QgUnVsZURhdGEqIHJ1bGUpIHsgbV9zdGF0ZS5tX21hdGNoZWRSdWxlcy5h
cHBlbmQocnVsZSk7IH0KIAogICAgIHN0cnVjdCBSdWxlUmFuZ2UgewogICAgICAgICBSdWxlUmFu
Z2UoaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4KTogZmlyc3RSdWxlSW5k
ZXgoZmlyc3RSdWxlSW5kZXgpLCBsYXN0UnVsZUluZGV4KGxhc3RSdWxlSW5kZXgpIHsgfQpAQCAt
NDE4LDE1ICs0MjIsODYgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8UnVsZVNldD4gbV9zaWJsaW5n
UnVsZVNldDsKICAgICBPd25QdHI8UnVsZVNldD4gbV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQ7
CiAKLSAgICBib29sIG1faGFzVUFBcHBlYXJhbmNlOwotICAgIEJvcmRlckRhdGEgbV9ib3JkZXJE
YXRhOwotICAgIEZpbGxMYXllciBtX2JhY2tncm91bmREYXRhOwotICAgIENvbG9yIG1fYmFja2dy
b3VuZENvbG9yOwotCiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBSZWZQ
dHI8U3R5bGVSdWxlS2V5ZnJhbWVzPiA+IEtleWZyYW1lc1J1bGVNYXA7CiAgICAgS2V5ZnJhbWVz
UnVsZU1hcCBtX2tleWZyYW1lc1J1bGVNYXA7CiAKIHB1YmxpYzoKKyAgICB0eXBlZGVmIEhhc2hN
YXA8Q1NTUHJvcGVydHlJRCwgUmVmUHRyPENTU1ZhbHVlPiA+IFBlbmRpbmdJbWFnZVByb3BlcnR5
TWFwOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKKyAgICB0eXBlZGVm
IEhhc2hNYXA8RmlsdGVyT3BlcmF0aW9uKiwgUmVmUHRyPFdlYktpdENTU1NWR0RvY3VtZW50VmFs
dWU+ID4gUGVuZGluZ1NWR0RvY3VtZW50TWFwOworI2VuZGlmCisKKyAgICBjbGFzcyBTdGF0ZSB7
CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YXRlKTsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFN0YXRlKCkKKyAgICAgICAgOiBtX2VsZW1lbnQoMCkKKyAgICAgICAgLCBtX3N0eWxlZEVs
ZW1lbnQoMCkKKyAgICAgICAgLCBtX3BhcmVudE5vZGUoMCkKKyAgICAgICAgLCBtX3BhcmVudFN0
eWxlKDApCisgICAgICAgICwgbV9yb290RWxlbWVudFN0eWxlKDApCisgICAgICAgICwgbV9yZWdp
b25Gb3JTdHlsaW5nKDApCisgICAgICAgICwgbV9zYW1lT3JpZ2luT25seShmYWxzZSkKKyAgICAg
ICAgLCBtX3BzZXVkb1N0eWxlKE5PUFNFVURPKQorICAgICAgICAsIG1fZWxlbWVudExpbmtTdGF0
ZShOb3RJbnNpZGVMaW5rKQorICAgICAgICAsIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50
KGZhbHNlKQorICAgICAgICAsIG1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKGZhbHNlKQor
ICAgICAgICAsIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpCisgICAgICAgICwg
bV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKQorI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKKyAgICAgICAgLCBtX2hhc1BlbmRpbmdTaGFkZXJzKGZhbHNlKQorI2VuZGlmCisg
ICAgICAgICwgbV9saW5lSGVpZ2h0VmFsdWUoMCkKKyAgICAgICAgLCBtX2ZvbnREaXJ0eShmYWxz
ZSkKKyAgICAgICAgLCBtX2hhc1VBQXBwZWFyYW5jZShmYWxzZSkKKyAgICAgICAgLCBtX2JhY2tn
cm91bmREYXRhKEJhY2tncm91bmRGaWxsTGF5ZXIpIHsgfQorICAgICAgICAKK3B1YmxpYzoKKyAg
ICAgICAgLy8gRklYTUU6IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJldmlldywgdGhlc2UgbWVtYmVy
IHZhcmlhYmxlcyBhcmUKKyAgICAgICAgLy8gcHVibGljLiBIb3dldmVyIHdlIHNob3VsZCBhZGQg
bWV0aG9kcyB0byBhY2Nlc3MgdGhlc2UgdmFyaWFibGVzLgorICAgICAgICBFbGVtZW50KiBtX2Vs
ZW1lbnQ7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKKyAgICAgICAgU3R5
bGVkRWxlbWVudCogbV9zdHlsZWRFbGVtZW50OworICAgICAgICBDb250YWluZXJOb2RlKiBtX3Bh
cmVudE5vZGU7CisgICAgICAgIFJlbmRlclN0eWxlKiBtX3BhcmVudFN0eWxlOworICAgICAgICBS
ZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlOworICAgICAgICAKKyAgICAgICAgUmVuZGVy
UmVnaW9uKiBtX3JlZ2lvbkZvclN0eWxpbmc7CisgICAgICAgIGJvb2wgbV9zYW1lT3JpZ2luT25s
eTsKKyAgICAgICAgUHNldWRvSWQgbV9wc2V1ZG9TdHlsZTsKKworICAgICAgICBFSW5zaWRlTGlu
ayBtX2VsZW1lbnRMaW5rU3RhdGU7CisKKyAgICAgICAgYm9vbCBtX2Rpc3RyaWJ1dGVkVG9JbnNl
cnRpb25Qb2ludDsKKworICAgICAgICBib29sIG1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVz
OworCisgICAgICAgIFBzZXVkb0lkIG1fZHluYW1pY1BzZXVkbzsKKworICAgICAgICAvLyBBIGJ1
ZmZlciB1c2VkIHRvIGhvbGQgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIGZvciBhbiBlbGVtZW50
LAorICAgICAgICAvLyBhbmQgYSB0ZW1wb3JhcnkgYnVmZmVyIHVzZWQgZm9yIG1lcmdlIHNvcnRp
bmcuCisgICAgICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiBtX21hdGNoZWRSdWxlczsK
KyAgICAgICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0PiBtX3J1bGVMaXN0OworCisgICAgICAg
IGJvb2wgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7CisgICAgICAgIGJvb2wgbV9hcHBs
eVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOworCisgICAgICAgIFBlbmRpbmdJbWFnZVByb3Bl
cnR5TWFwIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllczsKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMp
CisgICAgICAgIGJvb2wgbV9oYXNQZW5kaW5nU2hhZGVyczsKKyNlbmRpZgorI2lmIEVOQUJMRShD
U1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKKyAgICAgICAgUGVuZGluZ1NWR0RvY3VtZW50TWFw
IG1fcGVuZGluZ1NWR0RvY3VtZW50czsKKyNlbmRpZgorICAgICAgICBDU1NWYWx1ZSogbV9saW5l
SGVpZ2h0VmFsdWU7CisgICAgICAgIGJvb2wgbV9mb250RGlydHk7CisKKyAgICAgICAgYm9vbCBt
X2hhc1VBQXBwZWFyYW5jZTsKKyAgICAgICAgQm9yZGVyRGF0YSBtX2JvcmRlckRhdGE7CisgICAg
ICAgIEZpbGxMYXllciBtX2JhY2tncm91bmREYXRhOworICAgICAgICBDb2xvciBtX2JhY2tncm91
bmRDb2xvcjsKKyAgICB9OworCiAgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzdHlsZU5vdFlldEF2
YWlsYWJsZSgpIHsgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7IH0KIAogICAgIFBhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwpA
QCAtNDM3LDggKzUxMiw4IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIFBhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0N1cnNvcklt
YWdlVmFsdWUqKTsKIAotICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7IH0KLSAgICBib29sIGFw
cGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5UHJv
cGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7IH0KKyAgICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUubV9hcHBseVByb3BlcnR5VG9SZWd1bGFy
U3R5bGU7IH0KKyAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLm1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsgfQog
CiAgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9JbnRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUq
LCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVy
ID0gMSk7CiAgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9GbG9hdExlbmd0aChDU1NQcmltaXRp
dmVWYWx1ZSosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11
bHRpcGxpZXIgPSAxKTsKQEAgLTQ5MSwzOSArNTY2LDE4IEBAIHByaXZhdGU6CiAKICAgICBUaW1l
cjxTdHlsZVJlc29sdmVyPiBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyOwogCi0g
ICAgLy8gQSBidWZmZXIgdXNlZCB0byBob2xkIHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcyBmb3Ig
YW4gZWxlbWVudCwgYW5kIGEgdGVtcG9yYXJ5IGJ1ZmZlciB1c2VkIGZvcgotICAgIC8vIG1lcmdl
IHNvcnRpbmcuCi0gICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+IG1fbWF0Y2hlZFJ1bGVz
OwotCi0gICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0PiBtX3J1bGVMaXN0OwotCi0gICAgdHlw
ZWRlZiBIYXNoTWFwPENTU1Byb3BlcnR5SUQsIFJlZlB0cjxDU1NWYWx1ZT4gPiBQZW5kaW5nSW1h
Z2VQcm9wZXJ0eU1hcDsKLSAgICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcCBtX3BlbmRpbmdJbWFn
ZVByb3BlcnRpZXM7Ci0KICAgICBPd25QdHI8TWVkaWFRdWVyeUV2YWx1YXRvcj4gbV9tZWRpdW07
CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3Jvb3REZWZhdWx0U3R5bGU7CiAKLSAgICBQc2V1
ZG9JZCBtX2R5bmFtaWNQc2V1ZG87Ci0gICAgUHNldWRvSWQgbV9wc2V1ZG9TdHlsZTsKLQogICAg
IERvY3VtZW50KiBtX2RvY3VtZW50OworICAgIC8vIEZJWE1FOiBNYWtlIFNlbGVjdG9yQ2hlY2tl
ciBhbiBvbi1zdGFjayBvYmplY3QgYW5kCisgICAgLy8gbW92ZSBzZWxlY3RvckNoZWNrZXIubW9k
ZSgpIHRvIFN0YXRlLgorICAgIC8vIHNlbGVjdG9yQ2hlY2tlci5zdHJpbmdQYXJzaW5nKCkgY2Fu
IGJlIHJlcGxhY2VkIHdpdGgKKyAgICAvLyAhZG9jdW1lbnQuaW5RdWlya3NNb2RlKCkuCiAgICAg
U2VsZWN0b3JDaGVja2VyIG1fc2VsZWN0b3JDaGVja2VyOwogICAgIFNlbGVjdG9yRmlsdGVyIG1f
c2VsZWN0b3JGaWx0ZXI7CiAKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7Ci0gICAg
UmVuZGVyU3R5bGUqIG1fcGFyZW50U3R5bGU7Ci0gICAgUmVuZGVyU3R5bGUqIG1fcm9vdEVsZW1l
bnRTdHlsZTsKLSAgICBFbGVtZW50KiBtX2VsZW1lbnQ7Ci0gICAgU3R5bGVkRWxlbWVudCogbV9z
dHlsZWRFbGVtZW50OwotICAgIFJlbmRlclJlZ2lvbiogbV9yZWdpb25Gb3JTdHlsaW5nOwotICAg
IEVJbnNpZGVMaW5rIG1fZWxlbWVudExpbmtTdGF0ZTsKLSAgICBib29sIG1fZWxlbWVudEFmZmVj
dGVkQnlDbGFzc1J1bGVzOwotICAgIENvbnRhaW5lck5vZGUqIG1fcGFyZW50Tm9kZTsKLSAgICBD
U1NWYWx1ZSogbV9saW5lSGVpZ2h0VmFsdWU7Ci0gICAgYm9vbCBtX2ZvbnREaXJ0eTsKICAgICBi
b29sIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzOwotICAgIGJvb2wgbV9zYW1lT3JpZ2luT25s
eTsKLSAgICBib29sIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50OwogCiAgICAgUmVmUHRy
PENTU0ZvbnRTZWxlY3Rvcj4gbV9mb250U2VsZWN0b3I7CiAgICAgVmVjdG9yPE93blB0cjxNZWRp
YVF1ZXJ5UmVzdWx0PiA+IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0czsKQEAg
LTUzMiwyNCArNTg2LDE2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFZpZXdwb3J0U3R5bGVSZXNv
bHZlcj4gbV92aWV3cG9ydFN0eWxlUmVzb2x2ZXI7CiAjZW5kaWYKIAotICAgIGJvb2wgbV9hcHBs
eVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7Ci0gICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGU7CiAgICAgY29uc3QgU3R5bGVCdWlsZGVyJiBtX3N0eWxlQnVpbGRlcjsKICAg
ICAKICAgICBIYXNoTWFwPFN0eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+ID4gbV9zdHls
ZVJ1bGVUb0NTU09NV3JhcHBlck1hcDsKICAgICBIYXNoU2V0PFJlZlB0cjxDU1NTdHlsZVNoZWV0
PiA+IG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldDsKIAotI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKLSAgICBib29sIG1faGFzUGVuZGluZ1NoYWRlcnM7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShD
U1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKLSAgICBIYXNoTWFwPEZpbHRlck9wZXJhdGlvbios
IFJlZlB0cjxXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlPiA+IG1fcGVuZGluZ1NWR0RvY3VtZW50
czsKLSNlbmRpZgotCiAgICAgT3duUHRyPFN0eWxlU2NvcGVSZXNvbHZlcj4gbV9zY29wZVJlc29s
dmVyOwogICAgIENTU1RvU3R5bGVNYXAgbV9zdHlsZU1hcDsKIAorICAgIFN0YXRlIG1fc3RhdGU7
CisKICAgICBmcmllbmQgY2xhc3MgU3R5bGVCdWlsZGVyOwogICAgIGZyaWVuZCBib29sIG9wZXJh
dG9yPT0oY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmLCBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYp
OwogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmLCBj
b25zdCBNYXRjaGVkUHJvcGVydGllcyYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185427</attachid>
            <date>2013-01-30 01:15:14 -0800</date>
            <delta_ts>2013-01-31 00:07:15 -0800</delta_ts>
            <desc>WIP: added m_state</desc>
            <filename>bug-96421-20130130181159.patch</filename>
            <type>text/plain</type>
            <size>139871</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxMTkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODliOGIwMWYzZTk2NzA1
MTVhYjI1NzU0NjQ4ZmY5NjM5MmEzMWU4ZC4uY2NjZGQwNWExMzY2M2FjZjUxY2Y2YjhjZWIxZTlh
ZTk1OTQ4NjBlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDEzLTAxLTMwICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBTcGxpdCBwZXItcmVz
b2x2ZSBsb2dpYyBvdXQgZnJvbSBTdHlsZVJlc29sdmVyLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY0MjEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCBjbGFzcyBTdHlsZVJlc29sdmVy
OjpTdGF0ZSBhbmQgYWRkZWQgbV9zdGF0ZSB0bworICAgICAgICBTdHlsZVJlc29sdmVyLiBBbGwg
bWVtYmVyIHZhcmlhYmxlcyB1c2VkIGZvciBwZXItcmVzb2x2ZSBsb2dpYyBhcmUKKyAgICAgICAg
bW92ZWQgaW50byB0aGUgc3RhdGUgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNh
dXNlIGp1c3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBjc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5
KToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24p
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hl
ZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0
aG9yUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5n
Q2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpt
YXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNo
VXNlclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxl
c0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRS
dWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRGb3JTdHlsZVJlc29sdmUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVT
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhD
b250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRh
dGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjphZGp1c3RSZW5kZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojp1cGRhdGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlQm9y
ZGVyQW5kQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1
ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpydWxlTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1Jl
Z2lvblNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0JyZWFkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlR3JpZFRyYWNrTWluTWF4KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRU
cmFja0dyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0xpc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTVkdEb2N1bWVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFk
ZXJGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRp
bmdTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9t
RmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6bG9hZFBlbmRpbmdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojpsb2FkUGVuZGluZ0ltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpy
ZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnJvb3RFbGVtZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250RGVzY3Jp
cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Wm9vbSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRFZmZlY3RpdmVab29tKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpoYXNQYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmFkZE1hdGNoZWRSdWxlKToKKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAg
ICAoU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OlN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlKToKKyAgICAgICAgQWRkZWQgIm1fc3RhdGUuIiB0byBhY2Nlc3Mg
bWVtYmVyIHZhcmlhYmxlcyB1c2VkIGZvciBwZXItcmVzb2x2ZSBsb2dpYy4KKwogMjAxMy0wMS0y
OSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBEb24n
dCB1cGRhdGVUaWxlQ292ZXJhZ2VNYXAoKSBmcm9tIHNldFNjcm9sbGluZ01vZGVJbmRpY2F0aW9u
IGlmIHdlIGRvbid0IG5lZWQgdG8uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZH
Q1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxl
Y3Rvci5jcHAKaW5kZXggNjE0NWJiMWYxNjI1YjhmZTRkMTY3NjA3YmJiYThiZmQ5YTFiMDExOS4u
ODljODJhOTFhNzYxZjhkNTQzNTU1ZWVkZDEzNzlkZDI3MDg5YzM0YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtNDksNyArNDksNyBAQAogI2RlZmlu
ZSBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJbmhlcml0KSBcCiB7IFwKLSAg
ICBzdmdzdHlsZS0+c2V0IyNQcm9wKG1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnByb3AoKSk7
IFwKKyAgICBzdmdzdHlsZS0+c2V0IyNQcm9wKHN0YXRlLm1fcGFyZW50U3R5bGUtPnN2Z1N0eWxl
KCktPnByb3AoKSk7IFwKICAgICByZXR1cm47IFwKIH0KIApAQCAtMTA5LDEwICsxMDksMTEgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAg
ICAgcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVl
KTsKIAotICAgIFNWR1JlbmRlclN0eWxlKiBzdmdzdHlsZSA9IG1fc3R5bGUtPmFjY2Vzc1NWR1N0
eWxlKCk7CisgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKyAgICBTVkdSZW5kZXJT
dHlsZSogc3Znc3R5bGUgPSBzdGF0ZS5tX3N0eWxlLT5hY2Nlc3NTVkdTdHlsZSgpOwogCi0gICAg
Ym9vbCBpc0luaGVyaXQgPSBtX3BhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUo
KTsKLSAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICghbV9w
YXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpOworICAgIGJvb2wgaXNJbmhl
cml0ID0gc3RhdGUubV9wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7Cisg
ICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAoIXN0YXRlLm1f
cGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKIAogICAgIC8vIFdoYXQg
Zm9sbG93cyBpcyBhIGxpc3QgdGhhdCBtYXBzIHRoZSBDU1MgcHJvcGVydGllcyBpbnRvIHRoZWly
CiAgICAgLy8gY29ycmVzcG9uZGluZyBmcm9udC1lbmQgUmVuZGVyU3R5bGUgdmFsdWVzLiBTaG9y
dGhhbmRzKGUuZy4gYm9yZGVyLApAQCAtMjI5LDcgKzIzMCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGaWxsOgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAo
aXNJbmhlcml0KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1Bh
cmVudFN0eWxlID0gbV9wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBj
b25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBzdGF0ZS5tX3BhcmVudFN0eWxl
LT5zdmdTdHlsZSgpOwogICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3Zn
UGFyZW50U3R5bGUtPmZpbGxQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludENv
bG9yKCksIHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVn
dWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMjM5LDE0ICsyNDAsMTQgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdQ
YWludCgpKSB7CiAgICAgICAgICAgICAgICAgU1ZHUGFpbnQqIHN2Z1BhaW50ID0gc3RhdGljX2Nh
c3Q8U1ZHUGFpbnQqPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQ
YWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3Zn
UGFpbnQsIG1fc3R5bGUtPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAg
ICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgp
LCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5tX3N0eWxlLT5jb2xv
cigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2U6CiAg
ICAgICAgIHsKICAgICAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgICAgICBj
b25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBtX3BhcmVudFN0eWxlLT5zdmdT
dHlsZSgpOworICAgICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQYXJlbnRT
dHlsZSA9IHN0YXRlLm1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCk7CiAgICAgICAgICAgICAgICAg
c3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludFR5cGUo
KSwgc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50Q29sb3IoKSwgc3ZnUGFyZW50U3R5bGUtPnN0
cm9rZVBhaW50VXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KQEAgLTI1Niw3ICsyNTcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZH
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR1BhaW50KCkpIHsKICAgICAgICAgICAgICAg
ICBTVkdQYWludCogc3ZnUGFpbnQgPSBzdGF0aWNfY2FzdDxTVkdQYWludCo+KHZhbHVlKTsKLSAg
ICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlw
ZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBtX3N0eWxlLT5jb2xvcigp
KSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+
c2V0U3Ryb2tlUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNT
U1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5tX3N0eWxlLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgp
LCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkBAIC0zNjMsNyArMzY0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBl
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmlt
aXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dE1hcmtlclN0YXJ0UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJG
cm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Zn
c3R5bGUtPnNldE1hcmtlclN0YXJ0UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElk
ZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLm1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1h
cmtlck1pZDoKQEAgLTM3Nyw3ICszNzgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZH
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAg
aWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAg
cyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdz
dHlsZS0+c2V0TWFya2VyTWlkUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50
aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAg
ICAgc3Znc3R5bGUtPnNldE1hcmtlck1pZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21l
bnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5tX2VsZW1lbnQtPmRvY3VtZW50KCkp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlNYXJrZXJFbmQ6CkBAIC0zOTEsNyArMzkyLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
ICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAg
ICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAg
c3Znc3R5bGUtPnNldE1hcmtlckVuZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJ
ZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAg
ICAgICAgIHN2Z3N0eWxlLT5zZXRNYXJrZXJFbmRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZy
YWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUubV9lbGVtZW50LT5kb2N1bWVu
dCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1By
b3BlcnR5U3Ryb2tlTGluZWNhcDoKQEAgLTQyOCw3ICs0MjksNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAg
ICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAg
ICAgICAgICBzdmdzdHlsZS0+c2V0RmlsdGVyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFn
bWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOwor
ICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbHRlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6
ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5tX2VsZW1lbnQtPmRvY3Vt
ZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlNYXNrOgpAQCAtNDQyLDcgKzQ0Myw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAg
ICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAg
ICAgICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAg
IHN2Z3N0eWxlLT5zZXRNYXNrZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRl
bnRpZmllckZyb21JUklTdHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAg
ICAgICBzdmdzdHlsZS0+c2V0TWFza2VyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVu
dElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLm1fZWxlbWVudC0+ZG9jdW1lbnQoKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUNsaXBQYXRoOgpAQCAtNDU2LDcgKzQ1Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlT
VkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAg
ICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAg
ICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2
Z3N0eWxlLT5zZXRDbGlwcGVyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50
aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAg
ICAgc3Znc3R5bGUtPnNldENsaXBwZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50
SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUubV9lbGVtZW50LT5kb2N1bWVudCgpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
VGV4dEFuY2hvcjoKQEAgLTQ3NywxNCArNDc4LDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHN0b3BDb2xvciwgU3Rv
cENvbG9yKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAg
ICAgICAgIHN2Z3N0eWxlLT5zZXRTdG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShz
dGF0aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgbV9zdHlsZS0+Y29sb3IoKSkpOworICAgICAg
ICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1
ZShzdGF0aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgc3RhdGUubV9zdHlsZS0+Y29sb3IoKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICBjYXNlIENTU1Byb3BlcnR5
TGlnaHRpbmdDb2xvcjoKICAgICAgICAgewogICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5E
X0lOSVRJQUwobGlnaHRpbmdDb2xvciwgTGlnaHRpbmdDb2xvcik7CiAgICAgICAgICAgICBpZiAo
dmFsdWUtPmlzU1ZHQ29sb3IoKSkKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TGlnaHRp
bmdDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4o
dmFsdWUpLCBtX3N0eWxlLT5jb2xvcigpKSk7CisgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dExpZ2h0aW5nQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2FzdDxTVkdD
b2xvcio+KHZhbHVlKSwgc3RhdGUubV9zdHlsZS0+Y29sb3IoKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZsb29kT3BhY2l0eToKQEAg
LTUwOSw3ICs1MTAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBI
QU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChmbG9vZENvbG9yLCBGbG9vZENvbG9yKTsKICAgICAg
ICAgICAgIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAgICAgICAgIHN2Z3N0eWxl
LT5zZXRGbG9vZENvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZH
Q29sb3IqPih2YWx1ZSksIG1fc3R5bGUtPmNvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBzdmdz
dHlsZS0+c2V0Rmxvb2RDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0
PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5tX3N0eWxlLT5jb2xvcigpKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5R2x5cGhPcmllbnRh
dGlvbkhvcml6b250YWw6CkBAIC01NDksNyArNTUwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U3ZnU2hhZG93OiB7
CiAgICAgICAgICAgICBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgICAgIHJldHVybiBzdmdz
dHlsZS0+c2V0U2hhZG93KGFkb3B0UHRyKG1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRv
dygpID8gbmV3IFNoYWRvd0RhdGEoKm1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRvdygp
KSA6IDApKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3Znc3R5bGUtPnNldFNoYWRvdyhhZG9w
dFB0cihzdGF0ZS5tX3BhcmVudFN0eWxlLT5zdmdTdHlsZSgpLT5zaGFkb3coKSA/IG5ldyBTaGFk
b3dEYXRhKCpzdGF0ZS5tX3BhcmVudFN0eWxlLT5zdmdTdHlsZSgpLT5zaGFkb3coKSkgOiAwKSk7
CiAgICAgICAgICAgICBpZiAoaXNJbml0aWFsIHx8IHByaW1pdGl2ZVZhbHVlKSAvLyBpbml0aWFs
IHwgbm9uZQogICAgICAgICAgICAgICAgIHJldHVybiBzdmdzdHlsZS0+c2V0U2hhZG93KG51bGxw
dHIpOwogCkBAIC01NjQsOSArNTY1LDkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1By
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlm
ICghZmlyc3RWYWx1ZS0+aXNTaGFkb3dWYWx1ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIFNoYWRvd1ZhbHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8U2hhZG93VmFsdWUq
PihmaXJzdFZhbHVlKTsKLSAgICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uKGl0ZW0tPngtPmNv
bXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCks
IG1fcm9vdEVsZW1lbnRTdHlsZSkpOwotICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVy
ID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRT
dHlsZSkgOiAwOworICAgICAgICAgICAgSW50UG9pbnQgbG9jYXRpb24oaXRlbS0+eC0+Y29tcHV0
ZUxlbmd0aDxpbnQ+KHN0YXRlLm1fc3R5bGUuZ2V0KCksIHN0YXRlLm1fcm9vdEVsZW1lbnRTdHls
ZSksCisgICAgICAgICAgICAgICAgaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLm1f
c3R5bGUuZ2V0KCksIHN0YXRlLm1fcm9vdEVsZW1lbnRTdHlsZSkpOworICAgICAgICAgICAgaW50
IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRl
Lm1fc3R5bGUuZ2V0KCksIHN0YXRlLm1fcm9vdEVsZW1lbnRTdHlsZSkgOiAwOwogICAgICAgICAg
ICAgQ29sb3IgY29sb3I7CiAgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCiAgICAgICAgICAg
ICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggOTU2Yjk4NGI3MmE1NDE5NjVh
NWUzOWI3NzlmNDg1ZmY3NDM2MDI0Yi4uYTY5NTdmM2Y5ODY1OWUzMjZkMzgxYTBlZjYyZGViNzZm
Mzg0Mjc5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtNDQsNyArNDQs
NiBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKICNpbmNsdWRlICJD
U1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTUmVmbGVjdFZhbHVlLmgiCi0jaW5jbHVk
ZSAiQ1NTUnVsZUxpc3QuaCIKICNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNT
U1NlbGVjdG9yTGlzdC5oIgogI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgpAQCAtMjAwLDE0ICsx
OTksMTQgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogI2RlZmluZSBIQU5ETEVfSU5I
RVJJVChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJbmhlcml0KSB7IFwKLSAgICBtX3N0eWxlLT5zZXQj
I1Byb3AobV9wYXJlbnRTdHlsZS0+cHJvcCgpKTsgXAorICAgIG1fc3RhdGUubV9zdHlsZS0+c2V0
IyNQcm9wKG1fc3RhdGUubV9wYXJlbnRTdHlsZS0+cHJvcCgpKTsgXAogICAgIHJldHVybjsgXAog
fQogCiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKIEhB
TkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlmIChpc0luaXRpYWwpIHsgXAotICAgIG1fc3R5
bGUtPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMjUHJvcCgpKTsgXAorICAgIG1fc3Rh
dGUubV9zdHlsZS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBcCiAg
ICAgcmV0dXJuOyBcCiB9CiAKQEAgLTI2OSwzNCArMjY4LDE2IEBAIHN0YXRpYyBTdHlsZVByb3Bl
cnR5U2V0KiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkKIAogCiBTdHlsZVJlc29sdmVyOjpTdHls
ZVJlc29sdmVyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHls
ZXMpCi0gICAgOiBtX2hhc1VBQXBwZWFyYW5jZShmYWxzZSkKLSAgICAsIG1fYmFja2dyb3VuZERh
dGEoQmFja2dyb3VuZEZpbGxMYXllcikKLSAgICAsIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFk
ZGl0aW9uc1NpbmNlTGFzdFN3ZWVwKDApCisgICAgOiBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVB
ZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCgwKQogICAgICwgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hl
U3dlZXBUaW1lcih0aGlzLCAmU3R5bGVSZXNvbHZlcjo6c3dlZXBNYXRjaGVkUHJvcGVydGllc0Nh
Y2hlKQogICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fc2VsZWN0b3JDaGVja2Vy
KGRvY3VtZW50KQotICAgICwgbV9wYXJlbnRTdHlsZSgwKQotICAgICwgbV9yb290RWxlbWVudFN0
eWxlKDApCi0gICAgLCBtX2VsZW1lbnQoMCkKLSAgICAsIG1fc3R5bGVkRWxlbWVudCgwKQotICAg
ICwgbV9yZWdpb25Gb3JTdHlsaW5nKDApCi0gICAgLCBtX2VsZW1lbnRMaW5rU3RhdGUoTm90SW5z
aWRlTGluaykKLSAgICAsIG1fcGFyZW50Tm9kZSgwKQotICAgICwgbV9saW5lSGVpZ2h0VmFsdWUo
MCkKLSAgICAsIG1fZm9udERpcnR5KGZhbHNlKQogICAgICwgbV9tYXRjaEF1dGhvckFuZFVzZXJT
dHlsZXMobWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICwgbV9zYW1lT3JpZ2luT25seShm
YWxzZSkKLSAgICAsIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KGZhbHNlKQogICAgICwg
bV9mb250U2VsZWN0b3IoQ1NTRm9udFNlbGVjdG9yOjpjcmVhdGUoZG9jdW1lbnQpKQogI2lmIEVO
QUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCiAgICAgLCBtX3ZpZXdwb3J0U3R5bGVSZXNvbHZl
cihWaWV3cG9ydFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZShkb2N1bWVudCkpCiAjZW5kaWYKLSAgICAs
IG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpCi0gICAgLCBtX2FwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpCiAgICAgLCBtX3N0eWxlQnVpbGRlcihTdHlsZUJ1
aWxkZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpKQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAg
ICAsIG1faGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpCi0jZW5kaWYKICAgICAsIG1fc3R5bGVNYXAo
dGhpcykKIHsKICAgICBFbGVtZW50KiByb290ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgp
OwpAQCAtNjYwLDIzICs2NDEsMjYgQEAgYm9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6bV9tYXRj
aGluZ1VBUnVsZXMgPSBmYWxzZTsKIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5n
UnVsZXMoY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJh
bmdlKQogewogICAgIEFTU0VSVChtYXRjaFJlcXVlc3QucnVsZVNldCk7Ci0gICAgQVNTRVJUKG1f
ZWxlbWVudCk7CisgICAgQVNTRVJUKG1fc3RhdGUubV9lbGVtZW50KTsKIAotICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgcHNldWRvSWQgPSBtX2VsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCk7CisgICAg
U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGUubV9l
bGVtZW50OworICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBzdGF0ZS5tX3N0eWxl
ZEVsZW1lbnQ7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwc2V1ZG9JZCA9IGVsZW1lbnQtPnNo
YWRvd1BzZXVkb0lkKCk7CiAgICAgaWYgKCFwc2V1ZG9JZC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
QVNTRVJUKG1fc3R5bGVkRWxlbWVudCk7CisgICAgICAgIEFTU0VSVChzdHlsZWRFbGVtZW50KTsK
ICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0
LT5zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMocHNldWRvSWQuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0
LCBydWxlUmFuZ2UpOwogICAgIH0KIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBpZiAo
bV9lbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiB0b1dlYlZUVEVsZW1lbnQobV9lbGVtZW50
KS0+d2ViVlRUTm9kZVR5cGUoKSkKKyAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkg
JiYgdG9XZWJWVFRFbGVtZW50KGVsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpKQogICAgICAgICBj
b2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmN1ZVBzZXVk
b1J1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKICNlbmRpZgogICAgIC8vIENoZWNr
IHdoZXRoZXIgb3RoZXIgdHlwZXMgb2YgcnVsZXMgYXJlIGFwcGxpY2FibGUgaW4gdGhlIGN1cnJl
bnQgdHJlZSBzY29wZS4gQ3JpdGVyaWEgZm9yIHRoaXM6CiAgICAgLy8gYSkgaXQncyBhIFVBIHJ1
bGUKICAgICAvLyBiKSB0aGUgdHJlZSBzY29wZSBhbGxvd3MgYXV0aG9yIHJ1bGVzCiAgICAgLy8g
YykgdGhlIHJ1bGVzIGNvbWVzIGZyb20gYSBzY29wZWQgc3R5bGUgc2hlZXQgd2l0aGluIHRoZSBz
YW1lIHRyZWUgc2NvcGUKLSAgICBUcmVlU2NvcGUqIHRyZWVTY29wZSA9IG1fZWxlbWVudC0+dHJl
ZVNjb3BlKCk7CisgICAgVHJlZVNjb3BlKiB0cmVlU2NvcGUgPSBlbGVtZW50LT50cmVlU2NvcGUo
KTsKICAgICBpZiAoIU1hdGNoaW5nVUFSdWxlc1Njb3BlOjppc01hdGNoaW5nVUFSdWxlcygpCiAg
ICAgICAgICYmICF0cmVlU2NvcGUtPmFwcGx5QXV0aG9yU3R5bGVzKCkKICAgICAgICAgJiYgKCFt
YXRjaFJlcXVlc3Quc2NvcGUgfHwgbWF0Y2hSZXF1ZXN0LnNjb3BlLT50cmVlU2NvcGUoKSAhPSB0
cmVlU2NvcGUpKQpAQCAtNjg0LDMwICs2NjgsMzAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xs
ZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVIK
IAogICAgIC8vIFdlIG5lZWQgdG8gY29sbGVjdCB0aGUgcnVsZXMgZm9yIGlkLCBjbGFzcywgdGFn
LCBhbmQgZXZlcnl0aGluZyBlbHNlIGludG8gYSBidWZmZXIgYW5kCiAgICAgLy8gdGhlbiBzb3J0
IHRoZSBidWZmZXIuCi0gICAgaWYgKG1fZWxlbWVudC0+aGFzSUQoKSkKLSAgICAgICAgY29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5pZFJ1bGVzKG1fZWxl
bWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVS
YW5nZSk7Ci0gICAgaWYgKG1fc3R5bGVkRWxlbWVudCAmJiBtX3N0eWxlZEVsZW1lbnQtPmhhc0Ns
YXNzKCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0eWxlZEVsZW1lbnQt
PmNsYXNzTmFtZXMoKS5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+Y2xhc3NSdWxlcyhtX3N0eWxlZEVsZW1l
bnQtPmNsYXNzTmFtZXMoKVtpXS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Cisg
ICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkpCisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9y
TGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+aWRSdWxlcyhlbGVtZW50LT5pZEZvclN0eWxlUmVz
b2x1dGlvbigpLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBpZiAoc3R5
bGVkRWxlbWVudCAmJiBzdHlsZWRFbGVtZW50LT5oYXNDbGFzcygpKSB7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc3R5bGVkRWxlbWVudC0+Y2xhc3NOYW1lcygpLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5y
dWxlU2V0LT5jbGFzc1J1bGVzKHN0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKVtpXS5pbXBsKCkp
LCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CiAgICAgfQogCi0gICAgaWYgKG1fZWxlbWVudC0+
aXNMaW5rKCkpCisgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpKQogICAgICAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmxpbmtQc2V1ZG9DbGFzc1J1
bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICBpZiAobV9zZWxlY3RvckNoZWNr
ZXIubWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MobV9lbGVtZW50KSkKKyAgICBpZiAobV9zZWxlY3Rv
ckNoZWNrZXIubWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MoZWxlbWVudCkpCiAgICAgICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+Zm9jdXNQc2V1ZG9D
bGFzc1J1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPnRhZ1J1bGVzKG1fZWxlbWVudC0+
bG9jYWxOYW1lKCkuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+dGFnUnVsZXMoZWxl
bWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogICAg
IGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+dW5pdmVy
c2FsUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogfQogCiB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKGNvbnN0IE1hdGNoUmVxdWVzdCYg
bWF0Y2hSZXF1ZXN0LCBSdWxlUmFuZ2UmIHJ1bGVSYW5nZSkKIHsKLSAgICBpZiAoIW1fcmVnaW9u
Rm9yU3R5bGluZykKKyAgICBpZiAoIW1fc3RhdGUubV9yZWdpb25Gb3JTdHlsaW5nKQogICAgICAg
ICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBzaXplID0gbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPm1f
cmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNl
bGVjdG9yID0gbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNl
dHMuYXQoaSkuc2VsZWN0b3I7Ci0gICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKHJlZ2lv
blNlbGVjdG9yLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9yZWdpb25Gb3JTdHlsaW5nLT5ub2Rl
KCkpKSkgeworICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihyZWdpb25TZWxlY3Rvciwg
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fc3RhdGUubV9yZWdpb25Gb3JTdHlsaW5nLT5ub2RlKCkp
KSkgewogICAgICAgICAgICAgUnVsZVNldCogcmVnaW9uUnVsZXMgPSBtYXRjaFJlcXVlc3QucnVs
ZVNldC0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5ydWxlU2V0LmdldCgpOwog
ICAgICAgICAgICAgQVNTRVJUKHJlZ2lvblJ1bGVzKTsKICAgICAgICAgICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzKE1hdGNoUmVxdWVzdChyZWdpb25SdWxlcywgbWF0Y2hSZXF1ZXN0LmluY2x1ZGVF
bXB0eVJ1bGVzLCBtYXRjaFJlcXVlc3Quc2NvcGUpLCBydWxlUmFuZ2UpOwpAQCAtNzE3LDI0ICs3
MDEsMjUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lv
bihjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWUKIAogdm9pZCBTdHlsZVJlc29sdmVyOjpz
b3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKIHsKLSAgICBp
ZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7
CisgICAgaWYgKHN0YXRlLm1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgc29ydE1hdGNoZWRSdWxlcygpOwogCiAgICAgaWYgKG1fc2VsZWN0b3JDaGVja2Vy
Lm1vZGUoKSA9PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcykgewotICAgICAgICBp
ZiAoIW1fcnVsZUxpc3QpCi0gICAgICAgICAgICBtX3J1bGVMaXN0ID0gU3RhdGljQ1NTUnVsZUxp
c3Q6OmNyZWF0ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVk
UnVsZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX3J1bGVMaXN0LT5ydWxlcygpLmFwcGVu
ZChtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5jcmVhdGVDU1NPTVdyYXBwZXIoKSk7CisgICAg
ICAgIGlmICghc3RhdGUubV9ydWxlTGlzdCkKKyAgICAgICAgICAgIHN0YXRlLm1fcnVsZUxpc3Qg
PSBTdGF0aWNDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzdGF0ZS5tX21hdGNoZWRSdWxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHN0
YXRlLm1fcnVsZUxpc3QtPnJ1bGVzKCkuYXBwZW5kKHN0YXRlLm1fbWF0Y2hlZFJ1bGVzW2ldLT5y
dWxlKCktPmNyZWF0ZUNTU09NV3JhcHBlcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0byBvdXIg
bGlzdCBvZiBkZWNsYXJhdGlvbnMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0
Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChtX3N0eWxlICYmIG1fbWF0Y2hl
ZFJ1bGVzW2ldLT5jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAgICAgICAg
ICAgIG1fc3R5bGUtPnNldFVuaXF1ZSgpOwotICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhy
ZXN1bHQsIG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPnByb3BlcnRpZXMoKSwgbV9tYXRjaGVk
UnVsZXNbaV0tPnJ1bGUoKSwgbV9tYXRjaGVkUnVsZXNbaV0tPmxpbmtNYXRjaFR5cGUoKSwgbV9t
YXRjaGVkUnVsZXNbaV0tPnByb3BlcnR5V2hpdGVsaXN0VHlwZSgpKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc3RhdGUubV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgaWYgKHN0YXRlLm1fc3R5bGUgJiYgc3RhdGUubV9tYXRjaGVkUnVsZXNbaV0tPmNvbnRhaW5z
VW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQorICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+
c2V0VW5pcXVlKCk7CisgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGUu
bV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+cHJvcGVydGllcygpLCBzdGF0ZS5tX21hdGNoZWRS
dWxlc1tpXS0+cnVsZSgpLCBzdGF0ZS5tX21hdGNoZWRSdWxlc1tpXS0+bGlua01hdGNoVHlwZSgp
LCBzdGF0ZS5tX21hdGNoZWRSdWxlc1tpXS0+cHJvcGVydHlXaGl0ZWxpc3RUeXBlKCkpOwogICAg
IH0KIH0KIApAQCAtNzQ1LDEyICs3MzAsMTIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNj
b3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHQKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gTWF0Y2ggc2NvcGVkIGF1dGhvciBydWxlcyBieSB0cmF2
ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVudCBzdGFjayAocmVidWlsZCBpdCBpZiBpdCBnb3QgaW5j
b25zaXN0ZW50KS4KLSAgICBpZiAobV9zY29wZVJlc29sdmVyLT5oYXNTY29wZWRTdHlsZXMoKSAm
JiBtX3Njb3BlUmVzb2x2ZXItPmVuc3VyZVN0YWNrQ29uc2lzdGVuY3kobV9lbGVtZW50KSkgewot
ICAgICAgICBib29sIGFwcGx5QXV0aG9yU3R5bGVzID0gbV9lbGVtZW50LT50cmVlU2NvcGUoKS0+
YXBwbHlBdXRob3JTdHlsZXMoKTsKKyAgICBpZiAobV9zY29wZVJlc29sdmVyLT5oYXNTY29wZWRT
dHlsZXMoKSAmJiBtX3Njb3BlUmVzb2x2ZXItPmVuc3VyZVN0YWNrQ29uc2lzdGVuY3kobV9zdGF0
ZS5tX2VsZW1lbnQpKSB7CisgICAgICAgIGJvb2wgYXBwbHlBdXRob3JTdHlsZXMgPSBtX3N0YXRl
Lm1fZWxlbWVudC0+dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9yU3R5bGVzKCk7CiAgICAgICAgIGJv
b2wgZG9jdW1lbnRTY29wZSA9IHRydWU7CiAgICAgICAgIHVuc2lnbmVkIHNjb3BlU2l6ZSA9IG1f
c2NvcGVSZXNvbHZlci0+c3RhY2tTaXplKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzY29wZVNpemU7ICsraSkgewotICAgICAgICAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIo
KTsKKyAgICAgICAgICAgIG1fc3RhdGUubV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKICAgICAgICAg
ICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRp
ZXMuc2l6ZSgpIC0gMTsKIAogICAgICAgICAgICAgY29uc3QgU3R5bGVTY29wZVJlc29sdmVyOjpT
dGFja0ZyYW1lJiBmcmFtZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tGcmFtZUF0KGkpOwpAQCAt
NzgxLDcgKzc2Niw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxl
cyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0CiBpbmxpbmUgYm9vbCBTdHls
ZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCkKIHsKICNp
ZiBFTkFCTEUoU0hBRE9XX0RPTSkKLSAgICByZXR1cm4gbV9zY29wZVJlc29sdmVyICYmIG1fc2Nv
cGVSZXNvbHZlci0+c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhtX2VsZW1l
bnQpOworICAgIHJldHVybiBtX3Njb3BlUmVzb2x2ZXIgJiYgbV9zY29wZVJlc29sdmVyLT5zdHls
ZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKG1fc3RhdGUubV9lbGVtZW50KTsKICNl
bHNlCiAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCkBAIC03OTIsMTcgKzc3NywxNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wg
aW5jbHVkZUVtcHR5UnVsZXMpCiAjaWYgRU5BQkxFKFNIQURPV19ET00pCiAgICAgQVNTRVJUKG1f
c2NvcGVSZXNvbHZlcik7CiAKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIG1fc3Rh
dGUubV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JS
dWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKICAgICBWZWN0b3I8
UnVsZVNldCo+IG1hdGNoZWRSdWxlczsKLSAgICBtX3Njb3BlUmVzb2x2ZXItPm1hdGNoSG9zdFJ1
bGVzKG1fZWxlbWVudCwgbWF0Y2hlZFJ1bGVzKTsKKyAgICBtX3Njb3BlUmVzb2x2ZXItPm1hdGNo
SG9zdFJ1bGVzKG1fc3RhdGUubV9lbGVtZW50LCBtYXRjaGVkUnVsZXMpOwogICAgIGlmIChtYXRj
aGVkUnVsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpID4gMDsgLS1pKSB7CiAgICAgICAgIFJ1bGVSYW5n
ZSBydWxlUmFuZ2UgPSByZXN1bHQucmFuZ2VzLmF1dGhvclJ1bGVSYW5nZSgpOwotICAgICAgICBj
b2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QobWF0Y2hlZFJ1bGVzLmF0KGktMSksIGlu
Y2x1ZGVFbXB0eVJ1bGVzLCBtX2VsZW1lbnQpLCBydWxlUmFuZ2UpOworICAgICAgICBjb2xsZWN0
TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QobWF0Y2hlZFJ1bGVzLmF0KGktMSksIGluY2x1ZGVF
bXB0eVJ1bGVzLCBtX3N0YXRlLm1fZWxlbWVudCksIHJ1bGVSYW5nZSk7CiAgICAgfQogICAgIHNv
cnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOwogI2Vsc2UKQEAgLTgxMywxMCArNzk4
LDEwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMoTWF0Y2hSZXN1bHQmIHJl
c3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIAogdm9pZCBTdHlsZVJlc29sdmVyOjptYXRj
aEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMp
CiB7Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICBtX3N0YXRlLm1fbWF0Y2hlZFJ1
bGVzLmNsZWFyKCk7CiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3VsdC5t
YXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogCi0gICAgaWYgKCFtX2VsZW1lbnQpCisgICAg
aWYgKCFtX3N0YXRlLm1fZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gTWF0Y2gg
Z2xvYmFsIGF1dGhvciBydWxlcy4KQEAgLTgzNCw3ICs4MTksNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6Om1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5
UnVsZXMpCiAgICAgaWYgKCFtX3VzZXJTdHlsZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5tX21hdGNoZWRSdWxlcy5jbGVh
cigpOwogCiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUgPSByZXN1bHQubWF0Y2hlZFBy
b3BlcnRpZXMuc2l6ZSgpIC0gMTsKICAgICBNYXRjaFJlcXVlc3QgbWF0Y2hSZXF1ZXN0KG1fdXNl
clN0eWxlLmdldCgpLCBpbmNsdWRlRW1wdHlSdWxlcyk7CkBAIC04NDcsNyArODMyLDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjptYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29s
IGluY2x1ZGVFbXB0eVJ1bGVzKQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhN
YXRjaFJlc3VsdCYgcmVzdWx0LCBSdWxlU2V0KiBydWxlcykKIHsKLSAgICBtX21hdGNoZWRSdWxl
cy5jbGVhcigpOworICAgIG1fc3RhdGUubV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKICAgICAKICAg
ICByZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6
ZSgpIC0gMTsKICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy5VQVJ1bGVS
YW5nZSgpOwpAQCAtODYxLDkgKzg0NiwxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RN
YXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgYwogICAg
IGlmICghcnVsZXMpCiAgICAgICAgIHJldHVybjsKIAorICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3Rh
dGU7CiAgICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBtYXkgZW5kIHVwIGxvb2tpbmcgdXAgc3R5bGUg
Zm9yIHJhbmRvbSBlbGVtZW50cyBpbiB0aGUgbWlkZGxlIG9mIGEgcmVjdXJzaXZlIHRyZWUgcmVz
b2x2ZS4KICAgICAvLyBBbmNlc3RvciBpZGVudGlmaWVyIGZpbHRlciB3b24ndCBiZSB1cC10by1k
YXRlIGluIHRoYXQgY2FzZSBhbmQgd2UgY2FuJ3QgdXNlIHRoZSBmYXN0IHBhdGguCi0gICAgYm9v
bCBjYW5Vc2VGYXN0UmVqZWN0ID0gbV9zZWxlY3RvckZpbHRlci5wYXJlbnRTdGFja0lzQ29uc2lz
dGVudChtX3BhcmVudE5vZGUpOworICAgIGJvb2wgY2FuVXNlRmFzdFJlamVjdCA9IG1fc2VsZWN0
b3JGaWx0ZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQoc3RhdGUubV9wYXJlbnROb2RlKTsKIAog
ICAgIHVuc2lnbmVkIHNpemUgPSBydWxlcy0+c2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKQEAgLTg4MSwxOSArODY3LDE5IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4q
IHJ1bGVzLCBjCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAvLyBGSVhNRTogRXhwb3NpbmcgdGhlIG5vbi1zdGFuZGFyZCBnZXRNYXRjaGVkQ1NT
UnVsZXMgQVBJIHRvIHdlYiBpcyB0aGUgb25seSByZWFzb24gdGhpcyBpcyBuZWVkZWQuCi0gICAg
ICAgICAgICBpZiAobV9zYW1lT3JpZ2luT25seSAmJiAhcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbigpKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUubV9zYW1lT3JpZ2luT25seSAm
JiAhcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSB7CiAgICAgICAgICAgICAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAv
LyBJZiB3ZSdyZSBtYXRjaGluZyBub3JtYWwgcnVsZXMsIHNldCBhIHBzZXVkbyBiaXQgaWYKICAg
ICAgICAgICAgIC8vIHdlIHJlYWxseSBqdXN0IG1hdGNoZWQgYSBwc2V1ZG8tZWxlbWVudC4KLSAg
ICAgICAgICAgIGlmIChtX2R5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgbV9wc2V1ZG9TdHls
ZSA9PSBOT1BTRVVETykgeworICAgICAgICAgICAgaWYgKHN0YXRlLm1fZHluYW1pY1BzZXVkbyAh
PSBOT1BTRVVETyAmJiBzdGF0ZS5tX3BzZXVkb1N0eWxlID09IE5PUFNFVURPKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1vZGUoKSA9PSBTZWxlY3RvckNoZWNrZXI6
OkNvbGxlY3RpbmdSdWxlcykgewogICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChtX2R5
bmFtaWNQc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKLSAgICAgICAgICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0SGFzUHNldWRvU3R5bGUobV9keW5hbWljUHNldWRvKTsKKyAgICAgICAg
ICAgICAgICBpZiAoc3RhdGUubV9keW5hbWljUHNldWRvIDwgRklSU1RfSU5URVJOQUxfUFNFVURP
SUQpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldEhhc1BzZXVkb1N0eWxl
KHN0YXRlLm1fZHluYW1pY1BzZXVkbyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIC8vIFVwZGF0ZSBvdXIgZmlyc3QvbGFzdCBydWxlIGluZGljZXMgaW4gdGhlIG1hdGNo
ZWQgcnVsZXMgYXJyYXkuCiAgICAgICAgICAgICAgICAgKytydWxlUmFuZ2UubGFzdFJ1bGVJbmRl
eDsKQEAgLTkxOSw3ICs5MDUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVJ1bGVzKGNv
bnN0IFJ1bGVEYXRhKiByMSwgY29uc3QgUnVsZURhdGEqIHIyKQogCiB2b2lkIFN0eWxlUmVzb2x2
ZXI6OnNvcnRNYXRjaGVkUnVsZXMoKQogewotICAgIHN0ZDo6c29ydChtX21hdGNoZWRSdWxlcy5i
ZWdpbigpLCBtX21hdGNoZWRSdWxlcy5lbmQoKSwgY29tcGFyZVJ1bGVzKTsKKyAgICBzdGQ6OnNv
cnQobV9zdGF0ZS5tX21hdGNoZWRSdWxlcy5iZWdpbigpLCBtX3N0YXRlLm1fbWF0Y2hlZFJ1bGVz
LmVuZCgpLCBjb21wYXJlUnVsZXMpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxs
UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZXMpCkBA
IC05MjksMTkgKzkxNSwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0
Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZQogICAgIC8vIE5vdyB3
ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVzLgogICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0
eWxlcykKICAgICAgICAgbWF0Y2hVc2VyUnVsZXMocmVzdWx0LCBmYWxzZSk7Ci0gICAgICAgIAor
CiAgICAgLy8gTm93IGNoZWNrIGF1dGhvciBydWxlcywgYmVnaW5uaW5nIGZpcnN0IHdpdGggcHJl
c2VudGF0aW9uYWwgYXR0cmlidXRlcyBtYXBwZWQgZnJvbSBIVE1MLgotICAgIGlmIChtX3N0eWxl
ZEVsZW1lbnQpIHsKLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1f
c3R5bGVkRWxlbWVudC0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CisgICAgaWYgKG1f
c3RhdGUubV9zdHlsZWRFbGVtZW50KSB7CisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRp
ZXMocmVzdWx0LCBtX3N0YXRlLm1fc3R5bGVkRWxlbWVudC0+cHJlc2VudGF0aW9uQXR0cmlidXRl
U3R5bGUoKSk7CiAKICAgICAgICAgLy8gTm93IHdlIGNoZWNrIGFkZGl0aW9uYWwgbWFwcGVkIGRl
Y2xhcmF0aW9ucy4KICAgICAgICAgLy8gVGFibGVzIGFuZCB0YWJsZSBjZWxscyBzaGFyZSBhbiBh
ZGRpdGlvbmFsIG1hcHBlZCBydWxlIHRoYXQgbXVzdCBiZSBhcHBsaWVkCiAgICAgICAgIC8vIGFm
dGVyIGFsbCBhdHRyaWJ1dGVzLCBzaW5jZSB0aGVpciBtYXBwZWQgc3R5bGUgZGVwZW5kcyBvbiB0
aGUgdmFsdWVzIG9mIG11bHRpcGxlIGF0dHJpYnV0ZXMuCi0gICAgICAgIGFkZEVsZW1lbnRTdHls
ZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRp
b25BdHRyaWJ1dGVTdHlsZSgpKTsKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhy
ZXN1bHQsIG1fc3RhdGUubV9zdHlsZWRFbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0
cmlidXRlU3R5bGUoKSk7CiAKLSAgICAgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aXNIVE1MRWxl
bWVudCgpKSB7CisgICAgICAgIGlmIChtX3N0YXRlLm1fc3R5bGVkRWxlbWVudC0+aXNIVE1MRWxl
bWVudCgpKSB7CiAgICAgICAgICAgICBib29sIGlzQXV0bzsKLSAgICAgICAgICAgIFRleHREaXJl
Y3Rpb24gdGV4dERpcmVjdGlvbiA9IHRvSFRNTEVsZW1lbnQobV9zdHlsZWRFbGVtZW50KS0+ZGly
ZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoaXNBdXRvKTsKKyAgICAgICAgICAgIFRl
eHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IHRvSFRNTEVsZW1lbnQobV9zdGF0ZS5tX3N0eWxl
ZEVsZW1lbnQpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOwog
ICAgICAgICAgICAgaWYgKGlzQXV0bykKICAgICAgICAgICAgICAgICBhZGRNYXRjaGVkUHJvcGVy
dGllcyhyZXN1bHQsIHRleHREaXJlY3Rpb24gPT0gTFRSID8gbGVmdFRvUmlnaHREZWNsYXJhdGlv
bigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpKTsKICAgICAgICAgfQpAQCAtOTUyLDE4ICs5
MzgsMTggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiBy
ZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWUKICAgICAgICAgbWF0Y2hBdXRob3JSdWxl
cyhyZXN1bHQsIGZhbHNlKTsKIAogICAgIC8vIE5vdyBjaGVjayBvdXIgaW5saW5lIHN0eWxlIGF0
dHJpYnV0ZS4KLSAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdHlsZWRF
bGVtZW50ICYmIG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSkgeworICAgIGlmIChtX21h
dGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0YXRlLm1fc3R5bGVkRWxlbWVudCAmJiBtX3N0
YXRlLm1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSkgewogICAgICAgICAvLyBJbmxpbmUg
c3R5bGUgaXMgaW1tdXRhYmxlIGFzIGxvbmcgYXMgdGhlcmUgaXMgbm8gQ1NTT00gd3JhcHBlci4K
ICAgICAgICAgLy8gRklYTUU6IE1lZGlhIGNvbnRyb2wgc2hhZG93IHRyZWVzIHNlZW0gdG8gaGF2
ZSBwcm9ibGVtcyB3aXRoIGNhY2hpbmcuCi0gICAgICAgIGJvb2wgaXNJbmxpbmVTdHlsZUNhY2hl
YWJsZSA9ICFtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCktPmlzTXV0YWJsZSgpICYmICFt
X3N0eWxlZEVsZW1lbnQtPmlzSW5TaGFkb3dUcmVlKCk7CisgICAgICAgIGJvb2wgaXNJbmxpbmVT
dHlsZUNhY2hlYWJsZSA9ICFtX3N0YXRlLm1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKS0+
aXNNdXRhYmxlKCkgJiYgIW1fc3RhdGUubV9zdHlsZWRFbGVtZW50LT5pc0luU2hhZG93VHJlZSgp
OwogICAgICAgICAvLyBGSVhNRTogQ29uc3RpZnkuCi0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVBy
b3BlcnRpZXMocmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCksIGlzSW5saW5l
U3R5bGVDYWNoZWFibGUpOworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3Vs
dCwgbV9zdGF0ZS5tX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCksIGlzSW5saW5lU3R5bGVD
YWNoZWFibGUpOwogICAgIH0KIAogI2lmIEVOQUJMRShTVkcpCiAgICAgLy8gTm93IGNoZWNrIFNN
SUwgYW5pbWF0aW9uIG92ZXJyaWRlIHN0eWxlLgotICAgIGlmIChpbmNsdWRlU01JTFByb3BlcnRp
ZXMgJiYgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdHlsZWRFbGVtZW50ICYmIG1f
c3R5bGVkRWxlbWVudC0+aXNTVkdFbGVtZW50KCkpCi0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVBy
b3BlcnRpZXMocmVzdWx0LCBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obV9zdHlsZWRFbGVtZW50
KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCksIGZhbHNlIC8qIGlzQ2FjaGVhYmxlICov
KTsKKyAgICBpZiAoaW5jbHVkZVNNSUxQcm9wZXJ0aWVzICYmIG1fbWF0Y2hBdXRob3JBbmRVc2Vy
U3R5bGVzICYmIG1fc3RhdGUubV9zdHlsZWRFbGVtZW50ICYmIG1fc3RhdGUubV9zdHlsZWRFbGVt
ZW50LT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhy
ZXN1bHQsIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihtX3N0YXRlLm1fc3R5bGVkRWxlbWVudCkt
PmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpLCBmYWxzZSAvKiBpc0NhY2hlYWJsZSAqLyk7
CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlU01JTFByb3BlcnRpZXMpOwogI2VuZGlm
CkBAIC05ODAsMTAgKzk2NiwxMCBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNsYXNzTmFtZXNBZmZl
Y3RlZEJ5UnVsZXMoY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NOYW1lcwogCiBpbmxpbmUg
dm9pZCBTdHlsZVJlc29sdmVyOjppbml0RWxlbWVudChFbGVtZW50KiBlKQogewotICAgIGlmICht
X2VsZW1lbnQgIT0gZSkgewotICAgICAgICBtX2VsZW1lbnQgPSBlOwotICAgICAgICBtX3N0eWxl
ZEVsZW1lbnQgPSBtX2VsZW1lbnQgJiYgbV9lbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSA/IHN0
YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihtX2VsZW1lbnQpIDogMDsKLSAgICAgICAgbV9lbGVt
ZW50TGlua1N0YXRlID0gZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtTdGF0ZSgpLT5kZXRlcm1pbmVM
aW5rU3RhdGUobV9lbGVtZW50KTsKKyAgICBpZiAobV9zdGF0ZS5tX2VsZW1lbnQgIT0gZSkgewor
ICAgICAgICBtX3N0YXRlLm1fZWxlbWVudCA9IGU7CisgICAgICAgIG1fc3RhdGUubV9zdHlsZWRF
bGVtZW50ID0gbV9zdGF0ZS5tX2VsZW1lbnQgJiYgbV9zdGF0ZS5tX2VsZW1lbnQtPmlzU3R5bGVk
RWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fc3RhdGUubV9lbGVtZW50
KSA6IDA7CisgICAgICAgIG1fc3RhdGUubV9lbGVtZW50TGlua1N0YXRlID0gZG9jdW1lbnQoKS0+
dmlzaXRlZExpbmtTdGF0ZSgpLT5kZXRlcm1pbmVMaW5rU3RhdGUoZSk7CiAgICAgICAgIGlmIChl
ICYmIGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAg
IGUtPmRvY3VtZW50KCktPnNldERpcmVjdGlvblNldE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsK
ICAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVs
ZW1lbnQoZmFsc2UpOwpAQCAtOTkzLDMyICs5NzksMzMgQEAgaW5saW5lIHZvaWQgU3R5bGVSZXNv
bHZlcjo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKIAogaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZl
cjo6aW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUsIFBzZXVkb0lkIHBzZXVkb0lEKQogewotICAgIG1fcHNldWRvU3R5bGUgPSBwc2V1ZG9JRDsK
KyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworICAgIHN0YXRlLm1fcHNldWRvU3R5bGUgPSBw
c2V1ZG9JRDsKIAogICAgIGlmIChlKSB7CiAgICAgICAgIE5vZGVSZW5kZXJpbmdDb250ZXh0IGNv
bnRleHQoZSk7Ci0gICAgICAgIG1fcGFyZW50Tm9kZSA9IGNvbnRleHQucGFyZW50Tm9kZUZvclJl
bmRlcmluZ0FuZFN0eWxlKCk7Ci0gICAgICAgIG1fcGFyZW50U3R5bGUgPSBjb250ZXh0LnJlc2V0
U3R5bGVJbmhlcml0YW5jZSgpID8gMCA6CisgICAgICAgIHN0YXRlLm1fcGFyZW50Tm9kZSA9IGNv
bnRleHQucGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlKCk7CisgICAgICAgIHN0YXRlLm1f
cGFyZW50U3R5bGUgPSBjb250ZXh0LnJlc2V0U3R5bGVJbmhlcml0YW5jZSgpID8gMCA6CiAgICAg
ICAgICAgICBwYXJlbnRTdHlsZSA/IHBhcmVudFN0eWxlIDoKLSAgICAgICAgICAgIG1fcGFyZW50
Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDA7Ci0gICAgICAgIG1fZGlzdHJp
YnV0ZWRUb0luc2VydGlvblBvaW50ID0gY29udGV4dC5pbnNlcnRpb25Qb2ludCgpOworICAgICAg
ICAgICAgc3RhdGUubV9wYXJlbnROb2RlID8gc3RhdGUubV9wYXJlbnROb2RlLT5yZW5kZXJTdHls
ZSgpIDogMDsKKyAgICAgICAgc3RhdGUubV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQgPSBj
b250ZXh0Lmluc2VydGlvblBvaW50KCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9wYXJlbnRO
b2RlID0gMDsKLSAgICAgICAgbV9wYXJlbnRTdHlsZSA9IHBhcmVudFN0eWxlOwotICAgICAgICBt
X2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCA9IGZhbHNlOworICAgICAgICBzdGF0ZS5tX3Bh
cmVudE5vZGUgPSAwOworICAgICAgICBzdGF0ZS5tX3BhcmVudFN0eWxlID0gcGFyZW50U3R5bGU7
CisgICAgICAgIHN0YXRlLm1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50ID0gZmFsc2U7CiAg
ICAgfQogCiAgICAgTm9kZSogZG9jRWxlbWVudCA9IGUgPyBlLT5kb2N1bWVudCgpLT5kb2N1bWVu
dEVsZW1lbnQoKSA6IDA7CiAgICAgUmVuZGVyU3R5bGUqIGRvY1N0eWxlID0gZG9jdW1lbnQoKS0+
cmVuZGVyU3R5bGUoKTsKLSAgICBtX3Jvb3RFbGVtZW50U3R5bGUgPSBkb2NFbGVtZW50ICYmIGUg
IT0gZG9jRWxlbWVudCA/IGRvY0VsZW1lbnQtPnJlbmRlclN0eWxlKCkgOiBkb2NTdHlsZTsKKyAg
ICBzdGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUgPSBkb2NFbGVtZW50ICYmIGUgIT0gZG9jRWxlbWVu
dCA/IGRvY0VsZW1lbnQtPnJlbmRlclN0eWxlKCkgOiBkb2NTdHlsZTsKIAotICAgIG1fc3R5bGUg
PSAwOworICAgIHN0YXRlLm1fc3R5bGUgPSAwOwogCi0gICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0
aWVzLmNsZWFyKCk7CisgICAgc3RhdGUubV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmNsZWFyKCk7
CiAKLSAgICBtX3J1bGVMaXN0ID0gMDsKKyAgICBzdGF0ZS5tX3J1bGVMaXN0ID0gMDsKIAotICAg
IG1fZm9udERpcnR5ID0gZmFsc2U7CisgICAgc3RhdGUubV9mb250RGlydHkgPSBmYWxzZTsKIH0K
IAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNTdHlsZVNlYXJjaFRocmVzaG9sZCA9IDEwOwpAQCAt
MTA4MSwyMyArMTA2OCwyNCBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRp
ZGF0ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqIHJ1bGVTZXQpCiB7CiAgICAgaWYgKCFydWxlU2V0
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAg
ICBtX3N0YXRlLm1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAKICAgICBtX3NlbGVjdG9yQ2hlY2tl
ci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6U2hhcmluZ1J1bGVzKTsKICAgICBpbnQgZmlyc3RS
dWxlSW5kZXggPSAtMSwgbGFzdFJ1bGVJbmRleCA9IC0xOwogICAgIFJ1bGVSYW5nZSBydWxlUmFu
Z2UoZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwogICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzKE1hdGNoUmVxdWVzdChydWxlU2V0KSwgcnVsZVJhbmdlKTsKICAgICBtX3NlbGVjdG9yQ2hl
Y2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpOwotICAgIGlmICht
X21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgaWYgKG1fc3RhdGUubV9tYXRjaGVkUnVsZXMu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xl
YXIoKTsKKyAgICBtX3N0YXRlLm1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKFN0
eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CisgICAgY29uc3QgU3RhdGUmIHN0YXRlID0g
bV9zdGF0ZTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiB0aGlzSW5wdXRFbGVtZW50ID0gZWxlbWVu
dC0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBvdGhlcklucHV0RWxl
bWVudCA9IG1fZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50
KiBvdGhlcklucHV0RWxlbWVudCA9IHN0YXRlLm1fZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsK
IAogICAgIGlmICghdGhpc0lucHV0RWxlbWVudCB8fCAhb3RoZXJJbnB1dEVsZW1lbnQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTExMTgsMjUgKzExMDYsMjUgQEAgYm9vbCBTdHlsZVJlc29s
dmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29u
c3QKICAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+aXNSZXF1aXJlZCgpICE9IG90aGVySW5wdXRF
bGVtZW50LT5pc1JlcXVpcmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChl
bGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpICE9IG1fZWxlbWVudC0+aXNFbmFibGVkRm9y
bUNvbnRyb2woKSkKKyAgICBpZiAoZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSAhPSBz
dGF0ZS5tX2VsZW1lbnQtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgIT0gbV9l
bGVtZW50LT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkpCisgICAgaWYgKGVsZW1lbnQtPmlzRGVm
YXVsdEJ1dHRvbkZvckZvcm0oKSAhPSBzdGF0ZS5tX2VsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZv
ckZvcm0oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fZWxlbWVudC0+ZG9j
dW1lbnQoKS0+Y29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKSkgeworICAgIGlmIChzdGF0ZS5t
X2VsZW1lbnQtPmRvY3VtZW50KCktPmNvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCkpIHsKICAg
ICAgICAgYm9vbCB3aWxsVmFsaWRhdGUgPSBlbGVtZW50LT53aWxsVmFsaWRhdGUoKTsKIAotICAg
ICAgICBpZiAod2lsbFZhbGlkYXRlICE9IG1fZWxlbWVudC0+d2lsbFZhbGlkYXRlKCkpCisgICAg
ICAgIGlmICh3aWxsVmFsaWRhdGUgIT0gc3RhdGUubV9lbGVtZW50LT53aWxsVmFsaWRhdGUoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAod2lsbFZhbGlkYXRlICYm
IChlbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkgIT0gbV9lbGVtZW50LT5pc1Zh
bGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpKQorICAgICAgICBpZiAod2lsbFZhbGlkYXRlICYmIChl
bGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkgIT0gc3RhdGUubV9lbGVtZW50LT5p
c1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIGlmIChlbGVtZW50LT5pc0luUmFuZ2UoKSAhPSBtX2VsZW1lbnQtPmlzSW5SYW5n
ZSgpKQorICAgICAgICBpZiAoZWxlbWVudC0+aXNJblJhbmdlKCkgIT0gc3RhdGUubV9lbGVtZW50
LT5pc0luUmFuZ2UoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAo
ZWxlbWVudC0+aXNPdXRPZlJhbmdlKCkgIT0gbV9lbGVtZW50LT5pc091dE9mUmFuZ2UoKSkKKyAg
ICAgICAgaWYgKGVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpICE9IHN0YXRlLm1fZWxlbWVudC0+aXNP
dXRPZlJhbmdlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xMTUx
LDI1ICsxMTM5LDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50SGFzRGlyZWN0aW9uQXV0
byhFbGVtZW50KiBlbGVtZW50KQogCiBib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRh
dGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoU3R5bGVkRWxlbWVudCogc2hh
cmluZ0NhbmRpZGF0ZSkgY29uc3QKIHsKLSAgICBpZiAobV9lbGVtZW50LT5hdHRyaWJ1dGVEYXRh
KCkgPT0gc2hhcmluZ0NhbmRpZGF0ZS0+YXR0cmlidXRlRGF0YSgpKQorICAgIGNvbnN0IFN0YXRl
JiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgaWYgKHN0YXRlLm1fZWxlbWVudC0+YXR0cmlidXRlRGF0
YSgpID09IHNoYXJpbmdDYW5kaWRhdGUtPmF0dHJpYnV0ZURhdGEoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgaWYgKG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFu
Z0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6Omxh
bmdBdHRyKSkKKyAgICBpZiAoc3RhdGUubV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFhNTE5h
bWVzOjpsYW5nQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxO
YW1lczo6bGFuZ0F0dHIpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fZWxlbWVu
dC0+ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZmFzdEdl
dEF0dHJpYnV0ZShsYW5nQXR0cikpCisgICAgaWYgKHN0YXRlLm1fZWxlbWVudC0+ZmFzdEdldEF0
dHJpYnV0ZShsYW5nQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShs
YW5nQXR0cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghbV9lbGVtZW50QWZm
ZWN0ZWRCeUNsYXNzUnVsZXMpIHsKKyAgICBpZiAoIXN0YXRlLm1fZWxlbWVudEFmZmVjdGVkQnlD
bGFzc1J1bGVzKSB7CiAgICAgICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5oYXNDbGFzcygpICYm
IGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMoc2hhcmluZ0NhbmRpZGF0ZS0+Y2xhc3NOYW1lcygp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UgaWYgKHNoYXJpbmdDYW5k
aWRhdGUtPmhhc0NsYXNzKCkpIHsKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICAvLyBTVkcgZWxl
bWVudHMgcmVxdWlyZSBhIChzbG93ISkgZ2V0QXR0cmlidXRlIGNvbXBhcmlzaW9uIGJlY2F1c2Ug
ImNsYXNzIiBpcyBhbiBhbmltYXRhYmxlIGF0dHJpYnV0ZSBmb3IgU1ZHLgotICAgICAgICBpZiAo
bV9lbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+
Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Z2V0QXR0cmlidXRl
KGNsYXNzQXR0cikpCisgICAgICAgIGlmIChzdGF0ZS5tX2VsZW1lbnQtPmlzU1ZHRWxlbWVudCgp
KSB7CisgICAgICAgICAgICBpZiAoc3RhdGUubV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NB
dHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZWxzZSB7CiAjZW5kaWYKLSAgICAg
ICAgICAgIGlmIChtX2VsZW1lbnQtPmNsYXNzTmFtZXMoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5j
bGFzc05hbWVzKCkpCisgICAgICAgICAgICBpZiAoc3RhdGUubV9lbGVtZW50LT5jbGFzc05hbWVz
KCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Y2xhc3NOYW1lcygpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICB9CkBAIC0xMTc3LDEyICsxMTY2
LDEyIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0
eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFCiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPnByZXNlbnRhdGlvbkF0dHJpYnV0
ZVN0eWxlKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUo
KSkKKyAgICBpZiAoc3RhdGUubV9zdHlsZWRFbGVtZW50LT5wcmVzZW50YXRpb25BdHRyaWJ1dGVT
dHlsZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUtPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQot
ICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcpKSB7Ci0gICAgICAgIGlm
IChzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50Kj4obV9lbGVtZW50KS0+aXNEZXRlcm1p
bmF0ZSgpICE9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihzaGFyaW5nQ2FuZGlk
YXRlKS0+aXNEZXRlcm1pbmF0ZSgpKQorICAgIGlmIChzdGF0ZS5tX2VsZW1lbnQtPmhhc1RhZ05h
bWUocHJvZ3Jlc3NUYWcpKSB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NF
bGVtZW50Kj4oc3RhdGUubV9lbGVtZW50KS0+aXNEZXRlcm1pbmF0ZSgpICE9IHN0YXRpY19jYXN0
PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihzaGFyaW5nQ2FuZGlkYXRlKS0+aXNEZXRlcm1pbmF0ZSgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICNlbmRpZgpAQCAtMTE5MywxMiAr
MTE4MiwxMyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGlj
YWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoU3R5bGVkRQogYm9vbCBTdHlsZVJlc29sdmVyOjpj
YW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsK
ICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgIGNv
bnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAKICAgICBpZiAoIXN0eWxlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaWYgKHN0eWxlLT51bmlxdWUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChlbGVtZW50LT50YWdRTmFtZSgpICE9IG1fZWxlbWVudC0+dGFnUU5hbWUo
KSkKKyAgICBpZiAoZWxlbWVudC0+dGFnUU5hbWUoKSAhPSBzdGF0ZS5tX2VsZW1lbnQtPnRhZ1FO
YW1lKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZWxlbWVudC0+aW5saW5lU3R5
bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTIwOCwyMSArMTE5OCwyMSBAQCBib29s
IFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBl
bGVtZW50KSBjb25zdAogICAgIGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNf
Y2FzdDxTVkdFbGVtZW50Kj4oZWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKLSAgICBpZiAoZWxlbWVudC0+aXNMaW5r
KCkgIT0gbV9lbGVtZW50LT5pc0xpbmsoKSkKKyAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkgIT0g
c3RhdGUubV9lbGVtZW50LT5pc0xpbmsoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChlbGVtZW50LT5ob3ZlcmVkKCkgIT0gbV9lbGVtZW50LT5ob3ZlcmVkKCkpCisgICAgaWYgKGVs
ZW1lbnQtPmhvdmVyZWQoKSAhPSBzdGF0ZS5tX2VsZW1lbnQtPmhvdmVyZWQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5hY3RpdmUoKSAhPSBtX2VsZW1lbnQtPmFj
dGl2ZSgpKQorICAgIGlmIChlbGVtZW50LT5hY3RpdmUoKSAhPSBzdGF0ZS5tX2VsZW1lbnQtPmFj
dGl2ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmZvY3VzZWQo
KSAhPSBtX2VsZW1lbnQtPmZvY3VzZWQoKSkKKyAgICBpZiAoZWxlbWVudC0+Zm9jdXNlZCgpICE9
IHN0YXRlLm1fZWxlbWVudC0+Zm9jdXNlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKGVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCkgIT0gbV9lbGVtZW50LT5zaGFkb3dQc2V1ZG9J
ZCgpKQorICAgIGlmIChlbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpICE9IHN0YXRlLm1fZWxlbWVu
dC0+c2hhZG93UHNldWRvSWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChlbGVt
ZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmNzc1RhcmdldCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaWYgKCFzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3Rp
bmdBdHRyaWJ1dGVzKGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVs
ZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpICE9IG1fc3R5bGVk
RWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpCisgICAgaWYg
KGVsZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpICE9IHN0YXRl
Lm1fc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChlbGVtZW50LT5oYXNJRCgpICYmIG1f
ZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlv
bigpLmltcGwoKSkpCkBAIC0xMjM4LDcgKzEyMjgsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNh
blNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogCiAg
ICAgYm9vbCBpc0NvbnRyb2wgPSBlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpOwogCi0g
ICAgaWYgKGlzQ29udHJvbCAhPSBtX2VsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisg
ICAgaWYgKGlzQ29udHJvbCAhPSBzdGF0ZS5tX2VsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpc0NvbnRyb2wgJiYgIWNhblNo
YXJlU3R5bGVXaXRoQ29udHJvbChlbGVtZW50KSkKQEAgLTEyNjIsMjAgKzEyNTIsMjAgQEAgYm9v
bCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCog
ZWxlbWVudCkgY29uc3QKICAgICBpZiAoZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oZWxlbWVudCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSAmJiBt
X2VsZW1lbnRMaW5rU3RhdGUgIT0gc3R5bGUtPmluc2lkZUxpbmsoKSkKKyAgICBpZiAoZWxlbWVu
dC0+aXNMaW5rKCkgJiYgc3RhdGUubV9lbGVtZW50TGlua1N0YXRlICE9IHN0eWxlLT5pbnNpZGVM
aW5rKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykK
ICAgICAvLyBEZW55IHNoYXJpbmcgc3R5bGVzIGJldHdlZW4gV2ViVlRUIGFuZCBub24tV2ViVlRU
IG5vZGVzLgotICAgIGlmIChlbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAhPSBtX2VsZW1lbnQt
PmlzV2ViVlRURWxlbWVudCgpKQorICAgIGlmIChlbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAh
PSBzdGF0ZS5tX2VsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYgbV9lbGVtZW50LT5p
c1dlYlZUVEVsZW1lbnQoKSAmJiB0b1dlYlZUVEVsZW1lbnQoZWxlbWVudCktPndlYlZUVE5vZGVU
eXBlKCkgIT0gdG9XZWJWVFRFbGVtZW50KG1fZWxlbWVudCktPndlYlZUVE5vZGVUeXBlKCkpCisg
ICAgaWYgKGVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpICYmIHN0YXRlLm1fZWxlbWVudC0+aXNX
ZWJWVFRFbGVtZW50KCkgJiYgdG9XZWJWVFRFbGVtZW50KGVsZW1lbnQpLT53ZWJWVFROb2RlVHlw
ZSgpICE9IHRvV2ViVlRURWxlbWVudChzdGF0ZS5tX2VsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkKLSAgICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRDdXJy
ZW50RnVsbFNjcmVlbkVsZW1lbnQoKSB8fCBtX2VsZW1lbnQgPT0gbV9lbGVtZW50LT5kb2N1bWVu
dCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkKKyAgICBpZiAoZWxlbWVudCA9
PSBlbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSB8
fCBzdGF0ZS5tX2VsZW1lbnQgPT0gc3RhdGUubV9lbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRD
dXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlm
CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMjk2LDM2ICsxMjg2LDM4IEBAIGlubGluZSBTdHlsZWRF
bGVtZW50KiBTdHlsZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiBu
b2RlLCB1bnNpCiAKIFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHls
ZSgpCiB7Ci0gICAgaWYgKCFtX3N0eWxlZEVsZW1lbnQgfHwgIW1fcGFyZW50U3R5bGUpCisgICAg
U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKyAgICBpZiAoIXN0YXRlLm1fc3R5bGVkRWxlbWVudCB8
fCAhc3RhdGUubV9wYXJlbnRTdHlsZSkKICAgICAgICAgcmV0dXJuIDA7CisKICAgICAvLyBJZiB0
aGUgZWxlbWVudCBoYXMgaW5saW5lIHN0eWxlIGl0IGlzIHByb2JhYmx5IHVuaXF1ZS4KLSAgICBp
ZiAobV9zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpKQorICAgIGlmIChzdGF0ZS5tX3N0eWxl
ZEVsZW1lbnQtPmlubGluZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiAwOwogI2lmIEVOQUJMRShT
VkcpCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudCo+KG1fc3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVy
dGllcygpKQorICAgIGlmIChzdGF0ZS5tX3N0eWxlZEVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpICYm
IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihzdGF0ZS5tX3N0eWxlZEVsZW1lbnQpLT5hbmltYXRl
ZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKICAgICAv
LyBJZHMgc3RvcCBzdHlsZSBzaGFyaW5nIGlmIHRoZXkgc2hvdyB1cCBpbiB0aGUgc3R5bGVzaGVl
dHMuCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0lu
UnVsZXMuY29udGFpbnMobV9zdHlsZWRFbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmlt
cGwoKSkpCisgICAgaWYgKHN0YXRlLm1fc3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1
cmVzLmlkc0luUnVsZXMuY29udGFpbnMoc3RhdGUubV9zdHlsZWRFbGVtZW50LT5pZEZvclN0eWxl
UmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChwYXJlbnRF
bGVtZW50UHJldmVudHNTaGFyaW5nKG1fZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSkKKyAgICBp
ZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhzdGF0ZS5tX2VsZW1lbnQtPnBhcmVudEVs
ZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmhh
c1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgaWYgKHN0YXRlLm1fc3R5bGVkRWxlbWVudC0+
aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKG1f
ZWxlbWVudCA9PSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNzc1RhcmdldCgpKQorICAgIGlmIChz
dGF0ZS5tX2VsZW1lbnQgPT0gc3RhdGUubV9lbGVtZW50LT5kb2N1bWVudCgpLT5jc3NUYXJnZXQo
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKG1f
ZWxlbWVudCkpCisgICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKHN0YXRlLm1fZWxlbWVu
dCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQ2FjaGUgd2hldGhlciBtX2VsZW1lbnQg
aXMgYWZmZWN0ZWQgYnkgYW55IGtub3duIGNsYXNzIHNlbGVjdG9ycy4KICAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGRuJ3QgYmUgYSBtZW1iZXIgdmFyaWFibGUuIFRoZSBzdHlsZSBzaGFyaW5nIGNv
ZGUgY291bGQgYmUgZmFjdG9yZWQgb3V0IG9mIFN0eWxlUmVzb2x2ZXIuCi0gICAgbV9lbGVtZW50
QWZmZWN0ZWRCeUNsYXNzUnVsZXMgPSBtX2VsZW1lbnQgJiYgbV9lbGVtZW50LT5oYXNDbGFzcygp
ICYmIGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMobV9lbGVtZW50LT5jbGFzc05hbWVzKCkpOwor
ICAgIHN0YXRlLm1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzID0gc3RhdGUubV9lbGVtZW50
ICYmIHN0YXRlLm1fZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1
bGVzKHN0YXRlLm1fZWxlbWVudC0+Y2xhc3NOYW1lcygpKTsKIAogICAgIC8vIENoZWNrIHByZXZp
b3VzIHNpYmxpbmdzIGFuZCB0aGVpciBjb3VzaW5zLgogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsK
ICAgICB1bnNpZ25lZCB2aXNpdGVkTm9kZUNvdW50ID0gMDsKICAgICBTdHlsZWRFbGVtZW50KiBz
aGFyZUVsZW1lbnQgPSAwOwotICAgIE5vZGUqIGNvdXNpbkxpc3QgPSBtX3N0eWxlZEVsZW1lbnQt
PnByZXZpb3VzU2libGluZygpOworICAgIE5vZGUqIGNvdXNpbkxpc3QgPSBzdGF0ZS5tX3N0eWxl
ZEVsZW1lbnQtPnByZXZpb3VzU2libGluZygpOwogICAgIHdoaWxlIChjb3VzaW5MaXN0KSB7CiAg
ICAgICAgIHNoYXJlRWxlbWVudCA9IGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKGNvdXNpbkxp
c3QsIGNvdW50KTsKICAgICAgICAgaWYgKHNoYXJlRWxlbWVudCkKQEAgLTEzNDcsNyArMTMzOSw3
IEBAIFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAg
aWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgLy8gVHJhY2tpbmcgY2hpbGQgaW5kZXggcmVxdWlyZXMgdW5pcXVlIHN0eWxl
IGZvciBlYWNoIG5vZGUuIFRoaXMgbWF5IGdldCBzZXQgYnkgdGhlIHNpYmxpbmcgcnVsZSBtYXRj
aCBhYm92ZS4KLSAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhtX2VsZW1lbnQt
PnBhcmVudEVsZW1lbnQoKSkpCisgICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmco
c3RhdGUubV9lbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpKQogICAgICAgICByZXR1cm4gMDsKICAg
ICByZXR1cm4gc2hhcmVFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogfQpAQCAtMTU2NywxMCArMTU1
OSwxMSBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVs
ZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyUwogICAgICAgICByZXR1cm4gc19zdHlsZU5v
dFlldEF2YWlsYWJsZTsKICAgICB9CiAKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAg
IGluaXRFbGVtZW50KGVsZW1lbnQpOwogICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZWxlbWVudCwg
ZGVmYXVsdFBhcmVudCk7Ci0gICAgbV9yZWdpb25Gb3JTdHlsaW5nID0gcmVnaW9uRm9yU3R5bGlu
ZzsKLSAgICBpZiAoc2hhcmluZ0JlaGF2aW9yID09IEFsbG93U3R5bGVTaGFyaW5nICYmICFtX2Rp
c3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCkgeworICAgIHN0YXRlLm1fcmVnaW9uRm9yU3R5bGlu
ZyA9IHJlZ2lvbkZvclN0eWxpbmc7CisgICAgaWYgKHNoYXJpbmdCZWhhdmlvciA9PSBBbGxvd1N0
eWxlU2hhcmluZyAmJiAhc3RhdGUubV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQpIHsKICAg
ICAgICAgUmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0gbG9jYXRlU2hhcmVkU3R5bGUoKTsKICAg
ICAgICAgaWYgKHNoYXJlZFN0eWxlKQogICAgICAgICAgICAgcmV0dXJuIHNoYXJlZFN0eWxlOwpA
QCAtMTU3OCwzMyArMTU3MSwzMiBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29s
dmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyUwogCiAgICAgUmVm
UHRyPFJlbmRlclN0eWxlPiBjbG9uZUZvclBhcmVudDsKIAotICAgIGlmIChtX3BhcmVudFN0eWxl
KSB7Ci0gICAgICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgICAgIG1f
c3R5bGUtPmluaGVyaXRGcm9tKG1fcGFyZW50U3R5bGUsIGlzQXRTaGFkb3dCb3VuZGFyeShlbGVt
ZW50KSA/IFJlbmRlclN0eWxlOjpBdFNoYWRvd0JvdW5kYXJ5IDogUmVuZGVyU3R5bGU6Ok5vdEF0
U2hhZG93Qm91bmRhcnkpOworICAgIGlmIChzdGF0ZS5tX3BhcmVudFN0eWxlKSB7CisgICAgICAg
IHN0YXRlLm1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgICAgIHN0YXRlLm1f
c3R5bGUtPmluaGVyaXRGcm9tKHN0YXRlLm1fcGFyZW50U3R5bGUsIGlzQXRTaGFkb3dCb3VuZGFy
eShlbGVtZW50KSA/IFJlbmRlclN0eWxlOjpBdFNoYWRvd0JvdW5kYXJ5IDogUmVuZGVyU3R5bGU6
Ok5vdEF0U2hhZG93Qm91bmRhcnkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fc3R5bGUgPSBk
ZWZhdWx0U3R5bGVGb3JFbGVtZW50KCk7Ci0gICAgICAgIGNsb25lRm9yUGFyZW50ID0gUmVuZGVy
U3R5bGU6OmNsb25lKHN0eWxlKCkpOwotICAgICAgICBtX3BhcmVudFN0eWxlID0gY2xvbmVGb3JQ
YXJlbnQuZ2V0KCk7CisgICAgICAgIHN0YXRlLm1fc3R5bGUgPSBkZWZhdWx0U3R5bGVGb3JFbGVt
ZW50KCk7CisgICAgICAgIGNsb25lRm9yUGFyZW50ID0gUmVuZGVyU3R5bGU6OmNsb25lKHN0YXRl
Lm1fc3R5bGUuZ2V0KCkpOworICAgICAgICBzdGF0ZS5tX3BhcmVudFN0eWxlID0gY2xvbmVGb3JQ
YXJlbnQuZ2V0KCk7CiAgICAgfQogICAgIC8vIGNvbnRlbnRlZGl0YWJsZSBhdHRyaWJ1dGUgKGlt
cGxlbWVudGVkIGJ5IC13ZWJraXQtdXNlci1tb2RpZnkpIHNob3VsZAogICAgIC8vIGJlIHByb3Bh
Z2F0ZWQgZnJvbSBzaGFkb3cgaG9zdCB0byBkaXN0cmlidXRlZCBub2RlLgotICAgIGlmIChtX2Rp
c3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCkgeworICAgIGlmIChzdGF0ZS5tX2Rpc3RyaWJ1dGVk
VG9JbnNlcnRpb25Qb2ludCkgewogICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50ID0gZWxlbWVu
dC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxl
T2ZTaGFkb3dIb3N0ID0gcGFyZW50LT5yZW5kZXJTdHlsZSgpKQotICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldFVzZXJNb2RpZnkoc3R5bGVPZlNoYWRvd0hvc3QtPnVzZXJNb2RpZnkoKSk7Cisg
ICAgICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0VXNlck1vZGlmeShzdHlsZU9mU2hhZG93
SG9zdC0+dXNlck1vZGlmeSgpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChlbGVtZW50
LT5pc0xpbmsoKSkgewotICAgICAgICBtX3N0eWxlLT5zZXRJc0xpbmsodHJ1ZSk7Ci0gICAgICAg
IEVJbnNpZGVMaW5rIGxpbmtTdGF0ZSA9IG1fZWxlbWVudExpbmtTdGF0ZTsKLSAgICAgICAgaWYg
KG1fZWxlbWVudExpbmtTdGF0ZSAhPSBOb3RJbnNpZGVMaW5rKSB7CisgICAgICAgIHN0YXRlLm1f
c3R5bGUtPnNldElzTGluayh0cnVlKTsKKyAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXRlID0g
c3RhdGUubV9lbGVtZW50TGlua1N0YXRlOworICAgICAgICBpZiAobGlua1N0YXRlICE9IE5vdElu
c2lkZUxpbmspIHsKICAgICAgICAgICAgIGJvb2wgZm9yY2VWaXNpdGVkID0gSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1
ZG9WaXNpdGVkKTsKICAgICAgICAgICAgIGlmIChmb3JjZVZpc2l0ZWQpCiAgICAgICAgICAgICAg
ICAgbGlua1N0YXRlID0gSW5zaWRlVmlzaXRlZExpbms7CiAgICAgICAgIH0KLQotICAgICAgICBt
X3N0eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0ZSk7CisgICAgICAgIHN0YXRlLm1fc3R5bGUt
PnNldEluc2lkZUxpbmsobGlua1N0YXRlKTsKICAgICB9CiAKICAgICBlbnN1cmVEZWZhdWx0U3R5
bGVTaGVldHNGb3JFbGVtZW50KGVsZW1lbnQpOwpAQCAtMTYxOCwxNyArMTYxMCwxNyBAQCBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVu
dCogZWxlbWVudCwgUmVuZGVyUwogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1
bHQsIGVsZW1lbnQpOwogCiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRpc3Bs
YXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0
UmVuZGVyU3R5bGUoc3R5bGUoKSwgbV9wYXJlbnRTdHlsZSwgZWxlbWVudCk7CisgICAgYWRqdXN0
UmVuZGVyU3R5bGUoc3RhdGUubV9zdHlsZS5nZXQoKSwgc3RhdGUubV9wYXJlbnRTdHlsZSwgZWxl
bWVudCk7CiAKICAgICBpbml0RWxlbWVudCgwKTsgLy8gQ2xlYXIgb3V0IGZvciB0aGUgbmV4dCBy
ZXNvbHZlLgogCiAgICAgaWYgKGNsb25lRm9yUGFyZW50KQotICAgICAgICBtX3BhcmVudFN0eWxl
ID0gMDsKKyAgICAgICAgc3RhdGUubV9wYXJlbnRTdHlsZSA9IDA7CiAKICAgICBkb2N1bWVudCgp
LT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHls
ZS4KLSAgICByZXR1cm4gbV9zdHlsZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHN0YXRlLm1fc3R5
bGUucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVy
OjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIGNvbnN0
IFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1lLCBLZXlmcmFtZVZhbHVlJiBrZXlmcmFtZVZhbHVlKQpA
QCAtMTYzNywxMiArMTYyOSwxNCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29s
dmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZQogICAgIGlmIChr
ZXlmcmFtZS0+cHJvcGVydGllcygpKQogICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1
bHQsIGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpOwogCi0gICAgQVNTRVJUKCFtX3N0eWxlKTsKKyAg
ICBBU1NFUlQoIW1fc3RhdGUubV9zdHlsZSk7CisKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRl
OwogCiAgICAgLy8gQ3JlYXRlIHRoZSBzdHlsZQotICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y2xvbmUoZWxlbWVudFN0eWxlKTsKKyAgICBzdGF0ZS5tX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNs
b25lKGVsZW1lbnRTdHlsZSk7CiAKLSAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAgc3Rh
dGUubV9saW5lSGVpZ2h0VmFsdWUgPSAwOwogCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3Ro
ZXIgd2l0aCAhaW1wb3J0YW50LiBTaW5jZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8g
ZGVjbCwgdGhlcmUncyBub3RoaW5nIHRvIG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3Qg
cHJvcGVydGllcy4KQEAgLTE2NTQsOCArMTY0OCw4IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1l
CiAgICAgdXBkYXRlRm9udCgpOwogCiAgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2Ug
YXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplCi0gICAgaWYgKG1fbGluZUhlaWdo
dFZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9s
aW5lSGVpZ2h0VmFsdWUpOworICAgIGlmIChzdGF0ZS5tX2xpbmVIZWlnaHRWYWx1ZSkKKyAgICAg
ICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLm1fbGluZUhlaWdo
dFZhbHVlKTsKIAogICAgIC8vIE5vdyBkbyByZXN0IG9mIHRoZSBwcm9wZXJ0aWVzLgogICAgIGlm
IChrZXlmcmFtZS0+cHJvcGVydGllcygpKQpAQCAtMTY4Miw3ICsxNjc2LDcgQEAgUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5k
ZXJTdHlsZSogZWxlbWUKIAogICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIo
KTsKIAotICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3RhdGUubV9z
dHlsZS5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNG
b3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwg
S2V5ZnJhbWVMaXN0JiBsaXN0KQpAQCAtMTc1MCwxNSArMTc0NCwxNyBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRl
clN0eWxlKiBlbAogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1
ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUpCiB7Ci0gICAgQVNTRVJUKG1fcGFyZW50U3R5bGUpOworICAgIEFTU0VS
VChtX3N0YXRlLm1fcGFyZW50U3R5bGUpOwogICAgIGlmICghZSkKICAgICAgICAgcmV0dXJuIDA7
CiAKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworCiAgICAgaW5pdEVsZW1lbnQoZSk7CiAK
ICAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGUsIHBhcmVudFN0eWxlLCBwc2V1ZG8pOwotICAgIG1f
c3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgbV9zdHlsZS0+aW5oZXJpdEZyb20o
bV9wYXJlbnRTdHlsZSk7CisgICAgc3RhdGUubV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUo
KTsKKyAgICBzdGF0ZS5tX3N0eWxlLT5pbmhlcml0RnJvbShtX3N0YXRlLm1fcGFyZW50U3R5bGUp
OwogCiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgdXNlIHBzZXVkby1lbGVtZW50cyBpbiBhbnkgb2Yg
b3VyIHF1aXJrL3ByaW50IHVzZXIgYWdlbnQgcnVsZXMsIGRvbid0IHdhc3RlIHRpbWUgd2Fsa2lu
ZwogICAgIC8vIHRob3NlIHJ1bGVzLgpAQCAtMTc3NSwxMiArMTc3MSwxMiBAQCBQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRv
SWQgcHNldWRvLCBFbAogICAgIGlmIChtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbV9zdHlsZS0+c2V0U3R5bGVUeXBlKHBz
ZXVkbyk7CisgICAgc3RhdGUubV9zdHlsZS0+c2V0U3R5bGVUeXBlKHBzZXVkbyk7CiAKICAgICBh
cHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBlKTsKIAogICAgIC8vIENsZWFuIHVw
IG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRpb25zIChhbW9uZyBv
dGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRlclN0eWxlKHN0eWxlKCksIHBhcmVudFN0eWxl
LCAwKTsKKyAgICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0ZS5tX3N0eWxlLmdldCgpLCBtX3N0YXRl
Lm1fcGFyZW50U3R5bGUsIDApOwogCiAgICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVm
ZXJlbmNlZCBieSB0aGlzIHN0eWxlLgogICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CkBAIC0x
Nzg4LDE1ICsxNzg0LDE1IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6
OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sIEVsCiAgICAgZG9jdW1lbnQo
KS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCiAgICAgLy8gTm93IHJldHVybiB0aGUgc3R5
bGUuCi0gICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOworICAgIHJldHVybiBzdGF0ZS5tX3N0
eWxlLnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZl
cjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiB7CiAgICAgaW5pdEZvclN0eWxlUmVzb2x2
ZShkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSk7IC8vIG1fcm9vdEVsZW1lbnRTdHlsZSB3
aWxsIGJlIHNldCB0byB0aGUgZG9jdW1lbnQgc3R5bGUuCiAKLSAgICBtX3N0eWxlID0gUmVuZGVy
U3R5bGU6OmNyZWF0ZSgpOwotICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKG1fcm9vdEVsZW1lbnRT
dHlsZSk7CisgICAgbV9zdGF0ZS5tX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAg
IG1fc3RhdGUubV9zdHlsZS0+aW5oZXJpdEZyb20obV9zdGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUp
OwogCiAgICAgY29uc3QgYm9vbCBpc0xlZnQgPSBpc0xlZnRQYWdlKHBhZ2VJbmRleCk7CiAgICAg
Y29uc3QgYm9vbCBpc0ZpcnN0ID0gaXNGaXJzdFBhZ2UocGFnZUluZGV4KTsKQEAgLTE4MDcsNyAr
MTgwMyw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9y
UGFnZShpbnQgcGFnZUluZGV4KQogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV91c2VyU3R5
bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CiAgICAgLy8gT25seSBjb25zaWRlciB0
aGUgZ2xvYmFsIGF1dGhvciBSdWxlU2V0IGZvciBAcGFnZSBydWxlcywgYXMgcGVyIHRoZSBIVE1M
NSBzcGVjLgogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV9hdXRob3JTdHlsZS5nZXQoKSwg
aXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKLSAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAg
bV9zdGF0ZS5tX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CiAgICAgYm9vbCBpbmhlcml0ZWRPbmx5ID0g
ZmFsc2U7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCiAgICAgYXBwbHlNYXRjaGVkUHJvcGVy
dGllczxWYXJpYWJsZURlZmluaXRpb25zPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hl
ZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CkBAIC0xODE4LDggKzE4MTQs
OCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2Uo
aW50IHBhZ2VJbmRleCkKICAgICB1cGRhdGVGb250KCk7CiAKICAgICAvLyBMaW5lLWhlaWdodCBp
cyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUuCi0gICAg
aWYgKG1fbGluZUhlaWdodFZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOworICAgIGlmIChtX3N0YXRlLm1fbGluZUhl
aWdodFZhbHVlKQorICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwg
bV9zdGF0ZS5tX2xpbmVIZWlnaHRWYWx1ZSk7CiAKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
PExvd1ByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQ
cm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwogCkBAIC0xODI5LDIwICsxODI1
LDIwIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFn
ZShpbnQgcGFnZUluZGV4KQogICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIo
KTsKIAogICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgotICAgIHJldHVybiBtX3N0eWxlLnJl
bGVhc2UoKTsKKyAgICByZXR1cm4gbV9zdGF0ZS5tX3N0eWxlLnJlbGVhc2UoKTsKIH0KIAogUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVu
dCgpCiB7Ci0gICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBtX3N0YXRl
Lm1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgLy8gTWFrZSBzdXJlIG91ciBm
b250cyBhcmUgaW5pdGlhbGl6ZWQgaWYgd2UgZG9uJ3QgaW5oZXJpdCB0aGVtIGZyb20gb3VyIHBh
cmVudCBzdHlsZS4KICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5n
cygpKSB7CiAgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOwotICAgICAgICBt
X3N0eWxlLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgbV9zdGF0ZS5t
X3N0eWxlLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgbV9zdHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKKyAgICAgICAgbV9zdGF0ZS5tX3N0eWxlLT5m
b250KCkudXBkYXRlKDApOwogCi0gICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOworICAgIHJl
dHVybiBtX3N0YXRlLm1fc3R5bGUucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclRleHQoVGV4dCogdGV4dE5vZGUpCkBAIC0yMTMw
LDcgKzIxMjYsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRl
clN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eQogCiAgICAgLy8gTGV0IHRoZSB0
aGVtZSBhbHNvIGhhdmUgYSBjcmFjayBhdCBhZGp1c3RpbmcgdGhlIHN0eWxlLgogICAgIGlmIChz
dHlsZS0+aGFzQXBwZWFyYW5jZSgpKQotICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1l
KCktPmFkanVzdFN0eWxlKHRoaXMsIHN0eWxlLCBlLCBtX2hhc1VBQXBwZWFyYW5jZSwgbV9ib3Jk
ZXJEYXRhLCBtX2JhY2tncm91bmREYXRhLCBtX2JhY2tncm91bmRDb2xvcik7CisgICAgICAgIFJl
bmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+YWRqdXN0U3R5bGUodGhpcywgc3R5bGUsIGUsIG1f
c3RhdGUubV9oYXNVQUFwcGVhcmFuY2UsIG1fc3RhdGUubV9ib3JkZXJEYXRhLCBtX3N0YXRlLm1f
YmFja2dyb3VuZERhdGEsIG1fc3RhdGUubV9iYWNrZ3JvdW5kQ29sb3IpOwogCiAgICAgLy8gSWYg
d2UgaGF2ZSBmaXJzdC1sZXR0ZXIgcHNldWRvIHN0eWxlLCBkbyBub3Qgc2hhcmUgdGhpcyBzdHls
ZS4KICAgICBpZiAoc3R5bGUtPmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCkBAIC0yMjEz
LDI0ICsyMjA5LDI1IEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9yT3JpZW50YXRpb25DaGFuZ2UoUmVu
ZGVyU3R5bGUqIHN0eWxlKQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQogewot
ICAgIGlmICghbV9mb250RGlydHkpCisgICAgaWYgKCFtX3N0YXRlLm1fZm9udERpcnR5KQogICAg
ICAgICByZXR1cm47CiAKICAgICBjaGVja0ZvclRleHRTaXplQWRqdXN0KCk7Ci0gICAgY2hlY2tG
b3JHZW5lcmljRmFtaWx5Q2hhbmdlKHN0eWxlKCksIG1fcGFyZW50U3R5bGUpOwotICAgIGNoZWNr
Rm9yWm9vbUNoYW5nZShzdHlsZSgpLCBtX3BhcmVudFN0eWxlKTsKLSAgICBjaGVja0Zvck9yaWVu
dGF0aW9uQ2hhbmdlKHN0eWxlKCkpOwotICAgIG1fc3R5bGUtPmZvbnQoKS51cGRhdGUobV9mb250
U2VsZWN0b3IpOwotICAgIG1fZm9udERpcnR5ID0gZmFsc2U7CisgICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gbV9zdGF0ZS5tX3N0eWxlLmdldCgpOworICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNo
YW5nZShzdHlsZSwgbV9zdGF0ZS5tX3BhcmVudFN0eWxlKTsKKyAgICBjaGVja0Zvclpvb21DaGFu
Z2Uoc3R5bGUsIG1fc3RhdGUubV9wYXJlbnRTdHlsZSk7CisgICAgY2hlY2tGb3JPcmllbnRhdGlv
bkNoYW5nZShzdHlsZSk7CisgICAgbV9zdGF0ZS5tX3N0eWxlLT5mb250KCkudXBkYXRlKG1fZm9u
dFNlbGVjdG9yKTsKKyAgICBtX3N0YXRlLm1fZm9udERpcnR5ID0gZmFsc2U7CiB9CiAKIHZvaWQg
U3R5bGVSZXNvbHZlcjo6Y2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCkKIHsKLSAgICBtX2hhc1VB
QXBwZWFyYW5jZSA9IG1fc3R5bGUtPmhhc0FwcGVhcmFuY2UoKTsKLSAgICBpZiAobV9oYXNVQUFw
cGVhcmFuY2UpIHsKLSAgICAgICAgbV9ib3JkZXJEYXRhID0gbV9zdHlsZS0+Ym9yZGVyKCk7Ci0g
ICAgICAgIG1fYmFja2dyb3VuZERhdGEgPSAqbV9zdHlsZS0+YmFja2dyb3VuZExheWVycygpOwot
ICAgICAgICBtX2JhY2tncm91bmRDb2xvciA9IG1fc3R5bGUtPmJhY2tncm91bmRDb2xvcigpOwor
ICAgIG1fc3RhdGUubV9oYXNVQUFwcGVhcmFuY2UgPSBtX3N0YXRlLm1fc3R5bGUtPmhhc0FwcGVh
cmFuY2UoKTsKKyAgICBpZiAobV9zdGF0ZS5tX2hhc1VBQXBwZWFyYW5jZSkgeworICAgICAgICBt
X3N0YXRlLm1fYm9yZGVyRGF0YSA9IG1fc3RhdGUubV9zdHlsZS0+Ym9yZGVyKCk7CisgICAgICAg
IG1fc3RhdGUubV9iYWNrZ3JvdW5kRGF0YSA9ICptX3N0YXRlLm1fc3R5bGUtPmJhY2tncm91bmRM
YXllcnMoKTsKKyAgICAgICAgbV9zdGF0ZS5tX2JhY2tncm91bmRDb2xvciA9IG1fc3RhdGUubV9z
dHlsZS0+YmFja2dyb3VuZENvbG9yKCk7CiAgICAgfQogfQogCkBAIC0yMjYwLDQ5ICsyMjU3LDUx
IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlUnVs
ZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsIFBzCiAgICAgfQogCiAgICAgaWYgKG1fbWF0Y2hBdXRo
b3JBbmRVc2VyU3R5bGVzICYmIChydWxlc1RvSW5jbHVkZSAmIEF1dGhvckNTU1J1bGVzKSkgewot
ICAgICAgICBtX3NhbWVPcmlnaW5Pbmx5ID0gIShydWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2lu
Q1NTUnVsZXMpOworICAgICAgICBtX3N0YXRlLm1fc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVzVG9J
bmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcyk7CiAKICAgICAgICAgLy8gQ2hlY2sgdGhlIHJ1
bGVzIGluIGF1dGhvciBzaGVldHMuCiAgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoZHVtbXksIHJ1
bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CiAKLSAgICAgICAgbV9zYW1lT3JpZ2luT25s
eSA9IGZhbHNlOworICAgICAgICBtX3N0YXRlLm1fc2FtZU9yaWdpbk9ubHkgPSBmYWxzZTsKICAg
ICB9CiAKICAgICBtX3NlbGVjdG9yQ2hlY2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6UmVz
b2x2aW5nU3R5bGUpOwogCi0gICAgcmV0dXJuIG1fcnVsZUxpc3QucmVsZWFzZSgpOworICAgIHJl
dHVybiBtX3N0YXRlLm1fcnVsZUxpc3QucmVsZWFzZSgpOwogfQogCiBpbmxpbmUgYm9vbCBTdHls
ZVJlc29sdmVyOjpydWxlTWF0Y2hlcyhjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENv
bnRhaW5lck5vZGUqIHNjb3BlKQogewotICAgIG1fZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwor
ICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgc3RhdGUubV9keW5hbWljUHNldWRvID0g
Tk9QU0VVRE87CiAKICAgICBpZiAocnVsZURhdGEuaGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKCkp
IHsKICAgICAgICAgLy8gV2Uga25vdyB0aGlzIHNlbGVjdG9yIGRvZXMgbm90IGluY2x1ZGUgYW55
IHBzZXVkbyBlbGVtZW50cy4KLSAgICAgICAgaWYgKG1fcHNldWRvU3R5bGUgIT0gTk9QU0VVRE8p
CisgICAgICAgIGlmIChzdGF0ZS5tX3BzZXVkb1N0eWxlICE9IE5PUFNFVURPKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAvLyBXZSBrbm93IGEgc3VmZmljaWVudGx5IHNpbXBs
ZSBzaW5nbGUgcGFydCBzZWxlY3RvciBtYXRjaGVzIHNpbXBseSBiZWNhdXNlIHdlIGZvdW5kIGl0
IGZyb20gdGhlIHJ1bGUgaGFzaC4KICAgICAgICAgLy8gVGhpcyBpcyBsaW1pdGVkIHRvIEhUTUwg
b25seSBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSBuYW1lc3BhY2UuCi0gICAgICAgIGlm
IChydWxlRGF0YS5oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFz
aCgpICYmIG1fZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAgIGlmIChydWxlRGF0
YS5oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaCgpICYmIHN0
YXRlLm1fZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKSB7CiAgICAgICAgICAgICBpZiAoIXJ1bGVE
YXRhLmhhc011bHRpcGFydFNlbGVjdG9yKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHJ1bGVEYXRhLnNlbGVjdG9yKCktPm1fbWF0Y2ggPT0g
Q1NTU2VsZWN0b3I6OlRhZyAmJiAhU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKG1fZWxlbWVu
dCwgcnVsZURhdGEuc2VsZWN0b3IoKS0+dGFnUU5hbWUoKSkpCisgICAgICAgIGlmIChydWxlRGF0
YS5zZWxlY3RvcigpLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpUYWcgJiYgIVNlbGVjdG9yQ2hl
Y2tlcjo6dGFnTWF0Y2hlcyhzdGF0ZS5tX2VsZW1lbnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCktPnRh
Z1FOYW1lKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIVNlbGVj
dG9yQ2hlY2tlcjo6ZmFzdENoZWNrUmlnaHRtb3N0QXR0cmlidXRlU2VsZWN0b3IobV9lbGVtZW50
LCBydWxlRGF0YS5zZWxlY3RvcigpKSkKKyAgICAgICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmZh
c3RDaGVja1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVjdG9yKHN0YXRlLm1fZWxlbWVudCwgcnVsZURh
dGEuc2VsZWN0b3IoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVy
biBtX3NlbGVjdG9yQ2hlY2tlci5mYXN0Q2hlY2socnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVt
ZW50KTsKKworICAgICAgICByZXR1cm4gbV9zZWxlY3RvckNoZWNrZXIuZmFzdENoZWNrKHJ1bGVE
YXRhLnNlbGVjdG9yKCksIHN0YXRlLm1fZWxlbWVudCk7CiAgICAgfQogCiAgICAgLy8gU2xvdyBw
YXRoLgotICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgY29udGV4
dChydWxlRGF0YS5zZWxlY3RvcigpLCBtX2VsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRl
ZE1hdGNoRW5hYmxlZCk7Ci0gICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBzdHlsZSgpOworICAg
IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgY29udGV4dChydWxlRGF0
YS5zZWxlY3RvcigpLCBzdGF0ZS5tX2VsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1h
dGNoRW5hYmxlZCk7CisgICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBzdGF0ZS5tX3N0eWxlLmdl
dCgpOwogICAgIGNvbnRleHQuc2NvcGUgPSBzY29wZTsKLSAgICBjb250ZXh0LnBzZXVkb1N0eWxl
ID0gbV9wc2V1ZG9TdHlsZTsKLSAgICBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gbV9z
ZWxlY3RvckNoZWNrZXIubWF0Y2goY29udGV4dCwgbV9keW5hbWljUHNldWRvLCBET01TaWJsaW5n
VHJhdmVyc2FsU3RyYXRlZ3koKSk7CisgICAgY29udGV4dC5wc2V1ZG9TdHlsZSA9IHN0YXRlLm1f
cHNldWRvU3R5bGU7CisgICAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBtYXRjaCA9IG1fc2VsZWN0
b3JDaGVja2VyLm1hdGNoKGNvbnRleHQsIHN0YXRlLm1fZHluYW1pY1BzZXVkbywgRE9NU2libGlu
Z1RyYXZlcnNhbFN0cmF0ZWd5KCkpOwogICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckNoZWNrZXI6
OlNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX3BzZXVk
b1N0eWxlICE9IE5PUFNFVURPICYmIG1fcHNldWRvU3R5bGUgIT0gbV9keW5hbWljUHNldWRvKQor
ICAgIGlmIChzdGF0ZS5tX3BzZXVkb1N0eWxlICE9IE5PUFNFVURPICYmIHN0YXRlLm1fcHNldWRv
U3R5bGUgIT0gc3RhdGUubV9keW5hbWljUHNldWRvKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yMzEyLDcgKzIzMTEsNyBAQCBib29sIFN0eWxlUmVzb2x2
ZXI6OmNoZWNrUmVnaW9uU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9y
LCBFbGVtZQogICAgIGlmICghcmVnaW9uU2VsZWN0b3IgfHwgIXJlZ2lvbkVsZW1lbnQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fcHNldWRvU3R5bGUgPSBOT1BTRVVETzsKKyAgICBt
X3N0YXRlLm1fcHNldWRvU3R5bGUgPSBOT1BTRVVETzsKIAogICAgIGZvciAoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHMgPSByZWdpb25TZWxlY3RvcjsgczsgcyA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChz
KSkKICAgICAgICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1hdGNoZXMocywgcmVnaW9uRWxlbWVu
dCkpCkBAIC0yMzM3LDcgKzIzMzYsNyBAQCBMZW5ndGggU3R5bGVSZXNvbHZlcjo6Y29udmVydFRv
RmxvYXRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBSZQogdGVtcGxh
dGUgPFN0eWxlUmVzb2x2ZXI6OlN0eWxlQXBwbGljYXRpb25QYXNzIHBhc3M+CiB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0
aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25s
eSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlIHByb3BlcnR5V2hpdGVsaXN0VHlwZSkKIHsKLSAgICBB
U1NFUlQoKHByb3BlcnR5V2hpdGVsaXN0VHlwZSAhPSBQcm9wZXJ0eVdoaXRlbGlzdFJlZ2lvbikg
fHwgbV9yZWdpb25Gb3JTdHlsaW5nKTsKKyAgICBBU1NFUlQoKHByb3BlcnR5V2hpdGVsaXN0VHlw
ZSAhPSBQcm9wZXJ0eVdoaXRlbGlzdFJlZ2lvbikgfHwgbV9zdGF0ZS5tX3JlZ2lvbkZvclN0eWxp
bmcpOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxQcm9jZXNzUnVsZShkb2N1bWVudCgpLCBydWxlLCB0aGlz
KTsKIAogICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBwcm9wZXJ0aWVzLT5wcm9wZXJ0eUNv
dW50KCk7CkBAIC0yMzgxLDcgKzIzODAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bAogICAg
ICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkp
OwogICAgICAgICAgICAgLy8gd2UgYXBwbHkgbGluZS1oZWlnaHQgbGF0ZXIKICAgICAgICAgICAg
IGVsc2UgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5TGluZUhlaWdodCkKLSAgICAgICAgICAg
ICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IGN1cnJlbnQudmFsdWUoKTsKKyAgICAgICAgICAgICAg
ICBtX3N0YXRlLm1fbGluZUhlaWdodFZhbHVlID0gY3VycmVudC52YWx1ZSgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG93UHJpb3JpdHlQcm9wZXJ0aWVzOgogICAgICAgICAg
ICAgaWYgKHByb3BlcnR5ID4gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQpAQCAtMjM5NywxOCArMjM5
NiwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3Qg
TWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBib29sCiAgICAgaWYgKHN0YXJ0SW5kZXggPT0gLTEp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3N0eWxlLT5pbnNpZGVMaW5rKCkgIT0gTm90
SW5zaWRlTGluaykgeworICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgaWYgKHN0YXRl
Lm1fc3R5bGUtPmluc2lkZUxpbmsoKSAhPSBOb3RJbnNpZGVMaW5rKSB7CiAgICAgICAgIGZvciAo
aW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKICAgICAgICAgICAgIGNv
bnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNoUmVzdWx0Lm1h
dGNoZWRQcm9wZXJ0aWVzW2ldOwogICAgICAgICAgICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9
IG1hdGNoZWRQcm9wZXJ0aWVzLmxpbmtNYXRjaFR5cGU7CiAgICAgICAgICAgICAvLyBGSVhNRTog
SXQgd291bGQgYmUgbmljZXIgdG8gcGFzcyB0aGVzZSBhcyBhcmd1bWVudHMgYnV0IHRoYXQgcmVx
dWlyZXMgY2hhbmdlcyBpbiBtYW55IHBsYWNlcy4KLSAgICAgICAgICAgIG1fYXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlID0gbGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hM
aW5rOwotICAgICAgICAgICAgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlID0gbGlu
a01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOworICAgICAgICAgICAg
c3RhdGUubV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYgU2Vs
ZWN0b3JDaGVja2VyOjpNYXRjaExpbms7CisgICAgICAgICAgICBzdGF0ZS5tX2FwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpN
YXRjaFZpc2l0ZWQ7CiAKICAgICAgICAgICAgIGFwcGx5UHJvcGVydGllczxwYXNzPihtYXRjaGVk
UHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0s
IGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlz
dFR5cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUpKTsKICAgICAgICAgfQotICAg
ICAgICBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IHRydWU7Ci0gICAgICAgIG1fYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGZhbHNlOworICAgICAgICBzdGF0ZS5tX2Fw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IHRydWU7CisgICAgICAgIHN0YXRlLm1fYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKQEAg
LTI1MTUsNiArMjUxNSw3IEBAIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVy
dGllc0NhY2hlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFJlCiB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVz
dWx0LCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQogewogICAgIEFTU0VSVChlbGVtZW50KTsKKyAg
ICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9IG1hdGNo
UmVzdWx0LmlzQ2FjaGVhYmxlID8gY29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChtYXRjaFJl
c3VsdC5tYXRjaGVkUHJvcGVydGllcy5kYXRhKCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0
aWVzLnNpemUoKSkgOiAwOwogICAgIGJvb2wgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAg
ICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0qIGNhY2hlSXRlbSA9IDA7CkBAIC0y
NTIyLDE1ICsyNTIzLDE1IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVy
dGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIC8vIFdl
IGNhbiBidWlsZCB1cCB0aGUgc3R5bGUgYnkgY29weWluZyBub24taW5oZXJpdGVkIHByb3BlcnRp
ZXMgZnJvbSBhbiBlYXJsaWVyIHN0eWxlIG9iamVjdCBidWlsdCB1c2luZyB0aGUgc2FtZSBleGFj
dAogICAgICAgICAvLyBzdHlsZSBkZWNsYXJhdGlvbnMuIFdlIHRoZW4gb25seSBuZWVkIHRvIGFw
cGx5IHRoZSBpbmhlcml0ZWQgcHJvcGVydGllcywgaWYgYW55LCBhcyB0aGVpciB2YWx1ZXMgY2Fu
IGRlcGVuZCBvbiB0aGUgCiAgICAgICAgIC8vIGVsZW1lbnQgY29udGV4dC4gVGhpcyBpcyBmYXN0
IGFuZCBzYXZlcyBtZW1vcnkgYnkgcmV1c2luZyB0aGUgc3R5bGUgZGF0YSBzdHJ1Y3R1cmVzLgot
ICAgICAgICBtX3N0eWxlLT5jb3B5Tm9uSW5oZXJpdGVkRnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0
eWxlLmdldCgpKTsKLSAgICAgICAgaWYgKG1fcGFyZW50U3R5bGUtPmluaGVyaXRlZERhdGFTaGFy
ZWQoY2FjaGVJdGVtLT5wYXJlbnRSZW5kZXJTdHlsZS5nZXQoKSkgJiYgIWlzQXRTaGFkb3dCb3Vu
ZGFyeShlbGVtZW50KSkgewotICAgICAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXR1cyA9IG1f
c3R5bGUtPmluc2lkZUxpbmsoKTsKKyAgICAgICAgc3RhdGUubV9zdHlsZS0+Y29weU5vbkluaGVy
aXRlZEZyb20oY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7CisgICAgICAgIGlmIChzdGF0
ZS5tX3BhcmVudFN0eWxlLT5pbmhlcml0ZWREYXRhU2hhcmVkKGNhY2hlSXRlbS0+cGFyZW50UmVu
ZGVyU3R5bGUuZ2V0KCkpICYmICFpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkpIHsKKyAgICAg
ICAgICAgIEVJbnNpZGVMaW5rIGxpbmtTdGF0dXMgPSBzdGF0ZS5tX3N0eWxlLT5pbnNpZGVMaW5r
KCk7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY2FjaGUgaXRlbSBwYXJlbnQgc3R5bGUgaGFzIGlk
ZW50aWNhbCBpbmhlcml0ZWQgcHJvcGVydGllcyB0byB0aGUgY3VycmVudCBwYXJlbnQgc3R5bGUg
dGhlbiB0aGUKICAgICAgICAgICAgIC8vIHJlc3VsdGluZyBzdHlsZSB3aWxsIGJlIGlkZW50aWNh
bCB0b28uIFdlIGNvcHkgdGhlIGluaGVyaXRlZCBwcm9wZXJ0aWVzIG92ZXIgZnJvbSB0aGUgY2Fj
aGUgYW5kIGFyZSBkb25lLgotICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEZyb20oY2FjaGVJ
dGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7CisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5pbmhl
cml0RnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKIAogICAgICAgICAgICAgLy8g
VW5mb3J0dW5hdGVseSB0aGUgbGluayBzdGF0dXMgaXMgdHJlYXRlZCBsaWtlIGFuIGluaGVyaXRl
ZCBwcm9wZXJ0eS4gV2UgbmVlZCB0byBleHBsaWNpdGx5IHJlc3RvcmUgaXQuCi0gICAgICAgICAg
ICBtX3N0eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0dXMpOworICAgICAgICAgICAgc3RhdGUu
bV9zdHlsZS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdHVzKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkgPSB0cnVlOyAKQEAgLTI1NDgs
MTQgKzI1NDksMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVz
KGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICAvLyBoaWdoLXByaW9y
aXR5IHByb3BlcnRpZXMgZmlyc3QsIGkuZS4sIHRob3NlIHByb3BlcnRpZXMgdGhhdCBvdGhlciBw
cm9wZXJ0aWVzIGRlcGVuZCBvbi4KICAgICAvLyBUaGUgb3JkZXIgaXMgKDEpIGhpZ2gtcHJpb3Jp
dHkgbm90IGltcG9ydGFudCwgKDIpIGhpZ2gtcHJpb3JpdHkgaW1wb3J0YW50LCAoMykgbm9ybWFs
IG5vdCBpbXBvcnRhbnQKICAgICAvLyBhbmQgKDQpIG5vcm1hbCBpbXBvcnRhbnQuCi0gICAgbV9s
aW5lSGVpZ2h0VmFsdWUgPSAwOworICAgIHN0YXRlLm1fbGluZUhlaWdodFZhbHVlID0gMDsKICAg
ICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVz
dWx0LCBmYWxzZSwgMCwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlv
cml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmly
c3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5o
ZXJpdGVkT25seSk7CiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9w
ZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1
bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7
CiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRj
aFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKIAotICAgIGlmIChjYWNo
ZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IG1fc3R5
bGUtPmVmZmVjdGl2ZVpvb20oKSkgewotICAgICAgICBtX2ZvbnREaXJ0eSA9IHRydWU7CisgICAg
aWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCkg
IT0gc3RhdGUubV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKSB7CisgICAgICAgIHN0YXRlLm1fZm9u
dERpcnR5ID0gdHJ1ZTsKICAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAgICAg
fQogCkBAIC0yNTYzLDExICsyNTY0LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRj
aGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAg
dXBkYXRlRm9udCgpOwogCiAgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1
cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplLgotICAgIGlmIChtX2xpbmVIZWlnaHRWYWx1
ZSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fbGluZUhl
aWdodFZhbHVlKTsKKyAgICBpZiAoc3RhdGUubV9saW5lSGVpZ2h0VmFsdWUpCisgICAgICAgIGFw
cGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5tX2xpbmVIZWlnaHRWYWx1
ZSk7CiAKICAgICAvLyBNYW55IHByb3BlcnRpZXMgZGVwZW5kIG9uIHRoZSBmb250LiBJZiBpdCBj
aGFuZ2VzIHdlIGp1c3QgYXBwbHkgYWxsIHByb3BlcnRpZXMuCi0gICAgaWYgKGNhY2hlSXRlbSAm
JiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5mb250RGVzY3JpcHRpb24oKSAhPSBtX3N0eWxlLT5m
b250RGVzY3JpcHRpb24oKSkKKyAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVy
U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpICE9IHN0YXRlLm1fc3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpKQogICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkgPSBmYWxzZTsKIAogICAgIC8vIE5vdyBk
byB0aGUgbm9ybWFsIHByaW9yaXR5IFVBIHByb3BlcnRpZXMuCkBAIC0yNTg1LDEzICsyNTg2LDEz
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRj
aFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJj
ZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgogICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7
CiAgICAgCi0gICAgQVNTRVJUKCFtX2ZvbnREaXJ0eSk7CisgICAgQVNTRVJUKCFzdGF0ZS5tX2Zv
bnREaXJ0eSk7CiAgICAgCiAgICAgaWYgKGNhY2hlSXRlbSB8fCAhY2FjaGVIYXNoKQogICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKCFpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSht
X2VsZW1lbnQsIG1fc3R5bGUuZ2V0KCksIG1fcGFyZW50U3R5bGUpKQorICAgIGlmICghaXNDYWNo
ZWFibGVJbk1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoc3RhdGUubV9lbGVtZW50LCBzdGF0ZS5tX3N0
eWxlLmdldCgpLCBzdGF0ZS5tX3BhcmVudFN0eWxlKSkKICAgICAgICAgcmV0dXJuOwotICAgIGFk
ZFRvTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShtX3N0eWxlLmdldCgpLCBtX3BhcmVudFN0eWxlLCBj
YWNoZUhhc2gsIG1hdGNoUmVzdWx0KTsKKyAgICBhZGRUb01hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUo
c3RhdGUubV9zdHlsZS5nZXQoKSwgc3RhdGUubV9wYXJlbnRTdHlsZSwgY2FjaGVIYXNoLCBtYXRj
aFJlc3VsdCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlUGFnZVJ1bGVzKGNvbnN0
IFN0eWxlUnVsZVBhZ2UqIHIxLCBjb25zdCBTdHlsZVJ1bGVQYWdlKiByMikKQEAgLTI2NTYsNyAr
MjY1Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hQYWdlUnVsZXNGb3JMaXN0KFZlY3Rv
cjxTdHlsZVJ1bGVQYWdlKj4mIG1hdGNoZWRSdWxlcywKIGJvb2wgU3R5bGVSZXNvbHZlcjo6aXNM
ZWZ0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdAogewogICAgIGJvb2wgaXNGaXJzdFBhZ2VMZWZ0
ID0gZmFsc2U7Ci0gICAgaWYgKCFtX3Jvb3RFbGVtZW50U3R5bGUtPmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSkKKyAgICBpZiAoIW1fc3RhdGUubV9yb290RWxlbWVudFN0eWxlLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkpCiAgICAgICAgIGlzRmlyc3RQYWdlTGVmdCA9IHRydWU7CiAKICAgICBy
ZXR1cm4gKHBhZ2VJbmRleCArIChpc0ZpcnN0UGFnZUxlZnQgPyAxIDogMCkpICUgMjsKQEAgLTI3
NTYsNyArMjc1Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUo
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBSZW5kCiB7CiAgICAgaW5pdEVsZW1l
bnQoMCk7CiAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZSgwLCBzdHlsZSk7Ci0gICAgbV9zdHlsZSA9
IHN0eWxlOworICAgIG1fc3RhdGUubV9zdHlsZSA9IHN0eWxlOwogICAgIGFwcGx5UHJvcGVydHlU
b0N1cnJlbnRTdHlsZShpZCwgdmFsdWUpOwogfQogCkBAIC0yODY4LDEwICsyODY5LDEwIEBAIGlu
bGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OmlzVmFsaWRDdWVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQpCiAvLyBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5PVCBhbGxvd2VkIHRvIHNjYWxlIHdp
dGhpbiBhIHpvb21lZCBTVkcgZG9jdW1lbnQgKGxldHRlci93b3JkLXNwYWNpbmcvZm9udC1zaXpl
KS4KIGJvb2wgU3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKCkKIHsKLSAgICByZXR1cm4g
bV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCk7CisgICAgcmV0dXJuIG1fc3Rh
dGUubV9lbGVtZW50ICYmIG1fc3RhdGUubV9lbGVtZW50LT5pc1NWR0VsZW1lbnQoKTsKIH0KIAot
c3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBMZW5ndGgmIHdvcmtpbmdMZW5n
dGgpCitzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBMZW5n
dGgmIHdvcmtpbmdMZW5ndGgpCiB7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlV2Via2l0TWluQ29udGVudCkgewogICAgICAgICB3b3JraW5nTGVuZ3RoID0g
TGVuZ3RoKE1pbkNvbnRlbnQpOwpAQCAtMjg4Myw3ICsyODg0LDcgQEAgc3RhdGljIGJvb2wgY3Jl
YXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFN0
eWxlUmVzb2wKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgd29ya2luZ0xlbmd0
aCA9IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lv
biB8IFBlcmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbiB8IEF1
dG9Db252ZXJzaW9uPihzZWxlY3Rvci0+c3R5bGUoKSwgc2VsZWN0b3ItPnJvb3RFbGVtZW50U3R5
bGUoKSwgc2VsZWN0b3ItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgd29ya2luZ0xl
bmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVy
c2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbiB8
IEF1dG9Db252ZXJzaW9uPihzdGF0ZS5tX3N0eWxlLmdldCgpLCBzdGF0ZS5tX3Jvb3RFbGVtZW50
U3R5bGUsIHN0YXRlLm1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgaWYgKHdvcmtpbmdM
ZW5ndGguaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yODkzLDEy
ICsyODk0LDEyIEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBTdHlsZVJlc29sCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja01pbk1heChDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBHcmlkVHJhY2tTaXplJiB0
cmFja1NpemUpCitzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tNaW5NYXgoQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUs
IEdyaWRUcmFja1NpemUmIHRyYWNrU2l6ZSkKIHsKICAgICBQYWlyKiBtaW5NYXhUcmFja0JyZWFk
dGggPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UGFpclZhbHVlKCk7CiAgICAgaWYgKCFtaW5NYXhUcmFj
a0JyZWFkdGgpIHsKICAgICAgICAgTGVuZ3RoIHdvcmtpbmdMZW5ndGg7Ci0gICAgICAgIGlmICgh
Y3JlYXRlR3JpZFRyYWNrQnJlYWR0aChwcmltaXRpdmVWYWx1ZSwgc2VsZWN0b3IsIHdvcmtpbmdM
ZW5ndGgpKQorICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgocHJpbWl0aXZlVmFs
dWUsIHN0YXRlLCB3b3JraW5nTGVuZ3RoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICB0cmFja1NpemUuc2V0TGVuZ3RoKHdvcmtpbmdMZW5ndGgpOwpAQCAtMjkwNywxNCAr
MjkwOCwxNCBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tNaW5NYXgoQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBTdHlsZVJlc29sdgogCiAgICAgTGVuZ3RoIG1pblRyYWNr
QnJlYWR0aDsKICAgICBMZW5ndGggbWF4VHJhY2tCcmVhZHRoOwotICAgIGlmICghY3JlYXRlR3Jp
ZFRyYWNrQnJlYWR0aChtaW5NYXhUcmFja0JyZWFkdGgtPmZpcnN0KCksIHNlbGVjdG9yLCBtaW5U
cmFja0JyZWFkdGgpIHx8ICFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKG1pbk1heFRyYWNrQnJlYWR0
aC0+c2Vjb25kKCksIHNlbGVjdG9yLCBtYXhUcmFja0JyZWFkdGgpKQorICAgIGlmICghY3JlYXRl
R3JpZFRyYWNrQnJlYWR0aChtaW5NYXhUcmFja0JyZWFkdGgtPmZpcnN0KCksIHN0YXRlLCBtaW5U
cmFja0JyZWFkdGgpIHx8ICFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKG1pbk1heFRyYWNrQnJlYWR0
aC0+c2Vjb25kKCksIHN0YXRlLCBtYXhUcmFja0JyZWFkdGgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICB0cmFja1NpemUuc2V0TWluTWF4KG1pblRyYWNrQnJlYWR0aCwgbWF4VHJhY2tC
cmVhZHRoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRy
YWNrR3JvdXAoQ1NTVmFsdWUqIHZhbHVlLCBTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgVmVjdG9y
PEdyaWRUcmFja1NpemU+JiB0cmFja1NpemVzKQorc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNr
R3JvdXAoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUs
IFZlY3RvcjxHcmlkVHJhY2tTaXplPiYgdHJhY2tTaXplcykKIHsKICAgICBpZiAoIXZhbHVlLT5p
c1ZhbHVlTGlzdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yOTI1LDcgKzI5MjYsNyBA
QCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tHcm91cChDU1NWYWx1ZSogdmFsdWUsIFN0eWxl
UmVzb2x2ZXIqIHNlbGVjdG9yLCBWZWN0bwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgIEdyaWRUcmFja1NpemUgdHJhY2tTaXplOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRU
cmFja01pbk1heChzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGN1cnJWYWx1ZSksIHNl
bGVjdG9yLCB0cmFja1NpemUpKQorICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja01pbk1heChz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGN1cnJWYWx1ZSksIHN0YXRlLCB0cmFja1Np
emUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHRyYWNrU2l6ZXMuYXBw
ZW5kKHRyYWNrU2l6ZSk7CkBAIC0yOTMzLDcgKzI5MzQsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVH
cmlkVHJhY2tHcm91cChDU1NWYWx1ZSogdmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBW
ZWN0bwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tM
aXN0KENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0cmFja1NpemVzLCBT
dHlsZVJlc29sdmVyKiBzZWxlY3RvcikKK3N0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3Qo
Q1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6ZXMsIGNvbnN0
IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKIHsKICAgICAvLyBIYW5kbGUgJ25vbmUnLgog
ICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CkBAIC0yOTQxLDcgKzI5NDIsNyBA
QCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tMaXN0KENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9y
PEdyaWRUcmFja1NpemU+JiB0cmFja1NpegogICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lOwogICAgIH0KIAotICAgIHJldHVybiBjcmVhdGVH
cmlkVHJhY2tHcm91cCh2YWx1ZSwgc2VsZWN0b3IsIHRyYWNrU2l6ZXMpOworICAgIHJldHVybiBj
cmVhdGVHcmlkVHJhY2tHcm91cCh2YWx1ZSwgc3RhdGUsIHRyYWNrU2l6ZXMpOwogfQogCiAKQEAg
LTI5ODksNyArMjk5MCw3IEBAIHN0YXRpYyBib29sIGhhc1ZhcmlhYmxlUmVmZXJlbmNlKENTU1Zh
bHVlKiB2YWx1ZSkKIAogdm9pZCBTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFibGVzKENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPHN0ZDo6cGFpcjxDU1NQcm9wZXJ0
eUlELCBTdHJpbmc+ID4mIGtub3duRXhwcmVzc2lvbnMpCiB7Ci0gICAgc3RkOjpwYWlyPENTU1By
b3BlcnR5SUQsIFN0cmluZz4gZXhwcmVzc2lvbihpZCwgdmFsdWUtPnNlcmlhbGl6ZVJlc29sdmlu
Z1ZhcmlhYmxlcygqc3R5bGUoKS0+dmFyaWFibGVzKCkpKTsKKyAgICBzdGQ6OnBhaXI8Q1NTUHJv
cGVydHlJRCwgU3RyaW5nPiBleHByZXNzaW9uKGlkLCB2YWx1ZS0+c2VyaWFsaXplUmVzb2x2aW5n
VmFyaWFibGVzKCptX3N0YXRlLm1fc3R5bGUtPnZhcmlhYmxlcygpKSk7CiAKICAgICBpZiAoa25v
d25FeHByZXNzaW9ucy5jb250YWlucyhleHByZXNzaW9uKSkKICAgICAgICAgcmV0dXJuOyAvLyBj
eWNsZSBkZXRlY3RlZC4KQEAgLTMwMjEsMTkgKzMwMjIsMjAgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB9
CiAjZW5kaWYKIAotICAgIGJvb2wgaXNJbmhlcml0ID0gbV9wYXJlbnROb2RlICYmIHZhbHVlLT5p
c0luaGVyaXRlZFZhbHVlKCk7Ci0gICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFs
VmFsdWUoKSB8fCAoIW1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsK
KyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworICAgIGJvb2wgaXNJbmhlcml0ID0gc3RhdGUu
bV9wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7CisgICAgYm9vbCBpc0lu
aXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAoIXN0YXRlLm1fcGFyZW50Tm9kZSAm
JiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKIAogICAgIEFTU0VSVCghaXNJbmhlcml0IHx8
ICFpc0luaXRpYWwpOyAvLyBpc0luaGVyaXQgLT4gIWlzSW5pdGlhbCAmJiBpc0luaXRpYWwgLT4g
IWlzSW5oZXJpdAotICAgIEFTU0VSVCghaXNJbmhlcml0IHx8IChtX3BhcmVudE5vZGUgJiYgbV9w
YXJlbnRTdHlsZSkpOyAvLyBpc0luaGVyaXQgLT4gKG1fcGFyZW50Tm9kZSAmJiBtX3BhcmVudFN0
eWxlKQorICAgIEFTU0VSVCghaXNJbmhlcml0IHx8IChzdGF0ZS5tX3BhcmVudE5vZGUgJiYgc3Rh
dGUubV9wYXJlbnRTdHlsZSkpOyAvLyBpc0luaGVyaXQgLT4gKHN0YXRlLm1fcGFyZW50Tm9kZSAm
JiBzdGF0ZS5tX3BhcmVudFN0eWxlKQogCi0gICAgaWYgKCFhcHBseVByb3BlcnR5VG9SZWd1bGFy
U3R5bGUoKSAmJiAoIWFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSB8fCAhaXNWYWxp
ZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSkgeworICAgIGlmICghc3RhdGUubV9hcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUgJiYgKCFzdGF0ZS5tX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5r
U3R5bGUgfHwgIWlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KGlkKSkpIHsKICAgICAgICAgLy8g
TGltaXQgdGhlIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBvbmx5IHRoZSBvbmVz
IGhvbm9yZWQgYnkgOnZpc2l0ZWQuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAo
aXNJbmhlcml0ICYmICFtX3BhcmVudFN0eWxlLT5oYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVy
dGllcygpICYmICFDU1NQcm9wZXJ0eTo6aXNJbmhlcml0ZWRQcm9wZXJ0eShpZCkpCi0gICAgICAg
IG1fcGFyZW50U3R5bGUtPnNldEhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCk7Cisg
ICAgaWYgKGlzSW5oZXJpdCAmJiAhc3RhdGUubV9wYXJlbnRTdHlsZS0+aGFzRXhwbGljaXRseUlu
aGVyaXRlZFByb3BlcnRpZXMoKSAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHko
aWQpKQorICAgICAgICBzdGF0ZS5tX3BhcmVudFN0eWxlLT5zZXRIYXNFeHBsaWNpdGx5SW5oZXJp
dGVkUHJvcGVydGllcygpOwogCiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCiAgICAgaWYgKGlk
ID09IENTU1Byb3BlcnR5VmFyaWFibGUpIHsKQEAgLTMwNDEsNyArMzA0Myw3IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgICAgIENTU1ZhcmlhYmxlVmFsdWUqIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Q1NT
VmFyaWFibGVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZS0+bmFtZSgp
LmlzRW1wdHkoKSk7CiAgICAgICAgIEFTU0VSVCghdmFyaWFibGUtPnZhbHVlKCkuaXNFbXB0eSgp
KTsKLSAgICAgICAgbV9zdHlsZS0+c2V0VmFyaWFibGUodmFyaWFibGUtPm5hbWUoKSwgdmFyaWFi
bGUtPnZhbHVlKCkpOworICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRWYXJpYWJsZSh2YXJpYWJs
ZS0+bmFtZSgpLCB2YXJpYWJsZS0+dmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAj
ZW5kaWYKQEAgLTMwNjAsNyArMzA2Miw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAKICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpID8gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkgOiAwOwogCi0gICAgZmxvYXQgem9v
bUZhY3RvciA9IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBmbG9hdCB6b29tRmFjdG9y
ID0gc3RhdGUubV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwogCiAgICAgLy8gV2hhdCBmb2xsb3dz
IGlzIGEgbGlzdCB0aGF0IG1hcHMgdGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIgY29ycmVz
cG9uZGluZyBmcm9udC1lbmQKICAgICAvLyBSZW5kZXJTdHlsZSB2YWx1ZXMuIFNob3J0aGFuZHMg
KGUuZy4gYm9yZGVyLCBiYWNrZ3JvdW5kKSBvY2N1ciBpbiB0aGlzIGxpc3QgYXMgd2VsbCBhbmQK
QEAgLTMwNzQsNyArMzA3Niw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAvLyBub3RlIGlz
IGEgcmVtaW5kZXIgdGhhdCBldmVudHVhbGx5ICJpbmhlcml0IiBuZWVkcyB0byBiZSBzdXBwb3J0
ZWQuCiAKICAgICAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgICAgICBtX3N0
eWxlLT5jbGVhckNvbnRlbnQoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5jbGVh
ckNvbnRlbnQoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKQEAg
LTMwODYsMTkgKzMwODgsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBDU1NWYWx1
ZSogaXRlbSA9IGkudmFsdWUoKTsKICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZUdl
bmVyYXRvclZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzR3JhZGll
bnRWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChT
dHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+
KGl0ZW0pLT5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCh0aGlzKS5nZXQoKSksIGRpZFNldCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRDb250ZW50KFN0eWxl
R2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NHcmFkaWVudFZhbHVlKj4oaXRl
bSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpLmdldCgpKSwgZGlkU2V0KTsKICAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRlLm1fc3R5bGUtPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRl
KHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CiAg
ICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9T
RVQpCiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc0ltYWdlU2V0VmFsdWUoKSkg
ewotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zy
b21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUq
PihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNl
dENvbnRlbnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGlj
X2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAg
ICAgICAgZGlkU2V0ID0gdHJ1ZTsKICNlbmRpZgogICAgICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgICAgIGlmIChpdGVtLT5pc0ltYWdlVmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRDb250ZW50KGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0
eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPihpdGVtKSksIGRpZFNldCk7Cisg
ICAgICAgICAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldENvbnRlbnQoY2FjaGVkT3JQZW5k
aW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1
ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzEw
OSwxNyArMzExMSwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBjb250ZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0
ZW0pOwogCiAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNTdHJpbmcoKSkgewot
ICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNvbnRlbnRWYWx1ZS0+Z2V0
U3RyaW5nVmFsdWUoKS5pbXBsKCksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRl
Lm1fc3R5bGUtPnNldENvbnRlbnQoY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwo
KSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNBdHRyKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IENhbiBhIG5hbWVzcGFjZSBiZSBzcGVjaWZpZWQgZm9yIGFuIGF0
dHIoZm9vKT8KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3R5bGUtPnN0eWxlVHlwZSgpID09
IE5PUFNFVURPKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0VW5pcXVlKCk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5tX3N0eWxlLT5zdHlsZVR5cGUoKSA9PSBO
T1BTRVVETykKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldFVuaXF1
ZSgpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBt
X3BhcmVudFN0eWxlLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
Lm1fcGFyZW50U3R5bGUtPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgICAgICAgICBRdWFsaWZp
ZWROYW1lIGF0dHIobnVsbEF0b20sIGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBs
KCksIG51bGxBdG9tKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSA9IG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0dHIpOwotICAgICAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUu
aW1wbCgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlID0gc3RhdGUubV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgICAg
ICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldENvbnRlbnQodmFsdWUuaXNOdWxsKCkgPyBlbXB0
eUF0b20gOiB2YWx1ZS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNl
dCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQg
dGhlIGF0dHJpYnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZQogICAgICAgICAgICAgICAgICAg
ICBtX2ZlYXR1cmVzLmF0dHJzSW5SdWxlcy5hZGQoYXR0ci5sb2NhbE5hbWUoKS5pbXBsKCkpOwpA
QCAtMzEzMCwyNCArMzEzMiwyNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgICAgICBp
ZiAobGlzdFN0eWxlSWRlbnQgIT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgICAgICAgICAg
ICAgbGlzdFN0eWxlVHlwZSA9IHN0YXRpY19jYXN0PEVMaXN0U3R5bGVUeXBlPihsaXN0U3R5bGVJ
ZGVudCAtIENTU1ZhbHVlRGlzYyk7CiAgICAgICAgICAgICAgICAgICAgIE93blB0cjxDb3VudGVy
Q29udGVudD4gY291bnRlciA9IGFkb3B0UHRyKG5ldyBDb3VudGVyQ29udGVudChjb3VudGVyVmFs
dWUtPmlkZW50aWZpZXIoKSwgbGlzdFN0eWxlVHlwZSwgY291bnRlclZhbHVlLT5zZXBhcmF0b3Io
KSkpOwotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNvdW50ZXIucmVs
ZWFzZSgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRD
b250ZW50KGNvdW50ZXIucmVsZWFzZSgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBk
aWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAoY29udGVudFZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVPcGVuUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0
eWxlLT5zZXRDb250ZW50KE9QRU5fUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRDb250ZW50KE9QRU5fUVVPVEUsIGRpZFNldCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDbG9zZVF1b3RlOgot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChDTE9TRV9RVU9URSwg
ZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldENvbnRl
bnQoQ0xPU0VfUVVPVEUsIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQg
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVOb09wZW5RdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ2xv
c2VRdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoTk9f
Q0xPU0VfUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tX3N0
eWxlLT5zZXRDb250ZW50KE5PX0NMT1NFX1FVT1RFLCBkaWRTZXQpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMzE1NywxNiArMzE1OSwxNiBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
ICghZGlkU2V0KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyQ29udGVudCgpOworICAg
ICAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPmNsZWFyQ29udGVudCgpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVF1b3RlczoKICAgICAgICAg
aWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKG1fcGFyZW50
U3R5bGUtPnF1b3RlcygpKTsKKyAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldFF1b3Rlcyhz
dGF0ZS5tX3BhcmVudFN0eWxlLT5xdW90ZXMoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0
UXVvdGVzKDApOworICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0UXVvdGVzKDApOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxp
c3QoKSkgewpAQCAtMzE4NCwxOSArMzE4NiwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAg
ICAgIFN0cmluZyBlbmRRdW90ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oc2Vj
b25kKS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAgICAgICBxdW90ZXMtPmFkZFBhaXIo
c3RkOjptYWtlX3BhaXIoc3RhcnRRdW90ZSwgZW5kUXVvdGUpKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhxdW90ZXMpOworICAgICAgICAgICAgc3RhdGUu
bV9zdHlsZS0+c2V0UXVvdGVzKHF1b3Rlcyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKSB7CiAgICAgICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpjcmVhdGUoKSk7CisgICAgICAgICAgICAgICAg
c3RhdGUubV9zdHlsZS0+c2V0UXVvdGVzKFF1b3Rlc0RhdGE6OmNyZWF0ZSgpKTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHk6IHsKICAg
ICAgICAgLy8gbGlzdCBvZiBzdHJpbmdzIGFuZCBpZHMKICAgICAgICAgaWYgKGlzSW5oZXJpdCkg
ewotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IG1f
cGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAg
ICAgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLm1fcGFy
ZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9u
IGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLm1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAg
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkocGFyZW50Rm9udERlc2Ny
aXB0aW9uLmdlbmVyaWNGYW1pbHkoKSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
RmFtaWx5KHBhcmVudEZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpKTsKICAgICAgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQocGFyZW50Rm9udERlc2NyaXB0aW9u
LmlzU3BlY2lmaWVkRm9udCgpKTsKQEAgLTMyMDYsNyArMzIwOCw3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAK
ICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewogICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGlu
aXRpYWxEZXNjID0gRm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAg
ICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUubV9zdHlsZS0+Zm9u
dERlc2NyaXB0aW9uKCk7CiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgc2l6
ZSB0byBhY2NvdW50IGZvciB0aGUgZ2VuZXJpYyBmYW1pbHkgY2hhbmdlIGZyb20gbW9ub3NwYWNl
CiAgICAgICAgICAgICAvLyB0byBub24tbW9ub3NwYWNlLgogICAgICAgICAgICAgaWYgKGZvbnRE
ZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1
bHRTaXplKCkpCkBAIC0zMjIwLDcgKzMyMjIsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogCiAgICAgICAgIGlm
ICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEZv
bnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24o
KTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLm1fc3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICBGb250RmFtaWx5JiBmaXJzdEZhbWlseSA9
IGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpOwogICAgICAgICBGb250RmFtaWx5KiBjdXJy
RmFtaWx5ID0gMDsKIApAQCAtMzI5OCwyNCArMzMwMCwyNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogLy8gc2hv
cnRoYW5kIHByb3BlcnRpZXMKICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZDoKICAgICAg
ICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJCYWNrZ3JvdW5k
TGF5ZXJzKCk7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3Io
KSk7CisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5jbGVhckJhY2tncm91bmRMYXllcnMoKTsK
KyAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihDb2xvcigpKTsK
ICAgICAgICAgfSBlbHNlIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPmlu
aGVyaXRCYWNrZ3JvdW5kTGF5ZXJzKCptX3BhcmVudFN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkp
OwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKG1fcGFyZW50U3R5bGUt
PmJhY2tncm91bmRDb2xvcigpKTsKKyAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPmluaGVyaXRC
YWNrZ3JvdW5kTGF5ZXJzKCpzdGF0ZS5tX3BhcmVudFN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkp
OworICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKHN0YXRlLm1f
cGFyZW50U3R5bGUtPmJhY2tncm91bmRDb2xvcigpKTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2s6CiAgICAgICAgIGlmIChpc0luaXRp
YWwpCi0gICAgICAgICAgICBtX3N0eWxlLT5jbGVhck1hc2tMYXllcnMoKTsKKyAgICAgICAgICAg
IHN0YXRlLm1fc3R5bGUtPmNsZWFyTWFza0xheWVycygpOwogICAgICAgICBlbHNlIGlmIChpc0lu
aGVyaXQpCi0gICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0TWFza0xheWVycygqbV9wYXJlbnRT
dHlsZS0+bWFza0xheWVycygpKTsKKyAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPmluaGVyaXRN
YXNrTGF5ZXJzKCpzdGF0ZS5tX3BhcmVudFN0eWxlLT5tYXNrTGF5ZXJzKCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnQ6CiAgICAgICAgIGlmIChpc0luaGVyaXQp
IHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3BhcmVu
dFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldExpbmVI
ZWlnaHQobV9wYXJlbnRTdHlsZS0+c3BlY2lmaWVkTGluZUhlaWdodCgpKTsKLSAgICAgICAgICAg
IG1fbGluZUhlaWdodFZhbHVlID0gMDsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBzdGF0ZS5tX3BhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAg
ICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldExpbmVIZWlnaHQoc3RhdGUubV9wYXJlbnRTdHls
ZS0+c3BlY2lmaWVkTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgIHN0YXRlLm1fbGluZUhlaWdo
dFZhbHVlID0gMDsKICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkgewogICAgICAgICAgICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpOwpAQCAtMzMyNCw4ICszMzI2LDggQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBpbml0aWFs
aXplRm9udFN0eWxlKHNldHRpbmdzKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZSkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5p
dGlhbExpbmVIZWlnaHQoKSk7Ci0gICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7Cisg
ICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0
aWFsTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgIHN0YXRlLm1fbGluZUhlaWdodFZhbHVlID0g
MDsKIAogICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICAg
ICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lzdGVtRm9udChwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSwgZm9udERlc2NyaXB0aW9uKTsKQEAgLTMzNDEsNyArMzM0Myw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50
ZXJGb250KGRvY3VtZW50KCktPnByaW50aW5nKCkgfHwgIXNldHRpbmdzLT5zY3JlZW5Gb250U3Vi
c3RpdHV0aW9uRW5hYmxlZCgpKTsKIAogICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgem9v
bSBmYWN0b3IuCi0gICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6
ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBtX3N0eWxlLmdl
dCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgZm9udERlc2NyaXB0aW9uLnNw
ZWNpZmllZFNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKKyAgICAgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRT
aXplKGRvY3VtZW50KCksIHN0YXRlLm1fc3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fi
c29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29t
UnVsZXMoKSkpOwogICAgICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ZvbnRW
YWx1ZSgpKSB7CkBAIC0zMzU5LDcgKzMzNjEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAg
dXBkYXRlRm9udCgpOwogICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRT
aXplLCBmb250LT5zaXplLmdldCgpKTsKIAotICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUg
PSBmb250LT5saW5lSGVpZ2h0LmdldCgpOworICAgICAgICAgICAgc3RhdGUubV9saW5lSGVpZ2h0
VmFsdWUgPSBmb250LT5saW5lSGVpZ2h0LmdldCgpOwogCiAgICAgICAgICAgICBhcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udEZhbWlseSwgZm9udC0+ZmFtaWx5LmdldCgpKTsKICAgICAgICAg
fQpAQCAtMzM3MSwxMSArMzM3MywxMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3hTaGFkb3c6IHsKICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewogICAgICAgICAg
ICAgaWYgKGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdykKLSAgICAgICAgICAgICAgICByZXR1
cm4gbV9zdHlsZS0+c2V0VGV4dFNoYWRvdyhtX3BhcmVudFN0eWxlLT50ZXh0U2hhZG93KCkgPyBh
ZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqbV9wYXJlbnRTdHlsZS0+dGV4dFNoYWRvdygpKSkgOiBu
dWxscHRyKTsKLSAgICAgICAgICAgIHJldHVybiBtX3N0eWxlLT5zZXRCb3hTaGFkb3cobV9wYXJl
bnRTdHlsZS0+Ym94U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqbV9wYXJlbnRT
dHlsZS0+Ym94U2hhZG93KCkpKSA6IG51bGxwdHIpOworICAgICAgICAgICAgICAgIHJldHVybiBz
dGF0ZS5tX3N0eWxlLT5zZXRUZXh0U2hhZG93KHN0YXRlLm1fcGFyZW50U3R5bGUtPnRleHRTaGFk
b3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCpzdGF0ZS5tX3BhcmVudFN0eWxlLT50ZXh0
U2hhZG93KCkpKSA6IG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRlLm1fc3R5bGUt
PnNldEJveFNoYWRvdyhzdGF0ZS5tX3BhcmVudFN0eWxlLT5ib3hTaGFkb3coKSA/IGFkb3B0UHRy
KG5ldyBTaGFkb3dEYXRhKCpzdGF0ZS5tX3BhcmVudFN0eWxlLT5ib3hTaGFkb3coKSkpIDogbnVs
bHB0cik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzSW5pdGlhbCB8fCBwcmltaXRpdmVWYWx1
ZSkgLy8gaW5pdGlhbCB8IG5vbmUKLSAgICAgICAgICAgIHJldHVybiBpZCA9PSBDU1NQcm9wZXJ0
eVRleHRTaGFkb3cgPyBtX3N0eWxlLT5zZXRUZXh0U2hhZG93KG51bGxwdHIpIDogbV9zdHlsZS0+
c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuIGlkID09IENTU1Byb3Bl
cnR5VGV4dFNoYWRvdyA/IHN0YXRlLm1fc3R5bGUtPnNldFRleHRTaGFkb3cobnVsbHB0cikgOiBz
dGF0ZS5tX3N0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiAKICAgICAgICAgaWYgKCF2YWx1
ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMzODUsMjkgKzMzODcs
MjkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICghY3VyclZhbHVlLT5pc1NoYWRvd1Zh
bHVlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBTaGFkb3dWYWx1
ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1ZhbHVlKj4oY3VyclZhbHVlKTsKLSAgICAgICAg
ICAgIGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVs
ZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICBpbnQgeSA9IGl0ZW0tPnktPmNv
bXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3Ip
OwotICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0
ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikgOiAw
OwotICAgICAgICAgICAgaW50IHNwcmVhZCA9IGl0ZW0tPnNwcmVhZCA/IGl0ZW0tPnNwcmVhZC0+
Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rv
cikgOiAwOworICAgICAgICAgICAgaW50IHggPSBpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4o
c3RhdGUubV9zdHlsZS5nZXQoKSwgc3RhdGUubV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9y
KTsKKyAgICAgICAgICAgIGludCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRl
Lm1fc3R5bGUuZ2V0KCksIHN0YXRlLm1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7Cisg
ICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVu
Z3RoPGludD4oc3RhdGUubV9zdHlsZS5nZXQoKSwgc3RhdGUubV9yb290RWxlbWVudFN0eWxlLCB6
b29tRmFjdG9yKSA6IDA7CisgICAgICAgICAgICBpbnQgc3ByZWFkID0gaXRlbS0+c3ByZWFkID8g
aXRlbS0+c3ByZWFkLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUubV9zdHlsZS5nZXQoKSwgc3Rh
dGUubV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7CiAgICAgICAgICAgICBTaGFk
b3dTdHlsZSBzaGFkb3dTdHlsZSA9IGl0ZW0tPnN0eWxlICYmIGl0ZW0tPnN0eWxlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlSW5zZXQgPyBJbnNldCA6IE5vcm1hbDsKICAgICAgICAgICAgIENvbG9y
IGNvbG9yOwogICAgICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQogICAgICAgICAgICAgICAgIGNv
bG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0KCkpOwotICAgICAg
ICAgICAgZWxzZSBpZiAobV9zdHlsZSkKLSAgICAgICAgICAgICAgICBjb2xvciA9IG1fc3R5bGUt
PmNvbG9yKCk7CisgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS5tX3N0eWxlKQorICAgICAgICAg
ICAgICAgIGNvbG9yID0gc3RhdGUubV9zdHlsZS0+Y29sb3IoKTsKIAogICAgICAgICAgICAgT3du
UHRyPFNoYWRvd0RhdGE+IHNoYWRvd0RhdGEgPSBhZG9wdFB0cihuZXcgU2hhZG93RGF0YShJbnRQ
b2ludCh4LCB5KSwgYmx1ciwgc3ByZWFkLCBzaGFkb3dTdHlsZSwgaWQgPT0gQ1NTUHJvcGVydHlX
ZWJraXRCb3hTaGFkb3csIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFy
ZW50KSk7CiAgICAgICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93KQotICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldFRleHRTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCks
IGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3Qg
ZW50cnkKKyAgICAgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRUZXh0U2hhZG93KHNoYWRv
d0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBp
cyBub3QgdGhlIGZpcnN0IGVudHJ5CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAv
LyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CisgICAgICAg
ICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgp
LCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0
IGVudHJ5CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5J
VElBTChib3hSZWZsZWN0LCBCb3hSZWZsZWN0KQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUp
IHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJveFJlZmxlY3QoUmVuZGVyU3R5bGU6OmluaXRp
YWxCb3hSZWZsZWN0KCkpOworICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0Qm94UmVmbGVj
dChSZW5kZXJTdHlsZTo6aW5pdGlhbEJveFJlZmxlY3QoKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIApAQCAtMzQxOCwxMyArMzQyMCwxMyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiByZWZsZWN0aW9uID0gU3R5bGVSZWZsZWN0aW9uOjpj
cmVhdGUoKTsKICAgICAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0aW9uKCpyZWZsZWN0VmFsdWUt
PmRpcmVjdGlvbigpKTsKICAgICAgICAgaWYgKHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCkpCi0gICAg
ICAgICAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVjdFZhbHVlLT5vZmZzZXQoKS0+Y29u
dmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8
IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21G
YWN0b3IpKTsKKyAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChyZWZsZWN0VmFsdWUt
Pm9mZnNldCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNl
bnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0YXRlLm1fc3R5bGUuZ2V0KCks
IHN0YXRlLm1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikpOwogICAgICAgICBOaW5lUGll
Y2VJbWFnZSBtYXNrOwogICAgICAgICBtYXNrLnNldE1hc2tEZWZhdWx0cygpOwogICAgICAgICBt
X3N0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUtPm1hc2soKSwgbWFz
ayk7CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2sobWFzayk7CiAKLSAgICAgICAgbV9zdHls
ZS0+c2V0Qm94UmVmbGVjdChyZWZsZWN0aW9uLnJlbGVhc2UoKSk7CisgICAgICAgIHN0YXRlLm1f
c3R5bGUtPnNldEJveFJlZmxlY3QocmVmbGVjdGlvbi5yZWxlYXNlKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlTcmM6IC8vIE9ubHkgdXNlZCBpbiBAZm9u
dC1mYWNlIHJ1bGVzLgpAQCAtMzQzMywyOSArMzQzNSwyOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGU6CiAgICAgICAg
IGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1bGVDb2xv
cihtX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKS5pc1ZhbGlkKCkgPyBtX3BhcmVudFN0
eWxlLT5jb2x1bW5SdWxlQ29sb3IoKSA6IG1fcGFyZW50U3R5bGUtPmNvbG9yKCkpOwotICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVsZVN0eWxlKG1fcGFyZW50U3R5bGUtPmNvbHVtblJ1
bGVTdHlsZSgpKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1bGVXaWR0aChtX3Bh
cmVudFN0eWxlLT5jb2x1bW5SdWxlV2lkdGgoKSk7CisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxl
LT5zZXRDb2x1bW5SdWxlQ29sb3Ioc3RhdGUubV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9y
KCkuaXNWYWxpZCgpID8gc3RhdGUubV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkgOiBz
dGF0ZS5tX3BhcmVudFN0eWxlLT5jb2xvcigpKTsKKyAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUt
PnNldENvbHVtblJ1bGVTdHlsZShzdGF0ZS5tX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlU3R5bGUo
KSk7CisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRDb2x1bW5SdWxlV2lkdGgoc3RhdGUu
bV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZVdpZHRoKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGlz
SW5pdGlhbCkKLSAgICAgICAgICAgIG1fc3R5bGUtPnJlc2V0Q29sdW1uUnVsZSgpOworICAgICAg
ICAgICAgc3RhdGUubV9zdHlsZS0+cmVzZXRDb2x1bW5SdWxlKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZToKICAgICAgICAgaWYgKCFpc0luaGVy
aXQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVEaXJl
Y3Rpb24obV9wYXJlbnRTdHlsZS0+bWFycXVlZURpcmVjdGlvbigpKTsKLSAgICAgICAgbV9zdHls
ZS0+c2V0TWFycXVlZUluY3JlbWVudChtX3BhcmVudFN0eWxlLT5tYXJxdWVlSW5jcmVtZW50KCkp
OwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQobV9wYXJlbnRTdHlsZS0+bWFycXVl
ZVNwZWVkKCkpOwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KG1fcGFyZW50
U3R5bGUtPm1hcnF1ZWVMb29wQ291bnQoKSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVC
ZWhhdmlvcihtX3BhcmVudFN0eWxlLT5tYXJxdWVlQmVoYXZpb3IoKSk7CisgICAgICAgIHN0YXRl
Lm1fc3R5bGUtPnNldE1hcnF1ZWVEaXJlY3Rpb24oc3RhdGUubV9wYXJlbnRTdHlsZS0+bWFycXVl
ZURpcmVjdGlvbigpKTsKKyAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVu
dChzdGF0ZS5tX3BhcmVudFN0eWxlLT5tYXJxdWVlSW5jcmVtZW50KCkpOworICAgICAgICBzdGF0
ZS5tX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoc3RhdGUubV9wYXJlbnRTdHlsZS0+bWFycXVlZVNw
ZWVkKCkpOworICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KHN0YXRl
Lm1fcGFyZW50U3R5bGUtPm1hcnF1ZWVMb29wQ291bnQoKSk7CisgICAgICAgIHN0YXRlLm1fc3R5
bGUtPnNldE1hcnF1ZWVCZWhhdmlvcihzdGF0ZS5tX3BhcmVudFN0eWxlLT5tYXJxdWVlQmVoYXZp
b3IoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVl
ZVJlcGV0aXRpb246IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFycXVl
ZUxvb3BDb3VudCwgTWFycXVlZUxvb3BDb3VudCkKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1
ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlSW5maW5pdGUpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJx
dWVlTG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCisgICAgICAgICAg
ICBzdGF0ZS5tX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVw
ZWF0IGZvcmV2ZXIuCiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigp
KQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1
ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRNYXJxdWVl
TG9vcENvdW50KHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVNwZWVkOiB7CkBAIC0z
NDY1LDE5ICszNDY3LDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGlmIChpbnQgaWRlbnQgPSBw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAgc3dpdGNoIChpZGVudCkg
ewogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNsb3c6Ci0gICAgICAgICAgICAgICAgbV9zdHls
ZS0+c2V0TWFycXVlZVNwZWVkKDUwMCk7IC8vIDUwMCBtc2VjLgorICAgICAgICAgICAgICAgIHN0
YXRlLm1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCg1MDApOyAvLyA1MDAgbXNlYy4KICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKDg1KTsgLy8gODVtc2VjLiBUaGUgV2lu
SUUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRNYXJxdWVlU3Bl
ZWQoODUpOyAvLyA4NW1zZWMuIFRoZSBXaW5JRSBkZWZhdWx0LgogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhc3Q6Ci0gICAgICAgICAgICAgICAgbV9z
dHlsZS0+c2V0TWFycXVlZVNwZWVkKDEwKTsgLy8gMTBtc2VjLiBTdXBlciBmYXN0LgorICAgICAg
ICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCgxMCk7IC8vIDEwbXNlYy4g
U3VwZXIgZmFzdC4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNUaW1lKCkpCi0gICAgICAgICAgICBtX3N0
eWxlLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGludCwgQ1NT
UHJpbWl0aXZlVmFsdWU6Ok1pbGxpc2Vjb25kcz4oKSk7CisgICAgICAgICAgICBzdGF0ZS5tX3N0
eWxlLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGludCwgQ1NT
UHJpbWl0aXZlVmFsdWU6Ok1pbGxpc2Vjb25kcz4oKSk7CiAgICAgICAgIGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLT5pc051bWJlcigpKSAvLyBGb3Igc2Nyb2xsYW1vdW50IHN1cHBvcnQuCi0gICAg
ICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmdldEludFZh
bHVlKCkpOworICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKHByaW1p
dGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZUluY3JlbWVudDogewpAQCAtMzQ4NywxOSArMzQ4
OSwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsK
ICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoKLSAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgxLCBGaXhlZCkpOyAvLyAxcHguCisgICAgICAg
ICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMSwgRml4
ZWQpKTsgLy8gMXB4LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVt
ZW50KExlbmd0aCg2LCBGaXhlZCkpOyAvLyA2cHguIFRoZSBXaW5JRSBkZWZhdWx0LgorICAgICAg
ICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDYsIEZp
eGVkKSk7IC8vIDZweC4gVGhlIFdpbklFIGRlZmF1bHQuCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2U6Ci0gICAgICAgICAgICAgICAgbV9zdHls
ZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCisgICAg
ICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYs
IEZpeGVkKSk7IC8vIDM2cHguCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMZW5ndGggbWFycXVlZUxlbmd0aCA9IGNv
bnZlcnRUb0ludExlbmd0aChwcmltaXRpdmVWYWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0
eWxlKTsKKyAgICAgICAgICAgIExlbmd0aCBtYXJxdWVlTGVuZ3RoID0gY29udmVydFRvSW50TGVu
Z3RoKHByaW1pdGl2ZVZhbHVlLCBzdGF0ZS5tX3N0eWxlLmdldCgpLCBzdGF0ZS5tX3Jvb3RFbGVt
ZW50U3R5bGUpOwogICAgICAgICAgICAgaWYgKCFtYXJxdWVlTGVuZ3RoLmlzVW5kZWZpbmVkKCkp
Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChtYXJxdWVlTGVu
Z3RoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50
KG1hcnF1ZWVMZW5ndGgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0z
NTA4LDExICszNTEwLDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFs
dWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRMb2NhbGUo
bnVsbEF0b20pOworICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+c2V0TG9jYWxlKG51bGxBdG9t
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TG9jYWxlKHByaW1pdGl2
ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24obV9z
dHlsZS0+bG9jYWxlKCkpKTsKKyAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldExvY2FsZShw
cmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CisgICAgICAgIEZvbnREZXNjcmlwdGlv
biBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5tX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNjcmlwdChsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250
U2VsZWN0aW9uKHN0YXRlLm1fc3R5bGUtPmxvY2FsZSgpKSk7CiAgICAgICAgIHNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzUz
MSw3ICszNTMzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAg
ICAgICAgICBtX3N0eWxlLT5zZXREYXNoYm9hcmRSZWdpb25zKFJlbmRlclN0eWxlOjpub25lRGFz
aGJvYXJkUmVnaW9ucygpKTsKKyAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldERhc2hib2Fy
ZFJlZ2lvbnMoUmVuZGVyU3R5bGU6Om5vbmVEYXNoYm9hcmRSZWdpb25zKCkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM1NDEsMTAgKzM1NDMsMTAgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKIAogICAgICAgICBEYXNoYm9hcmRSZWdpb24qIGZpcnN0ID0gcmVnaW9uOwogICAgICAgICB3
aGlsZSAocmVnaW9uKSB7Ci0gICAgICAgICAgICBMZW5ndGggdG9wID0gY29udmVydFRvSW50TGVu
Z3RoKHJlZ2lvbi0+dG9wKCksIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAgICAg
ICAgICBMZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5yaWdodCgpLCBz
dHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOwotICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9
IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmJvdHRvbSgpLCBzdHlsZSgpLCBtX3Jvb3RFbGVt
ZW50U3R5bGUpOwotICAgICAgICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9JbnRMZW5ndGgo
cmVnaW9uLT5sZWZ0KCksIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7CisgICAgICAgICAg
ICBMZW5ndGggdG9wID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+dG9wKCksIHN0YXRlLm1f
c3R5bGUuZ2V0KCksIHN0YXRlLm1fcm9vdEVsZW1lbnRTdHlsZSk7CisgICAgICAgICAgICBMZW5n
dGggcmlnaHQgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5yaWdodCgpLCBzdGF0ZS5tX3N0
eWxlLmdldCgpLCBzdGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUpOworICAgICAgICAgICAgTGVuZ3Ro
IGJvdHRvbSA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmJvdHRvbSgpLCBzdGF0ZS5tX3N0
eWxlLmdldCgpLCBzdGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUpOworICAgICAgICAgICAgTGVuZ3Ro
IGxlZnQgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5sZWZ0KCksIHN0YXRlLm1fc3R5bGUu
Z2V0KCksIHN0YXRlLm1fcm9vdEVsZW1lbnRTdHlsZSk7CiAKICAgICAgICAgICAgIGlmICh0b3Au
aXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAgICB0b3AgPSBMZW5ndGgoKTsKQEAgLTM1NTYs
MTMgKzM1NTgsMTMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBsZWZ0ID0gTGVuZ3Ro
KCk7CiAKICAgICAgICAgICAgIGlmIChyZWdpb24tPm1faXNDaXJjbGUpCi0gICAgICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpDaXJj
bGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24gPT0g
Zmlyc3QgPyBmYWxzZSA6IHRydWUpOworICAgICAgICAgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNl
dERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hib2FyZFJlZ2lvbjo6Q2lyY2xlLCByZWdpb24tPm1f
bGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2Ug
OiB0cnVlKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lvbi0+bV9pc1JlY3RhbmdsZSkKLSAg
ICAgICAgICAgICAgICBtX3N0eWxlLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRS
ZWdpb246OlJlY3RhbmdsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxl
ZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CisgICAgICAgICAgICAgICAgc3Rh
dGUubV9zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpSZWN0
YW5nbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24g
PT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwogICAgICAgICAgICAgcmVnaW9uID0gcmVnaW9uLT5t
X25leHQuZ2V0KCk7CiAgICAgICAgIH0KIAotICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkt
PnNldEhhc0Fubm90YXRlZFJlZ2lvbnModHJ1ZSk7CisgICAgICAgIHN0YXRlLm1fZWxlbWVudC0+
ZG9jdW1lbnQoKS0+c2V0SGFzQW5ub3RhdGVkUmVnaW9ucyh0cnVlKTsKIAogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtMzU3MSw4ICszNTczLDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0QXBwUmVnaW9uOiB7CiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUg
fHwgIXByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBtX3N0eWxlLT5zZXREcmFnZ2FibGVSZWdpb25Nb2RlKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlRHJhZyA/IERyYWdnYWJsZVJlZ2lvbkRyYWcgOiBEcmFnZ2FibGVS
ZWdpb25Ob0RyYWcpOwotICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnNldEhhc0Fubm90
YXRlZFJlZ2lvbnModHJ1ZSk7CisgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldERyYWdnYWJsZVJl
Z2lvbk1vZGUocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVEcmFnID8gRHJh
Z2dhYmxlUmVnaW9uRHJhZyA6IERyYWdnYWJsZVJlZ2lvbk5vRHJhZyk7CisgICAgICAgIHN0YXRl
Lm1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0SGFzQW5ub3RhdGVkUmVnaW9ucyh0cnVlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzU4OCwyMSArMzU5MCwyMSBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICAgICAgICAgIHJlc3VsdCAqPSAzOwogICAgICAgICAgICAgZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVUaGljaykKICAgICAgICAg
ICAgICAgICByZXN1bHQgKj0gNTsKLSAgICAgICAgICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxl
bmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAg
ICAgICAgICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShyZXN1bHQsIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUubV9zdHls
ZS5nZXQoKSwgc3RhdGUubV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB3aWR0
aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZSgpLCBtX3Jvb3RF
bGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUubV9zdHlsZS5nZXQoKSwgc3RhdGUubV9y
b290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIG1fc3R5bGUtPnNldFRleHRTdHJva2VXaWR0aCh3aWR0aCk7CisgICAgICAg
IHN0YXRlLm1fc3R5bGUtPnNldFRleHRTdHJva2VXaWR0aCh3aWR0aCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybTogewogICAgICAg
ICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0cmFuc2Zvcm0sIFRyYW5zZm9ybSk7CiAgICAg
ICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICAgICAgY3JlYXRlVHJhbnNm
b3JtT3BlcmF0aW9ucyh2YWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCBvcGVyYXRp
b25zKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0VHJhbnNmb3JtKG9wZXJhdGlvbnMpOworICAgICAg
ICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlLCBzdGF0ZS5tX3N0eWxlLmdldCgpLCBz
dGF0ZS5tX3Jvb3RFbGVtZW50U3R5bGUsIG9wZXJhdGlvbnMpOworICAgICAgICBzdGF0ZS5tX3N0
eWxlLT5zZXRUcmFuc2Zvcm0ob3BlcmF0aW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBlcnNwZWN0aXZlOiB7CkBAIC0zNjEyLDM0ICszNjE0
LDM0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAg
bV9zdHlsZS0+c2V0UGVyc3BlY3RpdmUoMCk7CisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5z
ZXRQZXJzcGVjdGl2ZSgwKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAg
ICAgIGZsb2F0IHBlcnNwZWN0aXZlVmFsdWU7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
aXNMZW5ndGgoKSkKLSAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBwcmltaXRpdmVWYWx1
ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29t
RmFjdG9yKTsKKyAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+
Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUubV9zdHlsZS5nZXQoKSwgc3RhdGUubV9yb290RWxl
bWVudFN0eWxlLCB6b29tRmFjdG9yKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUt
PmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIC8vIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5
LCB0cmVhdCB2YWx1ZWxlc3MgbnVtYmVycyBhcyBweC4KLSAgICAgICAgICAgIHBlcnNwZWN0aXZl
VmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByaW1pdGl2ZVZhbHVlLT5nZXREb3Vi
bGVWYWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKS0+Y29tcHV0ZUxlbmd0aDxmbG9h
dD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAg
IHBlcnNwZWN0aXZlVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByaW1pdGl2ZVZh
bHVlLT5nZXREb3VibGVWYWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKS0+Y29tcHV0
ZUxlbmd0aDxmbG9hdD4oc3RhdGUubV9zdHlsZS5nZXQoKSwgc3RhdGUubV9yb290RWxlbWVudFN0
eWxlLCB6b29tRmFjdG9yKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgaWYgKHBlcnNwZWN0aXZlVmFsdWUgPj0gMC4wZikKLSAgICAgICAgICAgIG1fc3R5
bGUtPnNldFBlcnNwZWN0aXZlKHBlcnNwZWN0aXZlVmFsdWUpOworICAgICAgICAgICAgc3RhdGUu
bV9zdHlsZS0+c2V0UGVyc3BlY3RpdmUocGVyc3BlY3RpdmVWYWx1ZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbjoKICAgICAgICAg
aWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyQW5pbWF0aW9ucygpOwor
ICAgICAgICAgICAgc3RhdGUubV9zdHlsZS0+Y2xlYXJBbmltYXRpb25zKCk7CiAgICAgICAgIGVs
c2UgaWYgKGlzSW5oZXJpdCkKLSAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRBbmltYXRpb25z
KG1fcGFyZW50U3R5bGUtPmFuaW1hdGlvbnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxl
LT5pbmhlcml0QW5pbWF0aW9ucyhzdGF0ZS5tX3BhcmVudFN0eWxlLT5hbmltYXRpb25zKCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246CiAg
ICAgICAgIGlmIChpc0luaXRpYWwpCi0gICAgICAgICAgICBtX3N0eWxlLT5jbGVhclRyYW5zaXRp
b25zKCk7CisgICAgICAgICAgICBzdGF0ZS5tX3N0eWxlLT5jbGVhclRyYW5zaXRpb25zKCk7CiAg
ICAgICAgIGVsc2UgaWYgKGlzSW5oZXJpdCkKLSAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRU
cmFuc2l0aW9ucyhtX3BhcmVudFN0eWxlLT50cmFuc2l0aW9ucygpKTsKKyAgICAgICAgICAgIHN0
YXRlLm1fc3R5bGUtPmluaGVyaXRUcmFuc2l0aW9ucyhzdGF0ZS5tX3BhcmVudFN0eWxlLT50cmFu
c2l0aW9ucygpKTsKICAgICAgICAgcmV0dXJuOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiB7CkBAIC0zNjQ4LDcg
KzM2NTAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgQ29s
b3IgY29sID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUpOwotICAgICAg
ICBtX3N0eWxlLT5zZXRUYXBIaWdobGlnaHRDb2xvcihjb2wpOworICAgICAgICBzdGF0ZS5tX3N0
eWxlLT5zZXRUYXBIaWdobGlnaHRDb2xvcihjb2wpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
I2VuZGlmCkBAIC0zNjU3LDcgKzM2NTksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBIQU5ETEVf
SU5IRVJJVF9BTkRfSU5JVElBTCh1c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nLCBVc2VUb3VjaE92
ZXJmbG93U2Nyb2xsaW5nKTsKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBtX3N0eWxlLT5zZXRVc2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5n
KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlVG91Y2gpOworICAgICAgICBz
dGF0ZS5tX3N0eWxlLT5zZXRVc2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlVG91Y2gpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
I2VuZGlmCkBAIC0zNzAwLDcgKzM3MDIsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXhMb2dpY2FsV2lkdGg6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
eExvZ2ljYWxIZWlnaHQ6CiAgICAgewotICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NT
UHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBtX3N0eWxlLT5kaXJl
Y3Rpb24oKSwgbV9zdHlsZS0+d3JpdGluZ01vZGUoKSk7CisgICAgICAgIENTU1Byb3BlcnR5SUQg
bmV3SWQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoaWQsIHN0
YXRlLm1fc3R5bGUtPmRpcmVjdGlvbigpLCBzdGF0ZS5tX3N0eWxlLT53cml0aW5nTW9kZSgpKTsK
ICAgICAgICAgQVNTRVJUKG5ld0lkICE9IGlkKTsKICAgICAgICAgcmV0dXJuIGFwcGx5UHJvcGVy
dHkobmV3SWQsIHZhbHVlKTsKICAgICB9CkBAIC0zNzM1LDkgKzM3MzcsOCBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgICAgICAgICAgc2V0V3JpdGluZ01vZGUoKnByaW1pdGl2ZVZhbHVlKTsKIAogICAgICAg
ICAvLyBGSVhNRTogSXQgaXMgbm90IG9rIHRvIG1vZGlmeSBkb2N1bWVudCBzdGF0ZSB3aGlsZSBh
cHBseWluZyBzdHlsZS4KLSAgICAgICAgaWYgKG1fZWxlbWVudCAmJiBtX2VsZW1lbnQgPT0gbV9l
bGVtZW50LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKLSAgICAgICAgICAgIG1fZWxl
bWVudC0+ZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCh0cnVl
KTsKLQorICAgICAgICBpZiAoc3RhdGUubV9lbGVtZW50ICYmIHN0YXRlLm1fZWxlbWVudCA9PSBz
dGF0ZS5tX2VsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQorICAgICAgICAg
ICAgc3RhdGUubV9lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNldE9uRG9jdW1l
bnRFbGVtZW50KHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNzUzLDcgKzM3
NTQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQm94Q29u
dGFpbjogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChsaW5lQm94Q29udGFp
biwgTGluZUJveENvbnRhaW4pCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSAmJiBwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIG1fc3R5
bGUtPnNldExpbmVCb3hDb250YWluKExpbmVCb3hDb250YWluTm9uZSk7CisgICAgICAgICAgICBz
dGF0ZS5tX3N0eWxlLT5zZXRMaW5lQm94Q29udGFpbihMaW5lQm94Q29udGFpbk5vbmUpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM3NjEsMjEgKzM3NjIsMjEgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBDU1NMaW5lQm94Q29udGFp
blZhbHVlKiBsaW5lQm94Q29udGFpblZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTTGluZUJveENvbnRh
aW5WYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TGluZUJveENvbnRhaW4obGlu
ZUJveENvbnRhaW5WYWx1ZS0+dmFsdWUoKSk7CisgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldExp
bmVCb3hDb250YWluKGxpbmVCb3hDb250YWluVmFsdWUtPnZhbHVlKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgLy8gQ1NTIEZvbnRzIE1vZHVsZSBMZXZlbCAzCiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEZvbnRGZWF0dXJlU2V0dGluZ3M6IHsKICAgICAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFs
KSB7Ci0gICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24obV9zdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCkubWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygpKTsKKyAgICAgICAgICAgIHNldEZvbnRE
ZXNjcmlwdGlvbihzdGF0ZS5tX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKS5tYWtlTm9ybWFsRmVh
dHVyZVNldHRpbmdzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAg
ICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2Ny
aXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0
ZS5tX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0
ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwogICAgICAgICBSZWZQdHI8Rm9u
dEZlYXR1cmVTZXR0aW5ncz4gc2V0dGluZ3MgPSBGb250RmVhdHVyZVNldHRpbmdzOjpjcmVhdGUo
KTsKICAgICAgICAgaW50IGxlbiA9IGxpc3QtPmxlbmd0aCgpOwpAQCAtMzc5NSwyMyArMzc5Niwy
MyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGaWx0ZXI6IHsKICAg
ICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoZmlsdGVyLCBGaWx0ZXIpOwogICAgICAg
ICBGaWx0ZXJPcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgICAgIGlmIChjcmVhdGVGaWx0ZXJP
cGVyYXRpb25zKHZhbHVlLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIG9wZXJhdGlvbnMp
KQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0RmlsdGVyKG9wZXJhdGlvbnMpOworICAgICAgICBp
ZiAoY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyh2YWx1ZSwgc3RhdGUubV9zdHlsZS5nZXQoKSwgc3Rh
dGUubV9yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKSkKKyAgICAgICAgICAgIHN0YXRlLm1f
c3R5bGUtPnNldEZpbHRlcihvcGVyYXRpb25zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNl
bmRpZgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkQ29sdW1uczogewogICAgICAgICBW
ZWN0b3I8R3JpZFRyYWNrU2l6ZT4gdHJhY2tTaXplczsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlk
VHJhY2tMaXN0KHZhbHVlLCB0cmFja1NpemVzLCB0aGlzKSkKKyAgICAgICAgaWYgKCFjcmVhdGVH
cmlkVHJhY2tMaXN0KHZhbHVlLCB0cmFja1NpemVzLCBzdGF0ZSkpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIG1fc3R5bGUtPnNldEdyaWRDb2x1bW5zKHRyYWNrU2l6ZXMpOworICAgICAg
ICBzdGF0ZS5tX3N0eWxlLT5zZXRHcmlkQ29sdW1ucyh0cmFja1NpemVzKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZFJvd3M6IHsKICAgICAg
ICAgVmVjdG9yPEdyaWRUcmFja1NpemU+IHRyYWNrU2l6ZXM7Ci0gICAgICAgIGlmICghY3JlYXRl
R3JpZFRyYWNrTGlzdCh2YWx1ZSwgdHJhY2tTaXplcywgdGhpcykpCisgICAgICAgIGlmICghY3Jl
YXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwgdHJhY2tTaXplcywgc3RhdGUpKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRHcmlkUm93cyh0cmFja1NpemVzKTsKKyAgICAg
ICAgc3RhdGUubV9zdHlsZS0+c2V0R3JpZFJvd3ModHJhY2tTaXplcyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTM4MTksMTQgKzM4MjAsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
R3JpZFBvc2l0aW9uIGNvbHVtbjsKICAgICAgICAgaWYgKCFjcmVhdGVHcmlkUG9zaXRpb24odmFs
dWUsIGNvbHVtbikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5bGUtPnNldEdy
aWRJdGVtQ29sdW1uKGNvbHVtbik7CisgICAgICAgIHN0YXRlLm1fc3R5bGUtPnNldEdyaWRJdGVt
Q29sdW1uKGNvbHVtbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEdyaWRSb3c6IHsKICAgICAgICAgR3JpZFBvc2l0aW9uIHJvdzsKICAgICAgICAg
aWYgKCFjcmVhdGVHcmlkUG9zaXRpb24odmFsdWUsIHJvdykpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIG1fc3R5bGUtPnNldEdyaWRJdGVtUm93KHJvdyk7CisgICAgICAgIHN0YXRlLm1f
c3R5bGUtPnNldEdyaWRJdGVtUm93KHJvdyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ly8gVGhlc2UgcHJvcGVydGllcyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIFN0eWxlQnVpbGRlciBs
b29rdXAgdGFibGUuCkBAIC00MTQ4LDE0ICs0MTQ5LDE0IEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFn
ZT4gU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvCiB7CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVu
ZGluZ0ltYWdlKCk7CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQot
ICAgICAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7Cisg
ICAgICAgIG1fc3RhdGUubV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFs
dWUpOwogICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gU3R5bGVSZXNvbHZlcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqIHZhbHVlKQogewogICAgIGlm
ICh2YWx1ZS0+aXNQZW5kaW5nKCkpIHsKLSAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVz
LnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBtX3N0YXRlLm1fcGVuZGluZ0ltYWdlUHJv
cGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIFN0eWxlUGVuZGlu
Z0ltYWdlOjpjcmVhdGUodmFsdWUpOwogICAgIH0KICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJ
bWFnZTo6Y3JlYXRlKHZhbHVlKTsKQEAgLTQxNjYsNyArNDE2Nyw3IEBAIFBhc3NSZWZQdHI8U3R5
bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcGVyCiB7CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hl
ZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+
aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChw
cm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBtX3N0YXRlLm1fcGVuZGluZ0ltYWdlUHJvcGVydGll
cy5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQog
I2VuZGlmCkBAIC00MTc1LDE4ICs0MTc2LDIwIEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5
bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvCiB7
CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0lt
YWdlKGRvY3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2Uo
KSkKLSAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUp
OworICAgICAgICBtX3N0YXRlLm1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHks
IHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogCiB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKQogewotICAgIGlmIChtX3N0eWxlLT50ZXh0
U2l6ZUFkanVzdCgpKQorICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fc3RhdGUubV9zdHlsZS5n
ZXQoKTsKKworICAgIGlmIChzdHlsZS0+dGV4dFNpemVBZGp1c3QoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihtX3N0eWxlLT5mb250
RGVzY3JpcHRpb24oKSk7CisgICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihz
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCkpOwogICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRDb21w
dXRlZFNpemUobmV3Rm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSk7Ci0gICAgbV9zdHls
ZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CisgICAgc3R5bGUtPnNl
dEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwogfQogCiB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSkKQEAgLTQyNTEsMTUgKzQyNTQsMTUgQEAgdm9pZCBTdHlsZVJlc29sdmVy
Ojppbml0aWFsaXplRm9udFN0eWxlKFNldHRpbmdzKiBzZXR0aW5ncykKICAgICB9CiAgICAgZm9u
dERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFsdWVYeFNt
YWxsICsgMSk7CiAgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktl
eXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZhbHNlKSk7Ci0gICAgbV9zdHlsZS0+
c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0gICAgbV9s
aW5lSGVpZ2h0VmFsdWUgPSAwOworICAgIG1fc3RhdGUubV9zdHlsZS0+c2V0TGluZUhlaWdodChS
ZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgbV9zdGF0ZS5tX2xpbmVIZWln
aHRWYWx1ZSA9IDA7CiAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiB9
CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGZsb2F0IHNpemUpCiB7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNp
ZmllZFNpemUoc2l6ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRD
b21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBtX3N0eWxlLmdldCgpLCBm
b250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1bGVzKCkp
KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZy
b21TcGVjaWZpZWRTaXplKGRvY3VtZW50KCksIG1fc3RhdGUubV9zdHlsZS5nZXQoKSwgZm9udERl
c2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNpemUsIHVzZVNWR1pvb21SdWxlcygpKSk7CiB9
CiAKIGZsb2F0IFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXpl
KERvY3VtZW50KiBkb2N1bWVudCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBib29sIGlzQWJzb2x1dGVT
aXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBib29sIHVzZVNWR1pvb21SdWxlcykKQEAgLTQ0NjIs
MjAgKzQ0NjUsMjEgQEAgQ29sb3IgU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFs
dWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlLCBib29sIGZvclYKICAgICBpZiAodmFsdWUtPmlz
UkdCQ29sb3IoKSkKICAgICAgICAgcmV0dXJuIENvbG9yKHZhbHVlLT5nZXRSR0JBMzJWYWx1ZSgp
KTsKIAorICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgaW50IGlkZW50ID0g
dmFsdWUtPmdldElkZW50KCk7CiAgICAgc3dpdGNoIChpZGVudCkgewogICAgIGNhc2UgMDoKICAg
ICAgICAgcmV0dXJuIENvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFRleHQ6Ci0gICAg
ICAgIHJldHVybiBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnRleHRDb2xvcigpOworICAgICAgICBy
ZXR1cm4gc3RhdGUubV9lbGVtZW50LT5kb2N1bWVudCgpLT50ZXh0Q29sb3IoKTsKICAgICBjYXNl
IENTU1ZhbHVlV2Via2l0TGluazoKLSAgICAgICAgcmV0dXJuIChtX2VsZW1lbnQtPmlzTGluaygp
ICYmIGZvclZpc2l0ZWRMaW5rKSA/IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtD
b2xvcigpIDogbV9lbGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsKKyAgICAgICAgcmV0
dXJuIChzdGF0ZS5tX2VsZW1lbnQtPmlzTGluaygpICYmIGZvclZpc2l0ZWRMaW5rKSA/IHN0YXRl
Lm1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtDb2xvcigpIDogc3RhdGUubV9lbGVt
ZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0QWN0
aXZlbGluazoKLSAgICAgICAgcmV0dXJuIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+YWN0aXZlTGlu
a0NvbG9yKCk7CisgICAgICAgIHJldHVybiBzdGF0ZS5tX2VsZW1lbnQtPmRvY3VtZW50KCktPmFj
dGl2ZUxpbmtDb2xvcigpOwogICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvcjoK
ICAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpmb2N1c1JpbmdDb2xvcigpOwogICAgIGNhc2Ug
Q1NTVmFsdWVDdXJyZW50Y29sb3I6Ci0gICAgICAgIHJldHVybiBtX3N0eWxlLT5jb2xvcigpOwor
ICAgICAgICByZXR1cm4gc3RhdGUubV9zdHlsZS0+Y29sb3IoKTsKICAgICBkZWZhdWx0OgogICAg
ICAgICByZXR1cm4gY29sb3JGb3JDU1NWYWx1ZShpZGVudCk7CiAgICAgfQpAQCAtNDgwOSwxNyAr
NDgxMywxOCBAQCBzdGF0aWMgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGZpbHRlck9w
ZXJhdGlvbkZvclR5cGUoV2ViS2l0Q1NTRmlsdGVyVmFsdQogI2lmIEVOQUJMRShDU1NfRklMVEVS
UykgJiYgRU5BQkxFKFNWRykKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTVkdEb2N1
bWVudHMoKQogewotICAgIGlmICghbV9zdHlsZS0+aGFzRmlsdGVyKCkgfHwgbV9wZW5kaW5nU1ZH
RG9jdW1lbnRzLmlzRW1wdHkoKSkKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworICAgIGlm
ICghc3RhdGUubV9zdHlsZS0+aGFzRmlsdGVyKCkgfHwgc3RhdGUubV9wZW5kaW5nU1ZHRG9jdW1l
bnRzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRS
ZXNvdXJjZUxvYWRlcigpOwotICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBm
aWx0ZXJPcGVyYXRpb25zID0gbV9zdHlsZS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsK
KyAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBzdGF0ZS5t
X2VsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CisgICAgVmVjdG9y
PFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBzdGF0ZS5tX3N0
eWxlLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBmaWx0ZXJPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxG
aWx0ZXJPcGVyYXRpb24+IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlck9wZXJhdGlvbnMuYXQoaSk7
CiAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSA9PSBGaWx0
ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkgewogICAgICAgICAgICAgUmVmZXJlbmNlRmlsdGVyT3Bl
cmF0aW9uKiByZWZlcmVuY2VGaWx0ZXIgPSBzdGF0aWNfY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVy
YXRpb24qPihmaWx0ZXJPcGVyYXRpb24uZ2V0KCkpOwogCi0gICAgICAgICAgICBXZWJLaXRDU1NT
VkdEb2N1bWVudFZhbHVlKiB2YWx1ZSA9IG1fcGVuZGluZ1NWR0RvY3VtZW50cy5nZXQocmVmZXJl
bmNlRmlsdGVyKS5nZXQoKTsKKyAgICAgICAgICAgIFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWUq
IHZhbHVlID0gc3RhdGUubV9wZW5kaW5nU1ZHRG9jdW1lbnRzLmdldChyZWZlcmVuY2VGaWx0ZXIp
LmdldCgpOwogICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIENhY2hlZFNWR0RvY3VtZW50KiBjYWNoZWREb2N1bWVudCA9IHZhbHVl
LT5sb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKQEAgLTQ4MzAsNyArNDgzNSw3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTVkdEb2N1bWVudHMoKQogICAgICAgICAgICAgcmVm
ZXJlbmNlRmlsdGVyLT5zZXRDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShhZG9wdFB0cihuZXcg
Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UoY2FjaGVkRG9jdW1lbnQpKSk7CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgbV9wZW5kaW5nU1ZHRG9jdW1lbnRzLmNsZWFyKCk7CisgICAgc3RhdGUubV9w
ZW5kaW5nU1ZHRG9jdW1lbnRzLmNsZWFyKCk7CiB9CiAjZW5kaWYKIApAQCAtNDg0NiwxOCArNDg1
MSwxOCBAQCBTdHlsZVNoYWRlciogU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nU3R5bGVT
aGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NTU2hhZGVyVgogewogICAgIFN0eWxlU2hhZGVyKiBzaGFk
ZXIgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nU2hhZGVyKCk7CiAgICAgaWYgKHNoYWRlciAmJiBz
aGFkZXItPmlzUGVuZGluZ1NoYWRlcigpKQotICAgICAgICBtX2hhc1BlbmRpbmdTaGFkZXJzID0g
dHJ1ZTsKKyAgICAgICAgbV9zdGF0ZS5tX2hhc1BlbmRpbmdTaGFkZXJzID0gdHJ1ZTsKICAgICBy
ZXR1cm4gc2hhZGVyOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVy
cygpCiB7Ci0gICAgaWYgKCFtX3N0eWxlLT5oYXNGaWx0ZXIoKSB8fCAhbV9oYXNQZW5kaW5nU2hh
ZGVycykKKyAgICBpZiAoIW1fc3RhdGUubV9zdHlsZS0+aGFzRmlsdGVyKCkgfHwgIW1fc3RhdGUu
bV9oYXNQZW5kaW5nU2hhZGVycykKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5j
YWNoZWRSZXNvdXJjZUxvYWRlcigpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRS
ZXNvdXJjZUxvYWRlciA9IG1fc3RhdGUubV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNv
dXJjZUxvYWRlcigpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZp
bHRlck9wZXJhdGlvbnMgPSBtX3N0eWxlLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOwor
ICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJPcGVyYXRpb25zID0g
bV9zdGF0ZS5tX3N0eWxlLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlck9wZXJh
dGlvbnMuYXQoaSk7CiAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5
cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSkgewpAQCAtNDg3NCw3ICs0ODc5LDcgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMoKQogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQotICAgIG1faGFzUGVuZGluZ1NoYWRlcnMgPSBmYWxzZTsKKyAgICBt
X3N0YXRlLm1faGFzUGVuZGluZ1NoYWRlcnMgPSBmYWxzZTsKIH0KIAogc3RhdGljIGJvb2wgc29y
dFBhcmFtZXRlcnNCeU5hbWVDb21wYXJhdG9yKGNvbnN0IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJh
bWV0ZXI+JiBhLCBjb25zdCBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiYgYikKQEAgLTQ5
MTYsNyArNDkyMSw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJl
c29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtCiB7CiAgICAgUmVmUHRyPEN1
c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcj4gdHJhbnNmb3JtUGFyYW1ldGVyID0gQ3VzdG9t
RmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyOjpjcmVhdGUobmFtZSk7CiAgICAgVHJhbnNmb3JtT3Bl
cmF0aW9ucyBvcGVyYXRpb25zOwotICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWVz
LCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIG9wZXJhdGlvbnMpOworICAgIGNyZWF0ZVRy
YW5zZm9ybU9wZXJhdGlvbnModmFsdWVzLCBtX3N0YXRlLm1fc3R5bGUuZ2V0KCksIG1fc3RhdGUu
bV9yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKTsKICAgICB0cmFuc2Zvcm1QYXJhbWV0ZXIt
PnNldE9wZXJhdGlvbnMob3BlcmF0aW9ucyk7CiAgICAgcmV0dXJuIHRyYW5zZm9ybVBhcmFtZXRl
ci5yZWxlYXNlKCk7CiB9CkBAIC01MTUzLDEyICs1MTU4LDEyIEBAIGJvb2wgU3R5bGVSZXNvbHZl
cjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUq
IHN0eWxlCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIFdlYktpdENT
U1NWR0RvY3VtZW50VmFsdWUqIHN2Z0RvY3VtZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxXZWJLaXRD
U1NTVkdEb2N1bWVudFZhbHVlKj4oYXJndW1lbnQpOwotICAgICAgICAgICAgS1VSTCB1cmwgPSBt
X2VsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgp
KTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gbV9zdGF0ZS5tX2VsZW1lbnQtPmRvY3VtZW50KCkt
PmNvbXBsZXRlVVJMKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpKTsKIAogICAgICAgICAgICAgUmVm
UHRyPFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4gb3BlcmF0aW9uID0gUmVmZXJlbmNlRmlsdGVy
T3BlcmF0aW9uOjpjcmVhdGUoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIHVybC5mcmFnbWVudElk
ZW50aWZpZXIoKSwgb3BlcmF0aW9uVHlwZSk7Ci0gICAgICAgICAgICBpZiAoU1ZHVVJJUmVmZXJl
bmNlOjppc0V4dGVybmFsVVJJUmVmZXJlbmNlKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpLCBtX2Vs
ZW1lbnQtPmRvY3VtZW50KCkpKSB7CisgICAgICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpp
c0V4dGVybmFsVVJJUmVmZXJlbmNlKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpLCBtX3N0YXRlLm1f
ZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXN2Z0RvY3VtZW50
VmFsdWUtPmxvYWRSZXF1ZXN0ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9wZW5kaW5nU1ZH
RG9jdW1lbnRzLnNldChvcGVyYXRpb24uZ2V0KCksIHN2Z0RvY3VtZW50VmFsdWUpOworICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlLm1fcGVuZGluZ1NWR0RvY3VtZW50cy5zZXQob3BlcmF0aW9u
LmdldCgpLCBzdmdEb2N1bWVudFZhbHVlKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdmdE
b2N1bWVudFZhbHVlLT5jYWNoZWRTVkdEb2N1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICBv
cGVyYXRpb24tPnNldENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGFkb3B0UHRyKG5ldyBDYWNo
ZWRTVkdEb2N1bWVudFJlZmVyZW5jZShzdmdEb2N1bWVudFZhbHVlLT5jYWNoZWRTVkdEb2N1bWVu
dCgpKSkpOwogICAgICAgICAgICAgfQpAQCAtNTI2Miw3ICs1MjY3LDcgQEAgYm9vbCBTdHlsZVJl
c29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJT
dHlsZSogc3R5bGUKIAogUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpsb2Fk
UGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW5nSW1hZ2UpCiB7Ci0gICAgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9lbGVtZW50LT5kb2N1
bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVy
KiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fc3RhdGUubV9lbGVtZW50LT5kb2N1bWVudCgpLT5j
YWNoZWRSZXNvdXJjZUxvYWRlcigpOwogCiAgICAgaWYgKHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VW
YWx1ZSgpKSB7CiAgICAgICAgIENTU0ltYWdlVmFsdWUqIGltYWdlVmFsdWUgPSBwZW5kaW5nSW1h
Z2UtPmNzc0ltYWdlVmFsdWUoKTsKQEAgLTUyOTIsMjMgKzUyOTcsMjMgQEAgUGFzc1JlZlB0cjxT
dHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0lt
YWdlKiBwZW5kaW4KIAogdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiB7
Ci0gICAgaWYgKG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5pc0VtcHR5KCkpCisgICAgaWYgKG1f
c3RhdGUubV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGVu
ZCA9IG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5lbmQoKS5rZXlzKCk7Ci0gICAgZm9yIChQZW5k
aW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQgPSBtX3BlbmRpbmdJ
bWFnZVByb3BlcnRpZXMuYmVnaW4oKS5rZXlzKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIFBl
bmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBtX3N0YXRl
Lm1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5lbmQoKS5rZXlzKCk7CisgICAgZm9yIChQZW5kaW5n
SW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQgPSBtX3N0YXRlLm1fcGVu
ZGluZ0ltYWdlUHJvcGVydGllcy5iZWdpbigpLmtleXMoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgIENTU1Byb3BlcnR5SUQgY3VycmVudFByb3BlcnR5ID0gKml0OwogCiAgICAgICAgIHN3
aXRjaCAoY3VycmVudFByb3BlcnR5KSB7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kSW1hZ2U6IHsKLSAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBiYWNrZ3JvdW5kTGF5ZXIg
PSBtX3N0eWxlLT5hY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzKCk7IGJhY2tncm91bmRMYXllcjsgYmFj
a2dyb3VuZExheWVyID0gYmFja2dyb3VuZExheWVyLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZv
ciAoRmlsbExheWVyKiBiYWNrZ3JvdW5kTGF5ZXIgPSBtX3N0YXRlLm1fc3R5bGUtPmFjY2Vzc0Jh
Y2tncm91bmRMYXllcnMoKTsgYmFja2dyb3VuZExheWVyOyBiYWNrZ3JvdW5kTGF5ZXIgPSBiYWNr
Z3JvdW5kTGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kTGF5
ZXItPmltYWdlKCkgJiYgYmFja2dyb3VuZExheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgp
KQogICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kTGF5ZXItPnNldEltYWdlKGxvYWRQZW5k
aW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihiYWNrZ3JvdW5kTGF5ZXIt
PmltYWdlKCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q29udGVudDogewotICAgICAgICAgICAgZm9yIChD
b250ZW50RGF0YSogY29udGVudERhdGEgPSBjb25zdF9jYXN0PENvbnRlbnREYXRhKj4obV9zdHls
ZS0+Y29udGVudERhdGEoKSk7IGNvbnRlbnREYXRhOyBjb250ZW50RGF0YSA9IGNvbnRlbnREYXRh
LT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoQ29udGVudERhdGEqIGNvbnRlbnREYXRhID0g
Y29uc3RfY2FzdDxDb250ZW50RGF0YSo+KG1fc3RhdGUubV9zdHlsZS0+Y29udGVudERhdGEoKSk7
IGNvbnRlbnREYXRhOyBjb250ZW50RGF0YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoY29udGVudERhdGEtPmlzSW1hZ2UoKSkgewogICAgICAgICAgICAgICAg
ICAgICBTdHlsZUltYWdlKiBpbWFnZSA9IHN0YXRpY19jYXN0PEltYWdlQ29udGVudERhdGEqPihj
b250ZW50RGF0YSktPmltYWdlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+aXNQ
ZW5kaW5nSW1hZ2UoKSkgewpAQCAtNTMyMSw3ICs1MzI2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
Ojpsb2FkUGVuZGluZ0ltYWdlcygpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5Q3Vyc29yOiB7Ci0gICAgICAgICAgICBpZiAoQ3Vyc29yTGlz
dCogY3Vyc29yTGlzdCA9IG1fc3R5bGUtPmN1cnNvcnMoKSkgeworICAgICAgICAgICAgaWYgKEN1
cnNvckxpc3QqIGN1cnNvckxpc3QgPSBtX3N0YXRlLm1fc3R5bGUtPmN1cnNvcnMoKSkgewogICAg
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3Vyc29yTGlzdC0+c2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgICAgICAgICAgQ3Vyc29yRGF0YSYgY3VycmVudEN1cnNvciA9IGN1
cnNvckxpc3QtPmF0KGkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoU3R5bGVJbWFnZSogaW1h
Z2UgPSBjdXJyZW50Q3Vyc29yLmltYWdlKCkpIHsKQEAgLTUzMzMsMTcgKzUzMzgsMTcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2U6IHsKLSAg
ICAgICAgICAgIGlmIChtX3N0eWxlLT5saXN0U3R5bGVJbWFnZSgpICYmIG1fc3R5bGUtPmxpc3RT
dHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0TGlzdFN0eWxlSW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRp
bmdJbWFnZSo+KG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkpKSk7CisgICAgICAgICAgICBpZiAo
bV9zdGF0ZS5tX3N0eWxlLT5saXN0U3R5bGVJbWFnZSgpICYmIG1fc3RhdGUubV9zdHlsZS0+bGlz
dFN0eWxlSW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBtX3N0YXRl
Lm1fc3R5bGUtPnNldExpc3RTdHlsZUltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8
U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRlLm1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVySW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAgIGlmIChtX3N0eWxlLT5ib3JkZXJJbWFn
ZVNvdXJjZSgpICYmIG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdl
KCkpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVySW1hZ2VTb3VyY2UobG9hZFBl
bmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPmJvcmRl
ckltYWdlU291cmNlKCkpKSk7CisgICAgICAgICAgICBpZiAobV9zdGF0ZS5tX3N0eWxlLT5ib3Jk
ZXJJbWFnZVNvdXJjZSgpICYmIG1fc3RhdGUubV9zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKS0+
aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBtX3N0YXRlLm1fc3R5bGUtPnNldEJv
cmRlckltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5n
SW1hZ2UqPihtX3N0YXRlLm1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCkpKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94
UmVmbGVjdDogewotICAgICAgICAgICAgaWYgKFN0eWxlUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9
IG1fc3R5bGUtPmJveFJlZmxlY3QoKSkgeworICAgICAgICAgICAgaWYgKFN0eWxlUmVmbGVjdGlv
biogcmVmbGVjdGlvbiA9IG1fc3RhdGUubV9zdHlsZS0+Ym94UmVmbGVjdCgpKSB7CiAgICAgICAg
ICAgICAgICAgY29uc3QgTmluZVBpZWNlSW1hZ2UmIG1hc2tJbWFnZSA9IHJlZmxlY3Rpb24tPm1h
c2soKTsKICAgICAgICAgICAgICAgICBpZiAobWFza0ltYWdlLmltYWdlKCkgJiYgbWFza0ltYWdl
LmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgUmVmUHRy
PFN0eWxlSW1hZ2U+IGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxT
dHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tJbWFnZS5pbWFnZSgpKSk7CkBAIC01MzUzLDEyICs1MzU4
LDEyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tC
b3hJbWFnZVNvdXJjZTogewotICAgICAgICAgICAgaWYgKG1fc3R5bGUtPm1hc2tCb3hJbWFnZVNv
dXJjZSgpICYmIG1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgp
KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hc2tCb3hJbWFnZVNvdXJjZShsb2FkUGVu
ZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+bWFza0Jv
eEltYWdlU291cmNlKCkpKSk7CisgICAgICAgICAgICBpZiAobV9zdGF0ZS5tX3N0eWxlLT5tYXNr
Qm94SW1hZ2VTb3VyY2UoKSAmJiBtX3N0YXRlLm1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgp
LT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgIG1fc3RhdGUubV9zdHlsZS0+c2V0
TWFza0JveEltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5k
aW5nSW1hZ2UqPihtX3N0YXRlLm1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpKSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1hc2tJbWFnZTogewotICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IG1f
c3R5bGUtPmFjY2Vzc01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5
ZXItPm5leHQoKSkgeworICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IG1f
c3RhdGUubV9zdHlsZS0+YWNjZXNzTWFza0xheWVycygpOyBtYXNrTGF5ZXI7IG1hc2tMYXllciA9
IG1hc2tMYXllci0+bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1hc2tMYXllci0+aW1h
Z2UoKSAmJiBtYXNrTGF5ZXItPmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCiAgICAgICAgICAg
ICAgICAgICAgIG1hc2tMYXllci0+c2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2Fz
dDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tMYXllci0+aW1hZ2UoKSkpKTsKICAgICAgICAgICAg
IH0KQEAgLTUzNjksNyArNTM3NCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJ
bWFnZXMoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVz
LmNsZWFyKCk7CisgICAgbV9zdGF0ZS5tX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuY2xlYXIoKTsK
IH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1Jlc291cmNlcygpCkBAIC01NDMy
LDcgKzU0MzcsNiBAQCB2b2lkIE1lZGlhUXVlcnlSZXN1bHQ6OnJlcG9ydE1lbW9yeVVzYWdlKE1l
bW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbgogdm9pZCBTdHlsZVJlc29sdmVy
OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBj
b25zdAogewogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMs
IFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3N0eWxlKTsK
ICAgICBpbmZvLmFkZE1lbWJlcihtX2F1dGhvclN0eWxlKTsKICAgICBpbmZvLmFkZE1lbWJlciht
X3VzZXJTdHlsZSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9mZWF0dXJlcyk7CkBAIC01NDQxLDMz
ICs1NDQ1LDIwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5
T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKICAgICBpbmZvLmFkZE1lbWJlciht
X2tleWZyYW1lc1J1bGVNYXApOwogICAgIGluZm8uYWRkTWVtYmVyKG1fbWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9tYXRjaGVkUHJvcGVydGllc0NhY2hlU3dl
ZXBUaW1lcik7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9tYXRjaGVkUnVsZXMpOwogCi0gICAgaW5m
by5hZGRNZW1iZXIobV9ydWxlTGlzdCk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9wZW5kaW5nSW1h
Z2VQcm9wZXJ0aWVzKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX21lZGl1bSk7CiAgICAgaW5mby5h
ZGRNZW1iZXIobV9yb290RGVmYXVsdFN0eWxlKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2RvY3Vt
ZW50KTsKIAotICAgIC8vIEZJWE1FOiBwb2ludGVyIHRvIFJlbmRlclN0eWxlIGNvdWxkIHBvaW50
IHRvIGFuIGFscmVhZHkgZGVsZXRlZCBvYmplY3QuCi0gICAgaW5mby5pZ25vcmVNZW1iZXIobV9w
YXJlbnRTdHlsZSk7Ci0gICAgaW5mby5pZ25vcmVNZW1iZXIobV9yb290RWxlbWVudFN0eWxlKTsK
LQotICAgIGluZm8uYWRkTWVtYmVyKG1fZWxlbWVudCk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9z
dHlsZWRFbGVtZW50KTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3JlZ2lvbkZvclN0eWxpbmcpOwot
ICAgIGluZm8uYWRkTWVtYmVyKG1fcGFyZW50Tm9kZSk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9s
aW5lSGVpZ2h0VmFsdWUpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fZm9udFNlbGVjdG9yKTsKICAg
ICBpbmZvLmFkZE1lbWJlcihtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMpOwog
ICAgIGluZm8uaWdub3JlTWVtYmVyKG1fc3R5bGVCdWlsZGVyKTsKICAgICBpbmZvLmFkZE1lbWJl
cihtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3N0
eWxlU2hlZXRDU1NPTVdyYXBwZXJTZXQpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5B
QkxFKFNWRykKLSAgICBpbmZvLmFkZE1lbWJlcihtX3BlbmRpbmdTVkdEb2N1bWVudHMpOwotI2Vu
ZGlmCiAgICAgaW5mby5hZGRNZW1iZXIobV9zY29wZVJlc29sdmVyKTsKIAorICAgIGluZm8uYWRk
TWVtYmVyKG1fc3RhdGUpOworCiAgICAgLy8gRklYTUU6IG1vdmUgdGhpcyB0byBhIHBsYWNlIHdo
ZXJlIGl0IHdvdWxkIGJlIGNhbGxlZCBvbmx5IG9uY2U/CiAgICAgaW5mby5hZGRNZW1iZXIoZGVm
YXVsdFN0eWxlKTsKICAgICBpbmZvLmFkZE1lbWJlcihkZWZhdWx0UXVpcmtzU3R5bGUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggMzMzNjZjNzY3OTExZTczMDE5Zjk0OTRiY2Vi
NGRjOGIwYzg3NDc1OC4uNzc2YmRkM2FlNzhhNDFiZTliYTQ0YzRmNjQ4Njc2OTRkYmFkZjgwZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0yMyw2ICsyMyw3IEBACiAjZGVmaW5l
IFN0eWxlUmVzb2x2ZXJfaAogCiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgIkNTU1J1
bGVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVl
TGlzdC5oIgogI2luY2x1ZGUgIkxpbmtIYXNoLmgiCkBAIC0zNiw2ICszNyw5IEBACiAjaW5jbHVk
ZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVTY29wZVJlc29sdmVyLmgi
CiAjaW5jbHVkZSAiVmlld3BvcnRTdHlsZVJlc29sdmVyLmgiCisjaWYgRU5BQkxFKENTU19GSUxU
RVJTKSAmJiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIldlYktpdENTU1NWR0RvY3VtZW50VmFsdWUu
aCIKKyNlbmRpZgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC0xNjEsMjAgKzE2NSwyMCBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JEb2N1bWVu
dChEb2N1bWVudCosIENTU0ZvbnRTZWxlY3RvciogPSAwKTsKIAotICAgIFJlbmRlclN0eWxlKiBz
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KLSAgICBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9Ci0gICAgUmVuZGVy
U3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50U3R5
bGU7IH0KLSAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9
CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5tX3N0eWxl
LmdldCgpOyB9CisgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5tX3BhcmVudFN0eWxlOyB9CisgICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLm1fcm9vdEVsZW1lbnRTdHlsZTsgfQorICAgIEVs
ZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLm1fZWxlbWVudDsgfQogICAg
IERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHN0eWxlKCkt
PmZvbnREZXNjcmlwdGlvbigpOyB9CiAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRG
b250RGVzY3JpcHRpb24oKSB7IHJldHVybiBwYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24o
KTsgfQotICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldEZvbnREZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pOyB9Ci0gICAgdm9pZCBzZXRab29tKGZsb2F0IGYpIHsgbV9m
b250RGlydHkgfD0gc3R5bGUoKS0+c2V0Wm9vbShmKTsgfQotICAgIHZvaWQgc2V0RWZmZWN0aXZl
Wm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldEVmZmVjdGl2ZVpvb20o
Zik7IH0KLSAgICB2b2lkIHNldFRleHRTaXplQWRqdXN0KGJvb2wgYikgeyBtX2ZvbnREaXJ0eSB8
PSBzdHlsZSgpLT5zZXRUZXh0U2l6ZUFkanVzdChiKTsgfQotICAgIHZvaWQgc2V0V3JpdGluZ01v
ZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0
V3JpdGluZ01vZGUod3JpdGluZ01vZGUpOyB9Ci0gICAgdm9pZCBzZXRUZXh0T3JpZW50YXRpb24o
VGV4dE9yaWVudGF0aW9uIHRleHRPcmllbnRhdGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgp
LT5zZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQotICAgIGJvb2wgaGFzUGFy
ZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50Tm9kZTsgfQorICAgIHZvaWQgc2V0Rm9u
dERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1f
c3RhdGUubV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7IH0KKyAgICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX3N0YXRlLm1fZm9udERp
cnR5IHw9IHN0eWxlKCktPnNldFpvb20oZik7IH0KKyAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20o
ZmxvYXQgZikgeyBtX3N0YXRlLm1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldEVmZmVjdGl2ZVpv
b20oZik7IH0KKyAgICB2b2lkIHNldFRleHRTaXplQWRqdXN0KGJvb2wgYikgeyBtX3N0YXRlLm1f
Zm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRTaXplQWRqdXN0KGIpOyB9CisgICAgdm9pZCBz
ZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBtX3N0YXRlLm1fZm9udERp
cnR5IHw9IHN0eWxlKCktPnNldFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsgfQorICAgIHZvaWQg
c2V0VGV4dE9yaWVudGF0aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24pIHsgbV9z
dGF0ZS5tX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVu
dGF0aW9uKTsgfQorICAgIGJvb2wgaGFzUGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUubV9wYXJlbnROb2RlOyB9CiAKICAgICB2b2lkIHJlc2V0QXV0aG9yU3R5bGUoKTsKICAgICB2
b2lkIGFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0
b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mKTsKQEAgLTMwOCw3ICszMTIsNyBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBhZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGVUb0FkanVz
dCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBFbGVtZW50Kik7CiAKLSAgICB2b2lkIGFkZE1h
dGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKiBydWxlKSB7IG1fbWF0Y2hlZFJ1bGVzLmFwcGVuZChy
dWxlKTsgfQorICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29uc3QgUnVsZURhdGEqIHJ1bGUpIHsg
bV9zdGF0ZS5tX21hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7IH0KIAogICAgIHN0cnVjdCBSdWxl
UmFuZ2UgewogICAgICAgICBSdWxlUmFuZ2UoaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0
UnVsZUluZGV4KTogZmlyc3RSdWxlSW5kZXgoZmlyc3RSdWxlSW5kZXgpLCBsYXN0UnVsZUluZGV4
KGxhc3RSdWxlSW5kZXgpIHsgfQpAQCAtNDE4LDE1ICs0MjIsODYgQEAgcHJpdmF0ZToKICAgICBP
d25QdHI8UnVsZVNldD4gbV9zaWJsaW5nUnVsZVNldDsKICAgICBPd25QdHI8UnVsZVNldD4gbV91
bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQ7CiAKLSAgICBib29sIG1faGFzVUFBcHBlYXJhbmNlOwot
ICAgIEJvcmRlckRhdGEgbV9ib3JkZXJEYXRhOwotICAgIEZpbGxMYXllciBtX2JhY2tncm91bmRE
YXRhOwotICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOwotCiAgICAgdHlwZWRlZiBIYXNoTWFw
PEF0b21pY1N0cmluZ0ltcGwqLCBSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPiA+IEtleWZyYW1l
c1J1bGVNYXA7CiAgICAgS2V5ZnJhbWVzUnVsZU1hcCBtX2tleWZyYW1lc1J1bGVNYXA7CiAKIHB1
YmxpYzoKKyAgICB0eXBlZGVmIEhhc2hNYXA8Q1NTUHJvcGVydHlJRCwgUmVmUHRyPENTU1ZhbHVl
PiA+IFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYg
RU5BQkxFKFNWRykKKyAgICB0eXBlZGVmIEhhc2hNYXA8RmlsdGVyT3BlcmF0aW9uKiwgUmVmUHRy
PFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWU+ID4gUGVuZGluZ1NWR0RvY3VtZW50TWFwOworI2Vu
ZGlmCisKKyAgICBjbGFzcyBTdGF0ZSB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0
YXRlKTsKKyAgICBwdWJsaWM6CisgICAgICAgIFN0YXRlKCkKKyAgICAgICAgOiBtX2VsZW1lbnQo
MCkKKyAgICAgICAgLCBtX3N0eWxlZEVsZW1lbnQoMCkKKyAgICAgICAgLCBtX3BhcmVudE5vZGUo
MCkKKyAgICAgICAgLCBtX3BhcmVudFN0eWxlKDApCisgICAgICAgICwgbV9yb290RWxlbWVudFN0
eWxlKDApCisgICAgICAgICwgbV9yZWdpb25Gb3JTdHlsaW5nKDApCisgICAgICAgICwgbV9zYW1l
T3JpZ2luT25seShmYWxzZSkKKyAgICAgICAgLCBtX3BzZXVkb1N0eWxlKE5PUFNFVURPKQorICAg
ICAgICAsIG1fZWxlbWVudExpbmtTdGF0ZShOb3RJbnNpZGVMaW5rKQorICAgICAgICAsIG1fZGlz
dHJpYnV0ZWRUb0luc2VydGlvblBvaW50KGZhbHNlKQorICAgICAgICAsIG1fZWxlbWVudEFmZmVj
dGVkQnlDbGFzc1J1bGVzKGZhbHNlKQorICAgICAgICAsIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxh
clN0eWxlKHRydWUpCisgICAgICAgICwgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KGZhbHNlKQorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICAgICAgLCBtX2hhc1BlbmRpbmdT
aGFkZXJzKGZhbHNlKQorI2VuZGlmCisgICAgICAgICwgbV9saW5lSGVpZ2h0VmFsdWUoMCkKKyAg
ICAgICAgLCBtX2ZvbnREaXJ0eShmYWxzZSkKKyAgICAgICAgLCBtX2hhc1VBQXBwZWFyYW5jZShm
YWxzZSkKKyAgICAgICAgLCBtX2JhY2tncm91bmREYXRhKEJhY2tncm91bmRGaWxsTGF5ZXIpIHsg
fQorICAgICAgICAKK3B1YmxpYzoKKyAgICAgICAgLy8gRklYTUU6IHRvIG1ha2UgaXQgZWFzaWVy
IHRvIHJldmlldywgdGhlc2UgbWVtYmVyIHZhcmlhYmxlcyBhcmUKKyAgICAgICAgLy8gcHVibGlj
LiBIb3dldmVyIHdlIHNob3VsZCBhZGQgbWV0aG9kcyB0byBhY2Nlc3MgdGhlc2UgdmFyaWFibGVz
LgorICAgICAgICBFbGVtZW50KiBtX2VsZW1lbnQ7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHls
ZT4gbV9zdHlsZTsKKyAgICAgICAgU3R5bGVkRWxlbWVudCogbV9zdHlsZWRFbGVtZW50OworICAg
ICAgICBDb250YWluZXJOb2RlKiBtX3BhcmVudE5vZGU7CisgICAgICAgIFJlbmRlclN0eWxlKiBt
X3BhcmVudFN0eWxlOworICAgICAgICBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlOwor
ICAgICAgICAKKyAgICAgICAgUmVuZGVyUmVnaW9uKiBtX3JlZ2lvbkZvclN0eWxpbmc7CisgICAg
ICAgIGJvb2wgbV9zYW1lT3JpZ2luT25seTsKKyAgICAgICAgUHNldWRvSWQgbV9wc2V1ZG9TdHls
ZTsKKworICAgICAgICBFSW5zaWRlTGluayBtX2VsZW1lbnRMaW5rU3RhdGU7CisKKyAgICAgICAg
Ym9vbCBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludDsKKworICAgICAgICBib29sIG1fZWxl
bWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzOworCisgICAgICAgIFBzZXVkb0lkIG1fZHluYW1pY1Bz
ZXVkbzsKKworICAgICAgICAvLyBBIGJ1ZmZlciB1c2VkIHRvIGhvbGQgdGhlIHNldCBvZiBtYXRj
aGVkIHJ1bGVzIGZvciBhbiBlbGVtZW50LAorICAgICAgICAvLyBhbmQgYSB0ZW1wb3JhcnkgYnVm
ZmVyIHVzZWQgZm9yIG1lcmdlIHNvcnRpbmcuCisgICAgICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0
YSosIDMyPiBtX21hdGNoZWRSdWxlczsKKyAgICAgICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0
PiBtX3J1bGVMaXN0OworCisgICAgICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGU7CisgICAgICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOworCisg
ICAgICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllczsK
KyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgICAgIGJvb2wgbV9oYXNQZW5kaW5nU2hhZGVy
czsKKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKKyAgICAg
ICAgUGVuZGluZ1NWR0RvY3VtZW50TWFwIG1fcGVuZGluZ1NWR0RvY3VtZW50czsKKyNlbmRpZgor
ICAgICAgICBDU1NWYWx1ZSogbV9saW5lSGVpZ2h0VmFsdWU7CisgICAgICAgIGJvb2wgbV9mb250
RGlydHk7CisKKyAgICAgICAgYm9vbCBtX2hhc1VBQXBwZWFyYW5jZTsKKyAgICAgICAgQm9yZGVy
RGF0YSBtX2JvcmRlckRhdGE7CisgICAgICAgIEZpbGxMYXllciBtX2JhY2tncm91bmREYXRhOwor
ICAgICAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKKyAgICB9OworCiAgICAgc3RhdGljIFJl
bmRlclN0eWxlKiBzdHlsZU5vdFlldEF2YWlsYWJsZSgpIHsgcmV0dXJuIHNfc3R5bGVOb3RZZXRB
dmFpbGFibGU7IH0KIAogICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJbWFnZShDU1NQ
cm9wZXJ0eUlELCBDU1NWYWx1ZSopOwpAQCAtNDM3LDggKzUxMiw4IEBAIHB1YmxpYzoKICNlbmRp
ZgogICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKENT
U1Byb3BlcnR5SUQsIENTU0N1cnNvckltYWdlVmFsdWUqKTsKIAotICAgIGJvb2wgYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGU7IH0KLSAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7IH0KKyAgICBi
b29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
bV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7IH0KKyAgICBib29sIGFwcGx5UHJvcGVydHlU
b1Zpc2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLm1fYXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZTsgfQogCiAgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9JbnRM
ZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiByb290
U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyID0gMSk7CiAgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0
VG9GbG9hdExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5
bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIgPSAxKTsKQEAgLTQ5MSwzOSArNTY2LDE4
IEBAIHByaXZhdGU6CiAKICAgICBUaW1lcjxTdHlsZVJlc29sdmVyPiBtX21hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGVTd2VlcFRpbWVyOwogCi0gICAgLy8gQSBidWZmZXIgdXNlZCB0byBob2xkIHRoZSBz
ZXQgb2YgbWF0Y2hlZCBydWxlcyBmb3IgYW4gZWxlbWVudCwgYW5kIGEgdGVtcG9yYXJ5IGJ1ZmZl
ciB1c2VkIGZvcgotICAgIC8vIG1lcmdlIHNvcnRpbmcuCi0gICAgVmVjdG9yPGNvbnN0IFJ1bGVE
YXRhKiwgMzI+IG1fbWF0Y2hlZFJ1bGVzOwotCi0gICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0
PiBtX3J1bGVMaXN0OwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPENTU1Byb3BlcnR5SUQsIFJlZlB0
cjxDU1NWYWx1ZT4gPiBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDsKLSAgICBQZW5kaW5nSW1hZ2VQ
cm9wZXJ0eU1hcCBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXM7Ci0KICAgICBPd25QdHI8TWVkaWFR
dWVyeUV2YWx1YXRvcj4gbV9tZWRpdW07CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3Jvb3RE
ZWZhdWx0U3R5bGU7CiAKLSAgICBQc2V1ZG9JZCBtX2R5bmFtaWNQc2V1ZG87Ci0gICAgUHNldWRv
SWQgbV9wc2V1ZG9TdHlsZTsKLQogICAgIERvY3VtZW50KiBtX2RvY3VtZW50OworICAgIC8vIEZJ
WE1FOiBNYWtlIFNlbGVjdG9yQ2hlY2tlciBhbiBvbi1zdGFjayBvYmplY3QgYW5kCisgICAgLy8g
bW92ZSBzZWxlY3RvckNoZWNrZXIubW9kZSgpIHRvIFN0YXRlLgorICAgIC8vIHNlbGVjdG9yQ2hl
Y2tlci5zdHJpbmdQYXJzaW5nKCkgY2FuIGJlIHJlcGxhY2VkIHdpdGgKKyAgICAvLyAhZG9jdW1l
bnQuaW5RdWlya3NNb2RlKCkuCiAgICAgU2VsZWN0b3JDaGVja2VyIG1fc2VsZWN0b3JDaGVja2Vy
OwogICAgIFNlbGVjdG9yRmlsdGVyIG1fc2VsZWN0b3JGaWx0ZXI7CiAKLSAgICBSZWZQdHI8UmVu
ZGVyU3R5bGU+IG1fc3R5bGU7Ci0gICAgUmVuZGVyU3R5bGUqIG1fcGFyZW50U3R5bGU7Ci0gICAg
UmVuZGVyU3R5bGUqIG1fcm9vdEVsZW1lbnRTdHlsZTsKLSAgICBFbGVtZW50KiBtX2VsZW1lbnQ7
Ci0gICAgU3R5bGVkRWxlbWVudCogbV9zdHlsZWRFbGVtZW50OwotICAgIFJlbmRlclJlZ2lvbiog
bV9yZWdpb25Gb3JTdHlsaW5nOwotICAgIEVJbnNpZGVMaW5rIG1fZWxlbWVudExpbmtTdGF0ZTsK
LSAgICBib29sIG1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzOwotICAgIENvbnRhaW5lck5v
ZGUqIG1fcGFyZW50Tm9kZTsKLSAgICBDU1NWYWx1ZSogbV9saW5lSGVpZ2h0VmFsdWU7Ci0gICAg
Ym9vbCBtX2ZvbnREaXJ0eTsKICAgICBib29sIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzOwot
ICAgIGJvb2wgbV9zYW1lT3JpZ2luT25seTsKLSAgICBib29sIG1fZGlzdHJpYnV0ZWRUb0luc2Vy
dGlvblBvaW50OwogCiAgICAgUmVmUHRyPENTU0ZvbnRTZWxlY3Rvcj4gbV9mb250U2VsZWN0b3I7
CiAgICAgVmVjdG9yPE93blB0cjxNZWRpYVF1ZXJ5UmVzdWx0PiA+IG1fdmlld3BvcnREZXBlbmRl
bnRNZWRpYVF1ZXJ5UmVzdWx0czsKQEAgLTUzMiwyNCArNTg2LDE2IEBAIHByaXZhdGU6CiAgICAg
UmVmUHRyPFZpZXdwb3J0U3R5bGVSZXNvbHZlcj4gbV92aWV3cG9ydFN0eWxlUmVzb2x2ZXI7CiAj
ZW5kaWYKIAotICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7Ci0gICAgYm9v
bCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7CiAgICAgY29uc3QgU3R5bGVCdWls
ZGVyJiBtX3N0eWxlQnVpbGRlcjsKICAgICAKICAgICBIYXNoTWFwPFN0eWxlUnVsZSosIFJlZlB0
cjxDU1NTdHlsZVJ1bGU+ID4gbV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcDsKICAgICBIYXNo
U2V0PFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+IG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldDsK
IAotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBib29sIG1faGFzUGVuZGluZ1NoYWRlcnM7
Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKLSAgICBI
YXNoTWFwPEZpbHRlck9wZXJhdGlvbiosIFJlZlB0cjxXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVl
PiA+IG1fcGVuZGluZ1NWR0RvY3VtZW50czsKLSNlbmRpZgotCiAgICAgT3duUHRyPFN0eWxlU2Nv
cGVSZXNvbHZlcj4gbV9zY29wZVJlc29sdmVyOwogICAgIENTU1RvU3R5bGVNYXAgbV9zdHlsZU1h
cDsKIAorICAgIFN0YXRlIG1fc3RhdGU7CisKICAgICBmcmllbmQgY2xhc3MgU3R5bGVCdWlsZGVy
OwogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmLCBj
b25zdCBNYXRjaGVkUHJvcGVydGllcyYpOwogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29u
c3QgTWF0Y2hlZFByb3BlcnRpZXMmLCBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185696</attachid>
            <date>2013-01-31 00:06:09 -0800</date>
            <delta_ts>2013-01-31 21:05:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96421-20130131170253.patch</filename>
            <type>text/plain</type>
            <size>138743</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxMzYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTUyYzhkNTM4MmI2MjMy
NGFhMWQ4Mzg5MzcyNjkyNDEzNzlkNjFhMC4uYWE5MTU3OWYwNjYzNTBkZTExZTBjNjYwOGU0OGU1
YWFjNDQwODc5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDEzLTAxLTMwICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBTcGxpdCBwZXItcmVz
b2x2ZSBsb2dpYyBvdXQgZnJvbSBTdHlsZVJlc29sdmVyLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY0MjEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCBjbGFzcyBTdHlsZVJlc29sdmVy
OjpTdGF0ZSBhbmQgYWRkZWQgbV9zdGF0ZSB0bworICAgICAgICBTdHlsZVJlc29sdmVyLiBBbGwg
bWVtYmVyIHZhcmlhYmxlcyB1c2VkIGZvciBwZXItcmVzb2x2ZSBsb2dpYyBhcmUKKyAgICAgICAg
bW92ZWQgaW50byB0aGUgc3RhdGUgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNh
dXNlIGp1c3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBjc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5
KToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24p
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hl
ZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0
aG9yUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5n
Q2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpt
YXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNo
VXNlclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxl
c0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRS
dWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRGb3JTdHlsZVJlc29sdmUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVT
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhD
b250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRh
dGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjphZGp1c3RSZW5kZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojp1cGRhdGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlQm9y
ZGVyQW5kQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1
ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpydWxlTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1Jl
Z2lvblNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0JyZWFkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlR3JpZFRyYWNrTWluTWF4KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRU
cmFja0dyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0xpc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTVkdEb2N1bWVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFk
ZXJGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRp
bmdTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9t
RmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6bG9hZFBlbmRpbmdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojpsb2FkUGVuZGluZ0ltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpy
ZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnJvb3RFbGVtZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250RGVzY3Jp
cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Wm9vbSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRFZmZlY3RpdmVab29tKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpoYXNQYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmFkZE1hdGNoZWRSdWxlKToKKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAg
ICAoU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OlN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlKToKKyAgICAgICAgQWRkZWQgIm1fc3RhdGUuIiB0byBhY2Nlc3Mg
bWVtYmVyIHZhcmlhYmxlcyB1c2VkIGZvciBwZXItcmVzb2x2ZSBsb2dpYy4KKwogMjAxMy0wMS0z
MCAgTmlscyBCYXJ0aCAgPG5iYXJ0aEBnb29nbGUuY29tPgogCiAgICAgICAgIFtWOF0gQWRkIElE
TCAnZW51bScgc3VwcG9ydCB0byBDb2RlR2VuZXJhdG9yVjgucG0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCA2MTQ1YmIxZjE2MjViOGZlNGQxNjc2MDdi
YmJhOGJmZDlhMWIwMTE5Li5hYjU2ZjY2MTE3OTdmZDk0Nzc5NmY0OGYzMTM5ZTc4MTNhOTdlODNk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC00OSw3
ICs0OSw3IEBACiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlmIChpc0lu
aGVyaXQpIFwKIHsgXAotICAgIHN2Z3N0eWxlLT5zZXQjI1Byb3AobV9wYXJlbnRTdHlsZS0+c3Zn
U3R5bGUoKS0+cHJvcCgpKTsgXAorICAgIHN2Z3N0eWxlLT5zZXQjI1Byb3Aoc3RhdGUucGFyZW50
U3R5bGUtPnN2Z1N0eWxlKCktPnByb3AoKSk7IFwKICAgICByZXR1cm47IFwKIH0KIApAQCAtMTA5
LDEwICsxMDksMTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHZhbHVlKTsKIAotICAgIFNWR1JlbmRlclN0eWxlKiBzdmdzdHlsZSA9IG1fc3R5
bGUtPmFjY2Vzc1NWR1N0eWxlKCk7CisgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsK
KyAgICBTVkdSZW5kZXJTdHlsZSogc3Znc3R5bGUgPSBzdGF0ZS5zdHlsZS0+YWNjZXNzU1ZHU3R5
bGUoKTsKIAotICAgIGJvb2wgaXNJbmhlcml0ID0gbV9wYXJlbnROb2RlICYmIHZhbHVlLT5pc0lu
aGVyaXRlZFZhbHVlKCk7Ci0gICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFs
dWUoKSB8fCAoIW1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKKyAg
ICBib29sIGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVk
VmFsdWUoKTsKKyAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8
ICghc3RhdGUucGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKIAogICAg
IC8vIFdoYXQgZm9sbG93cyBpcyBhIGxpc3QgdGhhdCBtYXBzIHRoZSBDU1MgcHJvcGVydGllcyBp
bnRvIHRoZWlyCiAgICAgLy8gY29ycmVzcG9uZGluZyBmcm9udC1lbmQgUmVuZGVyU3R5bGUgdmFs
dWVzLiBTaG9ydGhhbmRzKGUuZy4gYm9yZGVyLApAQCAtMjI5LDcgKzIzMCw3IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGaWxsOgogICAgICAgICB7CiAgICAgICAg
ICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5
bGUqIHN2Z1BhcmVudFN0eWxlID0gbV9wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKTsKKyAgICAgICAg
ICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJl
bnRTdHlsZS0+c3ZnU3R5bGUoKTsKICAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBh
aW50KHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLT5maWxs
UGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50VXJpKCksIGFwcGx5UHJvcGVy
dHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTIzOSwxNCArMjQwLDE0
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodmFsdWUt
PmlzU1ZHUGFpbnQoKSkgewogICAgICAgICAgICAgICAgIFNWR1BhaW50KiBzdmdQYWludCA9IHN0
YXRpY19jYXN0PFNWR1BhaW50Kj4odmFsdWUpOwotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRGaWxsUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1Zh
bHVlKHN2Z1BhaW50LCBtX3N0eWxlLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgp
KTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KHN2Z1BhaW50LT5wYWlu
dFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUt
PmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgp
LCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9r
ZToKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAg
ICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQYXJlbnRTdHlsZSA9IG1fcGFyZW50U3R5bGUt
PnN2Z1N0eWxlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1Bh
cmVudFN0eWxlID0gc3RhdGUucGFyZW50U3R5bGUtPnN2Z1N0eWxlKCk7CiAgICAgICAgICAgICAg
ICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludFR5
cGUoKSwgc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50Q29sb3IoKSwgc3ZnUGFyZW50U3R5bGUt
PnN0cm9rZVBhaW50VXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVBy
b3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KQEAgLTI1Niw3ICsyNTcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR1BhaW50KCkpIHsKICAgICAgICAgICAg
ICAgICBTVkdQYWludCogc3ZnUGFpbnQgPSBzdGF0aWNfY2FzdDxTVkdQYWludCo+KHZhbHVlKTsK
LSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFpbnQtPnBhaW50
VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBtX3N0eWxlLT5jb2xv
cigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHls
ZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xv
ckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5zdHlsZS0+Y29sb3IoKSksIHN2Z1BhaW50LT51cmko
KSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQpAQCAtMzYzLDcgKzM2NCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAodHlw
ZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBzID0gcHJp
bWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRNYXJrZXJTdGFydFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVy
RnJvbUlSSVN0cmluZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2
Z3N0eWxlLT5zZXRNYXJrZXJTdGFydFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJ
ZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFy
a2VyTWlkOgpAQCAtMzc3LDcgKzM3OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBp
ZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBz
ID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0
eWxlLT5zZXRNYXJrZXJNaWRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRp
ZmllckZyb21JUklTdHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAgICAg
ICBzdmdzdHlsZS0+c2V0TWFya2VyTWlkUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVu
dElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlN
YXJrZXJFbmQ6CkBAIC0zOTEsNyArMzkyLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNW
R1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAg
IGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAg
IHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Zn
c3R5bGUtPnNldE1hcmtlckVuZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVu
dGlmaWVyRnJvbUlSSVN0cmluZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAg
ICAgIHN2Z3N0eWxlLT5zZXRNYXJrZXJFbmRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdt
ZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVN0cm9rZUxpbmVjYXA6CkBAIC00MjgsNyArNDI5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAg
ICAgICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAg
ICAgICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAg
ICAgc3Znc3R5bGUtPnNldEZpbHRlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJ
ZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAg
ICAgICAgIHN2Z3N0eWxlLT5zZXRGaWx0ZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdt
ZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eU1hc2s6CkBAIC00NDIsNyArNDQzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1By
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlm
ICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMg
PSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5
bGUtPnNldE1hc2tlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVy
RnJvbUlSSVN0cmluZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2
Z3N0eWxlLT5zZXRNYXNrZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRp
ZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNsaXBQYXRo
OgpAQCAtNDU2LDcgKzQ1Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAodHlw
ZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBzID0gcHJp
bWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRDbGlwcGVyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9t
SVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Znc3R5
bGUtPnNldENsaXBwZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmll
ckZyb21JUklTdHJpbmcocywgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRBbmNob3I6
CkBAIC00NzcsMTQgKzQ3OCwxNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICB7CiAgICAgICAg
ICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChzdG9wQ29sb3IsIFN0b3BDb2xvcik7CiAg
ICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHQ29sb3IoKSkKLSAgICAgICAgICAgICAgICBzdmdz
dHlsZS0+c2V0U3RvcENvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8
U1ZHQ29sb3IqPih2YWx1ZSksIG1fc3R5bGUtPmNvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBz
dmdzdHlsZS0+c2V0U3RvcENvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nh
c3Q8U1ZHQ29sb3IqPih2YWx1ZSksIHN0YXRlLnN0eWxlLT5jb2xvcigpKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMaWdodGluZ0NvbG9y
OgogICAgICAgICB7CiAgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChsaWdo
dGluZ0NvbG9yLCBMaWdodGluZ0NvbG9yKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdD
b2xvcigpKQotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRMaWdodGluZ0NvbG9yKGNvbG9y
RnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSksIG1fc3R5
bGUtPmNvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TGlnaHRpbmdDb2xv
cihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUp
LCBzdGF0ZS5zdHlsZS0+Y29sb3IoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZsb29kT3BhY2l0eToKQEAgLTUwOSw3ICs1MTAsNyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9B
TkRfSU5JVElBTChmbG9vZENvbG9yLCBGbG9vZENvbG9yKTsKICAgICAgICAgICAgIGlmICh2YWx1
ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGbG9vZENvbG9y
KGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSks
IG1fc3R5bGUtPmNvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0Rmxvb2RD
b2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFs
dWUpLCBzdGF0ZS5zdHlsZS0+Y29sb3IoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsOgpA
QCAtNTQ5LDcgKzU1MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFN2Z1NoYWRvdzogewogICAgICAgICAgICAgaWYg
KGlzSW5oZXJpdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3Znc3R5bGUtPnNldFNoYWRvdyhh
ZG9wdFB0cihtX3BhcmVudFN0eWxlLT5zdmdTdHlsZSgpLT5zaGFkb3coKSA/IG5ldyBTaGFkb3dE
YXRhKCptX3BhcmVudFN0eWxlLT5zdmdTdHlsZSgpLT5zaGFkb3coKSkgOiAwKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHN2Z3N0eWxlLT5zZXRTaGFkb3coYWRvcHRQdHIoc3RhdGUucGFyZW50
U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRvdygpID8gbmV3IFNoYWRvd0RhdGEoKnN0YXRlLnBhcmVu
dFN0eWxlLT5zdmdTdHlsZSgpLT5zaGFkb3coKSkgOiAwKSk7CiAgICAgICAgICAgICBpZiAoaXNJ
bml0aWFsIHx8IHByaW1pdGl2ZVZhbHVlKSAvLyBpbml0aWFsIHwgbm9uZQogICAgICAgICAgICAg
ICAgIHJldHVybiBzdmdzdHlsZS0+c2V0U2hhZG93KG51bGxwdHIpOwogCkBAIC01NjQsOSArNTY1
LDkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICghZmlyc3RWYWx1ZS0+aXNTaGFk
b3dWYWx1ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIFNoYWRvd1Zh
bHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8U2hhZG93VmFsdWUqPihmaXJzdFZhbHVlKTsKLSAgICAg
ICAgICAgIEludFBvaW50IGxvY2F0aW9uKGl0ZW0tPngtPmNvbXB1dGVMZW5ndGg8aW50PihzdHls
ZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSkp
OwotICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0
ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSkgOiAwOworICAgICAgICAg
ICAgSW50UG9pbnQgbG9jYXRpb24oaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0
eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKSwKKyAgICAgICAgICAgICAgICBpdGVt
LT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVt
ZW50U3R5bGUpKTsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJs
dXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1l
bnRTdHlsZSkgOiAwOwogICAgICAgICAgICAgQ29sb3IgY29sb3I7CiAgICAgICAgICAgICBpZiAo
aXRlbS0+Y29sb3IpCiAgICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVW
YWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAK
aW5kZXggODg1Mzg1ZjU0ODkxODc2YWVjMjE4NzQ3MjA4MTNmMTI3MDk4YzY0YS4uOGI0MDcxNGZl
YTEyYmUyOGI0MWM4YzY4NGEzY2Q3ODhmODc2ZmQyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmNwcApAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVl
TWFwcGluZ3MuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NT
UmVmbGVjdFZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKICNpbmNsdWRlICJDU1NT
ZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgogI2luY2x1ZGUgIkNTU1N0
eWxlUnVsZS5oIgpAQCAtMjAwLDE0ICsxOTksMTQgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJbmhlcml0
KSB7IFwKLSAgICBtX3N0eWxlLT5zZXQjI1Byb3AobV9wYXJlbnRTdHlsZS0+cHJvcCgpKTsgXAor
ICAgIG1fc3RhdGUuc3R5bGUtPnNldCMjUHJvcChtX3N0YXRlLnBhcmVudFN0eWxlLT5wcm9wKCkp
OyBcCiAgICAgcmV0dXJuOyBcCiB9CiAKICNkZWZpbmUgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJ
QUwocHJvcCwgUHJvcCkgXAogSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAogaWYgKGlzSW5p
dGlhbCkgeyBcCi0gICAgbV9zdHlsZS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQ
cm9wKCkpOyBcCisgICAgbV9zdGF0ZS5zdHlsZS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0
aWFsIyNQcm9wKCkpOyBcCiAgICAgcmV0dXJuOyBcCiB9CiAKQEAgLTI2OSwzNCArMjY4LDE2IEBA
IHN0YXRpYyBTdHlsZVByb3BlcnR5U2V0KiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkKIAogCiBT
dHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBtYXRj
aEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAgOiBtX2hhc1VBQXBwZWFyYW5jZShmYWxzZSkKLSAg
ICAsIG1fYmFja2dyb3VuZERhdGEoQmFja2dyb3VuZEZpbGxMYXllcikKLSAgICAsIG1fbWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwKDApCisgICAgOiBtX21hdGNo
ZWRQcm9wZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCgwKQogICAgICwgbV9tYXRj
aGVkUHJvcGVydGllc0NhY2hlU3dlZXBUaW1lcih0aGlzLCAmU3R5bGVSZXNvbHZlcjo6c3dlZXBN
YXRjaGVkUHJvcGVydGllc0NhY2hlKQogICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAs
IG1fc2VsZWN0b3JDaGVja2VyKGRvY3VtZW50KQotICAgICwgbV9wYXJlbnRTdHlsZSgwKQotICAg
ICwgbV9yb290RWxlbWVudFN0eWxlKDApCi0gICAgLCBtX2VsZW1lbnQoMCkKLSAgICAsIG1fc3R5
bGVkRWxlbWVudCgwKQotICAgICwgbV9yZWdpb25Gb3JTdHlsaW5nKDApCi0gICAgLCBtX2VsZW1l
bnRMaW5rU3RhdGUoTm90SW5zaWRlTGluaykKLSAgICAsIG1fcGFyZW50Tm9kZSgwKQotICAgICwg
bV9saW5lSGVpZ2h0VmFsdWUoMCkKLSAgICAsIG1fZm9udERpcnR5KGZhbHNlKQogICAgICwgbV9t
YXRjaEF1dGhvckFuZFVzZXJTdHlsZXMobWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICwg
bV9zYW1lT3JpZ2luT25seShmYWxzZSkKLSAgICAsIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBv
aW50KGZhbHNlKQogICAgICwgbV9mb250U2VsZWN0b3IoQ1NTRm9udFNlbGVjdG9yOjpjcmVhdGUo
ZG9jdW1lbnQpKQogI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCiAgICAgLCBtX3Zp
ZXdwb3J0U3R5bGVSZXNvbHZlcihWaWV3cG9ydFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZShkb2N1bWVu
dCkpCiAjZW5kaWYKLSAgICAsIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpCi0g
ICAgLCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpCiAgICAgLCBtX3N0
eWxlQnVpbGRlcihTdHlsZUJ1aWxkZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpKQotI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKLSAgICAsIG1faGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpCi0jZW5kaWYK
ICAgICAsIG1fc3R5bGVNYXAodGhpcykKIHsKICAgICBFbGVtZW50KiByb290ID0gZG9jdW1lbnQt
PmRvY3VtZW50RWxlbWVudCgpOwpAQCAtNjYwLDIzICs2NDEsMjYgQEAgYm9vbCBNYXRjaGluZ1VB
UnVsZXNTY29wZTo6bV9tYXRjaGluZ1VBUnVsZXMgPSBmYWxzZTsKIHZvaWQgU3R5bGVSZXNvbHZl
cjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMoY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3Qs
IFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQogewogICAgIEFTU0VSVChtYXRjaFJlcXVlc3QucnVsZVNl
dCk7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCk7CisgICAgQVNTRVJUKG1fc3RhdGUuZWxlbWVudCk7
CiAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHBzZXVkb0lkID0gbV9lbGVtZW50LT5zaGFkb3dQ
c2V1ZG9JZCgpOworICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgRWxlbWVudCogZWxl
bWVudCA9IHN0YXRlLmVsZW1lbnQ7CisgICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9
IHN0YXRlLnN0eWxlZEVsZW1lbnQ7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwc2V1ZG9JZCA9
IGVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCk7CiAgICAgaWYgKCFwc2V1ZG9JZC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgQVNTRVJUKG1fc3R5bGVkRWxlbWVudCk7CisgICAgICAgIEFTU0VSVChzdHls
ZWRFbGVtZW50KTsKICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVx
dWVzdC5ydWxlU2V0LT5zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMocHNldWRvSWQuaW1wbCgpKSwg
bWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogICAgIH0KIAogI2lmIEVOQUJMRShWSURFT19UUkFD
SykKLSAgICBpZiAobV9lbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiB0b1dlYlZUVEVsZW1l
bnQobV9lbGVtZW50KS0+d2ViVlRUTm9kZVR5cGUoKSkKKyAgICBpZiAoZWxlbWVudC0+aXNXZWJW
VFRFbGVtZW50KCkgJiYgdG9XZWJWVFRFbGVtZW50KGVsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgp
KQogICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVT
ZXQtPmN1ZVBzZXVkb1J1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKICNlbmRpZgog
ICAgIC8vIENoZWNrIHdoZXRoZXIgb3RoZXIgdHlwZXMgb2YgcnVsZXMgYXJlIGFwcGxpY2FibGUg
aW4gdGhlIGN1cnJlbnQgdHJlZSBzY29wZS4gQ3JpdGVyaWEgZm9yIHRoaXM6CiAgICAgLy8gYSkg
aXQncyBhIFVBIHJ1bGUKICAgICAvLyBiKSB0aGUgdHJlZSBzY29wZSBhbGxvd3MgYXV0aG9yIHJ1
bGVzCiAgICAgLy8gYykgdGhlIHJ1bGVzIGNvbWVzIGZyb20gYSBzY29wZWQgc3R5bGUgc2hlZXQg
d2l0aGluIHRoZSBzYW1lIHRyZWUgc2NvcGUKLSAgICBUcmVlU2NvcGUqIHRyZWVTY29wZSA9IG1f
ZWxlbWVudC0+dHJlZVNjb3BlKCk7CisgICAgVHJlZVNjb3BlKiB0cmVlU2NvcGUgPSBlbGVtZW50
LT50cmVlU2NvcGUoKTsKICAgICBpZiAoIU1hdGNoaW5nVUFSdWxlc1Njb3BlOjppc01hdGNoaW5n
VUFSdWxlcygpCiAgICAgICAgICYmICF0cmVlU2NvcGUtPmFwcGx5QXV0aG9yU3R5bGVzKCkKICAg
ICAgICAgJiYgKCFtYXRjaFJlcXVlc3Quc2NvcGUgfHwgbWF0Y2hSZXF1ZXN0LnNjb3BlLT50cmVl
U2NvcGUoKSAhPSB0cmVlU2NvcGUpKQpAQCAtNjg0LDMwICs2NjgsMzAgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVx
dWVzdCwgUnVsZVIKIAogICAgIC8vIFdlIG5lZWQgdG8gY29sbGVjdCB0aGUgcnVsZXMgZm9yIGlk
LCBjbGFzcywgdGFnLCBhbmQgZXZlcnl0aGluZyBlbHNlIGludG8gYSBidWZmZXIgYW5kCiAgICAg
Ly8gdGhlbiBzb3J0IHRoZSBidWZmZXIuCi0gICAgaWYgKG1fZWxlbWVudC0+aGFzSUQoKSkKLSAg
ICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5p
ZFJ1bGVzKG1fZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpLCBtYXRjaFJl
cXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgaWYgKG1fc3R5bGVkRWxlbWVudCAmJiBtX3N0eWxlZEVs
ZW1lbnQtPmhhc0NsYXNzKCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0
eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKS5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+Y2xhc3NSdWxlcyht
X3N0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKVtpXS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1
bGVSYW5nZSk7CisgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkpCisgICAgICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+aWRSdWxlcyhlbGVtZW50LT5p
ZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsK
KyAgICBpZiAoc3R5bGVkRWxlbWVudCAmJiBzdHlsZWRFbGVtZW50LT5oYXNDbGFzcygpKSB7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3R5bGVkRWxlbWVudC0+Y2xhc3NOYW1lcygp
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1h
dGNoUmVxdWVzdC5ydWxlU2V0LT5jbGFzc1J1bGVzKHN0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMo
KVtpXS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CiAgICAgfQogCi0gICAgaWYg
KG1fZWxlbWVudC0+aXNMaW5rKCkpCisgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpKQogICAgICAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmxpbmtQ
c2V1ZG9DbGFzc1J1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICBpZiAobV9z
ZWxlY3RvckNoZWNrZXIubWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MobV9lbGVtZW50KSkKKyAgICBp
ZiAobV9zZWxlY3RvckNoZWNrZXIubWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MoZWxlbWVudCkpCiAg
ICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+
Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICBj
b2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPnRhZ1J1bGVz
KG1fZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2Up
OworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+
dGFnUnVsZXMoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxl
UmFuZ2UpOwogICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVs
ZVNldC0+dW5pdmVyc2FsUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogfQogCiB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKGNvbnN0IE1h
dGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBSdWxlUmFuZ2UmIHJ1bGVSYW5nZSkKIHsKLSAgICBp
ZiAoIW1fcmVnaW9uRm9yU3R5bGluZykKKyAgICBpZiAoIW1fc3RhdGUucmVnaW9uRm9yU3R5bGlu
ZykKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgc2l6ZSA9IG1hdGNoUmVxdWVzdC5y
dWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9y
KiByZWdpb25TZWxlY3RvciA9IG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9y
c0FuZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9yOwotICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxl
Y3RvcihyZWdpb25TZWxlY3Rvciwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fcmVnaW9uRm9yU3R5
bGluZy0+bm9kZSgpKSkpIHsKKyAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9u
U2VsZWN0b3IsIHN0YXRpY19jYXN0PEVsZW1lbnQqPihtX3N0YXRlLnJlZ2lvbkZvclN0eWxpbmct
Pm5vZGUoKSkpKSB7CiAgICAgICAgICAgICBSdWxlU2V0KiByZWdpb25SdWxlcyA9IG1hdGNoUmVx
dWVzdC5ydWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQu
Z2V0KCk7CiAgICAgICAgICAgICBBU1NFUlQocmVnaW9uUnVsZXMpOwogICAgICAgICAgICAgY29s
bGVjdE1hdGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KHJlZ2lvblJ1bGVzLCBtYXRjaFJlcXVlc3Qu
aW5jbHVkZUVtcHR5UnVsZXMsIG1hdGNoUmVxdWVzdC5zY29wZSksIHJ1bGVSYW5nZSk7CkBAIC03
MTcsMjQgKzcwMSwyNSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yUmVnaW9uKGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZQogCiB2b2lkIFN0eWxlUmVz
b2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQog
ewotICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgU3RhdGUmIHN0YXRlID0g
bV9zdGF0ZTsKKyAgICBpZiAoc3RhdGUubWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgc29ydE1hdGNoZWRSdWxlcygpOwogCiAgICAgaWYgKG1fc2VsZWN0b3JD
aGVja2VyLm1vZGUoKSA9PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcykgewotICAg
ICAgICBpZiAoIW1fcnVsZUxpc3QpCi0gICAgICAgICAgICBtX3J1bGVMaXN0ID0gU3RhdGljQ1NT
UnVsZUxpc3Q6OmNyZWF0ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9t
YXRjaGVkUnVsZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX3J1bGVMaXN0LT5ydWxlcygp
LmFwcGVuZChtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5jcmVhdGVDU1NPTVdyYXBwZXIoKSk7
CisgICAgICAgIGlmICghc3RhdGUucnVsZUxpc3QpCisgICAgICAgICAgICBzdGF0ZS5ydWxlTGlz
dCA9IFN0YXRpY0NTU1J1bGVMaXN0OjpjcmVhdGUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHN0YXRlLm1hdGNoZWRSdWxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHN0
YXRlLnJ1bGVMaXN0LT5ydWxlcygpLmFwcGVuZChzdGF0ZS5tYXRjaGVkUnVsZXNbaV0tPnJ1bGUo
KS0+Y3JlYXRlQ1NTT01XcmFwcGVyKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
Ly8gTm93IHRyYW5zZmVyIHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcyBvdmVyIHRvIG91ciBsaXN0
IG9mIGRlY2xhcmF0aW9ucy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVk
UnVsZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKG1fc3R5bGUgJiYgbV9tYXRjaGVkUnVs
ZXNbaV0tPmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQotICAgICAgICAgICAg
bV9zdHlsZS0+c2V0VW5pcXVlKCk7Ci0gICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3Vs
dCwgbV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+cHJvcGVydGllcygpLCBtX21hdGNoZWRSdWxl
c1tpXS0+cnVsZSgpLCBtX21hdGNoZWRSdWxlc1tpXS0+bGlua01hdGNoVHlwZSgpLCBtX21hdGNo
ZWRSdWxlc1tpXS0+cHJvcGVydHlXaGl0ZWxpc3RUeXBlKCkpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzdGF0ZS5tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYg
KHN0YXRlLnN0eWxlICYmIHN0YXRlLm1hdGNoZWRSdWxlc1tpXS0+Y29udGFpbnNVbmNvbW1vbkF0
dHJpYnV0ZVNlbGVjdG9yKCkpCisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VW5pcXVlKCk7
CisgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGUubWF0Y2hlZFJ1bGVz
W2ldLT5ydWxlKCktPnByb3BlcnRpZXMoKSwgc3RhdGUubWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCks
IHN0YXRlLm1hdGNoZWRSdWxlc1tpXS0+bGlua01hdGNoVHlwZSgpLCBzdGF0ZS5tYXRjaGVkUnVs
ZXNbaV0tPnByb3BlcnR5V2hpdGVsaXN0VHlwZSgpKTsKICAgICB9CiB9CiAKQEAgLTc0NSwxMiAr
NzMwLDEyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRj
aFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0CiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIE1hdGNoIHNjb3BlZCBhdXRob3IgcnVsZXMgYnkgdHJhdmVyc2luZyB0aGUgc2NvcGVkIGVs
ZW1lbnQgc3RhY2sgKHJlYnVpbGQgaXQgaWYgaXQgZ290IGluY29uc2lzdGVudCkuCi0gICAgaWYg
KG1fc2NvcGVSZXNvbHZlci0+aGFzU2NvcGVkU3R5bGVzKCkgJiYgbV9zY29wZVJlc29sdmVyLT5l
bnN1cmVTdGFja0NvbnNpc3RlbmN5KG1fZWxlbWVudCkpIHsKLSAgICAgICAgYm9vbCBhcHBseUF1
dGhvclN0eWxlcyA9IG1fZWxlbWVudC0+dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9yU3R5bGVzKCk7
CisgICAgaWYgKG1fc2NvcGVSZXNvbHZlci0+aGFzU2NvcGVkU3R5bGVzKCkgJiYgbV9zY29wZVJl
c29sdmVyLT5lbnN1cmVTdGFja0NvbnNpc3RlbmN5KG1fc3RhdGUuZWxlbWVudCkpIHsKKyAgICAg
ICAgYm9vbCBhcHBseUF1dGhvclN0eWxlcyA9IG1fc3RhdGUuZWxlbWVudC0+dHJlZVNjb3BlKCkt
PmFwcGx5QXV0aG9yU3R5bGVzKCk7CiAgICAgICAgIGJvb2wgZG9jdW1lbnRTY29wZSA9IHRydWU7
CiAgICAgICAgIHVuc2lnbmVkIHNjb3BlU2l6ZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tTaXpl
KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzY29wZVNpemU7ICsraSkgewot
ICAgICAgICAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fc3RhdGUu
bWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRo
b3JSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKICAgICAgICAg
ICAgIGNvbnN0IFN0eWxlU2NvcGVSZXNvbHZlcjo6U3RhY2tGcmFtZSYgZnJhbWUgPSBtX3Njb3Bl
UmVzb2x2ZXItPnN0YWNrRnJhbWVBdChpKTsKQEAgLTc4MSw3ICs3NjYsNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9v
bCBpbmNsdWRlRW1wdAogaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2Fu
ZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcygpCiB7CiAjaWYgRU5BQkxFKFNIQURPV19ET00pCi0gICAg
cmV0dXJuIG1fc2NvcGVSZXNvbHZlciAmJiBtX3Njb3BlUmVzb2x2ZXItPnN0eWxlU2hhcmluZ0Nh
bmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMobV9lbGVtZW50KTsKKyAgICByZXR1cm4gbV9zY29wZVJl
c29sdmVyICYmIG1fc2NvcGVSZXNvbHZlci0+c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hv
c3RSdWxlcyhtX3N0YXRlLmVsZW1lbnQpOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CiAjZW5k
aWYKQEAgLTc5MiwxNyArNzc3LDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVs
ZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKICNpZiBFTkFC
TEUoU0hBRE9XX0RPTSkKICAgICBBU1NFUlQobV9zY29wZVJlc29sdmVyKTsKIAotICAgIG1fbWF0
Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuY2xlYXIoKTsKICAg
ICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVz
LnNpemUoKSAtIDE7CiAKICAgICBWZWN0b3I8UnVsZVNldCo+IG1hdGNoZWRSdWxlczsKLSAgICBt
X3Njb3BlUmVzb2x2ZXItPm1hdGNoSG9zdFJ1bGVzKG1fZWxlbWVudCwgbWF0Y2hlZFJ1bGVzKTsK
KyAgICBtX3Njb3BlUmVzb2x2ZXItPm1hdGNoSG9zdFJ1bGVzKG1fc3RhdGUuZWxlbWVudCwgbWF0
Y2hlZFJ1bGVzKTsKICAgICBpZiAobWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSA+IDA7
IC0taSkgewogICAgICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy5hdXRo
b3JSdWxlUmFuZ2UoKTsKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0
KG1hdGNoZWRSdWxlcy5hdChpLTEpLCBpbmNsdWRlRW1wdHlSdWxlcywgbV9lbGVtZW50KSwgcnVs
ZVJhbmdlKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KG1hdGNo
ZWRSdWxlcy5hdChpLTEpLCBpbmNsdWRlRW1wdHlSdWxlcywgbV9zdGF0ZS5lbGVtZW50KSwgcnVs
ZVJhbmdlKTsKICAgICB9CiAgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7
CiAjZWxzZQpAQCAtODEzLDEwICs3OTgsMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhv
c3RSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogCiB2
b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwg
Ym9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwor
ICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0
QXV0aG9yUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogCi0gICAg
aWYgKCFtX2VsZW1lbnQpCisgICAgaWYgKCFtX3N0YXRlLmVsZW1lbnQpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIE1hdGNoIGdsb2JhbCBhdXRob3IgcnVsZXMuCkBAIC04MzQsNyArODE5LDcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0
LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogICAgIGlmICghbV91c2VyU3R5bGUpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIG1fc3RhdGUu
bWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAKICAgICByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSA9
IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogICAgIE1hdGNoUmVxdWVzdCBt
YXRjaFJlcXVlc3QobV91c2VyU3R5bGUuZ2V0KCksIGluY2x1ZGVFbXB0eVJ1bGVzKTsKQEAgLTg0
Nyw3ICs4MzIsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVzKE1hdGNoUmVz
dWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiAKIHZvaWQgU3R5bGVSZXNvbHZl
cjo6bWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIFJ1bGVTZXQqIHJ1bGVzKQogewot
ICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuY2xl
YXIoKTsKICAgICAKICAgICByZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUgPSByZXN1bHQubWF0Y2hl
ZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0
LnJhbmdlcy5VQVJ1bGVSYW5nZSgpOwpAQCAtODYxLDkgKzg0NiwxMCBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+
KiBydWxlcywgYwogICAgIGlmICghcnVsZXMpCiAgICAgICAgIHJldHVybjsKIAorICAgIFN0YXRl
JiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBtYXkgZW5kIHVwIGxv
b2tpbmcgdXAgc3R5bGUgZm9yIHJhbmRvbSBlbGVtZW50cyBpbiB0aGUgbWlkZGxlIG9mIGEgcmVj
dXJzaXZlIHRyZWUgcmVzb2x2ZS4KICAgICAvLyBBbmNlc3RvciBpZGVudGlmaWVyIGZpbHRlciB3
b24ndCBiZSB1cC10by1kYXRlIGluIHRoYXQgY2FzZSBhbmQgd2UgY2FuJ3QgdXNlIHRoZSBmYXN0
IHBhdGguCi0gICAgYm9vbCBjYW5Vc2VGYXN0UmVqZWN0ID0gbV9zZWxlY3RvckZpbHRlci5wYXJl
bnRTdGFja0lzQ29uc2lzdGVudChtX3BhcmVudE5vZGUpOworICAgIGJvb2wgY2FuVXNlRmFzdFJl
amVjdCA9IG1fc2VsZWN0b3JGaWx0ZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQoc3RhdGUucGFy
ZW50Tm9kZSk7CiAKICAgICB1bnNpZ25lZCBzaXplID0gcnVsZXMtPnNpemUoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CkBAIC04ODEsMTkgKzg2NywxOSBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0
b3I8UnVsZURhdGE+KiBydWxlcywgYwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgLy8gRklYTUU6IEV4cG9zaW5nIHRoZSBub24tc3RhbmRhcmQg
Z2V0TWF0Y2hlZENTU1J1bGVzIEFQSSB0byB3ZWIgaXMgdGhlIG9ubHkgcmVhc29uIHRoaXMgaXMg
bmVlZGVkLgotICAgICAgICAgICAgaWYgKG1fc2FtZU9yaWdpbk9ubHkgJiYgIXJ1bGVEYXRhLmhh
c0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSkgeworICAgICAgICAgICAgaWYgKHN0YXRlLnNhbWVP
cmlnaW5Pbmx5ICYmICFydWxlRGF0YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkpIHsKICAg
ICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29r
aWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIC8vIElmIHdlJ3JlIG1hdGNoaW5nIG5vcm1hbCBydWxlcywgc2V0IGEgcHNldWRv
IGJpdCBpZgogICAgICAgICAgICAgLy8gd2UgcmVhbGx5IGp1c3QgbWF0Y2hlZCBhIHBzZXVkby1l
bGVtZW50LgotICAgICAgICAgICAgaWYgKG1fZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiBt
X3BzZXVkb1N0eWxlID09IE5PUFNFVURPKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUuZHluYW1p
Y1BzZXVkbyAhPSBOT1BTRVVETyAmJiBzdGF0ZS5wc2V1ZG9TdHlsZSA9PSBOT1BTRVVETykgewog
ICAgICAgICAgICAgICAgIGlmIChtX3NlbGVjdG9yQ2hlY2tlci5tb2RlKCkgPT0gU2VsZWN0b3JD
aGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpIHsKICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7CiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBp
ZiAobV9keW5hbWljUHNldWRvIDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQpCi0gICAgICAgICAg
ICAgICAgICAgIG1fc3R5bGUtPnNldEhhc1BzZXVkb1N0eWxlKG1fZHluYW1pY1BzZXVkbyk7Cisg
ICAgICAgICAgICAgICAgaWYgKHN0YXRlLmR5bmFtaWNQc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9Q
U0VVRE9JRCkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldEhhc1BzZXVkb1N0
eWxlKHN0YXRlLmR5bmFtaWNQc2V1ZG8pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAvLyBVcGRhdGUgb3VyIGZpcnN0L2xhc3QgcnVsZSBpbmRpY2VzIGluIHRoZSBtYXRj
aGVkIHJ1bGVzIGFycmF5LgogICAgICAgICAgICAgICAgICsrcnVsZVJhbmdlLmxhc3RSdWxlSW5k
ZXg7CkBAIC05MTksNyArOTA1LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVSdWxlcyhj
b25zdCBSdWxlRGF0YSogcjEsIGNvbnN0IFJ1bGVEYXRhKiByMikKIAogdm9pZCBTdHlsZVJlc29s
dmVyOjpzb3J0TWF0Y2hlZFJ1bGVzKCkKIHsKLSAgICBzdGQ6OnNvcnQobV9tYXRjaGVkUnVsZXMu
YmVnaW4oKSwgbV9tYXRjaGVkUnVsZXMuZW5kKCksIGNvbXBhcmVSdWxlcyk7CisgICAgc3RkOjpz
b3J0KG1fc3RhdGUubWF0Y2hlZFJ1bGVzLmJlZ2luKCksIG1fc3RhdGUubWF0Y2hlZFJ1bGVzLmVu
ZCgpLCBjb21wYXJlUnVsZXMpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVs
ZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZXMpCkBAIC05
MjksMTkgKzkxNSwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0Y2hS
ZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZQogICAgIC8vIE5vdyB3ZSBj
aGVjayB1c2VyIHNoZWV0IHJ1bGVzLgogICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxl
cykKICAgICAgICAgbWF0Y2hVc2VyUnVsZXMocmVzdWx0LCBmYWxzZSk7Ci0gICAgICAgIAorCiAg
ICAgLy8gTm93IGNoZWNrIGF1dGhvciBydWxlcywgYmVnaW5uaW5nIGZpcnN0IHdpdGggcHJlc2Vu
dGF0aW9uYWwgYXR0cmlidXRlcyBtYXBwZWQgZnJvbSBIVE1MLgotICAgIGlmIChtX3N0eWxlZEVs
ZW1lbnQpIHsKLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3R5
bGVkRWxlbWVudC0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CisgICAgaWYgKG1fc3Rh
dGUuc3R5bGVkRWxlbWVudCkgeworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJl
c3VsdCwgbV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgp
KTsKIAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sgYWRkaXRpb25hbCBtYXBwZWQgZGVjbGFyYXRp
b25zLgogICAgICAgICAvLyBUYWJsZXMgYW5kIHRhYmxlIGNlbGxzIHNoYXJlIGFuIGFkZGl0aW9u
YWwgbWFwcGVkIHJ1bGUgdGhhdCBtdXN0IGJlIGFwcGxpZWQKICAgICAgICAgLy8gYWZ0ZXIgYWxs
IGF0dHJpYnV0ZXMsIHNpbmNlIHRoZWlyIG1hcHBlZCBzdHlsZSBkZXBlbmRzIG9uIHRoZSB2YWx1
ZXMgb2YgbXVsdGlwbGUgYXR0cmlidXRlcy4KLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVy
dGllcyhyZXN1bHQsIG1fc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJp
YnV0ZVN0eWxlKCkpOworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwg
bV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5
bGUoKSk7CiAKLSAgICAgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKSB7
CisgICAgICAgIGlmIChtX3N0YXRlLnN0eWxlZEVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkgewog
ICAgICAgICAgICAgYm9vbCBpc0F1dG87Ci0gICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHRE
aXJlY3Rpb24gPSB0b0hUTUxFbGVtZW50KG1fc3R5bGVkRWxlbWVudCktPmRpcmVjdGlvbmFsaXR5
SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CisgICAgICAgICAgICBUZXh0RGlyZWN0aW9u
IHRleHREaXJlY3Rpb24gPSB0b0hUTUxFbGVtZW50KG1fc3RhdGUuc3R5bGVkRWxlbWVudCktPmRp
cmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CiAgICAgICAgICAgICBp
ZiAoaXNBdXRvKQogICAgICAgICAgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwg
dGV4dERpcmVjdGlvbiA9PSBMVFIgPyBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkgOiByaWdodFRv
TGVmdERlY2xhcmF0aW9uKCkpOwogICAgICAgICB9CkBAIC05NTIsMTggKzkzOCwxOCBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBp
bmNsdWRlU01JTFByb3BlcnRpZQogICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHJlc3VsdCwgZmFs
c2UpOwogCiAgICAgLy8gTm93IGNoZWNrIG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRlLgotICAg
IGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQgJiYgbV9z
dHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpKSB7CisgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRV
c2VyU3R5bGVzICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVudCAmJiBtX3N0YXRlLnN0eWxlZEVsZW1l
bnQtPmlubGluZVN0eWxlKCkpIHsKICAgICAgICAgLy8gSW5saW5lIHN0eWxlIGlzIGltbXV0YWJs
ZSBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIENTU09NIHdyYXBwZXIuCiAgICAgICAgIC8vIEZJWE1F
OiBNZWRpYSBjb250cm9sIHNoYWRvdyB0cmVlcyBzZWVtIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCBj
YWNoaW5nLgotICAgICAgICBib29sIGlzSW5saW5lU3R5bGVDYWNoZWFibGUgPSAhbV9zdHlsZWRF
bGVtZW50LT5pbmxpbmVTdHlsZSgpLT5pc011dGFibGUoKSAmJiAhbV9zdHlsZWRFbGVtZW50LT5p
c0luU2hhZG93VHJlZSgpOworICAgICAgICBib29sIGlzSW5saW5lU3R5bGVDYWNoZWFibGUgPSAh
bV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpLT5pc011dGFibGUoKSAmJiAhbV9z
dGF0ZS5zdHlsZWRFbGVtZW50LT5pc0luU2hhZG93VHJlZSgpOwogICAgICAgICAvLyBGSVhNRTog
Q29uc3RpZnkuCi0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0
eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCksIGlzSW5saW5lU3R5bGVDYWNoZWFibGUpOworICAg
ICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdGF0ZS5zdHlsZWRFbGVt
ZW50LT5pbmxpbmVTdHlsZSgpLCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlKTsKICAgICB9CiAKICNp
ZiBFTkFCTEUoU1ZHKQogICAgIC8vIE5vdyBjaGVjayBTTUlMIGFuaW1hdGlvbiBvdmVycmlkZSBz
dHlsZS4KLSAgICBpZiAoaW5jbHVkZVNNSUxQcm9wZXJ0aWVzICYmIG1fbWF0Y2hBdXRob3JBbmRV
c2VyU3R5bGVzICYmIG1fc3R5bGVkRWxlbWVudCAmJiBtX3N0eWxlZEVsZW1lbnQtPmlzU1ZHRWxl
bWVudCgpKQotICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGlj
X2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJv
cGVydGllcygpLCBmYWxzZSAvKiBpc0NhY2hlYWJsZSAqLyk7CisgICAgaWYgKGluY2x1ZGVTTUlM
UHJvcGVydGllcyAmJiBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0YXRlLnN0eWxl
ZEVsZW1lbnQgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkKKyAgICAg
ICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRpY19jYXN0PFNWR0VsZW1l
bnQqPihtX3N0YXRlLnN0eWxlZEVsZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMo
KSwgZmFsc2UgLyogaXNDYWNoZWFibGUgKi8pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oaW5j
bHVkZVNNSUxQcm9wZXJ0aWVzKTsKICNlbmRpZgpAQCAtOTgwLDEwICs5NjYsMTAgQEAgYm9vbCBT
dHlsZVJlc29sdmVyOjpjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKGNvbnN0IFNwYWNlU3BsaXRT
dHJpbmcmIGNsYXNzTmFtZXMKIAogaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEVsZW1l
bnQoRWxlbWVudCogZSkKIHsKLSAgICBpZiAobV9lbGVtZW50ICE9IGUpIHsKLSAgICAgICAgbV9l
bGVtZW50ID0gZTsKLSAgICAgICAgbV9zdHlsZWRFbGVtZW50ID0gbV9lbGVtZW50ICYmIG1fZWxl
bWVudC0+aXNTdHlsZWRFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obV9l
bGVtZW50KSA6IDA7Ci0gICAgICAgIG1fZWxlbWVudExpbmtTdGF0ZSA9IGRvY3VtZW50KCktPnZp
c2l0ZWRMaW5rU3RhdGUoKS0+ZGV0ZXJtaW5lTGlua1N0YXRlKG1fZWxlbWVudCk7CisgICAgaWYg
KG1fc3RhdGUuZWxlbWVudCAhPSBlKSB7CisgICAgICAgIG1fc3RhdGUuZWxlbWVudCA9IGU7Cisg
ICAgICAgIG1fc3RhdGUuc3R5bGVkRWxlbWVudCA9IG1fc3RhdGUuZWxlbWVudCAmJiBtX3N0YXRl
LmVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+
KG1fc3RhdGUuZWxlbWVudCkgOiAwOworICAgICAgICBtX3N0YXRlLmVsZW1lbnRMaW5rU3RhdGUg
PSBkb2N1bWVudCgpLT52aXNpdGVkTGlua1N0YXRlKCktPmRldGVybWluZUxpbmtTdGF0ZShlKTsK
ICAgICAgICAgaWYgKGUgJiYgZSA9PSBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkg
ewogICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0RGlyZWN0aW9uU2V0T25Eb2N1bWVudEVs
ZW1lbnQoZmFsc2UpOwogICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVT
ZXRPbkRvY3VtZW50RWxlbWVudChmYWxzZSk7CkBAIC05OTMsMzIgKzk3OSwzMyBAQCBpbmxpbmUg
dm9pZCBTdHlsZVJlc29sdmVyOjppbml0RWxlbWVudChFbGVtZW50KiBlKQogCiBpbmxpbmUgdm9p
ZCBTdHlsZVJlc29sdmVyOjppbml0Rm9yU3R5bGVSZXNvbHZlKEVsZW1lbnQqIGUsIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSwgUHNldWRvSWQgcHNldWRvSUQpCiB7Ci0gICAgbV9wc2V1ZG9TdHls
ZSA9IHBzZXVkb0lEOworICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgc3RhdGUucHNl
dWRvU3R5bGUgPSBwc2V1ZG9JRDsKIAogICAgIGlmIChlKSB7CiAgICAgICAgIE5vZGVSZW5kZXJp
bmdDb250ZXh0IGNvbnRleHQoZSk7Ci0gICAgICAgIG1fcGFyZW50Tm9kZSA9IGNvbnRleHQucGFy
ZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlKCk7Ci0gICAgICAgIG1fcGFyZW50U3R5bGUgPSBj
b250ZXh0LnJlc2V0U3R5bGVJbmhlcml0YW5jZSgpID8gMCA6CisgICAgICAgIHN0YXRlLnBhcmVu
dE5vZGUgPSBjb250ZXh0LnBhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHlsZSgpOworICAgICAg
ICBzdGF0ZS5wYXJlbnRTdHlsZSA9IGNvbnRleHQucmVzZXRTdHlsZUluaGVyaXRhbmNlKCkgPyAw
IDoKICAgICAgICAgICAgIHBhcmVudFN0eWxlID8gcGFyZW50U3R5bGUgOgotICAgICAgICAgICAg
bV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMDsKLSAgICAgICAg
bV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQgPSBjb250ZXh0Lmluc2VydGlvblBvaW50KCk7
CisgICAgICAgICAgICBzdGF0ZS5wYXJlbnROb2RlID8gc3RhdGUucGFyZW50Tm9kZS0+cmVuZGVy
U3R5bGUoKSA6IDA7CisgICAgICAgIHN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCA9
IGNvbnRleHQuaW5zZXJ0aW9uUG9pbnQoKTsKICAgICB9IGVsc2UgewotICAgICAgICBtX3BhcmVu
dE5vZGUgPSAwOwotICAgICAgICBtX3BhcmVudFN0eWxlID0gcGFyZW50U3R5bGU7Ci0gICAgICAg
IG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50ID0gZmFsc2U7CisgICAgICAgIHN0YXRlLnBh
cmVudE5vZGUgPSAwOworICAgICAgICBzdGF0ZS5wYXJlbnRTdHlsZSA9IHBhcmVudFN0eWxlOwor
ICAgICAgICBzdGF0ZS5kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQgPSBmYWxzZTsKICAgICB9
CiAKICAgICBOb2RlKiBkb2NFbGVtZW50ID0gZSA/IGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxl
bWVudCgpIDogMDsKICAgICBSZW5kZXJTdHlsZSogZG9jU3R5bGUgPSBkb2N1bWVudCgpLT5yZW5k
ZXJTdHlsZSgpOwotICAgIG1fcm9vdEVsZW1lbnRTdHlsZSA9IGRvY0VsZW1lbnQgJiYgZSAhPSBk
b2NFbGVtZW50ID8gZG9jRWxlbWVudC0+cmVuZGVyU3R5bGUoKSA6IGRvY1N0eWxlOworICAgIHN0
YXRlLnJvb3RFbGVtZW50U3R5bGUgPSBkb2NFbGVtZW50ICYmIGUgIT0gZG9jRWxlbWVudCA/IGRv
Y0VsZW1lbnQtPnJlbmRlclN0eWxlKCkgOiBkb2NTdHlsZTsKIAotICAgIG1fc3R5bGUgPSAwOwor
ICAgIHN0YXRlLnN0eWxlID0gMDsKIAotICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5jbGVh
cigpOworICAgIHN0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuY2xlYXIoKTsKIAotICAgIG1f
cnVsZUxpc3QgPSAwOworICAgIHN0YXRlLnJ1bGVMaXN0ID0gMDsKIAotICAgIG1fZm9udERpcnR5
ID0gZmFsc2U7CisgICAgc3RhdGUuZm9udERpcnR5ID0gZmFsc2U7CiB9CiAKIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBjU3R5bGVTZWFyY2hUaHJlc2hvbGQgPSAxMDsKQEAgLTEwODEsMjMgKzEwNjgs
MjQgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVs
ZVNldChSdWxlU2V0KiBydWxlU2V0KQogewogICAgIGlmICghcnVsZVNldCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5tYXRj
aGVkUnVsZXMuY2xlYXIoKTsKIAogICAgIG1fc2VsZWN0b3JDaGVja2VyLnNldE1vZGUoU2VsZWN0
b3JDaGVja2VyOjpTaGFyaW5nUnVsZXMpOwogICAgIGludCBmaXJzdFJ1bGVJbmRleCA9IC0xLCBs
YXN0UnVsZUluZGV4ID0gLTE7CiAgICAgUnVsZVJhbmdlIHJ1bGVSYW5nZShmaXJzdFJ1bGVJbmRl
eCwgbGFzdFJ1bGVJbmRleCk7CiAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0
KHJ1bGVTZXQpLCBydWxlUmFuZ2UpOwogICAgIG1fc2VsZWN0b3JDaGVja2VyLnNldE1vZGUoU2Vs
ZWN0b3JDaGVja2VyOjpSZXNvbHZpbmdTdHlsZSk7Ci0gICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlz
RW1wdHkoKSkKKyAgICBpZiAobV9zdGF0ZS5tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICBtX3N0YXRl
Lm1hdGNoZWRSdWxlcy5jbGVhcigpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFN0eWxl
UmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KiBlbGVtZW50
KSBjb25zdAogeworICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgSFRNTElu
cHV0RWxlbWVudCogdGhpc0lucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7
Ci0gICAgSFRNTElucHV0RWxlbWVudCogb3RoZXJJbnB1dEVsZW1lbnQgPSBtX2VsZW1lbnQtPnRv
SW5wdXRFbGVtZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogb3RoZXJJbnB1dEVsZW1lbnQg
PSBzdGF0ZS5lbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwogCiAgICAgaWYgKCF0aGlzSW5wdXRF
bGVtZW50IHx8ICFvdGhlcklucHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTExOCwyNSArMTEwNiwyNSBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRo
Q29udHJvbChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgIGlmICh0aGlzSW5wdXRF
bGVtZW50LT5pc1JlcXVpcmVkKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPmlzUmVxdWlyZWQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQtPmlzRW5hYmxlZEZvcm1D
b250cm9sKCkgIT0gbV9lbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpKQorICAgIGlmIChl
bGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpICE9IHN0YXRlLmVsZW1lbnQtPmlzRW5hYmxl
ZEZvcm1Db250cm9sKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50
LT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgIT0gbV9lbGVtZW50LT5pc0RlZmF1bHRCdXR0b25G
b3JGb3JtKCkpCisgICAgaWYgKGVsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSAhPSBz
dGF0ZS5lbGVtZW50LT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmIChtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNvbnRhaW5zVmFsaWRpdHlT
dHlsZVJ1bGVzKCkpIHsKKyAgICBpZiAoc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29udGFp
bnNWYWxpZGl0eVN0eWxlUnVsZXMoKSkgewogICAgICAgICBib29sIHdpbGxWYWxpZGF0ZSA9IGVs
ZW1lbnQtPndpbGxWYWxpZGF0ZSgpOwogCi0gICAgICAgIGlmICh3aWxsVmFsaWRhdGUgIT0gbV9l
bGVtZW50LT53aWxsVmFsaWRhdGUoKSkKKyAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAhPSBzdGF0
ZS5lbGVtZW50LT53aWxsVmFsaWRhdGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICBpZiAod2lsbFZhbGlkYXRlICYmIChlbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xF
bGVtZW50KCkgIT0gbV9lbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpKQorICAg
ICAgICBpZiAod2lsbFZhbGlkYXRlICYmIChlbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVt
ZW50KCkgIT0gc3RhdGUuZWxlbWVudC0+aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoZWxlbWVudC0+aXNJblJhbmdl
KCkgIT0gbV9lbGVtZW50LT5pc0luUmFuZ2UoKSkKKyAgICAgICAgaWYgKGVsZW1lbnQtPmlzSW5S
YW5nZSgpICE9IHN0YXRlLmVsZW1lbnQtPmlzSW5SYW5nZSgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIGlmIChlbGVtZW50LT5pc091dE9mUmFuZ2UoKSAhPSBtX2VsZW1l
bnQtPmlzT3V0T2ZSYW5nZSgpKQorICAgICAgICBpZiAoZWxlbWVudC0+aXNPdXRPZlJhbmdlKCkg
IT0gc3RhdGUuZWxlbWVudC0+aXNPdXRPZlJhbmdlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCkBAIC0xMTUxLDI1ICsxMTM5LDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBl
bGVtZW50SGFzRGlyZWN0aW9uQXV0byhFbGVtZW50KiBlbGVtZW50KQogCiBib29sIFN0eWxlUmVz
b2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0
ZXMoU3R5bGVkRWxlbWVudCogc2hhcmluZ0NhbmRpZGF0ZSkgY29uc3QKIHsKLSAgICBpZiAobV9l
bGVtZW50LT5hdHRyaWJ1dGVEYXRhKCkgPT0gc2hhcmluZ0NhbmRpZGF0ZS0+YXR0cmlidXRlRGF0
YSgpKQorICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgaWYgKHN0YXRlLmVs
ZW1lbnQtPmF0dHJpYnV0ZURhdGEoKSA9PSBzaGFyaW5nQ2FuZGlkYXRlLT5hdHRyaWJ1dGVEYXRh
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChtX2VsZW1lbnQtPmZhc3RHZXRBdHRy
aWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0
cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikpCisgICAgaWYgKHN0YXRlLmVsZW1lbnQtPmZhc3RH
ZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0
R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAobV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSAhPSBzaGFyaW5n
Q2FuZGlkYXRlLT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSkKKyAgICBpZiAoc3RhdGUuZWxl
bWVudC0+ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZmFz
dEdldEF0dHJpYnV0ZShsYW5nQXR0cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlm
ICghbV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMpIHsKKyAgICBpZiAoIXN0YXRlLmVsZW1l
bnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcykgewogICAgICAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+
aGFzQ2xhc3MoKSAmJiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKHNoYXJpbmdDYW5kaWRhdGUt
PmNsYXNzTmFtZXMoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBlbHNlIGlm
IChzaGFyaW5nQ2FuZGlkYXRlLT5oYXNDbGFzcygpKSB7CiAjaWYgRU5BQkxFKFNWRykKICAgICAg
ICAgLy8gU1ZHIGVsZW1lbnRzIHJlcXVpcmUgYSAoc2xvdyEpIGdldEF0dHJpYnV0ZSBjb21wYXJp
c2lvbiBiZWNhdXNlICJjbGFzcyIgaXMgYW4gYW5pbWF0YWJsZSBhdHRyaWJ1dGUgZm9yIFNWRy4K
LSAgICAgICAgaWYgKG1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGlm
IChtX2VsZW1lbnQtPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUt
PmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpKQorICAgICAgICBpZiAoc3RhdGUuZWxlbWVudC0+aXNT
VkdFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50LT5nZXRBdHRyaWJ1
dGUoY2xhc3NBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRy
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZWxzZSB7CiAjZW5k
aWYKLSAgICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmNsYXNzTmFtZXMoKSAhPSBzaGFyaW5nQ2Fu
ZGlkYXRlLT5jbGFzc05hbWVzKCkpCisgICAgICAgICAgICBpZiAoc3RhdGUuZWxlbWVudC0+Y2xh
c3NOYW1lcygpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmNsYXNzTmFtZXMoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgfQpAQCAtMTE3Nywx
MiArMTE2NiwxMiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVu
dGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoU3R5bGVkRQogICAgIH0gZWxzZQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5wcmVzZW50YXRpb25B
dHRyaWJ1dGVTdHlsZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUtPnByZXNlbnRhdGlvbkF0dHJpYnV0
ZVN0eWxlKCkpCisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQtPnByZXNlbnRhdGlvbkF0dHJp
YnV0ZVN0eWxlKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5
bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1F
TlQpCi0gICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShwcm9ncmVzc1RhZykpIHsKLSAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihtX2VsZW1lbnQpLT5pc0Rl
dGVybWluYXRlKCkgIT0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KHNoYXJpbmdD
YW5kaWRhdGUpLT5pc0RldGVybWluYXRlKCkpCisgICAgaWYgKHN0YXRlLmVsZW1lbnQtPmhhc1Rh
Z05hbWUocHJvZ3Jlc3NUYWcpKSB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jl
c3NFbGVtZW50Kj4oc3RhdGUuZWxlbWVudCktPmlzRGV0ZXJtaW5hdGUoKSAhPSBzdGF0aWNfY2Fz
dDxIVE1MUHJvZ3Jlc3NFbGVtZW50Kj4oc2hhcmluZ0NhbmRpZGF0ZSktPmlzRGV0ZXJtaW5hdGUo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAjZW5kaWYKQEAgLTExOTMsMTIg
KzExODIsMTMgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRp
Y2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEUKIGJvb2wgU3R5bGVSZXNvbHZlcjo6
Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7
CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICBj
b25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogCiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGlmIChzdHlsZS0+dW5pcXVlKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoZWxlbWVudC0+dGFnUU5hbWUoKSAhPSBtX2VsZW1lbnQtPnRhZ1FOYW1l
KCkpCisgICAgaWYgKGVsZW1lbnQtPnRhZ1FOYW1lKCkgIT0gc3RhdGUuZWxlbWVudC0+dGFnUU5h
bWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChlbGVtZW50LT5pbmxpbmVTdHls
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjA4LDIxICsxMTk4LDIxIEBAIGJvb2wg
U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVs
ZW1lbnQpIGNvbnN0CiAgICAgaWYgKGVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRpY19j
YXN0PFNWR0VsZW1lbnQqPihlbGVtZW50KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgotICAgIGlmIChlbGVtZW50LT5pc0xpbmso
KSAhPSBtX2VsZW1lbnQtPmlzTGluaygpKQorICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSAhPSBz
dGF0ZS5lbGVtZW50LT5pc0xpbmsoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChl
bGVtZW50LT5ob3ZlcmVkKCkgIT0gbV9lbGVtZW50LT5ob3ZlcmVkKCkpCisgICAgaWYgKGVsZW1l
bnQtPmhvdmVyZWQoKSAhPSBzdGF0ZS5lbGVtZW50LT5ob3ZlcmVkKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+YWN0aXZlKCkgIT0gbV9lbGVtZW50LT5hY3RpdmUo
KSkKKyAgICBpZiAoZWxlbWVudC0+YWN0aXZlKCkgIT0gc3RhdGUuZWxlbWVudC0+YWN0aXZlKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+Zm9jdXNlZCgpICE9IG1f
ZWxlbWVudC0+Zm9jdXNlZCgpKQorICAgIGlmIChlbGVtZW50LT5mb2N1c2VkKCkgIT0gc3RhdGUu
ZWxlbWVudC0+Zm9jdXNlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1l
bnQtPnNoYWRvd1BzZXVkb0lkKCkgIT0gbV9lbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpKQorICAg
IGlmIChlbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpICE9IHN0YXRlLmVsZW1lbnQtPnNoYWRvd1Bz
ZXVkb0lkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZWxlbWVudCA9PSBlbGVt
ZW50LT5kb2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGlmICghc2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRl
cyhlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5hZGRp
dGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBtX3N0eWxlZEVsZW1lbnQtPmFk
ZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQorICAgIGlmIChlbGVtZW50LT5h
ZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzdGF0ZS5zdHlsZWRFbGVt
ZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJ
blJ1bGVzLmNvbnRhaW5zKGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkK
QEAgLTEyMzgsNyArMTIyOCw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdp
dGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAKICAgICBib29sIGlzQ29u
dHJvbCA9IGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CiAKLSAgICBpZiAoaXNDb250
cm9sICE9IG1fZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICBpZiAoaXNDb250
cm9sICE9IHN0YXRlLmVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIGlmIChpc0NvbnRyb2wgJiYgIWNhblNoYXJlU3R5bGVXaXRoQ29u
dHJvbChlbGVtZW50KSkKQEAgLTEyNjIsMjAgKzEyNTIsMjAgQEAgYm9vbCBTdHlsZVJlc29sdmVy
OjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QK
ICAgICBpZiAoZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oZWxlbWVudCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSAmJiBtX2VsZW1lbnRMaW5rU3Rh
dGUgIT0gc3R5bGUtPmluc2lkZUxpbmsoKSkKKyAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkgJiYg
c3RhdGUuZWxlbWVudExpbmtTdGF0ZSAhPSBzdHlsZS0+aW5zaWRlTGluaygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgLy8gRGVueSBzaGFy
aW5nIHN0eWxlcyBiZXR3ZWVuIFdlYlZUVCBhbmQgbm9uLVdlYlZUVCBub2Rlcy4KLSAgICBpZiAo
ZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgIT0gbV9lbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQo
KSkKKyAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgIT0gc3RhdGUuZWxlbWVudC0+
aXNXZWJWVFRFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVt
ZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiBtX2VsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpICYm
IHRvV2ViVlRURWxlbWVudChlbGVtZW50KS0+d2ViVlRUTm9kZVR5cGUoKSAhPSB0b1dlYlZUVEVs
ZW1lbnQobV9lbGVtZW50KS0+d2ViVlRUTm9kZVR5cGUoKSkKKyAgICBpZiAoZWxlbWVudC0+aXNX
ZWJWVFRFbGVtZW50KCkgJiYgc3RhdGUuZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYgdG9X
ZWJWVFRFbGVtZW50KGVsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpICE9IHRvV2ViVlRURWxlbWVu
dChzdGF0ZS5lbGVtZW50KS0+d2ViVlRUTm9kZVR5cGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgaWYgKGVsZW1lbnQg
PT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCkg
fHwgbV9lbGVtZW50ID09IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxT
Y3JlZW5FbGVtZW50KCkpCisgICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+
d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCkgfHwgc3RhdGUuZWxlbWVudCA9PSBzdGF0
ZS5lbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMjk2
LDM2ICsxMjg2LDM4IEBAIGlubGluZSBTdHlsZWRFbGVtZW50KiBTdHlsZVJlc29sdmVyOjpmaW5k
U2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiBub2RlLCB1bnNpCiAKIFJlbmRlclN0eWxlKiBT
dHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiB7Ci0gICAgaWYgKCFtX3N0eWxlZEVs
ZW1lbnQgfHwgIW1fcGFyZW50U3R5bGUpCisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKyAg
ICBpZiAoIXN0YXRlLnN0eWxlZEVsZW1lbnQgfHwgIXN0YXRlLnBhcmVudFN0eWxlKQogICAgICAg
ICByZXR1cm4gMDsKKwogICAgIC8vIElmIHRoZSBlbGVtZW50IGhhcyBpbmxpbmUgc3R5bGUgaXQg
aXMgcHJvYmFibHkgdW5pcXVlLgotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxl
KCkpCisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCkpCiAgICAgICAg
IHJldHVybiAwOwogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aXNT
VkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3R5bGVkRWxlbWVudCkt
PmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQorICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVt
ZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oc3RhdGUuc3R5
bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQogICAgICAgICByZXR1
cm4gMDsKICNlbmRpZgogICAgIC8vIElkcyBzdG9wIHN0eWxlIHNoYXJpbmcgaWYgdGhleSBzaG93
IHVwIGluIHRoZSBzdHlsZXNoZWV0cy4KLSAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5oYXNJRCgp
ICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhtX3N0eWxlZEVsZW1lbnQtPmlkRm9y
U3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudC0+
aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMoc3RhdGUuc3R5bGVkRWxl
bWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQogICAgICAgICByZXR1cm4gMDsK
LSAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhtX2VsZW1lbnQtPnBhcmVudEVs
ZW1lbnQoKSkpCisgICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcoc3RhdGUuZWxl
bWVudC0+cGFyZW50RWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKG1fc3R5
bGVkRWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICBpZiAoc3RhdGUuc3R5
bGVkRWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgaWYgKG1fZWxlbWVudCA9PSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNzc1RhcmdldCgp
KQorICAgIGlmIChzdGF0ZS5lbGVtZW50ID09IHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPmNz
c1RhcmdldCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoZWxlbWVudEhhc0RpcmVjdGlv
bkF1dG8obV9lbGVtZW50KSkKKyAgICBpZiAoZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oc3RhdGUu
ZWxlbWVudCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQ2FjaGUgd2hldGhlciBtX2Vs
ZW1lbnQgaXMgYWZmZWN0ZWQgYnkgYW55IGtub3duIGNsYXNzIHNlbGVjdG9ycy4KICAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgYSBtZW1iZXIgdmFyaWFibGUuIFRoZSBzdHlsZSBzaGFy
aW5nIGNvZGUgY291bGQgYmUgZmFjdG9yZWQgb3V0IG9mIFN0eWxlUmVzb2x2ZXIuCi0gICAgbV9l
bGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMgPSBtX2VsZW1lbnQgJiYgbV9lbGVtZW50LT5oYXND
bGFzcygpICYmIGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMobV9lbGVtZW50LT5jbGFzc05hbWVz
KCkpOworICAgIHN0YXRlLmVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyA9IHN0YXRlLmVsZW1l
bnQgJiYgc3RhdGUuZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1
bGVzKHN0YXRlLmVsZW1lbnQtPmNsYXNzTmFtZXMoKSk7CiAKICAgICAvLyBDaGVjayBwcmV2aW91
cyBzaWJsaW5ncyBhbmQgdGhlaXIgY291c2lucy4KICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CiAg
ICAgdW5zaWduZWQgdmlzaXRlZE5vZGVDb3VudCA9IDA7CiAgICAgU3R5bGVkRWxlbWVudCogc2hh
cmVFbGVtZW50ID0gMDsKLSAgICBOb2RlKiBjb3VzaW5MaXN0ID0gbV9zdHlsZWRFbGVtZW50LT5w
cmV2aW91c1NpYmxpbmcoKTsKKyAgICBOb2RlKiBjb3VzaW5MaXN0ID0gc3RhdGUuc3R5bGVkRWxl
bWVudC0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgd2hpbGUgKGNvdXNpbkxpc3QpIHsKICAgICAg
ICAgc2hhcmVFbGVtZW50ID0gZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoY291c2luTGlzdCwg
Y291bnQpOwogICAgICAgICBpZiAoc2hhcmVFbGVtZW50KQpAQCAtMTM0Nyw3ICsxMzM5LDcgQEAg
UmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICBpZiAo
c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcygpKQogICAgICAgICByZXR1cm4g
MDsKICAgICAvLyBUcmFja2luZyBjaGlsZCBpbmRleCByZXF1aXJlcyB1bmlxdWUgc3R5bGUgZm9y
IGVhY2ggbm9kZS4gVGhpcyBtYXkgZ2V0IHNldCBieSB0aGUgc2libGluZyBydWxlIG1hdGNoIGFi
b3ZlLgotICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKG1fZWxlbWVudC0+cGFy
ZW50RWxlbWVudCgpKSkKKyAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhzdGF0
ZS5lbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1
cm4gc2hhcmVFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogfQpAQCAtMTU2NywxMCArMTU1OSwxMSBA
QCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQo
RWxlbWVudCogZWxlbWVudCwgUmVuZGVyUwogICAgICAgICByZXR1cm4gc19zdHlsZU5vdFlldEF2
YWlsYWJsZTsKICAgICB9CiAKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIGluaXRF
bGVtZW50KGVsZW1lbnQpOwogICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZWxlbWVudCwgZGVmYXVs
dFBhcmVudCk7Ci0gICAgbV9yZWdpb25Gb3JTdHlsaW5nID0gcmVnaW9uRm9yU3R5bGluZzsKLSAg
ICBpZiAoc2hhcmluZ0JlaGF2aW9yID09IEFsbG93U3R5bGVTaGFyaW5nICYmICFtX2Rpc3RyaWJ1
dGVkVG9JbnNlcnRpb25Qb2ludCkgeworICAgIHN0YXRlLnJlZ2lvbkZvclN0eWxpbmcgPSByZWdp
b25Gb3JTdHlsaW5nOworICAgIGlmIChzaGFyaW5nQmVoYXZpb3IgPT0gQWxsb3dTdHlsZVNoYXJp
bmcgJiYgIXN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCkgewogICAgICAgICBSZW5k
ZXJTdHlsZSogc2hhcmVkU3R5bGUgPSBsb2NhdGVTaGFyZWRTdHlsZSgpOwogICAgICAgICBpZiAo
c2hhcmVkU3R5bGUpCiAgICAgICAgICAgICByZXR1cm4gc2hhcmVkU3R5bGU7CkBAIC0xNTc4LDMz
ICsxNTcxLDMyIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxl
Rm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBSZW5kZXJTCiAKICAgICBSZWZQdHI8UmVuZGVy
U3R5bGU+IGNsb25lRm9yUGFyZW50OwogCi0gICAgaWYgKG1fcGFyZW50U3R5bGUpIHsKLSAgICAg
ICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLSAgICAgICAgbV9zdHlsZS0+aW5o
ZXJpdEZyb20obV9wYXJlbnRTdHlsZSwgaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1lbnQpID8gUmVu
ZGVyU3R5bGU6OkF0U2hhZG93Qm91bmRhcnkgOiBSZW5kZXJTdHlsZTo6Tm90QXRTaGFkb3dCb3Vu
ZGFyeSk7CisgICAgaWYgKHN0YXRlLnBhcmVudFN0eWxlKSB7CisgICAgICAgIHN0YXRlLnN0eWxl
ID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgICAgICBzdGF0ZS5zdHlsZS0+aW5oZXJpdEZy
b20oc3RhdGUucGFyZW50U3R5bGUsIGlzQXRTaGFkb3dCb3VuZGFyeShlbGVtZW50KSA/IFJlbmRl
clN0eWxlOjpBdFNoYWRvd0JvdW5kYXJ5IDogUmVuZGVyU3R5bGU6Ok5vdEF0U2hhZG93Qm91bmRh
cnkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fc3R5bGUgPSBkZWZhdWx0U3R5bGVGb3JFbGVt
ZW50KCk7Ci0gICAgICAgIGNsb25lRm9yUGFyZW50ID0gUmVuZGVyU3R5bGU6OmNsb25lKHN0eWxl
KCkpOwotICAgICAgICBtX3BhcmVudFN0eWxlID0gY2xvbmVGb3JQYXJlbnQuZ2V0KCk7CisgICAg
ICAgIHN0YXRlLnN0eWxlID0gZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpOworICAgICAgICBjbG9u
ZUZvclBhcmVudCA9IFJlbmRlclN0eWxlOjpjbG9uZShzdGF0ZS5zdHlsZS5nZXQoKSk7CisgICAg
ICAgIHN0YXRlLnBhcmVudFN0eWxlID0gY2xvbmVGb3JQYXJlbnQuZ2V0KCk7CiAgICAgfQogICAg
IC8vIGNvbnRlbnRlZGl0YWJsZSBhdHRyaWJ1dGUgKGltcGxlbWVudGVkIGJ5IC13ZWJraXQtdXNl
ci1tb2RpZnkpIHNob3VsZAogICAgIC8vIGJlIHByb3BhZ2F0ZWQgZnJvbSBzaGFkb3cgaG9zdCB0
byBkaXN0cmlidXRlZCBub2RlLgotICAgIGlmIChtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2lu
dCkgeworICAgIGlmIChzdGF0ZS5kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQpIHsKICAgICAg
ICAgaWYgKEVsZW1lbnQqIHBhcmVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAg
ICAgICAgICAgaWYgKFJlbmRlclN0eWxlKiBzdHlsZU9mU2hhZG93SG9zdCA9IHBhcmVudC0+cmVu
ZGVyU3R5bGUoKSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRVc2VyTW9kaWZ5KHN0eWxl
T2ZTaGFkb3dIb3N0LT51c2VyTW9kaWZ5KCkpOworICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
LT5zZXRVc2VyTW9kaWZ5KHN0eWxlT2ZTaGFkb3dIb3N0LT51c2VyTW9kaWZ5KCkpOwogICAgICAg
ICB9CiAgICAgfQogCiAgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpKSB7Ci0gICAgICAgIG1fc3R5
bGUtPnNldElzTGluayh0cnVlKTsKLSAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXRlID0gbV9l
bGVtZW50TGlua1N0YXRlOwotICAgICAgICBpZiAobV9lbGVtZW50TGlua1N0YXRlICE9IE5vdElu
c2lkZUxpbmspIHsKKyAgICAgICAgc3RhdGUuc3R5bGUtPnNldElzTGluayh0cnVlKTsKKyAgICAg
ICAgRUluc2lkZUxpbmsgbGlua1N0YXRlID0gc3RhdGUuZWxlbWVudExpbmtTdGF0ZTsKKyAgICAg
ICAgaWYgKGxpbmtTdGF0ZSAhPSBOb3RJbnNpZGVMaW5rKSB7CiAgICAgICAgICAgICBib29sIGZv
cmNlVmlzaXRlZCA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShl
bGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZCk7CiAgICAgICAgICAgICBpZiAoZm9y
Y2VWaXNpdGVkKQogICAgICAgICAgICAgICAgIGxpbmtTdGF0ZSA9IEluc2lkZVZpc2l0ZWRMaW5r
OwogICAgICAgICB9Ci0KLSAgICAgICAgbV9zdHlsZS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdGUp
OworICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdGUpOwogICAgIH0K
IAogICAgIGVuc3VyZURlZmF1bHRTdHlsZVNoZWV0c0ZvckVsZW1lbnQoZWxlbWVudCk7CkBAIC0x
NjE4LDE3ICsxNjEwLDE3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6
OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBSZW5kZXJTCiAgICAgYXBwbHlNYXRj
aGVkUHJvcGVydGllcyhtYXRjaFJlc3VsdCwgZWxlbWVudCk7CiAKICAgICAvLyBDbGVhbiB1cCBv
dXIgc3R5bGUgb2JqZWN0J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3Ro
ZXIgZml4dXBzKS4KLSAgICBhZGp1c3RSZW5kZXJTdHlsZShzdHlsZSgpLCBtX3BhcmVudFN0eWxl
LCBlbGVtZW50KTsKKyAgICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0ZS5zdHlsZS5nZXQoKSwgc3Rh
dGUucGFyZW50U3R5bGUsIGVsZW1lbnQpOwogCiAgICAgaW5pdEVsZW1lbnQoMCk7IC8vIENsZWFy
IG91dCBmb3IgdGhlIG5leHQgcmVzb2x2ZS4KIAogICAgIGlmIChjbG9uZUZvclBhcmVudCkKLSAg
ICAgICAgbV9wYXJlbnRTdHlsZSA9IDA7CisgICAgICAgIHN0YXRlLnBhcmVudFN0eWxlID0gMDsK
IAogICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIAogICAgIC8vIE5v
dyByZXR1cm4gdGhlIHN0eWxlLgotICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKKyAgICBy
ZXR1cm4gc3RhdGUuc3R5bGUucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbGVt
ZW50U3R5bGUsIGNvbnN0IFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1lLCBLZXlmcmFtZVZhbHVlJiBr
ZXlmcmFtZVZhbHVlKQpAQCAtMTYzNywxMiArMTYyOSwxNCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBl
bGVtZQogICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQogICAgICAgICBhZGRNYXRjaGVk
UHJvcGVydGllcyhyZXN1bHQsIGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpOwogCi0gICAgQVNTRVJU
KCFtX3N0eWxlKTsKKyAgICBBU1NFUlQoIW1fc3RhdGUuc3R5bGUpOworCisgICAgU3RhdGUmIHN0
YXRlID0gbV9zdGF0ZTsKIAogICAgIC8vIENyZWF0ZSB0aGUgc3R5bGUKLSAgICBtX3N0eWxlID0g
UmVuZGVyU3R5bGU6OmNsb25lKGVsZW1lbnRTdHlsZSk7CisgICAgc3RhdGUuc3R5bGUgPSBSZW5k
ZXJTdHlsZTo6Y2xvbmUoZWxlbWVudFN0eWxlKTsKIAotICAgIG1fbGluZUhlaWdodFZhbHVlID0g
MDsKKyAgICBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSAwOwogCiAgICAgLy8gV2UgZG9uJ3QgbmVl
ZCB0byBib3RoZXIgd2l0aCAhaW1wb3J0YW50LiBTaW5jZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25l
CiAgICAgLy8gZGVjbCwgdGhlcmUncyBub3RoaW5nIHRvIG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0
aGUgZmlyc3QgcHJvcGVydGllcy4KQEAgLTE2NTQsOCArMTY0OCw4IEBAIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5
bGUqIGVsZW1lCiAgICAgdXBkYXRlRm9udCgpOwogCiAgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0
IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplCi0gICAgaWYgKG1f
bGluZUhlaWdodFZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhl
aWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOworICAgIGlmIChzdGF0ZS5saW5lSGVpZ2h0VmFsdWUp
CisgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5l
SGVpZ2h0VmFsdWUpOwogCiAgICAgLy8gTm93IGRvIHJlc3Qgb2YgdGhlIHByb3BlcnRpZXMuCiAg
ICAgaWYgKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpCkBAIC0xNjgyLDcgKzE2NzYsNyBAQCBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0
IFJlbmRlclN0eWxlKiBlbGVtZQogCiAgICAgZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNv
bHZlcigpOwogCi0gICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOworICAgIHJldHVybiBzdGF0
ZS5zdHlsZS5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHls
ZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHls
ZSwgS2V5ZnJhbWVMaXN0JiBsaXN0KQpAQCAtMTc1MCwxNSArMTc0NCwxNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJl
bmRlclN0eWxlKiBlbAogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpw
c2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpCiB7Ci0gICAgQVNTRVJUKG1fcGFyZW50U3R5bGUpOworICAgIEFT
U0VSVChtX3N0YXRlLnBhcmVudFN0eWxlKTsKICAgICBpZiAoIWUpCiAgICAgICAgIHJldHVybiAw
OwogCisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKwogICAgIGluaXRFbGVtZW50KGUpOwog
CiAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlLCBwYXJlbnRTdHlsZSwgcHNldWRvKTsKLSAgICBt
X3N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgIG1fc3R5bGUtPmluaGVyaXRGcm9t
KG1fcGFyZW50U3R5bGUpOworICAgIHN0YXRlLnN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgp
OworICAgIHN0YXRlLnN0eWxlLT5pbmhlcml0RnJvbShtX3N0YXRlLnBhcmVudFN0eWxlKTsKIAog
ICAgIC8vIFNpbmNlIHdlIGRvbid0IHVzZSBwc2V1ZG8tZWxlbWVudHMgaW4gYW55IG9mIG91ciBx
dWlyay9wcmludCB1c2VyIGFnZW50IHJ1bGVzLCBkb24ndCB3YXN0ZSB0aW1lIHdhbGtpbmcKICAg
ICAvLyB0aG9zZSBydWxlcy4KQEAgLTE3NzUsMTIgKzE3NzEsMTIgQEAgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBz
ZXVkbywgRWwKICAgICBpZiAobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1fc3R5bGUtPnNldFN0eWxlVHlwZShwc2V1ZG8p
OworICAgIHN0YXRlLnN0eWxlLT5zZXRTdHlsZVR5cGUocHNldWRvKTsKIAogICAgIGFwcGx5TWF0
Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1bHQsIGUpOwogCiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0
eWxlIG9iamVjdCdzIGRpc3BsYXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZp
eHVwcykuCi0gICAgYWRqdXN0UmVuZGVyU3R5bGUoc3R5bGUoKSwgcGFyZW50U3R5bGUsIDApOwor
ICAgIGFkanVzdFJlbmRlclN0eWxlKHN0YXRlLnN0eWxlLmdldCgpLCBtX3N0YXRlLnBhcmVudFN0
eWxlLCAwKTsKIAogICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzIHJlZmVyZW5jZWQgYnkg
dGhpcyBzdHlsZS4KICAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOwpAQCAtMTc4OCwxNSArMTc4
NCwxNSBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHls
ZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbAogICAgIGRvY3VtZW50KCktPmRpZEFjY2Vz
c1N0eWxlUmVzb2x2ZXIoKTsKIAogICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgotICAgIHJl
dHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3RhdGUuc3R5bGUucmVsZWFzZSgp
OwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBh
Z2UoaW50IHBhZ2VJbmRleCkKIHsKICAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCkt
PmRvY3VtZW50RWxlbWVudCgpKTsgLy8gbV9yb290RWxlbWVudFN0eWxlIHdpbGwgYmUgc2V0IHRv
IHRoZSBkb2N1bWVudCBzdHlsZS4KIAotICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRl
KCk7Ci0gICAgbV9zdHlsZS0+aW5oZXJpdEZyb20obV9yb290RWxlbWVudFN0eWxlKTsKKyAgICBt
X3N0YXRlLnN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgIG1fc3RhdGUuc3R5bGUt
PmluaGVyaXRGcm9tKG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSk7CiAKICAgICBjb25zdCBib29s
IGlzTGVmdCA9IGlzTGVmdFBhZ2UocGFnZUluZGV4KTsKICAgICBjb25zdCBib29sIGlzRmlyc3Qg
PSBpc0ZpcnN0UGFnZShwYWdlSW5kZXgpOwpAQCAtMTgwNyw3ICsxODAzLDcgQEAgUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgp
CiAgICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBtX3VzZXJTdHlsZS5nZXQoKSwgaXNMZWZ0LCBp
c0ZpcnN0LCBwYWdlKTsKICAgICAvLyBPbmx5IGNvbnNpZGVyIHRoZSBnbG9iYWwgYXV0aG9yIFJ1
bGVTZXQgZm9yIEBwYWdlIHJ1bGVzLCBhcyBwZXIgdGhlIEhUTUw1IHNwZWMuCiAgICAgbWF0Y2hQ
YWdlUnVsZXMocmVzdWx0LCBtX2F1dGhvclN0eWxlLmdldCgpLCBpc0xlZnQsIGlzRmlyc3QsIHBh
Z2UpOwotICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBtX3N0YXRlLmxpbmVIZWlnaHRW
YWx1ZSA9IDA7CiAgICAgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAjaWYgRU5BQkxFKENT
U19WQVJJQUJMRVMpCiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRp
b25zPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0g
MSwgaW5oZXJpdGVkT25seSk7CkBAIC0xODE4LDggKzE4MTQsOCBAQCBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICB1
cGRhdGVGb250KCk7CiAKICAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3Vy
ZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUuCi0gICAgaWYgKG1fbGluZUhlaWdodFZhbHVl
KQotICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5lSGVp
Z2h0VmFsdWUpOworICAgIGlmIChtX3N0YXRlLmxpbmVIZWlnaHRWYWx1ZSkKKyAgICAgICAgYXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fc3RhdGUubGluZUhlaWdodFZhbHVl
KTsKIAogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihy
ZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5o
ZXJpdGVkT25seSk7CiAKQEAgLTE4MjksMjAgKzE4MjUsMjAgQEAgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiAgICAgZG9j
dW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCiAgICAgLy8gTm93IHJldHVybiB0
aGUgc3R5bGUuCi0gICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOworICAgIHJldHVybiBtX3N0
YXRlLnN0eWxlLnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVS
ZXNvbHZlcjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpCiB7Ci0gICAgbV9zdHlsZSA9IFJlbmRl
clN0eWxlOjpjcmVhdGUoKTsKKyAgICBtX3N0YXRlLnN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0
ZSgpOwogICAgIC8vIE1ha2Ugc3VyZSBvdXIgZm9udHMgYXJlIGluaXRpYWxpemVkIGlmIHdlIGRv
bid0IGluaGVyaXQgdGhlbSBmcm9tIG91ciBwYXJlbnQgc3R5bGUuCiAgICAgaWYgKFNldHRpbmdz
KiBzZXR0aW5ncyA9IGRvY3VtZW50U2V0dGluZ3MoKSkgewogICAgICAgICBpbml0aWFsaXplRm9u
dFN0eWxlKHNldHRpbmdzKTsKLSAgICAgICAgbV9zdHlsZS0+Zm9udCgpLnVwZGF0ZShmb250U2Vs
ZWN0b3IoKSk7CisgICAgICAgIG1fc3RhdGUuc3R5bGUtPmZvbnQoKS51cGRhdGUoZm9udFNlbGVj
dG9yKCkpOwogICAgIH0gZWxzZQotICAgICAgICBtX3N0eWxlLT5mb250KCkudXBkYXRlKDApOwor
ICAgICAgICBtX3N0YXRlLnN0eWxlLT5mb250KCkudXBkYXRlKDApOwogCi0gICAgcmV0dXJuIG1f
c3R5bGUucmVsZWFzZSgpOworICAgIHJldHVybiBtX3N0YXRlLnN0eWxlLnJlbGVhc2UoKTsKIH0K
IAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JUZXh0KFRl
eHQqIHRleHROb2RlKQpAQCAtMjEzMCw3ICsyMTI2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
ZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHkKIAogICAgIC8vIExldCB0aGUgdGhlbWUgYWxzbyBoYXZlIGEgY3JhY2sgYXQgYWRqdXN0aW5n
IHRoZSBzdHlsZS4KICAgICBpZiAoc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgUmVu
ZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1c3RTdHlsZSh0aGlzLCBzdHlsZSwgZSwgbV9o
YXNVQUFwcGVhcmFuY2UsIG1fYm9yZGVyRGF0YSwgbV9iYWNrZ3JvdW5kRGF0YSwgbV9iYWNrZ3Jv
dW5kQ29sb3IpOworICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmFkanVzdFN0
eWxlKHRoaXMsIHN0eWxlLCBlLCBtX3N0YXRlLmhhc1VBQXBwZWFyYW5jZSwgbV9zdGF0ZS5ib3Jk
ZXJEYXRhLCBtX3N0YXRlLmJhY2tncm91bmREYXRhLCBtX3N0YXRlLmJhY2tncm91bmRDb2xvcik7
CiAKICAgICAvLyBJZiB3ZSBoYXZlIGZpcnN0LWxldHRlciBwc2V1ZG8gc3R5bGUsIGRvIG5vdCBz
aGFyZSB0aGlzIHN0eWxlLgogICAgIGlmIChzdHlsZS0+aGFzUHNldWRvU3R5bGUoRklSU1RfTEVU
VEVSKSkKQEAgLTIyMTMsMjQgKzIyMDksMjUgQEAgc3RhdGljIHZvaWQgY2hlY2tGb3JPcmllbnRh
dGlvbkNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUpCiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6dXBk
YXRlRm9udCgpCiB7Ci0gICAgaWYgKCFtX2ZvbnREaXJ0eSkKKyAgICBpZiAoIW1fc3RhdGUuZm9u
dERpcnR5KQogICAgICAgICByZXR1cm47CiAKICAgICBjaGVja0ZvclRleHRTaXplQWRqdXN0KCk7
Ci0gICAgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKHN0eWxlKCksIG1fcGFyZW50U3R5bGUp
OwotICAgIGNoZWNrRm9yWm9vbUNoYW5nZShzdHlsZSgpLCBtX3BhcmVudFN0eWxlKTsKLSAgICBj
aGVja0Zvck9yaWVudGF0aW9uQ2hhbmdlKHN0eWxlKCkpOwotICAgIG1fc3R5bGUtPmZvbnQoKS51
cGRhdGUobV9mb250U2VsZWN0b3IpOwotICAgIG1fZm9udERpcnR5ID0gZmFsc2U7CisgICAgUmVu
ZGVyU3R5bGUqIHN0eWxlID0gbV9zdGF0ZS5zdHlsZS5nZXQoKTsKKyAgICBjaGVja0ZvckdlbmVy
aWNGYW1pbHlDaGFuZ2Uoc3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUpOworICAgIGNoZWNrRm9y
Wm9vbUNoYW5nZShzdHlsZSwgbV9zdGF0ZS5wYXJlbnRTdHlsZSk7CisgICAgY2hlY2tGb3JPcmll
bnRhdGlvbkNoYW5nZShzdHlsZSk7CisgICAgbV9zdGF0ZS5zdHlsZS0+Zm9udCgpLnVwZGF0ZSht
X2ZvbnRTZWxlY3Rvcik7CisgICAgbV9zdGF0ZS5mb250RGlydHkgPSBmYWxzZTsKIH0KIAogdm9p
ZCBTdHlsZVJlc29sdmVyOjpjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKQogewotICAgIG1faGFz
VUFBcHBlYXJhbmNlID0gbV9zdHlsZS0+aGFzQXBwZWFyYW5jZSgpOwotICAgIGlmIChtX2hhc1VB
QXBwZWFyYW5jZSkgewotICAgICAgICBtX2JvcmRlckRhdGEgPSBtX3N0eWxlLT5ib3JkZXIoKTsK
LSAgICAgICAgbV9iYWNrZ3JvdW5kRGF0YSA9ICptX3N0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7
Ci0gICAgICAgIG1fYmFja2dyb3VuZENvbG9yID0gbV9zdHlsZS0+YmFja2dyb3VuZENvbG9yKCk7
CisgICAgbV9zdGF0ZS5oYXNVQUFwcGVhcmFuY2UgPSBtX3N0YXRlLnN0eWxlLT5oYXNBcHBlYXJh
bmNlKCk7CisgICAgaWYgKG1fc3RhdGUuaGFzVUFBcHBlYXJhbmNlKSB7CisgICAgICAgIG1fc3Rh
dGUuYm9yZGVyRGF0YSA9IG1fc3RhdGUuc3R5bGUtPmJvcmRlcigpOworICAgICAgICBtX3N0YXRl
LmJhY2tncm91bmREYXRhID0gKm1fc3RhdGUuc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKTsKKyAg
ICAgICAgbV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IgPSBtX3N0YXRlLnN0eWxlLT5iYWNrZ3JvdW5k
Q29sb3IoKTsKICAgICB9CiB9CiAKQEAgLTIyNjAsNDkgKzIyNTcsNTEgQEAgUGFzc1JlZlB0cjxD
U1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxl
bWVudCogZSwgUHMKICAgICB9CiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMg
JiYgKHJ1bGVzVG9JbmNsdWRlICYgQXV0aG9yQ1NTUnVsZXMpKSB7Ci0gICAgICAgIG1fc2FtZU9y
aWdpbk9ubHkgPSAhKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcyk7CisgICAg
ICAgIG1fc3RhdGUuc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmln
aW5DU1NSdWxlcyk7CiAKICAgICAgICAgLy8gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVl
dHMuCiAgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYgRW1w
dHlDU1NSdWxlcyk7CiAKLSAgICAgICAgbV9zYW1lT3JpZ2luT25seSA9IGZhbHNlOworICAgICAg
ICBtX3N0YXRlLnNhbWVPcmlnaW5Pbmx5ID0gZmFsc2U7CiAgICAgfQogCiAgICAgbV9zZWxlY3Rv
ckNoZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlJlc29sdmluZ1N0eWxlKTsKIAotICAg
IHJldHVybiBtX3J1bGVMaXN0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gbV9zdGF0ZS5ydWxlTGlz
dC5yZWxlYXNlKCk7CiB9CiAKIGlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OnJ1bGVNYXRjaGVz
KGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCiB7
Ci0gICAgbV9keW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgU3RhdGUmIHN0YXRlID0gbV9z
dGF0ZTsKKyAgICBzdGF0ZS5keW5hbWljUHNldWRvID0gTk9QU0VVRE87CiAKICAgICBpZiAocnVs
ZURhdGEuaGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKCkpIHsKICAgICAgICAgLy8gV2Uga25vdyB0
aGlzIHNlbGVjdG9yIGRvZXMgbm90IGluY2x1ZGUgYW55IHBzZXVkbyBlbGVtZW50cy4KLSAgICAg
ICAgaWYgKG1fcHNldWRvU3R5bGUgIT0gTk9QU0VVRE8pCisgICAgICAgIGlmIChzdGF0ZS5wc2V1
ZG9TdHlsZSAhPSBOT1BTRVVETykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
Ly8gV2Uga25vdyBhIHN1ZmZpY2llbnRseSBzaW1wbGUgc2luZ2xlIHBhcnQgc2VsZWN0b3IgbWF0
Y2hlcyBzaW1wbHkgYmVjYXVzZSB3ZSBmb3VuZCBpdCBmcm9tIHRoZSBydWxlIGhhc2guCiAgICAg
ICAgIC8vIFRoaXMgaXMgbGltaXRlZCB0byBIVE1MIG9ubHkgc28gd2UgZG9uJ3QgbmVlZCB0byBj
aGVjayB0aGUgbmFtZXNwYWNlLgotICAgICAgICBpZiAocnVsZURhdGEuaGFzUmlnaHRtb3N0U2Vs
ZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goKSAmJiBtX2VsZW1lbnQtPmlzSFRNTEVs
ZW1lbnQoKSkgeworICAgICAgICBpZiAocnVsZURhdGEuaGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRj
aGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goKSAmJiBzdGF0ZS5lbGVtZW50LT5pc0hUTUxFbGVtZW50
KCkpIHsKICAgICAgICAgICAgIGlmICghcnVsZURhdGEuaGFzTXVsdGlwYXJ0U2VsZWN0b3IoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBpZiAocnVs
ZURhdGEuc2VsZWN0b3IoKS0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6VGFnICYmICFTZWxlY3Rv
ckNoZWNrZXI6OnRhZ01hdGNoZXMobV9lbGVtZW50LCBydWxlRGF0YS5zZWxlY3RvcigpLT50YWdR
TmFtZSgpKSkKKyAgICAgICAgaWYgKHJ1bGVEYXRhLnNlbGVjdG9yKCktPm1fbWF0Y2ggPT0gQ1NT
U2VsZWN0b3I6OlRhZyAmJiAhU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKHN0YXRlLmVsZW1l
bnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCktPnRhZ1FOYW1lKCkpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBpZiAoIVNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrUmlnaHRtb3N0
QXR0cmlidXRlU2VsZWN0b3IobV9lbGVtZW50LCBydWxlRGF0YS5zZWxlY3RvcigpKSkKKyAgICAg
ICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVj
dG9yKHN0YXRlLmVsZW1lbnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCkpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gbV9zZWxlY3RvckNoZWNrZXIuZmFzdENoZWNrKHJ1
bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCk7CisKKyAgICAgICAgcmV0dXJuIG1fc2VsZWN0
b3JDaGVja2VyLmZhc3RDaGVjayhydWxlRGF0YS5zZWxlY3RvcigpLCBzdGF0ZS5lbGVtZW50KTsK
ICAgICB9CiAKICAgICAvLyBTbG93IHBhdGguCi0gICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rv
ckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCwg
U2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFibGVkKTsKLSAgICBjb250ZXh0LmVsZW1l
bnRTdHlsZSA9IHN0eWxlKCk7CisgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5n
Q29udGV4dCBjb250ZXh0KHJ1bGVEYXRhLnNlbGVjdG9yKCksIHN0YXRlLmVsZW1lbnQsIFNlbGVj
dG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRW5hYmxlZCk7CisgICAgY29udGV4dC5lbGVtZW50U3R5
bGUgPSBzdGF0ZS5zdHlsZS5nZXQoKTsKICAgICBjb250ZXh0LnNjb3BlID0gc2NvcGU7Ci0gICAg
Y29udGV4dC5wc2V1ZG9TdHlsZSA9IG1fcHNldWRvU3R5bGU7Ci0gICAgU2VsZWN0b3JDaGVja2Vy
OjpNYXRjaCBtYXRjaCA9IG1fc2VsZWN0b3JDaGVja2VyLm1hdGNoKGNvbnRleHQsIG1fZHluYW1p
Y1BzZXVkbywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KCkpOworICAgIGNvbnRleHQucHNl
dWRvU3R5bGUgPSBzdGF0ZS5wc2V1ZG9TdHlsZTsKKyAgICBTZWxlY3RvckNoZWNrZXI6Ok1hdGNo
IG1hdGNoID0gbV9zZWxlY3RvckNoZWNrZXIubWF0Y2goY29udGV4dCwgc3RhdGUuZHluYW1pY1Bz
ZXVkbywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KCkpOwogICAgIGlmIChtYXRjaCAhPSBT
ZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChtX3BzZXVkb1N0eWxlICE9IE5PUFNFVURPICYmIG1fcHNldWRvU3R5bGUgIT0gbV9k
eW5hbWljUHNldWRvKQorICAgIGlmIChzdGF0ZS5wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETyAmJiBz
dGF0ZS5wc2V1ZG9TdHlsZSAhPSBzdGF0ZS5keW5hbWljUHNldWRvKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yMzEyLDcgKzIzMTEsNyBAQCBib29sIFN0
eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9uU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lv
blNlbGVjdG9yLCBFbGVtZQogICAgIGlmICghcmVnaW9uU2VsZWN0b3IgfHwgIXJlZ2lvbkVsZW1l
bnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fcHNldWRvU3R5bGUgPSBOT1BTRVVE
TzsKKyAgICBtX3N0YXRlLnBzZXVkb1N0eWxlID0gTk9QU0VVRE87CiAKICAgICBmb3IgKGNvbnN0
IENTU1NlbGVjdG9yKiBzID0gcmVnaW9uU2VsZWN0b3I7IHM7IHMgPSBDU1NTZWxlY3Rvckxpc3Q6
Om5leHQocykpCiAgICAgICAgIGlmIChtX3NlbGVjdG9yQ2hlY2tlci5tYXRjaGVzKHMsIHJlZ2lv
bkVsZW1lbnQpKQpAQCAtMjMzNyw3ICsyMzM2LDcgQEAgTGVuZ3RoIFN0eWxlUmVzb2x2ZXI6OmNv
bnZlcnRUb0Zsb2F0TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgUmUK
IHRlbXBsYXRlIDxTdHlsZVJlc29sdmVyOjpTdHlsZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgogdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCog
cHJvcGVydGllcywgU3R5bGVSdWxlKiBydWxlLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVy
aXRlZE9ubHksIFByb3BlcnR5V2hpdGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5cGUpCiB7
Ci0gICAgQVNTRVJUKChwcm9wZXJ0eVdoaXRlbGlzdFR5cGUgIT0gUHJvcGVydHlXaGl0ZWxpc3RS
ZWdpb24pIHx8IG1fcmVnaW9uRm9yU3R5bGluZyk7CisgICAgQVNTRVJUKChwcm9wZXJ0eVdoaXRl
bGlzdFR5cGUgIT0gUHJvcGVydHlXaGl0ZWxpc3RSZWdpb24pIHx8IG1fc3RhdGUucmVnaW9uRm9y
U3R5bGluZyk7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFByb2Nlc3NSdWxlKGRvY3VtZW50KCksIHJ1bGUs
IHRoaXMpOwogCiAgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IHByb3BlcnRpZXMtPnByb3Bl
cnR5Q291bnQoKTsKQEAgLTIzODEsNyArMjM4MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVs
CiAgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShjdXJyZW50LmlkKCksIGN1cnJlbnQudmFs
dWUoKSk7CiAgICAgICAgICAgICAvLyB3ZSBhcHBseSBsaW5lLWhlaWdodCBsYXRlcgogICAgICAg
ICAgICAgZWxzZSBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQotICAgICAg
ICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gY3VycmVudC52YWx1ZSgpOworICAgICAgICAg
ICAgICAgIG1fc3RhdGUubGluZUhlaWdodFZhbHVlID0gY3VycmVudC52YWx1ZSgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG93UHJpb3JpdHlQcm9wZXJ0aWVzOgogICAgICAg
ICAgICAgaWYgKHByb3BlcnR5ID4gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQpAQCAtMjM5NywxOCAr
MjM5NiwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29u
c3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBib29sCiAgICAgaWYgKHN0YXJ0SW5kZXggPT0g
LTEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3N0eWxlLT5pbnNpZGVMaW5rKCkgIT0g
Tm90SW5zaWRlTGluaykgeworICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgaWYgKHN0
YXRlLnN0eWxlLT5pbnNpZGVMaW5rKCkgIT0gTm90SW5zaWRlTGluaykgewogICAgICAgICBmb3Ig
KGludCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgKytpKSB7CiAgICAgICAgICAgICBj
b25zdCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hlZFByb3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5t
YXRjaGVkUHJvcGVydGllc1tpXTsKICAgICAgICAgICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUg
PSBtYXRjaGVkUHJvcGVydGllcy5saW5rTWF0Y2hUeXBlOwogICAgICAgICAgICAgLy8gRklYTUU6
IEl0IHdvdWxkIGJlIG5pY2VyIHRvIHBhc3MgdGhlc2UgYXMgYXJndW1lbnRzIGJ1dCB0aGF0IHJl
cXVpcmVzIGNoYW5nZXMgaW4gbWFueSBwbGFjZXMuCi0gICAgICAgICAgICBtX2FwcGx5UHJvcGVy
dHlUb1JlZ3VsYXJTdHlsZSA9IGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNo
TGluazsKLSAgICAgICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGxp
bmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZDsKKyAgICAgICAgICAg
IHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IGxpbmtNYXRjaFR5cGUgJiBTZWxl
Y3RvckNoZWNrZXI6Ok1hdGNoTGluazsKKyAgICAgICAgICAgIHN0YXRlLmFwcGx5UHJvcGVydHlU
b1Zpc2l0ZWRMaW5rU3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRj
aFZpc2l0ZWQ7CiAKICAgICAgICAgICAgIGFwcGx5UHJvcGVydGllczxwYXNzPihtYXRjaGVkUHJv
cGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlz
SW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5
cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUpKTsKICAgICAgICAgfQotICAgICAg
ICBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IHRydWU7Ci0gICAgICAgIG1fYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGZhbHNlOworICAgICAgICBzdGF0ZS5hcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUgPSB0cnVlOworICAgICAgICBzdGF0ZS5hcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Zm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewpAQCAtMjUxNiw2
ICsyNTE2LDcgQEAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVJbk1hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUmUKIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNv
bnN0IEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKGVsZW1lbnQpOworICAgIFN0YXRl
JiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgdW5zaWduZWQgY2FjaGVIYXNoID0gbWF0Y2hSZXN1bHQu
aXNDYWNoZWFibGUgPyBjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKG1hdGNoUmVzdWx0Lm1h
dGNoZWRQcm9wZXJ0aWVzLmRhdGEoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6
ZSgpKSA6IDA7CiAgICAgYm9vbCBhcHBseUluaGVyaXRlZE9ubHkgPSBmYWxzZTsKICAgICBjb25z
dCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSogY2FjaGVJdGVtID0gMDsKQEAgLTI1MjMsMTUg
KzI1MjQsMTUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNv
bnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICAgICAgLy8gV2UgY2FuIGJ1
aWxkIHVwIHRoZSBzdHlsZSBieSBjb3B5aW5nIG5vbi1pbmhlcml0ZWQgcHJvcGVydGllcyBmcm9t
IGFuIGVhcmxpZXIgc3R5bGUgb2JqZWN0IGJ1aWx0IHVzaW5nIHRoZSBzYW1lIGV4YWN0CiAgICAg
ICAgIC8vIHN0eWxlIGRlY2xhcmF0aW9ucy4gV2UgdGhlbiBvbmx5IG5lZWQgdG8gYXBwbHkgdGhl
IGluaGVyaXRlZCBwcm9wZXJ0aWVzLCBpZiBhbnksIGFzIHRoZWlyIHZhbHVlcyBjYW4gZGVwZW5k
IG9uIHRoZSAKICAgICAgICAgLy8gZWxlbWVudCBjb250ZXh0LiBUaGlzIGlzIGZhc3QgYW5kIHNh
dmVzIG1lbW9yeSBieSByZXVzaW5nIHRoZSBzdHlsZSBkYXRhIHN0cnVjdHVyZXMuCi0gICAgICAg
IG1fc3R5bGUtPmNvcHlOb25Jbmhlcml0ZWRGcm9tKGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0
KCkpOwotICAgICAgICBpZiAobV9wYXJlbnRTdHlsZS0+aW5oZXJpdGVkRGF0YVNoYXJlZChjYWNo
ZUl0ZW0tPnBhcmVudFJlbmRlclN0eWxlLmdldCgpKSAmJiAhaXNBdFNoYWRvd0JvdW5kYXJ5KGVs
ZW1lbnQpKSB7Ci0gICAgICAgICAgICBFSW5zaWRlTGluayBsaW5rU3RhdHVzID0gbV9zdHlsZS0+
aW5zaWRlTGluaygpOworICAgICAgICBzdGF0ZS5zdHlsZS0+Y29weU5vbkluaGVyaXRlZEZyb20o
Y2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7CisgICAgICAgIGlmIChzdGF0ZS5wYXJlbnRT
dHlsZS0+aW5oZXJpdGVkRGF0YVNoYXJlZChjYWNoZUl0ZW0tPnBhcmVudFJlbmRlclN0eWxlLmdl
dCgpKSAmJiAhaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1lbnQpKSB7CisgICAgICAgICAgICBFSW5z
aWRlTGluayBsaW5rU3RhdHVzID0gc3RhdGUuc3R5bGUtPmluc2lkZUxpbmsoKTsKICAgICAgICAg
ICAgIC8vIElmIHRoZSBjYWNoZSBpdGVtIHBhcmVudCBzdHlsZSBoYXMgaWRlbnRpY2FsIGluaGVy
aXRlZCBwcm9wZXJ0aWVzIHRvIHRoZSBjdXJyZW50IHBhcmVudCBzdHlsZSB0aGVuIHRoZQogICAg
ICAgICAgICAgLy8gcmVzdWx0aW5nIHN0eWxlIHdpbGwgYmUgaWRlbnRpY2FsIHRvby4gV2UgY29w
eSB0aGUgaW5oZXJpdGVkIHByb3BlcnRpZXMgb3ZlciBmcm9tIHRoZSBjYWNoZSBhbmQgYXJlIGRv
bmUuCi0gICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0
eWxlLmdldCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5pbmhlcml0RnJvbShjYWNoZUl0
ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKIAogICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSB0
aGUgbGluayBzdGF0dXMgaXMgdHJlYXRlZCBsaWtlIGFuIGluaGVyaXRlZCBwcm9wZXJ0eS4gV2Ug
bmVlZCB0byBleHBsaWNpdGx5IHJlc3RvcmUgaXQuCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRJ
bnNpZGVMaW5rKGxpbmtTdGF0dXMpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldEluc2lk
ZUxpbmsobGlua1N0YXR1cyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgYXBwbHlJbmhlcml0ZWRPbmx5ID0gdHJ1ZTsgCkBAIC0yNTQ5LDE0ICsyNTUwLDE0IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3Vs
dCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgLy8gaGlnaC1wcmlvcml0eSBwcm9wZXJ0aWVzIGZp
cnN0LCBpLmUuLCB0aG9zZSBwcm9wZXJ0aWVzIHRoYXQgb3RoZXIgcHJvcGVydGllcyBkZXBlbmQg
b24uCiAgICAgLy8gVGhlIG9yZGVyIGlzICgxKSBoaWdoLXByaW9yaXR5IG5vdCBpbXBvcnRhbnQs
ICgyKSBoaWdoLXByaW9yaXR5IGltcG9ydGFudCwgKDMpIG5vcm1hbCBub3QgaW1wb3J0YW50CiAg
ICAgLy8gYW5kICg0KSBub3JtYWwgaW1wb3J0YW50LgotICAgIG1fbGluZUhlaWdodFZhbHVlID0g
MDsKKyAgICBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSAwOwogICAgIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIGZhbHNlLCAwLCBtYXRj
aFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkp
OwogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0
Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNo
UmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgICBh
cHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0
LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgICBhcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRj
aFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxl
LCBhcHBseUluaGVyaXRlZE9ubHkpOwogCi0gICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0t
PnJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgp
KSB7Ci0gICAgICAgIG1fZm9udERpcnR5ID0gdHJ1ZTsKKyAgICBpZiAoY2FjaGVJdGVtICYmIGNh
Y2hlSXRlbS0+cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBzdGF0ZS5zdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpKSB7CisgICAgICAgIHN0YXRlLmZvbnREaXJ0eSA9IHRydWU7CiAgICAgICAg
IGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwogICAgIH0KIApAQCAtMjU2NCwxMSArMjU2NSwx
MSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0
Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgIHVwZGF0ZUZvbnQoKTsKIAogICAgIC8v
IExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZv
bnQtc2l6ZS4KLSAgICBpZiAobV9saW5lSGVpZ2h0VmFsdWUpCi0gICAgICAgIGFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX2xpbmVIZWlnaHRWYWx1ZSk7CisgICAgaWYgKHN0
YXRlLmxpbmVIZWlnaHRWYWx1ZSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxp
bmVIZWlnaHQsIHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSk7CiAKICAgICAvLyBNYW55IHByb3BlcnRp
ZXMgZGVwZW5kIG9uIHRoZSBmb250LiBJZiBpdCBjaGFuZ2VzIHdlIGp1c3QgYXBwbHkgYWxsIHBy
b3BlcnRpZXMuCi0gICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5m
b250RGVzY3JpcHRpb24oKSAhPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKSkKKyAgICBpZiAo
Y2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpICE9
IHN0YXRlLnN0eWxlLT5mb250RGVzY3JpcHRpb24oKSkKICAgICAgICAgYXBwbHlJbmhlcml0ZWRP
bmx5ID0gZmFsc2U7CiAKICAgICAvLyBOb3cgZG8gdGhlIG5vcm1hbCBwcmlvcml0eSBVQSBwcm9w
ZXJ0aWVzLgpAQCAtMjU4NiwxMyArMjU4NywxMyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdAog
ICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4K
ICAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOwogICAgIAotICAgIEFTU0VSVCghbV9mb250RGly
dHkpOworICAgIEFTU0VSVCghc3RhdGUuZm9udERpcnR5KTsKICAgICAKICAgICBpZiAoY2FjaGVJ
dGVtIHx8ICFjYWNoZUhhc2gpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzQ2FjaGVhYmxl
SW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKG1fZWxlbWVudCwgbV9zdHlsZS5nZXQoKSwgbV9wYXJl
bnRTdHlsZSkpCisgICAgaWYgKCFpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShz
dGF0ZS5lbGVtZW50LCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucGFyZW50U3R5bGUpKQogICAg
ICAgICByZXR1cm47Ci0gICAgYWRkVG9NYXRjaGVkUHJvcGVydGllc0NhY2hlKG1fc3R5bGUuZ2V0
KCksIG1fcGFyZW50U3R5bGUsIGNhY2hlSGFzaCwgbWF0Y2hSZXN1bHQpOworICAgIGFkZFRvTWF0
Y2hlZFByb3BlcnRpZXNDYWNoZShzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucGFyZW50U3R5bGUs
IGNhY2hlSGFzaCwgbWF0Y2hSZXN1bHQpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFy
ZVBhZ2VSdWxlcyhjb25zdCBTdHlsZVJ1bGVQYWdlKiByMSwgY29uc3QgU3R5bGVSdWxlUGFnZSog
cjIpCkBAIC0yNjU3LDcgKzI2NTgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoUGFnZVJ1
bGVzRm9yTGlzdChWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBtYXRjaGVkUnVsZXMsCiBib29sIFN0
eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QKIHsKICAgICBib29s
IGlzRmlyc3RQYWdlTGVmdCA9IGZhbHNlOwotICAgIGlmICghbV9yb290RWxlbWVudFN0eWxlLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCisgICAgaWYgKCFtX3N0YXRlLnJvb3RFbGVtZW50U3R5
bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgaXNGaXJzdFBhZ2VMZWZ0ID0g
dHJ1ZTsKIAogICAgIHJldHVybiAocGFnZUluZGV4ICsgKGlzRmlyc3RQYWdlTGVmdCA/IDEgOiAw
KSkgJSAyOwpAQCAtMjc1Nyw3ICsyNzU4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFJlbmQKIHsK
ICAgICBpbml0RWxlbWVudCgwKTsKICAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKDAsIHN0eWxlKTsK
LSAgICBtX3N0eWxlID0gc3R5bGU7CisgICAgbV9zdGF0ZS5zdHlsZSA9IHN0eWxlOwogICAgIGFw
cGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShpZCwgdmFsdWUpOwogfQogCkBAIC0yODY5LDEwICsy
ODcwLDEwIEBAIGlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OmlzVmFsaWRDdWVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQpCiAvLyBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5PVCBhbGxvd2Vk
IHRvIHNjYWxlIHdpdGhpbiBhIHpvb21lZCBTVkcgZG9jdW1lbnQgKGxldHRlci93b3JkLXNwYWNp
bmcvZm9udC1zaXplKS4KIGJvb2wgU3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKCkKIHsK
LSAgICByZXR1cm4gbV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCk7CisgICAg
cmV0dXJuIG1fc3RhdGUuZWxlbWVudCAmJiBtX3N0YXRlLmVsZW1lbnQtPmlzU1ZHRWxlbWVudCgp
OwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSwgU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIExlbmd0aCYgd29y
a2luZ0xlbmd0aCkKK3N0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3Rh
dGUsIExlbmd0aCYgd29ya2luZ0xlbmd0aCkKIHsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50KSB7CiAgICAgICAgIHdvcmtpbmdM
ZW5ndGggPSBMZW5ndGgoTWluQ29udGVudCk7CkBAIC0yODg0LDcgKzI4ODUsNyBAQCBzdGF0aWMg
Ym9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSwgU3R5bGVSZXNvbAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB3b3Jr
aW5nTGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJD
b252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJz
aW9uIHwgQXV0b0NvbnZlcnNpb24+KHNlbGVjdG9yLT5zdHlsZSgpLCBzZWxlY3Rvci0+cm9vdEVs
ZW1lbnRTdHlsZSgpLCBzZWxlY3Rvci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICB3
b3JraW5nTGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVn
ZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252
ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlLCBzdGF0ZS5zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICBpZiAod29ya2lu
Z0xlbmd0aC5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI4OTQs
MTIgKzI4OTUsMTIgQEAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFN0eWxlUmVzb2wKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrTWluTWF4KENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSwgU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIEdyaWRUcmFja1NpemUm
IHRyYWNrU2l6ZSkKK3N0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja01pbk1heChDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0
ZSwgR3JpZFRyYWNrU2l6ZSYgdHJhY2tTaXplKQogewogICAgIFBhaXIqIG1pbk1heFRyYWNrQnJl
YWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRQYWlyVmFsdWUoKTsKICAgICBpZiAoIW1pbk1heFRy
YWNrQnJlYWR0aCkgewogICAgICAgICBMZW5ndGggd29ya2luZ0xlbmd0aDsKLSAgICAgICAgaWYg
KCFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKHByaW1pdGl2ZVZhbHVlLCBzZWxlY3Rvciwgd29ya2lu
Z0xlbmd0aCkpCisgICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChwcmltaXRpdmVW
YWx1ZSwgc3RhdGUsIHdvcmtpbmdMZW5ndGgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgICAgIHRyYWNrU2l6ZS5zZXRMZW5ndGgod29ya2luZ0xlbmd0aCk7CkBAIC0yOTA4LDE0
ICsyOTA5LDE0IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja01pbk1heChDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFN0eWxlUmVzb2x2CiAKICAgICBMZW5ndGggbWluVHJh
Y2tCcmVhZHRoOwogICAgIExlbmd0aCBtYXhUcmFja0JyZWFkdGg7Ci0gICAgaWYgKCFjcmVhdGVH
cmlkVHJhY2tCcmVhZHRoKG1pbk1heFRyYWNrQnJlYWR0aC0+Zmlyc3QoKSwgc2VsZWN0b3IsIG1p
blRyYWNrQnJlYWR0aCkgfHwgIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgobWluTWF4VHJhY2tCcmVh
ZHRoLT5zZWNvbmQoKSwgc2VsZWN0b3IsIG1heFRyYWNrQnJlYWR0aCkpCisgICAgaWYgKCFjcmVh
dGVHcmlkVHJhY2tCcmVhZHRoKG1pbk1heFRyYWNrQnJlYWR0aC0+Zmlyc3QoKSwgc3RhdGUsIG1p
blRyYWNrQnJlYWR0aCkgfHwgIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgobWluTWF4VHJhY2tCcmVh
ZHRoLT5zZWNvbmQoKSwgc3RhdGUsIG1heFRyYWNrQnJlYWR0aCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIHRyYWNrU2l6ZS5zZXRNaW5NYXgobWluVHJhY2tCcmVhZHRoLCBtYXhUcmFj
a0JyZWFkdGgpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlk
VHJhY2tHcm91cChDU1NWYWx1ZSogdmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBWZWN0
b3I8R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6ZXMpCitzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJh
Y2tHcm91cChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0
ZSwgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0cmFja1NpemVzKQogewogICAgIGlmICghdmFsdWUt
PmlzVmFsdWVMaXN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI5MjYsNyArMjkyNyw3
IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0dyb3VwKENTU1ZhbHVlKiB2YWx1ZSwgU3R5
bGVSZXNvbHZlciogc2VsZWN0b3IsIFZlY3RvCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAgICAgR3JpZFRyYWNrU2l6ZSB0cmFja1NpemU7Ci0gICAgICAgIGlmICghY3JlYXRlR3Jp
ZFRyYWNrTWluTWF4KHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oY3VyclZhbHVlKSwg
c2VsZWN0b3IsIHRyYWNrU2l6ZSkpCisgICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTWluTWF4
KHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oY3VyclZhbHVlKSwgc3RhdGUsIHRyYWNr
U2l6ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgdHJhY2tTaXplcy5h
cHBlbmQodHJhY2tTaXplKTsKQEAgLTI5MzQsNyArMjkzNSw3IEBAIHN0YXRpYyBib29sIGNyZWF0
ZUdyaWRUcmFja0dyb3VwKENTU1ZhbHVlKiB2YWx1ZSwgU3R5bGVSZXNvbHZlciogc2VsZWN0b3Is
IFZlY3RvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFj
a0xpc3QoQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6ZXMs
IFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yKQorc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrTGlz
dChDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxHcmlkVHJhY2tTaXplPiYgdHJhY2tTaXplcywgY29u
c3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogewogICAgIC8vIEhhbmRsZSAnbm9uZScu
CiAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKQEAgLTI5NDIsNyArMjk0Myw3
IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3QoQ1NTVmFsdWUqIHZhbHVlLCBWZWN0
b3I8R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6CiAgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmU7CiAgICAgfQogCi0gICAgcmV0dXJuIGNyZWF0
ZUdyaWRUcmFja0dyb3VwKHZhbHVlLCBzZWxlY3RvciwgdHJhY2tTaXplcyk7CisgICAgcmV0dXJu
IGNyZWF0ZUdyaWRUcmFja0dyb3VwKHZhbHVlLCBzdGF0ZSwgdHJhY2tTaXplcyk7CiB9CiAKIApA
QCAtMjk5MCw3ICsyOTkxLDcgQEAgc3RhdGljIGJvb2wgaGFzVmFyaWFibGVSZWZlcmVuY2UoQ1NT
VmFsdWUqIHZhbHVlKQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJsZXMoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8c3RkOjpwYWlyPENTU1Byb3Bl
cnR5SUQsIFN0cmluZz4gPiYga25vd25FeHByZXNzaW9ucykKIHsKLSAgICBzdGQ6OnBhaXI8Q1NT
UHJvcGVydHlJRCwgU3RyaW5nPiBleHByZXNzaW9uKGlkLCB2YWx1ZS0+c2VyaWFsaXplUmVzb2x2
aW5nVmFyaWFibGVzKCpzdHlsZSgpLT52YXJpYWJsZXMoKSkpOworICAgIHN0ZDo6cGFpcjxDU1NQ
cm9wZXJ0eUlELCBTdHJpbmc+IGV4cHJlc3Npb24oaWQsIHZhbHVlLT5zZXJpYWxpemVSZXNvbHZp
bmdWYXJpYWJsZXMoKm1fc3RhdGUuc3R5bGUtPnZhcmlhYmxlcygpKSk7CiAKICAgICBpZiAoa25v
d25FeHByZXNzaW9ucy5jb250YWlucyhleHByZXNzaW9uKSkKICAgICAgICAgcmV0dXJuOyAvLyBj
eWNsZSBkZXRlY3RlZC4KQEAgLTMwMjIsMTkgKzMwMjMsMjAgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB9
CiAjZW5kaWYKIAotICAgIGJvb2wgaXNJbmhlcml0ID0gbV9wYXJlbnROb2RlICYmIHZhbHVlLT5p
c0luaGVyaXRlZFZhbHVlKCk7Ci0gICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFs
VmFsdWUoKSB8fCAoIW1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsK
KyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworICAgIGJvb2wgaXNJbmhlcml0ID0gc3RhdGUu
cGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpOworICAgIGJvb2wgaXNJbml0
aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgKCFzdGF0ZS5wYXJlbnROb2RlICYmIHZh
bHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpOwogCiAgICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgIWlz
SW5pdGlhbCk7IC8vIGlzSW5oZXJpdCAtPiAhaXNJbml0aWFsICYmIGlzSW5pdGlhbCAtPiAhaXNJ
bmhlcml0Ci0gICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgKG1fcGFyZW50Tm9kZSAmJiBtX3BhcmVu
dFN0eWxlKSk7IC8vIGlzSW5oZXJpdCAtPiAobV9wYXJlbnROb2RlICYmIG1fcGFyZW50U3R5bGUp
CisgICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgKHN0YXRlLnBhcmVudE5vZGUgJiYgc3RhdGUucGFy
ZW50U3R5bGUpKTsgLy8gaXNJbmhlcml0IC0+IChzdGF0ZS5wYXJlbnROb2RlICYmIHN0YXRlLnBh
cmVudFN0eWxlKQogCi0gICAgaWYgKCFhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSAmJiAo
IWFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSB8fCAhaXNWYWxpZFZpc2l0ZWRMaW5r
UHJvcGVydHkoaWQpKSkgeworICAgIGlmICghc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlICYmICghc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSB8fCAhaXNWYWxp
ZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSkgewogICAgICAgICAvLyBMaW1pdCB0aGUgcHJvcGVy
dGllcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIG9ubHkgdGhlIG9uZXMgaG9ub3JlZCBieSA6dmlz
aXRlZC4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChpc0luaGVyaXQgJiYgIW1f
cGFyZW50U3R5bGUtPmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkgJiYgIUNTU1By
b3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkKLSAgICAgICAgbV9wYXJlbnRTdHlsZS0+
c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKTsKKyAgICBpZiAoaXNJbmhlcml0
ICYmICFzdGF0ZS5wYXJlbnRTdHlsZS0+aGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMo
KSAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQorICAgICAgICBzdGF0
ZS5wYXJlbnRTdHlsZS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKTsKIAog
I2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eVZhcmlh
YmxlKSB7CkBAIC0zMDQyLDcgKzMwNDQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBDU1NWYXJp
YWJsZVZhbHVlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PENTU1ZhcmlhYmxlVmFsdWUqPih2YWx1
ZSk7CiAgICAgICAgIEFTU0VSVCghdmFyaWFibGUtPm5hbWUoKS5pc0VtcHR5KCkpOwogICAgICAg
ICBBU1NFUlQoIXZhcmlhYmxlLT52YWx1ZSgpLmlzRW1wdHkoKSk7Ci0gICAgICAgIG1fc3R5bGUt
PnNldFZhcmlhYmxlKHZhcmlhYmxlLT5uYW1lKCksIHZhcmlhYmxlLT52YWx1ZSgpKTsKKyAgICAg
ICAgc3RhdGUuc3R5bGUtPnNldFZhcmlhYmxlKHZhcmlhYmxlLT5uYW1lKCksIHZhcmlhYmxlLT52
YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzA2MSw3ICszMDYz
LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKIAogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgPyBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbHVlKSA6IDA7CiAKLSAgICBmbG9hdCB6b29tRmFjdG9yID0gbV9zdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpOworICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdGF0ZS5zdHlsZS0+ZWZmZWN0
aXZlWm9vbSgpOwogCiAgICAgLy8gV2hhdCBmb2xsb3dzIGlzIGEgbGlzdCB0aGF0IG1hcHMgdGhl
IENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIgY29ycmVzcG9uZGluZyBmcm9udC1lbmQKICAgICAv
LyBSZW5kZXJTdHlsZSB2YWx1ZXMuIFNob3J0aGFuZHMgKGUuZy4gYm9yZGVyLCBiYWNrZ3JvdW5k
KSBvY2N1ciBpbiB0aGlzIGxpc3QgYXMgd2VsbCBhbmQKQEAgLTMwNzUsNyArMzA3Nyw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgICAgICAvLyBub3RlIGlzIGEgcmVtaW5kZXIgdGhhdCBldmVudHVh
bGx5ICJpbmhlcml0IiBuZWVkcyB0byBiZSBzdXBwb3J0ZWQuCiAKICAgICAgICAgICAgIGlmIChp
c0luaXRpYWwpIHsKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5jbGVhckNvbnRlbnQoKTsKKyAg
ICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJDb250ZW50KCk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCkBAIC0zMDg3LDE5ICszMDg5LDE5IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7CiAgICAg
ICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChpdGVtLT5pc0dyYWRpZW50VmFsdWUoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRl
KHN0YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPihpdGVtKS0+Z3JhZGllbnRXaXRoU3R5bGVz
UmVzb2x2ZWQodGhpcykuZ2V0KCkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUtPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRp
Y19jYXN0PENTU0dyYWRpZW50VmFsdWUqPihpdGVtKS0+Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2
ZWQodGhpcykuZ2V0KCkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1h
Z2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlKj4oaXRlbSkpLCBk
aWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQo
U3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9y
VmFsdWUqPihpdGVtKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRy
dWU7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCiAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChpdGVtLT5pc0ltYWdlU2V0VmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0
YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAg
ICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShD
U1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPihpdGVtKSks
IGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAjZW5kaWYKICAg
ICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZVZhbHVl
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChjYWNoZWRPclBl
bmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZh
bHVlKj4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+
c2V0Q29udGVudChjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBz
dGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwogICAgICAgICAgICAg
ICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICB9CkBAIC0zMTEwLDE3ICszMTEyLDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNvbnRlbnRWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CiAKICAgICAgICAgICAgICAgICBpZiAoY29udGVu
dFZhbHVlLT5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENv
bnRlbnQoY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwoKSwgZGlkU2V0KTsKKyAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoY29udGVudFZhbHVlLT5n
ZXRTdHJpbmdWYWx1ZSgpLmltcGwoKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlk
U2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNB
dHRyKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENhbiBhIG5hbWVzcGFjZSBi
ZSBzcGVjaWZpZWQgZm9yIGFuIGF0dHIoZm9vKT8KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1f
c3R5bGUtPnN0eWxlVHlwZSgpID09IE5PUFNFVURPKQotICAgICAgICAgICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zdHls
ZS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
ZS5zdHlsZS0+c2V0VW5pcXVlKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fcGFyZW50U3R5bGUtPnNldFVuaXF1ZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUucGFyZW50U3R5bGUtPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAg
ICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0b20sIGNvbnRlbnRWYWx1ZS0+Z2V0U3Ry
aW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSA9IG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0dHIpOwotICAg
ICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1w
dHlBdG9tIDogdmFsdWUuaW1wbCgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlID0gc3RhdGUuZWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0dHIp
OworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVudCh2YWx1ZS5pc051
bGwoKSA/IGVtcHR5QXRvbSA6IHZhbHVlLmltcGwoKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAg
ICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgdGhl
IGZhY3QgdGhhdCB0aGUgYXR0cmlidXRlIHZhbHVlIGFmZmVjdHMgdGhlIHN0eWxlCiAgICAgICAg
ICAgICAgICAgICAgIG1fZmVhdHVyZXMuYXR0cnNJblJ1bGVzLmFkZChhdHRyLmxvY2FsTmFtZSgp
LmltcGwoKSk7CkBAIC0zMTMxLDI0ICszMTMzLDI0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAg
ICAgICAgICAgIGlmIChsaXN0U3R5bGVJZGVudCAhPSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBsaXN0U3R5bGVUeXBlID0gc3RhdGljX2Nhc3Q8RUxpc3RTdHlsZVR5cGU+
KGxpc3RTdHlsZUlkZW50IC0gQ1NTVmFsdWVEaXNjKTsKICAgICAgICAgICAgICAgICAgICAgT3du
UHRyPENvdW50ZXJDb250ZW50PiBjb3VudGVyID0gYWRvcHRQdHIobmV3IENvdW50ZXJDb250ZW50
KGNvdW50ZXJWYWx1ZS0+aWRlbnRpZmllcigpLCBsaXN0U3R5bGVUeXBlLCBjb3VudGVyVmFsdWUt
PnNlcGFyYXRvcigpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQo
Y291bnRlci5yZWxlYXNlKCksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0
eWxlLT5zZXRDb250ZW50KGNvdW50ZXIucmVsZWFzZSgpLCBkaWRTZXQpOwogICAgICAgICAgICAg
ICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVPcGVuUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtX3N0eWxlLT5zZXRDb250ZW50KE9QRU5fUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVudChPUEVOX1FVT1RFLCBkaWRTZXQp
OwogICAgICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ2xvc2VR
dW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoQ0xPU0Vf
UVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0
Q29udGVudChDTE9TRV9RVU9URSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRp
ZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vT3BlblF1b3RlOgotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0Q29udGVudChOT19PUEVOX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlk
U2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5v
Q2xvc2VRdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQo
Tk9fQ0xPU0VfUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZS0+c2V0Q29udGVudChOT19DTE9TRV9RVU9URSwgZGlkU2V0KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTMxNTgsMTYgKzMxNjAsMTYgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAoIWRpZFNldCkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5jbGVhckNvbnRlbnQoKTsKKyAg
ICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJDb250ZW50KCk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5UXVvdGVzOgogICAgICAgICBp
ZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90ZXMobV9wYXJlbnRT
dHlsZS0+cXVvdGVzKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFF1b3RlcyhzdGF0
ZS5wYXJlbnRTdHlsZS0+cXVvdGVzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3Rl
cygwKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRRdW90ZXMoMCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7
CkBAIC0zMTg1LDE5ICszMTg3LDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgU3Ry
aW5nIGVuZFF1b3RlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihzZWNvbmQpLT5n
ZXRTdHJpbmdWYWx1ZSgpOwogICAgICAgICAgICAgICAgIHF1b3Rlcy0+YWRkUGFpcihzdGQ6Om1h
a2VfcGFpcihzdGFydFF1b3RlLCBlbmRRdW90ZSkpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0UXVvdGVzKHF1b3Rlcyk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+
c2V0UXVvdGVzKHF1b3Rlcyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlKSB7CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dFF1b3RlcyhRdW90ZXNEYXRhOjpjcmVhdGUoKSk7CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUtPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpjcmVhdGUoKSk7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250RmFtaWx5OiB7CiAgICAgICAgIC8vIGxp
c3Qgb2Ygc3RyaW5ncyBhbmQgaWRzCiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAg
ICAgIEZvbnREZXNjcmlwdGlvbiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBtX3BhcmVudFN0eWxl
LT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIEZvbnRE
ZXNjcmlwdGlvbiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBzdGF0ZS5wYXJlbnRTdHlsZS0+Zm9u
dERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmdlbmVyaWNG
YW1pbHkoKSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KHBhcmVudEZv
bnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRJc1NwZWNpZmllZEZvbnQocGFyZW50Rm9udERlc2NyaXB0aW9uLmlzU3BlY2lmaWVkRm9u
dCgpKTsKQEAgLTMyMDcsNyArMzIwOSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAKICAgICAgICAgaWYgKGlz
SW5pdGlhbCkgewogICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGluaXRpYWxEZXNjID0gRm9u
dERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwog
ICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIHNpemUgdG8gYWNjb3VudCBmb3Ig
dGhlIGdlbmVyaWMgZmFtaWx5IGNoYW5nZSBmcm9tIG1vbm9zcGFjZQogICAgICAgICAgICAgLy8g
dG8gbm9uLW1vbm9zcGFjZS4KICAgICAgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29y
ZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKQpAQCAtMzIy
MSw3ICszMjIzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIAogICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVl
TGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnRE
ZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZS0+Zm9udERlc2NyaXB0aW9u
KCk7CiAgICAgICAgIEZvbnRGYW1pbHkmIGZpcnN0RmFtaWx5ID0gZm9udERlc2NyaXB0aW9uLmZp
cnN0RmFtaWx5KCk7CiAgICAgICAgIEZvbnRGYW1pbHkqIGN1cnJGYW1pbHkgPSAwOwogCkBAIC0z
Mjk5LDI0ICszMzAxLDI0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAvLyBzaG9ydGhhbmQgcHJvcGVydGllcwog
ICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOgogICAgICAgICBpZiAoaXNJbml0aWFsKSB7
Ci0gICAgICAgICAgICBtX3N0eWxlLT5jbGVhckJhY2tncm91bmRMYXllcnMoKTsKLSAgICAgICAg
ICAgIG1fc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihDb2xvcigpKTsKKyAgICAgICAgICAgIHN0
YXRlLnN0eWxlLT5jbGVhckJhY2tncm91bmRMYXllcnMoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0
eWxlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJ
bmhlcml0KSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0QmFja2dyb3VuZExheWVycygq
bV9wYXJlbnRTdHlsZS0+YmFja2dyb3VuZExheWVycygpKTsKLSAgICAgICAgICAgIG1fc3R5bGUt
PnNldEJhY2tncm91bmRDb2xvcihtX3BhcmVudFN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKSk7Cisg
ICAgICAgICAgICBzdGF0ZS5zdHlsZS0+aW5oZXJpdEJhY2tncm91bmRMYXllcnMoKnN0YXRlLnBh
cmVudFN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUt
PnNldEJhY2tncm91bmRDb2xvcihzdGF0ZS5wYXJlbnRTdHlsZS0+YmFja2dyb3VuZENvbG9yKCkp
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFzazoKICAgICAgICAgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFy
TWFza0xheWVycygpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPmNsZWFyTWFza0xheWVycygp
OwogICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICBtX3N0eWxlLT5pbmhl
cml0TWFza0xheWVycygqbV9wYXJlbnRTdHlsZS0+bWFza0xheWVycygpKTsKKyAgICAgICAgICAg
IHN0YXRlLnN0eWxlLT5pbmhlcml0TWFza0xheWVycygqc3RhdGUucGFyZW50U3R5bGUtPm1hc2tM
YXllcnMoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udDoKICAg
ICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbiA9IG1fcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodChtX3BhcmVudFN0eWxlLT5zcGVjaWZpZWRMaW5lSGVp
Z2h0KCkpOwotICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOworICAgICAgICAgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnBhcmVudFN0eWxlLT5mb250
RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRMaW5lSGVpZ2h0KHN0
YXRlLnBhcmVudFN0eWxlLT5zcGVjaWZpZWRMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgc3Rh
dGUubGluZUhlaWdodFZhbHVlID0gMDsKICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihm
b250RGVzY3JpcHRpb24pOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkgewogICAgICAg
ICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpOwpAQCAtMzMyNSw4
ICszMzI3LDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICBpbml0aWFsaXplRm9udFN0eWxlKHNldHRpbmdzKTsKICAgICAgICAgfSBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZSkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodChSZW5k
ZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0gICAgICAgICAgICBtX2xpbmVIZWlnaHRW
YWx1ZSA9IDA7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJT
dHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgICAgICAgICBzdGF0ZS5saW5lSGVpZ2h0
VmFsdWUgPSAwOwogCiAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
OwogICAgICAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Gb250KHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpLCBmb250RGVzY3JpcHRpb24pOwpAQCAtMzM0Miw3ICsz
MzQ0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSB8fCAhc2V0dGluZ3MtPnNjcmVl
bkZvbnRTdWJzdGl0dXRpb25FbmFibGVkKCkpOwogCiAgICAgICAgICAgICAgICAgLy8gSGFuZGxl
IHRoZSB6b29tIGZhY3Rvci4KLSAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29t
cHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50KCksIG1f
c3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3Jp
cHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSkpOworICAgICAgICAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNw
ZWNpZmllZFNpemUoZG9jdW1lbnQoKSwgc3RhdGUuc3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlv
bi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VT
Vkdab29tUnVsZXMoKSkpOwogICAgICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5p
c0ZvbnRWYWx1ZSgpKSB7CkBAIC0zMzYwLDcgKzMzNjIsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICAgICAgdXBkYXRlRm9udCgpOwogICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUZvbnRTaXplLCBmb250LT5zaXplLmdldCgpKTsKIAotICAgICAgICAgICAgbV9saW5lSGVpZ2h0
VmFsdWUgPSBmb250LT5saW5lSGVpZ2h0LmdldCgpOworICAgICAgICAgICAgc3RhdGUubGluZUhl
aWdodFZhbHVlID0gZm9udC0+bGluZUhlaWdodC5nZXQoKTsKIAogICAgICAgICAgICAgYXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIGZvbnQtPmZhbWlseS5nZXQoKSk7CiAgICAg
ICAgIH0KQEAgLTMzNzIsMTEgKzMzNzQsMTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Qm94U2hhZG93OiB7CiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKICAgICAg
ICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIG1fc3R5bGUtPnNldFRleHRTaGFkb3cobV9wYXJlbnRTdHlsZS0+dGV4dFNoYWRvdygp
ID8gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoKm1fcGFyZW50U3R5bGUtPnRleHRTaGFkb3coKSkp
IDogbnVsbHB0cik7Ci0gICAgICAgICAgICByZXR1cm4gbV9zdHlsZS0+c2V0Qm94U2hhZG93KG1f
cGFyZW50U3R5bGUtPmJveFNoYWRvdygpID8gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoKm1fcGFy
ZW50U3R5bGUtPmJveFNoYWRvdygpKSkgOiBudWxscHRyKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3RhdGUuc3R5bGUtPnNldFRleHRTaGFkb3coc3RhdGUucGFyZW50U3R5bGUtPnRleHRTaGFk
b3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCpzdGF0ZS5wYXJlbnRTdHlsZS0+dGV4dFNo
YWRvdygpKSkgOiBudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZS5zdHlsZS0+c2V0
Qm94U2hhZG93KHN0YXRlLnBhcmVudFN0eWxlLT5ib3hTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBT
aGFkb3dEYXRhKCpzdGF0ZS5wYXJlbnRTdHlsZS0+Ym94U2hhZG93KCkpKSA6IG51bGxwdHIpOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChpc0luaXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUpIC8vIGlu
aXRpYWwgfCBub25lCi0gICAgICAgICAgICByZXR1cm4gaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hh
ZG93ID8gbV9zdHlsZS0+c2V0VGV4dFNoYWRvdyhudWxscHRyKSA6IG1fc3R5bGUtPnNldEJveFNo
YWRvdyhudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybiBpZCA9PSBDU1NQcm9wZXJ0eVRleHRT
aGFkb3cgPyBzdGF0ZS5zdHlsZS0+c2V0VGV4dFNoYWRvdyhudWxscHRyKSA6IHN0YXRlLnN0eWxl
LT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiAKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxp
c3QoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMzODYsMjkgKzMzODgsMjkgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAgICAgICAgIGlmICghY3VyclZhbHVlLT5pc1NoYWRvd1ZhbHVlKCkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0
YXRpY19jYXN0PFNoYWRvd1ZhbHVlKj4oY3VyclZhbHVlKTsKLSAgICAgICAgICAgIGludCB4ID0g
aXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwg
em9vbUZhY3Rvcik7Ci0gICAgICAgICAgICBpbnQgeSA9IGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8
aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAg
ICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+
KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikgOiAwOwotICAgICAgICAg
ICAgaW50IHNwcmVhZCA9IGl0ZW0tPnNwcmVhZCA/IGl0ZW0tPnNwcmVhZC0+Y29tcHV0ZUxlbmd0
aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikgOiAwOworICAg
ICAgICAgICAgaW50IHggPSBpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUu
Z2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAg
aW50IHkgPSBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0
YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgaW50IGJsdXIg
PSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxl
LmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7CisgICAgICAg
ICAgICBpbnQgc3ByZWFkID0gaXRlbS0+c3ByZWFkID8gaXRlbS0+c3ByZWFkLT5jb21wdXRlTGVu
Z3RoPGludD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21G
YWN0b3IpIDogMDsKICAgICAgICAgICAgIFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxlID0gaXRlbS0+
c3R5bGUgJiYgaXRlbS0+c3R5bGUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnNldCA/IEluc2V0
IDogTm9ybWFsOwogICAgICAgICAgICAgQ29sb3IgY29sb3I7CiAgICAgICAgICAgICBpZiAoaXRl
bS0+Y29sb3IpCiAgICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1
ZShpdGVtLT5jb2xvci5nZXQoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChtX3N0eWxlKQotICAg
ICAgICAgICAgICAgIGNvbG9yID0gbV9zdHlsZS0+Y29sb3IoKTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKHN0YXRlLnN0eWxlKQorICAgICAgICAgICAgICAgIGNvbG9yID0gc3RhdGUuc3R5bGUtPmNv
bG9yKCk7CiAKICAgICAgICAgICAgIE93blB0cjxTaGFkb3dEYXRhPiBzaGFkb3dEYXRhID0gYWRv
cHRQdHIobmV3IFNoYWRvd0RhdGEoSW50UG9pbnQoeCwgeSksIGJsdXIsIHNwcmVhZCwgc2hhZG93
U3R5bGUsIGlkID09IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCBjb2xvci5pc1ZhbGlkKCkg
PyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCkpOwogICAgICAgICAgICAgaWYgKGlkID09IENT
U1Byb3BlcnR5VGV4dFNoYWRvdykKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRUZXh0U2hh
ZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3Qg
aWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUtPnNldFRleHRTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFk
ZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3hTaGFkb3coc2hhZG93RGF0YS5y
ZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0
aGUgZmlyc3QgZW50cnkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Qm94U2hhZG93
KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYg
dGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewogICAgICAgICBI
QU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChib3hSZWZsZWN0LCBCb3hSZWZsZWN0KQogICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJveFJlZmxl
Y3QoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3hSZWZsZWN0KCkpOworICAgICAgICAgICAgc3RhdGUu
c3R5bGUtPnNldEJveFJlZmxlY3QoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3hSZWZsZWN0KCkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM0MTksMTMgKzM0MjEsMTMgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgUmVmUHRyPFN0eWxlUmVmbGVjdGlvbj4gcmVmbGVjdGlvbiA9
IFN0eWxlUmVmbGVjdGlvbjo6Y3JlYXRlKCk7CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldERpcmVj
dGlvbigqcmVmbGVjdFZhbHVlLT5kaXJlY3Rpb24oKSk7CiAgICAgICAgIGlmIChyZWZsZWN0VmFs
dWUtPm9mZnNldCgpKQotICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RW
YWx1ZS0+b2Zmc2V0KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwg
UGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3R5bGUoKSwgbV9yb290
RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSk7CisgICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRP
ZmZzZXQocmVmbGVjdFZhbHVlLT5vZmZzZXQoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdl
ckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihz
dGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikpOwog
ICAgICAgICBOaW5lUGllY2VJbWFnZSBtYXNrOwogICAgICAgICBtYXNrLnNldE1hc2tEZWZhdWx0
cygpOwogICAgICAgICBtX3N0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFs
dWUtPm1hc2soKSwgbWFzayk7CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2sobWFzayk7CiAK
LSAgICAgICAgbV9zdHlsZS0+c2V0Qm94UmVmbGVjdChyZWZsZWN0aW9uLnJlbGVhc2UoKSk7Cisg
ICAgICAgIHN0YXRlLnN0eWxlLT5zZXRCb3hSZWZsZWN0KHJlZmxlY3Rpb24ucmVsZWFzZSgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5U3JjOiAvLyBPbmx5
IHVzZWQgaW4gQGZvbnQtZmFjZSBydWxlcy4KQEAgLTM0MzQsMjkgKzM0MzYsMjkgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5S
dWxlOgogICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRD
b2x1bW5SdWxlQ29sb3IobV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkuaXNWYWxpZCgp
ID8gbV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkgOiBtX3BhcmVudFN0eWxlLT5jb2xv
cigpKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1bGVTdHlsZShtX3BhcmVudFN0
eWxlLT5jb2x1bW5SdWxlU3R5bGUoKSk7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRDb2x1bW5S
dWxlV2lkdGgobV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZVdpZHRoKCkpOworICAgICAgICAgICAg
c3RhdGUuc3R5bGUtPnNldENvbHVtblJ1bGVDb2xvcihzdGF0ZS5wYXJlbnRTdHlsZS0+Y29sdW1u
UnVsZUNvbG9yKCkuaXNWYWxpZCgpID8gc3RhdGUucGFyZW50U3R5bGUtPmNvbHVtblJ1bGVDb2xv
cigpIDogc3RhdGUucGFyZW50U3R5bGUtPmNvbG9yKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5
bGUtPnNldENvbHVtblJ1bGVTdHlsZShzdGF0ZS5wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZVN0eWxl
KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbHVtblJ1bGVXaWR0aChzdGF0ZS5w
YXJlbnRTdHlsZS0+Y29sdW1uUnVsZVdpZHRoKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5p
dGlhbCkKLSAgICAgICAgICAgIG1fc3R5bGUtPnJlc2V0Q29sdW1uUnVsZSgpOworICAgICAgICAg
ICAgc3RhdGUuc3R5bGUtPnJlc2V0Q29sdW1uUnVsZSgpOwogICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWU6CiAgICAgICAgIGlmICghaXNJbmhlcml0KQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlRGlyZWN0aW9u
KG1fcGFyZW50U3R5bGUtPm1hcnF1ZWVEaXJlY3Rpb24oKSk7Ci0gICAgICAgIG1fc3R5bGUtPnNl
dE1hcnF1ZWVJbmNyZW1lbnQobV9wYXJlbnRTdHlsZS0+bWFycXVlZUluY3JlbWVudCgpKTsKLSAg
ICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKG1fcGFyZW50U3R5bGUtPm1hcnF1ZWVTcGVl
ZCgpKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudChtX3BhcmVudFN0eWxl
LT5tYXJxdWVlTG9vcENvdW50KCkpOwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlQmVoYXZp
b3IobV9wYXJlbnRTdHlsZS0+bWFycXVlZUJlaGF2aW9yKCkpOworICAgICAgICBzdGF0ZS5zdHls
ZS0+c2V0TWFycXVlZURpcmVjdGlvbihzdGF0ZS5wYXJlbnRTdHlsZS0+bWFycXVlZURpcmVjdGlv
bigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoc3RhdGUucGFy
ZW50U3R5bGUtPm1hcnF1ZWVJbmNyZW1lbnQoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRN
YXJxdWVlU3BlZWQoc3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVTcGVlZCgpKTsKKyAgICAgICAg
c3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQoc3RhdGUucGFyZW50U3R5bGUtPm1hcnF1
ZWVMb29wQ291bnQoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlQmVoYXZpb3Io
c3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVCZWhhdmlvcigpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlUmVwZXRpdGlvbjogewogICAgICAgICBI
QU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChtYXJxdWVlTG9vcENvdW50LCBNYXJxdWVlTG9vcENv
dW50KQogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbmZpbml0
ZSkKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQoLTEpOyAvLyAtMSBt
ZWFucyByZXBlYXQgZm9yZXZlci4KKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVl
TG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCiAgICAgICAgIGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0
TWFycXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAgICAg
ICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0
SW50VmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdE1hcnF1ZWVTcGVlZDogewpAQCAtMzQ2NiwxOSArMzQ2OCwxOSBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgICAgICBpZiAoaW50IGlkZW50ID0gcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsK
ICAgICAgICAgICAgIHN3aXRjaCAoaWRlbnQpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVT
bG93OgotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCg1MDApOyAvLyA1
MDAgbXNlYy4KKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZVNwZWVkKDUw
MCk7IC8vIDUwMCBtc2VjLgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3Bl
ZWQoODUpOyAvLyA4NW1zZWMuIFRoZSBXaW5JRSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIHN0
YXRlLnN0eWxlLT5zZXRNYXJxdWVlU3BlZWQoODUpOyAvLyA4NW1zZWMuIFRoZSBXaW5JRSBkZWZh
dWx0LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZh
c3Q6Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKDEwKTsgLy8gMTBt
c2VjLiBTdXBlciBmYXN0LgorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVl
U3BlZWQoMTApOyAvLyAxMG1zZWMuIFN1cGVyIGZhc3QuCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVGlt
ZSgpKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlVGltZTxpbnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpNaWxsaXNlY29uZHM+KCkpOwor
ICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+
Y29tcHV0ZVRpbWU8aW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6TWlsbGlzZWNvbmRzPigpKTsKICAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIC8vIEZvciBzY3JvbGxh
bW91bnQgc3VwcG9ydC4KLSAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChwcmlt
aXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0
TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZUluY3JlbWVudDog
ewpAQCAtMzQ4OCwxOSArMzQ5MCwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoKLSAgICAg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgxLCBGaXhlZCkp
OyAvLyAxcHguCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1l
bnQoTGVuZ3RoKDEsIEZpeGVkKSk7IC8vIDFweC4KICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoNiwgRml4ZWQpKTsgLy8gNnB4LiBUaGUgV2luSUUg
ZGVmYXVsdC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVu
dChMZW5ndGgoNiwgRml4ZWQpKTsgLy8gNnB4LiBUaGUgV2luSUUgZGVmYXVsdC4KICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMYXJnZToKLSAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgzNiwgRml4ZWQpKTsg
Ly8gMzZweC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVu
dChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMZW5ndGggbWFycXVl
ZUxlbmd0aCA9IGNvbnZlcnRUb0ludExlbmd0aChwcmltaXRpdmVWYWx1ZSwgc3R5bGUoKSwgbV9y
b290RWxlbWVudFN0eWxlKTsKKyAgICAgICAgICAgIExlbmd0aCBtYXJxdWVlTGVuZ3RoID0gY29u
dmVydFRvSW50TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUu
cm9vdEVsZW1lbnRTdHlsZSk7CiAgICAgICAgICAgICBpZiAoIW1hcnF1ZWVMZW5ndGguaXNVbmRl
ZmluZWQoKSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KG1h
cnF1ZWVMZW5ndGgpOworICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlSW5j
cmVtZW50KG1hcnF1ZWVMZW5ndGgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0zNTA5LDExICszNTExLDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGlmICghcHJpbWl0
aXZlVmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRM
b2NhbGUobnVsbEF0b20pOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldExvY2FsZShudWxs
QXRvbSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldExvY2FsZShwcmlt
aXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBm
b250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldFNjcmlwdChsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9u
KG1fc3R5bGUtPmxvY2FsZSgpKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TG9jYWxl
KHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKKyAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNjcmlwdChsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250
U2VsZWN0aW9uKHN0YXRlLnN0eWxlLT5sb2NhbGUoKSkpOwogICAgICAgICBzZXRGb250RGVzY3Jp
cHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM1MzIs
NyArMzUzNCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewotICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9ucyhSZW5kZXJTdHlsZTo6bm9uZURhc2hi
b2FyZFJlZ2lvbnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0RGFzaGJvYXJkUmVn
aW9ucyhSZW5kZXJTdHlsZTo6bm9uZURhc2hib2FyZFJlZ2lvbnMoKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzU0MiwxMCArMzU0NCwxMCBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQog
CiAgICAgICAgIERhc2hib2FyZFJlZ2lvbiogZmlyc3QgPSByZWdpb247CiAgICAgICAgIHdoaWxl
IChyZWdpb24pIHsKLSAgICAgICAgICAgIExlbmd0aCB0b3AgPSBjb252ZXJ0VG9JbnRMZW5ndGgo
cmVnaW9uLT50b3AoKSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKLSAgICAgICAgICAg
IExlbmd0aCByaWdodCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPnJpZ2h0KCksIHN0eWxl
KCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29u
dmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+Ym90dG9tKCksIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRT
dHlsZSk7Ci0gICAgICAgICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdp
b24tPmxlZnQoKSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKKyAgICAgICAgICAgIExl
bmd0aCB0b3AgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT50b3AoKSwgc3RhdGUuc3R5bGUu
Z2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpOworICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0
ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+cmlnaHQoKSwgc3RhdGUuc3R5bGUuZ2V0KCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpOworICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNv
bnZlcnRUb0ludExlbmd0aChyZWdpb24tPmJvdHRvbSgpLCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSk7CisgICAgICAgICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRU
b0ludExlbmd0aChyZWdpb24tPmxlZnQoKSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RF
bGVtZW50U3R5bGUpOwogCiAgICAgICAgICAgICBpZiAodG9wLmlzVW5kZWZpbmVkKCkpCiAgICAg
ICAgICAgICAgICAgdG9wID0gTGVuZ3RoKCk7CkBAIC0zNTU3LDEzICszNTU5LDEzIEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgICAgICAgICAgbGVmdCA9IExlbmd0aCgpOwogCiAgICAgICAgICAgICBp
ZiAocmVnaW9uLT5tX2lzQ2lyY2xlKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hi
b2FyZFJlZ2lvbihTdHlsZURhc2hib2FyZFJlZ2lvbjo6Q2lyY2xlLCByZWdpb24tPm1fbGFiZWws
IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVl
KTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxl
RGFzaGJvYXJkUmVnaW9uOjpDaXJjbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90
dG9tLCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwogICAgICAgICAgICAg
ZWxzZSBpZiAocmVnaW9uLT5tX2lzUmVjdGFuZ2xlKQotICAgICAgICAgICAgICAgIG1fc3R5bGUt
PnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hib2FyZFJlZ2lvbjo6UmVjdGFuZ2xlLCByZWdp
b24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8g
ZmFsc2UgOiB0cnVlKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0RGFzaGJvYXJk
UmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpSZWN0YW5nbGUsIHJlZ2lvbi0+bV9sYWJlbCwg
dG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUp
OwogICAgICAgICAgICAgcmVnaW9uID0gcmVnaW9uLT5tX25leHQuZ2V0KCk7CiAgICAgICAgIH0K
IAotICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnNldEhhc0Fubm90YXRlZFJlZ2lvbnMo
dHJ1ZSk7CisgICAgICAgIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPnNldEhhc0Fubm90YXRl
ZFJlZ2lvbnModHJ1ZSk7CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM1NzIsOCArMzU3
NCw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFwcFJlZ2lvbjog
ewogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlIHx8ICFwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0RHJhZ2dhYmxl
UmVnaW9uTW9kZShwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZURyYWcgPyBE
cmFnZ2FibGVSZWdpb25EcmFnIDogRHJhZ2dhYmxlUmVnaW9uTm9EcmFnKTsKLSAgICAgICAgbV9l
bGVtZW50LT5kb2N1bWVudCgpLT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOworICAgICAg
ICBzdGF0ZS5zdHlsZS0+c2V0RHJhZ2dhYmxlUmVnaW9uTW9kZShwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZURyYWcgPyBEcmFnZ2FibGVSZWdpb25EcmFnIDogRHJhZ2dhYmxl
UmVnaW9uTm9EcmFnKTsKKyAgICAgICAgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0SGFz
QW5ub3RhdGVkUmVnaW9ucyh0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpA
QCAtMzU4OSwyMSArMzU5MSwyMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIHJlc3Vs
dCAqPSAzOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVUaGljaykKICAgICAgICAgICAgICAgICByZXN1bHQgKj0gNTsKLSAgICAgICAg
ICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxl
bWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0
ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUs
IHpvb21GYWN0b3IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHdpZHRoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8
ZmxvYXQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAg
ICAgICB3aWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5z
dHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBtX3N0eWxlLT5zZXRUZXh0U3Ryb2tlV2lk
dGgod2lkdGgpOworICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VGV4dFN0cm9rZVdpZHRoKHdpZHRo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJh
bnNmb3JtOiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRyYW5zZm9ybSwg
VHJhbnNmb3JtKTsKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAg
ICAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlLCBzdHlsZSgpLCBtX3Jvb3RFbGVt
ZW50U3R5bGUsIG9wZXJhdGlvbnMpOwotICAgICAgICBtX3N0eWxlLT5zZXRUcmFuc2Zvcm0ob3Bl
cmF0aW9ucyk7CisgICAgICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWUsIHN0YXRl
LnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKTsKKyAgICAg
ICAgc3RhdGUuc3R5bGUtPnNldFRyYW5zZm9ybShvcGVyYXRpb25zKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGVyc3BlY3RpdmU6IHsKQEAgLTM2
MTMsMzQgKzM2MTUsMzQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0g
ICAgICAgICAgICBtX3N0eWxlLT5zZXRQZXJzcGVjdGl2ZSgwKTsKKyAgICAgICAgICAgIHN0YXRl
LnN0eWxlLT5zZXRQZXJzcGVjdGl2ZSgwKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCiAgICAgICAgIGZsb2F0IHBlcnNwZWN0aXZlVmFsdWU7CiAgICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZS0+aXNMZW5ndGgoKSkKLSAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBwcmlt
aXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0
eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBwcmltaXRp
dmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJv
b3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+aXNOdW1iZXIoKSkgewogICAgICAgICAgICAgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGli
aWxpdHksIHRyZWF0IHZhbHVlbGVzcyBudW1iZXJzIGFzIHB4LgotICAgICAgICAgICAgcGVyc3Bl
Y3RpdmVWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJpbWl0aXZlVmFsdWUtPmdl
dERvdWJsZVZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpLT5jb21wdXRlTGVuZ3Ro
PGZsb2F0PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAg
ICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJpbWl0
aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpLT5j
b21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRT
dHlsZSwgem9vbUZhY3Rvcik7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgIGlmIChwZXJzcGVjdGl2ZVZhbHVlID49IDAuMGYpCi0gICAgICAgICAgICBtX3N0
eWxlLT5zZXRQZXJzcGVjdGl2ZShwZXJzcGVjdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRl
LnN0eWxlLT5zZXRQZXJzcGVjdGl2ZShwZXJzcGVjdGl2ZVZhbHVlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uOgogICAgICAgICBp
ZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJBbmltYXRpb25zKCk7Cisg
ICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJBbmltYXRpb25zKCk7CiAgICAgICAgIGVsc2Ug
aWYgKGlzSW5oZXJpdCkKLSAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRBbmltYXRpb25zKG1f
cGFyZW50U3R5bGUtPmFuaW1hdGlvbnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+aW5o
ZXJpdEFuaW1hdGlvbnMoc3RhdGUucGFyZW50U3R5bGUtPmFuaW1hdGlvbnMoKSk7CiAgICAgICAg
IHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbjoKICAgICAgICAg
aWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyVHJhbnNpdGlvbnMoKTsK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5jbGVhclRyYW5zaXRpb25zKCk7CiAgICAgICAgIGVs
c2UgaWYgKGlzSW5oZXJpdCkKLSAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRUcmFuc2l0aW9u
cyhtX3BhcmVudFN0eWxlLT50cmFuc2l0aW9ucygpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxl
LT5pbmhlcml0VHJhbnNpdGlvbnMoc3RhdGUucGFyZW50U3R5bGUtPnRyYW5zaXRpb25zKCkpOwog
ICAgICAgICByZXR1cm47CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6IHsKQEAgLTM2NDksNyArMzY1MSw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBDb2xvciBjb2wgPSBjb2xv
ckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAgIG1fc3R5bGUtPnNl
dFRhcEhpZ2hsaWdodENvbG9yKGNvbCk7CisgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRUYXBIaWdo
bGlnaHRDb2xvcihjb2wpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zNjU4
LDcgKzM2NjAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5J
VElBTCh1c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nLCBVc2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5n
KTsKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBtX3N0eWxlLT5zZXRVc2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlVG91Y2gpOworICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0
VXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZyhwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBD
U1NWYWx1ZVRvdWNoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzcwMSw3
ICszNzAzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWF4TG9n
aWNhbFdpZHRoOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dpY2FsSGVpZ2h0Ogog
ICAgIHsKLSAgICAgICAgQ1NTUHJvcGVydHlJRCBuZXdJZCA9IENTU1Byb3BlcnR5OjpyZXNvbHZl
RGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShpZCwgbV9zdHlsZS0+ZGlyZWN0aW9uKCksIG1fc3R5bGUt
PndyaXRpbmdNb2RlKCkpOworICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVy
dHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBzdGF0ZS5zdHlsZS0+ZGlyZWN0
aW9uKCksIHN0YXRlLnN0eWxlLT53cml0aW5nTW9kZSgpKTsKICAgICAgICAgQVNTRVJUKG5ld0lk
ICE9IGlkKTsKICAgICAgICAgcmV0dXJuIGFwcGx5UHJvcGVydHkobmV3SWQsIHZhbHVlKTsKICAg
ICB9CkBAIC0zNzM2LDkgKzM3MzgsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgc2V0V3Jp
dGluZ01vZGUoKnByaW1pdGl2ZVZhbHVlKTsKIAogICAgICAgICAvLyBGSVhNRTogSXQgaXMgbm90
IG9rIHRvIG1vZGlmeSBkb2N1bWVudCBzdGF0ZSB3aGlsZSBhcHBseWluZyBzdHlsZS4KLSAgICAg
ICAgaWYgKG1fZWxlbWVudCAmJiBtX2VsZW1lbnQgPT0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5k
b2N1bWVudEVsZW1lbnQoKSkKLSAgICAgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0
V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCh0cnVlKTsKLQorICAgICAgICBpZiAoc3Rh
dGUuZWxlbWVudCAmJiBzdGF0ZS5lbGVtZW50ID09IHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkt
PmRvY3VtZW50RWxlbWVudCgpKQorICAgICAgICAgICAgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQo
KS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCh0cnVlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtMzc1NCw3ICszNzU1LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TGluZUJveENvbnRhaW46IHsKICAgICAgICAgSEFORExFX0lOSEVS
SVRfQU5EX0lOSVRJQUwobGluZUJveENvbnRhaW4sIExpbmVCb3hDb250YWluKQogICAgICAgICBp
ZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVOb25lKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRMaW5lQm94Q29udGFpbihMaW5lQm94
Q29udGFpbk5vbmUpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldExpbmVCb3hDb250YWlu
KExpbmVCb3hDb250YWluTm9uZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApA
QCAtMzc2MiwyMSArMzc2MywyMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgIENTU0xpbmVCb3hDb250YWluVmFsdWUqIGxpbmVCb3hDb250YWluVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NMaW5lQm94Q29udGFpblZhbHVlKj4odmFsdWUpOwotICAgICAgICBtX3N0
eWxlLT5zZXRMaW5lQm94Q29udGFpbihsaW5lQm94Q29udGFpblZhbHVlLT52YWx1ZSgpKTsKKyAg
ICAgICAgc3RhdGUuc3R5bGUtPnNldExpbmVCb3hDb250YWluKGxpbmVCb3hDb250YWluVmFsdWUt
PnZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gQ1NTIEZvbnRzIE1v
ZHVsZSBMZXZlbCAzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRGZWF0dXJlU2V0dGlu
Z3M6IHsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKSB7Ci0gICAgICAgICAgICBzZXRGb250RGVzY3JpcHRp
b24obV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkubWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygp
KTsKKyAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihzdGF0ZS5zdHlsZS0+Zm9udERlc2Ny
aXB0aW9uKCkubWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
biA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAg
ICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7
CiAgICAgICAgIFJlZlB0cjxGb250RmVhdHVyZVNldHRpbmdzPiBzZXR0aW5ncyA9IEZvbnRGZWF0
dXJlU2V0dGluZ3M6OmNyZWF0ZSgpOwogICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7
CkBAIC0zNzk2LDIzICszNzk3LDIzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEZpbHRlcjogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChmaWx0
ZXIsIEZpbHRlcik7CiAgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICAg
ICAgaWYgKGNyZWF0ZUZpbHRlck9wZXJhdGlvbnModmFsdWUsIHN0eWxlKCksIG1fcm9vdEVsZW1l
bnRTdHlsZSwgb3BlcmF0aW9ucykpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRGaWx0ZXIob3Bl
cmF0aW9ucyk7CisgICAgICAgIGlmIChjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKHZhbHVlLCBzdGF0
ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgb3BlcmF0aW9ucykpCisgICAg
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0RmlsdGVyKG9wZXJhdGlvbnMpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRDb2x1bW5z
OiB7CiAgICAgICAgIFZlY3RvcjxHcmlkVHJhY2tTaXplPiB0cmFja1NpemVzOwotICAgICAgICBp
ZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRyYWNrU2l6ZXMsIHRoaXMpKQorICAgICAg
ICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRyYWNrU2l6ZXMsIHN0YXRlKSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0R3JpZENvbHVtbnModHJhY2tT
aXplcyk7CisgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRHcmlkQ29sdW1ucyh0cmFja1NpemVzKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZFJv
d3M6IHsKICAgICAgICAgVmVjdG9yPEdyaWRUcmFja1NpemU+IHRyYWNrU2l6ZXM7Ci0gICAgICAg
IGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwgdHJhY2tTaXplcywgdGhpcykpCisgICAg
ICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwgdHJhY2tTaXplcywgc3RhdGUpKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRHcmlkUm93cyh0cmFja1Np
emVzKTsKKyAgICAgICAgc3RhdGUuc3R5bGUtPnNldEdyaWRSb3dzKHRyYWNrU2l6ZXMpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zODIwLDE0ICszODIxLDE0IEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgICAgIEdyaWRQb3NpdGlvbiBjb2x1bW47CiAgICAgICAgIGlmICghY3JlYXRlR3JpZFBv
c2l0aW9uKHZhbHVlLCBjb2x1bW4pKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0
eWxlLT5zZXRHcmlkSXRlbUNvbHVtbihjb2x1bW4pOworICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0
R3JpZEl0ZW1Db2x1bW4oY29sdW1uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0R3JpZFJvdzogewogICAgICAgICBHcmlkUG9zaXRpb24gcm93Owog
ICAgICAgICBpZiAoIWNyZWF0ZUdyaWRQb3NpdGlvbih2YWx1ZSwgcm93KSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0R3JpZEl0ZW1Sb3cocm93KTsKKyAgICAgICAg
c3RhdGUuc3R5bGUtPnNldEdyaWRJdGVtUm93KHJvdyk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgLy8gVGhlc2UgcHJvcGVydGllcyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIFN0eWxlQnVp
bGRlciBsb29rdXAgdGFibGUuCkBAIC00MTQ5LDE0ICs0MTUwLDE0IEBAIFBhc3NSZWZQdHI8U3R5
bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvCiB7CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hl
ZE9yUGVuZGluZ0ltYWdlKCk7CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFn
ZSgpKQotICAgICAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1
ZSk7CisgICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHks
IHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPFN0
eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKiB2YWx1ZSkKIHsKICAg
ICBpZiAodmFsdWUtPmlzUGVuZGluZygpKSB7Ci0gICAgICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVy
dGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQ
cm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gU3R5bGVQZW5k
aW5nSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7CiAgICAgfQogICAgIHJldHVybiBTdHlsZUdlbmVyYXRl
ZEltYWdlOjpjcmVhdGUodmFsdWUpOwpAQCAtNDE2Nyw3ICs0MTY4LDcgQEAgUGFzc1JlZlB0cjxT
dHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wZXIKIHsKICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2Fj
aGVkT3JQZW5kaW5nSW1hZ2VTZXQoZG9jdW1lbnQoKSk7CiAgICAgaWYgKGltYWdlICYmIGltYWdl
LT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0
KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGll
cy5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQog
I2VuZGlmCkBAIC00MTc2LDE4ICs0MTc3LDIwIEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5
bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvCiB7
CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0lt
YWdlKGRvY3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2Uo
KSkKLSAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUp
OworICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2
YWx1ZSk7CiAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBTdHlsZVJlc29s
dmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KCkKIHsKLSAgICBpZiAobV9zdHlsZS0+dGV4dFNp
emVBZGp1c3QoKSkKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX3N0YXRlLnN0eWxlLmdldCgp
OworCisgICAgaWYgKHN0eWxlLT50ZXh0U2l6ZUFkanVzdCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKG1fc3R5bGUtPmZvbnREZXNj
cmlwdGlvbigpKTsKKyAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKHN0eWxl
LT5mb250RGVzY3JpcHRpb24oKSk7CiAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVk
U2l6ZShuZXdGb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpKTsKLSAgICBtX3N0eWxlLT5z
ZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKKyAgICBzdHlsZS0+c2V0Rm9u
dERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZl
cjo6Y2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlKQpAQCAtNDI1MiwxNSArNDI1NSwxNSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Omlu
aXRpYWxpemVGb250U3R5bGUoU2V0dGluZ3MqIHNldHRpbmdzKQogICAgIH0KICAgICBmb250RGVz
Y3JpcHRpb24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwg
KyAxKTsKICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29y
ZChkb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZmFsc2UpKTsKLSAgICBtX3N0eWxlLT5zZXRM
aW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLSAgICBtX2xpbmVI
ZWlnaHRWYWx1ZSA9IDA7CisgICAgbV9zdGF0ZS5zdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJT
dHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgbV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUg
PSAwOwogICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogfQogCiB2b2lk
IFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBmbG9hdCBzaXplKQogewogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXpl
KHNpemUpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRT
aXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQoKSwgbV9zdHlsZS5nZXQoKSwgZm9udERlc2Ny
aXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNpemUsIHVzZVNWR1pvb21SdWxlcygpKSk7CisgICAg
Zm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lm
aWVkU2l6ZShkb2N1bWVudCgpLCBtX3N0YXRlLnN0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24u
aXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKIH0KIAogZmxvYXQg
U3R5bGVSZXNvbHZlcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQq
IGRvY3VtZW50LCBSZW5kZXJTdHlsZSogc3R5bGUsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0
IHNwZWNpZmllZFNpemUsIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKQpAQCAtNDQ2MywyMCArNDQ2Niwy
MSBAQCBDb2xvciBTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShDU1NQcmlt
aXRpdmVWYWx1ZSogdmFsdWUsIGJvb2wgZm9yVgogICAgIGlmICh2YWx1ZS0+aXNSR0JDb2xvcigp
KQogICAgICAgICByZXR1cm4gQ29sb3IodmFsdWUtPmdldFJHQkEzMlZhbHVlKCkpOwogCisgICAg
Y29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICBpbnQgaWRlbnQgPSB2YWx1ZS0+Z2V0
SWRlbnQoKTsKICAgICBzd2l0Y2ggKGlkZW50KSB7CiAgICAgY2FzZSAwOgogICAgICAgICByZXR1
cm4gQ29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0VGV4dDoKLSAgICAgICAgcmV0dXJu
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dGV4dENvbG9yKCk7CisgICAgICAgIHJldHVybiBzdGF0
ZS5lbGVtZW50LT5kb2N1bWVudCgpLT50ZXh0Q29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlV2Vi
a2l0TGluazoKLSAgICAgICAgcmV0dXJuIChtX2VsZW1lbnQtPmlzTGluaygpICYmIGZvclZpc2l0
ZWRMaW5rKSA/IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtDb2xvcigpIDogbV9l
bGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsKKyAgICAgICAgcmV0dXJuIChzdGF0ZS5l
bGVtZW50LT5pc0xpbmsoKSAmJiBmb3JWaXNpdGVkTGluaykgPyBzdGF0ZS5lbGVtZW50LT5kb2N1
bWVudCgpLT52aXNpdGVkTGlua0NvbG9yKCkgOiBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5s
aW5rQ29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0QWN0aXZlbGluazoKLSAgICAgICAg
cmV0dXJuIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+YWN0aXZlTGlua0NvbG9yKCk7CisgICAgICAg
IHJldHVybiBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5hY3RpdmVMaW5rQ29sb3IoKTsKICAg
ICBjYXNlIENTU1ZhbHVlV2Via2l0Rm9jdXNSaW5nQ29sb3I6CiAgICAgICAgIHJldHVybiBSZW5k
ZXJUaGVtZTo6Zm9jdXNSaW5nQ29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlQ3VycmVudGNvbG9y
OgotICAgICAgICByZXR1cm4gbV9zdHlsZS0+Y29sb3IoKTsKKyAgICAgICAgcmV0dXJuIHN0YXRl
LnN0eWxlLT5jb2xvcigpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBjb2xvckZvckNT
U1ZhbHVlKGlkZW50KTsKICAgICB9CkBAIC00ODEwLDE3ICs0ODE0LDE4IEBAIHN0YXRpYyBGaWx0
ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZmlsdGVyT3BlcmF0aW9uRm9yVHlwZShXZWJLaXRD
U1NGaWx0ZXJWYWx1CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQogdm9p
ZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cygpCiB7Ci0gICAgaWYgKCFt
X3N0eWxlLT5oYXNGaWx0ZXIoKSB8fCBtX3BlbmRpbmdTVkdEb2N1bWVudHMuaXNFbXB0eSgpKQor
ICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgaWYgKCFzdGF0ZS5zdHlsZS0+aGFzRmls
dGVyKCkgfHwgc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKLSAgICBWZWN0
b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9IG1fc3R5bGUt
Pm11dGFibGVGaWx0ZXIoKS5vcGVyYXRpb25zKCk7CisgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIq
IGNhY2hlZFJlc291cmNlTG9hZGVyID0gc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVk
UmVzb3VyY2VMb2FkZXIoKTsKKyAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYg
ZmlsdGVyT3BlcmF0aW9ucyA9IHN0YXRlLnN0eWxlLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9u
cygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJPcGVyYXRpb25zLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRlck9wZXJhdGlv
biA9IGZpbHRlck9wZXJhdGlvbnMuYXQoaSk7CiAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24t
PmdldE9wZXJhdGlvblR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkgewogICAg
ICAgICAgICAgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKiByZWZlcmVuY2VGaWx0ZXIgPSBzdGF0
aWNfY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24uZ2V0KCkp
OwogCi0gICAgICAgICAgICBXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKiB2YWx1ZSA9IG1fcGVu
ZGluZ1NWR0RvY3VtZW50cy5nZXQocmVmZXJlbmNlRmlsdGVyKS5nZXQoKTsKKyAgICAgICAgICAg
IFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWUqIHZhbHVlID0gc3RhdGUucGVuZGluZ1NWR0RvY3Vt
ZW50cy5nZXQocmVmZXJlbmNlRmlsdGVyKS5nZXQoKTsKICAgICAgICAgICAgIGlmICghdmFsdWUp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBDYWNoZWRTVkdEb2N1bWVu
dCogY2FjaGVkRG9jdW1lbnQgPSB2YWx1ZS0+bG9hZChjYWNoZWRSZXNvdXJjZUxvYWRlcik7CkBA
IC00ODMxLDcgKzQ4MzYsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9j
dW1lbnRzKCkKICAgICAgICAgICAgIHJlZmVyZW5jZUZpbHRlci0+c2V0Q2FjaGVkU1ZHRG9jdW1l
bnRSZWZlcmVuY2UoYWRvcHRQdHIobmV3IENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGNhY2hl
ZERvY3VtZW50KSkpOwogICAgICAgICB9CiAgICAgfQotICAgIG1fcGVuZGluZ1NWR0RvY3VtZW50
cy5jbGVhcigpOworICAgIHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMuY2xlYXIoKTsKIH0KICNl
bmRpZgogCkBAIC00ODQ3LDE4ICs0ODUyLDE4IEBAIFN0eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVy
OjpjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShXZWJLaXRDU1NTaGFkZXJWCiB7
CiAgICAgU3R5bGVTaGFkZXIqIHNoYWRlciA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdTaGFkZXIo
KTsKICAgICBpZiAoc2hhZGVyICYmIHNoYWRlci0+aXNQZW5kaW5nU2hhZGVyKCkpCi0gICAgICAg
IG1faGFzUGVuZGluZ1NoYWRlcnMgPSB0cnVlOworICAgICAgICBtX3N0YXRlLmhhc1BlbmRpbmdT
aGFkZXJzID0gdHJ1ZTsKICAgICByZXR1cm4gc2hhZGVyOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmxvYWRQZW5kaW5nU2hhZGVycygpCiB7Ci0gICAgaWYgKCFtX3N0eWxlLT5oYXNGaWx0ZXIo
KSB8fCAhbV9oYXNQZW5kaW5nU2hhZGVycykKKyAgICBpZiAoIW1fc3RhdGUuc3R5bGUtPmhhc0Zp
bHRlcigpIHx8ICFtX3N0YXRlLmhhc1BlbmRpbmdTaGFkZXJzKQogICAgICAgICByZXR1cm47CiAK
LSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2VsZW1l
bnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CisgICAgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9zdGF0ZS5lbGVtZW50LT5kb2N1bWVu
dCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJP
cGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBtX3N0eWxlLT5tdXRhYmxlRmlsdGVyKCku
b3BlcmF0aW9ucygpOworICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0
ZXJPcGVyYXRpb25zID0gbV9zdGF0ZS5zdHlsZS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMo
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVyT3BlcmF0aW9ucy5zaXplKCk7
ICsraSkgewogICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmaWx0ZXJPcGVyYXRpb24g
PSBmaWx0ZXJPcGVyYXRpb25zLmF0KGkpOwogICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLT5n
ZXRPcGVyYXRpb25UeXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT00pIHsKQEAgLTQ4NzUs
NyArNDg4MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJzKCkKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBtX2hhc1BlbmRpbmdTaGFkZXJzID0g
ZmFsc2U7CisgICAgbV9zdGF0ZS5oYXNQZW5kaW5nU2hhZGVycyA9IGZhbHNlOwogfQogCiBzdGF0
aWMgYm9vbCBzb3J0UGFyYW1ldGVyc0J5TmFtZUNvbXBhcmF0b3IoY29uc3QgUmVmUHRyPEN1c3Rv
bUZpbHRlclBhcmFtZXRlcj4mIGEsIGNvbnN0IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+
JiBiKQpAQCAtNDkxNyw3ICs0OTIyLDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0
ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW0KIHsKICAg
ICBSZWZQdHI8Q3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyPiB0cmFuc2Zvcm1QYXJhbWV0
ZXIgPSBDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXI6OmNyZWF0ZShuYW1lKTsKICAgICBU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0
aW9ucyh2YWx1ZXMsIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgb3BlcmF0aW9ucyk7Cisg
ICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZXMsIG1fc3RhdGUuc3R5bGUuZ2V0KCks
IG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgb3BlcmF0aW9ucyk7CiAgICAgdHJhbnNmb3JtUGFy
YW1ldGVyLT5zZXRPcGVyYXRpb25zKG9wZXJhdGlvbnMpOwogICAgIHJldHVybiB0cmFuc2Zvcm1Q
YXJhbWV0ZXIucmVsZWFzZSgpOwogfQpAQCAtNTE1NCwxMiArNTE1OSwxMiBAQCBib29sIFN0eWxl
UmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRl
clN0eWxlKiBzdHlsZQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBX
ZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKiBzdmdEb2N1bWVudFZhbHVlID0gc3RhdGljX2Nhc3Q8
V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSo+KGFyZ3VtZW50KTsKLSAgICAgICAgICAgIEtVUkwg
dXJsID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdmdEb2N1bWVudFZhbHVl
LT51cmwoKSk7CisgICAgICAgICAgICBLVVJMIHVybCA9IG1fc3RhdGUuZWxlbWVudC0+ZG9jdW1l
bnQoKS0+Y29tcGxldGVVUkwoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCkpOwogCiAgICAgICAgICAg
ICBSZWZQdHI8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPiBvcGVyYXRpb24gPSBSZWZlcmVuY2VG
aWx0ZXJPcGVyYXRpb246OmNyZWF0ZShzdmdEb2N1bWVudFZhbHVlLT51cmwoKSwgdXJsLmZyYWdt
ZW50SWRlbnRpZmllcigpLCBvcGVyYXRpb25UeXBlKTsKLSAgICAgICAgICAgIGlmIChTVkdVUklS
ZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCks
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgICAgIGlmIChTVkdVUklSZWZlcmVu
Y2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIG1fc3Rh
dGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXN2Z0RvY3Vt
ZW50VmFsdWUtPmxvYWRSZXF1ZXN0ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9wZW5kaW5n
U1ZHRG9jdW1lbnRzLnNldChvcGVyYXRpb24uZ2V0KCksIHN2Z0RvY3VtZW50VmFsdWUpOworICAg
ICAgICAgICAgICAgICAgICBtX3N0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMuc2V0KG9wZXJhdGlv
bi5nZXQoKSwgc3ZnRG9jdW1lbnRWYWx1ZSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3Zn
RG9jdW1lbnRWYWx1ZS0+Y2FjaGVkU1ZHRG9jdW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAg
b3BlcmF0aW9uLT5zZXRDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShhZG9wdFB0cihuZXcgQ2Fj
aGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+Y2FjaGVkU1ZHRG9jdW1l
bnQoKSkpKTsKICAgICAgICAgICAgIH0KQEAgLTUyNjMsNyArNTI2OCw3IEBAIGJvb2wgU3R5bGVS
ZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVy
U3R5bGUqIHN0eWxlCiAKIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6bG9h
ZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSogcGVuZGluZ0ltYWdlKQogewotICAgIENh
Y2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fZWxlbWVudC0+ZG9j
dW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKKyAgICBDYWNoZWRSZXNvdXJjZUxvYWRl
ciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX3N0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPmNh
Y2hlZFJlc291cmNlTG9hZGVyKCk7CiAKICAgICBpZiAocGVuZGluZ0ltYWdlLT5jc3NJbWFnZVZh
bHVlKCkpIHsKICAgICAgICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VWYWx1ZSA9IHBlbmRpbmdJbWFn
ZS0+Y3NzSW1hZ2VWYWx1ZSgpOwpAQCAtNTI5MywyMyArNTI5OCwyMyBAQCBQYXNzUmVmUHRyPFN0
eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1h
Z2UqIHBlbmRpbgogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKIHsK
LSAgICBpZiAobV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmlzRW1wdHkoKSkKKyAgICBpZiAobV9z
dGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGVuZCA9
IG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5lbmQoKS5rZXlzKCk7Ci0gICAgZm9yIChQZW5kaW5n
SW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQgPSBtX3BlbmRpbmdJbWFn
ZVByb3BlcnRpZXMuYmVnaW4oKS5rZXlzKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIFBlbmRp
bmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBtX3N0YXRlLnBl
bmRpbmdJbWFnZVByb3BlcnRpZXMuZW5kKCkua2V5cygpOworICAgIGZvciAoUGVuZGluZ0ltYWdl
UHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0ID0gbV9zdGF0ZS5wZW5kaW5nSW1h
Z2VQcm9wZXJ0aWVzLmJlZ2luKCkua2V5cygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
Q1NTUHJvcGVydHlJRCBjdXJyZW50UHJvcGVydHkgPSAqaXQ7CiAKICAgICAgICAgc3dpdGNoIChj
dXJyZW50UHJvcGVydHkpIHsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFn
ZTogewotICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIGJhY2tncm91bmRMYXllciA9IG1fc3R5
bGUtPmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKTsgYmFja2dyb3VuZExheWVyOyBiYWNrZ3JvdW5k
TGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkgeworICAgICAgICAgICAgZm9yIChGaWxs
TGF5ZXIqIGJhY2tncm91bmRMYXllciA9IG1fc3RhdGUuc3R5bGUtPmFjY2Vzc0JhY2tncm91bmRM
YXllcnMoKTsgYmFja2dyb3VuZExheWVyOyBiYWNrZ3JvdW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5
ZXItPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kTGF5ZXItPmltYWdl
KCkgJiYgYmFja2dyb3VuZExheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQogICAgICAg
ICAgICAgICAgICAgICBiYWNrZ3JvdW5kTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uo
c3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkp
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5Q29udGVudDogewotICAgICAgICAgICAgZm9yIChDb250ZW50RGF0
YSogY29udGVudERhdGEgPSBjb25zdF9jYXN0PENvbnRlbnREYXRhKj4obV9zdHlsZS0+Y29udGVu
dERhdGEoKSk7IGNvbnRlbnREYXRhOyBjb250ZW50RGF0YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkp
IHsKKyAgICAgICAgICAgIGZvciAoQ29udGVudERhdGEqIGNvbnRlbnREYXRhID0gY29uc3RfY2Fz
dDxDb250ZW50RGF0YSo+KG1fc3RhdGUuc3R5bGUtPmNvbnRlbnREYXRhKCkpOyBjb250ZW50RGF0
YTsgY29udGVudERhdGEgPSBjb250ZW50RGF0YS0+bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGNvbnRlbnREYXRhLT5pc0ltYWdlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgU3R5bGVJ
bWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxJbWFnZUNvbnRlbnREYXRhKj4oY29udGVudERhdGEp
LT5pbWFnZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdl
KCkpIHsKQEAgLTUzMjIsNyArNTMyNyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRp
bmdJbWFnZXMoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUN1cnNvcjogewotICAgICAgICAgICAgaWYgKEN1cnNvckxpc3QqIGN1cnNvckxp
c3QgPSBtX3N0eWxlLT5jdXJzb3JzKCkpIHsKKyAgICAgICAgICAgIGlmIChDdXJzb3JMaXN0KiBj
dXJzb3JMaXN0ID0gbV9zdGF0ZS5zdHlsZS0+Y3Vyc29ycygpKSB7CiAgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjdXJzb3JMaXN0LT5zaXplKCk7ICsraSkgewogICAgICAg
ICAgICAgICAgICAgICBDdXJzb3JEYXRhJiBjdXJyZW50Q3Vyc29yID0gY3Vyc29yTGlzdC0+YXQo
aSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChTdHlsZUltYWdlKiBpbWFnZSA9IGN1cnJlbnRD
dXJzb3IuaW1hZ2UoKSkgewpAQCAtNTMzNCwxNyArNTMzOSwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZTogewotICAgICAgICAgICAgaWYg
KG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkgJiYgbV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKS0+
aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRMaXN0U3R5bGVJ
bWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9z
dHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSkpKTsKKyAgICAgICAgICAgIGlmIChtX3N0YXRlLnN0eWxl
LT5saXN0U3R5bGVJbWFnZSgpICYmIG1fc3RhdGUuc3R5bGUtPmxpc3RTdHlsZUltYWdlKCktPmlz
UGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHlsZS0+c2V0TGlzdFN0
eWxlSW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+
KG1fc3RhdGUuc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkpKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U6IHsK
LSAgICAgICAgICAgIGlmIChtX3N0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpICYmIG1fc3R5bGUt
PmJvcmRlckltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0Qm9yZGVySW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2Fz
dDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCkpKSk7Cisg
ICAgICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBtX3N0
YXRlLnN0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAg
ICAgICAgICAgIG1fc3RhdGUuc3R5bGUtPnNldEJvcmRlckltYWdlU291cmNlKGxvYWRQZW5kaW5n
SW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRlLnN0eWxlLT5ib3Jk
ZXJJbWFnZVNvdXJjZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6IHsKLSAgICAgICAgICAgIGlmIChT
dHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtX3N0eWxlLT5ib3hSZWZsZWN0KCkpIHsKKyAg
ICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtX3N0YXRlLnN0eWxl
LT5ib3hSZWZsZWN0KCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBOaW5lUGllY2VJbWFnZSYg
bWFza0ltYWdlID0gcmVmbGVjdGlvbi0+bWFzaygpOwogICAgICAgICAgICAgICAgIGlmIChtYXNr
SW1hZ2UuaW1hZ2UoKSAmJiBtYXNrSW1hZ2UuaW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkgewog
ICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZGVkSW1hZ2UgPSBsb2Fk
UGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obWFza0ltYWdlLmlt
YWdlKCkpKTsKQEAgLTUzNTQsMTIgKzUzNTksMTIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2Fk
UGVuZGluZ0ltYWdlcygpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlOiB7Ci0gICAgICAgICAgICBp
ZiAobV9zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCkgJiYgbV9zdHlsZS0+bWFza0JveEltYWdl
U291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0
TWFza0JveEltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5k
aW5nSW1hZ2UqPihtX3N0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSkpKTsKKyAgICAgICAgICAg
IGlmIChtX3N0YXRlLnN0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSAmJiBtX3N0YXRlLnN0eWxl
LT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAg
ICBtX3N0YXRlLnN0eWxlLT5zZXRNYXNrQm94SW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShz
dGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3RhdGUuc3R5bGUtPm1hc2tCb3hJbWFn
ZVNvdXJjZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZTogewotICAgICAgICAgICAgZm9yIChGaWxsTGF5
ZXIqIG1hc2tMYXllciA9IG1fc3R5bGUtPmFjY2Vzc01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBt
YXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkgeworICAgICAgICAgICAgZm9yIChGaWxsTGF5
ZXIqIG1hc2tMYXllciA9IG1fc3RhdGUuc3R5bGUtPmFjY2Vzc01hc2tMYXllcnMoKTsgbWFza0xh
eWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlm
IChtYXNrTGF5ZXItPmltYWdlKCkgJiYgbWFza0xheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFn
ZSgpKQogICAgICAgICAgICAgICAgICAgICBtYXNrTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5n
SW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrTGF5ZXItPmltYWdlKCkp
KSk7CiAgICAgICAgICAgICB9CkBAIC01MzcwLDcgKzUzNzUsNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fcGVuZGlu
Z0ltYWdlUHJvcGVydGllcy5jbGVhcigpOworICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVy
dGllcy5jbGVhcigpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nUmVzb3Vy
Y2VzKCkKQEAgLTU0MzMsNyArNTQzOCw2IEBAIHZvaWQgTWVkaWFRdWVyeVJlc3VsdDo6cmVwb3J0
TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uCiB2b2lk
IFN0eWxlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9y
eU9iamVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2Jq
ZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwotICAgIGluZm8uYWRkTWVt
YmVyKG1fc3R5bGUpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fYXV0aG9yU3R5bGUpOwogICAgIGlu
Zm8uYWRkTWVtYmVyKG1fdXNlclN0eWxlKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2ZlYXR1cmVz
KTsKQEAgLTU0NDIsMzMgKzU0NDYsMjAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpyZXBvcnRNZW1v
cnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogICAgIGlu
Zm8uYWRkTWVtYmVyKG1fa2V5ZnJhbWVzUnVsZU1hcCk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9t
YXRjaGVkUHJvcGVydGllc0NhY2hlKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX21hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX21hdGNoZWRSdWxl
cyk7CiAKLSAgICBpbmZvLmFkZE1lbWJlcihtX3J1bGVMaXN0KTsKLSAgICBpbmZvLmFkZE1lbWJl
cihtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fbWVkaXVt
KTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3Jvb3REZWZhdWx0U3R5bGUpOwogICAgIGluZm8uYWRk
TWVtYmVyKG1fZG9jdW1lbnQpOwogCi0gICAgLy8gRklYTUU6IHBvaW50ZXIgdG8gUmVuZGVyU3R5
bGUgY291bGQgcG9pbnQgdG8gYW4gYWxyZWFkeSBkZWxldGVkIG9iamVjdC4KLSAgICBpbmZvLmln
bm9yZU1lbWJlcihtX3BhcmVudFN0eWxlKTsKLSAgICBpbmZvLmlnbm9yZU1lbWJlcihtX3Jvb3RF
bGVtZW50U3R5bGUpOwotCi0gICAgaW5mby5hZGRNZW1iZXIobV9lbGVtZW50KTsKLSAgICBpbmZv
LmFkZE1lbWJlcihtX3N0eWxlZEVsZW1lbnQpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fcmVnaW9u
Rm9yU3R5bGluZyk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9wYXJlbnROb2RlKTsKLSAgICBpbmZv
LmFkZE1lbWJlcihtX2xpbmVIZWlnaHRWYWx1ZSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9mb250
U2VsZWN0b3IpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1
ZXJ5UmVzdWx0cyk7CiAgICAgaW5mby5pZ25vcmVNZW1iZXIobV9zdHlsZUJ1aWxkZXIpOwogICAg
IGluZm8uYWRkTWVtYmVyKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXApOwogICAgIGluZm8u
YWRkTWVtYmVyKG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCk7Ci0jaWYgRU5BQkxFKENTU19G
SUxURVJTKSAmJiBFTkFCTEUoU1ZHKQotICAgIGluZm8uYWRkTWVtYmVyKG1fcGVuZGluZ1NWR0Rv
Y3VtZW50cyk7Ci0jZW5kaWYKICAgICBpbmZvLmFkZE1lbWJlcihtX3Njb3BlUmVzb2x2ZXIpOwog
CisgICAgaW5mby5hZGRNZW1iZXIobV9zdGF0ZSk7CisKICAgICAvLyBGSVhNRTogbW92ZSB0aGlz
IHRvIGEgcGxhY2Ugd2hlcmUgaXQgd291bGQgYmUgY2FsbGVkIG9ubHkgb25jZT8KICAgICBpbmZv
LmFkZE1lbWJlcihkZWZhdWx0U3R5bGUpOwogICAgIGluZm8uYWRkTWVtYmVyKGRlZmF1bHRRdWly
a3NTdHlsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5o
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCAzMzM2NmM3Njc5MTFl
NzMwMTlmOTQ5NGJjZWI0ZGM4YjBjODc0NzU4Li5iNjZlZjIzMGIzNjhmNzRjNjM1NTE3MjQ5Y2M4
ZWE1OWY1ODJmZWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTIzLDYgKzIz
LDcgQEAKICNkZWZpbmUgU3R5bGVSZXNvbHZlcl9oCiAKICNpbmNsdWRlICJDU1NSdWxlLmgiCisj
aW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKICNpbmNsdWRlICJDU1NUb1N0eWxlTWFwLmgiCiAjaW5j
bHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiTGlua0hhc2guaCIKQEAgLTM2LDYgKzM3
LDkgQEAKICNpbmNsdWRlICJTdHlsZUluaGVyaXRlZERhdGEuaCIKICNpbmNsdWRlICJTdHlsZVNj
b3BlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJWaWV3cG9ydFN0eWxlUmVzb2x2ZXIuaCIKKyNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiV2ViS2l0Q1NTU1ZH
RG9jdW1lbnRWYWx1ZS5oIgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTE2MSwyMCAr
MTY1LDIwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBz
dHlsZUZvckRvY3VtZW50KERvY3VtZW50KiwgQ1NTRm9udFNlbGVjdG9yKiA9IDApOwogCi0gICAg
UmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotICAg
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7
IH0KLSAgICBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cm9vdEVsZW1lbnRTdHlsZTsgfQotICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biBtX2VsZW1lbnQ7IH0KKyAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnN0eWxlLmdldCgpOyB9CisgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnRTdHlsZTsgfQorICAgIFJlbmRlclN0eWxlKiByb290
RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5yb290RWxlbWVudFN0eWxlOyB9
CisgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZWxlbWVudDsg
fQogICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0K
ICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHN0
eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOyB9CiAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBw
YXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBwYXJlbnRTdHlsZSgpLT5mb250RGVzY3Jp
cHRpb24oKTsgfQotICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldEZvbnRE
ZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9Ci0gICAgdm9pZCBzZXRab29tKGZsb2F0IGYp
IHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0Wm9vbShmKTsgfQotICAgIHZvaWQgc2V0RWZm
ZWN0aXZlWm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldEVmZmVjdGl2
ZVpvb20oZik7IH0KLSAgICB2b2lkIHNldFRleHRTaXplQWRqdXN0KGJvb2wgYikgeyBtX2ZvbnRE
aXJ0eSB8PSBzdHlsZSgpLT5zZXRUZXh0U2l6ZUFkanVzdChiKTsgfQotICAgIHZvaWQgc2V0V3Jp
dGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgbV9mb250RGlydHkgfD0gc3R5bGUo
KS0+c2V0V3JpdGluZ01vZGUod3JpdGluZ01vZGUpOyB9Ci0gICAgdm9pZCBzZXRUZXh0T3JpZW50
YXRpb24oVGV4dE9yaWVudGF0aW9uIHRleHRPcmllbnRhdGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBz
dHlsZSgpLT5zZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQotICAgIGJvb2wg
aGFzUGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50Tm9kZTsgfQorICAgIHZvaWQg
c2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KSB7IG1fc3RhdGUuZm9udERpcnR5IHw9IHN0eWxlKCktPnNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOyB9CisgICAgdm9pZCBzZXRab29tKGZsb2F0IGYpIHsgbV9zdGF0ZS5mb250
RGlydHkgfD0gc3R5bGUoKS0+c2V0Wm9vbShmKTsgfQorICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9v
bShmbG9hdCBmKSB7IG1fc3RhdGUuZm9udERpcnR5IHw9IHN0eWxlKCktPnNldEVmZmVjdGl2ZVpv
b20oZik7IH0KKyAgICB2b2lkIHNldFRleHRTaXplQWRqdXN0KGJvb2wgYikgeyBtX3N0YXRlLmZv
bnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRUZXh0U2l6ZUFkanVzdChiKTsgfQorICAgIHZvaWQgc2V0
V3JpdGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgbV9zdGF0ZS5mb250RGlydHkg
fD0gc3R5bGUoKS0+c2V0V3JpdGluZ01vZGUod3JpdGluZ01vZGUpOyB9CisgICAgdm9pZCBzZXRU
ZXh0T3JpZW50YXRpb24oVGV4dE9yaWVudGF0aW9uIHRleHRPcmllbnRhdGlvbikgeyBtX3N0YXRl
LmZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9u
KTsgfQorICAgIGJvb2wgaGFzUGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucGFy
ZW50Tm9kZTsgfQogCiAgICAgdm9pZCByZXNldEF1dGhvclN0eWxlKCk7CiAgICAgdm9pZCBhcHBl
bmRBdXRob3JTdHlsZVNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlB0
cjxDU1NTdHlsZVNoZWV0PiA+Jik7CkBAIC0zMDgsNyArMzEyLDcgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgYWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlVG9BZGp1c3QsIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVudCopOwogCi0gICAgdm9pZCBhZGRNYXRjaGVkUnVs
ZShjb25zdCBSdWxlRGF0YSogcnVsZSkgeyBtX21hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7IH0K
KyAgICB2b2lkIGFkZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKiBydWxlKSB7IG1fc3RhdGUu
bWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxlKTsgfQogCiAgICAgc3RydWN0IFJ1bGVSYW5nZSB7CiAg
ICAgICAgIFJ1bGVSYW5nZShpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgp
OiBmaXJzdFJ1bGVJbmRleChmaXJzdFJ1bGVJbmRleCksIGxhc3RSdWxlSW5kZXgobGFzdFJ1bGVJ
bmRleCkgeyB9CkBAIC00MTgsMTUgKzQyMiw4NiBAQCBwcml2YXRlOgogICAgIE93blB0cjxSdWxl
U2V0PiBtX3NpYmxpbmdSdWxlU2V0OwogICAgIE93blB0cjxSdWxlU2V0PiBtX3VuY29tbW9uQXR0
cmlidXRlUnVsZVNldDsKIAotICAgIGJvb2wgbV9oYXNVQUFwcGVhcmFuY2U7Ci0gICAgQm9yZGVy
RGF0YSBtX2JvcmRlckRhdGE7Ci0gICAgRmlsbExheWVyIG1fYmFja2dyb3VuZERhdGE7Ci0gICAg
Q29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7Ci0KICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3Ry
aW5nSW1wbCosIFJlZlB0cjxTdHlsZVJ1bGVLZXlmcmFtZXM+ID4gS2V5ZnJhbWVzUnVsZU1hcDsK
ICAgICBLZXlmcmFtZXNSdWxlTWFwIG1fa2V5ZnJhbWVzUnVsZU1hcDsKIAogcHVibGljOgorICAg
IHR5cGVkZWYgSGFzaE1hcDxDU1NQcm9wZXJ0eUlELCBSZWZQdHI8Q1NTVmFsdWU+ID4gUGVuZGlu
Z0ltYWdlUHJvcGVydHlNYXA7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZH
KQorICAgIHR5cGVkZWYgSGFzaE1hcDxGaWx0ZXJPcGVyYXRpb24qLCBSZWZQdHI8V2ViS2l0Q1NT
U1ZHRG9jdW1lbnRWYWx1ZT4gPiBQZW5kaW5nU1ZHRG9jdW1lbnRNYXA7CisjZW5kaWYKKworICAg
IGNsYXNzIFN0YXRlIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RhdGUpOworICAg
IHB1YmxpYzoKKyAgICAgICAgU3RhdGUoKQorICAgICAgICA6IGVsZW1lbnQoMCkKKyAgICAgICAg
LCBzdHlsZWRFbGVtZW50KDApCisgICAgICAgICwgcGFyZW50Tm9kZSgwKQorICAgICAgICAsIHBh
cmVudFN0eWxlKDApCisgICAgICAgICwgcm9vdEVsZW1lbnRTdHlsZSgwKQorICAgICAgICAsIHJl
Z2lvbkZvclN0eWxpbmcoMCkKKyAgICAgICAgLCBzYW1lT3JpZ2luT25seShmYWxzZSkKKyAgICAg
ICAgLCBwc2V1ZG9TdHlsZShOT1BTRVVETykKKyAgICAgICAgLCBlbGVtZW50TGlua1N0YXRlKE5v
dEluc2lkZUxpbmspCisgICAgICAgICwgZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KGZhbHNl
KQorICAgICAgICAsIGVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyhmYWxzZSkKKyAgICAgICAg
LCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSkKKyAgICAgICAgLCBhcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKQorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAg
ICAgICAgLCBoYXNQZW5kaW5nU2hhZGVycyhmYWxzZSkKKyNlbmRpZgorICAgICAgICAsIGxpbmVI
ZWlnaHRWYWx1ZSgwKQorICAgICAgICAsIGZvbnREaXJ0eShmYWxzZSkKKyAgICAgICAgLCBoYXNV
QUFwcGVhcmFuY2UoZmFsc2UpCisgICAgICAgICwgYmFja2dyb3VuZERhdGEoQmFja2dyb3VuZEZp
bGxMYXllcikgeyB9CisgICAgICAgIAorcHVibGljOgorICAgICAgICAvLyBGSVhNRTogdG8gbWFr
ZSBpdCBlYXNpZXIgdG8gcmV2aWV3LCB0aGVzZSBtZW1iZXIgdmFyaWFibGVzIGFyZQorICAgICAg
ICAvLyBwdWJsaWMuIEhvd2V2ZXIgd2Ugc2hvdWxkIGFkZCBtZXRob2RzIHRvIGFjY2VzcyB0aGVz
ZSB2YXJpYWJsZXMuCisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQ7CisgICAgICAgIFJlZlB0cjxS
ZW5kZXJTdHlsZT4gc3R5bGU7CisgICAgICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQ7
CisgICAgICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGU7CisgICAgICAgIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGU7Cisg
ICAgICAgIAorICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmc7CisgICAgICAg
IGJvb2wgc2FtZU9yaWdpbk9ubHk7CisgICAgICAgIFBzZXVkb0lkIHBzZXVkb1N0eWxlOworCisg
ICAgICAgIEVJbnNpZGVMaW5rIGVsZW1lbnRMaW5rU3RhdGU7CisKKyAgICAgICAgYm9vbCBkaXN0
cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQ7CisKKyAgICAgICAgYm9vbCBlbGVtZW50QWZmZWN0ZWRC
eUNsYXNzUnVsZXM7CisKKyAgICAgICAgUHNldWRvSWQgZHluYW1pY1BzZXVkbzsKKworICAgICAg
ICAvLyBBIGJ1ZmZlciB1c2VkIHRvIGhvbGQgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIGZvciBh
biBlbGVtZW50LAorICAgICAgICAvLyBhbmQgYSB0ZW1wb3JhcnkgYnVmZmVyIHVzZWQgZm9yIG1l
cmdlIHNvcnRpbmcuCisgICAgICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiBtYXRjaGVk
UnVsZXM7CisgICAgICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4gcnVsZUxpc3Q7CisKKyAg
ICAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7CisgICAgICAgIGJvb2wgYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsKKworICAgICAgICBQZW5kaW5nSW1hZ2VQcm9w
ZXJ0eU1hcCBwZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzOworI2lmIEVOQUJMRShDU1NfU0hBREVSUykK
KyAgICAgICAgYm9vbCBoYXNQZW5kaW5nU2hhZGVyczsKKyNlbmRpZgorI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykgJiYgRU5BQkxFKFNWRykKKyAgICAgICAgUGVuZGluZ1NWR0RvY3VtZW50TWFwIHBl
bmRpbmdTVkdEb2N1bWVudHM7CisjZW5kaWYKKyAgICAgICAgQ1NTVmFsdWUqIGxpbmVIZWlnaHRW
YWx1ZTsKKyAgICAgICAgYm9vbCBmb250RGlydHk7CisKKyAgICAgICAgYm9vbCBoYXNVQUFwcGVh
cmFuY2U7CisgICAgICAgIEJvcmRlckRhdGEgYm9yZGVyRGF0YTsKKyAgICAgICAgRmlsbExheWVy
IGJhY2tncm91bmREYXRhOworICAgICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3I7CisgICAgfTsK
KwogICAgIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVOb3RZZXRBdmFpbGFibGUoKSB7IHJldHVy
biBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOyB9CiAKICAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IHN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKQEAgLTQzNyw4ICs1MTIsOCBA
QCBwdWJsaWM6CiAjZW5kaWYKICAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGN1cnNvck9yUGVu
ZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NDdXJzb3JJbWFnZVZhbHVlKik7CiAKLSAg
ICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOyB9Ci0gICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNp
dGVkTGlua1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlOyB9CisgICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsgfQorICAgIGJvb2wg
YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsgfQogCiAgICAgc3RhdGljIExlbmd0aCBj
b252ZXJ0VG9JbnRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqLCBSZW5kZXJTdHlsZSosIFJlbmRl
clN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyID0gMSk7CiAgICAgc3RhdGljIExl
bmd0aCBjb252ZXJ0VG9GbG9hdExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSosIFJlbmRlclN0eWxl
KiwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIgPSAxKTsKQEAgLTQ5
MSwzOSArNTY2LDE4IEBAIHByaXZhdGU6CiAKICAgICBUaW1lcjxTdHlsZVJlc29sdmVyPiBtX21h
dGNoZWRQcm9wZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyOwogCi0gICAgLy8gQSBidWZmZXIgdXNlZCB0
byBob2xkIHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcyBmb3IgYW4gZWxlbWVudCwgYW5kIGEgdGVt
cG9yYXJ5IGJ1ZmZlciB1c2VkIGZvcgotICAgIC8vIG1lcmdlIHNvcnRpbmcuCi0gICAgVmVjdG9y
PGNvbnN0IFJ1bGVEYXRhKiwgMzI+IG1fbWF0Y2hlZFJ1bGVzOwotCi0gICAgUmVmUHRyPFN0YXRp
Y0NTU1J1bGVMaXN0PiBtX3J1bGVMaXN0OwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPENTU1Byb3Bl
cnR5SUQsIFJlZlB0cjxDU1NWYWx1ZT4gPiBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDsKLSAgICBQ
ZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcCBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXM7Ci0KICAgICBP
d25QdHI8TWVkaWFRdWVyeUV2YWx1YXRvcj4gbV9tZWRpdW07CiAgICAgUmVmUHRyPFJlbmRlclN0
eWxlPiBtX3Jvb3REZWZhdWx0U3R5bGU7CiAKLSAgICBQc2V1ZG9JZCBtX2R5bmFtaWNQc2V1ZG87
Ci0gICAgUHNldWRvSWQgbV9wc2V1ZG9TdHlsZTsKLQogICAgIERvY3VtZW50KiBtX2RvY3VtZW50
OworICAgIC8vIEZJWE1FOiBNYWtlIFNlbGVjdG9yQ2hlY2tlciBhbiBvbi1zdGFjayBvYmplY3Qg
YW5kCisgICAgLy8gbW92ZSBzZWxlY3RvckNoZWNrZXIubW9kZSgpIHRvIFN0YXRlLgorICAgIC8v
IHNlbGVjdG9yQ2hlY2tlci5zdHJpbmdQYXJzaW5nKCkgY2FuIGJlIHJlcGxhY2VkIHdpdGgKKyAg
ICAvLyAhZG9jdW1lbnQuaW5RdWlya3NNb2RlKCkuCiAgICAgU2VsZWN0b3JDaGVja2VyIG1fc2Vs
ZWN0b3JDaGVja2VyOwogICAgIFNlbGVjdG9yRmlsdGVyIG1fc2VsZWN0b3JGaWx0ZXI7CiAKLSAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7Ci0gICAgUmVuZGVyU3R5bGUqIG1fcGFyZW50
U3R5bGU7Ci0gICAgUmVuZGVyU3R5bGUqIG1fcm9vdEVsZW1lbnRTdHlsZTsKLSAgICBFbGVtZW50
KiBtX2VsZW1lbnQ7Ci0gICAgU3R5bGVkRWxlbWVudCogbV9zdHlsZWRFbGVtZW50OwotICAgIFJl
bmRlclJlZ2lvbiogbV9yZWdpb25Gb3JTdHlsaW5nOwotICAgIEVJbnNpZGVMaW5rIG1fZWxlbWVu
dExpbmtTdGF0ZTsKLSAgICBib29sIG1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzOwotICAg
IENvbnRhaW5lck5vZGUqIG1fcGFyZW50Tm9kZTsKLSAgICBDU1NWYWx1ZSogbV9saW5lSGVpZ2h0
VmFsdWU7Ci0gICAgYm9vbCBtX2ZvbnREaXJ0eTsKICAgICBib29sIG1fbWF0Y2hBdXRob3JBbmRV
c2VyU3R5bGVzOwotICAgIGJvb2wgbV9zYW1lT3JpZ2luT25seTsKLSAgICBib29sIG1fZGlzdHJp
YnV0ZWRUb0luc2VydGlvblBvaW50OwogCiAgICAgUmVmUHRyPENTU0ZvbnRTZWxlY3Rvcj4gbV9m
b250U2VsZWN0b3I7CiAgICAgVmVjdG9yPE93blB0cjxNZWRpYVF1ZXJ5UmVzdWx0PiA+IG1fdmll
d3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0czsKQEAgLTUzMiwyNCArNTg2LDE2IEBAIHBy
aXZhdGU6CiAgICAgUmVmUHRyPFZpZXdwb3J0U3R5bGVSZXNvbHZlcj4gbV92aWV3cG9ydFN0eWxl
UmVzb2x2ZXI7CiAjZW5kaWYKIAotICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGU7Ci0gICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7CiAgICAgY29u
c3QgU3R5bGVCdWlsZGVyJiBtX3N0eWxlQnVpbGRlcjsKICAgICAKICAgICBIYXNoTWFwPFN0eWxl
UnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+ID4gbV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1h
cDsKICAgICBIYXNoU2V0PFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+IG1fc3R5bGVTaGVldENTU09N
V3JhcHBlclNldDsKIAotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBib29sIG1faGFzUGVu
ZGluZ1NoYWRlcnM7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxF
KFNWRykKLSAgICBIYXNoTWFwPEZpbHRlck9wZXJhdGlvbiosIFJlZlB0cjxXZWJLaXRDU1NTVkdE
b2N1bWVudFZhbHVlPiA+IG1fcGVuZGluZ1NWR0RvY3VtZW50czsKLSNlbmRpZgotCiAgICAgT3du
UHRyPFN0eWxlU2NvcGVSZXNvbHZlcj4gbV9zY29wZVJlc29sdmVyOwogICAgIENTU1RvU3R5bGVN
YXAgbV9zdHlsZU1hcDsKIAorICAgIFN0YXRlIG1fc3RhdGU7CisKICAgICBmcmllbmQgY2xhc3Mg
U3R5bGVCdWlsZGVyOwogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgTWF0Y2hlZFBy
b3BlcnRpZXMmLCBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYpOwogICAgIGZyaWVuZCBib29sIG9w
ZXJhdG9yIT0oY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmLCBjb25zdCBNYXRjaGVkUHJvcGVydGll
cyYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185930</attachid>
            <date>2013-01-31 21:03:15 -0800</date>
            <delta_ts>2013-01-31 21:14:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96421-20130201135958.patch</filename>
            <type>text/plain</type>
            <size>138605</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTZiNGI1YWQ3MWJmYTI2
MjFjMjJmNDZmNDY1YTFjNTlkOWU1N2NhMy4uMjU3NmMzNWYxZTJmMzQ5MWU3NzFmOTA5ZDQxNTVj
MzM0ODNkMTk4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDEzLTAxLTMxICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBTcGxpdCBwZXItcmVz
b2x2ZSBsb2dpYyBvdXQgZnJvbSBTdHlsZVJlc29sdmVyLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY0MjEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCBjbGFzcyBTdHlsZVJlc29sdmVy
OjpTdGF0ZSBhbmQgYWRkZWQgbV9zdGF0ZSB0bworICAgICAgICBTdHlsZVJlc29sdmVyLiBBbGwg
bWVtYmVyIHZhcmlhYmxlcyB1c2VkIGZvciBwZXItcmVzb2x2ZSBsb2dpYyBhcmUKKyAgICAgICAg
bW92ZWQgaW50byB0aGUgc3RhdGUgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNh
dXNlIGp1c3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBjc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5
KToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24p
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hl
ZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0
aG9yUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5n
Q2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpt
YXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNo
VXNlclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxl
c0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRS
dWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRGb3JTdHlsZVJlc29sdmUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVT
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhD
b250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRh
dGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjphZGp1c3RSZW5kZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojp1cGRhdGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlQm9y
ZGVyQW5kQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1
ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpydWxlTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1Jl
Z2lvblNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0JyZWFkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlR3JpZFRyYWNrTWluTWF4KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRU
cmFja0dyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0xpc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTVkdEb2N1bWVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFk
ZXJGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRp
bmdTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9t
RmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6bG9hZFBlbmRpbmdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojpsb2FkUGVuZGluZ0ltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpy
ZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnJvb3RFbGVtZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250RGVzY3Jp
cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Wm9vbSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRFZmZlY3RpdmVab29tKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpoYXNQYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmFkZE1hdGNoZWRSdWxlKToKKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAg
ICAoU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OlN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlKToKKyAgICAgICAgQWRkZWQgIm1fc3RhdGUuIiB0byBhY2Nlc3Mg
bWVtYmVyIHZhcmlhYmxlcyB1c2VkIGZvciBwZXItcmVzb2x2ZSBsb2dpYy4KKwogMjAxMy0wMS0z
MSAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjE0MTUwMi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHls
ZVNlbGVjdG9yLmNwcAppbmRleCA2MTQ1YmIxZjE2MjViOGZlNGQxNjc2MDdiYmJhOGJmZDlhMWIw
MTE5Li5hYjU2ZjY2MTE3OTdmZDk0Nzc5NmY0OGYzMTM5ZTc4MTNhOTdlODNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC00OSw3ICs0OSw3IEBACiAj
ZGVmaW5lIEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlmIChpc0luaGVyaXQpIFwKIHsg
XAotICAgIHN2Z3N0eWxlLT5zZXQjI1Byb3AobV9wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKS0+cHJv
cCgpKTsgXAorICAgIHN2Z3N0eWxlLT5zZXQjI1Byb3Aoc3RhdGUucGFyZW50U3R5bGUtPnN2Z1N0
eWxlKCktPnByb3AoKSk7IFwKICAgICByZXR1cm47IFwKIH0KIApAQCAtMTA5LDEwICsxMDksMTEg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAg
ICAgICAgcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlKTsKIAotICAgIFNWR1JlbmRlclN0eWxlKiBzdmdzdHlsZSA9IG1fc3R5bGUtPmFjY2Vzc1NW
R1N0eWxlKCk7CisgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKyAgICBTVkdSZW5k
ZXJTdHlsZSogc3Znc3R5bGUgPSBzdGF0ZS5zdHlsZS0+YWNjZXNzU1ZHU3R5bGUoKTsKIAotICAg
IGJvb2wgaXNJbmhlcml0ID0gbV9wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVl
KCk7Ci0gICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAoIW1f
cGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKKyAgICBib29sIGlzSW5o
ZXJpdCA9IHN0YXRlLnBhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKKyAg
ICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICghc3RhdGUucGFy
ZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKIAogICAgIC8vIFdoYXQgZm9s
bG93cyBpcyBhIGxpc3QgdGhhdCBtYXBzIHRoZSBDU1MgcHJvcGVydGllcyBpbnRvIHRoZWlyCiAg
ICAgLy8gY29ycmVzcG9uZGluZyBmcm9udC1lbmQgUmVuZGVyU3R5bGUgdmFsdWVzLiBTaG9ydGhh
bmRzKGUuZy4gYm9yZGVyLApAQCAtMjI5LDcgKzIzMCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlGaWxsOgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoaXNJ
bmhlcml0KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1BhcmVu
dFN0eWxlID0gbV9wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBjb25z
dCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZS0+c3Zn
U3R5bGUoKTsKICAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KHN2Z1BhcmVu
dFN0eWxlLT5maWxsUGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRDb2xvcigp
LCBzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50VXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTIzOSwxNCArMjQwLDE0IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHUGFpbnQo
KSkgewogICAgICAgICAgICAgICAgIFNWR1BhaW50KiBzdmdQYWludCA9IHN0YXRpY19jYXN0PFNW
R1BhaW50Kj4odmFsdWUpOwotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQo
c3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50
LCBtX3N0eWxlLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAg
ICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29s
b3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUtPmNvbG9yKCkpLCBz
dmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZToKICAgICAgICAg
ewogICAgICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFNW
R1JlbmRlclN0eWxlKiBzdmdQYXJlbnRTdHlsZSA9IG1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCk7
CisgICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1BhcmVudFN0eWxlID0g
c3RhdGUucGFyZW50U3R5bGUtPnN2Z1N0eWxlKCk7CiAgICAgICAgICAgICAgICAgc3Znc3R5bGUt
PnNldFN0cm9rZVBhaW50KHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludFR5cGUoKSwgc3ZnUGFy
ZW50U3R5bGUtPnN0cm9rZVBhaW50Q29sb3IoKSwgc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50
VXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNp
dGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
QEAgLTI1Niw3ICsyNTcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKHZhbHVlLT5pc1NWR1BhaW50KCkpIHsKICAgICAgICAgICAgICAgICBTVkdQYWlu
dCogc3ZnUGFpbnQgPSBzdGF0aWNfY2FzdDxTVkdQYWludCo+KHZhbHVlKTsKLSAgICAgICAgICAg
ICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xv
ckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBtX3N0eWxlLT5jb2xvcigpKSwgc3ZnUGFp
bnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRv
VmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tl
UGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2
Z1BhaW50LCBzdGF0ZS5zdHlsZS0+Y29sb3IoKSksIHN2Z1BhaW50LT51cmkoKSwgYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzYzLDcg
KzM2NCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUt
PmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXJrZXJTdGFy
dFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmlu
ZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRN
YXJrZXJTdGFydFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJv
bUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFya2VyTWlkOgpAQCAt
Mzc3LDcgKzM3OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBzID0gcHJpbWl0aXZl
VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXJr
ZXJNaWRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklT
dHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+
c2V0TWFya2VyTWlkUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJG
cm9tSVJJU3RyaW5nKHMsIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJrZXJFbmQ6CkBA
IC0zOTEsNyArMzkyLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBlID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmltaXRp
dmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1h
cmtlckVuZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlS
SVN0cmluZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxl
LT5zZXRNYXJrZXJFbmRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmll
ckZyb21JUklTdHJpbmcocywgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZUxpbmVj
YXA6CkBAIC00MjgsNyArNDI5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0
eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBw
cmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUt
PnNldEZpbHRlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJv
bUlSSVN0cmluZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0
eWxlLT5zZXRGaWx0ZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmll
ckZyb21JUklTdHJpbmcocywgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hc2s6CkBAIC00
NDIsNyArNDQzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBlID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmltaXRpdmVW
YWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hc2tl
clJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmlu
ZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRN
YXNrZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklT
dHJpbmcocywgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNsaXBQYXRoOgpAQCAtNDU2LDcg
KzQ1Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUt
PmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRDbGlwcGVyUmVz
b3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMs
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNldENsaXBw
ZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJp
bmcocywgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRBbmNob3I6CkBAIC00NzcsMTQg
KzQ3OCwxNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBIQU5ETEVf
SU5IRVJJVF9BTkRfSU5JVElBTChzdG9wQ29sb3IsIFN0b3BDb2xvcik7CiAgICAgICAgICAgICBp
ZiAodmFsdWUtPmlzU1ZHQ29sb3IoKSkKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Rv
cENvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2
YWx1ZSksIG1fc3R5bGUtPmNvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0
U3RvcENvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3Iq
Pih2YWx1ZSksIHN0YXRlLnN0eWxlLT5jb2xvcigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMaWdodGluZ0NvbG9yOgogICAgICAgICB7
CiAgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChsaWdodGluZ0NvbG9yLCBM
aWdodGluZ0NvbG9yKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAg
ICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRMaWdodGluZ0NvbG9yKGNvbG9yRnJvbVNWR0NvbG9y
Q1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSksIG1fc3R5bGUtPmNvbG9yKCkp
KTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TGlnaHRpbmdDb2xvcihjb2xvckZyb21T
VkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5zdHls
ZS0+Y29sb3IoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUZsb29kT3BhY2l0eToKQEAgLTUwOSw3ICs1MTAsNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChm
bG9vZENvbG9yLCBGbG9vZENvbG9yKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdDb2xv
cigpKQotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGbG9vZENvbG9yKGNvbG9yRnJvbVNW
R0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSksIG1fc3R5bGUtPmNv
bG9yKCkpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0Rmxvb2RDb2xvcihjb2xvckZy
b21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5z
dHlsZS0+Y29sb3IoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsOgpAQCAtNTQ5LDcgKzU1
MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFN2Z1NoYWRvdzogewogICAgICAgICAgICAgaWYgKGlzSW5oZXJpdCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gc3Znc3R5bGUtPnNldFNoYWRvdyhhZG9wdFB0cihtX3Bh
cmVudFN0eWxlLT5zdmdTdHlsZSgpLT5zaGFkb3coKSA/IG5ldyBTaGFkb3dEYXRhKCptX3BhcmVu
dFN0eWxlLT5zdmdTdHlsZSgpLT5zaGFkb3coKSkgOiAwKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHN2Z3N0eWxlLT5zZXRTaGFkb3coYWRvcHRQdHIoc3RhdGUucGFyZW50U3R5bGUtPnN2Z1N0
eWxlKCktPnNoYWRvdygpID8gbmV3IFNoYWRvd0RhdGEoKnN0YXRlLnBhcmVudFN0eWxlLT5zdmdT
dHlsZSgpLT5zaGFkb3coKSkgOiAwKSk7CiAgICAgICAgICAgICBpZiAoaXNJbml0aWFsIHx8IHBy
aW1pdGl2ZVZhbHVlKSAvLyBpbml0aWFsIHwgbm9uZQogICAgICAgICAgICAgICAgIHJldHVybiBz
dmdzdHlsZS0+c2V0U2hhZG93KG51bGxwdHIpOwogCkBAIC01NjQsOSArNTY1LDkgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICAgICAgICAgIGlmICghZmlyc3RWYWx1ZS0+aXNTaGFkb3dWYWx1ZSgpKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIFNoYWRvd1ZhbHVlKiBpdGVtID0g
c3RhdGljX2Nhc3Q8U2hhZG93VmFsdWUqPihmaXJzdFZhbHVlKTsKLSAgICAgICAgICAgIEludFBv
aW50IGxvY2F0aW9uKGl0ZW0tPngtPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RF
bGVtZW50U3R5bGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+eS0+Y29t
cHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSkpOwotICAgICAgICAg
ICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+
KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSkgOiAwOworICAgICAgICAgICAgSW50UG9pbnQg
bG9jYXRpb24oaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBz
dGF0ZS5yb290RWxlbWVudFN0eWxlKSwKKyAgICAgICAgICAgICAgICBpdGVtLT55LT5jb21wdXRl
TGVuZ3RoPGludD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpKTsK
KyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVM
ZW5ndGg8aW50PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSkgOiAw
OwogICAgICAgICAgICAgQ29sb3IgY29sb3I7CiAgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3Ip
CiAgICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5j
b2xvci5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggYzA5Njhk
ZDViNWI3M2ViZjQwYzE3NTRjNDFhMTllZDkzNzE1MDRkYi4uN2M4NDZhMjE1ZGU3ODRlNWRiNzZk
NTk2MWJiYWU4MGQ0OTliMzdiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApA
QCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIK
ICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTUmVmbGVjdFZhbHVl
LmgiCi0jaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKICNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgog
I2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgogI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgpA
QCAtMjAwLDE0ICsxOTksMTQgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogI2RlZmlu
ZSBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJbmhlcml0KSB7IFwKLSAgICBt
X3N0eWxlLT5zZXQjI1Byb3AobV9wYXJlbnRTdHlsZS0+cHJvcCgpKTsgXAorICAgIG1fc3RhdGUu
c3R5bGUtPnNldCMjUHJvcChtX3N0YXRlLnBhcmVudFN0eWxlLT5wcm9wKCkpOyBcCiAgICAgcmV0
dXJuOyBcCiB9CiAKICNkZWZpbmUgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwocHJvcCwgUHJv
cCkgXAogSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAogaWYgKGlzSW5pdGlhbCkgeyBcCi0g
ICAgbV9zdHlsZS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBcCisg
ICAgbV9zdGF0ZS5zdHlsZS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkp
OyBcCiAgICAgcmV0dXJuOyBcCiB9CiAKQEAgLTI2NywzNCArMjY2LDE2IEBAIHN0YXRpYyBTdHls
ZVByb3BlcnR5U2V0KiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkKIAogCiBTdHlsZVJlc29sdmVy
OjpTdHlsZVJlc29sdmVyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBtYXRjaEF1dGhvckFuZFVz
ZXJTdHlsZXMpCi0gICAgOiBtX2hhc1VBQXBwZWFyYW5jZShmYWxzZSkKLSAgICAsIG1fYmFja2dy
b3VuZERhdGEoQmFja2dyb3VuZEZpbGxMYXllcikKLSAgICAsIG1fbWF0Y2hlZFByb3BlcnRpZXND
YWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwKDApCisgICAgOiBtX21hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCgwKQogICAgICwgbV9tYXRjaGVkUHJvcGVydGll
c0NhY2hlU3dlZXBUaW1lcih0aGlzLCAmU3R5bGVSZXNvbHZlcjo6c3dlZXBNYXRjaGVkUHJvcGVy
dGllc0NhY2hlKQogICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fc2VsZWN0b3JD
aGVja2VyKGRvY3VtZW50KQotICAgICwgbV9wYXJlbnRTdHlsZSgwKQotICAgICwgbV9yb290RWxl
bWVudFN0eWxlKDApCi0gICAgLCBtX2VsZW1lbnQoMCkKLSAgICAsIG1fc3R5bGVkRWxlbWVudCgw
KQotICAgICwgbV9yZWdpb25Gb3JTdHlsaW5nKDApCi0gICAgLCBtX2VsZW1lbnRMaW5rU3RhdGUo
Tm90SW5zaWRlTGluaykKLSAgICAsIG1fcGFyZW50Tm9kZSgwKQotICAgICwgbV9saW5lSGVpZ2h0
VmFsdWUoMCkKLSAgICAsIG1fZm9udERpcnR5KGZhbHNlKQogICAgICwgbV9tYXRjaEF1dGhvckFu
ZFVzZXJTdHlsZXMobWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICwgbV9zYW1lT3JpZ2lu
T25seShmYWxzZSkKLSAgICAsIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KGZhbHNlKQog
ICAgICwgbV9mb250U2VsZWN0b3IoQ1NTRm9udFNlbGVjdG9yOjpjcmVhdGUoZG9jdW1lbnQpKQog
I2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCiAgICAgLCBtX3ZpZXdwb3J0U3R5bGVS
ZXNvbHZlcihWaWV3cG9ydFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZShkb2N1bWVudCkpCiAjZW5kaWYK
LSAgICAsIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpCi0gICAgLCBtX2FwcGx5
UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpCiAgICAgLCBtX3N0eWxlQnVpbGRlcihT
dHlsZUJ1aWxkZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpKQotI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKLSAgICAsIG1faGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpCi0jZW5kaWYKICAgICAsIG1fc3R5
bGVNYXAodGhpcykKIHsKICAgICBFbGVtZW50KiByb290ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxl
bWVudCgpOwpAQCAtNjU3LDIzICs2MzgsMjYgQEAgYm9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6
bV9tYXRjaGluZ1VBUnVsZXMgPSBmYWxzZTsKIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1h
dGNoaW5nUnVsZXMoY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSYW5nZSYg
cnVsZVJhbmdlKQogewogICAgIEFTU0VSVChtYXRjaFJlcXVlc3QucnVsZVNldCk7Ci0gICAgQVNT
RVJUKG1fZWxlbWVudCk7CisgICAgQVNTRVJUKG1fc3RhdGUuZWxlbWVudCk7CiAKLSAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHBzZXVkb0lkID0gbV9lbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpOwor
ICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRl
LmVsZW1lbnQ7CisgICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRlLnN0eWxl
ZEVsZW1lbnQ7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwc2V1ZG9JZCA9IGVsZW1lbnQtPnNo
YWRvd1BzZXVkb0lkKCk7CiAgICAgaWYgKCFwc2V1ZG9JZC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
QVNTRVJUKG1fc3R5bGVkRWxlbWVudCk7CisgICAgICAgIEFTU0VSVChzdHlsZWRFbGVtZW50KTsK
ICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0
LT5zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMocHNldWRvSWQuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0
LCBydWxlUmFuZ2UpOwogICAgIH0KIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBpZiAo
bV9lbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiB0b1dlYlZUVEVsZW1lbnQobV9lbGVtZW50
KS0+d2ViVlRUTm9kZVR5cGUoKSkKKyAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkg
JiYgdG9XZWJWVFRFbGVtZW50KGVsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpKQogICAgICAgICBj
b2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmN1ZVBzZXVk
b1J1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKICNlbmRpZgogICAgIC8vIENoZWNr
IHdoZXRoZXIgb3RoZXIgdHlwZXMgb2YgcnVsZXMgYXJlIGFwcGxpY2FibGUgaW4gdGhlIGN1cnJl
bnQgdHJlZSBzY29wZS4gQ3JpdGVyaWEgZm9yIHRoaXM6CiAgICAgLy8gYSkgaXQncyBhIFVBIHJ1
bGUKICAgICAvLyBiKSB0aGUgdHJlZSBzY29wZSBhbGxvd3MgYXV0aG9yIHJ1bGVzCiAgICAgLy8g
YykgdGhlIHJ1bGVzIGNvbWVzIGZyb20gYSBzY29wZWQgc3R5bGUgc2hlZXQgd2l0aGluIHRoZSBz
YW1lIHRyZWUgc2NvcGUKLSAgICBUcmVlU2NvcGUqIHRyZWVTY29wZSA9IG1fZWxlbWVudC0+dHJl
ZVNjb3BlKCk7CisgICAgVHJlZVNjb3BlKiB0cmVlU2NvcGUgPSBlbGVtZW50LT50cmVlU2NvcGUo
KTsKICAgICBpZiAoIU1hdGNoaW5nVUFSdWxlc1Njb3BlOjppc01hdGNoaW5nVUFSdWxlcygpCiAg
ICAgICAgICYmICF0cmVlU2NvcGUtPmFwcGx5QXV0aG9yU3R5bGVzKCkKICAgICAgICAgJiYgKCFt
YXRjaFJlcXVlc3Quc2NvcGUgfHwgbWF0Y2hSZXF1ZXN0LnNjb3BlLT50cmVlU2NvcGUoKSAhPSB0
cmVlU2NvcGUpKQpAQCAtNjgxLDMwICs2NjUsMzAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xs
ZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVIK
IAogICAgIC8vIFdlIG5lZWQgdG8gY29sbGVjdCB0aGUgcnVsZXMgZm9yIGlkLCBjbGFzcywgdGFn
LCBhbmQgZXZlcnl0aGluZyBlbHNlIGludG8gYSBidWZmZXIgYW5kCiAgICAgLy8gdGhlbiBzb3J0
IHRoZSBidWZmZXIuCi0gICAgaWYgKG1fZWxlbWVudC0+aGFzSUQoKSkKLSAgICAgICAgY29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5pZFJ1bGVzKG1fZWxl
bWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVS
YW5nZSk7Ci0gICAgaWYgKG1fc3R5bGVkRWxlbWVudCAmJiBtX3N0eWxlZEVsZW1lbnQtPmhhc0Ns
YXNzKCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0eWxlZEVsZW1lbnQt
PmNsYXNzTmFtZXMoKS5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+Y2xhc3NSdWxlcyhtX3N0eWxlZEVsZW1l
bnQtPmNsYXNzTmFtZXMoKVtpXS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Cisg
ICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkpCisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9y
TGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+aWRSdWxlcyhlbGVtZW50LT5pZEZvclN0eWxlUmVz
b2x1dGlvbigpLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBpZiAoc3R5
bGVkRWxlbWVudCAmJiBzdHlsZWRFbGVtZW50LT5oYXNDbGFzcygpKSB7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc3R5bGVkRWxlbWVudC0+Y2xhc3NOYW1lcygpLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5y
dWxlU2V0LT5jbGFzc1J1bGVzKHN0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKVtpXS5pbXBsKCkp
LCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CiAgICAgfQogCi0gICAgaWYgKG1fZWxlbWVudC0+
aXNMaW5rKCkpCisgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpKQogICAgICAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmxpbmtQc2V1ZG9DbGFzc1J1
bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICBpZiAobV9zZWxlY3RvckNoZWNr
ZXIubWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MobV9lbGVtZW50KSkKKyAgICBpZiAobV9zZWxlY3Rv
ckNoZWNrZXIubWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MoZWxlbWVudCkpCiAgICAgICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+Zm9jdXNQc2V1ZG9D
bGFzc1J1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPnRhZ1J1bGVzKG1fZWxlbWVudC0+
bG9jYWxOYW1lKCkuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+dGFnUnVsZXMoZWxl
bWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogICAg
IGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+dW5pdmVy
c2FsUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogfQogCiB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKGNvbnN0IE1hdGNoUmVxdWVzdCYg
bWF0Y2hSZXF1ZXN0LCBSdWxlUmFuZ2UmIHJ1bGVSYW5nZSkKIHsKLSAgICBpZiAoIW1fcmVnaW9u
Rm9yU3R5bGluZykKKyAgICBpZiAoIW1fc3RhdGUucmVnaW9uRm9yU3R5bGluZykKICAgICAgICAg
cmV0dXJuOwogCiAgICAgdW5zaWduZWQgc2l6ZSA9IG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5tX3Jl
Z2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yKiByZWdpb25TZWxl
Y3RvciA9IG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRz
LmF0KGkpLnNlbGVjdG9yOwotICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihyZWdpb25T
ZWxlY3Rvciwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fcmVnaW9uRm9yU3R5bGluZy0+bm9kZSgp
KSkpIHsKKyAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9uU2VsZWN0b3IsIHN0
YXRpY19jYXN0PEVsZW1lbnQqPihtX3N0YXRlLnJlZ2lvbkZvclN0eWxpbmctPm5vZGUoKSkpKSB7
CiAgICAgICAgICAgICBSdWxlU2V0KiByZWdpb25SdWxlcyA9IG1hdGNoUmVxdWVzdC5ydWxlU2V0
LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCk7CiAgICAg
ICAgICAgICBBU1NFUlQocmVnaW9uUnVsZXMpOwogICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5n
UnVsZXMoTWF0Y2hSZXF1ZXN0KHJlZ2lvblJ1bGVzLCBtYXRjaFJlcXVlc3QuaW5jbHVkZUVtcHR5
UnVsZXMsIG1hdGNoUmVxdWVzdC5zY29wZSksIHJ1bGVSYW5nZSk7CkBAIC03MTQsMjQgKzY5OCwy
NSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKGNv
bnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRB
bmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQogewotICAgIGlmICht
X21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKyAg
ICBpZiAoc3RhdGUubWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgc29ydE1hdGNoZWRSdWxlcygpOwogCiAgICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1vZGUo
KSA9PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcykgewotICAgICAgICBpZiAoIW1f
cnVsZUxpc3QpCi0gICAgICAgICAgICBtX3J1bGVMaXN0ID0gU3RhdGljQ1NTUnVsZUxpc3Q6OmNy
ZWF0ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX3J1bGVMaXN0LT5ydWxlcygpLmFwcGVuZChtX21h
dGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5jcmVhdGVDU1NPTVdyYXBwZXIoKSk7CisgICAgICAgIGlm
ICghc3RhdGUucnVsZUxpc3QpCisgICAgICAgICAgICBzdGF0ZS5ydWxlTGlzdCA9IFN0YXRpY0NT
U1J1bGVMaXN0OjpjcmVhdGUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0
YXRlLm1hdGNoZWRSdWxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHN0YXRlLnJ1bGVMaXN0
LT5ydWxlcygpLmFwcGVuZChzdGF0ZS5tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+Y3JlYXRlQ1NT
T01XcmFwcGVyKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gTm93IHRyYW5z
ZmVyIHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcyBvdmVyIHRvIG91ciBsaXN0IG9mIGRlY2xhcmF0
aW9ucy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgp
OyBpKyspIHsKLSAgICAgICAgaWYgKG1fc3R5bGUgJiYgbV9tYXRjaGVkUnVsZXNbaV0tPmNvbnRh
aW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0
VW5pcXVlKCk7Ci0gICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgbV9tYXRjaGVk
UnVsZXNbaV0tPnJ1bGUoKS0+cHJvcGVydGllcygpLCBtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgp
LCBtX21hdGNoZWRSdWxlc1tpXS0+bGlua01hdGNoVHlwZSgpLCBtX21hdGNoZWRSdWxlc1tpXS0+
cHJvcGVydHlXaGl0ZWxpc3RUeXBlKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
dGF0ZS5tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKHN0YXRlLnN0eWxl
ICYmIHN0YXRlLm1hdGNoZWRSdWxlc1tpXS0+Y29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVj
dG9yKCkpCisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VW5pcXVlKCk7CisgICAgICAgIGFk
ZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGUubWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCkt
PnByb3BlcnRpZXMoKSwgc3RhdGUubWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCksIHN0YXRlLm1hdGNo
ZWRSdWxlc1tpXS0+bGlua01hdGNoVHlwZSgpLCBzdGF0ZS5tYXRjaGVkUnVsZXNbaV0tPnByb3Bl
cnR5V2hpdGVsaXN0VHlwZSgpKTsKICAgICB9CiB9CiAKQEAgLTc0MiwxMiArNzI3LDEyIEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVz
dWx0LCBib29sIGluY2x1ZGVFbXB0CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE1hdGNoIHNj
b3BlZCBhdXRob3IgcnVsZXMgYnkgdHJhdmVyc2luZyB0aGUgc2NvcGVkIGVsZW1lbnQgc3RhY2sg
KHJlYnVpbGQgaXQgaWYgaXQgZ290IGluY29uc2lzdGVudCkuCi0gICAgaWYgKG1fc2NvcGVSZXNv
bHZlci0+aGFzU2NvcGVkU3R5bGVzKCkgJiYgbV9zY29wZVJlc29sdmVyLT5lbnN1cmVTdGFja0Nv
bnNpc3RlbmN5KG1fZWxlbWVudCkpIHsKLSAgICAgICAgYm9vbCBhcHBseUF1dGhvclN0eWxlcyA9
IG1fZWxlbWVudC0+dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9yU3R5bGVzKCk7CisgICAgaWYgKG1f
c2NvcGVSZXNvbHZlci0+aGFzU2NvcGVkU3R5bGVzKCkgJiYgbV9zY29wZVJlc29sdmVyLT5lbnN1
cmVTdGFja0NvbnNpc3RlbmN5KG1fc3RhdGUuZWxlbWVudCkpIHsKKyAgICAgICAgYm9vbCBhcHBs
eUF1dGhvclN0eWxlcyA9IG1fc3RhdGUuZWxlbWVudC0+dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9y
U3R5bGVzKCk7CiAgICAgICAgIGJvb2wgZG9jdW1lbnRTY29wZSA9IHRydWU7CiAgICAgICAgIHVu
c2lnbmVkIHNjb3BlU2l6ZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tTaXplKCk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzY29wZVNpemU7ICsraSkgewotICAgICAgICAgICAg
bV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVz
LmNsZWFyKCk7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVz
dWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKICAgICAgICAgICAgIGNvbnN0IFN0
eWxlU2NvcGVSZXNvbHZlcjo6U3RhY2tGcmFtZSYgZnJhbWUgPSBtX3Njb3BlUmVzb2x2ZXItPnN0
YWNrRnJhbWVBdChpKTsKQEAgLTc3OCw3ICs3NjMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1h
dGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1w
dAogaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hl
c0hvc3RSdWxlcygpCiB7CiAjaWYgRU5BQkxFKFNIQURPV19ET00pCi0gICAgcmV0dXJuIG1fc2Nv
cGVSZXNvbHZlciAmJiBtX3Njb3BlUmVzb2x2ZXItPnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNo
ZXNIb3N0UnVsZXMobV9lbGVtZW50KTsKKyAgICByZXR1cm4gbV9zY29wZVJlc29sdmVyICYmIG1f
c2NvcGVSZXNvbHZlci0+c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhtX3N0
YXRlLmVsZW1lbnQpOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKQEAgLTc4OSwx
NyArNzc0LDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMoTWF0Y2hSZXN1
bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKICNpZiBFTkFCTEUoU0hBRE9XX0RP
TSkKICAgICBBU1NFUlQobV9zY29wZVJlc29sdmVyKTsKIAotICAgIG1fbWF0Y2hlZFJ1bGVzLmNs
ZWFyKCk7CisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuY2xlYXIoKTsKICAgICByZXN1bHQucmFu
Z2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7
CiAKICAgICBWZWN0b3I8UnVsZVNldCo+IG1hdGNoZWRSdWxlczsKLSAgICBtX3Njb3BlUmVzb2x2
ZXItPm1hdGNoSG9zdFJ1bGVzKG1fZWxlbWVudCwgbWF0Y2hlZFJ1bGVzKTsKKyAgICBtX3Njb3Bl
UmVzb2x2ZXItPm1hdGNoSG9zdFJ1bGVzKG1fc3RhdGUuZWxlbWVudCwgbWF0Y2hlZFJ1bGVzKTsK
ICAgICBpZiAobWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSA+IDA7IC0taSkgewogICAg
ICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy5hdXRob3JSdWxlUmFuZ2Uo
KTsKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KG1hdGNoZWRSdWxl
cy5hdChpLTEpLCBpbmNsdWRlRW1wdHlSdWxlcywgbV9lbGVtZW50KSwgcnVsZVJhbmdlKTsKKyAg
ICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KG1hdGNoZWRSdWxlcy5hdChp
LTEpLCBpbmNsdWRlRW1wdHlSdWxlcywgbV9zdGF0ZS5lbGVtZW50KSwgcnVsZVJhbmdlKTsKICAg
ICB9CiAgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7CiAjZWxzZQpAQCAt
ODEwLDEwICs3OTUsMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRj
aFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogCiB2b2lkIFN0eWxlUmVz
b2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRl
RW1wdHlSdWxlcykKIHsKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIG1fc3RhdGUu
bWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9
IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogCi0gICAgaWYgKCFtX2VsZW1l
bnQpCisgICAgaWYgKCFtX3N0YXRlLmVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IE1hdGNoIGdsb2JhbCBhdXRob3IgcnVsZXMuCkBAIC04MzEsNyArODE2LDcgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjptYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1
ZGVFbXB0eVJ1bGVzKQogICAgIGlmICghbV91c2VyU3R5bGUpCiAgICAgICAgIHJldHVybjsKICAg
ICAKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVz
LmNsZWFyKCk7CiAKICAgICByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSA9IHJlc3VsdC5tYXRj
aGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3Qo
bV91c2VyU3R5bGUuZ2V0KCksIGluY2x1ZGVFbXB0eVJ1bGVzKTsKQEAgLTg0NCw3ICs4MjksNyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQs
IGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1
bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIFJ1bGVTZXQqIHJ1bGVzKQogewotICAgIG1fbWF0Y2hl
ZFJ1bGVzLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuY2xlYXIoKTsKICAgICAK
ICAgICByZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMu
c2l6ZSgpIC0gMTsKICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy5VQVJ1
bGVSYW5nZSgpOwpAQCAtODU4LDkgKzg0MywxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgYwog
ICAgIGlmICghcnVsZXMpCiAgICAgICAgIHJldHVybjsKIAorICAgIFN0YXRlJiBzdGF0ZSA9IG1f
c3RhdGU7CiAgICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBtYXkgZW5kIHVwIGxvb2tpbmcgdXAgc3R5
bGUgZm9yIHJhbmRvbSBlbGVtZW50cyBpbiB0aGUgbWlkZGxlIG9mIGEgcmVjdXJzaXZlIHRyZWUg
cmVzb2x2ZS4KICAgICAvLyBBbmNlc3RvciBpZGVudGlmaWVyIGZpbHRlciB3b24ndCBiZSB1cC10
by1kYXRlIGluIHRoYXQgY2FzZSBhbmQgd2UgY2FuJ3QgdXNlIHRoZSBmYXN0IHBhdGguCi0gICAg
Ym9vbCBjYW5Vc2VGYXN0UmVqZWN0ID0gbV9zZWxlY3RvckZpbHRlci5wYXJlbnRTdGFja0lzQ29u
c2lzdGVudChtX3BhcmVudE5vZGUpOworICAgIGJvb2wgY2FuVXNlRmFzdFJlamVjdCA9IG1fc2Vs
ZWN0b3JGaWx0ZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQoc3RhdGUucGFyZW50Tm9kZSk7CiAK
ICAgICB1bnNpZ25lZCBzaXplID0gcnVsZXMtPnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CkBAIC04NzgsMTkgKzg2NCwxOSBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+
KiBydWxlcywgYwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgLy8gRklYTUU6IEV4cG9zaW5nIHRoZSBub24tc3RhbmRhcmQgZ2V0TWF0Y2hlZENT
U1J1bGVzIEFQSSB0byB3ZWIgaXMgdGhlIG9ubHkgcmVhc29uIHRoaXMgaXMgbmVlZGVkLgotICAg
ICAgICAgICAgaWYgKG1fc2FtZU9yaWdpbk9ubHkgJiYgIXJ1bGVEYXRhLmhhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4oKSkgeworICAgICAgICAgICAgaWYgKHN0YXRlLnNhbWVPcmlnaW5Pbmx5ICYm
ICFydWxlRGF0YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkpIHsKICAgICAgICAgICAgICAg
ICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8v
IElmIHdlJ3JlIG1hdGNoaW5nIG5vcm1hbCBydWxlcywgc2V0IGEgcHNldWRvIGJpdCBpZgogICAg
ICAgICAgICAgLy8gd2UgcmVhbGx5IGp1c3QgbWF0Y2hlZCBhIHBzZXVkby1lbGVtZW50LgotICAg
ICAgICAgICAgaWYgKG1fZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiBtX3BzZXVkb1N0eWxl
ID09IE5PUFNFVURPKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUuZHluYW1pY1BzZXVkbyAhPSBO
T1BTRVVETyAmJiBzdGF0ZS5wc2V1ZG9TdHlsZSA9PSBOT1BTRVVETykgewogICAgICAgICAgICAg
ICAgIGlmIChtX3NlbGVjdG9yQ2hlY2tlci5tb2RlKCkgPT0gU2VsZWN0b3JDaGVja2VyOjpDb2xs
ZWN0aW5nUnVsZXMpIHsKICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobV9keW5hbWlj
UHNldWRvIDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQpCi0gICAgICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldEhhc1BzZXVkb1N0eWxlKG1fZHluYW1pY1BzZXVkbyk7CisgICAgICAgICAgICAg
ICAgaWYgKHN0YXRlLmR5bmFtaWNQc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKKyAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldEhhc1BzZXVkb1N0eWxlKHN0YXRlLmR5
bmFtaWNQc2V1ZG8pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBV
cGRhdGUgb3VyIGZpcnN0L2xhc3QgcnVsZSBpbmRpY2VzIGluIHRoZSBtYXRjaGVkIHJ1bGVzIGFy
cmF5LgogICAgICAgICAgICAgICAgICsrcnVsZVJhbmdlLmxhc3RSdWxlSW5kZXg7CkBAIC05MTYs
NyArOTAyLDcgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVSdWxlcyhjb25zdCBSdWxlRGF0
YSogcjEsIGNvbnN0IFJ1bGVEYXRhKiByMikKIAogdm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0TWF0
Y2hlZFJ1bGVzKCkKIHsKLSAgICBzdGQ6OnNvcnQobV9tYXRjaGVkUnVsZXMuYmVnaW4oKSwgbV9t
YXRjaGVkUnVsZXMuZW5kKCksIGNvbXBhcmVSdWxlcyk7CisgICAgc3RkOjpzb3J0KG1fc3RhdGUu
bWF0Y2hlZFJ1bGVzLmJlZ2luKCksIG1fc3RhdGUubWF0Y2hlZFJ1bGVzLmVuZCgpLCBjb21wYXJl
UnVsZXMpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1
bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZXMpCkBAIC05MjYsMTkgKzkxMiwx
OSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3Vs
dCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZQogICAgIC8vIE5vdyB3ZSBjaGVjayB1c2VyIHNo
ZWV0IHJ1bGVzLgogICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKICAgICAgICAg
bWF0Y2hVc2VyUnVsZXMocmVzdWx0LCBmYWxzZSk7Ci0gICAgICAgIAorCiAgICAgLy8gTm93IGNo
ZWNrIGF1dGhvciBydWxlcywgYmVnaW5uaW5nIGZpcnN0IHdpdGggcHJlc2VudGF0aW9uYWwgYXR0
cmlidXRlcyBtYXBwZWQgZnJvbSBIVE1MLgotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQpIHsKLSAg
ICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3R5bGVkRWxlbWVudC0+
cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CisgICAgaWYgKG1fc3RhdGUuc3R5bGVkRWxl
bWVudCkgeworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdGF0
ZS5zdHlsZWRFbGVtZW50LT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKIAogICAgICAg
ICAvLyBOb3cgd2UgY2hlY2sgYWRkaXRpb25hbCBtYXBwZWQgZGVjbGFyYXRpb25zLgogICAgICAg
ICAvLyBUYWJsZXMgYW5kIHRhYmxlIGNlbGxzIHNoYXJlIGFuIGFkZGl0aW9uYWwgbWFwcGVkIHJ1
bGUgdGhhdCBtdXN0IGJlIGFwcGxpZWQKICAgICAgICAgLy8gYWZ0ZXIgYWxsIGF0dHJpYnV0ZXMs
IHNpbmNlIHRoZWlyIG1hcHBlZCBzdHlsZSBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgb2YgbXVsdGlw
bGUgYXR0cmlidXRlcy4KLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQs
IG1fc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkp
OworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdGF0ZS5zdHls
ZWRFbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CiAKLSAg
ICAgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAgIGlm
IChtX3N0YXRlLnN0eWxlZEVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkgewogICAgICAgICAgICAg
Ym9vbCBpc0F1dG87Ci0gICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSB0
b0hUTUxFbGVtZW50KG1fc3R5bGVkRWxlbWVudCktPmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRv
QXR0cmlidXRlKGlzQXV0byk7CisgICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rp
b24gPSB0b0hUTUxFbGVtZW50KG1fc3RhdGUuc3R5bGVkRWxlbWVudCktPmRpcmVjdGlvbmFsaXR5
SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CiAgICAgICAgICAgICBpZiAoaXNBdXRvKQog
ICAgICAgICAgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgdGV4dERpcmVjdGlv
biA9PSBMVFIgPyBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVmdERlY2xhcmF0
aW9uKCkpOwogICAgICAgICB9CkBAIC05NDksMTggKzkzNSwxOCBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFBy
b3BlcnRpZQogICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHJlc3VsdCwgZmFsc2UpOwogCiAgICAg
Ly8gTm93IGNoZWNrIG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRlLgotICAgIGlmIChtX21hdGNo
QXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQgJiYgbV9zdHlsZWRFbGVtZW50
LT5pbmxpbmVTdHlsZSgpKSB7CisgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYm
IG1fc3RhdGUuc3R5bGVkRWxlbWVudCAmJiBtX3N0YXRlLnN0eWxlZEVsZW1lbnQtPmlubGluZVN0
eWxlKCkpIHsKICAgICAgICAgLy8gSW5saW5lIHN0eWxlIGlzIGltbXV0YWJsZSBhcyBsb25nIGFz
IHRoZXJlIGlzIG5vIENTU09NIHdyYXBwZXIuCiAgICAgICAgIC8vIEZJWE1FOiBNZWRpYSBjb250
cm9sIHNoYWRvdyB0cmVlcyBzZWVtIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCBjYWNoaW5nLgotICAg
ICAgICBib29sIGlzSW5saW5lU3R5bGVDYWNoZWFibGUgPSAhbV9zdHlsZWRFbGVtZW50LT5pbmxp
bmVTdHlsZSgpLT5pc011dGFibGUoKSAmJiAhbV9zdHlsZWRFbGVtZW50LT5pc0luU2hhZG93VHJl
ZSgpOworICAgICAgICBib29sIGlzSW5saW5lU3R5bGVDYWNoZWFibGUgPSAhbV9zdGF0ZS5zdHls
ZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpLT5pc011dGFibGUoKSAmJiAhbV9zdGF0ZS5zdHlsZWRF
bGVtZW50LT5pc0luU2hhZG93VHJlZSgpOwogICAgICAgICAvLyBGSVhNRTogQ29uc3RpZnkuCi0g
ICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQt
PmlubGluZVN0eWxlKCksIGlzSW5saW5lU3R5bGVDYWNoZWFibGUpOworICAgICAgICBhZGRFbGVt
ZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5pbmxpbmVT
dHlsZSgpLCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlKTsKICAgICB9CiAKICNpZiBFTkFCTEUoU1ZH
KQogICAgIC8vIE5vdyBjaGVjayBTTUlMIGFuaW1hdGlvbiBvdmVycmlkZSBzdHlsZS4KLSAgICBp
ZiAoaW5jbHVkZVNNSUxQcm9wZXJ0aWVzICYmIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYm
IG1fc3R5bGVkRWxlbWVudCAmJiBtX3N0eWxlZEVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKQotICAg
ICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGljX2Nhc3Q8U1ZHRWxl
bWVudCo+KG1fc3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpLCBm
YWxzZSAvKiBpc0NhY2hlYWJsZSAqLyk7CisgICAgaWYgKGluY2x1ZGVTTUlMUHJvcGVydGllcyAm
JiBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0YXRlLnN0eWxlZEVsZW1lbnQgJiYg
bV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgYWRkRWxlbWVu
dFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihtX3N0YXRl
LnN0eWxlZEVsZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSwgZmFsc2UgLyog
aXNDYWNoZWFibGUgKi8pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oaW5jbHVkZVNNSUxQcm9w
ZXJ0aWVzKTsKICNlbmRpZgpAQCAtOTc3LDEwICs5NjMsMTAgQEAgYm9vbCBTdHlsZVJlc29sdmVy
OjpjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNz
TmFtZXMKIAogaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEVsZW1lbnQoRWxlbWVudCog
ZSkKIHsKLSAgICBpZiAobV9lbGVtZW50ICE9IGUpIHsKLSAgICAgICAgbV9lbGVtZW50ID0gZTsK
LSAgICAgICAgbV9zdHlsZWRFbGVtZW50ID0gbV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aXNTdHls
ZWRFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obV9lbGVtZW50KSA6IDA7
Ci0gICAgICAgIG1fZWxlbWVudExpbmtTdGF0ZSA9IGRvY3VtZW50KCktPnZpc2l0ZWRMaW5rU3Rh
dGUoKS0+ZGV0ZXJtaW5lTGlua1N0YXRlKG1fZWxlbWVudCk7CisgICAgaWYgKG1fc3RhdGUuZWxl
bWVudCAhPSBlKSB7CisgICAgICAgIG1fc3RhdGUuZWxlbWVudCA9IGU7CisgICAgICAgIG1fc3Rh
dGUuc3R5bGVkRWxlbWVudCA9IG1fc3RhdGUuZWxlbWVudCAmJiBtX3N0YXRlLmVsZW1lbnQtPmlz
U3R5bGVkRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fc3RhdGUuZWxl
bWVudCkgOiAwOworICAgICAgICBtX3N0YXRlLmVsZW1lbnRMaW5rU3RhdGUgPSBkb2N1bWVudCgp
LT52aXNpdGVkTGlua1N0YXRlKCktPmRldGVybWluZUxpbmtTdGF0ZShlKTsKICAgICAgICAgaWYg
KGUgJiYgZSA9PSBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkgewogICAgICAgICAg
ICAgZS0+ZG9jdW1lbnQoKS0+c2V0RGlyZWN0aW9uU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2Up
OwogICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50
RWxlbWVudChmYWxzZSk7CkBAIC05OTAsMzIgKzk3NiwzMyBAQCBpbmxpbmUgdm9pZCBTdHlsZVJl
c29sdmVyOjppbml0RWxlbWVudChFbGVtZW50KiBlKQogCiBpbmxpbmUgdm9pZCBTdHlsZVJlc29s
dmVyOjppbml0Rm9yU3R5bGVSZXNvbHZlKEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSwgUHNldWRvSWQgcHNldWRvSUQpCiB7Ci0gICAgbV9wc2V1ZG9TdHlsZSA9IHBzZXVkb0lE
OworICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgc3RhdGUucHNldWRvU3R5bGUgPSBw
c2V1ZG9JRDsKIAogICAgIGlmIChlKSB7CiAgICAgICAgIE5vZGVSZW5kZXJpbmdDb250ZXh0IGNv
bnRleHQoZSk7Ci0gICAgICAgIG1fcGFyZW50Tm9kZSA9IGNvbnRleHQucGFyZW50Tm9kZUZvclJl
bmRlcmluZ0FuZFN0eWxlKCk7Ci0gICAgICAgIG1fcGFyZW50U3R5bGUgPSBjb250ZXh0LnJlc2V0
U3R5bGVJbmhlcml0YW5jZSgpID8gMCA6CisgICAgICAgIHN0YXRlLnBhcmVudE5vZGUgPSBjb250
ZXh0LnBhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHlsZSgpOworICAgICAgICBzdGF0ZS5wYXJl
bnRTdHlsZSA9IGNvbnRleHQucmVzZXRTdHlsZUluaGVyaXRhbmNlKCkgPyAwIDoKICAgICAgICAg
ICAgIHBhcmVudFN0eWxlID8gcGFyZW50U3R5bGUgOgotICAgICAgICAgICAgbV9wYXJlbnROb2Rl
ID8gbV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMDsKLSAgICAgICAgbV9kaXN0cmlidXRl
ZFRvSW5zZXJ0aW9uUG9pbnQgPSBjb250ZXh0Lmluc2VydGlvblBvaW50KCk7CisgICAgICAgICAg
ICBzdGF0ZS5wYXJlbnROb2RlID8gc3RhdGUucGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDA7
CisgICAgICAgIHN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCA9IGNvbnRleHQuaW5z
ZXJ0aW9uUG9pbnQoKTsKICAgICB9IGVsc2UgewotICAgICAgICBtX3BhcmVudE5vZGUgPSAwOwot
ICAgICAgICBtX3BhcmVudFN0eWxlID0gcGFyZW50U3R5bGU7Ci0gICAgICAgIG1fZGlzdHJpYnV0
ZWRUb0luc2VydGlvblBvaW50ID0gZmFsc2U7CisgICAgICAgIHN0YXRlLnBhcmVudE5vZGUgPSAw
OworICAgICAgICBzdGF0ZS5wYXJlbnRTdHlsZSA9IHBhcmVudFN0eWxlOworICAgICAgICBzdGF0
ZS5kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQgPSBmYWxzZTsKICAgICB9CiAKICAgICBOb2Rl
KiBkb2NFbGVtZW50ID0gZSA/IGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpIDogMDsK
ICAgICBSZW5kZXJTdHlsZSogZG9jU3R5bGUgPSBkb2N1bWVudCgpLT5yZW5kZXJTdHlsZSgpOwot
ICAgIG1fcm9vdEVsZW1lbnRTdHlsZSA9IGRvY0VsZW1lbnQgJiYgZSAhPSBkb2NFbGVtZW50ID8g
ZG9jRWxlbWVudC0+cmVuZGVyU3R5bGUoKSA6IGRvY1N0eWxlOworICAgIHN0YXRlLnJvb3RFbGVt
ZW50U3R5bGUgPSBkb2NFbGVtZW50ICYmIGUgIT0gZG9jRWxlbWVudCA/IGRvY0VsZW1lbnQtPnJl
bmRlclN0eWxlKCkgOiBkb2NTdHlsZTsKIAotICAgIG1fc3R5bGUgPSAwOworICAgIHN0YXRlLnN0
eWxlID0gMDsKIAotICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigpOworICAgIHN0
YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuY2xlYXIoKTsKIAotICAgIG1fcnVsZUxpc3QgPSAw
OworICAgIHN0YXRlLnJ1bGVMaXN0ID0gMDsKIAotICAgIG1fZm9udERpcnR5ID0gZmFsc2U7Cisg
ICAgc3RhdGUuZm9udERpcnR5ID0gZmFsc2U7CiB9CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj
U3R5bGVTZWFyY2hUaHJlc2hvbGQgPSAxMDsKQEAgLTEwNzgsMjMgKzEwNjUsMjQgQEAgYm9vbCBT
dHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChSdWxlU2V0
KiBydWxlU2V0KQogewogICAgIGlmICghcnVsZVNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuY2xl
YXIoKTsKIAogICAgIG1fc2VsZWN0b3JDaGVja2VyLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpT
aGFyaW5nUnVsZXMpOwogICAgIGludCBmaXJzdFJ1bGVJbmRleCA9IC0xLCBsYXN0UnVsZUluZGV4
ID0gLTE7CiAgICAgUnVsZVJhbmdlIHJ1bGVSYW5nZShmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJ
bmRleCk7CiAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KHJ1bGVTZXQpLCBy
dWxlUmFuZ2UpOwogICAgIG1fc2VsZWN0b3JDaGVja2VyLnNldE1vZGUoU2VsZWN0b3JDaGVja2Vy
OjpSZXNvbHZpbmdTdHlsZSk7Ci0gICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKKyAg
ICBpZiAobV9zdGF0ZS5tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICBtX3N0YXRlLm1hdGNoZWRSdWxl
cy5jbGVhcigpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFN0eWxlUmVzb2x2ZXI6OmNh
blNoYXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewor
ICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgSFRNTElucHV0RWxlbWVudCog
dGhpc0lucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgSFRNTElu
cHV0RWxlbWVudCogb3RoZXJJbnB1dEVsZW1lbnQgPSBtX2VsZW1lbnQtPnRvSW5wdXRFbGVtZW50
KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogb3RoZXJJbnB1dEVsZW1lbnQgPSBzdGF0ZS5lbGVt
ZW50LT50b0lucHV0RWxlbWVudCgpOwogCiAgICAgaWYgKCF0aGlzSW5wdXRFbGVtZW50IHx8ICFv
dGhlcklucHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTExNSwyNSArMTEw
MywyNSBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChTdHls
ZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5pc1Jl
cXVpcmVkKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPmlzUmVxdWlyZWQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkgIT0g
bV9lbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpKQorICAgIGlmIChlbGVtZW50LT5pc0Vu
YWJsZWRGb3JtQ29udHJvbCgpICE9IHN0YXRlLmVsZW1lbnQtPmlzRW5hYmxlZEZvcm1Db250cm9s
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5pc0RlZmF1bHRC
dXR0b25Gb3JGb3JtKCkgIT0gbV9lbGVtZW50LT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkpCisg
ICAgaWYgKGVsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSAhPSBzdGF0ZS5lbGVtZW50
LT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmIChtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCkp
IHsKKyAgICBpZiAoc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29udGFpbnNWYWxpZGl0eVN0
eWxlUnVsZXMoKSkgewogICAgICAgICBib29sIHdpbGxWYWxpZGF0ZSA9IGVsZW1lbnQtPndpbGxW
YWxpZGF0ZSgpOwogCi0gICAgICAgIGlmICh3aWxsVmFsaWRhdGUgIT0gbV9lbGVtZW50LT53aWxs
VmFsaWRhdGUoKSkKKyAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAhPSBzdGF0ZS5lbGVtZW50LT53
aWxsVmFsaWRhdGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAo
d2lsbFZhbGlkYXRlICYmIChlbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkgIT0g
bV9lbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpKQorICAgICAgICBpZiAod2ls
bFZhbGlkYXRlICYmIChlbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkgIT0gc3Rh
dGUuZWxlbWVudC0+aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoZWxlbWVudC0+aXNJblJhbmdlKCkgIT0gbV9lbGVt
ZW50LT5pc0luUmFuZ2UoKSkKKyAgICAgICAgaWYgKGVsZW1lbnQtPmlzSW5SYW5nZSgpICE9IHN0
YXRlLmVsZW1lbnQtPmlzSW5SYW5nZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIGlmIChlbGVtZW50LT5pc091dE9mUmFuZ2UoKSAhPSBtX2VsZW1lbnQtPmlzT3V0T2ZS
YW5nZSgpKQorICAgICAgICBpZiAoZWxlbWVudC0+aXNPdXRPZlJhbmdlKCkgIT0gc3RhdGUuZWxl
bWVudC0+aXNPdXRPZlJhbmdlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CkBAIC0xMTQ4LDI1ICsxMTM2LDI2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50SGFzRGly
ZWN0aW9uQXV0byhFbGVtZW50KiBlbGVtZW50KQogCiBib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJp
bmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoU3R5bGVkRWxl
bWVudCogc2hhcmluZ0NhbmRpZGF0ZSkgY29uc3QKIHsKLSAgICBpZiAobV9lbGVtZW50LT5hdHRy
aWJ1dGVEYXRhKCkgPT0gc2hhcmluZ0NhbmRpZGF0ZS0+YXR0cmlidXRlRGF0YSgpKQorICAgIGNv
bnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgaWYgKHN0YXRlLmVsZW1lbnQtPmF0dHJp
YnV0ZURhdGEoKSA9PSBzaGFyaW5nQ2FuZGlkYXRlLT5hdHRyaWJ1dGVEYXRhKCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIGlmIChtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFt
ZXM6OmxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0cmlidXRlKFhNTE5h
bWVzOjpsYW5nQXR0cikpCisgICAgaWYgKHN0YXRlLmVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUo
WE1MTmFtZXM6OmxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0cmlidXRl
KFhNTE5hbWVzOjpsYW5nQXR0cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9l
bGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5m
YXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudC0+ZmFzdEdl
dEF0dHJpYnV0ZShsYW5nQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0
ZShsYW5nQXR0cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghbV9lbGVtZW50
QWZmZWN0ZWRCeUNsYXNzUnVsZXMpIHsKKyAgICBpZiAoIXN0YXRlLmVsZW1lbnRBZmZlY3RlZEJ5
Q2xhc3NSdWxlcykgewogICAgICAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aGFzQ2xhc3MoKSAm
JiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKHNoYXJpbmdDYW5kaWRhdGUtPmNsYXNzTmFtZXMo
KSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBlbHNlIGlmIChzaGFyaW5nQ2Fu
ZGlkYXRlLT5oYXNDbGFzcygpKSB7CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgLy8gU1ZHIGVs
ZW1lbnRzIHJlcXVpcmUgYSAoc2xvdyEpIGdldEF0dHJpYnV0ZSBjb21wYXJpc2lvbiBiZWNhdXNl
ICJjbGFzcyIgaXMgYW4gYW5pbWF0YWJsZSBhdHRyaWJ1dGUgZm9yIFNWRy4KLSAgICAgICAgaWYg
KG1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChtX2VsZW1lbnQt
PmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmdldEF0dHJpYnV0
ZShjbGFzc0F0dHIpKQorICAgICAgICBpZiAoc3RhdGUuZWxlbWVudC0+aXNTVkdFbGVtZW50KCkp
IHsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRy
KSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZWxzZSB7CiAjZW5kaWYKLSAgICAgICAg
ICAgIGlmIChtX2VsZW1lbnQtPmNsYXNzTmFtZXMoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5jbGFz
c05hbWVzKCkpCisgICAgICAgICAgICBpZiAoc3RhdGUuZWxlbWVudC0+Y2xhc3NOYW1lcygpICE9
IHNoYXJpbmdDYW5kaWRhdGUtPmNsYXNzTmFtZXMoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgfQpAQCAtMTE3NCwxMiArMTE2MywxMiBA
QCBib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFm
ZmVjdGluZ0F0dHJpYnV0ZXMoU3R5bGVkRQogICAgIH0gZWxzZQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHls
ZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUtPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpCisg
ICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQtPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkg
IT0gc2hhcmluZ0NhbmRpZGF0ZS0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAgaWYg
KG1fZWxlbWVudC0+aGFzVGFnTmFtZShwcm9ncmVzc1RhZykpIHsKLSAgICAgICAgaWYgKHN0YXRp
Y19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihtX2VsZW1lbnQpLT5pc0RldGVybWluYXRlKCkg
IT0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KHNoYXJpbmdDYW5kaWRhdGUpLT5p
c0RldGVybWluYXRlKCkpCisgICAgaWYgKHN0YXRlLmVsZW1lbnQtPmhhc1RhZ05hbWUocHJvZ3Jl
c3NUYWcpKSB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50Kj4o
c3RhdGUuZWxlbWVudCktPmlzRGV0ZXJtaW5hdGUoKSAhPSBzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jl
c3NFbGVtZW50Kj4oc2hhcmluZ0NhbmRpZGF0ZSktPmlzRGV0ZXJtaW5hdGUoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAjZW5kaWYKQEAgLTExOTAsMTIgKzExNzksMTMgQEAg
Ym9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZl
Y3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEUKIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHls
ZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVy
U3R5bGUqIHN0eWxlID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICBjb25zdCBTdGF0ZSYg
c3RhdGUgPSBtX3N0YXRlOwogCiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmIChzdHlsZS0+dW5pcXVlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoZWxlbWVudC0+dGFnUU5hbWUoKSAhPSBtX2VsZW1lbnQtPnRhZ1FOYW1lKCkpCisgICAgaWYg
KGVsZW1lbnQtPnRhZ1FOYW1lKCkgIT0gc3RhdGUuZWxlbWVudC0+dGFnUU5hbWUoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChlbGVtZW50LT5pbmxpbmVTdHlsZSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0xMjA1LDIxICsxMTk1LDIxIEBAIGJvb2wgU3R5bGVSZXNvbHZl
cjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0
CiAgICAgaWYgKGVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1l
bnQqPihlbGVtZW50KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICNlbmRpZgotICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSAhPSBtX2VsZW1l
bnQtPmlzTGluaygpKQorICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSAhPSBzdGF0ZS5lbGVtZW50
LT5pc0xpbmsoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5ob3Zl
cmVkKCkgIT0gbV9lbGVtZW50LT5ob3ZlcmVkKCkpCisgICAgaWYgKGVsZW1lbnQtPmhvdmVyZWQo
KSAhPSBzdGF0ZS5lbGVtZW50LT5ob3ZlcmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoZWxlbWVudC0+YWN0aXZlKCkgIT0gbV9lbGVtZW50LT5hY3RpdmUoKSkKKyAgICBpZiAo
ZWxlbWVudC0+YWN0aXZlKCkgIT0gc3RhdGUuZWxlbWVudC0+YWN0aXZlKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+Zm9jdXNlZCgpICE9IG1fZWxlbWVudC0+Zm9j
dXNlZCgpKQorICAgIGlmIChlbGVtZW50LT5mb2N1c2VkKCkgIT0gc3RhdGUuZWxlbWVudC0+Zm9j
dXNlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPnNoYWRvd1Bz
ZXVkb0lkKCkgIT0gbV9lbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpKQorICAgIGlmIChlbGVtZW50
LT5zaGFkb3dQc2V1ZG9JZCgpICE9IHN0YXRlLmVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5kb2N1bWVu
dCgpLT5jc3NUYXJnZXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghc2hhcmlu
Z0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhlbGVtZW50KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5hZGRpdGlvbmFsUHJlc2Vu
dGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBtX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxQcmVz
ZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQorICAgIGlmIChlbGVtZW50LT5hZGRpdGlvbmFsUHJl
c2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzdGF0ZS5zdHlsZWRFbGVtZW50LT5hZGRpdGlv
bmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRh
aW5zKGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKQEAgLTEyMzUsNyAr
MTIyNSw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0
eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAKICAgICBib29sIGlzQ29udHJvbCA9IGVsZW1l
bnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CiAKLSAgICBpZiAoaXNDb250cm9sICE9IG1fZWxl
bWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICBpZiAoaXNDb250cm9sICE9IHN0YXRl
LmVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGlmIChpc0NvbnRyb2wgJiYgIWNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChlbGVtZW50
KSkKQEAgLTEyNTksMjAgKzEyNDksMjAgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0
eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICBpZiAoZWxl
bWVudEhhc0RpcmVjdGlvbkF1dG8oZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSAmJiBtX2VsZW1lbnRMaW5rU3RhdGUgIT0gc3R5bGUt
Pmluc2lkZUxpbmsoKSkKKyAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkgJiYgc3RhdGUuZWxlbWVu
dExpbmtTdGF0ZSAhPSBzdHlsZS0+aW5zaWRlTGluaygpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgLy8gRGVueSBzaGFyaW5nIHN0eWxlcyBi
ZXR3ZWVuIFdlYlZUVCBhbmQgbm9uLVdlYlZUVCBub2Rlcy4KLSAgICBpZiAoZWxlbWVudC0+aXNX
ZWJWVFRFbGVtZW50KCkgIT0gbV9lbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSkKKyAgICBpZiAo
ZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgIT0gc3RhdGUuZWxlbWVudC0+aXNXZWJWVFRFbGVt
ZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5pc1dlYlZU
VEVsZW1lbnQoKSAmJiBtX2VsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpICYmIHRvV2ViVlRURWxl
bWVudChlbGVtZW50KS0+d2ViVlRUTm9kZVR5cGUoKSAhPSB0b1dlYlZUVEVsZW1lbnQobV9lbGVt
ZW50KS0+d2ViVlRUTm9kZVR5cGUoKSkKKyAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50
KCkgJiYgc3RhdGUuZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYgdG9XZWJWVFRFbGVtZW50
KGVsZW1lbnQpLT53ZWJWVFROb2RlVHlwZSgpICE9IHRvV2ViVlRURWxlbWVudChzdGF0ZS5lbGVt
ZW50KS0+d2ViVlRUTm9kZVR5cGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+
ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCkgfHwgbV9lbGVtZW50
ID09IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50
KCkpCisgICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVu
dEZ1bGxTY3JlZW5FbGVtZW50KCkgfHwgc3RhdGUuZWxlbWVudCA9PSBzdGF0ZS5lbGVtZW50LT5k
b2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMjkzLDM2ICsxMjgzLDM4
IEBAIGlubGluZSBTdHlsZWRFbGVtZW50KiBTdHlsZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0
eWxlU2hhcmluZyhOb2RlKiBub2RlLCB1bnNpCiAKIFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVy
Ojpsb2NhdGVTaGFyZWRTdHlsZSgpCiB7Ci0gICAgaWYgKCFtX3N0eWxlZEVsZW1lbnQgfHwgIW1f
cGFyZW50U3R5bGUpCisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKyAgICBpZiAoIXN0YXRl
LnN0eWxlZEVsZW1lbnQgfHwgIXN0YXRlLnBhcmVudFN0eWxlKQogICAgICAgICByZXR1cm4gMDsK
KwogICAgIC8vIElmIHRoZSBlbGVtZW50IGhhcyBpbmxpbmUgc3R5bGUgaXQgaXMgcHJvYmFibHkg
dW5pcXVlLgotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCkpCisgICAgaWYg
KHN0YXRlLnN0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiAwOwog
I2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aXNTVkdFbGVtZW50KCkg
JiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01J
TFN0eWxlUHJvcGVydGllcygpKQorICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50LT5pc1NWR0Vs
ZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oc3RhdGUuc3R5bGVkRWxlbWVudCkt
PmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQogICAgICAgICByZXR1cm4gMDsKICNlbmRp
ZgogICAgIC8vIElkcyBzdG9wIHN0eWxlIHNoYXJpbmcgaWYgdGhleSBzaG93IHVwIGluIHRoZSBz
dHlsZXNoZWV0cy4KLSAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5oYXNJRCgpICYmIG1fZmVhdHVy
ZXMuaWRzSW5SdWxlcy5jb250YWlucyhtX3N0eWxlZEVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0
aW9uKCkuaW1wbCgpKSkKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiBt
X2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMoc3RhdGUuc3R5bGVkRWxlbWVudC0+aWRGb3JT
dHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAocGFy
ZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhtX2VsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkpCisg
ICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcoc3RhdGUuZWxlbWVudC0+cGFyZW50
RWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+
aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudC0+
aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKG1f
ZWxlbWVudCA9PSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNzc1RhcmdldCgpKQorICAgIGlmIChz
dGF0ZS5lbGVtZW50ID09IHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPmNzc1RhcmdldCgpKQog
ICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8obV9lbGVt
ZW50KSkKKyAgICBpZiAoZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oc3RhdGUuZWxlbWVudCkpCiAg
ICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQ2FjaGUgd2hldGhlciBtX2VsZW1lbnQgaXMgYWZm
ZWN0ZWQgYnkgYW55IGtub3duIGNsYXNzIHNlbGVjdG9ycy4KICAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGRuJ3QgYmUgYSBtZW1iZXIgdmFyaWFibGUuIFRoZSBzdHlsZSBzaGFyaW5nIGNvZGUgY291
bGQgYmUgZmFjdG9yZWQgb3V0IG9mIFN0eWxlUmVzb2x2ZXIuCi0gICAgbV9lbGVtZW50QWZmZWN0
ZWRCeUNsYXNzUnVsZXMgPSBtX2VsZW1lbnQgJiYgbV9lbGVtZW50LT5oYXNDbGFzcygpICYmIGNs
YXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMobV9lbGVtZW50LT5jbGFzc05hbWVzKCkpOworICAgIHN0
YXRlLmVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyA9IHN0YXRlLmVsZW1lbnQgJiYgc3RhdGUu
ZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKHN0YXRlLmVs
ZW1lbnQtPmNsYXNzTmFtZXMoKSk7CiAKICAgICAvLyBDaGVjayBwcmV2aW91cyBzaWJsaW5ncyBh
bmQgdGhlaXIgY291c2lucy4KICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgdW5zaWduZWQg
dmlzaXRlZE5vZGVDb3VudCA9IDA7CiAgICAgU3R5bGVkRWxlbWVudCogc2hhcmVFbGVtZW50ID0g
MDsKLSAgICBOb2RlKiBjb3VzaW5MaXN0ID0gbV9zdHlsZWRFbGVtZW50LT5wcmV2aW91c1NpYmxp
bmcoKTsKKyAgICBOb2RlKiBjb3VzaW5MaXN0ID0gc3RhdGUuc3R5bGVkRWxlbWVudC0+cHJldmlv
dXNTaWJsaW5nKCk7CiAgICAgd2hpbGUgKGNvdXNpbkxpc3QpIHsKICAgICAgICAgc2hhcmVFbGVt
ZW50ID0gZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoY291c2luTGlzdCwgY291bnQpOwogICAg
ICAgICBpZiAoc2hhcmVFbGVtZW50KQpAQCAtMTM0NCw3ICsxMzM2LDcgQEAgUmVuZGVyU3R5bGUq
IFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICBpZiAoc3R5bGVTaGFyaW5n
Q2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcygpKQogICAgICAgICByZXR1cm4gMDsKICAgICAvLyBU
cmFja2luZyBjaGlsZCBpbmRleCByZXF1aXJlcyB1bmlxdWUgc3R5bGUgZm9yIGVhY2ggbm9kZS4g
VGhpcyBtYXkgZ2V0IHNldCBieSB0aGUgc2libGluZyBydWxlIG1hdGNoIGFib3ZlLgotICAgIGlm
IChwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKG1fZWxlbWVudC0+cGFyZW50RWxlbWVudCgp
KSkKKyAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhzdGF0ZS5lbGVtZW50LT5w
YXJlbnRFbGVtZW50KCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc2hhcmVFbGVt
ZW50LT5yZW5kZXJTdHlsZSgpOwogfQpAQCAtMTU2NCwxMCArMTU1NiwxMSBAQCBQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxl
bWVudCwgUmVuZGVyUwogICAgICAgICByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsKICAg
ICB9CiAKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIGluaXRFbGVtZW50KGVsZW1l
bnQpOwogICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZWxlbWVudCwgZGVmYXVsdFBhcmVudCk7Ci0g
ICAgbV9yZWdpb25Gb3JTdHlsaW5nID0gcmVnaW9uRm9yU3R5bGluZzsKLSAgICBpZiAoc2hhcmlu
Z0JlaGF2aW9yID09IEFsbG93U3R5bGVTaGFyaW5nICYmICFtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRp
b25Qb2ludCkgeworICAgIHN0YXRlLnJlZ2lvbkZvclN0eWxpbmcgPSByZWdpb25Gb3JTdHlsaW5n
OworICAgIGlmIChzaGFyaW5nQmVoYXZpb3IgPT0gQWxsb3dTdHlsZVNoYXJpbmcgJiYgIXN0YXRl
LmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCkgewogICAgICAgICBSZW5kZXJTdHlsZSogc2hh
cmVkU3R5bGUgPSBsb2NhdGVTaGFyZWRTdHlsZSgpOwogICAgICAgICBpZiAoc2hhcmVkU3R5bGUp
CiAgICAgICAgICAgICByZXR1cm4gc2hhcmVkU3R5bGU7CkBAIC0xNTc1LDMzICsxNTY4LDMyIEBA
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChF
bGVtZW50KiBlbGVtZW50LCBSZW5kZXJTCiAKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGNsb25l
Rm9yUGFyZW50OwogCi0gICAgaWYgKG1fcGFyZW50U3R5bGUpIHsKLSAgICAgICAgbV9zdHlsZSA9
IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLSAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEZyb20obV9w
YXJlbnRTdHlsZSwgaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1lbnQpID8gUmVuZGVyU3R5bGU6OkF0
U2hhZG93Qm91bmRhcnkgOiBSZW5kZXJTdHlsZTo6Tm90QXRTaGFkb3dCb3VuZGFyeSk7CisgICAg
aWYgKHN0YXRlLnBhcmVudFN0eWxlKSB7CisgICAgICAgIHN0YXRlLnN0eWxlID0gUmVuZGVyU3R5
bGU6OmNyZWF0ZSgpOworICAgICAgICBzdGF0ZS5zdHlsZS0+aW5oZXJpdEZyb20oc3RhdGUucGFy
ZW50U3R5bGUsIGlzQXRTaGFkb3dCb3VuZGFyeShlbGVtZW50KSA/IFJlbmRlclN0eWxlOjpBdFNo
YWRvd0JvdW5kYXJ5IDogUmVuZGVyU3R5bGU6Ok5vdEF0U2hhZG93Qm91bmRhcnkpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIG1fc3R5bGUgPSBkZWZhdWx0U3R5bGVGb3JFbGVtZW50KCk7Ci0gICAg
ICAgIGNsb25lRm9yUGFyZW50ID0gUmVuZGVyU3R5bGU6OmNsb25lKHN0eWxlKCkpOwotICAgICAg
ICBtX3BhcmVudFN0eWxlID0gY2xvbmVGb3JQYXJlbnQuZ2V0KCk7CisgICAgICAgIHN0YXRlLnN0
eWxlID0gZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpOworICAgICAgICBjbG9uZUZvclBhcmVudCA9
IFJlbmRlclN0eWxlOjpjbG9uZShzdGF0ZS5zdHlsZS5nZXQoKSk7CisgICAgICAgIHN0YXRlLnBh
cmVudFN0eWxlID0gY2xvbmVGb3JQYXJlbnQuZ2V0KCk7CiAgICAgfQogICAgIC8vIGNvbnRlbnRl
ZGl0YWJsZSBhdHRyaWJ1dGUgKGltcGxlbWVudGVkIGJ5IC13ZWJraXQtdXNlci1tb2RpZnkpIHNo
b3VsZAogICAgIC8vIGJlIHByb3BhZ2F0ZWQgZnJvbSBzaGFkb3cgaG9zdCB0byBkaXN0cmlidXRl
ZCBub2RlLgotICAgIGlmIChtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCkgeworICAgIGlm
IChzdGF0ZS5kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQpIHsKICAgICAgICAgaWYgKEVsZW1l
bnQqIHBhcmVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICAgICAgaWYg
KFJlbmRlclN0eWxlKiBzdHlsZU9mU2hhZG93SG9zdCA9IHBhcmVudC0+cmVuZGVyU3R5bGUoKSkK
LSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRVc2VyTW9kaWZ5KHN0eWxlT2ZTaGFkb3dIb3N0
LT51c2VyTW9kaWZ5KCkpOworICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRVc2VyTW9k
aWZ5KHN0eWxlT2ZTaGFkb3dIb3N0LT51c2VyTW9kaWZ5KCkpOwogICAgICAgICB9CiAgICAgfQog
CiAgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpKSB7Ci0gICAgICAgIG1fc3R5bGUtPnNldElzTGlu
ayh0cnVlKTsKLSAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXRlID0gbV9lbGVtZW50TGlua1N0
YXRlOwotICAgICAgICBpZiAobV9lbGVtZW50TGlua1N0YXRlICE9IE5vdEluc2lkZUxpbmspIHsK
KyAgICAgICAgc3RhdGUuc3R5bGUtPnNldElzTGluayh0cnVlKTsKKyAgICAgICAgRUluc2lkZUxp
bmsgbGlua1N0YXRlID0gc3RhdGUuZWxlbWVudExpbmtTdGF0ZTsKKyAgICAgICAgaWYgKGxpbmtT
dGF0ZSAhPSBOb3RJbnNpZGVMaW5rKSB7CiAgICAgICAgICAgICBib29sIGZvcmNlVmlzaXRlZCA9
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlbGVtZW50LCBDU1NT
ZWxlY3Rvcjo6UHNldWRvVmlzaXRlZCk7CiAgICAgICAgICAgICBpZiAoZm9yY2VWaXNpdGVkKQog
ICAgICAgICAgICAgICAgIGxpbmtTdGF0ZSA9IEluc2lkZVZpc2l0ZWRMaW5rOwogICAgICAgICB9
Ci0KLSAgICAgICAgbV9zdHlsZS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdGUpOworICAgICAgICBz
dGF0ZS5zdHlsZS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdGUpOwogICAgIH0KIAogICAgIGVuc3Vy
ZURlZmF1bHRTdHlsZVNoZWV0c0ZvckVsZW1lbnQoZWxlbWVudCk7CkBAIC0xNjE1LDE3ICsxNjA3
LDE3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxl
bWVudChFbGVtZW50KiBlbGVtZW50LCBSZW5kZXJTCiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGll
cyhtYXRjaFJlc3VsdCwgZWxlbWVudCk7CiAKICAgICAvLyBDbGVhbiB1cCBvdXIgc3R5bGUgb2Jq
ZWN0J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIgZml4dXBzKS4K
LSAgICBhZGp1c3RSZW5kZXJTdHlsZShzdHlsZSgpLCBtX3BhcmVudFN0eWxlLCBlbGVtZW50KTsK
KyAgICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucGFyZW50U3R5
bGUsIGVsZW1lbnQpOwogCiAgICAgaW5pdEVsZW1lbnQoMCk7IC8vIENsZWFyIG91dCBmb3IgdGhl
IG5leHQgcmVzb2x2ZS4KIAogICAgIGlmIChjbG9uZUZvclBhcmVudCkKLSAgICAgICAgbV9wYXJl
bnRTdHlsZSA9IDA7CisgICAgICAgIHN0YXRlLnBhcmVudFN0eWxlID0gMDsKIAogICAgIGRvY3Vt
ZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIAogICAgIC8vIE5vdyByZXR1cm4gdGhl
IHN0eWxlLgotICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3RhdGUu
c3R5bGUucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29s
dmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIGNv
bnN0IFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1lLCBLZXlmcmFtZVZhbHVlJiBrZXlmcmFtZVZhbHVl
KQpAQCAtMTYzNCwxMiArMTYyNiwxNCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJl
c29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZQogICAgIGlm
IChrZXlmcmFtZS0+cHJvcGVydGllcygpKQogICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhy
ZXN1bHQsIGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpOwogCi0gICAgQVNTRVJUKCFtX3N0eWxlKTsK
KyAgICBBU1NFUlQoIW1fc3RhdGUuc3R5bGUpOworCisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0
ZTsKIAogICAgIC8vIENyZWF0ZSB0aGUgc3R5bGUKLSAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6
OmNsb25lKGVsZW1lbnRTdHlsZSk7CisgICAgc3RhdGUuc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xv
bmUoZWxlbWVudFN0eWxlKTsKIAotICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBzdGF0
ZS5saW5lSGVpZ2h0VmFsdWUgPSAwOwogCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIg
d2l0aCAhaW1wb3J0YW50LiBTaW5jZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8gZGVj
bCwgdGhlcmUncyBub3RoaW5nIHRvIG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3QgcHJv
cGVydGllcy4KQEAgLTE2NTEsOCArMTY0NSw4IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0
eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lCiAg
ICAgdXBkYXRlRm9udCgpOwogCiAgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJl
IHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplCi0gICAgaWYgKG1fbGluZUhlaWdodFZh
bHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5l
SGVpZ2h0VmFsdWUpOworICAgIGlmIChzdGF0ZS5saW5lSGVpZ2h0VmFsdWUpCisgICAgICAgIGFw
cGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUp
OwogCiAgICAgLy8gTm93IGRvIHJlc3Qgb2YgdGhlIHByb3BlcnRpZXMuCiAgICAgaWYgKGtleWZy
YW1lLT5wcm9wZXJ0aWVzKCkpCkBAIC0xNjc5LDcgKzE2NzMsNyBAQCBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxl
KiBlbGVtZQogCiAgICAgZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCi0g
ICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOworICAgIHJldHVybiBzdGF0ZS5zdHlsZS5yZWxl
YXNlKCk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRp
b24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgS2V5ZnJhbWVM
aXN0JiBsaXN0KQpAQCAtMTc0NywxNSArMTc0MSwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Omtl
eWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBl
bAogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZv
ckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUpCiB7Ci0gICAgQVNTRVJUKG1fcGFyZW50U3R5bGUpOworICAgIEFTU0VSVChtX3N0YXRl
LnBhcmVudFN0eWxlKTsKICAgICBpZiAoIWUpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgU3Rh
dGUmIHN0YXRlID0gbV9zdGF0ZTsKKwogICAgIGluaXRFbGVtZW50KGUpOwogCiAgICAgaW5pdEZv
clN0eWxlUmVzb2x2ZShlLCBwYXJlbnRTdHlsZSwgcHNldWRvKTsKLSAgICBtX3N0eWxlID0gUmVu
ZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKG1fcGFyZW50U3R5
bGUpOworICAgIHN0YXRlLnN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgIHN0YXRl
LnN0eWxlLT5pbmhlcml0RnJvbShtX3N0YXRlLnBhcmVudFN0eWxlKTsKIAogICAgIC8vIFNpbmNl
IHdlIGRvbid0IHVzZSBwc2V1ZG8tZWxlbWVudHMgaW4gYW55IG9mIG91ciBxdWlyay9wcmludCB1
c2VyIGFnZW50IHJ1bGVzLCBkb24ndCB3YXN0ZSB0aW1lIHdhbGtpbmcKICAgICAvLyB0aG9zZSBy
dWxlcy4KQEAgLTE3NzIsMTIgKzE3NjgsMTIgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5
bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywgRWwKICAg
ICBpZiAobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIG1fc3R5bGUtPnNldFN0eWxlVHlwZShwc2V1ZG8pOworICAgIHN0YXRl
LnN0eWxlLT5zZXRTdHlsZVR5cGUocHNldWRvKTsKIAogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRp
ZXMobWF0Y2hSZXN1bHQsIGUpOwogCiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdz
IGRpc3BsYXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0gICAg
YWRqdXN0UmVuZGVyU3R5bGUoc3R5bGUoKSwgcGFyZW50U3R5bGUsIDApOworICAgIGFkanVzdFJl
bmRlclN0eWxlKHN0YXRlLnN0eWxlLmdldCgpLCBtX3N0YXRlLnBhcmVudFN0eWxlLCAwKTsKIAog
ICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4K
ICAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOwpAQCAtMTc4NSwxNSArMTc4MSwxNSBAQCBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQo
UHNldWRvSWQgcHNldWRvLCBFbAogICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2
ZXIoKTsKIAogICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgotICAgIHJldHVybiBtX3N0eWxl
LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3RhdGUuc3R5bGUucmVsZWFzZSgpOwogfQogCiBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJ
bmRleCkKIHsKICAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCktPmRvY3VtZW50RWxl
bWVudCgpKTsgLy8gbV9yb290RWxlbWVudFN0eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBkb2N1bWVu
dCBzdHlsZS4KIAotICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgbV9z
dHlsZS0+aW5oZXJpdEZyb20obV9yb290RWxlbWVudFN0eWxlKTsKKyAgICBtX3N0YXRlLnN0eWxl
ID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgIG1fc3RhdGUuc3R5bGUtPmluaGVyaXRGcm9t
KG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSk7CiAKICAgICBjb25zdCBib29sIGlzTGVmdCA9IGlz
TGVmdFBhZ2UocGFnZUluZGV4KTsKICAgICBjb25zdCBib29sIGlzRmlyc3QgPSBpc0ZpcnN0UGFn
ZShwYWdlSW5kZXgpOwpAQCAtMTgwNCw3ICsxODAwLDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiAgICAgbWF0Y2hQ
YWdlUnVsZXMocmVzdWx0LCBtX3VzZXJTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdl
KTsKICAgICAvLyBPbmx5IGNvbnNpZGVyIHRoZSBnbG9iYWwgYXV0aG9yIFJ1bGVTZXQgZm9yIEBw
YWdlIHJ1bGVzLCBhcyBwZXIgdGhlIEhUTUw1IHNwZWMuCiAgICAgbWF0Y2hQYWdlUnVsZXMocmVz
dWx0LCBtX2F1dGhvclN0eWxlLmdldCgpLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwotICAgIG1f
bGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBtX3N0YXRlLmxpbmVIZWlnaHRWYWx1ZSA9IDA7CiAg
ICAgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMp
CiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihyZXN1bHQs
IGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVk
T25seSk7CkBAIC0xODE1LDggKzE4MTEsOCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHls
ZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICB1cGRhdGVGb250KCk7
CiAKICAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVk
IG9uIHRoZSBmb250LXNpemUuCi0gICAgaWYgKG1fbGluZUhlaWdodFZhbHVlKQotICAgICAgICBh
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOwor
ICAgIGlmIChtX3N0YXRlLmxpbmVIZWlnaHRWYWx1ZSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fc3RhdGUubGluZUhlaWdodFZhbHVlKTsKIAogICAgIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihyZXN1bHQsIGZhbHNl
LCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7
CiAKQEAgLTE4MjYsMjAgKzE4MjIsMjAgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVS
ZXNvbHZlcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiAgICAgZG9jdW1lbnQoKS0+ZGlk
QWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCiAgICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUuCi0g
ICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOworICAgIHJldHVybiBtX3N0YXRlLnN0eWxlLnJl
bGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6ZGVm
YXVsdFN0eWxlRm9yRWxlbWVudCgpCiB7Ci0gICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVh
dGUoKTsKKyAgICBtX3N0YXRlLnN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwogICAgIC8v
IE1ha2Ugc3VyZSBvdXIgZm9udHMgYXJlIGluaXRpYWxpemVkIGlmIHdlIGRvbid0IGluaGVyaXQg
dGhlbSBmcm9tIG91ciBwYXJlbnQgc3R5bGUuCiAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9
IGRvY3VtZW50U2V0dGluZ3MoKSkgewogICAgICAgICBpbml0aWFsaXplRm9udFN0eWxlKHNldHRp
bmdzKTsKLSAgICAgICAgbV9zdHlsZS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7Cisg
ICAgICAgIG1fc3RhdGUuc3R5bGUtPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogICAg
IH0gZWxzZQotICAgICAgICBtX3N0eWxlLT5mb250KCkudXBkYXRlKDApOworICAgICAgICBtX3N0
YXRlLnN0eWxlLT5mb250KCkudXBkYXRlKDApOwogCi0gICAgcmV0dXJuIG1fc3R5bGUucmVsZWFz
ZSgpOworICAgIHJldHVybiBtX3N0YXRlLnN0eWxlLnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JUZXh0KFRleHQqIHRleHROb2Rl
KQpAQCAtMjEyNyw3ICsyMTIzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJT
dHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHkKIAogICAgIC8v
IExldCB0aGUgdGhlbWUgYWxzbyBoYXZlIGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBzdHlsZS4K
ICAgICBpZiAoc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgUmVuZGVyVGhlbWU6OmRl
ZmF1bHRUaGVtZSgpLT5hZGp1c3RTdHlsZSh0aGlzLCBzdHlsZSwgZSwgbV9oYXNVQUFwcGVhcmFu
Y2UsIG1fYm9yZGVyRGF0YSwgbV9iYWNrZ3JvdW5kRGF0YSwgbV9iYWNrZ3JvdW5kQ29sb3IpOwor
ICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmFkanVzdFN0eWxlKHRoaXMsIHN0
eWxlLCBlLCBtX3N0YXRlLmhhc1VBQXBwZWFyYW5jZSwgbV9zdGF0ZS5ib3JkZXJEYXRhLCBtX3N0
YXRlLmJhY2tncm91bmREYXRhLCBtX3N0YXRlLmJhY2tncm91bmRDb2xvcik7CiAKICAgICAvLyBJ
ZiB3ZSBoYXZlIGZpcnN0LWxldHRlciBwc2V1ZG8gc3R5bGUsIGRvIG5vdCBzaGFyZSB0aGlzIHN0
eWxlLgogICAgIGlmIChzdHlsZS0+aGFzUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSKSkKQEAgLTIy
MTAsMjQgKzIyMDYsMjUgQEAgc3RhdGljIHZvaWQgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShS
ZW5kZXJTdHlsZSogc3R5bGUpCiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCgpCiB7
Ci0gICAgaWYgKCFtX2ZvbnREaXJ0eSkKKyAgICBpZiAoIW1fc3RhdGUuZm9udERpcnR5KQogICAg
ICAgICByZXR1cm47CiAKICAgICBjaGVja0ZvclRleHRTaXplQWRqdXN0KCk7Ci0gICAgY2hlY2tG
b3JHZW5lcmljRmFtaWx5Q2hhbmdlKHN0eWxlKCksIG1fcGFyZW50U3R5bGUpOwotICAgIGNoZWNr
Rm9yWm9vbUNoYW5nZShzdHlsZSgpLCBtX3BhcmVudFN0eWxlKTsKLSAgICBjaGVja0Zvck9yaWVu
dGF0aW9uQ2hhbmdlKHN0eWxlKCkpOwotICAgIG1fc3R5bGUtPmZvbnQoKS51cGRhdGUobV9mb250
U2VsZWN0b3IpOwotICAgIG1fZm9udERpcnR5ID0gZmFsc2U7CisgICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gbV9zdGF0ZS5zdHlsZS5nZXQoKTsKKyAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFu
Z2Uoc3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUpOworICAgIGNoZWNrRm9yWm9vbUNoYW5nZShz
dHlsZSwgbV9zdGF0ZS5wYXJlbnRTdHlsZSk7CisgICAgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5n
ZShzdHlsZSk7CisgICAgbV9zdGF0ZS5zdHlsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rv
cik7CisgICAgbV9zdGF0ZS5mb250RGlydHkgPSBmYWxzZTsKIH0KIAogdm9pZCBTdHlsZVJlc29s
dmVyOjpjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKQogewotICAgIG1faGFzVUFBcHBlYXJhbmNl
ID0gbV9zdHlsZS0+aGFzQXBwZWFyYW5jZSgpOwotICAgIGlmIChtX2hhc1VBQXBwZWFyYW5jZSkg
ewotICAgICAgICBtX2JvcmRlckRhdGEgPSBtX3N0eWxlLT5ib3JkZXIoKTsKLSAgICAgICAgbV9i
YWNrZ3JvdW5kRGF0YSA9ICptX3N0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAgIG1f
YmFja2dyb3VuZENvbG9yID0gbV9zdHlsZS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgbV9zdGF0
ZS5oYXNVQUFwcGVhcmFuY2UgPSBtX3N0YXRlLnN0eWxlLT5oYXNBcHBlYXJhbmNlKCk7CisgICAg
aWYgKG1fc3RhdGUuaGFzVUFBcHBlYXJhbmNlKSB7CisgICAgICAgIG1fc3RhdGUuYm9yZGVyRGF0
YSA9IG1fc3RhdGUuc3R5bGUtPmJvcmRlcigpOworICAgICAgICBtX3N0YXRlLmJhY2tncm91bmRE
YXRhID0gKm1fc3RhdGUuc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKTsKKyAgICAgICAgbV9zdGF0
ZS5iYWNrZ3JvdW5kQ29sb3IgPSBtX3N0YXRlLnN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKTsKICAg
ICB9CiB9CiAKQEAgLTIyNTcsNDkgKzIyNTQsNTEgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4g
U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgUHMK
ICAgICB9CiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgKHJ1bGVzVG9J
bmNsdWRlICYgQXV0aG9yQ1NTUnVsZXMpKSB7Ci0gICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSAh
KHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcyk7CisgICAgICAgIG1fc3RhdGUu
c2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcyk7
CiAKICAgICAgICAgLy8gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVldHMuCiAgICAgICAg
IG1hdGNoQXV0aG9yUnVsZXMoZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7
CiAKLSAgICAgICAgbV9zYW1lT3JpZ2luT25seSA9IGZhbHNlOworICAgICAgICBtX3N0YXRlLnNh
bWVPcmlnaW5Pbmx5ID0gZmFsc2U7CiAgICAgfQogCiAgICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0
TW9kZShTZWxlY3RvckNoZWNrZXI6OlJlc29sdmluZ1N0eWxlKTsKIAotICAgIHJldHVybiBtX3J1
bGVMaXN0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gbV9zdGF0ZS5ydWxlTGlzdC5yZWxlYXNlKCk7
CiB9CiAKIGlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OnJ1bGVNYXRjaGVzKGNvbnN0IFJ1bGVE
YXRhJiBydWxlRGF0YSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCiB7Ci0gICAgbV9keW5h
bWljUHNldWRvID0gTk9QU0VVRE87CisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKyAgICBz
dGF0ZS5keW5hbWljUHNldWRvID0gTk9QU0VVRE87CiAKICAgICBpZiAocnVsZURhdGEuaGFzRmFz
dENoZWNrYWJsZVNlbGVjdG9yKCkpIHsKICAgICAgICAgLy8gV2Uga25vdyB0aGlzIHNlbGVjdG9y
IGRvZXMgbm90IGluY2x1ZGUgYW55IHBzZXVkbyBlbGVtZW50cy4KLSAgICAgICAgaWYgKG1fcHNl
dWRvU3R5bGUgIT0gTk9QU0VVRE8pCisgICAgICAgIGlmIChzdGF0ZS5wc2V1ZG9TdHlsZSAhPSBO
T1BTRVVETykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgLy8gV2Uga25vdyBh
IHN1ZmZpY2llbnRseSBzaW1wbGUgc2luZ2xlIHBhcnQgc2VsZWN0b3IgbWF0Y2hlcyBzaW1wbHkg
YmVjYXVzZSB3ZSBmb3VuZCBpdCBmcm9tIHRoZSBydWxlIGhhc2guCiAgICAgICAgIC8vIFRoaXMg
aXMgbGltaXRlZCB0byBIVE1MIG9ubHkgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgbmFt
ZXNwYWNlLgotICAgICAgICBpZiAocnVsZURhdGEuaGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGlu
Z0hUTUxCYXNlZE9uUnVsZUhhc2goKSAmJiBtX2VsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkgewor
ICAgICAgICBpZiAocnVsZURhdGEuaGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNl
ZE9uUnVsZUhhc2goKSAmJiBzdGF0ZS5lbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAg
ICAgICAgIGlmICghcnVsZURhdGEuaGFzTXVsdGlwYXJ0U2VsZWN0b3IoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBpZiAocnVsZURhdGEuc2VsZWN0
b3IoKS0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6VGFnICYmICFTZWxlY3RvckNoZWNrZXI6OnRh
Z01hdGNoZXMobV9lbGVtZW50LCBydWxlRGF0YS5zZWxlY3RvcigpLT50YWdRTmFtZSgpKSkKKyAg
ICAgICAgaWYgKHJ1bGVEYXRhLnNlbGVjdG9yKCktPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRh
ZyAmJiAhU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKHN0YXRlLmVsZW1lbnQsIHJ1bGVEYXRh
LnNlbGVjdG9yKCktPnRhZ1FOYW1lKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBpZiAoIVNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrUmlnaHRtb3N0QXR0cmlidXRlU2Vs
ZWN0b3IobV9lbGVtZW50LCBydWxlRGF0YS5zZWxlY3RvcigpKSkKKyAgICAgICAgaWYgKCFTZWxl
Y3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVjdG9yKHN0YXRlLmVs
ZW1lbnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICByZXR1cm4gbV9zZWxlY3RvckNoZWNrZXIuZmFzdENoZWNrKHJ1bGVEYXRhLnNlbGVj
dG9yKCksIG1fZWxlbWVudCk7CisKKyAgICAgICAgcmV0dXJuIG1fc2VsZWN0b3JDaGVja2VyLmZh
c3RDaGVjayhydWxlRGF0YS5zZWxlY3RvcigpLCBzdGF0ZS5lbGVtZW50KTsKICAgICB9CiAKICAg
ICAvLyBTbG93IHBhdGguCi0gICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29u
dGV4dCBjb250ZXh0KHJ1bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCwgU2VsZWN0b3JDaGVj
a2VyOjpWaXNpdGVkTWF0Y2hFbmFibGVkKTsKLSAgICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IHN0
eWxlKCk7CisgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250
ZXh0KHJ1bGVEYXRhLnNlbGVjdG9yKCksIHN0YXRlLmVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6
VmlzaXRlZE1hdGNoRW5hYmxlZCk7CisgICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBzdGF0ZS5z
dHlsZS5nZXQoKTsKICAgICBjb250ZXh0LnNjb3BlID0gc2NvcGU7Ci0gICAgY29udGV4dC5wc2V1
ZG9TdHlsZSA9IG1fcHNldWRvU3R5bGU7Ci0gICAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBtYXRj
aCA9IG1fc2VsZWN0b3JDaGVja2VyLm1hdGNoKGNvbnRleHQsIG1fZHluYW1pY1BzZXVkbywgRE9N
U2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KCkpOworICAgIGNvbnRleHQucHNldWRvU3R5bGUgPSBz
dGF0ZS5wc2V1ZG9TdHlsZTsKKyAgICBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gbV9z
ZWxlY3RvckNoZWNrZXIubWF0Y2goY29udGV4dCwgc3RhdGUuZHluYW1pY1BzZXVkbywgRE9NU2li
bGluZ1RyYXZlcnNhbFN0cmF0ZWd5KCkpOwogICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckNoZWNr
ZXI6OlNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX3Bz
ZXVkb1N0eWxlICE9IE5PUFNFVURPICYmIG1fcHNldWRvU3R5bGUgIT0gbV9keW5hbWljUHNldWRv
KQorICAgIGlmIChzdGF0ZS5wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETyAmJiBzdGF0ZS5wc2V1ZG9T
dHlsZSAhPSBzdGF0ZS5keW5hbWljUHNldWRvKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
cmV0dXJuIHRydWU7CiB9CkBAIC0yMzA5LDcgKzIzMDgsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6
OmNoZWNrUmVnaW9uU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBF
bGVtZQogICAgIGlmICghcmVnaW9uU2VsZWN0b3IgfHwgIXJlZ2lvbkVsZW1lbnQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIG1fcHNldWRvU3R5bGUgPSBOT1BTRVVETzsKKyAgICBtX3N0
YXRlLnBzZXVkb1N0eWxlID0gTk9QU0VVRE87CiAKICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9y
KiBzID0gcmVnaW9uU2VsZWN0b3I7IHM7IHMgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQocykpCiAg
ICAgICAgIGlmIChtX3NlbGVjdG9yQ2hlY2tlci5tYXRjaGVzKHMsIHJlZ2lvbkVsZW1lbnQpKQpA
QCAtMjMzNCw3ICsyMzMzLDcgQEAgTGVuZ3RoIFN0eWxlUmVzb2x2ZXI6OmNvbnZlcnRUb0Zsb2F0
TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgUmUKIHRlbXBsYXRlIDxT
dHlsZVJlc29sdmVyOjpTdHlsZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgogdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywg
U3R5bGVSdWxlKiBydWxlLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHksIFBy
b3BlcnR5V2hpdGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5cGUpCiB7Ci0gICAgQVNTRVJU
KChwcm9wZXJ0eVdoaXRlbGlzdFR5cGUgIT0gUHJvcGVydHlXaGl0ZWxpc3RSZWdpb24pIHx8IG1f
cmVnaW9uRm9yU3R5bGluZyk7CisgICAgQVNTRVJUKChwcm9wZXJ0eVdoaXRlbGlzdFR5cGUgIT0g
UHJvcGVydHlXaGl0ZWxpc3RSZWdpb24pIHx8IG1fc3RhdGUucmVnaW9uRm9yU3R5bGluZyk7CiAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6d2lsbFByb2Nlc3NSdWxlKGRvY3VtZW50KCksIHJ1bGUsIHRoaXMpOwogCiAg
ICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IHByb3BlcnRpZXMtPnByb3BlcnR5Q291bnQoKTsK
QEAgLTIzNzgsNyArMjM3Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVz
KGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsCiAgICAgICAgICAg
ICAgICAgYXBwbHlQcm9wZXJ0eShjdXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CiAgICAg
ICAgICAgICAvLyB3ZSBhcHBseSBsaW5lLWhlaWdodCBsYXRlcgogICAgICAgICAgICAgZWxzZSBp
ZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQotICAgICAgICAgICAgICAgIG1f
bGluZUhlaWdodFZhbHVlID0gY3VycmVudC52YWx1ZSgpOworICAgICAgICAgICAgICAgIG1fc3Rh
dGUubGluZUhlaWdodFZhbHVlID0gY3VycmVudC52YWx1ZSgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgTG93UHJpb3JpdHlQcm9wZXJ0aWVzOgogICAgICAgICAgICAgaWYgKHBy
b3BlcnR5ID4gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQpAQCAtMjM5NCwxOCArMjM5MywxOSBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1
bHQmIG1hdGNoUmVzdWx0LCBib29sCiAgICAgaWYgKHN0YXJ0SW5kZXggPT0gLTEpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChtX3N0eWxlLT5pbnNpZGVMaW5rKCkgIT0gTm90SW5zaWRlTGlu
aykgeworICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgaWYgKHN0YXRlLnN0eWxlLT5p
bnNpZGVMaW5rKCkgIT0gTm90SW5zaWRlTGluaykgewogICAgICAgICBmb3IgKGludCBpID0gc3Rh
cnRJbmRleDsgaSA8PSBlbmRJbmRleDsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBNYXRjaGVk
UHJvcGVydGllcyYgbWF0Y2hlZFByb3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVy
dGllc1tpXTsKICAgICAgICAgICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBtYXRjaGVkUHJv
cGVydGllcy5saW5rTWF0Y2hUeXBlOwogICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJl
IG5pY2VyIHRvIHBhc3MgdGhlc2UgYXMgYXJndW1lbnRzIGJ1dCB0aGF0IHJlcXVpcmVzIGNoYW5n
ZXMgaW4gbWFueSBwbGFjZXMuCi0gICAgICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZSA9IGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluazsKLSAgICAg
ICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGxpbmtNYXRjaFR5cGUg
JiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZDsKKyAgICAgICAgICAgIHN0YXRlLmFwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6
Ok1hdGNoTGluazsKKyAgICAgICAgICAgIHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5r
U3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7CiAK
ICAgICAgICAgICAgIGFwcGx5UHJvcGVydGllczxwYXNzPihtYXRjaGVkUHJvcGVydGllcy5wcm9w
ZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0YW50LCBp
bmhlcml0ZWRPbmx5LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1hdGNoZWRQ
cm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUpKTsKICAgICAgICAgfQotICAgICAgICBtX2FwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSA9IHRydWU7Ci0gICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRvVmlz
aXRlZExpbmtTdHlsZSA9IGZhbHNlOworICAgICAgICBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUgPSB0cnVlOworICAgICAgICBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgZm9yIChpbnQgaSA9
IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewpAQCAtMjUxMyw2ICsyNTEzLDcgQEAg
c3RhdGljIGJvb2wgaXNDYWNoZWFibGVJbk1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoY29uc3QgRWxl
bWVudCogZWxlbWVudCwgY29uc3QgUmUKIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVk
UHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0IEVsZW1lbnQq
IGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKGVsZW1lbnQpOworICAgIFN0YXRlJiBzdGF0ZSA9IG1f
c3RhdGU7CiAgICAgdW5zaWduZWQgY2FjaGVIYXNoID0gbWF0Y2hSZXN1bHQuaXNDYWNoZWFibGUg
PyBjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0
aWVzLmRhdGEoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpKSA6IDA7CiAg
ICAgYm9vbCBhcHBseUluaGVyaXRlZE9ubHkgPSBmYWxzZTsKICAgICBjb25zdCBNYXRjaGVkUHJv
cGVydGllc0NhY2hlSXRlbSogY2FjaGVJdGVtID0gMDsKQEAgLTI1MjAsMTUgKzI1MjEsMTUgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVz
dWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICAgICAgLy8gV2UgY2FuIGJ1aWxkIHVwIHRoZSBz
dHlsZSBieSBjb3B5aW5nIG5vbi1pbmhlcml0ZWQgcHJvcGVydGllcyBmcm9tIGFuIGVhcmxpZXIg
c3R5bGUgb2JqZWN0IGJ1aWx0IHVzaW5nIHRoZSBzYW1lIGV4YWN0CiAgICAgICAgIC8vIHN0eWxl
IGRlY2xhcmF0aW9ucy4gV2UgdGhlbiBvbmx5IG5lZWQgdG8gYXBwbHkgdGhlIGluaGVyaXRlZCBw
cm9wZXJ0aWVzLCBpZiBhbnksIGFzIHRoZWlyIHZhbHVlcyBjYW4gZGVwZW5kIG9uIHRoZSAKICAg
ICAgICAgLy8gZWxlbWVudCBjb250ZXh0LiBUaGlzIGlzIGZhc3QgYW5kIHNhdmVzIG1lbW9yeSBi
eSByZXVzaW5nIHRoZSBzdHlsZSBkYXRhIHN0cnVjdHVyZXMuCi0gICAgICAgIG1fc3R5bGUtPmNv
cHlOb25Jbmhlcml0ZWRGcm9tKGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOwotICAgICAg
ICBpZiAobV9wYXJlbnRTdHlsZS0+aW5oZXJpdGVkRGF0YVNoYXJlZChjYWNoZUl0ZW0tPnBhcmVu
dFJlbmRlclN0eWxlLmdldCgpKSAmJiAhaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1lbnQpKSB7Ci0g
ICAgICAgICAgICBFSW5zaWRlTGluayBsaW5rU3RhdHVzID0gbV9zdHlsZS0+aW5zaWRlTGluaygp
OworICAgICAgICBzdGF0ZS5zdHlsZS0+Y29weU5vbkluaGVyaXRlZEZyb20oY2FjaGVJdGVtLT5y
ZW5kZXJTdHlsZS5nZXQoKSk7CisgICAgICAgIGlmIChzdGF0ZS5wYXJlbnRTdHlsZS0+aW5oZXJp
dGVkRGF0YVNoYXJlZChjYWNoZUl0ZW0tPnBhcmVudFJlbmRlclN0eWxlLmdldCgpKSAmJiAhaXNB
dFNoYWRvd0JvdW5kYXJ5KGVsZW1lbnQpKSB7CisgICAgICAgICAgICBFSW5zaWRlTGluayBsaW5r
U3RhdHVzID0gc3RhdGUuc3R5bGUtPmluc2lkZUxpbmsoKTsKICAgICAgICAgICAgIC8vIElmIHRo
ZSBjYWNoZSBpdGVtIHBhcmVudCBzdHlsZSBoYXMgaWRlbnRpY2FsIGluaGVyaXRlZCBwcm9wZXJ0
aWVzIHRvIHRoZSBjdXJyZW50IHBhcmVudCBzdHlsZSB0aGVuIHRoZQogICAgICAgICAgICAgLy8g
cmVzdWx0aW5nIHN0eWxlIHdpbGwgYmUgaWRlbnRpY2FsIHRvby4gV2UgY29weSB0aGUgaW5oZXJp
dGVkIHByb3BlcnRpZXMgb3ZlciBmcm9tIHRoZSBjYWNoZSBhbmQgYXJlIGRvbmUuCi0gICAgICAg
ICAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5pbmhlcml0RnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0
eWxlLmdldCgpKTsKIAogICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSB0aGUgbGluayBzdGF0
dXMgaXMgdHJlYXRlZCBsaWtlIGFuIGluaGVyaXRlZCBwcm9wZXJ0eS4gV2UgbmVlZCB0byBleHBs
aWNpdGx5IHJlc3RvcmUgaXQuCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRJbnNpZGVMaW5rKGxp
bmtTdGF0dXMpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldEluc2lkZUxpbmsobGlua1N0
YXR1cyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgYXBwbHlJbmhl
cml0ZWRPbmx5ID0gdHJ1ZTsgCkBAIC0yNTQ2LDE0ICsyNTQ3LDE0IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1
bHQsIGNvbnN0CiAgICAgLy8gaGlnaC1wcmlvcml0eSBwcm9wZXJ0aWVzIGZpcnN0LCBpLmUuLCB0
aG9zZSBwcm9wZXJ0aWVzIHRoYXQgb3RoZXIgcHJvcGVydGllcyBkZXBlbmQgb24uCiAgICAgLy8g
VGhlIG9yZGVyIGlzICgxKSBoaWdoLXByaW9yaXR5IG5vdCBpbXBvcnRhbnQsICgyKSBoaWdoLXBy
aW9yaXR5IGltcG9ydGFudCwgKDMpIG5vcm1hbCBub3QgaW1wb3J0YW50CiAgICAgLy8gYW5kICg0
KSBub3JtYWwgaW1wb3J0YW50LgotICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBzdGF0
ZS5saW5lSGVpZ2h0VmFsdWUgPSAwOwogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFBy
aW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIGZhbHNlLCAwLCBtYXRjaFJlc3VsdC5tYXRj
aGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOwogICAgIGFwcGx5
TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRy
dWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdl
cy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgICBhcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRj
aFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2Vy
UnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhp
Z2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5n
ZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVy
aXRlZE9ubHkpOwogCi0gICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxl
LT5lZmZlY3RpdmVab29tKCkgIT0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKSB7Ci0gICAgICAg
IG1fZm9udERpcnR5ID0gdHJ1ZTsKKyAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVu
ZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBzdGF0ZS5zdHlsZS0+ZWZmZWN0aXZlWm9vbSgp
KSB7CisgICAgICAgIHN0YXRlLmZvbnREaXJ0eSA9IHRydWU7CiAgICAgICAgIGFwcGx5SW5oZXJp
dGVkT25seSA9IGZhbHNlOwogICAgIH0KIApAQCAtMjU2MSwxMSArMjU2MiwxMSBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1h
dGNoUmVzdWx0LCBjb25zdAogICAgIHVwZGF0ZUZvbnQoKTsKIAogICAgIC8vIExpbmUtaGVpZ2h0
IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZS4KLSAg
ICBpZiAobV9saW5lSGVpZ2h0VmFsdWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlMaW5lSGVpZ2h0LCBtX2xpbmVIZWlnaHRWYWx1ZSk7CisgICAgaWYgKHN0YXRlLmxpbmVIZWln
aHRWYWx1ZSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0
YXRlLmxpbmVIZWlnaHRWYWx1ZSk7CiAKICAgICAvLyBNYW55IHByb3BlcnRpZXMgZGVwZW5kIG9u
IHRoZSBmb250LiBJZiBpdCBjaGFuZ2VzIHdlIGp1c3QgYXBwbHkgYWxsIHByb3BlcnRpZXMuCi0g
ICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5mb250RGVzY3JpcHRp
b24oKSAhPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKSkKKyAgICBpZiAoY2FjaGVJdGVtICYm
IGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpICE9IHN0YXRlLnN0eWxl
LT5mb250RGVzY3JpcHRpb24oKSkKICAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7
CiAKICAgICAvLyBOb3cgZG8gdGhlIG5vcm1hbCBwcmlvcml0eSBVQSBwcm9wZXJ0aWVzLgpAQCAt
MjU4MywxMyArMjU4NCwxMyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgIC8vIFN0YXJ0
IGxvYWRpbmcgcmVzb3VyY2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KICAgICBsb2FkUGVu
ZGluZ1Jlc291cmNlcygpOwogICAgIAotICAgIEFTU0VSVCghbV9mb250RGlydHkpOworICAgIEFT
U0VSVCghc3RhdGUuZm9udERpcnR5KTsKICAgICAKICAgICBpZiAoY2FjaGVJdGVtIHx8ICFjYWNo
ZUhhc2gpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJv
cGVydGllc0NhY2hlKG1fZWxlbWVudCwgbV9zdHlsZS5nZXQoKSwgbV9wYXJlbnRTdHlsZSkpCisg
ICAgaWYgKCFpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShzdGF0ZS5lbGVtZW50
LCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucGFyZW50U3R5bGUpKQogICAgICAgICByZXR1cm47
Ci0gICAgYWRkVG9NYXRjaGVkUHJvcGVydGllc0NhY2hlKG1fc3R5bGUuZ2V0KCksIG1fcGFyZW50
U3R5bGUsIGNhY2hlSGFzaCwgbWF0Y2hSZXN1bHQpOworICAgIGFkZFRvTWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZShzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucGFyZW50U3R5bGUsIGNhY2hlSGFzaCwg
bWF0Y2hSZXN1bHQpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVBhZ2VSdWxlcyhj
b25zdCBTdHlsZVJ1bGVQYWdlKiByMSwgY29uc3QgU3R5bGVSdWxlUGFnZSogcjIpCkBAIC0yNjU0
LDcgKzI2NTUsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoUGFnZVJ1bGVzRm9yTGlzdChW
ZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBtYXRjaGVkUnVsZXMsCiBib29sIFN0eWxlUmVzb2x2ZXI6
OmlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QKIHsKICAgICBib29sIGlzRmlyc3RQYWdl
TGVmdCA9IGZhbHNlOwotICAgIGlmICghbV9yb290RWxlbWVudFN0eWxlLT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkpCisgICAgaWYgKCFtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUtPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgaXNGaXJzdFBhZ2VMZWZ0ID0gdHJ1ZTsKIAogICAg
IHJldHVybiAocGFnZUluZGV4ICsgKGlzRmlyc3RQYWdlTGVmdCA/IDEgOiAwKSkgJSAyOwpAQCAt
Mjc2Nyw3ICsyNzY4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9TdHls
ZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFJlbmQKIHsKICAgICBpbml0RWxl
bWVudCgwKTsKICAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKDAsIHN0eWxlKTsKLSAgICBtX3N0eWxl
ID0gc3R5bGU7CisgICAgbV9zdGF0ZS5zdHlsZSA9IHN0eWxlOwogICAgIGFwcGx5UHJvcGVydHlU
b0N1cnJlbnRTdHlsZShpZCwgdmFsdWUpOwogfQogCkBAIC0yODc5LDEwICsyODgwLDEwIEBAIGlu
bGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OmlzVmFsaWRDdWVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQpCiAvLyBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5PVCBhbGxvd2VkIHRvIHNjYWxlIHdp
dGhpbiBhIHpvb21lZCBTVkcgZG9jdW1lbnQgKGxldHRlci93b3JkLXNwYWNpbmcvZm9udC1zaXpl
KS4KIGJvb2wgU3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKCkKIHsKLSAgICByZXR1cm4g
bV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCk7CisgICAgcmV0dXJuIG1fc3Rh
dGUuZWxlbWVudCAmJiBtX3N0YXRlLmVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpOwogfQogCi1zdGF0
aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSwgU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIExlbmd0aCYgd29ya2luZ0xlbmd0aCkK
K3N0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlLCBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIExlbmd0aCYg
d29ya2luZ0xlbmd0aCkKIHsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVXZWJraXRNaW5Db250ZW50KSB7CiAgICAgICAgIHdvcmtpbmdMZW5ndGggPSBMZW5n
dGgoTWluQ29udGVudCk7CkBAIC0yODk0LDcgKzI4OTUsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVH
cmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgU3R5bGVS
ZXNvbAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB3b3JraW5nTGVuZ3RoID0g
cHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwg
UGVyY2VudENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uIHwgQXV0b0Nv
bnZlcnNpb24+KHNlbGVjdG9yLT5zdHlsZSgpLCBzZWxlY3Rvci0+cm9vdEVsZW1lbnRTdHlsZSgp
LCBzZWxlY3Rvci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICB3b3JraW5nTGVuZ3Ro
ID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9u
IHwgUGVyY2VudENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uIHwgQXV0
b0NvbnZlcnNpb24+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCBz
dGF0ZS5zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICBpZiAod29ya2luZ0xlbmd0aC5pc1Vu
ZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI5MDQsMTIgKzI5MDUsMTIg
QEAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUsIFN0eWxlUmVzb2wKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGlj
IGJvb2wgY3JlYXRlR3JpZFRyYWNrTWluTWF4KENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSwgU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIEdyaWRUcmFja1NpemUmIHRyYWNrU2l6ZSkK
K3N0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja01pbk1heChDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgR3JpZFRyYWNr
U2l6ZSYgdHJhY2tTaXplKQogewogICAgIFBhaXIqIG1pbk1heFRyYWNrQnJlYWR0aCA9IHByaW1p
dGl2ZVZhbHVlLT5nZXRQYWlyVmFsdWUoKTsKICAgICBpZiAoIW1pbk1heFRyYWNrQnJlYWR0aCkg
ewogICAgICAgICBMZW5ndGggd29ya2luZ0xlbmd0aDsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlk
VHJhY2tCcmVhZHRoKHByaW1pdGl2ZVZhbHVlLCBzZWxlY3Rvciwgd29ya2luZ0xlbmd0aCkpCisg
ICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChwcmltaXRpdmVWYWx1ZSwgc3RhdGUs
IHdvcmtpbmdMZW5ndGgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHRy
YWNrU2l6ZS5zZXRMZW5ndGgod29ya2luZ0xlbmd0aCk7CkBAIC0yOTE4LDE0ICsyOTE5LDE0IEBA
IHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja01pbk1heChDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUsIFN0eWxlUmVzb2x2CiAKICAgICBMZW5ndGggbWluVHJhY2tCcmVhZHRoOwog
ICAgIExlbmd0aCBtYXhUcmFja0JyZWFkdGg7Ci0gICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tCcmVh
ZHRoKG1pbk1heFRyYWNrQnJlYWR0aC0+Zmlyc3QoKSwgc2VsZWN0b3IsIG1pblRyYWNrQnJlYWR0
aCkgfHwgIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgobWluTWF4VHJhY2tCcmVhZHRoLT5zZWNvbmQo
KSwgc2VsZWN0b3IsIG1heFRyYWNrQnJlYWR0aCkpCisgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tC
cmVhZHRoKG1pbk1heFRyYWNrQnJlYWR0aC0+Zmlyc3QoKSwgc3RhdGUsIG1pblRyYWNrQnJlYWR0
aCkgfHwgIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgobWluTWF4VHJhY2tCcmVhZHRoLT5zZWNvbmQo
KSwgc3RhdGUsIG1heFRyYWNrQnJlYWR0aCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IHRyYWNrU2l6ZS5zZXRNaW5NYXgobWluVHJhY2tCcmVhZHRoLCBtYXhUcmFja0JyZWFkdGgpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tHcm91cChD
U1NWYWx1ZSogdmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBWZWN0b3I8R3JpZFRyYWNr
U2l6ZT4mIHRyYWNrU2l6ZXMpCitzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tHcm91cChDU1NW
YWx1ZSogdmFsdWUsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgVmVjdG9yPEdy
aWRUcmFja1NpemU+JiB0cmFja1NpemVzKQogewogICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI5MzYsNyArMjkzNyw3IEBAIHN0YXRpYyBi
b29sIGNyZWF0ZUdyaWRUcmFja0dyb3VwKENTU1ZhbHVlKiB2YWx1ZSwgU3R5bGVSZXNvbHZlciog
c2VsZWN0b3IsIFZlY3RvCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgR3Jp
ZFRyYWNrU2l6ZSB0cmFja1NpemU7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTWluTWF4
KHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oY3VyclZhbHVlKSwgc2VsZWN0b3IsIHRy
YWNrU2l6ZSkpCisgICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTWluTWF4KHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4oY3VyclZhbHVlKSwgc3RhdGUsIHRyYWNrU2l6ZSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgdHJhY2tTaXplcy5hcHBlbmQodHJhY2tT
aXplKTsKQEAgLTI5NDQsNyArMjk0NSw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0dy
b3VwKENTU1ZhbHVlKiB2YWx1ZSwgU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFZlY3RvCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3QoQ1NTVmFs
dWUqIHZhbHVlLCBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6ZXMsIFN0eWxlUmVzb2x2
ZXIqIHNlbGVjdG9yKQorc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrTGlzdChDU1NWYWx1ZSog
dmFsdWUsIFZlY3RvcjxHcmlkVHJhY2tTaXplPiYgdHJhY2tTaXplcywgY29uc3QgU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlKQogewogICAgIC8vIEhhbmRsZSAnbm9uZScuCiAgICAgaWYgKHZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKQEAgLTI5NTIsNyArMjk1Myw3IEBAIHN0YXRpYyBi
b29sIGNyZWF0ZUdyaWRUcmFja0xpc3QoQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8R3JpZFRyYWNr
U2l6ZT4mIHRyYWNrU2l6CiAgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZU5vbmU7CiAgICAgfQogCi0gICAgcmV0dXJuIGNyZWF0ZUdyaWRUcmFja0dy
b3VwKHZhbHVlLCBzZWxlY3RvciwgdHJhY2tTaXplcyk7CisgICAgcmV0dXJuIGNyZWF0ZUdyaWRU
cmFja0dyb3VwKHZhbHVlLCBzdGF0ZSwgdHJhY2tTaXplcyk7CiB9CiAKIApAQCAtMzAwMCw3ICsz
MDAxLDcgQEAgc3RhdGljIGJvb2wgaGFzVmFyaWFibGVSZWZlcmVuY2UoQ1NTVmFsdWUqIHZhbHVl
KQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJsZXMoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmlu
Zz4gPiYga25vd25FeHByZXNzaW9ucykKIHsKLSAgICBzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwg
U3RyaW5nPiBleHByZXNzaW9uKGlkLCB2YWx1ZS0+c2VyaWFsaXplUmVzb2x2aW5nVmFyaWFibGVz
KCpzdHlsZSgpLT52YXJpYWJsZXMoKSkpOworICAgIHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBT
dHJpbmc+IGV4cHJlc3Npb24oaWQsIHZhbHVlLT5zZXJpYWxpemVSZXNvbHZpbmdWYXJpYWJsZXMo
Km1fc3RhdGUuc3R5bGUtPnZhcmlhYmxlcygpKSk7CiAKICAgICBpZiAoa25vd25FeHByZXNzaW9u
cy5jb250YWlucyhleHByZXNzaW9uKSkKICAgICAgICAgcmV0dXJuOyAvLyBjeWNsZSBkZXRlY3Rl
ZC4KQEAgLTMwMzIsMTkgKzMwMzMsMjAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB9CiAjZW5kaWYKIAot
ICAgIGJvb2wgaXNJbmhlcml0ID0gbV9wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZh
bHVlKCk7Ci0gICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAo
IW1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKKyAgICBTdGF0ZSYg
c3RhdGUgPSBtX3N0YXRlOworICAgIGJvb2wgaXNJbmhlcml0ID0gc3RhdGUucGFyZW50Tm9kZSAm
JiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpOworICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUt
PmlzSW5pdGlhbFZhbHVlKCkgfHwgKCFzdGF0ZS5wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVy
aXRlZFZhbHVlKCkpOwogCiAgICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgIWlzSW5pdGlhbCk7IC8v
IGlzSW5oZXJpdCAtPiAhaXNJbml0aWFsICYmIGlzSW5pdGlhbCAtPiAhaXNJbmhlcml0Ci0gICAg
QVNTRVJUKCFpc0luaGVyaXQgfHwgKG1fcGFyZW50Tm9kZSAmJiBtX3BhcmVudFN0eWxlKSk7IC8v
IGlzSW5oZXJpdCAtPiAobV9wYXJlbnROb2RlICYmIG1fcGFyZW50U3R5bGUpCisgICAgQVNTRVJU
KCFpc0luaGVyaXQgfHwgKHN0YXRlLnBhcmVudE5vZGUgJiYgc3RhdGUucGFyZW50U3R5bGUpKTsg
Ly8gaXNJbmhlcml0IC0+IChzdGF0ZS5wYXJlbnROb2RlICYmIHN0YXRlLnBhcmVudFN0eWxlKQog
Ci0gICAgaWYgKCFhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSAmJiAoIWFwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSB8fCAhaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQp
KSkgeworICAgIGlmICghc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlICYmICghc3Rh
dGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSB8fCAhaXNWYWxpZFZpc2l0ZWRMaW5r
UHJvcGVydHkoaWQpKSkgewogICAgICAgICAvLyBMaW1pdCB0aGUgcHJvcGVydGllcyB0aGF0IGNh
biBiZSBhcHBsaWVkIHRvIG9ubHkgdGhlIG9uZXMgaG9ub3JlZCBieSA6dmlzaXRlZC4KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChpc0luaGVyaXQgJiYgIW1fcGFyZW50U3R5bGUt
Pmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkgJiYgIUNTU1Byb3BlcnR5Ojppc0lu
aGVyaXRlZFByb3BlcnR5KGlkKSkKLSAgICAgICAgbV9wYXJlbnRTdHlsZS0+c2V0SGFzRXhwbGlj
aXRseUluaGVyaXRlZFByb3BlcnRpZXMoKTsKKyAgICBpZiAoaXNJbmhlcml0ICYmICFzdGF0ZS5w
YXJlbnRTdHlsZS0+aGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKSAmJiAhQ1NTUHJv
cGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQorICAgICAgICBzdGF0ZS5wYXJlbnRTdHls
ZS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKTsKIAogI2lmIEVOQUJMRShD
U1NfVkFSSUFCTEVTKQogICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eVZhcmlhYmxlKSB7CkBAIC0z
MDUyLDcgKzMwNTQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBDU1NWYXJpYWJsZVZhbHVlKiB2
YXJpYWJsZSA9IHN0YXRpY19jYXN0PENTU1ZhcmlhYmxlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAg
IEFTU0VSVCghdmFyaWFibGUtPm5hbWUoKS5pc0VtcHR5KCkpOwogICAgICAgICBBU1NFUlQoIXZh
cmlhYmxlLT52YWx1ZSgpLmlzRW1wdHkoKSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldFZhcmlhYmxl
KHZhcmlhYmxlLT5uYW1lKCksIHZhcmlhYmxlLT52YWx1ZSgpKTsKKyAgICAgICAgc3RhdGUuc3R5
bGUtPnNldFZhcmlhYmxlKHZhcmlhYmxlLT5uYW1lKCksIHZhcmlhYmxlLT52YWx1ZSgpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzA3MSw3ICszMDczLDcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKIAogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkgPyBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVl
KSA6IDA7CiAKLSAgICBmbG9hdCB6b29tRmFjdG9yID0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgp
OworICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdGF0ZS5zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwog
CiAgICAgLy8gV2hhdCBmb2xsb3dzIGlzIGEgbGlzdCB0aGF0IG1hcHMgdGhlIENTUyBwcm9wZXJ0
aWVzIGludG8gdGhlaXIgY29ycmVzcG9uZGluZyBmcm9udC1lbmQKICAgICAvLyBSZW5kZXJTdHls
ZSB2YWx1ZXMuIFNob3J0aGFuZHMgKGUuZy4gYm9yZGVyLCBiYWNrZ3JvdW5kKSBvY2N1ciBpbiB0
aGlzIGxpc3QgYXMgd2VsbCBhbmQKQEAgLTMwODUsNyArMzA4Nyw3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgICAgICAvLyBub3RlIGlzIGEgcmVtaW5kZXIgdGhhdCBldmVudHVhbGx5ICJpbmhlcml0
IiBuZWVkcyB0byBiZSBzdXBwb3J0ZWQuCiAKICAgICAgICAgICAgIGlmIChpc0luaXRpYWwpIHsK
LSAgICAgICAgICAgICAgICBtX3N0eWxlLT5jbGVhckNvbnRlbnQoKTsKKyAgICAgICAgICAgICAg
ICBzdGF0ZS5zdHlsZS0+Y2xlYXJDb250ZW50KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogCkBAIC0zMDk3LDE5ICszMDk5LDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7CiAgICAgICAgICAgICAgICAg
aWYgKGl0ZW0tPmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChpdGVtLT5pc0dyYWRpZW50VmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0
PENTU0dyYWRpZW50VmFsdWUqPihpdGVtKS0+Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhp
cykuZ2V0KCkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUt
PnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0dy
YWRpZW50VmFsdWUqPihpdGVtKS0+Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhpcykuZ2V0
KCkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShz
dGF0aWNfY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0
ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPihpdGVt
KSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAjaWYgRU5B
QkxFKENTU19JTUFHRV9TRVQpCiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc0lt
YWdlU2V0VmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50
KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENT
U0ltYWdlU2V0VmFsdWUqPihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIHN0
YXRlLnN0eWxlLT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNv
bnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPihpdGVtKSksIGRpZFNldCk7CiAg
ICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZVZhbHVlKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChjYWNoZWRPclBlbmRpbmdGcm9tVmFs
dWUoQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4oaXRlbSkp
LCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVudChj
YWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxD
U1NJbWFnZVZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRT
ZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICB9CkBAIC0zMTIwLDE3ICszMTIyLDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIGNvbnRlbnRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4oaXRlbSk7CiAKICAgICAgICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLT5pc1N0
cmluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoY29udGVu
dFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwoKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1
ZSgpLmltcGwoKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNBdHRyKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENhbiBhIG5hbWVzcGFjZSBiZSBzcGVjaWZpZWQg
Zm9yIGFuIGF0dHIoZm9vKT8KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3R5bGUtPnN0eWxl
VHlwZSgpID09IE5PUFNFVURPKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0
VW5pcXVlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZS0+c3R5bGVUeXBl
KCkgPT0gTk9QU0VVRE8pCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0
VW5pcXVlKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fcGFyZW50U3R5bGUtPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGUucGFyZW50U3R5bGUtPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgICAgICAgICBRdWFs
aWZpZWROYW1lIGF0dHIobnVsbEF0b20sIGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5p
bXBsKCksIG51bGxBdG9tKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSA9IG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0dHIpOwotICAgICAgICAgICAgICAg
ICAgICBtX3N0eWxlLT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFs
dWUuaW1wbCgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlID0gc3RhdGUuZWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0dHIpOworICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5
QXRvbSA6IHZhbHVlLmltcGwoKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgdGhlIGZhY3QgdGhhdCB0
aGUgYXR0cmlidXRlIHZhbHVlIGFmZmVjdHMgdGhlIHN0eWxlCiAgICAgICAgICAgICAgICAgICAg
IG1fZmVhdHVyZXMuYXR0cnNJblJ1bGVzLmFkZChhdHRyLmxvY2FsTmFtZSgpLmltcGwoKSk7CkBA
IC0zMTQxLDI0ICszMTQzLDI0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIGlm
IChsaXN0U3R5bGVJZGVudCAhPSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBsaXN0U3R5bGVUeXBlID0gc3RhdGljX2Nhc3Q8RUxpc3RTdHlsZVR5cGU+KGxpc3RTdHlsZUlk
ZW50IC0gQ1NTVmFsdWVEaXNjKTsKICAgICAgICAgICAgICAgICAgICAgT3duUHRyPENvdW50ZXJD
b250ZW50PiBjb3VudGVyID0gYWRvcHRQdHIobmV3IENvdW50ZXJDb250ZW50KGNvdW50ZXJWYWx1
ZS0+aWRlbnRpZmllcigpLCBsaXN0U3R5bGVUeXBlLCBjb3VudGVyVmFsdWUtPnNlcGFyYXRvcigp
KSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoY291bnRlci5yZWxl
YXNlKCksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250
ZW50KGNvdW50ZXIucmVsZWFzZSgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRT
ZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAoY29udGVudFZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVPcGVuUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRDb250ZW50KE9QRU5fUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVudChPUEVOX1FVT1RFLCBkaWRTZXQpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ2xvc2VRdW90ZToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoQ0xPU0VfUVVPVEUsIGRpZFNl
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVudChDTE9T
RV9RVU9URSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZU5vT3BlblF1b3RlOgotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0Q29udGVudChOT19PUEVOX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0KTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ2xvc2VRdW90ZToK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoTk9fQ0xPU0VfUVVP
VEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29u
dGVudChOT19DTE9TRV9RVU9URSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRp
ZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKQEAgLTMxNjgsMTYgKzMxNzAsMTYgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIWRpZFNldCkK
LSAgICAgICAgICAgICAgICBtX3N0eWxlLT5jbGVhckNvbnRlbnQoKTsKKyAgICAgICAgICAgICAg
ICBzdGF0ZS5zdHlsZS0+Y2xlYXJDb250ZW50KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5UXVvdGVzOgogICAgICAgICBpZiAoaXNJbmhlcml0
KSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90ZXMobV9wYXJlbnRTdHlsZS0+cXVvdGVz
KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFF1b3RlcyhzdGF0ZS5wYXJlbnRTdHls
ZS0+cXVvdGVzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlm
IChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcygwKTsKKyAgICAg
ICAgICAgIHN0YXRlLnN0eWxlLT5zZXRRdW90ZXMoMCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CkBAIC0zMTk1LDE5
ICszMTk3LDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgU3RyaW5nIGVuZFF1b3Rl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihzZWNvbmQpLT5nZXRTdHJpbmdWYWx1
ZSgpOwogICAgICAgICAgICAgICAgIHF1b3Rlcy0+YWRkUGFpcihzdGQ6Om1ha2VfcGFpcihzdGFy
dFF1b3RlLCBlbmRRdW90ZSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9zdHlsZS0+
c2V0UXVvdGVzKHF1b3Rlcyk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0UXVvdGVzKHF1
b3Rlcyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlKSB7CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhRdW90
ZXNEYXRhOjpjcmVhdGUoKSk7CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFF1b3Rl
cyhRdW90ZXNEYXRhOjpjcmVhdGUoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgQ1NTUHJvcGVydHlGb250RmFtaWx5OiB7CiAgICAgICAgIC8vIGxpc3Qgb2Ygc3RyaW5n
cyBhbmQgaWRzCiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIEZvbnREZXNj
cmlwdGlvbiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBtX3BhcmVudFN0eWxlLT5mb250RGVzY3Jp
cHRpb24oKTsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBt
X3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBw
YXJlbnRGb250RGVzY3JpcHRpb24gPSBzdGF0ZS5wYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9u
KCk7CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUu
c3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dEdlbmVyaWNGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSk7CiAg
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KHBhcmVudEZvbnREZXNjcmlwdGlv
bi5maXJzdEZhbWlseSgpKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNp
ZmllZEZvbnQocGFyZW50Rm9udERlc2NyaXB0aW9uLmlzU3BlY2lmaWVkRm9udCgpKTsKQEAgLTMy
MTcsNyArMzIxOSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAKICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewog
ICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGluaXRpYWxEZXNjID0gRm9udERlc2NyaXB0aW9u
KCk7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHls
ZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAg
Ly8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIHNpemUgdG8gYWNjb3VudCBmb3IgdGhlIGdlbmVyaWMg
ZmFtaWx5IGNoYW5nZSBmcm9tIG1vbm9zcGFjZQogICAgICAgICAgICAgLy8gdG8gbm9uLW1vbm9z
cGFjZS4KICAgICAgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBm
b250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKQpAQCAtMzIzMSw3ICszMjMzLDcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSkKIAogICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBm
b250RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAg
IEZvbnRGYW1pbHkmIGZpcnN0RmFtaWx5ID0gZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7
CiAgICAgICAgIEZvbnRGYW1pbHkqIGN1cnJGYW1pbHkgPSAwOwogCkBAIC0zMzA5LDI0ICszMzEx
LDI0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCiAvLyBzaG9ydGhhbmQgcHJvcGVydGllcwogICAgIGNhc2UgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kOgogICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAg
ICBtX3N0eWxlLT5jbGVhckJhY2tncm91bmRMYXllcnMoKTsKLSAgICAgICAgICAgIG1fc3R5bGUt
PnNldEJhY2tncm91bmRDb2xvcihDb2xvcigpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5j
bGVhckJhY2tncm91bmRMYXllcnMoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRCYWNr
Z3JvdW5kQ29sb3IoQ29sb3IoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbmhlcml0KSB7Ci0g
ICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0QmFja2dyb3VuZExheWVycygqbV9wYXJlbnRTdHls
ZS0+YmFja2dyb3VuZExheWVycygpKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJhY2tncm91
bmRDb2xvcihtX3BhcmVudFN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgICAgICAgICBz
dGF0ZS5zdHlsZS0+aW5oZXJpdEJhY2tncm91bmRMYXllcnMoKnN0YXRlLnBhcmVudFN0eWxlLT5i
YWNrZ3JvdW5kTGF5ZXJzKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldEJhY2tncm91
bmRDb2xvcihzdGF0ZS5wYXJlbnRTdHlsZS0+YmFja2dyb3VuZENvbG9yKCkpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFzazoKICAgICAg
ICAgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyTWFza0xheWVycygp
OworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPmNsZWFyTWFza0xheWVycygpOwogICAgICAgICBl
bHNlIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0TWFza0xheWVy
cygqbV9wYXJlbnRTdHlsZS0+bWFza0xheWVycygpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxl
LT5pbmhlcml0TWFza0xheWVycygqc3RhdGUucGFyZW50U3R5bGUtPm1hc2tMYXllcnMoKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udDoKICAgICAgICAgaWYgKGlz
SW5oZXJpdCkgewotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9
IG1fcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgbV9zdHlsZS0+
c2V0TGluZUhlaWdodChtX3BhcmVudFN0eWxlLT5zcGVjaWZpZWRMaW5lSGVpZ2h0KCkpOwotICAg
ICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOworICAgICAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnBhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24o
KTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRMaW5lSGVpZ2h0KHN0YXRlLnBhcmVudFN0
eWxlLT5zcGVjaWZpZWRMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgc3RhdGUubGluZUhlaWdo
dFZhbHVlID0gMDsKICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkgewogICAgICAgICAgICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpOwpAQCAtMzMzNSw4ICszMzM3LDggQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBpbml0aWFs
aXplRm9udFN0eWxlKHNldHRpbmdzKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZSkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5p
dGlhbExpbmVIZWlnaHQoKSk7Ci0gICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7Cisg
ICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlh
bExpbmVIZWlnaHQoKSk7CisgICAgICAgICAgICBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSAwOwog
CiAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgICAgICAg
ICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Gb250KHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpLCBmb250RGVzY3JpcHRpb24pOwpAQCAtMzM1Miw3ICszMzU0LDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZv
bnQoZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSB8fCAhc2V0dGluZ3MtPnNjcmVlbkZvbnRTdWJzdGl0
dXRpb25FbmFibGVkKCkpOwogCiAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSB6b29tIGZh
Y3Rvci4KLSAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdl
dENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50KCksIG1fc3R5bGUuZ2V0KCks
IGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lm
aWVkU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSkpOworICAgICAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUo
ZG9jdW1lbnQoKSwgc3RhdGUuc3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRl
U2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMo
KSkpOwogICAgICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ZvbnRWYWx1ZSgp
KSB7CkBAIC0zMzcwLDcgKzMzNzIsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgdXBkYXRl
Rm9udCgpOwogICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBm
b250LT5zaXplLmdldCgpKTsKIAotICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSBmb250
LT5saW5lSGVpZ2h0LmdldCgpOworICAgICAgICAgICAgc3RhdGUubGluZUhlaWdodFZhbHVlID0g
Zm9udC0+bGluZUhlaWdodC5nZXQoKTsKIAogICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUZvbnRGYW1pbHksIGZvbnQtPmZhbWlseS5nZXQoKSk7CiAgICAgICAgIH0KQEAgLTMz
ODIsMTEgKzMzODQsMTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm94U2hhZG93OiB7CiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKICAgICAgICAgICAgIGlmIChp
ZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fc3R5
bGUtPnNldFRleHRTaGFkb3cobV9wYXJlbnRTdHlsZS0+dGV4dFNoYWRvdygpID8gYWRvcHRQdHIo
bmV3IFNoYWRvd0RhdGEoKm1fcGFyZW50U3R5bGUtPnRleHRTaGFkb3coKSkpIDogbnVsbHB0cik7
Ci0gICAgICAgICAgICByZXR1cm4gbV9zdHlsZS0+c2V0Qm94U2hhZG93KG1fcGFyZW50U3R5bGUt
PmJveFNoYWRvdygpID8gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoKm1fcGFyZW50U3R5bGUtPmJv
eFNoYWRvdygpKSkgOiBudWxscHRyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuc3R5
bGUtPnNldFRleHRTaGFkb3coc3RhdGUucGFyZW50U3R5bGUtPnRleHRTaGFkb3coKSA/IGFkb3B0
UHRyKG5ldyBTaGFkb3dEYXRhKCpzdGF0ZS5wYXJlbnRTdHlsZS0+dGV4dFNoYWRvdygpKSkgOiBu
dWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZS5zdHlsZS0+c2V0Qm94U2hhZG93KHN0
YXRlLnBhcmVudFN0eWxlLT5ib3hTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCpz
dGF0ZS5wYXJlbnRTdHlsZS0+Ym94U2hhZG93KCkpKSA6IG51bGxwdHIpOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChpc0luaXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUpIC8vIGluaXRpYWwgfCBub25l
Ci0gICAgICAgICAgICByZXR1cm4gaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93ID8gbV9zdHls
ZS0+c2V0VGV4dFNoYWRvdyhudWxscHRyKSA6IG1fc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRy
KTsKKyAgICAgICAgICAgIHJldHVybiBpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cgPyBzdGF0
ZS5zdHlsZS0+c2V0VGV4dFNoYWRvdyhudWxscHRyKSA6IHN0YXRlLnN0eWxlLT5zZXRCb3hTaGFk
b3cobnVsbHB0cik7CiAKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTMzOTYsMjkgKzMzOTgsMjkgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAg
ICAgICAgIGlmICghY3VyclZhbHVlLT5pc1NoYWRvd1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNo
YWRvd1ZhbHVlKj4oY3VyclZhbHVlKTsKLSAgICAgICAgICAgIGludCB4ID0gaXRlbS0+eC0+Y29t
cHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7
Ci0gICAgICAgICAgICBpbnQgeSA9IGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgp
LCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAgICAgaW50IGJsdXIg
PSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1f
cm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikgOiAwOwotICAgICAgICAgICAgaW50IHNwcmVh
ZCA9IGl0ZW0tPnNwcmVhZCA/IGl0ZW0tPnNwcmVhZC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxl
KCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikgOiAwOworICAgICAgICAgICAgaW50
IHggPSBpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRl
LnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgaW50IHkgPSBpdGVt
LT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVt
ZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVy
ID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0
ZS5yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7CisgICAgICAgICAgICBpbnQgc3By
ZWFkID0gaXRlbS0+c3ByZWFkID8gaXRlbS0+c3ByZWFkLT5jb21wdXRlTGVuZ3RoPGludD4oc3Rh
dGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpIDogMDsK
ICAgICAgICAgICAgIFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxlID0gaXRlbS0+c3R5bGUgJiYgaXRl
bS0+c3R5bGUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnNldCA/IEluc2V0IDogTm9ybWFsOwog
ICAgICAgICAgICAgQ29sb3IgY29sb3I7CiAgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCiAg
ICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xv
ci5nZXQoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChtX3N0eWxlKQotICAgICAgICAgICAgICAg
IGNvbG9yID0gbV9zdHlsZS0+Y29sb3IoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlLnN0
eWxlKQorICAgICAgICAgICAgICAgIGNvbG9yID0gc3RhdGUuc3R5bGUtPmNvbG9yKCk7CiAKICAg
ICAgICAgICAgIE93blB0cjxTaGFkb3dEYXRhPiBzaGFkb3dEYXRhID0gYWRvcHRQdHIobmV3IFNo
YWRvd0RhdGEoSW50UG9pbnQoeCwgeSksIGJsdXIsIHNwcmVhZCwgc2hhZG93U3R5bGUsIGlkID09
IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IENv
bG9yOjp0cmFuc3BhcmVudCkpOwogICAgICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5VGV4
dFNoYWRvdykKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRUZXh0U2hhZG93KHNoYWRvd0Rh
dGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBu
b3QgdGhlIGZpcnN0IGVudHJ5CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFRleHRT
aGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlz
dCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3hTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGku
aW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50
cnkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEu
cmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3Qg
dGhlIGZpcnN0IGVudHJ5CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewogICAgICAgICBIQU5ETEVfSU5IRVJJ
VF9BTkRfSU5JVElBTChib3hSZWZsZWN0LCBCb3hSZWZsZWN0KQogICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJveFJlZmxlY3QoUmVuZGVyU3R5
bGU6OmluaXRpYWxCb3hSZWZsZWN0KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldEJv
eFJlZmxlY3QoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3hSZWZsZWN0KCkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM0MjksMTMgKzM0MzEsMTMgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICAgICAgUmVmUHRyPFN0eWxlUmVmbGVjdGlvbj4gcmVmbGVjdGlvbiA9IFN0eWxlUmVmbGVj
dGlvbjo6Y3JlYXRlKCk7CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldERpcmVjdGlvbigqcmVmbGVj
dFZhbHVlLT5kaXJlY3Rpb24oKSk7CiAgICAgICAgIGlmIChyZWZsZWN0VmFsdWUtPm9mZnNldCgp
KQotICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RWYWx1ZS0+b2Zmc2V0
KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZl
cnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxl
LCB6b29tRmFjdG9yKSk7CisgICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVj
dFZhbHVlLT5vZmZzZXQoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24g
fCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdGF0ZS5zdHlsZS5n
ZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikpOwogICAgICAgICBOaW5l
UGllY2VJbWFnZSBtYXNrOwogICAgICAgICBtYXNrLnNldE1hc2tEZWZhdWx0cygpOwogICAgICAg
ICBtX3N0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUtPm1hc2soKSwg
bWFzayk7CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2sobWFzayk7CiAKLSAgICAgICAgbV9z
dHlsZS0+c2V0Qm94UmVmbGVjdChyZWZsZWN0aW9uLnJlbGVhc2UoKSk7CisgICAgICAgIHN0YXRl
LnN0eWxlLT5zZXRCb3hSZWZsZWN0KHJlZmxlY3Rpb24ucmVsZWFzZSgpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5U3JjOiAvLyBPbmx5IHVzZWQgaW4gQGZv
bnQtZmFjZSBydWxlcy4KQEAgLTM0NDQsMjkgKzM0NDYsMjkgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlOgogICAgICAg
ICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRDb2x1bW5SdWxlQ29s
b3IobV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkuaXNWYWxpZCgpID8gbV9wYXJlbnRT
dHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkgOiBtX3BhcmVudFN0eWxlLT5jb2xvcigpKTsKLSAgICAg
ICAgICAgIG1fc3R5bGUtPnNldENvbHVtblJ1bGVTdHlsZShtX3BhcmVudFN0eWxlLT5jb2x1bW5S
dWxlU3R5bGUoKSk7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRDb2x1bW5SdWxlV2lkdGgobV9w
YXJlbnRTdHlsZS0+Y29sdW1uUnVsZVdpZHRoKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUt
PnNldENvbHVtblJ1bGVDb2xvcihzdGF0ZS5wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCku
aXNWYWxpZCgpID8gc3RhdGUucGFyZW50U3R5bGUtPmNvbHVtblJ1bGVDb2xvcigpIDogc3RhdGUu
cGFyZW50U3R5bGUtPmNvbG9yKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbHVt
blJ1bGVTdHlsZShzdGF0ZS5wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZVN0eWxlKCkpOworICAgICAg
ICAgICAgc3RhdGUuc3R5bGUtPnNldENvbHVtblJ1bGVXaWR0aChzdGF0ZS5wYXJlbnRTdHlsZS0+
Y29sdW1uUnVsZVdpZHRoKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkKLSAgICAg
ICAgICAgIG1fc3R5bGUtPnJlc2V0Q29sdW1uUnVsZSgpOworICAgICAgICAgICAgc3RhdGUuc3R5
bGUtPnJlc2V0Q29sdW1uUnVsZSgpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hcnF1ZWU6CiAgICAgICAgIGlmICghaXNJbmhlcml0KQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlRGlyZWN0aW9uKG1fcGFyZW50U3R5
bGUtPm1hcnF1ZWVEaXJlY3Rpb24oKSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNy
ZW1lbnQobV9wYXJlbnRTdHlsZS0+bWFycXVlZUluY3JlbWVudCgpKTsKLSAgICAgICAgbV9zdHls
ZS0+c2V0TWFycXVlZVNwZWVkKG1fcGFyZW50U3R5bGUtPm1hcnF1ZWVTcGVlZCgpKTsKLSAgICAg
ICAgbV9zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudChtX3BhcmVudFN0eWxlLT5tYXJxdWVlTG9v
cENvdW50KCkpOwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlQmVoYXZpb3IobV9wYXJlbnRT
dHlsZS0+bWFycXVlZUJlaGF2aW9yKCkpOworICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVl
ZURpcmVjdGlvbihzdGF0ZS5wYXJlbnRTdHlsZS0+bWFycXVlZURpcmVjdGlvbigpKTsKKyAgICAg
ICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoc3RhdGUucGFyZW50U3R5bGUtPm1h
cnF1ZWVJbmNyZW1lbnQoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlU3BlZWQo
c3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVTcGVlZCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUt
PnNldE1hcnF1ZWVMb29wQ291bnQoc3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVMb29wQ291bnQo
KSk7CisgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlQmVoYXZpb3Ioc3RhdGUucGFyZW50
U3R5bGUtPm1hcnF1ZWVCZWhhdmlvcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRNYXJxdWVlUmVwZXRpdGlvbjogewogICAgICAgICBIQU5ETEVfSU5IRVJJ
VF9BTkRfSU5JVElBTChtYXJxdWVlTG9vcENvdW50LCBNYXJxdWVlTG9vcENvdW50KQogICAgICAg
ICBpZiAoIXByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKLSAgICAgICAg
ICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQoLTEpOyAvLyAtMSBtZWFucyByZXBlYXQg
Zm9yZXZlci4KKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KC0x
KTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2
ZVZhbHVlLT5pc051bWJlcigpKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxvb3BD
b3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAgICAgICAgICBzdGF0ZS5z
dHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1
ZWVTcGVlZDogewpAQCAtMzQ3NiwxOSArMzQ3OCwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBp
ZiAoaW50IGlkZW50ID0gcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAg
IHN3aXRjaCAoaWRlbnQpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbG93OgotICAgICAg
ICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCg1MDApOyAvLyA1MDAgbXNlYy4KKyAg
ICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZVNwZWVkKDUwMCk7IC8vIDUwMCBt
c2VjLgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5v
cm1hbDoKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoODUpOyAvLyA4
NW1zZWMuIFRoZSBXaW5JRSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5z
ZXRNYXJxdWVlU3BlZWQoODUpOyAvLyA4NW1zZWMuIFRoZSBXaW5JRSBkZWZhdWx0LgogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhc3Q6Ci0gICAgICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKDEwKTsgLy8gMTBtc2VjLiBTdXBlciBm
YXN0LgorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlU3BlZWQoMTApOyAv
LyAxMG1zZWMuIFN1cGVyIGZhc3QuCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVGltZSgpKQotICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGlt
ZTxpbnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpNaWxsaXNlY29uZHM+KCkpOworICAgICAgICAgICAg
c3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZVRpbWU8
aW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6TWlsbGlzZWNvbmRzPigpKTsKICAgICAgICAgZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIC8vIEZvciBzY3JvbGxhbW91bnQgc3VwcG9y
dC4KLSAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+
Z2V0SW50VmFsdWUoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZVNwZWVk
KHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZUluY3JlbWVudDogewpAQCAtMzQ5OCwx
OSArMzUwMCwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoKLSAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgxLCBGaXhlZCkpOyAvLyAxcHguCisg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDEs
IEZpeGVkKSk7IC8vIDFweC4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUlu
Y3JlbWVudChMZW5ndGgoNiwgRml4ZWQpKTsgLy8gNnB4LiBUaGUgV2luSUUgZGVmYXVsdC4KKyAg
ICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoNiwg
Rml4ZWQpKTsgLy8gNnB4LiBUaGUgV2luSUUgZGVmYXVsdC4KICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMYXJnZToKLSAgICAgICAgICAgICAgICBtX3N0
eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgzNiwgRml4ZWQpKTsgLy8gMzZweC4KKyAg
ICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYs
IEZpeGVkKSk7IC8vIDM2cHguCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMZW5ndGggbWFycXVlZUxlbmd0aCA9IGNv
bnZlcnRUb0ludExlbmd0aChwcmltaXRpdmVWYWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0
eWxlKTsKKyAgICAgICAgICAgIExlbmd0aCBtYXJxdWVlTGVuZ3RoID0gY29udmVydFRvSW50TGVu
Z3RoKHByaW1pdGl2ZVZhbHVlLCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRT
dHlsZSk7CiAgICAgICAgICAgICBpZiAoIW1hcnF1ZWVMZW5ndGguaXNVbmRlZmluZWQoKSkKLSAg
ICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KG1hcnF1ZWVMZW5ndGgp
OworICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KG1hcnF1
ZWVMZW5ndGgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNTE5LDEx
ICszNTIxLDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRMb2NhbGUobnVsbEF0
b20pOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldExvY2FsZShudWxsQXRvbSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldExvY2FsZShwcmltaXRpdmVWYWx1ZS0+
Z2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldFNjcmlwdChsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKG1fc3R5bGUtPmxv
Y2FsZSgpKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TG9jYWxlKHByaW1pdGl2ZVZh
bHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbiA9IHN0YXRlLnN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldFNjcmlwdChsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKHN0
YXRlLnN0eWxlLT5sb2NhbGUoKSkpOwogICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERl
c2NyaXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM1NDIsNyArMzU0NCw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAgbV9zdHls
ZS0+c2V0RGFzaGJvYXJkUmVnaW9ucyhSZW5kZXJTdHlsZTo6bm9uZURhc2hib2FyZFJlZ2lvbnMo
KSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9ucyhSZW5kZXJT
dHlsZTo6bm9uZURhc2hib2FyZFJlZ2lvbnMoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIApAQCAtMzU1MiwxMCArMzU1NCwxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogCiAgICAgICAgIERh
c2hib2FyZFJlZ2lvbiogZmlyc3QgPSByZWdpb247CiAgICAgICAgIHdoaWxlIChyZWdpb24pIHsK
LSAgICAgICAgICAgIExlbmd0aCB0b3AgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT50b3Ao
KSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKLSAgICAgICAgICAgIExlbmd0aCByaWdo
dCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPnJpZ2h0KCksIHN0eWxlKCksIG1fcm9vdEVs
ZW1lbnRTdHlsZSk7Ci0gICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29udmVydFRvSW50TGVu
Z3RoKHJlZ2lvbi0+Ym90dG9tKCksIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAg
ICAgICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmxlZnQoKSwg
c3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKKyAgICAgICAgICAgIExlbmd0aCB0b3AgPSBj
b252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT50b3AoKSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRl
LnJvb3RFbGVtZW50U3R5bGUpOworICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVydFRv
SW50TGVuZ3RoKHJlZ2lvbi0+cmlnaHQoKSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RF
bGVtZW50U3R5bGUpOworICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0ludExl
bmd0aChyZWdpb24tPmJvdHRvbSgpLCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1l
bnRTdHlsZSk7CisgICAgICAgICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRUb0ludExlbmd0aChy
ZWdpb24tPmxlZnQoKSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUp
OwogCiAgICAgICAgICAgICBpZiAodG9wLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICAgICAg
dG9wID0gTGVuZ3RoKCk7CkBAIC0zNTY3LDEzICszNTY5LDEzIEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgICAgICAgICAgbGVmdCA9IExlbmd0aCgpOwogCiAgICAgICAgICAgICBpZiAocmVnaW9uLT5t
X2lzQ2lyY2xlKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbihT
dHlsZURhc2hib2FyZFJlZ2lvbjo6Q2lyY2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQs
IGJvdHRvbSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKKyAgICAgICAg
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVn
aW9uOjpDaXJjbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBy
ZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwogICAgICAgICAgICAgZWxzZSBpZiAocmVn
aW9uLT5tX2lzUmVjdGFuZ2xlKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hib2Fy
ZFJlZ2lvbihTdHlsZURhc2hib2FyZFJlZ2lvbjo6UmVjdGFuZ2xlLCByZWdpb24tPm1fbGFiZWws
IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVl
KTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxl
RGFzaGJvYXJkUmVnaW9uOjpSZWN0YW5nbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwg
Ym90dG9tLCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwogICAgICAgICAg
ICAgcmVnaW9uID0gcmVnaW9uLT5tX25leHQuZ2V0KCk7CiAgICAgICAgIH0KIAotICAgICAgICBt
X2VsZW1lbnQtPmRvY3VtZW50KCktPnNldEhhc0Fubm90YXRlZFJlZ2lvbnModHJ1ZSk7CisgICAg
ICAgIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPnNldEhhc0Fubm90YXRlZFJlZ2lvbnModHJ1
ZSk7CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM1ODIsOCArMzU4NCw4IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFwcFJlZ2lvbjogewogICAgICAgICBp
ZiAoIXByaW1pdGl2ZVZhbHVlIHx8ICFwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0RHJhZ2dhYmxlUmVnaW9uTW9kZShw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZURyYWcgPyBEcmFnZ2FibGVSZWdp
b25EcmFnIDogRHJhZ2dhYmxlUmVnaW9uTm9EcmFnKTsKLSAgICAgICAgbV9lbGVtZW50LT5kb2N1
bWVudCgpLT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOworICAgICAgICBzdGF0ZS5zdHls
ZS0+c2V0RHJhZ2dhYmxlUmVnaW9uTW9kZShwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBD
U1NWYWx1ZURyYWcgPyBEcmFnZ2FibGVSZWdpb25EcmFnIDogRHJhZ2dhYmxlUmVnaW9uTm9EcmFn
KTsKKyAgICAgICAgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0SGFzQW5ub3RhdGVkUmVn
aW9ucyh0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzU5OSwyMSAr
MzYwMSwyMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIHJlc3VsdCAqPSAzOwogICAg
ICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVU
aGljaykKICAgICAgICAgICAgICAgICByZXN1bHQgKj0gNTsKLSAgICAgICAgICAgIHdpZHRoID0g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
RU1TKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6
b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0aDxmbG9h
dD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3Ip
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHdpZHRoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxl
KCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICB3aWR0aCA9
IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHlsZS5nZXQoKSwg
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotICAgICAgICBtX3N0eWxlLT5zZXRUZXh0U3Ryb2tlV2lkdGgod2lkdGgpOwor
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VGV4dFN0cm9rZVdpZHRoKHdpZHRoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtOiB7CiAg
ICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRyYW5zZm9ybSwgVHJhbnNmb3JtKTsK
ICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgICAgICBjcmVhdGVU
cmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIG9w
ZXJhdGlvbnMpOwotICAgICAgICBtX3N0eWxlLT5zZXRUcmFuc2Zvcm0ob3BlcmF0aW9ucyk7Cisg
ICAgICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWUsIHN0YXRlLnN0eWxlLmdldCgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKTsKKyAgICAgICAgc3RhdGUuc3R5
bGUtPnNldFRyYW5zZm9ybShvcGVyYXRpb25zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGVyc3BlY3RpdmU6IHsKQEAgLTM2MjMsMzQgKzM2MjUs
MzQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAgICBt
X3N0eWxlLT5zZXRQZXJzcGVjdGl2ZSgwKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRQ
ZXJzcGVjdGl2ZSgwKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAg
IGZsb2F0IHBlcnNwZWN0aXZlVmFsdWU7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNM
ZW5ndGgoKSkKLSAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+
Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFj
dG9yKTsKKyAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+Y29t
cHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5
bGUsIHpvb21GYWN0b3IpOwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1i
ZXIoKSkgewogICAgICAgICAgICAgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRyZWF0
IHZhbHVlbGVzcyBudW1iZXJzIGFzIHB4LgotICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVl
KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHls
ZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgcGVyc3Bl
Y3RpdmVWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJpbWl0aXZlVmFsdWUtPmdl
dERvdWJsZVZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpLT5jb21wdXRlTGVuZ3Ro
PGZsb2F0PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgem9vbUZh
Y3Rvcik7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlm
IChwZXJzcGVjdGl2ZVZhbHVlID49IDAuMGYpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRQZXJz
cGVjdGl2ZShwZXJzcGVjdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRQ
ZXJzcGVjdGl2ZShwZXJzcGVjdGl2ZVZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uOgogICAgICAgICBpZiAoaXNJbml0aWFs
KQotICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJBbmltYXRpb25zKCk7CisgICAgICAgICAgICBz
dGF0ZS5zdHlsZS0+Y2xlYXJBbmltYXRpb25zKCk7CiAgICAgICAgIGVsc2UgaWYgKGlzSW5oZXJp
dCkKLSAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRBbmltYXRpb25zKG1fcGFyZW50U3R5bGUt
PmFuaW1hdGlvbnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+aW5oZXJpdEFuaW1hdGlv
bnMoc3RhdGUucGFyZW50U3R5bGUtPmFuaW1hdGlvbnMoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbjoKICAgICAgICAgaWYgKGlzSW5pdGlh
bCkKLSAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyVHJhbnNpdGlvbnMoKTsKKyAgICAgICAgICAg
IHN0YXRlLnN0eWxlLT5jbGVhclRyYW5zaXRpb25zKCk7CiAgICAgICAgIGVsc2UgaWYgKGlzSW5o
ZXJpdCkKLSAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRUcmFuc2l0aW9ucyhtX3BhcmVudFN0
eWxlLT50cmFuc2l0aW9ucygpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5pbmhlcml0VHJh
bnNpdGlvbnMoc3RhdGUucGFyZW50U3R5bGUtPnRyYW5zaXRpb25zKCkpOwogICAgICAgICByZXR1
cm47CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VGFwSGlnaGxpZ2h0Q29sb3I6IHsKQEAgLTM2NTksNyArMzY2MSw3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgICAgICBicmVhazsKIAogICAgICAgICBDb2xvciBjb2wgPSBjb2xvckZyb21QcmltaXRp
dmVWYWx1ZShwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldFRhcEhpZ2hsaWdo
dENvbG9yKGNvbCk7CisgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRUYXBIaWdobGlnaHRDb2xvcihj
b2wpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zNjY4LDcgKzM2NzAsNyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh1c2VUb3Vj
aE92ZXJmbG93U2Nyb2xsaW5nLCBVc2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKTsKICAgICAgICAg
aWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBtX3N0eWxl
LT5zZXRVc2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlVG91Y2gpOworICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VXNlVG91Y2hPdmVy
Zmxvd1Njcm9sbGluZyhwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVRvdWNo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzcxMSw3ICszNzEzLDcgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWF4TG9naWNhbFdpZHRoOgog
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dpY2FsSGVpZ2h0OgogICAgIHsKLSAgICAg
ICAgQ1NTUHJvcGVydHlJRCBuZXdJZCA9IENTU1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdh
cmVQcm9wZXJ0eShpZCwgbV9zdHlsZS0+ZGlyZWN0aW9uKCksIG1fc3R5bGUtPndyaXRpbmdNb2Rl
KCkpOworICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVE
aXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBzdGF0ZS5zdHlsZS0+ZGlyZWN0aW9uKCksIHN0YXRl
LnN0eWxlLT53cml0aW5nTW9kZSgpKTsKICAgICAgICAgQVNTRVJUKG5ld0lkICE9IGlkKTsKICAg
ICAgICAgcmV0dXJuIGFwcGx5UHJvcGVydHkobmV3SWQsIHZhbHVlKTsKICAgICB9CkBAIC0zNzQ2
LDkgKzM3NDgsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgc2V0V3JpdGluZ01vZGUoKnBy
aW1pdGl2ZVZhbHVlKTsKIAogICAgICAgICAvLyBGSVhNRTogSXQgaXMgbm90IG9rIHRvIG1vZGlm
eSBkb2N1bWVudCBzdGF0ZSB3aGlsZSBhcHBseWluZyBzdHlsZS4KLSAgICAgICAgaWYgKG1fZWxl
bWVudCAmJiBtX2VsZW1lbnQgPT0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1l
bnQoKSkKLSAgICAgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVT
ZXRPbkRvY3VtZW50RWxlbWVudCh0cnVlKTsKLQorICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCAm
JiBzdGF0ZS5lbGVtZW50ID09IHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxl
bWVudCgpKQorICAgICAgICAgICAgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0V3JpdGlu
Z01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCh0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMzc2NCw3ICszNzY1LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TGluZUJveENvbnRhaW46IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJ
QUwobGluZUJveENvbnRhaW4sIExpbmVCb3hDb250YWluKQogICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0g
ICAgICAgICAgICBtX3N0eWxlLT5zZXRMaW5lQm94Q29udGFpbihMaW5lQm94Q29udGFpbk5vbmUp
OworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldExpbmVCb3hDb250YWluKExpbmVCb3hDb250
YWluTm9uZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzc3MiwyMSAr
Mzc3MywyMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIENT
U0xpbmVCb3hDb250YWluVmFsdWUqIGxpbmVCb3hDb250YWluVmFsdWUgPSBzdGF0aWNfY2FzdDxD
U1NMaW5lQm94Q29udGFpblZhbHVlKj4odmFsdWUpOwotICAgICAgICBtX3N0eWxlLT5zZXRMaW5l
Qm94Q29udGFpbihsaW5lQm94Q29udGFpblZhbHVlLT52YWx1ZSgpKTsKKyAgICAgICAgc3RhdGUu
c3R5bGUtPnNldExpbmVCb3hDb250YWluKGxpbmVCb3hDb250YWluVmFsdWUtPnZhbHVlKCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gQ1NTIEZvbnRzIE1vZHVsZSBMZXZlbCAz
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRGZWF0dXJlU2V0dGluZ3M6IHsKICAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENT
U1ZhbHVlTm9ybWFsKSB7Ci0gICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24obV9zdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCkubWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygpKTsKKyAgICAgICAg
ICAgIHNldEZvbnREZXNjcmlwdGlvbihzdGF0ZS5zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkubWFr
ZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCiAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUt
PmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICBDU1NWYWx1ZUxp
c3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CiAgICAgICAgIFJl
ZlB0cjxGb250RmVhdHVyZVNldHRpbmdzPiBzZXR0aW5ncyA9IEZvbnRGZWF0dXJlU2V0dGluZ3M6
OmNyZWF0ZSgpOwogICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7CkBAIC0zODA2LDIz
ICszODA3LDIzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZpbHRl
cjogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChmaWx0ZXIsIEZpbHRlcik7
CiAgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICAgICAgaWYgKGNyZWF0
ZUZpbHRlck9wZXJhdGlvbnModmFsdWUsIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgb3Bl
cmF0aW9ucykpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRGaWx0ZXIob3BlcmF0aW9ucyk7Cisg
ICAgICAgIGlmIChjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKHZhbHVlLCBzdGF0ZS5zdHlsZS5nZXQo
KSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgb3BlcmF0aW9ucykpCisgICAgICAgICAgICBzdGF0
ZS5zdHlsZS0+c2V0RmlsdGVyKG9wZXJhdGlvbnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
I2VuZGlmCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRDb2x1bW5zOiB7CiAgICAgICAg
IFZlY3RvcjxHcmlkVHJhY2tTaXplPiB0cmFja1NpemVzOwotICAgICAgICBpZiAoIWNyZWF0ZUdy
aWRUcmFja0xpc3QodmFsdWUsIHRyYWNrU2l6ZXMsIHRoaXMpKQorICAgICAgICBpZiAoIWNyZWF0
ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRyYWNrU2l6ZXMsIHN0YXRlKSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0R3JpZENvbHVtbnModHJhY2tTaXplcyk7CisgICAg
ICAgIHN0YXRlLnN0eWxlLT5zZXRHcmlkQ29sdW1ucyh0cmFja1NpemVzKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZFJvd3M6IHsKICAgICAg
ICAgVmVjdG9yPEdyaWRUcmFja1NpemU+IHRyYWNrU2l6ZXM7Ci0gICAgICAgIGlmICghY3JlYXRl
R3JpZFRyYWNrTGlzdCh2YWx1ZSwgdHJhY2tTaXplcywgdGhpcykpCisgICAgICAgIGlmICghY3Jl
YXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwgdHJhY2tTaXplcywgc3RhdGUpKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRHcmlkUm93cyh0cmFja1NpemVzKTsKKyAgICAg
ICAgc3RhdGUuc3R5bGUtPnNldEdyaWRSb3dzKHRyYWNrU2l6ZXMpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC0zODMwLDE0ICszODMxLDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIEdy
aWRQb3NpdGlvbiBjb2x1bW47CiAgICAgICAgIGlmICghY3JlYXRlR3JpZFBvc2l0aW9uKHZhbHVl
LCBjb2x1bW4pKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRHcmlk
SXRlbUNvbHVtbihjb2x1bW4pOworICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0R3JpZEl0ZW1Db2x1
bW4oY29sdW1uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0R3JpZFJvdzogewogICAgICAgICBHcmlkUG9zaXRpb24gcm93OwogICAgICAgICBpZiAo
IWNyZWF0ZUdyaWRQb3NpdGlvbih2YWx1ZSwgcm93KSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgbV9zdHlsZS0+c2V0R3JpZEl0ZW1Sb3cocm93KTsKKyAgICAgICAgc3RhdGUuc3R5bGUt
PnNldEdyaWRJdGVtUm93KHJvdyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gVGhl
c2UgcHJvcGVydGllcyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIFN0eWxlQnVpbGRlciBsb29rdXAg
dGFibGUuCkBAIC00MTU5LDE0ICs0MTYwLDE0IEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5
bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvCiB7
CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0lt
YWdlKCk7CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAg
ICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAg
IG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKICAg
ICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0
eWxlUmVzb2x2ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5LCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUt
PmlzUGVuZGluZygpKSB7Ci0gICAgICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJv
cGVydHksIHZhbHVlKTsKKyAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNl
dChwcm9wZXJ0eSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gU3R5bGVQZW5kaW5nSW1hZ2U6OmNy
ZWF0ZSh2YWx1ZSk7CiAgICAgfQogICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVh
dGUodmFsdWUpOwpAQCAtNDE3Nyw3ICs0MTc4LDcgQEAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBT
dHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXIK
IHsKICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5n
SW1hZ2VTZXQoZG9jdW1lbnQoKSk7CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJ
bWFnZSgpKQotICAgICAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2
YWx1ZSk7CisgICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVy
dHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogI2VuZGlmCkBAIC00
MTg2LDE4ICs0MTg3LDIwIEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6
Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvCiB7CiAgICAgUmVmUHRy
PFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKGRvY3VtZW50
KCkpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAg
bV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBt
X3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAg
cmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0Zv
clRleHRTaXplQWRqdXN0KCkKIHsKLSAgICBpZiAobV9zdHlsZS0+dGV4dFNpemVBZGp1c3QoKSkK
KyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX3N0YXRlLnN0eWxlLmdldCgpOworCisgICAgaWYg
KHN0eWxlLT50ZXh0U2l6ZUFkanVzdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGb250RGVz
Y3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKTsK
KyAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKHN0eWxlLT5mb250RGVzY3Jp
cHRpb24oKSk7CiAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShuZXdGb250
RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpKTsKLSAgICBtX3N0eWxlLT5zZXRGb250RGVzY3Jp
cHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKKyAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9u
KG5ld0ZvbnREZXNjcmlwdGlvbik7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3Ja
b29tQ2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQpA
QCAtNDI2MiwxNSArNDI2NSwxNSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250
U3R5bGUoU2V0dGluZ3MqIHNldHRpbmdzKQogICAgIH0KICAgICBmb250RGVzY3JpcHRpb24uc2V0
S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKICAgICBz
ZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgp
LCBDU1NWYWx1ZU1lZGl1bSwgZmFsc2UpKTsKLSAgICBtX3N0eWxlLT5zZXRMaW5lSGVpZ2h0KFJl
bmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLSAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9
IDA7CisgICAgbV9zdGF0ZS5zdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlh
bExpbmVIZWlnaHQoKSk7CisgICAgbV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSAwOwogICAgIHNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2
ZXI6OnNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBz
aXplKQogewogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNp
ZmllZFNpemUoZG9jdW1lbnQoKSwgbV9zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJz
b2x1dGVTaXplKCksIHNpemUsIHVzZVNWR1pvb21SdWxlcygpKSk7CisgICAgZm9udERlc2NyaXB0
aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1
bWVudCgpLCBtX3N0YXRlLnN0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNp
emUoKSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKIH0KIAogZmxvYXQgU3R5bGVSZXNvbHZl
cjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBS
ZW5kZXJTdHlsZSogc3R5bGUsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNp
emUsIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKQpAQCAtNDQ3MywyMCArNDQ3NiwyMSBAQCBDb2xvciBT
dHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZSog
dmFsdWUsIGJvb2wgZm9yVgogICAgIGlmICh2YWx1ZS0+aXNSR0JDb2xvcigpKQogICAgICAgICBy
ZXR1cm4gQ29sb3IodmFsdWUtPmdldFJHQkEzMlZhbHVlKCkpOwogCisgICAgY29uc3QgU3RhdGUm
IHN0YXRlID0gbV9zdGF0ZTsKICAgICBpbnQgaWRlbnQgPSB2YWx1ZS0+Z2V0SWRlbnQoKTsKICAg
ICBzd2l0Y2ggKGlkZW50KSB7CiAgICAgY2FzZSAwOgogICAgICAgICByZXR1cm4gQ29sb3IoKTsK
ICAgICBjYXNlIENTU1ZhbHVlV2Via2l0VGV4dDoKLSAgICAgICAgcmV0dXJuIG1fZWxlbWVudC0+
ZG9jdW1lbnQoKS0+dGV4dENvbG9yKCk7CisgICAgICAgIHJldHVybiBzdGF0ZS5lbGVtZW50LT5k
b2N1bWVudCgpLT50ZXh0Q29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0TGluazoKLSAg
ICAgICAgcmV0dXJuIChtX2VsZW1lbnQtPmlzTGluaygpICYmIGZvclZpc2l0ZWRMaW5rKSA/IG1f
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtDb2xvcigpIDogbV9lbGVtZW50LT5kb2N1
bWVudCgpLT5saW5rQ29sb3IoKTsKKyAgICAgICAgcmV0dXJuIChzdGF0ZS5lbGVtZW50LT5pc0xp
bmsoKSAmJiBmb3JWaXNpdGVkTGluaykgPyBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT52aXNp
dGVkTGlua0NvbG9yKCkgOiBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsK
ICAgICBjYXNlIENTU1ZhbHVlV2Via2l0QWN0aXZlbGluazoKLSAgICAgICAgcmV0dXJuIG1fZWxl
bWVudC0+ZG9jdW1lbnQoKS0+YWN0aXZlTGlua0NvbG9yKCk7CisgICAgICAgIHJldHVybiBzdGF0
ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5hY3RpdmVMaW5rQ29sb3IoKTsKICAgICBjYXNlIENTU1Zh
bHVlV2Via2l0Rm9jdXNSaW5nQ29sb3I6CiAgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6Zm9j
dXNSaW5nQ29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlQ3VycmVudGNvbG9yOgotICAgICAgICBy
ZXR1cm4gbV9zdHlsZS0+Y29sb3IoKTsKKyAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlLT5jb2xv
cigpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBjb2xvckZvckNTU1ZhbHVlKGlkZW50
KTsKICAgICB9CkBAIC00ODIwLDE3ICs0ODI0LDE4IEBAIHN0YXRpYyBGaWx0ZXJPcGVyYXRpb246
Ok9wZXJhdGlvblR5cGUgZmlsdGVyT3BlcmF0aW9uRm9yVHlwZShXZWJLaXRDU1NGaWx0ZXJWYWx1
CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQogdm9pZCBTdHlsZVJlc29s
dmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cygpCiB7Ci0gICAgaWYgKCFtX3N0eWxlLT5oYXNG
aWx0ZXIoKSB8fCBtX3BlbmRpbmdTVkdEb2N1bWVudHMuaXNFbXB0eSgpKQorICAgIFN0YXRlJiBz
dGF0ZSA9IG1fc3RhdGU7CisgICAgaWYgKCFzdGF0ZS5zdHlsZS0+aGFzRmlsdGVyKCkgfHwgc3Rh
dGUucGVuZGluZ1NWR0RvY3VtZW50cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fZWxlbWVudC0+
ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKLSAgICBWZWN0b3I8UmVmUHRyPEZp
bHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9IG1fc3R5bGUtPm11dGFibGVGaWx0
ZXIoKS5vcGVyYXRpb25zKCk7CisgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291
cmNlTG9hZGVyID0gc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2Fk
ZXIoKTsKKyAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0
aW9ucyA9IHN0YXRlLnN0eWxlLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlck9w
ZXJhdGlvbnMuYXQoaSk7CiAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlv
blR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkgewogICAgICAgICAgICAgUmVm
ZXJlbmNlRmlsdGVyT3BlcmF0aW9uKiByZWZlcmVuY2VGaWx0ZXIgPSBzdGF0aWNfY2FzdDxSZWZl
cmVuY2VGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24uZ2V0KCkpOwogCi0gICAgICAg
ICAgICBXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKiB2YWx1ZSA9IG1fcGVuZGluZ1NWR0RvY3Vt
ZW50cy5nZXQocmVmZXJlbmNlRmlsdGVyKS5nZXQoKTsKKyAgICAgICAgICAgIFdlYktpdENTU1NW
R0RvY3VtZW50VmFsdWUqIHZhbHVlID0gc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cy5nZXQocmVm
ZXJlbmNlRmlsdGVyKS5nZXQoKTsKICAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICBDYWNoZWRTVkdEb2N1bWVudCogY2FjaGVkRG9j
dW1lbnQgPSB2YWx1ZS0+bG9hZChjYWNoZWRSZXNvdXJjZUxvYWRlcik7CkBAIC00ODQxLDcgKzQ4
NDYsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCkKICAg
ICAgICAgICAgIHJlZmVyZW5jZUZpbHRlci0+c2V0Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2Uo
YWRvcHRQdHIobmV3IENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGNhY2hlZERvY3VtZW50KSkp
OwogICAgICAgICB9CiAgICAgfQotICAgIG1fcGVuZGluZ1NWR0RvY3VtZW50cy5jbGVhcigpOwor
ICAgIHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMuY2xlYXIoKTsKIH0KICNlbmRpZgogCkBAIC00
ODU3LDE4ICs0ODYyLDE4IEBAIFN0eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBl
bmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShXZWJLaXRDU1NTaGFkZXJWCiB7CiAgICAgU3R5bGVT
aGFkZXIqIHNoYWRlciA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdTaGFkZXIoKTsKICAgICBpZiAo
c2hhZGVyICYmIHNoYWRlci0+aXNQZW5kaW5nU2hhZGVyKCkpCi0gICAgICAgIG1faGFzUGVuZGlu
Z1NoYWRlcnMgPSB0cnVlOworICAgICAgICBtX3N0YXRlLmhhc1BlbmRpbmdTaGFkZXJzID0gdHJ1
ZTsKICAgICByZXR1cm4gc2hhZGVyOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5k
aW5nU2hhZGVycygpCiB7Ci0gICAgaWYgKCFtX3N0eWxlLT5oYXNGaWx0ZXIoKSB8fCAhbV9oYXNQ
ZW5kaW5nU2hhZGVycykKKyAgICBpZiAoIW1fc3RhdGUuc3R5bGUtPmhhc0ZpbHRlcigpIHx8ICFt
X3N0YXRlLmhhc1BlbmRpbmdTaGFkZXJzKQogICAgICAgICByZXR1cm47CiAKLSAgICBDYWNoZWRS
ZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2VsZW1lbnQtPmRvY3VtZW50
KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CisgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNh
Y2hlZFJlc291cmNlTG9hZGVyID0gbV9zdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRS
ZXNvdXJjZUxvYWRlcigpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4m
IGZpbHRlck9wZXJhdGlvbnMgPSBtX3N0eWxlLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygp
OworICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJPcGVyYXRpb25z
ID0gbV9zdGF0ZS5zdHlsZS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVyT3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewogICAg
ICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmaWx0ZXJPcGVyYXRpb24gPSBmaWx0ZXJPcGVy
YXRpb25zLmF0KGkpOwogICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25U
eXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT00pIHsKQEAgLTQ4ODUsNyArNDg5MCw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJzKCkKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KLSAgICBtX2hhc1BlbmRpbmdTaGFkZXJzID0gZmFsc2U7CisgICAg
bV9zdGF0ZS5oYXNQZW5kaW5nU2hhZGVycyA9IGZhbHNlOwogfQogCiBzdGF0aWMgYm9vbCBzb3J0
UGFyYW1ldGVyc0J5TmFtZUNvbXBhcmF0b3IoY29uc3QgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFt
ZXRlcj4mIGEsIGNvbnN0IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+JiBiKQpAQCAtNDky
Nyw3ICs0OTMyLDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVz
b2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW0KIHsKICAgICBSZWZQdHI8Q3Vz
dG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyPiB0cmFuc2Zvcm1QYXJhbWV0ZXIgPSBDdXN0b21G
aWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXI6OmNyZWF0ZShuYW1lKTsKICAgICBUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZXMs
IHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgb3BlcmF0aW9ucyk7CisgICAgY3JlYXRlVHJh
bnNmb3JtT3BlcmF0aW9ucyh2YWx1ZXMsIG1fc3RhdGUuc3R5bGUuZ2V0KCksIG1fc3RhdGUucm9v
dEVsZW1lbnRTdHlsZSwgb3BlcmF0aW9ucyk7CiAgICAgdHJhbnNmb3JtUGFyYW1ldGVyLT5zZXRP
cGVyYXRpb25zKG9wZXJhdGlvbnMpOwogICAgIHJldHVybiB0cmFuc2Zvcm1QYXJhbWV0ZXIucmVs
ZWFzZSgpOwogfQpAQCAtNTE3NywxMiArNTE4MiwxMiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNy
ZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHls
ZQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBXZWJLaXRDU1NTVkdE
b2N1bWVudFZhbHVlKiBzdmdEb2N1bWVudFZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTU1ZH
RG9jdW1lbnRWYWx1ZSo+KGFyZ3VtZW50KTsKLSAgICAgICAgICAgIEtVUkwgdXJsID0gbV9lbGVt
ZW50LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdmdEb2N1bWVudFZhbHVlLT51cmwoKSk7Cisg
ICAgICAgICAgICBLVVJMIHVybCA9IG1fc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29tcGxl
dGVVUkwoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCkpOwogCiAgICAgICAgICAgICBSZWZQdHI8UmVm
ZXJlbmNlRmlsdGVyT3BlcmF0aW9uPiBvcGVyYXRpb24gPSBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRp
b246OmNyZWF0ZShzdmdEb2N1bWVudFZhbHVlLT51cmwoKSwgdXJsLmZyYWdtZW50SWRlbnRpZmll
cigpLCBvcGVyYXRpb25UeXBlKTsKLSAgICAgICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6Omlz
RXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIG1fZWxlbWVudC0+
ZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzRXh0ZXJu
YWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIG1fc3RhdGUuZWxlbWVudC0+
ZG9jdW1lbnQoKSkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXN2Z0RvY3VtZW50VmFsdWUtPmxv
YWRSZXF1ZXN0ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9wZW5kaW5nU1ZHRG9jdW1lbnRz
LnNldChvcGVyYXRpb24uZ2V0KCksIHN2Z0RvY3VtZW50VmFsdWUpOworICAgICAgICAgICAgICAg
ICAgICBtX3N0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMuc2V0KG9wZXJhdGlvbi5nZXQoKSwgc3Zn
RG9jdW1lbnRWYWx1ZSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3ZnRG9jdW1lbnRWYWx1
ZS0+Y2FjaGVkU1ZHRG9jdW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLT5z
ZXRDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShhZG9wdFB0cihuZXcgQ2FjaGVkU1ZHRG9jdW1l
bnRSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+Y2FjaGVkU1ZHRG9jdW1lbnQoKSkpKTsKICAg
ICAgICAgICAgIH0KQEAgLTUyODYsNyArNTI5MSw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3Jl
YXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxl
CiAKIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFn
ZShTdHlsZVBlbmRpbmdJbWFnZSogcGVuZGluZ0ltYWdlKQogewotICAgIENhY2hlZFJlc291cmNl
TG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2Fj
aGVkUmVzb3VyY2VMb2FkZXIoKTsKKyAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVz
b3VyY2VMb2FkZXIgPSBtX3N0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNl
TG9hZGVyKCk7CiAKICAgICBpZiAocGVuZGluZ0ltYWdlLT5jc3NJbWFnZVZhbHVlKCkpIHsKICAg
ICAgICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VWYWx1ZSA9IHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VW
YWx1ZSgpOwpAQCAtNTMxNiwyMyArNTMyMSwyMyBAQCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0
eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2UqIHBlbmRpbgog
CiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKIHsKLSAgICBpZiAobV9w
ZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmlzRW1wdHkoKSkKKyAgICBpZiAobV9zdGF0ZS5wZW5kaW5n
SW1hZ2VQcm9wZXJ0aWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUGVuZGlu
Z0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGVuZCA9IG1fcGVuZGluZ0lt
YWdlUHJvcGVydGllcy5lbmQoKS5rZXlzKCk7Ci0gICAgZm9yIChQZW5kaW5nSW1hZ2VQcm9wZXJ0
eU1hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQgPSBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMu
YmVnaW4oKS5rZXlzKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIFBlbmRpbmdJbWFnZVByb3Bl
cnR5TWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBtX3N0YXRlLnBlbmRpbmdJbWFnZVBy
b3BlcnRpZXMuZW5kKCkua2V5cygpOworICAgIGZvciAoUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6
OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0ID0gbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVz
LmJlZ2luKCkua2V5cygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgQ1NTUHJvcGVydHlJ
RCBjdXJyZW50UHJvcGVydHkgPSAqaXQ7CiAKICAgICAgICAgc3dpdGNoIChjdXJyZW50UHJvcGVy
dHkpIHsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZTogewotICAgICAg
ICAgICAgZm9yIChGaWxsTGF5ZXIqIGJhY2tncm91bmRMYXllciA9IG1fc3R5bGUtPmFjY2Vzc0Jh
Y2tncm91bmRMYXllcnMoKTsgYmFja2dyb3VuZExheWVyOyBiYWNrZ3JvdW5kTGF5ZXIgPSBiYWNr
Z3JvdW5kTGF5ZXItPm5leHQoKSkgeworICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIGJhY2tn
cm91bmRMYXllciA9IG1fc3RhdGUuc3R5bGUtPmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKTsgYmFj
a2dyb3VuZExheWVyOyBiYWNrZ3JvdW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkg
ewogICAgICAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkgJiYgYmFja2dy
b3VuZExheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQogICAgICAgICAgICAgICAgICAg
ICBiYWNrZ3JvdW5kTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8
U3R5bGVQZW5kaW5nSW1hZ2UqPihiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkpKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1By
b3BlcnR5Q29udGVudDogewotICAgICAgICAgICAgZm9yIChDb250ZW50RGF0YSogY29udGVudERh
dGEgPSBjb25zdF9jYXN0PENvbnRlbnREYXRhKj4obV9zdHlsZS0+Y29udGVudERhdGEoKSk7IGNv
bnRlbnREYXRhOyBjb250ZW50RGF0YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKKyAgICAgICAg
ICAgIGZvciAoQ29udGVudERhdGEqIGNvbnRlbnREYXRhID0gY29uc3RfY2FzdDxDb250ZW50RGF0
YSo+KG1fc3RhdGUuc3R5bGUtPmNvbnRlbnREYXRhKCkpOyBjb250ZW50RGF0YTsgY29udGVudERh
dGEgPSBjb250ZW50RGF0YS0+bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRE
YXRhLT5pc0ltYWdlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2Ug
PSBzdGF0aWNfY2FzdDxJbWFnZUNvbnRlbnREYXRhKj4oY29udGVudERhdGEpLT5pbWFnZSgpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpIHsKQEAgLTUz
NDUsNyArNTM1MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUN1
cnNvcjogewotICAgICAgICAgICAgaWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBtX3N0eWxl
LT5jdXJzb3JzKCkpIHsKKyAgICAgICAgICAgIGlmIChDdXJzb3JMaXN0KiBjdXJzb3JMaXN0ID0g
bV9zdGF0ZS5zdHlsZS0+Y3Vyc29ycygpKSB7CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjdXJzb3JMaXN0LT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgICAg
ICBDdXJzb3JEYXRhJiBjdXJyZW50Q3Vyc29yID0gY3Vyc29yTGlzdC0+YXQoaSk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChTdHlsZUltYWdlKiBpbWFnZSA9IGN1cnJlbnRDdXJzb3IuaW1hZ2Uo
KSkgewpAQCAtNTM1NywxNyArNTM2MiwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5k
aW5nSW1hZ2VzKCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZTogewotICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmxp
c3RTdHlsZUltYWdlKCkgJiYgbV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKS0+aXNQZW5kaW5nSW1h
Z2UoKSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVu
ZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+bGlzdFN0
eWxlSW1hZ2UoKSkpKTsKKyAgICAgICAgICAgIGlmIChtX3N0YXRlLnN0eWxlLT5saXN0U3R5bGVJ
bWFnZSgpICYmIG1fc3RhdGUuc3R5bGUtPmxpc3RTdHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdl
KCkpCisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHlsZS0+c2V0TGlzdFN0eWxlSW1hZ2UobG9h
ZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3RhdGUuc3R5
bGUtPmxpc3RTdHlsZUltYWdlKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAg
IGlmIChtX3N0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpICYmIG1fc3R5bGUtPmJvcmRlckltYWdl
U291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0
Qm9yZGVySW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRp
bmdJbWFnZSo+KG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCkpKSk7CisgICAgICAgICAgICBp
ZiAobV9zdGF0ZS5zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBtX3N0YXRlLnN0eWxlLT5i
b3JkZXJJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgIG1f
c3RhdGUuc3R5bGUtPnNldEJvcmRlckltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGlj
X2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRlLnN0eWxlLT5ib3JkZXJJbWFnZVNvdXJj
ZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6IHsKLSAgICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rp
b24qIHJlZmxlY3Rpb24gPSBtX3N0eWxlLT5ib3hSZWZsZWN0KCkpIHsKKyAgICAgICAgICAgIGlm
IChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtX3N0YXRlLnN0eWxlLT5ib3hSZWZsZWN0
KCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBOaW5lUGllY2VJbWFnZSYgbWFza0ltYWdlID0g
cmVmbGVjdGlvbi0+bWFzaygpOwogICAgICAgICAgICAgICAgIGlmIChtYXNrSW1hZ2UuaW1hZ2Uo
KSAmJiBtYXNrSW1hZ2UuaW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkgewogICAgICAgICAgICAg
ICAgICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdl
KHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obWFza0ltYWdlLmltYWdlKCkpKTsKQEAg
LTUzNzcsMTIgKzUzODIsMTIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdl
cygpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFza0JveEltYWdlU291cmNlOiB7Ci0gICAgICAgICAgICBpZiAobV9zdHlsZS0+
bWFza0JveEltYWdlU291cmNlKCkgJiYgbV9zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCktPmlz
UGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFza0JveEltYWdl
U291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPiht
X3N0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSkpKTsKKyAgICAgICAgICAgIGlmIChtX3N0YXRl
LnN0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSAmJiBtX3N0YXRlLnN0eWxlLT5tYXNrQm94SW1h
Z2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnN0
eWxlLT5zZXRNYXNrQm94SW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxT
dHlsZVBlbmRpbmdJbWFnZSo+KG1fc3RhdGUuc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tJbWFnZTogewotICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXll
ciA9IG1fc3R5bGUtPmFjY2Vzc01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBt
YXNrTGF5ZXItPm5leHQoKSkgeworICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXll
ciA9IG1fc3RhdGUuc3R5bGUtPmFjY2Vzc01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5
ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChtYXNrTGF5ZXIt
PmltYWdlKCkgJiYgbWFza0xheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQogICAgICAg
ICAgICAgICAgICAgICBtYXNrTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGlj
X2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrTGF5ZXItPmltYWdlKCkpKSk7CiAgICAgICAg
ICAgICB9CkBAIC01MzkzLDcgKzUzOTgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5k
aW5nSW1hZ2VzKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVy
dGllcy5jbGVhcigpOworICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigp
OwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nUmVzb3VyY2VzKCkKQEAgLTU0
NTYsNyArNTQ2MSw2IEBAIHZvaWQgTWVkaWFRdWVyeVJlc3VsdDo6cmVwb3J0TWVtb3J5VXNhZ2Uo
TWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uCiB2b2lkIFN0eWxlUmVzb2x2
ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8p
IGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhp
cywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fc3R5bGUp
OwogICAgIGluZm8uYWRkTWVtYmVyKG1fYXV0aG9yU3R5bGUpOwogICAgIGluZm8uYWRkTWVtYmVy
KG1fdXNlclN0eWxlKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2ZlYXR1cmVzKTsKQEAgLTU0NjUs
MzIgKzU0NjksMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1v
cnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogICAgIGluZm8uYWRkTWVtYmVy
KG1fa2V5ZnJhbWVzUnVsZU1hcCk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9tYXRjaGVkUHJvcGVy
dGllc0NhY2hlKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVT
d2VlcFRpbWVyKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX21hdGNoZWRSdWxlcyk7CiAKLSAgICBp
bmZvLmFkZE1lbWJlcihtX3J1bGVMaXN0KTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3BlbmRpbmdJ
bWFnZVByb3BlcnRpZXMpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fbWVkaXVtKTsKICAgICBpbmZv
LmFkZE1lbWJlcihtX3Jvb3REZWZhdWx0U3R5bGUpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fZG9j
dW1lbnQpOwogCi0gICAgLy8gRklYTUU6IHBvaW50ZXIgdG8gUmVuZGVyU3R5bGUgY291bGQgcG9p
bnQgdG8gYW4gYWxyZWFkeSBkZWxldGVkIG9iamVjdC4KLSAgICBpbmZvLmlnbm9yZU1lbWJlciht
X3BhcmVudFN0eWxlKTsKLSAgICBpbmZvLmlnbm9yZU1lbWJlcihtX3Jvb3RFbGVtZW50U3R5bGUp
OwotCi0gICAgaW5mby5hZGRNZW1iZXIobV9lbGVtZW50KTsKLSAgICBpbmZvLmFkZE1lbWJlciht
X3N0eWxlZEVsZW1lbnQpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fcmVnaW9uRm9yU3R5bGluZyk7
Ci0gICAgaW5mby5hZGRNZW1iZXIobV9wYXJlbnROb2RlKTsKLSAgICBpbmZvLmFkZE1lbWJlciht
X2xpbmVIZWlnaHRWYWx1ZSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9mb250U2VsZWN0b3IpOwog
ICAgIGluZm8uYWRkTWVtYmVyKG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cyk7
CiAgICAgaW5mby5pZ25vcmVNZW1iZXIobV9zdHlsZUJ1aWxkZXIpOwogICAgIGluZm8uYWRkTWVt
YmVyKG1faW5zcGVjdG9yQ1NTT01XcmFwcGVycyk7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKSAm
JiBFTkFCTEUoU1ZHKQotICAgIGluZm8uYWRkTWVtYmVyKG1fcGVuZGluZ1NWR0RvY3VtZW50cyk7
Ci0jZW5kaWYKICAgICBpbmZvLmFkZE1lbWJlcihtX3Njb3BlUmVzb2x2ZXIpOwogCisgICAgaW5m
by5hZGRNZW1iZXIobV9zdGF0ZSk7CisKICAgICAvLyBGSVhNRTogbW92ZSB0aGlzIHRvIGEgcGxh
Y2Ugd2hlcmUgaXQgd291bGQgYmUgY2FsbGVkIG9ubHkgb25jZT8KICAgICBpbmZvLmFkZE1lbWJl
cihkZWZhdWx0U3R5bGUpOwogICAgIGluZm8uYWRkTWVtYmVyKGRlZmF1bHRRdWlya3NTdHlsZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCBhM2FmNTQ0OGI5MDk4ZTNjMzI4YTY1
MjBlODA5MWIyMTUzNWY1NDZlLi40NjliMjFjNmQ5MDUzOWMyMDI3MTJlNTQ5YmVmZWY4MDY0MDE0
ZTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTIzLDYgKzIzLDcgQEAKICNk
ZWZpbmUgU3R5bGVSZXNvbHZlcl9oCiAKICNpbmNsdWRlICJDU1NSdWxlLmgiCisjaW5jbHVkZSAi
Q1NTUnVsZUxpc3QuaCIKICNpbmNsdWRlICJDU1NUb1N0eWxlTWFwLmgiCiAjaW5jbHVkZSAiQ1NT
VmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiTGlua0hhc2guaCIKQEAgLTM2LDYgKzM3LDkgQEAKICNp
bmNsdWRlICJTdHlsZUluaGVyaXRlZERhdGEuaCIKICNpbmNsdWRlICJTdHlsZVNjb3BlUmVzb2x2
ZXIuaCIKICNpbmNsdWRlICJWaWV3cG9ydFN0eWxlUmVzb2x2ZXIuaCIKKyNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiV2ViS2l0Q1NTU1ZHRG9jdW1lbnRW
YWx1ZS5oIgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTE4MiwyMCArMTg2LDIwIEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckRv
Y3VtZW50KERvY3VtZW50KiwgQ1NTRm9udFNlbGVjdG9yKiA9IDApOwogCi0gICAgUmVuZGVyU3R5
bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotICAgIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7IH0KLSAgICBS
ZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEVsZW1l
bnRTdHlsZTsgfQotICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1l
bnQ7IH0KKyAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0
eWxlLmdldCgpOyB9CisgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5wYXJlbnRTdHlsZTsgfQorICAgIFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5yb290RWxlbWVudFN0eWxlOyB9CisgICAgRWxl
bWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZWxlbWVudDsgfQogICAgIERv
Y3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHN0eWxlKCktPmZv
bnREZXNjcmlwdGlvbigpOyB9CiAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250
RGVzY3JpcHRpb24oKSB7IHJldHVybiBwYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsg
fQotICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldEZvbnREZXNjcmlwdGlv
bihmb250RGVzY3JpcHRpb24pOyB9Ci0gICAgdm9pZCBzZXRab29tKGZsb2F0IGYpIHsgbV9mb250
RGlydHkgfD0gc3R5bGUoKS0+c2V0Wm9vbShmKTsgfQotICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9v
bShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldEVmZmVjdGl2ZVpvb20oZik7
IH0KLSAgICB2b2lkIHNldFRleHRTaXplQWRqdXN0KGJvb2wgYikgeyBtX2ZvbnREaXJ0eSB8PSBz
dHlsZSgpLT5zZXRUZXh0U2l6ZUFkanVzdChiKTsgfQotICAgIHZvaWQgc2V0V3JpdGluZ01vZGUo
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0V3Jp
dGluZ01vZGUod3JpdGluZ01vZGUpOyB9Ci0gICAgdm9pZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4
dE9yaWVudGF0aW9uIHRleHRPcmllbnRhdGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5z
ZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQotICAgIGJvb2wgaGFzUGFyZW50
Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50Tm9kZTsgfQorICAgIHZvaWQgc2V0Rm9udERl
c2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fc3Rh
dGUuZm9udERpcnR5IHw9IHN0eWxlKCktPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOyB9CisgICAgdm9pZCBzZXRab29tKGZsb2F0IGYpIHsgbV9zdGF0ZS5mb250RGlydHkgfD0g
c3R5bGUoKS0+c2V0Wm9vbShmKTsgfQorICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBm
KSB7IG1fc3RhdGUuZm9udERpcnR5IHw9IHN0eWxlKCktPnNldEVmZmVjdGl2ZVpvb20oZik7IH0K
KyAgICB2b2lkIHNldFRleHRTaXplQWRqdXN0KGJvb2wgYikgeyBtX3N0YXRlLmZvbnREaXJ0eSB8
PSBzdHlsZSgpLT5zZXRUZXh0U2l6ZUFkanVzdChiKTsgfQorICAgIHZvaWQgc2V0V3JpdGluZ01v
ZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgbV9zdGF0ZS5mb250RGlydHkgfD0gc3R5bGUo
KS0+c2V0V3JpdGluZ01vZGUod3JpdGluZ01vZGUpOyB9CisgICAgdm9pZCBzZXRUZXh0T3JpZW50
YXRpb24oVGV4dE9yaWVudGF0aW9uIHRleHRPcmllbnRhdGlvbikgeyBtX3N0YXRlLmZvbnREaXJ0
eSB8PSBzdHlsZSgpLT5zZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQorICAg
IGJvb2wgaGFzUGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50Tm9kZTsg
fQogCiAgICAgdm9pZCByZXNldEF1dGhvclN0eWxlKCk7CiAgICAgdm9pZCBhcHBlbmRBdXRob3JT
dHlsZVNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHls
ZVNoZWV0PiA+Jik7CkBAIC0zMjcsNyArMzMxLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgYWRq
dXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlVG9BZGp1c3QsIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSwgRWxlbWVudCopOwogCi0gICAgdm9pZCBhZGRNYXRjaGVkUnVsZShjb25zdCBS
dWxlRGF0YSogcnVsZSkgeyBtX21hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7IH0KKyAgICB2b2lk
IGFkZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKiBydWxlKSB7IG1fc3RhdGUubWF0Y2hlZFJ1
bGVzLmFwcGVuZChydWxlKTsgfQogCiAgICAgc3RydWN0IFJ1bGVSYW5nZSB7CiAgICAgICAgIFJ1
bGVSYW5nZShpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgpOiBmaXJzdFJ1
bGVJbmRleChmaXJzdFJ1bGVJbmRleCksIGxhc3RSdWxlSW5kZXgobGFzdFJ1bGVJbmRleCkgeyB9
CkBAIC00MzcsMTUgKzQ0MSw4NyBAQCBwcml2YXRlOgogICAgIE93blB0cjxSdWxlU2V0PiBtX3Np
YmxpbmdSdWxlU2V0OwogICAgIE93blB0cjxSdWxlU2V0PiBtX3VuY29tbW9uQXR0cmlidXRlUnVs
ZVNldDsKIAotICAgIGJvb2wgbV9oYXNVQUFwcGVhcmFuY2U7Ci0gICAgQm9yZGVyRGF0YSBtX2Jv
cmRlckRhdGE7Ci0gICAgRmlsbExheWVyIG1fYmFja2dyb3VuZERhdGE7Ci0gICAgQ29sb3IgbV9i
YWNrZ3JvdW5kQ29sb3I7Ci0KICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCos
IFJlZlB0cjxTdHlsZVJ1bGVLZXlmcmFtZXM+ID4gS2V5ZnJhbWVzUnVsZU1hcDsKICAgICBLZXlm
cmFtZXNSdWxlTWFwIG1fa2V5ZnJhbWVzUnVsZU1hcDsKIAogcHVibGljOgorICAgIHR5cGVkZWYg
SGFzaE1hcDxDU1NQcm9wZXJ0eUlELCBSZWZQdHI8Q1NTVmFsdWU+ID4gUGVuZGluZ0ltYWdlUHJv
cGVydHlNYXA7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQorICAgIHR5
cGVkZWYgSGFzaE1hcDxGaWx0ZXJPcGVyYXRpb24qLCBSZWZQdHI8V2ViS2l0Q1NTU1ZHRG9jdW1l
bnRWYWx1ZT4gPiBQZW5kaW5nU1ZHRG9jdW1lbnRNYXA7CisjZW5kaWYKKworICAgIGNsYXNzIFN0
YXRlIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RhdGUpOworICAgIHB1YmxpYzoK
KyAgICAgICAgU3RhdGUoKQorICAgICAgICA6IGVsZW1lbnQoMCkKKyAgICAgICAgLCBzdHlsZWRF
bGVtZW50KDApCisgICAgICAgICwgcGFyZW50Tm9kZSgwKQorICAgICAgICAsIHBhcmVudFN0eWxl
KDApCisgICAgICAgICwgcm9vdEVsZW1lbnRTdHlsZSgwKQorICAgICAgICAsIHJlZ2lvbkZvclN0
eWxpbmcoMCkKKyAgICAgICAgLCBzYW1lT3JpZ2luT25seShmYWxzZSkKKyAgICAgICAgLCBwc2V1
ZG9TdHlsZShOT1BTRVVETykKKyAgICAgICAgLCBlbGVtZW50TGlua1N0YXRlKE5vdEluc2lkZUxp
bmspCisgICAgICAgICwgZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KGZhbHNlKQorICAgICAg
ICAsIGVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyhmYWxzZSkKKyAgICAgICAgLCBhcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSkKKyAgICAgICAgLCBhcHBseVByb3BlcnR5VG9WaXNp
dGVkTGlua1N0eWxlKGZhbHNlKQorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICAgICAgLCBo
YXNQZW5kaW5nU2hhZGVycyhmYWxzZSkKKyNlbmRpZgorICAgICAgICAsIGxpbmVIZWlnaHRWYWx1
ZSgwKQorICAgICAgICAsIGZvbnREaXJ0eShmYWxzZSkKKyAgICAgICAgLCBoYXNVQUFwcGVhcmFu
Y2UoZmFsc2UpCisgICAgICAgICwgYmFja2dyb3VuZERhdGEoQmFja2dyb3VuZEZpbGxMYXllcikg
eyB9CisgICAgICAgIAorcHVibGljOgorICAgICAgICAvLyBGSVhNRShidWcgMTA4NTYzKTogdG8g
bWFrZSBpdCBlYXNpZXIgdG8gcmV2aWV3LCB0aGVzZSBtZW1iZXIKKyAgICAgICAgLy8gdmFyaWFi
bGVzIGFyZSBwdWJsaWMuIEhvd2V2ZXIgd2Ugc2hvdWxkIGFkZCBtZXRob2RzIHRvIGFjY2Vzcwor
ICAgICAgICAvLyB0aGVzZSB2YXJpYWJsZXMuCisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQ7Cisg
ICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGU7CisgICAgICAgIFN0eWxlZEVsZW1lbnQq
IHN0eWxlZEVsZW1lbnQ7CisgICAgICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGU7CisgICAg
ICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHJvb3RF
bGVtZW50U3R5bGU7CisgICAgICAgIAorICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0
eWxpbmc7CisgICAgICAgIGJvb2wgc2FtZU9yaWdpbk9ubHk7CisgICAgICAgIFBzZXVkb0lkIHBz
ZXVkb1N0eWxlOworCisgICAgICAgIEVJbnNpZGVMaW5rIGVsZW1lbnRMaW5rU3RhdGU7CisKKyAg
ICAgICAgYm9vbCBkaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQ7CisKKyAgICAgICAgYm9vbCBl
bGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXM7CisKKyAgICAgICAgUHNldWRvSWQgZHluYW1pY1Bz
ZXVkbzsKKworICAgICAgICAvLyBBIGJ1ZmZlciB1c2VkIHRvIGhvbGQgdGhlIHNldCBvZiBtYXRj
aGVkIHJ1bGVzIGZvciBhbiBlbGVtZW50LAorICAgICAgICAvLyBhbmQgYSB0ZW1wb3JhcnkgYnVm
ZmVyIHVzZWQgZm9yIG1lcmdlIHNvcnRpbmcuCisgICAgICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0
YSosIDMyPiBtYXRjaGVkUnVsZXM7CisgICAgICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4g
cnVsZUxpc3Q7CisKKyAgICAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7Cisg
ICAgICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsKKworICAgICAgICBQ
ZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcCBwZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzOworI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKKyAgICAgICAgYm9vbCBoYXNQZW5kaW5nU2hhZGVyczsKKyNlbmRpZgor
I2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKKyAgICAgICAgUGVuZGluZ1NW
R0RvY3VtZW50TWFwIHBlbmRpbmdTVkdEb2N1bWVudHM7CisjZW5kaWYKKyAgICAgICAgQ1NTVmFs
dWUqIGxpbmVIZWlnaHRWYWx1ZTsKKyAgICAgICAgYm9vbCBmb250RGlydHk7CisKKyAgICAgICAg
Ym9vbCBoYXNVQUFwcGVhcmFuY2U7CisgICAgICAgIEJvcmRlckRhdGEgYm9yZGVyRGF0YTsKKyAg
ICAgICAgRmlsbExheWVyIGJhY2tncm91bmREYXRhOworICAgICAgICBDb2xvciBiYWNrZ3JvdW5k
Q29sb3I7CisgICAgfTsKKwogICAgIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVOb3RZZXRBdmFp
bGFibGUoKSB7IHJldHVybiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOyB9CiAKICAgICBQYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKQEAg
LTQ1Niw4ICs1MzIsOCBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICBQYXNzUmVmUHRyPFN0eWxlSW1h
Z2U+IGN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NDdXJzb3JJbWFn
ZVZhbHVlKik7CiAKLSAgICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOyB9Ci0gICAgYm9vbCBhcHBs
eVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlOyB9CisgICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFy
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZTsgfQorICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsgfQogCiAgICAg
c3RhdGljIExlbmd0aCBjb252ZXJ0VG9JbnRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqLCBSZW5k
ZXJTdHlsZSosIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyID0gMSk7
CiAgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9GbG9hdExlbmd0aChDU1NQcmltaXRpdmVWYWx1
ZSosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxp
ZXIgPSAxKTsKQEAgLTUxMSwzOSArNTg3LDE4IEBAIHByaXZhdGU6CiAKICAgICBUaW1lcjxTdHls
ZVJlc29sdmVyPiBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyOwogCi0gICAgLy8g
QSBidWZmZXIgdXNlZCB0byBob2xkIHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcyBmb3IgYW4gZWxl
bWVudCwgYW5kIGEgdGVtcG9yYXJ5IGJ1ZmZlciB1c2VkIGZvcgotICAgIC8vIG1lcmdlIHNvcnRp
bmcuCi0gICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+IG1fbWF0Y2hlZFJ1bGVzOwotCi0g
ICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0PiBtX3J1bGVMaXN0OwotCi0gICAgdHlwZWRlZiBI
YXNoTWFwPENTU1Byb3BlcnR5SUQsIFJlZlB0cjxDU1NWYWx1ZT4gPiBQZW5kaW5nSW1hZ2VQcm9w
ZXJ0eU1hcDsKLSAgICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcCBtX3BlbmRpbmdJbWFnZVByb3Bl
cnRpZXM7Ci0KICAgICBPd25QdHI8TWVkaWFRdWVyeUV2YWx1YXRvcj4gbV9tZWRpdW07CiAgICAg
UmVmUHRyPFJlbmRlclN0eWxlPiBtX3Jvb3REZWZhdWx0U3R5bGU7CiAKLSAgICBQc2V1ZG9JZCBt
X2R5bmFtaWNQc2V1ZG87Ci0gICAgUHNldWRvSWQgbV9wc2V1ZG9TdHlsZTsKLQogICAgIERvY3Vt
ZW50KiBtX2RvY3VtZW50OworICAgIC8vIEZJWE1FOiBNYWtlIFNlbGVjdG9yQ2hlY2tlciBhbiBv
bi1zdGFjayBvYmplY3QgYW5kCisgICAgLy8gbW92ZSBzZWxlY3RvckNoZWNrZXIubW9kZSgpIHRv
IFN0YXRlLgorICAgIC8vIHNlbGVjdG9yQ2hlY2tlci5zdHJpbmdQYXJzaW5nKCkgY2FuIGJlIHJl
cGxhY2VkIHdpdGgKKyAgICAvLyAhZG9jdW1lbnQuaW5RdWlya3NNb2RlKCkuCiAgICAgU2VsZWN0
b3JDaGVja2VyIG1fc2VsZWN0b3JDaGVja2VyOwogICAgIFNlbGVjdG9yRmlsdGVyIG1fc2VsZWN0
b3JGaWx0ZXI7CiAKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7Ci0gICAgUmVuZGVy
U3R5bGUqIG1fcGFyZW50U3R5bGU7Ci0gICAgUmVuZGVyU3R5bGUqIG1fcm9vdEVsZW1lbnRTdHls
ZTsKLSAgICBFbGVtZW50KiBtX2VsZW1lbnQ7Ci0gICAgU3R5bGVkRWxlbWVudCogbV9zdHlsZWRF
bGVtZW50OwotICAgIFJlbmRlclJlZ2lvbiogbV9yZWdpb25Gb3JTdHlsaW5nOwotICAgIEVJbnNp
ZGVMaW5rIG1fZWxlbWVudExpbmtTdGF0ZTsKLSAgICBib29sIG1fZWxlbWVudEFmZmVjdGVkQnlD
bGFzc1J1bGVzOwotICAgIENvbnRhaW5lck5vZGUqIG1fcGFyZW50Tm9kZTsKLSAgICBDU1NWYWx1
ZSogbV9saW5lSGVpZ2h0VmFsdWU7Ci0gICAgYm9vbCBtX2ZvbnREaXJ0eTsKICAgICBib29sIG1f
bWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzOwotICAgIGJvb2wgbV9zYW1lT3JpZ2luT25seTsKLSAg
ICBib29sIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50OwogCiAgICAgUmVmUHRyPENTU0Zv
bnRTZWxlY3Rvcj4gbV9mb250U2VsZWN0b3I7CiAgICAgVmVjdG9yPE93blB0cjxNZWRpYVF1ZXJ5
UmVzdWx0PiA+IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0czsKQEAgLTU1Miwy
MiArNjA3LDE0IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFZpZXdwb3J0U3R5bGVSZXNvbHZlcj4g
bV92aWV3cG9ydFN0eWxlUmVzb2x2ZXI7CiAjZW5kaWYKIAotICAgIGJvb2wgbV9hcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGU7Ci0gICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5r
U3R5bGU7CiAgICAgY29uc3QgU3R5bGVCdWlsZGVyJiBtX3N0eWxlQnVpbGRlcjsKIAotI2lmIEVO
QUJMRShDU1NfU0hBREVSUykKLSAgICBib29sIG1faGFzUGVuZGluZ1NoYWRlcnM7Ci0jZW5kaWYK
LQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKLSAgICBIYXNoTWFwPEZp
bHRlck9wZXJhdGlvbiosIFJlZlB0cjxXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlPiA+IG1fcGVu
ZGluZ1NWR0RvY3VtZW50czsKLSNlbmRpZgotCiAgICAgT3duUHRyPFN0eWxlU2NvcGVSZXNvbHZl
cj4gbV9zY29wZVJlc29sdmVyOwogICAgIENTU1RvU3R5bGVNYXAgbV9zdHlsZU1hcDsKICAgICBJ
bnNwZWN0b3JDU1NPTVdyYXBwZXJzIG1faW5zcGVjdG9yQ1NTT01XcmFwcGVyczsKIAorICAgIFN0
YXRlIG1fc3RhdGU7CisKICAgICBmcmllbmQgY2xhc3MgU3R5bGVCdWlsZGVyOwogICAgIGZyaWVu
ZCBib29sIG9wZXJhdG9yPT0oY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmLCBjb25zdCBNYXRjaGVk
UHJvcGVydGllcyYpOwogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgTWF0Y2hlZFBy
b3BlcnRpZXMmLCBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185933</attachid>
            <date>2013-01-31 21:14:44 -0800</date>
            <delta_ts>2013-02-03 18:32:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96421-20130201141127.patch</filename>
            <type>text/plain</type>
            <size>138603</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzhlNjYyNWUwM2Q4YThm
YjAxOGY5MzZhM2Y2NjZlNzBkZDQxOWI1MC4uODkwNmQ1MjA0NjQwMjY1YmNhMDI0ZDIxYWE0Njdj
YzA0NjNmMjZiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDEzLTAxLTMxICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBTcGxpdCBwZXItcmVz
b2x2ZSBsb2dpYyBvdXQgZnJvbSBTdHlsZVJlc29sdmVyLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY0MjEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCBjbGFzcyBTdHlsZVJlc29sdmVy
OjpTdGF0ZSBhbmQgYWRkZWQgbV9zdGF0ZSB0bworICAgICAgICBTdHlsZVJlc29sdmVyLiBBbGwg
bWVtYmVyIHZhcmlhYmxlcyB1c2VkIGZvciBwZXItcmVzb2x2ZSBsb2dpYyBhcmUKKyAgICAgICAg
bW92ZWQgaW50byB0aGUgc3RhdGUgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNh
dXNlIGp1c3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBjc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5
KToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24p
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hl
ZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0
aG9yUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5n
Q2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpt
YXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNo
VXNlclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxl
c0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRS
dWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRGb3JTdHlsZVJlc29sdmUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVT
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhD
b250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRh
dGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjphZGp1c3RSZW5kZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojp1cGRhdGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlQm9y
ZGVyQW5kQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1
ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpydWxlTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1Jl
Z2lvblNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0JyZWFkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlR3JpZFRyYWNrTWluTWF4KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRU
cmFja0dyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0xpc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTVkdEb2N1bWVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFk
ZXJGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRp
bmdTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9t
RmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6bG9hZFBlbmRpbmdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojpsb2FkUGVuZGluZ0ltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpy
ZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnJvb3RFbGVtZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250RGVzY3Jp
cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Wm9vbSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRFZmZlY3RpdmVab29tKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpoYXNQYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmFkZE1hdGNoZWRSdWxlKToKKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAg
ICAoU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OlN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlKToKKyAgICAgICAgQWRkZWQgIm1fc3RhdGUuIiB0byBhY2Nlc3Mg
bWVtYmVyIHZhcmlhYmxlcyB1c2VkIGZvciBwZXItcmVzb2x2ZSBsb2dpYy4KKwogMjAxMy0wMS0z
MSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVmYWN0b3Jp
bmc6IFJlbW92ZSB0aGUgZGVmYXVsdCBhcmd1bWVudCB2YWx1ZSBmb3IgTm9kZTo6c2V0Rm9jdXMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCA2MTQ1YmIx
ZjE2MjViOGZlNGQxNjc2MDdiYmJhOGJmZDlhMWIwMTE5Li5hYjU2ZjY2MTE3OTdmZDk0Nzc5NmY0
OGYzMTM5ZTc4MTNhOTdlODNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NT
U3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2Vs
ZWN0b3IuY3BwCkBAIC00OSw3ICs0OSw3IEBACiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUKHByb3As
IFByb3ApIFwKIGlmIChpc0luaGVyaXQpIFwKIHsgXAotICAgIHN2Z3N0eWxlLT5zZXQjI1Byb3Ao
bV9wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKS0+cHJvcCgpKTsgXAorICAgIHN2Z3N0eWxlLT5zZXQj
I1Byb3Aoc3RhdGUucGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnByb3AoKSk7IFwKICAgICByZXR1
cm47IFwKIH0KIApAQCAtMTA5LDEwICsxMDksMTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBpZiAo
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAotICAgIFNWR1JlbmRlclN0eWxl
KiBzdmdzdHlsZSA9IG1fc3R5bGUtPmFjY2Vzc1NWR1N0eWxlKCk7CisgICAgY29uc3QgU3RhdGUm
IHN0YXRlID0gbV9zdGF0ZTsKKyAgICBTVkdSZW5kZXJTdHlsZSogc3Znc3R5bGUgPSBzdGF0ZS5z
dHlsZS0+YWNjZXNzU1ZHU3R5bGUoKTsKIAotICAgIGJvb2wgaXNJbmhlcml0ID0gbV9wYXJlbnRO
b2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7Ci0gICAgYm9vbCBpc0luaXRpYWwgPSB2
YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAoIW1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhl
cml0ZWRWYWx1ZSgpKTsKKyAgICBib29sIGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVudE5vZGUgJiYg
dmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKKyAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5p
c0luaXRpYWxWYWx1ZSgpIHx8ICghc3RhdGUucGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0
ZWRWYWx1ZSgpKTsKIAogICAgIC8vIFdoYXQgZm9sbG93cyBpcyBhIGxpc3QgdGhhdCBtYXBzIHRo
ZSBDU1MgcHJvcGVydGllcyBpbnRvIHRoZWlyCiAgICAgLy8gY29ycmVzcG9uZGluZyBmcm9udC1l
bmQgUmVuZGVyU3R5bGUgdmFsdWVzLiBTaG9ydGhhbmRzKGUuZy4gYm9yZGVyLApAQCAtMjI5LDcg
KzIzMCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGaWxsOgog
ICAgICAgICB7CiAgICAgICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1BhcmVudFN0eWxlID0gbV9wYXJlbnRTdHlsZS0+c3Zn
U3R5bGUoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50
U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKTsKICAgICAgICAgICAgICAgICBz
dmdzdHlsZS0+c2V0RmlsbFBhaW50KHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRUeXBlKCksIHN2
Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50
VXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNp
dGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
QEAgLTIzOSwxNCArMjQwLDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkgewogICAgICAgICAgICAgICAgIFNWR1Bh
aW50KiBzdmdQYWludCA9IHN0YXRpY19jYXN0PFNWR1BhaW50Kj4odmFsdWUpOwotICAgICAgICAg
ICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xv
ckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBtX3N0eWxlLT5jb2xvcigpKSwgc3ZnUGFp
bnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRv
VmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBh
aW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdmdQ
YWludCwgc3RhdGUuc3R5bGUtPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVy
dHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVN0cm9rZToKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGlzSW5oZXJp
dCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQYXJlbnRTdHls
ZSA9IG1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgU1ZH
UmVuZGVyU3R5bGUqIHN2Z1BhcmVudFN0eWxlID0gc3RhdGUucGFyZW50U3R5bGUtPnN2Z1N0eWxl
KCk7CiAgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KHN2Z1BhcmVudFN0
eWxlLT5zdHJva2VQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50Q29sb3Io
KSwgc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50VXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTI1Niw3ICsyNTcsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR1BhaW50
KCkpIHsKICAgICAgICAgICAgICAgICBTVkdQYWludCogc3ZnUGFpbnQgPSBzdGF0aWNfY2FzdDxT
VkdQYWludCo+KHZhbHVlKTsKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFp
bnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1Bh
aW50LCBtX3N0eWxlLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAg
ICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgp
LCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5zdHlsZS0+Y29sb3Io
KSksIHN2Z1BhaW50LT51cmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5
UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtMzYzLDcgKzM2NCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAg
ICAgICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAg
ICAgICAgIHN2Z3N0eWxlLT5zZXRNYXJrZXJTdGFydFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6
ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkp
KTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXJrZXJTdGFydFJlc291cmNlKFNWR1VSSVJl
ZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVtZW50
LT5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5TWFya2VyTWlkOgpAQCAtMzc3LDcgKzM3OCw3IEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkK
ICAgICAgICAgICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAK
LSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXJrZXJNaWRSZXNvdXJjZShTVkdVUklSZWZlcmVu
Y2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVu
dCgpKSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFya2VyTWlkUmVzb3VyY2UoU1ZHVVJJ
UmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmVsZW1l
bnQtPmRvY3VtZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlNYXJrZXJFbmQ6CkBAIC0zOTEsNyArMzkyLDcgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJ
KQogICAgICAgICAgICAgICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsK
IAotICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hcmtlckVuZFJlc291cmNlKFNWR1VSSVJlZmVy
ZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBtX2VsZW1lbnQtPmRvY3Vt
ZW50KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXJrZXJFbmRSZXNvdXJjZShTVkdV
UklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZWxl
bWVudC0+ZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZUxpbmVjYXA6CkBAIC00MjgsNyArNDI5LDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFs
dWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbHRlclJlc291cmNlKFNWR1VSSVJl
ZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBtX2VsZW1lbnQtPmRv
Y3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWx0ZXJSZXNvdXJjZShTVkdV
UklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZWxl
bWVudC0+ZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eU1hc2s6CkBAIC00NDIsNyArNDQzLDcgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICAgICAgICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQog
ICAgICAgICAgICAgICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAot
ICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hc2tlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6
ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkp
KTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXNrZXJSZXNvdXJjZShTVkdVUklSZWZlcmVu
Y2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZWxlbWVudC0+ZG9j
dW1lbnQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUNsaXBQYXRoOgpAQCAtNDU2LDcgKzQ1Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAg
ICAgICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAg
ICAgICAgIHN2Z3N0eWxlLT5zZXRDbGlwcGVyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFn
bWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOwor
ICAgICAgICAgICAgc3Znc3R5bGUtPnNldENsaXBwZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6
OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZWxlbWVudC0+ZG9jdW1l
bnQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVRleHRBbmNob3I6CkBAIC00NzcsMTQgKzQ3OCwxNCBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgICAgICB7CiAgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChzdG9wQ29s
b3IsIFN0b3BDb2xvcik7CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHQ29sb3IoKSkKLSAg
ICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3RvcENvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NT
VmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSksIG1fc3R5bGUtPmNvbG9yKCkpKTsK
KyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3RvcENvbG9yKGNvbG9yRnJvbVNWR0NvbG9y
Q1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSksIHN0YXRlLnN0eWxlLT5jb2xv
cigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlMaWdodGluZ0NvbG9yOgogICAgICAgICB7CiAgICAgICAgICAgICBIQU5ETEVfSU5IRVJJ
VF9BTkRfSU5JVElBTChsaWdodGluZ0NvbG9yLCBMaWdodGluZ0NvbG9yKTsKICAgICAgICAgICAg
IGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRM
aWdodGluZ0NvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29s
b3IqPih2YWx1ZSksIG1fc3R5bGUtPmNvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHls
ZS0+c2V0TGlnaHRpbmdDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0
PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5zdHlsZS0+Y29sb3IoKSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZsb29kT3BhY2l0eToK
QEAgLTUwOSw3ICs1MTAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAg
ICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChmbG9vZENvbG9yLCBGbG9vZENvbG9yKTsKICAg
ICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAgICAgICAgIHN2Z3N0
eWxlLT5zZXRGbG9vZENvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8
U1ZHQ29sb3IqPih2YWx1ZSksIG1fc3R5bGUtPmNvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBz
dmdzdHlsZS0+c2V0Rmxvb2RDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19j
YXN0PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5zdHlsZS0+Y29sb3IoKSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUdseXBoT3JpZW50
YXRpb25Ib3Jpem9udGFsOgpAQCAtNTQ5LDcgKzU1MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFN2Z1NoYWRvdzog
ewogICAgICAgICAgICAgaWYgKGlzSW5oZXJpdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3Zn
c3R5bGUtPnNldFNoYWRvdyhhZG9wdFB0cihtX3BhcmVudFN0eWxlLT5zdmdTdHlsZSgpLT5zaGFk
b3coKSA/IG5ldyBTaGFkb3dEYXRhKCptX3BhcmVudFN0eWxlLT5zdmdTdHlsZSgpLT5zaGFkb3co
KSkgOiAwKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN2Z3N0eWxlLT5zZXRTaGFkb3coYWRv
cHRQdHIoc3RhdGUucGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRvdygpID8gbmV3IFNoYWRv
d0RhdGEoKnN0YXRlLnBhcmVudFN0eWxlLT5zdmdTdHlsZSgpLT5zaGFkb3coKSkgOiAwKSk7CiAg
ICAgICAgICAgICBpZiAoaXNJbml0aWFsIHx8IHByaW1pdGl2ZVZhbHVlKSAvLyBpbml0aWFsIHwg
bm9uZQogICAgICAgICAgICAgICAgIHJldHVybiBzdmdzdHlsZS0+c2V0U2hhZG93KG51bGxwdHIp
OwogCkBAIC01NjQsOSArNTY1LDkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICgh
Zmlyc3RWYWx1ZS0+aXNTaGFkb3dWYWx1ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIFNoYWRvd1ZhbHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8U2hhZG93VmFsdWUqPihm
aXJzdFZhbHVlKTsKLSAgICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uKGl0ZW0tPngtPmNvbXB1
dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1f
cm9vdEVsZW1lbnRTdHlsZSkpOwotICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8g
aXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHls
ZSkgOiAwOworICAgICAgICAgICAgSW50UG9pbnQgbG9jYXRpb24oaXRlbS0+eC0+Y29tcHV0ZUxl
bmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKSwKKyAg
ICAgICAgICAgICAgICBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUuZ2V0
KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpKTsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRl
bS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZS5nZXQo
KSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSkgOiAwOwogICAgICAgICAgICAgQ29sb3IgY29sb3I7
CiAgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCiAgICAgICAgICAgICAgICAgY29sb3IgPSBj
b2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAKaW5kZXggYWRjNmVhMzM5YzE5ZDY2MTRmZWQ0OGMxOGRhMDc3ZmZh
MGM3ZTY0MC4uZWQxYmE0Y2E3MTU0YjQ0ZjNlZDkxMzk3ZDY3ZmU4N2JmZDZkNzIxMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUg
IkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVz
LmgiCiAjaW5jbHVkZSAiQ1NTUmVmbGVjdFZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUnVsZUxpc3Qu
aCIKICNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5o
IgogI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgpAQCAtMjAwLDE0ICsxOTksMTQgQEAgdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKIAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9w
KSBcCiBpZiAoaXNJbmhlcml0KSB7IFwKLSAgICBtX3N0eWxlLT5zZXQjI1Byb3AobV9wYXJlbnRT
dHlsZS0+cHJvcCgpKTsgXAorICAgIG1fc3RhdGUuc3R5bGUtPnNldCMjUHJvcChtX3N0YXRlLnBh
cmVudFN0eWxlLT5wcm9wKCkpOyBcCiAgICAgcmV0dXJuOyBcCiB9CiAKICNkZWZpbmUgSEFORExF
X0lOSEVSSVRfQU5EX0lOSVRJQUwocHJvcCwgUHJvcCkgXAogSEFORExFX0lOSEVSSVQocHJvcCwg
UHJvcCkgXAogaWYgKGlzSW5pdGlhbCkgeyBcCi0gICAgbV9zdHlsZS0+c2V0IyNQcm9wKFJlbmRl
clN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBcCisgICAgbV9zdGF0ZS5zdHlsZS0+c2V0IyNQcm9w
KFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBcCiAgICAgcmV0dXJuOyBcCiB9CiAKQEAg
LTI2NywzNCArMjY2LDE2IEBAIHN0YXRpYyBTdHlsZVByb3BlcnR5U2V0KiByaWdodFRvTGVmdERl
Y2xhcmF0aW9uKCkKIAogCiBTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKERvY3VtZW50KiBk
b2N1bWVudCwgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAgOiBtX2hhc1VBQXBw
ZWFyYW5jZShmYWxzZSkKLSAgICAsIG1fYmFja2dyb3VuZERhdGEoQmFja2dyb3VuZEZpbGxMYXll
cikKLSAgICAsIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVw
KDApCisgICAgOiBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RTd2Vl
cCgwKQogICAgICwgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlU3dlZXBUaW1lcih0aGlzLCAmU3R5
bGVSZXNvbHZlcjo6c3dlZXBNYXRjaGVkUHJvcGVydGllc0NhY2hlKQogICAgICwgbV9kb2N1bWVu
dChkb2N1bWVudCkKICAgICAsIG1fc2VsZWN0b3JDaGVja2VyKGRvY3VtZW50KQotICAgICwgbV9w
YXJlbnRTdHlsZSgwKQotICAgICwgbV9yb290RWxlbWVudFN0eWxlKDApCi0gICAgLCBtX2VsZW1l
bnQoMCkKLSAgICAsIG1fc3R5bGVkRWxlbWVudCgwKQotICAgICwgbV9yZWdpb25Gb3JTdHlsaW5n
KDApCi0gICAgLCBtX2VsZW1lbnRMaW5rU3RhdGUoTm90SW5zaWRlTGluaykKLSAgICAsIG1fcGFy
ZW50Tm9kZSgwKQotICAgICwgbV9saW5lSGVpZ2h0VmFsdWUoMCkKLSAgICAsIG1fZm9udERpcnR5
KGZhbHNlKQogICAgICwgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMobWF0Y2hBdXRob3JBbmRV
c2VyU3R5bGVzKQotICAgICwgbV9zYW1lT3JpZ2luT25seShmYWxzZSkKLSAgICAsIG1fZGlzdHJp
YnV0ZWRUb0luc2VydGlvblBvaW50KGZhbHNlKQogICAgICwgbV9mb250U2VsZWN0b3IoQ1NTRm9u
dFNlbGVjdG9yOjpjcmVhdGUoZG9jdW1lbnQpKQogI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBU
QVRJT04pCiAgICAgLCBtX3ZpZXdwb3J0U3R5bGVSZXNvbHZlcihWaWV3cG9ydFN0eWxlUmVzb2x2
ZXI6OmNyZWF0ZShkb2N1bWVudCkpCiAjZW5kaWYKLSAgICAsIG1fYXBwbHlQcm9wZXJ0eVRvUmVn
dWxhclN0eWxlKHRydWUpCi0gICAgLCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUo
ZmFsc2UpCiAgICAgLCBtX3N0eWxlQnVpbGRlcihTdHlsZUJ1aWxkZXI6OnNoYXJlZFN0eWxlQnVp
bGRlcigpKQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAsIG1faGFzUGVuZGluZ1NoYWRl
cnMoZmFsc2UpCi0jZW5kaWYKICAgICAsIG1fc3R5bGVNYXAodGhpcykKIHsKICAgICBFbGVtZW50
KiByb290ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwpAQCAtNjU3LDIzICs2MzgsMjYg
QEAgYm9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6bV9tYXRjaGluZ1VBUnVsZXMgPSBmYWxzZTsK
IHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMoY29uc3QgTWF0Y2hSZXF1
ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQogewogICAgIEFTU0VSVCht
YXRjaFJlcXVlc3QucnVsZVNldCk7Ci0gICAgQVNTRVJUKG1fZWxlbWVudCk7CisgICAgQVNTRVJU
KG1fc3RhdGUuZWxlbWVudCk7CiAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHBzZXVkb0lkID0g
bV9lbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpOworICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7
CisgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRlLmVsZW1lbnQ7CisgICAgU3R5bGVkRWxlbWVu
dCogc3R5bGVkRWxlbWVudCA9IHN0YXRlLnN0eWxlZEVsZW1lbnQ7CisgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBwc2V1ZG9JZCA9IGVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCk7CiAgICAgaWYgKCFw
c2V1ZG9JZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgQVNTRVJUKG1fc3R5bGVkRWxlbWVudCk7Cisg
ICAgICAgIEFTU0VSVChzdHlsZWRFbGVtZW50KTsKICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVs
ZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMo
cHNldWRvSWQuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogICAgIH0KIAogI2lm
IEVOQUJMRShWSURFT19UUkFDSykKLSAgICBpZiAobV9lbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQo
KSkKKyAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkpCiAgICAgICAgIGNvbGxlY3RN
YXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+Y3VlUHNldWRvUnVsZXMo
KSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogI2VuZGlmCiAgICAgLy8gQ2hlY2sgd2hldGhl
ciBvdGhlciB0eXBlcyBvZiBydWxlcyBhcmUgYXBwbGljYWJsZSBpbiB0aGUgY3VycmVudCB0cmVl
IHNjb3BlLiBDcml0ZXJpYSBmb3IgdGhpczoKICAgICAvLyBhKSBpdCdzIGEgVUEgcnVsZQogICAg
IC8vIGIpIHRoZSB0cmVlIHNjb3BlIGFsbG93cyBhdXRob3IgcnVsZXMKICAgICAvLyBjKSB0aGUg
cnVsZXMgY29tZXMgZnJvbSBhIHNjb3BlZCBzdHlsZSBzaGVldCB3aXRoaW4gdGhlIHNhbWUgdHJl
ZSBzY29wZQotICAgIFRyZWVTY29wZSogdHJlZVNjb3BlID0gbV9lbGVtZW50LT50cmVlU2NvcGUo
KTsKKyAgICBUcmVlU2NvcGUqIHRyZWVTY29wZSA9IGVsZW1lbnQtPnRyZWVTY29wZSgpOwogICAg
IGlmICghTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKICAgICAgICAg
JiYgIXRyZWVTY29wZS0+YXBwbHlBdXRob3JTdHlsZXMoKQogICAgICAgICAmJiAoIW1hdGNoUmVx
dWVzdC5zY29wZSB8fCBtYXRjaFJlcXVlc3Quc2NvcGUtPnRyZWVTY29wZSgpICE9IHRyZWVTY29w
ZSkpCkBAIC02ODEsMzAgKzY2NSwzMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRj
aGluZ1J1bGVzKGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBSdWxlUgogCiAgICAg
Ly8gV2UgbmVlZCB0byBjb2xsZWN0IHRoZSBydWxlcyBmb3IgaWQsIGNsYXNzLCB0YWcsIGFuZCBl
dmVyeXRoaW5nIGVsc2UgaW50byBhIGJ1ZmZlciBhbmQKICAgICAvLyB0aGVuIHNvcnQgdGhlIGJ1
ZmZlci4KLSAgICBpZiAobV9lbGVtZW50LT5oYXNJRCgpKQotICAgICAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmlkUnVsZXMobV9lbGVtZW50LT5p
ZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsK
LSAgICBpZiAobV9zdHlsZWRFbGVtZW50ICYmIG1fc3R5bGVkRWxlbWVudC0+aGFzQ2xhc3MoKSkg
ewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3R5bGVkRWxlbWVudC0+Y2xhc3NO
YW1lcygpLnNpemUoKTsgKytpKQotICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JM
aXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5jbGFzc1J1bGVzKG1fc3R5bGVkRWxlbWVudC0+Y2xh
c3NOYW1lcygpW2ldLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBpZiAo
ZWxlbWVudC0+aGFzSUQoKSkKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1h
dGNoUmVxdWVzdC5ydWxlU2V0LT5pZFJ1bGVzKGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9u
KCkuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGlmIChzdHlsZWRFbGVt
ZW50ICYmIHN0eWxlZEVsZW1lbnQtPmhhc0NsYXNzKCkpIHsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKCkuc2l6ZSgpOyArK2kpCisgICAg
ICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQt
PmNsYXNzUnVsZXMoc3R5bGVkRWxlbWVudC0+Y2xhc3NOYW1lcygpW2ldLmltcGwoKSksIG1hdGNo
UmVxdWVzdCwgcnVsZVJhbmdlKTsKICAgICB9CiAKLSAgICBpZiAobV9lbGVtZW50LT5pc0xpbmso
KSkKKyAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkpCiAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+bGlua1BzZXVkb0NsYXNzUnVsZXMoKSwg
bWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgIGlmIChtX3NlbGVjdG9yQ2hlY2tlci5tYXRj
aGVzRm9jdXNQc2V1ZG9DbGFzcyhtX2VsZW1lbnQpKQorICAgIGlmIChtX3NlbGVjdG9yQ2hlY2tl
ci5tYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhlbGVtZW50KSkKICAgICAgICAgY29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5mb2N1c1BzZXVkb0NsYXNzUnVs
ZXMoKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+dGFnUnVsZXMobV9lbGVtZW50LT5sb2NhbE5h
bWUoKS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgY29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT50YWdSdWxlcyhlbGVtZW50LT5s
b2NhbE5hbWUoKS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CiAgICAgY29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT51bml2ZXJzYWxSdWxl
cygpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6
Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJl
cXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQogewotICAgIGlmICghbV9yZWdpb25Gb3JTdHls
aW5nKQorICAgIGlmICghbV9zdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKQogICAgICAgICByZXR1cm47
CiAKICAgICB1bnNpZ25lZCBzaXplID0gbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPm1fcmVnaW9uU2Vs
ZWN0b3JzQW5kUnVsZVNldHMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKICAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yID0g
bWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSku
c2VsZWN0b3I7Ci0gICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKHJlZ2lvblNlbGVjdG9y
LCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9yZWdpb25Gb3JTdHlsaW5nLT5ub2RlKCkpKSkgewor
ICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihyZWdpb25TZWxlY3Rvciwgc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG1fc3RhdGUucmVnaW9uRm9yU3R5bGluZy0+bm9kZSgpKSkpIHsKICAgICAg
ICAgICAgIFJ1bGVTZXQqIHJlZ2lvblJ1bGVzID0gbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPm1fcmVn
aW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNldC5nZXQoKTsKICAgICAgICAgICAg
IEFTU0VSVChyZWdpb25SdWxlcyk7CiAgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhN
YXRjaFJlcXVlc3QocmVnaW9uUnVsZXMsIG1hdGNoUmVxdWVzdC5pbmNsdWRlRW1wdHlSdWxlcywg
bWF0Y2hSZXF1ZXN0LnNjb3BlKSwgcnVsZVJhbmdlKTsKQEAgLTcxNCwyNCArNjk4LDI1IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oY29uc3QgTWF0
Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlCiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5z
ZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiB7Ci0gICAgaWYgKG1fbWF0Y2hl
ZFJ1bGVzLmlzRW1wdHkoKSkKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworICAgIGlmIChz
dGF0ZS5tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBzb3J0
TWF0Y2hlZFJ1bGVzKCk7CiAKICAgICBpZiAobV9zZWxlY3RvckNoZWNrZXIubW9kZSgpID09IFNl
bGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7Ci0gICAgICAgIGlmICghbV9ydWxlTGlz
dCkKLSAgICAgICAgICAgIG1fcnVsZUxpc3QgPSBTdGF0aWNDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgIG1fcnVsZUxpc3QtPnJ1bGVzKCkuYXBwZW5kKG1fbWF0Y2hlZFJ1
bGVzW2ldLT5ydWxlKCktPmNyZWF0ZUNTU09NV3JhcHBlcigpKTsKKyAgICAgICAgaWYgKCFzdGF0
ZS5ydWxlTGlzdCkKKyAgICAgICAgICAgIHN0YXRlLnJ1bGVMaXN0ID0gU3RhdGljQ1NTUnVsZUxp
c3Q6OmNyZWF0ZSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUubWF0
Y2hlZFJ1bGVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgc3RhdGUucnVsZUxpc3QtPnJ1bGVz
KCkuYXBwZW5kKHN0YXRlLm1hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5jcmVhdGVDU1NPTVdyYXBw
ZXIoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBOb3cgdHJhbnNmZXIgdGhl
IHNldCBvZiBtYXRjaGVkIHJ1bGVzIG92ZXIgdG8gb3VyIGxpc3Qgb2YgZGVjbGFyYXRpb25zLgot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykg
ewotICAgICAgICBpZiAobV9zdHlsZSAmJiBtX21hdGNoZWRSdWxlc1tpXS0+Y29udGFpbnNVbmNv
bW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRVbmlxdWUo
KTsKLSAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCBtX21hdGNoZWRSdWxlc1tp
XS0+cnVsZSgpLT5wcm9wZXJ0aWVzKCksIG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCksIG1fbWF0
Y2hlZFJ1bGVzW2ldLT5saW5rTWF0Y2hUeXBlKCksIG1fbWF0Y2hlZFJ1bGVzW2ldLT5wcm9wZXJ0
eVdoaXRlbGlzdFR5cGUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLm1h
dGNoZWRSdWxlcy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoc3RhdGUuc3R5bGUgJiYgc3Rh
dGUubWF0Y2hlZFJ1bGVzW2ldLT5jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgYWRkTWF0Y2hl
ZFByb3BlcnRpZXMocmVzdWx0LCBzdGF0ZS5tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+cHJvcGVy
dGllcygpLCBzdGF0ZS5tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKSwgc3RhdGUubWF0Y2hlZFJ1bGVz
W2ldLT5saW5rTWF0Y2hUeXBlKCksIHN0YXRlLm1hdGNoZWRSdWxlc1tpXS0+cHJvcGVydHlXaGl0
ZWxpc3RUeXBlKCkpOwogICAgIH0KIH0KIApAQCAtNzQyLDEyICs3MjcsMTIgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJv
b2wgaW5jbHVkZUVtcHQKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gTWF0Y2ggc2NvcGVkIGF1
dGhvciBydWxlcyBieSB0cmF2ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVudCBzdGFjayAocmVidWls
ZCBpdCBpZiBpdCBnb3QgaW5jb25zaXN0ZW50KS4KLSAgICBpZiAobV9zY29wZVJlc29sdmVyLT5o
YXNTY29wZWRTdHlsZXMoKSAmJiBtX3Njb3BlUmVzb2x2ZXItPmVuc3VyZVN0YWNrQ29uc2lzdGVu
Y3kobV9lbGVtZW50KSkgewotICAgICAgICBib29sIGFwcGx5QXV0aG9yU3R5bGVzID0gbV9lbGVt
ZW50LT50cmVlU2NvcGUoKS0+YXBwbHlBdXRob3JTdHlsZXMoKTsKKyAgICBpZiAobV9zY29wZVJl
c29sdmVyLT5oYXNTY29wZWRTdHlsZXMoKSAmJiBtX3Njb3BlUmVzb2x2ZXItPmVuc3VyZVN0YWNr
Q29uc2lzdGVuY3kobV9zdGF0ZS5lbGVtZW50KSkgeworICAgICAgICBib29sIGFwcGx5QXV0aG9y
U3R5bGVzID0gbV9zdGF0ZS5lbGVtZW50LT50cmVlU2NvcGUoKS0+YXBwbHlBdXRob3JTdHlsZXMo
KTsKICAgICAgICAgYm9vbCBkb2N1bWVudFNjb3BlID0gdHJ1ZTsKICAgICAgICAgdW5zaWduZWQg
c2NvcGVTaXplID0gbV9zY29wZVJlc29sdmVyLT5zdGFja1NpemUoKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNjb3BlU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBtX21hdGNo
ZWRSdWxlcy5jbGVhcigpOworICAgICAgICAgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuY2xlYXIo
KTsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0
Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKIAogICAgICAgICAgICAgY29uc3QgU3R5bGVTY29w
ZVJlc29sdmVyOjpTdGFja0ZyYW1lJiBmcmFtZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tGcmFt
ZUF0KGkpOwpAQCAtNzc4LDcgKzc2Myw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29w
ZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0CiBpbmxp
bmUgYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1
bGVzKCkKIHsKICNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKLSAgICByZXR1cm4gbV9zY29wZVJlc29s
dmVyICYmIG1fc2NvcGVSZXNvbHZlci0+c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RS
dWxlcyhtX2VsZW1lbnQpOworICAgIHJldHVybiBtX3Njb3BlUmVzb2x2ZXIgJiYgbV9zY29wZVJl
c29sdmVyLT5zdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKG1fc3RhdGUuZWxl
bWVudCk7CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgpAQCAtNzg5LDE3ICs3NzQs
MTcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYgcmVz
dWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogI2lmIEVOQUJMRShTSEFET1dfRE9NKQogICAg
IEFTU0VSVChtX3Njb3BlUmVzb2x2ZXIpOwogCi0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsK
KyAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOwogICAgIHJlc3VsdC5yYW5nZXMubGFz
dEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKIAogICAg
IFZlY3RvcjxSdWxlU2V0Kj4gbWF0Y2hlZFJ1bGVzOwotICAgIG1fc2NvcGVSZXNvbHZlci0+bWF0
Y2hIb3N0UnVsZXMobV9lbGVtZW50LCBtYXRjaGVkUnVsZXMpOworICAgIG1fc2NvcGVSZXNvbHZl
ci0+bWF0Y2hIb3N0UnVsZXMobV9zdGF0ZS5lbGVtZW50LCBtYXRjaGVkUnVsZXMpOwogICAgIGlm
IChtYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpID4gMDsgLS1pKSB7CiAgICAgICAgIFJ1
bGVSYW5nZSBydWxlUmFuZ2UgPSByZXN1bHQucmFuZ2VzLmF1dGhvclJ1bGVSYW5nZSgpOwotICAg
ICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QobWF0Y2hlZFJ1bGVzLmF0KGkt
MSksIGluY2x1ZGVFbXB0eVJ1bGVzLCBtX2VsZW1lbnQpLCBydWxlUmFuZ2UpOworICAgICAgICBj
b2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QobWF0Y2hlZFJ1bGVzLmF0KGktMSksIGlu
Y2x1ZGVFbXB0eVJ1bGVzLCBtX3N0YXRlLmVsZW1lbnQpLCBydWxlUmFuZ2UpOwogICAgIH0KICAg
ICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKICNlbHNlCkBAIC04MTAsMTAg
Kzc5NSwxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0
JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6
bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1
bGVzKQogewotICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5tYXRjaGVk
UnVsZXMuY2xlYXIoKTsKICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0
Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKLSAgICBpZiAoIW1fZWxlbWVudCkKKyAg
ICBpZiAoIW1fc3RhdGUuZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gTWF0Y2gg
Z2xvYmFsIGF1dGhvciBydWxlcy4KQEAgLTgzMSw3ICs4MTYsNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6Om1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5
UnVsZXMpCiAgICAgaWYgKCFtX3VzZXJTdHlsZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuY2xlYXIo
KTsKIAogICAgIHJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9w
ZXJ0aWVzLnNpemUoKSAtIDE7CiAgICAgTWF0Y2hSZXF1ZXN0IG1hdGNoUmVxdWVzdChtX3VzZXJT
dHlsZS5nZXQoKSwgaW5jbHVkZUVtcHR5UnVsZXMpOwpAQCAtODQ0LDcgKzgyOSw3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBp
bmNsdWRlRW1wdHlSdWxlcykKIAogdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVBUnVsZXMoTWF0
Y2hSZXN1bHQmIHJlc3VsdCwgUnVsZVNldCogcnVsZXMpCiB7Ci0gICAgbV9tYXRjaGVkUnVsZXMu
Y2xlYXIoKTsKKyAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOwogICAgIAogICAgIHJl
c3VsdC5yYW5nZXMubGFzdFVBUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkg
LSAxOwogICAgIFJ1bGVSYW5nZSBydWxlUmFuZ2UgPSByZXN1bHQucmFuZ2VzLlVBUnVsZVJhbmdl
KCk7CkBAIC04NTgsOSArODQzLDEwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBjCiAgICAgaWYg
KCFydWxlcykKICAgICAgICAgcmV0dXJuOwogCisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsK
ICAgICAvLyBJbiBzb21lIGNhc2VzIHdlIG1heSBlbmQgdXAgbG9va2luZyB1cCBzdHlsZSBmb3Ig
cmFuZG9tIGVsZW1lbnRzIGluIHRoZSBtaWRkbGUgb2YgYSByZWN1cnNpdmUgdHJlZSByZXNvbHZl
LgogICAgIC8vIEFuY2VzdG9yIGlkZW50aWZpZXIgZmlsdGVyIHdvbid0IGJlIHVwLXRvLWRhdGUg
aW4gdGhhdCBjYXNlIGFuZCB3ZSBjYW4ndCB1c2UgdGhlIGZhc3QgcGF0aC4KLSAgICBib29sIGNh
blVzZUZhc3RSZWplY3QgPSBtX3NlbGVjdG9yRmlsdGVyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50
KG1fcGFyZW50Tm9kZSk7CisgICAgYm9vbCBjYW5Vc2VGYXN0UmVqZWN0ID0gbV9zZWxlY3RvckZp
bHRlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChzdGF0ZS5wYXJlbnROb2RlKTsKIAogICAgIHVu
c2lnbmVkIHNpemUgPSBydWxlcy0+c2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKQEAgLTg3OCwxOSArODY0LDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVz
LCBjCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAvLyBGSVhNRTogRXhwb3NpbmcgdGhlIG5vbi1zdGFuZGFyZCBnZXRNYXRjaGVkQ1NTUnVsZXMg
QVBJIHRvIHdlYiBpcyB0aGUgb25seSByZWFzb24gdGhpcyBpcyBuZWVkZWQuCi0gICAgICAgICAg
ICBpZiAobV9zYW1lT3JpZ2luT25seSAmJiAhcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbigpKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUuc2FtZU9yaWdpbk9ubHkgJiYgIXJ1bGVE
YXRhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSkgewogICAgICAgICAgICAgICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOwogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gSWYgd2Un
cmUgbWF0Y2hpbmcgbm9ybWFsIHJ1bGVzLCBzZXQgYSBwc2V1ZG8gYml0IGlmCiAgICAgICAgICAg
ICAvLyB3ZSByZWFsbHkganVzdCBtYXRjaGVkIGEgcHNldWRvLWVsZW1lbnQuCi0gICAgICAgICAg
ICBpZiAobV9keW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIG1fcHNldWRvU3R5bGUgPT0gTk9Q
U0VVRE8pIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5keW5hbWljUHNldWRvICE9IE5PUFNFVURP
ICYmIHN0YXRlLnBzZXVkb1N0eWxlID09IE5PUFNFVURPKSB7CiAgICAgICAgICAgICAgICAgaWYg
KG1fc2VsZWN0b3JDaGVja2VyLm1vZGUoKSA9PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdS
dWxlcykgewogICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChtX2R5bmFtaWNQc2V1ZG8g
PCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0SGFzUHNldWRvU3R5bGUobV9keW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgICAgICBpZiAo
c3RhdGUuZHluYW1pY1BzZXVkbyA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEKQorICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0SGFzUHNldWRvU3R5bGUoc3RhdGUuZHluYW1pY1Bz
ZXVkbyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBv
dXIgZmlyc3QvbGFzdCBydWxlIGluZGljZXMgaW4gdGhlIG1hdGNoZWQgcnVsZXMgYXJyYXkuCiAg
ICAgICAgICAgICAgICAgKytydWxlUmFuZ2UubGFzdFJ1bGVJbmRleDsKQEAgLTkxNiw3ICs5MDIs
NyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVJ1bGVzKGNvbnN0IFJ1bGVEYXRhKiByMSwg
Y29uc3QgUnVsZURhdGEqIHIyKQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRNYXRjaGVkUnVs
ZXMoKQogewotICAgIHN0ZDo6c29ydChtX21hdGNoZWRSdWxlcy5iZWdpbigpLCBtX21hdGNoZWRS
dWxlcy5lbmQoKSwgY29tcGFyZVJ1bGVzKTsKKyAgICBzdGQ6OnNvcnQobV9zdGF0ZS5tYXRjaGVk
UnVsZXMuYmVnaW4oKSwgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuZW5kKCksIGNvbXBhcmVSdWxlcyk7
CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYgcmVz
dWx0LCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGllcykKQEAgLTkyNiwxOSArOTEyLDE5IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29s
IGluY2x1ZGVTTUlMUHJvcGVydGllCiAgICAgLy8gTm93IHdlIGNoZWNrIHVzZXIgc2hlZXQgcnVs
ZXMuCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQogICAgICAgICBtYXRjaFVz
ZXJSdWxlcyhyZXN1bHQsIGZhbHNlKTsKLSAgICAgICAgCisKICAgICAvLyBOb3cgY2hlY2sgYXV0
aG9yIHJ1bGVzLCBiZWdpbm5pbmcgZmlyc3Qgd2l0aCBwcmVzZW50YXRpb25hbCBhdHRyaWJ1dGVz
IG1hcHBlZCBmcm9tIEhUTUwuCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudCkgewotICAgICAgICBh
ZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdHlsZWRFbGVtZW50LT5wcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKKyAgICBpZiAobV9zdGF0ZS5zdHlsZWRFbGVtZW50KSB7
CisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0YXRlLnN0eWxl
ZEVsZW1lbnQtPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOwogCiAgICAgICAgIC8vIE5v
dyB3ZSBjaGVjayBhZGRpdGlvbmFsIG1hcHBlZCBkZWNsYXJhdGlvbnMuCiAgICAgICAgIC8vIFRh
YmxlcyBhbmQgdGFibGUgY2VsbHMgc2hhcmUgYW4gYWRkaXRpb25hbCBtYXBwZWQgcnVsZSB0aGF0
IG11c3QgYmUgYXBwbGllZAogICAgICAgICAvLyBhZnRlciBhbGwgYXR0cmlidXRlcywgc2luY2Ug
dGhlaXIgbWFwcGVkIHN0eWxlIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBvZiBtdWx0aXBsZSBhdHRy
aWJ1dGVzLgotICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdHls
ZWRFbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CisgICAg
ICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0YXRlLnN0eWxlZEVsZW1l
bnQtPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKIAotICAgICAgICBp
ZiAobV9zdHlsZWRFbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKG1fc3Rh
dGUuc3R5bGVkRWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKSB7CiAgICAgICAgICAgICBib29sIGlz
QXV0bzsKLSAgICAgICAgICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IHRvSFRNTEVs
ZW1lbnQobV9zdHlsZWRFbGVtZW50KS0+ZGlyZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1
dGUoaXNBdXRvKTsKKyAgICAgICAgICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IHRv
SFRNTEVsZW1lbnQobV9zdGF0ZS5zdHlsZWRFbGVtZW50KS0+ZGlyZWN0aW9uYWxpdHlJZmhhc0Rp
ckF1dG9BdHRyaWJ1dGUoaXNBdXRvKTsKICAgICAgICAgICAgIGlmIChpc0F1dG8pCiAgICAgICAg
ICAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCB0ZXh0RGlyZWN0aW9uID09IExU
UiA/IGxlZnRUb1JpZ2h0RGVjbGFyYXRpb24oKSA6IHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKSk7
CiAgICAgICAgIH0KQEAgLTk0OSwxOCArOTM1LDE4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0
Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGll
CiAgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMocmVzdWx0LCBmYWxzZSk7CiAKICAgICAvLyBOb3cg
Y2hlY2sgb3VyIGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCi0gICAgaWYgKG1fbWF0Y2hBdXRob3JB
bmRVc2VyU3R5bGVzICYmIG1fc3R5bGVkRWxlbWVudCAmJiBtX3N0eWxlZEVsZW1lbnQtPmlubGlu
ZVN0eWxlKCkpIHsKKyAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdGF0
ZS5zdHlsZWRFbGVtZW50ICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSkg
ewogICAgICAgICAvLyBJbmxpbmUgc3R5bGUgaXMgaW1tdXRhYmxlIGFzIGxvbmcgYXMgdGhlcmUg
aXMgbm8gQ1NTT00gd3JhcHBlci4KICAgICAgICAgLy8gRklYTUU6IE1lZGlhIGNvbnRyb2wgc2hh
ZG93IHRyZWVzIHNlZW0gdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIGNhY2hpbmcuCi0gICAgICAgIGJv
b2wgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSA9ICFtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxl
KCktPmlzTXV0YWJsZSgpICYmICFtX3N0eWxlZEVsZW1lbnQtPmlzSW5TaGFkb3dUcmVlKCk7Cisg
ICAgICAgIGJvb2wgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSA9ICFtX3N0YXRlLnN0eWxlZEVsZW1l
bnQtPmlubGluZVN0eWxlKCktPmlzTXV0YWJsZSgpICYmICFtX3N0YXRlLnN0eWxlZEVsZW1lbnQt
PmlzSW5TaGFkb3dUcmVlKCk7CiAgICAgICAgIC8vIEZJWE1FOiBDb25zdGlmeS4KLSAgICAgICAg
YWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3R5bGVkRWxlbWVudC0+aW5saW5l
U3R5bGUoKSwgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSk7CisgICAgICAgIGFkZEVsZW1lbnRTdHls
ZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0YXRlLnN0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCks
IGlzSW5saW5lU3R5bGVDYWNoZWFibGUpOwogICAgIH0KIAogI2lmIEVOQUJMRShTVkcpCiAgICAg
Ly8gTm93IGNoZWNrIFNNSUwgYW5pbWF0aW9uIG92ZXJyaWRlIHN0eWxlLgotICAgIGlmIChpbmNs
dWRlU01JTFByb3BlcnRpZXMgJiYgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdHls
ZWRFbGVtZW50ICYmIG1fc3R5bGVkRWxlbWVudC0+aXNTVkdFbGVtZW50KCkpCi0gICAgICAgIGFk
ZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4o
bV9zdHlsZWRFbGVtZW50KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCksIGZhbHNlIC8q
IGlzQ2FjaGVhYmxlICovKTsKKyAgICBpZiAoaW5jbHVkZVNNSUxQcm9wZXJ0aWVzICYmIG1fbWF0
Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVudCAmJiBtX3N0YXRl
LnN0eWxlZEVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKQorICAgICAgICBhZGRFbGVtZW50U3R5bGVQ
cm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3RhdGUuc3R5bGVk
RWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpLCBmYWxzZSAvKiBpc0NhY2hl
YWJsZSAqLyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlU01JTFByb3BlcnRpZXMp
OwogI2VuZGlmCkBAIC05NzcsMTAgKzk2MywxMCBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNsYXNz
TmFtZXNBZmZlY3RlZEJ5UnVsZXMoY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NOYW1lcwog
CiBpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0RWxlbWVudChFbGVtZW50KiBlKQogewot
ICAgIGlmIChtX2VsZW1lbnQgIT0gZSkgewotICAgICAgICBtX2VsZW1lbnQgPSBlOwotICAgICAg
ICBtX3N0eWxlZEVsZW1lbnQgPSBtX2VsZW1lbnQgJiYgbV9lbGVtZW50LT5pc1N0eWxlZEVsZW1l
bnQoKSA/IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihtX2VsZW1lbnQpIDogMDsKLSAgICAg
ICAgbV9lbGVtZW50TGlua1N0YXRlID0gZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtTdGF0ZSgpLT5k
ZXRlcm1pbmVMaW5rU3RhdGUobV9lbGVtZW50KTsKKyAgICBpZiAobV9zdGF0ZS5lbGVtZW50ICE9
IGUpIHsKKyAgICAgICAgbV9zdGF0ZS5lbGVtZW50ID0gZTsKKyAgICAgICAgbV9zdGF0ZS5zdHls
ZWRFbGVtZW50ID0gbV9zdGF0ZS5lbGVtZW50ICYmIG1fc3RhdGUuZWxlbWVudC0+aXNTdHlsZWRF
bGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obV9zdGF0ZS5lbGVtZW50KSA6
IDA7CisgICAgICAgIG1fc3RhdGUuZWxlbWVudExpbmtTdGF0ZSA9IGRvY3VtZW50KCktPnZpc2l0
ZWRMaW5rU3RhdGUoKS0+ZGV0ZXJtaW5lTGlua1N0YXRlKGUpOwogICAgICAgICBpZiAoZSAmJiBl
ID09IGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICBlLT5k
b2N1bWVudCgpLT5zZXREaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudChmYWxzZSk7CiAgICAg
ICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50
KGZhbHNlKTsKQEAgLTk5MCwzMiArOTc2LDMzIEBAIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmluaXRFbGVtZW50KEVsZW1lbnQqIGUpCiAKIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6Omlu
aXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBQ
c2V1ZG9JZCBwc2V1ZG9JRCkKIHsKLSAgICBtX3BzZXVkb1N0eWxlID0gcHNldWRvSUQ7CisgICAg
U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKyAgICBzdGF0ZS5wc2V1ZG9TdHlsZSA9IHBzZXVkb0lE
OwogCiAgICAgaWYgKGUpIHsKICAgICAgICAgTm9kZVJlbmRlcmluZ0NvbnRleHQgY29udGV4dChl
KTsKLSAgICAgICAgbV9wYXJlbnROb2RlID0gY29udGV4dC5wYXJlbnROb2RlRm9yUmVuZGVyaW5n
QW5kU3R5bGUoKTsKLSAgICAgICAgbV9wYXJlbnRTdHlsZSA9IGNvbnRleHQucmVzZXRTdHlsZUlu
aGVyaXRhbmNlKCkgPyAwIDoKKyAgICAgICAgc3RhdGUucGFyZW50Tm9kZSA9IGNvbnRleHQucGFy
ZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlKCk7CisgICAgICAgIHN0YXRlLnBhcmVudFN0eWxl
ID0gY29udGV4dC5yZXNldFN0eWxlSW5oZXJpdGFuY2UoKSA/IDAgOgogICAgICAgICAgICAgcGFy
ZW50U3R5bGUgPyBwYXJlbnRTdHlsZSA6Ci0gICAgICAgICAgICBtX3BhcmVudE5vZGUgPyBtX3Bh
cmVudE5vZGUtPnJlbmRlclN0eWxlKCkgOiAwOwotICAgICAgICBtX2Rpc3RyaWJ1dGVkVG9JbnNl
cnRpb25Qb2ludCA9IGNvbnRleHQuaW5zZXJ0aW9uUG9pbnQoKTsKKyAgICAgICAgICAgIHN0YXRl
LnBhcmVudE5vZGUgPyBzdGF0ZS5wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMDsKKyAgICAg
ICAgc3RhdGUuZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50ID0gY29udGV4dC5pbnNlcnRpb25Q
b2ludCgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fcGFyZW50Tm9kZSA9IDA7Ci0gICAgICAg
IG1fcGFyZW50U3R5bGUgPSBwYXJlbnRTdHlsZTsKLSAgICAgICAgbV9kaXN0cmlidXRlZFRvSW5z
ZXJ0aW9uUG9pbnQgPSBmYWxzZTsKKyAgICAgICAgc3RhdGUucGFyZW50Tm9kZSA9IDA7CisgICAg
ICAgIHN0YXRlLnBhcmVudFN0eWxlID0gcGFyZW50U3R5bGU7CisgICAgICAgIHN0YXRlLmRpc3Ry
aWJ1dGVkVG9JbnNlcnRpb25Qb2ludCA9IGZhbHNlOwogICAgIH0KIAogICAgIE5vZGUqIGRvY0Vs
ZW1lbnQgPSBlID8gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgOiAwOwogICAgIFJl
bmRlclN0eWxlKiBkb2NTdHlsZSA9IGRvY3VtZW50KCktPnJlbmRlclN0eWxlKCk7Ci0gICAgbV9y
b290RWxlbWVudFN0eWxlID0gZG9jRWxlbWVudCAmJiBlICE9IGRvY0VsZW1lbnQgPyBkb2NFbGVt
ZW50LT5yZW5kZXJTdHlsZSgpIDogZG9jU3R5bGU7CisgICAgc3RhdGUucm9vdEVsZW1lbnRTdHls
ZSA9IGRvY0VsZW1lbnQgJiYgZSAhPSBkb2NFbGVtZW50ID8gZG9jRWxlbWVudC0+cmVuZGVyU3R5
bGUoKSA6IGRvY1N0eWxlOwogCi0gICAgbV9zdHlsZSA9IDA7CisgICAgc3RhdGUuc3R5bGUgPSAw
OwogCi0gICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmNsZWFyKCk7CisgICAgc3RhdGUucGVu
ZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigpOwogCi0gICAgbV9ydWxlTGlzdCA9IDA7CisgICAg
c3RhdGUucnVsZUxpc3QgPSAwOwogCi0gICAgbV9mb250RGlydHkgPSBmYWxzZTsKKyAgICBzdGF0
ZS5mb250RGlydHkgPSBmYWxzZTsKIH0KIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNTdHlsZVNl
YXJjaFRocmVzaG9sZCA9IDEwOwpAQCAtMTA3OCwyMyArMTA2NSwyNCBAQCBib29sIFN0eWxlUmVz
b2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqIHJ1bGVT
ZXQpCiB7CiAgICAgaWYgKCFydWxlU2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9t
YXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOwog
CiAgICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlNoYXJpbmdS
dWxlcyk7CiAgICAgaW50IGZpcnN0UnVsZUluZGV4ID0gLTEsIGxhc3RSdWxlSW5kZXggPSAtMTsK
ICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlKGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsK
ICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QocnVsZVNldCksIHJ1bGVSYW5n
ZSk7CiAgICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlJlc29s
dmluZ1N0eWxlKTsKLSAgICBpZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgIGlmICht
X3N0YXRlLm1hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzLmNsZWFy
KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVT
dHlsZVdpdGhDb250cm9sKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CisgICAgY29u
c3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiB0aGlzSW5w
dXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBIVE1MSW5wdXRFbGVt
ZW50KiBvdGhlcklucHV0RWxlbWVudCA9IG1fZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKKyAg
ICBIVE1MSW5wdXRFbGVtZW50KiBvdGhlcklucHV0RWxlbWVudCA9IHN0YXRlLmVsZW1lbnQtPnRv
SW5wdXRFbGVtZW50KCk7CiAKICAgICBpZiAoIXRoaXNJbnB1dEVsZW1lbnQgfHwgIW90aGVySW5w
dXRFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTE1LDI1ICsxMTAzLDI1IEBA
IGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKFN0eWxlZEVsZW1l
bnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQtPmlzUmVxdWlyZWQo
KSAhPSBvdGhlcklucHV0RWxlbWVudC0+aXNSZXF1aXJlZCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSAhPSBtX2VsZW1l
bnQtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkpCisgICAgaWYgKGVsZW1lbnQtPmlzRW5hYmxlZEZv
cm1Db250cm9sKCkgIT0gc3RhdGUuZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZv
ckZvcm0oKSAhPSBtX2VsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSkKKyAgICBpZiAo
ZWxlbWVudC0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpICE9IHN0YXRlLmVsZW1lbnQtPmlzRGVm
YXVsdEJ1dHRvbkZvckZvcm0oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1f
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKSkgeworICAg
IGlmIChzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5jb250YWluc1ZhbGlkaXR5U3R5bGVSdWxl
cygpKSB7CiAgICAgICAgIGJvb2wgd2lsbFZhbGlkYXRlID0gZWxlbWVudC0+d2lsbFZhbGlkYXRl
KCk7CiAKLSAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAhPSBtX2VsZW1lbnQtPndpbGxWYWxpZGF0
ZSgpKQorICAgICAgICBpZiAod2lsbFZhbGlkYXRlICE9IHN0YXRlLmVsZW1lbnQtPndpbGxWYWxp
ZGF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmICh3aWxsVmFs
aWRhdGUgJiYgKGVsZW1lbnQtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSAhPSBtX2VsZW1l
bnQtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkpCisgICAgICAgIGlmICh3aWxsVmFsaWRh
dGUgJiYgKGVsZW1lbnQtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSAhPSBzdGF0ZS5lbGVt
ZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgIGlmIChlbGVtZW50LT5pc0luUmFuZ2UoKSAhPSBtX2VsZW1lbnQtPmlz
SW5SYW5nZSgpKQorICAgICAgICBpZiAoZWxlbWVudC0+aXNJblJhbmdlKCkgIT0gc3RhdGUuZWxl
bWVudC0+aXNJblJhbmdlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAg
aWYgKGVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpICE9IG1fZWxlbWVudC0+aXNPdXRPZlJhbmdlKCkp
CisgICAgICAgIGlmIChlbGVtZW50LT5pc091dE9mUmFuZ2UoKSAhPSBzdGF0ZS5lbGVtZW50LT5p
c091dE9mUmFuZ2UoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTEx
NDgsMjUgKzExMzYsMjYgQEAgc3RhdGljIGlubGluZSBib29sIGVsZW1lbnRIYXNEaXJlY3Rpb25B
dXRvKEVsZW1lbnQqIGVsZW1lbnQpCiAKIGJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRp
ZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFbGVtZW50KiBz
aGFyaW5nQ2FuZGlkYXRlKSBjb25zdAogewotICAgIGlmIChtX2VsZW1lbnQtPmF0dHJpYnV0ZURh
dGEoKSA9PSBzaGFyaW5nQ2FuZGlkYXRlLT5hdHRyaWJ1dGVEYXRhKCkpCisgICAgY29uc3QgU3Rh
dGUmIHN0YXRlID0gbV9zdGF0ZTsKKyAgICBpZiAoc3RhdGUuZWxlbWVudC0+YXR0cmlidXRlRGF0
YSgpID09IHNoYXJpbmdDYW5kaWRhdGUtPmF0dHJpYnV0ZURhdGEoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgaWYgKG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFu
Z0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6Omxh
bmdBdHRyKSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1l
czo6bGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFt
ZXM6OmxhbmdBdHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2VsZW1lbnQt
PmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRB
dHRyaWJ1dGUobGFuZ0F0dHIpKQorICAgIGlmIChzdGF0ZS5lbGVtZW50LT5mYXN0R2V0QXR0cmli
dXRlKGxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0cmlidXRlKGxhbmdB
dHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFtX2VsZW1lbnRBZmZlY3Rl
ZEJ5Q2xhc3NSdWxlcykgeworICAgIGlmICghc3RhdGUuZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1
bGVzKSB7CiAgICAgICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5oYXNDbGFzcygpICYmIGNsYXNz
TmFtZXNBZmZlY3RlZEJ5UnVsZXMoc2hhcmluZ0NhbmRpZGF0ZS0+Y2xhc3NOYW1lcygpKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UgaWYgKHNoYXJpbmdDYW5kaWRhdGUt
Pmhhc0NsYXNzKCkpIHsKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICAvLyBTVkcgZWxlbWVudHMg
cmVxdWlyZSBhIChzbG93ISkgZ2V0QXR0cmlidXRlIGNvbXBhcmlzaW9uIGJlY2F1c2UgImNsYXNz
IiBpcyBhbiBhbmltYXRhYmxlIGF0dHJpYnV0ZSBmb3IgU1ZHLgotICAgICAgICBpZiAobV9lbGVt
ZW50LT5pc1NWR0VsZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+Z2V0QXR0
cmlidXRlKGNsYXNzQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Z2V0QXR0cmlidXRlKGNsYXNz
QXR0cikpCisgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkgeworICAg
ICAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQtPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9IHNo
YXJpbmdDYW5kaWRhdGUtPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfSBlbHNlIHsKICNlbmRpZgotICAgICAgICAgICAgaWYg
KG1fZWxlbWVudC0+Y2xhc3NOYW1lcygpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmNsYXNzTmFtZXMo
KSkKKyAgICAgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50LT5jbGFzc05hbWVzKCkgIT0gc2hhcmlu
Z0NhbmRpZGF0ZS0+Y2xhc3NOYW1lcygpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICB9CkBAIC0xMTc0LDEyICsxMTYzLDEyIEBAIGJvb2wg
U3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5n
QXR0cmlidXRlcyhTdHlsZWRFCiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0g
c2hhcmluZ0NhbmRpZGF0ZS0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKKyAgICBpZiAo
c3RhdGUuc3R5bGVkRWxlbWVudC0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzaGFy
aW5nQ2FuZGlkYXRlLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSAgICBpZiAobV9lbGVt
ZW50LT5oYXNUYWdOYW1lKHByb2dyZXNzVGFnKSkgewotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
SFRNTFByb2dyZXNzRWxlbWVudCo+KG1fZWxlbWVudCktPmlzRGV0ZXJtaW5hdGUoKSAhPSBzdGF0
aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50Kj4oc2hhcmluZ0NhbmRpZGF0ZSktPmlzRGV0ZXJt
aW5hdGUoKSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudC0+aGFzVGFnTmFtZShwcm9ncmVzc1RhZykp
IHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihzdGF0ZS5l
bGVtZW50KS0+aXNEZXRlcm1pbmF0ZSgpICE9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1l
bnQqPihzaGFyaW5nQ2FuZGlkYXRlKS0+aXNEZXRlcm1pbmF0ZSgpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICNlbmRpZgpAQCAtMTE5MCwxMiArMTE3OSwxMyBAQCBib29sIFN0
eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0
dHJpYnV0ZXMoU3R5bGVkRQogYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVs
ZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKICAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9
IG1fc3RhdGU7CiAKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aWYgKHN0eWxlLT51bmlxdWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVt
ZW50LT50YWdRTmFtZSgpICE9IG1fZWxlbWVudC0+dGFnUU5hbWUoKSkKKyAgICBpZiAoZWxlbWVu
dC0+dGFnUU5hbWUoKSAhPSBzdGF0ZS5lbGVtZW50LT50YWdRTmFtZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1lbnQtPmlubGluZVN0eWxlKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTEyMDUsMjEgKzExOTUsMjEgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5T
aGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICBp
ZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGVs
ZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogI2VuZGlmCi0gICAgaWYgKGVsZW1lbnQtPmlzTGluaygpICE9IG1fZWxlbWVudC0+aXNM
aW5rKCkpCisgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpICE9IHN0YXRlLmVsZW1lbnQtPmlzTGlu
aygpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmhvdmVyZWQoKSAh
PSBtX2VsZW1lbnQtPmhvdmVyZWQoKSkKKyAgICBpZiAoZWxlbWVudC0+aG92ZXJlZCgpICE9IHN0
YXRlLmVsZW1lbnQtPmhvdmVyZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChl
bGVtZW50LT5hY3RpdmUoKSAhPSBtX2VsZW1lbnQtPmFjdGl2ZSgpKQorICAgIGlmIChlbGVtZW50
LT5hY3RpdmUoKSAhPSBzdGF0ZS5lbGVtZW50LT5hY3RpdmUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChlbGVtZW50LT5mb2N1c2VkKCkgIT0gbV9lbGVtZW50LT5mb2N1c2VkKCkp
CisgICAgaWYgKGVsZW1lbnQtPmZvY3VzZWQoKSAhPSBzdGF0ZS5lbGVtZW50LT5mb2N1c2VkKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+c2hhZG93UHNldWRvSWQo
KSAhPSBtX2VsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCkpCisgICAgaWYgKGVsZW1lbnQtPnNoYWRv
d1BzZXVkb0lkKCkgIT0gc3RhdGUuZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGlmIChlbGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmNz
c1RhcmdldCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFzaGFyaW5nQ2FuZGlk
YXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKGVsZW1lbnQpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRpb25B
dHRyaWJ1dGVTdHlsZSgpICE9IG1fc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlv
bkF0dHJpYnV0ZVN0eWxlKCkpCisgICAgaWYgKGVsZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRp
b25BdHRyaWJ1dGVTdHlsZSgpICE9IHN0YXRlLnN0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxQcmVz
ZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBp
ZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMoZWxl
bWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQpAQCAtMTIzNSw3ICsxMjI1LDcg
QEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxl
bWVudCogZWxlbWVudCkgY29uc3QKIAogICAgIGJvb2wgaXNDb250cm9sID0gZWxlbWVudC0+aXNG
b3JtQ29udHJvbEVsZW1lbnQoKTsKIAotICAgIGlmIChpc0NvbnRyb2wgIT0gbV9lbGVtZW50LT5p
c0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgIGlmIChpc0NvbnRyb2wgIT0gc3RhdGUuZWxlbWVu
dC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
aWYgKGlzQ29udHJvbCAmJiAhY2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKGVsZW1lbnQpKQpAQCAt
MTI1OSwyMCArMTI0OSwyMCBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRo
RWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgIGlmIChlbGVtZW50SGFz
RGlyZWN0aW9uQXV0byhlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYg
KGVsZW1lbnQtPmlzTGluaygpICYmIG1fZWxlbWVudExpbmtTdGF0ZSAhPSBzdHlsZS0+aW5zaWRl
TGluaygpKQorICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSAmJiBzdGF0ZS5lbGVtZW50TGlua1N0
YXRlICE9IHN0eWxlLT5pbnNpZGVMaW5rKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lm
IEVOQUJMRShWSURFT19UUkFDSykKICAgICAvLyBEZW55IHNoYXJpbmcgc3R5bGVzIGJldHdlZW4g
V2ViVlRUIGFuZCBub24tV2ViVlRUIG5vZGVzLgotICAgIGlmIChlbGVtZW50LT5pc1dlYlZUVEVs
ZW1lbnQoKSAhPSBtX2VsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpKQorICAgIGlmIChlbGVtZW50
LT5pc1dlYlZUVEVsZW1lbnQoKSAhPSBzdGF0ZS5lbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQtPmlzV2ViVlRURWxlbWVu
dCgpICYmIG1fZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYgdG9XZWJWVFRFbGVtZW50KGVs
ZW1lbnQpLT5pc1Bhc3ROb2RlKCkgIT0gdG9XZWJWVFRFbGVtZW50KG1fZWxlbWVudCktPmlzUGFz
dE5vZGUoKSkKKyAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYgc3RhdGUuZWxl
bWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYgdG9XZWJWVFRFbGVtZW50KGVsZW1lbnQpLT5pc1Bh
c3ROb2RlKCkgIT0gdG9XZWJWVFRFbGVtZW50KHN0YXRlLmVsZW1lbnQpLT5pc1Bhc3ROb2RlKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQotICAgIGlmIChlbGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCktPndlYmtpdEN1cnJl
bnRGdWxsU2NyZWVuRWxlbWVudCgpIHx8IG1fZWxlbWVudCA9PSBtX2VsZW1lbnQtPmRvY3VtZW50
KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKQorICAgIGlmIChlbGVtZW50ID09
IGVsZW1lbnQtPmRvY3VtZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpIHx8
IHN0YXRlLmVsZW1lbnQgPT0gc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVu
dEZ1bGxTY3JlZW5FbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogICAg
IHJldHVybiB0cnVlOwpAQCAtMTI5MywzNiArMTI4MywzOCBAQCBpbmxpbmUgU3R5bGVkRWxlbWVu
dCogU3R5bGVSZXNvbHZlcjo6ZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoTm9kZSogbm9kZSwg
dW5zaQogCiBSZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQog
ewotICAgIGlmICghbV9zdHlsZWRFbGVtZW50IHx8ICFtX3BhcmVudFN0eWxlKQorICAgIFN0YXRl
JiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgaWYgKCFzdGF0ZS5zdHlsZWRFbGVtZW50IHx8ICFzdGF0
ZS5wYXJlbnRTdHlsZSkKICAgICAgICAgcmV0dXJuIDA7CisKICAgICAvLyBJZiB0aGUgZWxlbWVu
dCBoYXMgaW5saW5lIHN0eWxlIGl0IGlzIHByb2JhYmx5IHVuaXF1ZS4KLSAgICBpZiAobV9zdHls
ZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpKQorICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50LT5p
bmxpbmVTdHlsZSgpKQogICAgICAgICByZXR1cm4gMDsKICNpZiBFTkFCTEUoU1ZHKQotICAgIGlm
IChtX3N0eWxlZEVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1l
bnQqPihtX3N0eWxlZEVsZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKKyAg
ICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudC0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8
U1ZHRWxlbWVudCo+KHN0YXRlLnN0eWxlZEVsZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVByb3Bl
cnRpZXMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKICAgICAvLyBJZHMgc3RvcCBzdHls
ZSBzaGFyaW5nIGlmIHRoZXkgc2hvdyB1cCBpbiB0aGUgc3R5bGVzaGVldHMuCi0gICAgaWYgKG1f
c3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMo
bV9zdHlsZWRFbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAgaWYg
KHN0YXRlLnN0eWxlZEVsZW1lbnQtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNv
bnRhaW5zKHN0YXRlLnN0eWxlZEVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgp
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJp
bmcobV9lbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpKQorICAgIGlmIChwYXJlbnRFbGVtZW50UHJl
dmVudHNTaGFyaW5nKHN0YXRlLmVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxk
KCkpCisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxk
KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChtX2VsZW1lbnQgPT0gbV9lbGVtZW50LT5k
b2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudCA9PSBzdGF0ZS5l
bGVtZW50LT5kb2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
aWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKG1fZWxlbWVudCkpCisgICAgaWYgKGVsZW1lbnRI
YXNEaXJlY3Rpb25BdXRvKHN0YXRlLmVsZW1lbnQpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IC8vIENhY2hlIHdoZXRoZXIgbV9lbGVtZW50IGlzIGFmZmVjdGVkIGJ5IGFueSBrbm93biBjbGFz
cyBzZWxlY3RvcnMuCisgICAgLy8gQ2FjaGUgd2hldGhlciBzdGF0ZS5lbGVtZW50IGlzIGFmZmVj
dGVkIGJ5IGFueSBrbm93biBjbGFzcyBzZWxlY3RvcnMuCiAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkbid0IGJlIGEgbWVtYmVyIHZhcmlhYmxlLiBUaGUgc3R5bGUgc2hhcmluZyBjb2RlIGNvdWxk
IGJlIGZhY3RvcmVkIG91dCBvZiBTdHlsZVJlc29sdmVyLgotICAgIG1fZWxlbWVudEFmZmVjdGVk
QnlDbGFzc1J1bGVzID0gbV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBjbGFz
c05hbWVzQWZmZWN0ZWRCeVJ1bGVzKG1fZWxlbWVudC0+Y2xhc3NOYW1lcygpKTsKKyAgICBzdGF0
ZS5lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMgPSBzdGF0ZS5lbGVtZW50ICYmIHN0YXRlLmVs
ZW1lbnQtPmhhc0NsYXNzKCkgJiYgY2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhzdGF0ZS5lbGVt
ZW50LT5jbGFzc05hbWVzKCkpOwogCiAgICAgLy8gQ2hlY2sgcHJldmlvdXMgc2libGluZ3MgYW5k
IHRoZWlyIGNvdXNpbnMuCiAgICAgdW5zaWduZWQgY291bnQgPSAwOwogICAgIHVuc2lnbmVkIHZp
c2l0ZWROb2RlQ291bnQgPSAwOwogICAgIFN0eWxlZEVsZW1lbnQqIHNoYXJlRWxlbWVudCA9IDA7
Ci0gICAgTm9kZSogY291c2luTGlzdCA9IG1fc3R5bGVkRWxlbWVudC0+cHJldmlvdXNTaWJsaW5n
KCk7CisgICAgTm9kZSogY291c2luTGlzdCA9IHN0YXRlLnN0eWxlZEVsZW1lbnQtPnByZXZpb3Vz
U2libGluZygpOwogICAgIHdoaWxlIChjb3VzaW5MaXN0KSB7CiAgICAgICAgIHNoYXJlRWxlbWVu
dCA9IGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKGNvdXNpbkxpc3QsIGNvdW50KTsKICAgICAg
ICAgaWYgKHNoYXJlRWxlbWVudCkKQEAgLTEzNDQsNyArMTMzNiw3IEBAIFJlbmRlclN0eWxlKiBT
dHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgaWYgKHN0eWxlU2hhcmluZ0Nh
bmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gVHJh
Y2tpbmcgY2hpbGQgaW5kZXggcmVxdWlyZXMgdW5pcXVlIHN0eWxlIGZvciBlYWNoIG5vZGUuIFRo
aXMgbWF5IGdldCBzZXQgYnkgdGhlIHNpYmxpbmcgcnVsZSBtYXRjaCBhYm92ZS4KLSAgICBpZiAo
cGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhtX2VsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkp
CisgICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcoc3RhdGUuZWxlbWVudC0+cGFy
ZW50RWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHNoYXJlRWxlbWVu
dC0+cmVuZGVyU3R5bGUoKTsKIH0KQEAgLTE1NjQsMTAgKzE1NTYsMTEgQEAgUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1l
bnQsIFJlbmRlclMKICAgICAgICAgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CiAgICAg
fQogCisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICBpbml0RWxlbWVudChlbGVtZW50
KTsKICAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGVsZW1lbnQsIGRlZmF1bHRQYXJlbnQpOwotICAg
IG1fcmVnaW9uRm9yU3R5bGluZyA9IHJlZ2lvbkZvclN0eWxpbmc7Ci0gICAgaWYgKHNoYXJpbmdC
ZWhhdmlvciA9PSBBbGxvd1N0eWxlU2hhcmluZyAmJiAhbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9u
UG9pbnQpIHsKKyAgICBzdGF0ZS5yZWdpb25Gb3JTdHlsaW5nID0gcmVnaW9uRm9yU3R5bGluZzsK
KyAgICBpZiAoc2hhcmluZ0JlaGF2aW9yID09IEFsbG93U3R5bGVTaGFyaW5nICYmICFzdGF0ZS5k
aXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQpIHsKICAgICAgICAgUmVuZGVyU3R5bGUqIHNoYXJl
ZFN0eWxlID0gbG9jYXRlU2hhcmVkU3R5bGUoKTsKICAgICAgICAgaWYgKHNoYXJlZFN0eWxlKQog
ICAgICAgICAgICAgcmV0dXJuIHNoYXJlZFN0eWxlOwpAQCAtMTU3NSwzMyArMTU2OCwzMiBAQCBQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxl
bWVudCogZWxlbWVudCwgUmVuZGVyUwogCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjbG9uZUZv
clBhcmVudDsKIAotICAgIGlmIChtX3BhcmVudFN0eWxlKSB7Ci0gICAgICAgIG1fc3R5bGUgPSBS
ZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKG1fcGFy
ZW50U3R5bGUsIGlzQXRTaGFkb3dCb3VuZGFyeShlbGVtZW50KSA/IFJlbmRlclN0eWxlOjpBdFNo
YWRvd0JvdW5kYXJ5IDogUmVuZGVyU3R5bGU6Ok5vdEF0U2hhZG93Qm91bmRhcnkpOworICAgIGlm
IChzdGF0ZS5wYXJlbnRTdHlsZSkgeworICAgICAgICBzdGF0ZS5zdHlsZSA9IFJlbmRlclN0eWxl
OjpjcmVhdGUoKTsKKyAgICAgICAgc3RhdGUuc3R5bGUtPmluaGVyaXRGcm9tKHN0YXRlLnBhcmVu
dFN0eWxlLCBpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkgPyBSZW5kZXJTdHlsZTo6QXRTaGFk
b3dCb3VuZGFyeSA6IFJlbmRlclN0eWxlOjpOb3RBdFNoYWRvd0JvdW5kYXJ5KTsKICAgICB9IGVs
c2UgewotICAgICAgICBtX3N0eWxlID0gZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpOwotICAgICAg
ICBjbG9uZUZvclBhcmVudCA9IFJlbmRlclN0eWxlOjpjbG9uZShzdHlsZSgpKTsKLSAgICAgICAg
bV9wYXJlbnRTdHlsZSA9IGNsb25lRm9yUGFyZW50LmdldCgpOworICAgICAgICBzdGF0ZS5zdHls
ZSA9IGRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKTsKKyAgICAgICAgY2xvbmVGb3JQYXJlbnQgPSBS
ZW5kZXJTdHlsZTo6Y2xvbmUoc3RhdGUuc3R5bGUuZ2V0KCkpOworICAgICAgICBzdGF0ZS5wYXJl
bnRTdHlsZSA9IGNsb25lRm9yUGFyZW50LmdldCgpOwogICAgIH0KICAgICAvLyBjb250ZW50ZWRp
dGFibGUgYXR0cmlidXRlIChpbXBsZW1lbnRlZCBieSAtd2Via2l0LXVzZXItbW9kaWZ5KSBzaG91
bGQKICAgICAvLyBiZSBwcm9wYWdhdGVkIGZyb20gc2hhZG93IGhvc3QgdG8gZGlzdHJpYnV0ZWQg
bm9kZS4KLSAgICBpZiAobV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQpIHsKKyAgICBpZiAo
c3RhdGUuZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KSB7CiAgICAgICAgIGlmIChFbGVtZW50
KiBwYXJlbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGlmIChS
ZW5kZXJTdHlsZSogc3R5bGVPZlNoYWRvd0hvc3QgPSBwYXJlbnQtPnJlbmRlclN0eWxlKCkpCi0g
ICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0VXNlck1vZGlmeShzdHlsZU9mU2hhZG93SG9zdC0+
dXNlck1vZGlmeSgpKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VXNlck1vZGlm
eShzdHlsZU9mU2hhZG93SG9zdC0+dXNlck1vZGlmeSgpKTsKICAgICAgICAgfQogICAgIH0KIAog
ICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSkgewotICAgICAgICBtX3N0eWxlLT5zZXRJc0xpbmso
dHJ1ZSk7Ci0gICAgICAgIEVJbnNpZGVMaW5rIGxpbmtTdGF0ZSA9IG1fZWxlbWVudExpbmtTdGF0
ZTsKLSAgICAgICAgaWYgKG1fZWxlbWVudExpbmtTdGF0ZSAhPSBOb3RJbnNpZGVMaW5rKSB7Cisg
ICAgICAgIHN0YXRlLnN0eWxlLT5zZXRJc0xpbmsodHJ1ZSk7CisgICAgICAgIEVJbnNpZGVMaW5r
IGxpbmtTdGF0ZSA9IHN0YXRlLmVsZW1lbnRMaW5rU3RhdGU7CisgICAgICAgIGlmIChsaW5rU3Rh
dGUgIT0gTm90SW5zaWRlTGluaykgewogICAgICAgICAgICAgYm9vbCBmb3JjZVZpc2l0ZWQgPSBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZWxlbWVudCwgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb1Zpc2l0ZWQpOwogICAgICAgICAgICAgaWYgKGZvcmNlVmlzaXRlZCkKICAg
ICAgICAgICAgICAgICBsaW5rU3RhdGUgPSBJbnNpZGVWaXNpdGVkTGluazsKICAgICAgICAgfQot
Ci0gICAgICAgIG1fc3R5bGUtPnNldEluc2lkZUxpbmsobGlua1N0YXRlKTsKKyAgICAgICAgc3Rh
dGUuc3R5bGUtPnNldEluc2lkZUxpbmsobGlua1N0YXRlKTsKICAgICB9CiAKICAgICBlbnN1cmVE
ZWZhdWx0U3R5bGVTaGVldHNGb3JFbGVtZW50KGVsZW1lbnQpOwpAQCAtMTYxNSwxNyArMTYwNywx
NyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1l
bnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyUwogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMo
bWF0Y2hSZXN1bHQsIGVsZW1lbnQpOwogCiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVj
dCdzIGRpc3BsYXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0g
ICAgYWRqdXN0UmVuZGVyU3R5bGUoc3R5bGUoKSwgbV9wYXJlbnRTdHlsZSwgZWxlbWVudCk7Cisg
ICAgYWRqdXN0UmVuZGVyU3R5bGUoc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnBhcmVudFN0eWxl
LCBlbGVtZW50KTsKIAogICAgIGluaXRFbGVtZW50KDApOyAvLyBDbGVhciBvdXQgZm9yIHRoZSBu
ZXh0IHJlc29sdmUuCiAKICAgICBpZiAoY2xvbmVGb3JQYXJlbnQpCi0gICAgICAgIG1fcGFyZW50
U3R5bGUgPSAwOworICAgICAgICBzdGF0ZS5wYXJlbnRTdHlsZSA9IDA7CiAKICAgICBkb2N1bWVu
dCgpLT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBz
dHlsZS4KLSAgICByZXR1cm4gbV9zdHlsZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHN0YXRlLnN0
eWxlLnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZl
cjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBjb25z
dCBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSwgS2V5ZnJhbWVWYWx1ZSYga2V5ZnJhbWVWYWx1ZSkK
QEAgLTE2MzQsMTIgKzE2MjYsMTQgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNv
bHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSogZWxlbWUKICAgICBpZiAo
a2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkKICAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVz
dWx0LCBrZXlmcmFtZS0+cHJvcGVydGllcygpKTsKIAotICAgIEFTU0VSVCghbV9zdHlsZSk7Cisg
ICAgQVNTRVJUKCFtX3N0YXRlLnN0eWxlKTsKKworICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7
CiAKICAgICAvLyBDcmVhdGUgdGhlIHN0eWxlCi0gICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpj
bG9uZShlbGVtZW50U3R5bGUpOworICAgIHN0YXRlLnN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25l
KGVsZW1lbnRTdHlsZSk7CiAKLSAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAgc3RhdGUu
bGluZUhlaWdodFZhbHVlID0gMDsKIAogICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gYm90aGVyIHdp
dGggIWltcG9ydGFudC4gU2luY2UgdGhlcmUgaXMgb25seSBldmVyIG9uZQogICAgIC8vIGRlY2ws
IHRoZXJlJ3Mgbm90aGluZyB0byBvdmVycmlkZS4gU28ganVzdCBhZGQgdGhlIGZpcnN0IHByb3Bl
cnRpZXMuCkBAIC0xNjUxLDggKzE2NDUsOCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHls
ZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZQogICAg
IHVwZGF0ZUZvbnQoKTsKIAogICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBz
dXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZQotICAgIGlmIChtX2xpbmVIZWlnaHRWYWx1
ZSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fbGluZUhl
aWdodFZhbHVlKTsKKyAgICBpZiAoc3RhdGUubGluZUhlaWdodFZhbHVlKQorICAgICAgICBhcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZhbHVlKTsK
IAogICAgIC8vIE5vdyBkbyByZXN0IG9mIHRoZSBwcm9wZXJ0aWVzLgogICAgIGlmIChrZXlmcmFt
ZS0+cHJvcGVydGllcygpKQpAQCAtMTY3OSw3ICsxNjczLDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSog
ZWxlbWUKIAogICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIAotICAg
IHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3RhdGUuc3R5bGUucmVsZWFz
ZSgpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9u
KEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIEtleWZyYW1lTGlz
dCYgbGlzdCkKQEAgLTE3NDcsMTUgKzE3NDEsMTcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjprZXlm
cmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSogZWwK
IAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JF
bGVtZW50KFBzZXVkb0lkIHBzZXVkbywgRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKQogewotICAgIEFTU0VSVChtX3BhcmVudFN0eWxlKTsKKyAgICBBU1NFUlQobV9zdGF0ZS5w
YXJlbnRTdHlsZSk7CiAgICAgaWYgKCFlKQogICAgICAgICByZXR1cm4gMDsKIAorICAgIFN0YXRl
JiBzdGF0ZSA9IG1fc3RhdGU7CisKICAgICBpbml0RWxlbWVudChlKTsKIAogICAgIGluaXRGb3JT
dHlsZVJlc29sdmUoZSwgcGFyZW50U3R5bGUsIHBzZXVkbyk7Ci0gICAgbV9zdHlsZSA9IFJlbmRl
clN0eWxlOjpjcmVhdGUoKTsKLSAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShtX3BhcmVudFN0eWxl
KTsKKyAgICBzdGF0ZS5zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBzdGF0ZS5z
dHlsZS0+aW5oZXJpdEZyb20obV9zdGF0ZS5wYXJlbnRTdHlsZSk7CiAKICAgICAvLyBTaW5jZSB3
ZSBkb24ndCB1c2UgcHNldWRvLWVsZW1lbnRzIGluIGFueSBvZiBvdXIgcXVpcmsvcHJpbnQgdXNl
ciBhZ2VudCBydWxlcywgZG9uJ3Qgd2FzdGUgdGltZSB3YWxraW5nCiAgICAgLy8gdGhvc2UgcnVs
ZXMuCkBAIC0xNzcyLDEyICsxNzY4LDEyIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxl
UmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sIEVsCiAgICAg
aWYgKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBtX3N0eWxlLT5zZXRTdHlsZVR5cGUocHNldWRvKTsKKyAgICBzdGF0ZS5z
dHlsZS0+c2V0U3R5bGVUeXBlKHBzZXVkbyk7CiAKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
KG1hdGNoUmVzdWx0LCBlKTsKIAogICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBk
aXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFk
anVzdFJlbmRlclN0eWxlKHN0eWxlKCksIHBhcmVudFN0eWxlLCAwKTsKKyAgICBhZGp1c3RSZW5k
ZXJTdHlsZShzdGF0ZS5zdHlsZS5nZXQoKSwgbV9zdGF0ZS5wYXJlbnRTdHlsZSwgMCk7CiAKICAg
ICAvLyBTdGFydCBsb2FkaW5nIHJlc291cmNlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCiAg
ICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoKTsKQEAgLTE3ODUsMTUgKzE3ODEsMTUgQEAgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFBz
ZXVkb0lkIHBzZXVkbywgRWwKICAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVy
KCk7CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4gbV9zdHlsZS5y
ZWxlYXNlKCk7CisgICAgcmV0dXJuIHN0YXRlLnN0eWxlLnJlbGVhc2UoKTsKIH0KIAogUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5k
ZXgpCiB7CiAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1l
bnQoKSk7IC8vIG1fcm9vdEVsZW1lbnRTdHlsZSB3aWxsIGJlIHNldCB0byB0aGUgZG9jdW1lbnQg
c3R5bGUuCiAKLSAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgIG1fc3R5
bGUtPmluaGVyaXRGcm9tKG1fcm9vdEVsZW1lbnRTdHlsZSk7CisgICAgbV9zdGF0ZS5zdHlsZSA9
IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBtX3N0YXRlLnN0eWxlLT5pbmhlcml0RnJvbSht
X3N0YXRlLnJvb3RFbGVtZW50U3R5bGUpOwogCiAgICAgY29uc3QgYm9vbCBpc0xlZnQgPSBpc0xl
ZnRQYWdlKHBhZ2VJbmRleCk7CiAgICAgY29uc3QgYm9vbCBpc0ZpcnN0ID0gaXNGaXJzdFBhZ2Uo
cGFnZUluZGV4KTsKQEAgLTE4MDQsNyArMTgwMCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogICAgIG1hdGNoUGFn
ZVJ1bGVzKHJlc3VsdCwgbV91c2VyU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7
CiAgICAgLy8gT25seSBjb25zaWRlciB0aGUgZ2xvYmFsIGF1dGhvciBSdWxlU2V0IGZvciBAcGFn
ZSBydWxlcywgYXMgcGVyIHRoZSBIVE1MNSBzcGVjLgogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3Vs
dCwgbV9hdXRob3JTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKLSAgICBtX2xp
bmVIZWlnaHRWYWx1ZSA9IDA7CisgICAgbV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSAwOwogICAg
IGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOwogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQog
ICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4ocmVzdWx0LCBm
YWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9u
bHkpOwpAQCAtMTgxNSw4ICsxODExLDggQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVS
ZXNvbHZlcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiAgICAgdXBkYXRlRm9udCgpOwog
CiAgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBv
biB0aGUgZm9udC1zaXplLgotICAgIGlmIChtX2xpbmVIZWlnaHRWYWx1ZSkKLSAgICAgICAgYXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fbGluZUhlaWdodFZhbHVlKTsKKyAg
ICBpZiAobV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUpCisgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlMaW5lSGVpZ2h0LCBtX3N0YXRlLmxpbmVIZWlnaHRWYWx1ZSk7CiAKICAgICBhcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwg
MCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwog
CkBAIC0xODI2LDIwICsxODIyLDIwIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVz
b2x2ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogICAgIGRvY3VtZW50KCktPmRpZEFj
Y2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIAogICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgotICAg
IHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gbV9zdGF0ZS5zdHlsZS5yZWxl
YXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OmRlZmF1
bHRTdHlsZUZvckVsZW1lbnQoKQogewotICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRl
KCk7CisgICAgbV9zdGF0ZS5zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKICAgICAvLyBN
YWtlIHN1cmUgb3VyIGZvbnRzIGFyZSBpbml0aWFsaXplZCBpZiB3ZSBkb24ndCBpbmhlcml0IHRo
ZW0gZnJvbSBvdXIgcGFyZW50IHN0eWxlLgogICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBk
b2N1bWVudFNldHRpbmdzKCkpIHsKICAgICAgICAgaW5pdGlhbGl6ZUZvbnRTdHlsZShzZXR0aW5n
cyk7Ci0gICAgICAgIG1fc3R5bGUtPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOworICAg
ICAgICBtX3N0YXRlLnN0eWxlLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKICAgICB9
IGVsc2UKLSAgICAgICAgbV9zdHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKKyAgICAgICAgbV9zdGF0
ZS5zdHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKIAotICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2Uo
KTsKKyAgICByZXR1cm4gbV9zdGF0ZS5zdHlsZS5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yVGV4dChUZXh0KiB0ZXh0Tm9kZSkK
QEAgLTIxMjcsNyArMjEyMyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5
bGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5CiAKICAgICAvLyBM
ZXQgdGhlIHRoZW1lIGFsc28gaGF2ZSBhIGNyYWNrIGF0IGFkanVzdGluZyB0aGUgc3R5bGUuCiAg
ICAgaWYgKHN0eWxlLT5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIFJlbmRlclRoZW1lOjpkZWZh
dWx0VGhlbWUoKS0+YWRqdXN0U3R5bGUodGhpcywgc3R5bGUsIGUsIG1faGFzVUFBcHBlYXJhbmNl
LCBtX2JvcmRlckRhdGEsIG1fYmFja2dyb3VuZERhdGEsIG1fYmFja2dyb3VuZENvbG9yKTsKKyAg
ICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1c3RTdHlsZSh0aGlzLCBzdHls
ZSwgZSwgbV9zdGF0ZS5oYXNVQUFwcGVhcmFuY2UsIG1fc3RhdGUuYm9yZGVyRGF0YSwgbV9zdGF0
ZS5iYWNrZ3JvdW5kRGF0YSwgbV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IpOwogCiAgICAgLy8gSWYg
d2UgaGF2ZSBmaXJzdC1sZXR0ZXIgcHNldWRvIHN0eWxlLCBkbyBub3Qgc2hhcmUgdGhpcyBzdHls
ZS4KICAgICBpZiAoc3R5bGUtPmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCkBAIC0yMjEw
LDI0ICsyMjA2LDI1IEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9yT3JpZW50YXRpb25DaGFuZ2UoUmVu
ZGVyU3R5bGUqIHN0eWxlKQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQogewot
ICAgIGlmICghbV9mb250RGlydHkpCisgICAgaWYgKCFtX3N0YXRlLmZvbnREaXJ0eSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgpOwotICAgIGNoZWNrRm9y
R2VuZXJpY0ZhbWlseUNoYW5nZShzdHlsZSgpLCBtX3BhcmVudFN0eWxlKTsKLSAgICBjaGVja0Zv
clpvb21DaGFuZ2Uoc3R5bGUoKSwgbV9wYXJlbnRTdHlsZSk7Ci0gICAgY2hlY2tGb3JPcmllbnRh
dGlvbkNoYW5nZShzdHlsZSgpKTsKLSAgICBtX3N0eWxlLT5mb250KCkudXBkYXRlKG1fZm9udFNl
bGVjdG9yKTsKLSAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOworICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IG1fc3RhdGUuc3R5bGUuZ2V0KCk7CisgICAgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdl
KHN0eWxlLCBtX3N0YXRlLnBhcmVudFN0eWxlKTsKKyAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3R5
bGUsIG1fc3RhdGUucGFyZW50U3R5bGUpOworICAgIGNoZWNrRm9yT3JpZW50YXRpb25DaGFuZ2Uo
c3R5bGUpOworICAgIG1fc3RhdGUuc3R5bGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3Ip
OworICAgIG1fc3RhdGUuZm9udERpcnR5ID0gZmFsc2U7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZl
cjo6Y2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCkKIHsKLSAgICBtX2hhc1VBQXBwZWFyYW5jZSA9
IG1fc3R5bGUtPmhhc0FwcGVhcmFuY2UoKTsKLSAgICBpZiAobV9oYXNVQUFwcGVhcmFuY2UpIHsK
LSAgICAgICAgbV9ib3JkZXJEYXRhID0gbV9zdHlsZS0+Ym9yZGVyKCk7Ci0gICAgICAgIG1fYmFj
a2dyb3VuZERhdGEgPSAqbV9zdHlsZS0+YmFja2dyb3VuZExheWVycygpOwotICAgICAgICBtX2Jh
Y2tncm91bmRDb2xvciA9IG1fc3R5bGUtPmJhY2tncm91bmRDb2xvcigpOworICAgIG1fc3RhdGUu
aGFzVUFBcHBlYXJhbmNlID0gbV9zdGF0ZS5zdHlsZS0+aGFzQXBwZWFyYW5jZSgpOworICAgIGlm
IChtX3N0YXRlLmhhc1VBQXBwZWFyYW5jZSkgeworICAgICAgICBtX3N0YXRlLmJvcmRlckRhdGEg
PSBtX3N0YXRlLnN0eWxlLT5ib3JkZXIoKTsKKyAgICAgICAgbV9zdGF0ZS5iYWNrZ3JvdW5kRGF0
YSA9ICptX3N0YXRlLnN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7CisgICAgICAgIG1fc3RhdGUu
YmFja2dyb3VuZENvbG9yID0gbV9zdGF0ZS5zdHlsZS0+YmFja2dyb3VuZENvbG9yKCk7CiAgICAg
fQogfQogCkBAIC0yMjU3LDQ5ICsyMjU0LDUxIEBAIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IFN0
eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsIFBzCiAg
ICAgfQogCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIChydWxlc1RvSW5j
bHVkZSAmIEF1dGhvckNTU1J1bGVzKSkgewotICAgICAgICBtX3NhbWVPcmlnaW5Pbmx5ID0gIShy
dWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2luQ1NTUnVsZXMpOworICAgICAgICBtX3N0YXRlLnNh
bWVPcmlnaW5Pbmx5ID0gIShydWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2luQ1NTUnVsZXMpOwog
CiAgICAgICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRob3Igc2hlZXRzLgogICAgICAgICBt
YXRjaEF1dGhvclJ1bGVzKGR1bW15LCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOwog
Ci0gICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSBmYWxzZTsKKyAgICAgICAgbV9zdGF0ZS5zYW1l
T3JpZ2luT25seSA9IGZhbHNlOwogICAgIH0KIAogICAgIG1fc2VsZWN0b3JDaGVja2VyLnNldE1v
ZGUoU2VsZWN0b3JDaGVja2VyOjpSZXNvbHZpbmdTdHlsZSk7CiAKLSAgICByZXR1cm4gbV9ydWxl
TGlzdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIG1fc3RhdGUucnVsZUxpc3QucmVsZWFzZSgpOwog
fQogCiBpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpydWxlTWF0Y2hlcyhjb25zdCBSdWxlRGF0
YSYgcnVsZURhdGEsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQogewotICAgIG1fZHluYW1p
Y1BzZXVkbyA9IE5PUFNFVURPOworICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgc3Rh
dGUuZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwogCiAgICAgaWYgKHJ1bGVEYXRhLmhhc0Zhc3RD
aGVja2FibGVTZWxlY3RvcigpKSB7CiAgICAgICAgIC8vIFdlIGtub3cgdGhpcyBzZWxlY3RvciBk
b2VzIG5vdCBpbmNsdWRlIGFueSBwc2V1ZG8gZWxlbWVudHMuCi0gICAgICAgIGlmIChtX3BzZXVk
b1N0eWxlICE9IE5PUFNFVURPKQorICAgICAgICBpZiAoc3RhdGUucHNldWRvU3R5bGUgIT0gTk9Q
U0VVRE8pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIC8vIFdlIGtub3cgYSBz
dWZmaWNpZW50bHkgc2ltcGxlIHNpbmdsZSBwYXJ0IHNlbGVjdG9yIG1hdGNoZXMgc2ltcGx5IGJl
Y2F1c2Ugd2UgZm91bmQgaXQgZnJvbSB0aGUgcnVsZSBoYXNoLgogICAgICAgICAvLyBUaGlzIGlz
IGxpbWl0ZWQgdG8gSFRNTCBvbmx5IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIG5hbWVz
cGFjZS4KLSAgICAgICAgaWYgKHJ1bGVEYXRhLmhhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdI
VE1MQmFzZWRPblJ1bGVIYXNoKCkgJiYgbV9lbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAg
ICAgICAgaWYgKHJ1bGVEYXRhLmhhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRP
blJ1bGVIYXNoKCkgJiYgc3RhdGUuZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKSB7CiAgICAgICAg
ICAgICBpZiAoIXJ1bGVEYXRhLmhhc011bHRpcGFydFNlbGVjdG9yKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHJ1bGVEYXRhLnNlbGVjdG9y
KCktPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZyAmJiAhU2VsZWN0b3JDaGVja2VyOjp0YWdN
YXRjaGVzKG1fZWxlbWVudCwgcnVsZURhdGEuc2VsZWN0b3IoKS0+dGFnUU5hbWUoKSkpCisgICAg
ICAgIGlmIChydWxlRGF0YS5zZWxlY3RvcigpLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpUYWcg
JiYgIVNlbGVjdG9yQ2hlY2tlcjo6dGFnTWF0Y2hlcyhzdGF0ZS5lbGVtZW50LCBydWxlRGF0YS5z
ZWxlY3RvcigpLT50YWdRTmFtZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVj
dG9yKG1fZWxlbWVudCwgcnVsZURhdGEuc2VsZWN0b3IoKSkpCisgICAgICAgIGlmICghU2VsZWN0
b3JDaGVja2VyOjpmYXN0Q2hlY2tSaWdodG1vc3RBdHRyaWJ1dGVTZWxlY3RvcihzdGF0ZS5lbGVt
ZW50LCBydWxlRGF0YS5zZWxlY3RvcigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgcmV0dXJuIG1fc2VsZWN0b3JDaGVja2VyLmZhc3RDaGVjayhydWxlRGF0YS5zZWxlY3Rv
cigpLCBtX2VsZW1lbnQpOworCisgICAgICAgIHJldHVybiBtX3NlbGVjdG9yQ2hlY2tlci5mYXN0
Q2hlY2socnVsZURhdGEuc2VsZWN0b3IoKSwgc3RhdGUuZWxlbWVudCk7CiAgICAgfQogCiAgICAg
Ly8gU2xvdyBwYXRoLgotICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRl
eHQgY29udGV4dChydWxlRGF0YS5zZWxlY3RvcigpLCBtX2VsZW1lbnQsIFNlbGVjdG9yQ2hlY2tl
cjo6VmlzaXRlZE1hdGNoRW5hYmxlZCk7Ci0gICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBzdHls
ZSgpOworICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgY29udGV4
dChydWxlRGF0YS5zZWxlY3RvcigpLCBzdGF0ZS5lbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlZp
c2l0ZWRNYXRjaEVuYWJsZWQpOworICAgIGNvbnRleHQuZWxlbWVudFN0eWxlID0gc3RhdGUuc3R5
bGUuZ2V0KCk7CiAgICAgY29udGV4dC5zY29wZSA9IHNjb3BlOwotICAgIGNvbnRleHQucHNldWRv
U3R5bGUgPSBtX3BzZXVkb1N0eWxlOwotICAgIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2ggbWF0Y2gg
PSBtX3NlbGVjdG9yQ2hlY2tlci5tYXRjaChjb250ZXh0LCBtX2R5bmFtaWNQc2V1ZG8sIERPTVNp
YmxpbmdUcmF2ZXJzYWxTdHJhdGVneSgpKTsKKyAgICBjb250ZXh0LnBzZXVkb1N0eWxlID0gc3Rh
dGUucHNldWRvU3R5bGU7CisgICAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBtYXRjaCA9IG1fc2Vs
ZWN0b3JDaGVja2VyLm1hdGNoKGNvbnRleHQsIHN0YXRlLmR5bmFtaWNQc2V1ZG8sIERPTVNpYmxp
bmdUcmF2ZXJzYWxTdHJhdGVneSgpKTsKICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JDaGVja2Vy
OjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9wc2V1
ZG9TdHlsZSAhPSBOT1BTRVVETyAmJiBtX3BzZXVkb1N0eWxlICE9IG1fZHluYW1pY1BzZXVkbykK
KyAgICBpZiAoc3RhdGUucHNldWRvU3R5bGUgIT0gTk9QU0VVRE8gJiYgc3RhdGUucHNldWRvU3R5
bGUgIT0gc3RhdGUuZHluYW1pY1BzZXVkbykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJl
dHVybiB0cnVlOwogfQpAQCAtMjMwOSw3ICsyMzA4LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpj
aGVja1JlZ2lvblNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3RvciwgRWxl
bWUKICAgICBpZiAoIXJlZ2lvblNlbGVjdG9yIHx8ICFyZWdpb25FbGVtZW50KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBtX3BzZXVkb1N0eWxlID0gTk9QU0VVRE87CisgICAgbV9zdGF0
ZS5wc2V1ZG9TdHlsZSA9IE5PUFNFVURPOwogCiAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciog
cyA9IHJlZ2lvblNlbGVjdG9yOyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKQogICAg
ICAgICBpZiAobV9zZWxlY3RvckNoZWNrZXIubWF0Y2hlcyhzLCByZWdpb25FbGVtZW50KSkKQEAg
LTIzMzQsNyArMjMzMyw3IEBAIExlbmd0aCBTdHlsZVJlc29sdmVyOjpjb252ZXJ0VG9GbG9hdExl
bmd0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFJlCiB0ZW1wbGF0ZSA8U3R5
bGVSZXNvbHZlcjo6U3R5bGVBcHBsaWNhdGlvblBhc3MgcGFzcz4KIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0
eWxlUnVsZSogcnVsZSwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBQcm9w
ZXJ0eVdoaXRlbGlzdFR5cGUgcHJvcGVydHlXaGl0ZWxpc3RUeXBlKQogewotICAgIEFTU0VSVCgo
cHJvcGVydHlXaGl0ZWxpc3RUeXBlICE9IFByb3BlcnR5V2hpdGVsaXN0UmVnaW9uKSB8fCBtX3Jl
Z2lvbkZvclN0eWxpbmcpOworICAgIEFTU0VSVCgocHJvcGVydHlXaGl0ZWxpc3RUeXBlICE9IFBy
b3BlcnR5V2hpdGVsaXN0UmVnaW9uKSB8fCBtX3N0YXRlLnJlZ2lvbkZvclN0eWxpbmcpOwogICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxQcm9jZXNzUnVsZShkb2N1bWVudCgpLCBydWxlLCB0aGlzKTsKIAogICAg
IHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBwcm9wZXJ0aWVzLT5wcm9wZXJ0eUNvdW50KCk7CkBA
IC0yMzc4LDcgKzIzNzcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyhj
b25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bAogICAgICAgICAgICAg
ICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOwogICAgICAg
ICAgICAgLy8gd2UgYXBwbHkgbGluZS1oZWlnaHQgbGF0ZXIKICAgICAgICAgICAgIGVsc2UgaWYg
KHByb3BlcnR5ID09IENTU1Byb3BlcnR5TGluZUhlaWdodCkKLSAgICAgICAgICAgICAgICBtX2xp
bmVIZWlnaHRWYWx1ZSA9IGN1cnJlbnQudmFsdWUoKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRl
LmxpbmVIZWlnaHRWYWx1ZSA9IGN1cnJlbnQudmFsdWUoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIExvd1ByaW9yaXR5UHJvcGVydGllczoKICAgICAgICAgICAgIGlmIChwcm9w
ZXJ0eSA+IENTU1Byb3BlcnR5TGluZUhlaWdodCkKQEAgLTIzOTQsMTggKzIzOTMsMTkgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0
JiBtYXRjaFJlc3VsdCwgYm9vbAogICAgIGlmIChzdGFydEluZGV4ID09IC0xKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAobV9zdHlsZS0+aW5zaWRlTGluaygpICE9IE5vdEluc2lkZUxpbmsp
IHsKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworICAgIGlmIChzdGF0ZS5zdHlsZS0+aW5z
aWRlTGluaygpICE9IE5vdEluc2lkZUxpbmspIHsKICAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0
SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewogICAgICAgICAgICAgY29uc3QgTWF0Y2hlZFBy
b3BlcnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRp
ZXNbaV07CiAgICAgICAgICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gbWF0Y2hlZFByb3Bl
cnRpZXMubGlua01hdGNoVHlwZTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBu
aWNlciB0byBwYXNzIHRoZXNlIGFzIGFyZ3VtZW50cyBidXQgdGhhdCByZXF1aXJlcyBjaGFuZ2Vz
IGluIG1hbnkgcGxhY2VzLgotICAgICAgICAgICAgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGUgPSBsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbms7Ci0gICAgICAg
ICAgICBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYg
U2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7CisgICAgICAgICAgICBzdGF0ZS5hcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpN
YXRjaExpbms7CisgICAgICAgICAgICBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlID0gbGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOwogCiAg
ICAgICAgICAgICBhcHBseVByb3BlcnRpZXM8cGFzcz4obWF0Y2hlZFByb3BlcnRpZXMucHJvcGVy
dGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFudCwgaW5o
ZXJpdGVkT25seSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPihtYXRjaGVkUHJv
cGVydGllcy53aGl0ZWxpc3RUeXBlKSk7CiAgICAgICAgIH0KLSAgICAgICAgbV9hcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUgPSB0cnVlOwotICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUgPSBmYWxzZTsKKyAgICAgICAgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxh
clN0eWxlID0gdHJ1ZTsKKyAgICAgICAgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtT
dHlsZSA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGZvciAoaW50IGkgPSBz
dGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKQEAgLTI1MTMsNiArMjUxMyw3IEBAIHN0
YXRpYyBib29sIGlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQsIGNvbnN0IFJlCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFBy
b3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdCBFbGVtZW50KiBl
bGVtZW50KQogewogICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0
YXRlOwogICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9IG1hdGNoUmVzdWx0LmlzQ2FjaGVhYmxlID8g
Y29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGll
cy5kYXRhKCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSkgOiAwOwogICAg
IGJvb2wgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAgICAgY29uc3QgTWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZUl0ZW0qIGNhY2hlSXRlbSA9IDA7CkBAIC0yNTIwLDE1ICsyNTIxLDE1IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3Vs
dCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIC8vIFdlIGNhbiBidWlsZCB1cCB0aGUgc3R5
bGUgYnkgY29weWluZyBub24taW5oZXJpdGVkIHByb3BlcnRpZXMgZnJvbSBhbiBlYXJsaWVyIHN0
eWxlIG9iamVjdCBidWlsdCB1c2luZyB0aGUgc2FtZSBleGFjdAogICAgICAgICAvLyBzdHlsZSBk
ZWNsYXJhdGlvbnMuIFdlIHRoZW4gb25seSBuZWVkIHRvIGFwcGx5IHRoZSBpbmhlcml0ZWQgcHJv
cGVydGllcywgaWYgYW55LCBhcyB0aGVpciB2YWx1ZXMgY2FuIGRlcGVuZCBvbiB0aGUgCiAgICAg
ICAgIC8vIGVsZW1lbnQgY29udGV4dC4gVGhpcyBpcyBmYXN0IGFuZCBzYXZlcyBtZW1vcnkgYnkg
cmV1c2luZyB0aGUgc3R5bGUgZGF0YSBzdHJ1Y3R1cmVzLgotICAgICAgICBtX3N0eWxlLT5jb3B5
Tm9uSW5oZXJpdGVkRnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKLSAgICAgICAg
aWYgKG1fcGFyZW50U3R5bGUtPmluaGVyaXRlZERhdGFTaGFyZWQoY2FjaGVJdGVtLT5wYXJlbnRS
ZW5kZXJTdHlsZS5nZXQoKSkgJiYgIWlzQXRTaGFkb3dCb3VuZGFyeShlbGVtZW50KSkgewotICAg
ICAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXR1cyA9IG1fc3R5bGUtPmluc2lkZUxpbmsoKTsK
KyAgICAgICAgc3RhdGUuc3R5bGUtPmNvcHlOb25Jbmhlcml0ZWRGcm9tKGNhY2hlSXRlbS0+cmVu
ZGVyU3R5bGUuZ2V0KCkpOworICAgICAgICBpZiAoc3RhdGUucGFyZW50U3R5bGUtPmluaGVyaXRl
ZERhdGFTaGFyZWQoY2FjaGVJdGVtLT5wYXJlbnRSZW5kZXJTdHlsZS5nZXQoKSkgJiYgIWlzQXRT
aGFkb3dCb3VuZGFyeShlbGVtZW50KSkgeworICAgICAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0
YXR1cyA9IHN0YXRlLnN0eWxlLT5pbnNpZGVMaW5rKCk7CiAgICAgICAgICAgICAvLyBJZiB0aGUg
Y2FjaGUgaXRlbSBwYXJlbnQgc3R5bGUgaGFzIGlkZW50aWNhbCBpbmhlcml0ZWQgcHJvcGVydGll
cyB0byB0aGUgY3VycmVudCBwYXJlbnQgc3R5bGUgdGhlbiB0aGUKICAgICAgICAgICAgIC8vIHJl
c3VsdGluZyBzdHlsZSB3aWxsIGJlIGlkZW50aWNhbCB0b28uIFdlIGNvcHkgdGhlIGluaGVyaXRl
ZCBwcm9wZXJ0aWVzIG92ZXIgZnJvbSB0aGUgY2FjaGUgYW5kIGFyZSBkb25lLgotICAgICAgICAg
ICAgbV9zdHlsZS0+aW5oZXJpdEZyb20oY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7Cisg
ICAgICAgICAgICBzdGF0ZS5zdHlsZS0+aW5oZXJpdEZyb20oY2FjaGVJdGVtLT5yZW5kZXJTdHls
ZS5nZXQoKSk7CiAKICAgICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHkgdGhlIGxpbmsgc3RhdHVz
IGlzIHRyZWF0ZWQgbGlrZSBhbiBpbmhlcml0ZWQgcHJvcGVydHkuIFdlIG5lZWQgdG8gZXhwbGlj
aXRseSByZXN0b3JlIGl0LgotICAgICAgICAgICAgbV9zdHlsZS0+c2V0SW5zaWRlTGluayhsaW5r
U3RhdHVzKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0
dXMpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGFwcGx5SW5oZXJp
dGVkT25seSA9IHRydWU7IApAQCAtMjU0NiwxNCArMjU0NywxNCBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0
LCBjb25zdAogICAgIC8vIGhpZ2gtcHJpb3JpdHkgcHJvcGVydGllcyBmaXJzdCwgaS5lLiwgdGhv
c2UgcHJvcGVydGllcyB0aGF0IG90aGVyIHByb3BlcnRpZXMgZGVwZW5kIG9uLgogICAgIC8vIFRo
ZSBvcmRlciBpcyAoMSkgaGlnaC1wcmlvcml0eSBub3QgaW1wb3J0YW50LCAoMikgaGlnaC1wcmlv
cml0eSBpbXBvcnRhbnQsICgzKSBub3JtYWwgbm90IGltcG9ydGFudAogICAgIC8vIGFuZCAoNCkg
bm9ybWFsIGltcG9ydGFudC4KLSAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAgc3RhdGUu
bGluZUhlaWdodFZhbHVlID0gMDsKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlv
cml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCBmYWxzZSwgMCwgbWF0Y2hSZXN1bHQubWF0Y2hl
ZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgICBhcHBseU1h
dGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVl
LCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMu
bGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAgICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1
bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdo
UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2Vz
LmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0
ZWRPbmx5KTsKIAotICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpICE9IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSkgewotICAgICAgICBt
X2ZvbnREaXJ0eSA9IHRydWU7CisgICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRl
clN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gc3RhdGUuc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSkg
eworICAgICAgICBzdGF0ZS5mb250RGlydHkgPSB0cnVlOwogICAgICAgICBhcHBseUluaGVyaXRl
ZE9ubHkgPSBmYWxzZTsKICAgICB9CiAKQEAgLTI1NjEsMTEgKzI1NjIsMTEgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRj
aFJlc3VsdCwgY29uc3QKICAgICB1cGRhdGVGb250KCk7CiAKICAgICAvLyBMaW5lLWhlaWdodCBp
cyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUuCi0gICAg
aWYgKG1fbGluZUhlaWdodFZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOworICAgIGlmIChzdGF0ZS5saW5lSGVpZ2h0
VmFsdWUpCisgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBzdGF0
ZS5saW5lSGVpZ2h0VmFsdWUpOwogCiAgICAgLy8gTWFueSBwcm9wZXJ0aWVzIGRlcGVuZCBvbiB0
aGUgZm9udC4gSWYgaXQgY2hhbmdlcyB3ZSBqdXN0IGFwcGx5IGFsbCBwcm9wZXJ0aWVzLgotICAg
IGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+Zm9udERlc2NyaXB0aW9u
KCkgIT0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkpCisgICAgaWYgKGNhY2hlSXRlbSAmJiBj
YWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5mb250RGVzY3JpcHRpb24oKSAhPSBzdGF0ZS5zdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCkpCiAgICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwog
CiAgICAgLy8gTm93IGRvIHRoZSBub3JtYWwgcHJpb3JpdHkgVUEgcHJvcGVydGllcy4KQEAgLTI1
ODMsMTMgKzI1ODQsMTMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0
aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICAvLyBTdGFydCBs
b2FkaW5nIHJlc291cmNlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCiAgICAgbG9hZFBlbmRp
bmdSZXNvdXJjZXMoKTsKICAgICAKLSAgICBBU1NFUlQoIW1fZm9udERpcnR5KTsKKyAgICBBU1NF
UlQoIXN0YXRlLmZvbnREaXJ0eSk7CiAgICAgCiAgICAgaWYgKGNhY2hlSXRlbSB8fCAhY2FjaGVI
YXNoKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3Bl
cnRpZXNDYWNoZShtX2VsZW1lbnQsIG1fc3R5bGUuZ2V0KCksIG1fcGFyZW50U3R5bGUpKQorICAg
IGlmICghaXNDYWNoZWFibGVJbk1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoc3RhdGUuZWxlbWVudCwg
c3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnBhcmVudFN0eWxlKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGFkZFRvTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShtX3N0eWxlLmdldCgpLCBtX3BhcmVudFN0
eWxlLCBjYWNoZUhhc2gsIG1hdGNoUmVzdWx0KTsKKyAgICBhZGRUb01hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGUoc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnBhcmVudFN0eWxlLCBjYWNoZUhhc2gsIG1h
dGNoUmVzdWx0KTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVQYWdlUnVsZXMoY29u
c3QgU3R5bGVSdWxlUGFnZSogcjEsIGNvbnN0IFN0eWxlUnVsZVBhZ2UqIHIyKQpAQCAtMjY1NCw3
ICsyNjU1LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFBhZ2VSdWxlc0Zvckxpc3QoVmVj
dG9yPFN0eWxlUnVsZVBhZ2UqPiYgbWF0Y2hlZFJ1bGVzLAogYm9vbCBTdHlsZVJlc29sdmVyOjpp
c0xlZnRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0CiB7CiAgICAgYm9vbCBpc0ZpcnN0UGFnZUxl
ZnQgPSBmYWxzZTsKLSAgICBpZiAoIW1fcm9vdEVsZW1lbnRTdHlsZS0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpKQorICAgIGlmICghbV9zdGF0ZS5yb290RWxlbWVudFN0eWxlLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkpCiAgICAgICAgIGlzRmlyc3RQYWdlTGVmdCA9IHRydWU7CiAKICAgICBy
ZXR1cm4gKHBhZ2VJbmRleCArIChpc0ZpcnN0UGFnZUxlZnQgPyAxIDogMCkpICUgMjsKQEAgLTI3
NjcsNyArMjc2OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUo
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBSZW5kCiB7CiAgICAgaW5pdEVsZW1l
bnQoMCk7CiAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZSgwLCBzdHlsZSk7Ci0gICAgbV9zdHlsZSA9
IHN0eWxlOworICAgIG1fc3RhdGUuc3R5bGUgPSBzdHlsZTsKICAgICBhcHBseVByb3BlcnR5VG9D
dXJyZW50U3R5bGUoaWQsIHZhbHVlKTsKIH0KIApAQCAtMjg3OSwxMCArMjg4MCwxMCBAQCBpbmxp
bmUgYm9vbCBTdHlsZVJlc29sdmVyOjppc1ZhbGlkQ3VlU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkKQogLy8gcHJvcGVydGllcyB0aGF0IGFyZSBOT1QgYWxsb3dlZCB0byBzY2FsZSB3aXRo
aW4gYSB6b29tZWQgU1ZHIGRvY3VtZW50IChsZXR0ZXIvd29yZC1zcGFjaW5nL2ZvbnQtc2l6ZSku
CiBib29sIFN0eWxlUmVzb2x2ZXI6OnVzZVNWR1pvb21SdWxlcygpCiB7Ci0gICAgcmV0dXJuIG1f
ZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlzU1ZHRWxlbWVudCgpOworICAgIHJldHVybiBtX3N0YXRl
LmVsZW1lbnQgJiYgbV9zdGF0ZS5lbGVtZW50LT5pc1NWR0VsZW1lbnQoKTsKIH0KIAotc3RhdGlj
IGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBMZW5ndGgmIHdvcmtpbmdMZW5ndGgpCitz
dGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmlt
aXRpdmVWYWx1ZSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBMZW5ndGgmIHdv
cmtpbmdMZW5ndGgpCiB7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENT
U1ZhbHVlV2Via2l0TWluQ29udGVudCkgewogICAgICAgICB3b3JraW5nTGVuZ3RoID0gTGVuZ3Ro
KE1pbkNvbnRlbnQpOwpAQCAtMjg5NCw3ICsyODk1LDcgQEAgc3RhdGljIGJvb2wgY3JlYXRlR3Jp
ZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFN0eWxlUmVz
b2wKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgd29ya2luZ0xlbmd0aCA9IHBy
aW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBl
cmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbiB8IEF1dG9Db252
ZXJzaW9uPihzZWxlY3Rvci0+c3R5bGUoKSwgc2VsZWN0b3ItPnJvb3RFbGVtZW50U3R5bGUoKSwg
c2VsZWN0b3ItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgd29ya2luZ0xlbmd0aCA9
IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8
IFBlcmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbiB8IEF1dG9D
b252ZXJzaW9uPihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgc3Rh
dGUuc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgaWYgKHdvcmtpbmdMZW5ndGguaXNVbmRl
ZmluZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yOTA0LDEyICsyOTA1LDEyIEBA
IHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlLCBTdHlsZVJlc29sCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBi
b29sIGNyZWF0ZUdyaWRUcmFja01pbk1heChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFs
dWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBHcmlkVHJhY2tTaXplJiB0cmFja1NpemUpCitz
dGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tNaW5NYXgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlLCBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIEdyaWRUcmFja1Np
emUmIHRyYWNrU2l6ZSkKIHsKICAgICBQYWlyKiBtaW5NYXhUcmFja0JyZWFkdGggPSBwcmltaXRp
dmVWYWx1ZS0+Z2V0UGFpclZhbHVlKCk7CiAgICAgaWYgKCFtaW5NYXhUcmFja0JyZWFkdGgpIHsK
ICAgICAgICAgTGVuZ3RoIHdvcmtpbmdMZW5ndGg7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRy
YWNrQnJlYWR0aChwcmltaXRpdmVWYWx1ZSwgc2VsZWN0b3IsIHdvcmtpbmdMZW5ndGgpKQorICAg
ICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgocHJpbWl0aXZlVmFsdWUsIHN0YXRlLCB3
b3JraW5nTGVuZ3RoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICB0cmFj
a1NpemUuc2V0TGVuZ3RoKHdvcmtpbmdMZW5ndGgpOwpAQCAtMjkxOCwxNCArMjkxOSwxNCBAQCBz
dGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tNaW5NYXgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlLCBTdHlsZVJlc29sdgogCiAgICAgTGVuZ3RoIG1pblRyYWNrQnJlYWR0aDsKICAg
ICBMZW5ndGggbWF4VHJhY2tCcmVhZHRoOwotICAgIGlmICghY3JlYXRlR3JpZFRyYWNrQnJlYWR0
aChtaW5NYXhUcmFja0JyZWFkdGgtPmZpcnN0KCksIHNlbGVjdG9yLCBtaW5UcmFja0JyZWFkdGgp
IHx8ICFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKG1pbk1heFRyYWNrQnJlYWR0aC0+c2Vjb25kKCks
IHNlbGVjdG9yLCBtYXhUcmFja0JyZWFkdGgpKQorICAgIGlmICghY3JlYXRlR3JpZFRyYWNrQnJl
YWR0aChtaW5NYXhUcmFja0JyZWFkdGgtPmZpcnN0KCksIHN0YXRlLCBtaW5UcmFja0JyZWFkdGgp
IHx8ICFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKG1pbk1heFRyYWNrQnJlYWR0aC0+c2Vjb25kKCks
IHN0YXRlLCBtYXhUcmFja0JyZWFkdGgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB0
cmFja1NpemUuc2V0TWluTWF4KG1pblRyYWNrQnJlYWR0aCwgbWF4VHJhY2tCcmVhZHRoKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrR3JvdXAoQ1NT
VmFsdWUqIHZhbHVlLCBTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgVmVjdG9yPEdyaWRUcmFja1Np
emU+JiB0cmFja1NpemVzKQorc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrR3JvdXAoQ1NTVmFs
dWUqIHZhbHVlLCBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIFZlY3RvcjxHcmlk
VHJhY2tTaXplPiYgdHJhY2tTaXplcykKIHsKICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yOTM2LDcgKzI5MzcsNyBAQCBzdGF0aWMgYm9v
bCBjcmVhdGVHcmlkVHJhY2tHcm91cChDU1NWYWx1ZSogdmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNl
bGVjdG9yLCBWZWN0bwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIEdyaWRU
cmFja1NpemUgdHJhY2tTaXplOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja01pbk1heChz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGN1cnJWYWx1ZSksIHNlbGVjdG9yLCB0cmFj
a1NpemUpKQorICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja01pbk1heChzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KGN1cnJWYWx1ZSksIHN0YXRlLCB0cmFja1NpemUpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHRyYWNrU2l6ZXMuYXBwZW5kKHRyYWNrU2l6
ZSk7CkBAIC0yOTQ0LDcgKzI5NDUsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tHcm91
cChDU1NWYWx1ZSogdmFsdWUsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBWZWN0bwogICAgIHJl
dHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tMaXN0KENTU1ZhbHVl
KiB2YWx1ZSwgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0cmFja1NpemVzLCBTdHlsZVJlc29sdmVy
KiBzZWxlY3RvcikKK3N0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3QoQ1NTVmFsdWUqIHZh
bHVlLCBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6ZXMsIGNvbnN0IFN0eWxlUmVzb2x2
ZXI6OlN0YXRlJiBzdGF0ZSkKIHsKICAgICAvLyBIYW5kbGUgJ25vbmUnLgogICAgIGlmICh2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CkBAIC0yOTUyLDcgKzI5NTMsNyBAQCBzdGF0aWMgYm9v
bCBjcmVhdGVHcmlkVHJhY2tMaXN0KENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPEdyaWRUcmFja1Np
emU+JiB0cmFja1NpegogICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVOb25lOwogICAgIH0KIAotICAgIHJldHVybiBjcmVhdGVHcmlkVHJhY2tHcm91
cCh2YWx1ZSwgc2VsZWN0b3IsIHRyYWNrU2l6ZXMpOworICAgIHJldHVybiBjcmVhdGVHcmlkVHJh
Y2tHcm91cCh2YWx1ZSwgc3RhdGUsIHRyYWNrU2l6ZXMpOwogfQogCiAKQEAgLTMwMDAsNyArMzAw
MSw3IEBAIHN0YXRpYyBib29sIGhhc1ZhcmlhYmxlUmVmZXJlbmNlKENTU1ZhbHVlKiB2YWx1ZSkK
IAogdm9pZCBTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFibGVzKENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+
ID4mIGtub3duRXhwcmVzc2lvbnMpCiB7Ci0gICAgc3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0
cmluZz4gZXhwcmVzc2lvbihpZCwgdmFsdWUtPnNlcmlhbGl6ZVJlc29sdmluZ1ZhcmlhYmxlcygq
c3R5bGUoKS0+dmFyaWFibGVzKCkpKTsKKyAgICBzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3Ry
aW5nPiBleHByZXNzaW9uKGlkLCB2YWx1ZS0+c2VyaWFsaXplUmVzb2x2aW5nVmFyaWFibGVzKCpt
X3N0YXRlLnN0eWxlLT52YXJpYWJsZXMoKSkpOwogCiAgICAgaWYgKGtub3duRXhwcmVzc2lvbnMu
Y29udGFpbnMoZXhwcmVzc2lvbikpCiAgICAgICAgIHJldHVybjsgLy8gY3ljbGUgZGV0ZWN0ZWQu
CkBAIC0zMDMyLDE5ICszMDMzLDIwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgfQogI2VuZGlmCiAKLSAg
ICBib29sIGlzSW5oZXJpdCA9IG1fcGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1
ZSgpOwotICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgKCFt
X3BhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7CisgICAgU3RhdGUmIHN0
YXRlID0gbV9zdGF0ZTsKKyAgICBib29sIGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVudE5vZGUgJiYg
dmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKKyAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5p
c0luaXRpYWxWYWx1ZSgpIHx8ICghc3RhdGUucGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0
ZWRWYWx1ZSgpKTsKIAogICAgIEFTU0VSVCghaXNJbmhlcml0IHx8ICFpc0luaXRpYWwpOyAvLyBp
c0luaGVyaXQgLT4gIWlzSW5pdGlhbCAmJiBpc0luaXRpYWwgLT4gIWlzSW5oZXJpdAotICAgIEFT
U0VSVCghaXNJbmhlcml0IHx8IChtX3BhcmVudE5vZGUgJiYgbV9wYXJlbnRTdHlsZSkpOyAvLyBp
c0luaGVyaXQgLT4gKG1fcGFyZW50Tm9kZSAmJiBtX3BhcmVudFN0eWxlKQorICAgIEFTU0VSVCgh
aXNJbmhlcml0IHx8IChzdGF0ZS5wYXJlbnROb2RlICYmIHN0YXRlLnBhcmVudFN0eWxlKSk7IC8v
IGlzSW5oZXJpdCAtPiAoc3RhdGUucGFyZW50Tm9kZSAmJiBzdGF0ZS5wYXJlbnRTdHlsZSkKIAot
ICAgIGlmICghYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgJiYgKCFhcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlKCkgfHwgIWlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KGlkKSkp
IHsKKyAgICBpZiAoIXN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSAmJiAoIXN0YXRl
LmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgfHwgIWlzVmFsaWRWaXNpdGVkTGlua1By
b3BlcnR5KGlkKSkpIHsKICAgICAgICAgLy8gTGltaXQgdGhlIHByb3BlcnRpZXMgdGhhdCBjYW4g
YmUgYXBwbGllZCB0byBvbmx5IHRoZSBvbmVzIGhvbm9yZWQgYnkgOnZpc2l0ZWQuCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoaXNJbmhlcml0ICYmICFtX3BhcmVudFN0eWxlLT5o
YXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpICYmICFDU1NQcm9wZXJ0eTo6aXNJbmhl
cml0ZWRQcm9wZXJ0eShpZCkpCi0gICAgICAgIG1fcGFyZW50U3R5bGUtPnNldEhhc0V4cGxpY2l0
bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCk7CisgICAgaWYgKGlzSW5oZXJpdCAmJiAhc3RhdGUucGFy
ZW50U3R5bGUtPmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkgJiYgIUNTU1Byb3Bl
cnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkKKyAgICAgICAgc3RhdGUucGFyZW50U3R5bGUt
PnNldEhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCk7CiAKICNpZiBFTkFCTEUoQ1NT
X1ZBUklBQkxFUykKICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlWYXJpYWJsZSkgewpAQCAtMzA1
Miw3ICszMDU0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgQ1NTVmFyaWFibGVWYWx1ZSogdmFy
aWFibGUgPSBzdGF0aWNfY2FzdDxDU1NWYXJpYWJsZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBB
U1NFUlQoIXZhcmlhYmxlLT5uYW1lKCkuaXNFbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKCF2YXJp
YWJsZS0+dmFsdWUoKS5pc0VtcHR5KCkpOwotICAgICAgICBtX3N0eWxlLT5zZXRWYXJpYWJsZSh2
YXJpYWJsZS0+bmFtZSgpLCB2YXJpYWJsZS0+dmFsdWUoKSk7CisgICAgICAgIHN0YXRlLnN0eWxl
LT5zZXRWYXJpYWJsZSh2YXJpYWJsZS0+bmFtZSgpLCB2YXJpYWJsZS0+dmFsdWUoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTMwNzEsNyArMzA3Myw3IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAKICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpID8gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkg
OiAwOwogCi0gICAgZmxvYXQgem9vbUZhY3RvciA9IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsK
KyAgICBmbG9hdCB6b29tRmFjdG9yID0gc3RhdGUuc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKIAog
ICAgIC8vIFdoYXQgZm9sbG93cyBpcyBhIGxpc3QgdGhhdCBtYXBzIHRoZSBDU1MgcHJvcGVydGll
cyBpbnRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgZnJvbnQtZW5kCiAgICAgLy8gUmVuZGVyU3R5bGUg
dmFsdWVzLiBTaG9ydGhhbmRzIChlLmcuIGJvcmRlciwgYmFja2dyb3VuZCkgb2NjdXIgaW4gdGhp
cyBsaXN0IGFzIHdlbGwgYW5kCkBAIC0zMDg1LDcgKzMwODcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
ICAgICAgICAgLy8gbm90ZSBpcyBhIHJlbWluZGVyIHRoYXQgZXZlbnR1YWxseSAiaW5oZXJpdCIg
bmVlZHMgdG8gYmUgc3VwcG9ydGVkLgogCiAgICAgICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0g
ICAgICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJDb250ZW50KCk7CisgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUtPmNsZWFyQ29udGVudCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KIApAQCAtMzA5NywxOSArMzA5OSwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOwogICAgICAgICAgICAgICAgIGlm
IChpdGVtLT5pc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkgewogICAgICAgICAgICAgICAgICAgICBp
ZiAoaXRlbS0+aXNHcmFkaWVudFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0
eWxlLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxD
U1NHcmFkaWVudFZhbHVlKj4oaXRlbSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMp
LmdldCgpKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5z
ZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NHcmFk
aWVudFZhbHVlKj4oaXRlbSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpLmdldCgp
KSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3Rh
dGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVk
SW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlKj4oaXRlbSkp
LCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogI2lmIEVOQUJM
RShDU1NfSU1BR0VfU0VUKQogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNJbWFn
ZVNldFZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChz
ZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJ
bWFnZVNldFZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0
ZS5zdHlsZS0+c2V0Q29udGVudChzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250
ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVNldFZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwogICAg
ICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogI2VuZGlmCiAgICAgICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VWYWx1ZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVl
KENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KGl0ZW0pKSwg
ZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoY2Fj
aGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NT
SW1hZ2VWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
fQpAQCAtMzEyMCwxNyArMzEyMiwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBjb250ZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KGl0ZW0pOwogCiAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNTdHJp
bmcoKSkgewotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNvbnRlbnRW
YWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIGRpZFNldCk7CisgICAgICAgICAgICAgICAg
ICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUo
KS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUtPmlzQXR0cigpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gYSBuYW1lc3BhY2UgYmUgc3BlY2lmaWVkIGZv
ciBhbiBhdHRyKGZvbyk/Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3N0eWxlLT5zdHlsZVR5
cGUoKSA9PSBOT1BTRVVETykKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFVu
aXF1ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc3R5bGUtPnN0eWxlVHlwZSgp
ID09IE5PUFNFVURPKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFVu
aXF1ZSgpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtX3BhcmVudFN0eWxlLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRlLnBhcmVudFN0eWxlLT5zZXRVbmlxdWUoKTsKICAgICAgICAgICAgICAgICAgICAgUXVhbGlm
aWVkTmFtZSBhdHRyKG51bGxBdG9tLCBjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkuaW1w
bCgpLCBudWxsQXRvbSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUgPSBtX2VsZW1lbnQtPmdldEF0dHJpYnV0ZShhdHRyKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IHZhbHVl
LmltcGwoKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSA9IHN0YXRlLmVsZW1lbnQtPmdldEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQodmFsdWUuaXNOdWxsKCkgPyBlbXB0eUF0
b20gOiB2YWx1ZS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQgdGhl
IGF0dHJpYnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZQogICAgICAgICAgICAgICAgICAgICBt
X2ZlYXR1cmVzLmF0dHJzSW5SdWxlcy5hZGQoYXR0ci5sb2NhbE5hbWUoKS5pbXBsKCkpOwpAQCAt
MzE0MSwyNCArMzE0MywyNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgICAgICBpZiAo
bGlzdFN0eWxlSWRlbnQgIT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgICAgICAgICAgICAg
bGlzdFN0eWxlVHlwZSA9IHN0YXRpY19jYXN0PEVMaXN0U3R5bGVUeXBlPihsaXN0U3R5bGVJZGVu
dCAtIENTU1ZhbHVlRGlzYyk7CiAgICAgICAgICAgICAgICAgICAgIE93blB0cjxDb3VudGVyQ29u
dGVudD4gY291bnRlciA9IGFkb3B0UHRyKG5ldyBDb3VudGVyQ29udGVudChjb3VudGVyVmFsdWUt
PmlkZW50aWZpZXIoKSwgbGlzdFN0eWxlVHlwZSwgY291bnRlclZhbHVlLT5zZXBhcmF0b3IoKSkp
OwotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KGNvdW50ZXIucmVsZWFz
ZSgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVu
dChjb3VudGVyLnJlbGVhc2UoKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKGNvbnRlbnRWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlT3BlblF1b3RlOgotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0Q29udGVudChPUEVOX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUtPnNldENvbnRlbnQoT1BFTl9RVU9URSwgZGlkU2V0KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUNsb3NlUXVvdGU6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KENMT1NFX1FVT1RFLCBkaWRTZXQp
OworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoQ0xPU0Vf
UVVPVEUsIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVOb09wZW5RdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KE5PX09QRU5fUVVPVEUsIGRpZFNldCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb0Nsb3NlUXVvdGU6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KE5PX0NMT1NFX1FVT1RF
LCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRl
bnQoTk9fQ0xPU0VfUVVPVEUsIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkaWRT
ZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CkBAIC0zMTY4LDE2ICszMTcwLDE2IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFkaWRTZXQpCi0g
ICAgICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJDb250ZW50KCk7CisgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUtPmNsZWFyQ29udGVudCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVF1b3RlczoKICAgICAgICAgaWYgKGlzSW5oZXJpdCkg
ewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKG1fcGFyZW50U3R5bGUtPnF1b3Rlcygp
KTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRRdW90ZXMoc3RhdGUucGFyZW50U3R5bGUt
PnF1b3RlcygpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAo
aXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90ZXMoMCk7CisgICAgICAg
ICAgICBzdGF0ZS5zdHlsZS0+c2V0UXVvdGVzKDApOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewpAQCAtMzE5NSwxOSAr
MzE5NywxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIFN0cmluZyBlbmRRdW90ZSA9
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oc2Vjb25kKS0+Z2V0U3RyaW5nVmFsdWUo
KTsKICAgICAgICAgICAgICAgICBxdW90ZXMtPmFkZFBhaXIoc3RkOjptYWtlX3BhaXIoc3RhcnRR
dW90ZSwgZW5kUXVvdGUpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fc3R5bGUtPnNl
dFF1b3RlcyhxdW90ZXMpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFF1b3RlcyhxdW90
ZXMpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZSkgewogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90ZXMoUXVvdGVz
RGF0YTo6Y3JlYXRlKCkpOworICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRRdW90ZXMo
UXVvdGVzRGF0YTo6Y3JlYXRlKCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICBj
YXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseTogewogICAgICAgICAvLyBsaXN0IG9mIHN0cmluZ3Mg
YW5kIGlkcwogICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBGb250RGVzY3Jp
cHRpb24gcGFyZW50Rm9udERlc2NyaXB0aW9uID0gbV9wYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCk7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9z
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gcGFy
ZW50Rm9udERlc2NyaXB0aW9uID0gc3RhdGUucGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigp
OworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnN0
eWxlLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRH
ZW5lcmljRmFtaWx5KHBhcmVudEZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCkpOwogICAg
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShwYXJlbnRGb250RGVzY3JpcHRpb24u
Zmlyc3RGYW1pbHkoKSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNTcGVjaWZp
ZWRGb250KHBhcmVudEZvbnREZXNjcmlwdGlvbi5pc1NwZWNpZmllZEZvbnQoKSk7CkBAIC0zMjE3
LDcgKzMyMTksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogCiAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKICAg
ICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBpbml0aWFsRGVzYyA9IEZvbnREZXNjcmlwdGlvbigp
OwotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUt
PmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbiA9IHN0YXRlLnN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBzaXplIHRvIGFjY291bnQgZm9yIHRoZSBnZW5lcmljIGZh
bWlseSBjaGFuZ2UgZnJvbSBtb25vc3BhY2UKICAgICAgICAgICAgIC8vIHRvIG5vbi1tb25vc3Bh
Y2UuCiAgICAgICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgJiYgZm9u
dERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSkKQEAgLTMyMzEsNyArMzIzMyw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCiAKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9
IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICBG
b250RmFtaWx5JiBmaXJzdEZhbWlseSA9IGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpOwog
ICAgICAgICBGb250RmFtaWx5KiBjdXJyRmFtaWx5ID0gMDsKIApAQCAtMzMwOSwyNCArMzMxMSwy
NCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogLy8gc2hvcnRoYW5kIHByb3BlcnRpZXMKICAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZDoKICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAg
bV9zdHlsZS0+Y2xlYXJCYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAgICAgICBtX3N0eWxlLT5z
ZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xl
YXJCYWNrZ3JvdW5kTGF5ZXJzKCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0QmFja2dy
b3VuZENvbG9yKENvbG9yKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5oZXJpdCkgewotICAg
ICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEJhY2tncm91bmRMYXllcnMoKm1fcGFyZW50U3R5bGUt
PmJhY2tncm91bmRMYXllcnMoKSk7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRCYWNrZ3JvdW5k
Q29sb3IobV9wYXJlbnRTdHlsZS0+YmFja2dyb3VuZENvbG9yKCkpOworICAgICAgICAgICAgc3Rh
dGUuc3R5bGUtPmluaGVyaXRCYWNrZ3JvdW5kTGF5ZXJzKCpzdGF0ZS5wYXJlbnRTdHlsZS0+YmFj
a2dyb3VuZExheWVycygpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRCYWNrZ3JvdW5k
Q29sb3Ioc3RhdGUucGFyZW50U3R5bGUtPmJhY2tncm91bmRDb2xvcigpKTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2s6CiAgICAgICAg
IGlmIChpc0luaXRpYWwpCi0gICAgICAgICAgICBtX3N0eWxlLT5jbGVhck1hc2tMYXllcnMoKTsK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5jbGVhck1hc2tMYXllcnMoKTsKICAgICAgICAgZWxz
ZSBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdE1hc2tMYXllcnMo
Km1fcGFyZW50U3R5bGUtPm1hc2tMYXllcnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+
aW5oZXJpdE1hc2tMYXllcnMoKnN0YXRlLnBhcmVudFN0eWxlLT5tYXNrTGF5ZXJzKCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnQ6CiAgICAgICAgIGlmIChpc0lu
aGVyaXQpIHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBt
X3BhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNl
dExpbmVIZWlnaHQobV9wYXJlbnRTdHlsZS0+c3BlY2lmaWVkTGluZUhlaWdodCgpKTsKLSAgICAg
ICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlv
biBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5wYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7
CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TGluZUhlaWdodChzdGF0ZS5wYXJlbnRTdHls
ZS0+c3BlY2lmaWVkTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgIHN0YXRlLmxpbmVIZWlnaHRW
YWx1ZSA9IDA7CiAgICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsKICAgICAgICAgfSBlbHNlIGlmIChpc0luaXRpYWwpIHsKICAgICAgICAgICAgIFNldHRpbmdz
KiBzZXR0aW5ncyA9IGRvY3VtZW50U2V0dGluZ3MoKTsKQEAgLTMzMzUsOCArMzMzNyw4IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgaW5pdGlhbGl6
ZUZvbnRTdHlsZShzZXR0aW5ncyk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUp
IHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRp
YWxMaW5lSGVpZ2h0KCkpOwotICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOworICAg
ICAgICAgICAgc3RhdGUuc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxM
aW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgc3RhdGUubGluZUhlaWdodFZhbHVlID0gMDsKIAog
ICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICAgICAgICAg
IFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lzdGVtRm9udChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSwgZm9udERlc2NyaXB0aW9uKTsKQEAgLTMzNTIsNyArMzM1NCw3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250
KGRvY3VtZW50KCktPnByaW50aW5nKCkgfHwgIXNldHRpbmdzLT5zY3JlZW5Gb250U3Vic3RpdHV0
aW9uRW5hYmxlZCgpKTsKIAogICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgem9vbSBmYWN0
b3IuCi0gICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRD
b21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBtX3N0eWxlLmdldCgpLCBm
b250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgZm9udERlc2NyaXB0aW9uLnNwZWNpZmll
ZFNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKKyAgICAgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRv
Y3VtZW50KCksIHN0YXRlLnN0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNp
emUoKSwgZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzKCkp
KTsKICAgICAgICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNGb250VmFsdWUoKSkg
ewpAQCAtMzM3MCw3ICszMzcyLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHVwZGF0ZUZv
bnQoKTsKICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgZm9u
dC0+c2l6ZS5nZXQoKSk7CiAKLSAgICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gZm9udC0+
bGluZUhlaWdodC5nZXQoKTsKKyAgICAgICAgICAgIHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSA9IGZv
bnQtPmxpbmVIZWlnaHQuZ2V0KCk7CiAKICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlGb250RmFtaWx5LCBmb250LT5mYW1pbHkuZ2V0KCkpOwogICAgICAgICB9CkBAIC0zMzgy
LDExICszMzg0LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJv
eFNoYWRvdzogewogICAgICAgICBpZiAoaXNJbmhlcml0KSB7CiAgICAgICAgICAgICBpZiAoaWQg
PT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93KQotICAgICAgICAgICAgICAgIHJldHVybiBtX3N0eWxl
LT5zZXRUZXh0U2hhZG93KG1fcGFyZW50U3R5bGUtPnRleHRTaGFkb3coKSA/IGFkb3B0UHRyKG5l
dyBTaGFkb3dEYXRhKCptX3BhcmVudFN0eWxlLT50ZXh0U2hhZG93KCkpKSA6IG51bGxwdHIpOwot
ICAgICAgICAgICAgcmV0dXJuIG1fc3R5bGUtPnNldEJveFNoYWRvdyhtX3BhcmVudFN0eWxlLT5i
b3hTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCptX3BhcmVudFN0eWxlLT5ib3hT
aGFkb3coKSkpIDogbnVsbHB0cik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxl
LT5zZXRUZXh0U2hhZG93KHN0YXRlLnBhcmVudFN0eWxlLT50ZXh0U2hhZG93KCkgPyBhZG9wdFB0
cihuZXcgU2hhZG93RGF0YSgqc3RhdGUucGFyZW50U3R5bGUtPnRleHRTaGFkb3coKSkpIDogbnVs
bHB0cik7CisgICAgICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUtPnNldEJveFNoYWRvdyhzdGF0
ZS5wYXJlbnRTdHlsZS0+Ym94U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqc3Rh
dGUucGFyZW50U3R5bGUtPmJveFNoYWRvdygpKSkgOiBudWxscHRyKTsKICAgICAgICAgfQogICAg
ICAgICBpZiAoaXNJbml0aWFsIHx8IHByaW1pdGl2ZVZhbHVlKSAvLyBpbml0aWFsIHwgbm9uZQot
ICAgICAgICAgICAgcmV0dXJuIGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdyA/IG1fc3R5bGUt
PnNldFRleHRTaGFkb3cobnVsbHB0cikgOiBtX3N0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7
CisgICAgICAgICAgICByZXR1cm4gaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93ID8gc3RhdGUu
c3R5bGUtPnNldFRleHRTaGFkb3cobnVsbHB0cikgOiBzdGF0ZS5zdHlsZS0+c2V0Qm94U2hhZG93
KG51bGxwdHIpOwogCiAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAg
ICAgICByZXR1cm47CkBAIC0zMzk2LDI5ICszMzk4LDI5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAg
ICAgICBpZiAoIWN1cnJWYWx1ZS0+aXNTaGFkb3dWYWx1ZSgpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgU2hhZG93VmFsdWUqIGl0ZW0gPSBzdGF0aWNfY2FzdDxTaGFk
b3dWYWx1ZSo+KGN1cnJWYWx1ZSk7Ci0gICAgICAgICAgICBpbnQgeCA9IGl0ZW0tPngtPmNvbXB1
dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwot
ICAgICAgICAgICAgaW50IHkgPSBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwg
bV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGludCBibHVyID0g
aXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jv
b3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpIDogMDsKLSAgICAgICAgICAgIGludCBzcHJlYWQg
PSBpdGVtLT5zcHJlYWQgPyBpdGVtLT5zcHJlYWQtPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgp
LCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpIDogMDsKKyAgICAgICAgICAgIGludCB4
ID0gaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5y
b290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGludCB5ID0gaXRlbS0+
eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVu
dFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/
IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUu
cm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikgOiAwOworICAgICAgICAgICAgaW50IHNwcmVh
ZCA9IGl0ZW0tPnNwcmVhZCA/IGl0ZW0tPnNwcmVhZC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRl
LnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7CiAg
ICAgICAgICAgICBTaGFkb3dTdHlsZSBzaGFkb3dTdHlsZSA9IGl0ZW0tPnN0eWxlICYmIGl0ZW0t
PnN0eWxlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlSW5zZXQgPyBJbnNldCA6IE5vcm1hbDsKICAg
ICAgICAgICAgIENvbG9yIGNvbG9yOwogICAgICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQogICAg
ICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3Iu
Z2V0KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAobV9zdHlsZSkKLSAgICAgICAgICAgICAgICBj
b2xvciA9IG1fc3R5bGUtPmNvbG9yKCk7CisgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS5zdHls
ZSkKKyAgICAgICAgICAgICAgICBjb2xvciA9IHN0YXRlLnN0eWxlLT5jb2xvcigpOwogCiAgICAg
ICAgICAgICBPd25QdHI8U2hhZG93RGF0YT4gc2hhZG93RGF0YSA9IGFkb3B0UHRyKG5ldyBTaGFk
b3dEYXRhKEludFBvaW50KHgsIHkpLCBibHVyLCBzcHJlYWQsIHNoYWRvd1N0eWxlLCBpZCA9PSBD
U1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdywgY29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiBDb2xv
cjo6dHJhbnNwYXJlbnQpKTsKICAgICAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eVRleHRT
aGFkb3cpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0VGV4dFNoYWRvdyhzaGFkb3dEYXRh
LnJlbGVhc2UoKSwgaS5pbmRleCgpKTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90
IHRoZSBmaXJzdCBlbnRyeQorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRUZXh0U2hh
ZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3Qg
aWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmlu
ZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5
CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldEJveFNoYWRvdyhzaGFkb3dEYXRhLnJl
bGVhc2UoKSwgaS5pbmRleCgpKTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRo
ZSBmaXJzdCBlbnRyeQogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRf
QU5EX0lOSVRJQUwoYm94UmVmbGVjdCwgQm94UmVmbGVjdCkKICAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3hSZWZsZWN0KFJlbmRlclN0eWxl
Ojppbml0aWFsQm94UmVmbGVjdCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRCb3hS
ZWZsZWN0KFJlbmRlclN0eWxlOjppbml0aWFsQm94UmVmbGVjdCgpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCkBAIC0zNDI5LDEzICszNDMxLDEzIEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgIFJlZlB0cjxTdHlsZVJlZmxlY3Rpb24+IHJlZmxlY3Rpb24gPSBTdHlsZVJlZmxlY3Rp
b246OmNyZWF0ZSgpOwogICAgICAgICByZWZsZWN0aW9uLT5zZXREaXJlY3Rpb24oKnJlZmxlY3RW
YWx1ZS0+ZGlyZWN0aW9uKCkpOwogICAgICAgICBpZiAocmVmbGVjdFZhbHVlLT5vZmZzZXQoKSkK
LSAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChyZWZsZWN0VmFsdWUtPm9mZnNldCgp
LT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJz
aW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwg
em9vbUZhY3RvcikpOworICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RW
YWx1ZS0+b2Zmc2V0KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwg
UGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3RhdGUuc3R5bGUuZ2V0
KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpKTsKICAgICAgICAgTmluZVBp
ZWNlSW1hZ2UgbWFzazsKICAgICAgICAgbWFzay5zZXRNYXNrRGVmYXVsdHMoKTsKICAgICAgICAg
bV9zdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZShpZCwgcmVmbGVjdFZhbHVlLT5tYXNrKCksIG1h
c2spOwogICAgICAgICByZWZsZWN0aW9uLT5zZXRNYXNrKG1hc2spOwogCi0gICAgICAgIG1fc3R5
bGUtPnNldEJveFJlZmxlY3QocmVmbGVjdGlvbi5yZWxlYXNlKCkpOworICAgICAgICBzdGF0ZS5z
dHlsZS0+c2V0Qm94UmVmbGVjdChyZWZsZWN0aW9uLnJlbGVhc2UoKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVNyYzogLy8gT25seSB1c2VkIGluIEBmb250
LWZhY2UgcnVsZXMuCkBAIC0zNDQ0LDI5ICszNDQ2LDI5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAg
IHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZToKICAgICAgICAg
aWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVsZUNvbG9y
KG1fcGFyZW50U3R5bGUtPmNvbHVtblJ1bGVDb2xvcigpLmlzVmFsaWQoKSA/IG1fcGFyZW50U3R5
bGUtPmNvbHVtblJ1bGVDb2xvcigpIDogbV9wYXJlbnRTdHlsZS0+Y29sb3IoKSk7Ci0gICAgICAg
ICAgICBtX3N0eWxlLT5zZXRDb2x1bW5SdWxlU3R5bGUobV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVs
ZVN0eWxlKCkpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uUnVsZVdpZHRoKG1fcGFy
ZW50U3R5bGUtPmNvbHVtblJ1bGVXaWR0aCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5z
ZXRDb2x1bW5SdWxlQ29sb3Ioc3RhdGUucGFyZW50U3R5bGUtPmNvbHVtblJ1bGVDb2xvcigpLmlz
VmFsaWQoKSA/IHN0YXRlLnBhcmVudFN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKSA6IHN0YXRlLnBh
cmVudFN0eWxlLT5jb2xvcigpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb2x1bW5S
dWxlU3R5bGUoc3RhdGUucGFyZW50U3R5bGUtPmNvbHVtblJ1bGVTdHlsZSgpKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN0eWxlLT5zZXRDb2x1bW5SdWxlV2lkdGgoc3RhdGUucGFyZW50U3R5bGUtPmNv
bHVtblJ1bGVXaWR0aCgpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0luaXRpYWwpCi0gICAgICAg
ICAgICBtX3N0eWxlLT5yZXNldENvbHVtblJ1bGUoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxl
LT5yZXNldENvbHVtblJ1bGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXJxdWVlOgogICAgICAgICBpZiAoIWlzSW5oZXJpdCkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZURpcmVjdGlvbihtX3BhcmVudFN0eWxl
LT5tYXJxdWVlRGlyZWN0aW9uKCkpOwotICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVt
ZW50KG1fcGFyZW50U3R5bGUtPm1hcnF1ZWVJbmNyZW1lbnQoKSk7Ci0gICAgICAgIG1fc3R5bGUt
PnNldE1hcnF1ZWVTcGVlZChtX3BhcmVudFN0eWxlLT5tYXJxdWVlU3BlZWQoKSk7Ci0gICAgICAg
IG1fc3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQobV9wYXJlbnRTdHlsZS0+bWFycXVlZUxvb3BD
b3VudCgpKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUJlaGF2aW9yKG1fcGFyZW50U3R5
bGUtPm1hcnF1ZWVCZWhhdmlvcigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVE
aXJlY3Rpb24oc3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVEaXJlY3Rpb24oKSk7CisgICAgICAg
IHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KHN0YXRlLnBhcmVudFN0eWxlLT5tYXJx
dWVlSW5jcmVtZW50KCkpOworICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZVNwZWVkKHN0
YXRlLnBhcmVudFN0eWxlLT5tYXJxdWVlU3BlZWQoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlLT5z
ZXRNYXJxdWVlTG9vcENvdW50KHN0YXRlLnBhcmVudFN0eWxlLT5tYXJxdWVlTG9vcENvdW50KCkp
OworICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUJlaGF2aW9yKHN0YXRlLnBhcmVudFN0
eWxlLT5tYXJxdWVlQmVoYXZpb3IoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFycXVlZVJlcGV0aXRpb246IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRf
QU5EX0lOSVRJQUwobWFycXVlZUxvb3BDb3VudCwgTWFycXVlZUxvb3BDb3VudCkKICAgICAgICAg
aWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlSW5maW5pdGUpCi0gICAgICAgICAg
ICBtX3N0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZv
cmV2ZXIuCisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudCgtMSk7
IC8vIC0xIG1lYW5zIHJlcGVhdCBmb3JldmVyLgogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+aXNOdW1iZXIoKSkKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVMb29wQ291
bnQocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5
bGUtPnNldE1hcnF1ZWVMb29wQ291bnQocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVl
U3BlZWQ6IHsKQEAgLTM0NzYsMTkgKzM0NzgsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgaWYg
KGludCBpZGVudCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAgICBz
d2l0Y2ggKGlkZW50KSB7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2xvdzoKLSAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoNTAwKTsgLy8gNTAwIG1zZWMuCisgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCg1MDApOyAvLyA1MDAgbXNl
Yy4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3Jt
YWw6Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKDg1KTsgLy8gODVt
c2VjLiBUaGUgV2luSUUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0
TWFycXVlZVNwZWVkKDg1KTsgLy8gODVtc2VjLiBUaGUgV2luSUUgZGVmYXVsdC4KICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVGYXN0OgotICAgICAgICAg
ICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCgxMCk7IC8vIDEwbXNlYy4gU3VwZXIgZmFz
dC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZVNwZWVkKDEwKTsgLy8g
MTBtc2VjLiBTdXBlciBmYXN0LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1RpbWUoKSkKLSAgICAgICAg
ICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZVRpbWU8
aW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6TWlsbGlzZWNvbmRzPigpKTsKKyAgICAgICAgICAgIHN0
YXRlLnN0eWxlLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGlu
dCwgQ1NTUHJpbWl0aXZlVmFsdWU6Ok1pbGxpc2Vjb25kcz4oKSk7CiAgICAgICAgIGVsc2UgaWYg
KHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSAvLyBGb3Igc2Nyb2xsYW1vdW50IHN1cHBvcnQu
Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmdl
dEludFZhbHVlKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChw
cmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVJbmNyZW1lbnQ6IHsKQEAgLTM0OTgsMTkg
KzM1MDAsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
KSB7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU21hbGw6Ci0gICAgICAgICAgICAgICAgbV9z
dHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMSwgRml4ZWQpKTsgLy8gMXB4LgorICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgxLCBG
aXhlZCkpOyAvLyAxcHguCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlTm9ybWFsOgotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNy
ZW1lbnQoTGVuZ3RoKDYsIEZpeGVkKSk7IC8vIDZweC4gVGhlIFdpbklFIGRlZmF1bHQuCisgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDYsIEZp
eGVkKSk7IC8vIDZweC4gVGhlIFdpbklFIGRlZmF1bHQuCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2U6Ci0gICAgICAgICAgICAgICAgbV9zdHls
ZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCisgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDM2LCBG
aXhlZCkpOyAvLyAzNnB4LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTGVuZ3RoIG1hcnF1ZWVMZW5ndGggPSBjb252
ZXJ0VG9JbnRMZW5ndGgocHJpbWl0aXZlVmFsdWUsIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHls
ZSk7CisgICAgICAgICAgICBMZW5ndGggbWFycXVlZUxlbmd0aCA9IGNvbnZlcnRUb0ludExlbmd0
aChwcmltaXRpdmVWYWx1ZSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5
bGUpOwogICAgICAgICAgICAgaWYgKCFtYXJxdWVlTGVuZ3RoLmlzVW5kZWZpbmVkKCkpCi0gICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChtYXJxdWVlTGVuZ3RoKTsK
KyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChtYXJxdWVl
TGVuZ3RoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzUxOSwxMSAr
MzUyMSwxMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TG9jYWxlKG51bGxBdG9t
KTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRMb2NhbGUobnVsbEF0b20pOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRMb2NhbGUocHJpbWl0aXZlVmFsdWUtPmdl
dFN0cmluZ1ZhbHVlKCkpOwotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRTY3JpcHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihtX3N0eWxlLT5sb2Nh
bGUoKSkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldExvY2FsZShwcmltaXRpdmVWYWx1
ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb24gPSBzdGF0ZS5zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRTY3JpcHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihzdGF0
ZS5zdHlsZS0+bG9jYWxlKCkpKTsKICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNTQyLDcgKzM1NDQsNyBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIG1fc3R5bGUt
PnNldERhc2hib2FyZFJlZ2lvbnMoUmVuZGVyU3R5bGU6Om5vbmVEYXNoYm9hcmRSZWdpb25zKCkp
OworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbnMoUmVuZGVyU3R5
bGU6Om5vbmVEYXNoYm9hcmRSZWdpb25zKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKQEAgLTM1NTIsMTAgKzM1NTQsMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIAogICAgICAgICBEYXNo
Ym9hcmRSZWdpb24qIGZpcnN0ID0gcmVnaW9uOwogICAgICAgICB3aGlsZSAocmVnaW9uKSB7Ci0g
ICAgICAgICAgICBMZW5ndGggdG9wID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+dG9wKCks
IHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAgICAgICAgICBMZW5ndGggcmlnaHQg
PSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5yaWdodCgpLCBzdHlsZSgpLCBtX3Jvb3RFbGVt
ZW50U3R5bGUpOwotICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0ludExlbmd0
aChyZWdpb24tPmJvdHRvbSgpLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUpOwotICAgICAg
ICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5sZWZ0KCksIHN0
eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7CisgICAgICAgICAgICBMZW5ndGggdG9wID0gY29u
dmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+dG9wKCksIHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5y
b290RWxlbWVudFN0eWxlKTsKKyAgICAgICAgICAgIExlbmd0aCByaWdodCA9IGNvbnZlcnRUb0lu
dExlbmd0aChyZWdpb24tPnJpZ2h0KCksIHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlKTsKKyAgICAgICAgICAgIExlbmd0aCBib3R0b20gPSBjb252ZXJ0VG9JbnRMZW5n
dGgocmVnaW9uLT5ib3R0b20oKSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50
U3R5bGUpOworICAgICAgICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVn
aW9uLT5sZWZ0KCksIHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKTsK
IAogICAgICAgICAgICAgaWYgKHRvcC5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHRv
cCA9IExlbmd0aCgpOwpAQCAtMzU2NywxMyArMzU2OSwxMyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICAgICAgICAgIGxlZnQgPSBMZW5ndGgoKTsKIAogICAgICAgICAgICAgaWYgKHJlZ2lvbi0+bV9p
c0NpcmNsZSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5
bGVEYXNoYm9hcmRSZWdpb246OkNpcmNsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBi
b3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CisgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hib2FyZFJlZ2lv
bjo6Q2lyY2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVn
aW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lv
bi0+bV9pc1JlY3RhbmdsZSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXREYXNoYm9hcmRS
ZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246OlJlY3RhbmdsZSwgcmVnaW9uLT5tX2xhYmVsLCB0
b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7
CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURh
c2hib2FyZFJlZ2lvbjo6UmVjdGFuZ2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJv
dHRvbSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKICAgICAgICAgICAg
IHJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0LmdldCgpOwogICAgICAgICB9CiAKLSAgICAgICAgbV9l
bGVtZW50LT5kb2N1bWVudCgpLT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOworICAgICAg
ICBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUp
OwogCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNTgyLDggKzM1ODQsOCBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBcHBSZWdpb246IHsKICAgICAgICAgaWYg
KCFwcmltaXRpdmVWYWx1ZSB8fCAhcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIG1fc3R5bGUtPnNldERyYWdnYWJsZVJlZ2lvbk1vZGUocHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVEcmFnID8gRHJhZ2dhYmxlUmVnaW9u
RHJhZyA6IERyYWdnYWJsZVJlZ2lvbk5vRHJhZyk7Ci0gICAgICAgIG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS0+c2V0SGFzQW5ub3RhdGVkUmVnaW9ucyh0cnVlKTsKKyAgICAgICAgc3RhdGUuc3R5bGUt
PnNldERyYWdnYWJsZVJlZ2lvbk1vZGUocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NT
VmFsdWVEcmFnID8gRHJhZ2dhYmxlUmVnaW9uRHJhZyA6IERyYWdnYWJsZVJlZ2lvbk5vRHJhZyk7
CisgICAgICAgIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPnNldEhhc0Fubm90YXRlZFJlZ2lv
bnModHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTM1OTksMjEgKzM2
MDEsMjEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICByZXN1bHQgKj0gMzsKICAgICAg
ICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlVGhp
Y2spCiAgICAgICAgICAgICAgICAgcmVzdWx0ICo9IDU7Ci0gICAgICAgICAgICB3aWR0aCA9IENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVzdWx0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VN
UyktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9v
bUZhY3Rvcik7CisgICAgICAgICAgICB3aWR0aCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
cmVzdWx0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+
KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICB3aWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZSgp
LCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgd2lkdGggPSBw
cmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0
YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgbV9zdHlsZS0+c2V0VGV4dFN0cm9rZVdpZHRoKHdpZHRoKTsKKyAg
ICAgICAgc3RhdGUuc3R5bGUtPnNldFRleHRTdHJva2VXaWR0aCh3aWR0aCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybTogewogICAg
ICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0cmFuc2Zvcm0sIFRyYW5zZm9ybSk7CiAg
ICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICAgICAgY3JlYXRlVHJh
bnNmb3JtT3BlcmF0aW9ucyh2YWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCBvcGVy
YXRpb25zKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0VHJhbnNmb3JtKG9wZXJhdGlvbnMpOworICAg
ICAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlLCBzdGF0ZS5zdHlsZS5nZXQoKSwg
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgb3BlcmF0aW9ucyk7CisgICAgICAgIHN0YXRlLnN0eWxl
LT5zZXRUcmFuc2Zvcm0ob3BlcmF0aW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBlcnNwZWN0aXZlOiB7CkBAIC0zNjIzLDM0ICszNjI1LDM0
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAgbV9z
dHlsZS0+c2V0UGVyc3BlY3RpdmUoMCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0UGVy
c3BlY3RpdmUoMCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBm
bG9hdCBwZXJzcGVjdGl2ZVZhbHVlOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVu
Z3RoKCkpCi0gICAgICAgICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmNv
bXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rv
cik7CisgICAgICAgICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1
dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxl
LCB6b29tRmFjdG9yKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVy
KCkpIHsKICAgICAgICAgICAgIC8vIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0cmVhdCB2
YWx1ZWxlc3MgbnVtYmVycyBhcyBweC4KLSAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBD
U1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgp
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUo
KSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHBlcnNwZWN0
aXZlVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByaW1pdGl2ZVZhbHVlLT5nZXRE
b3VibGVWYWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKS0+Y29tcHV0ZUxlbmd0aDxm
bG9hdD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0
b3IpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAo
cGVyc3BlY3RpdmVWYWx1ZSA+PSAwLjBmKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UGVyc3Bl
Y3RpdmUocGVyc3BlY3RpdmVWYWx1ZSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0UGVy
c3BlY3RpdmUocGVyc3BlY3RpdmVWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbjoKICAgICAgICAgaWYgKGlzSW5pdGlhbCkK
LSAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFyQW5pbWF0aW9ucygpOworICAgICAgICAgICAgc3Rh
dGUuc3R5bGUtPmNsZWFyQW5pbWF0aW9ucygpOwogICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQp
Ci0gICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0QW5pbWF0aW9ucyhtX3BhcmVudFN0eWxlLT5h
bmltYXRpb25zKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPmluaGVyaXRBbmltYXRpb25z
KHN0YXRlLnBhcmVudFN0eWxlLT5hbmltYXRpb25zKCkpOwogICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246CiAgICAgICAgIGlmIChpc0luaXRpYWwp
Ci0gICAgICAgICAgICBtX3N0eWxlLT5jbGVhclRyYW5zaXRpb25zKCk7CisgICAgICAgICAgICBz
dGF0ZS5zdHlsZS0+Y2xlYXJUcmFuc2l0aW9ucygpOwogICAgICAgICBlbHNlIGlmIChpc0luaGVy
aXQpCi0gICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0VHJhbnNpdGlvbnMobV9wYXJlbnRTdHls
ZS0+dHJhbnNpdGlvbnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+aW5oZXJpdFRyYW5z
aXRpb25zKHN0YXRlLnBhcmVudFN0eWxlLT50cmFuc2l0aW9ucygpKTsKICAgICAgICAgcmV0dXJu
OwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRh
cEhpZ2hsaWdodENvbG9yOiB7CkBAIC0zNjU5LDcgKzM2NjEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgQ29sb3IgY29sID0gY29sb3JGcm9tUHJpbWl0aXZl
VmFsdWUocHJpbWl0aXZlVmFsdWUpOwotICAgICAgICBtX3N0eWxlLT5zZXRUYXBIaWdobGlnaHRD
b2xvcihjb2wpOworICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VGFwSGlnaGxpZ2h0Q29sb3IoY29s
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzY2OCw3ICszNjcwLDcgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodXNlVG91Y2hP
dmVyZmxvd1Njcm9sbGluZywgVXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZyk7CiAgICAgICAgIGlm
ICghcHJpbWl0aXZlVmFsdWUpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgbV9zdHlsZS0+
c2V0VXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZyhwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZVRvdWNoKTsKKyAgICAgICAgc3RhdGUuc3R5bGUtPnNldFVzZVRvdWNoT3ZlcmZs
b3dTY3JvbGxpbmcocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVUb3VjaCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTM3MTEsNyArMzcxMyw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxXaWR0aDoKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWF4TG9naWNhbEhlaWdodDoKICAgICB7Ci0gICAgICAg
IENTU1Byb3BlcnR5SUQgbmV3SWQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJl
UHJvcGVydHkoaWQsIG1fc3R5bGUtPmRpcmVjdGlvbigpLCBtX3N0eWxlLT53cml0aW5nTW9kZSgp
KTsKKyAgICAgICAgQ1NTUHJvcGVydHlJRCBuZXdJZCA9IENTU1Byb3BlcnR5OjpyZXNvbHZlRGly
ZWN0aW9uQXdhcmVQcm9wZXJ0eShpZCwgc3RhdGUuc3R5bGUtPmRpcmVjdGlvbigpLCBzdGF0ZS5z
dHlsZS0+d3JpdGluZ01vZGUoKSk7CiAgICAgICAgIEFTU0VSVChuZXdJZCAhPSBpZCk7CiAgICAg
ICAgIHJldHVybiBhcHBseVByb3BlcnR5KG5ld0lkLCB2YWx1ZSk7CiAgICAgfQpAQCAtMzc0Niw5
ICszNzQ4LDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHNldFdyaXRpbmdNb2RlKCpwcmlt
aXRpdmVWYWx1ZSk7CiAKICAgICAgICAgLy8gRklYTUU6IEl0IGlzIG5vdCBvayB0byBtb2RpZnkg
ZG9jdW1lbnQgc3RhdGUgd2hpbGUgYXBwbHlpbmcgc3R5bGUuCi0gICAgICAgIGlmIChtX2VsZW1l
bnQgJiYgbV9lbGVtZW50ID09IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50
KCkpCi0gICAgICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0
T25Eb2N1bWVudEVsZW1lbnQodHJ1ZSk7Ci0KKyAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQgJiYg
c3RhdGUuZWxlbWVudCA9PSBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1l
bnQoKSkKKyAgICAgICAgICAgIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPnNldFdyaXRpbmdN
b2RlU2V0T25Eb2N1bWVudEVsZW1lbnQodHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTM3NjQsNyArMzc2NSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdExpbmVCb3hDb250YWluOiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFM
KGxpbmVCb3hDb250YWluLCBMaW5lQm94Q29udGFpbikKICAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewotICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUJveENvbnRhaW4oTGluZUJveENvbnRhaW5Ob25lKTsK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRMaW5lQm94Q29udGFpbihMaW5lQm94Q29udGFp
bk5vbmUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM3NzIsMjEgKzM3
NzMsMjEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBDU1NM
aW5lQm94Q29udGFpblZhbHVlKiBsaW5lQm94Q29udGFpblZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NT
TGluZUJveENvbnRhaW5WYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TGluZUJv
eENvbnRhaW4obGluZUJveENvbnRhaW5WYWx1ZS0+dmFsdWUoKSk7CisgICAgICAgIHN0YXRlLnN0
eWxlLT5zZXRMaW5lQm94Q29udGFpbihsaW5lQm94Q29udGFpblZhbHVlLT52YWx1ZSgpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIENTUyBGb250cyBNb2R1bGUgTGV2ZWwgMwog
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250RmVhdHVyZVNldHRpbmdzOiB7CiAgICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZSAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NW
YWx1ZU5vcm1hbCkgewotICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKG1fc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpLm1ha2VOb3JtYWxGZWF0dXJlU2V0dGluZ3MoKSk7CisgICAgICAgICAg
ICBzZXRGb250RGVzY3JpcHRpb24oc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLm1ha2VO
b3JtYWxGZWF0dXJlU2V0dGluZ3MoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5m
b250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
biA9IHN0YXRlLnN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgQ1NTVmFsdWVMaXN0
KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwogICAgICAgICBSZWZQ
dHI8Rm9udEZlYXR1cmVTZXR0aW5ncz4gc2V0dGluZ3MgPSBGb250RmVhdHVyZVNldHRpbmdzOjpj
cmVhdGUoKTsKICAgICAgICAgaW50IGxlbiA9IGxpc3QtPmxlbmd0aCgpOwpAQCAtMzgwNiwyMyAr
MzgwNywyMyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGaWx0ZXI6
IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoZmlsdGVyLCBGaWx0ZXIpOwog
ICAgICAgICBGaWx0ZXJPcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgICAgIGlmIChjcmVhdGVG
aWx0ZXJPcGVyYXRpb25zKHZhbHVlLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIG9wZXJh
dGlvbnMpKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0RmlsdGVyKG9wZXJhdGlvbnMpOworICAg
ICAgICBpZiAoY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyh2YWx1ZSwgc3RhdGUuc3R5bGUuZ2V0KCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIG9wZXJhdGlvbnMpKQorICAgICAgICAgICAgc3RhdGUu
c3R5bGUtPnNldEZpbHRlcihvcGVyYXRpb25zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNl
bmRpZgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkQ29sdW1uczogewogICAgICAgICBW
ZWN0b3I8R3JpZFRyYWNrU2l6ZT4gdHJhY2tTaXplczsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlk
VHJhY2tMaXN0KHZhbHVlLCB0cmFja1NpemVzLCB0aGlzKSkKKyAgICAgICAgaWYgKCFjcmVhdGVH
cmlkVHJhY2tMaXN0KHZhbHVlLCB0cmFja1NpemVzLCBzdGF0ZSkpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIG1fc3R5bGUtPnNldEdyaWRDb2x1bW5zKHRyYWNrU2l6ZXMpOworICAgICAg
ICBzdGF0ZS5zdHlsZS0+c2V0R3JpZENvbHVtbnModHJhY2tTaXplcyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRSb3dzOiB7CiAgICAgICAg
IFZlY3RvcjxHcmlkVHJhY2tTaXplPiB0cmFja1NpemVzOwotICAgICAgICBpZiAoIWNyZWF0ZUdy
aWRUcmFja0xpc3QodmFsdWUsIHRyYWNrU2l6ZXMsIHRoaXMpKQorICAgICAgICBpZiAoIWNyZWF0
ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRyYWNrU2l6ZXMsIHN0YXRlKSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0R3JpZFJvd3ModHJhY2tTaXplcyk7CisgICAgICAg
IHN0YXRlLnN0eWxlLT5zZXRHcmlkUm93cyh0cmFja1NpemVzKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMzgzMCwxNCArMzgzMSwxNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBHcmlk
UG9zaXRpb24gY29sdW1uOwogICAgICAgICBpZiAoIWNyZWF0ZUdyaWRQb3NpdGlvbih2YWx1ZSwg
Y29sdW1uKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0R3JpZEl0
ZW1Db2x1bW4oY29sdW1uKTsKKyAgICAgICAgc3RhdGUuc3R5bGUtPnNldEdyaWRJdGVtQ29sdW1u
KGNvbHVtbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEdyaWRSb3c6IHsKICAgICAgICAgR3JpZFBvc2l0aW9uIHJvdzsKICAgICAgICAgaWYgKCFj
cmVhdGVHcmlkUG9zaXRpb24odmFsdWUsIHJvdykpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIG1fc3R5bGUtPnNldEdyaWRJdGVtUm93KHJvdyk7CisgICAgICAgIHN0YXRlLnN0eWxlLT5z
ZXRHcmlkSXRlbVJvdyhyb3cpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIFRoZXNl
IHByb3BlcnRpZXMgYXJlIGltcGxlbWVudGVkIGluIHRoZSBTdHlsZUJ1aWxkZXIgbG9va3VwIHRh
YmxlLgpAQCAtNDE1OSwxNCArNDE2MCwxNCBAQCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxl
UmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHBybwogewog
ICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFn
ZSgpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAg
bV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBt
X3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAg
cmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHls
ZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5p
c1BlbmRpbmcoKSkgewotICAgICAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3Bl
cnR5LCB2YWx1ZSk7CisgICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQo
cHJvcGVydHksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIFN0eWxlUGVuZGluZ0ltYWdlOjpjcmVh
dGUodmFsdWUpOwogICAgIH0KICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRl
KHZhbHVlKTsKQEAgLTQxNzcsNyArNDE3OCw3IEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5
bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVyCiB7
CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0lt
YWdlU2V0KGRvY3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1h
Z2UoKSkKLSAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFs
dWUpOworICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5
LCB2YWx1ZSk7CiAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKIH0KICNlbmRpZgpAQCAtNDE4
NiwxOCArNDE4NywyMCBAQCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmN1
cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHBybwogewogICAgIFJlZlB0cjxT
dHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZShkb2N1bWVudCgp
KTsKICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgIG1f
cGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICAgICAgbV9z
dGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOwogICAgIHJl
dHVybiBpbWFnZS5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JU
ZXh0U2l6ZUFkanVzdCgpCiB7Ci0gICAgaWYgKG1fc3R5bGUtPnRleHRTaXplQWRqdXN0KCkpCisg
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9zdGF0ZS5zdHlsZS5nZXQoKTsKKworICAgIGlmIChz
dHlsZS0+dGV4dFNpemVBZGp1c3QoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRm9udERlc2Ny
aXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKSk7Cisg
ICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihzdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCkpOwogICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUobmV3Rm9udERl
c2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSk7Ci0gICAgbV9zdHlsZS0+c2V0Rm9udERlc2NyaXB0
aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CisgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihu
ZXdGb250RGVzY3JpcHRpb24pOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9v
bUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKQEAg
LTQyNjIsMTUgKzQyNjUsMTUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0
eWxlKFNldHRpbmdzKiBzZXR0aW5ncykKICAgICB9CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEtl
eXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7CiAgICAgc2V0
Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwg
Q1NTVmFsdWVNZWRpdW0sIGZhbHNlKSk7Ci0gICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodChSZW5k
ZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0gICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAw
OworICAgIG1fc3RhdGUuc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxM
aW5lSGVpZ2h0KCkpOworICAgIG1fc3RhdGUubGluZUhlaWdodFZhbHVlID0gMDsKICAgICBzZXRG
b250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVy
OjpzZXRGb250U2l6ZShGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6
ZSkKIHsKICAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKLSAgICBm
b250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZp
ZWRTaXplKGRvY3VtZW50KCksIG1fc3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29s
dXRlU2l6ZSgpLCBzaXplLCB1c2VTVkdab29tUnVsZXMoKSkpOworICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1l
bnQoKSwgbV9zdGF0ZS5zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXpl
KCksIHNpemUsIHVzZVNWR1pvb21SdWxlcygpKSk7CiB9CiAKIGZsb2F0IFN0eWxlUmVzb2x2ZXI6
OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiBkb2N1bWVudCwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXpl
LCBib29sIHVzZVNWR1pvb21SdWxlcykKQEAgLTQ0NzMsMjAgKzQ0NzYsMjEgQEAgQ29sb3IgU3R5
bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHZh
bHVlLCBib29sIGZvclYKICAgICBpZiAodmFsdWUtPmlzUkdCQ29sb3IoKSkKICAgICAgICAgcmV0
dXJuIENvbG9yKHZhbHVlLT5nZXRSR0JBMzJWYWx1ZSgpKTsKIAorICAgIGNvbnN0IFN0YXRlJiBz
dGF0ZSA9IG1fc3RhdGU7CiAgICAgaW50IGlkZW50ID0gdmFsdWUtPmdldElkZW50KCk7CiAgICAg
c3dpdGNoIChpZGVudCkgewogICAgIGNhc2UgMDoKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAg
ICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFRleHQ6Ci0gICAgICAgIHJldHVybiBtX2VsZW1lbnQtPmRv
Y3VtZW50KCktPnRleHRDb2xvcigpOworICAgICAgICByZXR1cm4gc3RhdGUuZWxlbWVudC0+ZG9j
dW1lbnQoKS0+dGV4dENvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdExpbms6Ci0gICAg
ICAgIHJldHVybiAobV9lbGVtZW50LT5pc0xpbmsoKSAmJiBmb3JWaXNpdGVkTGluaykgPyBtX2Vs
ZW1lbnQtPmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rQ29sb3IoKSA6IG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS0+bGlua0NvbG9yKCk7CisgICAgICAgIHJldHVybiAoc3RhdGUuZWxlbWVudC0+aXNMaW5r
KCkgJiYgZm9yVmlzaXRlZExpbmspID8gc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlzaXRl
ZExpbmtDb2xvcigpIDogc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7CiAg
ICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEFjdGl2ZWxpbms6Ci0gICAgICAgIHJldHVybiBtX2VsZW1l
bnQtPmRvY3VtZW50KCktPmFjdGl2ZUxpbmtDb2xvcigpOworICAgICAgICByZXR1cm4gc3RhdGUu
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+YWN0aXZlTGlua0NvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1
ZVdlYmtpdEZvY3VzUmluZ0NvbG9yOgogICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmZvY3Vz
UmluZ0NvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZUN1cnJlbnRjb2xvcjoKLSAgICAgICAgcmV0
dXJuIG1fc3R5bGUtPmNvbG9yKCk7CisgICAgICAgIHJldHVybiBzdGF0ZS5zdHlsZS0+Y29sb3Io
KTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gY29sb3JGb3JDU1NWYWx1ZShpZGVudCk7
CiAgICAgfQpAQCAtNDgyMCwxNyArNDgyNCwxOCBAQCBzdGF0aWMgRmlsdGVyT3BlcmF0aW9uOjpP
cGVyYXRpb25UeXBlIGZpbHRlck9wZXJhdGlvbkZvclR5cGUoV2ViS2l0Q1NTRmlsdGVyVmFsdQog
I2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKIHZvaWQgU3R5bGVSZXNvbHZl
cjo6bG9hZFBlbmRpbmdTVkdEb2N1bWVudHMoKQogewotICAgIGlmICghbV9zdHlsZS0+aGFzRmls
dGVyKCkgfHwgbV9wZW5kaW5nU1ZHRG9jdW1lbnRzLmlzRW1wdHkoKSkKKyAgICBTdGF0ZSYgc3Rh
dGUgPSBtX3N0YXRlOworICAgIGlmICghc3RhdGUuc3R5bGUtPmhhc0ZpbHRlcigpIHx8IHN0YXRl
LnBlbmRpbmdTVkdEb2N1bWVudHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBD
YWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2VsZW1lbnQtPmRv
Y3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7Ci0gICAgVmVjdG9yPFJlZlB0cjxGaWx0
ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBtX3N0eWxlLT5tdXRhYmxlRmlsdGVy
KCkub3BlcmF0aW9ucygpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJj
ZUxvYWRlciA9IHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVy
KCk7CisgICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlv
bnMgPSBzdGF0ZS5zdHlsZS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVyT3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewogICAg
ICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmaWx0ZXJPcGVyYXRpb24gPSBmaWx0ZXJPcGVy
YXRpb25zLmF0KGkpOwogICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25U
eXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKICAgICAgICAgICAgIFJlZmVy
ZW5jZUZpbHRlck9wZXJhdGlvbiogcmVmZXJlbmNlRmlsdGVyID0gc3RhdGljX2Nhc3Q8UmVmZXJl
bmNlRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uLmdldCgpKTsKIAotICAgICAgICAg
ICAgV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSogdmFsdWUgPSBtX3BlbmRpbmdTVkdEb2N1bWVu
dHMuZ2V0KHJlZmVyZW5jZUZpbHRlcikuZ2V0KCk7CisgICAgICAgICAgICBXZWJLaXRDU1NTVkdE
b2N1bWVudFZhbHVlKiB2YWx1ZSA9IHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMuZ2V0KHJlZmVy
ZW5jZUZpbHRlcikuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQ2FjaGVkU1ZHRG9jdW1lbnQqIGNhY2hlZERvY3Vt
ZW50ID0gdmFsdWUtPmxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwpAQCAtNDg0MSw3ICs0ODQ2
LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cygpCiAgICAg
ICAgICAgICByZWZlcmVuY2VGaWx0ZXItPnNldENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGFk
b3B0UHRyKG5ldyBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShjYWNoZWREb2N1bWVudCkpKTsK
ICAgICAgICAgfQogICAgIH0KLSAgICBtX3BlbmRpbmdTVkdEb2N1bWVudHMuY2xlYXIoKTsKKyAg
ICBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzLmNsZWFyKCk7CiB9CiAjZW5kaWYKIApAQCAtNDg1
NywxOCArNDg2MiwxOCBAQCBTdHlsZVNoYWRlciogU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5k
aW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NTU2hhZGVyVgogewogICAgIFN0eWxlU2hh
ZGVyKiBzaGFkZXIgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nU2hhZGVyKCk7CiAgICAgaWYgKHNo
YWRlciAmJiBzaGFkZXItPmlzUGVuZGluZ1NoYWRlcigpKQotICAgICAgICBtX2hhc1BlbmRpbmdT
aGFkZXJzID0gdHJ1ZTsKKyAgICAgICAgbV9zdGF0ZS5oYXNQZW5kaW5nU2hhZGVycyA9IHRydWU7
CiAgICAgcmV0dXJuIHNoYWRlcjsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGlu
Z1NoYWRlcnMoKQogewotICAgIGlmICghbV9zdHlsZS0+aGFzRmlsdGVyKCkgfHwgIW1faGFzUGVu
ZGluZ1NoYWRlcnMpCisgICAgaWYgKCFtX3N0YXRlLnN0eWxlLT5oYXNGaWx0ZXIoKSB8fCAhbV9z
dGF0ZS5oYXNQZW5kaW5nU2hhZGVycykKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ2FjaGVkUmVz
b3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9lbGVtZW50LT5kb2N1bWVudCgp
LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNo
ZWRSZXNvdXJjZUxvYWRlciA9IG1fc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVz
b3VyY2VMb2FkZXIoKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBm
aWx0ZXJPcGVyYXRpb25zID0gbV9zdHlsZS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsK
KyAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9
IG1fc3RhdGUuc3R5bGUtPm11dGFibGVGaWx0ZXIoKS5vcGVyYXRpb25zKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGZpbHRlck9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gZmlsdGVyT3BlcmF0aW9uID0gZmlsdGVyT3BlcmF0
aW9ucy5hdChpKTsKICAgICAgICAgaWYgKGZpbHRlck9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlw
ZSgpID09IEZpbHRlck9wZXJhdGlvbjo6Q1VTVE9NKSB7CkBAIC00ODg1LDcgKzQ4OTAsNyBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycygpCiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgbV9oYXNQZW5kaW5nU2hhZGVycyA9IGZhbHNlOworICAgIG1f
c3RhdGUuaGFzUGVuZGluZ1NoYWRlcnMgPSBmYWxzZTsKIH0KIAogc3RhdGljIGJvb2wgc29ydFBh
cmFtZXRlcnNCeU5hbWVDb21wYXJhdG9yKGNvbnN0IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0
ZXI+JiBhLCBjb25zdCBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiYgYikKQEAgLTQ5Mjcs
NyArNDkzMiw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29s
dmVyOjpwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtCiB7CiAgICAgUmVmUHRyPEN1c3Rv
bUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcj4gdHJhbnNmb3JtUGFyYW1ldGVyID0gQ3VzdG9tRmls
dGVyVHJhbnNmb3JtUGFyYW1ldGVyOjpjcmVhdGUobmFtZSk7CiAgICAgVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zOwotICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWVzLCBz
dHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIG9wZXJhdGlvbnMpOworICAgIGNyZWF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbnModmFsdWVzLCBtX3N0YXRlLnN0eWxlLmdldCgpLCBtX3N0YXRlLnJvb3RF
bGVtZW50U3R5bGUsIG9wZXJhdGlvbnMpOwogICAgIHRyYW5zZm9ybVBhcmFtZXRlci0+c2V0T3Bl
cmF0aW9ucyhvcGVyYXRpb25zKTsKICAgICByZXR1cm4gdHJhbnNmb3JtUGFyYW1ldGVyLnJlbGVh
c2UoKTsKIH0KQEAgLTUxNzcsMTIgKzUxODIsMTIgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVh
dGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgV2ViS2l0Q1NTU1ZHRG9j
dW1lbnRWYWx1ZSogc3ZnRG9jdW1lbnRWYWx1ZSA9IHN0YXRpY19jYXN0PFdlYktpdENTU1NWR0Rv
Y3VtZW50VmFsdWUqPihhcmd1bWVudCk7Ci0gICAgICAgICAgICBLVVJMIHVybCA9IG1fZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCkpOworICAg
ICAgICAgICAgS1VSTCB1cmwgPSBtX3N0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRl
VVJMKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpKTsKIAogICAgICAgICAgICAgUmVmUHRyPFJlZmVy
ZW5jZUZpbHRlck9wZXJhdGlvbj4gb3BlcmF0aW9uID0gUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9u
OjpjcmVhdGUoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIHVybC5mcmFnbWVudElkZW50aWZpZXIo
KSwgb3BlcmF0aW9uVHlwZSk7Ci0gICAgICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0V4
dGVybmFsVVJJUmVmZXJlbmNlKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpLCBtX2VsZW1lbnQtPmRv
Y3VtZW50KCkpKSB7CisgICAgICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0V4dGVybmFs
VVJJUmVmZXJlbmNlKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpLCBtX3N0YXRlLmVsZW1lbnQtPmRv
Y3VtZW50KCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFzdmdEb2N1bWVudFZhbHVlLT5sb2Fk
UmVxdWVzdGVkKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fcGVuZGluZ1NWR0RvY3VtZW50cy5z
ZXQob3BlcmF0aW9uLmdldCgpLCBzdmdEb2N1bWVudFZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9zdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzLnNldChvcGVyYXRpb24uZ2V0KCksIHN2Z0Rv
Y3VtZW50VmFsdWUpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN2Z0RvY3VtZW50VmFsdWUt
PmNhY2hlZFNWR0RvY3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbi0+c2V0
Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UoYWRvcHRQdHIobmV3IENhY2hlZFNWR0RvY3VtZW50
UmVmZXJlbmNlKHN2Z0RvY3VtZW50VmFsdWUtPmNhY2hlZFNWR0RvY3VtZW50KCkpKSk7CiAgICAg
ICAgICAgICB9CkBAIC01Mjg2LDcgKzUyOTEsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0
ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZQog
CiBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2Uo
U3R5bGVQZW5kaW5nSW1hZ2UqIHBlbmRpbmdJbWFnZSkKIHsKLSAgICBDYWNoZWRSZXNvdXJjZUxv
YWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hl
ZFJlc291cmNlTG9hZGVyKCk7CisgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291
cmNlTG9hZGVyID0gbV9zdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxv
YWRlcigpOwogCiAgICAgaWYgKHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VWYWx1ZSgpKSB7CiAgICAg
ICAgIENTU0ltYWdlVmFsdWUqIGltYWdlVmFsdWUgPSBwZW5kaW5nSW1hZ2UtPmNzc0ltYWdlVmFs
dWUoKTsKQEAgLTUzMTYsMjMgKzUzMjEsMjMgQEAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHls
ZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW4KIAog
dm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiB7Ci0gICAgaWYgKG1fcGVu
ZGluZ0ltYWdlUHJvcGVydGllcy5pc0VtcHR5KCkpCisgICAgaWYgKG1fc3RhdGUucGVuZGluZ0lt
YWdlUHJvcGVydGllcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFBlbmRpbmdJ
bWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBtX3BlbmRpbmdJbWFn
ZVByb3BlcnRpZXMuZW5kKCkua2V5cygpOwotICAgIGZvciAoUGVuZGluZ0ltYWdlUHJvcGVydHlN
YXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0ID0gbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmJl
Z2luKCkua2V5cygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBQZW5kaW5nSW1hZ2VQcm9wZXJ0
eU1hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgZW5kID0gbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzLmVuZCgpLmtleXMoKTsKKyAgICBmb3IgKFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpj
b25zdF9pdGVyYXRvcjo6S2V5cyBpdCA9IG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcy5i
ZWdpbigpLmtleXMoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIENTU1Byb3BlcnR5SUQg
Y3VycmVudFByb3BlcnR5ID0gKml0OwogCiAgICAgICAgIHN3aXRjaCAoY3VycmVudFByb3BlcnR5
KSB7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6IHsKLSAgICAgICAg
ICAgIGZvciAoRmlsbExheWVyKiBiYWNrZ3JvdW5kTGF5ZXIgPSBtX3N0eWxlLT5hY2Nlc3NCYWNr
Z3JvdW5kTGF5ZXJzKCk7IGJhY2tncm91bmRMYXllcjsgYmFja2dyb3VuZExheWVyID0gYmFja2dy
b3VuZExheWVyLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBiYWNrZ3Jv
dW5kTGF5ZXIgPSBtX3N0YXRlLnN0eWxlLT5hY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzKCk7IGJhY2tn
cm91bmRMYXllcjsgYmFja2dyb3VuZExheWVyID0gYmFja2dyb3VuZExheWVyLT5uZXh0KCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAoYmFja2dyb3VuZExheWVyLT5pbWFnZSgpICYmIGJhY2tncm91
bmRMYXllci0+aW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKICAgICAgICAgICAgICAgICAgICAg
YmFja2dyb3VuZExheWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0
eWxlUGVuZGluZ0ltYWdlKj4oYmFja2dyb3VuZExheWVyLT5pbWFnZSgpKSkpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUNvbnRlbnQ6IHsKLSAgICAgICAgICAgIGZvciAoQ29udGVudERhdGEqIGNvbnRlbnREYXRh
ID0gY29uc3RfY2FzdDxDb250ZW50RGF0YSo+KG1fc3R5bGUtPmNvbnRlbnREYXRhKCkpOyBjb250
ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50RGF0YS0+bmV4dCgpKSB7CisgICAgICAgICAg
ICBmb3IgKENvbnRlbnREYXRhKiBjb250ZW50RGF0YSA9IGNvbnN0X2Nhc3Q8Q29udGVudERhdGEq
PihtX3N0YXRlLnN0eWxlLT5jb250ZW50RGF0YSgpKTsgY29udGVudERhdGE7IGNvbnRlbnREYXRh
ID0gY29udGVudERhdGEtPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChjb250ZW50RGF0
YS0+aXNJbWFnZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0eWxlSW1hZ2UqIGltYWdlID0g
c3RhdGljX2Nhc3Q8SW1hZ2VDb250ZW50RGF0YSo+KGNvbnRlbnREYXRhKS0+aW1hZ2UoKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKSB7CkBAIC01MzQ1
LDcgKzUzNTAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDdXJz
b3I6IHsKLSAgICAgICAgICAgIGlmIChDdXJzb3JMaXN0KiBjdXJzb3JMaXN0ID0gbV9zdHlsZS0+
Y3Vyc29ycygpKSB7CisgICAgICAgICAgICBpZiAoQ3Vyc29yTGlzdCogY3Vyc29yTGlzdCA9IG1f
c3RhdGUuc3R5bGUtPmN1cnNvcnMoKSkgewogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY3Vyc29yTGlzdC0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAg
Q3Vyc29yRGF0YSYgY3VycmVudEN1cnNvciA9IGN1cnNvckxpc3QtPmF0KGkpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoU3R5bGVJbWFnZSogaW1hZ2UgPSBjdXJyZW50Q3Vyc29yLmltYWdlKCkp
IHsKQEAgLTUzNTcsMTcgKzUzNjIsMTcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGlu
Z0ltYWdlcygpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2U6IHsKLSAgICAgICAgICAgIGlmIChtX3N0eWxlLT5saXN0
U3R5bGVJbWFnZSgpICYmIG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdl
KCkpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGlzdFN0eWxlSW1hZ2UobG9hZFBlbmRp
bmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPmxpc3RTdHls
ZUltYWdlKCkpKSk7CisgICAgICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZS0+bGlzdFN0eWxlSW1h
Z2UoKSAmJiBtX3N0YXRlLnN0eWxlLT5saXN0U3R5bGVJbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgp
KQorICAgICAgICAgICAgICAgIG1fc3RhdGUuc3R5bGUtPnNldExpc3RTdHlsZUltYWdlKGxvYWRQ
ZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRlLnN0eWxl
LT5saXN0U3R5bGVJbWFnZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlOiB7Ci0gICAgICAgICAgICBp
ZiAobV9zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBtX3N0eWxlLT5ib3JkZXJJbWFnZVNv
dXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJv
cmRlckltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5n
SW1hZ2UqPihtX3N0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOworICAgICAgICAgICAgaWYg
KG1fc3RhdGUuc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCkgJiYgbV9zdGF0ZS5zdHlsZS0+Ym9y
ZGVySW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBtX3N0
YXRlLnN0eWxlLT5zZXRCb3JkZXJJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19j
YXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2Uo
KSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCb3hSZWZsZWN0OiB7Ci0gICAgICAgICAgICBpZiAoU3R5bGVSZWZsZWN0aW9u
KiByZWZsZWN0aW9uID0gbV9zdHlsZS0+Ym94UmVmbGVjdCgpKSB7CisgICAgICAgICAgICBpZiAo
U3R5bGVSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbV9zdGF0ZS5zdHlsZS0+Ym94UmVmbGVjdCgp
KSB7CiAgICAgICAgICAgICAgICAgY29uc3QgTmluZVBpZWNlSW1hZ2UmIG1hc2tJbWFnZSA9IHJl
ZmxlY3Rpb24tPm1hc2soKTsKICAgICAgICAgICAgICAgICBpZiAobWFza0ltYWdlLmltYWdlKCkg
JiYgbWFza0ltYWdlLmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShz
dGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tJbWFnZS5pbWFnZSgpKSk7CkBAIC01
Mzc3LDEyICs1MzgyLDEyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMo
KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZTogewotICAgICAgICAgICAgaWYgKG1fc3R5bGUtPm1h
c2tCb3hJbWFnZVNvdXJjZSgpICYmIG1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpLT5pc1Bl
bmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hc2tCb3hJbWFnZVNv
dXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9z
dHlsZS0+bWFza0JveEltYWdlU291cmNlKCkpKSk7CisgICAgICAgICAgICBpZiAobV9zdGF0ZS5z
dHlsZS0+bWFza0JveEltYWdlU291cmNlKCkgJiYgbV9zdGF0ZS5zdHlsZS0+bWFza0JveEltYWdl
U291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHls
ZS0+c2V0TWFza0JveEltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5
bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRlLnN0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrSW1hZ2U6IHsKLSAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBtYXNrTGF5ZXIg
PSBtX3N0eWxlLT5hY2Nlc3NNYXNrTGF5ZXJzKCk7IG1hc2tMYXllcjsgbWFza0xheWVyID0gbWFz
a0xheWVyLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBtYXNrTGF5ZXIg
PSBtX3N0YXRlLnN0eWxlLT5hY2Nlc3NNYXNrTGF5ZXJzKCk7IG1hc2tMYXllcjsgbWFza0xheWVy
ID0gbWFza0xheWVyLT5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAobWFza0xheWVyLT5p
bWFnZSgpICYmIG1hc2tMYXllci0+aW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKICAgICAgICAg
ICAgICAgICAgICAgbWFza0xheWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19j
YXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obWFza0xheWVyLT5pbWFnZSgpKSkpOwogICAgICAgICAg
ICAgfQpAQCAtNTM5Myw3ICs1Mzk4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGlu
Z0ltYWdlcygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRp
ZXMuY2xlYXIoKTsKKyAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuY2xlYXIoKTsK
IH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1Jlc291cmNlcygpCkBAIC01NDU2
LDcgKzU0NjEsNiBAQCB2b2lkIE1lZGlhUXVlcnlSZXN1bHQ6OnJlcG9ydE1lbW9yeVVzYWdlKE1l
bW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbgogdm9pZCBTdHlsZVJlc29sdmVy
OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBj
b25zdAogewogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMs
IFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3N0eWxlKTsK
ICAgICBpbmZvLmFkZE1lbWJlcihtX2F1dGhvclN0eWxlKTsKICAgICBpbmZvLmFkZE1lbWJlciht
X3VzZXJTdHlsZSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9mZWF0dXJlcyk7CkBAIC01NDY1LDMy
ICs1NDY5LDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5
T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKICAgICBpbmZvLmFkZE1lbWJlciht
X2tleWZyYW1lc1J1bGVNYXApOwogICAgIGluZm8uYWRkTWVtYmVyKG1fbWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9tYXRjaGVkUHJvcGVydGllc0NhY2hlU3dl
ZXBUaW1lcik7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9tYXRjaGVkUnVsZXMpOwogCi0gICAgaW5m
by5hZGRNZW1iZXIobV9ydWxlTGlzdCk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9wZW5kaW5nSW1h
Z2VQcm9wZXJ0aWVzKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX21lZGl1bSk7CiAgICAgaW5mby5h
ZGRNZW1iZXIobV9yb290RGVmYXVsdFN0eWxlKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2RvY3Vt
ZW50KTsKIAotICAgIC8vIEZJWE1FOiBwb2ludGVyIHRvIFJlbmRlclN0eWxlIGNvdWxkIHBvaW50
IHRvIGFuIGFscmVhZHkgZGVsZXRlZCBvYmplY3QuCi0gICAgaW5mby5pZ25vcmVNZW1iZXIobV9w
YXJlbnRTdHlsZSk7Ci0gICAgaW5mby5pZ25vcmVNZW1iZXIobV9yb290RWxlbWVudFN0eWxlKTsK
LQotICAgIGluZm8uYWRkTWVtYmVyKG1fZWxlbWVudCk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9z
dHlsZWRFbGVtZW50KTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3JlZ2lvbkZvclN0eWxpbmcpOwot
ICAgIGluZm8uYWRkTWVtYmVyKG1fcGFyZW50Tm9kZSk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9s
aW5lSGVpZ2h0VmFsdWUpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fZm9udFNlbGVjdG9yKTsKICAg
ICBpbmZvLmFkZE1lbWJlcihtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMpOwog
ICAgIGluZm8uaWdub3JlTWVtYmVyKG1fc3R5bGVCdWlsZGVyKTsKICAgICBpbmZvLmFkZE1lbWJl
cihtX2luc3BlY3RvckNTU09NV3JhcHBlcnMpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYg
RU5BQkxFKFNWRykKLSAgICBpbmZvLmFkZE1lbWJlcihtX3BlbmRpbmdTVkdEb2N1bWVudHMpOwot
I2VuZGlmCiAgICAgaW5mby5hZGRNZW1iZXIobV9zY29wZVJlc29sdmVyKTsKIAorICAgIGluZm8u
YWRkTWVtYmVyKG1fc3RhdGUpOworCiAgICAgLy8gRklYTUU6IG1vdmUgdGhpcyB0byBhIHBsYWNl
IHdoZXJlIGl0IHdvdWxkIGJlIGNhbGxlZCBvbmx5IG9uY2U/CiAgICAgaW5mby5hZGRNZW1iZXIo
ZGVmYXVsdFN0eWxlKTsKICAgICBpbmZvLmFkZE1lbWJlcihkZWZhdWx0UXVpcmtzU3R5bGUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggYTNhZjU0NDhiOTA5OGUzYzMyOGE2NTIw
ZTgwOTFiMjE1MzVmNTQ2ZS4uNDY5YjIxYzZkOTA1MzljMjAyNzEyZTU0OWJlZmVmODA2NDAxNGUz
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0yMyw2ICsyMyw3IEBACiAjZGVm
aW5lIFN0eWxlUmVzb2x2ZXJfaAogCiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgIkNT
U1J1bGVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgogI2luY2x1ZGUgIkNTU1Zh
bHVlTGlzdC5oIgogI2luY2x1ZGUgIkxpbmtIYXNoLmgiCkBAIC0zNiw2ICszNyw5IEBACiAjaW5j
bHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVTY29wZVJlc29sdmVy
LmgiCiAjaW5jbHVkZSAiVmlld3BvcnRTdHlsZVJlc29sdmVyLmgiCisjaWYgRU5BQkxFKENTU19G
SUxURVJTKSAmJiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIldlYktpdENTU1NWR0RvY3VtZW50VmFs
dWUuaCIKKyNlbmRpZgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC0xODIsMjAgKzE4NiwyMCBAQCBw
dWJsaWM6CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JEb2N1
bWVudChEb2N1bWVudCosIENTU0ZvbnRTZWxlY3RvciogPSAwKTsKIAotICAgIFJlbmRlclN0eWxl
KiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KLSAgICBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9Ci0gICAgUmVu
ZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50
U3R5bGU7IH0KLSAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50
OyB9CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHls
ZS5nZXQoKTsgfQorICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUucGFyZW50U3R5bGU7IH0KKyAgICBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZTsgfQorICAgIEVsZW1l
bnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmVsZW1lbnQ7IH0KICAgICBEb2N1
bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAgICAgY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBzdHlsZSgpLT5mb250
RGVzY3JpcHRpb24oKTsgfQogICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERl
c2NyaXB0aW9uKCkgeyByZXR1cm4gcGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0K
LSAgICB2b2lkIHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsgfQotICAgIHZvaWQgc2V0Wm9vbShmbG9hdCBmKSB7IG1fZm9udERp
cnR5IHw9IHN0eWxlKCktPnNldFpvb20oZik7IH0KLSAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20o
ZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRFZmZlY3RpdmVab29tKGYpOyB9
Ci0gICAgdm9pZCBzZXRUZXh0U2l6ZUFkanVzdChib29sIGIpIHsgbV9mb250RGlydHkgfD0gc3R5
bGUoKS0+c2V0VGV4dFNpemVBZGp1c3QoYik7IH0KLSAgICB2b2lkIHNldFdyaXRpbmdNb2RlKFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFdyaXRp
bmdNb2RlKHdyaXRpbmdNb2RlKTsgfQotICAgIHZvaWQgc2V0VGV4dE9yaWVudGF0aW9uKFRleHRP
cmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24pIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0
VGV4dE9yaWVudGF0aW9uKHRleHRPcmllbnRhdGlvbik7IH0KLSAgICBib29sIGhhc1BhcmVudE5v
ZGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudE5vZGU7IH0KKyAgICB2b2lkIHNldEZvbnREZXNj
cmlwdGlvbihjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgeyBtX3N0YXRl
LmZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsgfQorICAgIHZvaWQgc2V0Wm9vbShmbG9hdCBmKSB7IG1fc3RhdGUuZm9udERpcnR5IHw9IHN0
eWxlKCktPnNldFpvb20oZik7IH0KKyAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQgZikg
eyBtX3N0YXRlLmZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRFZmZlY3RpdmVab29tKGYpOyB9Cisg
ICAgdm9pZCBzZXRUZXh0U2l6ZUFkanVzdChib29sIGIpIHsgbV9zdGF0ZS5mb250RGlydHkgfD0g
c3R5bGUoKS0+c2V0VGV4dFNpemVBZGp1c3QoYik7IH0KKyAgICB2b2lkIHNldFdyaXRpbmdNb2Rl
KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IG1fc3RhdGUuZm9udERpcnR5IHw9IHN0eWxlKCkt
PnNldFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsgfQorICAgIHZvaWQgc2V0VGV4dE9yaWVudGF0
aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24pIHsgbV9zdGF0ZS5mb250RGlydHkg
fD0gc3R5bGUoKS0+c2V0VGV4dE9yaWVudGF0aW9uKHRleHRPcmllbnRhdGlvbik7IH0KKyAgICBi
b29sIGhhc1BhcmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnBhcmVudE5vZGU7IH0K
IAogICAgIHZvaWQgcmVzZXRBdXRob3JTdHlsZSgpOwogICAgIHZvaWQgYXBwZW5kQXV0aG9yU3R5
bGVTaGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVT
aGVldD4gPiYpOwpAQCAtMzI3LDcgKzMzMSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGFkanVz
dFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZVRvQWRqdXN0LCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUsIEVsZW1lbnQqKTsKIAotICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29uc3QgUnVs
ZURhdGEqIHJ1bGUpIHsgbV9tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOyB9CisgICAgdm9pZCBh
ZGRNYXRjaGVkUnVsZShjb25zdCBSdWxlRGF0YSogcnVsZSkgeyBtX3N0YXRlLm1hdGNoZWRSdWxl
cy5hcHBlbmQocnVsZSk7IH0KIAogICAgIHN0cnVjdCBSdWxlUmFuZ2UgewogICAgICAgICBSdWxl
UmFuZ2UoaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4KTogZmlyc3RSdWxl
SW5kZXgoZmlyc3RSdWxlSW5kZXgpLCBsYXN0UnVsZUluZGV4KGxhc3RSdWxlSW5kZXgpIHsgfQpA
QCAtNDM3LDE1ICs0NDEsODcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8UnVsZVNldD4gbV9zaWJs
aW5nUnVsZVNldDsKICAgICBPd25QdHI8UnVsZVNldD4gbV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVT
ZXQ7CiAKLSAgICBib29sIG1faGFzVUFBcHBlYXJhbmNlOwotICAgIEJvcmRlckRhdGEgbV9ib3Jk
ZXJEYXRhOwotICAgIEZpbGxMYXllciBtX2JhY2tncm91bmREYXRhOwotICAgIENvbG9yIG1fYmFj
a2dyb3VuZENvbG9yOwotCiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBS
ZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPiA+IEtleWZyYW1lc1J1bGVNYXA7CiAgICAgS2V5ZnJh
bWVzUnVsZU1hcCBtX2tleWZyYW1lc1J1bGVNYXA7CiAKIHB1YmxpYzoKKyAgICB0eXBlZGVmIEhh
c2hNYXA8Q1NTUHJvcGVydHlJRCwgUmVmUHRyPENTU1ZhbHVlPiA+IFBlbmRpbmdJbWFnZVByb3Bl
cnR5TWFwOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8RmlsdGVyT3BlcmF0aW9uKiwgUmVmUHRyPFdlYktpdENTU1NWR0RvY3VtZW50
VmFsdWU+ID4gUGVuZGluZ1NWR0RvY3VtZW50TWFwOworI2VuZGlmCisKKyAgICBjbGFzcyBTdGF0
ZSB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YXRlKTsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFN0YXRlKCkKKyAgICAgICAgOiBlbGVtZW50KDApCisgICAgICAgICwgc3R5bGVkRWxl
bWVudCgwKQorICAgICAgICAsIHBhcmVudE5vZGUoMCkKKyAgICAgICAgLCBwYXJlbnRTdHlsZSgw
KQorICAgICAgICAsIHJvb3RFbGVtZW50U3R5bGUoMCkKKyAgICAgICAgLCByZWdpb25Gb3JTdHls
aW5nKDApCisgICAgICAgICwgc2FtZU9yaWdpbk9ubHkoZmFsc2UpCisgICAgICAgICwgcHNldWRv
U3R5bGUoTk9QU0VVRE8pCisgICAgICAgICwgZWxlbWVudExpbmtTdGF0ZShOb3RJbnNpZGVMaW5r
KQorICAgICAgICAsIGRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludChmYWxzZSkKKyAgICAgICAg
LCBlbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMoZmFsc2UpCisgICAgICAgICwgYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpCisgICAgICAgICwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRl
ZExpbmtTdHlsZShmYWxzZSkKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgICAgICwgaGFz
UGVuZGluZ1NoYWRlcnMoZmFsc2UpCisjZW5kaWYKKyAgICAgICAgLCBsaW5lSGVpZ2h0VmFsdWUo
MCkKKyAgICAgICAgLCBmb250RGlydHkoZmFsc2UpCisgICAgICAgICwgaGFzVUFBcHBlYXJhbmNl
KGZhbHNlKQorICAgICAgICAsIGJhY2tncm91bmREYXRhKEJhY2tncm91bmRGaWxsTGF5ZXIpIHsg
fQorICAgICAgICAKK3B1YmxpYzoKKyAgICAgICAgLy8gRklYTUUoYnVnIDEwODU2Myk6IHRvIG1h
a2UgaXQgZWFzaWVyIHRvIHJldmlldywgdGhlc2UgbWVtYmVyCisgICAgICAgIC8vIHZhcmlhYmxl
cyBhcmUgcHVibGljLiBIb3dldmVyIHdlIHNob3VsZCBhZGQgbWV0aG9kcyB0byBhY2Nlc3MKKyAg
ICAgICAgLy8gdGhlc2UgdmFyaWFibGVzLgorICAgICAgICBFbGVtZW50KiBlbGVtZW50OworICAg
ICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlOworICAgICAgICBTdHlsZWRFbGVtZW50KiBz
dHlsZWRFbGVtZW50OworICAgICAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlOworICAgICAg
ICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGU7CisgICAgICAgIFJlbmRlclN0eWxlKiByb290RWxl
bWVudFN0eWxlOworICAgICAgICAKKyAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHls
aW5nOworICAgICAgICBib29sIHNhbWVPcmlnaW5Pbmx5OworICAgICAgICBQc2V1ZG9JZCBwc2V1
ZG9TdHlsZTsKKworICAgICAgICBFSW5zaWRlTGluayBlbGVtZW50TGlua1N0YXRlOworCisgICAg
ICAgIGJvb2wgZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50OworCisgICAgICAgIGJvb2wgZWxl
bWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzOworCisgICAgICAgIFBzZXVkb0lkIGR5bmFtaWNQc2V1
ZG87CisKKyAgICAgICAgLy8gQSBidWZmZXIgdXNlZCB0byBob2xkIHRoZSBzZXQgb2YgbWF0Y2hl
ZCBydWxlcyBmb3IgYW4gZWxlbWVudCwKKyAgICAgICAgLy8gYW5kIGEgdGVtcG9yYXJ5IGJ1ZmZl
ciB1c2VkIGZvciBtZXJnZSBzb3J0aW5nLgorICAgICAgICBWZWN0b3I8Y29uc3QgUnVsZURhdGEq
LCAzMj4gbWF0Y2hlZFJ1bGVzOworICAgICAgICBSZWZQdHI8U3RhdGljQ1NTUnVsZUxpc3Q+IHJ1
bGVMaXN0OworCisgICAgICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOworICAg
ICAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7CisKKyAgICAgICAgUGVu
ZGluZ0ltYWdlUHJvcGVydHlNYXAgcGVuZGluZ0ltYWdlUHJvcGVydGllczsKKyNpZiBFTkFCTEUo
Q1NTX1NIQURFUlMpCisgICAgICAgIGJvb2wgaGFzUGVuZGluZ1NoYWRlcnM7CisjZW5kaWYKKyNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCisgICAgICAgIFBlbmRpbmdTVkdE
b2N1bWVudE1hcCBwZW5kaW5nU1ZHRG9jdW1lbnRzOworI2VuZGlmCisgICAgICAgIENTU1ZhbHVl
KiBsaW5lSGVpZ2h0VmFsdWU7CisgICAgICAgIGJvb2wgZm9udERpcnR5OworCisgICAgICAgIGJv
b2wgaGFzVUFBcHBlYXJhbmNlOworICAgICAgICBCb3JkZXJEYXRhIGJvcmRlckRhdGE7CisgICAg
ICAgIEZpbGxMYXllciBiYWNrZ3JvdW5kRGF0YTsKKyAgICAgICAgQ29sb3IgYmFja2dyb3VuZENv
bG9yOworICAgIH07CisKICAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlTm90WWV0QXZhaWxh
YmxlKCkgeyByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsgfQogCiAgICAgUGFzc1JlZlB0
cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CkBAIC00
NTYsOCArNTMyLDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgUGFzc1JlZlB0cjxTdHlsZUltYWdl
PiBjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTQ3Vyc29ySW1hZ2VW
YWx1ZSopOwogCi0gICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSBjb25zdCB7
IHJldHVybiBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsgfQotICAgIGJvb2wgYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZTsgfQorICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7
IH0KKyAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7IH0KIAogICAgIHN0
YXRpYyBMZW5ndGggY29udmVydFRvSW50TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiwgUmVuZGVy
U3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEpOwog
ICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvRmxvYXRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUq
LCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVy
ID0gMSk7CkBAIC01MTEsMzkgKzU4NywxOCBAQCBwcml2YXRlOgogCiAgICAgVGltZXI8U3R5bGVS
ZXNvbHZlcj4gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlU3dlZXBUaW1lcjsKIAotICAgIC8vIEEg
YnVmZmVyIHVzZWQgdG8gaG9sZCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgZm9yIGFuIGVsZW1l
bnQsIGFuZCBhIHRlbXBvcmFyeSBidWZmZXIgdXNlZCBmb3IKLSAgICAvLyBtZXJnZSBzb3J0aW5n
LgotICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiBtX21hdGNoZWRSdWxlczsKLQotICAg
IFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4gbV9ydWxlTGlzdDsKLQotICAgIHR5cGVkZWYgSGFz
aE1hcDxDU1NQcm9wZXJ0eUlELCBSZWZQdHI8Q1NTVmFsdWU+ID4gUGVuZGluZ0ltYWdlUHJvcGVy
dHlNYXA7Ci0gICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0
aWVzOwotCiAgICAgT3duUHRyPE1lZGlhUXVlcnlFdmFsdWF0b3I+IG1fbWVkaXVtOwogICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gbV9yb290RGVmYXVsdFN0eWxlOwogCi0gICAgUHNldWRvSWQgbV9k
eW5hbWljUHNldWRvOwotICAgIFBzZXVkb0lkIG1fcHNldWRvU3R5bGU7Ci0KICAgICBEb2N1bWVu
dCogbV9kb2N1bWVudDsKKyAgICAvLyBGSVhNRTogTWFrZSBTZWxlY3RvckNoZWNrZXIgYW4gb24t
c3RhY2sgb2JqZWN0IGFuZAorICAgIC8vIG1vdmUgc2VsZWN0b3JDaGVja2VyLm1vZGUoKSB0byBT
dGF0ZS4KKyAgICAvLyBzZWxlY3RvckNoZWNrZXIuc3RyaW5nUGFyc2luZygpIGNhbiBiZSByZXBs
YWNlZCB3aXRoCisgICAgLy8gIWRvY3VtZW50LmluUXVpcmtzTW9kZSgpLgogICAgIFNlbGVjdG9y
Q2hlY2tlciBtX3NlbGVjdG9yQ2hlY2tlcjsKICAgICBTZWxlY3RvckZpbHRlciBtX3NlbGVjdG9y
RmlsdGVyOwogCi0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwotICAgIFJlbmRlclN0
eWxlKiBtX3BhcmVudFN0eWxlOwotICAgIFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGU7
Ci0gICAgRWxlbWVudCogbV9lbGVtZW50OwotICAgIFN0eWxlZEVsZW1lbnQqIG1fc3R5bGVkRWxl
bWVudDsKLSAgICBSZW5kZXJSZWdpb24qIG1fcmVnaW9uRm9yU3R5bGluZzsKLSAgICBFSW5zaWRl
TGluayBtX2VsZW1lbnRMaW5rU3RhdGU7Ci0gICAgYm9vbCBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xh
c3NSdWxlczsKLSAgICBDb250YWluZXJOb2RlKiBtX3BhcmVudE5vZGU7Ci0gICAgQ1NTVmFsdWUq
IG1fbGluZUhlaWdodFZhbHVlOwotICAgIGJvb2wgbV9mb250RGlydHk7CiAgICAgYm9vbCBtX21h
dGNoQXV0aG9yQW5kVXNlclN0eWxlczsKLSAgICBib29sIG1fc2FtZU9yaWdpbk9ubHk7Ci0gICAg
Ym9vbCBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludDsKIAogICAgIFJlZlB0cjxDU1NGb250
U2VsZWN0b3I+IG1fZm9udFNlbGVjdG9yOwogICAgIFZlY3RvcjxPd25QdHI8TWVkaWFRdWVyeVJl
c3VsdD4gPiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHM7CkBAIC01NTIsMjIg
KzYwNywxNCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxWaWV3cG9ydFN0eWxlUmVzb2x2ZXI+IG1f
dmlld3BvcnRTdHlsZVJlc29sdmVyOwogI2VuZGlmCiAKLSAgICBib29sIG1fYXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlOwotICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlOwogICAgIGNvbnN0IFN0eWxlQnVpbGRlciYgbV9zdHlsZUJ1aWxkZXI7CiAKLSNpZiBFTkFC
TEUoQ1NTX1NIQURFUlMpCi0gICAgYm9vbCBtX2hhc1BlbmRpbmdTaGFkZXJzOwotI2VuZGlmCi0K
LSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCi0gICAgSGFzaE1hcDxGaWx0
ZXJPcGVyYXRpb24qLCBSZWZQdHI8V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZT4gPiBtX3BlbmRp
bmdTVkdEb2N1bWVudHM7Ci0jZW5kaWYKLQogICAgIE93blB0cjxTdHlsZVNjb3BlUmVzb2x2ZXI+
IG1fc2NvcGVSZXNvbHZlcjsKICAgICBDU1NUb1N0eWxlTWFwIG1fc3R5bGVNYXA7CiAgICAgSW5z
cGVjdG9yQ1NTT01XcmFwcGVycyBtX2luc3BlY3RvckNTU09NV3JhcHBlcnM7CiAKKyAgICBTdGF0
ZSBtX3N0YXRlOworCiAgICAgZnJpZW5kIGNsYXNzIFN0eWxlQnVpbGRlcjsKICAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiwgY29uc3QgTWF0Y2hlZFBy
b3BlcnRpZXMmKTsKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1hdGNoZWRQcm9w
ZXJ0aWVzJiwgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186284</attachid>
            <date>2013-02-03 18:21:24 -0800</date>
            <delta_ts>2013-02-03 22:08:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96421-20130204111803.patch</filename>
            <type>text/plain</type>
            <size>139065</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDFkMWNlM2UyZDEyMGVj
NDVlODY1NTM3NTU4NWU0MzI1YmExNzg5OS4uYjJjNWUzOWJkNDk1MzU5ZmIxMzI0NDNhZWU3ZDdj
MDQ4MjQ3YzI0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDEzLTAyLTAzICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBTcGxpdCBwZXItcmVz
b2x2ZSBsb2dpYyBvdXQgZnJvbSBTdHlsZVJlc29sdmVyLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY0MjEKKworICAgICAgICBSZXZpZXdlZCBieSBF
cmljIFNlaWRlbC4KKworICAgICAgICBJbXBsZW1lbnRlZCBjbGFzcyBTdHlsZVJlc29sdmVyOjpT
dGF0ZSBhbmQgYWRkZWQgbV9zdGF0ZSB0bworICAgICAgICBTdHlsZVJlc29sdmVyLiBBbGwgbWVt
YmVyIHZhcmlhYmxlcyB1c2VkIGZvciBwZXItcmVzb2x2ZSBsb2dpYyBhcmUKKyAgICAgICAgbW92
ZWQgaW50byB0aGUgc3RhdGUgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNhdXNl
IGp1c3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBjc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KToK
KyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9y
UnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2Fu
ZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRj
aEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNl
clJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zv
ckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRSdWxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRGb3JTdHlsZVJlc29sdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250
cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVI
YXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpzdHlsZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjphZGp1c3RSZW5kZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjp1
cGRhdGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlQm9yZGVy
QW5kQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9T
dHlsZVJ1bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpy
dWxlTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lv
blNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0JyZWFkdGgpOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlR3JpZFRyYWNrTWluTWF4KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFj
a0dyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0xpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTVkdEb2N1bWVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJG
cm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdT
aGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmls
dGVyVHJhbnNmb3JtUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6bG9hZFBlbmRpbmdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjps
b2FkUGVuZGluZ0ltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpyZXBv
cnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnJvb3RFbGVtZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6ZWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250RGVzY3JpcHRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Wm9vbSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRFZmZlY3RpdmVab29tKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnNldFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnNldFRleHRPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpoYXNQYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmFkZE1hdGNoZWRSdWxlKToKKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAo
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OlN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9W
aXNpdGVkTGlua1N0eWxlKToKKyAgICAgICAgQWRkZWQgIm1fc3RhdGUuIiB0byBhY2Nlc3MgbWVt
YmVyIHZhcmlhYmxlcyB1c2VkIGZvciBwZXItcmVzb2x2ZSBsb2dpYy4KKwogMjAxMy0wMi0wMyAg
S2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1Y4XSBQYXNz
IGFuIElzb2xhdGUgdG8gSGFzSW5zdGFuY2UoKSAocGFydCAxKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDYxNDViYjFmMTYyNWI4ZmU0ZDE2NzYwN2Ji
YmE4YmZkOWExYjAxMTkuLmFiNTZmNjYxMTc5N2ZkOTQ3Nzk2ZjQ4ZjMxMzllNzgxM2E5N2U4M2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTQ5LDcg
KzQ5LDcgQEAKICNkZWZpbmUgSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAogaWYgKGlzSW5o
ZXJpdCkgXAogeyBcCi0gICAgc3Znc3R5bGUtPnNldCMjUHJvcChtX3BhcmVudFN0eWxlLT5zdmdT
dHlsZSgpLT5wcm9wKCkpOyBcCisgICAgc3Znc3R5bGUtPnNldCMjUHJvcChzdGF0ZS5wYXJlbnRT
dHlsZS0+c3ZnU3R5bGUoKS0+cHJvcCgpKTsgXAogICAgIHJldHVybjsgXAogfQogCkBAIC0xMDks
MTAgKzEwOSwxMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKQogICAgICAgICBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpOwogCi0gICAgU1ZHUmVuZGVyU3R5bGUqIHN2Z3N0eWxlID0gbV9zdHls
ZS0+YWNjZXNzU1ZHU3R5bGUoKTsKKyAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwor
ICAgIFNWR1JlbmRlclN0eWxlKiBzdmdzdHlsZSA9IHN0YXRlLnN0eWxlLT5hY2Nlc3NTVkdTdHls
ZSgpOwogCi0gICAgYm9vbCBpc0luaGVyaXQgPSBtX3BhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5o
ZXJpdGVkVmFsdWUoKTsKLSAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1
ZSgpIHx8ICghbV9wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpOworICAg
IGJvb2wgaXNJbmhlcml0ID0gc3RhdGUucGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRW
YWx1ZSgpOworICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwg
KCFzdGF0ZS5wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpOwogCiAgICAg
Ly8gV2hhdCBmb2xsb3dzIGlzIGEgbGlzdCB0aGF0IG1hcHMgdGhlIENTUyBwcm9wZXJ0aWVzIGlu
dG8gdGhlaXIKICAgICAvLyBjb3JyZXNwb25kaW5nIGZyb250LWVuZCBSZW5kZXJTdHlsZSB2YWx1
ZXMuIFNob3J0aGFuZHMoZS5nLiBib3JkZXIsCkBAIC0yMjksNyArMjMwLDcgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZpbGw6CiAgICAgICAgIHsKICAgICAgICAg
ICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHls
ZSogc3ZnUGFyZW50U3R5bGUgPSBtX3BhcmVudFN0eWxlLT5zdmdTdHlsZSgpOworICAgICAgICAg
ICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQYXJlbnRTdHlsZSA9IHN0YXRlLnBhcmVu
dFN0eWxlLT5zdmdTdHlsZSgpOwogICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFp
bnQoc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQ
YWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMjM5LDE0ICsyNDAsMTQg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1ZS0+
aXNTVkdQYWludCgpKSB7CiAgICAgICAgICAgICAgICAgU1ZHUGFpbnQqIHN2Z1BhaW50ID0gc3Rh
dGljX2Nhc3Q8U1ZHUGFpbnQqPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dEZpbGxQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFs
dWUoc3ZnUGFpbnQsIG1fc3R5bGUtPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkp
OworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFpbnQtPnBhaW50
VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5zdHlsZS0+
Y29sb3IoKSksIHN2Z1BhaW50LT51cmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCks
IGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tl
OgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICAg
ICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1BhcmVudFN0eWxlID0gbV9wYXJlbnRTdHlsZS0+
c3ZnU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFy
ZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKTsKICAgICAgICAgICAgICAg
ICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50VHlw
ZSgpLCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+
c3Ryb2tlUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJv
cGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQpAQCAtMjU2LDcgKzI1Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlT
VkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkgewogICAgICAgICAgICAg
ICAgIFNWR1BhaW50KiBzdmdQYWludCA9IHN0YXRpY19jYXN0PFNWR1BhaW50Kj4odmFsdWUpOwot
ICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYWludC0+cGFpbnRU
eXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIG1fc3R5bGUtPmNvbG9y
KCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBs
eVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxl
LT5zZXRTdHJva2VQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9y
Q1NTVmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0eWxlLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgp
LCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkBAIC0zNjMsNyArMzY0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBl
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmlt
aXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dE1hcmtlclN0YXJ0UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJG
cm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Zn
c3R5bGUtPnNldE1hcmtlclN0YXJ0UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElk
ZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJr
ZXJNaWQ6CkBAIC0zNzcsNyArMzc4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1By
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlm
ICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMg
PSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5
bGUtPnNldE1hcmtlck1pZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlm
aWVyRnJvbUlSSVN0cmluZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAg
IHN2Z3N0eWxlLT5zZXRNYXJrZXJNaWRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50
SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1h
cmtlckVuZDoKQEAgLTM5MSw3ICszOTIsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZH
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAg
aWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAg
cyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdz
dHlsZS0+c2V0TWFya2VyRW5kUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50
aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAg
ICAgc3Znc3R5bGUtPnNldE1hcmtlckVuZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21l
bnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
U3Ryb2tlTGluZWNhcDoKQEAgLTQyOCw3ICs0MjksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAg
ICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAg
ICBzdmdzdHlsZS0+c2V0RmlsdGVyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElk
ZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAg
ICAgICAgc3Znc3R5bGUtPnNldEZpbHRlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21l
bnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
TWFzazoKQEAgLTQ0Miw3ICs0NDMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYg
KHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAgcyA9
IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdzdHls
ZS0+c2V0TWFza2VyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJG
cm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Zn
c3R5bGUtPnNldE1hc2tlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlm
aWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q2xpcFBhdGg6
CkBAIC00NTYsNyArNDU3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBl
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmlt
aXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dENsaXBwZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21J
UklTdHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICBzdmdzdHls
ZS0+c2V0Q2xpcHBlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVy
RnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dEFuY2hvcjoK
QEAgLTQ3NywxNCArNDc4LDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHN0b3BDb2xvciwgU3RvcENvbG9yKTsKICAg
ICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAgICAgICAgIHN2Z3N0
eWxlLT5zZXRTdG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2FzdDxT
VkdDb2xvcio+KHZhbHVlKSwgbV9zdHlsZS0+Y29sb3IoKSkpOworICAgICAgICAgICAgICAgIHN2
Z3N0eWxlLT5zZXRTdG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2Fz
dDxTVkdDb2xvcio+KHZhbHVlKSwgc3RhdGUuc3R5bGUtPmNvbG9yKCkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpZ2h0aW5nQ29sb3I6
CiAgICAgICAgIHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGxpZ2h0
aW5nQ29sb3IsIExpZ2h0aW5nQ29sb3IpOwogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0Nv
bG9yKCkpCi0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldExpZ2h0aW5nQ29sb3IoY29sb3JG
cm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgbV9zdHls
ZS0+Y29sb3IoKSkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRMaWdodGluZ0NvbG9y
KGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSks
IHN0YXRlLnN0eWxlLT5jb2xvcigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rmxvb2RPcGFjaXR5OgpAQCAtNTA5LDcgKzUxMCw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FO
RF9JTklUSUFMKGZsb29kQ29sb3IsIEZsb29kQ29sb3IpOwogICAgICAgICAgICAgaWYgKHZhbHVl
LT5pc1NWR0NvbG9yKCkpCi0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZsb29kQ29sb3Io
Y29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwg
bV9zdHlsZS0+Y29sb3IoKSkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGbG9vZENv
bG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1
ZSksIHN0YXRlLnN0eWxlLT5jb2xvcigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5R2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6CkBA
IC01NDksNyArNTUwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U3ZnU2hhZG93OiB7CiAgICAgICAgICAgICBpZiAo
aXNJbmhlcml0KQotICAgICAgICAgICAgICAgIHJldHVybiBzdmdzdHlsZS0+c2V0U2hhZG93KGFk
b3B0UHRyKG1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRvdygpID8gbmV3IFNoYWRvd0Rh
dGEoKm1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRvdygpKSA6IDApKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gc3Znc3R5bGUtPnNldFNoYWRvdyhhZG9wdFB0cihzdGF0ZS5wYXJlbnRT
dHlsZS0+c3ZnU3R5bGUoKS0+c2hhZG93KCkgPyBuZXcgU2hhZG93RGF0YSgqc3RhdGUucGFyZW50
U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRvdygpKSA6IDApKTsKICAgICAgICAgICAgIGlmIChpc0lu
aXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUpIC8vIGluaXRpYWwgfCBub25lCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN2Z3N0eWxlLT5zZXRTaGFkb3cobnVsbHB0cik7CiAKQEAgLTU2NCw5ICs1NjUs
OSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKCFmaXJzdFZhbHVlLT5pc1NoYWRv
d1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgU2hhZG93VmFs
dWUqIGl0ZW0gPSBzdGF0aWNfY2FzdDxTaGFkb3dWYWx1ZSo+KGZpcnN0VmFsdWUpOwotICAgICAg
ICAgICAgSW50UG9pbnQgbG9jYXRpb24oaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxl
KCksIG1fcm9vdEVsZW1lbnRTdHlsZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
dGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKSk7
Ci0gICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRl
TGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKSA6IDA7CisgICAgICAgICAg
ICBJbnRQb2ludCBsb2NhdGlvbihpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5
bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpLAorICAgICAgICAgICAgICAgIGl0ZW0t
PnktPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1l
bnRTdHlsZSkpOworICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1
ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVu
dFN0eWxlKSA6IDA7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKICAgICAgICAgICAgIGlmIChp
dGVtLT5jb2xvcikKICAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApp
bmRleCBmYjc0ZTI3NTFiMzU3NTIzY2VlNjFkNzM2NjkxYTRmNGI3YTEwZjY3Li42ZmZhN2U3ZTQ5
MDk5YTMyMDJiM2I2NWIyYTk3NWZiNTkzNzg3NDc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwCkBAIC00NCw3ICs0NCw2IEBACiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVN
YXBwaW5ncy5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NS
ZWZsZWN0VmFsdWUuaCIKLSNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgogI2luY2x1ZGUgIkNTU1Nl
bGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTU3R5
bGVSdWxlLmgiCkBAIC0yMDAsMTQgKzE5OSwxNCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogCiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlmIChpc0luaGVyaXQp
IHsgXAotICAgIG1fc3R5bGUtPnNldCMjUHJvcChtX3BhcmVudFN0eWxlLT5wcm9wKCkpOyBcCisg
ICAgbV9zdGF0ZS5zdHlsZS0+c2V0IyNQcm9wKG1fc3RhdGUucGFyZW50U3R5bGUtPnByb3AoKSk7
IFwKICAgICByZXR1cm47IFwKIH0KIAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElB
TChwcm9wLCBQcm9wKSBcCiBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJbml0
aWFsKSB7IFwKLSAgICBtX3N0eWxlLT5zZXQjI1Byb3AoUmVuZGVyU3R5bGU6OmluaXRpYWwjI1By
b3AoKSk7IFwKKyAgICBtX3N0YXRlLnN0eWxlLT5zZXQjI1Byb3AoUmVuZGVyU3R5bGU6OmluaXRp
YWwjI1Byb3AoKSk7IFwKICAgICByZXR1cm47IFwKIH0KIApAQCAtMjY3LDM0ICsyNjYsMTYgQEAg
c3RhdGljIFN0eWxlUHJvcGVydHlTZXQqIHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKQogCiAKIFN0
eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIG1hdGNo
QXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICA6IG1faGFzVUFBcHBlYXJhbmNlKGZhbHNlKQotICAg
ICwgbV9iYWNrZ3JvdW5kRGF0YShCYWNrZ3JvdW5kRmlsbExheWVyKQotICAgICwgbV9tYXRjaGVk
UHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VMYXN0U3dlZXAoMCkKKyAgICA6IG1fbWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwKDApCiAgICAgLCBtX21hdGNo
ZWRQcm9wZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyKHRoaXMsICZTdHlsZVJlc29sdmVyOjpzd2VlcE1h
dGNoZWRQcm9wZXJ0aWVzQ2FjaGUpCiAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwg
bV9zZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQpCi0gICAgLCBtX3BhcmVudFN0eWxlKDApCi0gICAg
LCBtX3Jvb3RFbGVtZW50U3R5bGUoMCkKLSAgICAsIG1fZWxlbWVudCgwKQotICAgICwgbV9zdHls
ZWRFbGVtZW50KDApCi0gICAgLCBtX3JlZ2lvbkZvclN0eWxpbmcoMCkKLSAgICAsIG1fZWxlbWVu
dExpbmtTdGF0ZShOb3RJbnNpZGVMaW5rKQotICAgICwgbV9wYXJlbnROb2RlKDApCi0gICAgLCBt
X2xpbmVIZWlnaHRWYWx1ZSgwKQotICAgICwgbV9mb250RGlydHkoZmFsc2UpCiAgICAgLCBtX21h
dGNoQXV0aG9yQW5kVXNlclN0eWxlcyhtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAgLCBt
X3NhbWVPcmlnaW5Pbmx5KGZhbHNlKQotICAgICwgbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9p
bnQoZmFsc2UpCiAgICAgLCBtX2ZvbnRTZWxlY3RvcihDU1NGb250U2VsZWN0b3I6OmNyZWF0ZShk
b2N1bWVudCkpCiAjaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikKICAgICAsIG1fdmll
d3BvcnRTdHlsZVJlc29sdmVyKFZpZXdwb3J0U3R5bGVSZXNvbHZlcjo6Y3JlYXRlKGRvY3VtZW50
KSkKICNlbmRpZgotICAgICwgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSkKLSAg
ICAsIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSkKICAgICAsIG1fc3R5
bGVCdWlsZGVyKFN0eWxlQnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVyKCkpCi0jaWYgRU5BQkxF
KENTU19TSEFERVJTKQotICAgICwgbV9oYXNQZW5kaW5nU2hhZGVycyhmYWxzZSkKLSNlbmRpZgog
ICAgICwgbV9zdHlsZU1hcCh0aGlzKQogewogICAgIEVsZW1lbnQqIHJvb3QgPSBkb2N1bWVudC0+
ZG9jdW1lbnRFbGVtZW50KCk7CkBAIC02NTcsMjMgKzYzOCwyNiBAQCBib29sIE1hdGNoaW5nVUFS
dWxlc1Njb3BlOjptX21hdGNoaW5nVUFSdWxlcyA9IGZhbHNlOwogdm9pZCBTdHlsZVJlc29sdmVy
Ojpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwg
UnVsZVJhbmdlJiBydWxlUmFuZ2UpCiB7CiAgICAgQVNTRVJUKG1hdGNoUmVxdWVzdC5ydWxlU2V0
KTsKLSAgICBBU1NFUlQobV9lbGVtZW50KTsKKyAgICBBU1NFUlQobV9zdGF0ZS5lbGVtZW50KTsK
IAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHNldWRvSWQgPSBtX2VsZW1lbnQtPnNoYWRvd1Bz
ZXVkb0lkKCk7CisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKyAgICBFbGVtZW50KiBlbGVt
ZW50ID0gc3RhdGUuZWxlbWVudDsKKyAgICBTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0g
c3RhdGUuc3R5bGVkRWxlbWVudDsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHBzZXVkb0lkID0g
ZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKTsKICAgICBpZiAoIXBzZXVkb0lkLmlzRW1wdHkoKSkg
ewotICAgICAgICBBU1NFUlQobV9zdHlsZWRFbGVtZW50KTsKKyAgICAgICAgQVNTRVJUKHN0eWxl
ZEVsZW1lbnQpOwogICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1
ZXN0LnJ1bGVTZXQtPnNoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyhwc2V1ZG9JZC5pbXBsKCkpLCBt
YXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQotICAgIGlmIChtX2VsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpKQorICAgIGlmIChlbGVtZW50
LT5pc1dlYlZUVEVsZW1lbnQoKSkKICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0
KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5jdWVQc2V1ZG9SdWxlcygpLCBtYXRjaFJlcXVlc3QsIHJ1
bGVSYW5nZSk7CiAjZW5kaWYKICAgICAvLyBDaGVjayB3aGV0aGVyIG90aGVyIHR5cGVzIG9mIHJ1
bGVzIGFyZSBhcHBsaWNhYmxlIGluIHRoZSBjdXJyZW50IHRyZWUgc2NvcGUuIENyaXRlcmlhIGZv
ciB0aGlzOgogICAgIC8vIGEpIGl0J3MgYSBVQSBydWxlCiAgICAgLy8gYikgdGhlIHRyZWUgc2Nv
cGUgYWxsb3dzIGF1dGhvciBydWxlcwogICAgIC8vIGMpIHRoZSBydWxlcyBjb21lcyBmcm9tIGEg
c2NvcGVkIHN0eWxlIHNoZWV0IHdpdGhpbiB0aGUgc2FtZSB0cmVlIHNjb3BlCi0gICAgVHJlZVNj
b3BlKiB0cmVlU2NvcGUgPSBtX2VsZW1lbnQtPnRyZWVTY29wZSgpOworICAgIFRyZWVTY29wZSog
dHJlZVNjb3BlID0gZWxlbWVudC0+dHJlZVNjb3BlKCk7CiAgICAgaWYgKCFNYXRjaGluZ1VBUnVs
ZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQogICAgICAgICAmJiAhdHJlZVNjb3BlLT5hcHBs
eUF1dGhvclN0eWxlcygpCiAgICAgICAgICYmICghbWF0Y2hSZXF1ZXN0LnNjb3BlIHx8IG1hdGNo
UmVxdWVzdC5zY29wZS0+dHJlZVNjb3BlKCkgIT0gdHJlZVNjb3BlKSkKQEAgLTY4MSwzMCArNjY1
LDMwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMoY29uc3QgTWF0
Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSCiAKICAgICAvLyBXZSBuZWVkIHRvIGNvbGxl
Y3QgdGhlIHJ1bGVzIGZvciBpZCwgY2xhc3MsIHRhZywgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBpbnRv
IGEgYnVmZmVyIGFuZAogICAgIC8vIHRoZW4gc29ydCB0aGUgYnVmZmVyLgotICAgIGlmIChtX2Vs
ZW1lbnQtPmhhc0lEKCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRj
aFJlcXVlc3QucnVsZVNldC0+aWRSdWxlcyhtX2VsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9u
KCkuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgIGlmIChtX3N0eWxlZEVs
ZW1lbnQgJiYgbV9zdHlsZWRFbGVtZW50LT5oYXNDbGFzcygpKSB7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9zdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKCkuc2l6ZSgpOyArK2kp
Ci0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1
bGVTZXQtPmNsYXNzUnVsZXMobV9zdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKClbaV0uaW1wbCgp
KSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGlmIChlbGVtZW50LT5oYXNJRCgpKQor
ICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQt
PmlkUnVsZXMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpLCBtYXRjaFJl
cXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgaWYgKHN0eWxlZEVsZW1lbnQgJiYgc3R5bGVkRWxlbWVu
dC0+aGFzQ2xhc3MoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0eWxlZEVs
ZW1lbnQtPmNsYXNzTmFtZXMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+Y2xhc3NSdWxlcyhzdHlsZWRF
bGVtZW50LT5jbGFzc05hbWVzKClbaV0uaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2Up
OwogICAgIH0KIAotICAgIGlmIChtX2VsZW1lbnQtPmlzTGluaygpKQorICAgIGlmIChlbGVtZW50
LT5pc0xpbmsoKSkKICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVx
dWVzdC5ydWxlU2V0LT5saW5rUHNldWRvQ2xhc3NSdWxlcygpLCBtYXRjaFJlcXVlc3QsIHJ1bGVS
YW5nZSk7Ci0gICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1hdGNoZXNGb2N1c1BzZXVkb0NsYXNz
KG1fZWxlbWVudCkpCisgICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1hdGNoZXNGb2N1c1BzZXVk
b0NsYXNzKGVsZW1lbnQpKQogICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0
Y2hSZXF1ZXN0LnJ1bGVTZXQtPmZvY3VzUHNldWRvQ2xhc3NSdWxlcygpLCBtYXRjaFJlcXVlc3Qs
IHJ1bGVSYW5nZSk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVz
dC5ydWxlU2V0LT50YWdSdWxlcyhtX2VsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSksIG1hdGNo
UmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0
Y2hSZXF1ZXN0LnJ1bGVTZXQtPnRhZ1J1bGVzKGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSks
IG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxp
c3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPnVuaXZlcnNhbFJ1bGVzKCksIG1hdGNoUmVxdWVzdCwg
cnVsZVJhbmdlKTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxl
c0ZvclJlZ2lvbihjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVJhbmdlJiBy
dWxlUmFuZ2UpCiB7Ci0gICAgaWYgKCFtX3JlZ2lvbkZvclN0eWxpbmcpCisgICAgaWYgKCFtX3N0
YXRlLnJlZ2lvbkZvclN0eWxpbmcpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIHNp
emUgPSBtYXRjaFJlcXVlc3QucnVsZVNldC0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5z
aXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAg
ICBjb25zdCBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IgPSBtYXRjaFJlcXVlc3QucnVsZVNl
dC0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5zZWxlY3RvcjsKLSAgICAgICAg
aWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9uU2VsZWN0b3IsIHN0YXRpY19jYXN0PEVsZW1l
bnQqPihtX3JlZ2lvbkZvclN0eWxpbmctPm5vZGUoKSkpKSB7CisgICAgICAgIGlmIChjaGVja1Jl
Z2lvblNlbGVjdG9yKHJlZ2lvblNlbGVjdG9yLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9zdGF0
ZS5yZWdpb25Gb3JTdHlsaW5nLT5ub2RlKCkpKSkgewogICAgICAgICAgICAgUnVsZVNldCogcmVn
aW9uUnVsZXMgPSBtYXRjaFJlcXVlc3QucnVsZVNldC0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxl
U2V0cy5hdChpKS5ydWxlU2V0LmdldCgpOwogICAgICAgICAgICAgQVNTRVJUKHJlZ2lvblJ1bGVz
KTsKICAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1hdGNoUmVxdWVzdChyZWdpb25S
dWxlcywgbWF0Y2hSZXF1ZXN0LmluY2x1ZGVFbXB0eVJ1bGVzLCBtYXRjaFJlcXVlc3Quc2NvcGUp
LCBydWxlUmFuZ2UpOwpAQCAtNzE0LDI0ICs2OTgsMjUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpj
b2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVx
dWUKIAogdm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0
Y2hSZXN1bHQmIHJlc3VsdCkKIHsKLSAgICBpZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQor
ICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgaWYgKHN0YXRlLm1hdGNoZWRSdWxlcy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKIAog
ICAgIGlmIChtX3NlbGVjdG9yQ2hlY2tlci5tb2RlKCkgPT0gU2VsZWN0b3JDaGVja2VyOjpDb2xs
ZWN0aW5nUnVsZXMpIHsKLSAgICAgICAgaWYgKCFtX3J1bGVMaXN0KQotICAgICAgICAgICAgbV9y
dWxlTGlzdCA9IFN0YXRpY0NTU1J1bGVMaXN0OjpjcmVhdGUoKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAg
bV9ydWxlTGlzdC0+cnVsZXMoKS5hcHBlbmQobV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+Y3Jl
YXRlQ1NTT01XcmFwcGVyKCkpOworICAgICAgICBpZiAoIXN0YXRlLnJ1bGVMaXN0KQorICAgICAg
ICAgICAgc3RhdGUucnVsZUxpc3QgPSBTdGF0aWNDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5tYXRjaGVkUnVsZXMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICBzdGF0ZS5ydWxlTGlzdC0+cnVsZXMoKS5hcHBlbmQoc3RhdGUubWF0
Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmNyZWF0ZUNTU09NV3JhcHBlcigpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVs
ZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBkZWNsYXJhdGlvbnMuCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChtX3N0
eWxlICYmIG1fbWF0Y2hlZFJ1bGVzW2ldLT5jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0
b3IoKSkKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFVuaXF1ZSgpOwotICAgICAgICBhZGRNYXRj
aGVkUHJvcGVydGllcyhyZXN1bHQsIG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPnByb3BlcnRp
ZXMoKSwgbV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKSwgbV9tYXRjaGVkUnVsZXNbaV0tPmxpbmtN
YXRjaFR5cGUoKSwgbV9tYXRjaGVkUnVsZXNbaV0tPnByb3BlcnR5V2hpdGVsaXN0VHlwZSgpKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUubWF0Y2hlZFJ1bGVzLnNpemUoKTsg
aSsrKSB7CisgICAgICAgIGlmIChzdGF0ZS5zdHlsZSAmJiBzdGF0ZS5tYXRjaGVkUnVsZXNbaV0t
PmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQorICAgICAgICAgICAgc3RhdGUu
c3R5bGUtPnNldFVuaXF1ZSgpOworICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQs
IHN0YXRlLm1hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5wcm9wZXJ0aWVzKCksIHN0YXRlLm1hdGNo
ZWRSdWxlc1tpXS0+cnVsZSgpLCBzdGF0ZS5tYXRjaGVkUnVsZXNbaV0tPmxpbmtNYXRjaFR5cGUo
KSwgc3RhdGUubWF0Y2hlZFJ1bGVzW2ldLT5wcm9wZXJ0eVdoaXRlbGlzdFR5cGUoKSk7CiAgICAg
fQogfQogCkBAIC03NDIsMTIgKzcyNywxMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2Nv
cGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdAogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBNYXRjaCBzY29wZWQgYXV0aG9yIHJ1bGVzIGJ5IHRyYXZl
cnNpbmcgdGhlIHNjb3BlZCBlbGVtZW50IHN0YWNrIChyZWJ1aWxkIGl0IGlmIGl0IGdvdCBpbmNv
bnNpc3RlbnQpLgotICAgIGlmIChtX3Njb3BlUmVzb2x2ZXItPmhhc1Njb3BlZFN0eWxlcygpICYm
IG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShtX2VsZW1lbnQpKSB7Ci0g
ICAgICAgIGJvb2wgYXBwbHlBdXRob3JTdHlsZXMgPSBtX2VsZW1lbnQtPnRyZWVTY29wZSgpLT5h
cHBseUF1dGhvclN0eWxlcygpOworICAgIGlmIChtX3Njb3BlUmVzb2x2ZXItPmhhc1Njb3BlZFN0
eWxlcygpICYmIG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShtX3N0YXRl
LmVsZW1lbnQpKSB7CisgICAgICAgIGJvb2wgYXBwbHlBdXRob3JTdHlsZXMgPSBtX3N0YXRlLmVs
ZW1lbnQtPnRyZWVTY29wZSgpLT5hcHBseUF1dGhvclN0eWxlcygpOwogICAgICAgICBib29sIGRv
Y3VtZW50U2NvcGUgPSB0cnVlOwogICAgICAgICB1bnNpZ25lZCBzY29wZVNpemUgPSBtX3Njb3Bl
UmVzb2x2ZXItPnN0YWNrU2l6ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2NvcGVTaXplOyArK2kpIHsKLSAgICAgICAgICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7Cisg
ICAgICAgICAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOwogICAgICAgICAgICAgcmVz
dWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXpl
KCkgLSAxOwogCiAgICAgICAgICAgICBjb25zdCBTdHlsZVNjb3BlUmVzb2x2ZXI6OlN0YWNrRnJh
bWUmIGZyYW1lID0gbV9zY29wZVJlc29sdmVyLT5zdGFja0ZyYW1lQXQoaSk7CkBAIC03NzgsNyAr
NzYzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNo
UmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHQKIGlubGluZSBib29sIFN0eWxlUmVzb2x2
ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKQogewogI2lmIEVOQUJM
RShTSEFET1dfRE9NKQotICAgIHJldHVybiBtX3Njb3BlUmVzb2x2ZXIgJiYgbV9zY29wZVJlc29s
dmVyLT5zdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKG1fZWxlbWVudCk7Cisg
ICAgcmV0dXJuIG1fc2NvcGVSZXNvbHZlciAmJiBtX3Njb3BlUmVzb2x2ZXItPnN0eWxlU2hhcmlu
Z0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMobV9zdGF0ZS5lbGVtZW50KTsKICNlbHNlCiAgICAg
cmV0dXJuIGZhbHNlOwogI2VuZGlmCkBAIC03ODksMTcgKzc3NCwxNyBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVt
cHR5UnVsZXMpCiAjaWYgRU5BQkxFKFNIQURPV19ET00pCiAgICAgQVNTRVJUKG1fc2NvcGVSZXNv
bHZlcik7CiAKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIG1fc3RhdGUubWF0Y2hl
ZFJ1bGVzLmNsZWFyKCk7CiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3Vs
dC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogCiAgICAgVmVjdG9yPFJ1bGVTZXQqPiBt
YXRjaGVkUnVsZXM7Ci0gICAgbV9zY29wZVJlc29sdmVyLT5tYXRjaEhvc3RSdWxlcyhtX2VsZW1l
bnQsIG1hdGNoZWRSdWxlcyk7CisgICAgbV9zY29wZVJlc29sdmVyLT5tYXRjaEhvc3RSdWxlcyht
X3N0YXRlLmVsZW1lbnQsIG1hdGNoZWRSdWxlcyk7CiAgICAgaWYgKG1hdGNoZWRSdWxlcy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGNoZWRS
dWxlcy5zaXplKCk7IGkgPiAwOyAtLWkpIHsKICAgICAgICAgUnVsZVJhbmdlIHJ1bGVSYW5nZSA9
IHJlc3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAgICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzKE1hdGNoUmVxdWVzdChtYXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5UnVs
ZXMsIG1fZWxlbWVudCksIHJ1bGVSYW5nZSk7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
KE1hdGNoUmVxdWVzdChtYXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5UnVsZXMsIG1f
c3RhdGUuZWxlbWVudCksIHJ1bGVSYW5nZSk7CiAgICAgfQogICAgIHNvcnRBbmRUcmFuc2Zlck1h
dGNoZWRSdWxlcyhyZXN1bHQpOwogI2Vsc2UKQEAgLTgxMCwxMCArNzk1LDEwIEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNs
dWRlRW1wdHlSdWxlcykKIAogdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKE1h
dGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7Ci0gICAgbV9tYXRj
aGVkUnVsZXMuY2xlYXIoKTsKKyAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOwogICAg
IHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMu
c2l6ZSgpIC0gMTsKIAotICAgIGlmICghbV9lbGVtZW50KQorICAgIGlmICghbV9zdGF0ZS5lbGVt
ZW50KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXRjaCBnbG9iYWwgYXV0aG9yIHJ1bGVz
LgpAQCAtODMxLDcgKzgxNiw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMo
TWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKICAgICBpZiAoIW1f
dXNlclN0eWxlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9tYXRjaGVkUnVsZXMuY2xl
YXIoKTsKKyAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOwogCiAgICAgcmVzdWx0LnJh
bmdlcy5sYXN0VXNlclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsK
ICAgICBNYXRjaFJlcXVlc3QgbWF0Y2hSZXF1ZXN0KG1fdXNlclN0eWxlLmdldCgpLCBpbmNsdWRl
RW1wdHlSdWxlcyk7CkBAIC04NDQsNyArODI5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRj
aFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQog
CiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBS
dWxlU2V0KiBydWxlcykKIHsKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIG1fc3Rh
dGUubWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAgICAgCiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0VUFS
dWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAgICAgUnVsZVJhbmdl
IHJ1bGVSYW5nZSA9IHJlc3VsdC5yYW5nZXMuVUFSdWxlUmFuZ2UoKTsKQEAgLTg1OCw5ICs4NDMs
MTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29u
c3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGMKICAgICBpZiAoIXJ1bGVzKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIC8vIEluIHNvbWUgY2Fz
ZXMgd2UgbWF5IGVuZCB1cCBsb29raW5nIHVwIHN0eWxlIGZvciByYW5kb20gZWxlbWVudHMgaW4g
dGhlIG1pZGRsZSBvZiBhIHJlY3Vyc2l2ZSB0cmVlIHJlc29sdmUuCiAgICAgLy8gQW5jZXN0b3Ig
aWRlbnRpZmllciBmaWx0ZXIgd29uJ3QgYmUgdXAtdG8tZGF0ZSBpbiB0aGF0IGNhc2UgYW5kIHdl
IGNhbid0IHVzZSB0aGUgZmFzdCBwYXRoLgotICAgIGJvb2wgY2FuVXNlRmFzdFJlamVjdCA9IG1f
c2VsZWN0b3JGaWx0ZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQobV9wYXJlbnROb2RlKTsKKyAg
ICBib29sIGNhblVzZUZhc3RSZWplY3QgPSBtX3NlbGVjdG9yRmlsdGVyLnBhcmVudFN0YWNrSXND
b25zaXN0ZW50KHN0YXRlLnBhcmVudE5vZGUpOwogCiAgICAgdW5zaWduZWQgc2l6ZSA9IHJ1bGVz
LT5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpAQCAt
ODc4LDE5ICs4NjQsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxl
c0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGMKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIEZJWE1FOiBFeHBvc2lu
ZyB0aGUgbm9uLXN0YW5kYXJkIGdldE1hdGNoZWRDU1NSdWxlcyBBUEkgdG8gd2ViIGlzIHRoZSBv
bmx5IHJlYXNvbiB0aGlzIGlzIG5lZWRlZC4KLSAgICAgICAgICAgIGlmIChtX3NhbWVPcmlnaW5P
bmx5ICYmICFydWxlRGF0YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkpIHsKKyAgICAgICAg
ICAgIGlmIChzdGF0ZS5zYW1lT3JpZ2luT25seSAmJiAhcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbigpKSB7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBtYXRjaGluZyBub3JtYWwg
cnVsZXMsIHNldCBhIHBzZXVkbyBiaXQgaWYKICAgICAgICAgICAgIC8vIHdlIHJlYWxseSBqdXN0
IG1hdGNoZWQgYSBwc2V1ZG8tZWxlbWVudC4KLSAgICAgICAgICAgIGlmIChtX2R5bmFtaWNQc2V1
ZG8gIT0gTk9QU0VVRE8gJiYgbV9wc2V1ZG9TdHlsZSA9PSBOT1BTRVVETykgeworICAgICAgICAg
ICAgaWYgKHN0YXRlLmR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgc3RhdGUucHNldWRvU3R5
bGUgPT0gTk9QU0VVRE8pIHsKICAgICAgICAgICAgICAgICBpZiAobV9zZWxlY3RvckNoZWNrZXIu
bW9kZSgpID09IFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7CiAgICAgICAgICAg
ICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwg
ZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKG1fZHluYW1pY1BzZXVkbyA8IEZJUlNUX0lOVEVSTkFMX1BT
RVVET0lEKQotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZSht
X2R5bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5keW5hbWljUHNldWRv
IDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0
eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZShzdGF0ZS5keW5hbWljUHNldWRvKTsKICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIG91ciBmaXJzdC9sYXN0IHJ1bGUg
aW5kaWNlcyBpbiB0aGUgbWF0Y2hlZCBydWxlcyBhcnJheS4KICAgICAgICAgICAgICAgICArK3J1
bGVSYW5nZS5sYXN0UnVsZUluZGV4OwpAQCAtOTE2LDcgKzkwMiw3IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBjb21wYXJlUnVsZXMoY29uc3QgUnVsZURhdGEqIHIxLCBjb25zdCBSdWxlRGF0YSogcjIp
CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRSdWxlcygpCiB7Ci0gICAgc3RkOjpz
b3J0KG1fbWF0Y2hlZFJ1bGVzLmJlZ2luKCksIG1fbWF0Y2hlZFJ1bGVzLmVuZCgpLCBjb21wYXJl
UnVsZXMpOworICAgIHN0ZDo6c29ydChtX3N0YXRlLm1hdGNoZWRSdWxlcy5iZWdpbigpLCBtX3N0
YXRlLm1hdGNoZWRSdWxlcy5lbmQoKSwgY29tcGFyZVJ1bGVzKTsKIH0KIAogdm9pZCBTdHlsZVJl
c29sdmVyOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNN
SUxQcm9wZXJ0aWVzKQpAQCAtOTI2LDE5ICs5MTIsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpt
YXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0
aWUKICAgICAvLyBOb3cgd2UgY2hlY2sgdXNlciBzaGVldCBydWxlcy4KICAgICBpZiAobV9tYXRj
aEF1dGhvckFuZFVzZXJTdHlsZXMpCiAgICAgICAgIG1hdGNoVXNlclJ1bGVzKHJlc3VsdCwgZmFs
c2UpOwotICAgICAgICAKKwogICAgIC8vIE5vdyBjaGVjayBhdXRob3IgcnVsZXMsIGJlZ2lubmlu
ZyBmaXJzdCB3aXRoIHByZXNlbnRhdGlvbmFsIGF0dHJpYnV0ZXMgbWFwcGVkIGZyb20gSFRNTC4K
LSAgICBpZiAobV9zdHlsZWRFbGVtZW50KSB7Ci0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3Bl
cnRpZXMocmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQtPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
KCkpOworICAgIGlmIChtX3N0YXRlLnN0eWxlZEVsZW1lbnQpIHsKKyAgICAgICAgYWRkRWxlbWVu
dFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3RhdGUuc3R5bGVkRWxlbWVudC0+cHJlc2VudGF0
aW9uQXR0cmlidXRlU3R5bGUoKSk7CiAKICAgICAgICAgLy8gTm93IHdlIGNoZWNrIGFkZGl0aW9u
YWwgbWFwcGVkIGRlY2xhcmF0aW9ucy4KICAgICAgICAgLy8gVGFibGVzIGFuZCB0YWJsZSBjZWxs
cyBzaGFyZSBhbiBhZGRpdGlvbmFsIG1hcHBlZCBydWxlIHRoYXQgbXVzdCBiZSBhcHBsaWVkCiAg
ICAgICAgIC8vIGFmdGVyIGFsbCBhdHRyaWJ1dGVzLCBzaW5jZSB0aGVpciBtYXBwZWQgc3R5bGUg
ZGVwZW5kcyBvbiB0aGUgdmFsdWVzIG9mIG11bHRpcGxlIGF0dHJpYnV0ZXMuCi0gICAgICAgIGFk
ZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9u
YWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKKyAgICAgICAgYWRkRWxlbWVudFN0eWxl
UHJvcGVydGllcyhyZXN1bHQsIG1fc3RhdGUuc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbFByZXNl
bnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOwogCi0gICAgICAgIGlmIChtX3N0eWxlZEVsZW1lbnQt
PmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5p
c0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNBdXRvOwotICAgICAgICAgICAg
VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVudChtX3N0eWxlZEVsZW1l
bnQpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOworICAgICAg
ICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVudChtX3N0YXRl
LnN0eWxlZEVsZW1lbnQpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1
dG8pOwogICAgICAgICAgICAgaWYgKGlzQXV0bykKICAgICAgICAgICAgICAgICBhZGRNYXRjaGVk
UHJvcGVydGllcyhyZXN1bHQsIHRleHREaXJlY3Rpb24gPT0gTFRSID8gbGVmdFRvUmlnaHREZWNs
YXJhdGlvbigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpKTsKICAgICAgICAgfQpAQCAtOTQ5
LDE4ICs5MzUsMTggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVz
dWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWUKICAgICAgICAgbWF0Y2hBdXRo
b3JSdWxlcyhyZXN1bHQsIGZhbHNlKTsKIAogICAgIC8vIE5vdyBjaGVjayBvdXIgaW5saW5lIHN0
eWxlIGF0dHJpYnV0ZS4KLSAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9z
dHlsZWRFbGVtZW50ICYmIG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSkgeworICAgIGlm
IChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0YXRlLnN0eWxlZEVsZW1lbnQgJiYg
bV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpKSB7CiAgICAgICAgIC8vIElubGlu
ZSBzdHlsZSBpcyBpbW11dGFibGUgYXMgbG9uZyBhcyB0aGVyZSBpcyBubyBDU1NPTSB3cmFwcGVy
LgogICAgICAgICAvLyBGSVhNRTogTWVkaWEgY29udHJvbCBzaGFkb3cgdHJlZXMgc2VlbSB0byBo
YXZlIHByb2JsZW1zIHdpdGggY2FjaGluZy4KLSAgICAgICAgYm9vbCBpc0lubGluZVN0eWxlQ2Fj
aGVhYmxlID0gIW1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKS0+aXNNdXRhYmxlKCkgJiYg
IW1fc3R5bGVkRWxlbWVudC0+aXNJblNoYWRvd1RyZWUoKTsKKyAgICAgICAgYm9vbCBpc0lubGlu
ZVN0eWxlQ2FjaGVhYmxlID0gIW1fc3RhdGUuc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKS0+
aXNNdXRhYmxlKCkgJiYgIW1fc3RhdGUuc3R5bGVkRWxlbWVudC0+aXNJblNoYWRvd1RyZWUoKTsK
ICAgICAgICAgLy8gRklYTUU6IENvbnN0aWZ5LgotICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9w
ZXJ0aWVzKHJlc3VsdCwgbV9zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpLCBpc0lubGluZVN0
eWxlQ2FjaGVhYmxlKTsKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQs
IG1fc3RhdGUuc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSwgaXNJbmxpbmVTdHlsZUNhY2hl
YWJsZSk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBOb3cgY2hlY2sgU01JTCBh
bmltYXRpb24gb3ZlcnJpZGUgc3R5bGUuCi0gICAgaWYgKGluY2x1ZGVTTUlMUHJvcGVydGllcyAm
JiBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQgJiYgbV9zdHls
ZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVy
dGllcyhyZXN1bHQsIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihtX3N0eWxlZEVsZW1lbnQpLT5h
bmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSwgZmFsc2UgLyogaXNDYWNoZWFibGUgKi8pOwor
ICAgIGlmIChpbmNsdWRlU01JTFByb3BlcnRpZXMgJiYgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHls
ZXMgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50ICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVudC0+aXNT
VkdFbGVtZW50KCkpCisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBz
dGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obV9zdGF0ZS5zdHlsZWRFbGVtZW50KS0+YW5pbWF0ZWRT
TUlMU3R5bGVQcm9wZXJ0aWVzKCksIGZhbHNlIC8qIGlzQ2FjaGVhYmxlICovKTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVTTUlMUHJvcGVydGllcyk7CiAjZW5kaWYKQEAgLTk3Nywx
MCArOTYzLDEwIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxl
cyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzCiAKIGlubGluZSB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmluaXRFbGVtZW50KEVsZW1lbnQqIGUpCiB7Ci0gICAgaWYgKG1fZWxlbWVudCAh
PSBlKSB7Ci0gICAgICAgIG1fZWxlbWVudCA9IGU7Ci0gICAgICAgIG1fc3R5bGVkRWxlbWVudCA9
IG1fZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8
U3R5bGVkRWxlbWVudCo+KG1fZWxlbWVudCkgOiAwOwotICAgICAgICBtX2VsZW1lbnRMaW5rU3Rh
dGUgPSBkb2N1bWVudCgpLT52aXNpdGVkTGlua1N0YXRlKCktPmRldGVybWluZUxpbmtTdGF0ZSht
X2VsZW1lbnQpOworICAgIGlmIChtX3N0YXRlLmVsZW1lbnQgIT0gZSkgeworICAgICAgICBtX3N0
YXRlLmVsZW1lbnQgPSBlOworICAgICAgICBtX3N0YXRlLnN0eWxlZEVsZW1lbnQgPSBtX3N0YXRl
LmVsZW1lbnQgJiYgbV9zdGF0ZS5lbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSA/IHN0YXRpY19j
YXN0PFN0eWxlZEVsZW1lbnQqPihtX3N0YXRlLmVsZW1lbnQpIDogMDsKKyAgICAgICAgbV9zdGF0
ZS5lbGVtZW50TGlua1N0YXRlID0gZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtTdGF0ZSgpLT5kZXRl
cm1pbmVMaW5rU3RhdGUoZSk7CiAgICAgICAgIGlmIChlICYmIGUgPT0gZS0+ZG9jdW1lbnQoKS0+
ZG9jdW1lbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldERpcmVj
dGlvblNldE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsKICAgICAgICAgICAgIGUtPmRvY3VtZW50
KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOwpAQCAtOTkwLDMy
ICs5NzYsMzMgQEAgaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEVsZW1lbnQoRWxlbWVu
dCogZSkKIAogaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEZvclN0eWxlUmVzb2x2ZShF
bGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFBzZXVkb0lkIHBzZXVkb0lEKQog
ewotICAgIG1fcHNldWRvU3R5bGUgPSBwc2V1ZG9JRDsKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0
YXRlOworICAgIHN0YXRlLnBzZXVkb1N0eWxlID0gcHNldWRvSUQ7CiAKICAgICBpZiAoZSkgewog
ICAgICAgICBOb2RlUmVuZGVyaW5nQ29udGV4dCBjb250ZXh0KGUpOwotICAgICAgICBtX3BhcmVu
dE5vZGUgPSBjb250ZXh0LnBhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHlsZSgpOwotICAgICAg
ICBtX3BhcmVudFN0eWxlID0gY29udGV4dC5yZXNldFN0eWxlSW5oZXJpdGFuY2UoKSA/IDAgOgor
ICAgICAgICBzdGF0ZS5wYXJlbnROb2RlID0gY29udGV4dC5wYXJlbnROb2RlRm9yUmVuZGVyaW5n
QW5kU3R5bGUoKTsKKyAgICAgICAgc3RhdGUucGFyZW50U3R5bGUgPSBjb250ZXh0LnJlc2V0U3R5
bGVJbmhlcml0YW5jZSgpID8gMCA6CiAgICAgICAgICAgICBwYXJlbnRTdHlsZSA/IHBhcmVudFN0
eWxlIDoKLSAgICAgICAgICAgIG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5
bGUoKSA6IDA7Ci0gICAgICAgIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50ID0gY29udGV4
dC5pbnNlcnRpb25Qb2ludCgpOworICAgICAgICAgICAgc3RhdGUucGFyZW50Tm9kZSA/IHN0YXRl
LnBhcmVudE5vZGUtPnJlbmRlclN0eWxlKCkgOiAwOworICAgICAgICBzdGF0ZS5kaXN0cmlidXRl
ZFRvSW5zZXJ0aW9uUG9pbnQgPSBjb250ZXh0Lmluc2VydGlvblBvaW50KCk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgbV9wYXJlbnROb2RlID0gMDsKLSAgICAgICAgbV9wYXJlbnRTdHlsZSA9IHBh
cmVudFN0eWxlOwotICAgICAgICBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCA9IGZhbHNl
OworICAgICAgICBzdGF0ZS5wYXJlbnROb2RlID0gMDsKKyAgICAgICAgc3RhdGUucGFyZW50U3R5
bGUgPSBwYXJlbnRTdHlsZTsKKyAgICAgICAgc3RhdGUuZGlzdHJpYnV0ZWRUb0luc2VydGlvblBv
aW50ID0gZmFsc2U7CiAgICAgfQogCiAgICAgTm9kZSogZG9jRWxlbWVudCA9IGUgPyBlLT5kb2N1
bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA6IDA7CiAgICAgUmVuZGVyU3R5bGUqIGRvY1N0eWxl
ID0gZG9jdW1lbnQoKS0+cmVuZGVyU3R5bGUoKTsKLSAgICBtX3Jvb3RFbGVtZW50U3R5bGUgPSBk
b2NFbGVtZW50ICYmIGUgIT0gZG9jRWxlbWVudCA/IGRvY0VsZW1lbnQtPnJlbmRlclN0eWxlKCkg
OiBkb2NTdHlsZTsKKyAgICBzdGF0ZS5yb290RWxlbWVudFN0eWxlID0gZG9jRWxlbWVudCAmJiBl
ICE9IGRvY0VsZW1lbnQgPyBkb2NFbGVtZW50LT5yZW5kZXJTdHlsZSgpIDogZG9jU3R5bGU7CiAK
LSAgICBtX3N0eWxlID0gMDsKKyAgICBzdGF0ZS5zdHlsZSA9IDA7CiAKLSAgICBtX3BlbmRpbmdJ
bWFnZVByb3BlcnRpZXMuY2xlYXIoKTsKKyAgICBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVz
LmNsZWFyKCk7CiAKLSAgICBtX3J1bGVMaXN0ID0gMDsKKyAgICBzdGF0ZS5ydWxlTGlzdCA9IDA7
CiAKLSAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOworICAgIHN0YXRlLmZvbnREaXJ0eSA9IGZhbHNl
OwogfQogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoVGhyZXNob2xkID0gMTA7
CkBAIC0xMDc4LDIzICsxMDY1LDI0IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5n
Q2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoUnVsZVNldCogcnVsZVNldCkKIHsKICAgICBpZiAoIXJ1
bGVTZXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigp
OworICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAKICAgICBtX3NlbGVjdG9yQ2hl
Y2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6U2hhcmluZ1J1bGVzKTsKICAgICBpbnQgZmly
c3RSdWxlSW5kZXggPSAtMSwgbGFzdFJ1bGVJbmRleCA9IC0xOwogICAgIFJ1bGVSYW5nZSBydWxl
UmFuZ2UoZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwogICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzKE1hdGNoUmVxdWVzdChydWxlU2V0KSwgcnVsZVJhbmdlKTsKICAgICBtX3NlbGVjdG9y
Q2hlY2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpOwotICAgIGlm
IChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgaWYgKG1fc3RhdGUubWF0Y2hlZFJ1bGVz
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbWF0Y2hlZFJ1bGVzLmNs
ZWFyKCk7CisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuY2xlYXIoKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5
bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKKyAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBt
X3N0YXRlOwogICAgIEhUTUxJbnB1dEVsZW1lbnQqIHRoaXNJbnB1dEVsZW1lbnQgPSBlbGVtZW50
LT50b0lucHV0RWxlbWVudCgpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIG90aGVySW5wdXRFbGVt
ZW50ID0gbV9lbGVtZW50LT50b0lucHV0RWxlbWVudCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQq
IG90aGVySW5wdXRFbGVtZW50ID0gc3RhdGUuZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKIAog
ICAgIGlmICghdGhpc0lucHV0RWxlbWVudCB8fCAhb3RoZXJJbnB1dEVsZW1lbnQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTExMTUsMjUgKzExMDMsMjUgQEAgYm9vbCBTdHlsZVJlc29sdmVy
OjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QK
ICAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+aXNSZXF1aXJlZCgpICE9IG90aGVySW5wdXRFbGVt
ZW50LT5pc1JlcXVpcmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVt
ZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpICE9IG1fZWxlbWVudC0+aXNFbmFibGVkRm9ybUNv
bnRyb2woKSkKKyAgICBpZiAoZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSAhPSBzdGF0
ZS5lbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAoZWxlbWVudC0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpICE9IG1fZWxlbWVu
dC0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpKQorICAgIGlmIChlbGVtZW50LT5pc0RlZmF1bHRC
dXR0b25Gb3JGb3JtKCkgIT0gc3RhdGUuZWxlbWVudC0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9lbGVtZW50LT5kb2N1bWVudCgp
LT5jb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpKSB7CisgICAgaWYgKHN0YXRlLmVsZW1lbnQt
PmRvY3VtZW50KCktPmNvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCkpIHsKICAgICAgICAgYm9v
bCB3aWxsVmFsaWRhdGUgPSBlbGVtZW50LT53aWxsVmFsaWRhdGUoKTsKIAotICAgICAgICBpZiAo
d2lsbFZhbGlkYXRlICE9IG1fZWxlbWVudC0+d2lsbFZhbGlkYXRlKCkpCisgICAgICAgIGlmICh3
aWxsVmFsaWRhdGUgIT0gc3RhdGUuZWxlbWVudC0+d2lsbFZhbGlkYXRlKCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAmJiAoZWxlbWVudC0+
aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpICE9IG1fZWxlbWVudC0+aXNWYWxpZEZvcm1Db250
cm9sRWxlbWVudCgpKSkKKyAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAmJiAoZWxlbWVudC0+aXNW
YWxpZEZvcm1Db250cm9sRWxlbWVudCgpICE9IHN0YXRlLmVsZW1lbnQtPmlzVmFsaWRGb3JtQ29u
dHJvbEVsZW1lbnQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYg
KGVsZW1lbnQtPmlzSW5SYW5nZSgpICE9IG1fZWxlbWVudC0+aXNJblJhbmdlKCkpCisgICAgICAg
IGlmIChlbGVtZW50LT5pc0luUmFuZ2UoKSAhPSBzdGF0ZS5lbGVtZW50LT5pc0luUmFuZ2UoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoZWxlbWVudC0+aXNPdXRP
ZlJhbmdlKCkgIT0gbV9lbGVtZW50LT5pc091dE9mUmFuZ2UoKSkKKyAgICAgICAgaWYgKGVsZW1l
bnQtPmlzT3V0T2ZSYW5nZSgpICE9IHN0YXRlLmVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTE0OCwyNSArMTEzNiwyNiBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oRWxlbWVudCogZWxlbWVu
dCkKIAogYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5
bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdDYW5kaWRhdGUpIGNv
bnN0CiB7Ci0gICAgaWYgKG1fZWxlbWVudC0+YXR0cmlidXRlRGF0YSgpID09IHNoYXJpbmdDYW5k
aWRhdGUtPmF0dHJpYnV0ZURhdGEoKSkKKyAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRl
OworICAgIGlmIChzdGF0ZS5lbGVtZW50LT5hdHRyaWJ1dGVEYXRhKCkgPT0gc2hhcmluZ0NhbmRp
ZGF0ZS0+YXR0cmlidXRlRGF0YSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAobV9l
bGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikgIT0gc2hhcmluZ0Nh
bmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpKQorICAgIGlmIChz
dGF0ZS5lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikgIT0gc2hh
cmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShs
YW5nQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikp
CisgICAgaWYgKHN0YXRlLmVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIpICE9IHNo
YXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAoIW1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKSB7Cisg
ICAgaWYgKCFzdGF0ZS5lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMpIHsKICAgICAgICAgaWYg
KHNoYXJpbmdDYW5kaWRhdGUtPmhhc0NsYXNzKCkgJiYgY2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxl
cyhzaGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05hbWVzKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0gZWxzZSBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aGFzQ2xhc3MoKSkgewogI2lm
IEVOQUJMRShTVkcpCiAgICAgICAgIC8vIFNWRyBlbGVtZW50cyByZXF1aXJlIGEgKHNsb3chKSBn
ZXRBdHRyaWJ1dGUgY29tcGFyaXNpb24gYmVjYXVzZSAiY2xhc3MiIGlzIGFuIGFuaW1hdGFibGUg
YXR0cmlidXRlIGZvciBTVkcuCi0gICAgICAgIGlmIChtX2VsZW1lbnQtPmlzU1ZHRWxlbWVudCgp
KSB7Ci0gICAgICAgICAgICBpZiAobV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSAh
PSBzaGFyaW5nQ2FuZGlkYXRlLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSkKKyAgICAgICAgaWYg
KHN0YXRlLmVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUu
ZWxlbWVudC0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Z2V0
QXR0cmlidXRlKGNsYXNzQXR0cikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9IGVsc2UgewogI2VuZGlmCi0gICAgICAgICAgICBpZiAobV9lbGVtZW50LT5jbGFzc05h
bWVzKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Y2xhc3NOYW1lcygpKQorICAgICAgICAgICAgaWYg
KHN0YXRlLmVsZW1lbnQtPmNsYXNzTmFtZXMoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05h
bWVzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2lmIEVOQUJMRShTVkcpCiAg
ICAgICAgIH0KQEAgLTExNzQsMTIgKzExNjMsMTIgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFy
aW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEUK
ICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fc3R5bGVkRWxl
bWVudC0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5w
cmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQorICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50
LT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUtPnByZXNl
bnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIEVO
QUJMRShQUk9HUkVTU19FTEVNRU5UKQotICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUocHJv
Z3Jlc3NUYWcpKSB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50
Kj4obV9lbGVtZW50KS0+aXNEZXRlcm1pbmF0ZSgpICE9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVz
c0VsZW1lbnQqPihzaGFyaW5nQ2FuZGlkYXRlKS0+aXNEZXRlcm1pbmF0ZSgpKQorICAgIGlmIChz
dGF0ZS5lbGVtZW50LT5oYXNUYWdOYW1lKHByb2dyZXNzVGFnKSkgeworICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KHN0YXRlLmVsZW1lbnQpLT5pc0RldGVybWlu
YXRlKCkgIT0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KHNoYXJpbmdDYW5kaWRh
dGUpLT5pc0RldGVybWluYXRlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
I2VuZGlmCkBAIC0xMTkwLDEyICsxMTc5LDEzIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmlu
Z0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFCiBi
b29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50
KiBlbGVtZW50KSBjb25zdAogewogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnQtPnJl
bmRlclN0eWxlKCk7CisgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKIAogICAgIGlm
ICghc3R5bGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoc3R5bGUtPnVuaXF1ZSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPnRhZ1FOYW1lKCkgIT0g
bV9lbGVtZW50LT50YWdRTmFtZSgpKQorICAgIGlmIChlbGVtZW50LT50YWdRTmFtZSgpICE9IHN0
YXRlLmVsZW1lbnQtPnRhZ1FOYW1lKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAo
ZWxlbWVudC0+aW5saW5lU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTIwNSwy
MSArMTE5NSwyMSBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVu
dChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgIGlmIChlbGVtZW50LT5pc1NWR0Vs
ZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oZWxlbWVudCktPmFuaW1hdGVkU01J
TFN0eWxlUHJvcGVydGllcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKLSAgICBp
ZiAoZWxlbWVudC0+aXNMaW5rKCkgIT0gbV9lbGVtZW50LT5pc0xpbmsoKSkKKyAgICBpZiAoZWxl
bWVudC0+aXNMaW5rKCkgIT0gc3RhdGUuZWxlbWVudC0+aXNMaW5rKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+aG92ZXJlZCgpICE9IG1fZWxlbWVudC0+aG92ZXJl
ZCgpKQorICAgIGlmIChlbGVtZW50LT5ob3ZlcmVkKCkgIT0gc3RhdGUuZWxlbWVudC0+aG92ZXJl
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmFjdGl2ZSgpICE9
IG1fZWxlbWVudC0+YWN0aXZlKCkpCisgICAgaWYgKGVsZW1lbnQtPmFjdGl2ZSgpICE9IHN0YXRl
LmVsZW1lbnQtPmFjdGl2ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1l
bnQtPmZvY3VzZWQoKSAhPSBtX2VsZW1lbnQtPmZvY3VzZWQoKSkKKyAgICBpZiAoZWxlbWVudC0+
Zm9jdXNlZCgpICE9IHN0YXRlLmVsZW1lbnQtPmZvY3VzZWQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChlbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpICE9IG1fZWxlbWVudC0+c2hh
ZG93UHNldWRvSWQoKSkKKyAgICBpZiAoZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKSAhPSBzdGF0
ZS5lbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpZiAoIXNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHls
ZUFmZmVjdGluZ0F0dHJpYnV0ZXMoZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoZWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0g
bV9zdHlsZWRFbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkK
KyAgICBpZiAoZWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkg
IT0gc3RhdGUuc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0
eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChlbGVtZW50LT5oYXNJRCgp
ICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVz
b2x1dGlvbigpLmltcGwoKSkpCkBAIC0xMjM1LDcgKzEyMjUsNyBAQCBib29sIFN0eWxlUmVzb2x2
ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25z
dAogCiAgICAgYm9vbCBpc0NvbnRyb2wgPSBlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgp
OwogCi0gICAgaWYgKGlzQ29udHJvbCAhPSBtX2VsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50
KCkpCisgICAgaWYgKGlzQ29udHJvbCAhPSBzdGF0ZS5lbGVtZW50LT5pc0Zvcm1Db250cm9sRWxl
bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaXNDb250cm9sICYmICFj
YW5TaGFyZVN0eWxlV2l0aENvbnRyb2woZWxlbWVudCkpCkBAIC0xMjU5LDIwICsxMjQ5LDIwIEBA
IGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1l
bnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKGVsZW1l
bnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkg
JiYgbV9lbGVtZW50TGlua1N0YXRlICE9IHN0eWxlLT5pbnNpZGVMaW5rKCkpCisgICAgaWYgKGVs
ZW1lbnQtPmlzTGluaygpICYmIHN0YXRlLmVsZW1lbnRMaW5rU3RhdGUgIT0gc3R5bGUtPmluc2lk
ZUxpbmsoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQogICAgIC8vIERlbnkgc2hhcmluZyBzdHlsZXMgYmV0d2VlbiBXZWJWVFQgYW5kIG5vbi1XZWJW
VFQgbm9kZXMuCi0gICAgaWYgKGVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpICE9IG1fZWxlbWVu
dC0+aXNXZWJWVFRFbGVtZW50KCkpCisgICAgaWYgKGVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgp
ICE9IHN0YXRlLmVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYgbV9lbGVtZW50LT5p
c1dlYlZUVEVsZW1lbnQoKSAmJiB0b1dlYlZUVEVsZW1lbnQoZWxlbWVudCktPmlzUGFzdE5vZGUo
KSAhPSB0b1dlYlZUVEVsZW1lbnQobV9lbGVtZW50KS0+aXNQYXN0Tm9kZSgpKQorICAgIGlmIChl
bGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50LT5pc1dlYlZUVEVsZW1l
bnQoKSAmJiB0b1dlYlZUVEVsZW1lbnQoZWxlbWVudCktPmlzUGFzdE5vZGUoKSAhPSB0b1dlYlZU
VEVsZW1lbnQoc3RhdGUuZWxlbWVudCktPmlzUGFzdE5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgaWYgKGVsZW1l
bnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50
KCkgfHwgbV9lbGVtZW50ID09IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1
bGxTY3JlZW5FbGVtZW50KCkpCisgICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQo
KS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCkgfHwgc3RhdGUuZWxlbWVudCA9PSBz
dGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CkBAIC0x
MjkzLDM2ICsxMjgzLDM4IEBAIGlubGluZSBTdHlsZWRFbGVtZW50KiBTdHlsZVJlc29sdmVyOjpm
aW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiBub2RlLCB1bnNpCiAKIFJlbmRlclN0eWxl
KiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiB7Ci0gICAgaWYgKCFtX3N0eWxl
ZEVsZW1lbnQgfHwgIW1fcGFyZW50U3R5bGUpCisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsK
KyAgICBpZiAoIXN0YXRlLnN0eWxlZEVsZW1lbnQgfHwgIXN0YXRlLnBhcmVudFN0eWxlKQogICAg
ICAgICByZXR1cm4gMDsKKwogICAgIC8vIElmIHRoZSBlbGVtZW50IGhhcyBpbmxpbmUgc3R5bGUg
aXQgaXMgcHJvYmFibHkgdW5pcXVlLgotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0
eWxlKCkpCisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCkpCiAgICAg
ICAgIHJldHVybiAwOwogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+
aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3R5bGVkRWxlbWVu
dCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQorICAgIGlmIChzdGF0ZS5zdHlsZWRF
bGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oc3RhdGUu
c3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQogICAgICAgICBy
ZXR1cm4gMDsKICNlbmRpZgogICAgIC8vIElkcyBzdG9wIHN0eWxlIHNoYXJpbmcgaWYgdGhleSBz
aG93IHVwIGluIHRoZSBzdHlsZXNoZWV0cy4KLSAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5oYXNJ
RCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhtX3N0eWxlZEVsZW1lbnQtPmlk
Rm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVu
dC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMoc3RhdGUuc3R5bGVk
RWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQogICAgICAgICByZXR1cm4g
MDsKLSAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhtX2VsZW1lbnQtPnBhcmVu
dEVsZW1lbnQoKSkpCisgICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcoc3RhdGUu
ZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKG1f
c3R5bGVkRWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICBpZiAoc3RhdGUu
c3R5bGVkRWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgaWYgKG1fZWxlbWVudCA9PSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNzc1Rhcmdl
dCgpKQorICAgIGlmIChzdGF0ZS5lbGVtZW50ID09IHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkt
PmNzc1RhcmdldCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoZWxlbWVudEhhc0RpcmVj
dGlvbkF1dG8obV9lbGVtZW50KSkKKyAgICBpZiAoZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oc3Rh
dGUuZWxlbWVudCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgLy8gQ2FjaGUgd2hldGhlciBt
X2VsZW1lbnQgaXMgYWZmZWN0ZWQgYnkgYW55IGtub3duIGNsYXNzIHNlbGVjdG9ycy4KKyAgICAv
LyBDYWNoZSB3aGV0aGVyIHN0YXRlLmVsZW1lbnQgaXMgYWZmZWN0ZWQgYnkgYW55IGtub3duIGNs
YXNzIHNlbGVjdG9ycy4KICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgYSBtZW1iZXIg
dmFyaWFibGUuIFRoZSBzdHlsZSBzaGFyaW5nIGNvZGUgY291bGQgYmUgZmFjdG9yZWQgb3V0IG9m
IFN0eWxlUmVzb2x2ZXIuCi0gICAgbV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMgPSBtX2Vs
ZW1lbnQgJiYgbV9lbGVtZW50LT5oYXNDbGFzcygpICYmIGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVs
ZXMobV9lbGVtZW50LT5jbGFzc05hbWVzKCkpOworICAgIHN0YXRlLmVsZW1lbnRBZmZlY3RlZEJ5
Q2xhc3NSdWxlcyA9IHN0YXRlLmVsZW1lbnQgJiYgc3RhdGUuZWxlbWVudC0+aGFzQ2xhc3MoKSAm
JiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKHN0YXRlLmVsZW1lbnQtPmNsYXNzTmFtZXMoKSk7
CiAKICAgICAvLyBDaGVjayBwcmV2aW91cyBzaWJsaW5ncyBhbmQgdGhlaXIgY291c2lucy4KICAg
ICB1bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgdW5zaWduZWQgdmlzaXRlZE5vZGVDb3VudCA9IDA7
CiAgICAgU3R5bGVkRWxlbWVudCogc2hhcmVFbGVtZW50ID0gMDsKLSAgICBOb2RlKiBjb3VzaW5M
aXN0ID0gbV9zdHlsZWRFbGVtZW50LT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICBOb2RlKiBjb3Vz
aW5MaXN0ID0gc3RhdGUuc3R5bGVkRWxlbWVudC0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgd2hp
bGUgKGNvdXNpbkxpc3QpIHsKICAgICAgICAgc2hhcmVFbGVtZW50ID0gZmluZFNpYmxpbmdGb3JT
dHlsZVNoYXJpbmcoY291c2luTGlzdCwgY291bnQpOwogICAgICAgICBpZiAoc2hhcmVFbGVtZW50
KQpAQCAtMTM0NCw3ICsxMzM2LDcgQEAgUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0
ZVNoYXJlZFN0eWxlKCkKICAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RS
dWxlcygpKQogICAgICAgICByZXR1cm4gMDsKICAgICAvLyBUcmFja2luZyBjaGlsZCBpbmRleCBy
ZXF1aXJlcyB1bmlxdWUgc3R5bGUgZm9yIGVhY2ggbm9kZS4gVGhpcyBtYXkgZ2V0IHNldCBieSB0
aGUgc2libGluZyBydWxlIG1hdGNoIGFib3ZlLgotICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVu
dHNTaGFyaW5nKG1fZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSkKKyAgICBpZiAocGFyZW50RWxl
bWVudFByZXZlbnRzU2hhcmluZyhzdGF0ZS5lbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpKQogICAg
ICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc2hhcmVFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwog
fQpAQCAtMTU2NCwxMCArMTU1NiwxMSBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJl
c29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyUwogICAgICAg
ICByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsKICAgICB9CiAKKyAgICBTdGF0ZSYgc3Rh
dGUgPSBtX3N0YXRlOwogICAgIGluaXRFbGVtZW50KGVsZW1lbnQpOwogICAgIGluaXRGb3JTdHls
ZVJlc29sdmUoZWxlbWVudCwgZGVmYXVsdFBhcmVudCk7Ci0gICAgbV9yZWdpb25Gb3JTdHlsaW5n
ID0gcmVnaW9uRm9yU3R5bGluZzsKLSAgICBpZiAoc2hhcmluZ0JlaGF2aW9yID09IEFsbG93U3R5
bGVTaGFyaW5nICYmICFtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCkgeworICAgIHN0YXRl
LnJlZ2lvbkZvclN0eWxpbmcgPSByZWdpb25Gb3JTdHlsaW5nOworICAgIGlmIChzaGFyaW5nQmVo
YXZpb3IgPT0gQWxsb3dTdHlsZVNoYXJpbmcgJiYgIXN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRp
b25Qb2ludCkgewogICAgICAgICBSZW5kZXJTdHlsZSogc2hhcmVkU3R5bGUgPSBsb2NhdGVTaGFy
ZWRTdHlsZSgpOwogICAgICAgICBpZiAoc2hhcmVkU3R5bGUpCiAgICAgICAgICAgICByZXR1cm4g
c2hhcmVkU3R5bGU7CkBAIC0xNTc1LDMzICsxNTY4LDMyIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBSZW5k
ZXJTCiAKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGNsb25lRm9yUGFyZW50OwogCi0gICAgaWYg
KG1fcGFyZW50U3R5bGUpIHsKLSAgICAgICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUo
KTsKLSAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEZyb20obV9wYXJlbnRTdHlsZSwgaXNBdFNoYWRv
d0JvdW5kYXJ5KGVsZW1lbnQpID8gUmVuZGVyU3R5bGU6OkF0U2hhZG93Qm91bmRhcnkgOiBSZW5k
ZXJTdHlsZTo6Tm90QXRTaGFkb3dCb3VuZGFyeSk7CisgICAgaWYgKHN0YXRlLnBhcmVudFN0eWxl
KSB7CisgICAgICAgIHN0YXRlLnN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgICAg
ICBzdGF0ZS5zdHlsZS0+aW5oZXJpdEZyb20oc3RhdGUucGFyZW50U3R5bGUsIGlzQXRTaGFkb3dC
b3VuZGFyeShlbGVtZW50KSA/IFJlbmRlclN0eWxlOjpBdFNoYWRvd0JvdW5kYXJ5IDogUmVuZGVy
U3R5bGU6Ok5vdEF0U2hhZG93Qm91bmRhcnkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fc3R5
bGUgPSBkZWZhdWx0U3R5bGVGb3JFbGVtZW50KCk7Ci0gICAgICAgIGNsb25lRm9yUGFyZW50ID0g
UmVuZGVyU3R5bGU6OmNsb25lKHN0eWxlKCkpOwotICAgICAgICBtX3BhcmVudFN0eWxlID0gY2xv
bmVGb3JQYXJlbnQuZ2V0KCk7CisgICAgICAgIHN0YXRlLnN0eWxlID0gZGVmYXVsdFN0eWxlRm9y
RWxlbWVudCgpOworICAgICAgICBjbG9uZUZvclBhcmVudCA9IFJlbmRlclN0eWxlOjpjbG9uZShz
dGF0ZS5zdHlsZS5nZXQoKSk7CisgICAgICAgIHN0YXRlLnBhcmVudFN0eWxlID0gY2xvbmVGb3JQ
YXJlbnQuZ2V0KCk7CiAgICAgfQogICAgIC8vIGNvbnRlbnRlZGl0YWJsZSBhdHRyaWJ1dGUgKGlt
cGxlbWVudGVkIGJ5IC13ZWJraXQtdXNlci1tb2RpZnkpIHNob3VsZAogICAgIC8vIGJlIHByb3Bh
Z2F0ZWQgZnJvbSBzaGFkb3cgaG9zdCB0byBkaXN0cmlidXRlZCBub2RlLgotICAgIGlmIChtX2Rp
c3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCkgeworICAgIGlmIChzdGF0ZS5kaXN0cmlidXRlZFRv
SW5zZXJ0aW9uUG9pbnQpIHsKICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudCA9IGVsZW1lbnQt
PnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICAgICAgaWYgKFJlbmRlclN0eWxlKiBzdHlsZU9m
U2hhZG93SG9zdCA9IHBhcmVudC0+cmVuZGVyU3R5bGUoKSkKLSAgICAgICAgICAgICAgICBtX3N0
eWxlLT5zZXRVc2VyTW9kaWZ5KHN0eWxlT2ZTaGFkb3dIb3N0LT51c2VyTW9kaWZ5KCkpOworICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRVc2VyTW9kaWZ5KHN0eWxlT2ZTaGFkb3dIb3N0
LT51c2VyTW9kaWZ5KCkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGVsZW1lbnQtPmlz
TGluaygpKSB7Ci0gICAgICAgIG1fc3R5bGUtPnNldElzTGluayh0cnVlKTsKLSAgICAgICAgRUlu
c2lkZUxpbmsgbGlua1N0YXRlID0gbV9lbGVtZW50TGlua1N0YXRlOwotICAgICAgICBpZiAobV9l
bGVtZW50TGlua1N0YXRlICE9IE5vdEluc2lkZUxpbmspIHsKKyAgICAgICAgc3RhdGUuc3R5bGUt
PnNldElzTGluayh0cnVlKTsKKyAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXRlID0gc3RhdGUu
ZWxlbWVudExpbmtTdGF0ZTsKKyAgICAgICAgaWYgKGxpbmtTdGF0ZSAhPSBOb3RJbnNpZGVMaW5r
KSB7CiAgICAgICAgICAgICBib29sIGZvcmNlVmlzaXRlZCA9IEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRl
ZCk7CiAgICAgICAgICAgICBpZiAoZm9yY2VWaXNpdGVkKQogICAgICAgICAgICAgICAgIGxpbmtT
dGF0ZSA9IEluc2lkZVZpc2l0ZWRMaW5rOwogICAgICAgICB9Ci0KLSAgICAgICAgbV9zdHlsZS0+
c2V0SW5zaWRlTGluayhsaW5rU3RhdGUpOworICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0SW5zaWRl
TGluayhsaW5rU3RhdGUpOwogICAgIH0KIAogICAgIGVuc3VyZURlZmF1bHRTdHlsZVNoZWV0c0Zv
ckVsZW1lbnQoZWxlbWVudCk7CkBAIC0xNjE1LDE3ICsxNjA3LDE3IEBAIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50
LCBSZW5kZXJTCiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhtYXRjaFJlc3VsdCwgZWxlbWVu
dCk7CiAKICAgICAvLyBDbGVhbiB1cCBvdXIgc3R5bGUgb2JqZWN0J3MgZGlzcGxheSBhbmQgdGV4
dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIgZml4dXBzKS4KLSAgICBhZGp1c3RSZW5kZXJTdHls
ZShzdHlsZSgpLCBtX3BhcmVudFN0eWxlLCBlbGVtZW50KTsKKyAgICBhZGp1c3RSZW5kZXJTdHls
ZShzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucGFyZW50U3R5bGUsIGVsZW1lbnQpOwogCiAgICAg
aW5pdEVsZW1lbnQoMCk7IC8vIENsZWFyIG91dCBmb3IgdGhlIG5leHQgcmVzb2x2ZS4KIAogICAg
IGlmIChjbG9uZUZvclBhcmVudCkKLSAgICAgICAgbV9wYXJlbnRTdHlsZSA9IDA7CisgICAgICAg
IHN0YXRlLnBhcmVudFN0eWxlID0gMDsKIAogICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxl
UmVzb2x2ZXIoKTsKIAogICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgotICAgIHJldHVybiBt
X3N0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3RhdGUuc3R5bGUucmVsZWFzZSgpOwogfQog
CiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1l
KGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIGNvbnN0IFN0eWxlS2V5ZnJhbWUqIGtl
eWZyYW1lLCBLZXlmcmFtZVZhbHVlJiBrZXlmcmFtZVZhbHVlKQpAQCAtMTYzNCwxMiArMTYyNiwx
NCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZy
YW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZQogICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGll
cygpKQogICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIGtleWZyYW1lLT5wcm9w
ZXJ0aWVzKCkpOwogCi0gICAgQVNTRVJUKCFtX3N0eWxlKTsKKyAgICBBU1NFUlQoIW1fc3RhdGUu
c3R5bGUpOworCisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKIAogICAgIC8vIENyZWF0ZSB0
aGUgc3R5bGUKLSAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKGVsZW1lbnRTdHlsZSk7
CisgICAgc3RhdGUuc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoZWxlbWVudFN0eWxlKTsKIAot
ICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSAw
OwogCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgd2l0aCAhaW1wb3J0YW50LiBTaW5j
ZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8gZGVjbCwgdGhlcmUncyBub3RoaW5nIHRv
IG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3QgcHJvcGVydGllcy4KQEAgLTE2NTEsOCAr
MTY0NSw4IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9y
S2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lCiAgICAgdXBkYXRlRm9udCgpOwogCiAg
ICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0
aGUgZm9udC1zaXplCi0gICAgaWYgKG1fbGluZUhlaWdodFZhbHVlKQotICAgICAgICBhcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOworICAgIGlm
IChzdGF0ZS5saW5lSGVpZ2h0VmFsdWUpCisgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUpOwogCiAgICAgLy8gTm93IGRvIHJl
c3Qgb2YgdGhlIHByb3BlcnRpZXMuCiAgICAgaWYgKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpCkBA
IC0xNjc5LDcgKzE2NzMsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVy
OjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZQogCiAgICAgZG9jdW1l
bnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCi0gICAgcmV0dXJuIG1fc3R5bGUucmVs
ZWFzZSgpOworICAgIHJldHVybiBzdGF0ZS5zdHlsZS5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgU3R5
bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgS2V5ZnJhbWVMaXN0JiBsaXN0KQpAQCAtMTc0Nywx
NSArMTc0MSwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0
aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbAogCiBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNl
dWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7Ci0gICAgQVNTRVJU
KG1fcGFyZW50U3R5bGUpOworICAgIEFTU0VSVChtX3N0YXRlLnBhcmVudFN0eWxlKTsKICAgICBp
ZiAoIWUpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsK
KwogICAgIGluaXRFbGVtZW50KGUpOwogCiAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlLCBwYXJl
bnRTdHlsZSwgcHNldWRvKTsKLSAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwot
ICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKG1fcGFyZW50U3R5bGUpOworICAgIHN0YXRlLnN0eWxl
ID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgIHN0YXRlLnN0eWxlLT5pbmhlcml0RnJvbSht
X3N0YXRlLnBhcmVudFN0eWxlKTsKIAogICAgIC8vIFNpbmNlIHdlIGRvbid0IHVzZSBwc2V1ZG8t
ZWxlbWVudHMgaW4gYW55IG9mIG91ciBxdWlyay9wcmludCB1c2VyIGFnZW50IHJ1bGVzLCBkb24n
dCB3YXN0ZSB0aW1lIHdhbGtpbmcKICAgICAvLyB0aG9zZSBydWxlcy4KQEAgLTE3NzIsMTIgKzE3
NjgsMTIgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5
bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywgRWwKICAgICBpZiAobWF0Y2hSZXN1bHQubWF0
Y2hlZFByb3BlcnRpZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1fc3R5
bGUtPnNldFN0eWxlVHlwZShwc2V1ZG8pOworICAgIHN0YXRlLnN0eWxlLT5zZXRTdHlsZVR5cGUo
cHNldWRvKTsKIAogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1bHQsIGUpOwog
CiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRpc3BsYXkgYW5kIHRleHQgZGVj
b3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0UmVuZGVyU3R5bGUoc3R5
bGUoKSwgcGFyZW50U3R5bGUsIDApOworICAgIGFkanVzdFJlbmRlclN0eWxlKHN0YXRlLnN0eWxl
LmdldCgpLCBtX3N0YXRlLnBhcmVudFN0eWxlLCAwKTsKIAogICAgIC8vIFN0YXJ0IGxvYWRpbmcg
cmVzb3VyY2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KICAgICBsb2FkUGVuZGluZ1Jlc291
cmNlcygpOwpAQCAtMTc4NSwxNSArMTc4MSwxNSBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBT
dHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbAog
ICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIAogICAgIC8vIE5vdyBy
ZXR1cm4gdGhlIHN0eWxlLgotICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1
cm4gc3RhdGUuc3R5bGUucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBT
dHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKIHsKICAgICBpbml0Rm9y
U3R5bGVSZXNvbHZlKGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKTsgLy8gbV9yb290RWxl
bWVudFN0eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBkb2N1bWVudCBzdHlsZS4KIAotICAgIG1fc3R5
bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgbV9zdHlsZS0+aW5oZXJpdEZyb20obV9y
b290RWxlbWVudFN0eWxlKTsKKyAgICBtX3N0YXRlLnN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0
ZSgpOworICAgIG1fc3RhdGUuc3R5bGUtPmluaGVyaXRGcm9tKG1fc3RhdGUucm9vdEVsZW1lbnRT
dHlsZSk7CiAKICAgICBjb25zdCBib29sIGlzTGVmdCA9IGlzTGVmdFBhZ2UocGFnZUluZGV4KTsK
ICAgICBjb25zdCBib29sIGlzRmlyc3QgPSBpc0ZpcnN0UGFnZShwYWdlSW5kZXgpOwpAQCAtMTgw
NCw3ICsxODAwLDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5
bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiAgICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBtX3Vz
ZXJTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKICAgICAvLyBPbmx5IGNvbnNp
ZGVyIHRoZSBnbG9iYWwgYXV0aG9yIFJ1bGVTZXQgZm9yIEBwYWdlIHJ1bGVzLCBhcyBwZXIgdGhl
IEhUTUw1IHNwZWMuCiAgICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBtX2F1dGhvclN0eWxlLmdl
dCgpLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwotICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsK
KyAgICBtX3N0YXRlLmxpbmVIZWlnaHRWYWx1ZSA9IDA7CiAgICAgYm9vbCBpbmhlcml0ZWRPbmx5
ID0gZmFsc2U7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCiAgICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0
Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CkBAIC0xODE1LDggKzE4
MTEsOCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBh
Z2UoaW50IHBhZ2VJbmRleCkKICAgICB1cGRhdGVGb250KCk7CiAKICAgICAvLyBMaW5lLWhlaWdo
dCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUuCi0g
ICAgaWYgKG1fbGluZUhlaWdodFZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOworICAgIGlmIChtX3N0YXRlLmxpbmVI
ZWlnaHRWYWx1ZSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQs
IG1fc3RhdGUubGluZUhlaWdodFZhbHVlKTsKIAogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8
TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFBy
b3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CiAKQEAgLTE4MjYsMjAgKzE4MjIs
MjAgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdl
KGludCBwYWdlSW5kZXgpCiAgICAgZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigp
OwogCiAgICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUuCi0gICAgcmV0dXJuIG1fc3R5bGUucmVs
ZWFzZSgpOworICAgIHJldHVybiBtX3N0YXRlLnN0eWxlLnJlbGVhc2UoKTsKIH0KIAogUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgp
CiB7Ci0gICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBtX3N0YXRlLnN0
eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwogICAgIC8vIE1ha2Ugc3VyZSBvdXIgZm9udHMg
YXJlIGluaXRpYWxpemVkIGlmIHdlIGRvbid0IGluaGVyaXQgdGhlbSBmcm9tIG91ciBwYXJlbnQg
c3R5bGUuCiAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50U2V0dGluZ3MoKSkg
ewogICAgICAgICBpbml0aWFsaXplRm9udFN0eWxlKHNldHRpbmdzKTsKLSAgICAgICAgbV9zdHls
ZS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CisgICAgICAgIG1fc3RhdGUuc3R5bGUt
PmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogICAgIH0gZWxzZQotICAgICAgICBtX3N0
eWxlLT5mb250KCkudXBkYXRlKDApOworICAgICAgICBtX3N0YXRlLnN0eWxlLT5mb250KCkudXBk
YXRlKDApOwogCi0gICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOworICAgIHJldHVybiBtX3N0
YXRlLnN0eWxlLnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVS
ZXNvbHZlcjo6c3R5bGVGb3JUZXh0KFRleHQqIHRleHROb2RlKQpAQCAtMjEyNyw3ICsyMTIzLDcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5
bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHkKIAogICAgIC8vIExldCB0aGUgdGhlbWUgYWxzbyBo
YXZlIGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBzdHlsZS4KICAgICBpZiAoc3R5bGUtPmhhc0Fw
cGVhcmFuY2UoKSkKLSAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1c3RT
dHlsZSh0aGlzLCBzdHlsZSwgZSwgbV9oYXNVQUFwcGVhcmFuY2UsIG1fYm9yZGVyRGF0YSwgbV9i
YWNrZ3JvdW5kRGF0YSwgbV9iYWNrZ3JvdW5kQ29sb3IpOworICAgICAgICBSZW5kZXJUaGVtZTo6
ZGVmYXVsdFRoZW1lKCktPmFkanVzdFN0eWxlKHRoaXMsIHN0eWxlLCBlLCBtX3N0YXRlLmhhc1VB
QXBwZWFyYW5jZSwgbV9zdGF0ZS5ib3JkZXJEYXRhLCBtX3N0YXRlLmJhY2tncm91bmREYXRhLCBt
X3N0YXRlLmJhY2tncm91bmRDb2xvcik7CiAKICAgICAvLyBJZiB3ZSBoYXZlIGZpcnN0LWxldHRl
ciBwc2V1ZG8gc3R5bGUsIGRvIG5vdCBzaGFyZSB0aGlzIHN0eWxlLgogICAgIGlmIChzdHlsZS0+
aGFzUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSKSkKQEAgLTIyMTAsMjQgKzIyMDYsMjUgQEAgc3Rh
dGljIHZvaWQgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUpCiAK
IHZvaWQgU3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCgpCiB7Ci0gICAgaWYgKCFtX2ZvbnREaXJ0
eSkKKyAgICBpZiAoIW1fc3RhdGUuZm9udERpcnR5KQogICAgICAgICByZXR1cm47CiAKICAgICBj
aGVja0ZvclRleHRTaXplQWRqdXN0KCk7Ci0gICAgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdl
KHN0eWxlKCksIG1fcGFyZW50U3R5bGUpOwotICAgIGNoZWNrRm9yWm9vbUNoYW5nZShzdHlsZSgp
LCBtX3BhcmVudFN0eWxlKTsKLSAgICBjaGVja0Zvck9yaWVudGF0aW9uQ2hhbmdlKHN0eWxlKCkp
OwotICAgIG1fc3R5bGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOwotICAgIG1fZm9u
dERpcnR5ID0gZmFsc2U7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9zdGF0ZS5zdHlsZS5n
ZXQoKTsKKyAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uoc3R5bGUsIG1fc3RhdGUucGFy
ZW50U3R5bGUpOworICAgIGNoZWNrRm9yWm9vbUNoYW5nZShzdHlsZSwgbV9zdGF0ZS5wYXJlbnRT
dHlsZSk7CisgICAgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShzdHlsZSk7CisgICAgbV9zdGF0
ZS5zdHlsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7CisgICAgbV9zdGF0ZS5mb250
RGlydHkgPSBmYWxzZTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjpjYWNoZUJvcmRlckFuZEJh
Y2tncm91bmQoKQogewotICAgIG1faGFzVUFBcHBlYXJhbmNlID0gbV9zdHlsZS0+aGFzQXBwZWFy
YW5jZSgpOwotICAgIGlmIChtX2hhc1VBQXBwZWFyYW5jZSkgewotICAgICAgICBtX2JvcmRlckRh
dGEgPSBtX3N0eWxlLT5ib3JkZXIoKTsKLSAgICAgICAgbV9iYWNrZ3JvdW5kRGF0YSA9ICptX3N0
eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAgIG1fYmFja2dyb3VuZENvbG9yID0gbV9z
dHlsZS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgbV9zdGF0ZS5oYXNVQUFwcGVhcmFuY2UgPSBt
X3N0YXRlLnN0eWxlLT5oYXNBcHBlYXJhbmNlKCk7CisgICAgaWYgKG1fc3RhdGUuaGFzVUFBcHBl
YXJhbmNlKSB7CisgICAgICAgIG1fc3RhdGUuYm9yZGVyRGF0YSA9IG1fc3RhdGUuc3R5bGUtPmJv
cmRlcigpOworICAgICAgICBtX3N0YXRlLmJhY2tncm91bmREYXRhID0gKm1fc3RhdGUuc3R5bGUt
PmJhY2tncm91bmRMYXllcnMoKTsKKyAgICAgICAgbV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IgPSBt
X3N0YXRlLnN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKTsKICAgICB9CiB9CiAKQEAgLTIyNTcsNDkg
KzIyNTQsNTEgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6cHNldWRv
U3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgUHMKICAgICB9CiAKICAgICBpZiAobV9t
YXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgKHJ1bGVzVG9JbmNsdWRlICYgQXV0aG9yQ1NTUnVs
ZXMpKSB7Ci0gICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVzVG9JbmNsdWRlICYgQ3Jv
c3NPcmlnaW5DU1NSdWxlcyk7CisgICAgICAgIG1fc3RhdGUuc2FtZU9yaWdpbk9ubHkgPSAhKHJ1
bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcyk7CiAKICAgICAgICAgLy8gQ2hlY2sg
dGhlIHJ1bGVzIGluIGF1dGhvciBzaGVldHMuCiAgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoZHVt
bXksIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CiAKLSAgICAgICAgbV9zYW1lT3Jp
Z2luT25seSA9IGZhbHNlOworICAgICAgICBtX3N0YXRlLnNhbWVPcmlnaW5Pbmx5ID0gZmFsc2U7
CiAgICAgfQogCiAgICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6
OlJlc29sdmluZ1N0eWxlKTsKIAotICAgIHJldHVybiBtX3J1bGVMaXN0LnJlbGVhc2UoKTsKKyAg
ICByZXR1cm4gbV9zdGF0ZS5ydWxlTGlzdC5yZWxlYXNlKCk7CiB9CiAKIGlubGluZSBib29sIFN0
eWxlUmVzb2x2ZXI6OnJ1bGVNYXRjaGVzKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSwgY29uc3Qg
Q29udGFpbmVyTm9kZSogc2NvcGUpCiB7Ci0gICAgbV9keW5hbWljUHNldWRvID0gTk9QU0VVRE87
CisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKyAgICBzdGF0ZS5keW5hbWljUHNldWRvID0g
Tk9QU0VVRE87CiAKICAgICBpZiAocnVsZURhdGEuaGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKCkp
IHsKICAgICAgICAgLy8gV2Uga25vdyB0aGlzIHNlbGVjdG9yIGRvZXMgbm90IGluY2x1ZGUgYW55
IHBzZXVkbyBlbGVtZW50cy4KLSAgICAgICAgaWYgKG1fcHNldWRvU3R5bGUgIT0gTk9QU0VVRE8p
CisgICAgICAgIGlmIChzdGF0ZS5wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETykKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgLy8gV2Uga25vdyBhIHN1ZmZpY2llbnRseSBzaW1wbGUg
c2luZ2xlIHBhcnQgc2VsZWN0b3IgbWF0Y2hlcyBzaW1wbHkgYmVjYXVzZSB3ZSBmb3VuZCBpdCBm
cm9tIHRoZSBydWxlIGhhc2guCiAgICAgICAgIC8vIFRoaXMgaXMgbGltaXRlZCB0byBIVE1MIG9u
bHkgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgbmFtZXNwYWNlLgotICAgICAgICBpZiAo
cnVsZURhdGEuaGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2go
KSAmJiBtX2VsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBpZiAocnVsZURhdGEu
aGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goKSAmJiBzdGF0
ZS5lbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGlmICghcnVsZURhdGEu
aGFzTXVsdGlwYXJ0U2VsZWN0b3IoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQotICAgICAgICBpZiAocnVsZURhdGEuc2VsZWN0b3IoKS0+bV9tYXRjaCA9PSBDU1NT
ZWxlY3Rvcjo6VGFnICYmICFTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMobV9lbGVtZW50LCBy
dWxlRGF0YS5zZWxlY3RvcigpLT50YWdRTmFtZSgpKSkKKyAgICAgICAgaWYgKHJ1bGVEYXRhLnNl
bGVjdG9yKCktPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZyAmJiAhU2VsZWN0b3JDaGVja2Vy
Ojp0YWdNYXRjaGVzKHN0YXRlLmVsZW1lbnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCktPnRhZ1FOYW1l
KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIVNlbGVjdG9yQ2hl
Y2tlcjo6ZmFzdENoZWNrUmlnaHRtb3N0QXR0cmlidXRlU2VsZWN0b3IobV9lbGVtZW50LCBydWxl
RGF0YS5zZWxlY3RvcigpKSkKKyAgICAgICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVj
a1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVjdG9yKHN0YXRlLmVsZW1lbnQsIHJ1bGVEYXRhLnNlbGVj
dG9yKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gbV9zZWxl
Y3RvckNoZWNrZXIuZmFzdENoZWNrKHJ1bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCk7CisK
KyAgICAgICAgcmV0dXJuIG1fc2VsZWN0b3JDaGVja2VyLmZhc3RDaGVjayhydWxlRGF0YS5zZWxl
Y3RvcigpLCBzdGF0ZS5lbGVtZW50KTsKICAgICB9CiAKICAgICAvLyBTbG93IHBhdGguCi0gICAg
U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVEYXRh
LnNlbGVjdG9yKCksIG1fZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFi
bGVkKTsKLSAgICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IHN0eWxlKCk7CisgICAgU2VsZWN0b3JD
aGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVEYXRhLnNlbGVjdG9y
KCksIHN0YXRlLmVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRW5hYmxlZCk7
CisgICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBzdGF0ZS5zdHlsZS5nZXQoKTsKICAgICBjb250
ZXh0LnNjb3BlID0gc2NvcGU7Ci0gICAgY29udGV4dC5wc2V1ZG9TdHlsZSA9IG1fcHNldWRvU3R5
bGU7Ci0gICAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBtYXRjaCA9IG1fc2VsZWN0b3JDaGVja2Vy
Lm1hdGNoKGNvbnRleHQsIG1fZHluYW1pY1BzZXVkbywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0
ZWd5KCkpOworICAgIGNvbnRleHQucHNldWRvU3R5bGUgPSBzdGF0ZS5wc2V1ZG9TdHlsZTsKKyAg
ICBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gbV9zZWxlY3RvckNoZWNrZXIubWF0Y2go
Y29udGV4dCwgc3RhdGUuZHluYW1pY1BzZXVkbywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5
KCkpOwogICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2hlcykK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX3BzZXVkb1N0eWxlICE9IE5PUFNFVURP
ICYmIG1fcHNldWRvU3R5bGUgIT0gbV9keW5hbWljUHNldWRvKQorICAgIGlmIChzdGF0ZS5wc2V1
ZG9TdHlsZSAhPSBOT1BTRVVETyAmJiBzdGF0ZS5wc2V1ZG9TdHlsZSAhPSBzdGF0ZS5keW5hbWlj
UHNldWRvKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0y
MzA5LDcgKzIzMDgsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9uU2VsZWN0b3Io
Y29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZQogICAgIGlmICghcmVnaW9u
U2VsZWN0b3IgfHwgIXJlZ2lvbkVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IG1fcHNldWRvU3R5bGUgPSBOT1BTRVVETzsKKyAgICBtX3N0YXRlLnBzZXVkb1N0eWxlID0gTk9Q
U0VVRE87CiAKICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzID0gcmVnaW9uU2VsZWN0b3I7
IHM7IHMgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQocykpCiAgICAgICAgIGlmIChtX3NlbGVjdG9y
Q2hlY2tlci5tYXRjaGVzKHMsIHJlZ2lvbkVsZW1lbnQpKQpAQCAtMjMzNCw3ICsyMzMzLDcgQEAg
TGVuZ3RoIFN0eWxlUmVzb2x2ZXI6OmNvbnZlcnRUb0Zsb2F0TGVuZ3RoKENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSwgUmUKIHRlbXBsYXRlIDxTdHlsZVJlc29sdmVyOjpTdHlsZUFw
cGxpY2F0aW9uUGFzcyBwYXNzPgogdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnRpZXMo
Y29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiBydWxlLCBib29s
IGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHksIFByb3BlcnR5V2hpdGVsaXN0VHlwZSBw
cm9wZXJ0eVdoaXRlbGlzdFR5cGUpCiB7Ci0gICAgQVNTRVJUKChwcm9wZXJ0eVdoaXRlbGlzdFR5
cGUgIT0gUHJvcGVydHlXaGl0ZWxpc3RSZWdpb24pIHx8IG1fcmVnaW9uRm9yU3R5bGluZyk7Cisg
ICAgQVNTRVJUKChwcm9wZXJ0eVdoaXRlbGlzdFR5cGUgIT0gUHJvcGVydHlXaGl0ZWxpc3RSZWdp
b24pIHx8IG1fc3RhdGUucmVnaW9uRm9yU3R5bGluZyk7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFByb2Nl
c3NSdWxlKGRvY3VtZW50KCksIHJ1bGUsIHRoaXMpOwogCiAgICAgdW5zaWduZWQgcHJvcGVydHlD
b3VudCA9IHByb3BlcnRpZXMtPnByb3BlcnR5Q291bnQoKTsKQEAgLTIzNzgsNyArMjM3Nyw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlT
ZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsCiAgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShj
dXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CiAgICAgICAgICAgICAvLyB3ZSBhcHBseSBs
aW5lLWhlaWdodCBsYXRlcgogICAgICAgICAgICAgZWxzZSBpZiAocHJvcGVydHkgPT0gQ1NTUHJv
cGVydHlMaW5lSGVpZ2h0KQotICAgICAgICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gY3Vy
cmVudC52YWx1ZSgpOworICAgICAgICAgICAgICAgIG1fc3RhdGUubGluZUhlaWdodFZhbHVlID0g
Y3VycmVudC52YWx1ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG93UHJp
b3JpdHlQcm9wZXJ0aWVzOgogICAgICAgICAgICAgaWYgKHByb3BlcnR5ID4gQ1NTUHJvcGVydHlM
aW5lSGVpZ2h0KQpAQCAtMjM5NCwxOCArMjM5MywxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBib29s
CiAgICAgaWYgKHN0YXJ0SW5kZXggPT0gLTEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICht
X3N0eWxlLT5pbnNpZGVMaW5rKCkgIT0gTm90SW5zaWRlTGluaykgeworICAgIFN0YXRlJiBzdGF0
ZSA9IG1fc3RhdGU7CisgICAgaWYgKHN0YXRlLnN0eWxlLT5pbnNpZGVMaW5rKCkgIT0gTm90SW5z
aWRlTGluaykgewogICAgICAgICBmb3IgKGludCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRl
eDsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hlZFBy
b3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllc1tpXTsKICAgICAgICAgICAg
IHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBtYXRjaGVkUHJvcGVydGllcy5saW5rTWF0Y2hUeXBl
OwogICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2VyIHRvIHBhc3MgdGhlc2Ug
YXMgYXJndW1lbnRzIGJ1dCB0aGF0IHJlcXVpcmVzIGNoYW5nZXMgaW4gbWFueSBwbGFjZXMuCi0g
ICAgICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IGxpbmtNYXRjaFR5cGUg
JiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluazsKLSAgICAgICAgICAgIG1fYXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZSA9IGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1h
dGNoVmlzaXRlZDsKKyAgICAgICAgICAgIHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZSA9IGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluazsKKyAgICAgICAg
ICAgIHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBsaW5rTWF0Y2hUeXBl
ICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7CiAKICAgICAgICAgICAgIGFwcGx5UHJv
cGVydGllczxwYXNzPihtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJl
c3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNf
Y2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5
cGUpKTsKICAgICAgICAgfQotICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9
IHRydWU7Ci0gICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGZhbHNl
OworICAgICAgICBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgPSB0cnVlOworICAg
ICAgICBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlID0gZmFsc2U7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5k
SW5kZXg7ICsraSkgewpAQCAtMjUxMyw2ICsyNTEzLDcgQEAgc3RhdGljIGJvb2wgaXNDYWNoZWFi
bGVJbk1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
UmUKIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRj
aFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNT
RVJUKGVsZW1lbnQpOworICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgdW5zaWduZWQg
Y2FjaGVIYXNoID0gbWF0Y2hSZXN1bHQuaXNDYWNoZWFibGUgPyBjb21wdXRlTWF0Y2hlZFByb3Bl
cnRpZXNIYXNoKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmRhdGEoKSwgbWF0Y2hSZXN1
bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpKSA6IDA7CiAgICAgYm9vbCBhcHBseUluaGVyaXRl
ZE9ubHkgPSBmYWxzZTsKICAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSogY2Fj
aGVJdGVtID0gMDsKQEAgLTI1MjAsMTUgKzI1MjEsMTUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29u
c3QKICAgICAgICAgLy8gV2UgY2FuIGJ1aWxkIHVwIHRoZSBzdHlsZSBieSBjb3B5aW5nIG5vbi1p
bmhlcml0ZWQgcHJvcGVydGllcyBmcm9tIGFuIGVhcmxpZXIgc3R5bGUgb2JqZWN0IGJ1aWx0IHVz
aW5nIHRoZSBzYW1lIGV4YWN0CiAgICAgICAgIC8vIHN0eWxlIGRlY2xhcmF0aW9ucy4gV2UgdGhl
biBvbmx5IG5lZWQgdG8gYXBwbHkgdGhlIGluaGVyaXRlZCBwcm9wZXJ0aWVzLCBpZiBhbnksIGFz
IHRoZWlyIHZhbHVlcyBjYW4gZGVwZW5kIG9uIHRoZSAKICAgICAgICAgLy8gZWxlbWVudCBjb250
ZXh0LiBUaGlzIGlzIGZhc3QgYW5kIHNhdmVzIG1lbW9yeSBieSByZXVzaW5nIHRoZSBzdHlsZSBk
YXRhIHN0cnVjdHVyZXMuCi0gICAgICAgIG1fc3R5bGUtPmNvcHlOb25Jbmhlcml0ZWRGcm9tKGNh
Y2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOwotICAgICAgICBpZiAobV9wYXJlbnRTdHlsZS0+
aW5oZXJpdGVkRGF0YVNoYXJlZChjYWNoZUl0ZW0tPnBhcmVudFJlbmRlclN0eWxlLmdldCgpKSAm
JiAhaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICBFSW5zaWRlTGlu
ayBsaW5rU3RhdHVzID0gbV9zdHlsZS0+aW5zaWRlTGluaygpOworICAgICAgICBzdGF0ZS5zdHls
ZS0+Y29weU5vbkluaGVyaXRlZEZyb20oY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7Cisg
ICAgICAgIGlmIChzdGF0ZS5wYXJlbnRTdHlsZS0+aW5oZXJpdGVkRGF0YVNoYXJlZChjYWNoZUl0
ZW0tPnBhcmVudFJlbmRlclN0eWxlLmdldCgpKSAmJiAhaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1l
bnQpKSB7CisgICAgICAgICAgICBFSW5zaWRlTGluayBsaW5rU3RhdHVzID0gc3RhdGUuc3R5bGUt
Pmluc2lkZUxpbmsoKTsKICAgICAgICAgICAgIC8vIElmIHRoZSBjYWNoZSBpdGVtIHBhcmVudCBz
dHlsZSBoYXMgaWRlbnRpY2FsIGluaGVyaXRlZCBwcm9wZXJ0aWVzIHRvIHRoZSBjdXJyZW50IHBh
cmVudCBzdHlsZSB0aGVuIHRoZQogICAgICAgICAgICAgLy8gcmVzdWx0aW5nIHN0eWxlIHdpbGwg
YmUgaWRlbnRpY2FsIHRvby4gV2UgY29weSB0aGUgaW5oZXJpdGVkIHByb3BlcnRpZXMgb3ZlciBm
cm9tIHRoZSBjYWNoZSBhbmQgYXJlIGRvbmUuCi0gICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0
RnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0
eWxlLT5pbmhlcml0RnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKIAogICAgICAg
ICAgICAgLy8gVW5mb3J0dW5hdGVseSB0aGUgbGluayBzdGF0dXMgaXMgdHJlYXRlZCBsaWtlIGFu
IGluaGVyaXRlZCBwcm9wZXJ0eS4gV2UgbmVlZCB0byBleHBsaWNpdGx5IHJlc3RvcmUgaXQuCi0g
ICAgICAgICAgICBtX3N0eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0dXMpOworICAgICAgICAg
ICAgc3RhdGUuc3R5bGUtPnNldEluc2lkZUxpbmsobGlua1N0YXR1cyk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5ID0gdHJ1ZTsgCkBA
IC0yNTQ2LDE0ICsyNTQ3LDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJv
cGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgLy8gaGln
aC1wcmlvcml0eSBwcm9wZXJ0aWVzIGZpcnN0LCBpLmUuLCB0aG9zZSBwcm9wZXJ0aWVzIHRoYXQg
b3RoZXIgcHJvcGVydGllcyBkZXBlbmQgb24uCiAgICAgLy8gVGhlIG9yZGVyIGlzICgxKSBoaWdo
LXByaW9yaXR5IG5vdCBpbXBvcnRhbnQsICgyKSBoaWdoLXByaW9yaXR5IGltcG9ydGFudCwgKDMp
IG5vcm1hbCBub3QgaW1wb3J0YW50CiAgICAgLy8gYW5kICg0KSBub3JtYWwgaW1wb3J0YW50Lgot
ICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSAw
OwogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0
Y2hSZXN1bHQsIGZhbHNlLCAwLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkg
LSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOwogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGln
aFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdl
cy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBw
bHlJbmhlcml0ZWRPbmx5KTsKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0
eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RV
c2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRP
bmx5KTsKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+
KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNo
UmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwogCi0gICAgaWYg
KGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0g
bV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKSB7Ci0gICAgICAgIG1fZm9udERpcnR5ID0gdHJ1ZTsK
KyAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpv
b20oKSAhPSBzdGF0ZS5zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKSB7CisgICAgICAgIHN0YXRlLmZv
bnREaXJ0eSA9IHRydWU7CiAgICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwogICAg
IH0KIApAQCAtMjU2MSwxMSArMjU2MiwxMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0
Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAg
IHVwZGF0ZUZvbnQoKTsKIAogICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBz
dXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZS4KLSAgICBpZiAobV9saW5lSGVpZ2h0VmFs
dWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX2xpbmVI
ZWlnaHRWYWx1ZSk7CisgICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSkKKyAgICAgICAgYXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSk7
CiAKICAgICAvLyBNYW55IHByb3BlcnRpZXMgZGVwZW5kIG9uIHRoZSBmb250LiBJZiBpdCBjaGFu
Z2VzIHdlIGp1c3QgYXBwbHkgYWxsIHByb3BlcnRpZXMuCi0gICAgaWYgKGNhY2hlSXRlbSAmJiBj
YWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5mb250RGVzY3JpcHRpb24oKSAhPSBtX3N0eWxlLT5mb250
RGVzY3JpcHRpb24oKSkKKyAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpICE9IHN0YXRlLnN0eWxlLT5mb250RGVzY3JpcHRpb24oKSkK
ICAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAKICAgICAvLyBOb3cgZG8gdGhl
IG5vcm1hbCBwcmlvcml0eSBVQSBwcm9wZXJ0aWVzLgpAQCAtMjU4MywxMyArMjU4NCwxMyBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1
bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzIHJl
ZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KICAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOwogICAg
IAotICAgIEFTU0VSVCghbV9mb250RGlydHkpOworICAgIEFTU0VSVCghc3RhdGUuZm9udERpcnR5
KTsKICAgICAKICAgICBpZiAoY2FjaGVJdGVtIHx8ICFjYWNoZUhhc2gpCiAgICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIWlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKG1fZWxlbWVu
dCwgbV9zdHlsZS5nZXQoKSwgbV9wYXJlbnRTdHlsZSkpCisgICAgaWYgKCFpc0NhY2hlYWJsZUlu
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZShzdGF0ZS5lbGVtZW50LCBzdGF0ZS5zdHlsZS5nZXQoKSwg
c3RhdGUucGFyZW50U3R5bGUpKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkVG9NYXRjaGVkUHJv
cGVydGllc0NhY2hlKG1fc3R5bGUuZ2V0KCksIG1fcGFyZW50U3R5bGUsIGNhY2hlSGFzaCwgbWF0
Y2hSZXN1bHQpOworICAgIGFkZFRvTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShzdGF0ZS5zdHlsZS5n
ZXQoKSwgc3RhdGUucGFyZW50U3R5bGUsIGNhY2hlSGFzaCwgbWF0Y2hSZXN1bHQpOwogfQogCiBz
dGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVBhZ2VSdWxlcyhjb25zdCBTdHlsZVJ1bGVQYWdlKiBy
MSwgY29uc3QgU3R5bGVSdWxlUGFnZSogcjIpCkBAIC0yNjU0LDcgKzI2NTUsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6Om1hdGNoUGFnZVJ1bGVzRm9yTGlzdChWZWN0b3I8U3R5bGVSdWxlUGFnZSo+
JiBtYXRjaGVkUnVsZXMsCiBib29sIFN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2UoaW50IHBhZ2VJ
bmRleCkgY29uc3QKIHsKICAgICBib29sIGlzRmlyc3RQYWdlTGVmdCA9IGZhbHNlOwotICAgIGlm
ICghbV9yb290RWxlbWVudFN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCisgICAgaWYg
KCFtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAg
ICAgICAgaXNGaXJzdFBhZ2VMZWZ0ID0gdHJ1ZTsKIAogICAgIHJldHVybiAocGFnZUluZGV4ICsg
KGlzRmlyc3RQYWdlTGVmdCA/IDEgOiAwKSkgJSAyOwpAQCAtMjc2Nyw3ICsyNzY4LDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUsIFJlbmQKIHsKICAgICBpbml0RWxlbWVudCgwKTsKICAgICBpbml0Rm9y
U3R5bGVSZXNvbHZlKDAsIHN0eWxlKTsKLSAgICBtX3N0eWxlID0gc3R5bGU7CisgICAgbV9zdGF0
ZS5zdHlsZSA9IHN0eWxlOwogICAgIGFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShpZCwgdmFs
dWUpOwogfQogCkBAIC0yODc5LDEwICsyODgwLDEwIEBAIGlubGluZSBib29sIFN0eWxlUmVzb2x2
ZXI6OmlzVmFsaWRDdWVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpCiAvLyBwcm9wZXJ0
aWVzIHRoYXQgYXJlIE5PVCBhbGxvd2VkIHRvIHNjYWxlIHdpdGhpbiBhIHpvb21lZCBTVkcgZG9j
dW1lbnQgKGxldHRlci93b3JkLXNwYWNpbmcvZm9udC1zaXplKS4KIGJvb2wgU3R5bGVSZXNvbHZl
cjo6dXNlU1ZHWm9vbVJ1bGVzKCkKIHsKLSAgICByZXR1cm4gbV9lbGVtZW50ICYmIG1fZWxlbWVu
dC0+aXNTVkdFbGVtZW50KCk7CisgICAgcmV0dXJuIG1fc3RhdGUuZWxlbWVudCAmJiBtX3N0YXRl
LmVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpOwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJh
Y2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgU3R5bGVSZXNvbHZl
ciogc2VsZWN0b3IsIExlbmd0aCYgd29ya2luZ0xlbmd0aCkKK3N0YXRpYyBib29sIGNyZWF0ZUdy
aWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBjb25zdCBT
dHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIExlbmd0aCYgd29ya2luZ0xlbmd0aCkKIHsKICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250
ZW50KSB7CiAgICAgICAgIHdvcmtpbmdMZW5ndGggPSBMZW5ndGgoTWluQ29udGVudCk7CkBAIC0y
ODk0LDcgKzI4OTUsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgU3R5bGVSZXNvbAogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICB3b3JraW5nTGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZl
cnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBW
aWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KHNlbGVjdG9yLT5z
dHlsZSgpLCBzZWxlY3Rvci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzZWxlY3Rvci0+c3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICB3b3JraW5nTGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNv
bnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24g
fCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KHN0YXRlLnN0
eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCBzdGF0ZS5zdHlsZS0+ZWZmZWN0aXZl
Wm9vbSgpKTsKICAgICBpZiAod29ya2luZ0xlbmd0aC5pc1VuZGVmaW5lZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKQEAgLTI5MDQsMTIgKzI5MDUsMTIgQEAgc3RhdGljIGJvb2wgY3JlYXRl
R3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFN0eWxl
UmVzb2wKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNr
TWluTWF4KENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgU3R5bGVSZXNvbHZlciog
c2VsZWN0b3IsIEdyaWRUcmFja1NpemUmIHRyYWNrU2l6ZSkKK3N0YXRpYyBib29sIGNyZWF0ZUdy
aWRUcmFja01pbk1heChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIGNvbnN0IFN0
eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgR3JpZFRyYWNrU2l6ZSYgdHJhY2tTaXplKQogewog
ICAgIFBhaXIqIG1pbk1heFRyYWNrQnJlYWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRQYWlyVmFs
dWUoKTsKICAgICBpZiAoIW1pbk1heFRyYWNrQnJlYWR0aCkgewogICAgICAgICBMZW5ndGggd29y
a2luZ0xlbmd0aDsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKHByaW1pdGl2
ZVZhbHVlLCBzZWxlY3Rvciwgd29ya2luZ0xlbmd0aCkpCisgICAgICAgIGlmICghY3JlYXRlR3Jp
ZFRyYWNrQnJlYWR0aChwcmltaXRpdmVWYWx1ZSwgc3RhdGUsIHdvcmtpbmdMZW5ndGgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHRyYWNrU2l6ZS5zZXRMZW5ndGgod29y
a2luZ0xlbmd0aCk7CkBAIC0yOTE4LDE0ICsyOTE5LDE0IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdy
aWRUcmFja01pbk1heChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFN0eWxlUmVz
b2x2CiAKICAgICBMZW5ndGggbWluVHJhY2tCcmVhZHRoOwogICAgIExlbmd0aCBtYXhUcmFja0Jy
ZWFkdGg7Ci0gICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKG1pbk1heFRyYWNrQnJlYWR0
aC0+Zmlyc3QoKSwgc2VsZWN0b3IsIG1pblRyYWNrQnJlYWR0aCkgfHwgIWNyZWF0ZUdyaWRUcmFj
a0JyZWFkdGgobWluTWF4VHJhY2tCcmVhZHRoLT5zZWNvbmQoKSwgc2VsZWN0b3IsIG1heFRyYWNr
QnJlYWR0aCkpCisgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKG1pbk1heFRyYWNrQnJl
YWR0aC0+Zmlyc3QoKSwgc3RhdGUsIG1pblRyYWNrQnJlYWR0aCkgfHwgIWNyZWF0ZUdyaWRUcmFj
a0JyZWFkdGgobWluTWF4VHJhY2tCcmVhZHRoLT5zZWNvbmQoKSwgc3RhdGUsIG1heFRyYWNrQnJl
YWR0aCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHRyYWNrU2l6ZS5zZXRNaW5NYXgo
bWluVHJhY2tCcmVhZHRoLCBtYXhUcmFja0JyZWFkdGgpOwogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tHcm91cChDU1NWYWx1ZSogdmFsdWUsIFN0eWxl
UmVzb2x2ZXIqIHNlbGVjdG9yLCBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6ZXMpCitz
dGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tHcm91cChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IFN0
eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0cmFja1Np
emVzKQogewogICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTI5MzYsNyArMjkzNyw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0dy
b3VwKENTU1ZhbHVlKiB2YWx1ZSwgU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFZlY3RvCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgR3JpZFRyYWNrU2l6ZSB0cmFja1NpemU7
Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTWluTWF4KHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4oY3VyclZhbHVlKSwgc2VsZWN0b3IsIHRyYWNrU2l6ZSkpCisgICAgICAgIGlm
ICghY3JlYXRlR3JpZFRyYWNrTWluTWF4KHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
Y3VyclZhbHVlKSwgc3RhdGUsIHRyYWNrU2l6ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAgICAgdHJhY2tTaXplcy5hcHBlbmQodHJhY2tTaXplKTsKQEAgLTI5NDQsNyArMjk0
NSw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0dyb3VwKENTU1ZhbHVlKiB2YWx1ZSwg
U3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFZlY3RvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0
YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3QoQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8R3Jp
ZFRyYWNrU2l6ZT4mIHRyYWNrU2l6ZXMsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yKQorc3RhdGlj
IGJvb2wgY3JlYXRlR3JpZFRyYWNrTGlzdChDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxHcmlkVHJh
Y2tTaXplPiYgdHJhY2tTaXplcywgY29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQog
ewogICAgIC8vIEhhbmRsZSAnbm9uZScuCiAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpIHsKQEAgLTI5NTIsNyArMjk1Myw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xp
c3QoQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6CiAgICAg
ICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmU7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGNyZWF0ZUdyaWRUcmFja0dyb3VwKHZhbHVlLCBzZWxlY3Rvciwg
dHJhY2tTaXplcyk7CisgICAgcmV0dXJuIGNyZWF0ZUdyaWRUcmFja0dyb3VwKHZhbHVlLCBzdGF0
ZSwgdHJhY2tTaXplcyk7CiB9CiAKIApAQCAtMzAwMCw3ICszMDAxLDcgQEAgc3RhdGljIGJvb2wg
aGFzVmFyaWFibGVSZWZlcmVuY2UoQ1NTVmFsdWUqIHZhbHVlKQogCiB2b2lkIFN0eWxlUmVzb2x2
ZXI6OnJlc29sdmVWYXJpYWJsZXMoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBW
ZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiYga25vd25FeHByZXNzaW9u
cykKIHsKLSAgICBzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiBleHByZXNzaW9uKGlk
LCB2YWx1ZS0+c2VyaWFsaXplUmVzb2x2aW5nVmFyaWFibGVzKCpzdHlsZSgpLT52YXJpYWJsZXMo
KSkpOworICAgIHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+IGV4cHJlc3Npb24oaWQs
IHZhbHVlLT5zZXJpYWxpemVSZXNvbHZpbmdWYXJpYWJsZXMoKm1fc3RhdGUuc3R5bGUtPnZhcmlh
YmxlcygpKSk7CiAKICAgICBpZiAoa25vd25FeHByZXNzaW9ucy5jb250YWlucyhleHByZXNzaW9u
KSkKICAgICAgICAgcmV0dXJuOyAvLyBjeWNsZSBkZXRlY3RlZC4KQEAgLTMwMzIsMTkgKzMwMzMs
MjAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB9CiAjZW5kaWYKIAotICAgIGJvb2wgaXNJbmhlcml0ID0g
bV9wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7Ci0gICAgYm9vbCBpc0lu
aXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAoIW1fcGFyZW50Tm9kZSAmJiB2YWx1
ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworICAg
IGJvb2wgaXNJbmhlcml0ID0gc3RhdGUucGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRW
YWx1ZSgpOworICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwg
KCFzdGF0ZS5wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpOwogCiAgICAg
QVNTRVJUKCFpc0luaGVyaXQgfHwgIWlzSW5pdGlhbCk7IC8vIGlzSW5oZXJpdCAtPiAhaXNJbml0
aWFsICYmIGlzSW5pdGlhbCAtPiAhaXNJbmhlcml0Ci0gICAgQVNTRVJUKCFpc0luaGVyaXQgfHwg
KG1fcGFyZW50Tm9kZSAmJiBtX3BhcmVudFN0eWxlKSk7IC8vIGlzSW5oZXJpdCAtPiAobV9wYXJl
bnROb2RlICYmIG1fcGFyZW50U3R5bGUpCisgICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgKHN0YXRl
LnBhcmVudE5vZGUgJiYgc3RhdGUucGFyZW50U3R5bGUpKTsgLy8gaXNJbmhlcml0IC0+IChzdGF0
ZS5wYXJlbnROb2RlICYmIHN0YXRlLnBhcmVudFN0eWxlKQogCi0gICAgaWYgKCFhcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUoKSAmJiAoIWFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUo
KSB8fCAhaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSkgeworICAgIGlmICghc3RhdGUu
YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlICYmICghc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlz
aXRlZExpbmtTdHlsZSB8fCAhaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSkgewogICAg
ICAgICAvLyBMaW1pdCB0aGUgcHJvcGVydGllcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIG9ubHkg
dGhlIG9uZXMgaG9ub3JlZCBieSA6dmlzaXRlZC4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmIChpc0luaGVyaXQgJiYgIW1fcGFyZW50U3R5bGUtPmhhc0V4cGxpY2l0bHlJbmhlcml0
ZWRQcm9wZXJ0aWVzKCkgJiYgIUNTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkK
LSAgICAgICAgbV9wYXJlbnRTdHlsZS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRp
ZXMoKTsKKyAgICBpZiAoaXNJbmhlcml0ICYmICFzdGF0ZS5wYXJlbnRTdHlsZS0+aGFzRXhwbGlj
aXRseUluaGVyaXRlZFByb3BlcnRpZXMoKSAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJv
cGVydHkoaWQpKQorICAgICAgICBzdGF0ZS5wYXJlbnRTdHlsZS0+c2V0SGFzRXhwbGljaXRseUlu
aGVyaXRlZFByb3BlcnRpZXMoKTsKIAogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgIGlm
IChpZCA9PSBDU1NQcm9wZXJ0eVZhcmlhYmxlKSB7CkBAIC0zMDUyLDcgKzMwNTQsNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICBDU1NWYXJpYWJsZVZhbHVlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0
PENTU1ZhcmlhYmxlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIEFTU0VSVCghdmFyaWFibGUtPm5h
bWUoKS5pc0VtcHR5KCkpOwogICAgICAgICBBU1NFUlQoIXZhcmlhYmxlLT52YWx1ZSgpLmlzRW1w
dHkoKSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldFZhcmlhYmxlKHZhcmlhYmxlLT5uYW1lKCksIHZh
cmlhYmxlLT52YWx1ZSgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUtPnNldFZhcmlhYmxlKHZhcmlh
YmxlLT5uYW1lKCksIHZhcmlhYmxlLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICNlbmRpZgpAQCAtMzA3MSw3ICszMDczLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIAogICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgPyBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKSA6IDA7CiAKLSAgICBmbG9hdCB6
b29tRmFjdG9yID0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIGZsb2F0IHpvb21GYWN0
b3IgPSBzdGF0ZS5zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwogCiAgICAgLy8gV2hhdCBmb2xsb3dz
IGlzIGEgbGlzdCB0aGF0IG1hcHMgdGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIgY29ycmVz
cG9uZGluZyBmcm9udC1lbmQKICAgICAvLyBSZW5kZXJTdHlsZSB2YWx1ZXMuIFNob3J0aGFuZHMg
KGUuZy4gYm9yZGVyLCBiYWNrZ3JvdW5kKSBvY2N1ciBpbiB0aGlzIGxpc3QgYXMgd2VsbCBhbmQK
QEAgLTMwODUsNyArMzA4Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAvLyBub3RlIGlz
IGEgcmVtaW5kZXIgdGhhdCBldmVudHVhbGx5ICJpbmhlcml0IiBuZWVkcyB0byBiZSBzdXBwb3J0
ZWQuCiAKICAgICAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgICAgICBtX3N0
eWxlLT5jbGVhckNvbnRlbnQoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJD
b250ZW50KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCkBAIC0z
MDk3LDE5ICszMDk5LDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgQ1NTVmFsdWUq
IGl0ZW0gPSBpLnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VHZW5l
cmF0b3JWYWx1ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc0dyYWRpZW50
VmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoU3R5
bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPihp
dGVtKS0+Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhpcykuZ2V0KCkpLCBkaWRTZXQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoU3R5bGVHZW5l
cmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPihpdGVtKS0+
Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhpcykuZ2V0KCkpLCBkaWRTZXQpOwogICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRD
b250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NJbWFnZUdl
bmVyYXRvclZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUtPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRp
Y19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CiAgICAgICAg
ICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCiAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc0ltYWdlU2V0VmFsdWUoKSkgewotICAg
ICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1
ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPihpdGVt
KSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50
KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENT
U0ltYWdlU2V0VmFsdWUqPihpdGVtKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRp
ZFNldCA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAg
ICBpZiAoaXRlbS0+aXNJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9zdHls
ZS0+c2V0Q29udGVudChjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50
LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVudChjYWNoZWRPclBlbmRpbmdGcm9tVmFs
dWUoQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4oaXRlbSkp
LCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0zMTIwLDE3ICszMTIy
LDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNv
bnRlbnRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CiAKICAg
ICAgICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLT5pc1N0cmluZygpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1
ZSgpLmltcGwoKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNl
dENvbnRlbnQoY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwoKSwgZGlkU2V0KTsK
ICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNBdHRyKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IENhbiBhIG5hbWVzcGFjZSBiZSBzcGVjaWZpZWQgZm9yIGFuIGF0dHIoZm9vKT8KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fc3R5bGUtPnN0eWxlVHlwZSgpID09IE5PUFNFVURPKQot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCisgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VW5pcXVlKCk7CiAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFyZW50U3R5bGUtPnNl
dFVuaXF1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUucGFyZW50U3R5bGUtPnNl
dFVuaXF1ZSgpOwogICAgICAgICAgICAgICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0
b20sIGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsKLSAg
ICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IG1fZWxlbWVudC0+
Z2V0QXR0cmlidXRlKGF0dHIpOwotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250
ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUuaW1wbCgpLCBkaWRTZXQpOwor
ICAgICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gc3RhdGUuZWxl
bWVudC0+Z2V0QXR0cmlidXRlKGF0dHIpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHls
ZS0+c2V0Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IHZhbHVlLmltcGwoKSwg
ZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgLy8gcmVnaXN0ZXIgdGhlIGZhY3QgdGhhdCB0aGUgYXR0cmlidXRlIHZhbHVlIGFm
ZmVjdHMgdGhlIHN0eWxlCiAgICAgICAgICAgICAgICAgICAgIG1fZmVhdHVyZXMuYXR0cnNJblJ1
bGVzLmFkZChhdHRyLmxvY2FsTmFtZSgpLmltcGwoKSk7CkBAIC0zMTQxLDI0ICszMTQzLDI0IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0U3R5bGVJZGVudCAhPSBD
U1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0U3R5bGVUeXBlID0gc3Rh
dGljX2Nhc3Q8RUxpc3RTdHlsZVR5cGU+KGxpc3RTdHlsZUlkZW50IC0gQ1NTVmFsdWVEaXNjKTsK
ICAgICAgICAgICAgICAgICAgICAgT3duUHRyPENvdW50ZXJDb250ZW50PiBjb3VudGVyID0gYWRv
cHRQdHIobmV3IENvdW50ZXJDb250ZW50KGNvdW50ZXJWYWx1ZS0+aWRlbnRpZmllcigpLCBsaXN0
U3R5bGVUeXBlLCBjb3VudGVyVmFsdWUtPnNlcGFyYXRvcigpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fc3R5bGUtPnNldENvbnRlbnQoY291bnRlci5yZWxlYXNlKCksIGRpZFNldCk7CisgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KGNvdW50ZXIucmVsZWFzZSgp
LCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVl
LT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVPcGVuUXVv
dGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KE9QRU5fUVVP
VEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29u
dGVudChPUEVOX1FVT1RFLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGlkU2V0
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICBjYXNlIENTU1ZhbHVlQ2xvc2VRdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldENvbnRlbnQoQ0xPU0VfUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVudChDTE9TRV9RVU9URSwgZGlkU2V0KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vT3BlblF1b3Rl
OgotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChOT19PUEVOX1FV
T1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENv
bnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRp
ZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ2xvc2VRdW90ZToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc3R5bGUtPnNldENvbnRlbnQoTk9fQ0xPU0VfUVVPVEUsIGRpZFNldCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVudChOT19DTE9TRV9RVU9URSwg
ZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAg
LTMxNjgsMTYgKzMxNzAsMTYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIWRpZFNldCkKLSAgICAgICAgICAgICAgICBtX3N0
eWxlLT5jbGVhckNvbnRlbnQoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJD
b250ZW50KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICBjYXNlIENTU1By
b3BlcnR5UXVvdGVzOgogICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBtX3N0
eWxlLT5zZXRRdW90ZXMobV9wYXJlbnRTdHlsZS0+cXVvdGVzKCkpOworICAgICAgICAgICAgc3Rh
dGUuc3R5bGUtPnNldFF1b3RlcyhzdGF0ZS5wYXJlbnRTdHlsZS0+cXVvdGVzKCkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAg
ICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcygwKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5z
ZXRRdW90ZXMoMCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYg
KHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CkBAIC0zMTk1LDE5ICszMTk3LDE5IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgICAgICAgICAgICAgU3RyaW5nIGVuZFF1b3RlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPihzZWNvbmQpLT5nZXRTdHJpbmdWYWx1ZSgpOwogICAgICAgICAgICAgICAg
IHF1b3Rlcy0+YWRkUGFpcihzdGQ6Om1ha2VfcGFpcihzdGFydFF1b3RlLCBlbmRRdW90ZSkpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKHF1b3Rlcyk7Cisg
ICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0UXVvdGVzKHF1b3Rlcyk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKSB7CiAgICAgICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQotICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpjcmVhdGUoKSk7Cisg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpjcmVhdGUo
KSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250
RmFtaWx5OiB7CiAgICAgICAgIC8vIGxpc3Qgb2Ygc3RyaW5ncyBhbmQgaWRzCiAgICAgICAgIGlm
IChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBwYXJlbnRGb250RGVz
Y3JpcHRpb24gPSBtX3BhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAg
IEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRp
b24oKTsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBwYXJlbnRGb250RGVzY3JpcHRpb24g
PSBzdGF0ZS5wYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBGb250
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpOwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkocGFyZW50
Rm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSk7CiAgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0RmFtaWx5KHBhcmVudEZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpKTsKICAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQocGFyZW50Rm9udERl
c2NyaXB0aW9uLmlzU3BlY2lmaWVkRm9udCgpKTsKQEAgLTMyMTcsNyArMzIxOSw3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAKICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewogICAgICAgICAgICAgRm9udERlc2Ny
aXB0aW9uIGluaXRpYWxEZXNjID0gRm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBGb250
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7
CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3Qg
dGhlIHNpemUgdG8gYWNjb3VudCBmb3IgdGhlIGdlbmVyaWMgZmFtaWx5IGNoYW5nZSBmcm9tIG1v
bm9zcGFjZQogICAgICAgICAgICAgLy8gdG8gbm9uLW1vbm9zcGFjZS4KICAgICAgICAgICAgIGlm
IChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4
ZWREZWZhdWx0U2l6ZSgpKQpAQCAtMzIzMSw3ICszMjMzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIAogICAg
ICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2Ny
aXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0
ZS5zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIEZvbnRGYW1pbHkmIGZpcnN0RmFt
aWx5ID0gZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7CiAgICAgICAgIEZvbnRGYW1pbHkq
IGN1cnJGYW1pbHkgPSAwOwogCkBAIC0zMzA5LDI0ICszMzExLDI0IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAv
LyBzaG9ydGhhbmQgcHJvcGVydGllcwogICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOgog
ICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5jbGVhckJhY2tn
cm91bmRMYXllcnMoKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihD
b2xvcigpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5jbGVhckJhY2tncm91bmRMYXllcnMo
KTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoKSk7
CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5p
bmhlcml0QmFja2dyb3VuZExheWVycygqbV9wYXJlbnRTdHlsZS0+YmFja2dyb3VuZExheWVycygp
KTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihtX3BhcmVudFN0eWxl
LT5iYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+aW5oZXJpdEJh
Y2tncm91bmRMYXllcnMoKnN0YXRlLnBhcmVudFN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkpOwor
ICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihzdGF0ZS5wYXJlbnRT
dHlsZS0+YmFja2dyb3VuZENvbG9yKCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFzazoKICAgICAgICAgaWYgKGlzSW5pdGlhbCkKLSAg
ICAgICAgICAgIG1fc3R5bGUtPmNsZWFyTWFza0xheWVycygpOworICAgICAgICAgICAgc3RhdGUu
c3R5bGUtPmNsZWFyTWFza0xheWVycygpOwogICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCi0g
ICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0TWFza0xheWVycygqbV9wYXJlbnRTdHlsZS0+bWFz
a0xheWVycygpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5pbmhlcml0TWFza0xheWVycygq
c3RhdGUucGFyZW50U3R5bGUtPm1hc2tMYXllcnMoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBj
YXNlIENTU1Byb3BlcnR5Rm9udDoKICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAg
ICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fcGFyZW50U3R5bGUtPmZvbnRE
ZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodChtX3BhcmVu
dFN0eWxlLT5zcGVjaWZpZWRMaW5lSGVpZ2h0KCkpOwotICAgICAgICAgICAgbV9saW5lSGVpZ2h0
VmFsdWUgPSAwOworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9
IHN0YXRlLnBhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIHN0YXRl
LnN0eWxlLT5zZXRMaW5lSGVpZ2h0KHN0YXRlLnBhcmVudFN0eWxlLT5zcGVjaWZpZWRMaW5lSGVp
Z2h0KCkpOworICAgICAgICAgICAgc3RhdGUubGluZUhlaWdodFZhbHVlID0gMDsKICAgICAgICAg
ICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICB9IGVsc2Ug
aWYgKGlzSW5pdGlhbCkgewogICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1l
bnRTZXR0aW5ncygpOwpAQCAtMzMzNSw4ICszMzM3LDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBpbml0aWFsaXplRm9udFN0eWxlKHNldHRpbmdz
KTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZSkgewotICAgICAgICAgICAgbV9z
dHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0g
ICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAgICAgICAgICBzdGF0ZS5zdHls
ZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAg
ICAgICAgICBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSAwOwogCiAgICAgICAgICAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgICAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1
bHRUaGVtZSgpLT5zeXN0ZW1Gb250KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpLCBmb250RGVz
Y3JpcHRpb24pOwpAQCAtMzM1Miw3ICszMzU0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQoKS0+cHJpbnRp
bmcoKSB8fCAhc2V0dGluZ3MtPnNjcmVlbkZvbnRTdWJzdGl0dXRpb25FbmFibGVkKCkpOwogCiAg
ICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSB6b29tIGZhY3Rvci4KLSAgICAgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVj
aWZpZWRTaXplKGRvY3VtZW50KCksIG1fc3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fi
c29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29t
UnVsZXMoKSkpOworICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNp
emUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQoKSwgc3RhdGUuc3R5
bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRp
b24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSkpOwogICAgICAgICAgICAgICAg
IHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ZvbnRWYWx1ZSgpKSB7CkBAIC0zMzcwLDcgKzMzNzIs
NyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgdXBkYXRlRm9udCgpOwogICAgICAgICAgICAg
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBmb250LT5zaXplLmdldCgpKTsKIAot
ICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSBmb250LT5saW5lSGVpZ2h0LmdldCgpOwor
ICAgICAgICAgICAgc3RhdGUubGluZUhlaWdodFZhbHVlID0gZm9udC0+bGluZUhlaWdodC5nZXQo
KTsKIAogICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIGZv
bnQtPmZhbWlseS5nZXQoKSk7CiAgICAgICAgIH0KQEAgLTMzODIsMTEgKzMzODQsMTEgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93OiB7CiAgICAgICAg
IGlmIChpc0luaGVyaXQpIHsKICAgICAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eVRleHRT
aGFkb3cpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fc3R5bGUtPnNldFRleHRTaGFkb3cobV9w
YXJlbnRTdHlsZS0+dGV4dFNoYWRvdygpID8gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoKm1fcGFy
ZW50U3R5bGUtPnRleHRTaGFkb3coKSkpIDogbnVsbHB0cik7Ci0gICAgICAgICAgICByZXR1cm4g
bV9zdHlsZS0+c2V0Qm94U2hhZG93KG1fcGFyZW50U3R5bGUtPmJveFNoYWRvdygpID8gYWRvcHRQ
dHIobmV3IFNoYWRvd0RhdGEoKm1fcGFyZW50U3R5bGUtPmJveFNoYWRvdygpKSkgOiBudWxscHRy
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUtPnNldFRleHRTaGFkb3coc3Rh
dGUucGFyZW50U3R5bGUtPnRleHRTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCpz
dGF0ZS5wYXJlbnRTdHlsZS0+dGV4dFNoYWRvdygpKSkgOiBudWxscHRyKTsKKyAgICAgICAgICAg
IHJldHVybiBzdGF0ZS5zdHlsZS0+c2V0Qm94U2hhZG93KHN0YXRlLnBhcmVudFN0eWxlLT5ib3hT
aGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCpzdGF0ZS5wYXJlbnRTdHlsZS0+Ym94
U2hhZG93KCkpKSA6IG51bGxwdHIpOwogICAgICAgICB9CiAgICAgICAgIGlmIChpc0luaXRpYWwg
fHwgcHJpbWl0aXZlVmFsdWUpIC8vIGluaXRpYWwgfCBub25lCi0gICAgICAgICAgICByZXR1cm4g
aWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93ID8gbV9zdHlsZS0+c2V0VGV4dFNoYWRvdyhudWxs
cHRyKSA6IG1fc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVy
biBpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cgPyBzdGF0ZS5zdHlsZS0+c2V0VGV4dFNoYWRv
dyhudWxscHRyKSA6IHN0YXRlLnN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiAKICAgICAg
ICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMz
OTYsMjkgKzMzOTgsMjkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICghY3VyclZhbHVl
LT5pc1NoYWRvd1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1ZhbHVlKj4oY3VyclZhbHVl
KTsKLSAgICAgICAgICAgIGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxl
KCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICBpbnQgeSA9
IGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUs
IHpvb21GYWN0b3IpOwotICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+
Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9v
bUZhY3RvcikgOiAwOwotICAgICAgICAgICAgaW50IHNwcmVhZCA9IGl0ZW0tPnNwcmVhZCA/IGl0
ZW0tPnNwcmVhZC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHls
ZSwgem9vbUZhY3RvcikgOiAwOworICAgICAgICAgICAgaW50IHggPSBpdGVtLT54LT5jb21wdXRl
TGVuZ3RoPGludD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpv
b21GYWN0b3IpOworICAgICAgICAgICAgaW50IHkgPSBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGlu
dD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3Ip
OworICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0
ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCB6
b29tRmFjdG9yKSA6IDA7CisgICAgICAgICAgICBpbnQgc3ByZWFkID0gaXRlbS0+c3ByZWFkID8g
aXRlbS0+c3ByZWFkLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRl
LnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpIDogMDsKICAgICAgICAgICAgIFNoYWRvd1N0
eWxlIHNoYWRvd1N0eWxlID0gaXRlbS0+c3R5bGUgJiYgaXRlbS0+c3R5bGUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVJbnNldCA/IEluc2V0IDogTm9ybWFsOwogICAgICAgICAgICAgQ29sb3IgY29s
b3I7CiAgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCiAgICAgICAgICAgICAgICAgY29sb3Ig
PSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7Ci0gICAgICAgICAg
ICBlbHNlIGlmIChtX3N0eWxlKQotICAgICAgICAgICAgICAgIGNvbG9yID0gbV9zdHlsZS0+Y29s
b3IoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlLnN0eWxlKQorICAgICAgICAgICAgICAg
IGNvbG9yID0gc3RhdGUuc3R5bGUtPmNvbG9yKCk7CiAKICAgICAgICAgICAgIE93blB0cjxTaGFk
b3dEYXRhPiBzaGFkb3dEYXRhID0gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoSW50UG9pbnQoeCwg
eSksIGJsdXIsIHNwcmVhZCwgc2hhZG93U3R5bGUsIGlkID09IENTU1Byb3BlcnR5V2Via2l0Qm94
U2hhZG93LCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCkpOwog
ICAgICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdykKLSAgICAgICAgICAg
ICAgICBtX3N0eWxlLT5zZXRUZXh0U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4
KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5Cisg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFRleHRTaGFkb3coc2hhZG93RGF0YS5yZWxl
YXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUg
Zmlyc3QgZW50cnkKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRCb3hTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0
aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKKyAgICAgICAgICAgICAgICBz
dGF0ZS5zdHlsZS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkp
OyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm94UmVmbGVjdDogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChib3hSZWZs
ZWN0LCBCb3hSZWZsZWN0KQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUpIHsKLSAgICAgICAg
ICAgIG1fc3R5bGUtPnNldEJveFJlZmxlY3QoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3hSZWZsZWN0
KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldEJveFJlZmxlY3QoUmVuZGVyU3R5bGU6
OmluaXRpYWxCb3hSZWZsZWN0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
QEAgLTM0MjksMTMgKzM0MzEsMTMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgUmVmUHRyPFN0eWxl
UmVmbGVjdGlvbj4gcmVmbGVjdGlvbiA9IFN0eWxlUmVmbGVjdGlvbjo6Y3JlYXRlKCk7CiAgICAg
ICAgIHJlZmxlY3Rpb24tPnNldERpcmVjdGlvbigqcmVmbGVjdFZhbHVlLT5kaXJlY3Rpb24oKSk7
CiAgICAgICAgIGlmIChyZWZsZWN0VmFsdWUtPm9mZnNldCgpKQotICAgICAgICAgICAgcmVmbGVj
dGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCktPmNvbnZlcnRUb0xlbmd0aDxG
aXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29u
dmVyc2lvbj4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSk7CisgICAg
ICAgICAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVjdFZhbHVlLT5vZmZzZXQoKS0+Y29u
dmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8
IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1l
bnRTdHlsZSwgem9vbUZhY3RvcikpOwogICAgICAgICBOaW5lUGllY2VJbWFnZSBtYXNrOwogICAg
ICAgICBtYXNrLnNldE1hc2tEZWZhdWx0cygpOwogICAgICAgICBtX3N0eWxlTWFwLm1hcE5pbmVQ
aWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUtPm1hc2soKSwgbWFzayk7CiAgICAgICAgIHJlZmxl
Y3Rpb24tPnNldE1hc2sobWFzayk7CiAKLSAgICAgICAgbV9zdHlsZS0+c2V0Qm94UmVmbGVjdChy
ZWZsZWN0aW9uLnJlbGVhc2UoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRCb3hSZWZsZWN0
KHJlZmxlY3Rpb24ucmVsZWFzZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNl
IENTU1Byb3BlcnR5U3JjOiAvLyBPbmx5IHVzZWQgaW4gQGZvbnQtZmFjZSBydWxlcy4KQEAgLTM0
NDQsMjkgKzM0NDYsMjkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlOgogICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0g
ICAgICAgICAgICBtX3N0eWxlLT5zZXRDb2x1bW5SdWxlQ29sb3IobV9wYXJlbnRTdHlsZS0+Y29s
dW1uUnVsZUNvbG9yKCkuaXNWYWxpZCgpID8gbV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9y
KCkgOiBtX3BhcmVudFN0eWxlLT5jb2xvcigpKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldENv
bHVtblJ1bGVTdHlsZShtX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlU3R5bGUoKSk7Ci0gICAgICAg
ICAgICBtX3N0eWxlLT5zZXRDb2x1bW5SdWxlV2lkdGgobV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVs
ZVdpZHRoKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbHVtblJ1bGVDb2xvcihz
dGF0ZS5wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkuaXNWYWxpZCgpID8gc3RhdGUucGFy
ZW50U3R5bGUtPmNvbHVtblJ1bGVDb2xvcigpIDogc3RhdGUucGFyZW50U3R5bGUtPmNvbG9yKCkp
OworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbHVtblJ1bGVTdHlsZShzdGF0ZS5wYXJl
bnRTdHlsZS0+Y29sdW1uUnVsZVN0eWxlKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNl
dENvbHVtblJ1bGVXaWR0aChzdGF0ZS5wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZVdpZHRoKCkpOwog
ICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIG1fc3R5bGUtPnJlc2V0
Q29sdW1uUnVsZSgpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnJlc2V0Q29sdW1uUnVsZSgp
OwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWU6CiAg
ICAgICAgIGlmICghaXNJbmhlcml0KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0
eWxlLT5zZXRNYXJxdWVlRGlyZWN0aW9uKG1fcGFyZW50U3R5bGUtPm1hcnF1ZWVEaXJlY3Rpb24o
KSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQobV9wYXJlbnRTdHlsZS0+
bWFycXVlZUluY3JlbWVudCgpKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKG1f
cGFyZW50U3R5bGUtPm1hcnF1ZWVTcGVlZCgpKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVl
ZUxvb3BDb3VudChtX3BhcmVudFN0eWxlLT5tYXJxdWVlTG9vcENvdW50KCkpOwotICAgICAgICBt
X3N0eWxlLT5zZXRNYXJxdWVlQmVoYXZpb3IobV9wYXJlbnRTdHlsZS0+bWFycXVlZUJlaGF2aW9y
KCkpOworICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZURpcmVjdGlvbihzdGF0ZS5wYXJl
bnRTdHlsZS0+bWFycXVlZURpcmVjdGlvbigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1h
cnF1ZWVJbmNyZW1lbnQoc3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVJbmNyZW1lbnQoKSk7Cisg
ICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlU3BlZWQoc3RhdGUucGFyZW50U3R5bGUtPm1h
cnF1ZWVTcGVlZCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQo
c3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVMb29wQ291bnQoKSk7CisgICAgICAgIHN0YXRlLnN0
eWxlLT5zZXRNYXJxdWVlQmVoYXZpb3Ioc3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVCZWhhdmlv
cigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVl
UmVwZXRpdGlvbjogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChtYXJxdWVl
TG9vcENvdW50LCBNYXJxdWVlTG9vcENvdW50KQogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVl
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1
ZWVMb29wQ291bnQoLTEpOyAvLyAtMSBtZWFucyByZXBlYXQgZm9yZXZlci4KKyAgICAgICAgICAg
IHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0
IGZvcmV2ZXIuCiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKQot
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1ZS0+
Z2V0SW50VmFsdWUoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUxvb3BD
b3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTcGVlZDogewpAQCAtMzQ3Niwx
OSArMzQ3OCwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBpZiAoaW50IGlkZW50ID0gcHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAoaWRlbnQpIHsKICAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbG93OgotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dE1hcnF1ZWVTcGVlZCg1MDApOyAvLyA1MDAgbXNlYy4KKyAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZS0+c2V0TWFycXVlZVNwZWVkKDUwMCk7IC8vIDUwMCBtc2VjLgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoODUpOyAvLyA4NW1zZWMuIFRoZSBXaW5JRSBkZWZh
dWx0LgorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlU3BlZWQoODUpOyAv
LyA4NW1zZWMuIFRoZSBXaW5JRSBkZWZhdWx0LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhc3Q6Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0
TWFycXVlZVNwZWVkKDEwKTsgLy8gMTBtc2VjLiBTdXBlciBmYXN0LgorICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlU3BlZWQoMTApOyAvLyAxMG1zZWMuIFN1cGVyIGZhc3Qu
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUtPmlzVGltZSgpKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFy
cXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxpbnQsIENTU1ByaW1pdGl2ZVZh
bHVlOjpNaWxsaXNlY29uZHM+KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1
ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZVRpbWU8aW50LCBDU1NQcmltaXRpdmVWYWx1
ZTo6TWlsbGlzZWNvbmRzPigpKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlz
TnVtYmVyKCkpIC8vIEZvciBzY3JvbGxhbW91bnQgc3VwcG9ydC4KLSAgICAgICAgICAgIG1fc3R5
bGUtPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAg
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
bnRWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFycXVlZUluY3JlbWVudDogewpAQCAtMzQ5OCwxOSArMzUwMCwxOSBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAg
ICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVTbWFsbDoKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5j
cmVtZW50KExlbmd0aCgxLCBGaXhlZCkpOyAvLyAxcHguCisgICAgICAgICAgICAgICAgc3RhdGUu
c3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDEsIEZpeGVkKSk7IC8vIDFweC4KICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0g
ICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoNiwgRml4
ZWQpKTsgLy8gNnB4LiBUaGUgV2luSUUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoNiwgRml4ZWQpKTsgLy8gNnB4LiBUaGUg
V2luSUUgZGVmYXVsdC4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVMYXJnZToKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVt
ZW50KExlbmd0aCgzNiwgRml4ZWQpKTsgLy8gMzZweC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBMZW5ndGggbWFycXVlZUxlbmd0aCA9IGNvbnZlcnRUb0ludExlbmd0aChwcmlt
aXRpdmVWYWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKKyAgICAgICAgICAgIExl
bmd0aCBtYXJxdWVlTGVuZ3RoID0gY29udmVydFRvSW50TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLCBz
dGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSk7CiAgICAgICAgICAgICBp
ZiAoIW1hcnF1ZWVMZW5ndGguaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRNYXJxdWVlSW5jcmVtZW50KG1hcnF1ZWVMZW5ndGgpOworICAgICAgICAgICAgICAgIHN0
YXRlLnN0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KG1hcnF1ZWVMZW5ndGgpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNTE5LDExICszNTIxLDExIEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0g
ICAgICAgICAgICBtX3N0eWxlLT5zZXRMb2NhbGUobnVsbEF0b20pOworICAgICAgICAgICAgc3Rh
dGUuc3R5bGUtPnNldExvY2FsZShudWxsQXRvbSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1fc3R5bGUtPnNldExvY2FsZShwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7Ci0g
ICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVz
Y3JpcHRpb24oKTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNjcmlwdChsb2NhbGVUb1Nj
cmlwdENvZGVGb3JGb250U2VsZWN0aW9uKG1fc3R5bGUtPmxvY2FsZSgpKSk7CisgICAgICAgICAg
ICBzdGF0ZS5zdHlsZS0+c2V0TG9jYWxlKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgp
KTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnN0eWxl
LT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNjcmlwdChs
b2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKHN0YXRlLnN0eWxlLT5sb2NhbGUoKSkp
OwogICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTM1NDIsNyArMzU0NCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9u
cyhSZW5kZXJTdHlsZTo6bm9uZURhc2hib2FyZFJlZ2lvbnMoKSk7CisgICAgICAgICAgICBzdGF0
ZS5zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9ucyhSZW5kZXJTdHlsZTo6bm9uZURhc2hib2FyZFJl
Z2lvbnMoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzU1MiwxMCAr
MzU1NCwxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogCiAgICAgICAgIERhc2hib2FyZFJlZ2lvbiogZmlyc3Qg
PSByZWdpb247CiAgICAgICAgIHdoaWxlIChyZWdpb24pIHsKLSAgICAgICAgICAgIExlbmd0aCB0
b3AgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT50b3AoKSwgc3R5bGUoKSwgbV9yb290RWxl
bWVudFN0eWxlKTsKLSAgICAgICAgICAgIExlbmd0aCByaWdodCA9IGNvbnZlcnRUb0ludExlbmd0
aChyZWdpb24tPnJpZ2h0KCksIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAgICAg
ICAgICBMZW5ndGggYm90dG9tID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+Ym90dG9tKCks
IHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAgICAgICAgICBMZW5ndGggbGVmdCA9
IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmxlZnQoKSwgc3R5bGUoKSwgbV9yb290RWxlbWVu
dFN0eWxlKTsKKyAgICAgICAgICAgIExlbmd0aCB0b3AgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVn
aW9uLT50b3AoKSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpOwor
ICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+cmln
aHQoKSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpOworICAgICAg
ICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmJvdHRvbSgp
LCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSk7CisgICAgICAgICAg
ICBMZW5ndGggbGVmdCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmxlZnQoKSwgc3RhdGUu
c3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpOwogCiAgICAgICAgICAgICBpZiAo
dG9wLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICAgICAgdG9wID0gTGVuZ3RoKCk7CkBAIC0z
NTY3LDEzICszNTY5LDEzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgbGVmdCA9IExl
bmd0aCgpOwogCiAgICAgICAgICAgICBpZiAocmVnaW9uLT5tX2lzQ2lyY2xlKQotICAgICAgICAg
ICAgICAgIG1fc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hib2FyZFJlZ2lvbjo6
Q2lyY2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9u
ID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+
c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpDaXJjbGUsIHJlZ2lvbi0+
bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBmYWxz
ZSA6IHRydWUpOwogICAgICAgICAgICAgZWxzZSBpZiAocmVnaW9uLT5tX2lzUmVjdGFuZ2xlKQot
ICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hib2Fy
ZFJlZ2lvbjo6UmVjdGFuZ2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRvbSwg
bGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKKyAgICAgICAgICAgICAgICBz
dGF0ZS5zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpSZWN0
YW5nbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24g
PT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwogICAgICAgICAgICAgcmVnaW9uID0gcmVnaW9uLT5t
X25leHQuZ2V0KCk7CiAgICAgICAgIH0KIAotICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkt
PnNldEhhc0Fubm90YXRlZFJlZ2lvbnModHJ1ZSk7CisgICAgICAgIHN0YXRlLmVsZW1lbnQtPmRv
Y3VtZW50KCktPnNldEhhc0Fubm90YXRlZFJlZ2lvbnModHJ1ZSk7CiAKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTM1ODIsOCArMzU4NCw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEFwcFJlZ2lvbjogewogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlIHx8
ICFwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgbV9zdHlsZS0+c2V0RHJhZ2dhYmxlUmVnaW9uTW9kZShwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSA9PSBDU1NWYWx1ZURyYWcgPyBEcmFnZ2FibGVSZWdpb25EcmFnIDogRHJhZ2dhYmxlUmVn
aW9uTm9EcmFnKTsKLSAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRIYXNBbm5vdGF0
ZWRSZWdpb25zKHRydWUpOworICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0RHJhZ2dhYmxlUmVnaW9u
TW9kZShwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZURyYWcgPyBEcmFnZ2Fi
bGVSZWdpb25EcmFnIDogRHJhZ2dhYmxlUmVnaW9uTm9EcmFnKTsKKyAgICAgICAgc3RhdGUuZWxl
bWVudC0+ZG9jdW1lbnQoKS0+c2V0SGFzQW5ub3RhdGVkUmVnaW9ucyh0cnVlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzU5OSwyMSArMzYwMSwyMSBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgICAgICAgICAgICAgIHJlc3VsdCAqPSAzOwogICAgICAgICAgICAgZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVUaGljaykKICAgICAgICAgICAgICAg
ICByZXN1bHQgKj0gNTsKLSAgICAgICAgICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0aDxm
bG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAg
ICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUuZ2V0KCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHdpZHRoID0gcHJpbWl0
aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHls
ZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICB3aWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21w
dXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHls
ZSwgem9vbUZhY3Rvcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBt
X3N0eWxlLT5zZXRUZXh0U3Ryb2tlV2lkdGgod2lkdGgpOworICAgICAgICBzdGF0ZS5zdHlsZS0+
c2V0VGV4dFN0cm9rZVdpZHRoKHdpZHRoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtOiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklU
X0FORF9JTklUSUFMKHRyYW5zZm9ybSwgVHJhbnNmb3JtKTsKICAgICAgICAgVHJhbnNmb3JtT3Bl
cmF0aW9ucyBvcGVyYXRpb25zOwotICAgICAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZh
bHVlLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIG9wZXJhdGlvbnMpOwotICAgICAgICBt
X3N0eWxlLT5zZXRUcmFuc2Zvcm0ob3BlcmF0aW9ucyk7CisgICAgICAgIGNyZWF0ZVRyYW5zZm9y
bU9wZXJhdGlvbnModmFsdWUsIHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0
eWxlLCBvcGVyYXRpb25zKTsKKyAgICAgICAgc3RhdGUuc3R5bGUtPnNldFRyYW5zZm9ybShvcGVy
YXRpb25zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0UGVyc3BlY3RpdmU6IHsKQEAgLTM2MjMsMzQgKzM2MjUsMzQgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRQZXJzcGVjdGl2
ZSgwKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRQZXJzcGVjdGl2ZSgwKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGZsb2F0IHBlcnNwZWN0aXZlVmFs
dWU7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkKLSAgICAgICAgICAg
IHBlcnNwZWN0aXZlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4o
c3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHBl
cnNwZWN0aXZlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3Rh
dGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwogICAg
ICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgewogICAgICAgICAgICAg
Ly8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRyZWF0IHZhbHVlbGVzcyBudW1iZXJzIGFz
IHB4LgotICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUFgpLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5
bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9IENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUFgpLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHlsZS5n
ZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChwZXJzcGVjdGl2ZVZhbHVlID49
IDAuMGYpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRQZXJzcGVjdGl2ZShwZXJzcGVjdGl2ZVZh
bHVlKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRQZXJzcGVjdGl2ZShwZXJzcGVjdGl2
ZVZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0QW5pbWF0aW9uOgogICAgICAgICBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgbV9zdHls
ZS0+Y2xlYXJBbmltYXRpb25zKCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJBbmlt
YXRpb25zKCk7CiAgICAgICAgIGVsc2UgaWYgKGlzSW5oZXJpdCkKLSAgICAgICAgICAgIG1fc3R5
bGUtPmluaGVyaXRBbmltYXRpb25zKG1fcGFyZW50U3R5bGUtPmFuaW1hdGlvbnMoKSk7CisgICAg
ICAgICAgICBzdGF0ZS5zdHlsZS0+aW5oZXJpdEFuaW1hdGlvbnMoc3RhdGUucGFyZW50U3R5bGUt
PmFuaW1hdGlvbnMoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VHJhbnNpdGlvbjoKICAgICAgICAgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIG1fc3R5
bGUtPmNsZWFyVHJhbnNpdGlvbnMoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5jbGVhclRy
YW5zaXRpb25zKCk7CiAgICAgICAgIGVsc2UgaWYgKGlzSW5oZXJpdCkKLSAgICAgICAgICAgIG1f
c3R5bGUtPmluaGVyaXRUcmFuc2l0aW9ucyhtX3BhcmVudFN0eWxlLT50cmFuc2l0aW9ucygpKTsK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5pbmhlcml0VHJhbnNpdGlvbnMoc3RhdGUucGFyZW50
U3R5bGUtPnRyYW5zaXRpb25zKCkpOwogICAgICAgICByZXR1cm47CiAjaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6IHsK
QEAgLTM2NTksNyArMzY2MSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICBDb2xvciBjb2wgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1
ZSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldFRhcEhpZ2hsaWdodENvbG9yKGNvbCk7CisgICAgICAg
IHN0YXRlLnN0eWxlLT5zZXRUYXBIaWdobGlnaHRDb2xvcihjb2wpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogI2VuZGlmCkBAIC0zNjY4LDcgKzM2NzAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh1c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nLCBV
c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKTsKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBtX3N0eWxlLT5zZXRVc2VUb3VjaE92ZXJmbG93
U2Nyb2xsaW5nKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlVG91Y2gpOwor
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZyhwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVRvdWNoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICNlbmRpZgpAQCAtMzcxMSw3ICszNzEzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWF4TG9naWNhbFdpZHRoOgogICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXhMb2dpY2FsSGVpZ2h0OgogICAgIHsKLSAgICAgICAgQ1NTUHJvcGVydHlJRCBuZXdJ
ZCA9IENTU1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShpZCwgbV9zdHls
ZS0+ZGlyZWN0aW9uKCksIG1fc3R5bGUtPndyaXRpbmdNb2RlKCkpOworICAgICAgICBDU1NQcm9w
ZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5
KGlkLCBzdGF0ZS5zdHlsZS0+ZGlyZWN0aW9uKCksIHN0YXRlLnN0eWxlLT53cml0aW5nTW9kZSgp
KTsKICAgICAgICAgQVNTRVJUKG5ld0lkICE9IGlkKTsKICAgICAgICAgcmV0dXJuIGFwcGx5UHJv
cGVydHkobmV3SWQsIHZhbHVlKTsKICAgICB9CkBAIC0zNzQ2LDkgKzM3NDgsOCBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgICAgICAgICAgc2V0V3JpdGluZ01vZGUoKnByaW1pdGl2ZVZhbHVlKTsKIAogICAg
ICAgICAvLyBGSVhNRTogSXQgaXMgbm90IG9rIHRvIG1vZGlmeSBkb2N1bWVudCBzdGF0ZSB3aGls
ZSBhcHBseWluZyBzdHlsZS4KLSAgICAgICAgaWYgKG1fZWxlbWVudCAmJiBtX2VsZW1lbnQgPT0g
bV9lbGVtZW50LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKLSAgICAgICAgICAgIG1f
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCh0
cnVlKTsKLQorICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCAmJiBzdGF0ZS5lbGVtZW50ID09IHN0
YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQorICAgICAgICAgICAg
c3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxl
bWVudCh0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzc2NCw3ICszNzY1LDcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUJveENvbnRhaW46
IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobGluZUJveENvbnRhaW4sIExp
bmVCb3hDb250YWluKQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5z
ZXRMaW5lQm94Q29udGFpbihMaW5lQm94Q29udGFpbk5vbmUpOworICAgICAgICAgICAgc3RhdGUu
c3R5bGUtPnNldExpbmVCb3hDb250YWluKExpbmVCb3hDb250YWluTm9uZSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzc3MiwyMSArMzc3MywyMSBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIENTU0xpbmVCb3hDb250YWluVmFsdWUq
IGxpbmVCb3hDb250YWluVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NMaW5lQm94Q29udGFpblZhbHVl
Kj4odmFsdWUpOwotICAgICAgICBtX3N0eWxlLT5zZXRMaW5lQm94Q29udGFpbihsaW5lQm94Q29u
dGFpblZhbHVlLT52YWx1ZSgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUtPnNldExpbmVCb3hDb250
YWluKGxpbmVCb3hDb250YWluVmFsdWUtPnZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgLy8gQ1NTIEZvbnRzIE1vZHVsZSBMZXZlbCAzCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEZvbnRGZWF0dXJlU2V0dGluZ3M6IHsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
ICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKSB7Ci0gICAg
ICAgICAgICBzZXRGb250RGVzY3JpcHRpb24obV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkubWFr
ZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygpKTsKKyAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlv
bihzdGF0ZS5zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkubWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5n
cygpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghdmFs
dWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwor
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpOwogICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2Fz
dDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CiAgICAgICAgIFJlZlB0cjxGb250RmVhdHVyZVNldHRp
bmdzPiBzZXR0aW5ncyA9IEZvbnRGZWF0dXJlU2V0dGluZ3M6OmNyZWF0ZSgpOwogICAgICAgICBp
bnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7CkBAIC0zODA2LDIzICszODA3LDIzIEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZpbHRlcjogewogICAgICAgICBIQU5ETEVf
SU5IRVJJVF9BTkRfSU5JVElBTChmaWx0ZXIsIEZpbHRlcik7CiAgICAgICAgIEZpbHRlck9wZXJh
dGlvbnMgb3BlcmF0aW9uczsKLSAgICAgICAgaWYgKGNyZWF0ZUZpbHRlck9wZXJhdGlvbnModmFs
dWUsIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgb3BlcmF0aW9ucykpCi0gICAgICAgICAg
ICBtX3N0eWxlLT5zZXRGaWx0ZXIob3BlcmF0aW9ucyk7CisgICAgICAgIGlmIChjcmVhdGVGaWx0
ZXJPcGVyYXRpb25zKHZhbHVlLCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRT
dHlsZSwgb3BlcmF0aW9ucykpCisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0RmlsdGVyKG9w
ZXJhdGlvbnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEdyaWRDb2x1bW5zOiB7CiAgICAgICAgIFZlY3RvcjxHcmlkVHJhY2tTaXpl
PiB0cmFja1NpemVzOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRy
YWNrU2l6ZXMsIHRoaXMpKQorICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUs
IHRyYWNrU2l6ZXMsIHN0YXRlKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHls
ZS0+c2V0R3JpZENvbHVtbnModHJhY2tTaXplcyk7CisgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRH
cmlkQ29sdW1ucyh0cmFja1NpemVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0R3JpZFJvd3M6IHsKICAgICAgICAgVmVjdG9yPEdyaWRUcmFja1Np
emU+IHRyYWNrU2l6ZXM7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwg
dHJhY2tTaXplcywgdGhpcykpCisgICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1
ZSwgdHJhY2tTaXplcywgc3RhdGUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0
eWxlLT5zZXRHcmlkUm93cyh0cmFja1NpemVzKTsKKyAgICAgICAgc3RhdGUuc3R5bGUtPnNldEdy
aWRSb3dzKHRyYWNrU2l6ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zODMwLDE0
ICszODMxLDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIEdyaWRQb3NpdGlvbiBjb2x1bW47CiAg
ICAgICAgIGlmICghY3JlYXRlR3JpZFBvc2l0aW9uKHZhbHVlLCBjb2x1bW4pKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRHcmlkSXRlbUNvbHVtbihjb2x1bW4pOwor
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0R3JpZEl0ZW1Db2x1bW4oY29sdW1uKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZFJvdzogewogICAg
ICAgICBHcmlkUG9zaXRpb24gcm93OwogICAgICAgICBpZiAoIWNyZWF0ZUdyaWRQb3NpdGlvbih2
YWx1ZSwgcm93KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0R3Jp
ZEl0ZW1Sb3cocm93KTsKKyAgICAgICAgc3RhdGUuc3R5bGUtPnNldEdyaWRJdGVtUm93KHJvdyk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gVGhlc2UgcHJvcGVydGllcyBhcmUgaW1w
bGVtZW50ZWQgaW4gdGhlIFN0eWxlQnVpbGRlciBsb29rdXAgdGFibGUuCkBAIC00MTU5LDE0ICs0
MTYwLDE0IEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQ
ZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvCiB7CiAgICAgUmVmUHRyPFN0eWxlSW1h
Z2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKCk7CiAgICAgaWYgKGltYWdl
ICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICBtX3BlbmRpbmdJbWFnZVByb3Bl
cnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdl
UHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFz
ZSgpOwogfQogCiBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRl
ZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZUdlbmVy
YXRvclZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzUGVuZGluZygpKSB7Ci0gICAg
ICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICAg
ICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOwog
ICAgICAgICByZXR1cm4gU3R5bGVQZW5kaW5nSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7CiAgICAgfQog
ICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUodmFsdWUpOwpAQCAtNDE3Nyw3
ICs0MTc4LDcgQEAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzZXRPclBl
bmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXIKIHsKICAgICBSZWZQdHI8U3R5bGVJ
bWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2VTZXQoZG9jdW1lbnQoKSk7
CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICBtX3Bl
bmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIG1fc3Rh
dGUucGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1
cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogI2VuZGlmCkBAIC00MTg2LDE4ICs0MTg3LDIwIEBAIFBh
c3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvCiB7CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0g
dmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKGRvY3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAm
JiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0
aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVBy
b3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2Uo
KTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KCkKIHsK
LSAgICBpZiAobV9zdHlsZS0+dGV4dFNpemVBZGp1c3QoKSkKKyAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSBtX3N0YXRlLnN0eWxlLmdldCgpOworCisgICAgaWYgKHN0eWxlLT50ZXh0U2l6ZUFkanVz
dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2Ny
aXB0aW9uKG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKTsKKyAgICBGb250RGVzY3JpcHRpb24g
bmV3Rm9udERlc2NyaXB0aW9uKHN0eWxlLT5mb250RGVzY3JpcHRpb24oKSk7CiAgICAgbmV3Rm9u
dERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShuZXdGb250RGVzY3JpcHRpb24uc3BlY2lmaWVk
U2l6ZSgpKTsKLSAgICBtX3N0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0
aW9uKTsKKyAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7
CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxl
KiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQpAQCAtNDI2MiwxNSArNDI2NSwxNSBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUoU2V0dGluZ3MqIHNldHRp
bmdzKQogICAgIH0KICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVN
ZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKICAgICBzZXRGb250U2l6ZShmb250RGVzY3Jp
cHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZmFs
c2UpKTsKLSAgICBtX3N0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGlu
ZUhlaWdodCgpKTsKLSAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAgbV9zdGF0ZS5zdHls
ZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAg
bV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSAwOwogICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQogewogICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRD
b21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQoKSwg
bV9zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNpemUsIHVz
ZVNWR1pvb21SdWxlcygpKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShn
ZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBtX3N0YXRlLnN0eWxl
LmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwgdXNlU1ZHWm9v
bVJ1bGVzKCkpKTsKIH0KIAogZmxvYXQgU3R5bGVSZXNvbHZlcjo6Z2V0Q29tcHV0ZWRTaXplRnJv
bVNwZWNpZmllZFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBSZW5kZXJTdHlsZSogc3R5bGUsIGJv
b2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wgdXNlU1ZHWm9vbVJ1
bGVzKQpAQCAtNDQ3MywyMCArNDQ3NiwyMSBAQCBDb2xvciBTdHlsZVJlc29sdmVyOjpjb2xvckZy
b21QcmltaXRpdmVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUsIGJvb2wgZm9yVgogICAg
IGlmICh2YWx1ZS0+aXNSR0JDb2xvcigpKQogICAgICAgICByZXR1cm4gQ29sb3IodmFsdWUtPmdl
dFJHQkEzMlZhbHVlKCkpOwogCisgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAg
ICBpbnQgaWRlbnQgPSB2YWx1ZS0+Z2V0SWRlbnQoKTsKICAgICBzd2l0Y2ggKGlkZW50KSB7CiAg
ICAgY2FzZSAwOgogICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlV2Vi
a2l0VGV4dDoKLSAgICAgICAgcmV0dXJuIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dGV4dENvbG9y
KCk7CisgICAgICAgIHJldHVybiBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT50ZXh0Q29sb3Io
KTsKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0TGluazoKLSAgICAgICAgcmV0dXJuIChtX2VsZW1l
bnQtPmlzTGluaygpICYmIGZvclZpc2l0ZWRMaW5rKSA/IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+
dmlzaXRlZExpbmtDb2xvcigpIDogbV9lbGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsK
KyAgICAgICAgcmV0dXJuIChzdGF0ZS5lbGVtZW50LT5pc0xpbmsoKSAmJiBmb3JWaXNpdGVkTGlu
aykgPyBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT52aXNpdGVkTGlua0NvbG9yKCkgOiBzdGF0
ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlV2Vi
a2l0QWN0aXZlbGluazoKLSAgICAgICAgcmV0dXJuIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+YWN0
aXZlTGlua0NvbG9yKCk7CisgICAgICAgIHJldHVybiBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgp
LT5hY3RpdmVMaW5rQ29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0Rm9jdXNSaW5nQ29s
b3I6CiAgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6Zm9jdXNSaW5nQ29sb3IoKTsKICAgICBj
YXNlIENTU1ZhbHVlQ3VycmVudGNvbG9yOgotICAgICAgICByZXR1cm4gbV9zdHlsZS0+Y29sb3Io
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlLT5jb2xvcigpOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIHJldHVybiBjb2xvckZvckNTU1ZhbHVlKGlkZW50KTsKICAgICB9CkBAIC00ODIwLDE3
ICs0ODI0LDE4IEBAIHN0YXRpYyBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZmlsdGVy
T3BlcmF0aW9uRm9yVHlwZShXZWJLaXRDU1NGaWx0ZXJWYWx1CiAjaWYgRU5BQkxFKENTU19GSUxU
RVJTKSAmJiBFTkFCTEUoU1ZHKQogdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0Rv
Y3VtZW50cygpCiB7Ci0gICAgaWYgKCFtX3N0eWxlLT5oYXNGaWx0ZXIoKSB8fCBtX3BlbmRpbmdT
VkdEb2N1bWVudHMuaXNFbXB0eSgpKQorICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAg
aWYgKCFzdGF0ZS5zdHlsZS0+aGFzRmlsdGVyKCkgfHwgc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50
cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENhY2hlZFJlc291cmNlTG9hZGVy
KiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVz
b3VyY2VMb2FkZXIoKTsKLSAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmls
dGVyT3BlcmF0aW9ucyA9IG1fc3R5bGUtPm11dGFibGVGaWx0ZXIoKS5vcGVyYXRpb25zKCk7Cisg
ICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gc3RhdGUuZWxl
bWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKKyAgICBWZWN0b3I8UmVm
UHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9IHN0YXRlLnN0eWxlLT5t
dXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBmaWx0ZXJPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxGaWx0ZXJP
cGVyYXRpb24+IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlck9wZXJhdGlvbnMuYXQoaSk7CiAgICAg
ICAgIGlmIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSA9PSBGaWx0ZXJPcGVy
YXRpb246OlJFRkVSRU5DRSkgewogICAgICAgICAgICAgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9u
KiByZWZlcmVuY2VGaWx0ZXIgPSBzdGF0aWNfY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24q
PihmaWx0ZXJPcGVyYXRpb24uZ2V0KCkpOwogCi0gICAgICAgICAgICBXZWJLaXRDU1NTVkdEb2N1
bWVudFZhbHVlKiB2YWx1ZSA9IG1fcGVuZGluZ1NWR0RvY3VtZW50cy5nZXQocmVmZXJlbmNlRmls
dGVyKS5nZXQoKTsKKyAgICAgICAgICAgIFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWUqIHZhbHVl
ID0gc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cy5nZXQocmVmZXJlbmNlRmlsdGVyKS5nZXQoKTsK
ICAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICBDYWNoZWRTVkdEb2N1bWVudCogY2FjaGVkRG9jdW1lbnQgPSB2YWx1ZS0+bG9hZChj
YWNoZWRSZXNvdXJjZUxvYWRlcik7CkBAIC00ODQxLDcgKzQ4NDYsNyBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCkKICAgICAgICAgICAgIHJlZmVyZW5jZUZp
bHRlci0+c2V0Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UoYWRvcHRQdHIobmV3IENhY2hlZFNW
R0RvY3VtZW50UmVmZXJlbmNlKGNhY2hlZERvY3VtZW50KSkpOwogICAgICAgICB9CiAgICAgfQot
ICAgIG1fcGVuZGluZ1NWR0RvY3VtZW50cy5jbGVhcigpOworICAgIHN0YXRlLnBlbmRpbmdTVkdE
b2N1bWVudHMuY2xlYXIoKTsKIH0KICNlbmRpZgogCkBAIC00ODU3LDE4ICs0ODYyLDE4IEBAIFN0
eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21W
YWx1ZShXZWJLaXRDU1NTaGFkZXJWCiB7CiAgICAgU3R5bGVTaGFkZXIqIHNoYWRlciA9IHZhbHVl
LT5jYWNoZWRPclBlbmRpbmdTaGFkZXIoKTsKICAgICBpZiAoc2hhZGVyICYmIHNoYWRlci0+aXNQ
ZW5kaW5nU2hhZGVyKCkpCi0gICAgICAgIG1faGFzUGVuZGluZ1NoYWRlcnMgPSB0cnVlOworICAg
ICAgICBtX3N0YXRlLmhhc1BlbmRpbmdTaGFkZXJzID0gdHJ1ZTsKICAgICByZXR1cm4gc2hhZGVy
OwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycygpCiB7Ci0gICAg
aWYgKCFtX3N0eWxlLT5oYXNGaWx0ZXIoKSB8fCAhbV9oYXNQZW5kaW5nU2hhZGVycykKKyAgICBp
ZiAoIW1fc3RhdGUuc3R5bGUtPmhhc0ZpbHRlcigpIHx8ICFtX3N0YXRlLmhhc1BlbmRpbmdTaGFk
ZXJzKQogICAgICAgICByZXR1cm47CiAKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVk
UmVzb3VyY2VMb2FkZXIgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9h
ZGVyKCk7CisgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0g
bV9zdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogCi0g
ICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBt
X3N0eWxlLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOworICAgIFZlY3RvcjxSZWZQdHI8
RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJPcGVyYXRpb25zID0gbV9zdGF0ZS5zdHlsZS0+bXV0
YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZmlsdGVyT3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICBSZWZQdHI8RmlsdGVyT3Bl
cmF0aW9uPiBmaWx0ZXJPcGVyYXRpb24gPSBmaWx0ZXJPcGVyYXRpb25zLmF0KGkpOwogICAgICAg
ICBpZiAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkgPT0gRmlsdGVyT3BlcmF0
aW9uOjpDVVNUT00pIHsKQEAgLTQ4ODUsNyArNDg5MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
bG9hZFBlbmRpbmdTaGFkZXJzKCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAg
ICBtX2hhc1BlbmRpbmdTaGFkZXJzID0gZmFsc2U7CisgICAgbV9zdGF0ZS5oYXNQZW5kaW5nU2hh
ZGVycyA9IGZhbHNlOwogfQogCiBzdGF0aWMgYm9vbCBzb3J0UGFyYW1ldGVyc0J5TmFtZUNvbXBh
cmF0b3IoY29uc3QgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4mIGEsIGNvbnN0IFJlZlB0
cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+JiBiKQpAQCAtNDkyNyw3ICs0OTMyLDcgQEAgUGFzc1Jl
ZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmls
dGVyVHJhbnNmb3JtUGFyYW0KIHsKICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFy
YW1ldGVyPiB0cmFuc2Zvcm1QYXJhbWV0ZXIgPSBDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0
ZXI6OmNyZWF0ZShuYW1lKTsKICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0g
ICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZXMsIHN0eWxlKCksIG1fcm9vdEVsZW1l
bnRTdHlsZSwgb3BlcmF0aW9ucyk7CisgICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1
ZXMsIG1fc3RhdGUuc3R5bGUuZ2V0KCksIG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgb3BlcmF0
aW9ucyk7CiAgICAgdHJhbnNmb3JtUGFyYW1ldGVyLT5zZXRPcGVyYXRpb25zKG9wZXJhdGlvbnMp
OwogICAgIHJldHVybiB0cmFuc2Zvcm1QYXJhbWV0ZXIucmVsZWFzZSgpOwogfQpAQCAtNTE3Nywx
MiArNTE4MiwxMiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMo
Q1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgICAgICBXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKiBzdmdEb2N1
bWVudFZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSo+KGFyZ3Vt
ZW50KTsKLSAgICAgICAgICAgIEtVUkwgdXJsID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jb21w
bGV0ZVVSTChzdmdEb2N1bWVudFZhbHVlLT51cmwoKSk7CisgICAgICAgICAgICBLVVJMIHVybCA9
IG1fc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoc3ZnRG9jdW1lbnRWYWx1
ZS0+dXJsKCkpOwogCiAgICAgICAgICAgICBSZWZQdHI8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9u
PiBvcGVyYXRpb24gPSBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShzdmdEb2N1bWVu
dFZhbHVlLT51cmwoKSwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigpLCBvcGVyYXRpb25UeXBlKTsK
LSAgICAgICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uo
c3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsKKyAgICAg
ICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9j
dW1lbnRWYWx1ZS0+dXJsKCksIG1fc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoIXN2Z0RvY3VtZW50VmFsdWUtPmxvYWRSZXF1ZXN0ZWQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgbV9wZW5kaW5nU1ZHRG9jdW1lbnRzLnNldChvcGVyYXRpb24uZ2V0KCks
IHN2Z0RvY3VtZW50VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnBlbmRpbmdT
VkdEb2N1bWVudHMuc2V0KG9wZXJhdGlvbi5nZXQoKSwgc3ZnRG9jdW1lbnRWYWx1ZSk7CiAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoc3ZnRG9jdW1lbnRWYWx1ZS0+Y2FjaGVkU1ZHRG9jdW1lbnQo
KSkKICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLT5zZXRDYWNoZWRTVkdEb2N1bWVudFJl
ZmVyZW5jZShhZG9wdFB0cihuZXcgQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2Uoc3ZnRG9jdW1l
bnRWYWx1ZS0+Y2FjaGVkU1ZHRG9jdW1lbnQoKSkpKTsKICAgICAgICAgICAgIH0KQEAgLTUyODYs
NyArNTI5MSw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhD
U1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlCiAKIFBhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSog
cGVuZGluZ0ltYWdlKQogewotICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJj
ZUxvYWRlciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsK
KyAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX3N0YXRl
LmVsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAKICAgICBpZiAo
cGVuZGluZ0ltYWdlLT5jc3NJbWFnZVZhbHVlKCkpIHsKICAgICAgICAgQ1NTSW1hZ2VWYWx1ZSog
aW1hZ2VWYWx1ZSA9IHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VWYWx1ZSgpOwpAQCAtNTMxNiwyMyAr
NTMyMSwyMyBAQCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5k
aW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2UqIHBlbmRpbgogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmxvYWRQZW5kaW5nSW1hZ2VzKCkKIHsKLSAgICBpZiAobV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVz
LmlzRW1wdHkoKSkKKyAgICBpZiAobV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNv
bnN0X2l0ZXJhdG9yOjpLZXlzIGVuZCA9IG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5lbmQoKS5r
ZXlzKCk7Ci0gICAgZm9yIChQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6
OktleXMgaXQgPSBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuYmVnaW4oKS5rZXlzKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVyYXRv
cjo6S2V5cyBlbmQgPSBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuZW5kKCkua2V5cygp
OworICAgIGZvciAoUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlz
IGl0ID0gbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmJlZ2luKCkua2V5cygpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgQ1NTUHJvcGVydHlJRCBjdXJyZW50UHJvcGVydHkgPSAq
aXQ7CiAKICAgICAgICAgc3dpdGNoIChjdXJyZW50UHJvcGVydHkpIHsKICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZTogewotICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIq
IGJhY2tncm91bmRMYXllciA9IG1fc3R5bGUtPmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKTsgYmFj
a2dyb3VuZExheWVyOyBiYWNrZ3JvdW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkg
eworICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIGJhY2tncm91bmRMYXllciA9IG1fc3RhdGUu
c3R5bGUtPmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKTsgYmFja2dyb3VuZExheWVyOyBiYWNrZ3Jv
dW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlm
IChiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkgJiYgYmFja2dyb3VuZExheWVyLT5pbWFnZSgpLT5p
c1BlbmRpbmdJbWFnZSgpKQogICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kTGF5ZXItPnNl
dEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihi
YWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q29udGVudDogewotICAg
ICAgICAgICAgZm9yIChDb250ZW50RGF0YSogY29udGVudERhdGEgPSBjb25zdF9jYXN0PENvbnRl
bnREYXRhKj4obV9zdHlsZS0+Y29udGVudERhdGEoKSk7IGNvbnRlbnREYXRhOyBjb250ZW50RGF0
YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoQ29udGVudERhdGEq
IGNvbnRlbnREYXRhID0gY29uc3RfY2FzdDxDb250ZW50RGF0YSo+KG1fc3RhdGUuc3R5bGUtPmNv
bnRlbnREYXRhKCkpOyBjb250ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50RGF0YS0+bmV4
dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnREYXRhLT5pc0ltYWdlKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxJbWFnZUNv
bnRlbnREYXRhKj4oY29udGVudERhdGEpLT5pbWFnZSgpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpIHsKQEAgLTUzNDUsNyArNTM1MCw3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUN1cnNvcjogewotICAgICAgICAgICAg
aWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBtX3N0eWxlLT5jdXJzb3JzKCkpIHsKKyAgICAg
ICAgICAgIGlmIChDdXJzb3JMaXN0KiBjdXJzb3JMaXN0ID0gbV9zdGF0ZS5zdHlsZS0+Y3Vyc29y
cygpKSB7CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjdXJzb3JMaXN0
LT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgICAgICBDdXJzb3JEYXRhJiBjdXJyZW50
Q3Vyc29yID0gY3Vyc29yTGlzdC0+YXQoaSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChTdHls
ZUltYWdlKiBpbWFnZSA9IGN1cnJlbnRDdXJzb3IuaW1hZ2UoKSkgewpAQCAtNTM1NywxNyArNTM2
MiwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVJ
bWFnZTogewotICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkgJiYgbV9z
dHlsZS0+bGlzdFN0eWxlSW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0
PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSkpKTsKKyAgICAg
ICAgICAgIGlmIChtX3N0YXRlLnN0eWxlLT5saXN0U3R5bGVJbWFnZSgpICYmIG1fc3RhdGUuc3R5
bGUtPmxpc3RTdHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAg
bV9zdGF0ZS5zdHlsZS0+c2V0TGlzdFN0eWxlSW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNf
Y2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3RhdGUuc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVySW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAgIGlmIChtX3N0eWxlLT5ib3JkZXJJ
bWFnZVNvdXJjZSgpICYmIG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCktPmlzUGVuZGluZ0lt
YWdlKCkpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVySW1hZ2VTb3VyY2UobG9h
ZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPmJv
cmRlckltYWdlU291cmNlKCkpKSk7CisgICAgICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZS0+Ym9y
ZGVySW1hZ2VTb3VyY2UoKSAmJiBtX3N0YXRlLnN0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpLT5p
c1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgIG1fc3RhdGUuc3R5bGUtPnNldEJvcmRl
ckltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1h
Z2UqPihtX3N0YXRlLnN0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxl
Y3Q6IHsKLSAgICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtX3N0
eWxlLT5ib3hSZWZsZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJl
ZmxlY3Rpb24gPSBtX3N0YXRlLnN0eWxlLT5ib3hSZWZsZWN0KCkpIHsKICAgICAgICAgICAgICAg
ICBjb25zdCBOaW5lUGllY2VJbWFnZSYgbWFza0ltYWdlID0gcmVmbGVjdGlvbi0+bWFzaygpOwog
ICAgICAgICAgICAgICAgIGlmIChtYXNrSW1hZ2UuaW1hZ2UoKSAmJiBtYXNrSW1hZ2UuaW1hZ2Uo
KS0+aXNQZW5kaW5nSW1hZ2UoKSkgewogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJ
bWFnZT4gbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVu
ZGluZ0ltYWdlKj4obWFza0ltYWdlLmltYWdlKCkpKTsKQEAgLTUzNzcsMTIgKzUzODIsMTIgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdl
U291cmNlOiB7Ci0gICAgICAgICAgICBpZiAobV9zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCkg
JiYgbV9zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFza0JveEltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1h
Z2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0eWxlLT5tYXNrQm94SW1hZ2VT
b3VyY2UoKSkpKTsKKyAgICAgICAgICAgIGlmIChtX3N0YXRlLnN0eWxlLT5tYXNrQm94SW1hZ2VT
b3VyY2UoKSAmJiBtX3N0YXRlLnN0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5n
SW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxlLT5zZXRNYXNrQm94SW1hZ2VT
b3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1f
c3RhdGUuc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZTogewot
ICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IG1fc3R5bGUtPmFjY2Vzc01h
c2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkgewor
ICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IG1fc3RhdGUuc3R5bGUtPmFj
Y2Vzc01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQo
KSkgewogICAgICAgICAgICAgICAgIGlmIChtYXNrTGF5ZXItPmltYWdlKCkgJiYgbWFza0xheWVy
LT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQogICAgICAgICAgICAgICAgICAgICBtYXNrTGF5
ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1h
Z2UqPihtYXNrTGF5ZXItPmltYWdlKCkpKSk7CiAgICAgICAgICAgICB9CkBAIC01MzkzLDcgKzUz
OTgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAgICAgICAg
fQogICAgIH0KIAotICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigpOworICAgIG1f
c3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigpOwogfQogCiB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmxvYWRQZW5kaW5nUmVzb3VyY2VzKCkKQEAgLTU0NTYsNyArNTQ2MSw2IEBAIHZvaWQg
TWVkaWFRdWVyeVJlc3VsdDo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVt
b3J5T2JqZWN0SW5mbykgY29uCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdl
KE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5
Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVz
OjpDU1MpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fc3R5bGUsICJzdHlsZSIpOwogICAgIGluZm8u
YWRkTWVtYmVyKG1fYXV0aG9yU3R5bGUsICJhdXRob3JTdHlsZSIpOwogICAgIGluZm8uYWRkTWVt
YmVyKG1fdXNlclN0eWxlLCAidXNlclN0eWxlIik7CiAgICAgaW5mby5hZGRNZW1iZXIobV9mZWF0
dXJlcywgImZlYXR1cmVzIik7CkBAIC01NDY1LDMyICs1NDY5LDE5IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5m
bykgY29uc3QKICAgICBpbmZvLmFkZE1lbWJlcihtX2tleWZyYW1lc1J1bGVNYXAsICJrZXlmcmFt
ZXNSdWxlTWFwIik7CiAgICAgaW5mby5hZGRNZW1iZXIobV9tYXRjaGVkUHJvcGVydGllc0NhY2hl
LCAibWF0Y2hlZFByb3BlcnRpZXNDYWNoZSIpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fbWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZVN3ZWVwVGltZXIsICJtYXRjaGVkUHJvcGVydGllc0NhY2hlU3dlZXBU
aW1lciIpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fbWF0Y2hlZFJ1bGVzLCAibWF0Y2hlZFJ1bGVz
Iik7CiAKLSAgICBpbmZvLmFkZE1lbWJlcihtX3J1bGVMaXN0LCAicnVsZUxpc3QiKTsKLSAgICBp
bmZvLmFkZE1lbWJlcihtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMsICJwZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzIik7CiAgICAgaW5mby5hZGRNZW1iZXIobV9tZWRpdW0sICJtZWRpdW0iKTsKICAgICBp
bmZvLmFkZE1lbWJlcihtX3Jvb3REZWZhdWx0U3R5bGUsICJyb290RGVmYXVsdFN0eWxlIik7CiAg
ICAgaW5mby5hZGRNZW1iZXIobV9kb2N1bWVudCwgImRvY3VtZW50Iik7CiAKLSAgICAvLyBGSVhN
RTogcG9pbnRlciB0byBSZW5kZXJTdHlsZSBjb3VsZCBwb2ludCB0byBhbiBhbHJlYWR5IGRlbGV0
ZWQgb2JqZWN0LgotICAgIGluZm8uaWdub3JlTWVtYmVyKG1fcGFyZW50U3R5bGUpOwotICAgIGlu
Zm8uaWdub3JlTWVtYmVyKG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0KLSAgICBpbmZvLmFkZE1lbWJl
cihtX2VsZW1lbnQsICJlbGVtZW50Iik7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9zdHlsZWRFbGVt
ZW50LCAic3R5bGVkRWxlbWVudCIpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fcmVnaW9uRm9yU3R5
bGluZywgInJlZ2lvbkZvclN0eWxpbmciKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3BhcmVudE5v
ZGUsICJwYXJlbnROb2RlIik7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9saW5lSGVpZ2h0VmFsdWUs
ICJsaW5lSGVpZ2h0VmFsdWUiKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2ZvbnRTZWxlY3Rvciwg
ImZvbnRTZWxlY3RvciIpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fdmlld3BvcnREZXBlbmRlbnRN
ZWRpYVF1ZXJ5UmVzdWx0cywgInZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMiKTsK
ICAgICBpbmZvLmlnbm9yZU1lbWJlcihtX3N0eWxlQnVpbGRlcik7CiAgICAgaW5mby5hZGRNZW1i
ZXIobV9pbnNwZWN0b3JDU1NPTVdyYXBwZXJzKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYm
IEVOQUJMRShTVkcpCi0gICAgaW5mby5hZGRNZW1iZXIobV9wZW5kaW5nU1ZHRG9jdW1lbnRzLCAi
cGVuZGluZ1NWR0RvY3VtZW50cyIpOwotI2VuZGlmCiAgICAgaW5mby5hZGRNZW1iZXIobV9zY29w
ZVJlc29sdmVyLCAic2NvcGVSZXNvbHZlciIpOwogCisgICAgaW5mby5hZGRNZW1iZXIobV9zdGF0
ZSwgInN0YXRlIik7CisKICAgICAvLyBGSVhNRTogbW92ZSB0aGlzIHRvIGEgcGxhY2Ugd2hlcmUg
aXQgd291bGQgYmUgY2FsbGVkIG9ubHkgb25jZT8KICAgICBpbmZvLmFkZE1lbWJlcihkZWZhdWx0
U3R5bGUsICJkZWZhdWx0U3R5bGUiKTsKICAgICBpbmZvLmFkZE1lbWJlcihkZWZhdWx0UXVpcmtz
U3R5bGUsICJkZWZhdWx0UXVpcmtzU3R5bGUiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5o
CmluZGV4IGEzYWY1NDQ4YjkwOThlM2MzMjhhNjUyMGU4MDkxYjIxNTM1ZjU0NmUuLmI0NTUxNGQ1
OWEyNTY2MTRlZDM4MmRkNGY1NjNjN2EzODA0MzA1YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuaApAQCAtMjMsNiArMjMsNyBAQAogI2RlZmluZSBTdHlsZVJlc29sdmVyX2gKIAogI2lu
Y2x1ZGUgIkNTU1J1bGUuaCIKKyNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgogI2luY2x1ZGUgIkNT
U1RvU3R5bGVNYXAuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJMaW5r
SGFzaC5oIgpAQCAtMzYsNiArMzcsOSBAQAogI2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5o
IgogI2luY2x1ZGUgIlN0eWxlU2NvcGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlZpZXdwb3J0U3R5
bGVSZXNvbHZlci5oIgorI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKKyNp
bmNsdWRlICJXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlLmgiCisjZW5kaWYKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgpAQCAtMTgyLDIwICsxODYsMjAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRG9jdW1lbnQoRG9jdW1lbnQqLCBDU1NGb250U2Vs
ZWN0b3IqID0gMCk7CiAKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X3N0eWxlLmdldCgpOyB9Ci0gICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQotICAgIFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9yb290RWxlbWVudFN0eWxlOyB9Ci0gICAgRWxlbWVudCogZWxl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQorICAgIFJlbmRlclN0eWxlKiBzdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3R5bGUuZ2V0KCk7IH0KKyAgICBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnBhcmVudFN0eWxlOyB9Cisg
ICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnJvb3RFbGVtZW50U3R5bGU7IH0KKyAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5lbGVtZW50OyB9CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9kb2N1bWVudDsgfQogICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uKCkgeyByZXR1cm4gc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KICAgICBjb25z
dCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHBhcmVu
dFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAgdm9pZCBzZXRGb250RGVzY3JpcHRp
b24oY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9mb250RGlydHkg
fD0gc3R5bGUoKS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KLSAgICB2
b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRab29tKGYp
OyB9Ci0gICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0g
c3R5bGUoKS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQotICAgIHZvaWQgc2V0VGV4dFNpemVBZGp1
c3QoYm9vbCBiKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRTaXplQWRqdXN0KGIp
OyB9Ci0gICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBt
X2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7IH0KLSAg
ICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRpb24gdGV4dE9yaWVudGF0aW9u
KSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRPcmllbnRhdGlvbih0ZXh0T3JpZW50
YXRpb24pOyB9Ci0gICAgYm9vbCBoYXNQYXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJl
bnROb2RlOyB9CisgICAgdm9pZCBzZXRGb250RGVzY3JpcHRpb24oY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9zdGF0ZS5mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KKyAgICB2b2lkIHNldFpvb20oZmxv
YXQgZikgeyBtX3N0YXRlLmZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRab29tKGYpOyB9CisgICAg
dm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9zdGF0ZS5mb250RGlydHkgfD0gc3R5
bGUoKS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQorICAgIHZvaWQgc2V0VGV4dFNpemVBZGp1c3Qo
Ym9vbCBiKSB7IG1fc3RhdGUuZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRTaXplQWRqdXN0
KGIpOyB9CisgICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkg
eyBtX3N0YXRlLmZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRXcml0aW5nTW9kZSh3cml0aW5nTW9k
ZSk7IH0KKyAgICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRpb24gdGV4dE9y
aWVudGF0aW9uKSB7IG1fc3RhdGUuZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRPcmllbnRh
dGlvbih0ZXh0T3JpZW50YXRpb24pOyB9CisgICAgYm9vbCBoYXNQYXJlbnROb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS5wYXJlbnROb2RlOyB9CiAKICAgICB2b2lkIHJlc2V0QXV0aG9yU3R5
bGUoKTsKICAgICB2b2lkIGFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3
LCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mKTsKQEAgLTMyNyw3ICszMzEs
NyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSog
c3R5bGVUb0FkanVzdCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBFbGVtZW50Kik7CiAKLSAg
ICB2b2lkIGFkZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKiBydWxlKSB7IG1fbWF0Y2hlZFJ1
bGVzLmFwcGVuZChydWxlKTsgfQorICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29uc3QgUnVsZURh
dGEqIHJ1bGUpIHsgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOyB9CiAKICAgICBz
dHJ1Y3QgUnVsZVJhbmdlIHsKICAgICAgICAgUnVsZVJhbmdlKGludCYgZmlyc3RSdWxlSW5kZXgs
IGludCYgbGFzdFJ1bGVJbmRleCk6IGZpcnN0UnVsZUluZGV4KGZpcnN0UnVsZUluZGV4KSwgbGFz
dFJ1bGVJbmRleChsYXN0UnVsZUluZGV4KSB7IH0KQEAgLTQzNywxNSArNDQxLDg3IEBAIHByaXZh
dGU6CiAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fc2libGluZ1J1bGVTZXQ7CiAgICAgT3duUHRyPFJ1
bGVTZXQ+IG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0OwogCi0gICAgYm9vbCBtX2hhc1VBQXBw
ZWFyYW5jZTsKLSAgICBCb3JkZXJEYXRhIG1fYm9yZGVyRGF0YTsKLSAgICBGaWxsTGF5ZXIgbV9i
YWNrZ3JvdW5kRGF0YTsKLSAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKLQogICAgIHR5cGVk
ZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgUmVmUHRyPFN0eWxlUnVsZUtleWZyYW1lcz4g
PiBLZXlmcmFtZXNSdWxlTWFwOwogICAgIEtleWZyYW1lc1J1bGVNYXAgbV9rZXlmcmFtZXNSdWxl
TWFwOwogCiBwdWJsaWM6CisgICAgdHlwZWRlZiBIYXNoTWFwPENTU1Byb3BlcnR5SUQsIFJlZlB0
cjxDU1NWYWx1ZT4gPiBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDsKKyNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpICYmIEVOQUJMRShTVkcpCisgICAgdHlwZWRlZiBIYXNoTWFwPEZpbHRlck9wZXJhdGlv
biosIFJlZlB0cjxXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlPiA+IFBlbmRpbmdTVkdEb2N1bWVu
dE1hcDsKKyNlbmRpZgorCisgICAgY2xhc3MgU3RhdGUgeworICAgICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShTdGF0ZSk7CisgICAgcHVibGljOgorICAgICAgICBTdGF0ZSgpCisgICAgICAgIDog
ZWxlbWVudCgwKQorICAgICAgICAsIHN0eWxlZEVsZW1lbnQoMCkKKyAgICAgICAgLCBwYXJlbnRO
b2RlKDApCisgICAgICAgICwgcGFyZW50U3R5bGUoMCkKKyAgICAgICAgLCByb290RWxlbWVudFN0
eWxlKDApCisgICAgICAgICwgcmVnaW9uRm9yU3R5bGluZygwKQorICAgICAgICAsIHNhbWVPcmln
aW5Pbmx5KGZhbHNlKQorICAgICAgICAsIHBzZXVkb1N0eWxlKE5PUFNFVURPKQorICAgICAgICAs
IGVsZW1lbnRMaW5rU3RhdGUoTm90SW5zaWRlTGluaykKKyAgICAgICAgLCBkaXN0cmlidXRlZFRv
SW5zZXJ0aW9uUG9pbnQoZmFsc2UpCisgICAgICAgICwgZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1
bGVzKGZhbHNlKQorICAgICAgICAsIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKQor
ICAgICAgICAsIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpCisjaWYgRU5B
QkxFKENTU19TSEFERVJTKQorICAgICAgICAsIGhhc1BlbmRpbmdTaGFkZXJzKGZhbHNlKQorI2Vu
ZGlmCisgICAgICAgICwgbGluZUhlaWdodFZhbHVlKDApCisgICAgICAgICwgZm9udERpcnR5KGZh
bHNlKQorICAgICAgICAsIGhhc1VBQXBwZWFyYW5jZShmYWxzZSkKKyAgICAgICAgLCBiYWNrZ3Jv
dW5kRGF0YShCYWNrZ3JvdW5kRmlsbExheWVyKSB7IH0KKyAgICAgICAgCitwdWJsaWM6CisgICAg
ICAgIC8vIEZJWE1FKGJ1ZyAxMDg1NjMpOiB0byBtYWtlIGl0IGVhc2llciB0byByZXZpZXcsIHRo
ZXNlIG1lbWJlcgorICAgICAgICAvLyB2YXJpYWJsZXMgYXJlIHB1YmxpYy4gSG93ZXZlciB3ZSBz
aG91bGQgYWRkIG1ldGhvZHMgdG8gYWNjZXNzCisgICAgICAgIC8vIHRoZXNlIHZhcmlhYmxlcy4K
KyAgICAgICAgRWxlbWVudCogZWxlbWVudDsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBz
dHlsZTsKKyAgICAgICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudDsKKyAgICAgICAgQ29u
dGFpbmVyTm9kZSogcGFyZW50Tm9kZTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
OworICAgICAgICBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZTsKKyAgICAgICAgCisgICAg
ICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZzsKKyAgICAgICAgYm9vbCBzYW1lT3Jp
Z2luT25seSA6IDE7CisgICAgICAgIFBzZXVkb0lkIHBzZXVkb1N0eWxlOworCisgICAgICAgIEVJ
bnNpZGVMaW5rIGVsZW1lbnRMaW5rU3RhdGU7CisKKyAgICAgICAgYm9vbCBkaXN0cmlidXRlZFRv
SW5zZXJ0aW9uUG9pbnQgOiAxOworCisgICAgICAgIGJvb2wgZWxlbWVudEFmZmVjdGVkQnlDbGFz
c1J1bGVzIDogMTsKKworICAgICAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvOworCisgICAgICAg
IC8vIEEgYnVmZmVyIHVzZWQgdG8gaG9sZCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgZm9yIGFu
IGVsZW1lbnQsCisgICAgICAgIC8vIGFuZCBhIHRlbXBvcmFyeSBidWZmZXIgdXNlZCBmb3IgbWVy
Z2Ugc29ydGluZy4KKyAgICAgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+IG1hdGNoZWRS
dWxlczsKKyAgICAgICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0PiBydWxlTGlzdDsKKworICAg
ICAgICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA6IDE7CisgICAgICAgIGJvb2wg
YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA6IDE7CisKKyAgICAgICAgUGVuZGluZ0lt
YWdlUHJvcGVydHlNYXAgcGVuZGluZ0ltYWdlUHJvcGVydGllczsKKyNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCisgICAgICAgIGJvb2wgaGFzUGVuZGluZ1NoYWRlcnMgOiAxOworI2VuZGlmCisjaWYg
RU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQorICAgICAgICBQZW5kaW5nU1ZHRG9j
dW1lbnRNYXAgcGVuZGluZ1NWR0RvY3VtZW50czsKKyNlbmRpZgorICAgICAgICBDU1NWYWx1ZSog
bGluZUhlaWdodFZhbHVlOworICAgICAgICBib29sIGZvbnREaXJ0eSA6IDE7CisKKyAgICAgICAg
Ym9vbCBoYXNVQUFwcGVhcmFuY2UgOiAxOworICAgICAgICBCb3JkZXJEYXRhIGJvcmRlckRhdGE7
CisgICAgICAgIEZpbGxMYXllciBiYWNrZ3JvdW5kRGF0YTsKKyAgICAgICAgQ29sb3IgYmFja2dy
b3VuZENvbG9yOworICAgIH07CisKICAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlTm90WWV0
QXZhaWxhYmxlKCkgeyByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsgfQogCiAgICAgUGFz
c1JlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7
CkBAIC00NTYsOCArNTMyLDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgUGFzc1JlZlB0cjxTdHls
ZUltYWdlPiBjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZSopOwogCi0gICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsgfQotICAgIGJvb2wg
YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsgfQorICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVn
dWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFy
U3R5bGU7IH0KKyAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7IH0KIAog
ICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvSW50TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiwg
UmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciA9
IDEpOwogICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvRmxvYXRMZW5ndGgoQ1NTUHJpbWl0aXZl
VmFsdWUqLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0
aXBsaWVyID0gMSk7CkBAIC01MTEsMzkgKzU4NywxOCBAQCBwcml2YXRlOgogCiAgICAgVGltZXI8
U3R5bGVSZXNvbHZlcj4gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlU3dlZXBUaW1lcjsKIAotICAg
IC8vIEEgYnVmZmVyIHVzZWQgdG8gaG9sZCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgZm9yIGFu
IGVsZW1lbnQsIGFuZCBhIHRlbXBvcmFyeSBidWZmZXIgdXNlZCBmb3IKLSAgICAvLyBtZXJnZSBz
b3J0aW5nLgotICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiBtX21hdGNoZWRSdWxlczsK
LQotICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4gbV9ydWxlTGlzdDsKLQotICAgIHR5cGVk
ZWYgSGFzaE1hcDxDU1NQcm9wZXJ0eUlELCBSZWZQdHI8Q1NTVmFsdWU+ID4gUGVuZGluZ0ltYWdl
UHJvcGVydHlNYXA7Ci0gICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXAgbV9wZW5kaW5nSW1hZ2VQ
cm9wZXJ0aWVzOwotCiAgICAgT3duUHRyPE1lZGlhUXVlcnlFdmFsdWF0b3I+IG1fbWVkaXVtOwog
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9yb290RGVmYXVsdFN0eWxlOwogCi0gICAgUHNldWRv
SWQgbV9keW5hbWljUHNldWRvOwotICAgIFBzZXVkb0lkIG1fcHNldWRvU3R5bGU7Ci0KICAgICBE
b2N1bWVudCogbV9kb2N1bWVudDsKKyAgICAvLyBGSVhNRTogTWFrZSBTZWxlY3RvckNoZWNrZXIg
YW4gb24tc3RhY2sgb2JqZWN0IGFuZAorICAgIC8vIG1vdmUgc2VsZWN0b3JDaGVja2VyLm1vZGUo
KSB0byBTdGF0ZS4KKyAgICAvLyBzZWxlY3RvckNoZWNrZXIuc3RyaW5nUGFyc2luZygpIGNhbiBi
ZSByZXBsYWNlZCB3aXRoCisgICAgLy8gIWRvY3VtZW50LmluUXVpcmtzTW9kZSgpLgogICAgIFNl
bGVjdG9yQ2hlY2tlciBtX3NlbGVjdG9yQ2hlY2tlcjsKICAgICBTZWxlY3RvckZpbHRlciBtX3Nl
bGVjdG9yRmlsdGVyOwogCi0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwotICAgIFJl
bmRlclN0eWxlKiBtX3BhcmVudFN0eWxlOwotICAgIFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50
U3R5bGU7Ci0gICAgRWxlbWVudCogbV9lbGVtZW50OwotICAgIFN0eWxlZEVsZW1lbnQqIG1fc3R5
bGVkRWxlbWVudDsKLSAgICBSZW5kZXJSZWdpb24qIG1fcmVnaW9uRm9yU3R5bGluZzsKLSAgICBF
SW5zaWRlTGluayBtX2VsZW1lbnRMaW5rU3RhdGU7Ci0gICAgYm9vbCBtX2VsZW1lbnRBZmZlY3Rl
ZEJ5Q2xhc3NSdWxlczsKLSAgICBDb250YWluZXJOb2RlKiBtX3BhcmVudE5vZGU7Ci0gICAgQ1NT
VmFsdWUqIG1fbGluZUhlaWdodFZhbHVlOwotICAgIGJvb2wgbV9mb250RGlydHk7CiAgICAgYm9v
bCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlczsKLSAgICBib29sIG1fc2FtZU9yaWdpbk9ubHk7
Ci0gICAgYm9vbCBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludDsKIAogICAgIFJlZlB0cjxD
U1NGb250U2VsZWN0b3I+IG1fZm9udFNlbGVjdG9yOwogICAgIFZlY3RvcjxPd25QdHI8TWVkaWFR
dWVyeVJlc3VsdD4gPiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHM7CkBAIC01
NTIsMjIgKzYwNywxNCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxWaWV3cG9ydFN0eWxlUmVzb2x2
ZXI+IG1fdmlld3BvcnRTdHlsZVJlc29sdmVyOwogI2VuZGlmCiAKLSAgICBib29sIG1fYXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlOwotICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVk
TGlua1N0eWxlOwogICAgIGNvbnN0IFN0eWxlQnVpbGRlciYgbV9zdHlsZUJ1aWxkZXI7CiAKLSNp
ZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgYm9vbCBtX2hhc1BlbmRpbmdTaGFkZXJzOwotI2Vu
ZGlmCi0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCi0gICAgSGFzaE1h
cDxGaWx0ZXJPcGVyYXRpb24qLCBSZWZQdHI8V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZT4gPiBt
X3BlbmRpbmdTVkdEb2N1bWVudHM7Ci0jZW5kaWYKLQogICAgIE93blB0cjxTdHlsZVNjb3BlUmVz
b2x2ZXI+IG1fc2NvcGVSZXNvbHZlcjsKICAgICBDU1NUb1N0eWxlTWFwIG1fc3R5bGVNYXA7CiAg
ICAgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyBtX2luc3BlY3RvckNTU09NV3JhcHBlcnM7CiAKKyAg
ICBTdGF0ZSBtX3N0YXRlOworCiAgICAgZnJpZW5kIGNsYXNzIFN0eWxlQnVpbGRlcjsKICAgICBm
cmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiwgY29uc3QgTWF0
Y2hlZFByb3BlcnRpZXMmKTsKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1hdGNo
ZWRQcm9wZXJ0aWVzJiwgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186303</attachid>
            <date>2013-02-03 22:08:55 -0800</date>
            <delta_ts>2013-02-04 03:34:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96421-20130204150534.patch</filename>
            <type>text/plain</type>
            <size>139033</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDFkMWNlM2UyZDEyMGVj
NDVlODY1NTM3NTU4NWU0MzI1YmExNzg5OS4uYjJjNWUzOWJkNDk1MzU5ZmIxMzI0NDNhZWU3ZDdj
MDQ4MjQ3YzI0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDEzLTAyLTAzICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBTcGxpdCBwZXItcmVz
b2x2ZSBsb2dpYyBvdXQgZnJvbSBTdHlsZVJlc29sdmVyLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY0MjEKKworICAgICAgICBSZXZpZXdlZCBieSBF
cmljIFNlaWRlbC4KKworICAgICAgICBJbXBsZW1lbnRlZCBjbGFzcyBTdHlsZVJlc29sdmVyOjpT
dGF0ZSBhbmQgYWRkZWQgbV9zdGF0ZSB0bworICAgICAgICBTdHlsZVJlc29sdmVyLiBBbGwgbWVt
YmVyIHZhcmlhYmxlcyB1c2VkIGZvciBwZXItcmVzb2x2ZSBsb2dpYyBhcmUKKyAgICAgICAgbW92
ZWQgaW50byB0aGUgc3RhdGUgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWNhdXNl
IGp1c3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBjc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KToK
KyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9y
UnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2Fu
ZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRj
aEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNl
clJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zv
ckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRSdWxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRGb3JTdHlsZVJlc29sdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250
cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVI
YXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpzdHlsZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjphZGp1c3RSZW5kZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjp1
cGRhdGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlQm9yZGVy
QW5kQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9T
dHlsZVJ1bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpy
dWxlTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lv
blNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0JyZWFkdGgpOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlR3JpZFRyYWNrTWluTWF4KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFj
a0dyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0xpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTVkdEb2N1bWVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJG
cm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdT
aGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmls
dGVyVHJhbnNmb3JtUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6bG9hZFBlbmRpbmdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjps
b2FkUGVuZGluZ0ltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpyZXBv
cnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnJvb3RFbGVtZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6ZWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250RGVzY3JpcHRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Wm9vbSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRFZmZlY3RpdmVab29tKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnNldFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnNldFRleHRPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpoYXNQYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmFkZE1hdGNoZWRSdWxlKToKKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAo
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OlN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9W
aXNpdGVkTGlua1N0eWxlKToKKyAgICAgICAgQWRkZWQgIm1fc3RhdGUuIiB0byBhY2Nlc3MgbWVt
YmVyIHZhcmlhYmxlcyB1c2VkIGZvciBwZXItcmVzb2x2ZSBsb2dpYy4KKwogMjAxMy0wMi0wMyAg
S2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1Y4XSBQYXNz
IGFuIElzb2xhdGUgdG8gSGFzSW5zdGFuY2UoKSAocGFydCAxKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDYxNDViYjFmMTYyNWI4ZmU0ZDE2NzYwN2Ji
YmE4YmZkOWExYjAxMTkuLmFiNTZmNjYxMTc5N2ZkOTQ3Nzk2ZjQ4ZjMxMzllNzgxM2E5N2U4M2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTQ5LDcg
KzQ5LDcgQEAKICNkZWZpbmUgSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAogaWYgKGlzSW5o
ZXJpdCkgXAogeyBcCi0gICAgc3Znc3R5bGUtPnNldCMjUHJvcChtX3BhcmVudFN0eWxlLT5zdmdT
dHlsZSgpLT5wcm9wKCkpOyBcCisgICAgc3Znc3R5bGUtPnNldCMjUHJvcChzdGF0ZS5wYXJlbnRT
dHlsZS0+c3ZnU3R5bGUoKS0+cHJvcCgpKTsgXAogICAgIHJldHVybjsgXAogfQogCkBAIC0xMDks
MTAgKzEwOSwxMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKQogICAgICAgICBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpOwogCi0gICAgU1ZHUmVuZGVyU3R5bGUqIHN2Z3N0eWxlID0gbV9zdHls
ZS0+YWNjZXNzU1ZHU3R5bGUoKTsKKyAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwor
ICAgIFNWR1JlbmRlclN0eWxlKiBzdmdzdHlsZSA9IHN0YXRlLnN0eWxlLT5hY2Nlc3NTVkdTdHls
ZSgpOwogCi0gICAgYm9vbCBpc0luaGVyaXQgPSBtX3BhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5o
ZXJpdGVkVmFsdWUoKTsKLSAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1
ZSgpIHx8ICghbV9wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpOworICAg
IGJvb2wgaXNJbmhlcml0ID0gc3RhdGUucGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRW
YWx1ZSgpOworICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwg
KCFzdGF0ZS5wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpOwogCiAgICAg
Ly8gV2hhdCBmb2xsb3dzIGlzIGEgbGlzdCB0aGF0IG1hcHMgdGhlIENTUyBwcm9wZXJ0aWVzIGlu
dG8gdGhlaXIKICAgICAvLyBjb3JyZXNwb25kaW5nIGZyb250LWVuZCBSZW5kZXJTdHlsZSB2YWx1
ZXMuIFNob3J0aGFuZHMoZS5nLiBib3JkZXIsCkBAIC0yMjksNyArMjMwLDcgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZpbGw6CiAgICAgICAgIHsKICAgICAgICAg
ICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHls
ZSogc3ZnUGFyZW50U3R5bGUgPSBtX3BhcmVudFN0eWxlLT5zdmdTdHlsZSgpOworICAgICAgICAg
ICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQYXJlbnRTdHlsZSA9IHN0YXRlLnBhcmVu
dFN0eWxlLT5zdmdTdHlsZSgpOwogICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFp
bnQoc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQ
YWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMjM5LDE0ICsyNDAsMTQg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1ZS0+
aXNTVkdQYWludCgpKSB7CiAgICAgICAgICAgICAgICAgU1ZHUGFpbnQqIHN2Z1BhaW50ID0gc3Rh
dGljX2Nhc3Q8U1ZHUGFpbnQqPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dEZpbGxQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFs
dWUoc3ZnUGFpbnQsIG1fc3R5bGUtPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkp
OworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFpbnQtPnBhaW50
VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5zdHlsZS0+
Y29sb3IoKSksIHN2Z1BhaW50LT51cmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCks
IGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tl
OgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICAg
ICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1BhcmVudFN0eWxlID0gbV9wYXJlbnRTdHlsZS0+
c3ZnU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFy
ZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKTsKICAgICAgICAgICAgICAg
ICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50VHlw
ZSgpLCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+
c3Ryb2tlUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJv
cGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQpAQCAtMjU2LDcgKzI1Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlT
VkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkgewogICAgICAgICAgICAg
ICAgIFNWR1BhaW50KiBzdmdQYWludCA9IHN0YXRpY19jYXN0PFNWR1BhaW50Kj4odmFsdWUpOwot
ICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYWludC0+cGFpbnRU
eXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIG1fc3R5bGUtPmNvbG9y
KCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBs
eVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxl
LT5zZXRTdHJva2VQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9y
Q1NTVmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0eWxlLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgp
LCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkBAIC0zNjMsNyArMzY0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBl
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmlt
aXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dE1hcmtlclN0YXJ0UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJG
cm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Zn
c3R5bGUtPnNldE1hcmtlclN0YXJ0UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElk
ZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJr
ZXJNaWQ6CkBAIC0zNzcsNyArMzc4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1By
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlm
ICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMg
PSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5
bGUtPnNldE1hcmtlck1pZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlm
aWVyRnJvbUlSSVN0cmluZyhzLCBtX2VsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAg
IHN2Z3N0eWxlLT5zZXRNYXJrZXJNaWRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50
SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1h
cmtlckVuZDoKQEAgLTM5MSw3ICszOTIsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZH
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAg
aWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAg
cyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdz
dHlsZS0+c2V0TWFya2VyRW5kUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50
aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAg
ICAgc3Znc3R5bGUtPnNldE1hcmtlckVuZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21l
bnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
U3Ryb2tlTGluZWNhcDoKQEAgLTQyOCw3ICs0MjksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAg
ICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAg
ICBzdmdzdHlsZS0+c2V0RmlsdGVyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElk
ZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAg
ICAgICAgc3Znc3R5bGUtPnNldEZpbHRlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21l
bnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
TWFzazoKQEAgLTQ0Miw3ICs0NDMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYg
KHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAgcyA9
IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdzdHls
ZS0+c2V0TWFza2VyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJG
cm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Zn
c3R5bGUtPnNldE1hc2tlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlm
aWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q2xpcFBhdGg6
CkBAIC00NTYsNyArNDU3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBl
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmlt
aXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dENsaXBwZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21J
UklTdHJpbmcocywgbV9lbGVtZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICBzdmdzdHls
ZS0+c2V0Q2xpcHBlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVy
RnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dEFuY2hvcjoK
QEAgLTQ3NywxNCArNDc4LDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHN0b3BDb2xvciwgU3RvcENvbG9yKTsKICAg
ICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAgICAgICAgIHN2Z3N0
eWxlLT5zZXRTdG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2FzdDxT
VkdDb2xvcio+KHZhbHVlKSwgbV9zdHlsZS0+Y29sb3IoKSkpOworICAgICAgICAgICAgICAgIHN2
Z3N0eWxlLT5zZXRTdG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2Fz
dDxTVkdDb2xvcio+KHZhbHVlKSwgc3RhdGUuc3R5bGUtPmNvbG9yKCkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpZ2h0aW5nQ29sb3I6
CiAgICAgICAgIHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGxpZ2h0
aW5nQ29sb3IsIExpZ2h0aW5nQ29sb3IpOwogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0Nv
bG9yKCkpCi0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldExpZ2h0aW5nQ29sb3IoY29sb3JG
cm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgbV9zdHls
ZS0+Y29sb3IoKSkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRMaWdodGluZ0NvbG9y
KGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSks
IHN0YXRlLnN0eWxlLT5jb2xvcigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rmxvb2RPcGFjaXR5OgpAQCAtNTA5LDcgKzUxMCw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FO
RF9JTklUSUFMKGZsb29kQ29sb3IsIEZsb29kQ29sb3IpOwogICAgICAgICAgICAgaWYgKHZhbHVl
LT5pc1NWR0NvbG9yKCkpCi0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZsb29kQ29sb3Io
Y29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwg
bV9zdHlsZS0+Y29sb3IoKSkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGbG9vZENv
bG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1
ZSksIHN0YXRlLnN0eWxlLT5jb2xvcigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5R2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6CkBA
IC01NDksNyArNTUwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U3ZnU2hhZG93OiB7CiAgICAgICAgICAgICBpZiAo
aXNJbmhlcml0KQotICAgICAgICAgICAgICAgIHJldHVybiBzdmdzdHlsZS0+c2V0U2hhZG93KGFk
b3B0UHRyKG1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRvdygpID8gbmV3IFNoYWRvd0Rh
dGEoKm1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRvdygpKSA6IDApKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gc3Znc3R5bGUtPnNldFNoYWRvdyhhZG9wdFB0cihzdGF0ZS5wYXJlbnRT
dHlsZS0+c3ZnU3R5bGUoKS0+c2hhZG93KCkgPyBuZXcgU2hhZG93RGF0YSgqc3RhdGUucGFyZW50
U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRvdygpKSA6IDApKTsKICAgICAgICAgICAgIGlmIChpc0lu
aXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUpIC8vIGluaXRpYWwgfCBub25lCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN2Z3N0eWxlLT5zZXRTaGFkb3cobnVsbHB0cik7CiAKQEAgLTU2NCw5ICs1NjUs
OSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKCFmaXJzdFZhbHVlLT5pc1NoYWRv
d1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgU2hhZG93VmFs
dWUqIGl0ZW0gPSBzdGF0aWNfY2FzdDxTaGFkb3dWYWx1ZSo+KGZpcnN0VmFsdWUpOwotICAgICAg
ICAgICAgSW50UG9pbnQgbG9jYXRpb24oaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxl
KCksIG1fcm9vdEVsZW1lbnRTdHlsZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
dGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKSk7
Ci0gICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRl
TGVuZ3RoPGludD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKSA6IDA7CisgICAgICAgICAg
ICBJbnRQb2ludCBsb2NhdGlvbihpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5
bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpLAorICAgICAgICAgICAgICAgIGl0ZW0t
PnktPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1l
bnRTdHlsZSkpOworICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1
ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVu
dFN0eWxlKSA6IDA7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKICAgICAgICAgICAgIGlmIChp
dGVtLT5jb2xvcikKICAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApp
bmRleCBmYjc0ZTI3NTFiMzU3NTIzY2VlNjFkNzM2NjkxYTRmNGI3YTEwZjY3Li42ZmZhN2U3ZTQ5
MDk5YTMyMDJiM2I2NWIyYTk3NWZiNTkzNzg3NDc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwCkBAIC00NCw3ICs0NCw2IEBACiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVN
YXBwaW5ncy5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NS
ZWZsZWN0VmFsdWUuaCIKLSNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgogI2luY2x1ZGUgIkNTU1Nl
bGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTU3R5
bGVSdWxlLmgiCkBAIC0yMDAsMTQgKzE5OSwxNCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogCiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlmIChpc0luaGVyaXQp
IHsgXAotICAgIG1fc3R5bGUtPnNldCMjUHJvcChtX3BhcmVudFN0eWxlLT5wcm9wKCkpOyBcCisg
ICAgbV9zdGF0ZS5zdHlsZS0+c2V0IyNQcm9wKG1fc3RhdGUucGFyZW50U3R5bGUtPnByb3AoKSk7
IFwKICAgICByZXR1cm47IFwKIH0KIAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElB
TChwcm9wLCBQcm9wKSBcCiBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJbml0
aWFsKSB7IFwKLSAgICBtX3N0eWxlLT5zZXQjI1Byb3AoUmVuZGVyU3R5bGU6OmluaXRpYWwjI1By
b3AoKSk7IFwKKyAgICBtX3N0YXRlLnN0eWxlLT5zZXQjI1Byb3AoUmVuZGVyU3R5bGU6OmluaXRp
YWwjI1Byb3AoKSk7IFwKICAgICByZXR1cm47IFwKIH0KIApAQCAtMjY3LDM0ICsyNjYsMTYgQEAg
c3RhdGljIFN0eWxlUHJvcGVydHlTZXQqIHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKQogCiAKIFN0
eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIG1hdGNo
QXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICA6IG1faGFzVUFBcHBlYXJhbmNlKGZhbHNlKQotICAg
ICwgbV9iYWNrZ3JvdW5kRGF0YShCYWNrZ3JvdW5kRmlsbExheWVyKQotICAgICwgbV9tYXRjaGVk
UHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VMYXN0U3dlZXAoMCkKKyAgICA6IG1fbWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwKDApCiAgICAgLCBtX21hdGNo
ZWRQcm9wZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyKHRoaXMsICZTdHlsZVJlc29sdmVyOjpzd2VlcE1h
dGNoZWRQcm9wZXJ0aWVzQ2FjaGUpCiAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwg
bV9zZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQpCi0gICAgLCBtX3BhcmVudFN0eWxlKDApCi0gICAg
LCBtX3Jvb3RFbGVtZW50U3R5bGUoMCkKLSAgICAsIG1fZWxlbWVudCgwKQotICAgICwgbV9zdHls
ZWRFbGVtZW50KDApCi0gICAgLCBtX3JlZ2lvbkZvclN0eWxpbmcoMCkKLSAgICAsIG1fZWxlbWVu
dExpbmtTdGF0ZShOb3RJbnNpZGVMaW5rKQotICAgICwgbV9wYXJlbnROb2RlKDApCi0gICAgLCBt
X2xpbmVIZWlnaHRWYWx1ZSgwKQotICAgICwgbV9mb250RGlydHkoZmFsc2UpCiAgICAgLCBtX21h
dGNoQXV0aG9yQW5kVXNlclN0eWxlcyhtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAgLCBt
X3NhbWVPcmlnaW5Pbmx5KGZhbHNlKQotICAgICwgbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9p
bnQoZmFsc2UpCiAgICAgLCBtX2ZvbnRTZWxlY3RvcihDU1NGb250U2VsZWN0b3I6OmNyZWF0ZShk
b2N1bWVudCkpCiAjaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikKICAgICAsIG1fdmll
d3BvcnRTdHlsZVJlc29sdmVyKFZpZXdwb3J0U3R5bGVSZXNvbHZlcjo6Y3JlYXRlKGRvY3VtZW50
KSkKICNlbmRpZgotICAgICwgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSkKLSAg
ICAsIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSkKICAgICAsIG1fc3R5
bGVCdWlsZGVyKFN0eWxlQnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVyKCkpCi0jaWYgRU5BQkxF
KENTU19TSEFERVJTKQotICAgICwgbV9oYXNQZW5kaW5nU2hhZGVycyhmYWxzZSkKLSNlbmRpZgog
ICAgICwgbV9zdHlsZU1hcCh0aGlzKQogewogICAgIEVsZW1lbnQqIHJvb3QgPSBkb2N1bWVudC0+
ZG9jdW1lbnRFbGVtZW50KCk7CkBAIC02NTcsMjMgKzYzOCwyNiBAQCBib29sIE1hdGNoaW5nVUFS
dWxlc1Njb3BlOjptX21hdGNoaW5nVUFSdWxlcyA9IGZhbHNlOwogdm9pZCBTdHlsZVJlc29sdmVy
Ojpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwg
UnVsZVJhbmdlJiBydWxlUmFuZ2UpCiB7CiAgICAgQVNTRVJUKG1hdGNoUmVxdWVzdC5ydWxlU2V0
KTsKLSAgICBBU1NFUlQobV9lbGVtZW50KTsKKyAgICBBU1NFUlQobV9zdGF0ZS5lbGVtZW50KTsK
IAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHNldWRvSWQgPSBtX2VsZW1lbnQtPnNoYWRvd1Bz
ZXVkb0lkKCk7CisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKyAgICBFbGVtZW50KiBlbGVt
ZW50ID0gc3RhdGUuZWxlbWVudDsKKyAgICBTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0g
c3RhdGUuc3R5bGVkRWxlbWVudDsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHBzZXVkb0lkID0g
ZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKTsKICAgICBpZiAoIXBzZXVkb0lkLmlzRW1wdHkoKSkg
ewotICAgICAgICBBU1NFUlQobV9zdHlsZWRFbGVtZW50KTsKKyAgICAgICAgQVNTRVJUKHN0eWxl
ZEVsZW1lbnQpOwogICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1
ZXN0LnJ1bGVTZXQtPnNoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyhwc2V1ZG9JZC5pbXBsKCkpLCBt
YXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQotICAgIGlmIChtX2VsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpKQorICAgIGlmIChlbGVtZW50
LT5pc1dlYlZUVEVsZW1lbnQoKSkKICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0
KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5jdWVQc2V1ZG9SdWxlcygpLCBtYXRjaFJlcXVlc3QsIHJ1
bGVSYW5nZSk7CiAjZW5kaWYKICAgICAvLyBDaGVjayB3aGV0aGVyIG90aGVyIHR5cGVzIG9mIHJ1
bGVzIGFyZSBhcHBsaWNhYmxlIGluIHRoZSBjdXJyZW50IHRyZWUgc2NvcGUuIENyaXRlcmlhIGZv
ciB0aGlzOgogICAgIC8vIGEpIGl0J3MgYSBVQSBydWxlCiAgICAgLy8gYikgdGhlIHRyZWUgc2Nv
cGUgYWxsb3dzIGF1dGhvciBydWxlcwogICAgIC8vIGMpIHRoZSBydWxlcyBjb21lcyBmcm9tIGEg
c2NvcGVkIHN0eWxlIHNoZWV0IHdpdGhpbiB0aGUgc2FtZSB0cmVlIHNjb3BlCi0gICAgVHJlZVNj
b3BlKiB0cmVlU2NvcGUgPSBtX2VsZW1lbnQtPnRyZWVTY29wZSgpOworICAgIFRyZWVTY29wZSog
dHJlZVNjb3BlID0gZWxlbWVudC0+dHJlZVNjb3BlKCk7CiAgICAgaWYgKCFNYXRjaGluZ1VBUnVs
ZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQogICAgICAgICAmJiAhdHJlZVNjb3BlLT5hcHBs
eUF1dGhvclN0eWxlcygpCiAgICAgICAgICYmICghbWF0Y2hSZXF1ZXN0LnNjb3BlIHx8IG1hdGNo
UmVxdWVzdC5zY29wZS0+dHJlZVNjb3BlKCkgIT0gdHJlZVNjb3BlKSkKQEAgLTY4MSwzMCArNjY1
LDMwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMoY29uc3QgTWF0
Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSCiAKICAgICAvLyBXZSBuZWVkIHRvIGNvbGxl
Y3QgdGhlIHJ1bGVzIGZvciBpZCwgY2xhc3MsIHRhZywgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBpbnRv
IGEgYnVmZmVyIGFuZAogICAgIC8vIHRoZW4gc29ydCB0aGUgYnVmZmVyLgotICAgIGlmIChtX2Vs
ZW1lbnQtPmhhc0lEKCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRj
aFJlcXVlc3QucnVsZVNldC0+aWRSdWxlcyhtX2VsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9u
KCkuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgIGlmIChtX3N0eWxlZEVs
ZW1lbnQgJiYgbV9zdHlsZWRFbGVtZW50LT5oYXNDbGFzcygpKSB7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9zdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKCkuc2l6ZSgpOyArK2kp
Ci0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1
bGVTZXQtPmNsYXNzUnVsZXMobV9zdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKClbaV0uaW1wbCgp
KSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGlmIChlbGVtZW50LT5oYXNJRCgpKQor
ICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQt
PmlkUnVsZXMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpLCBtYXRjaFJl
cXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgaWYgKHN0eWxlZEVsZW1lbnQgJiYgc3R5bGVkRWxlbWVu
dC0+aGFzQ2xhc3MoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0eWxlZEVs
ZW1lbnQtPmNsYXNzTmFtZXMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+Y2xhc3NSdWxlcyhzdHlsZWRF
bGVtZW50LT5jbGFzc05hbWVzKClbaV0uaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2Up
OwogICAgIH0KIAotICAgIGlmIChtX2VsZW1lbnQtPmlzTGluaygpKQorICAgIGlmIChlbGVtZW50
LT5pc0xpbmsoKSkKICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVx
dWVzdC5ydWxlU2V0LT5saW5rUHNldWRvQ2xhc3NSdWxlcygpLCBtYXRjaFJlcXVlc3QsIHJ1bGVS
YW5nZSk7Ci0gICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1hdGNoZXNGb2N1c1BzZXVkb0NsYXNz
KG1fZWxlbWVudCkpCisgICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1hdGNoZXNGb2N1c1BzZXVk
b0NsYXNzKGVsZW1lbnQpKQogICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0
Y2hSZXF1ZXN0LnJ1bGVTZXQtPmZvY3VzUHNldWRvQ2xhc3NSdWxlcygpLCBtYXRjaFJlcXVlc3Qs
IHJ1bGVSYW5nZSk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVz
dC5ydWxlU2V0LT50YWdSdWxlcyhtX2VsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSksIG1hdGNo
UmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0
Y2hSZXF1ZXN0LnJ1bGVTZXQtPnRhZ1J1bGVzKGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSks
IG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxp
c3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPnVuaXZlcnNhbFJ1bGVzKCksIG1hdGNoUmVxdWVzdCwg
cnVsZVJhbmdlKTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxl
c0ZvclJlZ2lvbihjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVJhbmdlJiBy
dWxlUmFuZ2UpCiB7Ci0gICAgaWYgKCFtX3JlZ2lvbkZvclN0eWxpbmcpCisgICAgaWYgKCFtX3N0
YXRlLnJlZ2lvbkZvclN0eWxpbmcpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIHNp
emUgPSBtYXRjaFJlcXVlc3QucnVsZVNldC0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5z
aXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAg
ICBjb25zdCBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IgPSBtYXRjaFJlcXVlc3QucnVsZVNl
dC0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5zZWxlY3RvcjsKLSAgICAgICAg
aWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9uU2VsZWN0b3IsIHN0YXRpY19jYXN0PEVsZW1l
bnQqPihtX3JlZ2lvbkZvclN0eWxpbmctPm5vZGUoKSkpKSB7CisgICAgICAgIGlmIChjaGVja1Jl
Z2lvblNlbGVjdG9yKHJlZ2lvblNlbGVjdG9yLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9zdGF0
ZS5yZWdpb25Gb3JTdHlsaW5nLT5ub2RlKCkpKSkgewogICAgICAgICAgICAgUnVsZVNldCogcmVn
aW9uUnVsZXMgPSBtYXRjaFJlcXVlc3QucnVsZVNldC0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxl
U2V0cy5hdChpKS5ydWxlU2V0LmdldCgpOwogICAgICAgICAgICAgQVNTRVJUKHJlZ2lvblJ1bGVz
KTsKICAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1hdGNoUmVxdWVzdChyZWdpb25S
dWxlcywgbWF0Y2hSZXF1ZXN0LmluY2x1ZGVFbXB0eVJ1bGVzLCBtYXRjaFJlcXVlc3Quc2NvcGUp
LCBydWxlUmFuZ2UpOwpAQCAtNzE0LDI0ICs2OTgsMjUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpj
b2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVx
dWUKIAogdm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0
Y2hSZXN1bHQmIHJlc3VsdCkKIHsKLSAgICBpZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQor
ICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgaWYgKHN0YXRlLm1hdGNoZWRSdWxlcy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKIAog
ICAgIGlmIChtX3NlbGVjdG9yQ2hlY2tlci5tb2RlKCkgPT0gU2VsZWN0b3JDaGVja2VyOjpDb2xs
ZWN0aW5nUnVsZXMpIHsKLSAgICAgICAgaWYgKCFtX3J1bGVMaXN0KQotICAgICAgICAgICAgbV9y
dWxlTGlzdCA9IFN0YXRpY0NTU1J1bGVMaXN0OjpjcmVhdGUoKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAg
bV9ydWxlTGlzdC0+cnVsZXMoKS5hcHBlbmQobV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+Y3Jl
YXRlQ1NTT01XcmFwcGVyKCkpOworICAgICAgICBpZiAoIXN0YXRlLnJ1bGVMaXN0KQorICAgICAg
ICAgICAgc3RhdGUucnVsZUxpc3QgPSBTdGF0aWNDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5tYXRjaGVkUnVsZXMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICBzdGF0ZS5ydWxlTGlzdC0+cnVsZXMoKS5hcHBlbmQoc3RhdGUubWF0
Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmNyZWF0ZUNTU09NV3JhcHBlcigpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVs
ZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBkZWNsYXJhdGlvbnMuCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChtX3N0
eWxlICYmIG1fbWF0Y2hlZFJ1bGVzW2ldLT5jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0
b3IoKSkKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFVuaXF1ZSgpOwotICAgICAgICBhZGRNYXRj
aGVkUHJvcGVydGllcyhyZXN1bHQsIG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPnByb3BlcnRp
ZXMoKSwgbV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKSwgbV9tYXRjaGVkUnVsZXNbaV0tPmxpbmtN
YXRjaFR5cGUoKSwgbV9tYXRjaGVkUnVsZXNbaV0tPnByb3BlcnR5V2hpdGVsaXN0VHlwZSgpKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUubWF0Y2hlZFJ1bGVzLnNpemUoKTsg
aSsrKSB7CisgICAgICAgIGlmIChzdGF0ZS5zdHlsZSAmJiBzdGF0ZS5tYXRjaGVkUnVsZXNbaV0t
PmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQorICAgICAgICAgICAgc3RhdGUu
c3R5bGUtPnNldFVuaXF1ZSgpOworICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQs
IHN0YXRlLm1hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5wcm9wZXJ0aWVzKCksIHN0YXRlLm1hdGNo
ZWRSdWxlc1tpXS0+cnVsZSgpLCBzdGF0ZS5tYXRjaGVkUnVsZXNbaV0tPmxpbmtNYXRjaFR5cGUo
KSwgc3RhdGUubWF0Y2hlZFJ1bGVzW2ldLT5wcm9wZXJ0eVdoaXRlbGlzdFR5cGUoKSk7CiAgICAg
fQogfQogCkBAIC03NDIsMTIgKzcyNywxMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2Nv
cGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdAogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBNYXRjaCBzY29wZWQgYXV0aG9yIHJ1bGVzIGJ5IHRyYXZl
cnNpbmcgdGhlIHNjb3BlZCBlbGVtZW50IHN0YWNrIChyZWJ1aWxkIGl0IGlmIGl0IGdvdCBpbmNv
bnNpc3RlbnQpLgotICAgIGlmIChtX3Njb3BlUmVzb2x2ZXItPmhhc1Njb3BlZFN0eWxlcygpICYm
IG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShtX2VsZW1lbnQpKSB7Ci0g
ICAgICAgIGJvb2wgYXBwbHlBdXRob3JTdHlsZXMgPSBtX2VsZW1lbnQtPnRyZWVTY29wZSgpLT5h
cHBseUF1dGhvclN0eWxlcygpOworICAgIGlmIChtX3Njb3BlUmVzb2x2ZXItPmhhc1Njb3BlZFN0
eWxlcygpICYmIG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShtX3N0YXRl
LmVsZW1lbnQpKSB7CisgICAgICAgIGJvb2wgYXBwbHlBdXRob3JTdHlsZXMgPSBtX3N0YXRlLmVs
ZW1lbnQtPnRyZWVTY29wZSgpLT5hcHBseUF1dGhvclN0eWxlcygpOwogICAgICAgICBib29sIGRv
Y3VtZW50U2NvcGUgPSB0cnVlOwogICAgICAgICB1bnNpZ25lZCBzY29wZVNpemUgPSBtX3Njb3Bl
UmVzb2x2ZXItPnN0YWNrU2l6ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2NvcGVTaXplOyArK2kpIHsKLSAgICAgICAgICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7Cisg
ICAgICAgICAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOwogICAgICAgICAgICAgcmVz
dWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXpl
KCkgLSAxOwogCiAgICAgICAgICAgICBjb25zdCBTdHlsZVNjb3BlUmVzb2x2ZXI6OlN0YWNrRnJh
bWUmIGZyYW1lID0gbV9zY29wZVJlc29sdmVyLT5zdGFja0ZyYW1lQXQoaSk7CkBAIC03NzgsNyAr
NzYzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNo
UmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHQKIGlubGluZSBib29sIFN0eWxlUmVzb2x2
ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKQogewogI2lmIEVOQUJM
RShTSEFET1dfRE9NKQotICAgIHJldHVybiBtX3Njb3BlUmVzb2x2ZXIgJiYgbV9zY29wZVJlc29s
dmVyLT5zdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKG1fZWxlbWVudCk7Cisg
ICAgcmV0dXJuIG1fc2NvcGVSZXNvbHZlciAmJiBtX3Njb3BlUmVzb2x2ZXItPnN0eWxlU2hhcmlu
Z0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMobV9zdGF0ZS5lbGVtZW50KTsKICNlbHNlCiAgICAg
cmV0dXJuIGZhbHNlOwogI2VuZGlmCkBAIC03ODksMTcgKzc3NCwxNyBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVt
cHR5UnVsZXMpCiAjaWYgRU5BQkxFKFNIQURPV19ET00pCiAgICAgQVNTRVJUKG1fc2NvcGVSZXNv
bHZlcik7CiAKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIG1fc3RhdGUubWF0Y2hl
ZFJ1bGVzLmNsZWFyKCk7CiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3Vs
dC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogCiAgICAgVmVjdG9yPFJ1bGVTZXQqPiBt
YXRjaGVkUnVsZXM7Ci0gICAgbV9zY29wZVJlc29sdmVyLT5tYXRjaEhvc3RSdWxlcyhtX2VsZW1l
bnQsIG1hdGNoZWRSdWxlcyk7CisgICAgbV9zY29wZVJlc29sdmVyLT5tYXRjaEhvc3RSdWxlcyht
X3N0YXRlLmVsZW1lbnQsIG1hdGNoZWRSdWxlcyk7CiAgICAgaWYgKG1hdGNoZWRSdWxlcy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGNoZWRS
dWxlcy5zaXplKCk7IGkgPiAwOyAtLWkpIHsKICAgICAgICAgUnVsZVJhbmdlIHJ1bGVSYW5nZSA9
IHJlc3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAgICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzKE1hdGNoUmVxdWVzdChtYXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5UnVs
ZXMsIG1fZWxlbWVudCksIHJ1bGVSYW5nZSk7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
KE1hdGNoUmVxdWVzdChtYXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5UnVsZXMsIG1f
c3RhdGUuZWxlbWVudCksIHJ1bGVSYW5nZSk7CiAgICAgfQogICAgIHNvcnRBbmRUcmFuc2Zlck1h
dGNoZWRSdWxlcyhyZXN1bHQpOwogI2Vsc2UKQEAgLTgxMCwxMCArNzk1LDEwIEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNs
dWRlRW1wdHlSdWxlcykKIAogdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKE1h
dGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7Ci0gICAgbV9tYXRj
aGVkUnVsZXMuY2xlYXIoKTsKKyAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOwogICAg
IHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMu
c2l6ZSgpIC0gMTsKIAotICAgIGlmICghbV9lbGVtZW50KQorICAgIGlmICghbV9zdGF0ZS5lbGVt
ZW50KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXRjaCBnbG9iYWwgYXV0aG9yIHJ1bGVz
LgpAQCAtODMxLDcgKzgxNiw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMo
TWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKICAgICBpZiAoIW1f
dXNlclN0eWxlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9tYXRjaGVkUnVsZXMuY2xl
YXIoKTsKKyAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOwogCiAgICAgcmVzdWx0LnJh
bmdlcy5sYXN0VXNlclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsK
ICAgICBNYXRjaFJlcXVlc3QgbWF0Y2hSZXF1ZXN0KG1fdXNlclN0eWxlLmdldCgpLCBpbmNsdWRl
RW1wdHlSdWxlcyk7CkBAIC04NDQsNyArODI5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRj
aFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQog
CiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBS
dWxlU2V0KiBydWxlcykKIHsKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIG1fc3Rh
dGUubWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAgICAgCiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0VUFS
dWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAgICAgUnVsZVJhbmdl
IHJ1bGVSYW5nZSA9IHJlc3VsdC5yYW5nZXMuVUFSdWxlUmFuZ2UoKTsKQEAgLTg1OCw5ICs4NDMs
MTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29u
c3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGMKICAgICBpZiAoIXJ1bGVzKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIC8vIEluIHNvbWUgY2Fz
ZXMgd2UgbWF5IGVuZCB1cCBsb29raW5nIHVwIHN0eWxlIGZvciByYW5kb20gZWxlbWVudHMgaW4g
dGhlIG1pZGRsZSBvZiBhIHJlY3Vyc2l2ZSB0cmVlIHJlc29sdmUuCiAgICAgLy8gQW5jZXN0b3Ig
aWRlbnRpZmllciBmaWx0ZXIgd29uJ3QgYmUgdXAtdG8tZGF0ZSBpbiB0aGF0IGNhc2UgYW5kIHdl
IGNhbid0IHVzZSB0aGUgZmFzdCBwYXRoLgotICAgIGJvb2wgY2FuVXNlRmFzdFJlamVjdCA9IG1f
c2VsZWN0b3JGaWx0ZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQobV9wYXJlbnROb2RlKTsKKyAg
ICBib29sIGNhblVzZUZhc3RSZWplY3QgPSBtX3NlbGVjdG9yRmlsdGVyLnBhcmVudFN0YWNrSXND
b25zaXN0ZW50KHN0YXRlLnBhcmVudE5vZGUpOwogCiAgICAgdW5zaWduZWQgc2l6ZSA9IHJ1bGVz
LT5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpAQCAt
ODc4LDE5ICs4NjQsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxl
c0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGMKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIEZJWE1FOiBFeHBvc2lu
ZyB0aGUgbm9uLXN0YW5kYXJkIGdldE1hdGNoZWRDU1NSdWxlcyBBUEkgdG8gd2ViIGlzIHRoZSBv
bmx5IHJlYXNvbiB0aGlzIGlzIG5lZWRlZC4KLSAgICAgICAgICAgIGlmIChtX3NhbWVPcmlnaW5P
bmx5ICYmICFydWxlRGF0YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkpIHsKKyAgICAgICAg
ICAgIGlmIChzdGF0ZS5zYW1lT3JpZ2luT25seSAmJiAhcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbigpKSB7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBtYXRjaGluZyBub3JtYWwg
cnVsZXMsIHNldCBhIHBzZXVkbyBiaXQgaWYKICAgICAgICAgICAgIC8vIHdlIHJlYWxseSBqdXN0
IG1hdGNoZWQgYSBwc2V1ZG8tZWxlbWVudC4KLSAgICAgICAgICAgIGlmIChtX2R5bmFtaWNQc2V1
ZG8gIT0gTk9QU0VVRE8gJiYgbV9wc2V1ZG9TdHlsZSA9PSBOT1BTRVVETykgeworICAgICAgICAg
ICAgaWYgKHN0YXRlLmR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgc3RhdGUucHNldWRvU3R5
bGUgPT0gTk9QU0VVRE8pIHsKICAgICAgICAgICAgICAgICBpZiAobV9zZWxlY3RvckNoZWNrZXIu
bW9kZSgpID09IFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7CiAgICAgICAgICAg
ICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwg
ZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKG1fZHluYW1pY1BzZXVkbyA8IEZJUlNUX0lOVEVSTkFMX1BT
RVVET0lEKQotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZSht
X2R5bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5keW5hbWljUHNldWRv
IDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0
eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZShzdGF0ZS5keW5hbWljUHNldWRvKTsKICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIG91ciBmaXJzdC9sYXN0IHJ1bGUg
aW5kaWNlcyBpbiB0aGUgbWF0Y2hlZCBydWxlcyBhcnJheS4KICAgICAgICAgICAgICAgICArK3J1
bGVSYW5nZS5sYXN0UnVsZUluZGV4OwpAQCAtOTE2LDcgKzkwMiw3IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBjb21wYXJlUnVsZXMoY29uc3QgUnVsZURhdGEqIHIxLCBjb25zdCBSdWxlRGF0YSogcjIp
CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRSdWxlcygpCiB7Ci0gICAgc3RkOjpz
b3J0KG1fbWF0Y2hlZFJ1bGVzLmJlZ2luKCksIG1fbWF0Y2hlZFJ1bGVzLmVuZCgpLCBjb21wYXJl
UnVsZXMpOworICAgIHN0ZDo6c29ydChtX3N0YXRlLm1hdGNoZWRSdWxlcy5iZWdpbigpLCBtX3N0
YXRlLm1hdGNoZWRSdWxlcy5lbmQoKSwgY29tcGFyZVJ1bGVzKTsKIH0KIAogdm9pZCBTdHlsZVJl
c29sdmVyOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNN
SUxQcm9wZXJ0aWVzKQpAQCAtOTI2LDE5ICs5MTIsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpt
YXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0
aWUKICAgICAvLyBOb3cgd2UgY2hlY2sgdXNlciBzaGVldCBydWxlcy4KICAgICBpZiAobV9tYXRj
aEF1dGhvckFuZFVzZXJTdHlsZXMpCiAgICAgICAgIG1hdGNoVXNlclJ1bGVzKHJlc3VsdCwgZmFs
c2UpOwotICAgICAgICAKKwogICAgIC8vIE5vdyBjaGVjayBhdXRob3IgcnVsZXMsIGJlZ2lubmlu
ZyBmaXJzdCB3aXRoIHByZXNlbnRhdGlvbmFsIGF0dHJpYnV0ZXMgbWFwcGVkIGZyb20gSFRNTC4K
LSAgICBpZiAobV9zdHlsZWRFbGVtZW50KSB7Ci0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3Bl
cnRpZXMocmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQtPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
KCkpOworICAgIGlmIChtX3N0YXRlLnN0eWxlZEVsZW1lbnQpIHsKKyAgICAgICAgYWRkRWxlbWVu
dFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3RhdGUuc3R5bGVkRWxlbWVudC0+cHJlc2VudGF0
aW9uQXR0cmlidXRlU3R5bGUoKSk7CiAKICAgICAgICAgLy8gTm93IHdlIGNoZWNrIGFkZGl0aW9u
YWwgbWFwcGVkIGRlY2xhcmF0aW9ucy4KICAgICAgICAgLy8gVGFibGVzIGFuZCB0YWJsZSBjZWxs
cyBzaGFyZSBhbiBhZGRpdGlvbmFsIG1hcHBlZCBydWxlIHRoYXQgbXVzdCBiZSBhcHBsaWVkCiAg
ICAgICAgIC8vIGFmdGVyIGFsbCBhdHRyaWJ1dGVzLCBzaW5jZSB0aGVpciBtYXBwZWQgc3R5bGUg
ZGVwZW5kcyBvbiB0aGUgdmFsdWVzIG9mIG11bHRpcGxlIGF0dHJpYnV0ZXMuCi0gICAgICAgIGFk
ZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9u
YWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKKyAgICAgICAgYWRkRWxlbWVudFN0eWxl
UHJvcGVydGllcyhyZXN1bHQsIG1fc3RhdGUuc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbFByZXNl
bnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOwogCi0gICAgICAgIGlmIChtX3N0eWxlZEVsZW1lbnQt
PmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5p
c0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNBdXRvOwotICAgICAgICAgICAg
VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVudChtX3N0eWxlZEVsZW1l
bnQpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOworICAgICAg
ICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVudChtX3N0YXRl
LnN0eWxlZEVsZW1lbnQpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1
dG8pOwogICAgICAgICAgICAgaWYgKGlzQXV0bykKICAgICAgICAgICAgICAgICBhZGRNYXRjaGVk
UHJvcGVydGllcyhyZXN1bHQsIHRleHREaXJlY3Rpb24gPT0gTFRSID8gbGVmdFRvUmlnaHREZWNs
YXJhdGlvbigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpKTsKICAgICAgICAgfQpAQCAtOTQ5
LDE4ICs5MzUsMTggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVz
dWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWUKICAgICAgICAgbWF0Y2hBdXRo
b3JSdWxlcyhyZXN1bHQsIGZhbHNlKTsKIAogICAgIC8vIE5vdyBjaGVjayBvdXIgaW5saW5lIHN0
eWxlIGF0dHJpYnV0ZS4KLSAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9z
dHlsZWRFbGVtZW50ICYmIG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSkgeworICAgIGlm
IChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0YXRlLnN0eWxlZEVsZW1lbnQgJiYg
bV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpKSB7CiAgICAgICAgIC8vIElubGlu
ZSBzdHlsZSBpcyBpbW11dGFibGUgYXMgbG9uZyBhcyB0aGVyZSBpcyBubyBDU1NPTSB3cmFwcGVy
LgogICAgICAgICAvLyBGSVhNRTogTWVkaWEgY29udHJvbCBzaGFkb3cgdHJlZXMgc2VlbSB0byBo
YXZlIHByb2JsZW1zIHdpdGggY2FjaGluZy4KLSAgICAgICAgYm9vbCBpc0lubGluZVN0eWxlQ2Fj
aGVhYmxlID0gIW1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKS0+aXNNdXRhYmxlKCkgJiYg
IW1fc3R5bGVkRWxlbWVudC0+aXNJblNoYWRvd1RyZWUoKTsKKyAgICAgICAgYm9vbCBpc0lubGlu
ZVN0eWxlQ2FjaGVhYmxlID0gIW1fc3RhdGUuc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKS0+
aXNNdXRhYmxlKCkgJiYgIW1fc3RhdGUuc3R5bGVkRWxlbWVudC0+aXNJblNoYWRvd1RyZWUoKTsK
ICAgICAgICAgLy8gRklYTUU6IENvbnN0aWZ5LgotICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9w
ZXJ0aWVzKHJlc3VsdCwgbV9zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpLCBpc0lubGluZVN0
eWxlQ2FjaGVhYmxlKTsKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQs
IG1fc3RhdGUuc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSwgaXNJbmxpbmVTdHlsZUNhY2hl
YWJsZSk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBOb3cgY2hlY2sgU01JTCBh
bmltYXRpb24gb3ZlcnJpZGUgc3R5bGUuCi0gICAgaWYgKGluY2x1ZGVTTUlMUHJvcGVydGllcyAm
JiBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQgJiYgbV9zdHls
ZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVy
dGllcyhyZXN1bHQsIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihtX3N0eWxlZEVsZW1lbnQpLT5h
bmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSwgZmFsc2UgLyogaXNDYWNoZWFibGUgKi8pOwor
ICAgIGlmIChpbmNsdWRlU01JTFByb3BlcnRpZXMgJiYgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHls
ZXMgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50ICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVudC0+aXNT
VkdFbGVtZW50KCkpCisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBz
dGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obV9zdGF0ZS5zdHlsZWRFbGVtZW50KS0+YW5pbWF0ZWRT
TUlMU3R5bGVQcm9wZXJ0aWVzKCksIGZhbHNlIC8qIGlzQ2FjaGVhYmxlICovKTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVTTUlMUHJvcGVydGllcyk7CiAjZW5kaWYKQEAgLTk3Nywx
MCArOTYzLDEwIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxl
cyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzCiAKIGlubGluZSB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmluaXRFbGVtZW50KEVsZW1lbnQqIGUpCiB7Ci0gICAgaWYgKG1fZWxlbWVudCAh
PSBlKSB7Ci0gICAgICAgIG1fZWxlbWVudCA9IGU7Ci0gICAgICAgIG1fc3R5bGVkRWxlbWVudCA9
IG1fZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8
U3R5bGVkRWxlbWVudCo+KG1fZWxlbWVudCkgOiAwOwotICAgICAgICBtX2VsZW1lbnRMaW5rU3Rh
dGUgPSBkb2N1bWVudCgpLT52aXNpdGVkTGlua1N0YXRlKCktPmRldGVybWluZUxpbmtTdGF0ZSht
X2VsZW1lbnQpOworICAgIGlmIChtX3N0YXRlLmVsZW1lbnQgIT0gZSkgeworICAgICAgICBtX3N0
YXRlLmVsZW1lbnQgPSBlOworICAgICAgICBtX3N0YXRlLnN0eWxlZEVsZW1lbnQgPSBtX3N0YXRl
LmVsZW1lbnQgJiYgbV9zdGF0ZS5lbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSA/IHN0YXRpY19j
YXN0PFN0eWxlZEVsZW1lbnQqPihtX3N0YXRlLmVsZW1lbnQpIDogMDsKKyAgICAgICAgbV9zdGF0
ZS5lbGVtZW50TGlua1N0YXRlID0gZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtTdGF0ZSgpLT5kZXRl
cm1pbmVMaW5rU3RhdGUoZSk7CiAgICAgICAgIGlmIChlICYmIGUgPT0gZS0+ZG9jdW1lbnQoKS0+
ZG9jdW1lbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldERpcmVj
dGlvblNldE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsKICAgICAgICAgICAgIGUtPmRvY3VtZW50
KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOwpAQCAtOTkwLDMy
ICs5NzYsMzMgQEAgaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEVsZW1lbnQoRWxlbWVu
dCogZSkKIAogaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEZvclN0eWxlUmVzb2x2ZShF
bGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFBzZXVkb0lkIHBzZXVkb0lEKQog
ewotICAgIG1fcHNldWRvU3R5bGUgPSBwc2V1ZG9JRDsKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0
YXRlOworICAgIHN0YXRlLnBzZXVkb1N0eWxlID0gcHNldWRvSUQ7CiAKICAgICBpZiAoZSkgewog
ICAgICAgICBOb2RlUmVuZGVyaW5nQ29udGV4dCBjb250ZXh0KGUpOwotICAgICAgICBtX3BhcmVu
dE5vZGUgPSBjb250ZXh0LnBhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHlsZSgpOwotICAgICAg
ICBtX3BhcmVudFN0eWxlID0gY29udGV4dC5yZXNldFN0eWxlSW5oZXJpdGFuY2UoKSA/IDAgOgor
ICAgICAgICBzdGF0ZS5wYXJlbnROb2RlID0gY29udGV4dC5wYXJlbnROb2RlRm9yUmVuZGVyaW5n
QW5kU3R5bGUoKTsKKyAgICAgICAgc3RhdGUucGFyZW50U3R5bGUgPSBjb250ZXh0LnJlc2V0U3R5
bGVJbmhlcml0YW5jZSgpID8gMCA6CiAgICAgICAgICAgICBwYXJlbnRTdHlsZSA/IHBhcmVudFN0
eWxlIDoKLSAgICAgICAgICAgIG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5
bGUoKSA6IDA7Ci0gICAgICAgIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50ID0gY29udGV4
dC5pbnNlcnRpb25Qb2ludCgpOworICAgICAgICAgICAgc3RhdGUucGFyZW50Tm9kZSA/IHN0YXRl
LnBhcmVudE5vZGUtPnJlbmRlclN0eWxlKCkgOiAwOworICAgICAgICBzdGF0ZS5kaXN0cmlidXRl
ZFRvSW5zZXJ0aW9uUG9pbnQgPSBjb250ZXh0Lmluc2VydGlvblBvaW50KCk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgbV9wYXJlbnROb2RlID0gMDsKLSAgICAgICAgbV9wYXJlbnRTdHlsZSA9IHBh
cmVudFN0eWxlOwotICAgICAgICBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCA9IGZhbHNl
OworICAgICAgICBzdGF0ZS5wYXJlbnROb2RlID0gMDsKKyAgICAgICAgc3RhdGUucGFyZW50U3R5
bGUgPSBwYXJlbnRTdHlsZTsKKyAgICAgICAgc3RhdGUuZGlzdHJpYnV0ZWRUb0luc2VydGlvblBv
aW50ID0gZmFsc2U7CiAgICAgfQogCiAgICAgTm9kZSogZG9jRWxlbWVudCA9IGUgPyBlLT5kb2N1
bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA6IDA7CiAgICAgUmVuZGVyU3R5bGUqIGRvY1N0eWxl
ID0gZG9jdW1lbnQoKS0+cmVuZGVyU3R5bGUoKTsKLSAgICBtX3Jvb3RFbGVtZW50U3R5bGUgPSBk
b2NFbGVtZW50ICYmIGUgIT0gZG9jRWxlbWVudCA/IGRvY0VsZW1lbnQtPnJlbmRlclN0eWxlKCkg
OiBkb2NTdHlsZTsKKyAgICBzdGF0ZS5yb290RWxlbWVudFN0eWxlID0gZG9jRWxlbWVudCAmJiBl
ICE9IGRvY0VsZW1lbnQgPyBkb2NFbGVtZW50LT5yZW5kZXJTdHlsZSgpIDogZG9jU3R5bGU7CiAK
LSAgICBtX3N0eWxlID0gMDsKKyAgICBzdGF0ZS5zdHlsZSA9IDA7CiAKLSAgICBtX3BlbmRpbmdJ
bWFnZVByb3BlcnRpZXMuY2xlYXIoKTsKKyAgICBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVz
LmNsZWFyKCk7CiAKLSAgICBtX3J1bGVMaXN0ID0gMDsKKyAgICBzdGF0ZS5ydWxlTGlzdCA9IDA7
CiAKLSAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOworICAgIHN0YXRlLmZvbnREaXJ0eSA9IGZhbHNl
OwogfQogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoVGhyZXNob2xkID0gMTA7
CkBAIC0xMDc4LDIzICsxMDY1LDI0IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5n
Q2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoUnVsZVNldCogcnVsZVNldCkKIHsKICAgICBpZiAoIXJ1
bGVTZXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigp
OworICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAKICAgICBtX3NlbGVjdG9yQ2hl
Y2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6U2hhcmluZ1J1bGVzKTsKICAgICBpbnQgZmly
c3RSdWxlSW5kZXggPSAtMSwgbGFzdFJ1bGVJbmRleCA9IC0xOwogICAgIFJ1bGVSYW5nZSBydWxl
UmFuZ2UoZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwogICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzKE1hdGNoUmVxdWVzdChydWxlU2V0KSwgcnVsZVJhbmdlKTsKICAgICBtX3NlbGVjdG9y
Q2hlY2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpOwotICAgIGlm
IChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgaWYgKG1fc3RhdGUubWF0Y2hlZFJ1bGVz
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbWF0Y2hlZFJ1bGVzLmNs
ZWFyKCk7CisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuY2xlYXIoKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5
bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKKyAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBt
X3N0YXRlOwogICAgIEhUTUxJbnB1dEVsZW1lbnQqIHRoaXNJbnB1dEVsZW1lbnQgPSBlbGVtZW50
LT50b0lucHV0RWxlbWVudCgpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIG90aGVySW5wdXRFbGVt
ZW50ID0gbV9lbGVtZW50LT50b0lucHV0RWxlbWVudCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQq
IG90aGVySW5wdXRFbGVtZW50ID0gc3RhdGUuZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKIAog
ICAgIGlmICghdGhpc0lucHV0RWxlbWVudCB8fCAhb3RoZXJJbnB1dEVsZW1lbnQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTExMTUsMjUgKzExMDMsMjUgQEAgYm9vbCBTdHlsZVJlc29sdmVy
OjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QK
ICAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+aXNSZXF1aXJlZCgpICE9IG90aGVySW5wdXRFbGVt
ZW50LT5pc1JlcXVpcmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVt
ZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpICE9IG1fZWxlbWVudC0+aXNFbmFibGVkRm9ybUNv
bnRyb2woKSkKKyAgICBpZiAoZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSAhPSBzdGF0
ZS5lbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAoZWxlbWVudC0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpICE9IG1fZWxlbWVu
dC0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpKQorICAgIGlmIChlbGVtZW50LT5pc0RlZmF1bHRC
dXR0b25Gb3JGb3JtKCkgIT0gc3RhdGUuZWxlbWVudC0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9lbGVtZW50LT5kb2N1bWVudCgp
LT5jb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpKSB7CisgICAgaWYgKHN0YXRlLmVsZW1lbnQt
PmRvY3VtZW50KCktPmNvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCkpIHsKICAgICAgICAgYm9v
bCB3aWxsVmFsaWRhdGUgPSBlbGVtZW50LT53aWxsVmFsaWRhdGUoKTsKIAotICAgICAgICBpZiAo
d2lsbFZhbGlkYXRlICE9IG1fZWxlbWVudC0+d2lsbFZhbGlkYXRlKCkpCisgICAgICAgIGlmICh3
aWxsVmFsaWRhdGUgIT0gc3RhdGUuZWxlbWVudC0+d2lsbFZhbGlkYXRlKCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAmJiAoZWxlbWVudC0+
aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpICE9IG1fZWxlbWVudC0+aXNWYWxpZEZvcm1Db250
cm9sRWxlbWVudCgpKSkKKyAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAmJiAoZWxlbWVudC0+aXNW
YWxpZEZvcm1Db250cm9sRWxlbWVudCgpICE9IHN0YXRlLmVsZW1lbnQtPmlzVmFsaWRGb3JtQ29u
dHJvbEVsZW1lbnQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYg
KGVsZW1lbnQtPmlzSW5SYW5nZSgpICE9IG1fZWxlbWVudC0+aXNJblJhbmdlKCkpCisgICAgICAg
IGlmIChlbGVtZW50LT5pc0luUmFuZ2UoKSAhPSBzdGF0ZS5lbGVtZW50LT5pc0luUmFuZ2UoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoZWxlbWVudC0+aXNPdXRP
ZlJhbmdlKCkgIT0gbV9lbGVtZW50LT5pc091dE9mUmFuZ2UoKSkKKyAgICAgICAgaWYgKGVsZW1l
bnQtPmlzT3V0T2ZSYW5nZSgpICE9IHN0YXRlLmVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTE0OCwyNSArMTEzNiwyNiBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oRWxlbWVudCogZWxlbWVu
dCkKIAogYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5
bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdDYW5kaWRhdGUpIGNv
bnN0CiB7Ci0gICAgaWYgKG1fZWxlbWVudC0+YXR0cmlidXRlRGF0YSgpID09IHNoYXJpbmdDYW5k
aWRhdGUtPmF0dHJpYnV0ZURhdGEoKSkKKyAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRl
OworICAgIGlmIChzdGF0ZS5lbGVtZW50LT5hdHRyaWJ1dGVEYXRhKCkgPT0gc2hhcmluZ0NhbmRp
ZGF0ZS0+YXR0cmlidXRlRGF0YSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAobV9l
bGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikgIT0gc2hhcmluZ0Nh
bmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpKQorICAgIGlmIChz
dGF0ZS5lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikgIT0gc2hh
cmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShs
YW5nQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikp
CisgICAgaWYgKHN0YXRlLmVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIpICE9IHNo
YXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAoIW1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKSB7Cisg
ICAgaWYgKCFzdGF0ZS5lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMpIHsKICAgICAgICAgaWYg
KHNoYXJpbmdDYW5kaWRhdGUtPmhhc0NsYXNzKCkgJiYgY2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxl
cyhzaGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05hbWVzKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0gZWxzZSBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aGFzQ2xhc3MoKSkgewogI2lm
IEVOQUJMRShTVkcpCiAgICAgICAgIC8vIFNWRyBlbGVtZW50cyByZXF1aXJlIGEgKHNsb3chKSBn
ZXRBdHRyaWJ1dGUgY29tcGFyaXNpb24gYmVjYXVzZSAiY2xhc3MiIGlzIGFuIGFuaW1hdGFibGUg
YXR0cmlidXRlIGZvciBTVkcuCi0gICAgICAgIGlmIChtX2VsZW1lbnQtPmlzU1ZHRWxlbWVudCgp
KSB7Ci0gICAgICAgICAgICBpZiAobV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSAh
PSBzaGFyaW5nQ2FuZGlkYXRlLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSkKKyAgICAgICAgaWYg
KHN0YXRlLmVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUu
ZWxlbWVudC0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Z2V0
QXR0cmlidXRlKGNsYXNzQXR0cikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9IGVsc2UgewogI2VuZGlmCi0gICAgICAgICAgICBpZiAobV9lbGVtZW50LT5jbGFzc05h
bWVzKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Y2xhc3NOYW1lcygpKQorICAgICAgICAgICAgaWYg
KHN0YXRlLmVsZW1lbnQtPmNsYXNzTmFtZXMoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05h
bWVzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2lmIEVOQUJMRShTVkcpCiAg
ICAgICAgIH0KQEAgLTExNzQsMTIgKzExNjMsMTIgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFy
aW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEUK
ICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fc3R5bGVkRWxl
bWVudC0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5w
cmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQorICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50
LT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUtPnByZXNl
bnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIEVO
QUJMRShQUk9HUkVTU19FTEVNRU5UKQotICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUocHJv
Z3Jlc3NUYWcpKSB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50
Kj4obV9lbGVtZW50KS0+aXNEZXRlcm1pbmF0ZSgpICE9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVz
c0VsZW1lbnQqPihzaGFyaW5nQ2FuZGlkYXRlKS0+aXNEZXRlcm1pbmF0ZSgpKQorICAgIGlmIChz
dGF0ZS5lbGVtZW50LT5oYXNUYWdOYW1lKHByb2dyZXNzVGFnKSkgeworICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KHN0YXRlLmVsZW1lbnQpLT5pc0RldGVybWlu
YXRlKCkgIT0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KHNoYXJpbmdDYW5kaWRh
dGUpLT5pc0RldGVybWluYXRlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
I2VuZGlmCkBAIC0xMTkwLDEyICsxMTc5LDEzIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmlu
Z0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFCiBi
b29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50
KiBlbGVtZW50KSBjb25zdAogewogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnQtPnJl
bmRlclN0eWxlKCk7CisgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKIAogICAgIGlm
ICghc3R5bGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoc3R5bGUtPnVuaXF1ZSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPnRhZ1FOYW1lKCkgIT0g
bV9lbGVtZW50LT50YWdRTmFtZSgpKQorICAgIGlmIChlbGVtZW50LT50YWdRTmFtZSgpICE9IHN0
YXRlLmVsZW1lbnQtPnRhZ1FOYW1lKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAo
ZWxlbWVudC0+aW5saW5lU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTIwNSwy
MSArMTE5NSwyMSBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVu
dChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgIGlmIChlbGVtZW50LT5pc1NWR0Vs
ZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oZWxlbWVudCktPmFuaW1hdGVkU01J
TFN0eWxlUHJvcGVydGllcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKLSAgICBp
ZiAoZWxlbWVudC0+aXNMaW5rKCkgIT0gbV9lbGVtZW50LT5pc0xpbmsoKSkKKyAgICBpZiAoZWxl
bWVudC0+aXNMaW5rKCkgIT0gc3RhdGUuZWxlbWVudC0+aXNMaW5rKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+aG92ZXJlZCgpICE9IG1fZWxlbWVudC0+aG92ZXJl
ZCgpKQorICAgIGlmIChlbGVtZW50LT5ob3ZlcmVkKCkgIT0gc3RhdGUuZWxlbWVudC0+aG92ZXJl
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmFjdGl2ZSgpICE9
IG1fZWxlbWVudC0+YWN0aXZlKCkpCisgICAgaWYgKGVsZW1lbnQtPmFjdGl2ZSgpICE9IHN0YXRl
LmVsZW1lbnQtPmFjdGl2ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1l
bnQtPmZvY3VzZWQoKSAhPSBtX2VsZW1lbnQtPmZvY3VzZWQoKSkKKyAgICBpZiAoZWxlbWVudC0+
Zm9jdXNlZCgpICE9IHN0YXRlLmVsZW1lbnQtPmZvY3VzZWQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChlbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpICE9IG1fZWxlbWVudC0+c2hh
ZG93UHNldWRvSWQoKSkKKyAgICBpZiAoZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKSAhPSBzdGF0
ZS5lbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpZiAoIXNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHls
ZUFmZmVjdGluZ0F0dHJpYnV0ZXMoZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoZWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0g
bV9zdHlsZWRFbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkK
KyAgICBpZiAoZWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkg
IT0gc3RhdGUuc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0
eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChlbGVtZW50LT5oYXNJRCgp
ICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVz
b2x1dGlvbigpLmltcGwoKSkpCkBAIC0xMjM1LDcgKzEyMjUsNyBAQCBib29sIFN0eWxlUmVzb2x2
ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25z
dAogCiAgICAgYm9vbCBpc0NvbnRyb2wgPSBlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgp
OwogCi0gICAgaWYgKGlzQ29udHJvbCAhPSBtX2VsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50
KCkpCisgICAgaWYgKGlzQ29udHJvbCAhPSBzdGF0ZS5lbGVtZW50LT5pc0Zvcm1Db250cm9sRWxl
bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaXNDb250cm9sICYmICFj
YW5TaGFyZVN0eWxlV2l0aENvbnRyb2woZWxlbWVudCkpCkBAIC0xMjU5LDIwICsxMjQ5LDIwIEBA
IGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1l
bnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKGVsZW1l
bnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkg
JiYgbV9lbGVtZW50TGlua1N0YXRlICE9IHN0eWxlLT5pbnNpZGVMaW5rKCkpCisgICAgaWYgKGVs
ZW1lbnQtPmlzTGluaygpICYmIHN0YXRlLmVsZW1lbnRMaW5rU3RhdGUgIT0gc3R5bGUtPmluc2lk
ZUxpbmsoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQogICAgIC8vIERlbnkgc2hhcmluZyBzdHlsZXMgYmV0d2VlbiBXZWJWVFQgYW5kIG5vbi1XZWJW
VFQgbm9kZXMuCi0gICAgaWYgKGVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpICE9IG1fZWxlbWVu
dC0+aXNXZWJWVFRFbGVtZW50KCkpCisgICAgaWYgKGVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgp
ICE9IHN0YXRlLmVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYgbV9lbGVtZW50LT5p
c1dlYlZUVEVsZW1lbnQoKSAmJiB0b1dlYlZUVEVsZW1lbnQoZWxlbWVudCktPmlzUGFzdE5vZGUo
KSAhPSB0b1dlYlZUVEVsZW1lbnQobV9lbGVtZW50KS0+aXNQYXN0Tm9kZSgpKQorICAgIGlmIChl
bGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50LT5pc1dlYlZUVEVsZW1l
bnQoKSAmJiB0b1dlYlZUVEVsZW1lbnQoZWxlbWVudCktPmlzUGFzdE5vZGUoKSAhPSB0b1dlYlZU
VEVsZW1lbnQoc3RhdGUuZWxlbWVudCktPmlzUGFzdE5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgaWYgKGVsZW1l
bnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50
KCkgfHwgbV9lbGVtZW50ID09IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1
bGxTY3JlZW5FbGVtZW50KCkpCisgICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQo
KS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCkgfHwgc3RhdGUuZWxlbWVudCA9PSBz
dGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CkBAIC0x
MjkzLDM2ICsxMjgzLDM4IEBAIGlubGluZSBTdHlsZWRFbGVtZW50KiBTdHlsZVJlc29sdmVyOjpm
aW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiBub2RlLCB1bnNpCiAKIFJlbmRlclN0eWxl
KiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiB7Ci0gICAgaWYgKCFtX3N0eWxl
ZEVsZW1lbnQgfHwgIW1fcGFyZW50U3R5bGUpCisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsK
KyAgICBpZiAoIXN0YXRlLnN0eWxlZEVsZW1lbnQgfHwgIXN0YXRlLnBhcmVudFN0eWxlKQogICAg
ICAgICByZXR1cm4gMDsKKwogICAgIC8vIElmIHRoZSBlbGVtZW50IGhhcyBpbmxpbmUgc3R5bGUg
aXQgaXMgcHJvYmFibHkgdW5pcXVlLgotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0
eWxlKCkpCisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCkpCiAgICAg
ICAgIHJldHVybiAwOwogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+
aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3R5bGVkRWxlbWVu
dCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQorICAgIGlmIChzdGF0ZS5zdHlsZWRF
bGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oc3RhdGUu
c3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQogICAgICAgICBy
ZXR1cm4gMDsKICNlbmRpZgogICAgIC8vIElkcyBzdG9wIHN0eWxlIHNoYXJpbmcgaWYgdGhleSBz
aG93IHVwIGluIHRoZSBzdHlsZXNoZWV0cy4KLSAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5oYXNJ
RCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhtX3N0eWxlZEVsZW1lbnQtPmlk
Rm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVu
dC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMoc3RhdGUuc3R5bGVk
RWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQogICAgICAgICByZXR1cm4g
MDsKLSAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhtX2VsZW1lbnQtPnBhcmVu
dEVsZW1lbnQoKSkpCisgICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcoc3RhdGUu
ZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKG1f
c3R5bGVkRWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICBpZiAoc3RhdGUu
c3R5bGVkRWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgaWYgKG1fZWxlbWVudCA9PSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNzc1Rhcmdl
dCgpKQorICAgIGlmIChzdGF0ZS5lbGVtZW50ID09IHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkt
PmNzc1RhcmdldCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoZWxlbWVudEhhc0RpcmVj
dGlvbkF1dG8obV9lbGVtZW50KSkKKyAgICBpZiAoZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oc3Rh
dGUuZWxlbWVudCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgLy8gQ2FjaGUgd2hldGhlciBt
X2VsZW1lbnQgaXMgYWZmZWN0ZWQgYnkgYW55IGtub3duIGNsYXNzIHNlbGVjdG9ycy4KKyAgICAv
LyBDYWNoZSB3aGV0aGVyIHN0YXRlLmVsZW1lbnQgaXMgYWZmZWN0ZWQgYnkgYW55IGtub3duIGNs
YXNzIHNlbGVjdG9ycy4KICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgYSBtZW1iZXIg
dmFyaWFibGUuIFRoZSBzdHlsZSBzaGFyaW5nIGNvZGUgY291bGQgYmUgZmFjdG9yZWQgb3V0IG9m
IFN0eWxlUmVzb2x2ZXIuCi0gICAgbV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMgPSBtX2Vs
ZW1lbnQgJiYgbV9lbGVtZW50LT5oYXNDbGFzcygpICYmIGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVs
ZXMobV9lbGVtZW50LT5jbGFzc05hbWVzKCkpOworICAgIHN0YXRlLmVsZW1lbnRBZmZlY3RlZEJ5
Q2xhc3NSdWxlcyA9IHN0YXRlLmVsZW1lbnQgJiYgc3RhdGUuZWxlbWVudC0+aGFzQ2xhc3MoKSAm
JiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKHN0YXRlLmVsZW1lbnQtPmNsYXNzTmFtZXMoKSk7
CiAKICAgICAvLyBDaGVjayBwcmV2aW91cyBzaWJsaW5ncyBhbmQgdGhlaXIgY291c2lucy4KICAg
ICB1bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgdW5zaWduZWQgdmlzaXRlZE5vZGVDb3VudCA9IDA7
CiAgICAgU3R5bGVkRWxlbWVudCogc2hhcmVFbGVtZW50ID0gMDsKLSAgICBOb2RlKiBjb3VzaW5M
aXN0ID0gbV9zdHlsZWRFbGVtZW50LT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICBOb2RlKiBjb3Vz
aW5MaXN0ID0gc3RhdGUuc3R5bGVkRWxlbWVudC0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgd2hp
bGUgKGNvdXNpbkxpc3QpIHsKICAgICAgICAgc2hhcmVFbGVtZW50ID0gZmluZFNpYmxpbmdGb3JT
dHlsZVNoYXJpbmcoY291c2luTGlzdCwgY291bnQpOwogICAgICAgICBpZiAoc2hhcmVFbGVtZW50
KQpAQCAtMTM0NCw3ICsxMzM2LDcgQEAgUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0
ZVNoYXJlZFN0eWxlKCkKICAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RS
dWxlcygpKQogICAgICAgICByZXR1cm4gMDsKICAgICAvLyBUcmFja2luZyBjaGlsZCBpbmRleCBy
ZXF1aXJlcyB1bmlxdWUgc3R5bGUgZm9yIGVhY2ggbm9kZS4gVGhpcyBtYXkgZ2V0IHNldCBieSB0
aGUgc2libGluZyBydWxlIG1hdGNoIGFib3ZlLgotICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVu
dHNTaGFyaW5nKG1fZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSkKKyAgICBpZiAocGFyZW50RWxl
bWVudFByZXZlbnRzU2hhcmluZyhzdGF0ZS5lbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpKQogICAg
ICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc2hhcmVFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwog
fQpAQCAtMTU2NCwxMCArMTU1NiwxMSBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJl
c29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyUwogICAgICAg
ICByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsKICAgICB9CiAKKyAgICBTdGF0ZSYgc3Rh
dGUgPSBtX3N0YXRlOwogICAgIGluaXRFbGVtZW50KGVsZW1lbnQpOwogICAgIGluaXRGb3JTdHls
ZVJlc29sdmUoZWxlbWVudCwgZGVmYXVsdFBhcmVudCk7Ci0gICAgbV9yZWdpb25Gb3JTdHlsaW5n
ID0gcmVnaW9uRm9yU3R5bGluZzsKLSAgICBpZiAoc2hhcmluZ0JlaGF2aW9yID09IEFsbG93U3R5
bGVTaGFyaW5nICYmICFtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCkgeworICAgIHN0YXRl
LnJlZ2lvbkZvclN0eWxpbmcgPSByZWdpb25Gb3JTdHlsaW5nOworICAgIGlmIChzaGFyaW5nQmVo
YXZpb3IgPT0gQWxsb3dTdHlsZVNoYXJpbmcgJiYgIXN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRp
b25Qb2ludCkgewogICAgICAgICBSZW5kZXJTdHlsZSogc2hhcmVkU3R5bGUgPSBsb2NhdGVTaGFy
ZWRTdHlsZSgpOwogICAgICAgICBpZiAoc2hhcmVkU3R5bGUpCiAgICAgICAgICAgICByZXR1cm4g
c2hhcmVkU3R5bGU7CkBAIC0xNTc1LDMzICsxNTY4LDMyIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBSZW5k
ZXJTCiAKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGNsb25lRm9yUGFyZW50OwogCi0gICAgaWYg
KG1fcGFyZW50U3R5bGUpIHsKLSAgICAgICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUo
KTsKLSAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEZyb20obV9wYXJlbnRTdHlsZSwgaXNBdFNoYWRv
d0JvdW5kYXJ5KGVsZW1lbnQpID8gUmVuZGVyU3R5bGU6OkF0U2hhZG93Qm91bmRhcnkgOiBSZW5k
ZXJTdHlsZTo6Tm90QXRTaGFkb3dCb3VuZGFyeSk7CisgICAgaWYgKHN0YXRlLnBhcmVudFN0eWxl
KSB7CisgICAgICAgIHN0YXRlLnN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgICAg
ICBzdGF0ZS5zdHlsZS0+aW5oZXJpdEZyb20oc3RhdGUucGFyZW50U3R5bGUsIGlzQXRTaGFkb3dC
b3VuZGFyeShlbGVtZW50KSA/IFJlbmRlclN0eWxlOjpBdFNoYWRvd0JvdW5kYXJ5IDogUmVuZGVy
U3R5bGU6Ok5vdEF0U2hhZG93Qm91bmRhcnkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fc3R5
bGUgPSBkZWZhdWx0U3R5bGVGb3JFbGVtZW50KCk7Ci0gICAgICAgIGNsb25lRm9yUGFyZW50ID0g
UmVuZGVyU3R5bGU6OmNsb25lKHN0eWxlKCkpOwotICAgICAgICBtX3BhcmVudFN0eWxlID0gY2xv
bmVGb3JQYXJlbnQuZ2V0KCk7CisgICAgICAgIHN0YXRlLnN0eWxlID0gZGVmYXVsdFN0eWxlRm9y
RWxlbWVudCgpOworICAgICAgICBjbG9uZUZvclBhcmVudCA9IFJlbmRlclN0eWxlOjpjbG9uZShz
dGF0ZS5zdHlsZS5nZXQoKSk7CisgICAgICAgIHN0YXRlLnBhcmVudFN0eWxlID0gY2xvbmVGb3JQ
YXJlbnQuZ2V0KCk7CiAgICAgfQogICAgIC8vIGNvbnRlbnRlZGl0YWJsZSBhdHRyaWJ1dGUgKGlt
cGxlbWVudGVkIGJ5IC13ZWJraXQtdXNlci1tb2RpZnkpIHNob3VsZAogICAgIC8vIGJlIHByb3Bh
Z2F0ZWQgZnJvbSBzaGFkb3cgaG9zdCB0byBkaXN0cmlidXRlZCBub2RlLgotICAgIGlmIChtX2Rp
c3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCkgeworICAgIGlmIChzdGF0ZS5kaXN0cmlidXRlZFRv
SW5zZXJ0aW9uUG9pbnQpIHsKICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudCA9IGVsZW1lbnQt
PnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICAgICAgaWYgKFJlbmRlclN0eWxlKiBzdHlsZU9m
U2hhZG93SG9zdCA9IHBhcmVudC0+cmVuZGVyU3R5bGUoKSkKLSAgICAgICAgICAgICAgICBtX3N0
eWxlLT5zZXRVc2VyTW9kaWZ5KHN0eWxlT2ZTaGFkb3dIb3N0LT51c2VyTW9kaWZ5KCkpOworICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRVc2VyTW9kaWZ5KHN0eWxlT2ZTaGFkb3dIb3N0
LT51c2VyTW9kaWZ5KCkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGVsZW1lbnQtPmlz
TGluaygpKSB7Ci0gICAgICAgIG1fc3R5bGUtPnNldElzTGluayh0cnVlKTsKLSAgICAgICAgRUlu
c2lkZUxpbmsgbGlua1N0YXRlID0gbV9lbGVtZW50TGlua1N0YXRlOwotICAgICAgICBpZiAobV9l
bGVtZW50TGlua1N0YXRlICE9IE5vdEluc2lkZUxpbmspIHsKKyAgICAgICAgc3RhdGUuc3R5bGUt
PnNldElzTGluayh0cnVlKTsKKyAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXRlID0gc3RhdGUu
ZWxlbWVudExpbmtTdGF0ZTsKKyAgICAgICAgaWYgKGxpbmtTdGF0ZSAhPSBOb3RJbnNpZGVMaW5r
KSB7CiAgICAgICAgICAgICBib29sIGZvcmNlVmlzaXRlZCA9IEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRl
ZCk7CiAgICAgICAgICAgICBpZiAoZm9yY2VWaXNpdGVkKQogICAgICAgICAgICAgICAgIGxpbmtT
dGF0ZSA9IEluc2lkZVZpc2l0ZWRMaW5rOwogICAgICAgICB9Ci0KLSAgICAgICAgbV9zdHlsZS0+
c2V0SW5zaWRlTGluayhsaW5rU3RhdGUpOworICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0SW5zaWRl
TGluayhsaW5rU3RhdGUpOwogICAgIH0KIAogICAgIGVuc3VyZURlZmF1bHRTdHlsZVNoZWV0c0Zv
ckVsZW1lbnQoZWxlbWVudCk7CkBAIC0xNjE1LDE3ICsxNjA3LDE3IEBAIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50
LCBSZW5kZXJTCiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhtYXRjaFJlc3VsdCwgZWxlbWVu
dCk7CiAKICAgICAvLyBDbGVhbiB1cCBvdXIgc3R5bGUgb2JqZWN0J3MgZGlzcGxheSBhbmQgdGV4
dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIgZml4dXBzKS4KLSAgICBhZGp1c3RSZW5kZXJTdHls
ZShzdHlsZSgpLCBtX3BhcmVudFN0eWxlLCBlbGVtZW50KTsKKyAgICBhZGp1c3RSZW5kZXJTdHls
ZShzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucGFyZW50U3R5bGUsIGVsZW1lbnQpOwogCiAgICAg
aW5pdEVsZW1lbnQoMCk7IC8vIENsZWFyIG91dCBmb3IgdGhlIG5leHQgcmVzb2x2ZS4KIAogICAg
IGlmIChjbG9uZUZvclBhcmVudCkKLSAgICAgICAgbV9wYXJlbnRTdHlsZSA9IDA7CisgICAgICAg
IHN0YXRlLnBhcmVudFN0eWxlID0gMDsKIAogICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxl
UmVzb2x2ZXIoKTsKIAogICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgotICAgIHJldHVybiBt
X3N0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3RhdGUuc3R5bGUucmVsZWFzZSgpOwogfQog
CiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1l
KGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIGNvbnN0IFN0eWxlS2V5ZnJhbWUqIGtl
eWZyYW1lLCBLZXlmcmFtZVZhbHVlJiBrZXlmcmFtZVZhbHVlKQpAQCAtMTYzNCwxMiArMTYyNiwx
NCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZy
YW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZQogICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGll
cygpKQogICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIGtleWZyYW1lLT5wcm9w
ZXJ0aWVzKCkpOwogCi0gICAgQVNTRVJUKCFtX3N0eWxlKTsKKyAgICBBU1NFUlQoIW1fc3RhdGUu
c3R5bGUpOworCisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKIAogICAgIC8vIENyZWF0ZSB0
aGUgc3R5bGUKLSAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKGVsZW1lbnRTdHlsZSk7
CisgICAgc3RhdGUuc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoZWxlbWVudFN0eWxlKTsKIAot
ICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSAw
OwogCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgd2l0aCAhaW1wb3J0YW50LiBTaW5j
ZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8gZGVjbCwgdGhlcmUncyBub3RoaW5nIHRv
IG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3QgcHJvcGVydGllcy4KQEAgLTE2NTEsOCAr
MTY0NSw4IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9y
S2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lCiAgICAgdXBkYXRlRm9udCgpOwogCiAg
ICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0
aGUgZm9udC1zaXplCi0gICAgaWYgKG1fbGluZUhlaWdodFZhbHVlKQotICAgICAgICBhcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOworICAgIGlm
IChzdGF0ZS5saW5lSGVpZ2h0VmFsdWUpCisgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUpOwogCiAgICAgLy8gTm93IGRvIHJl
c3Qgb2YgdGhlIHByb3BlcnRpZXMuCiAgICAgaWYgKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpCkBA
IC0xNjc5LDcgKzE2NzMsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVy
OjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZQogCiAgICAgZG9jdW1l
bnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCi0gICAgcmV0dXJuIG1fc3R5bGUucmVs
ZWFzZSgpOworICAgIHJldHVybiBzdGF0ZS5zdHlsZS5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgU3R5
bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgS2V5ZnJhbWVMaXN0JiBsaXN0KQpAQCAtMTc0Nywx
NSArMTc0MSwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0
aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbAogCiBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNl
dWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7Ci0gICAgQVNTRVJU
KG1fcGFyZW50U3R5bGUpOworICAgIEFTU0VSVChtX3N0YXRlLnBhcmVudFN0eWxlKTsKICAgICBp
ZiAoIWUpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsK
KwogICAgIGluaXRFbGVtZW50KGUpOwogCiAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlLCBwYXJl
bnRTdHlsZSwgcHNldWRvKTsKLSAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwot
ICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKG1fcGFyZW50U3R5bGUpOworICAgIHN0YXRlLnN0eWxl
ID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgIHN0YXRlLnN0eWxlLT5pbmhlcml0RnJvbSht
X3N0YXRlLnBhcmVudFN0eWxlKTsKIAogICAgIC8vIFNpbmNlIHdlIGRvbid0IHVzZSBwc2V1ZG8t
ZWxlbWVudHMgaW4gYW55IG9mIG91ciBxdWlyay9wcmludCB1c2VyIGFnZW50IHJ1bGVzLCBkb24n
dCB3YXN0ZSB0aW1lIHdhbGtpbmcKICAgICAvLyB0aG9zZSBydWxlcy4KQEAgLTE3NzIsMTIgKzE3
NjgsMTIgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5
bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywgRWwKICAgICBpZiAobWF0Y2hSZXN1bHQubWF0
Y2hlZFByb3BlcnRpZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1fc3R5
bGUtPnNldFN0eWxlVHlwZShwc2V1ZG8pOworICAgIHN0YXRlLnN0eWxlLT5zZXRTdHlsZVR5cGUo
cHNldWRvKTsKIAogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1bHQsIGUpOwog
CiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRpc3BsYXkgYW5kIHRleHQgZGVj
b3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0UmVuZGVyU3R5bGUoc3R5
bGUoKSwgcGFyZW50U3R5bGUsIDApOworICAgIGFkanVzdFJlbmRlclN0eWxlKHN0YXRlLnN0eWxl
LmdldCgpLCBtX3N0YXRlLnBhcmVudFN0eWxlLCAwKTsKIAogICAgIC8vIFN0YXJ0IGxvYWRpbmcg
cmVzb3VyY2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KICAgICBsb2FkUGVuZGluZ1Jlc291
cmNlcygpOwpAQCAtMTc4NSwxNSArMTc4MSwxNSBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBT
dHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbAog
ICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIAogICAgIC8vIE5vdyBy
ZXR1cm4gdGhlIHN0eWxlLgotICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1
cm4gc3RhdGUuc3R5bGUucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBT
dHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKIHsKICAgICBpbml0Rm9y
U3R5bGVSZXNvbHZlKGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKTsgLy8gbV9yb290RWxl
bWVudFN0eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBkb2N1bWVudCBzdHlsZS4KIAotICAgIG1fc3R5
bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgbV9zdHlsZS0+aW5oZXJpdEZyb20obV9y
b290RWxlbWVudFN0eWxlKTsKKyAgICBtX3N0YXRlLnN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0
ZSgpOworICAgIG1fc3RhdGUuc3R5bGUtPmluaGVyaXRGcm9tKG1fc3RhdGUucm9vdEVsZW1lbnRT
dHlsZSk7CiAKICAgICBjb25zdCBib29sIGlzTGVmdCA9IGlzTGVmdFBhZ2UocGFnZUluZGV4KTsK
ICAgICBjb25zdCBib29sIGlzRmlyc3QgPSBpc0ZpcnN0UGFnZShwYWdlSW5kZXgpOwpAQCAtMTgw
NCw3ICsxODAwLDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5
bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiAgICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBtX3Vz
ZXJTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKICAgICAvLyBPbmx5IGNvbnNp
ZGVyIHRoZSBnbG9iYWwgYXV0aG9yIFJ1bGVTZXQgZm9yIEBwYWdlIHJ1bGVzLCBhcyBwZXIgdGhl
IEhUTUw1IHNwZWMuCiAgICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBtX2F1dGhvclN0eWxlLmdl
dCgpLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwotICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsK
KyAgICBtX3N0YXRlLmxpbmVIZWlnaHRWYWx1ZSA9IDA7CiAgICAgYm9vbCBpbmhlcml0ZWRPbmx5
ID0gZmFsc2U7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCiAgICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0
Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CkBAIC0xODE1LDggKzE4
MTEsOCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBh
Z2UoaW50IHBhZ2VJbmRleCkKICAgICB1cGRhdGVGb250KCk7CiAKICAgICAvLyBMaW5lLWhlaWdo
dCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUuCi0g
ICAgaWYgKG1fbGluZUhlaWdodFZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOworICAgIGlmIChtX3N0YXRlLmxpbmVI
ZWlnaHRWYWx1ZSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQs
IG1fc3RhdGUubGluZUhlaWdodFZhbHVlKTsKIAogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8
TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFBy
b3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CiAKQEAgLTE4MjYsMjAgKzE4MjIs
MjAgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdl
KGludCBwYWdlSW5kZXgpCiAgICAgZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigp
OwogCiAgICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUuCi0gICAgcmV0dXJuIG1fc3R5bGUucmVs
ZWFzZSgpOworICAgIHJldHVybiBtX3N0YXRlLnN0eWxlLnJlbGVhc2UoKTsKIH0KIAogUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgp
CiB7Ci0gICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBtX3N0YXRlLnN0
eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwogICAgIC8vIE1ha2Ugc3VyZSBvdXIgZm9udHMg
YXJlIGluaXRpYWxpemVkIGlmIHdlIGRvbid0IGluaGVyaXQgdGhlbSBmcm9tIG91ciBwYXJlbnQg
c3R5bGUuCiAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50U2V0dGluZ3MoKSkg
ewogICAgICAgICBpbml0aWFsaXplRm9udFN0eWxlKHNldHRpbmdzKTsKLSAgICAgICAgbV9zdHls
ZS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CisgICAgICAgIG1fc3RhdGUuc3R5bGUt
PmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogICAgIH0gZWxzZQotICAgICAgICBtX3N0
eWxlLT5mb250KCkudXBkYXRlKDApOworICAgICAgICBtX3N0YXRlLnN0eWxlLT5mb250KCkudXBk
YXRlKDApOwogCi0gICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOworICAgIHJldHVybiBtX3N0
YXRlLnN0eWxlLnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVS
ZXNvbHZlcjo6c3R5bGVGb3JUZXh0KFRleHQqIHRleHROb2RlKQpAQCAtMjEyNyw3ICsyMTIzLDcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5
bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHkKIAogICAgIC8vIExldCB0aGUgdGhlbWUgYWxzbyBo
YXZlIGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBzdHlsZS4KICAgICBpZiAoc3R5bGUtPmhhc0Fw
cGVhcmFuY2UoKSkKLSAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1c3RT
dHlsZSh0aGlzLCBzdHlsZSwgZSwgbV9oYXNVQUFwcGVhcmFuY2UsIG1fYm9yZGVyRGF0YSwgbV9i
YWNrZ3JvdW5kRGF0YSwgbV9iYWNrZ3JvdW5kQ29sb3IpOworICAgICAgICBSZW5kZXJUaGVtZTo6
ZGVmYXVsdFRoZW1lKCktPmFkanVzdFN0eWxlKHRoaXMsIHN0eWxlLCBlLCBtX3N0YXRlLmhhc1VB
QXBwZWFyYW5jZSwgbV9zdGF0ZS5ib3JkZXJEYXRhLCBtX3N0YXRlLmJhY2tncm91bmREYXRhLCBt
X3N0YXRlLmJhY2tncm91bmRDb2xvcik7CiAKICAgICAvLyBJZiB3ZSBoYXZlIGZpcnN0LWxldHRl
ciBwc2V1ZG8gc3R5bGUsIGRvIG5vdCBzaGFyZSB0aGlzIHN0eWxlLgogICAgIGlmIChzdHlsZS0+
aGFzUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSKSkKQEAgLTIyMTAsMjQgKzIyMDYsMjUgQEAgc3Rh
dGljIHZvaWQgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUpCiAK
IHZvaWQgU3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCgpCiB7Ci0gICAgaWYgKCFtX2ZvbnREaXJ0
eSkKKyAgICBpZiAoIW1fc3RhdGUuZm9udERpcnR5KQogICAgICAgICByZXR1cm47CiAKICAgICBj
aGVja0ZvclRleHRTaXplQWRqdXN0KCk7Ci0gICAgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdl
KHN0eWxlKCksIG1fcGFyZW50U3R5bGUpOwotICAgIGNoZWNrRm9yWm9vbUNoYW5nZShzdHlsZSgp
LCBtX3BhcmVudFN0eWxlKTsKLSAgICBjaGVja0Zvck9yaWVudGF0aW9uQ2hhbmdlKHN0eWxlKCkp
OwotICAgIG1fc3R5bGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOwotICAgIG1fZm9u
dERpcnR5ID0gZmFsc2U7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9zdGF0ZS5zdHlsZS5n
ZXQoKTsKKyAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uoc3R5bGUsIG1fc3RhdGUucGFy
ZW50U3R5bGUpOworICAgIGNoZWNrRm9yWm9vbUNoYW5nZShzdHlsZSwgbV9zdGF0ZS5wYXJlbnRT
dHlsZSk7CisgICAgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShzdHlsZSk7CisgICAgbV9zdGF0
ZS5zdHlsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7CisgICAgbV9zdGF0ZS5mb250
RGlydHkgPSBmYWxzZTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjpjYWNoZUJvcmRlckFuZEJh
Y2tncm91bmQoKQogewotICAgIG1faGFzVUFBcHBlYXJhbmNlID0gbV9zdHlsZS0+aGFzQXBwZWFy
YW5jZSgpOwotICAgIGlmIChtX2hhc1VBQXBwZWFyYW5jZSkgewotICAgICAgICBtX2JvcmRlckRh
dGEgPSBtX3N0eWxlLT5ib3JkZXIoKTsKLSAgICAgICAgbV9iYWNrZ3JvdW5kRGF0YSA9ICptX3N0
eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAgIG1fYmFja2dyb3VuZENvbG9yID0gbV9z
dHlsZS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgbV9zdGF0ZS5oYXNVQUFwcGVhcmFuY2UgPSBt
X3N0YXRlLnN0eWxlLT5oYXNBcHBlYXJhbmNlKCk7CisgICAgaWYgKG1fc3RhdGUuaGFzVUFBcHBl
YXJhbmNlKSB7CisgICAgICAgIG1fc3RhdGUuYm9yZGVyRGF0YSA9IG1fc3RhdGUuc3R5bGUtPmJv
cmRlcigpOworICAgICAgICBtX3N0YXRlLmJhY2tncm91bmREYXRhID0gKm1fc3RhdGUuc3R5bGUt
PmJhY2tncm91bmRMYXllcnMoKTsKKyAgICAgICAgbV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IgPSBt
X3N0YXRlLnN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKTsKICAgICB9CiB9CiAKQEAgLTIyNTcsNDkg
KzIyNTQsNTEgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6cHNldWRv
U3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgUHMKICAgICB9CiAKICAgICBpZiAobV9t
YXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgKHJ1bGVzVG9JbmNsdWRlICYgQXV0aG9yQ1NTUnVs
ZXMpKSB7Ci0gICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVzVG9JbmNsdWRlICYgQ3Jv
c3NPcmlnaW5DU1NSdWxlcyk7CisgICAgICAgIG1fc3RhdGUuc2FtZU9yaWdpbk9ubHkgPSAhKHJ1
bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcyk7CiAKICAgICAgICAgLy8gQ2hlY2sg
dGhlIHJ1bGVzIGluIGF1dGhvciBzaGVldHMuCiAgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoZHVt
bXksIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CiAKLSAgICAgICAgbV9zYW1lT3Jp
Z2luT25seSA9IGZhbHNlOworICAgICAgICBtX3N0YXRlLnNhbWVPcmlnaW5Pbmx5ID0gZmFsc2U7
CiAgICAgfQogCiAgICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6
OlJlc29sdmluZ1N0eWxlKTsKIAotICAgIHJldHVybiBtX3J1bGVMaXN0LnJlbGVhc2UoKTsKKyAg
ICByZXR1cm4gbV9zdGF0ZS5ydWxlTGlzdC5yZWxlYXNlKCk7CiB9CiAKIGlubGluZSBib29sIFN0
eWxlUmVzb2x2ZXI6OnJ1bGVNYXRjaGVzKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSwgY29uc3Qg
Q29udGFpbmVyTm9kZSogc2NvcGUpCiB7Ci0gICAgbV9keW5hbWljUHNldWRvID0gTk9QU0VVRE87
CisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKyAgICBzdGF0ZS5keW5hbWljUHNldWRvID0g
Tk9QU0VVRE87CiAKICAgICBpZiAocnVsZURhdGEuaGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKCkp
IHsKICAgICAgICAgLy8gV2Uga25vdyB0aGlzIHNlbGVjdG9yIGRvZXMgbm90IGluY2x1ZGUgYW55
IHBzZXVkbyBlbGVtZW50cy4KLSAgICAgICAgaWYgKG1fcHNldWRvU3R5bGUgIT0gTk9QU0VVRE8p
CisgICAgICAgIGlmIChzdGF0ZS5wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETykKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgLy8gV2Uga25vdyBhIHN1ZmZpY2llbnRseSBzaW1wbGUg
c2luZ2xlIHBhcnQgc2VsZWN0b3IgbWF0Y2hlcyBzaW1wbHkgYmVjYXVzZSB3ZSBmb3VuZCBpdCBm
cm9tIHRoZSBydWxlIGhhc2guCiAgICAgICAgIC8vIFRoaXMgaXMgbGltaXRlZCB0byBIVE1MIG9u
bHkgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgbmFtZXNwYWNlLgotICAgICAgICBpZiAo
cnVsZURhdGEuaGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2go
KSAmJiBtX2VsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBpZiAocnVsZURhdGEu
aGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goKSAmJiBzdGF0
ZS5lbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGlmICghcnVsZURhdGEu
aGFzTXVsdGlwYXJ0U2VsZWN0b3IoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQotICAgICAgICBpZiAocnVsZURhdGEuc2VsZWN0b3IoKS0+bV9tYXRjaCA9PSBDU1NT
ZWxlY3Rvcjo6VGFnICYmICFTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMobV9lbGVtZW50LCBy
dWxlRGF0YS5zZWxlY3RvcigpLT50YWdRTmFtZSgpKSkKKyAgICAgICAgaWYgKHJ1bGVEYXRhLnNl
bGVjdG9yKCktPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZyAmJiAhU2VsZWN0b3JDaGVja2Vy
Ojp0YWdNYXRjaGVzKHN0YXRlLmVsZW1lbnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCktPnRhZ1FOYW1l
KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIVNlbGVjdG9yQ2hl
Y2tlcjo6ZmFzdENoZWNrUmlnaHRtb3N0QXR0cmlidXRlU2VsZWN0b3IobV9lbGVtZW50LCBydWxl
RGF0YS5zZWxlY3RvcigpKSkKKyAgICAgICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVj
a1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVjdG9yKHN0YXRlLmVsZW1lbnQsIHJ1bGVEYXRhLnNlbGVj
dG9yKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gbV9zZWxl
Y3RvckNoZWNrZXIuZmFzdENoZWNrKHJ1bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCk7CisK
KyAgICAgICAgcmV0dXJuIG1fc2VsZWN0b3JDaGVja2VyLmZhc3RDaGVjayhydWxlRGF0YS5zZWxl
Y3RvcigpLCBzdGF0ZS5lbGVtZW50KTsKICAgICB9CiAKICAgICAvLyBTbG93IHBhdGguCi0gICAg
U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVEYXRh
LnNlbGVjdG9yKCksIG1fZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFi
bGVkKTsKLSAgICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IHN0eWxlKCk7CisgICAgU2VsZWN0b3JD
aGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVEYXRhLnNlbGVjdG9y
KCksIHN0YXRlLmVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRW5hYmxlZCk7
CisgICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBzdGF0ZS5zdHlsZS5nZXQoKTsKICAgICBjb250
ZXh0LnNjb3BlID0gc2NvcGU7Ci0gICAgY29udGV4dC5wc2V1ZG9TdHlsZSA9IG1fcHNldWRvU3R5
bGU7Ci0gICAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBtYXRjaCA9IG1fc2VsZWN0b3JDaGVja2Vy
Lm1hdGNoKGNvbnRleHQsIG1fZHluYW1pY1BzZXVkbywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0
ZWd5KCkpOworICAgIGNvbnRleHQucHNldWRvU3R5bGUgPSBzdGF0ZS5wc2V1ZG9TdHlsZTsKKyAg
ICBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gbV9zZWxlY3RvckNoZWNrZXIubWF0Y2go
Y29udGV4dCwgc3RhdGUuZHluYW1pY1BzZXVkbywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5
KCkpOwogICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2hlcykK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX3BzZXVkb1N0eWxlICE9IE5PUFNFVURP
ICYmIG1fcHNldWRvU3R5bGUgIT0gbV9keW5hbWljUHNldWRvKQorICAgIGlmIChzdGF0ZS5wc2V1
ZG9TdHlsZSAhPSBOT1BTRVVETyAmJiBzdGF0ZS5wc2V1ZG9TdHlsZSAhPSBzdGF0ZS5keW5hbWlj
UHNldWRvKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0y
MzA5LDcgKzIzMDgsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9uU2VsZWN0b3Io
Y29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZQogICAgIGlmICghcmVnaW9u
U2VsZWN0b3IgfHwgIXJlZ2lvbkVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IG1fcHNldWRvU3R5bGUgPSBOT1BTRVVETzsKKyAgICBtX3N0YXRlLnBzZXVkb1N0eWxlID0gTk9Q
U0VVRE87CiAKICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzID0gcmVnaW9uU2VsZWN0b3I7
IHM7IHMgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQocykpCiAgICAgICAgIGlmIChtX3NlbGVjdG9y
Q2hlY2tlci5tYXRjaGVzKHMsIHJlZ2lvbkVsZW1lbnQpKQpAQCAtMjMzNCw3ICsyMzMzLDcgQEAg
TGVuZ3RoIFN0eWxlUmVzb2x2ZXI6OmNvbnZlcnRUb0Zsb2F0TGVuZ3RoKENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSwgUmUKIHRlbXBsYXRlIDxTdHlsZVJlc29sdmVyOjpTdHlsZUFw
cGxpY2F0aW9uUGFzcyBwYXNzPgogdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnRpZXMo
Y29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiBydWxlLCBib29s
IGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHksIFByb3BlcnR5V2hpdGVsaXN0VHlwZSBw
cm9wZXJ0eVdoaXRlbGlzdFR5cGUpCiB7Ci0gICAgQVNTRVJUKChwcm9wZXJ0eVdoaXRlbGlzdFR5
cGUgIT0gUHJvcGVydHlXaGl0ZWxpc3RSZWdpb24pIHx8IG1fcmVnaW9uRm9yU3R5bGluZyk7Cisg
ICAgQVNTRVJUKChwcm9wZXJ0eVdoaXRlbGlzdFR5cGUgIT0gUHJvcGVydHlXaGl0ZWxpc3RSZWdp
b24pIHx8IG1fc3RhdGUucmVnaW9uRm9yU3R5bGluZyk7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFByb2Nl
c3NSdWxlKGRvY3VtZW50KCksIHJ1bGUsIHRoaXMpOwogCiAgICAgdW5zaWduZWQgcHJvcGVydHlD
b3VudCA9IHByb3BlcnRpZXMtPnByb3BlcnR5Q291bnQoKTsKQEAgLTIzNzgsNyArMjM3Nyw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlT
ZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsCiAgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShj
dXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CiAgICAgICAgICAgICAvLyB3ZSBhcHBseSBs
aW5lLWhlaWdodCBsYXRlcgogICAgICAgICAgICAgZWxzZSBpZiAocHJvcGVydHkgPT0gQ1NTUHJv
cGVydHlMaW5lSGVpZ2h0KQotICAgICAgICAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gY3Vy
cmVudC52YWx1ZSgpOworICAgICAgICAgICAgICAgIG1fc3RhdGUubGluZUhlaWdodFZhbHVlID0g
Y3VycmVudC52YWx1ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG93UHJp
b3JpdHlQcm9wZXJ0aWVzOgogICAgICAgICAgICAgaWYgKHByb3BlcnR5ID4gQ1NTUHJvcGVydHlM
aW5lSGVpZ2h0KQpAQCAtMjM5NCwxOCArMjM5MywxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBib29s
CiAgICAgaWYgKHN0YXJ0SW5kZXggPT0gLTEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICht
X3N0eWxlLT5pbnNpZGVMaW5rKCkgIT0gTm90SW5zaWRlTGluaykgeworICAgIFN0YXRlJiBzdGF0
ZSA9IG1fc3RhdGU7CisgICAgaWYgKHN0YXRlLnN0eWxlLT5pbnNpZGVMaW5rKCkgIT0gTm90SW5z
aWRlTGluaykgewogICAgICAgICBmb3IgKGludCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRl
eDsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hlZFBy
b3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllc1tpXTsKICAgICAgICAgICAg
IHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBtYXRjaGVkUHJvcGVydGllcy5saW5rTWF0Y2hUeXBl
OwogICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2VyIHRvIHBhc3MgdGhlc2Ug
YXMgYXJndW1lbnRzIGJ1dCB0aGF0IHJlcXVpcmVzIGNoYW5nZXMgaW4gbWFueSBwbGFjZXMuCi0g
ICAgICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IGxpbmtNYXRjaFR5cGUg
JiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluazsKLSAgICAgICAgICAgIG1fYXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZSA9IGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1h
dGNoVmlzaXRlZDsKKyAgICAgICAgICAgIHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZSA9IGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluazsKKyAgICAgICAg
ICAgIHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBsaW5rTWF0Y2hUeXBl
ICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7CiAKICAgICAgICAgICAgIGFwcGx5UHJv
cGVydGllczxwYXNzPihtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJl
c3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNf
Y2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5
cGUpKTsKICAgICAgICAgfQotICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9
IHRydWU7Ci0gICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGZhbHNl
OworICAgICAgICBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgPSB0cnVlOworICAg
ICAgICBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlID0gZmFsc2U7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5k
SW5kZXg7ICsraSkgewpAQCAtMjUxMyw2ICsyNTEzLDcgQEAgc3RhdGljIGJvb2wgaXNDYWNoZWFi
bGVJbk1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
UmUKIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRj
aFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgQVNT
RVJUKGVsZW1lbnQpOworICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgdW5zaWduZWQg
Y2FjaGVIYXNoID0gbWF0Y2hSZXN1bHQuaXNDYWNoZWFibGUgPyBjb21wdXRlTWF0Y2hlZFByb3Bl
cnRpZXNIYXNoKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmRhdGEoKSwgbWF0Y2hSZXN1
bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpKSA6IDA7CiAgICAgYm9vbCBhcHBseUluaGVyaXRl
ZE9ubHkgPSBmYWxzZTsKICAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSogY2Fj
aGVJdGVtID0gMDsKQEAgLTI1MjAsMTUgKzI1MjEsMTUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29u
c3QKICAgICAgICAgLy8gV2UgY2FuIGJ1aWxkIHVwIHRoZSBzdHlsZSBieSBjb3B5aW5nIG5vbi1p
bmhlcml0ZWQgcHJvcGVydGllcyBmcm9tIGFuIGVhcmxpZXIgc3R5bGUgb2JqZWN0IGJ1aWx0IHVz
aW5nIHRoZSBzYW1lIGV4YWN0CiAgICAgICAgIC8vIHN0eWxlIGRlY2xhcmF0aW9ucy4gV2UgdGhl
biBvbmx5IG5lZWQgdG8gYXBwbHkgdGhlIGluaGVyaXRlZCBwcm9wZXJ0aWVzLCBpZiBhbnksIGFz
IHRoZWlyIHZhbHVlcyBjYW4gZGVwZW5kIG9uIHRoZSAKICAgICAgICAgLy8gZWxlbWVudCBjb250
ZXh0LiBUaGlzIGlzIGZhc3QgYW5kIHNhdmVzIG1lbW9yeSBieSByZXVzaW5nIHRoZSBzdHlsZSBk
YXRhIHN0cnVjdHVyZXMuCi0gICAgICAgIG1fc3R5bGUtPmNvcHlOb25Jbmhlcml0ZWRGcm9tKGNh
Y2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOwotICAgICAgICBpZiAobV9wYXJlbnRTdHlsZS0+
aW5oZXJpdGVkRGF0YVNoYXJlZChjYWNoZUl0ZW0tPnBhcmVudFJlbmRlclN0eWxlLmdldCgpKSAm
JiAhaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICBFSW5zaWRlTGlu
ayBsaW5rU3RhdHVzID0gbV9zdHlsZS0+aW5zaWRlTGluaygpOworICAgICAgICBzdGF0ZS5zdHls
ZS0+Y29weU5vbkluaGVyaXRlZEZyb20oY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7Cisg
ICAgICAgIGlmIChzdGF0ZS5wYXJlbnRTdHlsZS0+aW5oZXJpdGVkRGF0YVNoYXJlZChjYWNoZUl0
ZW0tPnBhcmVudFJlbmRlclN0eWxlLmdldCgpKSAmJiAhaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1l
bnQpKSB7CisgICAgICAgICAgICBFSW5zaWRlTGluayBsaW5rU3RhdHVzID0gc3RhdGUuc3R5bGUt
Pmluc2lkZUxpbmsoKTsKICAgICAgICAgICAgIC8vIElmIHRoZSBjYWNoZSBpdGVtIHBhcmVudCBz
dHlsZSBoYXMgaWRlbnRpY2FsIGluaGVyaXRlZCBwcm9wZXJ0aWVzIHRvIHRoZSBjdXJyZW50IHBh
cmVudCBzdHlsZSB0aGVuIHRoZQogICAgICAgICAgICAgLy8gcmVzdWx0aW5nIHN0eWxlIHdpbGwg
YmUgaWRlbnRpY2FsIHRvby4gV2UgY29weSB0aGUgaW5oZXJpdGVkIHByb3BlcnRpZXMgb3ZlciBm
cm9tIHRoZSBjYWNoZSBhbmQgYXJlIGRvbmUuCi0gICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0
RnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0
eWxlLT5pbmhlcml0RnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKIAogICAgICAg
ICAgICAgLy8gVW5mb3J0dW5hdGVseSB0aGUgbGluayBzdGF0dXMgaXMgdHJlYXRlZCBsaWtlIGFu
IGluaGVyaXRlZCBwcm9wZXJ0eS4gV2UgbmVlZCB0byBleHBsaWNpdGx5IHJlc3RvcmUgaXQuCi0g
ICAgICAgICAgICBtX3N0eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0dXMpOworICAgICAgICAg
ICAgc3RhdGUuc3R5bGUtPnNldEluc2lkZUxpbmsobGlua1N0YXR1cyk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5ID0gdHJ1ZTsgCkBA
IC0yNTQ2LDE0ICsyNTQ3LDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJv
cGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgLy8gaGln
aC1wcmlvcml0eSBwcm9wZXJ0aWVzIGZpcnN0LCBpLmUuLCB0aG9zZSBwcm9wZXJ0aWVzIHRoYXQg
b3RoZXIgcHJvcGVydGllcyBkZXBlbmQgb24uCiAgICAgLy8gVGhlIG9yZGVyIGlzICgxKSBoaWdo
LXByaW9yaXR5IG5vdCBpbXBvcnRhbnQsICgyKSBoaWdoLXByaW9yaXR5IGltcG9ydGFudCwgKDMp
IG5vcm1hbCBub3QgaW1wb3J0YW50CiAgICAgLy8gYW5kICg0KSBub3JtYWwgaW1wb3J0YW50Lgot
ICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSAw
OwogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0
Y2hSZXN1bHQsIGZhbHNlLCAwLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkg
LSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOwogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGln
aFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdl
cy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBw
bHlJbmhlcml0ZWRPbmx5KTsKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0
eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RV
c2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRP
bmx5KTsKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+
KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNo
UmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwogCi0gICAgaWYg
KGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0g
bV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKSB7Ci0gICAgICAgIG1fZm9udERpcnR5ID0gdHJ1ZTsK
KyAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpv
b20oKSAhPSBzdGF0ZS5zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKSB7CisgICAgICAgIHN0YXRlLmZv
bnREaXJ0eSA9IHRydWU7CiAgICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwogICAg
IH0KIApAQCAtMjU2MSwxMSArMjU2MiwxMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0
Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAg
IHVwZGF0ZUZvbnQoKTsKIAogICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBz
dXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZS4KLSAgICBpZiAobV9saW5lSGVpZ2h0VmFs
dWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX2xpbmVI
ZWlnaHRWYWx1ZSk7CisgICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSkKKyAgICAgICAgYXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSk7
CiAKICAgICAvLyBNYW55IHByb3BlcnRpZXMgZGVwZW5kIG9uIHRoZSBmb250LiBJZiBpdCBjaGFu
Z2VzIHdlIGp1c3QgYXBwbHkgYWxsIHByb3BlcnRpZXMuCi0gICAgaWYgKGNhY2hlSXRlbSAmJiBj
YWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5mb250RGVzY3JpcHRpb24oKSAhPSBtX3N0eWxlLT5mb250
RGVzY3JpcHRpb24oKSkKKyAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpICE9IHN0YXRlLnN0eWxlLT5mb250RGVzY3JpcHRpb24oKSkK
ICAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAKICAgICAvLyBOb3cgZG8gdGhl
IG5vcm1hbCBwcmlvcml0eSBVQSBwcm9wZXJ0aWVzLgpAQCAtMjU4MywxMyArMjU4NCwxMyBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1
bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzIHJl
ZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KICAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOwogICAg
IAotICAgIEFTU0VSVCghbV9mb250RGlydHkpOworICAgIEFTU0VSVCghc3RhdGUuZm9udERpcnR5
KTsKICAgICAKICAgICBpZiAoY2FjaGVJdGVtIHx8ICFjYWNoZUhhc2gpCiAgICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIWlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKG1fZWxlbWVu
dCwgbV9zdHlsZS5nZXQoKSwgbV9wYXJlbnRTdHlsZSkpCisgICAgaWYgKCFpc0NhY2hlYWJsZUlu
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZShzdGF0ZS5lbGVtZW50LCBzdGF0ZS5zdHlsZS5nZXQoKSwg
c3RhdGUucGFyZW50U3R5bGUpKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkVG9NYXRjaGVkUHJv
cGVydGllc0NhY2hlKG1fc3R5bGUuZ2V0KCksIG1fcGFyZW50U3R5bGUsIGNhY2hlSGFzaCwgbWF0
Y2hSZXN1bHQpOworICAgIGFkZFRvTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShzdGF0ZS5zdHlsZS5n
ZXQoKSwgc3RhdGUucGFyZW50U3R5bGUsIGNhY2hlSGFzaCwgbWF0Y2hSZXN1bHQpOwogfQogCiBz
dGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVBhZ2VSdWxlcyhjb25zdCBTdHlsZVJ1bGVQYWdlKiBy
MSwgY29uc3QgU3R5bGVSdWxlUGFnZSogcjIpCkBAIC0yNjU0LDcgKzI2NTUsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6Om1hdGNoUGFnZVJ1bGVzRm9yTGlzdChWZWN0b3I8U3R5bGVSdWxlUGFnZSo+
JiBtYXRjaGVkUnVsZXMsCiBib29sIFN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2UoaW50IHBhZ2VJ
bmRleCkgY29uc3QKIHsKICAgICBib29sIGlzRmlyc3RQYWdlTGVmdCA9IGZhbHNlOwotICAgIGlm
ICghbV9yb290RWxlbWVudFN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCisgICAgaWYg
KCFtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAg
ICAgICAgaXNGaXJzdFBhZ2VMZWZ0ID0gdHJ1ZTsKIAogICAgIHJldHVybiAocGFnZUluZGV4ICsg
KGlzRmlyc3RQYWdlTGVmdCA/IDEgOiAwKSkgJSAyOwpAQCAtMjc2Nyw3ICsyNzY4LDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUsIFJlbmQKIHsKICAgICBpbml0RWxlbWVudCgwKTsKICAgICBpbml0Rm9y
U3R5bGVSZXNvbHZlKDAsIHN0eWxlKTsKLSAgICBtX3N0eWxlID0gc3R5bGU7CisgICAgbV9zdGF0
ZS5zdHlsZSA9IHN0eWxlOwogICAgIGFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShpZCwgdmFs
dWUpOwogfQogCkBAIC0yODc5LDEwICsyODgwLDEwIEBAIGlubGluZSBib29sIFN0eWxlUmVzb2x2
ZXI6OmlzVmFsaWRDdWVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpCiAvLyBwcm9wZXJ0
aWVzIHRoYXQgYXJlIE5PVCBhbGxvd2VkIHRvIHNjYWxlIHdpdGhpbiBhIHpvb21lZCBTVkcgZG9j
dW1lbnQgKGxldHRlci93b3JkLXNwYWNpbmcvZm9udC1zaXplKS4KIGJvb2wgU3R5bGVSZXNvbHZl
cjo6dXNlU1ZHWm9vbVJ1bGVzKCkKIHsKLSAgICByZXR1cm4gbV9lbGVtZW50ICYmIG1fZWxlbWVu
dC0+aXNTVkdFbGVtZW50KCk7CisgICAgcmV0dXJuIG1fc3RhdGUuZWxlbWVudCAmJiBtX3N0YXRl
LmVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpOwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJh
Y2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgU3R5bGVSZXNvbHZl
ciogc2VsZWN0b3IsIExlbmd0aCYgd29ya2luZ0xlbmd0aCkKK3N0YXRpYyBib29sIGNyZWF0ZUdy
aWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBjb25zdCBT
dHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIExlbmd0aCYgd29ya2luZ0xlbmd0aCkKIHsKICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250
ZW50KSB7CiAgICAgICAgIHdvcmtpbmdMZW5ndGggPSBMZW5ndGgoTWluQ29udGVudCk7CkBAIC0y
ODk0LDcgKzI4OTUsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgU3R5bGVSZXNvbAogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICB3b3JraW5nTGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZl
cnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBW
aWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KHNlbGVjdG9yLT5z
dHlsZSgpLCBzZWxlY3Rvci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzZWxlY3Rvci0+c3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICB3b3JraW5nTGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNv
bnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24g
fCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KHN0YXRlLnN0
eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCBzdGF0ZS5zdHlsZS0+ZWZmZWN0aXZl
Wm9vbSgpKTsKICAgICBpZiAod29ya2luZ0xlbmd0aC5pc1VuZGVmaW5lZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKQEAgLTI5MDQsMTIgKzI5MDUsMTIgQEAgc3RhdGljIGJvb2wgY3JlYXRl
R3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFN0eWxl
UmVzb2wKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNr
TWluTWF4KENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgU3R5bGVSZXNvbHZlciog
c2VsZWN0b3IsIEdyaWRUcmFja1NpemUmIHRyYWNrU2l6ZSkKK3N0YXRpYyBib29sIGNyZWF0ZUdy
aWRUcmFja01pbk1heChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIGNvbnN0IFN0
eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgR3JpZFRyYWNrU2l6ZSYgdHJhY2tTaXplKQogewog
ICAgIFBhaXIqIG1pbk1heFRyYWNrQnJlYWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRQYWlyVmFs
dWUoKTsKICAgICBpZiAoIW1pbk1heFRyYWNrQnJlYWR0aCkgewogICAgICAgICBMZW5ndGggd29y
a2luZ0xlbmd0aDsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKHByaW1pdGl2
ZVZhbHVlLCBzZWxlY3Rvciwgd29ya2luZ0xlbmd0aCkpCisgICAgICAgIGlmICghY3JlYXRlR3Jp
ZFRyYWNrQnJlYWR0aChwcmltaXRpdmVWYWx1ZSwgc3RhdGUsIHdvcmtpbmdMZW5ndGgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHRyYWNrU2l6ZS5zZXRMZW5ndGgod29y
a2luZ0xlbmd0aCk7CkBAIC0yOTE4LDE0ICsyOTE5LDE0IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdy
aWRUcmFja01pbk1heChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFN0eWxlUmVz
b2x2CiAKICAgICBMZW5ndGggbWluVHJhY2tCcmVhZHRoOwogICAgIExlbmd0aCBtYXhUcmFja0Jy
ZWFkdGg7Ci0gICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKG1pbk1heFRyYWNrQnJlYWR0
aC0+Zmlyc3QoKSwgc2VsZWN0b3IsIG1pblRyYWNrQnJlYWR0aCkgfHwgIWNyZWF0ZUdyaWRUcmFj
a0JyZWFkdGgobWluTWF4VHJhY2tCcmVhZHRoLT5zZWNvbmQoKSwgc2VsZWN0b3IsIG1heFRyYWNr
QnJlYWR0aCkpCisgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKG1pbk1heFRyYWNrQnJl
YWR0aC0+Zmlyc3QoKSwgc3RhdGUsIG1pblRyYWNrQnJlYWR0aCkgfHwgIWNyZWF0ZUdyaWRUcmFj
a0JyZWFkdGgobWluTWF4VHJhY2tCcmVhZHRoLT5zZWNvbmQoKSwgc3RhdGUsIG1heFRyYWNrQnJl
YWR0aCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHRyYWNrU2l6ZS5zZXRNaW5NYXgo
bWluVHJhY2tCcmVhZHRoLCBtYXhUcmFja0JyZWFkdGgpOwogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tHcm91cChDU1NWYWx1ZSogdmFsdWUsIFN0eWxl
UmVzb2x2ZXIqIHNlbGVjdG9yLCBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6ZXMpCitz
dGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tHcm91cChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IFN0
eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0cmFja1Np
emVzKQogewogICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTI5MzYsNyArMjkzNyw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0dy
b3VwKENTU1ZhbHVlKiB2YWx1ZSwgU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFZlY3RvCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgR3JpZFRyYWNrU2l6ZSB0cmFja1NpemU7
Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTWluTWF4KHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4oY3VyclZhbHVlKSwgc2VsZWN0b3IsIHRyYWNrU2l6ZSkpCisgICAgICAgIGlm
ICghY3JlYXRlR3JpZFRyYWNrTWluTWF4KHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
Y3VyclZhbHVlKSwgc3RhdGUsIHRyYWNrU2l6ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAgICAgdHJhY2tTaXplcy5hcHBlbmQodHJhY2tTaXplKTsKQEAgLTI5NDQsNyArMjk0
NSw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0dyb3VwKENTU1ZhbHVlKiB2YWx1ZSwg
U3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFZlY3RvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0
YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3QoQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8R3Jp
ZFRyYWNrU2l6ZT4mIHRyYWNrU2l6ZXMsIFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yKQorc3RhdGlj
IGJvb2wgY3JlYXRlR3JpZFRyYWNrTGlzdChDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxHcmlkVHJh
Y2tTaXplPiYgdHJhY2tTaXplcywgY29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQog
ewogICAgIC8vIEhhbmRsZSAnbm9uZScuCiAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpIHsKQEAgLTI5NTIsNyArMjk1Myw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xp
c3QoQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6CiAgICAg
ICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmU7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGNyZWF0ZUdyaWRUcmFja0dyb3VwKHZhbHVlLCBzZWxlY3Rvciwg
dHJhY2tTaXplcyk7CisgICAgcmV0dXJuIGNyZWF0ZUdyaWRUcmFja0dyb3VwKHZhbHVlLCBzdGF0
ZSwgdHJhY2tTaXplcyk7CiB9CiAKIApAQCAtMzAwMCw3ICszMDAxLDcgQEAgc3RhdGljIGJvb2wg
aGFzVmFyaWFibGVSZWZlcmVuY2UoQ1NTVmFsdWUqIHZhbHVlKQogCiB2b2lkIFN0eWxlUmVzb2x2
ZXI6OnJlc29sdmVWYXJpYWJsZXMoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBW
ZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiYga25vd25FeHByZXNzaW9u
cykKIHsKLSAgICBzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiBleHByZXNzaW9uKGlk
LCB2YWx1ZS0+c2VyaWFsaXplUmVzb2x2aW5nVmFyaWFibGVzKCpzdHlsZSgpLT52YXJpYWJsZXMo
KSkpOworICAgIHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+IGV4cHJlc3Npb24oaWQs
IHZhbHVlLT5zZXJpYWxpemVSZXNvbHZpbmdWYXJpYWJsZXMoKm1fc3RhdGUuc3R5bGUtPnZhcmlh
YmxlcygpKSk7CiAKICAgICBpZiAoa25vd25FeHByZXNzaW9ucy5jb250YWlucyhleHByZXNzaW9u
KSkKICAgICAgICAgcmV0dXJuOyAvLyBjeWNsZSBkZXRlY3RlZC4KQEAgLTMwMzIsMTkgKzMwMzMs
MjAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB9CiAjZW5kaWYKIAotICAgIGJvb2wgaXNJbmhlcml0ID0g
bV9wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7Ci0gICAgYm9vbCBpc0lu
aXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAoIW1fcGFyZW50Tm9kZSAmJiB2YWx1
ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworICAg
IGJvb2wgaXNJbmhlcml0ID0gc3RhdGUucGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRW
YWx1ZSgpOworICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwg
KCFzdGF0ZS5wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpOwogCiAgICAg
QVNTRVJUKCFpc0luaGVyaXQgfHwgIWlzSW5pdGlhbCk7IC8vIGlzSW5oZXJpdCAtPiAhaXNJbml0
aWFsICYmIGlzSW5pdGlhbCAtPiAhaXNJbmhlcml0Ci0gICAgQVNTRVJUKCFpc0luaGVyaXQgfHwg
KG1fcGFyZW50Tm9kZSAmJiBtX3BhcmVudFN0eWxlKSk7IC8vIGlzSW5oZXJpdCAtPiAobV9wYXJl
bnROb2RlICYmIG1fcGFyZW50U3R5bGUpCisgICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgKHN0YXRl
LnBhcmVudE5vZGUgJiYgc3RhdGUucGFyZW50U3R5bGUpKTsgLy8gaXNJbmhlcml0IC0+IChzdGF0
ZS5wYXJlbnROb2RlICYmIHN0YXRlLnBhcmVudFN0eWxlKQogCi0gICAgaWYgKCFhcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUoKSAmJiAoIWFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUo
KSB8fCAhaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSkgeworICAgIGlmICghc3RhdGUu
YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlICYmICghc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlz
aXRlZExpbmtTdHlsZSB8fCAhaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSkgewogICAg
ICAgICAvLyBMaW1pdCB0aGUgcHJvcGVydGllcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIG9ubHkg
dGhlIG9uZXMgaG9ub3JlZCBieSA6dmlzaXRlZC4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmIChpc0luaGVyaXQgJiYgIW1fcGFyZW50U3R5bGUtPmhhc0V4cGxpY2l0bHlJbmhlcml0
ZWRQcm9wZXJ0aWVzKCkgJiYgIUNTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkK
LSAgICAgICAgbV9wYXJlbnRTdHlsZS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRp
ZXMoKTsKKyAgICBpZiAoaXNJbmhlcml0ICYmICFzdGF0ZS5wYXJlbnRTdHlsZS0+aGFzRXhwbGlj
aXRseUluaGVyaXRlZFByb3BlcnRpZXMoKSAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJv
cGVydHkoaWQpKQorICAgICAgICBzdGF0ZS5wYXJlbnRTdHlsZS0+c2V0SGFzRXhwbGljaXRseUlu
aGVyaXRlZFByb3BlcnRpZXMoKTsKIAogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgIGlm
IChpZCA9PSBDU1NQcm9wZXJ0eVZhcmlhYmxlKSB7CkBAIC0zMDUyLDcgKzMwNTQsNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICBDU1NWYXJpYWJsZVZhbHVlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0
PENTU1ZhcmlhYmxlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIEFTU0VSVCghdmFyaWFibGUtPm5h
bWUoKS5pc0VtcHR5KCkpOwogICAgICAgICBBU1NFUlQoIXZhcmlhYmxlLT52YWx1ZSgpLmlzRW1w
dHkoKSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldFZhcmlhYmxlKHZhcmlhYmxlLT5uYW1lKCksIHZh
cmlhYmxlLT52YWx1ZSgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUtPnNldFZhcmlhYmxlKHZhcmlh
YmxlLT5uYW1lKCksIHZhcmlhYmxlLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICNlbmRpZgpAQCAtMzA3MSw3ICszMDczLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIAogICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgPyBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKSA6IDA7CiAKLSAgICBmbG9hdCB6
b29tRmFjdG9yID0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIGZsb2F0IHpvb21GYWN0
b3IgPSBzdGF0ZS5zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwogCiAgICAgLy8gV2hhdCBmb2xsb3dz
IGlzIGEgbGlzdCB0aGF0IG1hcHMgdGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIgY29ycmVz
cG9uZGluZyBmcm9udC1lbmQKICAgICAvLyBSZW5kZXJTdHlsZSB2YWx1ZXMuIFNob3J0aGFuZHMg
KGUuZy4gYm9yZGVyLCBiYWNrZ3JvdW5kKSBvY2N1ciBpbiB0aGlzIGxpc3QgYXMgd2VsbCBhbmQK
QEAgLTMwODUsNyArMzA4Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAvLyBub3RlIGlz
IGEgcmVtaW5kZXIgdGhhdCBldmVudHVhbGx5ICJpbmhlcml0IiBuZWVkcyB0byBiZSBzdXBwb3J0
ZWQuCiAKICAgICAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgICAgICBtX3N0
eWxlLT5jbGVhckNvbnRlbnQoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJD
b250ZW50KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCkBAIC0z
MDk3LDE5ICszMDk5LDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgQ1NTVmFsdWUq
IGl0ZW0gPSBpLnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VHZW5l
cmF0b3JWYWx1ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc0dyYWRpZW50
VmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoU3R5
bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPihp
dGVtKS0+Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhpcykuZ2V0KCkpLCBkaWRTZXQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoU3R5bGVHZW5l
cmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPihpdGVtKS0+
Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhpcykuZ2V0KCkpLCBkaWRTZXQpOwogICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRD
b250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NJbWFnZUdl
bmVyYXRvclZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUtPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRp
Y19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CiAgICAgICAg
ICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCiAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc0ltYWdlU2V0VmFsdWUoKSkgewotICAg
ICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1
ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPihpdGVt
KSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50
KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENT
U0ltYWdlU2V0VmFsdWUqPihpdGVtKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRp
ZFNldCA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAg
ICBpZiAoaXRlbS0+aXNJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9zdHls
ZS0+c2V0Q29udGVudChjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50
LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVudChjYWNoZWRPclBlbmRpbmdGcm9tVmFs
dWUoQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4oaXRlbSkp
LCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0zMTIwLDE3ICszMTIy
LDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNv
bnRlbnRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CiAKICAg
ICAgICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLT5pc1N0cmluZygpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fc3R5bGUtPnNldENvbnRlbnQoY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1
ZSgpLmltcGwoKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNl
dENvbnRlbnQoY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwoKSwgZGlkU2V0KTsK
ICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNBdHRyKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IENhbiBhIG5hbWVzcGFjZSBiZSBzcGVjaWZpZWQgZm9yIGFuIGF0dHIoZm9vKT8KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fc3R5bGUtPnN0eWxlVHlwZSgpID09IE5PUFNFVURPKQot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCisgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VW5pcXVlKCk7CiAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFyZW50U3R5bGUtPnNl
dFVuaXF1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUucGFyZW50U3R5bGUtPnNl
dFVuaXF1ZSgpOwogICAgICAgICAgICAgICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0
b20sIGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsKLSAg
ICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IG1fZWxlbWVudC0+
Z2V0QXR0cmlidXRlKGF0dHIpOwotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250
ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUuaW1wbCgpLCBkaWRTZXQpOwor
ICAgICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gc3RhdGUuZWxl
bWVudC0+Z2V0QXR0cmlidXRlKGF0dHIpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHls
ZS0+c2V0Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IHZhbHVlLmltcGwoKSwg
ZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgLy8gcmVnaXN0ZXIgdGhlIGZhY3QgdGhhdCB0aGUgYXR0cmlidXRlIHZhbHVlIGFm
ZmVjdHMgdGhlIHN0eWxlCiAgICAgICAgICAgICAgICAgICAgIG1fZmVhdHVyZXMuYXR0cnNJblJ1
bGVzLmFkZChhdHRyLmxvY2FsTmFtZSgpLmltcGwoKSk7CkBAIC0zMTQxLDI0ICszMTQzLDI0IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0U3R5bGVJZGVudCAhPSBD
U1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0U3R5bGVUeXBlID0gc3Rh
dGljX2Nhc3Q8RUxpc3RTdHlsZVR5cGU+KGxpc3RTdHlsZUlkZW50IC0gQ1NTVmFsdWVEaXNjKTsK
ICAgICAgICAgICAgICAgICAgICAgT3duUHRyPENvdW50ZXJDb250ZW50PiBjb3VudGVyID0gYWRv
cHRQdHIobmV3IENvdW50ZXJDb250ZW50KGNvdW50ZXJWYWx1ZS0+aWRlbnRpZmllcigpLCBsaXN0
U3R5bGVUeXBlLCBjb3VudGVyVmFsdWUtPnNlcGFyYXRvcigpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fc3R5bGUtPnNldENvbnRlbnQoY291bnRlci5yZWxlYXNlKCksIGRpZFNldCk7CisgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KGNvdW50ZXIucmVsZWFzZSgp
LCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVl
LT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVPcGVuUXVv
dGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRDb250ZW50KE9QRU5fUVVP
VEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29u
dGVudChPUEVOX1FVT1RFLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGlkU2V0
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICBjYXNlIENTU1ZhbHVlQ2xvc2VRdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldENvbnRlbnQoQ0xPU0VfUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVudChDTE9TRV9RVU9URSwgZGlkU2V0KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vT3BlblF1b3Rl
OgotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChOT19PUEVOX1FV
T1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENv
bnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRp
ZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ2xvc2VRdW90ZToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc3R5bGUtPnNldENvbnRlbnQoTk9fQ0xPU0VfUVVPVEUsIGRpZFNldCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVudChOT19DTE9TRV9RVU9URSwg
ZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAg
LTMxNjgsMTYgKzMxNzAsMTYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIWRpZFNldCkKLSAgICAgICAgICAgICAgICBtX3N0
eWxlLT5jbGVhckNvbnRlbnQoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJD
b250ZW50KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICBjYXNlIENTU1By
b3BlcnR5UXVvdGVzOgogICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBtX3N0
eWxlLT5zZXRRdW90ZXMobV9wYXJlbnRTdHlsZS0+cXVvdGVzKCkpOworICAgICAgICAgICAgc3Rh
dGUuc3R5bGUtPnNldFF1b3RlcyhzdGF0ZS5wYXJlbnRTdHlsZS0+cXVvdGVzKCkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAg
ICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcygwKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5z
ZXRRdW90ZXMoMCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYg
KHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CkBAIC0zMTk1LDE5ICszMTk3LDE5IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgICAgICAgICAgICAgU3RyaW5nIGVuZFF1b3RlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPihzZWNvbmQpLT5nZXRTdHJpbmdWYWx1ZSgpOwogICAgICAgICAgICAgICAg
IHF1b3Rlcy0+YWRkUGFpcihzdGQ6Om1ha2VfcGFpcihzdGFydFF1b3RlLCBlbmRRdW90ZSkpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKHF1b3Rlcyk7Cisg
ICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0UXVvdGVzKHF1b3Rlcyk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKSB7CiAgICAgICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQotICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpjcmVhdGUoKSk7Cisg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpjcmVhdGUo
KSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250
RmFtaWx5OiB7CiAgICAgICAgIC8vIGxpc3Qgb2Ygc3RyaW5ncyBhbmQgaWRzCiAgICAgICAgIGlm
IChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBwYXJlbnRGb250RGVz
Y3JpcHRpb24gPSBtX3BhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAg
IEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVzY3JpcHRp
b24oKTsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBwYXJlbnRGb250RGVzY3JpcHRpb24g
PSBzdGF0ZS5wYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBGb250
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpOwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkocGFyZW50
Rm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSk7CiAgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0RmFtaWx5KHBhcmVudEZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpKTsKICAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQocGFyZW50Rm9udERl
c2NyaXB0aW9uLmlzU3BlY2lmaWVkRm9udCgpKTsKQEAgLTMyMTcsNyArMzIxOSw3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAKICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewogICAgICAgICAgICAgRm9udERlc2Ny
aXB0aW9uIGluaXRpYWxEZXNjID0gRm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBGb250
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7
CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3Qg
dGhlIHNpemUgdG8gYWNjb3VudCBmb3IgdGhlIGdlbmVyaWMgZmFtaWx5IGNoYW5nZSBmcm9tIG1v
bm9zcGFjZQogICAgICAgICAgICAgLy8gdG8gbm9uLW1vbm9zcGFjZS4KICAgICAgICAgICAgIGlm
IChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4
ZWREZWZhdWx0U2l6ZSgpKQpAQCAtMzIzMSw3ICszMjMzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIAogICAg
ICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS0+Zm9udERlc2Ny
aXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0
ZS5zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIEZvbnRGYW1pbHkmIGZpcnN0RmFt
aWx5ID0gZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7CiAgICAgICAgIEZvbnRGYW1pbHkq
IGN1cnJGYW1pbHkgPSAwOwogCkBAIC0zMzA5LDI0ICszMzExLDI0IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAv
LyBzaG9ydGhhbmQgcHJvcGVydGllcwogICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOgog
ICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5jbGVhckJhY2tn
cm91bmRMYXllcnMoKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihD
b2xvcigpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5jbGVhckJhY2tncm91bmRMYXllcnMo
KTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoKSk7
CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5p
bmhlcml0QmFja2dyb3VuZExheWVycygqbV9wYXJlbnRTdHlsZS0+YmFja2dyb3VuZExheWVycygp
KTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihtX3BhcmVudFN0eWxl
LT5iYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+aW5oZXJpdEJh
Y2tncm91bmRMYXllcnMoKnN0YXRlLnBhcmVudFN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkpOwor
ICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihzdGF0ZS5wYXJlbnRT
dHlsZS0+YmFja2dyb3VuZENvbG9yKCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFzazoKICAgICAgICAgaWYgKGlzSW5pdGlhbCkKLSAg
ICAgICAgICAgIG1fc3R5bGUtPmNsZWFyTWFza0xheWVycygpOworICAgICAgICAgICAgc3RhdGUu
c3R5bGUtPmNsZWFyTWFza0xheWVycygpOwogICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCi0g
ICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0TWFza0xheWVycygqbV9wYXJlbnRTdHlsZS0+bWFz
a0xheWVycygpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5pbmhlcml0TWFza0xheWVycygq
c3RhdGUucGFyZW50U3R5bGUtPm1hc2tMYXllcnMoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBj
YXNlIENTU1Byb3BlcnR5Rm9udDoKICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAg
ICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fcGFyZW50U3R5bGUtPmZvbnRE
ZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUhlaWdodChtX3BhcmVu
dFN0eWxlLT5zcGVjaWZpZWRMaW5lSGVpZ2h0KCkpOwotICAgICAgICAgICAgbV9saW5lSGVpZ2h0
VmFsdWUgPSAwOworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9
IHN0YXRlLnBhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIHN0YXRl
LnN0eWxlLT5zZXRMaW5lSGVpZ2h0KHN0YXRlLnBhcmVudFN0eWxlLT5zcGVjaWZpZWRMaW5lSGVp
Z2h0KCkpOworICAgICAgICAgICAgc3RhdGUubGluZUhlaWdodFZhbHVlID0gMDsKICAgICAgICAg
ICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICB9IGVsc2Ug
aWYgKGlzSW5pdGlhbCkgewogICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1l
bnRTZXR0aW5ncygpOwpAQCAtMzMzNSw4ICszMzM3LDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBpbml0aWFsaXplRm9udFN0eWxlKHNldHRpbmdz
KTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZSkgewotICAgICAgICAgICAgbV9z
dHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0g
ICAgICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAgICAgICAgICBzdGF0ZS5zdHls
ZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAg
ICAgICAgICBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSAwOwogCiAgICAgICAgICAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgICAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1
bHRUaGVtZSgpLT5zeXN0ZW1Gb250KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpLCBmb250RGVz
Y3JpcHRpb24pOwpAQCAtMzM1Miw3ICszMzU0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQoKS0+cHJpbnRp
bmcoKSB8fCAhc2V0dGluZ3MtPnNjcmVlbkZvbnRTdWJzdGl0dXRpb25FbmFibGVkKCkpOwogCiAg
ICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSB6b29tIGZhY3Rvci4KLSAgICAgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVj
aWZpZWRTaXplKGRvY3VtZW50KCksIG1fc3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fi
c29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29t
UnVsZXMoKSkpOworICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNp
emUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQoKSwgc3RhdGUuc3R5
bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRp
b24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSkpOwogICAgICAgICAgICAgICAg
IHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ZvbnRWYWx1ZSgpKSB7CkBAIC0zMzcwLDcgKzMzNzIs
NyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgdXBkYXRlRm9udCgpOwogICAgICAgICAgICAg
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBmb250LT5zaXplLmdldCgpKTsKIAot
ICAgICAgICAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSBmb250LT5saW5lSGVpZ2h0LmdldCgpOwor
ICAgICAgICAgICAgc3RhdGUubGluZUhlaWdodFZhbHVlID0gZm9udC0+bGluZUhlaWdodC5nZXQo
KTsKIAogICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIGZv
bnQtPmZhbWlseS5nZXQoKSk7CiAgICAgICAgIH0KQEAgLTMzODIsMTEgKzMzODQsMTEgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93OiB7CiAgICAgICAg
IGlmIChpc0luaGVyaXQpIHsKICAgICAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eVRleHRT
aGFkb3cpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fc3R5bGUtPnNldFRleHRTaGFkb3cobV9w
YXJlbnRTdHlsZS0+dGV4dFNoYWRvdygpID8gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoKm1fcGFy
ZW50U3R5bGUtPnRleHRTaGFkb3coKSkpIDogbnVsbHB0cik7Ci0gICAgICAgICAgICByZXR1cm4g
bV9zdHlsZS0+c2V0Qm94U2hhZG93KG1fcGFyZW50U3R5bGUtPmJveFNoYWRvdygpID8gYWRvcHRQ
dHIobmV3IFNoYWRvd0RhdGEoKm1fcGFyZW50U3R5bGUtPmJveFNoYWRvdygpKSkgOiBudWxscHRy
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUtPnNldFRleHRTaGFkb3coc3Rh
dGUucGFyZW50U3R5bGUtPnRleHRTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCpz
dGF0ZS5wYXJlbnRTdHlsZS0+dGV4dFNoYWRvdygpKSkgOiBudWxscHRyKTsKKyAgICAgICAgICAg
IHJldHVybiBzdGF0ZS5zdHlsZS0+c2V0Qm94U2hhZG93KHN0YXRlLnBhcmVudFN0eWxlLT5ib3hT
aGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCpzdGF0ZS5wYXJlbnRTdHlsZS0+Ym94
U2hhZG93KCkpKSA6IG51bGxwdHIpOwogICAgICAgICB9CiAgICAgICAgIGlmIChpc0luaXRpYWwg
fHwgcHJpbWl0aXZlVmFsdWUpIC8vIGluaXRpYWwgfCBub25lCi0gICAgICAgICAgICByZXR1cm4g
aWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93ID8gbV9zdHlsZS0+c2V0VGV4dFNoYWRvdyhudWxs
cHRyKSA6IG1fc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVy
biBpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cgPyBzdGF0ZS5zdHlsZS0+c2V0VGV4dFNoYWRv
dyhudWxscHRyKSA6IHN0YXRlLnN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiAKICAgICAg
ICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMz
OTYsMjkgKzMzOTgsMjkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICghY3VyclZhbHVl
LT5pc1NoYWRvd1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1ZhbHVlKj4oY3VyclZhbHVl
KTsKLSAgICAgICAgICAgIGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxl
KCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICBpbnQgeSA9
IGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUs
IHpvb21GYWN0b3IpOwotICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+
Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9v
bUZhY3RvcikgOiAwOwotICAgICAgICAgICAgaW50IHNwcmVhZCA9IGl0ZW0tPnNwcmVhZCA/IGl0
ZW0tPnNwcmVhZC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHls
ZSwgem9vbUZhY3RvcikgOiAwOworICAgICAgICAgICAgaW50IHggPSBpdGVtLT54LT5jb21wdXRl
TGVuZ3RoPGludD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpv
b21GYWN0b3IpOworICAgICAgICAgICAgaW50IHkgPSBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGlu
dD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3Ip
OworICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0
ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCB6
b29tRmFjdG9yKSA6IDA7CisgICAgICAgICAgICBpbnQgc3ByZWFkID0gaXRlbS0+c3ByZWFkID8g
aXRlbS0+c3ByZWFkLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRl
LnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpIDogMDsKICAgICAgICAgICAgIFNoYWRvd1N0
eWxlIHNoYWRvd1N0eWxlID0gaXRlbS0+c3R5bGUgJiYgaXRlbS0+c3R5bGUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVJbnNldCA/IEluc2V0IDogTm9ybWFsOwogICAgICAgICAgICAgQ29sb3IgY29s
b3I7CiAgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCiAgICAgICAgICAgICAgICAgY29sb3Ig
PSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7Ci0gICAgICAgICAg
ICBlbHNlIGlmIChtX3N0eWxlKQotICAgICAgICAgICAgICAgIGNvbG9yID0gbV9zdHlsZS0+Y29s
b3IoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlLnN0eWxlKQorICAgICAgICAgICAgICAg
IGNvbG9yID0gc3RhdGUuc3R5bGUtPmNvbG9yKCk7CiAKICAgICAgICAgICAgIE93blB0cjxTaGFk
b3dEYXRhPiBzaGFkb3dEYXRhID0gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoSW50UG9pbnQoeCwg
eSksIGJsdXIsIHNwcmVhZCwgc2hhZG93U3R5bGUsIGlkID09IENTU1Byb3BlcnR5V2Via2l0Qm94
U2hhZG93LCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCkpOwog
ICAgICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdykKLSAgICAgICAgICAg
ICAgICBtX3N0eWxlLT5zZXRUZXh0U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4
KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5Cisg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFRleHRTaGFkb3coc2hhZG93RGF0YS5yZWxl
YXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUg
Zmlyc3QgZW50cnkKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRCb3hTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0
aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKKyAgICAgICAgICAgICAgICBz
dGF0ZS5zdHlsZS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkp
OyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm94UmVmbGVjdDogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChib3hSZWZs
ZWN0LCBCb3hSZWZsZWN0KQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUpIHsKLSAgICAgICAg
ICAgIG1fc3R5bGUtPnNldEJveFJlZmxlY3QoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3hSZWZsZWN0
KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldEJveFJlZmxlY3QoUmVuZGVyU3R5bGU6
OmluaXRpYWxCb3hSZWZsZWN0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
QEAgLTM0MjksMTMgKzM0MzEsMTMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgUmVmUHRyPFN0eWxl
UmVmbGVjdGlvbj4gcmVmbGVjdGlvbiA9IFN0eWxlUmVmbGVjdGlvbjo6Y3JlYXRlKCk7CiAgICAg
ICAgIHJlZmxlY3Rpb24tPnNldERpcmVjdGlvbigqcmVmbGVjdFZhbHVlLT5kaXJlY3Rpb24oKSk7
CiAgICAgICAgIGlmIChyZWZsZWN0VmFsdWUtPm9mZnNldCgpKQotICAgICAgICAgICAgcmVmbGVj
dGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCktPmNvbnZlcnRUb0xlbmd0aDxG
aXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29u
dmVyc2lvbj4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSk7CisgICAg
ICAgICAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVjdFZhbHVlLT5vZmZzZXQoKS0+Y29u
dmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8
IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1l
bnRTdHlsZSwgem9vbUZhY3RvcikpOwogICAgICAgICBOaW5lUGllY2VJbWFnZSBtYXNrOwogICAg
ICAgICBtYXNrLnNldE1hc2tEZWZhdWx0cygpOwogICAgICAgICBtX3N0eWxlTWFwLm1hcE5pbmVQ
aWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUtPm1hc2soKSwgbWFzayk7CiAgICAgICAgIHJlZmxl
Y3Rpb24tPnNldE1hc2sobWFzayk7CiAKLSAgICAgICAgbV9zdHlsZS0+c2V0Qm94UmVmbGVjdChy
ZWZsZWN0aW9uLnJlbGVhc2UoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRCb3hSZWZsZWN0
KHJlZmxlY3Rpb24ucmVsZWFzZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNl
IENTU1Byb3BlcnR5U3JjOiAvLyBPbmx5IHVzZWQgaW4gQGZvbnQtZmFjZSBydWxlcy4KQEAgLTM0
NDQsMjkgKzM0NDYsMjkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlOgogICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0g
ICAgICAgICAgICBtX3N0eWxlLT5zZXRDb2x1bW5SdWxlQ29sb3IobV9wYXJlbnRTdHlsZS0+Y29s
dW1uUnVsZUNvbG9yKCkuaXNWYWxpZCgpID8gbV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9y
KCkgOiBtX3BhcmVudFN0eWxlLT5jb2xvcigpKTsKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldENv
bHVtblJ1bGVTdHlsZShtX3BhcmVudFN0eWxlLT5jb2x1bW5SdWxlU3R5bGUoKSk7Ci0gICAgICAg
ICAgICBtX3N0eWxlLT5zZXRDb2x1bW5SdWxlV2lkdGgobV9wYXJlbnRTdHlsZS0+Y29sdW1uUnVs
ZVdpZHRoKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbHVtblJ1bGVDb2xvcihz
dGF0ZS5wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkuaXNWYWxpZCgpID8gc3RhdGUucGFy
ZW50U3R5bGUtPmNvbHVtblJ1bGVDb2xvcigpIDogc3RhdGUucGFyZW50U3R5bGUtPmNvbG9yKCkp
OworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbHVtblJ1bGVTdHlsZShzdGF0ZS5wYXJl
bnRTdHlsZS0+Y29sdW1uUnVsZVN0eWxlKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNl
dENvbHVtblJ1bGVXaWR0aChzdGF0ZS5wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZVdpZHRoKCkpOwog
ICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIG1fc3R5bGUtPnJlc2V0
Q29sdW1uUnVsZSgpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnJlc2V0Q29sdW1uUnVsZSgp
OwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWU6CiAg
ICAgICAgIGlmICghaXNJbmhlcml0KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0
eWxlLT5zZXRNYXJxdWVlRGlyZWN0aW9uKG1fcGFyZW50U3R5bGUtPm1hcnF1ZWVEaXJlY3Rpb24o
KSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQobV9wYXJlbnRTdHlsZS0+
bWFycXVlZUluY3JlbWVudCgpKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZVNwZWVkKG1f
cGFyZW50U3R5bGUtPm1hcnF1ZWVTcGVlZCgpKTsKLSAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVl
ZUxvb3BDb3VudChtX3BhcmVudFN0eWxlLT5tYXJxdWVlTG9vcENvdW50KCkpOwotICAgICAgICBt
X3N0eWxlLT5zZXRNYXJxdWVlQmVoYXZpb3IobV9wYXJlbnRTdHlsZS0+bWFycXVlZUJlaGF2aW9y
KCkpOworICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZURpcmVjdGlvbihzdGF0ZS5wYXJl
bnRTdHlsZS0+bWFycXVlZURpcmVjdGlvbigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1h
cnF1ZWVJbmNyZW1lbnQoc3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVJbmNyZW1lbnQoKSk7Cisg
ICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlU3BlZWQoc3RhdGUucGFyZW50U3R5bGUtPm1h
cnF1ZWVTcGVlZCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQo
c3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVMb29wQ291bnQoKSk7CisgICAgICAgIHN0YXRlLnN0
eWxlLT5zZXRNYXJxdWVlQmVoYXZpb3Ioc3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVCZWhhdmlv
cigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVl
UmVwZXRpdGlvbjogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChtYXJxdWVl
TG9vcENvdW50LCBNYXJxdWVlTG9vcENvdW50KQogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVl
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKLSAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hcnF1
ZWVMb29wQ291bnQoLTEpOyAvLyAtMSBtZWFucyByZXBlYXQgZm9yZXZlci4KKyAgICAgICAgICAg
IHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0
IGZvcmV2ZXIuCiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKQot
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1ZS0+
Z2V0SW50VmFsdWUoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUxvb3BD
b3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTcGVlZDogewpAQCAtMzQ3Niwx
OSArMzQ3OCwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBpZiAoaW50IGlkZW50ID0gcHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAoaWRlbnQpIHsKICAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbG93OgotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dE1hcnF1ZWVTcGVlZCg1MDApOyAvLyA1MDAgbXNlYy4KKyAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZS0+c2V0TWFycXVlZVNwZWVkKDUwMCk7IC8vIDUwMCBtc2VjLgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRNYXJxdWVlU3BlZWQoODUpOyAvLyA4NW1zZWMuIFRoZSBXaW5JRSBkZWZh
dWx0LgorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlU3BlZWQoODUpOyAv
LyA4NW1zZWMuIFRoZSBXaW5JRSBkZWZhdWx0LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhc3Q6Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0
TWFycXVlZVNwZWVkKDEwKTsgLy8gMTBtc2VjLiBTdXBlciBmYXN0LgorICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlU3BlZWQoMTApOyAvLyAxMG1zZWMuIFN1cGVyIGZhc3Qu
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUtPmlzVGltZSgpKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFy
cXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxpbnQsIENTU1ByaW1pdGl2ZVZh
bHVlOjpNaWxsaXNlY29uZHM+KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1
ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZVRpbWU8aW50LCBDU1NQcmltaXRpdmVWYWx1
ZTo6TWlsbGlzZWNvbmRzPigpKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlz
TnVtYmVyKCkpIC8vIEZvciBzY3JvbGxhbW91bnQgc3VwcG9ydC4KLSAgICAgICAgICAgIG1fc3R5
bGUtPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAg
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
bnRWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFycXVlZUluY3JlbWVudDogewpAQCAtMzQ5OCwxOSArMzUwMCwxOSBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAg
ICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVTbWFsbDoKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5j
cmVtZW50KExlbmd0aCgxLCBGaXhlZCkpOyAvLyAxcHguCisgICAgICAgICAgICAgICAgc3RhdGUu
c3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDEsIEZpeGVkKSk7IC8vIDFweC4KICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0g
ICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoNiwgRml4
ZWQpKTsgLy8gNnB4LiBUaGUgV2luSUUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoNiwgRml4ZWQpKTsgLy8gNnB4LiBUaGUg
V2luSUUgZGVmYXVsdC4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVMYXJnZToKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRNYXJxdWVlSW5jcmVt
ZW50KExlbmd0aCgzNiwgRml4ZWQpKTsgLy8gMzZweC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBMZW5ndGggbWFycXVlZUxlbmd0aCA9IGNvbnZlcnRUb0ludExlbmd0aChwcmlt
aXRpdmVWYWx1ZSwgc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKKyAgICAgICAgICAgIExl
bmd0aCBtYXJxdWVlTGVuZ3RoID0gY29udmVydFRvSW50TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLCBz
dGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSk7CiAgICAgICAgICAgICBp
ZiAoIW1hcnF1ZWVMZW5ndGguaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRNYXJxdWVlSW5jcmVtZW50KG1hcnF1ZWVMZW5ndGgpOworICAgICAgICAgICAgICAgIHN0
YXRlLnN0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KG1hcnF1ZWVMZW5ndGgpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNTE5LDExICszNTIxLDExIEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0g
ICAgICAgICAgICBtX3N0eWxlLT5zZXRMb2NhbGUobnVsbEF0b20pOworICAgICAgICAgICAgc3Rh
dGUuc3R5bGUtPnNldExvY2FsZShudWxsQXRvbSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1fc3R5bGUtPnNldExvY2FsZShwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7Ci0g
ICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLT5mb250RGVz
Y3JpcHRpb24oKTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNjcmlwdChsb2NhbGVUb1Nj
cmlwdENvZGVGb3JGb250U2VsZWN0aW9uKG1fc3R5bGUtPmxvY2FsZSgpKSk7CisgICAgICAgICAg
ICBzdGF0ZS5zdHlsZS0+c2V0TG9jYWxlKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgp
KTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnN0eWxl
LT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNjcmlwdChs
b2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKHN0YXRlLnN0eWxlLT5sb2NhbGUoKSkp
OwogICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTM1NDIsNyArMzU0NCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAgbV9zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9u
cyhSZW5kZXJTdHlsZTo6bm9uZURhc2hib2FyZFJlZ2lvbnMoKSk7CisgICAgICAgICAgICBzdGF0
ZS5zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9ucyhSZW5kZXJTdHlsZTo6bm9uZURhc2hib2FyZFJl
Z2lvbnMoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzU1MiwxMCAr
MzU1NCwxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogCiAgICAgICAgIERhc2hib2FyZFJlZ2lvbiogZmlyc3Qg
PSByZWdpb247CiAgICAgICAgIHdoaWxlIChyZWdpb24pIHsKLSAgICAgICAgICAgIExlbmd0aCB0
b3AgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT50b3AoKSwgc3R5bGUoKSwgbV9yb290RWxl
bWVudFN0eWxlKTsKLSAgICAgICAgICAgIExlbmd0aCByaWdodCA9IGNvbnZlcnRUb0ludExlbmd0
aChyZWdpb24tPnJpZ2h0KCksIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAgICAg
ICAgICBMZW5ndGggYm90dG9tID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+Ym90dG9tKCks
IHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAgICAgICAgICBMZW5ndGggbGVmdCA9
IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmxlZnQoKSwgc3R5bGUoKSwgbV9yb290RWxlbWVu
dFN0eWxlKTsKKyAgICAgICAgICAgIExlbmd0aCB0b3AgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVn
aW9uLT50b3AoKSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpOwor
ICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+cmln
aHQoKSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpOworICAgICAg
ICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmJvdHRvbSgp
LCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSk7CisgICAgICAgICAg
ICBMZW5ndGggbGVmdCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmxlZnQoKSwgc3RhdGUu
c3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpOwogCiAgICAgICAgICAgICBpZiAo
dG9wLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICAgICAgdG9wID0gTGVuZ3RoKCk7CkBAIC0z
NTY3LDEzICszNTY5LDEzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgbGVmdCA9IExl
bmd0aCgpOwogCiAgICAgICAgICAgICBpZiAocmVnaW9uLT5tX2lzQ2lyY2xlKQotICAgICAgICAg
ICAgICAgIG1fc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hib2FyZFJlZ2lvbjo6
Q2lyY2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9u
ID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+
c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpDaXJjbGUsIHJlZ2lvbi0+
bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBmYWxz
ZSA6IHRydWUpOwogICAgICAgICAgICAgZWxzZSBpZiAocmVnaW9uLT5tX2lzUmVjdGFuZ2xlKQot
ICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hib2Fy
ZFJlZ2lvbjo6UmVjdGFuZ2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRvbSwg
bGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKKyAgICAgICAgICAgICAgICBz
dGF0ZS5zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpSZWN0
YW5nbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24g
PT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwogICAgICAgICAgICAgcmVnaW9uID0gcmVnaW9uLT5t
X25leHQuZ2V0KCk7CiAgICAgICAgIH0KIAotICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkt
PnNldEhhc0Fubm90YXRlZFJlZ2lvbnModHJ1ZSk7CisgICAgICAgIHN0YXRlLmVsZW1lbnQtPmRv
Y3VtZW50KCktPnNldEhhc0Fubm90YXRlZFJlZ2lvbnModHJ1ZSk7CiAKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTM1ODIsOCArMzU4NCw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEFwcFJlZ2lvbjogewogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlIHx8
ICFwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgbV9zdHlsZS0+c2V0RHJhZ2dhYmxlUmVnaW9uTW9kZShwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSA9PSBDU1NWYWx1ZURyYWcgPyBEcmFnZ2FibGVSZWdpb25EcmFnIDogRHJhZ2dhYmxlUmVn
aW9uTm9EcmFnKTsKLSAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRIYXNBbm5vdGF0
ZWRSZWdpb25zKHRydWUpOworICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0RHJhZ2dhYmxlUmVnaW9u
TW9kZShwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZURyYWcgPyBEcmFnZ2Fi
bGVSZWdpb25EcmFnIDogRHJhZ2dhYmxlUmVnaW9uTm9EcmFnKTsKKyAgICAgICAgc3RhdGUuZWxl
bWVudC0+ZG9jdW1lbnQoKS0+c2V0SGFzQW5ub3RhdGVkUmVnaW9ucyh0cnVlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzU5OSwyMSArMzYwMSwyMSBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgICAgICAgICAgICAgIHJlc3VsdCAqPSAzOwogICAgICAgICAgICAgZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVUaGljaykKICAgICAgICAgICAgICAg
ICByZXN1bHQgKj0gNTsKLSAgICAgICAgICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0aDxm
bG9hdD4oc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAg
ICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUuZ2V0KCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHdpZHRoID0gcHJpbWl0
aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHls
ZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICB3aWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21w
dXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHls
ZSwgem9vbUZhY3Rvcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBt
X3N0eWxlLT5zZXRUZXh0U3Ryb2tlV2lkdGgod2lkdGgpOworICAgICAgICBzdGF0ZS5zdHlsZS0+
c2V0VGV4dFN0cm9rZVdpZHRoKHdpZHRoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtOiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklU
X0FORF9JTklUSUFMKHRyYW5zZm9ybSwgVHJhbnNmb3JtKTsKICAgICAgICAgVHJhbnNmb3JtT3Bl
cmF0aW9ucyBvcGVyYXRpb25zOwotICAgICAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZh
bHVlLCBzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIG9wZXJhdGlvbnMpOwotICAgICAgICBt
X3N0eWxlLT5zZXRUcmFuc2Zvcm0ob3BlcmF0aW9ucyk7CisgICAgICAgIGNyZWF0ZVRyYW5zZm9y
bU9wZXJhdGlvbnModmFsdWUsIHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0
eWxlLCBvcGVyYXRpb25zKTsKKyAgICAgICAgc3RhdGUuc3R5bGUtPnNldFRyYW5zZm9ybShvcGVy
YXRpb25zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0UGVyc3BlY3RpdmU6IHsKQEAgLTM2MjMsMzQgKzM2MjUsMzQgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRQZXJzcGVjdGl2
ZSgwKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRQZXJzcGVjdGl2ZSgwKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGZsb2F0IHBlcnNwZWN0aXZlVmFs
dWU7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkKLSAgICAgICAgICAg
IHBlcnNwZWN0aXZlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4o
c3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHBl
cnNwZWN0aXZlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3Rh
dGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwogICAg
ICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgewogICAgICAgICAgICAg
Ly8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRyZWF0IHZhbHVlbGVzcyBudW1iZXJzIGFz
IHB4LgotICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUFgpLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5
bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9IENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUFgpLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHlsZS5n
ZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChwZXJzcGVjdGl2ZVZhbHVlID49
IDAuMGYpCi0gICAgICAgICAgICBtX3N0eWxlLT5zZXRQZXJzcGVjdGl2ZShwZXJzcGVjdGl2ZVZh
bHVlKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRQZXJzcGVjdGl2ZShwZXJzcGVjdGl2
ZVZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0QW5pbWF0aW9uOgogICAgICAgICBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgbV9zdHls
ZS0+Y2xlYXJBbmltYXRpb25zKCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJBbmlt
YXRpb25zKCk7CiAgICAgICAgIGVsc2UgaWYgKGlzSW5oZXJpdCkKLSAgICAgICAgICAgIG1fc3R5
bGUtPmluaGVyaXRBbmltYXRpb25zKG1fcGFyZW50U3R5bGUtPmFuaW1hdGlvbnMoKSk7CisgICAg
ICAgICAgICBzdGF0ZS5zdHlsZS0+aW5oZXJpdEFuaW1hdGlvbnMoc3RhdGUucGFyZW50U3R5bGUt
PmFuaW1hdGlvbnMoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VHJhbnNpdGlvbjoKICAgICAgICAgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIG1fc3R5
bGUtPmNsZWFyVHJhbnNpdGlvbnMoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5jbGVhclRy
YW5zaXRpb25zKCk7CiAgICAgICAgIGVsc2UgaWYgKGlzSW5oZXJpdCkKLSAgICAgICAgICAgIG1f
c3R5bGUtPmluaGVyaXRUcmFuc2l0aW9ucyhtX3BhcmVudFN0eWxlLT50cmFuc2l0aW9ucygpKTsK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5pbmhlcml0VHJhbnNpdGlvbnMoc3RhdGUucGFyZW50
U3R5bGUtPnRyYW5zaXRpb25zKCkpOwogICAgICAgICByZXR1cm47CiAjaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6IHsK
QEAgLTM2NTksNyArMzY2MSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICBDb2xvciBjb2wgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1
ZSk7Ci0gICAgICAgIG1fc3R5bGUtPnNldFRhcEhpZ2hsaWdodENvbG9yKGNvbCk7CisgICAgICAg
IHN0YXRlLnN0eWxlLT5zZXRUYXBIaWdobGlnaHRDb2xvcihjb2wpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogI2VuZGlmCkBAIC0zNjY4LDcgKzM2NzAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh1c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nLCBV
c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKTsKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBtX3N0eWxlLT5zZXRVc2VUb3VjaE92ZXJmbG93
U2Nyb2xsaW5nKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlVG91Y2gpOwor
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZyhwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVRvdWNoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICNlbmRpZgpAQCAtMzcxMSw3ICszNzEzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWF4TG9naWNhbFdpZHRoOgogICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXhMb2dpY2FsSGVpZ2h0OgogICAgIHsKLSAgICAgICAgQ1NTUHJvcGVydHlJRCBuZXdJ
ZCA9IENTU1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShpZCwgbV9zdHls
ZS0+ZGlyZWN0aW9uKCksIG1fc3R5bGUtPndyaXRpbmdNb2RlKCkpOworICAgICAgICBDU1NQcm9w
ZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5
KGlkLCBzdGF0ZS5zdHlsZS0+ZGlyZWN0aW9uKCksIHN0YXRlLnN0eWxlLT53cml0aW5nTW9kZSgp
KTsKICAgICAgICAgQVNTRVJUKG5ld0lkICE9IGlkKTsKICAgICAgICAgcmV0dXJuIGFwcGx5UHJv
cGVydHkobmV3SWQsIHZhbHVlKTsKICAgICB9CkBAIC0zNzQ2LDkgKzM3NDgsOCBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgICAgICAgICAgc2V0V3JpdGluZ01vZGUoKnByaW1pdGl2ZVZhbHVlKTsKIAogICAg
ICAgICAvLyBGSVhNRTogSXQgaXMgbm90IG9rIHRvIG1vZGlmeSBkb2N1bWVudCBzdGF0ZSB3aGls
ZSBhcHBseWluZyBzdHlsZS4KLSAgICAgICAgaWYgKG1fZWxlbWVudCAmJiBtX2VsZW1lbnQgPT0g
bV9lbGVtZW50LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKLSAgICAgICAgICAgIG1f
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCh0
cnVlKTsKLQorICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCAmJiBzdGF0ZS5lbGVtZW50ID09IHN0
YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQorICAgICAgICAgICAg
c3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxl
bWVudCh0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzc2NCw3ICszNzY1LDcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUJveENvbnRhaW46
IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobGluZUJveENvbnRhaW4sIExp
bmVCb3hDb250YWluKQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAgICBtX3N0eWxlLT5z
ZXRMaW5lQm94Q29udGFpbihMaW5lQm94Q29udGFpbk5vbmUpOworICAgICAgICAgICAgc3RhdGUu
c3R5bGUtPnNldExpbmVCb3hDb250YWluKExpbmVCb3hDb250YWluTm9uZSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzc3MiwyMSArMzc3MywyMSBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIENTU0xpbmVCb3hDb250YWluVmFsdWUq
IGxpbmVCb3hDb250YWluVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NMaW5lQm94Q29udGFpblZhbHVl
Kj4odmFsdWUpOwotICAgICAgICBtX3N0eWxlLT5zZXRMaW5lQm94Q29udGFpbihsaW5lQm94Q29u
dGFpblZhbHVlLT52YWx1ZSgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUtPnNldExpbmVCb3hDb250
YWluKGxpbmVCb3hDb250YWluVmFsdWUtPnZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgLy8gQ1NTIEZvbnRzIE1vZHVsZSBMZXZlbCAzCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEZvbnRGZWF0dXJlU2V0dGluZ3M6IHsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
ICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKSB7Ci0gICAg
ICAgICAgICBzZXRGb250RGVzY3JpcHRpb24obV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkubWFr
ZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygpKTsKKyAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlv
bihzdGF0ZS5zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkubWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5n
cygpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghdmFs
dWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwor
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpOwogICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2Fz
dDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CiAgICAgICAgIFJlZlB0cjxGb250RmVhdHVyZVNldHRp
bmdzPiBzZXR0aW5ncyA9IEZvbnRGZWF0dXJlU2V0dGluZ3M6OmNyZWF0ZSgpOwogICAgICAgICBp
bnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7CkBAIC0zODA2LDIzICszODA3LDIzIEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZpbHRlcjogewogICAgICAgICBIQU5ETEVf
SU5IRVJJVF9BTkRfSU5JVElBTChmaWx0ZXIsIEZpbHRlcik7CiAgICAgICAgIEZpbHRlck9wZXJh
dGlvbnMgb3BlcmF0aW9uczsKLSAgICAgICAgaWYgKGNyZWF0ZUZpbHRlck9wZXJhdGlvbnModmFs
dWUsIHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgb3BlcmF0aW9ucykpCi0gICAgICAgICAg
ICBtX3N0eWxlLT5zZXRGaWx0ZXIob3BlcmF0aW9ucyk7CisgICAgICAgIGlmIChjcmVhdGVGaWx0
ZXJPcGVyYXRpb25zKHZhbHVlLCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRT
dHlsZSwgb3BlcmF0aW9ucykpCisgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0RmlsdGVyKG9w
ZXJhdGlvbnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEdyaWRDb2x1bW5zOiB7CiAgICAgICAgIFZlY3RvcjxHcmlkVHJhY2tTaXpl
PiB0cmFja1NpemVzOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRy
YWNrU2l6ZXMsIHRoaXMpKQorICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUs
IHRyYWNrU2l6ZXMsIHN0YXRlKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHls
ZS0+c2V0R3JpZENvbHVtbnModHJhY2tTaXplcyk7CisgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRH
cmlkQ29sdW1ucyh0cmFja1NpemVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0R3JpZFJvd3M6IHsKICAgICAgICAgVmVjdG9yPEdyaWRUcmFja1Np
emU+IHRyYWNrU2l6ZXM7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwg
dHJhY2tTaXplcywgdGhpcykpCisgICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1
ZSwgdHJhY2tTaXplcywgc3RhdGUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0
eWxlLT5zZXRHcmlkUm93cyh0cmFja1NpemVzKTsKKyAgICAgICAgc3RhdGUuc3R5bGUtPnNldEdy
aWRSb3dzKHRyYWNrU2l6ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zODMwLDE0
ICszODMxLDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIEdyaWRQb3NpdGlvbiBjb2x1bW47CiAg
ICAgICAgIGlmICghY3JlYXRlR3JpZFBvc2l0aW9uKHZhbHVlLCBjb2x1bW4pKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBtX3N0eWxlLT5zZXRHcmlkSXRlbUNvbHVtbihjb2x1bW4pOwor
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0R3JpZEl0ZW1Db2x1bW4oY29sdW1uKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZFJvdzogewogICAg
ICAgICBHcmlkUG9zaXRpb24gcm93OwogICAgICAgICBpZiAoIWNyZWF0ZUdyaWRQb3NpdGlvbih2
YWx1ZSwgcm93KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHlsZS0+c2V0R3Jp
ZEl0ZW1Sb3cocm93KTsKKyAgICAgICAgc3RhdGUuc3R5bGUtPnNldEdyaWRJdGVtUm93KHJvdyk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gVGhlc2UgcHJvcGVydGllcyBhcmUgaW1w
bGVtZW50ZWQgaW4gdGhlIFN0eWxlQnVpbGRlciBsb29rdXAgdGFibGUuCkBAIC00MTU5LDE0ICs0
MTYwLDE0IEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQ
ZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvCiB7CiAgICAgUmVmUHRyPFN0eWxlSW1h
Z2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKCk7CiAgICAgaWYgKGltYWdl
ICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICBtX3BlbmRpbmdJbWFnZVByb3Bl
cnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdl
UHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFz
ZSgpOwogfQogCiBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRl
ZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZUdlbmVy
YXRvclZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzUGVuZGluZygpKSB7Ci0gICAg
ICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICAg
ICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOwog
ICAgICAgICByZXR1cm4gU3R5bGVQZW5kaW5nSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7CiAgICAgfQog
ICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUodmFsdWUpOwpAQCAtNDE3Nyw3
ICs0MTc4LDcgQEAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzZXRPclBl
bmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXIKIHsKICAgICBSZWZQdHI8U3R5bGVJ
bWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2VTZXQoZG9jdW1lbnQoKSk7
CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICBtX3Bl
bmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIG1fc3Rh
dGUucGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1
cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogI2VuZGlmCkBAIC00MTg2LDE4ICs0MTg3LDIwIEBAIFBh
c3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvCiB7CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0g
dmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKGRvY3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAm
JiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0
aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVBy
b3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2Uo
KTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KCkKIHsK
LSAgICBpZiAobV9zdHlsZS0+dGV4dFNpemVBZGp1c3QoKSkKKyAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSBtX3N0YXRlLnN0eWxlLmdldCgpOworCisgICAgaWYgKHN0eWxlLT50ZXh0U2l6ZUFkanVz
dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2Ny
aXB0aW9uKG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKTsKKyAgICBGb250RGVzY3JpcHRpb24g
bmV3Rm9udERlc2NyaXB0aW9uKHN0eWxlLT5mb250RGVzY3JpcHRpb24oKSk7CiAgICAgbmV3Rm9u
dERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShuZXdGb250RGVzY3JpcHRpb24uc3BlY2lmaWVk
U2l6ZSgpKTsKLSAgICBtX3N0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0
aW9uKTsKKyAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7
CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxl
KiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQpAQCAtNDI2MiwxNSArNDI2NSwxNSBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUoU2V0dGluZ3MqIHNldHRp
bmdzKQogICAgIH0KICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVN
ZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKICAgICBzZXRGb250U2l6ZShmb250RGVzY3Jp
cHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZmFs
c2UpKTsKLSAgICBtX3N0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGlu
ZUhlaWdodCgpKTsKLSAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAgbV9zdGF0ZS5zdHls
ZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAg
bV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSAwOwogICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQogewogICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRD
b21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQoKSwg
bV9zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNpemUsIHVz
ZVNWR1pvb21SdWxlcygpKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShn
ZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBtX3N0YXRlLnN0eWxl
LmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwgdXNlU1ZHWm9v
bVJ1bGVzKCkpKTsKIH0KIAogZmxvYXQgU3R5bGVSZXNvbHZlcjo6Z2V0Q29tcHV0ZWRTaXplRnJv
bVNwZWNpZmllZFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBSZW5kZXJTdHlsZSogc3R5bGUsIGJv
b2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wgdXNlU1ZHWm9vbVJ1
bGVzKQpAQCAtNDQ3MywyMCArNDQ3NiwyMSBAQCBDb2xvciBTdHlsZVJlc29sdmVyOjpjb2xvckZy
b21QcmltaXRpdmVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUsIGJvb2wgZm9yVgogICAg
IGlmICh2YWx1ZS0+aXNSR0JDb2xvcigpKQogICAgICAgICByZXR1cm4gQ29sb3IodmFsdWUtPmdl
dFJHQkEzMlZhbHVlKCkpOwogCisgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAg
ICBpbnQgaWRlbnQgPSB2YWx1ZS0+Z2V0SWRlbnQoKTsKICAgICBzd2l0Y2ggKGlkZW50KSB7CiAg
ICAgY2FzZSAwOgogICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlV2Vi
a2l0VGV4dDoKLSAgICAgICAgcmV0dXJuIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dGV4dENvbG9y
KCk7CisgICAgICAgIHJldHVybiBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT50ZXh0Q29sb3Io
KTsKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0TGluazoKLSAgICAgICAgcmV0dXJuIChtX2VsZW1l
bnQtPmlzTGluaygpICYmIGZvclZpc2l0ZWRMaW5rKSA/IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+
dmlzaXRlZExpbmtDb2xvcigpIDogbV9lbGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsK
KyAgICAgICAgcmV0dXJuIChzdGF0ZS5lbGVtZW50LT5pc0xpbmsoKSAmJiBmb3JWaXNpdGVkTGlu
aykgPyBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT52aXNpdGVkTGlua0NvbG9yKCkgOiBzdGF0
ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlV2Vi
a2l0QWN0aXZlbGluazoKLSAgICAgICAgcmV0dXJuIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+YWN0
aXZlTGlua0NvbG9yKCk7CisgICAgICAgIHJldHVybiBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgp
LT5hY3RpdmVMaW5rQ29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0Rm9jdXNSaW5nQ29s
b3I6CiAgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6Zm9jdXNSaW5nQ29sb3IoKTsKICAgICBj
YXNlIENTU1ZhbHVlQ3VycmVudGNvbG9yOgotICAgICAgICByZXR1cm4gbV9zdHlsZS0+Y29sb3Io
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlLT5jb2xvcigpOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIHJldHVybiBjb2xvckZvckNTU1ZhbHVlKGlkZW50KTsKICAgICB9CkBAIC00ODIwLDE3
ICs0ODI0LDE4IEBAIHN0YXRpYyBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZmlsdGVy
T3BlcmF0aW9uRm9yVHlwZShXZWJLaXRDU1NGaWx0ZXJWYWx1CiAjaWYgRU5BQkxFKENTU19GSUxU
RVJTKSAmJiBFTkFCTEUoU1ZHKQogdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0Rv
Y3VtZW50cygpCiB7Ci0gICAgaWYgKCFtX3N0eWxlLT5oYXNGaWx0ZXIoKSB8fCBtX3BlbmRpbmdT
VkdEb2N1bWVudHMuaXNFbXB0eSgpKQorICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAg
aWYgKCFzdGF0ZS5zdHlsZS0+aGFzRmlsdGVyKCkgfHwgc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50
cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENhY2hlZFJlc291cmNlTG9hZGVy
KiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVz
b3VyY2VMb2FkZXIoKTsKLSAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmls
dGVyT3BlcmF0aW9ucyA9IG1fc3R5bGUtPm11dGFibGVGaWx0ZXIoKS5vcGVyYXRpb25zKCk7Cisg
ICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gc3RhdGUuZWxl
bWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKKyAgICBWZWN0b3I8UmVm
UHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9IHN0YXRlLnN0eWxlLT5t
dXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBmaWx0ZXJPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxGaWx0ZXJP
cGVyYXRpb24+IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlck9wZXJhdGlvbnMuYXQoaSk7CiAgICAg
ICAgIGlmIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSA9PSBGaWx0ZXJPcGVy
YXRpb246OlJFRkVSRU5DRSkgewogICAgICAgICAgICAgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9u
KiByZWZlcmVuY2VGaWx0ZXIgPSBzdGF0aWNfY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24q
PihmaWx0ZXJPcGVyYXRpb24uZ2V0KCkpOwogCi0gICAgICAgICAgICBXZWJLaXRDU1NTVkdEb2N1
bWVudFZhbHVlKiB2YWx1ZSA9IG1fcGVuZGluZ1NWR0RvY3VtZW50cy5nZXQocmVmZXJlbmNlRmls
dGVyKS5nZXQoKTsKKyAgICAgICAgICAgIFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWUqIHZhbHVl
ID0gc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cy5nZXQocmVmZXJlbmNlRmlsdGVyKS5nZXQoKTsK
ICAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICBDYWNoZWRTVkdEb2N1bWVudCogY2FjaGVkRG9jdW1lbnQgPSB2YWx1ZS0+bG9hZChj
YWNoZWRSZXNvdXJjZUxvYWRlcik7CkBAIC00ODQxLDcgKzQ4NDYsNyBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCkKICAgICAgICAgICAgIHJlZmVyZW5jZUZp
bHRlci0+c2V0Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UoYWRvcHRQdHIobmV3IENhY2hlZFNW
R0RvY3VtZW50UmVmZXJlbmNlKGNhY2hlZERvY3VtZW50KSkpOwogICAgICAgICB9CiAgICAgfQot
ICAgIG1fcGVuZGluZ1NWR0RvY3VtZW50cy5jbGVhcigpOworICAgIHN0YXRlLnBlbmRpbmdTVkdE
b2N1bWVudHMuY2xlYXIoKTsKIH0KICNlbmRpZgogCkBAIC00ODU3LDE4ICs0ODYyLDE4IEBAIFN0
eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21W
YWx1ZShXZWJLaXRDU1NTaGFkZXJWCiB7CiAgICAgU3R5bGVTaGFkZXIqIHNoYWRlciA9IHZhbHVl
LT5jYWNoZWRPclBlbmRpbmdTaGFkZXIoKTsKICAgICBpZiAoc2hhZGVyICYmIHNoYWRlci0+aXNQ
ZW5kaW5nU2hhZGVyKCkpCi0gICAgICAgIG1faGFzUGVuZGluZ1NoYWRlcnMgPSB0cnVlOworICAg
ICAgICBtX3N0YXRlLmhhc1BlbmRpbmdTaGFkZXJzID0gdHJ1ZTsKICAgICByZXR1cm4gc2hhZGVy
OwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycygpCiB7Ci0gICAg
aWYgKCFtX3N0eWxlLT5oYXNGaWx0ZXIoKSB8fCAhbV9oYXNQZW5kaW5nU2hhZGVycykKKyAgICBp
ZiAoIW1fc3RhdGUuc3R5bGUtPmhhc0ZpbHRlcigpIHx8ICFtX3N0YXRlLmhhc1BlbmRpbmdTaGFk
ZXJzKQogICAgICAgICByZXR1cm47CiAKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVk
UmVzb3VyY2VMb2FkZXIgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9h
ZGVyKCk7CisgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0g
bV9zdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogCi0g
ICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBt
X3N0eWxlLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOworICAgIFZlY3RvcjxSZWZQdHI8
RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJPcGVyYXRpb25zID0gbV9zdGF0ZS5zdHlsZS0+bXV0
YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZmlsdGVyT3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICBSZWZQdHI8RmlsdGVyT3Bl
cmF0aW9uPiBmaWx0ZXJPcGVyYXRpb24gPSBmaWx0ZXJPcGVyYXRpb25zLmF0KGkpOwogICAgICAg
ICBpZiAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkgPT0gRmlsdGVyT3BlcmF0
aW9uOjpDVVNUT00pIHsKQEAgLTQ4ODUsNyArNDg5MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
bG9hZFBlbmRpbmdTaGFkZXJzKCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAg
ICBtX2hhc1BlbmRpbmdTaGFkZXJzID0gZmFsc2U7CisgICAgbV9zdGF0ZS5oYXNQZW5kaW5nU2hh
ZGVycyA9IGZhbHNlOwogfQogCiBzdGF0aWMgYm9vbCBzb3J0UGFyYW1ldGVyc0J5TmFtZUNvbXBh
cmF0b3IoY29uc3QgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4mIGEsIGNvbnN0IFJlZlB0
cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+JiBiKQpAQCAtNDkyNyw3ICs0OTMyLDcgQEAgUGFzc1Jl
ZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmls
dGVyVHJhbnNmb3JtUGFyYW0KIHsKICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFy
YW1ldGVyPiB0cmFuc2Zvcm1QYXJhbWV0ZXIgPSBDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0
ZXI6OmNyZWF0ZShuYW1lKTsKICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0g
ICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZXMsIHN0eWxlKCksIG1fcm9vdEVsZW1l
bnRTdHlsZSwgb3BlcmF0aW9ucyk7CisgICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1
ZXMsIG1fc3RhdGUuc3R5bGUuZ2V0KCksIG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgb3BlcmF0
aW9ucyk7CiAgICAgdHJhbnNmb3JtUGFyYW1ldGVyLT5zZXRPcGVyYXRpb25zKG9wZXJhdGlvbnMp
OwogICAgIHJldHVybiB0cmFuc2Zvcm1QYXJhbWV0ZXIucmVsZWFzZSgpOwogfQpAQCAtNTE3Nywx
MiArNTE4MiwxMiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMo
Q1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgICAgICBXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKiBzdmdEb2N1
bWVudFZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSo+KGFyZ3Vt
ZW50KTsKLSAgICAgICAgICAgIEtVUkwgdXJsID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jb21w
bGV0ZVVSTChzdmdEb2N1bWVudFZhbHVlLT51cmwoKSk7CisgICAgICAgICAgICBLVVJMIHVybCA9
IG1fc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoc3ZnRG9jdW1lbnRWYWx1
ZS0+dXJsKCkpOwogCiAgICAgICAgICAgICBSZWZQdHI8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9u
PiBvcGVyYXRpb24gPSBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShzdmdEb2N1bWVu
dFZhbHVlLT51cmwoKSwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigpLCBvcGVyYXRpb25UeXBlKTsK
LSAgICAgICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uo
c3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsKKyAgICAg
ICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9j
dW1lbnRWYWx1ZS0+dXJsKCksIG1fc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoIXN2Z0RvY3VtZW50VmFsdWUtPmxvYWRSZXF1ZXN0ZWQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgbV9wZW5kaW5nU1ZHRG9jdW1lbnRzLnNldChvcGVyYXRpb24uZ2V0KCks
IHN2Z0RvY3VtZW50VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnBlbmRpbmdT
VkdEb2N1bWVudHMuc2V0KG9wZXJhdGlvbi5nZXQoKSwgc3ZnRG9jdW1lbnRWYWx1ZSk7CiAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoc3ZnRG9jdW1lbnRWYWx1ZS0+Y2FjaGVkU1ZHRG9jdW1lbnQo
KSkKICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLT5zZXRDYWNoZWRTVkdEb2N1bWVudFJl
ZmVyZW5jZShhZG9wdFB0cihuZXcgQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2Uoc3ZnRG9jdW1l
bnRWYWx1ZS0+Y2FjaGVkU1ZHRG9jdW1lbnQoKSkpKTsKICAgICAgICAgICAgIH0KQEAgLTUyODYs
NyArNTI5MSw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhD
U1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlCiAKIFBhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSog
cGVuZGluZ0ltYWdlKQogewotICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJj
ZUxvYWRlciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsK
KyAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX3N0YXRl
LmVsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAKICAgICBpZiAo
cGVuZGluZ0ltYWdlLT5jc3NJbWFnZVZhbHVlKCkpIHsKICAgICAgICAgQ1NTSW1hZ2VWYWx1ZSog
aW1hZ2VWYWx1ZSA9IHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VWYWx1ZSgpOwpAQCAtNTMxNiwyMyAr
NTMyMSwyMyBAQCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5k
aW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2UqIHBlbmRpbgogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmxvYWRQZW5kaW5nSW1hZ2VzKCkKIHsKLSAgICBpZiAobV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVz
LmlzRW1wdHkoKSkKKyAgICBpZiAobV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNv
bnN0X2l0ZXJhdG9yOjpLZXlzIGVuZCA9IG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5lbmQoKS5r
ZXlzKCk7Ci0gICAgZm9yIChQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6
OktleXMgaXQgPSBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuYmVnaW4oKS5rZXlzKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVyYXRv
cjo6S2V5cyBlbmQgPSBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuZW5kKCkua2V5cygp
OworICAgIGZvciAoUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlz
IGl0ID0gbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmJlZ2luKCkua2V5cygpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgQ1NTUHJvcGVydHlJRCBjdXJyZW50UHJvcGVydHkgPSAq
aXQ7CiAKICAgICAgICAgc3dpdGNoIChjdXJyZW50UHJvcGVydHkpIHsKICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZTogewotICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIq
IGJhY2tncm91bmRMYXllciA9IG1fc3R5bGUtPmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKTsgYmFj
a2dyb3VuZExheWVyOyBiYWNrZ3JvdW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkg
eworICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIGJhY2tncm91bmRMYXllciA9IG1fc3RhdGUu
c3R5bGUtPmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKTsgYmFja2dyb3VuZExheWVyOyBiYWNrZ3Jv
dW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlm
IChiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkgJiYgYmFja2dyb3VuZExheWVyLT5pbWFnZSgpLT5p
c1BlbmRpbmdJbWFnZSgpKQogICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kTGF5ZXItPnNl
dEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihi
YWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q29udGVudDogewotICAg
ICAgICAgICAgZm9yIChDb250ZW50RGF0YSogY29udGVudERhdGEgPSBjb25zdF9jYXN0PENvbnRl
bnREYXRhKj4obV9zdHlsZS0+Y29udGVudERhdGEoKSk7IGNvbnRlbnREYXRhOyBjb250ZW50RGF0
YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoQ29udGVudERhdGEq
IGNvbnRlbnREYXRhID0gY29uc3RfY2FzdDxDb250ZW50RGF0YSo+KG1fc3RhdGUuc3R5bGUtPmNv
bnRlbnREYXRhKCkpOyBjb250ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50RGF0YS0+bmV4
dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnREYXRhLT5pc0ltYWdlKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxJbWFnZUNv
bnRlbnREYXRhKj4oY29udGVudERhdGEpLT5pbWFnZSgpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpIHsKQEAgLTUzNDUsNyArNTM1MCw3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUN1cnNvcjogewotICAgICAgICAgICAg
aWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBtX3N0eWxlLT5jdXJzb3JzKCkpIHsKKyAgICAg
ICAgICAgIGlmIChDdXJzb3JMaXN0KiBjdXJzb3JMaXN0ID0gbV9zdGF0ZS5zdHlsZS0+Y3Vyc29y
cygpKSB7CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjdXJzb3JMaXN0
LT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgICAgICBDdXJzb3JEYXRhJiBjdXJyZW50
Q3Vyc29yID0gY3Vyc29yTGlzdC0+YXQoaSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChTdHls
ZUltYWdlKiBpbWFnZSA9IGN1cnJlbnRDdXJzb3IuaW1hZ2UoKSkgewpAQCAtNTM1NywxNyArNTM2
MiwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVJ
bWFnZTogewotICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkgJiYgbV9z
dHlsZS0+bGlzdFN0eWxlSW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0
PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSkpKTsKKyAgICAg
ICAgICAgIGlmIChtX3N0YXRlLnN0eWxlLT5saXN0U3R5bGVJbWFnZSgpICYmIG1fc3RhdGUuc3R5
bGUtPmxpc3RTdHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAg
bV9zdGF0ZS5zdHlsZS0+c2V0TGlzdFN0eWxlSW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNf
Y2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3RhdGUuc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVySW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAgIGlmIChtX3N0eWxlLT5ib3JkZXJJ
bWFnZVNvdXJjZSgpICYmIG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCktPmlzUGVuZGluZ0lt
YWdlKCkpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVySW1hZ2VTb3VyY2UobG9h
ZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPmJv
cmRlckltYWdlU291cmNlKCkpKSk7CisgICAgICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZS0+Ym9y
ZGVySW1hZ2VTb3VyY2UoKSAmJiBtX3N0YXRlLnN0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpLT5p
c1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgIG1fc3RhdGUuc3R5bGUtPnNldEJvcmRl
ckltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1h
Z2UqPihtX3N0YXRlLnN0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxl
Y3Q6IHsKLSAgICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtX3N0
eWxlLT5ib3hSZWZsZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJl
ZmxlY3Rpb24gPSBtX3N0YXRlLnN0eWxlLT5ib3hSZWZsZWN0KCkpIHsKICAgICAgICAgICAgICAg
ICBjb25zdCBOaW5lUGllY2VJbWFnZSYgbWFza0ltYWdlID0gcmVmbGVjdGlvbi0+bWFzaygpOwog
ICAgICAgICAgICAgICAgIGlmIChtYXNrSW1hZ2UuaW1hZ2UoKSAmJiBtYXNrSW1hZ2UuaW1hZ2Uo
KS0+aXNQZW5kaW5nSW1hZ2UoKSkgewogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJ
bWFnZT4gbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVu
ZGluZ0ltYWdlKj4obWFza0ltYWdlLmltYWdlKCkpKTsKQEAgLTUzNzcsMTIgKzUzODIsMTIgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdl
U291cmNlOiB7Ci0gICAgICAgICAgICBpZiAobV9zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCkg
JiYgbV9zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFza0JveEltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1h
Z2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0eWxlLT5tYXNrQm94SW1hZ2VT
b3VyY2UoKSkpKTsKKyAgICAgICAgICAgIGlmIChtX3N0YXRlLnN0eWxlLT5tYXNrQm94SW1hZ2VT
b3VyY2UoKSAmJiBtX3N0YXRlLnN0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5n
SW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxlLT5zZXRNYXNrQm94SW1hZ2VT
b3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1f
c3RhdGUuc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZTogewot
ICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IG1fc3R5bGUtPmFjY2Vzc01h
c2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkgewor
ICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IG1fc3RhdGUuc3R5bGUtPmFj
Y2Vzc01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQo
KSkgewogICAgICAgICAgICAgICAgIGlmIChtYXNrTGF5ZXItPmltYWdlKCkgJiYgbWFza0xheWVy
LT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQogICAgICAgICAgICAgICAgICAgICBtYXNrTGF5
ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1h
Z2UqPihtYXNrTGF5ZXItPmltYWdlKCkpKSk7CiAgICAgICAgICAgICB9CkBAIC01MzkzLDcgKzUz
OTgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAgICAgICAg
fQogICAgIH0KIAotICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigpOworICAgIG1f
c3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigpOwogfQogCiB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmxvYWRQZW5kaW5nUmVzb3VyY2VzKCkKQEAgLTU0NTYsNyArNTQ2MSw2IEBAIHZvaWQg
TWVkaWFRdWVyeVJlc3VsdDo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVt
b3J5T2JqZWN0SW5mbykgY29uCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdl
KE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5
Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVz
OjpDU1MpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fc3R5bGUsICJzdHlsZSIpOwogICAgIGluZm8u
YWRkTWVtYmVyKG1fYXV0aG9yU3R5bGUsICJhdXRob3JTdHlsZSIpOwogICAgIGluZm8uYWRkTWVt
YmVyKG1fdXNlclN0eWxlLCAidXNlclN0eWxlIik7CiAgICAgaW5mby5hZGRNZW1iZXIobV9mZWF0
dXJlcywgImZlYXR1cmVzIik7CkBAIC01NDY1LDMyICs1NDY5LDE5IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5m
bykgY29uc3QKICAgICBpbmZvLmFkZE1lbWJlcihtX2tleWZyYW1lc1J1bGVNYXAsICJrZXlmcmFt
ZXNSdWxlTWFwIik7CiAgICAgaW5mby5hZGRNZW1iZXIobV9tYXRjaGVkUHJvcGVydGllc0NhY2hl
LCAibWF0Y2hlZFByb3BlcnRpZXNDYWNoZSIpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fbWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZVN3ZWVwVGltZXIsICJtYXRjaGVkUHJvcGVydGllc0NhY2hlU3dlZXBU
aW1lciIpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fbWF0Y2hlZFJ1bGVzLCAibWF0Y2hlZFJ1bGVz
Iik7CiAKLSAgICBpbmZvLmFkZE1lbWJlcihtX3J1bGVMaXN0LCAicnVsZUxpc3QiKTsKLSAgICBp
bmZvLmFkZE1lbWJlcihtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMsICJwZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzIik7CiAgICAgaW5mby5hZGRNZW1iZXIobV9tZWRpdW0sICJtZWRpdW0iKTsKICAgICBp
bmZvLmFkZE1lbWJlcihtX3Jvb3REZWZhdWx0U3R5bGUsICJyb290RGVmYXVsdFN0eWxlIik7CiAg
ICAgaW5mby5hZGRNZW1iZXIobV9kb2N1bWVudCwgImRvY3VtZW50Iik7CiAKLSAgICAvLyBGSVhN
RTogcG9pbnRlciB0byBSZW5kZXJTdHlsZSBjb3VsZCBwb2ludCB0byBhbiBhbHJlYWR5IGRlbGV0
ZWQgb2JqZWN0LgotICAgIGluZm8uaWdub3JlTWVtYmVyKG1fcGFyZW50U3R5bGUpOwotICAgIGlu
Zm8uaWdub3JlTWVtYmVyKG1fcm9vdEVsZW1lbnRTdHlsZSk7Ci0KLSAgICBpbmZvLmFkZE1lbWJl
cihtX2VsZW1lbnQsICJlbGVtZW50Iik7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9zdHlsZWRFbGVt
ZW50LCAic3R5bGVkRWxlbWVudCIpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fcmVnaW9uRm9yU3R5
bGluZywgInJlZ2lvbkZvclN0eWxpbmciKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3BhcmVudE5v
ZGUsICJwYXJlbnROb2RlIik7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9saW5lSGVpZ2h0VmFsdWUs
ICJsaW5lSGVpZ2h0VmFsdWUiKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2ZvbnRTZWxlY3Rvciwg
ImZvbnRTZWxlY3RvciIpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fdmlld3BvcnREZXBlbmRlbnRN
ZWRpYVF1ZXJ5UmVzdWx0cywgInZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMiKTsK
ICAgICBpbmZvLmlnbm9yZU1lbWJlcihtX3N0eWxlQnVpbGRlcik7CiAgICAgaW5mby5hZGRNZW1i
ZXIobV9pbnNwZWN0b3JDU1NPTVdyYXBwZXJzKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYm
IEVOQUJMRShTVkcpCi0gICAgaW5mby5hZGRNZW1iZXIobV9wZW5kaW5nU1ZHRG9jdW1lbnRzLCAi
cGVuZGluZ1NWR0RvY3VtZW50cyIpOwotI2VuZGlmCiAgICAgaW5mby5hZGRNZW1iZXIobV9zY29w
ZVJlc29sdmVyLCAic2NvcGVSZXNvbHZlciIpOwogCisgICAgaW5mby5hZGRNZW1iZXIobV9zdGF0
ZSwgInN0YXRlIik7CisKICAgICAvLyBGSVhNRTogbW92ZSB0aGlzIHRvIGEgcGxhY2Ugd2hlcmUg
aXQgd291bGQgYmUgY2FsbGVkIG9ubHkgb25jZT8KICAgICBpbmZvLmFkZE1lbWJlcihkZWZhdWx0
U3R5bGUsICJkZWZhdWx0U3R5bGUiKTsKICAgICBpbmZvLmFkZE1lbWJlcihkZWZhdWx0UXVpcmtz
U3R5bGUsICJkZWZhdWx0UXVpcmtzU3R5bGUiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5o
CmluZGV4IGEzYWY1NDQ4YjkwOThlM2MzMjhhNjUyMGU4MDkxYjIxNTM1ZjU0NmUuLjQ2OWIyMWM2
ZDkwNTM5YzIwMjcxMmU1NDliZWZlZjgwNjQwMTRlM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuaApAQCAtMjMsNiArMjMsNyBAQAogI2RlZmluZSBTdHlsZVJlc29sdmVyX2gKIAogI2lu
Y2x1ZGUgIkNTU1J1bGUuaCIKKyNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgogI2luY2x1ZGUgIkNT
U1RvU3R5bGVNYXAuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJMaW5r
SGFzaC5oIgpAQCAtMzYsNiArMzcsOSBAQAogI2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5o
IgogI2luY2x1ZGUgIlN0eWxlU2NvcGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlZpZXdwb3J0U3R5
bGVSZXNvbHZlci5oIgorI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKKyNp
bmNsdWRlICJXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlLmgiCisjZW5kaWYKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgpAQCAtMTgyLDIwICsxODYsMjAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRG9jdW1lbnQoRG9jdW1lbnQqLCBDU1NGb250U2Vs
ZWN0b3IqID0gMCk7CiAKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X3N0eWxlLmdldCgpOyB9Ci0gICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQotICAgIFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9yb290RWxlbWVudFN0eWxlOyB9Ci0gICAgRWxlbWVudCogZWxl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQorICAgIFJlbmRlclN0eWxlKiBzdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3R5bGUuZ2V0KCk7IH0KKyAgICBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnBhcmVudFN0eWxlOyB9Cisg
ICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnJvb3RFbGVtZW50U3R5bGU7IH0KKyAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5lbGVtZW50OyB9CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9kb2N1bWVudDsgfQogICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uKCkgeyByZXR1cm4gc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KICAgICBjb25z
dCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHBhcmVu
dFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAgdm9pZCBzZXRGb250RGVzY3JpcHRp
b24oY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9mb250RGlydHkg
fD0gc3R5bGUoKS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KLSAgICB2
b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRab29tKGYp
OyB9Ci0gICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0g
c3R5bGUoKS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQotICAgIHZvaWQgc2V0VGV4dFNpemVBZGp1
c3QoYm9vbCBiKSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRTaXplQWRqdXN0KGIp
OyB9Ci0gICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBt
X2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7IH0KLSAg
ICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRpb24gdGV4dE9yaWVudGF0aW9u
KSB7IG1fZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRPcmllbnRhdGlvbih0ZXh0T3JpZW50
YXRpb24pOyB9Ci0gICAgYm9vbCBoYXNQYXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJl
bnROb2RlOyB9CisgICAgdm9pZCBzZXRGb250RGVzY3JpcHRpb24oY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9zdGF0ZS5mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KKyAgICB2b2lkIHNldFpvb20oZmxv
YXQgZikgeyBtX3N0YXRlLmZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRab29tKGYpOyB9CisgICAg
dm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9zdGF0ZS5mb250RGlydHkgfD0gc3R5
bGUoKS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQorICAgIHZvaWQgc2V0VGV4dFNpemVBZGp1c3Qo
Ym9vbCBiKSB7IG1fc3RhdGUuZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRTaXplQWRqdXN0
KGIpOyB9CisgICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkg
eyBtX3N0YXRlLmZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRXcml0aW5nTW9kZSh3cml0aW5nTW9k
ZSk7IH0KKyAgICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRpb24gdGV4dE9y
aWVudGF0aW9uKSB7IG1fc3RhdGUuZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRPcmllbnRh
dGlvbih0ZXh0T3JpZW50YXRpb24pOyB9CisgICAgYm9vbCBoYXNQYXJlbnROb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS5wYXJlbnROb2RlOyB9CiAKICAgICB2b2lkIHJlc2V0QXV0aG9yU3R5
bGUoKTsKICAgICB2b2lkIGFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3
LCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mKTsKQEAgLTMyNyw3ICszMzEs
NyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSog
c3R5bGVUb0FkanVzdCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBFbGVtZW50Kik7CiAKLSAg
ICB2b2lkIGFkZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKiBydWxlKSB7IG1fbWF0Y2hlZFJ1
bGVzLmFwcGVuZChydWxlKTsgfQorICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29uc3QgUnVsZURh
dGEqIHJ1bGUpIHsgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOyB9CiAKICAgICBz
dHJ1Y3QgUnVsZVJhbmdlIHsKICAgICAgICAgUnVsZVJhbmdlKGludCYgZmlyc3RSdWxlSW5kZXgs
IGludCYgbGFzdFJ1bGVJbmRleCk6IGZpcnN0UnVsZUluZGV4KGZpcnN0UnVsZUluZGV4KSwgbGFz
dFJ1bGVJbmRleChsYXN0UnVsZUluZGV4KSB7IH0KQEAgLTQzNywxNSArNDQxLDg3IEBAIHByaXZh
dGU6CiAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fc2libGluZ1J1bGVTZXQ7CiAgICAgT3duUHRyPFJ1
bGVTZXQ+IG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0OwogCi0gICAgYm9vbCBtX2hhc1VBQXBw
ZWFyYW5jZTsKLSAgICBCb3JkZXJEYXRhIG1fYm9yZGVyRGF0YTsKLSAgICBGaWxsTGF5ZXIgbV9i
YWNrZ3JvdW5kRGF0YTsKLSAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKLQogICAgIHR5cGVk
ZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgUmVmUHRyPFN0eWxlUnVsZUtleWZyYW1lcz4g
PiBLZXlmcmFtZXNSdWxlTWFwOwogICAgIEtleWZyYW1lc1J1bGVNYXAgbV9rZXlmcmFtZXNSdWxl
TWFwOwogCiBwdWJsaWM6CisgICAgdHlwZWRlZiBIYXNoTWFwPENTU1Byb3BlcnR5SUQsIFJlZlB0
cjxDU1NWYWx1ZT4gPiBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDsKKyNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpICYmIEVOQUJMRShTVkcpCisgICAgdHlwZWRlZiBIYXNoTWFwPEZpbHRlck9wZXJhdGlv
biosIFJlZlB0cjxXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlPiA+IFBlbmRpbmdTVkdEb2N1bWVu
dE1hcDsKKyNlbmRpZgorCisgICAgY2xhc3MgU3RhdGUgeworICAgICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShTdGF0ZSk7CisgICAgcHVibGljOgorICAgICAgICBTdGF0ZSgpCisgICAgICAgIDog
ZWxlbWVudCgwKQorICAgICAgICAsIHN0eWxlZEVsZW1lbnQoMCkKKyAgICAgICAgLCBwYXJlbnRO
b2RlKDApCisgICAgICAgICwgcGFyZW50U3R5bGUoMCkKKyAgICAgICAgLCByb290RWxlbWVudFN0
eWxlKDApCisgICAgICAgICwgcmVnaW9uRm9yU3R5bGluZygwKQorICAgICAgICAsIHNhbWVPcmln
aW5Pbmx5KGZhbHNlKQorICAgICAgICAsIHBzZXVkb1N0eWxlKE5PUFNFVURPKQorICAgICAgICAs
IGVsZW1lbnRMaW5rU3RhdGUoTm90SW5zaWRlTGluaykKKyAgICAgICAgLCBkaXN0cmlidXRlZFRv
SW5zZXJ0aW9uUG9pbnQoZmFsc2UpCisgICAgICAgICwgZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1
bGVzKGZhbHNlKQorICAgICAgICAsIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKQor
ICAgICAgICAsIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpCisjaWYgRU5B
QkxFKENTU19TSEFERVJTKQorICAgICAgICAsIGhhc1BlbmRpbmdTaGFkZXJzKGZhbHNlKQorI2Vu
ZGlmCisgICAgICAgICwgbGluZUhlaWdodFZhbHVlKDApCisgICAgICAgICwgZm9udERpcnR5KGZh
bHNlKQorICAgICAgICAsIGhhc1VBQXBwZWFyYW5jZShmYWxzZSkKKyAgICAgICAgLCBiYWNrZ3Jv
dW5kRGF0YShCYWNrZ3JvdW5kRmlsbExheWVyKSB7IH0KKyAgICAgICAgCitwdWJsaWM6CisgICAg
ICAgIC8vIEZJWE1FKGJ1ZyAxMDg1NjMpOiB0byBtYWtlIGl0IGVhc2llciB0byByZXZpZXcsIHRo
ZXNlIG1lbWJlcgorICAgICAgICAvLyB2YXJpYWJsZXMgYXJlIHB1YmxpYy4gSG93ZXZlciB3ZSBz
aG91bGQgYWRkIG1ldGhvZHMgdG8gYWNjZXNzCisgICAgICAgIC8vIHRoZXNlIHZhcmlhYmxlcy4K
KyAgICAgICAgRWxlbWVudCogZWxlbWVudDsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBz
dHlsZTsKKyAgICAgICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudDsKKyAgICAgICAgQ29u
dGFpbmVyTm9kZSogcGFyZW50Tm9kZTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
OworICAgICAgICBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZTsKKyAgICAgICAgCisgICAg
ICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZzsKKyAgICAgICAgYm9vbCBzYW1lT3Jp
Z2luT25seTsKKyAgICAgICAgUHNldWRvSWQgcHNldWRvU3R5bGU7CisKKyAgICAgICAgRUluc2lk
ZUxpbmsgZWxlbWVudExpbmtTdGF0ZTsKKworICAgICAgICBib29sIGRpc3RyaWJ1dGVkVG9JbnNl
cnRpb25Qb2ludDsKKworICAgICAgICBib29sIGVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlczsK
KworICAgICAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvOworCisgICAgICAgIC8vIEEgYnVmZmVy
IHVzZWQgdG8gaG9sZCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgZm9yIGFuIGVsZW1lbnQsCisg
ICAgICAgIC8vIGFuZCBhIHRlbXBvcmFyeSBidWZmZXIgdXNlZCBmb3IgbWVyZ2Ugc29ydGluZy4K
KyAgICAgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+IG1hdGNoZWRSdWxlczsKKyAgICAg
ICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0PiBydWxlTGlzdDsKKworICAgICAgICBib29sIGFw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsKKyAgICAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9W
aXNpdGVkTGlua1N0eWxlOworCisgICAgICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwIHBlbmRp
bmdJbWFnZVByb3BlcnRpZXM7CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICBib29s
IGhhc1BlbmRpbmdTaGFkZXJzOworI2VuZGlmCisjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBF
TkFCTEUoU1ZHKQorICAgICAgICBQZW5kaW5nU1ZHRG9jdW1lbnRNYXAgcGVuZGluZ1NWR0RvY3Vt
ZW50czsKKyNlbmRpZgorICAgICAgICBDU1NWYWx1ZSogbGluZUhlaWdodFZhbHVlOworICAgICAg
ICBib29sIGZvbnREaXJ0eTsKKworICAgICAgICBib29sIGhhc1VBQXBwZWFyYW5jZTsKKyAgICAg
ICAgQm9yZGVyRGF0YSBib3JkZXJEYXRhOworICAgICAgICBGaWxsTGF5ZXIgYmFja2dyb3VuZERh
dGE7CisgICAgICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsKKyAgICB9OworCiAgICAgc3RhdGlj
IFJlbmRlclN0eWxlKiBzdHlsZU5vdFlldEF2YWlsYWJsZSgpIHsgcmV0dXJuIHNfc3R5bGVOb3RZ
ZXRBdmFpbGFibGU7IH0KIAogICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJbWFnZShD
U1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwpAQCAtNDU2LDggKzUzMiw4IEBAIHB1YmxpYzoKICNl
bmRpZgogICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVl
KENTU1Byb3BlcnR5SUQsIENTU0N1cnNvckltYWdlVmFsdWUqKTsKIAotICAgIGJvb2wgYXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGU7IH0KLSAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUo
KSBjb25zdCB7IHJldHVybiBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7IH0KKyAg
ICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOyB9CisgICAgYm9vbCBhcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlOyB9CiAKICAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0ludExl
bmd0aChDU1NQcmltaXRpdmVWYWx1ZSosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHJvb3RT
dHlsZSwgZG91YmxlIG11bHRpcGxpZXIgPSAxKTsKICAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRU
b0Zsb2F0TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHls
ZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEpOwpAQCAtNTExLDM5ICs1ODcsMTgg
QEAgcHJpdmF0ZToKIAogICAgIFRpbWVyPFN0eWxlUmVzb2x2ZXI+IG1fbWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZVN3ZWVwVGltZXI7CiAKLSAgICAvLyBBIGJ1ZmZlciB1c2VkIHRvIGhvbGQgdGhlIHNl
dCBvZiBtYXRjaGVkIHJ1bGVzIGZvciBhbiBlbGVtZW50LCBhbmQgYSB0ZW1wb3JhcnkgYnVmZmVy
IHVzZWQgZm9yCi0gICAgLy8gbWVyZ2Ugc29ydGluZy4KLSAgICBWZWN0b3I8Y29uc3QgUnVsZURh
dGEqLCAzMj4gbV9tYXRjaGVkUnVsZXM7Ci0KLSAgICBSZWZQdHI8U3RhdGljQ1NTUnVsZUxpc3Q+
IG1fcnVsZUxpc3Q7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8Q1NTUHJvcGVydHlJRCwgUmVmUHRy
PENTU1ZhbHVlPiA+IFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOwotICAgIFBlbmRpbmdJbWFnZVBy
b3BlcnR5TWFwIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllczsKLQogICAgIE93blB0cjxNZWRpYVF1
ZXJ5RXZhbHVhdG9yPiBtX21lZGl1bTsKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fcm9vdERl
ZmF1bHRTdHlsZTsKIAotICAgIFBzZXVkb0lkIG1fZHluYW1pY1BzZXVkbzsKLSAgICBQc2V1ZG9J
ZCBtX3BzZXVkb1N0eWxlOwotCiAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAgLy8gRklY
TUU6IE1ha2UgU2VsZWN0b3JDaGVja2VyIGFuIG9uLXN0YWNrIG9iamVjdCBhbmQKKyAgICAvLyBt
b3ZlIHNlbGVjdG9yQ2hlY2tlci5tb2RlKCkgdG8gU3RhdGUuCisgICAgLy8gc2VsZWN0b3JDaGVj
a2VyLnN0cmluZ1BhcnNpbmcoKSBjYW4gYmUgcmVwbGFjZWQgd2l0aAorICAgIC8vICFkb2N1bWVu
dC5pblF1aXJrc01vZGUoKS4KICAgICBTZWxlY3RvckNoZWNrZXIgbV9zZWxlY3RvckNoZWNrZXI7
CiAgICAgU2VsZWN0b3JGaWx0ZXIgbV9zZWxlY3RvckZpbHRlcjsKIAotICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gbV9zdHlsZTsKLSAgICBSZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZTsKLSAgICBS
ZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlOwotICAgIEVsZW1lbnQqIG1fZWxlbWVudDsK
LSAgICBTdHlsZWRFbGVtZW50KiBtX3N0eWxlZEVsZW1lbnQ7Ci0gICAgUmVuZGVyUmVnaW9uKiBt
X3JlZ2lvbkZvclN0eWxpbmc7Ci0gICAgRUluc2lkZUxpbmsgbV9lbGVtZW50TGlua1N0YXRlOwot
ICAgIGJvb2wgbV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXM7Ci0gICAgQ29udGFpbmVyTm9k
ZSogbV9wYXJlbnROb2RlOwotICAgIENTU1ZhbHVlKiBtX2xpbmVIZWlnaHRWYWx1ZTsKLSAgICBi
b29sIG1fZm9udERpcnR5OwogICAgIGJvb2wgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXM7Ci0g
ICAgYm9vbCBtX3NhbWVPcmlnaW5Pbmx5OwotICAgIGJvb2wgbV9kaXN0cmlidXRlZFRvSW5zZXJ0
aW9uUG9pbnQ7CiAKICAgICBSZWZQdHI8Q1NTRm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsK
ICAgICBWZWN0b3I8T3duUHRyPE1lZGlhUXVlcnlSZXN1bHQ+ID4gbV92aWV3cG9ydERlcGVuZGVu
dE1lZGlhUXVlcnlSZXN1bHRzOwpAQCAtNTUyLDIyICs2MDcsMTQgQEAgcHJpdmF0ZToKICAgICBS
ZWZQdHI8Vmlld3BvcnRTdHlsZVJlc29sdmVyPiBtX3ZpZXdwb3J0U3R5bGVSZXNvbHZlcjsKICNl
bmRpZgogCi0gICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsKLSAgICBib29s
IG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsKICAgICBjb25zdCBTdHlsZUJ1aWxk
ZXImIG1fc3R5bGVCdWlsZGVyOwogCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGJvb2wg
bV9oYXNQZW5kaW5nU2hhZGVyczsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKSAm
JiBFTkFCTEUoU1ZHKQotICAgIEhhc2hNYXA8RmlsdGVyT3BlcmF0aW9uKiwgUmVmUHRyPFdlYktp
dENTU1NWR0RvY3VtZW50VmFsdWU+ID4gbV9wZW5kaW5nU1ZHRG9jdW1lbnRzOwotI2VuZGlmCi0K
ICAgICBPd25QdHI8U3R5bGVTY29wZVJlc29sdmVyPiBtX3Njb3BlUmVzb2x2ZXI7CiAgICAgQ1NT
VG9TdHlsZU1hcCBtX3N0eWxlTWFwOwogICAgIEluc3BlY3RvckNTU09NV3JhcHBlcnMgbV9pbnNw
ZWN0b3JDU1NPTVdyYXBwZXJzOwogCisgICAgU3RhdGUgbV9zdGF0ZTsKKwogICAgIGZyaWVuZCBj
bGFzcyBTdHlsZUJ1aWxkZXI7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNYXRj
aGVkUHJvcGVydGllcyYsIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJik7CiAgICAgZnJpZW5kIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBNYXRjaGVkUHJvcGVydGllcyYsIGNvbnN0IE1hdGNoZWRQcm9w
ZXJ0aWVzJik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>