<?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>224433</bug_id>
          
          <creation_ts>2021-04-12 07:33:52 -0700</creation_ts>
          <short_desc>Refactor parameters to blending functions</short_desc>
          <delta_ts>2021-04-19 22:03:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antoine Quint">graouts</reporter>
          <assigned_to name="Antoine Quint">graouts</assigned_to>
          <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>pdr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1749212</commentid>
    <comment_count>0</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-04-12 07:33:52 -0700</bug_when>
    <thetext>Refactor parameters to blending functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749213</commentid>
    <comment_count>1</comment_count>
      <attachid>425746</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-04-12 07:37:43 -0700</bug_when>
    <thetext>Created attachment 425746
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749214</commentid>
    <comment_count>2</comment_count>
      <attachid>425746</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-04-12 07:44:19 -0700</bug_when>
    <thetext>Comment on attachment 425746
Patch

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

&gt; Source/WebCore/animation/CSSPropertyAnimation.h:39
&gt; +struct BlendOptions {

Maybe BlendContext or something? BlendOptions sounds like an OptionSet.

&gt; Source/WebCore/animation/CSSPropertyAnimation.h:48
&gt; +    const CSSPropertyBlendingClient* client;
&gt; +    double progress;
&gt; +    bool isDiscrete;
&gt; +
&gt; +    BlendOptions(double progress)
&gt; +        : progress(progress)
&gt; +    {
&gt; +    }
&gt; +

Using this constructor leaves client and isDiscrete uninitialized.

&gt; Source/WebCore/animation/CSSPropertyAnimation.h:58
&gt; +        // https://drafts.csswg.org/web-animations-1/#discrete
&gt; +        // The property&apos;s values cannot be meaningfully combined, thus it is not additive and
&gt; +        // interpolation swaps from Va to Vb at 50% (p=0.5).
&gt; +        if (isDiscrete)
&gt; +            this-&gt;progress = progress &lt; 0.5 ? 0 : 1;

Nor sure this is the best place to implement spec semantics. Maybe the caller could do this? Then the struct could be just a plain struct without constructors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749294</commentid>
    <comment_count>3</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-04-12 11:27:50 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #2)
&gt; Comment on attachment 425746 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=425746&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/animation/CSSPropertyAnimation.h:39
&gt; &gt; +struct BlendOptions {
&gt; 
&gt; Maybe BlendContext or something? BlendOptions sounds like an OptionSet.

I&apos;ll rename it to the BlendingContext, move it to AnimationUtilities.h and make a CSSPropertyBlendingContext private to CSSPropertyAnimation.cpp with the CSSPropertyBlendingClient member. 

&gt; &gt; Source/WebCore/animation/CSSPropertyAnimation.h:58
&gt; &gt; +        // https://drafts.csswg.org/web-animations-1/#discrete
&gt; &gt; +        // The property&apos;s values cannot be meaningfully combined, thus it is not additive and
&gt; &gt; +        // interpolation swaps from Va to Vb at 50% (p=0.5).
&gt; &gt; +        if (isDiscrete)
&gt; &gt; +            this-&gt;progress = progress &lt; 0.5 ? 0 : 1;
&gt; 
&gt; Nor sure this is the best place to implement spec semantics. Maybe the
&gt; caller could do this? Then the struct could be just a plain struct without
&gt; constructors.

I&apos;ll move it back to CSSPropertyAnimation::blendProperties() where it belongs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749346</commentid>
    <comment_count>4</comment_count>
      <attachid>425778</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-04-12 13:12:05 -0700</bug_when>
    <thetext>Created attachment 425778
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749348</commentid>
    <comment_count>5</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-04-12 13:12:23 -0700</bug_when>
    <thetext>*** Bug 223173 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749349</commentid>
    <comment_count>6</comment_count>
      <attachid>425778</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-04-12 13:15:41 -0700</bug_when>
    <thetext>Comment on attachment 425778
Patch

Do we expect BlendingContext to gain more members? I&apos;m not sure two members justifies the struct at this point. I would not consider &quot;progress&quot; a part of a &quot;context&quot;: progress is a direct input into blending.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749538</commentid>
    <comment_count>7</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-04-12 22:46:15 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #6)
&gt; Comment on attachment 425778 [details]
&gt; Patch
&gt; 
&gt; Do we expect BlendingContext to gain more members? I&apos;m not sure two members
&gt; justifies the struct at this point. I would not consider &quot;progress&quot; a part
&gt; of a &quot;context&quot;: progress is a direct input into blending.

We do: the composite operation will have to be passed through to deal with additive and accumulative animations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749574</commentid>
    <comment_count>8</comment_count>
      <attachid>425843</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-04-13 00:50:37 -0700</bug_when>
    <thetext>Created attachment 425843
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749575</commentid>
    <comment_count>9</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-04-13 00:52:17 -0700</bug_when>
    <thetext>(In reply to Antoine Quint from comment #7)
&gt; (In reply to Simon Fraser (smfr) from comment #6)
&gt; &gt; Comment on attachment 425778 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; Do we expect BlendingContext to gain more members? I&apos;m not sure two members
&gt; &gt; justifies the struct at this point. I would not consider &quot;progress&quot; a part
&gt; &gt; of a &quot;context&quot;: progress is a direct input into blending.
&gt; 
&gt; We do: the composite operation will have to be passed through to deal with
&gt; additive and accumulative animations.

Note also that CSSPropertyBlendingContext also adds the CSSPropertyBlendingClient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749589</commentid>
    <comment_count>10</comment_count>
      <attachid>425846</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-04-13 01:37:48 -0700</bug_when>
    <thetext>Created attachment 425846
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750241</commentid>
    <comment_count>11</comment_count>
      <attachid>425846</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2021-04-14 11:20:10 -0700</bug_when>
    <thetext>Comment on attachment 425846
Patch

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

&gt; Source/WebCore/animation/CSSPropertyAnimation.cpp:77
&gt; +    const CSSPropertyBlendingClient* client;
&gt; +
&gt; +    CSSPropertyBlendingContext(double progress, bool isDiscrete, const CSSPropertyBlendingClient* client)

Don&apos;t people usually put the member variable after the constructor?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750242</commentid>
    <comment_count>12</comment_count>
      <attachid>425846</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-14 11:22:30 -0700</bug_when>
    <thetext>Comment on attachment 425846
Patch

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

&gt;&gt; Source/WebCore/animation/CSSPropertyAnimation.cpp:77
&gt;&gt; +    CSSPropertyBlendingContext(double progress, bool isDiscrete, const CSSPropertyBlendingClient* client)
&gt; 
&gt; Don&apos;t people usually put the member variable after the constructor?

It’s a struct vs. class thing.

When the interface to a class is public data members (most structs), then those should be at the top.

When the private data members are an implementation detail, then those should be at the bottom along with other private things.

This follows our traditions for structs.

But I would ask: Do we really need a constructor here? Can we use aggregate initialization syntax instead and omit the constructor function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750289</commentid>
    <comment_count>13</comment_count>
      <attachid>425846</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-04-14 12:39:44 -0700</bug_when>
    <thetext>Comment on attachment 425846
Patch

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

&gt; Source/WebCore/animation/CSSPropertyAnimation.cpp:74
&gt; +struct CSSPropertyBlendingContext : BlendingContext {

Why do we need subtyping here? Can&apos;t we just have everything in a single BlendingContext struct?

&gt; Source/WebCore/platform/animation/AnimationUtilities.h:35
&gt; +    double progress;
&gt; +    bool isDiscrete { false };

Why do some fields have defaults and some not?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751091</commentid>
    <comment_count>14</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-04-16 08:50:45 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #13)
&gt; Comment on attachment 425846 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=425846&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/animation/CSSPropertyAnimation.cpp:74
&gt; &gt; +struct CSSPropertyBlendingContext : BlendingContext {
&gt; 
&gt; Why do we need subtyping here? Can&apos;t we just have everything in a single
&gt; BlendingContext struct?

CSSPropertyBlendingClient is really only relevant in the context of CSSPropertyAnimation.cpp, while blending of types can be done in other source files. It felt cleaner to have this member only be exposed in the context of blending work in CSSPropertyAnimation.cpp.

&gt; &gt; Source/WebCore/platform/animation/AnimationUtilities.h:35
&gt; &gt; +    double progress;
&gt; &gt; +    bool isDiscrete { false };
&gt; 
&gt; Why do some fields have defaults and some not?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751109</commentid>
    <comment_count>15</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-04-16 09:38:51 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #12)
&gt; Comment on attachment 425846 [details]
&gt; 
&gt; But I would ask: Do we really need a constructor here? Can we use aggregate
&gt; initialization syntax instead and omit the constructor function?

I&apos;ll remove the BlendingContext constructor, which is indeed useless. However, I believe we need one for CSSPropertyBlendingContext blending context since it inherits from BlendingContext if we want to also have the subtype parameter in the constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751115</commentid>
    <comment_count>16</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-04-16 09:55:58 -0700</bug_when>
    <thetext>Committed r276141 (236634@main): &lt;https://commits.webkit.org/236634@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751126</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-16 10:13:58 -0700</bug_when>
    <thetext>Need to roll this out; build is broken on multiple platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751130</commentid>
    <comment_count>18</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-16 10:16:13 -0700</bug_when>
    <thetext>Did this cause this? 
./animation/CSSPropertyAnimation.cpp:78:11: error: no matching constructor for initialization of &apos;WebCore::BlendingContext&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751132</commentid>
    <comment_count>19</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-16 10:24:27 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #18)
&gt; Did this cause this? 
&gt; ./animation/CSSPropertyAnimation.cpp:78:11: error: no matching constructor
&gt; for initialization of &apos;WebCore::BlendingContext&apos;

I landed the following build fix: &lt;https://commits.webkit.org/r276142&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751136</commentid>
    <comment_count>20</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-04-16 10:33:33 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #19)
&gt; (In reply to Chris Dumez from comment #18)
&gt; &gt; Did this cause this? 
&gt; &gt; ./animation/CSSPropertyAnimation.cpp:78:11: error: no matching constructor
&gt; &gt; for initialization of &apos;WebCore::BlendingContext&apos;
&gt; 
&gt; I landed the following build fix: &lt;https://commits.webkit.org/r276142&gt;

Thanks Chris!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751140</commentid>
    <comment_count>21</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-16 10:36:07 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #19)
&gt; (In reply to Chris Dumez from comment #18)
&gt; &gt; Did this cause this? 
&gt; &gt; ./animation/CSSPropertyAnimation.cpp:78:11: error: no matching constructor
&gt; &gt; for initialization of &apos;WebCore::BlendingContext&apos;
&gt; 
&gt; I landed the following build fix: &lt;https://commits.webkit.org/r276142&gt;

Looks like there are still some build failures on some platforms (Windows at least). But my build fix did the trick for me locally on macOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751142</commentid>
    <comment_count>22</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-16 10:42:10 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #21)
&gt; (In reply to Chris Dumez from comment #19)
&gt; &gt; (In reply to Chris Dumez from comment #18)
&gt; &gt; &gt; Did this cause this? 
&gt; &gt; &gt; ./animation/CSSPropertyAnimation.cpp:78:11: error: no matching constructor
&gt; &gt; &gt; for initialization of &apos;WebCore::BlendingContext&apos;
&gt; &gt; 
&gt; &gt; I landed the following build fix: &lt;https://commits.webkit.org/r276142&gt;
&gt; 
&gt; Looks like there are still some build failures on some platforms (Windows at
&gt; least). But my build fix did the trick for me locally on macOS.

GTK too:
../../Source/WebCore/platform/graphics/nicosia/NicosiaAnimation.cpp:31:31: error: cannot convert ‘double’ to ‘const WebCore::BlendingContext&amp;’
../../Source/WebCore/platform/graphics/nicosia/NicosiaAnimation.cpp:141:39: error: cannot convert ‘double’ to ‘const WebCore::BlendingContext&amp;’
../../Source/WebCore/platform/graphics/nicosia/NicosiaAnimation.cpp:149:41: error: cannot convert ‘double’ to ‘const WebCore::BlendingContext&amp;’
../../Source/WebCore/platform/graphics/nicosia/NicosiaAnimation.cpp:156:52: error: cannot convert ‘double’ to ‘const WebCore::BlendingContext&amp;’</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751149</commentid>
    <comment_count>23</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-16 10:48:29 -0700</bug_when>
    <thetext>The real problem is landing the revised patch without doing EWS first.

A good fix for those NicosiaAnimation.cpp places is possibly to write &quot;{ progress }&quot; instead of just &quot;progress&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751151</commentid>
    <comment_count>24</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-16 10:52:19 -0700</bug_when>
    <thetext>Trying this for GTK / Win&apos;s build: &lt;https://commits.webkit.org/r276143&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751165</commentid>
    <comment_count>25</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-16 11:19:17 -0700</bug_when>
    <thetext>There were too many build failures on GTK / WinCairo. I gave up, reverted by build fixes and just added a constructor for BlendingContext in &lt;https://commits.webkit.org/r276147&gt; to make the bots green again.

Feel free to follow-up and do better in a follow-up, relying on EWS to make sure it builds everywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752136</commentid>
    <comment_count>26</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2021-04-19 22:03:09 -0700</bug_when>
    <thetext>rdar://76765208</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425746</attachid>
            <date>2021-04-12 07:37:43 -0700</date>
            <delta_ts>2021-04-12 13:12:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224433-20210412163741.patch</filename>
            <type>text/plain</type>
            <size>174450</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1NzkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTBkMjExNTRiZmY2ZTg2
NWFhYjlhYzYzYzVjNWUxM2VlNjA1OGQzMS4uZDJlYTcwODRmMTIxZTUyMTVkNDU0ZWRiYzI5YzYy
OTU3Y2ZiOTQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOCBAQAorMjAyMS0wNC0xMiAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZWZhY3RvciBwYXJh
bWV0ZXJzIHRvIGJsZW5kaW5nIGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0NDMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmVkdWNlIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBwYXNz
ZWQgdG8gdGhlIGJsZW5kaW5nIGZ1bmN0aW9ucyBzdWNoIHRoYXQgd2UgcGFja2FnZQorICAgICAg
ICB0aGUgY2xpZW50IGFuZCBwcm9ncmVzcyB0b2dldGhlciBhcyB3ZWxsIGFzIHRyYWNrIHdoZXRo
ZXIgdGhlIGFuaW1hdGlvbiBpcyBkaXNjcmV0ZQorICAgICAgICBpbnN0ZWFkIG9mIGNvbXB1dGlu
ZyBpdCBzZXZlcmFsIHRpbWVzLiBUaGlzIGluZm9ybWF0aW9uIGlzIG5vdyBwYXNzZWQgYXMgYSBC
bGVuZE9wdGlvbnMKKyAgICAgICAgcGFyYW1ldGVyLiBXaGVuIHdlIHN1cHBvcnQgY29tcG9zaXRl
IG9wZXJ0aW9ucywgd2UnbGwganVzdCBuZWVkIHRvIGFkZCBhIG5ldyBtZW1iZXIKKyAgICAgICAg
dG8gdGhhdCBzdHJ1Y3QgaW5zdGVhZCBvZiBtb2RpZnlpbmcgYWxsIHRoZSBtZXRob2Qgc2lnbmF0
dXJlcy4KKworICAgICAgICBTaW5jZSB3ZSBhcmUgbW9kaWZ5aW5nIHRoZSBtZXRob2Qgc2lnbmF0
dXJlcywgd2UgYWxzbyBjaGFuZ2UgdGhlIFJlbmRlclN0eWxlIHBvaW50ZXJzCisgICAgICAgIHRv
IHJlZmVyZW5jZXMgc2luY2Ugd2Ugd291bGQgbmV2ZXIgcGFzcyBpbiBhIG51bGwgdmFsdWUuCisK
KyAgICAgICAgKiBhbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6YmxlbmRGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRmlsdGVyT3BlcmF0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpibGVuZEZpbHRlcik6CisgICAgICAgIChXZWJDb3Jl
Ojpjcm9zc2ZhZGVCbGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Qcm9wZXJ0eVdy
YXBwZXJCYXNlOjpjYW5JbnRlcnBvbGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI6OnZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNhbklu
dGVycG9sYXRlQ2FyZXRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eUFuaW1h
dGlvbjo6YmxlbmRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5QW5p
bWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlB
bmltYXRpb246OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQpOgorICAgICAgICAqIGFuaW1hdGlv
bi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6QmxlbmRPcHRpb25z
OjpCbGVuZE9wdGlvbnMpOgorICAgICAgICAqIGFuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUVmZmVjdDo6c2V0QW5pbWF0ZWRQcm9wZXJ0aWVz
SW5TdHlsZSk6CisgICAgICAgICogY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDcm9zc2ZhZGVWYWx1
ZTo6YmxlbmQgY29uc3QpOgorICAgICAgICAqIGNzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5oOgorICAg
ICAgICAqIGNzcy9DU1NHcmFkaWVudFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlh
bEdyYWRpZW50QWRhcHRlcjo6bm9ybWFsaXplU3RvcHNBbmRFbmRwb2ludHNPdXRzaWRlUmFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6Q29uaWNHcmFkaWVudEFkYXB0ZXI6Om5vcm1hbGl6ZVN0b3Bz
QW5kRW5kcG9pbnRzT3V0c2lkZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRpZW50
VmFsdWU6OmNvbXB1dGVTdG9wcyk6CisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmJsZW5kTWl4ZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpibGVu
ZCk6CisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoLmg6CisgICAgICAgICogcGxhdGZvcm0vTGVu
Z3RoUG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9MZW5ndGhTaXplLmg6CisgICAgICAgIChXZWJDb3JlOjpibGVuZCk6CisgICAgICAgICogcGxh
dGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6
YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6YmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRXaXRob3V0
UHJlbXVsdGlwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVy
c0NvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0
cml4VmFsdWVGb3JGaWx0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyT3BlcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb246OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29tcG9uZW50
VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkludmVy
dExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6Qmx1
ckZpbHRlck9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvd0Zp
bHRlck9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246
OmJsZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0lkZW50aXR5
VHJhbnNmb3JtT3BlcmF0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWF0cml4M0RUcmFuc2Zvcm1PcGVy
YXRpb246OmJsZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01h
dHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1BlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9u
OjpibGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVj
dGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRp
b24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFuc2Zv
cm1PcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlv
bjo6YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tld1Ry
YW5zZm9ybU9wZXJhdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvVHJhbnNmb3JtT3BlcmF0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJh
bnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5z
Zm9ybU9wZXJhdGlvbnM6OmJsZW5kQnlNYXRjaGluZ09wZXJhdGlvbnMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uczo6YmxlbmRCeVVzaW5nTWF0cml4SW50ZXJw
b2xhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb25zOjpi
bGVuZCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFu
c2Zvcm1PcGVyYXRpb25zLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFwZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFz
aWNTaGFwZUNpcmNsZTo6YmxlbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFzaWNTaGFw
ZUVsbGlwc2U6OmJsZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljU2hhcGVQb2x5
Z29uOjpibGVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY1NoYXBlUGF0aDo6Ymxl
bmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFzaWNTaGFwZUluc2V0OjpibGVuZCBjb25z
dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0Jhc2ljU2hhcGVzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpCYXNpY1NoYXBlQ2VudGVyQ29vcmRpbmF0ZTo6YmxlbmQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QmFzaWNTaGFwZVJhZGl1czo6YmxlbmQgY29uc3QpOgorICAgICAgICAqIHN0
eWxlL1N0eWxlYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcm9wZXJ0eUluU3R5bGVNYXRj
aGVzVmFsdWVGb3JUcmFuc2l0aW9uSW5NYXApOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlQ1NT
VHJhbnNpdGlvbnNGb3JTdHlsZWFibGVBbmRQcm9wZXJ0eSk6CisKIDIwMjEtMDQtMDkgIEFudG9p
bmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgY2FsYygpIHNpbXBsaWZp
Y2F0aW9uIGZvciBhIG11bHRpcGxpY2F0aW9uIHNob3VsZCBhcHBseSB0aGUgbXVsdGlwbGljYXRp
b24gdG8gZWFjaCB2YWx1ZSBvZiBhbiBhZGRpdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKaW5kZXggNDcyYThmODcyYTY4MzNhMmYx
OGVmYmEwNGFkMGQzMzA0MjQ3OGY3My4uMjE5M2M3MjE0NTI4OGY0ODVmY2E2NzcxNmNiNWM4MTU2
MDU2NmIxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5
QW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlB
bmltYXRpb24uY3BwCkBAIC03MCw4NyArNzAsODcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1zdGF0aWMgaW5saW5lIGludCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCosIGludCBmcm9tLCBpbnQgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUg
aW50IGJsZW5kRnVuYyhpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBCbGVuZE9wdGlvbnMmIG9wdGlv
bnMpCiB7Ci0gICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9ncmVzcyk7CisgICAgcmV0dXJu
IGJsZW5kKGZyb20sIHRvLCBvcHRpb25zKTsKIH0KIAotc3RhdGljIGlubGluZSBkb3VibGUgYmxl
bmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBkb3VibGUgZnJvbSwgZG91
YmxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIGRvdWJsZSBibGVuZEZ1bmMo
ZG91YmxlIGZyb20sIGRvdWJsZSB0bywgY29uc3QgQmxlbmRPcHRpb25zJiBvcHRpb25zKQogewot
ICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJvZ3Jlc3MpOworICAgIHJldHVybiBibGVuZChm
cm9tLCB0bywgb3B0aW9ucyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgZmxvYXQgYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBmbG9hdCBmcm9tLCBmbG9hdCB0bywgZG91
YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBmbG9hdCBibGVuZEZ1bmMoZmxvYXQgZnJvbSwg
ZmxvYXQgdG8sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICByZXR1cm4gbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChmcm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVzcyk7CisgICAg
cmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZnJvbSArICh0byAtIGZyb20pICogb3B0aW9u
cy5wcm9ncmVzcyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgQ29sb3IgYmxlbmRGdW5jKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3Im
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIENvbG9yIGJsZW5kRnVuYyhjb25z
dCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBjb25zdCBCbGVuZE9wdGlvbnMmIG9wdGlv
bnMpCiB7Ci0gICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9ncmVzcyk7CisgICAgcmV0dXJu
IGJsZW5kKGZyb20sIHRvLCBvcHRpb25zKTsKIH0KIAotc3RhdGljIGlubGluZSBMZW5ndGggYmxl
bmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBjb25zdCBMZW5ndGgmIGZy
b20sIGNvbnN0IExlbmd0aCYgdG8sIGRvdWJsZSBwcm9ncmVzcywgVmFsdWVSYW5nZSB2YWx1ZVJh
bmdlID0gVmFsdWVSYW5nZUFsbCkKK3N0YXRpYyBpbmxpbmUgTGVuZ3RoIGJsZW5kRnVuYyhjb25z
dCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0
aW9ucywgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5nZUFsbCkKIHsKLSAgICByZXR1
cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzLCB2YWx1ZVJhbmdlKTsKKyAgICByZXR1cm4gYmxl
bmQoZnJvbSwgdG8sIG9wdGlvbnMsIHZhbHVlUmFuZ2UpOwogfQogCi1zdGF0aWMgaW5saW5lIEdh
cExlbmd0aCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0
IEdhcExlbmd0aCYgZnJvbSwgY29uc3QgR2FwTGVuZ3RoJiB0bywgZG91YmxlIHByb2dyZXNzKQor
c3RhdGljIGlubGluZSBHYXBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IEdhcExlbmd0aCYgZnJvbSwg
Y29uc3QgR2FwTGVuZ3RoJiB0bywgY29uc3QgQmxlbmRPcHRpb25zJiBvcHRpb25zKQogewogICAg
IGlmIChmcm9tLmlzTm9ybWFsKCkgfHwgdG8uaXNOb3JtYWwoKSkKLSAgICAgICAgcmV0dXJuIHBy
b2dyZXNzIDwgMC41ID8gZnJvbSA6IHRvOwotICAgIHJldHVybiBibGVuZChmcm9tLmxlbmd0aCgp
LCB0by5sZW5ndGgoKSwgcHJvZ3Jlc3MsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSk7CisgICAgICAg
IHJldHVybiBvcHRpb25zLnByb2dyZXNzIDwgMC41ID8gZnJvbSA6IHRvOworICAgIHJldHVybiBi
bGVuZChmcm9tLmxlbmd0aCgpLCB0by5sZW5ndGgoKSwgb3B0aW9ucywgVmFsdWVSYW5nZU5vbk5l
Z2F0aXZlKTsKIH0KIAotc3RhdGljIGlubGluZSBUYWJTaXplIGJsZW5kRnVuYyhjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgY29uc3QgVGFiU2l6ZSYgZnJvbSwgY29uc3QgVGFiU2l6
ZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgVGFiU2l6ZSBibGVuZEZ1bmMo
Y29uc3QgVGFiU2l6ZSYgZnJvbSwgY29uc3QgVGFiU2l6ZSYgdG8sIGNvbnN0IEJsZW5kT3B0aW9u
cyYgb3B0aW9ucykKIHsKLSAgICBhdXRvIGJsZW5kZWRWYWx1ZSA9IGJsZW5kKGZyb20udmFsdWUo
KSwgdG8udmFsdWUoKSwgcHJvZ3Jlc3MpOworICAgIGF1dG8gYmxlbmRlZFZhbHVlID0gYmxlbmQo
ZnJvbS52YWx1ZSgpLCB0by52YWx1ZSgpLCBvcHRpb25zKTsKICAgICByZXR1cm4geyBibGVuZGVk
VmFsdWUgPCAwID8gMCA6IGJsZW5kZWRWYWx1ZSwgZnJvbS5pc1NwYWNlcygpID8gU3BhY2VWYWx1
ZVR5cGUgOiBMZW5ndGhWYWx1ZVR5cGUgfTsKIH0KIAotc3RhdGljIGlubGluZSBMZW5ndGhTaXpl
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIGNvbnN0
IExlbmd0aFNpemUmIGZyb20sIGNvbnN0IExlbmd0aFNpemUmIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
CitzdGF0aWMgaW5saW5lIExlbmd0aFNpemUgYmxlbmRGdW5jKGNvbnN0IExlbmd0aFNpemUmIGZy
b20sIGNvbnN0IExlbmd0aFNpemUmIHRvLCBjb25zdCBCbGVuZE9wdGlvbnMmIG9wdGlvbnMpCiB7
Ci0gICAgcmV0dXJuIHsgYmxlbmRGdW5jKGNsaWVudCwgZnJvbS53aWR0aCwgdG8ud2lkdGgsIHBy
b2dyZXNzLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpLAotICAgICAgICAgICAgIGJsZW5kRnVuYyhj
bGllbnQsIGZyb20uaGVpZ2h0LCB0by5oZWlnaHQsIHByb2dyZXNzLCBWYWx1ZVJhbmdlTm9uTmVn
YXRpdmUpIH07CisgICAgcmV0dXJuIHsgYmxlbmRGdW5jKGZyb20ud2lkdGgsIHRvLndpZHRoLCBv
cHRpb25zLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpLAorICAgICAgICAgICAgIGJsZW5kRnVuYyhm
cm9tLmhlaWdodCwgdG8uaGVpZ2h0LCBvcHRpb25zLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpIH07
CiB9CiAKLXN0YXRpYyBpbmxpbmUgTGVuZ3RoUG9pbnQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDbGllbnQqLCBjb25zdCBMZW5ndGhQb2ludCYgZnJvbSwgY29uc3QgTGVuZ3Ro
UG9pbnQmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIExlbmd0aFBvaW50IGJs
ZW5kRnVuYyhjb25zdCBMZW5ndGhQb2ludCYgZnJvbSwgY29uc3QgTGVuZ3RoUG9pbnQmIHRvLCBj
b25zdCBCbGVuZE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgcmV0dXJuIGJsZW5kKGZyb20sIHRv
LCBwcm9ncmVzcyk7CisgICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBvcHRpb25zKTsKIH0KIAot
c3RhdGljIGlubGluZSBTaGFkb3dTdHlsZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogY2xpZW50LCBTaGFkb3dTdHlsZSBmcm9tLCBTaGFkb3dTdHlsZSB0bywgZG91
YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBTaGFkb3dTdHlsZSBibGVuZEZ1bmMoU2hhZG93
U3R5bGUgZnJvbSwgU2hhZG93U3R5bGUgdG8sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucykK
IHsKICAgICBpZiAoZnJvbSA9PSB0bykKICAgICAgICAgcmV0dXJuIHRvOwogCiAgICAgZG91Ymxl
IGZyb21WYWwgPSBmcm9tID09IFNoYWRvd1N0eWxlOjpOb3JtYWwgPyAxIDogMDsKICAgICBkb3Vi
bGUgdG9WYWwgPSB0byA9PSBTaGFkb3dTdHlsZTo6Tm9ybWFsID8gMSA6IDA7Ci0gICAgZG91Ymxl
IHJlc3VsdCA9IGJsZW5kRnVuYyhjbGllbnQsIGZyb21WYWwsIHRvVmFsLCBwcm9ncmVzcyk7Cisg
ICAgZG91YmxlIHJlc3VsdCA9IGJsZW5kRnVuYyhmcm9tVmFsLCB0b1ZhbCwgb3B0aW9ucyk7CiAg
ICAgcmV0dXJuIHJlc3VsdCA+IDAgPyBTaGFkb3dTdHlsZTo6Tm9ybWFsIDogU2hhZG93U3R5bGU6
Okluc2V0OwogfQogCi1zdGF0aWMgaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBi
bGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBjb25zdCBT
aGFkb3dEYXRhKiBmcm9tLCBjb25zdCBTaGFkb3dEYXRhKiB0bywgZG91YmxlIHByb2dyZXNzKQor
c3RhdGljIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRGdW5jKGNvbnN0
IFNoYWRvd0RhdGEqIGZyb20sIGNvbnN0IFNoYWRvd0RhdGEqIHRvLCBjb25zdCBCbGVuZE9wdGlv
bnMmIG9wdGlvbnMpCiB7CiAgICAgQVNTRVJUKGZyb20gJiYgdG8pOwogICAgIEFTU0VSVChmcm9t
LT5zdHlsZSgpID09IHRvLT5zdHlsZSgpKTsKIAotICAgIHJldHVybiBtYWtlVW5pcXVlPFNoYWRv
d0RhdGE+KGJsZW5kKGZyb20tPmxvY2F0aW9uKCksIHRvLT5sb2NhdGlvbigpLCBwcm9ncmVzcyks
Ci0gICAgICAgIHN0ZDo6bWF4KDAsIGJsZW5kKGZyb20tPnJhZGl1cygpLCB0by0+cmFkaXVzKCks
IHByb2dyZXNzKSksCi0gICAgICAgIGJsZW5kKGZyb20tPnNwcmVhZCgpLCB0by0+c3ByZWFkKCks
IHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmRGdW5jKGNsaWVudCwgZnJvbS0+c3R5bGUoKSwgdG8t
PnN0eWxlKCksIHByb2dyZXNzKSwKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPihi
bGVuZChmcm9tLT5sb2NhdGlvbigpLCB0by0+bG9jYXRpb24oKSwgb3B0aW9ucyksCisgICAgICAg
IHN0ZDo6bWF4KDAsIGJsZW5kKGZyb20tPnJhZGl1cygpLCB0by0+cmFkaXVzKCksIG9wdGlvbnMp
KSwKKyAgICAgICAgYmxlbmQoZnJvbS0+c3ByZWFkKCksIHRvLT5zcHJlYWQoKSwgb3B0aW9ucyks
CisgICAgICAgIGJsZW5kRnVuYyhmcm9tLT5zdHlsZSgpLCB0by0+c3R5bGUoKSwgb3B0aW9ucyks
CiAgICAgICAgIGZyb20tPmlzV2Via2l0Qm94U2hhZG93KCksCi0gICAgICAgIGJsZW5kKGZyb20t
PmNvbG9yKCksIHRvLT5jb2xvcigpLCBwcm9ncmVzcykpOworICAgICAgICBibGVuZChmcm9tLT5j
b2xvcigpLCB0by0+Y29sb3IoKSwgb3B0aW9ucykpOwogfQogCi1zdGF0aWMgaW5saW5lIFRyYW5z
Zm9ybU9wZXJhdGlvbnMgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGNsaWVudCwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgVHJhbnNmb3Jt
T3BlcmF0aW9ucyBibGVuZEZ1bmMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgY29u
c3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdG8sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucykK
IHsKLSAgICBpZiAoY2xpZW50LT50cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2goKSkKLSAgICAg
ICAgcmV0dXJuIHRvLmJsZW5kQnlNYXRjaGluZ09wZXJhdGlvbnMoZnJvbSwgcHJvZ3Jlc3MpOwot
ICAgIHJldHVybiB0by5ibGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9uKGZyb20sIHByb2dy
ZXNzLCBpczxSZW5kZXJCb3g+KGNsaWVudC0+cmVuZGVyZXIoKSkgPyBkb3duY2FzdDxSZW5kZXJC
b3g+KCpjbGllbnQtPnJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKS5zaXplKCkgOiBMYXlvdXRT
aXplKCkpOworICAgIGlmIChvcHRpb25zLmNsaWVudC0+dHJhbnNmb3JtRnVuY3Rpb25MaXN0c01h
dGNoKCkpCisgICAgICAgIHJldHVybiB0by5ibGVuZEJ5TWF0Y2hpbmdPcGVyYXRpb25zKGZyb20s
IG9wdGlvbnMpOworICAgIHJldHVybiB0by5ibGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9u
KGZyb20sIG9wdGlvbnMsIGlzPFJlbmRlckJveD4ob3B0aW9ucy5jbGllbnQtPnJlbmRlcmVyKCkp
ID8gZG93bmNhc3Q8UmVuZGVyQm94Pigqb3B0aW9ucy5jbGllbnQtPnJlbmRlcmVyKCkpLmJvcmRl
ckJveFJlY3QoKS5zaXplKCkgOiBMYXlvdXRTaXplKCkpOwogfQogCi1zdGF0aWMgUmVmUHRyPFNj
YWxlVHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogY2xpZW50LCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgU2NhbGVUcmFu
c2Zvcm1PcGVyYXRpb24qIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgUmVmUHRyPFNjYWxl
VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZEZ1bmMoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIGZy
b20sIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKiB0bywgY29uc3QgQmxlbmRPcHRpb25zJiBvcHRp
b25zKQogewogICAgIGlmICghZnJvbSAmJiAhdG8pCiAgICAgICAgIHJldHVybiBudWxscHRyOwpA
QCAtMTc1LDEwICsxNzUsMTAgQEAgc3RhdGljIFJlZlB0cjxTY2FsZVRyYW5zZm9ybU9wZXJhdGlv
bj4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQKICAgICAgICAgICAg
IG5vcm1hbGl6ZWRGcm9tID0gU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShmcm9tLT54
KCksIGZyb20tPnkoKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRSk7CiAgICAgICAgICAgICBu
b3JtYWxpemVkVG8gPSBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRvLT54KCksIHRv
LT55KCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEUpOwogICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBibGVuZEZ1bmMoY2xpZW50LCBub3JtYWxpemVkRnJvbS5nZXQoKSwgbm9ybWFsaXplZFRv
LmdldCgpLCBwcm9ncmVzcyk7CisgICAgICAgIHJldHVybiBibGVuZEZ1bmMobm9ybWFsaXplZEZy
b20uZ2V0KCksIG5vcm1hbGl6ZWRUby5nZXQoKSwgb3B0aW9ucyk7CiAgICAgfQogCi0gICAgYXV0
byBibGVuZGVkT3BlcmF0aW9uID0gdG8tPmJsZW5kKGZyb20sIHByb2dyZXNzKTsKKyAgICBhdXRv
IGJsZW5kZWRPcGVyYXRpb24gPSB0by0+YmxlbmQoZnJvbSwgb3B0aW9ucyk7CiAgICAgaWYgKGlz
PFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uPihibGVuZGVkT3BlcmF0aW9uLmdldCgpKSkgewogICAg
ICAgICBhdXRvJiBzY2FsZSA9IGRvd25jYXN0PFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uPihibGVu
ZGVkT3BlcmF0aW9uLmdldCgpKTsKICAgICAgICAgcmV0dXJuIFNjYWxlVHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUoc2NhbGUueCgpLCBzY2FsZS55KCksIHNjYWxlLnooKSwgc2NhbGUudHlwZSgp
KTsKQEAgLTE4Niw3ICsxODYsNyBAQCBzdGF0aWMgUmVmUHRyPFNjYWxlVHJhbnNmb3JtT3BlcmF0
aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudAogICAgIHJldHVy
biBudWxscHRyOwogfQogCi1zdGF0aWMgUmVmUHRyPFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbj4g
YmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUm90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRvLCBk
b3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgUmVmUHRyPFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbj4g
YmxlbmRGdW5jKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uKiB0bywgY29uc3QgQmxlbmRPcHRpb25zJiBvcHRpb25zKQogewogICAgIGlmICgh
ZnJvbSAmJiAhdG8pCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjExLDEwICsyMTEsMTAg
QEAgc3RhdGljIFJlZlB0cjxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kRnVuYyhjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW4KICAgICAgICAgICAgIG5vcm1hbGl6ZWRGcm9tID0g
Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoZnJvbS0+YW5nbGUoKSwgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpST1RBVEUpOwogICAgICAgICAgICAgbm9ybWFsaXplZFRvID0gUm90YXRlVHJh
bnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodG8tPmFuZ2xlKCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6
Uk9UQVRFKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gYmxlbmRGdW5jKGNsaWVudCwgbm9y
bWFsaXplZEZyb20uZ2V0KCksIG5vcm1hbGl6ZWRUby5nZXQoKSwgcHJvZ3Jlc3MpOworICAgICAg
ICByZXR1cm4gYmxlbmRGdW5jKG5vcm1hbGl6ZWRGcm9tLmdldCgpLCBub3JtYWxpemVkVG8uZ2V0
KCksIG9wdGlvbnMpOwogICAgIH0KIAotICAgIGF1dG8gYmxlbmRlZE9wZXJhdGlvbiA9IHRvLT5i
bGVuZChmcm9tLCBwcm9ncmVzcyk7CisgICAgYXV0byBibGVuZGVkT3BlcmF0aW9uID0gdG8tPmJs
ZW5kKGZyb20sIG9wdGlvbnMpOwogICAgIGlmIChpczxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24+
KGJsZW5kZWRPcGVyYXRpb24uZ2V0KCkpKSB7CiAgICAgICAgIGF1dG8mIHJvdGF0ZSA9IGRvd25j
YXN0PFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbj4oYmxlbmRlZE9wZXJhdGlvbi5nZXQoKSk7CiAg
ICAgICAgIHJldHVybiBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShyb3RhdGUueCgp
LCByb3RhdGUueSgpLCByb3RhdGUueigpLCByb3RhdGUuYW5nbGUoKSwgcm90YXRlLnR5cGUoKSk7
CkBAIC0yMjIsNyArMjIyLDcgQEAgc3RhdGljIFJlZlB0cjxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRp
b24+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW4KICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotc3RhdGljIFJlZlB0cjxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24+
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
KiB0bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIFJlZlB0cjxUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb24+IGJsZW5kRnVuYyhUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIFRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdG8sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9u
cykKIHsKICAgICBpZiAoIWZyb20gJiYgIXRvKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTI0NywxMCArMjQ3LDEwIEBAIHN0YXRpYyBSZWZQdHI8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsCiAgICAgICAgICAgICBu
b3JtYWxpemVkRnJvbSA9IFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGZyb20t
PngoKSwgZnJvbS0+eSgpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURSk7CiAgICAgICAg
ICAgICBub3JtYWxpemVkVG8gPSBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0
by0+eCgpLCB0by0+eSgpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURSk7CiAgICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIGJsZW5kRnVuYyhjbGllbnQsIG5vcm1hbGl6ZWRGcm9tLmdldCgp
LCBub3JtYWxpemVkVG8uZ2V0KCksIHByb2dyZXNzKTsKKyAgICAgICAgcmV0dXJuIGJsZW5kRnVu
Yyhub3JtYWxpemVkRnJvbS5nZXQoKSwgbm9ybWFsaXplZFRvLmdldCgpLCBvcHRpb25zKTsKICAg
ICB9CiAKLSAgICBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZGVkT3BlcmF0aW9uID0gdG8t
PmJsZW5kKGZyb20sIHByb2dyZXNzKTsKKyAgICBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVu
ZGVkT3BlcmF0aW9uID0gdG8tPmJsZW5kKGZyb20sIG9wdGlvbnMpOwogICAgIGlmIChpczxUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24+KGJsZW5kZWRPcGVyYXRpb24uZ2V0KCkpKSB7CiAgICAg
ICAgIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiYgdHJhbnNsYXRlID0gZG93bmNhc3Q8VHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uPihibGVuZGVkT3BlcmF0aW9uLmdldCgpKTsKICAgICAg
ICAgcmV0dXJuIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zbGF0ZS54
KCksIHRyYW5zbGF0ZS55KCksIHRyYW5zbGF0ZS56KCksIHRyYW5zbGF0ZS50eXBlKCkpOwpAQCAt
MjU4LDcgKzI1OCw3IEBAIHN0YXRpYyBSZWZQdHI8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
PiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsCiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiBibGVuZEZ1
bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIENsaXBQYXRoT3BlcmF0aW9uKiBm
cm9tLCBDbGlwUGF0aE9wZXJhdGlvbiogdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxp
bmUgUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiBibGVuZEZ1bmMoQ2xpcFBhdGhPcGVyYXRpb24q
IGZyb20sIENsaXBQYXRoT3BlcmF0aW9uKiB0bywgY29uc3QgQmxlbmRPcHRpb25zJiBvcHRpb25z
KQogewogICAgIGlmICghZnJvbSB8fCAhdG8pCiAgICAgICAgIHJldHVybiB0bzsKQEAgLTI3Mywz
MCArMjczLDMwIEBAIHN0YXRpYyBpbmxpbmUgUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiBibGVu
ZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVuCiAgICAgaWYgKCFmcm9tU2hhcGUu
Y2FuQmxlbmQodG9TaGFwZSkpCiAgICAgICAgIHJldHVybiB0bzsKIAotICAgIHJldHVybiBTaGFw
ZUNsaXBQYXRoT3BlcmF0aW9uOjpjcmVhdGUodG9TaGFwZS5ibGVuZChmcm9tU2hhcGUsIHByb2dy
ZXNzKSk7CisgICAgcmV0dXJuIFNoYXBlQ2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZSh0b1NoYXBl
LmJsZW5kKGZyb21TaGFwZSwgb3B0aW9ucykpOwogfQogCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxT
aGFwZVZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIFNo
YXBlVmFsdWUqIGZyb20sIFNoYXBlVmFsdWUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMg
aW5saW5lIFJlZlB0cjxTaGFwZVZhbHVlPiBibGVuZEZ1bmMoU2hhcGVWYWx1ZSogZnJvbSwgU2hh
cGVWYWx1ZSogdG8sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAoIXBy
b2dyZXNzKQorICAgIGlmICghb3B0aW9ucy5wcm9ncmVzcykKICAgICAgICAgcmV0dXJuIGZyb207
CiAKLSAgICBpZiAocHJvZ3Jlc3MgPT0gMS4wKQorICAgIGlmIChvcHRpb25zLnByb2dyZXNzID09
IDEuMCkKICAgICAgICAgcmV0dXJuIHRvOwogCiAgICAgQVNTRVJUKGZyb20gJiYgdG8pOwogICAg
IGNvbnN0IEJhc2ljU2hhcGUmIGZyb21TaGFwZSA9ICpmcm9tLT5zaGFwZSgpOwogICAgIGNvbnN0
IEJhc2ljU2hhcGUmIHRvU2hhcGUgPSAqdG8tPnNoYXBlKCk7Ci0gICAgcmV0dXJuIFNoYXBlVmFs
dWU6OmNyZWF0ZSh0b1NoYXBlLmJsZW5kKGZyb21TaGFwZSwgcHJvZ3Jlc3MpLCB0by0+Y3NzQm94
KCkpOworICAgIHJldHVybiBTaGFwZVZhbHVlOjpjcmVhdGUodG9TaGFwZS5ibGVuZChmcm9tU2hh
cGUsIG9wdGlvbnMpLCB0by0+Y3NzQm94KCkpOwogfQogCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxG
aWx0ZXJPcGVyYXRpb24+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiwgRmlsdGVyT3BlcmF0aW9uKiBmcm9tLCBGaWx0ZXJPcGVyYXRpb24qIHRvLCBkb3VibGUgcHJv
Z3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpCitzdGF0aWMgaW5saW5lIFJl
ZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kRnVuYyhGaWx0ZXJPcGVyYXRpb24qIGZyb20sIEZp
bHRlck9wZXJhdGlvbiogdG8sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucywgYm9vbCBibGVu
ZFRvUGFzc3Rocm91Z2ggPSBmYWxzZSkKIHsKICAgICBBU1NFUlQodG8pOwotICAgIHJldHVybiB0
by0+YmxlbmQoZnJvbSwgcHJvZ3Jlc3MsIGJsZW5kVG9QYXNzdGhyb3VnaCk7CisgICAgcmV0dXJu
IHRvLT5ibGVuZChmcm9tLCBvcHRpb25zLCBibGVuZFRvUGFzc3Rocm91Z2gpOwogfQogCi1zdGF0
aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
IGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0
aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvLCBjb25zdCBC
bGVuZE9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgRmlsdGVyT3BlcmF0aW9ucyByZXN1bHQ7CiAg
ICAgc2l6ZV90IGZyb21TaXplID0gZnJvbS5vcGVyYXRpb25zKCkuc2l6ZSgpOwpAQCAtMzA1LDEy
ICszMDUsMTIgQEAgc3RhdGljIGlubGluZSBGaWx0ZXJPcGVyYXRpb25zIGJsZW5kRmlsdGVyT3Bl
cmF0aW9ucyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2wKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7IGkrKykgewogICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmcm9t
T3AgPSAoaSA8IGZyb21TaXplKSA/IGZyb20ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogMDsKICAg
ICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gdG9PcCA9IChpIDwgdG9TaXplKSA/IHRvLm9w
ZXJhdGlvbnMoKVtpXS5nZXQoKSA6IDA7Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+
IGJsZW5kZWRPcCA9IHRvT3AgPyBibGVuZEZ1bmMoY2xpZW50LCBmcm9tT3AuZ2V0KCksIHRvT3Au
Z2V0KCksIHByb2dyZXNzKSA6IChmcm9tT3AgPyBibGVuZEZ1bmMoY2xpZW50LCAwLCBmcm9tT3Au
Z2V0KCksIHByb2dyZXNzLCB0cnVlKSA6IDApOworICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0
aW9uPiBibGVuZGVkT3AgPSB0b09wID8gYmxlbmRGdW5jKGZyb21PcC5nZXQoKSwgdG9PcC5nZXQo
KSwgb3B0aW9ucykgOiAoZnJvbU9wID8gYmxlbmRGdW5jKDAsIGZyb21PcC5nZXQoKSwgb3B0aW9u
cywgdHJ1ZSkgOiAwKTsKICAgICAgICAgaWYgKGJsZW5kZWRPcCkKICAgICAgICAgICAgIHJlc3Vs
dC5vcGVyYXRpb25zKCkuYXBwZW5kKGJsZW5kZWRPcCk7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgYXV0byBpZGVudGl0eU9wID0gUGFzc3Rocm91Z2hGaWx0ZXJPcGVyYXRpb246OmNyZWF0
ZSgpOwotICAgICAgICAgICAgaWYgKHByb2dyZXNzID4gMC41KQorICAgICAgICAgICAgaWYgKG9w
dGlvbnMucHJvZ3Jlc3MgPiAwLjUpCiAgICAgICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMo
KS5hcHBlbmQodG9PcCA/IHRvT3AgOiBXVEZNb3ZlKGlkZW50aXR5T3ApKTsKICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICByZXN1bHQub3BlcmF0aW9ucygpLmFwcGVuZChmcm9tT3Ag
PyBmcm9tT3AgOiBXVEZNb3ZlKGlkZW50aXR5T3ApKTsKQEAgLTMxOSw3ICszMTksNyBAQCBzdGF0
aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgRmlsdGVyT3BlcmF0aW9ucyBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogY2xpZW50LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJiB0bywgZG91YmxlIHByb2dyZXNzLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQg
PSBDU1NQcm9wZXJ0eUZpbHRlcikKK3N0YXRpYyBpbmxpbmUgRmlsdGVyT3BlcmF0aW9ucyBibGVu
ZEZ1bmMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYgdG8sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucywgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlEID0gQ1NTUHJvcGVydHlGaWx0ZXIpCiB7CiAgICAgRmlsdGVyT3BlcmF0aW9ucyByZXN1bHQ7
CiAKQEAgLTMyOCwyMiArMzI4LDIyIEBAIHN0YXRpYyBpbmxpbmUgRmlsdGVyT3BlcmF0aW9ucyBi
bGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50CiAgICAgYm9v
bCBsaXN0c01hdGNoID0gZmFsc2U7CiAgICAgc3dpdGNoIChwcm9wZXJ0eUlEKSB7CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUZpbHRlcjoKLSAgICAgICAgbGlzdHNNYXRjaCA9IGNsaWVudC0+ZmlsdGVy
RnVuY3Rpb25MaXN0c01hdGNoKCk7CisgICAgICAgIGxpc3RzTWF0Y2ggPSBvcHRpb25zLmNsaWVu
dC0+ZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCk7CiAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJM
RShGSUxURVJTX0xFVkVMXzIpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmls
dGVyOgotICAgICAgICBsaXN0c01hdGNoID0gY2xpZW50LT5iYWNrZHJvcEZpbHRlckZ1bmN0aW9u
TGlzdHNNYXRjaCgpOworICAgICAgICBsaXN0c01hdGNoID0gb3B0aW9ucy5jbGllbnQtPmJhY2tk
cm9wRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUFwcGxlQ29sb3JGaWx0ZXI6Ci0gICAgICAgIGxpc3RzTWF0Y2gg
PSBjbGllbnQtPmNvbG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCk7CisgICAgICAgIGxpc3Rz
TWF0Y2ggPSBvcHRpb25zLmNsaWVudC0+Y29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IAogICAgIGlmIChsaXN0c01hdGNoKQotICAgICAgICByZXN1bHQgPSBibGVuZEZpbHRlck9wZXJh
dGlvbnMoY2xpZW50LCBmcm9tLCB0bywgcHJvZ3Jlc3MpOworICAgICAgICByZXN1bHQgPSBibGVu
ZEZpbHRlck9wZXJhdGlvbnMoZnJvbSwgdG8sIG9wdGlvbnMpOwogICAgIGVsc2UgewogICAgICAg
ICAvLyBJZiB0aGUgZmlsdGVyIGZ1bmN0aW9uIGxpc3RzIGRvbid0IG1hdGNoLCB3ZSBjb3VsZCB0
cnkgdG8gY3Jvc3MtZmFkZSwgYnV0IGRvbid0IHlldCBoYXZlIGEgd2F5IHRvIHJlcHJlc2VudCB0
aGF0IGluIENTUy4KICAgICAgICAgLy8gRm9yIG5vdyB3ZSdsbCBqdXN0IGZhaWwgdG8gYW5pbWF0
ZS4KQEAgLTM1MywyMCArMzUzLDIwIEBAIHN0YXRpYyBpbmxpbmUgRmlsdGVyT3BlcmF0aW9ucyBi
bGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRG
aWx0ZXIoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBDYWNoZWRJbWFn
ZSogaW1hZ2UsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUlt
YWdlPiBibGVuZEZpbHRlcihDYWNoZWRJbWFnZSogaW1hZ2UsIGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvLCBjb25zdCBCbGVuZE9wdGlvbnMm
IG9wdGlvbnMpCiB7CiAgICAgQVNTRVJUKGltYWdlKTsKLSAgICBGaWx0ZXJPcGVyYXRpb25zIGZp
bHRlclJlc3VsdCA9IGJsZW5kRmlsdGVyT3BlcmF0aW9ucyhjbGllbnQsIGZyb20sIHRvLCBwcm9n
cmVzcyk7CisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJSZXN1bHQgPSBibGVuZEZpbHRlck9w
ZXJhdGlvbnMoZnJvbSwgdG8sIG9wdGlvbnMpOwogCiAgICAgYXV0byBpbWFnZVZhbHVlID0gQ1NT
SW1hZ2VWYWx1ZTo6Y3JlYXRlKCppbWFnZSk7Ci0gICAgYXV0byBmaWx0ZXJWYWx1ZSA9IENvbXB1
dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yRmlsdGVyKGNsaWVudC0+Y3VycmVudFN0eWxlKCks
IGZpbHRlclJlc3VsdCwgRG9Ob3RBZGp1c3RQaXhlbFZhbHVlcyk7CisgICAgYXV0byBmaWx0ZXJW
YWx1ZSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yRmlsdGVyKG9wdGlvbnMuY2xp
ZW50LT5jdXJyZW50U3R5bGUoKSwgZmlsdGVyUmVzdWx0LCBEb05vdEFkanVzdFBpeGVsVmFsdWVz
KTsKIAogICAgIGF1dG8gcmVzdWx0ID0gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6Y3JlYXRlKFdURk1v
dmUoaW1hZ2VWYWx1ZSksIFdURk1vdmUoZmlsdGVyVmFsdWUpKTsKICAgICByZXN1bHQuZ2V0KCku
c2V0RmlsdGVyT3BlcmF0aW9ucyhmaWx0ZXJSZXN1bHQpOwogICAgIHJldHVybiBTdHlsZUdlbmVy
YXRlZEltYWdlOjpjcmVhdGUoV1RGTW92ZShyZXN1bHQpKTsKIH0KIAotc3RhdGljIGlubGluZSBW
aXNpYmlsaXR5IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGll
bnQsIFZpc2liaWxpdHkgZnJvbSwgVmlzaWJpbGl0eSB0bywgZG91YmxlIHByb2dyZXNzKQorc3Rh
dGljIGlubGluZSBWaXNpYmlsaXR5IGJsZW5kRnVuYyhWaXNpYmlsaXR5IGZyb20sIFZpc2liaWxp
dHkgdG8sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICAvLyBBbnkgbm9uLXpl
cm8gcmVzdWx0IG1lYW5zIHdlIGNvbnNpZGVyIHRoZSBvYmplY3QgdG8gYmUgdmlzaWJsZS4gT25s
eSBhdCAwIGRvIHdlIGNvbnNpZGVyIHRoZSBvYmplY3QgdG8gYmUKICAgICAvLyBpbnZpc2libGUu
IFRoZSBpbnZpc2libGUgdmFsdWUgd2UgdXNlIChWaXNpYmlsaXR5OjpIaWRkZW4gdnMuIFZpc2li
aWxpdHk6OkNvbGxhcHNlKSBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpZWQgZnJvbS90byB2YWx1ZXMu
CkBAIC0zNzQsNDYgKzM3NCw0NiBAQCBzdGF0aWMgaW5saW5lIFZpc2liaWxpdHkgYmxlbmRGdW5j
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgVmlzaQogICAgIGRvdWJs
ZSB0b1ZhbCA9IHRvID09IFZpc2liaWxpdHk6OlZpc2libGUgPyAxLiA6IDAuOwogICAgIGlmIChm
cm9tVmFsID09IHRvVmFsKQogICAgICAgICByZXR1cm4gdG87Ci0gICAgZG91YmxlIHJlc3VsdCA9
IGJsZW5kRnVuYyhjbGllbnQsIGZyb21WYWwsIHRvVmFsLCBwcm9ncmVzcyk7CisgICAgZG91Ymxl
IHJlc3VsdCA9IGJsZW5kRnVuYyhmcm9tVmFsLCB0b1ZhbCwgb3B0aW9ucyk7CiAgICAgcmV0dXJu
IHJlc3VsdCA+IDAuID8gVmlzaWJpbGl0eTo6VmlzaWJsZSA6ICh0byAhPSBWaXNpYmlsaXR5OjpW
aXNpYmxlID8gdG8gOiBmcm9tKTsKIH0KIAotc3RhdGljIGlubGluZSBUZXh0VW5kZXJsaW5lT2Zm
c2V0IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIGNv
bnN0IFRleHRVbmRlcmxpbmVPZmZzZXQmIGZyb20sIGNvbnN0IFRleHRVbmRlcmxpbmVPZmZzZXQm
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIFRleHRVbmRlcmxpbmVPZmZzZXQg
YmxlbmRGdW5jKGNvbnN0IFRleHRVbmRlcmxpbmVPZmZzZXQmIGZyb20sIGNvbnN0IFRleHRVbmRl
cmxpbmVPZmZzZXQmIHRvLCBjb25zdCBCbGVuZE9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgaWYg
KGZyb20uaXNMZW5ndGgoKSAmJiB0by5pc0xlbmd0aCgpKQotICAgICAgICByZXR1cm4gVGV4dFVu
ZGVybGluZU9mZnNldDo6Y3JlYXRlV2l0aExlbmd0aChibGVuZEZ1bmMoY2xpZW50LCBmcm9tLmxl
bmd0aFZhbHVlKCksIHRvLmxlbmd0aFZhbHVlKCksIHByb2dyZXNzKSk7CisgICAgICAgIHJldHVy
biBUZXh0VW5kZXJsaW5lT2Zmc2V0OjpjcmVhdGVXaXRoTGVuZ3RoKGJsZW5kRnVuYyhmcm9tLmxl
bmd0aFZhbHVlKCksIHRvLmxlbmd0aFZhbHVlKCksIG9wdGlvbnMpKTsKICAgICByZXR1cm4gVGV4
dFVuZGVybGluZU9mZnNldDo6Y3JlYXRlV2l0aEF1dG8oKTsKIH0KIAotc3RhdGljIGlubGluZSBU
ZXh0RGVjb3JhdGlvblRoaWNrbmVzcyBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogY2xpZW50LCBjb25zdCBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyYgZnJvbSwgY29u
c3QgVGV4dERlY29yYXRpb25UaGlja25lc3MmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMg
aW5saW5lIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzIGJsZW5kRnVuYyhjb25zdCBUZXh0RGVjb3Jh
dGlvblRoaWNrbmVzcyYgZnJvbSwgY29uc3QgVGV4dERlY29yYXRpb25UaGlja25lc3MmIHRvLCBj
b25zdCBCbGVuZE9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgaWYgKGZyb20uaXNMZW5ndGgoKSAm
JiB0by5pc0xlbmd0aCgpKQotICAgICAgICByZXR1cm4gVGV4dERlY29yYXRpb25UaGlja25lc3M6
OmNyZWF0ZVdpdGhMZW5ndGgoYmxlbmRGdW5jKGNsaWVudCwgZnJvbS5sZW5ndGhWYWx1ZSgpLCB0
by5sZW5ndGhWYWx1ZSgpLCBwcm9ncmVzcykpOworICAgICAgICByZXR1cm4gVGV4dERlY29yYXRp
b25UaGlja25lc3M6OmNyZWF0ZVdpdGhMZW5ndGgoYmxlbmRGdW5jKGZyb20ubGVuZ3RoVmFsdWUo
KSwgdG8ubGVuZ3RoVmFsdWUoKSwgb3B0aW9ucykpOwogICAgIHJldHVybiBUZXh0RGVjb3JhdGlv
blRoaWNrbmVzczo6Y3JlYXRlV2l0aEF1dG8oKTsKIH0KIAotc3RhdGljIGlubGluZSBMZW5ndGhC
b3ggYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgY29u
c3QgTGVuZ3RoQm94JiBmcm9tLCBjb25zdCBMZW5ndGhCb3gmIHRvLCBkb3VibGUgcHJvZ3Jlc3Ms
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSkKK3N0YXRpYyBp
bmxpbmUgTGVuZ3RoQm94IGJsZW5kRnVuYyhjb25zdCBMZW5ndGhCb3gmIGZyb20sIGNvbnN0IExl
bmd0aEJveCYgdG8sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucywgVmFsdWVSYW5nZSB2YWx1
ZVJhbmdlID0gVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKQogewotICAgIExlbmd0aEJveCByZXN1bHQo
YmxlbmRGdW5jKGNsaWVudCwgZnJvbS50b3AoKSwgdG8udG9wKCksIHByb2dyZXNzLCB2YWx1ZVJh
bmdlKSwKLSAgICAgICAgICAgICAgICAgICAgIGJsZW5kRnVuYyhjbGllbnQsIGZyb20ucmlnaHQo
KSwgdG8ucmlnaHQoKSwgcHJvZ3Jlc3MsIHZhbHVlUmFuZ2UpLAotICAgICAgICAgICAgICAgICAg
ICAgYmxlbmRGdW5jKGNsaWVudCwgZnJvbS5ib3R0b20oKSwgdG8uYm90dG9tKCksIHByb2dyZXNz
LCB2YWx1ZVJhbmdlKSwKLSAgICAgICAgICAgICAgICAgICAgIGJsZW5kRnVuYyhjbGllbnQsIGZy
b20ubGVmdCgpLCB0by5sZWZ0KCksIHByb2dyZXNzLCB2YWx1ZVJhbmdlKSk7CisgICAgTGVuZ3Ro
Qm94IHJlc3VsdChibGVuZEZ1bmMoZnJvbS50b3AoKSwgdG8udG9wKCksIG9wdGlvbnMsIHZhbHVl
UmFuZ2UpLAorICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGZyb20ucmlnaHQoKSwgdG8u
cmlnaHQoKSwgb3B0aW9ucywgdmFsdWVSYW5nZSksCisgICAgICAgICAgICAgICAgICAgICBibGVu
ZEZ1bmMoZnJvbS5ib3R0b20oKSwgdG8uYm90dG9tKCksIG9wdGlvbnMsIHZhbHVlUmFuZ2UpLAor
ICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGZyb20ubGVmdCgpLCB0by5sZWZ0KCksIG9w
dGlvbnMsIHZhbHVlUmFuZ2UpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5s
aW5lIFNWR0xlbmd0aFZhbHVlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiwgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIGZyb20sIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB0
bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBTVkdMZW5ndGhWYWx1ZSBibGVuZEZ1
bmMoY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIGZyb20sIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB0bywg
Y29uc3QgQmxlbmRPcHRpb25zJiBvcHRpb25zKQogewotICAgIHJldHVybiBTVkdMZW5ndGhWYWx1
ZTo6YmxlbmQoZnJvbSwgdG8sIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocHJvZ3Jlc3MpKTsKKyAg
ICByZXR1cm4gU1ZHTGVuZ3RoVmFsdWU6OmJsZW5kKGZyb20sIHRvLCBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KG9wdGlvbnMucHJvZ3Jlc3MpKTsKIH0KIAotc3RhdGljIGlubGluZSBWZWN0b3I8U1ZH
TGVuZ3RoVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50Kiwg
Y29uc3QgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYgZnJvbSwgY29uc3QgVmVjdG9yPFNWR0xlbmd0
aFZhbHVlPiYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgVmVjdG9yPFNWR0xl
bmd0aFZhbHVlPiBibGVuZEZ1bmMoY29uc3QgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYgZnJvbSwg
Y29uc3QgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYgdG8sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0
aW9ucykKIHsKICAgICBzaXplX3QgZnJvbUxlbmd0aCA9IGZyb20uc2l6ZSgpOwogICAgIHNpemVf
dCB0b0xlbmd0aCA9IHRvLnNpemUoKTsKICAgICBpZiAoIWZyb21MZW5ndGgpCi0gICAgICAgIHJl
dHVybiAhcHJvZ3Jlc3MgPyBmcm9tIDogdG87CisgICAgICAgIHJldHVybiAhb3B0aW9ucy5wcm9n
cmVzcyA/IGZyb20gOiB0bzsKICAgICBpZiAoIXRvTGVuZ3RoKQotICAgICAgICByZXR1cm4gcHJv
Z3Jlc3MgPT0gMSA/IGZyb20gOiB0bzsKKyAgICAgICAgcmV0dXJuIG9wdGlvbnMucHJvZ3Jlc3Mg
PT0gMSA/IGZyb20gOiB0bzsKICAgICBzaXplX3QgcmVzdWx0TGVuZ3RoID0gZnJvbUxlbmd0aDsK
ICAgICBpZiAoZnJvbUxlbmd0aCAhPSB0b0xlbmd0aCkgewogICAgICAgICBpZiAoIXJlbWFpbmRl
cihzdGQ6Om1heChmcm9tTGVuZ3RoLCB0b0xlbmd0aCksIHN0ZDo6bWluKGZyb21MZW5ndGgsIHRv
TGVuZ3RoKSkpCkBAIC00MjMsMzUgKzQyMywzNSBAQCBzdGF0aWMgaW5saW5lIFZlY3RvcjxTVkdM
ZW5ndGhWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLAog
ICAgIH0KICAgICBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IHJlc3VsdChyZXN1bHRMZW5ndGgpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0TGVuZ3RoOyArK2kpCi0gICAgICAgIHJl
c3VsdFtpXSA9IFNWR0xlbmd0aFZhbHVlOjpibGVuZChmcm9tW2kgJSBmcm9tTGVuZ3RoXSwgdG9b
aSAlIHRvTGVuZ3RoXSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChwcm9ncmVzcykpOworICAgICAg
ICByZXN1bHRbaV0gPSBTVkdMZW5ndGhWYWx1ZTo6YmxlbmQoZnJvbVtpICUgZnJvbUxlbmd0aF0s
IHRvW2kgJSB0b0xlbmd0aF0sIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQob3B0aW9ucy5wcm9ncmVz
cykpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxl
SW1hZ2U+IGNyb3NzZmFkZUJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBT
dHlsZUNhY2hlZEltYWdlKiBmcm9tU3R5bGVJbWFnZSwgU3R5bGVDYWNoZWRJbWFnZSogdG9TdHls
ZUltYWdlLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdl
PiBjcm9zc2ZhZGVCbGVuZChTdHlsZUNhY2hlZEltYWdlKiBmcm9tU3R5bGVJbWFnZSwgU3R5bGVD
YWNoZWRJbWFnZSogdG9TdHlsZUltYWdlLCBjb25zdCBCbGVuZE9wdGlvbnMmIG9wdGlvbnMpCiB7
CiAgICAgLy8gSWYgcHJvZ3Jlc3MgaXMgYXQgb25lIG9mIHRoZSBleHRyZW1lcywgd2Ugd2FudCBn
ZXRDb21wdXRlZFN0eWxlIHRvIHNob3cgdGhlIGltYWdlLAogICAgIC8vIG5vdCBhIGNvbXBsZXRl
ZCBjcm9zcy1mYWRlLCBzbyB3ZSBoYW5kIGJhY2sgb25lIG9mIHRoZSBleGlzdGluZyBpbWFnZXMu
Ci0gICAgaWYgKCFwcm9ncmVzcykKKyAgICBpZiAoIW9wdGlvbnMucHJvZ3Jlc3MpCiAgICAgICAg
IHJldHVybiBmcm9tU3R5bGVJbWFnZTsKLSAgICBpZiAocHJvZ3Jlc3MgPT0gMSkKKyAgICBpZiAo
b3B0aW9ucy5wcm9ncmVzcyA9PSAxKQogICAgICAgICByZXR1cm4gdG9TdHlsZUltYWdlOwogICAg
IGlmICghZnJvbVN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkgfHwgIXRvU3R5bGVJbWFnZS0+Y2Fj
aGVkSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIHRvU3R5bGVJbWFnZTsKIAogICAgIGF1dG8gZnJv
bUltYWdlVmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoKmZyb21TdHlsZUltYWdlLT5jYWNo
ZWRJbWFnZSgpKTsKICAgICBhdXRvIHRvSW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFsdWU6OmNyZWF0
ZSgqdG9TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKTsKLSAgICBhdXRvIHBlcmNlbnRhZ2VWYWx1
ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJvZ3Jlc3MsIENTU1VuaXRUeXBlOjpDU1Nf
TlVNQkVSKTsKKyAgICBhdXRvIHBlcmNlbnRhZ2VWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUob3B0aW9ucy5wcm9ncmVzcywgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwogCiAgICAg
YXV0byBjcm9zc2ZhZGVWYWx1ZSA9IENTU0Nyb3NzZmFkZVZhbHVlOjpjcmVhdGUoV1RGTW92ZShm
cm9tSW1hZ2VWYWx1ZSksIFdURk1vdmUodG9JbWFnZVZhbHVlKSwgV1RGTW92ZShwZXJjZW50YWdl
VmFsdWUpKTsKICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKFdURk1vdmUo
Y3Jvc3NmYWRlVmFsdWUpKTsKIH0KIAotc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4g
YmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgU3R5bGVJ
bWFnZSogZnJvbSwgU3R5bGVJbWFnZSogdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxp
bmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRnVuYyhTdHlsZUltYWdlKiBmcm9tLCBTdHlsZUlt
YWdlKiB0bywgY29uc3QgQmxlbmRPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmICghcHJvZ3Jl
c3MpCisgICAgaWYgKCFvcHRpb25zLnByb2dyZXNzKQogICAgICAgICByZXR1cm4gZnJvbTsKIAot
ICAgIGlmIChwcm9ncmVzcyA9PSAxLjApCisgICAgaWYgKG9wdGlvbnMucHJvZ3Jlc3MgPT0gMS4w
KQogICAgICAgICByZXR1cm4gdG87CiAKICAgICBBU1NFUlQoZnJvbSAmJiB0byk7CkBAIC00NzMs
MTQgKzQ3MywxNCBAQCBzdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBibGVuZEZ1bmMo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZQogICAgICAgICAgICAgQ1NTRmls
dGVySW1hZ2VWYWx1ZSYgZnJvbUZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+
KGZyb21HZW5lcmF0ZWQpOwogICAgICAgICAgICAgQ1NTRmlsdGVySW1hZ2VWYWx1ZSYgdG9GaWx0
ZXIgPSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPih0b0dlbmVyYXRlZCk7CiAgICAgICAg
ICAgICBpZiAoZnJvbUZpbHRlci5lcXVhbElucHV0SW1hZ2VzKHRvRmlsdGVyKSAmJiBmcm9tRmls
dGVyLmNhY2hlZEltYWdlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGNs
aWVudCwgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpLCBmcm9tRmlsdGVyLmZpbHRlck9wZXJhdGlv
bnMoKSwgdG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwgZnJvbUZp
bHRlci5maWx0ZXJPcGVyYXRpb25zKCksIHRvRmlsdGVyLmZpbHRlck9wZXJhdGlvbnMoKSwgb3B0
aW9ucyk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KGZy
b21HZW5lcmF0ZWQpICYmIGlzPENTU0Nyb3NzZmFkZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKICAg
ICAgICAgICAgIENTU0Nyb3NzZmFkZVZhbHVlJiBmcm9tQ3Jvc3NmYWRlID0gZG93bmNhc3Q8Q1NT
Q3Jvc3NmYWRlVmFsdWU+KGZyb21HZW5lcmF0ZWQpOwogICAgICAgICAgICAgQ1NTQ3Jvc3NmYWRl
VmFsdWUmIHRvQ3Jvc3NmYWRlID0gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KHRvR2VuZXJh
dGVkKTsKICAgICAgICAgICAgIGlmIChmcm9tQ3Jvc3NmYWRlLmVxdWFsSW5wdXRJbWFnZXModG9D
cm9zc2ZhZGUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8gY3Jvc3NmYWRlQmxlbmQgPSB0
b0Nyb3NzZmFkZS5ibGVuZChmcm9tQ3Jvc3NmYWRlLCBwcm9ncmVzcykpCisgICAgICAgICAgICAg
ICAgaWYgKGF1dG8gY3Jvc3NmYWRlQmxlbmQgPSB0b0Nyb3NzZmFkZS5ibGVuZChmcm9tQ3Jvc3Nm
YWRlLCBvcHRpb25zLnByb2dyZXNzKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0eWxl
R2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSgqY3Jvc3NmYWRlQmxlbmQpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC00OTIsNyArNDkyLDcgQEAgc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJ
bWFnZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWUKICAg
ICAgICAgaWYgKGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpKSB7CiAgICAg
ICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiBmcm9tRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmls
dGVySW1hZ2VWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7CiAgICAgICAgICAgICBpZiAoZnJvbUZpbHRl
ci5jYWNoZWRJbWFnZSgpICYmIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KCp0bykuY2FjaGVk
SW1hZ2UoKSA9PSBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGJsZW5kRmlsdGVyKGNsaWVudCwgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpLCBmcm9tRmls
dGVyLmZpbHRlck9wZXJhdGlvbnMoKSwgRmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2Uo
KSwgZnJvbUZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgb3B0
aW9ucyk7CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IEFkZCBpbnRlcnBvbGF0aW9uIGJl
dHdlZW4gY3Jvc3MtZmFkZSBhbmQgaW1hZ2Ugc291cmNlLgogICAgIH0gZWxzZSBpZiAoaXM8U3R5
bGVDYWNoZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCp0bykpIHsK
QEAgLTUwMCw3ICs1MDAsNyBAQCBzdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBibGVu
ZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZQogICAgICAgICBpZiAo
aXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0ZWQpKSB7CiAgICAgICAgICAgICBDU1NG
aWx0ZXJJbWFnZVZhbHVlJiB0b0ZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+
KHRvR2VuZXJhdGVkKTsKICAgICAgICAgICAgIGlmICh0b0ZpbHRlci5jYWNoZWRJbWFnZSgpICYm
IGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KCpmcm9tKS5jYWNoZWRJbWFnZSgpID09IHRvRmls
dGVyLmNhY2hlZEltYWdlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGNs
aWVudCwgdG9GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwgRmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRl
ci5maWx0ZXJPcGVyYXRpb25zKCksIHByb2dyZXNzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
YmxlbmRGaWx0ZXIodG9GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwgRmlsdGVyT3BlcmF0aW9ucygpLCB0
b0ZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIG9wdGlvbnMpOwogICAgICAgICB9CiAgICAgICAg
IC8vIEZJWE1FOiBBZGQgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGltYWdlIHNvdXJjZSBhbmQgY3Jv
c3MtZmFkZS4KICAgICB9CkBAIC01MDgsMTIgKzUwOCwxMiBAQCBzdGF0aWMgaW5saW5lIFJlZlB0
cjxTdHlsZUltYWdlPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCog
Y2xpZQogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBjcm9zcyBmYWRlIGJldHdlZW4gY2FjaGVk
IGFuZCBnZW5lcmF0ZWQgaW1hZ2VzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03ODI5MwogICAgIGlmIChpczxTdHlsZUNhY2hlZEltYWdlPigqZnJvbSkg
JiYgaXM8U3R5bGVDYWNoZWRJbWFnZT4oKnRvKSkKLSAgICAgICAgcmV0dXJuIGNyb3NzZmFkZUJs
ZW5kKGNsaWVudCwgZG93bmNhc3Q8U3R5bGVDYWNoZWRJbWFnZT4oZnJvbSksIGRvd25jYXN0PFN0
eWxlQ2FjaGVkSW1hZ2U+KHRvKSwgcHJvZ3Jlc3MpOworICAgICAgICByZXR1cm4gY3Jvc3NmYWRl
QmxlbmQoZG93bmNhc3Q8U3R5bGVDYWNoZWRJbWFnZT4oZnJvbSksIGRvd25jYXN0PFN0eWxlQ2Fj
aGVkSW1hZ2U+KHRvKSwgb3B0aW9ucyk7CiAKICAgICByZXR1cm4gdG87CiB9CiAKLXN0YXRpYyBp
bmxpbmUgTmluZVBpZWNlSW1hZ2UgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGNsaWVudCwgY29uc3QgTmluZVBpZWNlSW1hZ2UmIGZyb20sIGNvbnN0IE5pbmVQaWVj
ZUltYWdlJiB0bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBOaW5lUGllY2VJbWFn
ZSBibGVuZEZ1bmMoY29uc3QgTmluZVBpZWNlSW1hZ2UmIGZyb20sIGNvbnN0IE5pbmVQaWVjZUlt
YWdlJiB0bywgY29uc3QgQmxlbmRPcHRpb25zJiBvcHRpb25zKQogewogICAgIGlmICghZnJvbS5o
YXNJbWFnZSgpIHx8ICF0by5oYXNJbWFnZSgpKQogICAgICAgICByZXR1cm4gdG87CkBAIC01MjMs
MjMgKzUyMywyMyBAQCBzdGF0aWMgaW5saW5lIE5pbmVQaWVjZUltYWdlIGJsZW5kRnVuYyhjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsCiAgICAgaWYgKGZyb20uaW1hZ2VT
bGljZXMoKSAhPSB0by5pbWFnZVNsaWNlcygpIHx8IGZyb20uYm9yZGVyU2xpY2VzKCkgIT0gdG8u
Ym9yZGVyU2xpY2VzKCkgfHwgZnJvbS5vdXRzZXQoKSAhPSB0by5vdXRzZXQoKSB8fCBmcm9tLmZp
bGwoKSAhPSB0by5maWxsKCkgfHwgZnJvbS5ob3Jpem9udGFsUnVsZSgpICE9IHRvLmhvcml6b250
YWxSdWxlKCkgfHwgZnJvbS52ZXJ0aWNhbFJ1bGUoKSAhPSB0by52ZXJ0aWNhbFJ1bGUoKSkKICAg
ICAgICAgcmV0dXJuIHRvOwogCi0gICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gY2xpZW50LT5yZW5k
ZXJlcigpKSB7CisgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gb3B0aW9ucy5jbGllbnQtPnJlbmRl
cmVyKCkpIHsKICAgICAgICAgaWYgKGZyb20uaW1hZ2UoKS0+aW1hZ2VTaXplKHJlbmRlcmVyLCAx
LjApICE9IHRvLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4wKSkKICAgICAgICAgICAg
IHJldHVybiB0bzsKICAgICB9CiAKLSAgICByZXR1cm4gTmluZVBpZWNlSW1hZ2UoYmxlbmRGdW5j
KGNsaWVudCwgZnJvbS5pbWFnZSgpLCB0by5pbWFnZSgpLCBwcm9ncmVzcyksCisgICAgcmV0dXJu
IE5pbmVQaWVjZUltYWdlKGJsZW5kRnVuYyhmcm9tLmltYWdlKCksIHRvLmltYWdlKCksIG9wdGlv
bnMpLAogICAgICAgICBmcm9tLmltYWdlU2xpY2VzKCksIGZyb20uZmlsbCgpLCBmcm9tLmJvcmRl
clNsaWNlcygpLCBmcm9tLm91dHNldCgpLCBmcm9tLmhvcml6b250YWxSdWxlKCksIGZyb20udmVy
dGljYWxSdWxlKCkpOwogfQogCiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKIAotc3RhdGlj
IGlubGluZSBGb250VmFyaWF0aW9uU2V0dGluZ3MgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgY29uc3QgRm9udFZhcmlhdGlvblNldHRpbmdzJiBmcm9t
LCBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0
aWMgaW5saW5lIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBibGVuZEZ1bmMoY29uc3QgRm9udFZhcmlh
dGlvblNldHRpbmdzJiBmcm9tLCBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHRvLCBjb25z
dCBCbGVuZE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKCFwcm9ncmVzcykKKyAgICBpZiAo
IW9wdGlvbnMucHJvZ3Jlc3MpCiAgICAgICAgIHJldHVybiBmcm9tOwogCi0gICAgaWYgKHByb2dy
ZXNzID09IDEuMCkKKyAgICBpZiAob3B0aW9ucy5wcm9ncmVzcyA9PSAxLjApCiAgICAgICAgIHJl
dHVybiB0bzsKIAogICAgIEFTU0VSVChmcm9tLnNpemUoKSA9PSB0by5zaXplKCkpOwpAQCAtNTQ5
LDcgKzU0OSw3IEBAIHN0YXRpYyBpbmxpbmUgRm9udFZhcmlhdGlvblNldHRpbmdzIGJsZW5kRnVu
Yyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjCiAgICAgICAgIGF1dG8mIGZyb21J
dGVtID0gZnJvbS5hdChpKTsKICAgICAgICAgYXV0byYgdG9JdGVtID0gdG8uYXQoaSk7CiAgICAg
ICAgIEFTU0VSVChmcm9tSXRlbS50YWcoKSA9PSB0b0l0ZW0udGFnKCkpOwotICAgICAgICBmbG9h
dCBpbnRlcnBvbGF0ZWQgPSBibGVuZEZ1bmMoY2xpZW50LCBmcm9tSXRlbS52YWx1ZSgpLCB0b0l0
ZW0udmFsdWUoKSwgcHJvZ3Jlc3MpOworICAgICAgICBmbG9hdCBpbnRlcnBvbGF0ZWQgPSBibGVu
ZEZ1bmMoZnJvbUl0ZW0udmFsdWUoKSwgdG9JdGVtLnZhbHVlKCksIG9wdGlvbnMpOwogICAgICAg
ICByZXN1bHQuaW5zZXJ0KHsgZnJvbUl0ZW0udGFnKCksIGludGVycG9sYXRlZCB9KTsKICAgICB9
CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTU1NywxNCArNTU3LDE0IEBAIHN0YXRpYyBpbmxpbmUg
Rm9udFZhcmlhdGlvblNldHRpbmdzIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiBjCiAKICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIEZvbnRTZWxlY3Rpb25WYWx1ZSBi
bGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBGb250U2Vs
ZWN0aW9uVmFsdWUgZnJvbSwgRm9udFNlbGVjdGlvblZhbHVlIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
CitzdGF0aWMgaW5saW5lIEZvbnRTZWxlY3Rpb25WYWx1ZSBibGVuZEZ1bmMoRm9udFNlbGVjdGlv
blZhbHVlIGZyb20sIEZvbnRTZWxlY3Rpb25WYWx1ZSB0bywgY29uc3QgQmxlbmRPcHRpb25zJiBv
cHRpb25zKQogewotICAgIHJldHVybiBGb250U2VsZWN0aW9uVmFsdWUoc3RkOjptYXgoMC4wZiwg
YmxlbmRGdW5jKGNsaWVudCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZyb20pLCBzdGF0aWNfY2FzdDxm
bG9hdD4odG8pLCBwcm9ncmVzcykpKTsKKyAgICByZXR1cm4gRm9udFNlbGVjdGlvblZhbHVlKHN0
ZDo6bWF4KDAuMGYsIGJsZW5kRnVuYyhzdGF0aWNfY2FzdDxmbG9hdD4oZnJvbSksIHN0YXRpY19j
YXN0PGZsb2F0Pih0byksIG9wdGlvbnMpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8
Rm9udFNlbGVjdGlvblZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogY2xpZW50LCBPcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IGZyb20sIE9wdGlvbmFs
PEZvbnRTZWxlY3Rpb25WYWx1ZT4gdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUg
T3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiBibGVuZEZ1bmMoT3B0aW9uYWw8Rm9udFNlbGVj
dGlvblZhbHVlPiBmcm9tLCBPcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IHRvLCBjb25zdCBC
bGVuZE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgcmV0dXJuIGJsZW5kRnVuYyhjbGllbnQsICpm
cm9tLCAqdG8sIHByb2dyZXNzKTsKKyAgICByZXR1cm4gYmxlbmRGdW5jKCpmcm9tLCAqdG8sIG9w
dGlvbnMpOwogfQogCiBjbGFzcyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKQEAgLTU3
OCwxMiArNTc4LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbmltYXRpb25Qcm9wZXJ0eVdy
YXBwZXJCYXNlKCkgPSBkZWZhdWx0OwogCiAgICAgdmlydHVhbCBib29sIGlzU2hvcnRoYW5kV3Jh
cHBlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGVxdWFscyhj
b25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRl
clN0eWxlKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBibGVuZChj
b25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5k
ZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgZG91YmxlKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlJikg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJT
dHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZp
cnR1YWwgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBCbGVuZE9wdGlvbnMmKSBjb25zdCA9IDA7CiAgICAgCiAjaWYg
IUxPR19ESVNBQkxFRAotICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHls
ZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25z
dCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlJiwgZG91YmxlKSBjb25zdCA9IDA7CiAj
ZW5kaWYKIAogICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3By
b3BlcnR5OyB9CkBAIC02MDQsMjUgKzYwNCwyMyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAot
ICAgIFQgdmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorICAgIFQgdmFsdWUo
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIChz
dHlsZS0+Km1fZ2V0dGVyKSgpOworICAgICAgICByZXR1cm4gKHN0eWxlLiptX2dldHRlcikoKTsK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIGJvb2wgZXF1YWxzKGNv
bnN0IFJlbmRlclN0eWxlJiBhLCBjb25zdCBSZW5kZXJTdHlsZSYgYikgY29uc3Qgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIGlmIChhID09IGIpCisgICAgICAgIGlmICgmYSA9PSAmYikKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB2YWx1ZShhKSA9PSB2YWx1ZShiKTsKICAgICB9
CiAKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHls
ZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0
LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBS
ZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBSZW5kZXJTdHls
ZSYgZGVzdGluYXRpb24sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7Ci0gICAg
ICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8
PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoZnJvbSkg
PDwgIiB0byAiIDw8IHZhbHVlKHRvKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVt
YmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0
KSk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxl
bmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFs
dWUoZnJvbSkgPDwgIiB0byAiIDw8IHZhbHVlKHRvKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6
Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFs
dWUoZGVzdGluYXRpb24pKTsKICAgICB9CiAjZW5kaWYKIApAQCAtNjM5LDkgKzYzNyw5IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVu
ZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBj
b25zdCBvdmVycmlkZQorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBj
b25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBCbGVu
ZE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICAoZGVzdGlu
YXRpb24tPiptX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgdGhpcy0+dmFsdWUoZnJvbSksIHRo
aXMtPnZhbHVlKHRvKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgKGRlc3RpbmF0aW9uLiptX3NldHRl
cikoYmxlbmRGdW5jKHRoaXMtPnZhbHVlKGZyb20pLCB0aGlzLT52YWx1ZSh0byksIG9wdGlvbnMp
KTsKICAgICB9CiAKIHByb3RlY3RlZDoKQEAgLTY1OCwxMCArNjU2LDEwIEBAIHB1YmxpYzoKICAg
ICB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5
bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBm
aW5hbAorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5k
ZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBCbGVuZE9wdGlvbnMm
IG9wdGlvbnMpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBhdXRvIGJsZW5kZWRWYWx1ZSA9
IGJsZW5kRnVuYyhjbGllbnQsIHRoaXMtPnZhbHVlKGZyb20pLCB0aGlzLT52YWx1ZSh0byksIHBy
b2dyZXNzKTsKLSAgICAgICAgKGRlc3RpbmF0aW9uLT4qdGhpcy0+bV9zZXR0ZXIpKGJsZW5kZWRW
YWx1ZSA+IDEgPyBibGVuZGVkVmFsdWUgOiAxKTsKKyAgICAgICAgYXV0byBibGVuZGVkVmFsdWUg
PSBibGVuZEZ1bmModGhpcy0+dmFsdWUoZnJvbSksIHRoaXMtPnZhbHVlKHRvKSwgb3B0aW9ucyk7
CisgICAgICAgIChkZXN0aW5hdGlvbi4qdGhpcy0+bV9zZXR0ZXIpKGJsZW5kZWRWYWx1ZSA+IDEg
PyBibGVuZGVkVmFsdWUgOiAxKTsKICAgICB9CiB9OwogCkBAIC02NzYsMTIgKzY3NCwxMiBAQCBw
dWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3Qg
UmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0
IFJlbmRlclN0eWxlJikgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZvaWQg
YmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIFJlbmRlclN0eWxlKiBkZXN0
aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywg
ZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUm
IGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUm
IHRvLCBjb25zdCBCbGVuZE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0IGZpbmFsCiAgICAgewotICAg
ICAgICBBU1NFUlQoIXByb2dyZXNzIHx8IHByb2dyZXNzID09IDEuMCk7Ci0gICAgICAgIChkZXN0
aW5hdGlvbi0+KnRoaXMtPm1fc2V0dGVyKSh0aGlzLT52YWx1ZShwcm9ncmVzcyA/IHRvIDogZnJv
bSkpOworICAgICAgICBBU1NFUlQoIW9wdGlvbnMucHJvZ3Jlc3MgfHwgb3B0aW9ucy5wcm9ncmVz
cyA9PSAxLjApOworICAgICAgICAoZGVzdGluYXRpb24uKnRoaXMtPm1fc2V0dGVyKSh0aGlzLT52
YWx1ZShvcHRpb25zLnByb2dyZXNzID8gdG8gOiBmcm9tKSk7CiAgICAgfQogCiAgICAgdm9pZCAo
UmVuZGVyU3R5bGU6OiptX3NldHRlcikoVCk7CkBAIC02OTgsOSArNjk2LDkgQEAgcHVibGljOgog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJT
dHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0
IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJl
bmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IEJsZW5kT3B0aW9u
cyYgb3B0aW9ucykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIChkZXN0aW5hdGlvbi0+KnRo
aXMtPm1fc2V0dGVyKShibGVuZEZ1bmMoY2xpZW50LCB0aGlzLT52YWx1ZShmcm9tKSwgdGhpcy0+
dmFsdWUodG8pLCBwcm9ncmVzcykpOworICAgICAgICAoZGVzdGluYXRpb24uKnRoaXMtPm1fc2V0
dGVyKShibGVuZEZ1bmModGhpcy0+dmFsdWUoZnJvbSksIHRoaXMtPnZhbHVlKHRvKSwgb3B0aW9u
cykpOwogICAgIH0KIAogICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFJlZlB0cjxU
PiYmKTsKQEAgLTczOSwxNSArNzM3LDE1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByb3RlY3RlZDoK
LSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBS
ZW5kZXJTdHlsZSogdG8pIGNvbnN0IG92ZXJyaWRlCisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShj
b25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvKSBjb25zdCBvdmVy
cmlkZQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbkludGVycG9sYXRlTGVuZ3Rocyh2YWx1ZShm
cm9tKSwgdmFsdWUodG8pLCBtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpJc0xlbmd0aFBlcmNlbnRh
Z2UpKTsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHls
ZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92
ZXJyaWRlCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJl
bmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IEJsZW5kT3B0aW9u
cyYgb3B0aW9ucykgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGF1dG8gdmFsdWVSYW5n
ZSA9IG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Ok5lZ2F0aXZlTGVuZ3Roc0FyZUludmFsaWQpID8g
VmFsdWVSYW5nZU5vbk5lZ2F0aXZlIDogVmFsdWVSYW5nZUFsbDsKLSAgICAgICAgKGRlc3RpbmF0
aW9uLT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhjbGllbnQsIHZhbHVlKGZyb20pLCB2YWx1ZSh0byks
IHByb2dyZXNzLCB2YWx1ZVJhbmdlKSk7CisgICAgICAgIChkZXN0aW5hdGlvbi4qbV9zZXR0ZXIp
KGJsZW5kRnVuYyh2YWx1ZShmcm9tKSwgdmFsdWUodG8pLCBvcHRpb25zLCB2YWx1ZVJhbmdlKSk7
CiAgICAgfQogCiBwcml2YXRlOgpAQCAtNzgwLDkgKzc3OCw5IEBAIHB1YmxpYzoKICAgICB9CiAK
IHByaXZhdGU6Ci0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZy
b20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAor
ICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHls
ZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBCbGVuZE9wdGlvbnMmIG9wdGlv
bnMpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICAoZGVzdGluYXRpb24tPiptX3NldHRlciko
YmxlbmRGdW5jKGNsaWVudCwgdmFsdWUoZnJvbSksIHZhbHVlKHRvKSwgcHJvZ3Jlc3MpKTsKKyAg
ICAgICAgKGRlc3RpbmF0aW9uLiptX3NldHRlcikoYmxlbmRGdW5jKHZhbHVlKGZyb20pLCB2YWx1
ZSh0byksIG9wdGlvbnMpKTsKICAgICB9CiAKICAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0
dGVyKShMZW5ndGhQb2ludCYmKTsKQEAgLTc5OSwxNCArNzk3LDE0IEBAIHB1YmxpYzoKICAgICB9
CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSog
ZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBmaW5hbAorICAgIGJvb2wgY2FuSW50
ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bykg
Y29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHJldHVybiBjYW5JbnRlcnBvbGF0ZUxlbmd0aFZh
cmlhbnRzKHRoaXMtPnZhbHVlKGZyb20pLCB0aGlzLT52YWx1ZSh0bykpOwogICAgIH0KIAotICAg
IHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBSZW5k
ZXJTdHlsZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5k
ZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGJsZW5k
KFJlbmRlclN0eWxlJiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0
IFJlbmRlclN0eWxlJiB0bywgY29uc3QgQmxlbmRPcHRpb25zJiBvcHRpb25zKSBjb25zdCBmaW5h
bAogICAgIHsKLSAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhjbGll
bnQsIHRoaXMtPnZhbHVlKGZyb20pLCB0aGlzLT52YWx1ZSh0byksIHByb2dyZXNzKSk7CisgICAg
ICAgIChkZXN0aW5hdGlvbi4qbV9zZXR0ZXIpKGJsZW5kRnVuYyh0aGlzLT52YWx1ZShmcm9tKSwg
dGhpcy0+dmFsdWUodG8pLCBvcHRpb25zKSk7CiAgICAgfQogCiAgICAgdm9pZCAoUmVuZGVyU3R5
bGU6OiptX3NldHRlcikoVCYmKTsKQEAgLTgyOCw5ICs4MjYsOSBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGZy
b20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bykgY29uc3QgZmluYWwKKyAgICBib29sIGNhbkludGVy
cG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8pIGNv
bnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAobV9mbGFncy5jb250YWlucyhGbGFnczo6VXNl
c0ZpbGxLZXl3b3JkKSAmJiBmcm9tLT5ib3JkZXJJbWFnZSgpLmZpbGwoKSAhPSB0by0+Ym9yZGVy
SW1hZ2UoKS5maWxsKCkpCisgICAgICAgIGlmIChtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpVc2Vz
RmlsbEtleXdvcmQpICYmIGZyb20uYm9yZGVySW1hZ2UoKS5maWxsKCkgIT0gdG8uYm9yZGVySW1h
Z2UoKS5maWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgYXV0byYg
ZnJvbUxlbmd0aEJveCA9IHZhbHVlKGZyb20pOwpAQCAtODQyLDEyICs4NDAsMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICYmIGNhbkludGVycG9sYXRlTGVuZ3Rocyhmcm9tTGVuZ3RoQm94Lmxl
ZnQoKSwgdG9MZW5ndGhCb3gubGVmdCgpLCBpc0xlbmd0aFBlcmNlbnRhZ2UpOwogICAgIH0KIAot
ICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBS
ZW5kZXJTdHlsZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBS
ZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGJs
ZW5kKFJlbmRlclN0eWxlJiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNv
bnN0IFJlbmRlclN0eWxlJiB0bywgY29uc3QgQmxlbmRPcHRpb25zJiBvcHRpb25zKSBjb25zdCBm
aW5hbAogICAgIHsKICAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6OlVzZXNGaWxs
S2V5d29yZCkpCi0gICAgICAgICAgICBkZXN0aW5hdGlvbi0+c2V0Qm9yZGVySW1hZ2VTbGljZUZp
bGwoKCFwcm9ncmVzcyB8fCBjYW5JbnRlcnBvbGF0ZShmcm9tLCB0bykgPyBmcm9tIDogdG8pLT5i
b3JkZXJJbWFnZSgpLmZpbGwoKSk7CisgICAgICAgICAgICBkZXN0aW5hdGlvbi5zZXRCb3JkZXJJ
bWFnZVNsaWNlRmlsbCgoIW9wdGlvbnMucHJvZ3Jlc3MgfHwgIW9wdGlvbnMuaXNEaXNjcmV0ZSA/
IGZyb20gOiB0bykuYm9yZGVySW1hZ2UoKS5maWxsKCkpOwogICAgICAgICBhdXRvIHZhbHVlUmFu
Z2UgPSBtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpBbGxvd3NOZWdhdGl2ZVZhbHVlcykgPyBWYWx1
ZVJhbmdlQWxsIDogVmFsdWVSYW5nZU5vbk5lZ2F0aXZlOwotICAgICAgICAoZGVzdGluYXRpb24t
PiptX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgdmFsdWUoZnJvbSksIHZhbHVlKHRvKSwgcHJv
Z3Jlc3MsIHZhbHVlUmFuZ2UpKTsKKyAgICAgICAgKGRlc3RpbmF0aW9uLiptX3NldHRlcikoYmxl
bmRGdW5jKHZhbHVlKGZyb20pLCB2YWx1ZSh0byksIG9wdGlvbnMsIHZhbHVlUmFuZ2UpKTsKICAg
ICB9CiAKICAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShMZW5ndGhCb3gmJik7CkBA
IC04NjMsMTQgKzg2MSwxMSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIGJvb2wg
ZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qg
ZmluYWwKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwgY29uc3QgUmVuZGVy
U3R5bGUmIGIpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICAvLyBJZiB0aGUgc3R5bGUgcG9p
bnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3QuCi0gICAgICAg
IC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJlIG51bGwsIHJl
dHVybiB0cnVlLgotICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICBpZiAoJmEgPT0gJmIpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFiKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGF1dG8qIGNsaXBQYXRoQSA9IHZhbHVlKGEpOwog
ICAgICAgICBhdXRvKiBjbGlwUGF0aEIgPSB2YWx1ZShiKTsKQEAgLTg5MiwxOCArODg3LDE1IEBA
IHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVy
U3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBmaW5hbAorICAgIGJvb2wgZXF1
YWxzKGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25zdCBSZW5kZXJTdHlsZSYgYikgY29uc3QgZmlu
YWwKICAgICB7CiAgICAgICAgIC8vIElmIHRoZSBzdHlsZSBwb2ludGVycyBhcmUgdGhlIHNhbWUs
IGRvbid0IGJvdGhlciBkb2luZyB0aGUgdGVzdC4KLSAgICAgICAgLy8gSWYgZWl0aGVyIGlzIG51
bGwsIHJldHVybiBmYWxzZS4gSWYgYm90aCBhcmUgbnVsbCwgcmV0dXJuIHRydWUuCi0gICAgICAg
IGlmIChhID09IGIpCisgICAgICAgIGlmICgmYSA9PSAmYikKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIHJldHVybiB2YWx1ZShhKSA9PSB2YWx1ZShiKTsKICAgICB9CiAKLSAgICBib29sIGNh
bkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSog
dG8pIGNvbnN0IGZpbmFsCisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHls
ZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAg
ICAgYXV0byBmcm9tVmFyaWF0aW9uU2V0dGluZ3MgPSB2YWx1ZShmcm9tKTsKICAgICAgICAgYXV0
byB0b1ZhcmlhdGlvblNldHRpbmdzID0gdmFsdWUodG8pOwpAQCAtOTMxLDE0ICs5MjMsMTEgQEAg
cHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IGZpbmFsCisgICAgYm9vbCBlcXVh
bHMoY29uc3QgUmVuZGVyU3R5bGUmIGEsIGNvbnN0IFJlbmRlclN0eWxlJiBiKSBjb25zdCBmaW5h
bAogICAgIHsKICAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50ZXJzIGFyZSB0aGUgc2FtZSwg
ZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAgICAvLyBJZiBlaXRoZXIgaXMgbnVs
bCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1cm4gdHJ1ZS4KLSAgICAgICAg
aWYgKGEgPT0gYikKKyAgICAgICAgaWYgKCZhID09ICZiKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICBhdXRvKiBzaGFwZUEgPSB2YWx1ZShhKTsKICAgICAgICAgYXV0byogc2hhcGVCID0g
dmFsdWUoYik7CkBAIC05NDksNyArOTM4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuICpz
aGFwZUEgPT0gKnNoYXBlQjsKICAgICB9CiAKLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0
IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCisg
ICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVu
ZGVyU3R5bGUmIHRvKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgYXV0byogZnJvbVNoYXBl
ID0gdmFsdWUoZnJvbSk7CiAgICAgICAgIGF1dG8qIHRvU2hhcGUgPSB2YWx1ZSh0byk7CkBAIC05
NzYsMTkgKzk2NSwxNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIGJvb2wgZXF1
YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QgZmlu
YWwKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwgY29uc3QgUmVuZGVyU3R5
bGUmIGIpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICBp
ZiAoJmEgPT0gJmIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8
ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGF1dG8qIGltYWdlQSA9
IHZhbHVlKGEpOwogICAgICAgICBhdXRvKiBpbWFnZUIgPSB2YWx1ZShiKTsKICAgICAgICAgcmV0
dXJuIGFyZVBvaW50aW5nVG9FcXVhbERhdGEoaW1hZ2VBLCBpbWFnZUIpOwogICAgIH0KIAotICAg
IGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRl
clN0eWxlKiB0bykgY29uc3QgZmluYWwKKyAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJl
bmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8pIGNvbnN0IGZpbmFsCiAgICAg
ewogICAgICAgICByZXR1cm4gdmFsdWUoZnJvbSkgJiYgdmFsdWUodG8pOwogICAgIH0KQEAgLTEw
MTksNyArMTAwNiw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgYm9vbCBhbmltYXRpb25Jc0Fj
Y2VsZXJhdGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgYm9vbCBlcXVh
bHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBmaW5h
bAorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25zdCBSZW5kZXJTdHls
ZSYgYikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHJldHVybiBhcmVQb2ludGluZ1RvRXF1
YWxEYXRhKHRoaXMtPnZhbHVlKGEpLCB0aGlzLT52YWx1ZShiKSk7CiAgICAgfQpAQCAtMTA0Myw5
ICsxMDMwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIDsKICAgICB9CiAKLSAgICB2b2lkIGJs
ZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUq
IGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUq
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5kZXJT
dHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJT
dHlsZSYgdG8sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucykgY29uc3QgZmluYWwKICAgICB7
Ci0gICAgICAgIChkZXN0aW5hdGlvbi0+Km1fc2V0dGVyKShibGVuZEZ1bmMoY2xpZW50LCB2YWx1
ZShmcm9tKSwgdmFsdWUodG8pLCBwcm9ncmVzcywgcHJvcGVydHkoKSkpOworICAgICAgICAoZGVz
dGluYXRpb24uKm1fc2V0dGVyKShibGVuZEZ1bmModmFsdWUoZnJvbSksIHZhbHVlKHRvKSwgb3B0
aW9ucywgcHJvcGVydHkoKSkpOwogICAgIH0KIH07CiAKQEAgLTEwODQsMTUgKzEwNzEsMTMgQEAg
cHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IGZpbmFsCisgICAgYm9vbCBlcXVh
bHMoY29uc3QgUmVuZGVyU3R5bGUmIGEsIGNvbnN0IFJlbmRlclN0eWxlJiBiKSBjb25zdCBmaW5h
bAogICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgaWYgKCZhID09ICZiKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBID0gKGEt
PiptX2dldHRlcikoKTsKLSAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QiA9IChiLT4q
bV9nZXR0ZXIpKCk7CisgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0EgPSAoYS4qbV9n
ZXR0ZXIpKCk7CisgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IgPSAoYi4qbV9nZXR0
ZXIpKCk7CiAKICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgIC8vIGVuZCBvZiBi
b3RoIGxpc3RzCkBAIC0xMTEzLDEwICsxMDk4LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5
bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bykgY29uc3QgZmluYWwKKyAgICBib29sIGNh
bkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYg
dG8pIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBmcm9tU2hh
ZG93ID0gKGZyb20tPiptX2dldHRlcikoKTsKLSAgICAgICAgY29uc3QgU2hhZG93RGF0YSogdG9T
aGFkb3cgPSAodG8tPiptX2dldHRlcikoKTsKKyAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZnJv
bVNoYWRvdyA9IChmcm9tLiptX2dldHRlcikoKTsKKyAgICAgICAgY29uc3QgU2hhZG93RGF0YSog
dG9TaGFkb3cgPSAodG8uKm1fZ2V0dGVyKSgpOwogCiAgICAgICAgIC8vIFRoZSBvbmx5IHNjZW5h
cmlvIHdoZXJlIHdlIGNhbid0IGludGVycG9sYXRlIGlzIGlmIHNwZWNpZmllZCBpdGVtcyBkb24n
dCBoYXZlIHRoZSBzYW1lIHNoYWRvdyBzdHlsZS4KICAgICAgICAgd2hpbGUgKGZyb21TaGFkb3cg
JiYgdG9TaGFkb3cpIHsKQEAgLTExMjksMTUgKzExMTQsMTUgQEAgcHJpdmF0ZToKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVu
ZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBj
b25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBjb25z
dCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBCbGVuZE9w
dGlvbnMmIG9wdGlvbnMpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBjb25zdCBTaGFkb3dE
YXRhKiBmcm9tU2hhZG93ID0gKGZyb20tPiptX2dldHRlcikoKTsKLSAgICAgICAgY29uc3QgU2hh
ZG93RGF0YSogdG9TaGFkb3cgPSAodG8tPiptX2dldHRlcikoKTsKKyAgICAgICAgY29uc3QgU2hh
ZG93RGF0YSogZnJvbVNoYWRvdyA9IChmcm9tLiptX2dldHRlcikoKTsKKyAgICAgICAgY29uc3Qg
U2hhZG93RGF0YSogdG9TaGFkb3cgPSAodG8uKm1fZ2V0dGVyKSgpOwogCi0gICAgICAgIGlmICgh
Y2FuSW50ZXJwb2xhdGUoZnJvbSwgdG8pKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIXByb2dyZXNz
IHx8IHByb2dyZXNzID09IDEuMCk7Ci0gICAgICAgICAgICBhdXRvKiBzaGFkb3cgPSBwcm9ncmVz
cyA/IHRvU2hhZG93IDogZnJvbVNoYWRvdzsKLSAgICAgICAgICAgIChkZXN0aW5hdGlvbi0+Km1f
c2V0dGVyKShzaGFkb3cgPyBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KCpzaGFkb3cpIDogbnVsbHB0
ciwgZmFsc2UpOworICAgICAgICBpZiAob3B0aW9ucy5pc0Rpc2NyZXRlKSB7CisgICAgICAgICAg
ICBBU1NFUlQoIW9wdGlvbnMucHJvZ3Jlc3MgfHwgb3B0aW9ucy5wcm9ncmVzcyA9PSAxLjApOwor
ICAgICAgICAgICAgYXV0byogc2hhZG93ID0gb3B0aW9ucy5wcm9ncmVzcyA/IHRvU2hhZG93IDog
ZnJvbVNoYWRvdzsKKyAgICAgICAgICAgIChkZXN0aW5hdGlvbi4qbV9zZXR0ZXIpKHNoYWRvdyA/
IG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oKnNoYWRvdykgOiBudWxscHRyLCBmYWxzZSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTE0NSwyMiArMTEzMCwyMiBAQCBwcml2
YXRlOgogICAgICAgICBpbnQgdG9MZW5ndGggPSBzaGFkb3dMaXN0TGVuZ3RoKHRvU2hhZG93KTsK
IAogICAgICAgICBpZiAoZnJvbUxlbmd0aCA9PSB0b0xlbmd0aCB8fCAoZnJvbUxlbmd0aCA8PSAx
ICYmIHRvTGVuZ3RoIDw9IDEpKSB7Ci0gICAgICAgICAgICAoZGVzdGluYXRpb24tPiptX3NldHRl
cikoYmxlbmRTaW1wbGVPck1hdGNoZWRTaGFkb3dMaXN0cyhjbGllbnQsIHByb2dyZXNzLCBmcm9t
U2hhZG93LCB0b1NoYWRvdyksIGZhbHNlKTsKKyAgICAgICAgICAgIChkZXN0aW5hdGlvbi4qbV9z
ZXR0ZXIpKGJsZW5kU2ltcGxlT3JNYXRjaGVkU2hhZG93TGlzdHMoZnJvbVNoYWRvdywgdG9TaGFk
b3csIG9wdGlvbnMpLCBmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICAoZGVzdGluYXRpb24tPiptX3NldHRlcikoYmxlbmRNaXNtYXRjaGVkU2hhZG93TGlz
dHMoY2xpZW50LCBwcm9ncmVzcywgZnJvbVNoYWRvdywgdG9TaGFkb3csIGZyb21MZW5ndGgsIHRv
TGVuZ3RoKSwgZmFsc2UpOworICAgICAgICAoZGVzdGluYXRpb24uKm1fc2V0dGVyKShibGVuZE1p
c21hdGNoZWRTaGFkb3dMaXN0cyhmcm9tU2hhZG93LCB0b1NoYWRvdywgZnJvbUxlbmd0aCwgdG9M
ZW5ndGgsIG9wdGlvbnMpLCBmYWxzZSk7CiAgICAgfQogCiAjaWYgIUxPR19ESVNBQkxFRAotICAg
IHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNv
bnN0IFJlbmRlclN0eWxlKiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQg
bG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJl
bmRlclN0eWxlJiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAg
Ly8gRklYTUU6IGJldHRlciBsb2dnaW5nLgogICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0
aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nIFNoYWRvd0RhdGEgYXQgIiA8PCBUZXh0U3RyZWFt
OjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpKTsKICAgICB9CiAjZW5k
aWYKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZFNpbXBsZU9yTWF0Y2hl
ZFNoYWRvd0xpc3RzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgZG91
YmxlIHByb2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRh
KiBzaGFkb3dCKSBjb25zdAorICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZFNp
bXBsZU9yTWF0Y2hlZFNoYWRvd0xpc3RzKGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0EsIGNvbnN0
IFNoYWRvd0RhdGEqIHNoYWRvd0IsIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucykgY29uc3QK
ICAgICB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBuZXdTaGFkb3dEYXRh
OwogICAgICAgICBTaGFkb3dEYXRhKiBsYXN0U2hhZG93ID0gMDsKQEAgLTExNjksNyArMTE1NCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFkb3cgPSBz
aGFkb3dGb3JCbGVuZGluZyhzaGFkb3dBLCBzaGFkb3dCKTsKICAgICAgICAgICAgIGNvbnN0IFNo
YWRvd0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0IsIHNoYWRvd0Ep
OwogCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRlZFNoYWRv
dyA9IGJsZW5kRnVuYyhjbGllbnQsIHNyY1NoYWRvdywgZHN0U2hhZG93LCBwcm9ncmVzcyk7Cisg
ICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRlZFNoYWRvdyA9IGJs
ZW5kRnVuYyhzcmNTaGFkb3csIGRzdFNoYWRvdywgb3B0aW9ucyk7CiAgICAgICAgICAgICBTaGFk
b3dEYXRhKiBibGVuZGVkU2hhZG93UHRyID0gYmxlbmRlZFNoYWRvdy5nZXQoKTsKIAogICAgICAg
ICAgICAgaWYgKCFsYXN0U2hhZG93KQpAQCAtMTE4Niw3ICsxMTcxLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIG5ld1NoYWRvd0RhdGE7CiAgICAgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRy
PFNoYWRvd0RhdGE+IGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgZG91YmxlIHByb2dyZXNzLCBjb25zdCBTaGFkb3dEYXRh
KiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dCLCBpbnQgZnJvbUxlbmd0aCwgaW50
IHRvTGVuZ3RoKSBjb25zdAorICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZE1p
c21hdGNoZWRTaGFkb3dMaXN0cyhjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFk
b3dEYXRhKiBzaGFkb3dCLCBpbnQgZnJvbUxlbmd0aCwgaW50IHRvTGVuZ3RoLCBjb25zdCBCbGVu
ZE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0CiAgICAgewogICAgICAgICAvLyBUaGUgc2hhZG93cyBp
biBTaGFkb3dEYXRhIGFyZSBzdG9yZWQgaW4gcmV2ZXJzZSBvcmRlciwgc28gd2hlbiBhbmltYXRp
bmcgbWlzbWF0Y2hlZCBsaXN0cywKICAgICAgICAgLy8gcmV2ZXJzZSB0aGVtIGFuZCBtYXRjaCBm
cm9tIHRoZSBlbmQuCkBAIC0xMjEyLDcgKzExOTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Y29uc3QgU2hhZG93RGF0YSogc3JjU2hhZG93ID0gc2hhZG93Rm9yQmxlbmRpbmcoZnJvbVNoYWRv
dywgdG9TaGFkb3cpOwogICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZHN0U2hhZG93ID0g
c2hhZG93Rm9yQmxlbmRpbmcodG9TaGFkb3csIGZyb21TaGFkb3cpOwogCi0gICAgICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRlZFNoYWRvdyA9IGJsZW5kRnVuYyhjbGll
bnQsIHNyY1NoYWRvdywgZHN0U2hhZG93LCBwcm9ncmVzcyk7CisgICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRlZFNoYWRvdyA9IGJsZW5kRnVuYyhzcmNTaGFkb3cs
IGRzdFNoYWRvdywgb3B0aW9ucyk7CiAgICAgICAgICAgICAvLyBJbnNlcnQgYXQgdGhlIHN0YXJ0
IG9mIHRoZSBsaXN0IHRvIHByZXNlcnZlIHRoZSBvcmRlci4KICAgICAgICAgICAgIGJsZW5kZWRT
aGFkb3ctPnNldE5leHQoV1RGTW92ZShuZXdTaGFkb3dEYXRhKSk7CiAgICAgICAgICAgICBuZXdT
aGFkb3dEYXRhID0gV1RGTW92ZShibGVuZGVkU2hhZG93KTsKQEAgLTEyMzYsMTIgKzEyMjEsMTAg
QEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5k
ZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IGZpbmFsCisgICAgYm9vbCBl
cXVhbHMoY29uc3QgUmVuZGVyU3R5bGUmIGEsIGNvbnN0IFJlbmRlclN0eWxlJiBiKSBjb25zdCBm
aW5hbAogICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgaWYgKCZhID09ICZiKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSB2YWx1ZShhKTsK
ICAgICAgICAgQ29sb3IgdG9Db2xvciA9IHZhbHVlKGIpOwpAQCAtMTI1MCwxNCArMTIzMywxNCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgaWYgKCFmcm9t
Q29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgZnJvbUNvbG9yID0gYS0+Y29sb3IoKTsKKyAg
ICAgICAgICAgIGZyb21Db2xvciA9IGEuY29sb3IoKTsKICAgICAgICAgaWYgKCF0b0NvbG9yLmlz
VmFsaWQoKSkKLSAgICAgICAgICAgIHRvQ29sb3IgPSBiLT5jb2xvcigpOworICAgICAgICAgICAg
dG9Db2xvciA9IGIuY29sb3IoKTsKIAogICAgICAgICByZXR1cm4gZnJvbUNvbG9yID09IHRvQ29s
b3I7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUq
IGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5h
bAorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJT
dHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBCbGVuZE9wdGlvbnMmIG9w
dGlvbnMpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSB2YWx1
ZShmcm9tKTsKICAgICAgICAgQ29sb3IgdG9Db2xvciA9IHZhbHVlKHRvKTsKQEAgLTEyNjYsMjIg
KzEyNDksMjIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAo
IWZyb21Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBmcm9tQ29sb3IgPSBmcm9tLT5jb2xv
cigpOworICAgICAgICAgICAgZnJvbUNvbG9yID0gZnJvbS5jb2xvcigpOwogICAgICAgICBpZiAo
IXRvQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgdG9Db2xvciA9IHRvLT5jb2xvcigpOwot
ICAgICAgICAoZGVzdGluYXRpb24tPiptX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgZnJvbUNv
bG9yLCB0b0NvbG9yLCBwcm9ncmVzcykpOworICAgICAgICAgICAgdG9Db2xvciA9IHRvLmNvbG9y
KCk7CisgICAgICAgIChkZXN0aW5hdGlvbi4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhmcm9tQ29sb3Is
IHRvQ29sb3IsIG9wdGlvbnMpKTsKICAgICB9CiAKLSAgICBDb2xvciB2YWx1ZShjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0CisgICAgQ29sb3IgdmFsdWUoY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIChzdHlsZS0+Km1fZ2V0dGVyKSgp
OworICAgICAgICByZXR1cm4gKHN0eWxlLiptX2dldHRlcikoKTsKICAgICB9CiAKICNpZiAhTE9H
X0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29u
c3QgUmVuZGVyU3R5bGUqIHRvLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJv
Z3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSYg
ZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBSZW5kZXJTdHlsZSYgZGVzdGluYXRp
b24sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIC8vIEZJWE1F
OiBiZXR0ZXIgbG9nZ2luZy4KLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0
cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAi
IGZyb20gIiA8PCB2YWx1ZShmcm9tKSA8PCAiIHRvICIgPDwgdmFsdWUodG8pIDw8ICIgYXQgIiA8
PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8
ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1h
dGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0
eSgpKSA8PCAiIGZyb20gIiA8PCB2YWx1ZShmcm9tKSA8PCAiIHRvICIgPDwgdmFsdWUodG8pIDw8
ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJv
Z3Jlc3MpIDw8ICIgLT4gIiA8PCB2YWx1ZShkZXN0aW5hdGlvbikpOwogICAgIH0KICNlbmRpZgog
CkBAIC0xMzA4LDE1ICsxMjkxLDE1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByb3RlY3RlZDoKLSAg
ICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIp
IGNvbnN0IG92ZXJyaWRlCisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUmIGEsIGNv
bnN0IFJlbmRlclN0eWxlJiBiKSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAgcmV0dXJu
IG1fd3JhcHBlci0+ZXF1YWxzKGEsIGIpICYmIG1fdmlzaXRlZFdyYXBwZXItPmVxdWFscyhhLCBi
KTsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSog
ZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJy
aWRlCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRl
clN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IEJsZW5kT3B0aW9ucyYg
b3B0aW9ucykgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIG1fd3JhcHBlci0+YmxlbmQo
Y2xpZW50LCBkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIHByb2dyZXNzKTsKLSAgICAgICAgbV92aXNp
dGVkV3JhcHBlci0+YmxlbmQoY2xpZW50LCBkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIHByb2dyZXNz
KTsKKyAgICAgICAgbV93cmFwcGVyLT5ibGVuZChkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIG9wdGlv
bnMpOworICAgICAgICBtX3Zpc2l0ZWRXcmFwcGVyLT5ibGVuZChkZXN0aW5hdGlvbiwgZnJvbSwg
dG8sIG9wdGlvbnMpOwogICAgIH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9w
ZXJ0eVdyYXBwZXJCYXNlPiBtX3dyYXBwZXI7CkBAIC0xMzI0LDE5ICsxMzA3LDE5IEBAIHByb3Rl
Y3RlZDoKIAogcHJpdmF0ZToKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChj
b25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBjb25zdCBSZW5k
ZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBs
b2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBj
b25zdCBSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmlu
YWwKICAgICB7Ci0gICAgICAgIG1fd3JhcHBlci0+bG9nQmxlbmQoZnJvbSwgdG8sIHJlc3VsdCwg
cHJvZ3Jlc3MpOwotICAgICAgICBtX3Zpc2l0ZWRXcmFwcGVyLT5sb2dCbGVuZChmcm9tLCB0bywg
cmVzdWx0LCBwcm9ncmVzcyk7CisgICAgICAgIG1fd3JhcHBlci0+bG9nQmxlbmQoZnJvbSwgdG8s
IGRlc3RpbmF0aW9uLCBwcm9ncmVzcyk7CisgICAgICAgIG1fdmlzaXRlZFdyYXBwZXItPmxvZ0Js
ZW5kKGZyb20sIHRvLCBkZXN0aW5hdGlvbiwgcHJvZ3Jlc3MpOwogICAgIH0KICNlbmRpZgogfTsK
IAotc3RhdGljIGJvb2wgY2FuSW50ZXJwb2xhdGVDYXJldENvbG9yKGNvbnN0IFJlbmRlclN0eWxl
KiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8sIGJvb2wgdmlzaXRlZCkKK3N0YXRpYyBib29s
IGNhbkludGVycG9sYXRlQ2FyZXRDb2xvcihjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3Qg
UmVuZGVyU3R5bGUmIHRvLCBib29sIHZpc2l0ZWQpCiB7CiAgICAgaWYgKHZpc2l0ZWQpCi0gICAg
ICAgIHJldHVybiAhZnJvbS0+aGFzVmlzaXRlZExpbmtBdXRvQ2FyZXRDb2xvcigpICYmICF0by0+
aGFzVmlzaXRlZExpbmtBdXRvQ2FyZXRDb2xvcigpOwotICAgIHJldHVybiAhZnJvbS0+aGFzQXV0
b0NhcmV0Q29sb3IoKSAmJiAhdG8tPmhhc0F1dG9DYXJldENvbG9yKCk7CisgICAgICAgIHJldHVy
biAhZnJvbS5oYXNWaXNpdGVkTGlua0F1dG9DYXJldENvbG9yKCkgJiYgIXRvLmhhc1Zpc2l0ZWRM
aW5rQXV0b0NhcmV0Q29sb3IoKTsKKyAgICByZXR1cm4gIWZyb20uaGFzQXV0b0NhcmV0Q29sb3Io
KSAmJiAhdG8uaGFzQXV0b0NhcmV0Q29sb3IoKTsKIH0KIAogY2xhc3MgQ2FyZXRDb2xvclByb3Bl
cnR5V3JhcHBlciBmaW5hbCA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRD
b2xvciB7CkBAIC0xMzQ4LDM4ICsxMzMxLDM4IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6
Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxl
KiBiKSBjb25zdCBmaW5hbAorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlJiBhLCBj
b25zdCBSZW5kZXJTdHlsZSYgYikgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIHJldHVybiBh
LT5oYXNBdXRvQ2FyZXRDb2xvcigpID09IGItPmhhc0F1dG9DYXJldENvbG9yKCkKLSAgICAgICAg
ICAgICYmIGEtPmhhc1Zpc2l0ZWRMaW5rQXV0b0NhcmV0Q29sb3IoKSA9PSBiLT5oYXNWaXNpdGVk
TGlua0F1dG9DYXJldENvbG9yKCkKKyAgICAgICAgcmV0dXJuIGEuaGFzQXV0b0NhcmV0Q29sb3Io
KSA9PSBiLmhhc0F1dG9DYXJldENvbG9yKCkKKyAgICAgICAgICAgICYmIGEuaGFzVmlzaXRlZExp
bmtBdXRvQ2FyZXRDb2xvcigpID09IGIuaGFzVmlzaXRlZExpbmtBdXRvQ2FyZXRDb2xvcigpCiAg
ICAgICAgICAgICAmJiBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcjo6ZXF1YWxz
KGEsIGIpOwogICAgIH0KIAotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5
bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bykgY29uc3QgZmluYWwKKyAgICBib29sIGNh
bkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYg
dG8pIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICByZXR1cm4gY2FuSW50ZXJwb2xhdGVDYXJl
dENvbG9yKGZyb20sIHRvLCBmYWxzZSkgfHwgY2FuSW50ZXJwb2xhdGVDYXJldENvbG9yKGZyb20s
IHRvLCB0cnVlKTsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5k
ZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNv
bnN0IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0
IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IEJsZW5kT3B0
aW9ucyYgb3B0aW9ucykgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIGlmIChjYW5JbnRlcnBv
bGF0ZUNhcmV0Q29sb3IoZnJvbSwgdG8sIGZhbHNlKSkKLSAgICAgICAgICAgIG1fd3JhcHBlci0+
YmxlbmQoY2xpZW50LCBkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAgICAgICAg
ICAgIG1fd3JhcHBlci0+YmxlbmQoZGVzdGluYXRpb24sIGZyb20sIHRvLCBvcHRpb25zKTsKICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhdXRvKiBibGVuZGluZ1JlbmRlclN0eWxlID0gcHJv
Z3Jlc3MgPCAwLjUgPyBmcm9tIDogdG87Ci0gICAgICAgICAgICBpZiAoYmxlbmRpbmdSZW5kZXJT
dHlsZS0+aGFzQXV0b0NhcmV0Q29sb3IoKSkKLSAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi0+
c2V0SGFzQXV0b0NhcmV0Q29sb3IoKTsKKyAgICAgICAgICAgIGF1dG8mIGJsZW5kaW5nUmVuZGVy
U3R5bGUgPSBvcHRpb25zLnByb2dyZXNzIDwgMC41ID8gZnJvbSA6IHRvOworICAgICAgICAgICAg
aWYgKGJsZW5kaW5nUmVuZGVyU3R5bGUuaGFzQXV0b0NhcmV0Q29sb3IoKSkKKyAgICAgICAgICAg
ICAgICBkZXN0aW5hdGlvbi5zZXRIYXNBdXRvQ2FyZXRDb2xvcigpOwogICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLT5zZXRDYXJldENvbG9yKGJsZW5kaW5nUmVu
ZGVyU3R5bGUtPmNhcmV0Q29sb3IoKSk7CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uc2V0
Q2FyZXRDb2xvcihibGVuZGluZ1JlbmRlclN0eWxlLmNhcmV0Q29sb3IoKSk7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoY2FuSW50ZXJwb2xhdGVDYXJldENvbG9yKGZyb20sIHRvLCB0cnVlKSkK
LSAgICAgICAgICAgIG1fdmlzaXRlZFdyYXBwZXItPmJsZW5kKGNsaWVudCwgZGVzdGluYXRpb24s
IGZyb20sIHRvLCBwcm9ncmVzcyk7CisgICAgICAgICAgICBtX3Zpc2l0ZWRXcmFwcGVyLT5ibGVu
ZChkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIG9wdGlvbnMpOwogICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIGF1dG8qIGJsZW5kaW5nUmVuZGVyU3R5bGUgPSBwcm9ncmVzcyA8IDAuNSA/IGZyb20g
OiB0bzsKLSAgICAgICAgICAgIGlmIChibGVuZGluZ1JlbmRlclN0eWxlLT5oYXNWaXNpdGVkTGlu
a0F1dG9DYXJldENvbG9yKCkpCi0gICAgICAgICAgICAgICAgZGVzdGluYXRpb24tPnNldEhhc1Zp
c2l0ZWRMaW5rQXV0b0NhcmV0Q29sb3IoKTsKKyAgICAgICAgICAgIGF1dG8mIGJsZW5kaW5nUmVu
ZGVyU3R5bGUgPSBvcHRpb25zLnByb2dyZXNzIDwgMC41ID8gZnJvbSA6IHRvOworICAgICAgICAg
ICAgaWYgKGJsZW5kaW5nUmVuZGVyU3R5bGUuaGFzVmlzaXRlZExpbmtBdXRvQ2FyZXRDb2xvcigp
KQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLnNldEhhc1Zpc2l0ZWRMaW5rQXV0b0NhcmV0
Q29sb3IoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi0+
c2V0VmlzaXRlZExpbmtDYXJldENvbG9yKGJsZW5kaW5nUmVuZGVyU3R5bGUtPnZpc2l0ZWRMaW5r
Q2FyZXRDb2xvcigpKTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5zZXRWaXNpdGVkTGlu
a0NhcmV0Q29sb3IoYmxlbmRpbmdSZW5kZXJTdHlsZS52aXNpdGVkTGlua0NhcmV0Q29sb3IoKSk7
CiAgICAgICAgIH0KICAgICB9CiB9OwpAQCAtMTM5NywxMSArMTM4MCwxMSBAQCBwdWJsaWM6CiAg
ICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHk7IH0K
IAogICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiwgY29uc3QgRmlsbExh
eWVyKikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiwgRmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKiwgY29uc3QgRmls
bExheWVyKiwgZG91YmxlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kKEZpbGxM
YXllciosIGNvbnN0IEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXllciosIGNvbnN0IEJsZW5kT3B0
aW9ucyYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3Qg
RmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAj
aWYgIUxPR19ESVNBQkxFRAotICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5
ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKiwgZG91YmxlKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciogZGVz
dGluYXRpb24sIGNvbnN0IEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXllciosIGRvdWJsZSkgY29u
c3QgPSAwOwogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC0xNDM1LDkgKzE0MTgsOSBAQCBwcm90ZWN0
ZWQ6CiAgICAgfQogCiAjaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3Qg
RmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogZnJvbSwgY29uc3QgRmlsbExheWVy
KiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHZvaWQgbG9nQmxlbmQo
Y29uc3QgRmlsbExheWVyKiBkZXN0aW5hdGlvbiwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25z
dCBGaWxsTGF5ZXIqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCiAgICAgewot
ICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5n
ICIgPDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGZy
b20pIDw8ICIgdG8gIiA8PCB2YWx1ZSh0bykgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1h
dE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJl
c3VsdCkpOworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIg
IGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8
IHZhbHVlKGZyb20pIDw8ICIgdG8gIiA8PCB2YWx1ZSh0bykgPDwgIiBhdCAiIDw8IFRleHRTdHJl
YW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8
IHZhbHVlKGRlc3RpbmF0aW9uKSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTE0NTYsOSArMTQzOSw5
IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIEZpbGxMYXllciogZGVzdGluYXRpb24sIGNv
bnN0IEZpbGxMYXllciogZnJvbSwgY29uc3QgRmlsbExheWVyKiB0bywgZG91YmxlIHByb2dyZXNz
KSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQoRmlsbExheWVyKiBkZXN0aW5hdGlvbiwgY29u
c3QgRmlsbExheWVyKiBmcm9tLCBjb25zdCBGaWxsTGF5ZXIqIHRvLCBjb25zdCBCbGVuZE9wdGlv
bnMmIG9wdGlvbnMpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICAoZGVzdGluYXRpb24tPip0
aGlzLT5tX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgdGhpcy0+dmFsdWUoZnJvbSksIHRoaXMt
PnZhbHVlKHRvKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgKGRlc3RpbmF0aW9uLT4qdGhpcy0+bV9z
ZXR0ZXIpKGJsZW5kRnVuYyh0aGlzLT52YWx1ZShmcm9tKSwgdGhpcy0+dmFsdWUodG8pLCBvcHRp
b25zKSk7CiAgICAgfQogCiAgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBGaWxsTGF5ZXIq
IGZyb20sIGNvbnN0IEZpbGxMYXllciogdG8pIGNvbnN0IGZpbmFsCkBAIC0xNDY3LDEyICsxNDUw
LDEyIEBAIHByaXZhdGU6CiAgICAgfQogCiAjaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9n
QmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogZnJvbSwgY29u
c3QgRmlsbExheWVyKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQg
bG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiBkZXN0aW5hdGlvbiwgY29uc3QgRmlsbExheWVyKiBm
cm9tLCBjb25zdCBGaWxsTGF5ZXIqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCiAg
ICAgewogICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJs
ZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRl
cjxjb25zdCBUJj46OnByb3BlcnR5KCkpCiAgICAgICAgICAgICA8PCAiIGZyb20gIiA8PCBGaWxs
TGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+Ojp2YWx1ZShmcm9tKQogICAgICAg
ICAgICAgPDwgIiB0byAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBU
Jj46OnZhbHVlKHRvKQotICAgICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1h
dE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxMYXll
clByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnZhbHVlKHJlc3VsdCkpOworICAgICAg
ICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRl
Z2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRl
cjxjb25zdCBUJj46OnZhbHVlKGRlc3RpbmF0aW9uKSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTE1
MDgsNyArMTQ5MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBmcm9tTGVuZ3RoID09IHRv
TGVuZ3RoICYmIGZyb21FZGdlID09IHRvRWRnZTsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgRmlsbExheWVyKiBkZXN0aW5h
dGlvbiwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25zdCBGaWxsTGF5ZXIqIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVuZChGaWxsTGF5ZXIqIGRlc3RpbmF0
aW9uLCBjb25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0IEZpbGxMYXllciogdG8sIGNvbnN0IEJs
ZW5kT3B0aW9ucyYgb3B0aW9ucykgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIGF1dG8gZnJv
bUxlbmd0aCA9IHZhbHVlKGZyb20pOwogICAgICAgICBhdXRvIHRvTGVuZ3RoID0gdmFsdWUodG8p
OwpAQCAtMTUyNiwxMyArMTUwOSwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAKLSAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9sZW5ndGhTZXR0ZXIpKGJsZW5kRnVuYyhj
bGllbnQsIGZyb21MZW5ndGgsIHRvTGVuZ3RoLCBwcm9ncmVzcykpOworICAgICAgICAoZGVzdGlu
YXRpb24tPiptX2xlbmd0aFNldHRlcikoYmxlbmRGdW5jKGZyb21MZW5ndGgsIHRvTGVuZ3RoLCBv
cHRpb25zKSk7CiAgICAgfQogCiAjaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQo
Y29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogZnJvbSwgY29uc3QgRmls
bExheWVyKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgbG9nQmxl
bmQoY29uc3QgRmlsbExheWVyKiBkZXN0aW5hdGlvbiwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBj
b25zdCBGaWxsTGF5ZXIqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCiAgICAgewot
ICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5n
ICIgPDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGZy
b20pIDw8ICIgdG8gIiA8PCB2YWx1ZSh0bykgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1h
dE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJl
c3VsdCkpOworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIg
IGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8
IHZhbHVlKGZyb20pIDw8ICIgdG8gIiA8PCB2YWx1ZSh0bykgPDwgIiBhdCAiIDw8IFRleHRTdHJl
YW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8
IHZhbHVlKGRlc3RpbmF0aW9uKSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTE1NTMsMTggKzE1MzYs
MTggQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgRmlsbExheWVyKiBkZXN0aW5hdGlvbiwg
Y29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25zdCBGaWxsTGF5ZXIqIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVuZChGaWxsTGF5ZXIqIGRlc3RpbmF0aW9uLCBj
b25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0IEZpbGxMYXllciogdG8sIGNvbnN0IEJsZW5kT3B0
aW9ucyYgb3B0aW9ucykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIChkZXN0aW5hdGlvbi0+
KnRoaXMtPm1fc2V0dGVyKShibGVuZEZ1bmMoY2xpZW50LCB0aGlzLT52YWx1ZShmcm9tKSwgdGhp
cy0+dmFsdWUodG8pLCBwcm9ncmVzcykpOworICAgICAgICAoZGVzdGluYXRpb24tPip0aGlzLT5t
X3NldHRlcikoYmxlbmRGdW5jKHRoaXMtPnZhbHVlKGZyb20pLCB0aGlzLT52YWx1ZSh0byksIG9w
dGlvbnMpKTsKICAgICB9CiAKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChj
b25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25zdCBGaWxs
TGF5ZXIqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgdm9pZCBsb2dC
bGVuZChjb25zdCBGaWxsTGF5ZXIqIGRlc3RpbmF0aW9uLCBjb25zdCBGaWxsTGF5ZXIqIGZyb20s
IGNvbnN0IEZpbGxMYXllciogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKICAg
ICB7CiAgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxl
bmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUoRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVy
PFQqPjo6cHJvcGVydHkoKSkKICAgICAgICAgICAgIDw8ICIgZnJvbSAiIDw8IEZpbGxMYXllclBy
b3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKGZyb20pCiAgICAgICAgICAgICA8PCAiIHRv
ICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6dmFsdWUodG8pCi0gICAg
ICAgICAgICA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0lu
dGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0
dGVyPFQqPjo6dmFsdWUocmVzdWx0KSk7CisgICAgICAgICAgICA8PCAiIGF0ICIgPDwgVGV4dFN0
cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIg
PDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6dmFsdWUoZGVzdGluYXRpb24p
KTsKICAgICB9CiAjZW5kaWYKIApAQCAtMTU5NSw5ICsxNTc4LDkgQEAgcHJpdmF0ZToKICAgICB9
CiAKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIq
IHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25zdCBGaWxsTGF5ZXIqIHRvLCBkb3Vi
bGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5
ZXIqIGRlc3RpbmF0aW9uLCBjb25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0IEZpbGxMYXllciog
dG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIExPR19XSVRI
X1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0
eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoZnJvbSkgPDwgIiB0byAiIDw8
IHZhbHVlKHRvKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGlu
Z0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgICAg
IExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBn
ZXRQcm9wZXJ0eU5hbWUodGhpcy0+cHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdGhpcy0+dmFs
dWUoZnJvbSkgPDwgIiB0byAiIDw8IHRoaXMtPnZhbHVlKHRvKSA8PCAiIGF0ICIgPDwgVGV4dFN0
cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIg
PDwgdmFsdWUoZGVzdGluYXRpb24pKTsKICAgICB9CiAjZW5kaWYKIH07CkBAIC0xNjM2LDE1ICsx
NjE5LDEzIEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBlcXVhbHMoY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBmaW5hbAorICAg
IGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25zdCBSZW5kZXJTdHlsZSYgYikg
Y29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIGlmIChhID09IGIpCisgICAgICAgIGlmICgmYSA9
PSAmYikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgYXV0byogZnJvbUxheWVyID0gJihh
LT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0gICAgICAgIGF1dG8qIHRvTGF5ZXIgPSAmKGItPiptX2xh
eWVyc0dldHRlcikoKTsKKyAgICAgICAgYXV0byogZnJvbUxheWVyID0gJihhLiptX2xheWVyc0dl
dHRlcikoKTsKKyAgICAgICAgYXV0byogdG9MYXllciA9ICYoYi4qbV9sYXllcnNHZXR0ZXIpKCk7
CiAKICAgICAgICAgd2hpbGUgKGZyb21MYXllciAmJiB0b0xheWVyKSB7CiAgICAgICAgICAgICBp
ZiAoIW1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5lcXVhbHMoZnJvbUxheWVyLCB0b0xheWVy
KSkKQEAgLTE2NTcsMTAgKzE2MzgsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCi0gICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJv
bSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBmaW5hbAorICAgIGJvb2wgY2FuSW50ZXJw
b2xhdGUoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bykgY29u
c3QgZmluYWwKICAgICB7Ci0gICAgICAgIGF1dG8qIGZyb21MYXllciA9ICYoZnJvbS0+Km1fbGF5
ZXJzR2V0dGVyKSgpOwotICAgICAgICBhdXRvKiB0b0xheWVyID0gJih0by0+Km1fbGF5ZXJzR2V0
dGVyKSgpOworICAgICAgICBhdXRvKiBmcm9tTGF5ZXIgPSAmKGZyb20uKm1fbGF5ZXJzR2V0dGVy
KSgpOworICAgICAgICBhdXRvKiB0b0xheWVyID0gJih0by4qbV9sYXllcnNHZXR0ZXIpKCk7CiAK
ICAgICAgICAgd2hpbGUgKGZyb21MYXllciAmJiB0b0xheWVyKSB7CiAgICAgICAgICAgICBpZiAo
ZnJvbUxheWVyLT5zaXplVHlwZSgpICE9IHRvTGF5ZXItPnNpemVUeXBlKCkpCkBAIC0xNjc2LDE1
ICsxNjU3LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBSZW5k
ZXJTdHlsZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5k
ZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGJsZW5k
KFJlbmRlclN0eWxlJiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0
IFJlbmRlclN0eWxlJiB0bywgY29uc3QgQmxlbmRPcHRpb25zJiBvcHRpb25zKSBjb25zdCBmaW5h
bAogICAgIHsKLSAgICAgICAgYXV0byogZnJvbUxheWVyID0gJihmcm9tLT4qbV9sYXllcnNHZXR0
ZXIpKCk7Ci0gICAgICAgIGF1dG8qIHRvTGF5ZXIgPSAmKHRvLT4qbV9sYXllcnNHZXR0ZXIpKCk7
Ci0gICAgICAgIGF1dG8qIGRzdExheWVyID0gJihkZXN0aW5hdGlvbi0+Km1fbGF5ZXJzQWNjZXNz
b3IpKCk7CisgICAgICAgIGF1dG8qIGZyb21MYXllciA9ICYoZnJvbS4qbV9sYXllcnNHZXR0ZXIp
KCk7CisgICAgICAgIGF1dG8qIHRvTGF5ZXIgPSAmKHRvLiptX2xheWVyc0dldHRlcikoKTsKKyAg
ICAgICAgYXV0byogZHN0TGF5ZXIgPSAmKGRlc3RpbmF0aW9uLiptX2xheWVyc0FjY2Vzc29yKSgp
OwogCiAgICAgICAgIHdoaWxlIChmcm9tTGF5ZXIgJiYgdG9MYXllciAmJiBkc3RMYXllcikgewot
ICAgICAgICAgICAgZHN0TGF5ZXItPnNldFNpemVUeXBlKChwcm9ncmVzcyA/IHRvTGF5ZXIgOiBm
cm9tTGF5ZXIpLT5zaXplVHlwZSgpKTsKLSAgICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlX
cmFwcGVyLT5ibGVuZChjbGllbnQsIGRzdExheWVyLCBmcm9tTGF5ZXIsIHRvTGF5ZXIsIHByb2dy
ZXNzKTsKKyAgICAgICAgICAgIGRzdExheWVyLT5zZXRTaXplVHlwZSgob3B0aW9ucy5wcm9ncmVz
cyA/IHRvTGF5ZXIgOiBmcm9tTGF5ZXIpLT5zaXplVHlwZSgpKTsKKyAgICAgICAgICAgIG1fZmls
bExheWVyUHJvcGVydHlXcmFwcGVyLT5ibGVuZChkc3RMYXllciwgZnJvbUxheWVyLCB0b0xheWVy
LCBvcHRpb25zKTsKICAgICAgICAgICAgIGZyb21MYXllciA9IGZyb21MYXllci0+bmV4dCgpOwog
ICAgICAgICAgICAgdG9MYXllciA9IHRvTGF5ZXItPm5leHQoKTsKICAgICAgICAgICAgIGRzdExh
eWVyID0gZHN0TGF5ZXItPm5leHQoKTsKQEAgLTE2OTIsMTEgKzE2NzMsMTEgQEAgcHJpdmF0ZToK
ICAgICB9CiAKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5k
ZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBjb25zdCBSZW5kZXJTdHlsZSog
cmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBsb2dCbGVuZChj
b25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBSZW5k
ZXJTdHlsZSYgZGVzdGluYXRpb24sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7
Ci0gICAgICAgIGF1dG8qIGZyb21MYXllciA9ICYoZnJvbS0+Km1fbGF5ZXJzR2V0dGVyKSgpOwot
ICAgICAgICBhdXRvKiB0b0xheWVyID0gJih0by0+Km1fbGF5ZXJzR2V0dGVyKSgpOwotICAgICAg
ICBhdXRvKiBkc3RMYXllciA9ICYocmVzdWx0LT4qbV9sYXllcnNHZXR0ZXIpKCk7CisgICAgICAg
IGF1dG8qIGZyb21MYXllciA9ICYoZnJvbS4qbV9sYXllcnNHZXR0ZXIpKCk7CisgICAgICAgIGF1
dG8qIHRvTGF5ZXIgPSAmKHRvLiptX2xheWVyc0dldHRlcikoKTsKKyAgICAgICAgYXV0byogZHN0
TGF5ZXIgPSAmKGRlc3RpbmF0aW9uLiptX2xheWVyc0dldHRlcikoKTsKIAogICAgICAgICB3aGls
ZSAoZnJvbUxheWVyICYmIHRvTGF5ZXIgJiYgZHN0TGF5ZXIpIHsKICAgICAgICAgICAgIG1fZmls
bExheWVyUHJvcGVydHlXcmFwcGVyLT5sb2dCbGVuZChkc3RMYXllciwgZnJvbUxheWVyLCB0b0xh
eWVyLCBwcm9ncmVzcyk7CkBAIC0xNzI2LDEyICsxNzA3LDEwIEBAIHB1YmxpYzoKICAgICBjb25z
dCBWZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+JiBwcm9wZXJ0eVdyYXBwZXJz
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzOyB9CiAKIHByaXZhdGU6Ci0gICAg
Ym9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBj
b25zdCBmaW5hbAorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSYgYikgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIGlmIChhID09IGIpCisg
ICAgICAgIGlmICgmYSA9PSAmYikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBp
ZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgZm9yIChh
dXRvJiB3cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKSB7CiAgICAgICAgICAgICBpZiAoIXdy
YXBwZXItPmVxdWFscyhhLCBiKSkKQEAgLTE3NDAsMTQgKzE3MTksMTQgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29u
c3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dy
ZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9u
LCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBC
bGVuZE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBmb3IgKGF1
dG8mIHdyYXBwZXIgOiBtX3Byb3BlcnR5V3JhcHBlcnMpCi0gICAgICAgICAgICB3cmFwcGVyLT5i
bGVuZChjbGllbnQsIGRlc3RpbmF0aW9uLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOworICAgICAgICAg
ICAgd3JhcHBlci0+YmxlbmQoZGVzdGluYXRpb24sIGZyb20sIHRvLCBvcHRpb25zKTsKICAgICB9
CiAKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHls
ZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBjb25zdCBSZW5kZXJTdHlsZSogZGVzdGlu
YXRpb24sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGxvZ0JsZW5kKGNv
bnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IFJlbmRl
clN0eWxlJiBkZXN0aW5hdGlvbiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAogICAgIHsK
ICAgICAgICAgZm9yIChhdXRvJiB3cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKQogICAgICAg
ICAgICAgd3JhcHBlci0+bG9nQmxlbmQoZnJvbSwgdG8sIGRlc3RpbmF0aW9uLCBwcm9ncmVzcyk7
CkBAIC0xNzY2LDMwICsxNzQ1LDI4IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
Ym9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBj
b25zdCBmaW5hbAorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSYgYikgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIGlmIChhID09IGIpCisg
ICAgICAgIGlmICgmYSA9PSAmYikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBp
ZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgcmV0dXJu
IGEtPmZsZXhCYXNpcygpID09IGItPmZsZXhCYXNpcygpICYmIGEtPmZsZXhHcm93KCkgPT0gYi0+
ZmxleEdyb3coKSAmJiBhLT5mbGV4U2hyaW5rKCkgPT0gYi0+ZmxleFNocmluaygpOworICAgICAg
ICByZXR1cm4gYS5mbGV4QmFzaXMoKSA9PSBiLmZsZXhCYXNpcygpICYmIGEuZmxleEdyb3coKSA9
PSBiLmZsZXhHcm93KCkgJiYgYS5mbGV4U2hyaW5rKCkgPT0gYi5mbGV4U2hyaW5rKCk7CiAgICAg
fQogCi0gICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29u
c3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBmaW5hbAorICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUo
Y29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bykgY29uc3QgZmlu
YWwKICAgICB7Ci0gICAgICAgIHJldHVybiBmcm9tLT5mbGV4R3JvdygpICE9IHRvLT5mbGV4R3Jv
dygpICYmIGZyb20tPmZsZXhTaHJpbmsoKSAhPSB0by0+ZmxleFNocmluaygpICYmIGNhbkludGVy
cG9sYXRlTGVuZ3Rocyhmcm9tLT5mbGV4QmFzaXMoKSwgdG8tPmZsZXhCYXNpcygpLCBmYWxzZSk7
CisgICAgICAgIHJldHVybiBmcm9tLmZsZXhHcm93KCkgIT0gdG8uZmxleEdyb3coKSAmJiBmcm9t
LmZsZXhTaHJpbmsoKSAhPSB0by5mbGV4U2hyaW5rKCkgJiYgY2FuSW50ZXJwb2xhdGVMZW5ndGhz
KGZyb20uZmxleEJhc2lzKCksIHRvLmZsZXhCYXNpcygpLCBmYWxzZSk7CiAgICAgfQogCi0gICAg
dm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRl
clN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRl
clN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQo
UmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3Qg
UmVuZGVyU3R5bGUmIHRvLCBjb25zdCBCbGVuZE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0IGZpbmFs
CiAgICAgewotICAgICAgICBkZXN0aW5hdGlvbi0+c2V0RmxleEJhc2lzKGJsZW5kRnVuYyhjbGll
bnQsIGZyb20tPmZsZXhCYXNpcygpLCB0by0+ZmxleEJhc2lzKCksIHByb2dyZXNzKSk7Ci0gICAg
ICAgIGRlc3RpbmF0aW9uLT5zZXRGbGV4R3JvdyhibGVuZEZ1bmMoY2xpZW50LCBmcm9tLT5mbGV4
R3JvdygpLCB0by0+ZmxleEdyb3coKSwgcHJvZ3Jlc3MpKTsKLSAgICAgICAgZGVzdGluYXRpb24t
PnNldEZsZXhTaHJpbmsoYmxlbmRGdW5jKGNsaWVudCwgZnJvbS0+ZmxleFNocmluaygpLCB0by0+
ZmxleFNocmluaygpLCBwcm9ncmVzcykpOworICAgICAgICBkZXN0aW5hdGlvbi5zZXRGbGV4QmFz
aXMoYmxlbmRGdW5jKGZyb20uZmxleEJhc2lzKCksIHRvLmZsZXhCYXNpcygpLCBvcHRpb25zKSk7
CisgICAgICAgIGRlc3RpbmF0aW9uLnNldEZsZXhHcm93KGJsZW5kRnVuYyhmcm9tLmZsZXhHcm93
KCksIHRvLmZsZXhHcm93KCksIG9wdGlvbnMpKTsKKyAgICAgICAgZGVzdGluYXRpb24uc2V0Rmxl
eFNocmluayhibGVuZEZ1bmMoZnJvbS5mbGV4U2hyaW5rKCksIHRvLmZsZXhTaHJpbmsoKSwgb3B0
aW9ucykpOwogICAgIH0KIAogI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSos
IGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJl
bmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGRvdWJs
ZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBiZXR0ZXIg
bG9nZ2luZy4KICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAi
ICBibGVuZGluZyBmbGV4IGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGlu
Z0ludGVnZXJzKHByb2dyZXNzKSk7CkBAIC0xODA5LDIyICsxNzg2LDIwIEBAIHB1YmxpYzoKICAg
ICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBmaW5hbAorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJl
bmRlclN0eWxlJiBhLCBjb25zdCBSZW5kZXJTdHlsZSYgYikgY29uc3QgZmluYWwKICAgICB7Ci0g
ICAgICAgIGlmIChhID09IGIpCisgICAgICAgIGlmICgmYSA9PSAmYikKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgaWYgKChhLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkgIT0gKGItPiptX3Bh
aW50VHlwZUdldHRlcikoKSkKKyAgICAgICAgaWYgKChhLiptX3BhaW50VHlwZUdldHRlcikoKSAh
PSAoYi4qbV9wYWludFR5cGVHZXR0ZXIpKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAgICAgLy8gV2Ugb25seSBzdXBwb3J0IGFuaW1hdGlvbnMgYmV0d2VlbiBTVkdQYWludHMg
dGhhdCBhcmUgcHVyZSBDb2xvciB2YWx1ZXMuCiAgICAgICAgIC8vIEZvciBldmVyeXRoaW5nIGVs
c2Ugd2UgbXVzdCByZXR1cm4gdHJ1ZSBmb3IgdGhpcyBtZXRob2QsIG90aGVyd2lzZQogICAgICAg
ICAvLyB3ZSB3aWxsIHRyeSB0byBhbmltYXRlIGJldHdlZW4gdmFsdWVzIGZvcmV2ZXIuCi0gICAg
ICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpID09IFNWR1BhaW50VHlwZTo6UkdCQ29s
b3IpIHsKLSAgICAgICAgICAgIENvbG9yIGZyb21Db2xvciA9IChhLT4qbV9nZXR0ZXIpKCk7Ci0g
ICAgICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAgaWYg
KChhLiptX3BhaW50VHlwZUdldHRlcikoKSA9PSBTVkdQYWludFR5cGU6OlJHQkNvbG9yKSB7Cisg
ICAgICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS4qbV9nZXR0ZXIpKCk7CisgICAgICAgICAg
ICBDb2xvciB0b0NvbG9yID0gKGIuKm1fZ2V0dGVyKSgpOwogCiAgICAgICAgICAgICBpZiAoIWZy
b21Db2xvci5pc1ZhbGlkKCkgJiYgIXRvQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMTgzOSwxNCArMTgxNCwxNCBAQCBwcml2YXRlOgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5k
ZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNv
bnN0IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0
IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IEJsZW5kT3B0
aW9ucyYgb3B0aW9ucykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIGlmICgoZnJvbS0+Km1f
cGFpbnRUeXBlR2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IKLSAgICAgICAgICAg
IHx8ICh0by0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3Ip
CisgICAgICAgIGlmICgoZnJvbS4qbV9wYWludFR5cGVHZXR0ZXIpKCkgIT0gU1ZHUGFpbnRUeXBl
OjpSR0JDb2xvcgorICAgICAgICAgICAgfHwgKHRvLiptX3BhaW50VHlwZUdldHRlcikoKSAhPSBT
VkdQYWludFR5cGU6OlJHQkNvbG9yKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIENv
bG9yIGZyb21Db2xvciA9IChmcm9tLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIENvbG9yIHRvQ29s
b3IgPSAodG8tPiptX2dldHRlcikoKTsKKyAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gKGZyb20u
Km1fZ2V0dGVyKSgpOworICAgICAgICBDb2xvciB0b0NvbG9yID0gKHRvLiptX2dldHRlcikoKTsK
IAogICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkgJiYgIXRvQ29sb3IuaXNWYWxpZCgp
KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTg1NSwxMSArMTgzMCwxMSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgZnJvbUNvbG9yID0gQ29sb3IoKTsKICAgICAgICAgaWYgKCF0b0NvbG9yLmlz
VmFsaWQoKSkKICAgICAgICAgICAgIHRvQ29sb3IgPSBDb2xvcigpOwotICAgICAgICAoZGVzdGlu
YXRpb24tPiptX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgZnJvbUNvbG9yLCB0b0NvbG9yLCBw
cm9ncmVzcykpOworICAgICAgICAoZGVzdGluYXRpb24uKm1fc2V0dGVyKShibGVuZEZ1bmMoZnJv
bUNvbG9yLCB0b0NvbG9yLCBvcHRpb25zKSk7CiAgICAgfQogCiAjaWYgIUxPR19ESVNBQkxFRAot
ICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSos
IGNvbnN0IFJlbmRlclN0eWxlKiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZv
aWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0
IFJlbmRlclN0eWxlJiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAg
ICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgogICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5p
bWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nIFNWR1BhaW50IGF0ICIgPDwgVGV4dFN0cmVh
bTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7CkBAIC0xODgwLDMx
ICsxODU1LDI5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBjYW5JbnRl
cnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvKSBj
b25zdCBmaW5hbAorICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUmIGZy
b20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIHJl
dHVybiBmcm9tLT5mb250SXRhbGljKCkgJiYgdG8tPmZvbnRJdGFsaWMoKSAmJiBmcm9tLT5mb250
RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhpczo6c2xudCAmJiB0
by0+Zm9udERlc2NyaXB0aW9uKCkuZm9udFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4aXM6OnNs
bnQ7CisgICAgICAgIHJldHVybiBmcm9tLmZvbnRJdGFsaWMoKSAmJiB0by5mb250SXRhbGljKCkg
JiYgZnJvbS5mb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhp
czo6c2xudCAmJiB0by5mb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0
eWxlQXhpczo6c2xudDsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBS
ZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNv
bnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IEJsZW5k
T3B0aW9ucyYgb3B0aW9ucykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIGF1dG8gZGlzY3Jl
dGUgPSAhY2FuSW50ZXJwb2xhdGUoZnJvbSwgdG8pOwotCiAgICAgICAgIGF1dG8gYmxlbmRlZFN0
eWxlQXhpcyA9IEZvbnRTdHlsZUF4aXM6OnNsbnQ7Ci0gICAgICAgIGlmIChkaXNjcmV0ZSkKLSAg
ICAgICAgICAgIGJsZW5kZWRTdHlsZUF4aXMgPSAocHJvZ3Jlc3MgPCAwLjUgPyBmcm9tIDogdG8p
LT5mb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCk7CisgICAgICAgIGlmIChvcHRpb25z
LmlzRGlzY3JldGUpCisgICAgICAgICAgICBibGVuZGVkU3R5bGVBeGlzID0gKG9wdGlvbnMucHJv
Z3Jlc3MgPCAwLjUgPyBmcm9tIDogdG8pLmZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMo
KTsKIAotICAgICAgICBhdXRvIGZyb21Gb250SXRhbGljID0gZnJvbS0+Zm9udEl0YWxpYygpOwot
ICAgICAgICBhdXRvIHRvRm9udEl0YWxpYyA9IHRvLT5mb250SXRhbGljKCk7Ci0gICAgICAgIGF1
dG8gYmxlbmRlZEZvbnRJdGFsaWMgPSBwcm9ncmVzcyA8IDAuNSA/IGZyb21Gb250SXRhbGljIDog
dG9Gb250SXRhbGljOwotICAgICAgICBpZiAoIWRpc2NyZXRlKQotICAgICAgICAgICAgYmxlbmRl
ZEZvbnRJdGFsaWMgPSBibGVuZEZ1bmMoY2xpZW50LCBmcm9tRm9udEl0YWxpYywgdG9Gb250SXRh
bGljLCBwcm9ncmVzcyk7CisgICAgICAgIGF1dG8gZnJvbUZvbnRJdGFsaWMgPSBmcm9tLmZvbnRJ
dGFsaWMoKTsKKyAgICAgICAgYXV0byB0b0ZvbnRJdGFsaWMgPSB0by5mb250SXRhbGljKCk7Cisg
ICAgICAgIGF1dG8gYmxlbmRlZEZvbnRJdGFsaWMgPSBvcHRpb25zLnByb2dyZXNzIDwgMC41ID8g
ZnJvbUZvbnRJdGFsaWMgOiB0b0ZvbnRJdGFsaWM7CisgICAgICAgIGlmICghb3B0aW9ucy5pc0Rp
c2NyZXRlKQorICAgICAgICAgICAgYmxlbmRlZEZvbnRJdGFsaWMgPSBibGVuZEZ1bmMoZnJvbUZv
bnRJdGFsaWMsIHRvRm9udEl0YWxpYywgb3B0aW9ucyk7CiAKLSAgICAgICAgRm9udFNlbGVjdG9y
KiBjdXJyZW50Rm9udFNlbGVjdG9yID0gZGVzdGluYXRpb24tPmZvbnRDYXNjYWRlKCkuZm9udFNl
bGVjdG9yKCk7Ci0gICAgICAgIGF1dG8gZGVzY3JpcHRpb24gPSBkZXN0aW5hdGlvbi0+Zm9udERl
c2NyaXB0aW9uKCk7CisgICAgICAgIGF1dG8qIGN1cnJlbnRGb250U2VsZWN0b3IgPSBkZXN0aW5h
dGlvbi5mb250Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpOworICAgICAgICBhdXRvIGRlc2NyaXB0
aW9uID0gZGVzdGluYXRpb24uZm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIGRlc2NyaXB0aW9u
LnNldEl0YWxpYyhibGVuZGVkRm9udEl0YWxpYyk7CiAgICAgICAgIGRlc2NyaXB0aW9uLnNldEZv
bnRTdHlsZUF4aXMoYmxlbmRlZFN0eWxlQXhpcyk7Ci0gICAgICAgIGRlc3RpbmF0aW9uLT5zZXRG
b250RGVzY3JpcHRpb24oV1RGTW92ZShkZXNjcmlwdGlvbikpOwotICAgICAgICBkZXN0aW5hdGlv
bi0+Zm9udENhc2NhZGUoKS51cGRhdGUoY3VycmVudEZvbnRTZWxlY3Rvcik7CisgICAgICAgIGRl
c3RpbmF0aW9uLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGRlc2NyaXB0aW9uKSk7CisgICAg
ICAgIGRlc3RpbmF0aW9uLmZvbnRDYXNjYWRlKCkudXBkYXRlKGN1cnJlbnRGb250U2VsZWN0b3Ip
OwogICAgIH0KIH07CiAKQEAgLTE5MjEsMjggKzE4OTQsMjggQEAgcHVibGljOgogICAgIH0KIAog
cHJpdmF0ZToKLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9t
LCBjb25zdCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCisgICAgYm9vbCBjYW5JbnRlcnBv
bGF0ZShjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvKSBjb25z
dCBmaW5hbAogICAgIHsKLSAgICAgICAgcmV0dXJuICEoZnJvbS0+Km1fYXV0b0dldHRlcikoKSAm
JiAhKHRvLT4qbV9hdXRvR2V0dGVyKSgpOworICAgICAgICByZXR1cm4gIShmcm9tLiptX2F1dG9H
ZXR0ZXIpKCkgJiYgISh0by4qbV9hdXRvR2V0dGVyKSgpOwogICAgIH0KIAotICAgIHZvaWQgYmxl
bmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBSZW5kZXJTdHlsZSog
ZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSog
dG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGJsZW5kKFJlbmRlclN0
eWxlJiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0
eWxlJiB0bywgY29uc3QgQmxlbmRPcHRpb25zJiBvcHRpb25zKSBjb25zdCBmaW5hbAogICAgIHsK
LSAgICAgICAgYXV0byBibGVuZGVkVmFsdWUgPSBibGVuZEZ1bmMoY2xpZW50LCB0aGlzLT52YWx1
ZShmcm9tKSwgdGhpcy0+dmFsdWUodG8pLCBwcm9ncmVzcyk7CisgICAgICAgIGF1dG8gYmxlbmRl
ZFZhbHVlID0gYmxlbmRGdW5jKHRoaXMtPnZhbHVlKGZyb20pLCB0aGlzLT52YWx1ZSh0byksIG9w
dGlvbnMpOwogICAgICAgICBpZiAobV9taW5WYWx1ZSkKICAgICAgICAgICAgIGJsZW5kZWRWYWx1
ZSA9IGJsZW5kZWRWYWx1ZSA+ICptX21pblZhbHVlID8gYmxlbmRlZFZhbHVlIDogKm1fbWluVmFs
dWU7Ci0gICAgICAgIChkZXN0aW5hdGlvbi0+KnRoaXMtPm1fc2V0dGVyKShibGVuZGVkVmFsdWUp
OworICAgICAgICAoZGVzdGluYXRpb24uKnRoaXMtPm1fc2V0dGVyKShibGVuZGVkVmFsdWUpOwog
Ci0gICAgICAgIGlmIChjYW5JbnRlcnBvbGF0ZShmcm9tLCB0bykpCisgICAgICAgIGlmICghb3B0
aW9ucy5pc0Rpc2NyZXRlKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEFTU0VSVCgh
cHJvZ3Jlc3MgfHwgcHJvZ3Jlc3MgPT0gMS4wKTsKLSAgICAgICAgaWYgKCFwcm9ncmVzcykgewot
ICAgICAgICAgICAgaWYgKChmcm9tLT4qbV9hdXRvR2V0dGVyKSgpKQotICAgICAgICAgICAgICAg
IChkZXN0aW5hdGlvbi0+Km1fYXV0b1NldHRlcikoKTsKKyAgICAgICAgQVNTRVJUKCFvcHRpb25z
LnByb2dyZXNzIHx8IG9wdGlvbnMucHJvZ3Jlc3MgPT0gMS4wKTsKKyAgICAgICAgaWYgKCFvcHRp
b25zLnByb2dyZXNzKSB7CisgICAgICAgICAgICBpZiAoKGZyb20uKm1fYXV0b0dldHRlcikoKSkK
KyAgICAgICAgICAgICAgICAoZGVzdGluYXRpb24uKm1fYXV0b1NldHRlcikoKTsKICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGlmICgodG8tPiptX2F1dG9HZXR0ZXIpKCkpCi0gICAgICAg
ICAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9hdXRvU2V0dGVyKSgpOworICAgICAgICAgICAgaWYg
KCh0by4qbV9hdXRvR2V0dGVyKSgpKQorICAgICAgICAgICAgICAgIChkZXN0aW5hdGlvbi4qbV9h
dXRvU2V0dGVyKSgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xOTYwLDEwICsxOTMzLDEwIEBA
IHB1YmxpYzoKICAgICB9CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBj
b25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJv
Z3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGlu
YXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNv
bnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucykgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAg
IGF1dG8gYmxlbmRlZFZhbHVlID0gYmxlbmRGdW5jKGNsaWVudCwgdmFsdWUoZnJvbSksIHZhbHVl
KHRvKSwgcHJvZ3Jlc3MpOwotICAgICAgICAoZGVzdGluYXRpb24tPiptX3NldHRlcikoYmxlbmRl
ZFZhbHVlID4gMCA/IGJsZW5kZWRWYWx1ZSA6IDApOworICAgICAgICBhdXRvIGJsZW5kZWRWYWx1
ZSA9IGJsZW5kRnVuYyh2YWx1ZShmcm9tKSwgdmFsdWUodG8pLCBvcHRpb25zKTsKKyAgICAgICAg
KGRlc3RpbmF0aW9uLiptX3NldHRlcikoYmxlbmRlZFZhbHVlID4gMCA/IGJsZW5kZWRWYWx1ZSA6
IDApOwogICAgIH0KIH07CiAKQEAgLTE5NzYsMTYgKzE5NDksMTYgQEAgcHVibGljOgogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBm
cm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCisgICAgYm9vbCBjYW5JbnRl
cnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvKSBj
b25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgcmV0dXJuIGZyb20tPnZlcnRpY2FsQWxpZ24oKSA9
PSBWZXJ0aWNhbEFsaWduOjpMZW5ndGggJiYgdG8tPnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNh
bEFsaWduOjpMZW5ndGggJiYgTGVuZ3RoUHJvcGVydHlXcmFwcGVyOjpjYW5JbnRlcnBvbGF0ZShm
cm9tLCB0byk7CisgICAgICAgIHJldHVybiBmcm9tLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNh
bEFsaWduOjpMZW5ndGggJiYgdG8udmVydGljYWxBbGlnbigpID09IFZlcnRpY2FsQWxpZ246Okxl
bmd0aCAmJiBMZW5ndGhQcm9wZXJ0eVdyYXBwZXI6OmNhbkludGVycG9sYXRlKGZyb20sIHRvKTsK
ICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJv
bSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisg
ICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxl
JiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9u
cykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIExlbmd0aFByb3BlcnR5V3JhcHBlcjo6Ymxl
bmQoY2xpZW50LCBkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIHByb2dyZXNzKTsKLSAgICAgICAgYXV0
byogYmxlbmRpbmdTdHlsZSA9ICFjYW5JbnRlcnBvbGF0ZShmcm9tLCB0bykgJiYgcHJvZ3Jlc3Mg
PyB0byA6IGZyb207Ci0gICAgICAgIGRlc3RpbmF0aW9uLT5zZXRWZXJ0aWNhbEFsaWduKGJsZW5k
aW5nU3R5bGUtPnZlcnRpY2FsQWxpZ24oKSk7CisgICAgICAgIExlbmd0aFByb3BlcnR5V3JhcHBl
cjo6YmxlbmQoZGVzdGluYXRpb24sIGZyb20sIHRvLCBvcHRpb25zKTsKKyAgICAgICAgYXV0byYg
YmxlbmRpbmdTdHlsZSA9IG9wdGlvbnMuaXNEaXNjcmV0ZSAmJiBvcHRpb25zLnByb2dyZXNzID8g
dG8gOiBmcm9tOworICAgICAgICBkZXN0aW5hdGlvbi5zZXRWZXJ0aWNhbEFsaWduKGJsZW5kaW5n
U3R5bGUudmVydGljYWxBbGlnbigpKTsKICAgICB9CiB9OwogCkBAIC0xOTk4LDIxICsxOTcxLDIx
IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShj
b25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBmaW5h
bAorICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0
IFJlbmRlclN0eWxlJiB0bykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIGlmIChmcm9tLT50
ZXh0SW5kZW50TGluZSgpICE9IHRvLT50ZXh0SW5kZW50TGluZSgpKQorICAgICAgICBpZiAoZnJv
bS50ZXh0SW5kZW50TGluZSgpICE9IHRvLnRleHRJbmRlbnRMaW5lKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChmcm9tLT50ZXh0SW5kZW50VHlwZSgpICE9IHRvLT50
ZXh0SW5kZW50VHlwZSgpKQorICAgICAgICBpZiAoZnJvbS50ZXh0SW5kZW50VHlwZSgpICE9IHRv
LnRleHRJbmRlbnRUeXBlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJl
dHVybiBMZW5ndGhQcm9wZXJ0eVdyYXBwZXI6OmNhbkludGVycG9sYXRlKGZyb20sIHRvKTsKICAg
ICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNs
aWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwg
Y29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAg
dm9pZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBm
cm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucykg
Y29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIGF1dG8qIGJsZW5kaW5nU3R5bGUgPSAhY2FuSW50
ZXJwb2xhdGUoZnJvbSwgdG8pICYmIHByb2dyZXNzID8gdG8gOiBmcm9tOwotICAgICAgICBkZXN0
aW5hdGlvbi0+c2V0VGV4dEluZGVudExpbmUoYmxlbmRpbmdTdHlsZS0+dGV4dEluZGVudExpbmUo
KSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uLT5zZXRUZXh0SW5kZW50VHlwZShibGVuZGluZ1N0eWxl
LT50ZXh0SW5kZW50VHlwZSgpKTsKLSAgICAgICAgTGVuZ3RoUHJvcGVydHlXcmFwcGVyOjpibGVu
ZChjbGllbnQsIGRlc3RpbmF0aW9uLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOworICAgICAgICBhdXRv
JiBibGVuZGluZ1N0eWxlID0gb3B0aW9ucy5pc0Rpc2NyZXRlICYmIG9wdGlvbnMucHJvZ3Jlc3Mg
PyB0byA6IGZyb207CisgICAgICAgIGRlc3RpbmF0aW9uLnNldFRleHRJbmRlbnRMaW5lKGJsZW5k
aW5nU3R5bGUudGV4dEluZGVudExpbmUoKSk7CisgICAgICAgIGRlc3RpbmF0aW9uLnNldFRleHRJ
bmRlbnRUeXBlKGJsZW5kaW5nU3R5bGUudGV4dEluZGVudFR5cGUoKSk7CisgICAgICAgIExlbmd0
aFByb3BlcnR5V3JhcHBlcjo6YmxlbmQoZGVzdGluYXRpb24sIGZyb20sIHRvLCBvcHRpb25zKTsK
ICAgICB9CiB9OwogCkBAIC0yMDI1LDE5ICsxOTk4LDE5IEBAIHB1YmxpYzoKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwg
Y29uc3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBmaW5hbAorICAgIGJvb2wgY2FuSW50ZXJwb2xh
dGUoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bykgY29uc3Qg
ZmluYWwKICAgICB7Ci0gICAgICAgIGlmICghZnJvbS0+aGFzUGVyc3BlY3RpdmUoKSB8fCAhdG8t
Pmhhc1BlcnNwZWN0aXZlKCkpCisgICAgICAgIGlmICghZnJvbS5oYXNQZXJzcGVjdGl2ZSgpIHx8
ICF0by5oYXNQZXJzcGVjdGl2ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICByZXR1cm4gTm9uTmVnYXRpdmVGbG9hdFByb3BlcnR5V3JhcHBlcjo6Y2FuSW50ZXJwb2xhdGUo
ZnJvbSwgdG8pOwogICAgIH0KIAotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogY2xpZW50LCBSZW5kZXJTdHlsZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRl
clN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29u
c3QgZmluYWwKKyAgICB2b2lkIGJsZW5kKFJlbmRlclN0eWxlJiBkZXN0aW5hdGlvbiwgY29uc3Qg
UmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bywgY29uc3QgQmxlbmRPcHRp
b25zJiBvcHRpb25zKSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgaWYgKCFjYW5JbnRlcnBv
bGF0ZShmcm9tLCB0bykpCi0gICAgICAgICAgICAoZGVzdGluYXRpb24tPiptX3NldHRlcikocHJv
Z3Jlc3MgPyB2YWx1ZSh0bykgOiB2YWx1ZShmcm9tKSk7CisgICAgICAgIGlmIChvcHRpb25zLmlz
RGlzY3JldGUpCisgICAgICAgICAgICAoZGVzdGluYXRpb24uKm1fc2V0dGVyKShvcHRpb25zLnBy
b2dyZXNzID8gdmFsdWUodG8pIDogdmFsdWUoZnJvbSkpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBOb25OZWdhdGl2ZUZsb2F0UHJvcGVydHlXcmFwcGVyOjpibGVuZChjbGllbnQsIGRlc3Rp
bmF0aW9uLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOworICAgICAgICAgICAgTm9uTmVnYXRpdmVGbG9h
dFByb3BlcnR5V3JhcHBlcjo6YmxlbmQoZGVzdGluYXRpb24sIGZyb20sIHRvLCBvcHRpb25zKTsK
ICAgICB9CiB9OwogCkBAIC0yMDUwLDE3ICsyMDIzLDE3IEBAIHB1YmxpYzoKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwg
Y29uc3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBmaW5hbAorICAgIGJvb2wgY2FuSW50ZXJwb2xh
dGUoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bykgY29uc3Qg
ZmluYWwKICAgICB7CiAgICAgICAgIHJldHVybiB2YWx1ZShmcm9tKS5pc1NwYWNlcygpID09IHZh
bHVlKHRvKS5pc1NwYWNlcygpOwogICAgIH0KIAotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJv
cGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBSZW5kZXJTdHlsZSogZGVzdGluYXRpb24sIGNv
bnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9n
cmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGJsZW5kKFJlbmRlclN0eWxlJiBkZXN0aW5hdGlv
biwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bywgY29uc3Qg
QmxlbmRPcHRpb25zJiBvcHRpb25zKSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgaWYgKCFj
YW5JbnRlcnBvbGF0ZShmcm9tLCB0bykpCi0gICAgICAgICAgICAoZGVzdGluYXRpb24tPiptX3Nl
dHRlcikocHJvZ3Jlc3MgPyB2YWx1ZSh0bykgOiB2YWx1ZShmcm9tKSk7CisgICAgICAgIGlmIChv
cHRpb25zLmlzRGlzY3JldGUpCisgICAgICAgICAgICAoZGVzdGluYXRpb24uKm1fc2V0dGVyKShv
cHRpb25zLnByb2dyZXNzID8gdmFsdWUodG8pIDogdmFsdWUoZnJvbSkpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBQcm9wZXJ0eVdyYXBwZXI6OmJsZW5kKGNsaWVudCwgZGVzdGluYXRpb24s
IGZyb20sIHRvLCBwcm9ncmVzcyk7CisgICAgICAgICAgICBQcm9wZXJ0eVdyYXBwZXI6OmJsZW5k
KGRlc3RpbmF0aW9uLCBmcm9tLCB0bywgb3B0aW9ucyk7CiAgICAgfQogfTsKIApAQCAtMjA3Miw0
MSArMjA0NSwzOSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIGJvb2wgZXF1YWxzKGNv
bnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QgZmluYWwKKyAg
ICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwgY29uc3QgUmVuZGVyU3R5bGUmIGIp
IGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICBpZiAoJmEg
PT0gJmIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFiKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHJldHVybiBhLT5hc3BlY3RSYXRp
b1R5cGUoKSA9PSBiLT5hc3BlY3RSYXRpb1R5cGUoKSAmJiBhLT5hc3BlY3RSYXRpb1dpZHRoKCkg
PT0gYi0+YXNwZWN0UmF0aW9XaWR0aCgpICYmIGEtPmFzcGVjdFJhdGlvSGVpZ2h0KCkgPT0gYi0+
YXNwZWN0UmF0aW9IZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIGEuYXNwZWN0UmF0aW9UeXBlKCkg
PT0gYi5hc3BlY3RSYXRpb1R5cGUoKSAmJiBhLmFzcGVjdFJhdGlvV2lkdGgoKSA9PSBiLmFzcGVj
dFJhdGlvV2lkdGgoKSAmJiBhLmFzcGVjdFJhdGlvSGVpZ2h0KCkgPT0gYi5hc3BlY3RSYXRpb0hl
aWdodCgpOwogICAgIH0KIAotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5
bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bykgY29uc3QgZmluYWwKKyAgICBib29sIGNh
bkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYg
dG8pIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICByZXR1cm4gKGZyb20tPmFzcGVjdFJhdGlv
VHlwZSgpID09IEFzcGVjdFJhdGlvVHlwZTo6UmF0aW8gJiYgdG8tPmFzcGVjdFJhdGlvVHlwZSgp
ID09IEFzcGVjdFJhdGlvVHlwZTo6UmF0aW8pIHx8IChmcm9tLT5hc3BlY3RSYXRpb1R5cGUoKSA9
PSBBc3BlY3RSYXRpb1R5cGU6OkF1dG9BbmRSYXRpbyAmJiB0by0+YXNwZWN0UmF0aW9UeXBlKCkg
PT0gQXNwZWN0UmF0aW9UeXBlOjpBdXRvQW5kUmF0aW8pOworICAgICAgICByZXR1cm4gKGZyb20u
YXNwZWN0UmF0aW9UeXBlKCkgPT0gQXNwZWN0UmF0aW9UeXBlOjpSYXRpbyAmJiB0by5hc3BlY3RS
YXRpb1R5cGUoKSA9PSBBc3BlY3RSYXRpb1R5cGU6OlJhdGlvKSB8fCAoZnJvbS5hc3BlY3RSYXRp
b1R5cGUoKSA9PSBBc3BlY3RSYXRpb1R5cGU6OkF1dG9BbmRSYXRpbyAmJiB0by5hc3BlY3RSYXRp
b1R5cGUoKSA9PSBBc3BlY3RSYXRpb1R5cGU6OkF1dG9BbmRSYXRpbyk7CiAgICAgfQogCiAjaWYg
IUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20s
IGNvbnN0IFJlbmRlclN0eWxlKiB0bywgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91Ymxl
IHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5
bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bywgY29uc3QgUmVuZGVyU3R5bGUmIGRlc3Rp
bmF0aW9uLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBMT0df
V0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJv
cGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IGZyb20tPmxvZ2ljYWxBc3BlY3RS
YXRpbygpIDw8ICIgdG8gIiA8PCB0by0+bG9naWNhbEFzcGVjdFJhdGlvKCkgPDwgIiBhdCAiIDw8
IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwg
IiAtPiAiIDw8IHJlc3VsdC0+bG9naWNhbEFzcGVjdFJhdGlvKCkpOworICAgICAgICBMT0dfV0lU
SF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVy
dHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IGZyb20ubG9naWNhbEFzcGVjdFJhdGlv
KCkgPDwgIiB0byAiIDw8IHRvLmxvZ2ljYWxBc3BlY3RSYXRpbygpIDw8ICIgYXQgIiA8PCBUZXh0
U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4g
IiA8PCBkZXN0aW5hdGlvbi5sb2dpY2FsQXNwZWN0UmF0aW8oKSk7CiAgICAgfQogI2VuZGlmCiAK
LSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBSZW5kZXJT
dHlsZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJT
dHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGJsZW5kKFJl
bmRlclN0eWxlJiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJl
bmRlclN0eWxlJiB0bywgY29uc3QgQmxlbmRPcHRpb25zJiBvcHRpb25zKSBjb25zdCBmaW5hbAog
ICAgIHsKLSAgICAgICAgZGVzdGluYXRpb24tPnNldEFzcGVjdFJhdGlvVHlwZShwcm9ncmVzcyA8
IDAuNSA/IGZyb20tPmFzcGVjdFJhdGlvVHlwZSgpIDogdG8tPmFzcGVjdFJhdGlvVHlwZSgpKTsK
LSAgICAgICAgaWYgKGNhbkludGVycG9sYXRlKGZyb20sIHRvKSkgewotICAgICAgICAgICAgYXV0
byBhc3BlY3RSYXRpb0RzdCA9IFdlYkNvcmU6OmJsZW5kKGxvZyhmcm9tLT5sb2dpY2FsQXNwZWN0
UmF0aW8oKSksIGxvZyh0by0+bG9naWNhbEFzcGVjdFJhdGlvKCkpLCBwcm9ncmVzcyk7Ci0gICAg
ICAgICAgICBkZXN0aW5hdGlvbi0+c2V0QXNwZWN0UmF0aW8oZXhwKGFzcGVjdFJhdGlvRHN0KSwg
MSk7CisgICAgICAgIGRlc3RpbmF0aW9uLnNldEFzcGVjdFJhdGlvVHlwZShvcHRpb25zLnByb2dy
ZXNzIDwgMC41ID8gZnJvbS5hc3BlY3RSYXRpb1R5cGUoKSA6IHRvLmFzcGVjdFJhdGlvVHlwZSgp
KTsKKyAgICAgICAgaWYgKCFvcHRpb25zLmlzRGlzY3JldGUpIHsKKyAgICAgICAgICAgIGF1dG8g
YXNwZWN0UmF0aW9Ec3QgPSBXZWJDb3JlOjpibGVuZChsb2coZnJvbS5sb2dpY2FsQXNwZWN0UmF0
aW8oKSksIGxvZyh0by5sb2dpY2FsQXNwZWN0UmF0aW8oKSksIG9wdGlvbnMpOworICAgICAgICAg
ICAgZGVzdGluYXRpb24uc2V0QXNwZWN0UmF0aW8oZXhwKGFzcGVjdFJhdGlvRHN0KSwgMSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gRm9yIGF1dG8vYXV0by16
ZXJvIGFzcGVjdC1yYXRpbyB3ZSB1c2UgZGlzY3JldGUgdmFsdWVzLCB3ZSBjYW4ndCB1c2UgZ2Vu
ZXJhbAogICAgICAgICAvLyBsb2dpYyBzaW5jZSBsb2dpY2FsQXNwZWN0UmF0aW8gYXNzZXJ0cyBv
biBhc3BlY3QtcmF0aW8gdHlwZS4KLSAgICAgICAgQVNTRVJUKCFwcm9ncmVzcyB8fCBwcm9ncmVz
cyA9PSAxKTsKLSAgICAgICAgYXV0byogYXBwbGljYWJsZVN0eWxlID0gcHJvZ3Jlc3MgPyB0byA6
IGZyb207Ci0gICAgICAgIGRlc3RpbmF0aW9uLT5zZXRBc3BlY3RSYXRpbyhhcHBsaWNhYmxlU3R5
bGUtPmFzcGVjdFJhdGlvV2lkdGgoKSwgYXBwbGljYWJsZVN0eWxlLT5hc3BlY3RSYXRpb0hlaWdo
dCgpKTsKKyAgICAgICAgQVNTRVJUKCFvcHRpb25zLnByb2dyZXNzIHx8IG9wdGlvbnMucHJvZ3Jl
c3MgPT0gMSk7CisgICAgICAgIGF1dG8mIGFwcGxpY2FibGVTdHlsZSA9IG9wdGlvbnMucHJvZ3Jl
c3MgPyB0byA6IGZyb207CisgICAgICAgIGRlc3RpbmF0aW9uLnNldEFzcGVjdFJhdGlvKGFwcGxp
Y2FibGVTdHlsZS5hc3BlY3RSYXRpb1dpZHRoKCksIGFwcGxpY2FibGVTdHlsZS5hc3BlY3RSYXRp
b0hlaWdodCgpKTsKICAgICB9CiB9OwogCkBAIC0yNTA2LDIwICsyNDc3LDE2IEBAIHN0YXRpYyBi
b29sIGdhdGhlckVuY2xvc2luZ1Nob3J0aGFuZFByb3BlcnRpZXMoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSwgQW5pbWF0aW9uCiAgICAgcmV0dXJuIGNvbnRhaW5lZDsKIH0KIAotdm9pZCBDU1NQcm9w
ZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGNsaWVudCwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgUmVuZGVyU3R5bGUqIGRlc3Rp
bmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBk
b3VibGUgcHJvZ3Jlc3MpCit2b2lkIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFByb3BlcnRp
ZXMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5LCBSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBm
cm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykKIHsKICAgICBBU1NF
UlQocHJvcGVydHkgIT0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKIAogICAgIEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6
OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wZXJ0eSk7CiAgICAgaWYgKHdyYXBw
ZXIpIHsKLSAgICAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3dlYi1hbmltYXRpb25z
LTEvI2Rpc2NyZXRlCi0gICAgICAgIC8vIFRoZSBwcm9wZXJ0eeKAmXMgdmFsdWVzIGNhbm5vdCBi
ZSBtZWFuaW5nZnVsbHkgY29tYmluZWQsIHRodXMgaXQgaXMgbm90IGFkZGl0aXZlIGFuZAotICAg
ICAgICAvLyBpbnRlcnBvbGF0aW9uIHN3YXBzIGZyb20gVmEgdG8gVmIgYXQgNTAlIChwPTAuNSku
Ci0gICAgICAgIGlmICghd3JhcHBlci0+Y2FuSW50ZXJwb2xhdGUoZnJvbSwgdG8pKQotICAgICAg
ICAgICAgcHJvZ3Jlc3MgPSBwcm9ncmVzcyA8IDAuNSA/IDAgOiAxOwotICAgICAgICB3cmFwcGVy
LT5ibGVuZChjbGllbnQsIGRlc3RpbmF0aW9uLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOworICAgICAg
ICBCbGVuZE9wdGlvbnMgb3B0aW9ucyB7IGNsaWVudCwgcHJvZ3Jlc3MsICF3cmFwcGVyLT5jYW5J
bnRlcnBvbGF0ZShmcm9tLCB0bykgfTsKKyAgICAgICAgd3JhcHBlci0+YmxlbmQoZGVzdGluYXRp
b24sIGZyb20sIHRvLCBvcHRpb25zKTsKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgICAgIHdyYXBw
ZXItPmxvZ0JsZW5kKGZyb20sIHRvLCBkZXN0aW5hdGlvbiwgcHJvZ3Jlc3MpOworICAgICAgICB3
cmFwcGVyLT5sb2dCbGVuZChmcm9tLCB0bywgZGVzdGluYXRpb24sIG9wdGlvbnMucHJvZ3Jlc3Mp
OwogI2VuZGlmCiAgICAgfQogfQpAQCAtMjU0Nyw3ICsyNTE0LDcgQEAgSGFzaFNldDxDU1NQcm9w
ZXJ0eUlEPiBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0YWJsZVNob3J0aGFuZHNBZmZlY3Rp
bmdQcm9wZXIKICAgICByZXR1cm4gZm91bmRQcm9wZXJ0aWVzOwogfQogCi1ib29sIENTU1Byb3Bl
cnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQorYm9vbCBDU1NQcm9wZXJ0
eUFuaW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0
IFJlbmRlclN0eWxlJiBhLCBjb25zdCBSZW5kZXJTdHlsZSYgYikKIHsKICAgICBBbmltYXRpb25Q
cm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVy
TWFwOjpzaW5nbGV0b24oKS53cmFwcGVyRm9yUHJvcGVydHkocHJvcGVydHkpOwogICAgIGlmICh3
cmFwcGVyKQpAQCAtMjU1NSw3ICsyNTIyLDcgQEAgYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6
cHJvcGVydGllc0VxdWFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFJlbmRlclMKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVy
dHlCZUludGVycG9sYXRlZChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBSZW5kZXJTdHls
ZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvKQorYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlv
bjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25z
dCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvKQogewogICAgIEFuaW1h
dGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldy
YXBwZXJNYXA6OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wZXJ0eSk7CiAgICAg
aWYgKHdyYXBwZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJv
cGVydHlBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFu
aW1hdGlvbi5oCmluZGV4IGNkZTJjODc1ODMyMzgwYzUzZjUwYTU1ZjBlZDQ0ZWY2ZDg0NDQxOWIu
LjI3ZGFhMzgxYzk1MzAwMTZkY2FiMDgwZjI4NmMxZGU2ZDk4NjYyM2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oCkBAIC0zNiwxOSArMzYs
NDEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dDsKIGNsYXNzIFJlbmRlclN0eWxlOwogCitzdHJ1Y3QgQmxlbmRPcHRpb25zIHsKKyAgICBjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQ7CisgICAgZG91YmxlIHByb2dyZXNz
OworICAgIGJvb2wgaXNEaXNjcmV0ZTsKKworICAgIEJsZW5kT3B0aW9ucyhkb3VibGUgcHJvZ3Jl
c3MpCisgICAgICAgIDogcHJvZ3Jlc3MocHJvZ3Jlc3MpCisgICAgeworICAgIH0KKworICAgIEJs
ZW5kT3B0aW9ucyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIGRvdWJs
ZSBwcm9ncmVzcywgYm9vbCBpc0Rpc2NyZXRlKQorICAgICAgICA6IGNsaWVudChjbGllbnQpCisg
ICAgICAgICwgcHJvZ3Jlc3MocHJvZ3Jlc3MpCisgICAgICAgICwgaXNEaXNjcmV0ZShpc0Rpc2Ny
ZXRlKQorICAgIHsKKyAgICAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3dlYi1hbmlt
YXRpb25zLTEvI2Rpc2NyZXRlCisgICAgICAgIC8vIFRoZSBwcm9wZXJ0eSdzIHZhbHVlcyBjYW5u
b3QgYmUgbWVhbmluZ2Z1bGx5IGNvbWJpbmVkLCB0aHVzIGl0IGlzIG5vdCBhZGRpdGl2ZSBhbmQK
KyAgICAgICAgLy8gaW50ZXJwb2xhdGlvbiBzd2FwcyBmcm9tIFZhIHRvIFZiIGF0IDUwJSAocD0w
LjUpLgorICAgICAgICBpZiAoaXNEaXNjcmV0ZSkKKyAgICAgICAgICAgIHRoaXMtPnByb2dyZXNz
ID0gcHJvZ3Jlc3MgPCAwLjUgPyAwIDogMTsKKyAgICB9Cit9OworCiBjbGFzcyBDU1NQcm9wZXJ0
eUFuaW1hdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNQcm9wZXJ0eUFuaW1hdGFi
bGUoQ1NTUHJvcGVydHlJRCk7CiAgICAgc3RhdGljIGJvb2wgYW5pbWF0aW9uT2ZQcm9wZXJ0eUlz
QWNjZWxlcmF0ZWQoQ1NTUHJvcGVydHlJRCk7Ci0gICAgc3RhdGljIGJvb2wgcHJvcGVydGllc0Vx
dWFsKENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYik7Ci0gICAgc3RhdGljIGJvb2wgY2FuUHJvcGVydHlCZUludGVycG9sYXRlZChDU1NQcm9w
ZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpOworICAg
IHN0YXRpYyBib29sIHByb3BlcnRpZXNFcXVhbChDU1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJT
dHlsZSYgYSwgY29uc3QgUmVuZGVyU3R5bGUmIGIpOworICAgIHN0YXRpYyBib29sIGNhblByb3Bl
cnR5QmVJbnRlcnBvbGF0ZWQoQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUmIGEsIGNv
bnN0IFJlbmRlclN0eWxlJiBiKTsKICAgICBzdGF0aWMgQ1NTUHJvcGVydHlJRCBnZXRQcm9wZXJ0
eUF0SW5kZXgoaW50LCBPcHRpb25hbDxib29sPiYgaXNTaG9ydGhhbmQpOwogICAgIHN0YXRpYyBp
bnQgZ2V0TnVtUHJvcGVydGllcygpOwogCiAgICAgc3RhdGljIEhhc2hTZXQ8Q1NTUHJvcGVydHlJ
RD4gYW5pbWF0YWJsZVNob3J0aGFuZHNBZmZlY3RpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsK
IAotICAgIC8vIFJldHVybiB0cnVlIGlmIHdlIG5lZWQgdG8gc3RhcnQgc29mdHdhcmUgYW5pbWF0
aW9uIHRpbWVycwotICAgIHN0YXRpYyB2b2lkIGJsZW5kUHJvcGVydGllcyhjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiwgQ1NTUHJvcGVydHlJRCwgUmVuZGVyU3R5bGUqIGRzdCwgY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3Mp
OworICAgIHN0YXRpYyB2b2lkIGJsZW5kUHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiwgQ1NTUHJvcGVydHlJRCwgUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBjb25z
dCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAKaW5kZXggNDlhMzRhNjZjZDU4Y2I2ZGY1MTk1YmYyODM5
N2I1NzhlZDgzNTAyZS4uNDE3NGRiMjJiZGVkYmM3MTNjNjliNzgzYmRjMDBiMzY0NzA2Yzg5MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCkBAIC0xNDE4
LDcgKzE0MTgsNyBAQCB2b2lkIEtleWZyYW1lRWZmZWN0OjpzZXRBbmltYXRlZFByb3BlcnRpZXNJ
blN0eWxlKFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgZG91YgogICAgIC8vIHByb2dyZXNzIHdo
aWNoIGFscmVhZHkgYWNjb3VudHMgZm9yIHRoZSB0cmFuc2l0aW9uJ3MgdGltaW5nIGZ1bmN0aW9u
LgogICAgIGlmIChtX2JsZW5kaW5nS2V5ZnJhbWVzU291cmNlID09IEJsZW5kaW5nS2V5ZnJhbWVz
U291cmNlOjpDU1NUcmFuc2l0aW9uKSB7CiAgICAgICAgIEFTU0VSVChwcm9wZXJ0aWVzLnNpemUo
KSA9PSAxKTsKLSAgICAgICAgQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5kUHJvcGVydGllcyh0
aGlzLCAqcHJvcGVydGllcy5iZWdpbigpLCAmdGFyZ2V0U3R5bGUsIG1fYmxlbmRpbmdLZXlmcmFt
ZXNbMF0uc3R5bGUoKSwgbV9ibGVuZGluZ0tleWZyYW1lc1sxXS5zdHlsZSgpLCBpdGVyYXRpb25Q
cm9ncmVzcyk7CisgICAgICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFByb3BlcnRpZXMo
dGhpcywgKnByb3BlcnRpZXMuYmVnaW4oKSwgdGFyZ2V0U3R5bGUsICptX2JsZW5kaW5nS2V5ZnJh
bWVzWzBdLnN0eWxlKCksICptX2JsZW5kaW5nS2V5ZnJhbWVzWzFdLnN0eWxlKCksIGl0ZXJhdGlv
blByb2dyZXNzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTUzMiw3ICsxNTMyLDcg
QEAgdm9pZCBLZXlmcmFtZUVmZmVjdDo6c2V0QW5pbWF0ZWRQcm9wZXJ0aWVzSW5TdHlsZShSZW5k
ZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIGRvdWIKICAgICAgICAgaWYgKGludGVydmFsRW5kcG9pbnRz
LnNpemUoKSA9PSAxKSB7CiAgICAgICAgICAgICBhdXRvIGtleWZyYW1lSW5kZXggPSBpbnRlcnZh
bEVuZHBvaW50c1swXTsKICAgICAgICAgICAgIGF1dG8ga2V5ZnJhbWVTdHlsZSA9ICFrZXlmcmFt
ZUluZGV4ID8gJnRhcmdldFN0eWxlIDogbV9ibGVuZGluZ0tleWZyYW1lc1trZXlmcmFtZUluZGV4
LnZhbHVlKCldLnN0eWxlKCk7Ci0gICAgICAgICAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Ymxl
bmRQcm9wZXJ0aWVzKHRoaXMsIGNzc1Byb3BlcnR5SWQsICZ0YXJnZXRTdHlsZSwga2V5ZnJhbWVT
dHlsZSwga2V5ZnJhbWVTdHlsZSwgMCk7CisgICAgICAgICAgICBDU1NQcm9wZXJ0eUFuaW1hdGlv
bjo6YmxlbmRQcm9wZXJ0aWVzKHRoaXMsIGNzc1Byb3BlcnR5SWQsIHRhcmdldFN0eWxlLCAqa2V5
ZnJhbWVTdHlsZSwgKmtleWZyYW1lU3R5bGUsIDApOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KIApAQCAtMTU2Myw3ICsxNTYzLDcgQEAgdm9pZCBLZXlmcmFtZUVmZmVjdDo6c2V0
QW5pbWF0ZWRQcm9wZXJ0aWVzSW5TdHlsZShSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIGRvdWIK
ICAgICAgICAgLy8gICAgIGRpc3RhbmNlIGFzIHRoZSBpbnRlcnBvbGF0aW9uIHBhcmFtZXRlciBw
LgogICAgICAgICBhdXRvIHN0YXJ0U3R5bGUgPSAhc3RhcnRLZXlmcmFtZUluZGV4ID8gJnRhcmdl
dFN0eWxlIDogbV9ibGVuZGluZ0tleWZyYW1lc1tzdGFydEtleWZyYW1lSW5kZXgudmFsdWUoKV0u
c3R5bGUoKTsKICAgICAgICAgYXV0byBlbmRTdHlsZSA9ICFlbmRLZXlmcmFtZUluZGV4ID8gJnRh
cmdldFN0eWxlIDogbV9ibGVuZGluZ0tleWZyYW1lc1tlbmRLZXlmcmFtZUluZGV4LnZhbHVlKCld
LnN0eWxlKCk7Ci0gICAgICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFByb3BlcnRpZXMo
dGhpcywgY3NzUHJvcGVydHlJZCwgJnRhcmdldFN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwg
dHJhbnNmb3JtZWREaXN0YW5jZSk7CisgICAgICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVu
ZFByb3BlcnRpZXModGhpcywgY3NzUHJvcGVydHlJZCwgdGFyZ2V0U3R5bGUsICpzdGFydFN0eWxl
LCAqZW5kU3R5bGUsIHRyYW5zZm9ybWVkRGlzdGFuY2UpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAKaW5kZXggOWU2YWI2ODA4NTE1YzAxNTRhODA4
YWI5MTUzN2M3MWU1OGFkYzlkMi4uZGYwZmU5YWNhNGJhYTg2MTEzZWJkZjQwYTRiMGJmODBlNzk3
MmRmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwCkBAIC0zOCw5
ICszOCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGlubGluZSBkb3VibGUg
YmxlbmRGdW5jKGRvdWJsZSBmcm9tLCBkb3VibGUgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRp
YyBpbmxpbmUgZG91YmxlIGJsZW5kRnVuYyhkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBjb25zdCBC
bGVuZE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9n
cmVzcyk7CisgICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBvcHRpb25zKTsKIH0KIAogc3RhdGlj
IGJvb2wgc3ViaW1hZ2VLbm93blRvQmVPcGFxdWUoY29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBjb25z
dCBSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKQEAgLTIwMiw3ICsyMDIsNyBAQCBib29sIENTU0Ny
b3NzZmFkZVZhbHVlOjp0cmF2ZXJzZVN1YnJlc291cmNlcyhjb25zdCBXVEY6OkZ1bmN0aW9uPGJv
b2wgKGNvbnN0IENhYwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUmVmUHRyPENTU0Nyb3NzZmFk
ZVZhbHVlPiBDU1NDcm9zc2ZhZGVWYWx1ZTo6YmxlbmQoY29uc3QgQ1NTQ3Jvc3NmYWRlVmFsdWUm
IGZyb20sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QKK1JlZlB0cjxDU1NDcm9zc2ZhZGVWYWx1ZT4g
Q1NTQ3Jvc3NmYWRlVmFsdWU6OmJsZW5kKGNvbnN0IENTU0Nyb3NzZmFkZVZhbHVlJiBmcm9tLCBj
b25zdCBCbGVuZE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGVxdWFsSW5w
dXRJbWFnZXMoZnJvbSkpOwogCkBAIC0yMTgsNyArMjE4LDcgQEAgUmVmUHRyPENTU0Nyb3NzZmFk
ZVZhbHVlPiBDU1NDcm9zc2ZhZGVWYWx1ZTo6YmxlbmQoY29uc3QgQ1NTQ3Jvc3NmYWRlVmFsdWUm
IGZyb20KICAgICBkb3VibGUgdG9QZXJjZW50YWdlID0gbV9wZXJjZW50YWdlVmFsdWUtPmRvdWJs
ZVZhbHVlKCk7CiAgICAgaWYgKG1fcGVyY2VudGFnZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKICAg
ICAgICAgdG9QZXJjZW50YWdlIC89IDEwMC4wOwotICAgIGF1dG8gcGVyY2VudGFnZVZhbHVlID0g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShibGVuZEZ1bmMoZnJvbVBlcmNlbnRhZ2UsIHRvUGVy
Y2VudGFnZSwgcHJvZ3Jlc3MpLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CisgICAgYXV0byBw
ZXJjZW50YWdlVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGJsZW5kRnVuYyhmcm9t
UGVyY2VudGFnZSwgdG9QZXJjZW50YWdlLCBvcHRpb25zKSwgQ1NTVW5pdFR5cGU6OkNTU19OVU1C
RVIpOwogCiAgICAgcmV0dXJuIENTU0Nyb3NzZmFkZVZhbHVlOjpjcmVhdGUoV1RGTW92ZShmcm9t
SW1hZ2VWYWx1ZSksIFdURk1vdmUodG9JbWFnZVZhbHVlKSwgV1RGTW92ZShwZXJjZW50YWdlVmFs
dWUpLCBmcm9tLmlzUHJlZml4ZWQoKSAmJiBpc1ByZWZpeGVkKCkpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuaAppbmRleCA5NDUyMzUyODUxNTFjNjBhNTRjZmRhMzIwZjQy
NTc0MTlhMTk2YTgwLi42YjE1NTBmYWUyZTcyZDE4ZTM3ODc2YmFkMDlmMDg0ZWJiODllZDU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuaApAQCAtMzIsNiArMzIsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBCbGVuZE9wdGlvbnM7CiBjbGFzcyBDU1NQ
cmltaXRpdmVWYWx1ZTsKIAogY2xhc3MgQ1NTQ3Jvc3NmYWRlVmFsdWUgZmluYWwgOiBwdWJsaWMg
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSB7CkBAIC01NCw3ICs1NSw3IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgdHJhdmVyc2VTdWJyZXNvdXJjZXMoY29uc3QgV1RGOjpGdW5jdGlvbjxib29sIChjb25z
dCBDYWNoZWRSZXNvdXJjZSYpPiYgaGFuZGxlcikgY29uc3Q7CiAKLSAgICBSZWZQdHI8Q1NTQ3Jv
c3NmYWRlVmFsdWU+IGJsZW5kKGNvbnN0IENTU0Nyb3NzZmFkZVZhbHVlJiwgZG91YmxlKSBjb25z
dDsKKyAgICBSZWZQdHI8Q1NTQ3Jvc3NmYWRlVmFsdWU+IGJsZW5kKGNvbnN0IENTU0Nyb3NzZmFk
ZVZhbHVlJiwgY29uc3QgQmxlbmRPcHRpb25zJikgY29uc3Q7CiAKICAgICBib29sIGVxdWFscyhj
b25zdCBDU1NDcm9zc2ZhZGVWYWx1ZSYpIGNvbnN0OwogICAgIGJvb2wgZXF1YWxJbnB1dEltYWdl
cyhjb25zdCBDU1NDcm9zc2ZhZGVWYWx1ZSYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
YWRpZW50VmFsdWUuY3BwCmluZGV4IDU1YWJiODJlZjk5ZDM3OWI3ZGEzM2U5ODIyMzU4OTY3YzI3
Mzk4YjMuLjFiNmRkZjVlMjA2NjVlYzE1NDBlMDFlOGQwMDg5NTEyZjM2YTk0ZDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NHcmFkaWVudFZhbHVlLmgiCiAKKyNpbmNsdWRl
ICJBbmltYXRpb25VdGlsaXRpZXMuaCIKICNpbmNsdWRlICJDU1NDYWxjdWxhdGlvblZhbHVlLmgi
CiAjaW5jbHVkZSAiQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5oIgogI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKQEAgLTIwNSw3ICsyMDYsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAg
ICAgICBmbG9hdCBpbnRlclN0b3BQcm9wb3J0aW9uID0gLXByZXZPZmZzZXQgLyAobmV4dE9mZnNl
dCAtIHByZXZPZmZzZXQpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGludGVy
cG9sYXRlIGdyYWRpZW50cyB1c2luZyBwcmVtdWx0aXBsaWVkIGNvbG9ycywgdGhpcyBzaG91bGQg
ZG8gcHJlbXVsdGlwbGljYXRpb24uCi0gICAgICAgICAgICAgICAgQ29sb3IgYmxlbmRlZENvbG9y
ID0gYmxlbmQoc3RvcHNbZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggLSAxXS5jb2xvciwgc3RvcHNb
Zmlyc3RaZXJvT3JHcmVhdGVySW5kZXhdLmNvbG9yLCBpbnRlclN0b3BQcm9wb3J0aW9uKTsKKyAg
ICAgICAgICAgICAgICBDb2xvciBibGVuZGVkQ29sb3IgPSBibGVuZChzdG9wc1tmaXJzdFplcm9P
ckdyZWF0ZXJJbmRleCAtIDFdLmNvbG9yLCBzdG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleF0u
Y29sb3IsIHsgaW50ZXJTdG9wUHJvcG9ydGlvbiB9KTsKIAogICAgICAgICAgICAgICAgIC8vIENs
YW1wIHRoZSBwb3NpdGlvbnMgdG8gMCBhbmQgc2V0IHRoZSBjb2xvci4KICAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpcnN0WmVyb09yR3JlYXRlckluZGV4OyArK2kpIHsK
QEAgLTI1Niw3ICsyNTcsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgICAgICBmbG9hdCBpbnRl
clN0b3BQcm9wb3J0aW9uID0gLXByZXZpb3VzT2Zmc2V0IC8gKG5leHRPZmZzZXQgLSBwcmV2aW91
c09mZnNldCk7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHdoZW4gd2UgaW50ZXJwb2xhdGUg
Z3JhZGllbnRzIHVzaW5nIHByZW11bHRpcGxpZWQgY29sb3JzLCB0aGlzIHNob3VsZCBkbyBwcmVt
dWx0aXBsaWNhdGlvbi4KLSAgICAgICAgICAgICAgICBDb2xvciBibGVuZGVkQ29sb3IgPSBibGVu
ZChzdG9wc1tpbmRleCAtIDFdLmNvbG9yLCBzdG9wc1tpbmRleF0uY29sb3IsIGludGVyU3RvcFBy
b3BvcnRpb24pOworICAgICAgICAgICAgICAgIENvbG9yIGJsZW5kZWRDb2xvciA9IGJsZW5kKHN0
b3BzW2luZGV4IC0gMV0uY29sb3IsIHN0b3BzW2luZGV4XS5jb2xvciwgeyBpbnRlclN0b3BQcm9w
b3J0aW9uIH0pOwogCiAgICAgICAgICAgICAgICAgLy8gQ2xhbXAgdGhlIHBvc2l0aW9ucyB0byAw
IGFuZCBzZXQgdGhlIGNvbG9yLgogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgaW5kZXg7ICsraSkgewpAQCAtMjg2LDcgKzI4Nyw3IEBAIHB1YmxpYzoKIAogICAgICAgICAg
ICAgICAgIGZsb2F0IGludGVyU3RvcFByb3BvcnRpb24gPSAoMSAtIHByZXZpb3VzT2Zmc2V0KSAv
IChuZXh0T2Zmc2V0IC0gcHJldmlvdXNPZmZzZXQpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiB3aGVuIHdlIGludGVycG9sYXRlIGdyYWRpZW50cyB1c2luZyBwcmVtdWx0aXBsaWVkIGNvbG9y
cywgdGhpcyBzaG91bGQgZG8gcHJlbXVsdGlwbGljYXRpb24uCi0gICAgICAgICAgICAgICAgQ29s
b3IgYmxlbmRlZENvbG9yID0gYmxlbmQoc3RvcHNbaW5kZXhdLmNvbG9yLCBzdG9wc1tpbmRleCAr
IDFdLmNvbG9yLCBpbnRlclN0b3BQcm9wb3J0aW9uKTsKKyAgICAgICAgICAgICAgICBDb2xvciBi
bGVuZGVkQ29sb3IgPSBibGVuZChzdG9wc1tpbmRleF0uY29sb3IsIHN0b3BzW2luZGV4ICsgMV0u
Y29sb3IsIHsgaW50ZXJTdG9wUHJvcG9ydGlvbiB9KTsKIAogICAgICAgICAgICAgICAgIC8vIENs
YW1wIHRoZSBwb3NpdGlvbnMgdG8gMSBhbmQgc2V0IHRoZSBjb2xvci4KICAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gaW5kZXggKyAxOyBpIDw9IGxhc3RTdG9wSW5kZXg7ICsraSkgewpA
QCAtNDg1LDcgKzQ4Niw3IEBAIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgQ1NTR3JhZGllbnRW
YWx1ZTo6Y29tcHV0ZVN0b3BzKEdyYWRpZW50QWRhcHRlciYgZ3JhZGllCiAgICAgICAgICAgICBm
bG9hdCByZWxhdGl2ZU9mZnNldCA9ICgqbmV3U3RvcHNbeV0ub2Zmc2V0IC0gb2Zmc2V0MSkgLyAo
b2Zmc2V0MiAtIG9mZnNldDEpOwogICAgICAgICAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6
cG93KHJlbGF0aXZlT2Zmc2V0LCBzdGQ6OmxvZyguNWYpIC8gc3RkOjpsb2cobWlkcG9pbnQpKTsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBXaHkgbm90IHByZW11bHRpcGx5IGhlcmU/Ci0gICAgICAg
ICAgICBuZXdTdG9wc1t5XS5jb2xvciA9IGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbG9yMSwg
Y29sb3IyLCBtdWx0aXBsaWVyKTsKKyAgICAgICAgICAgIG5ld1N0b3BzW3ldLmNvbG9yID0gYmxl
bmRXaXRob3V0UHJlbXVsdGlwbHkoY29sb3IxLCBjb2xvcjIsIHsgbXVsdGlwbGllciB9KTsKICAg
ICAgICAgfQogCiAgICAgICAgIHN0b3BzLnJlbW92ZSh4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5n
dGguY3BwCmluZGV4IGZjN2UzMDJmMWE5ZjZiY2I4M2Q5Yjc3YmVjOTY2YjhkODQ4YjU2NzYuLjk5
ZjVkODBmYjc3ZmUzOTk1N2E0ZjZhMzQ1M2FjNWQxNDg4ZTU2M2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vTGVuZ3RoLmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkxlbmd0aC5oIgogCisjaW5jbHVkZSAiQW5pbWF0aW9uVXRpbGl0aWVzLmgiCiAjaW5j
bHVkZSAiQ2FsY3VsYXRpb25WYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTI5NCwzNyArMjk1LDM3IEBAIExlbmd0aCBjb252
ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5ndGgoY29uc3QgTGVuZ3RoJiBsZW5ndGgpCiAgICAgcmV0
dXJuIExlbmd0aChDYWxjdWxhdGlvblZhbHVlOjpjcmVhdGUoV1RGTW92ZShvcCksIFZhbHVlUmFu
Z2VBbGwpKTsKIH0KIAotc3RhdGljIExlbmd0aCBibGVuZE1peGVkVHlwZXMoY29uc3QgTGVuZ3Ro
JiBmcm9tLCBjb25zdCBMZW5ndGgmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgTGVuZ3Ro
IGJsZW5kTWl4ZWRUeXBlcyhjb25zdCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGNv
bnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAoIXByb2dyZXNzKQorICAgIGlm
ICghb3B0aW9ucy5wcm9ncmVzcykKICAgICAgICAgcmV0dXJuIGZyb207CiAKLSAgICBpZiAocHJv
Z3Jlc3MgPT0gMS4wKQorICAgIGlmIChvcHRpb25zLnByb2dyZXNzID09IDEuMCkKICAgICAgICAg
cmV0dXJuIHRvOwogCi0gICAgYXV0byBibGVuZCA9IG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25C
bGVuZExlbmd0aD4oZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAgICBhdXRvIGJsZW5kID0gbWFrZVVu
aXF1ZTxDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoPihmcm9tLCB0bywgb3B0aW9ucy5wcm9ncmVz
cyk7CiAgICAgcmV0dXJuIExlbmd0aChDYWxjdWxhdGlvblZhbHVlOjpjcmVhdGUoV1RGTW92ZShi
bGVuZCksIFZhbHVlUmFuZ2VBbGwpKTsKIH0KIAotTGVuZ3RoIGJsZW5kKGNvbnN0IExlbmd0aCYg
ZnJvbSwgY29uc3QgTGVuZ3RoJiB0bywgZG91YmxlIHByb2dyZXNzKQorTGVuZ3RoIGJsZW5kKGNv
bnN0IExlbmd0aCYgZnJvbSwgY29uc3QgTGVuZ3RoJiB0bywgY29uc3QgQmxlbmRPcHRpb25zJiBv
cHRpb25zKQogewotICAgIGlmICghcHJvZ3Jlc3MpCisgICAgaWYgKCFvcHRpb25zLnByb2dyZXNz
KQogICAgICAgICByZXR1cm4gZnJvbTsKIAotICAgIGlmIChwcm9ncmVzcyA9PSAxKQorICAgIGlm
IChvcHRpb25zLnByb2dyZXNzID09IDEpCiAgICAgICAgIHJldHVybiB0bzsKIAogICAgIGlmIChm
cm9tLmlzQXV0bygpIHx8IHRvLmlzQXV0bygpKQotICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgPCAw
LjUgPyBmcm9tIDogdG87CisgICAgICAgIHJldHVybiBvcHRpb25zLnByb2dyZXNzIDwgMC41ID8g
ZnJvbSA6IHRvOwogCiAgICAgaWYgKGZyb20uaXNVbmRlZmluZWQoKSB8fCB0by5pc1VuZGVmaW5l
ZCgpKQogICAgICAgICByZXR1cm4gdG87CiAKICAgICBpZiAoZnJvbS5pc0NhbGN1bGF0ZWQoKSB8
fCB0by5pc0NhbGN1bGF0ZWQoKSkKLSAgICAgICAgcmV0dXJuIGJsZW5kTWl4ZWRUeXBlcyhmcm9t
LCB0bywgcHJvZ3Jlc3MpOworICAgICAgICByZXR1cm4gYmxlbmRNaXhlZFR5cGVzKGZyb20sIHRv
LCBvcHRpb25zKTsKIAogICAgIGlmICghZnJvbS5pc1plcm8oKSAmJiAhdG8uaXNaZXJvKCkgJiYg
ZnJvbS50eXBlKCkgIT0gdG8udHlwZSgpKQotICAgICAgICByZXR1cm4gYmxlbmRNaXhlZFR5cGVz
KGZyb20sIHRvLCBwcm9ncmVzcyk7CisgICAgICAgIHJldHVybiBibGVuZE1peGVkVHlwZXMoZnJv
bSwgdG8sIG9wdGlvbnMpOwogCiAgICAgTGVuZ3RoVHlwZSByZXN1bHRUeXBlID0gdG8udHlwZSgp
OwogICAgIGlmICh0by5pc1plcm8oKSkKQEAgLTMzMywxNyArMzM0LDE3IEBAIExlbmd0aCBibGVu
ZChjb25zdCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGRvdWJsZSBwcm9ncmVzcykK
ICAgICBpZiAocmVzdWx0VHlwZSA9PSBMZW5ndGhUeXBlOjpQZXJjZW50KSB7CiAgICAgICAgIGZs
b2F0IGZyb21QZXJjZW50ID0gZnJvbS5pc1plcm8oKSA/IDAgOiBmcm9tLnBlcmNlbnQoKTsKICAg
ICAgICAgZmxvYXQgdG9QZXJjZW50ID0gdG8uaXNaZXJvKCkgPyAwIDogdG8ucGVyY2VudCgpOwot
ICAgICAgICByZXR1cm4gTGVuZ3RoKFdlYkNvcmU6OmJsZW5kKGZyb21QZXJjZW50LCB0b1BlcmNl
bnQsIHByb2dyZXNzKSwgTGVuZ3RoVHlwZTo6UGVyY2VudCk7CisgICAgICAgIHJldHVybiBMZW5n
dGgoV2ViQ29yZTo6YmxlbmQoZnJvbVBlcmNlbnQsIHRvUGVyY2VudCwgb3B0aW9ucyksIExlbmd0
aFR5cGU6OlBlcmNlbnQpOwogICAgIH0KIAogICAgIGZsb2F0IGZyb21WYWx1ZSA9IGZyb20uaXNa
ZXJvKCkgPyAwIDogZnJvbS52YWx1ZSgpOwogICAgIGZsb2F0IHRvVmFsdWUgPSB0by5pc1plcm8o
KSA/IDAgOiB0by52YWx1ZSgpOwotICAgIHJldHVybiBMZW5ndGgoV2ViQ29yZTo6YmxlbmQoZnJv
bVZhbHVlLCB0b1ZhbHVlLCBwcm9ncmVzcyksIHJlc3VsdFR5cGUpOworICAgIHJldHVybiBMZW5n
dGgoV2ViQ29yZTo6YmxlbmQoZnJvbVZhbHVlLCB0b1ZhbHVlLCBvcHRpb25zKSwgcmVzdWx0VHlw
ZSk7CiB9CiAKLUxlbmd0aCBibGVuZChjb25zdCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYg
dG8sIGRvdWJsZSBwcm9ncmVzcywgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQorTGVuZ3RoIGJsZW5k
KGNvbnN0IExlbmd0aCYgZnJvbSwgY29uc3QgTGVuZ3RoJiB0bywgY29uc3QgQmxlbmRPcHRpb25z
JiBvcHRpb25zLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7Ci0gICAgYXV0byBibGVuZGVkID0g
YmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAgICBhdXRvIGJsZW5kZWQgPSBibGVuZChmcm9t
LCB0bywgb3B0aW9ucyk7CiAgICAgaWYgKHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5nZU5vbk5lZ2F0
aXZlICYmIGJsZW5kZWQuaXNOZWdhdGl2ZSgpKQogICAgICAgICByZXR1cm4geyAwLCBmcm9tLmlz
WmVybyAoKSA/IHRvLnR5cGUoKSA6IGZyb20udHlwZSgpIH07CiAgICAgcmV0dXJuIGJsZW5kZWQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCmluZGV4IGFmMzk2NjAzYTRmYjEzOTBkOGVjNGYyZWFk
MTk4NTQxZjliODc1N2YuLjcyMjQ5OTRlNTcxNTljZmY5MDUzZjU1MzU1ZWFkMTJhYTRmNmFhMzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCkBAIC01MCw2ICs1MCw3IEBAIGVudW0gVmFsdWVS
YW5nZSB7CiB9OwogCiBjbGFzcyBDYWxjdWxhdGlvblZhbHVlOworc3RydWN0IEJsZW5kT3B0aW9u
czsKIAogc3RydWN0IExlbmd0aCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC0x
MzcsOCArMTM4LDggQEAgcHJpdmF0ZToKIH07CiAKIC8vIEJsZW5kIHR3byBsZW5ndGhzIHRvIHBy
b2R1Y2UgYSBuZXcgbGVuZ3RoIHRoYXQgaXMgaW4gYmV0d2VlbiB0aGVtLiBVc2VkIGZvciBhbmlt
YXRpb24uCi1MZW5ndGggYmxlbmQoY29uc3QgTGVuZ3RoJiBmcm9tLCBjb25zdCBMZW5ndGgmIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpOwotTGVuZ3RoIGJsZW5kKGNvbnN0IExlbmd0aCYgZnJvbSwgY29u
c3QgTGVuZ3RoJiB0bywgZG91YmxlIHByb2dyZXNzLCBWYWx1ZVJhbmdlKTsKK0xlbmd0aCBibGVu
ZChjb25zdCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGNvbnN0IEJsZW5kT3B0aW9u
cyYpOworTGVuZ3RoIGJsZW5kKGNvbnN0IExlbmd0aCYgZnJvbSwgY29uc3QgTGVuZ3RoJiB0bywg
Y29uc3QgQmxlbmRPcHRpb25zJiwgVmFsdWVSYW5nZSk7CiAKIFVuaXF1ZUFycmF5PExlbmd0aD4g
bmV3Q29vcmRzQXJyYXkoY29uc3QgU3RyaW5nJiwgaW50JiBsZW5ndGgpOwogVW5pcXVlQXJyYXk8
TGVuZ3RoPiBuZXdMZW5ndGhBcnJheShjb25zdCBTdHJpbmcmLCBpbnQmIGxlbmd0aCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGhQb2ludC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vTGVuZ3RoUG9pbnQuaAppbmRleCBmNjk0ODMzZDhjMGExOTY0NGNhMzEx
N2ExZjA1MDAxNWQ3ODIyZjllLi5jZTdjMDczNDdlNjk1N2IwNTNkMDQ0MjNmYTljOGMxNjVjZGIz
MGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGhQb2ludC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aFBvaW50LmgKQEAgLTI5LDYgKzI5LDgg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQmxlbmRPcHRpb25zOworCiBzdHJ1
Y3QgTGVuZ3RoUG9pbnQgewogcHVibGljOgogICAgIExlbmd0aFBvaW50KCkKQEAgLTYzLDkgKzY1
LDkgQEAgcHJpdmF0ZToKICAgICBMZW5ndGggbV95OwogfTsKIAotaW5saW5lIExlbmd0aFBvaW50
IGJsZW5kKGNvbnN0IExlbmd0aFBvaW50JiBmcm9tLCBjb25zdCBMZW5ndGhQb2ludCYgdG8sIGRv
dWJsZSBwcm9ncmVzcykKK2lubGluZSBMZW5ndGhQb2ludCBibGVuZChjb25zdCBMZW5ndGhQb2lu
dCYgZnJvbSwgY29uc3QgTGVuZ3RoUG9pbnQmIHRvLCBjb25zdCBCbGVuZE9wdGlvbnMmIG9wdGlv
bnMpCiB7Ci0gICAgcmV0dXJuIExlbmd0aFBvaW50KGJsZW5kKGZyb20ueCgpLCB0by54KCksIHBy
b2dyZXNzKSwgYmxlbmQoZnJvbS55KCksIHRvLnkoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4g
TGVuZ3RoUG9pbnQoYmxlbmQoZnJvbS54KCksIHRvLngoKSwgb3B0aW9ucyksIGJsZW5kKGZyb20u
eSgpLCB0by55KCksIG9wdGlvbnMpKTsKIH0KIAogV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IExlbmd0aFBvaW50Jik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGhTaXplLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9MZW5ndGhTaXplLmgKaW5kZXggYmQ1NzQxYTFhZDk4NDc1NjcwYWRmOWM5MjZlNDU1MTVhYTRh
MzQ2Yi4uYzQxNGY0NDk3YjI0NzBkOTg5NmMyZjllNGZjODllNTdlZmVjNGE3MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoU2l6ZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0xlbmd0aFNpemUuaApAQCAtMjMsNiArMjMsOCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK3N0cnVjdCBCbGVuZE9wdGlvbnM7CisKIHN0cnVjdCBMZW5ndGhTaXplIHsK
ICAgICBMZW5ndGggd2lkdGg7CiAgICAgTGVuZ3RoIGhlaWdodDsKQEAgLTM2LDkgKzM4LDkgQEAg
QUxXQVlTX0lOTElORSBib29sIG9wZXJhdG9yPT0oY29uc3QgTGVuZ3RoU2l6ZSYgYSwgY29uc3Qg
TGVuZ3RoU2l6ZSYgYikKICAgICByZXR1cm4gYS53aWR0aCA9PSBiLndpZHRoICYmIGEuaGVpZ2h0
ID09IGIuaGVpZ2h0OwogfQogCi1pbmxpbmUgTGVuZ3RoU2l6ZSBibGVuZChjb25zdCBMZW5ndGhT
aXplJiBmcm9tLCBjb25zdCBMZW5ndGhTaXplJiB0bywgZG91YmxlIHByb2dyZXNzKQoraW5saW5l
IExlbmd0aFNpemUgYmxlbmQoY29uc3QgTGVuZ3RoU2l6ZSYgZnJvbSwgY29uc3QgTGVuZ3RoU2l6
ZSYgdG8sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICByZXR1cm4geyBibGVu
ZChmcm9tLndpZHRoLCB0by53aWR0aCwgcHJvZ3Jlc3MpLCBibGVuZChmcm9tLmhlaWdodCwgdG8u
aGVpZ2h0LCBwcm9ncmVzcykgfTsKKyAgICByZXR1cm4geyBibGVuZChmcm9tLndpZHRoLCB0by53
aWR0aCwgb3B0aW9ucyksIGJsZW5kKGZyb20uaGVpZ2h0LCB0by5oZWlnaHQsIG9wdGlvbnMpIH07
CiB9CiAKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25z
dCBMZW5ndGhTaXplJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmlt
YXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmlt
YXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmgKaW5kZXggMzRiYmJlOWU4ZGVjMGIzYjZlODU1MWE5
ODIxMTU4MWE0ZWRmMzUyMy4uNzY0ZGNhMzdhNWNmYjczMjRkNTUzNGUwMTEzYjU5ZWExMWQxMzE5
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlv
blV0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9Bbmlt
YXRpb25VdGlsaXRpZXMuaApAQCAtMjUsNDYgKzI1LDQ3IEBACiAKICNwcmFnbWEgb25jZQogCisj
aW5jbHVkZSAiQ1NTUHJvcGVydHlBbmltYXRpb24uaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgog
I2luY2x1ZGUgIkxheW91dFBvaW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotaW5saW5l
IGludCBibGVuZChpbnQgZnJvbSwgaW50IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitpbmxpbmUgaW50
IGJsZW5kKGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucykKIHsg
IAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZChzdGF0aWNfY2FzdDxkb3VibGU+
KGZyb20pICsgc3RhdGljX2Nhc3Q8ZG91YmxlPih0byAtIGZyb20pICogcHJvZ3Jlc3MpKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihscm91bmQoc3RhdGljX2Nhc3Q8ZG91YmxlPihmcm9t
KSArIHN0YXRpY19jYXN0PGRvdWJsZT4odG8gLSBmcm9tKSAqIG9wdGlvbnMucHJvZ3Jlc3MpKTsK
IH0KIAotaW5saW5lIHVuc2lnbmVkIGJsZW5kKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBk
b3VibGUgcHJvZ3Jlc3MpCitpbmxpbmUgdW5zaWduZWQgYmxlbmQodW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgdG8sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGxyb3VuZCh0byA+IGZyb20gPyBzdGF0aWNfY2FzdDxkb3VibGU+
KGZyb20pICsgc3RhdGljX2Nhc3Q8ZG91YmxlPih0byAtIGZyb20pICogcHJvZ3Jlc3MgOiBzdGF0
aWNfY2FzdDxkb3VibGU+KGZyb20pIC0gc3RhdGljX2Nhc3Q8ZG91YmxlPihmcm9tIC0gdG8pICog
cHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxyb3VuZCh0byA+
IGZyb20gPyBzdGF0aWNfY2FzdDxkb3VibGU+KGZyb20pICsgc3RhdGljX2Nhc3Q8ZG91YmxlPih0
byAtIGZyb20pICogb3B0aW9ucy5wcm9ncmVzcyA6IHN0YXRpY19jYXN0PGRvdWJsZT4oZnJvbSkg
LSBzdGF0aWNfY2FzdDxkb3VibGU+KGZyb20gLSB0bykgKiBvcHRpb25zLnByb2dyZXNzKSk7CiB9
CiAKLWlubGluZSBkb3VibGUgYmxlbmQoZG91YmxlIGZyb20sIGRvdWJsZSB0bywgZG91YmxlIHBy
b2dyZXNzKQoraW5saW5lIGRvdWJsZSBibGVuZChkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBjb25z
dCBCbGVuZE9wdGlvbnMmIG9wdGlvbnMpCiB7ICAKLSAgICByZXR1cm4gZnJvbSArICh0byAtIGZy
b20pICogcHJvZ3Jlc3M7CisgICAgcmV0dXJuIGZyb20gKyAodG8gLSBmcm9tKSAqIG9wdGlvbnMu
cHJvZ3Jlc3M7CiB9CiAKLWlubGluZSBmbG9hdCBibGVuZChmbG9hdCBmcm9tLCBmbG9hdCB0bywg
ZG91YmxlIHByb2dyZXNzKQoraW5saW5lIGZsb2F0IGJsZW5kKGZsb2F0IGZyb20sIGZsb2F0IHRv
LCBjb25zdCBCbGVuZE9wdGlvbnMmIG9wdGlvbnMpCiB7ICAKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGZyb20gKyAodG8gLSBmcm9tKSAqIHByb2dyZXNzKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGZyb20gKyAodG8gLSBmcm9tKSAqIG9wdGlvbnMucHJvZ3Jlc3MpOwog
fQogCi1pbmxpbmUgTGF5b3V0VW5pdCBibGVuZChMYXlvdXRVbml0IGZyb20sIExheW91dFVuaXQg
dG8sIGRvdWJsZSBwcm9ncmVzcykKK2lubGluZSBMYXlvdXRVbml0IGJsZW5kKExheW91dFVuaXQg
ZnJvbSwgTGF5b3V0VW5pdCB0bywgY29uc3QgQmxlbmRPcHRpb25zJiBvcHRpb25zKQogewotICAg
IHJldHVybiBMYXlvdXRVbml0KGJsZW5kKGZyb20udG9GbG9hdCgpLCB0by50b0Zsb2F0KCksIHBy
b2dyZXNzKSk7CisgICAgcmV0dXJuIExheW91dFVuaXQoYmxlbmQoZnJvbS50b0Zsb2F0KCksIHRv
LnRvRmxvYXQoKSwgb3B0aW9ucykpOwogfQogCi1pbmxpbmUgSW50UG9pbnQgYmxlbmQoY29uc3Qg
SW50UG9pbnQmIGZyb20sIGNvbnN0IEludFBvaW50JiB0bywgZG91YmxlIHByb2dyZXNzKQoraW5s
aW5lIEludFBvaW50IGJsZW5kKGNvbnN0IEludFBvaW50JiBmcm9tLCBjb25zdCBJbnRQb2ludCYg
dG8sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICByZXR1cm4gSW50UG9pbnQo
YmxlbmQoZnJvbS54KCksIHRvLngoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVuZChmcm9tLnko
KSwgdG8ueSgpLCBwcm9ncmVzcykpOworICAgIHJldHVybiBJbnRQb2ludChibGVuZChmcm9tLngo
KSwgdG8ueCgpLCBvcHRpb25zKSwKKyAgICAgICAgYmxlbmQoZnJvbS55KCksIHRvLnkoKSwgb3B0
aW9ucykpOwogfQogCi1pbmxpbmUgTGF5b3V0UG9pbnQgYmxlbmQoY29uc3QgTGF5b3V0UG9pbnQm
IGZyb20sIGNvbnN0IExheW91dFBvaW50JiB0bywgZG91YmxlIHByb2dyZXNzKQoraW5saW5lIExh
eW91dFBvaW50IGJsZW5kKGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlvdXRQb2lu
dCYgdG8sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICByZXR1cm4gTGF5b3V0
UG9pbnQoYmxlbmQoZnJvbS54KCksIHRvLngoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVuZChm
cm9tLnkoKSwgdG8ueSgpLCBwcm9ncmVzcykpOworICAgIHJldHVybiBMYXlvdXRQb2ludChibGVu
ZChmcm9tLngoKSwgdG8ueCgpLCBvcHRpb25zKSwKKyAgICAgICAgYmxlbmQoZnJvbS55KCksIHRv
LnkoKSwgb3B0aW9ucykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwCmluZGV4IDcx
NzkwODEyY2IyNTRjMGNjNWM2NmU1ZDY2YTk5NjI2ZjI4YzIyMDEuLmJlNDU5M2U3ZWFkYjJkM2Qy
YTBmY2MyY2Y4NTc0NWU0MWU1NTZhZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwCkBAIC05MCw0MSArOTAsNDEgQEAgQ29sb3Ig
YmxlbmRXaXRoV2hpdGUoY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLUNvbG9yIGJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJs
ZSBwcm9ncmVzcykKK0NvbG9yIGJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYg
dG8sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICAvLyBGSVhNRTogRXh0ZW5k
ZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCiAgICAgLy8gV2UgbmVlZCB0
byBwcmVzZXJ2ZSB0aGUgc3RhdGUgb2YgdGhlIHZhbGlkIGZsYWcgYXQgdGhlIGVuZCBvZiB0aGUg
YW5pbWF0aW9uCi0gICAgaWYgKHByb2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQoKSkKKyAgICBp
ZiAob3B0aW9ucy5wcm9ncmVzcyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVy
biB7IH07CiAKICAgICBhdXRvIHByZW11bHRpcGxpZWRGcm9tID0gcHJlbXVsdGlwbGllZChmcm9t
LnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpKTsKICAgICBhdXRvIHByZW11bHRpcGxp
ZWRUbyA9IHByZW11bHRpcGxpZWQodG8udG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkp
OwogCiAgICAgYXV0byBwcmVtdWx0aXBsaWVkQmxlbmRlZCA9IG1ha2VGcm9tQ29tcG9uZW50c0Ns
YW1waW5nPFNSR0JBPGZsb2F0Pj4oCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxp
ZWRGcm9tLnJlZCwgcHJlbXVsdGlwbGllZFRvLnJlZCwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJD
b3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5ncmVlbiwgcHJlbXVsdGlwbGllZFRvLmdyZWVu
LCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmJs
dWUsIHByZW11bHRpcGxpZWRUby5ibHVlLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJs
ZW5kKHByZW11bHRpcGxpZWRGcm9tLmFscGhhLCBwcmVtdWx0aXBsaWVkVG8uYWxwaGEsIHByb2dy
ZXNzKQorICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5yZWQsIHByZW11
bHRpcGxpZWRUby5yZWQsIG9wdGlvbnMucHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVu
ZChwcmVtdWx0aXBsaWVkRnJvbS5ncmVlbiwgcHJlbXVsdGlwbGllZFRvLmdyZWVuLCBvcHRpb25z
LnByb2dyZXNzKSwKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20uYmx1
ZSwgcHJlbXVsdGlwbGllZFRvLmJsdWUsIG9wdGlvbnMucHJvZ3Jlc3MpLAorICAgICAgICBXZWJD
b3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5hbHBoYSwgcHJlbXVsdGlwbGllZFRvLmFscGhh
LCBvcHRpb25zLnByb2dyZXNzKQogICAgICk7CiAKICAgICByZXR1cm4gY29udmVydENvbG9yPFNS
R0JBPHVpbnQ4X3Q+Pih1bnByZW11bHRpcGxpZWQocHJlbXVsdGlwbGllZEJsZW5kZWQpKTsKIH0K
IAotQ29sb3IgYmxlbmRXaXRob3V0UHJlbXVsdGlwbHkoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0
IENvbG9yJiB0bywgZG91YmxlIHByb2dyZXNzKQorQ29sb3IgYmxlbmRXaXRob3V0UHJlbXVsdGlw
bHkoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9yJiB0bywgY29uc3QgQmxlbmRPcHRpb25z
JiBvcHRpb25zKQogewogICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFu
ZGxlIGNvbG9yIHNwYWNlcy4KICAgICAvLyBXZSBuZWVkIHRvIHByZXNlcnZlIHRoZSBzdGF0ZSBv
ZiB0aGUgdmFsaWQgZmxhZyBhdCB0aGUgZW5kIG9mIHRoZSBhbmltYXRpb24KLSAgICBpZiAocHJv
Z3Jlc3MgPT0gMSAmJiAhdG8uaXNWYWxpZCgpKQorICAgIGlmIChvcHRpb25zLnByb2dyZXNzID09
IDEgJiYgIXRvLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGF1dG8gZnJv
bVNSR0IgPSBmcm9tLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8ZmxvYXQ+PigpOwogICAgIGF1dG8g
dG9TUkdCID0gdG8udG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCk7CiAKICAgICBhdXRv
IGJsZW5kZWQgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KAotICAg
ICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5yZWQsIHRvU1JHQi5yZWQsIHByb2dyZXNzKSwK
LSAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuZ3JlZW4sIHRvU1JHQi5ncmVlbiwgcHJv
Z3Jlc3MpLAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ibHVlLCB0b1NSR0IuYmx1
ZSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5hbHBoYSwgdG9T
UkdCLmFscGhhLCBwcm9ncmVzcykKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IucmVk
LCB0b1NSR0IucmVkLCBvcHRpb25zLnByb2dyZXNzKSwKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQo
ZnJvbVNSR0IuZ3JlZW4sIHRvU1JHQi5ncmVlbiwgb3B0aW9ucy5wcm9ncmVzcyksCisgICAgICAg
IFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmJsdWUsIHRvU1JHQi5ibHVlLCBvcHRpb25zLnByb2dy
ZXNzKSwKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYWxwaGEsIHRvU1JHQi5hbHBo
YSwgb3B0aW9ucy5wcm9ncmVzcykKICAgICApOwogCiAgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxT
UkdCQTx1aW50OF90Pj4oYmxlbmRlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvckJsZW5kaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvckJsZW5kaW5nLmgKaW5kZXggNGJjOGUwZjM1OTFlNGVlMDA2MWE5ODJjMDBi
MTRjMDgzMDE0MGIzYi4uZDlmNTdlMmVkZTY3MmY2NjQ0ZDM5MWQyMzgzY2E5MjY0OTc5Y2FkOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGlu
Zy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcu
aApAQCAtMjgsNiArMjgsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb2xvcjsK
K3N0cnVjdCBCbGVuZE9wdGlvbnM7CiAKIC8vIE5PVEU6IFRoZXNlIGZ1bmN0aW9ucyBkbyBhIGxv
c3N5IGNvbnZlcnNpb24gdG8gOC1iaXQgc1JHQkEgYmVmb3JlIGJsZW5kaW5nLgogCkBAIC0zNyw3
ICszOCw3IEBAIENvbG9yIGJsZW5kU291cmNlT3Zlcihjb25zdCBDb2xvciYsIGNvbnN0IENvbG9y
Jik7CiAvLyBCZXNwb2tlICJ3aGl0ZW5pbmciIGFsZ29yaXRobSB1c2VkIGJ5IFJlbmRlclRoZW1l
Ojp0cmFuc2Zvcm1TZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IuCiBDb2xvciBibGVuZFdpdGhXaGl0
ZShjb25zdCBDb2xvciYpOwogCi1Db2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3Qg
Q29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MpOwotQ29sb3IgYmxlbmRXaXRob3V0UHJlbXVsdGlw
bHkoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9yJiB0bywgZG91YmxlIHByb2dyZXNzKTsK
K0NvbG9yIGJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGNvbnN0IEJs
ZW5kT3B0aW9ucyYpOworQ29sb3IgYmxlbmRXaXRob3V0UHJlbXVsdGlwbHkoY29uc3QgQ29sb3Im
IGZyb20sIGNvbnN0IENvbG9yJiB0bywgY29uc3QgQmxlbmRPcHRpb25zJik7CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3Jt
Q0FGaWx0ZXJzQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9j
b2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tCmluZGV4IGNiYzg0ZmY1NDhkOTYzN2Y1NjI5
MTkyODc5ZTE0MDgzZWRiZTNmM2IuLjcwMTM1MWQ4YWRkYjY5OTY5MWEyNjQyMDJlNzk3ZDAwNjUx
NzY0NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2Nv
Y29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbQpAQCAtNDYzLDE4
ICs0NjMsMTkgQEAgUmV0YWluUHRyPE5TVmFsdWU+IFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1h
dHJpeFZhbHVlRm9yRmlsdGVyKEZpbHRlck9wZXJhdGlvbjoKICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6U0VQSUE6IHsKICAgICAgICAgZG91YmxlIHQgPSBmaWx0ZXJPcGVyYXRpb24gPyBkb3du
Y2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqZmlsdGVyT3BlcmF0aW9uKS5h
bW91bnQoKSA6IDA7CiAgICAgICAgIHQgPSBzdGQ6Om1pbihzdGQ6Om1heCgwLjAsIHQpLCAxLjAp
OworICAgICAgICBCbGVuZE9wdGlvbnMgb3B0aW9ucyB7IHQgfTsKICAgICAgICAgQ0FDb2xvck1h
dHJpeCBjb2xvck1hdHJpeCA9IHsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJD
b3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMF1bMF0sIHNlcGlhRnVsbENvbnN0YW50c1sw
XVswXSwgdCkpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5k
KHNlcGlhTm9uZUNvbnN0YW50c1swXVsxXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzBdWzFdLCB0KSks
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25l
Q29uc3RhbnRzWzBdWzJdLCBzZXBpYUZ1bGxDb25zdGFudHNbMF1bMl0sIHQpKSwgMCwgMCwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25z
dGFudHNbMF1bMF0sIHNlcGlhRnVsbENvbnN0YW50c1swXVswXSwgb3B0aW9ucykpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50
c1swXVsxXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzBdWzFdLCBvcHRpb25zKSksCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBd
WzJdLCBzZXBpYUZ1bGxDb25zdGFudHNbMF1bMl0sIG9wdGlvbnMpKSwgMCwgMCwKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlh
Tm9uZUNvbnN0YW50c1sxXVswXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzFdWzBdLCB0KSksCi0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3Rh
bnRzWzFdWzFdLCBzZXBpYUZ1bGxDb25zdGFudHNbMV1bMV0sIHQpKSwKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMV1bMl0s
IHNlcGlhRnVsbENvbnN0YW50c1sxXVsyXSwgdCkpLCAwLCAwLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1sxXVswXSwgc2Vw
aWFGdWxsQ29uc3RhbnRzWzFdWzBdLCBvcHRpb25zKSksCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzFdWzFdLCBzZXBpYUZ1
bGxDb25zdGFudHNbMV1bMV0sIG9wdGlvbnMpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGZs
b2F0PihXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMV1bMl0sIHNlcGlhRnVsbENv
bnN0YW50c1sxXVsyXSwgb3B0aW9ucykpLCAwLCAwLAogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzJd
WzBdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1bMF0sIHQpKSwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMl1bMV0sIHNlcGlh
RnVsbENvbnN0YW50c1syXVsxXSwgdCkpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1syXVsyXSwgc2VwaWFGdWxsQ29uc3Rh
bnRzWzJdWzJdLCB0KSksIDAsIDAsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oV2Vi
Q29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzJdWzBdLCBzZXBpYUZ1bGxDb25zdGFudHNb
Ml1bMF0sIG9wdGlvbnMpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3Jl
OjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMl1bMV0sIHNlcGlhRnVsbENvbnN0YW50c1syXVsx
XSwgb3B0aW9ucykpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJs
ZW5kKHNlcGlhTm9uZUNvbnN0YW50c1syXVsyXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzJdWzJdLCBv
cHRpb25zKSksIDAsIDAsCiAgICAgICAgICAgICAwLCAwLCAwLCAxLCAwCiAgICAgICAgIH07CiAg
ICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhDQUNvbG9yTWF0cml4OmNvbG9yTWF0cml4
XTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyT3BlcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAppbmRleCAzZTkxYzQxN2E1OWFhZGM5MWM4MTBmNjFl
NmYxNmY3YTU4YjhlMWUwLi40YWNhZjEwOTU4NDQyMWRmNmYyNDFkNmFkMzJmNzY5MDAwYzA4Mzk2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlck9wZXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCkBAIC03NCwxNyArNzQsMTcgQEAgdm9pZCBSZWZl
cmVuY2VGaWx0ZXJPcGVyYXRpb246OmxvYWRFeHRlcm5hbERvY3VtZW50SWZOZWVkZWQoQ2FjaGVk
UmVzb3VyY2VMb2FkZXIKICAgICBtX2NhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLT5sb2FkKGNh
Y2hlZFJlc291cmNlTG9hZGVyLCBvcHRpb25zKTsKIH0KIAotUmVmUHRyPEZpbHRlck9wZXJhdGlv
bj4gQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6YmxlbmQoY29uc3QgRmlsdGVyT3Bl
cmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoKQor
UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6
YmxlbmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBCbGVuZE9wdGlvbnMmIG9w
dGlvbnMsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoKQogewogICAgIGlmIChmcm9tICYmICFmcm9t
LT5pc1NhbWVUeXBlKCp0aGlzKSkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgCiAgICAgaWYg
KGJsZW5kVG9QYXNzdGhyb3VnaCkKLSAgICAgICAgcmV0dXJuIEJhc2ljQ29sb3JNYXRyaXhGaWx0
ZXJPcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChtX2Ftb3VudCwgcGFzc3Rocm91Z2hB
bW91bnQoKSwgcHJvZ3Jlc3MpLCBtX3R5cGUpOworICAgICAgICByZXR1cm4gQmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKG1fYW1vdW50LCBwYXNz
dGhyb3VnaEFtb3VudCgpLCBvcHRpb25zKSwgbV90eXBlKTsKICAgICAgICAgCiAgICAgY29uc3Qg
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiogZnJvbU9wZXJhdGlvbiA9IGRvd25jYXN0
PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZyb20pOwogICAgIGRvdWJsZSBmcm9t
QW1vdW50ID0gZnJvbU9wZXJhdGlvbiA/IGZyb21PcGVyYXRpb24tPmFtb3VudCgpIDogcGFzc3Ro
cm91Z2hBbW91bnQoKTsKLSAgICByZXR1cm4gQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
bjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKGZyb21BbW91bnQsIG1fYW1vdW50LCBwcm9ncmVzcyks
IG1fdHlwZSk7CisgICAgcmV0dXJuIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OmNy
ZWF0ZShXZWJDb3JlOjpibGVuZChmcm9tQW1vdW50LCBtX2Ftb3VudCwgb3B0aW9ucyksIG1fdHlw
ZSk7CiB9CiAKIGJvb2wgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3Jt
Q29sb3IoU1JHQkE8ZmxvYXQ+JiBjb2xvcikgY29uc3QKQEAgLTEzNywxNyArMTM3LDE3IEBAIGRv
dWJsZSBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpwYXNzdGhyb3VnaEFtb3VudCgp
IGNvbnN0CiAgICAgfQogfQogCi1SZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBCYXNpY0NvbXBvbmVu
dFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZy
b20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2gpCitSZWZQdHI8Rmls
dGVyT3BlcmF0aW9uPiBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpibGVu
ZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZyb20sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9u
cywgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2gpCiB7CiAgICAgaWYgKGZyb20gJiYgIWZyb20tPmlz
U2FtZVR5cGUoKnRoaXMpKQogICAgICAgICByZXR1cm4gdGhpczsKICAgICAKICAgICBpZiAoYmxl
bmRUb1Bhc3N0aHJvdWdoKQotICAgICAgICByZXR1cm4gQmFzaWNDb21wb25lbnRUcmFuc2ZlckZp
bHRlck9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKG1fYW1vdW50LCBwYXNzdGhyb3Vn
aEFtb3VudCgpLCBwcm9ncmVzcyksIG1fdHlwZSk7CisgICAgICAgIHJldHVybiBCYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQobV9hbW91
bnQsIHBhc3N0aHJvdWdoQW1vdW50KCksIG9wdGlvbnMpLCBtX3R5cGUpOwogICAgICAgICAKICAg
ICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBmcm9tT3BlcmF0
aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZnJv
bSk7CiAgICAgZG91YmxlIGZyb21BbW91bnQgPSBmcm9tT3BlcmF0aW9uID8gZnJvbU9wZXJhdGlv
bi0+YW1vdW50KCkgOiBwYXNzdGhyb3VnaEFtb3VudCgpOwotICAgIHJldHVybiBCYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbUFt
b3VudCwgbV9hbW91bnQsIHByb2dyZXNzKSwgbV90eXBlKTsKKyAgICByZXR1cm4gQmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKGZyb21B
bW91bnQsIG1fYW1vdW50LCBvcHRpb25zKSwgbV90eXBlKTsKIH0KIAogYm9vbCBCYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4m
IGNvbG9yKSBjb25zdApAQCAtMjE1LDcgKzIxNSw3IEBAIGJvb2wgSW52ZXJ0TGlnaHRuZXNzRmls
dGVyT3BlcmF0aW9uOjpvcGVyYXRvcj09KGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0aW9u
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAgICAgCi1SZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBJbnZl
cnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OmJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiog
ZnJvbSwgZG91YmxlLCBib29sKQorUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gSW52ZXJ0TGlnaHRu
ZXNzRmlsdGVyT3BlcmF0aW9uOjpibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZyb20sIGNv
bnN0IEJsZW5kT3B0aW9ucyYsIGJvb2wpCiB7CiAgICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2Ft
ZVR5cGUoKnRoaXMpKQogICAgICAgICByZXR1cm4gdGhpczsKQEAgLTMzMSw3ICszMzEsNyBAQCBi
b29sIEJsdXJGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9u
JiBvcGVyYXRpb24pIGNvbnN0CiAgICAgcmV0dXJuIG1fc3RkRGV2aWF0aW9uID09IGRvd25jYXN0
PEJsdXJGaWx0ZXJPcGVyYXRpb24+KG9wZXJhdGlvbikuc3RkRGV2aWF0aW9uKCk7CiB9CiAgICAg
Ci1SZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBCbHVyRmlsdGVyT3BlcmF0aW9uOjpibGVuZChjb25z
dCBGaWx0ZXJPcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvUGFz
c3Rocm91Z2gpCitSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBCbHVyRmlsdGVyT3BlcmF0aW9uOjpi
bGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZyb20sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0
aW9ucywgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2gpCiB7CiAgICAgaWYgKGZyb20gJiYgIWZyb20t
PmlzU2FtZVR5cGUoKnRoaXMpKQogICAgICAgICByZXR1cm4gdGhpczsKQEAgLTMzOSwxMSArMzM5
LDExIEBAIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEJsdXJGaWx0ZXJPcGVyYXRpb246OmJsZW5k
KGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZnJvbSwKICAgICBMZW5ndGhUeXBlIGxlbmd0aFR5cGUg
PSBtX3N0ZERldmlhdGlvbi50eXBlKCk7CiAKICAgICBpZiAoYmxlbmRUb1Bhc3N0aHJvdWdoKQot
ICAgICAgICByZXR1cm4gQmx1ckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5k
KG1fc3RkRGV2aWF0aW9uLCBMZW5ndGgobGVuZ3RoVHlwZSksIHByb2dyZXNzKSk7CisgICAgICAg
IHJldHVybiBCbHVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQobV9zdGRE
ZXZpYXRpb24sIExlbmd0aChsZW5ndGhUeXBlKSwgb3B0aW9ucykpOwogCiAgICAgY29uc3QgQmx1
ckZpbHRlck9wZXJhdGlvbiogZnJvbU9wZXJhdGlvbiA9IGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVy
YXRpb24+KGZyb20pOwogICAgIExlbmd0aCBmcm9tTGVuZ3RoID0gZnJvbU9wZXJhdGlvbiA/IGZy
b21PcGVyYXRpb24tPm1fc3RkRGV2aWF0aW9uIDogTGVuZ3RoKGxlbmd0aFR5cGUpOwotICAgIHJl
dHVybiBCbHVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbUxlbmd0
aCwgbV9zdGREZXZpYXRpb24sIHByb2dyZXNzKSk7CisgICAgcmV0dXJuIEJsdXJGaWx0ZXJPcGVy
YXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChmcm9tTGVuZ3RoLCBtX3N0ZERldmlhdGlvbiwg
b3B0aW9ucykpOwogfQogICAgIAogYm9vbCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOjpvcGVy
YXRvcj09KGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0aW9uKSBjb25zdApAQCAtMzU0LDE2
ICszNTQsMTYgQEAgYm9vbCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOjpvcGVyYXRvcj09KGNv
bnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0aW9uKSBjb24KICAgICByZXR1cm4gbV9sb2NhdGlv
biA9PSBvdGhlci5tX2xvY2F0aW9uICYmIG1fc3RkRGV2aWF0aW9uID09IG90aGVyLm1fc3RkRGV2
aWF0aW9uICYmIG1fY29sb3IgPT0gb3RoZXIubV9jb2xvcjsKIH0KICAgICAKLVJlZlB0cjxGaWx0
ZXJPcGVyYXRpb24+IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246OmJsZW5kKGNvbnN0IEZpbHRl
ck9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9QYXNzdGhyb3Vn
aCkKK1JlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246OmJs
ZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRPcHRpb25zJiBvcHRp
b25zLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCkKIHsKICAgICBpZiAoZnJvbSAmJiAhZnJvbS0+
aXNTYW1lVHlwZSgqdGhpcykpCiAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgaWYgKGJsZW5k
VG9QYXNzdGhyb3VnaCkKICAgICAgICAgcmV0dXJuIERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246
OmNyZWF0ZSgKLSAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKG1fbG9jYXRpb24sIEludFBvaW50
KCksIHByb2dyZXNzKSwKLSAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKG1fc3RkRGV2aWF0aW9u
LCAwLCBwcm9ncmVzcyksCi0gICAgICAgICAgICBXZWJDb3JlOjpibGVuZChtX2NvbG9yLCBDb2xv
cjo6dHJhbnNwYXJlbnRCbGFjaywgcHJvZ3Jlc3MpKTsKKyAgICAgICAgICAgIFdlYkNvcmU6OmJs
ZW5kKG1fbG9jYXRpb24sIEludFBvaW50KCksIG9wdGlvbnMpLAorICAgICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQobV9zdGREZXZpYXRpb24sIDAsIG9wdGlvbnMpLAorICAgICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQobV9jb2xvciwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2ssIG9wdGlvbnMpKTsKIAog
ICAgIGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24qIGZyb21PcGVyYXRpb24gPSBkb3du
Y2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihmcm9tKTsKICAgICBJbnRQb2ludCBmcm9t
TG9jYXRpb24gPSBmcm9tT3BlcmF0aW9uID8gZnJvbU9wZXJhdGlvbi0+bG9jYXRpb24oKSA6IElu
dFBvaW50KCk7CkBAIC0zNzEsOSArMzcxLDkgQEAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gRHJv
cFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6YmxlbmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKgogICAg
IENvbG9yIGZyb21Db2xvciA9IGZyb21PcGVyYXRpb24gPyBmcm9tT3BlcmF0aW9uLT5jb2xvcigp
IDogQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiAgICAgCiAgICAgcmV0dXJuIERyb3BTaGFkb3dG
aWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbUxvY2F0
aW9uLCBtX2xvY2F0aW9uLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21T
dGREZXZpYXRpb24sIG1fc3RkRGV2aWF0aW9uLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6
OmJsZW5kKGZyb21Db2xvciwgbV9jb2xvciwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgV2ViQ29yZTo6
YmxlbmQoZnJvbUxvY2F0aW9uLCBtX2xvY2F0aW9uLCBvcHRpb25zKSwKKyAgICAgICAgV2ViQ29y
ZTo6YmxlbmQoZnJvbVN0ZERldmlhdGlvbiwgbV9zdGREZXZpYXRpb24sIG9wdGlvbnMpLAorICAg
ICAgICBXZWJDb3JlOjpibGVuZChmcm9tQ29sb3IsIG1fY29sb3IsIG9wdGlvbnMpKTsKIH0KIAog
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsdGVyT3BlcmF0
aW9uJiBmaWx0ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaAppbmRleCBlMDE1MGY4MGEyZTFkZDk3MGVj
Mzk2OWM2ZmFmYmI0NmRlZDQ3OWFmLi5mMjVjYzQwOTg5ZGJmYTNiYWZjOWZlZTQ0YjMwZjA3MTUy
MTkwN2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBDYWNoZWRTVkdE
b2N1bWVudFJlZmVyZW5jZTsKIGNsYXNzIEZpbHRlckVmZmVjdDsKK3N0cnVjdCBCbGVuZE9wdGlv
bnM7CiBzdHJ1Y3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zOwogCiBjbGFzcyBGaWx0ZXJPcGVyYXRp
b24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RmlsdGVyT3BlcmF0aW9uPiB7CkBAIC03
NCw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBG
aWx0ZXJPcGVyYXRpb24mKSBjb25zdCA9IDA7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZp
bHRlck9wZXJhdGlvbiYgbykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvKTsgfQogCi0gICAg
dmlydHVhbCBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRp
b24qIC8qZnJvbSovLCBkb3VibGUgLypwcm9ncmVzcyovLCBib29sIC8qYmxlbmRUb1Bhc3N0aHJv
dWdoKi8gPSBmYWxzZSkKKyAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5k
KGNvbnN0IEZpbHRlck9wZXJhdGlvbiogLypmcm9tKi8sIGNvbnN0IEJsZW5kT3B0aW9ucyYsIGJv
b2wgLypibGVuZFRvUGFzc3Rocm91Z2gqLyA9IGZhbHNlKQogICAgIHsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQpAQCAtMjE1LDcgKzIxNiw3IEBAIHB1YmxpYzoKIAogICAgIGRvdWJs
ZSBhbW91bnQoKSBjb25zdCB7IHJldHVybiBtX2Ftb3VudDsgfQogCi0gICAgUmVmUHRyPEZpbHRl
ck9wZXJhdGlvbj4gYmxlbmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJv
Z3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpIG92ZXJyaWRlOworICAgIFJl
ZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZnJvbSwg
Y29uc3QgQmxlbmRPcHRpb25zJiwgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2ggPSBmYWxzZSkgb3Zl
cnJpZGU7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZpbHRlck9wZXJh
dGlvbiYpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMjUwLDcgKzI1MSw3IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgYWZmZWN0c09wYWNpdHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3R5cGUgPT0g
T1BBQ0lUWTsgfQogCi0gICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmQoY29uc3QgRmls
dGVyT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJv
dWdoID0gZmFsc2UpIG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5k
KGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRPcHRpb25zJiwgYm9vbCBi
bGVuZFRvUGFzc3Rocm91Z2ggPSBmYWxzZSkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEZpbHRlck9wZXJhdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwpAQCAt
MjgwLDcgKzI4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW52
ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uKCkpOwogICAgIH0KIAotICAgIFJlZlB0cjxGaWx0
ZXJPcGVyYXRpb24+IGJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHBy
b2dyZXNzLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKSBvdmVycmlkZTsKKyAgICBS
ZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZyb20s
IGNvbnN0IEJsZW5kT3B0aW9ucyYsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpIG92
ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVy
YXRpb24mKSBjb25zdCBmaW5hbDsKQEAgLTMxMSw3ICszMTIsNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBhZmZlY3RzT3BhY2l0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICBi
b29sIG1vdmVzUGl4ZWxzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAg
UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmcm9t
LCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpIG92ZXJy
aWRlOworICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kKGNvbnN0IEZpbHRlck9wZXJh
dGlvbiogZnJvbSwgY29uc3QgQmxlbmRPcHRpb25zJiwgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2gg
PSBmYWxzZSkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEZpbHRlck9wZXJhdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMzQ2LDcgKzM0Nyw3IEBAIHB1
YmxpYzoKICAgICBib29sIGFmZmVjdHNPcGFjaXR5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIGJvb2wgbW92ZXNQaXhlbHMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9CiAKLSAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZChjb25zdCBGaWx0ZXJP
cGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2gg
PSBmYWxzZSkgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmQoY29u
c3QgRmlsdGVyT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBCbGVuZE9wdGlvbnMmLCBib29sIGJsZW5k
VG9QYXNzdGhyb3VnaCA9IGZhbHNlKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0lkZW50aXR5
VHJhbnNmb3JtT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmgKaW5kZXggMDNkOTI4MDk3NDFh
MDVjZjgzMGY2MzRjN2JmNTkyZTZkZDVhYTMyMy4uYTI1MmI4OWVjZmM2MTA2Njk5MDBjMzUyNTM2
MmMwMDgwN2I4ZDFhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9JZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvSWRlbnRpdHlUcmFuc2Zvcm1PcGVy
YXRpb24uaApAQCAtMjksNiArMjksOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVj
dCBCbGVuZE9wdGlvbnM7CisKIGNsYXNzIElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uIGZpbmFs
IDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxJ
ZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKCkKQEAgLTU0LDcgKzU2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFJlZjxUcmFuc2Zvcm1P
cGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiosIGRvdWJsZSwgYm9vbCA9
IGZhbHNlKSBvdmVycmlkZQorICAgIFJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbiosIGNvbnN0IEJsZW5kT3B0aW9ucyYsIGJvb2wgPSBmYWxzZSkg
b3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeDNEVHJh
bnNmb3JtT3BlcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCmluZGV4IDI0N2UyZDNkODM4
YjcwMTNiNzQ0YTVlOWJiZGZmMjM2MjEyYzljMmEuLmM1YWU5MTE2ZTUwZDBkOGYxNzQxMzk2MGUy
OWQ0OTk2YWYwY2EyN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RyYW5zZm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1P
cGVyYXRpb24uY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCIKIAorI2luY2x1ZGUgIkFuaW1hdGlv
blV0aWxpdGllcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0U3RyZWFtLmg+CiAKQEAgLTM2LDEzICszNywxMyBAQCBib29sIE1hdHJpeDNEVHJhbnNmb3Jt
T3BlcmF0aW9uOjpvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgb3RoZXIpIGNv
bgogICAgIHJldHVybiBpc1NhbWVUeXBlKG90aGVyKSAmJiBtX21hdHJpeCA9PSBkb3duY2FzdDxN
YXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbj4ob3RoZXIpLm1fbWF0cml4OwogfQogCi1zdGF0aWMg
UmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlT3BlcmF0aW9uKFRyYW5zZm9ybWF0aW9uTWF0
cml4JiB0bywgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZyb20sIGRvdWJsZSBwcm9ncmVzcykKK3N0
YXRpYyBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVhdGVPcGVyYXRpb24oVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHRvLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnJvbSwgY29uc3QgQmxlbmRPcHRp
b25zJiBvcHRpb25zKQogewotICAgIHRvLmJsZW5kKGZyb20sIHByb2dyZXNzKTsKKyAgICB0by5i
bGVuZChmcm9tLCBvcHRpb25zLnByb2dyZXNzKTsKICAgICByZXR1cm4gTWF0cml4M0RUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZSh0byk7CiB9CiAKLVJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IE1h
dHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24q
IGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkpCitSZWY8VHJhbnNm
b3JtT3BlcmF0aW9uPiBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBCbGVuZE9wdGlvbnMmIG9wdGlvbnMsIGJvb2wg
YmxlbmRUb0lkZW50aXR5KQogewogICAgIGlmIChmcm9tICYmICFmcm9tLT5pc1NhbWVUeXBlKCp0
aGlzKSkKICAgICAgICAgcmV0dXJuICp0aGlzOwpAQCAtNTcsOCArNTgsOCBAQCBSZWY8VHJhbnNm
b3JtT3BlcmF0aW9uPiBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJh
bnNmb3JtT3BlcmF0aQogICAgIGFwcGx5KHRvVCwgc2l6ZSk7CiAKICAgICBpZiAoYmxlbmRUb0lk
ZW50aXR5KQotICAgICAgICByZXR1cm4gY3JlYXRlT3BlcmF0aW9uKGZyb21ULCB0b1QsIHByb2dy
ZXNzKTsKLSAgICByZXR1cm4gY3JlYXRlT3BlcmF0aW9uKHRvVCwgZnJvbVQsIHByb2dyZXNzKTsK
KyAgICAgICAgcmV0dXJuIGNyZWF0ZU9wZXJhdGlvbihmcm9tVCwgdG9ULCBvcHRpb25zKTsKKyAg
ICByZXR1cm4gY3JlYXRlT3BlcmF0aW9uKHRvVCwgZnJvbVQsIG9wdGlvbnMpOwogfQogCiBib29s
IE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOjppc1JlcHJlc2VudGFibGVJbjJEKCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaAppbmRleCAwNTI4
OGMzOGMwNzc0OThjYTQ5NmIyODg1ZWNhZDc2MGE1YWYzYjIwLi5iZmRlMDM3NzhkZjA2YWQwODEx
ODg2ODU4NzdlYzEyMDMyNWE2YzM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXgzRFRyYW5z
Zm9ybU9wZXJhdGlvbi5oCkBAIC0zMCw2ICszMCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorc3RydWN0IEJsZW5kT3B0aW9uczsKKwogY2xhc3MgTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRp
b24gZmluYWwgOiBwdWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUmVmPE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVhdGUoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1hdHJpeCkKQEAgLTU4LDcgKzYwLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5k
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJs
ZW5kVG9JZGVudGl0eSA9IGZhbHNlKSBvdmVycmlkZTsKKyAgICBSZWY8VHJhbnNmb3JtT3BlcmF0
aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGNvbnN0IEJsZW5kT3B0
aW9ucyYsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpIG92ZXJyaWRlOwogICAgIAogICAg
IHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zv
cm1PcGVyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCmluZGV4IGI3ZjY0NGE5NjhjMGY4MTQ3
MTYxZTM1M2MxN2QxY2M2NmNmNzk5YzkuLjk1MjI3YWRiODZlMDA2N2VmMjBkNGYxMjg5ODMyYWY1
ODkzMjU4ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5j
cHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXRy
aXhUcmFuc2Zvcm1PcGVyYXRpb24uaCIKIAorI2luY2x1ZGUgIkFuaW1hdGlvblV0aWxpdGllcy5o
IgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKQEAgLTM1LDEwICszNiwxMCBAQCBib29sIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6b3Bl
cmF0b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG90aGVyKSBjb25zdAogICAgIHJldHVy
biBtX2EgPT0gbS5tX2EgJiYgbV9iID09IG0ubV9iICYmIG1fYyA9PSBtLm1fYyAmJiBtX2QgPT0g
bS5tX2QgJiYgbV9lID09IG0ubV9lICYmIG1fZiA9PSBtLm1fZjsKIH0KIAotUmVmPFRyYW5zZm9y
bU9wZXJhdGlvbj4gTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkp
CitSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5k
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRPcHRpb25zJiBvcHRp
b25zLCBib29sIGJsZW5kVG9JZGVudGl0eSkKIHsKLSAgICBhdXRvIGNyZWF0ZU9wZXJhdGlvbiA9
IFtdIChUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdG8sIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmcm9t
LCBkb3VibGUgcHJvZ3Jlc3MpIHsKLSAgICAgICAgdG8uYmxlbmQoZnJvbSwgcHJvZ3Jlc3MpOwor
ICAgIGF1dG8gY3JlYXRlT3BlcmF0aW9uID0gW10gKFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0bywg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGZyb20sIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucykg
eworICAgICAgICB0by5ibGVuZChmcm9tLCBvcHRpb25zLnByb2dyZXNzKTsKICAgICAgICAgcmV0
dXJuIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRvKTsKICAgICB9OwogCkBAIC01
NCw4ICs1NSw4IEBAIFJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IE1hdHJpeFRyYW5zZm9ybU9wZXJh
dGlvbjo6YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uCiAgICAgfQogCiAgICAgaWYgKGJs
ZW5kVG9JZGVudGl0eSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU9wZXJhdGlvbihmcm9tVCwgdG9U
LCBwcm9ncmVzcyk7Ci0gICAgcmV0dXJuIGNyZWF0ZU9wZXJhdGlvbih0b1QsIGZyb21ULCBwcm9n
cmVzcyk7CisgICAgICAgIHJldHVybiBjcmVhdGVPcGVyYXRpb24oZnJvbVQsIHRvVCwgb3B0aW9u
cyk7CisgICAgcmV0dXJuIGNyZWF0ZU9wZXJhdGlvbih0b1QsIGZyb21ULCBvcHRpb25zKTsKIH0K
IAogdm9pZCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL01hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaAppbmRleCBiNTY3
YmM3ZmE0ZGMxMjhkYzI5ZDJmZjJlZDg1YjMyZmIyYTVmNDAzLi4yZGQ3MjhlZTBiNmNjNTIyMjdi
ZGU0NWI4NzQ2YjRhMDQyYTkzMTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJhbnNmb3Jt
T3BlcmF0aW9uLmgKQEAgLTMwLDYgKzMwLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitz
dHJ1Y3QgQmxlbmRPcHRpb25zOworCiBjbGFzcyBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24gZmlu
YWwgOiBwdWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVm
PE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91
YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpCkBAIC02Miw3ICs2NCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBSZWY8VHJhbnNmb3Jt
T3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBw
cm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSkgb3ZlcnJpZGU7CisgICAgUmVm
PFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9t
LCBjb25zdCBCbGVuZE9wdGlvbnMmLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKSBvdmVy
cmlkZTsKIAogICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Q
ZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL1BlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcApp
bmRleCBkNGNkZTljODljZjA1ZmZkYzU1ODAwNzEzYWNhN2ZmOTAxZDFiZjhjLi41MDk0MDJiMzJl
MmQxOTdiYzg4YzU2YmVlZTM5NGUwYjA1MTE3YTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1BlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L1BlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcApAQCAtMzksMTQgKzM5LDE0IEBAIGJv
b2wgUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9uJiBvdGhlcikKICAgICByZXR1cm4gbV9wID09IGRvd25jYXN0PFBlcnNwZWN0
aXZlVHJhbnNmb3JtT3BlcmF0aW9uPihvdGhlcikubV9wOwogfQogCi1SZWY8VHJhbnNmb3JtT3Bl
cmF0aW9uPiBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5
KQorUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246
OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRPcHRpb25z
JiBvcHRpb25zLCBib29sIGJsZW5kVG9JZGVudGl0eSkKIHsKICAgICBpZiAoZnJvbSAmJiAhZnJv
bS0+aXNTYW1lVHlwZSgqdGhpcykpCiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAKICAgICBp
ZiAoYmxlbmRUb0lkZW50aXR5KSB7CiAgICAgICAgIGRvdWJsZSBwID0gZmxvYXRWYWx1ZUZvckxl
bmd0aChtX3AsIDEpOwotICAgICAgICBwID0gV2ViQ29yZTo6YmxlbmQocCwgMS4wLCBwcm9ncmVz
cyk7IC8vIEZJWE1FOiB0aGlzIHNlZW1zIHdyb25nLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTI3MDAKKyAgICAgICAgcCA9IFdlYkNvcmU6OmJsZW5kKHAsIDEuMCwg
b3B0aW9ucyk7IC8vIEZJWE1FOiB0aGlzIHNlZW1zIHdyb25nLiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI3MDAKICAgICAgICAgcmV0dXJuIFBlcnNwZWN0aXZlVHJh
bnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKGNsYW1wVG9Qb3NpdGl2ZUludGVnZXIocCks
IExlbmd0aFR5cGU6OkZpeGVkKSk7CiAgICAgfQogICAgIApAQCAtNTgsNyArNTgsNyBAQCBSZWY8
VHJhbnNmb3JtT3BlcmF0aW9uPiBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQo
Y29uc3QgVHJhbnNmb3JtT3BlcgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRvVDsKICAgICBm
cm9tVC5hcHBseVBlcnNwZWN0aXZlKGZsb2F0VmFsdWVGb3JMZW5ndGgoZnJvbVAsIDEpKTsKICAg
ICB0b1QuYXBwbHlQZXJzcGVjdGl2ZShmbG9hdFZhbHVlRm9yTGVuZ3RoKHRvUCwgMSkpOwotICAg
IHRvVC5ibGVuZChmcm9tVCwgcHJvZ3Jlc3MpOworICAgIHRvVC5ibGVuZChmcm9tVCwgb3B0aW9u
cy5wcm9ncmVzcyk7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXg6OkRlY29tcG9zZWQ0VHlwZSBk
ZWNvbXA7CiAgICAgdG9ULmRlY29tcG9zZTQoZGVjb21wKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRyYW5zZm9y
bU9wZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCmluZGV4IDg5ZDA5NmYzZGM4YTE5YzZl
OWZjZjgxMDE1Y2RjZTUzMzNiNjNmYzguLjQzOWE0MWRiNWUxMmY1ODBjOTZlYjlkNDc1ZDQzNzhl
MTg1NTIyNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1BlcnNwZWN0aXZlVHJhbnNmb3JtT3Bl
cmF0aW9uLmgKQEAgLTMyLDYgKzMyLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1
Y3QgQmxlbmRPcHRpb25zOworCiBjbGFzcyBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbiBm
aW5hbCA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyBS
ZWY8UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZShjb25zdCBMZW5ndGgmIHAp
CkBAIC01OSw3ICs2MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxz
ZSkgb3ZlcnJpZGU7CisgICAgUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBCbGVuZE9wdGlvbnMmLCBib29sIGJsZW5kVG9J
ZGVudGl0eSA9IGZhbHNlKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJl
YW0mKSBjb25zdCBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdHJhbnNmb3Jtcy9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Sb3RhdGVUcmFuc2Zvcm1PcGVy
YXRpb24uY3BwCmluZGV4IDk2MmU3YzEwNDUwODgwMTA4MGIwYjA1ZDcwYTExNmFiYzg3ZWY2ZDIu
LmE5MTNlM2QxY2UyNzM4MjE1ZjgzNzUxMWE5MTM5ZjUzMDExOTU0MjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKQEAgLTM3LDEzICszNywxMyBAQCBi
b29sIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6b3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb24mIG90aGVyKSBjb25zdAogICAgIHJldHVybiBtX3ggPT0gci5tX3ggJiYgbV95ID09
IHIubV95ICYmIG1feiA9PSByLm1feiAmJiBtX2FuZ2xlID09IHIubV9hbmdsZTsKIH0KIAotUmVm
PFRyYW5zZm9ybU9wZXJhdGlvbj4gUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25z
dCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRv
SWRlbnRpdHkpCitSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRp
b246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRPcHRp
b25zJiBvcHRpb25zLCBib29sIGJsZW5kVG9JZGVudGl0eSkKIHsKICAgICBpZiAoZnJvbSAmJiAh
ZnJvbS0+aXNTYW1lVHlwZSgqdGhpcykpCiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAKICAg
ICBpZiAoYmxlbmRUb0lkZW50aXR5KQotICAgICAgICByZXR1cm4gUm90YXRlVHJhbnNmb3JtT3Bl
cmF0aW9uOjpjcmVhdGUobV94LCBtX3ksIG1feiwgbV9hbmdsZSAtIG1fYW5nbGUgKiBwcm9ncmVz
cywgdHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3Jl
YXRlKG1feCwgbV95LCBtX3osIG1fYW5nbGUgLSBtX2FuZ2xlICogb3B0aW9ucy5wcm9ncmVzcywg
dHlwZSgpKTsKICAgICAKICAgICBjb25zdCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb21P
cCA9IGRvd25jYXN0PFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbj4oZnJvbSk7CiAgICAgCkBAIC01
NSw3ICs1NSw3IEBAIFJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IFJvdGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbjo6YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uCiAgICAgICAgIHJldHVybiBSb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShmcm9tT3AgPyBmcm9tT3AtPm1feCA6IG1feCwg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tT3Ag
PyBmcm9tT3AtPm1feSA6IG1feSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmcm9tT3AgPyBmcm9tT3AtPm1feiA6IG1feiwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tQW5n
bGUsIG1fYW5nbGUsIHByb2dyZXNzKSwgdHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21BbmdsZSwgbV9hbmds
ZSwgb3B0aW9ucyksIHR5cGUoKSk7CiAgICAgfQogCiAgICAgY29uc3QgUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uKiB0b09wID0gdGhpczsKQEAgLTc0LDcgKzc0LDcgQEAgUmVmPFRyYW5zZm9ybU9w
ZXJhdGlvbj4gUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb24KICAgICAgICAgKHRvT3AgPyB0b09wLT5tX2FuZ2xlIDogMCkpOwogICAgIAogICAg
IC8vIEJsZW5kIHRoZW0KLSAgICB0b1QuYmxlbmQoZnJvbVQsIHByb2dyZXNzKTsKKyAgICB0b1Qu
YmxlbmQoZnJvbVQsIG9wdGlvbnMucHJvZ3Jlc3MpOwogICAgIAogICAgIC8vIEV4dHJhY3QgdGhl
IHJlc3VsdCBhcyBhIHF1YXRlcm5pb24KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6RGVjb21w
b3NlZDRUeXBlIGRlY29tcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bi5oCmluZGV4IDEyNzE4NzY1NjkwZjAwZWFjOTY3ZDk0NzU2ZGJlM2JlNDdmNTVkZmYuLmM0ZDQz
Y2M3YmIyZDY4YTZjOWQyOTE5MTFmYjA1NTdhM2M2MWQyMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9S
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaApAQCAtMjksNiArMjksOCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK3N0cnVjdCBCbGVuZE9wdGlvbnM7CisKIGNsYXNzIFJvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbiBmaW5hbCA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24gewogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVhdGUoZG91YmxlIGFu
Z2xlLCBPcGVyYXRpb25UeXBlIHR5cGUpCkBAIC01Myw3ICs1NSw3IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIFJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZh
bHNlKSBmaW5hbDsKKyAgICBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFu
c2Zvcm1PcGVyYXRpb24qIGZyb20sIGNvbnN0IEJsZW5kT3B0aW9ucyYsIGJvb2wgYmxlbmRUb0lk
ZW50aXR5ID0gZmFsc2UpIGZpbmFsOwogCiAgICAgYm9vbCBpc0lkZW50aXR5KCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gIW1fYW5nbGU7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uLmNwcAppbmRleCA4M2NmM2Q0NDA0ZjJlYzM4YjBjNzkwZGJhMTMxYTdlZDU1YWJh
YjYyLi4xOGQ4YmQ2ZGFiOGY3MTczYzhhYzU4ZjRiOGFiMTE1YzFjMDczZDI4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NjYWxlVHJhbnNm
b3JtT3BlcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcApAQCAtMzUsMjMgKzM1LDIzIEBA
IGJvb2wgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9uJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gbV94ID09IHMubV94ICYmIG1feSA9
PSBzLm1feSAmJiBtX3ogPT0gcy5tX3o7CiB9CiAKLVJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IFNj
YWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZy
b20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkpCitSZWY8VHJhbnNmb3Jt
T3BlcmF0aW9uPiBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9uKiBmcm9tLCBjb25zdCBCbGVuZE9wdGlvbnMmIG9wdGlvbnMsIGJvb2wgYmxlbmRU
b0lkZW50aXR5KQogewogICAgIGlmIChmcm9tICYmICFmcm9tLT5pc1NhbWVUeXBlKCp0aGlzKSkK
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIAogICAgIGlmIChibGVuZFRvSWRlbnRpdHkpCi0g
ICAgICAgIHJldHVybiBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJs
ZW5kKG1feCwgMS4wLCBwcm9ncmVzcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKG1feSwgMS4wLCBwcm9ncmVzcyksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5k
KG1feiwgMS4wLCBwcm9ncmVzcyksIHR5cGUoKSk7CisgICAgICAgIHJldHVybiBTY2FsZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKG1feCwgMS4wLCBvcHRpb25zKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6
YmxlbmQobV95LCAxLjAsIG9wdGlvbnMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChtX3osIDEuMCwgb3B0aW9ucyksIHR5cGUo
KSk7CiAgICAgCiAgICAgY29uc3QgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb21PcCA9IGRv
d25jYXN0PFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uPihmcm9tKTsKICAgICBkb3VibGUgZnJvbVgg
PSBmcm9tT3AgPyBmcm9tT3AtPm1feCA6IDEuMDsKICAgICBkb3VibGUgZnJvbVkgPSBmcm9tT3Ag
PyBmcm9tT3AtPm1feSA6IDEuMDsKICAgICBkb3VibGUgZnJvbVogPSBmcm9tT3AgPyBmcm9tT3At
Pm1feiA6IDEuMDsKLSAgICByZXR1cm4gU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShX
ZWJDb3JlOjpibGVuZChmcm9tWCwgbV94LCBwcm9ncmVzcyksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVksIG1feSwgcHJvZ3Jl
c3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6
OmJsZW5kKGZyb21aLCBtX3osIHByb2dyZXNzKSwgdHlwZSgpKTsKKyAgICByZXR1cm4gU2NhbGVU
cmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChmcm9tWCwgbV94LCBvcHRp
b25zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3Jl
OjpibGVuZChmcm9tWSwgbV95LCBvcHRpb25zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tWiwgbV96LCBvcHRpb25zKSwgdHlw
ZSgpKTsKIH0KIAogdm9pZCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6ZHVtcChUZXh0U3RyZWFt
JiB0cykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaAppbmRl
eCBmOGUxNTczODc4YThhZjllN2QxZjkzMTk3MzJiNzM3Njk3MmJhNjg0Li42ZDgyMWMzMjRjYzYx
NWIxMzQzZWZhNzk0MTRkYzdiOTcxZmUwNWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5z
Zm9ybU9wZXJhdGlvbi5oCkBAIC0yOSw2ICsyOSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorc3RydWN0IEJsZW5kT3B0aW9uczsKKwogY2xhc3MgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24g
ZmluYWwgOiBwdWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UmVmPFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVhdGUoZG91YmxlIHN4LCBkb3VibGUgc3ks
IE9wZXJhdGlvblR5cGUgdHlwZSkKQEAgLTUyLDcgKzU0LDcgQEAgcHVibGljOgogCiAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYpIGNvbnN0IGZpbmFsOwogCi0g
ICAgUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9u
KiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpIGZp
bmFsOworICAgIFJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRPcHRpb25zJiwgYm9vbCBibGVuZFRvSWRlbnRpdHkg
PSBmYWxzZSkgZmluYWw7CiAKICAgICBib29sIGlzSWRlbnRpdHkoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX3ggPT0gMSAmJiAgbV95ID09IDEgJiYgIG1feiA9PSAxOyB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5zZm9y
bU9wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCmluZGV4IDgwOTA3MGFkZTY4NzYxYzg0NmE4
MDk5MzdlODNhYTQ2MGIwMjk3YWEuLmQ1N2VjMmE5NWFkNjNhZGM1NjlmODgxYTdlZDMzYTE3NmM0
ZDRhNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmNwcApAQCAt
MzUsMTggKzM1LDE4IEBAIGJvb2wgU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6b3BlcmF0b3I9PShj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG90aGVyKSBjb25zdAogICAgIHJldHVybiBtX2FuZ2xl
WCA9PSBzLm1fYW5nbGVYICYmIG1fYW5nbGVZID09IHMubV9hbmdsZVk7CiB9CiAKLVJlZjxUcmFu
c2Zvcm1PcGVyYXRpb24+IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0
eSkKK1JlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5k
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRPcHRpb25zJiBvcHRp
b25zLCBib29sIGJsZW5kVG9JZGVudGl0eSkKIHsKICAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNT
YW1lVHlwZSgqdGhpcykpCiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAKICAgICBpZiAoYmxl
bmRUb0lkZW50aXR5KQotICAgICAgICByZXR1cm4gU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3Jl
YXRlKFdlYkNvcmU6OmJsZW5kKG1fYW5nbGVYLCAwLjAsIHByb2dyZXNzKSwgV2ViQ29yZTo6Ymxl
bmQobV9hbmdsZVksIDAuMCwgcHJvZ3Jlc3MpLCB0eXBlKCkpOworICAgICAgICByZXR1cm4gU2tl
d1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKG1fYW5nbGVYLCAwLjAs
IG9wdGlvbnMpLCBXZWJDb3JlOjpibGVuZChtX2FuZ2xlWSwgMC4wLCBvcHRpb25zKSwgdHlwZSgp
KTsKICAgICAKICAgICBjb25zdCBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSBkb3du
Y2FzdDxTa2V3VHJhbnNmb3JtT3BlcmF0aW9uPihmcm9tKTsKICAgICBkb3VibGUgZnJvbUFuZ2xl
WCA9IGZyb21PcCA/IGZyb21PcC0+bV9hbmdsZVggOiAwOwogICAgIGRvdWJsZSBmcm9tQW5nbGVZ
ID0gZnJvbU9wID8gZnJvbU9wLT5tX2FuZ2xlWSA6IDA7Ci0gICAgcmV0dXJuIFNrZXdUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChmcm9tQW5nbGVYLCBtX2FuZ2xlWCwg
cHJvZ3Jlc3MpLCBXZWJDb3JlOjpibGVuZChmcm9tQW5nbGVZLCBtX2FuZ2xlWSwgcHJvZ3Jlc3Mp
LCB0eXBlKCkpOworICAgIHJldHVybiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoV2Vi
Q29yZTo6YmxlbmQoZnJvbUFuZ2xlWCwgbV9hbmdsZVgsIG9wdGlvbnMpLCBXZWJDb3JlOjpibGVu
ZChmcm9tQW5nbGVZLCBtX2FuZ2xlWSwgb3B0aW9ucyksIHR5cGUoKSk7CiB9CiAKIHZvaWQgU2tl
d1RyYW5zZm9ybU9wZXJhdGlvbjo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5z
Zm9ybU9wZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgKaW5kZXggNzk3ZGM5NTBkMDUxMjk4NTA4Zjg3
NmZhMjJhNTBkZTAxMGUzMTgxYi4uOGE2YzA3MjU0OTg4MWZjMWIyMjgzMjFkZWI2M2M4YWIxMWQ2
OWZlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgKQEAgLTI5LDYg
KzI5LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQmxlbmRPcHRpb25zOwor
CiBjbGFzcyBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uIGZpbmFsIDogcHVibGljIFRyYW5zZm9ybU9w
ZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTa2V3VHJhbnNmb3JtT3BlcmF0aW9u
PiBjcmVhdGUoZG91YmxlIGFuZ2xlWCwgZG91YmxlIGFuZ2xlWSwgT3BlcmF0aW9uVHlwZSB0eXBl
KQpAQCAtNTYsNyArNTgsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3Bl
cmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFs
c2UpIG92ZXJyaWRlOworICAgIFJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRPcHRpb25zJiwgYm9vbCBibGVuZFRv
SWRlbnRpdHkgPSBmYWxzZSkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3Ry
ZWFtJikgY29uc3QgZmluYWw7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb24uaApp
bmRleCAwNTc0YTU0ZjcwNTc0OTIzODA3YTE4ZDZhMjg5ZTczNzk2NTVkMjQ0Li43Y2M0OWE4ZDg2
M2U1NzAwZGMxZGY0MGIxYjZiODkyYWYwNmZlY2VmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3Bl
cmF0aW9uLmgKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBD
U1MgVHJhbnNmb3JtcyAobWF5IGJlY29tZSBwYXJ0IG9mIENTUzMpCitzdHJ1Y3QgQmxlbmRPcHRp
b247CiAKIGNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFRyYW5z
Zm9ybU9wZXJhdGlvbj4gewogcHVibGljOgpAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAgICAg
Ly8gUmV0dXJuIHRydWUgaWYgdGhlIGJvcmRlckJveFNpemUgd2FzIHVzZWQgaW4gdGhlIGNvbXB1
dGF0aW9uLCBmYWxzZSBvdGhlcndpc2UuCiAgICAgdmlydHVhbCBib29sIGFwcGx5KFRyYW5zZm9y
bWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdCA9IDA7
CiAKLSAgICB2aXJ0dWFsIFJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0
eSA9IGZhbHNlKSA9IDA7CisgICAgdmlydHVhbCBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVu
ZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGNvbnN0IEJsZW5kT3B0aW9ucyYsIGJv
b2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpID0gMDsKIAogICAgIE9wZXJhdGlvblR5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIGJvb2wgaXNTYW1lVHlwZShjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb24mIG90aGVyKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gb3RoZXIu
dHlwZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmNwcAppbmRleCBiMTQ1
MmZlMmI2NjdiZGVmMzFhOGJjOWNlMzFmNGU2ZDJlYzdiMzgxLi4xNWQ5NzNiZGJlNTQ2NDcwNWI0
NWY2NGQ0OTg0YjdhMDdiOTMwZDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9u
cy5jcHAKQEAgLTczLDcgKzczLDcgQEAgYm9vbCBUcmFuc2Zvcm1PcGVyYXRpb25zOjphZmZlY3Rl
ZEJ5VHJhbnNmb3JtT3JpZ2luKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVRyYW5z
Zm9ybU9wZXJhdGlvbnMgVHJhbnNmb3JtT3BlcmF0aW9uczo6YmxlbmRCeU1hdGNoaW5nT3BlcmF0
aW9ucyhjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBjb25zdCBkb3VibGUmIHByb2dy
ZXNzKSBjb25zdAorVHJhbnNmb3JtT3BlcmF0aW9ucyBUcmFuc2Zvcm1PcGVyYXRpb25zOjpibGVu
ZEJ5TWF0Y2hpbmdPcGVyYXRpb25zKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNv
bnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucykgY29uc3QKIHsKICAgICBUcmFuc2Zvcm1PcGVyYXRp
b25zIHJlc3VsdDsKIApAQCAtODMsMTIgKzgzLDEyIEBAIFRyYW5zZm9ybU9wZXJhdGlvbnMgVHJh
bnNmb3JtT3BlcmF0aW9uczo6YmxlbmRCeU1hdGNoaW5nT3BlcmF0aW9ucyhjb25zdCBUcmFuc2Zv
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAgICBSZWZQ
dHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBmcm9tT3BlcmF0aW9uID0gKGkgPCBmcm9tU2l6ZSkgPyBm
cm9tLm9wZXJhdGlvbnMoKVtpXS5nZXQoKSA6IG51bGxwdHI7CiAgICAgICAgIFJlZlB0cjxUcmFu
c2Zvcm1PcGVyYXRpb24+IHRvT3BlcmF0aW9uID0gKGkgPCB0b1NpemUpID8gb3BlcmF0aW9ucygp
W2ldLmdldCgpIDogbnVsbHB0cjsKLSAgICAgICAgUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4g
YmxlbmRlZE9wZXJhdGlvbiA9IHRvT3BlcmF0aW9uID8gdG9PcGVyYXRpb24tPmJsZW5kKGZyb21P
cGVyYXRpb24uZ2V0KCksIHByb2dyZXNzKSA6IChmcm9tT3BlcmF0aW9uID8gUmVmUHRyPFRyYW5z
Zm9ybU9wZXJhdGlvbj4oZnJvbU9wZXJhdGlvbi0+YmxlbmQobnVsbHB0ciwgcHJvZ3Jlc3MsIHRy
dWUpKSA6IG51bGxwdHIpOworICAgICAgICBSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVu
ZGVkT3BlcmF0aW9uID0gdG9PcGVyYXRpb24gPyB0b09wZXJhdGlvbi0+YmxlbmQoZnJvbU9wZXJh
dGlvbi5nZXQoKSwgb3B0aW9ucykgOiAoZnJvbU9wZXJhdGlvbiA/IFJlZlB0cjxUcmFuc2Zvcm1P
cGVyYXRpb24+KGZyb21PcGVyYXRpb24tPmJsZW5kKG51bGxwdHIsIG9wdGlvbnMsIHRydWUpKSA6
IG51bGxwdHIpOwogICAgICAgICBpZiAoYmxlbmRlZE9wZXJhdGlvbikKICAgICAgICAgICAgIHJl
c3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKGJsZW5kZWRPcGVyYXRpb24pOwogICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIGF1dG8gaWRlbnRpdHlPcGVyYXRpb24gPSBJZGVudGl0eVRyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBpZiAocHJvZ3Jlc3MgPiAwLjUpCisg
ICAgICAgICAgICBpZiAob3B0aW9ucy5wcm9ncmVzcyA+IDAuNSkKICAgICAgICAgICAgICAgICBy
ZXN1bHQub3BlcmF0aW9ucygpLmFwcGVuZCh0b09wZXJhdGlvbiA/IHRvT3BlcmF0aW9uIDogV1RG
TW92ZShpZGVudGl0eU9wZXJhdGlvbikpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKGZyb21PcGVyYXRpb24gPyBmcm9tT3BlcmF0
aW9uIDogV1RGTW92ZShpZGVudGl0eU9wZXJhdGlvbikpOwpAQCAtOTgsNyArOTgsNyBAQCBUcmFu
c2Zvcm1PcGVyYXRpb25zIFRyYW5zZm9ybU9wZXJhdGlvbnM6OmJsZW5kQnlNYXRjaGluZ09wZXJh
dGlvbnMoY29uc3QgVHJhbnNmbwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVRyYW5zZm9ybU9w
ZXJhdGlvbnMgVHJhbnNmb3JtT3BlcmF0aW9uczo6YmxlbmRCeVVzaW5nTWF0cml4SW50ZXJwb2xh
dGlvbihjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGNv
bnN0IExheW91dFNpemUmIHNpemUpIGNvbnN0CitUcmFuc2Zvcm1PcGVyYXRpb25zIFRyYW5zZm9y
bU9wZXJhdGlvbnM6OmJsZW5kQnlVc2luZ01hdHJpeEludGVycG9sYXRpb24oY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgQmxlbmRPcHRpb25zJiBvcHRpb25zLCBjb25zdCBM
YXlvdXRTaXplJiBzaXplKSBjb25zdAogewogICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgcmVzdWx0
OwogCkBAIC0xMDgsNyArMTA4LDcgQEAgVHJhbnNmb3JtT3BlcmF0aW9ucyBUcmFuc2Zvcm1PcGVy
YXRpb25zOjpibGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9uKGNvbnN0IFQKICAgICBmcm9t
LmFwcGx5KHNpemUsIGZyb21UcmFuc2Zvcm0pOwogICAgIGFwcGx5KHNpemUsIHRvVHJhbnNmb3Jt
KTsKIAotICAgIHRvVHJhbnNmb3JtLmJsZW5kKGZyb21UcmFuc2Zvcm0sIHByb2dyZXNzKTsKKyAg
ICB0b1RyYW5zZm9ybS5ibGVuZChmcm9tVHJhbnNmb3JtLCBvcHRpb25zLnByb2dyZXNzKTsKIAog
ICAgIC8vIEFwcGVuZCB0aGUgcmVzdWx0CiAgICAgcmVzdWx0Lm9wZXJhdGlvbnMoKS5hcHBlbmQo
TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0b1RyYW5zZm9ybSkpOwpAQCAtMTE2
LDE1ICsxMTYsMTUgQEAgVHJhbnNmb3JtT3BlcmF0aW9ucyBUcmFuc2Zvcm1PcGVyYXRpb25zOjpi
bGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9uKGNvbnN0IFQKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1UcmFuc2Zvcm1PcGVyYXRpb25zIFRyYW5zZm9ybU9wZXJhdGlvbnM6OmJsZW5kKGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgY29uc3QgTGF5
b3V0U2l6ZSYgc2l6ZSkgY29uc3QKK1RyYW5zZm9ybU9wZXJhdGlvbnMgVHJhbnNmb3JtT3BlcmF0
aW9uczo6YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgQmxlbmRP
cHRpb25zJiBvcHRpb25zLCBjb25zdCBMYXlvdXRTaXplJiBzaXplKSBjb25zdAogewogICAgIGlm
IChmcm9tID09ICp0aGlzKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAgICBpZiAoZnJvbS5z
aXplKCkgJiYgZnJvbS5vcGVyYXRpb25zTWF0Y2goKnRoaXMpKQotICAgICAgICByZXR1cm4gYmxl
bmRCeU1hdGNoaW5nT3BlcmF0aW9ucyhmcm9tLCBwcm9ncmVzcyk7CisgICAgICAgIHJldHVybiBi
bGVuZEJ5TWF0Y2hpbmdPcGVyYXRpb25zKGZyb20sIG9wdGlvbnMpOwogCi0gICAgcmV0dXJuIGJs
ZW5kQnlVc2luZ01hdHJpeEludGVycG9sYXRpb24oZnJvbSwgcHJvZ3Jlc3MsIHNpemUpOworICAg
IHJldHVybiBibGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9uKGZyb20sIG9wdGlvbnMsIHNp
emUpOwogfQogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb25zJiBvcHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbnMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5o
CmluZGV4IGY4MjU2YTdmNGQ1YWI3YmIxOGU2YWY0NDYwMzAzNzkzNjk4MjFkMWQuLmQ2NTQxYTAw
NjFiNjgyOTdjY2VjMTMwNTMzZmY2MDZmZWM0YWMyYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3Jt
T3BlcmF0aW9ucy5oCkBAIC0zMSw2ICszMSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
c3RydWN0IEJsZW5kT3B0aW9uczsKKwogY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9ucyB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC04Myw5ICs4NSw5IEBAIHB1Ymxp
YzoKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW9ucy5zaXplKCk7
IH0KICAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGF0KHNpemVfdCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gaW5kZXggPCBtX29wZXJhdGlvbnMuc2l6ZSgpID8gbV9vcGVyYXRpb25zLmF0KGlu
ZGV4KS5nZXQoKSA6IDA7IH0KIAotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRCeU1hdGNo
aW5nT3BlcmF0aW9ucyhjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBjb25zdCBkb3Vi
bGUmIHByb2dyZXNzKSBjb25zdDsKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kQnlVc2lu
Z01hdHJpeEludGVycG9sYXRpb24oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgZG91
YmxlIHByb2dyZXNzLCBjb25zdCBMYXlvdXRTaXplJikgY29uc3Q7Ci0gICAgVHJhbnNmb3JtT3Bl
cmF0aW9ucyBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBkb3VibGUgcHJv
Z3Jlc3MsIGNvbnN0IExheW91dFNpemUmKSBjb25zdDsKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25z
IGJsZW5kQnlNYXRjaGluZ09wZXJhdGlvbnMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJv
bSwgY29uc3QgQmxlbmRPcHRpb25zJikgY29uc3Q7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBi
bGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9uKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMm
IGZyb20sIGNvbnN0IEJsZW5kT3B0aW9ucyYsIGNvbnN0IExheW91dFNpemUmKSBjb25zdDsKKyAg
ICBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZy
b20sIGNvbnN0IEJsZW5kT3B0aW9ucyYsIGNvbnN0IExheW91dFNpemUmKSBjb25zdDsKIAogcHJp
dmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4+IG1fb3BlcmF0aW9u
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcApp
bmRleCA5Njk3M2JlMzQxMmNmNzEwODUzMGQ0NGUyZTI5YmI2MWZlMWJmMDViLi5mNDcwMTU4MjIz
Zjg1NTliMzJmNWE0ZDQ1ZmU2MmE1NzE0MDhlOWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9U
cmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAK
KyNpbmNsdWRlICJBbmltYXRpb25VdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNp
b24uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTM1LDIwICszNiwy
MCBAQCBib29sIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6b3BlcmF0b3I9PShjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb24mIG90aGVyKSBjbwogICAgIHJldHVybiBtX3ggPT0gdC5tX3ggJiYg
bV95ID09IHQubV95ICYmIG1feiA9PSB0Lm1fejsKIH0KIAotUmVmPFRyYW5zZm9ybU9wZXJhdGlv
bj4gVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkpCitSZWY8
VHJhbnNmb3JtT3BlcmF0aW9uPiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRPcHRpb25zJiBvcHRpb25z
LCBib29sIGJsZW5kVG9JZGVudGl0eSkKIHsKICAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTYW1l
VHlwZSgqdGhpcykpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAogICAgIExlbmd0aCB6ZXJvTGVu
Z3RoKDAsIExlbmd0aFR5cGU6OkZpeGVkKTsKICAgICBpZiAoYmxlbmRUb0lkZW50aXR5KQotICAg
ICAgICByZXR1cm4gVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6
YmxlbmQobV94LCB6ZXJvTGVuZ3RoLCBwcm9ncmVzcyksIFdlYkNvcmU6OmJsZW5kKG1feSwgemVy
b0xlbmd0aCwgcHJvZ3Jlc3MpLCBXZWJDb3JlOjpibGVuZChtX3osIHplcm9MZW5ndGgsIHByb2dy
ZXNzKSwgdHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKG1feCwgemVyb0xlbmd0aCwgb3B0aW9ucyksIFdlYkNv
cmU6OmJsZW5kKG1feSwgemVyb0xlbmd0aCwgb3B0aW9ucyksIFdlYkNvcmU6OmJsZW5kKG1feiwg
emVyb0xlbmd0aCwgb3B0aW9ucyksIHR5cGUoKSk7CiAKICAgICBjb25zdCBUcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb24qIGZyb21PcCA9IGRvd25jYXN0PFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbj4oZnJvbSk7CiAgICAgTGVuZ3RoIGZyb21YID0gZnJvbU9wID8gZnJvbU9wLT5tX3ggOiB6
ZXJvTGVuZ3RoOwogICAgIExlbmd0aCBmcm9tWSA9IGZyb21PcCA/IGZyb21PcC0+bV95IDogemVy
b0xlbmd0aDsKICAgICBMZW5ndGggZnJvbVogPSBmcm9tT3AgPyBmcm9tT3AtPm1feiA6IHplcm9M
ZW5ndGg7Ci0gICAgcmV0dXJuIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKFdl
YkNvcmU6OmJsZW5kKGZyb21YLCB4KCksIHByb2dyZXNzKSwgV2ViQ29yZTo6YmxlbmQoZnJvbVks
IHkoKSwgcHJvZ3Jlc3MpLCBXZWJDb3JlOjpibGVuZChmcm9tWiwgeigpLCBwcm9ncmVzcyksIHR5
cGUoKSk7CisgICAgcmV0dXJuIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKFdl
YkNvcmU6OmJsZW5kKGZyb21YLCB4KCksIG9wdGlvbnMpLCBXZWJDb3JlOjpibGVuZChmcm9tWSwg
eSgpLCBvcHRpb25zKSwgV2ViQ29yZTo6YmxlbmQoZnJvbVosIHooKSwgb3B0aW9ucyksIHR5cGUo
KSk7CiB9CiAKIHZvaWQgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpkdW1wKFRleHRTdHJl
YW0mIHRzKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uLmgKaW5kZXggZWQ3YzhmZGQ2OTcwNzFhOTk1Mzc2NmJlZGRiMmI1NTVhN2FhZDQ4MC4uMzZl
MjE0NDYxZWNiZDE4NzA1YThiZGRlYmZlZmMxMWE4Mjk2OTdlNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCkBAIC0zMSw2ICszMSw4IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorc3RydWN0IEJsZW5kT3B0aW9uczsKKwogY2xhc3MgVHJhbnNs
YXRlVHJhbnNmb3JtT3BlcmF0aW9uIGZpbmFsIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24+IGNy
ZWF0ZShjb25zdCBMZW5ndGgmIHR4LCBjb25zdCBMZW5ndGgmIHR5LCBPcGVyYXRpb25UeXBlIHR5
cGUpCkBAIC02Niw3ICs2OCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBUcmFuc2Zvcm1PcGVyYXRpb24mKSBjb25zdCBmaW5hbDsKIAotICAgIFJlZjxUcmFuc2Zvcm1P
cGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHBy
b2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKSBmaW5hbDsKKyAgICBSZWY8VHJh
bnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGNv
bnN0IEJsZW5kT3B0aW9ucyYsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpIGZpbmFsOwog
CiAgICAgYm9vbCBpc1JlcHJlc2VudGFibGVJbjJEKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV96
LmlzWmVybygpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9CYXNpY1NoYXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQmFzaWNT
aGFwZXMuY3BwCmluZGV4IDhkZGMxNzI5YWM4ZmU1ZTZjNWU2Y2FlNTI1M2VkYjYyMzQzMTM3ZmEu
Ljc2ZjZmOGE4ZmIwM2JkNTRmYTQwY2UxN2RjMWMzY2U3NjMyZTFjNjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0Jhc2ljU2hhcGVzLmNwcApAQCAtMTg5LDE1ICsxODks
MTUgQEAgYm9vbCBCYXNpY1NoYXBlQ2lyY2xlOjpjYW5CbGVuZChjb25zdCBCYXNpY1NoYXBlJiBv
dGhlcikgY29uc3QKICAgICByZXR1cm4gcmFkaXVzKCkuY2FuQmxlbmQoZG93bmNhc3Q8QmFzaWNT
aGFwZUNpcmNsZT4ob3RoZXIpLnJhZGl1cygpKTsKIH0KIAotUmVmPEJhc2ljU2hhcGU+IEJhc2lj
U2hhcGVDaXJjbGU6OmJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIG90aGVyLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0CitSZWY8QmFzaWNTaGFwZT4gQmFzaWNTaGFwZUNpcmNsZTo6YmxlbmQoY29uc3Qg
QmFzaWNTaGFwZSYgb3RoZXIsIGNvbnN0IEJsZW5kT3B0aW9ucyYgb3B0aW9ucykgY29uc3QKIHsK
ICAgICBBU1NFUlQodHlwZSgpID09IG90aGVyLnR5cGUoKSk7CiAgICAgYXV0byYgb3RoZXJDaXJj
bGUgPSBkb3duY2FzdDxCYXNpY1NoYXBlQ2lyY2xlPihvdGhlcik7CiAgICAgYXV0byByZXN1bHQg
PSAgQmFzaWNTaGFwZUNpcmNsZTo6Y3JlYXRlKCk7CiAKLSAgICByZXN1bHQtPnNldENlbnRlclgo
bV9jZW50ZXJYLmJsZW5kKG90aGVyQ2lyY2xlLmNlbnRlclgoKSwgcHJvZ3Jlc3MpKTsKLSAgICBy
ZXN1bHQtPnNldENlbnRlclkobV9jZW50ZXJZLmJsZW5kKG90aGVyQ2lyY2xlLmNlbnRlclkoKSwg
cHJvZ3Jlc3MpKTsKLSAgICByZXN1bHQtPnNldFJhZGl1cyhtX3JhZGl1cy5ibGVuZChvdGhlckNp
cmNsZS5yYWRpdXMoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXN1bHQtPnNldENlbnRlclgobV9jZW50
ZXJYLmJsZW5kKG90aGVyQ2lyY2xlLmNlbnRlclgoKSwgb3B0aW9ucykpOworICAgIHJlc3VsdC0+
c2V0Q2VudGVyWShtX2NlbnRlclkuYmxlbmQob3RoZXJDaXJjbGUuY2VudGVyWSgpLCBvcHRpb25z
KSk7CisgICAgcmVzdWx0LT5zZXRSYWRpdXMobV9yYWRpdXMuYmxlbmQob3RoZXJDaXJjbGUucmFk
aXVzKCksIG9wdGlvbnMpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yNTIsNyArMjUy
LDcgQEAgYm9vbCBCYXNpY1NoYXBlRWxsaXBzZTo6Y2FuQmxlbmQoY29uc3QgQmFzaWNTaGFwZSYg
b3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuIHJhZGl1c1goKS5jYW5CbGVuZChvdGhlckVsbGlwc2Uu
cmFkaXVzWCgpKSAmJiByYWRpdXNZKCkuY2FuQmxlbmQob3RoZXJFbGxpcHNlLnJhZGl1c1koKSk7
CiB9CiAKLVJlZjxCYXNpY1NoYXBlPiBCYXNpY1NoYXBlRWxsaXBzZTo6YmxlbmQoY29uc3QgQmFz
aWNTaGFwZSYgb3RoZXIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QKK1JlZjxCYXNpY1NoYXBlPiBC
YXNpY1NoYXBlRWxsaXBzZTo6YmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgb3RoZXIsIGNvbnN0IEJs
ZW5kT3B0aW9ucyYgb3B0aW9ucykgY29uc3QKIHsKICAgICBBU1NFUlQodHlwZSgpID09IG90aGVy
LnR5cGUoKSk7CiAgICAgYXV0byYgb3RoZXJFbGxpcHNlID0gZG93bmNhc3Q8QmFzaWNTaGFwZUVs
bGlwc2U+KG90aGVyKTsKQEAgLTI2NywxMCArMjY3LDEwIEBAIFJlZjxCYXNpY1NoYXBlPiBCYXNp
Y1NoYXBlRWxsaXBzZTo6YmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgb3RoZXIsIGRvdWJsZSBwcm9n
cmVzCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgcmVzdWx0LT5zZXRDZW50
ZXJYKG1fY2VudGVyWC5ibGVuZChvdGhlckVsbGlwc2UuY2VudGVyWCgpLCBwcm9ncmVzcykpOwot
ICAgIHJlc3VsdC0+c2V0Q2VudGVyWShtX2NlbnRlclkuYmxlbmQob3RoZXJFbGxpcHNlLmNlbnRl
clkoKSwgcHJvZ3Jlc3MpKTsKLSAgICByZXN1bHQtPnNldFJhZGl1c1gobV9yYWRpdXNYLmJsZW5k
KG90aGVyRWxsaXBzZS5yYWRpdXNYKCksIHByb2dyZXNzKSk7Ci0gICAgcmVzdWx0LT5zZXRSYWRp
dXNZKG1fcmFkaXVzWS5ibGVuZChvdGhlckVsbGlwc2UucmFkaXVzWSgpLCBwcm9ncmVzcykpOwor
ICAgIHJlc3VsdC0+c2V0Q2VudGVyWChtX2NlbnRlclguYmxlbmQob3RoZXJFbGxpcHNlLmNlbnRl
clgoKSwgb3B0aW9ucykpOworICAgIHJlc3VsdC0+c2V0Q2VudGVyWShtX2NlbnRlclkuYmxlbmQo
b3RoZXJFbGxpcHNlLmNlbnRlclkoKSwgb3B0aW9ucykpOworICAgIHJlc3VsdC0+c2V0UmFkaXVz
WChtX3JhZGl1c1guYmxlbmQob3RoZXJFbGxpcHNlLnJhZGl1c1goKSwgb3B0aW9ucykpOworICAg
IHJlc3VsdC0+c2V0UmFkaXVzWShtX3JhZGl1c1kuYmxlbmQob3RoZXJFbGxpcHNlLnJhZGl1c1ko
KSwgb3B0aW9ucykpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTMxNSw3ICszMTUsNyBA
QCBib29sIEJhc2ljU2hhcGVQb2x5Z29uOjpjYW5CbGVuZChjb25zdCBCYXNpY1NoYXBlJiBvdGhl
cikgY29uc3QKICAgICByZXR1cm4gdmFsdWVzKCkuc2l6ZSgpID09IG90aGVyUG9seWdvbi52YWx1
ZXMoKS5zaXplKCkgJiYgd2luZFJ1bGUoKSA9PSBvdGhlclBvbHlnb24ud2luZFJ1bGUoKTsKIH0K
IAotUmVmPEJhc2ljU2hhcGU+IEJhc2ljU2hhcGVQb2x5Z29uOjpibGVuZChjb25zdCBCYXNpY1No
YXBlJiBvdGhlciwgZG91YmxlIHByb2dyZXNzKSBjb25zdAorUmVmPEJhc2ljU2hhcGU+IEJhc2lj
U2hhcGVQb2x5Z29uOjpibGVuZChjb25zdCBCYXNpY1NoYXBlJiBvdGhlciwgY29uc3QgQmxlbmRP
cHRpb25zJiBvcHRpb25zKSBjb25zdAogewogICAgIEFTU0VSVCh0eXBlKCkgPT0gb3RoZXIudHlw
ZSgpKTsKIApAQCAtMzMyLDggKzMzMiw4IEBAIFJlZjxCYXNpY1NoYXBlPiBCYXNpY1NoYXBlUG9s
eWdvbjo6YmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgb3RoZXIsIGRvdWJsZSBwcm9ncmVzCiAKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSA9IGkgKyAyKSB7CiAgICAgICAgIHJl
c3VsdC0+YXBwZW5kUG9pbnQoCi0gICAgICAgICAgICBXZWJDb3JlOjpibGVuZChvdGhlclBvbHln
b24udmFsdWVzKCkuYXQoaSksIG1fdmFsdWVzLmF0KGkpLCBwcm9ncmVzcyksCi0gICAgICAgICAg
ICBXZWJDb3JlOjpibGVuZChvdGhlclBvbHlnb24udmFsdWVzKCkuYXQoaSArIDEpLCBtX3ZhbHVl
cy5hdChpICsgMSksIHByb2dyZXNzKSk7CisgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChvdGhl
clBvbHlnb24udmFsdWVzKCkuYXQoaSksIG1fdmFsdWVzLmF0KGkpLCBvcHRpb25zKSwKKyAgICAg
ICAgICAgIFdlYkNvcmU6OmJsZW5kKG90aGVyUG9seWdvbi52YWx1ZXMoKS5hdChpICsgMSksIG1f
dmFsdWVzLmF0KGkgKyAxKSwgb3B0aW9ucykpOwogICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7
CkBAIC0zNzMsMTQgKzM3MywxNCBAQCBib29sIEJhc2ljU2hhcGVQYXRoOjpjYW5CbGVuZChjb25z
dCBCYXNpY1NoYXBlJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gd2luZFJ1bGUoKSA9PSBvdGhl
clBhdGgud2luZFJ1bGUoKSAmJiBjYW5CbGVuZFNWR1BhdGhCeXRlU3RyZWFtcygqbV9ieXRlU3Ry
ZWFtLCAqb3RoZXJQYXRoLnBhdGhEYXRhKCkpOwogfQogCi1SZWY8QmFzaWNTaGFwZT4gQmFzaWNT
aGFwZVBhdGg6OmJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIGZyb20sIGRvdWJsZSBwcm9ncmVzcykg
Y29uc3QKK1JlZjxCYXNpY1NoYXBlPiBCYXNpY1NoYXBlUGF0aDo6YmxlbmQoY29uc3QgQmFzaWNT
aGFwZSYgZnJvbSwgY29uc3QgQmxlbmRPcHRpb25zJiBvcHRpb25zKSBjb25zdAogewogICAgIEFT
U0VSVCh0eXBlKCkgPT0gZnJvbS50eXBlKCkpOwogCiAgICAgYXV0byYgZnJvbVBhdGggPSBkb3du
Y2FzdDxCYXNpY1NoYXBlUGF0aD4oZnJvbSk7CiAKICAgICBhdXRvIHJlc3VsdGluZ1BhdGhCeXRl
cyA9IG1ha2VVbmlxdWU8U1ZHUGF0aEJ5dGVTdHJlYW0+KCk7Ci0gICAgYnVpbGRBbmltYXRlZFNW
R1BhdGhCeXRlU3RyZWFtKCpmcm9tUGF0aC5tX2J5dGVTdHJlYW0sICptX2J5dGVTdHJlYW0sICpy
ZXN1bHRpbmdQYXRoQnl0ZXMsIHByb2dyZXNzKTsKKyAgICBidWlsZEFuaW1hdGVkU1ZHUGF0aEJ5
dGVTdHJlYW0oKmZyb21QYXRoLm1fYnl0ZVN0cmVhbSwgKm1fYnl0ZVN0cmVhbSwgKnJlc3VsdGlu
Z1BhdGhCeXRlcywgb3B0aW9ucy5wcm9ncmVzcyk7CiAgICAgYXV0byByZXN1bHQgPSBCYXNpY1No
YXBlUGF0aDo6Y3JlYXRlKFdURk1vdmUocmVzdWx0aW5nUGF0aEJ5dGVzKSk7CiAgICAgcmVzdWx0
LT5zZXRXaW5kUnVsZSh3aW5kUnVsZSgpKTsKICAgICByZXN1bHQtPnNldFpvb20obV96b29tKTsK
QEAgLTQzMCwyMSArNDMwLDIxIEBAIGJvb2wgQmFzaWNTaGFwZUluc2V0OjpjYW5CbGVuZChjb25z
dCBCYXNpY1NoYXBlJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gdHlwZSgpID09IG90aGVyLnR5
cGUoKTsKIH0KIAotUmVmPEJhc2ljU2hhcGU+IEJhc2ljU2hhcGVJbnNldDo6YmxlbmQoY29uc3Qg
QmFzaWNTaGFwZSYgZnJvbSwgZG91YmxlIHByb2dyZXNzKSBjb25zdAorUmVmPEJhc2ljU2hhcGU+
IEJhc2ljU2hhcGVJbnNldDo6YmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgZnJvbSwgY29uc3QgQmxl
bmRPcHRpb25zJiBvcHRpb25zKSBjb25zdAogewogICAgIEFTU0VSVCh0eXBlKCkgPT0gZnJvbS50
eXBlKCkpOwogCiAgICAgYXV0byYgZnJvbUluc2V0ID0gZG93bmNhc3Q8QmFzaWNTaGFwZUluc2V0
Pihmcm9tKTsKICAgICBhdXRvIHJlc3VsdCA9ICBCYXNpY1NoYXBlSW5zZXQ6OmNyZWF0ZSgpOwot
ICAgIHJlc3VsdC0+c2V0VG9wKFdlYkNvcmU6OmJsZW5kKGZyb21JbnNldC50b3AoKSwgdG9wKCks
IHByb2dyZXNzKSk7Ci0gICAgcmVzdWx0LT5zZXRSaWdodChXZWJDb3JlOjpibGVuZChmcm9tSW5z
ZXQucmlnaHQoKSwgcmlnaHQoKSwgcHJvZ3Jlc3MpKTsKLSAgICByZXN1bHQtPnNldEJvdHRvbShX
ZWJDb3JlOjpibGVuZChmcm9tSW5zZXQuYm90dG9tKCksIGJvdHRvbSgpLCBwcm9ncmVzcykpOwot
ICAgIHJlc3VsdC0+c2V0TGVmdChXZWJDb3JlOjpibGVuZChmcm9tSW5zZXQubGVmdCgpLCBsZWZ0
KCksIHByb2dyZXNzKSk7Ci0KLSAgICByZXN1bHQtPnNldFRvcExlZnRSYWRpdXMoV2ViQ29yZTo6
YmxlbmQoZnJvbUluc2V0LnRvcExlZnRSYWRpdXMoKSwgdG9wTGVmdFJhZGl1cygpLCBwcm9ncmVz
cykpOwotICAgIHJlc3VsdC0+c2V0VG9wUmlnaHRSYWRpdXMoV2ViQ29yZTo6YmxlbmQoZnJvbUlu
c2V0LnRvcFJpZ2h0UmFkaXVzKCksIHRvcFJpZ2h0UmFkaXVzKCksIHByb2dyZXNzKSk7Ci0gICAg
cmVzdWx0LT5zZXRCb3R0b21SaWdodFJhZGl1cyhXZWJDb3JlOjpibGVuZChmcm9tSW5zZXQuYm90
dG9tUmlnaHRSYWRpdXMoKSwgYm90dG9tUmlnaHRSYWRpdXMoKSwgcHJvZ3Jlc3MpKTsKLSAgICBy
ZXN1bHQtPnNldEJvdHRvbUxlZnRSYWRpdXMoV2ViQ29yZTo6YmxlbmQoZnJvbUluc2V0LmJvdHRv
bUxlZnRSYWRpdXMoKSwgYm90dG9tTGVmdFJhZGl1cygpLCBwcm9ncmVzcykpOworICAgIHJlc3Vs
dC0+c2V0VG9wKFdlYkNvcmU6OmJsZW5kKGZyb21JbnNldC50b3AoKSwgdG9wKCksIG9wdGlvbnMp
KTsKKyAgICByZXN1bHQtPnNldFJpZ2h0KFdlYkNvcmU6OmJsZW5kKGZyb21JbnNldC5yaWdodCgp
LCByaWdodCgpLCBvcHRpb25zKSk7CisgICAgcmVzdWx0LT5zZXRCb3R0b20oV2ViQ29yZTo6Ymxl
bmQoZnJvbUluc2V0LmJvdHRvbSgpLCBib3R0b20oKSwgb3B0aW9ucykpOworICAgIHJlc3VsdC0+
c2V0TGVmdChXZWJDb3JlOjpibGVuZChmcm9tSW5zZXQubGVmdCgpLCBsZWZ0KCksIG9wdGlvbnMp
KTsKKworICAgIHJlc3VsdC0+c2V0VG9wTGVmdFJhZGl1cyhXZWJDb3JlOjpibGVuZChmcm9tSW5z
ZXQudG9wTGVmdFJhZGl1cygpLCB0b3BMZWZ0UmFkaXVzKCksIG9wdGlvbnMpKTsKKyAgICByZXN1
bHQtPnNldFRvcFJpZ2h0UmFkaXVzKFdlYkNvcmU6OmJsZW5kKGZyb21JbnNldC50b3BSaWdodFJh
ZGl1cygpLCB0b3BSaWdodFJhZGl1cygpLCBvcHRpb25zKSk7CisgICAgcmVzdWx0LT5zZXRCb3R0
b21SaWdodFJhZGl1cyhXZWJDb3JlOjpibGVuZChmcm9tSW5zZXQuYm90dG9tUmlnaHRSYWRpdXMo
KSwgYm90dG9tUmlnaHRSYWRpdXMoKSwgb3B0aW9ucykpOworICAgIHJlc3VsdC0+c2V0Qm90dG9t
TGVmdFJhZGl1cyhXZWJDb3JlOjpibGVuZChmcm9tSW5zZXQuYm90dG9tTGVmdFJhZGl1cygpLCBi
b3R0b21MZWZ0UmFkaXVzKCksIG9wdGlvbnMpKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFwZXMuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5oCmluZGV4IDg1NTBj
ZjkyMGJlYmJlNDVlYjc0NjVkOGMyODViYWY4ODQ1NmZiODguLjc0MzBhNjE3N2JlYWU4YmQ5ZmVk
ZjM3YjE1NTU2MzE3NjMyYjllZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9CYXNpY1NoYXBlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9CYXNpY1NoYXBlcy5oCkBAIC00OCw2ICs0OCw4IEBAIGNsYXNzIFBhdGg7CiBjbGFzcyBSZW5k
ZXJCb3g7CiBjbGFzcyBTVkdQYXRoQnl0ZVN0cmVhbTsKIAorc3RydWN0IEJsZW5kT3B0aW9uczsK
KwogY2xhc3MgQmFzaWNTaGFwZSA6IHB1YmxpYyBSZWZDb3VudGVkPEJhc2ljU2hhcGU+IHsKIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5CYXNpY1NoYXBlKCkgPSBkZWZhdWx0OwpAQCAtNjYsNyArNjgs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXaW5kUnVsZSB3aW5kUnVsZSgpIGNvbnN0IHsgcmV0
dXJuIFdpbmRSdWxlOjpOb25aZXJvOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuQmxlbmQoY29u
c3QgQmFzaWNTaGFwZSYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFJlZjxCYXNpY1NoYXBlPiBi
bGVuZChjb25zdCBCYXNpY1NoYXBlJiBmcm9tLCBkb3VibGUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIFJlZjxCYXNpY1NoYXBlPiBibGVuZChjb25zdCBCYXNpY1NoYXBlJiBmcm9tLCBjb25zdCBC
bGVuZE9wdGlvbnMmKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBCYXNpY1NoYXBlJikgY29uc3QgPSAwOwogICAgIApAQCAtOTYsOSArOTgsOSBAQCBwdWJs
aWM6CiAgICAgY29uc3QgTGVuZ3RoJiBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsg
fQogICAgIGNvbnN0IExlbmd0aCYgY29tcHV0ZWRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2Nv
bXB1dGVkTGVuZ3RoOyB9CiAKLSAgICBCYXNpY1NoYXBlQ2VudGVyQ29vcmRpbmF0ZSBibGVuZChj
b25zdCBCYXNpY1NoYXBlQ2VudGVyQ29vcmRpbmF0ZSYgZnJvbSwgZG91YmxlIHByb2dyZXNzKSBj
b25zdAorICAgIEJhc2ljU2hhcGVDZW50ZXJDb29yZGluYXRlIGJsZW5kKGNvbnN0IEJhc2ljU2hh
cGVDZW50ZXJDb29yZGluYXRlJiBmcm9tLCBjb25zdCBCbGVuZE9wdGlvbnMmIG9wdGlvbnMpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gQmFzaWNTaGFwZUNlbnRlckNvb3JkaW5hdGUoVG9w
TGVmdCwgV2ViQ29yZTo6YmxlbmQoZnJvbS5tX2NvbXB1dGVkTGVuZ3RoLCBtX2NvbXB1dGVkTGVu
Z3RoLCBwcm9ncmVzcykpOworICAgICAgICByZXR1cm4gQmFzaWNTaGFwZUNlbnRlckNvb3JkaW5h
dGUoVG9wTGVmdCwgV2ViQ29yZTo6YmxlbmQoZnJvbS5tX2NvbXB1dGVkTGVuZ3RoLCBtX2NvbXB1
dGVkTGVuZ3RoLCBvcHRpb25zKSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBCYXNpY1NoYXBlQ2VudGVyQ29vcmRpbmF0ZSYgb3RoZXIpIGNvbnN0CkBAIC0xNDQsMTIg
KzE0NiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3R5cGUgPT0gVmFsdWUgJiYgb3Ro
ZXIudHlwZSgpID09IFZhbHVlOwogICAgIH0KIAotICAgIEJhc2ljU2hhcGVSYWRpdXMgYmxlbmQo
Y29uc3QgQmFzaWNTaGFwZVJhZGl1cyYgZnJvbSwgZG91YmxlIHByb2dyZXNzKSBjb25zdAorICAg
IEJhc2ljU2hhcGVSYWRpdXMgYmxlbmQoY29uc3QgQmFzaWNTaGFwZVJhZGl1cyYgZnJvbSwgY29u
c3QgQmxlbmRPcHRpb25zJiBvcHRpb25zKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fdHlw
ZSAhPSBWYWx1ZSB8fCBmcm9tLnR5cGUoKSAhPSBWYWx1ZSkKICAgICAgICAgICAgIHJldHVybiBC
YXNpY1NoYXBlUmFkaXVzKGZyb20pOwogCi0gICAgICAgIHJldHVybiBCYXNpY1NoYXBlUmFkaXVz
KFdlYkNvcmU6OmJsZW5kKGZyb20udmFsdWUoKSwgdmFsdWUoKSwgcHJvZ3Jlc3MpKTsKKyAgICAg
ICAgcmV0dXJuIEJhc2ljU2hhcGVSYWRpdXMoV2ViQ29yZTo6YmxlbmQoZnJvbS52YWx1ZSgpLCB2
YWx1ZSgpLCBvcHRpb25zKSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBCYXNpY1NoYXBlUmFkaXVzJiBvdGhlcikgY29uc3QKQEAgLTE4Myw3ICsxODUsNyBAQCBwcml2
YXRlOgogICAgIGNvbnN0IFBhdGgmIHBhdGgoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAK
ICAgICBib29sIGNhbkJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBSZWY8QmFzaWNTaGFwZT4gYmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgZnJvbSwgZG91YmxlKSBj
b25zdCBvdmVycmlkZTsKKyAgICBSZWY8QmFzaWNTaGFwZT4gYmxlbmQoY29uc3QgQmFzaWNTaGFw
ZSYgZnJvbSwgY29uc3QgQmxlbmRPcHRpb25zJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgQmFzaWNTaGFwZSYpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0yMTcs
NyArMjE5LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBQYXRoJiBwYXRoKGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBjYW5CbGVuZChjb25zdCBCYXNpY1NoYXBlJikgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgUmVmPEJhc2ljU2hhcGU+IGJsZW5kKGNvbnN0IEJhc2ljU2hhcGUm
IGZyb20sIGRvdWJsZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPEJhc2ljU2hhcGU+IGJsZW5k
KGNvbnN0IEJhc2ljU2hhcGUmIGZyb20sIGNvbnN0IEJsZW5kT3B0aW9ucyYpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJhc2ljU2hhcGUmKSBjb25zdCBvdmVy
cmlkZTsKIApAQCAtMjUwLDcgKzI1Miw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgUGF0aCYgcGF0
aChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgY2FuQmxlbmQoY29uc3Qg
QmFzaWNTaGFwZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIFJlZjxCYXNpY1NoYXBlPiBibGVuZChj
b25zdCBCYXNpY1NoYXBlJiBmcm9tLCBkb3VibGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxC
YXNpY1NoYXBlPiBibGVuZChjb25zdCBCYXNpY1NoYXBlJiBmcm9tLCBjb25zdCBCbGVuZE9wdGlv
bnMmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCYXNpY1No
YXBlJikgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTI4Miw3ICsyODQsNyBAQCBwcml2YXRlOgogICAg
IGNvbnN0IFBhdGgmIHBhdGgoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICBib29s
IGNhbkJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmKSBjb25zdCBvdmVycmlkZTsKLSAgICBSZWY8QmFz
aWNTaGFwZT4gYmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgZnJvbSwgZG91YmxlKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBSZWY8QmFzaWNTaGFwZT4gYmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgZnJvbSwg
Y29uc3QgQmxlbmRPcHRpb25zJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQmFzaWNTaGFwZSYpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0zMjUsNyArMzI3LDcg
QEAgcHJpdmF0ZToKICAgICBjb25zdCBQYXRoJiBwYXRoKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJy
aWRlOwogCiAgICAgYm9vbCBjYW5CbGVuZChjb25zdCBCYXNpY1NoYXBlJikgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgUmVmPEJhc2ljU2hhcGU+IGJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIGZyb20sIGRv
dWJsZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPEJhc2ljU2hhcGU+IGJsZW5kKGNvbnN0IEJh
c2ljU2hhcGUmIGZyb20sIGNvbnN0IEJsZW5kT3B0aW9ucyYpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJhc2ljU2hhcGUmKSBjb25zdCBvdmVycmlkZTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVhYmxlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlYWJsZS5jcHAKaW5kZXggOTZkNTVhODJlOTY5MDQ0ZmJlYzAzNjk1
OGRkNjBiMWRlZWRjNzE1ZS4uNzY1M2MxNjlhOGY4NGM1YWYwNTJiYWYxMjVmODBjZDA3Zjg5ZDdi
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVhYmxlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZWFibGUuY3BwCkBAIC0yMzQsNyArMjM0LDcgQEAgc3Rh
dGljIEtleWZyYW1lRWZmZWN0KiBrZXlmcmFtZUVmZmVjdEZvckVsZW1lbnRBbmRQcm9wZXJ0eShj
b25zdCBTdHlsZWFibGUmIHN0eWwKIHN0YXRpYyBib29sIHByb3BlcnR5SW5TdHlsZU1hdGNoZXNW
YWx1ZUZvclRyYW5zaXRpb25Jbk1hcChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIFByb3BlcnR5VG9UcmFuc2l0aW9uTWFwJiB0cmFuc2l0aW9ucykKIHsK
ICAgICBpZiAoYXV0byogdHJhbnNpdGlvbiA9IHRyYW5zaXRpb25zLmdldChwcm9wZXJ0eSkpIHsK
LSAgICAgICAgaWYgKENTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwocHJvcGVy
dHksICZzdHlsZSwgJnRyYW5zaXRpb24tPnRhcmdldFN0eWxlKCkpKQorICAgICAgICBpZiAoQ1NT
UHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChwcm9wZXJ0eSwgc3R5bGUsIHRyYW5z
aXRpb24tPnRhcmdldFN0eWxlKCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIHJldHVybiBmYWxzZTsKQEAgLTM1Niw4ICszNTYsOCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVD
U1NUcmFuc2l0aW9uc0ZvclN0eWxlYWJsZUFuZFByb3BlcnR5KGNvbnN0IFN0eWxlYWJsZSYgc3R5
bGVhYgogICAgIH0oKTsKIAogICAgIGlmICghc3R5bGVhYmxlLmhhc1J1bm5pbmdUcmFuc2l0aW9u
Rm9yUHJvcGVydHkocHJvcGVydHkpCi0gICAgICAgICYmICFDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6
cHJvcGVydGllc0VxdWFsKHByb3BlcnR5LCAmYmVmb3JlQ2hhbmdlU3R5bGUsICZhZnRlckNoYW5n
ZVN0eWxlKQotICAgICAgICAmJiBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUlu
dGVycG9sYXRlZChwcm9wZXJ0eSwgJmJlZm9yZUNoYW5nZVN0eWxlLCAmYWZ0ZXJDaGFuZ2VTdHls
ZSkKKyAgICAgICAgJiYgIUNTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwocHJv
cGVydHksIGJlZm9yZUNoYW5nZVN0eWxlLCBhZnRlckNoYW5nZVN0eWxlKQorICAgICAgICAmJiBD
U1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChwcm9wZXJ0eSwg
YmVmb3JlQ2hhbmdlU3R5bGUsIGFmdGVyQ2hhbmdlU3R5bGUpCiAgICAgICAgICYmICFwcm9wZXJ0
eUluU3R5bGVNYXRjaGVzVmFsdWVGb3JUcmFuc2l0aW9uSW5NYXAocHJvcGVydHksIGFmdGVyQ2hh
bmdlU3R5bGUsIHN0eWxlYWJsZS5lbnN1cmVDb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHko
KSkKICAgICAgICAgJiYgbWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uICYmIHRyYW5zaXRpb25Db21i
aW5lZER1cmF0aW9uKG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbikgPiAwKSB7CiAgICAgICAgIC8v
IDEuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlOgpAQCAtNDAzLDE1ICs0MDMsMTUg
QEAgc3RhdGljIHZvaWQgdXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JTdHlsZWFibGVBbmRQcm9wZXJ0
eShjb25zdCBTdHlsZWFibGUmIHN0eWxlYWIKICAgICAgICAgYXV0byYgcHJldmlvdXNseVJ1bm5p
bmdUcmFuc2l0aW9uQ3VycmVudFN0eWxlID0gcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uLT5j
dXJyZW50U3R5bGUoKTsKICAgICAgICAgLy8gNC4gSWYgdGhlIGVsZW1lbnQgaGFzIGEgcnVubmlu
ZyB0cmFuc2l0aW9uIGZvciB0aGUgcHJvcGVydHksIHRoZXJlIGlzIGEgbWF0Y2hpbmcgdHJhbnNp
dGlvbi1wcm9wZXJ0eSB2YWx1ZSwgYW5kIHRoZSBlbmQgdmFsdWUgb2YgdGhlIHJ1bm5pbmcKICAg
ICAgICAgLy8gICAgdHJhbnNpdGlvbiBpcyBub3QgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIHRoZSBw
cm9wZXJ0eSBpbiB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxlLCB0aGVuOgotICAgICAgICBpZiAoQ1NT
UHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChwcm9wZXJ0eSwgJnByZXZpb3VzbHlS
dW5uaW5nVHJhbnNpdGlvbkN1cnJlbnRTdHlsZSwgJmFmdGVyQ2hhbmdlU3R5bGUpIHx8ICFDU1NQ
cm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChwcm9wZXJ0eSwgJmN1
cnJlbnRTdHlsZSwgJmFmdGVyQ2hhbmdlU3R5bGUpKSB7CisgICAgICAgIGlmIChDU1NQcm9wZXJ0
eUFuaW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKHByb3BlcnR5LCBwcmV2aW91c2x5UnVubmluZ1Ry
YW5zaXRpb25DdXJyZW50U3R5bGUsIGFmdGVyQ2hhbmdlU3R5bGUpIHx8ICFDU1NQcm9wZXJ0eUFu
aW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChwcm9wZXJ0eSwgY3VycmVudFN0eWxl
LCBhZnRlckNoYW5nZVN0eWxlKSkgewogICAgICAgICAgICAgLy8gMS4gSWYgdGhlIGN1cnJlbnQg
dmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBydW5uaW5nIHRyYW5zaXRpb24gaXMgZXF1YWwg
dG8gdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxlLAog
ICAgICAgICAgICAgLy8gICAgb3IgaWYgdGhlc2UgdHdvIHZhbHVlcyBjYW5ub3QgYmUgaW50ZXJw
b2xhdGVkLCB0aGVuIGltcGxlbWVudGF0aW9ucyBtdXN0IGNhbmNlbCB0aGUgcnVubmluZyB0cmFu
c2l0aW9uLgogICAgICAgICAgICAgcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uLT5jYW5jZWxG
cm9tU3R5bGUoKTsKLSAgICAgICAgfSBlbHNlIGlmICh0cmFuc2l0aW9uQ29tYmluZWREdXJhdGlv
bihtYXRjaGluZ0JhY2tpbmdBbmltYXRpb24pIDw9IDAuMCB8fCAhQ1NTUHJvcGVydHlBbmltYXRp
b246OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQocHJvcGVydHksICZwcmV2aW91c2x5UnVubmlu
Z1RyYW5zaXRpb25DdXJyZW50U3R5bGUsICZhZnRlckNoYW5nZVN0eWxlKSkgeworICAgICAgICB9
IGVsc2UgaWYgKHRyYW5zaXRpb25Db21iaW5lZER1cmF0aW9uKG1hdGNoaW5nQmFja2luZ0FuaW1h
dGlvbikgPD0gMC4wIHx8ICFDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVy
cG9sYXRlZChwcm9wZXJ0eSwgcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uQ3VycmVudFN0eWxl
LCBhZnRlckNoYW5nZVN0eWxlKSkgewogICAgICAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0
aGUgY29tYmluZWQgZHVyYXRpb24gaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDBzLCBvciBpZiB0
aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIHJ1bm5pbmcgdHJhbnNpdGlv
bgogICAgICAgICAgICAgLy8gICAgY2Fubm90IGJlIGludGVycG9sYXRlZCB3aXRoIHRoZSB2YWx1
ZSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIGFmdGVyLWNoYW5nZSBzdHlsZSwgdGhlbiBpbXBsZW1l
bnRhdGlvbnMgbXVzdCBjYW5jZWwgdGhlIHJ1bm5pbmcgdHJhbnNpdGlvbi4KICAgICAgICAgICAg
IHByZXZpb3VzbHlSdW5uaW5nVHJhbnNpdGlvbi0+Y2FuY2VsRnJvbVN0eWxlKCk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoQ1NTUHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChwcm9wZXJ0
eSwgJnByZXZpb3VzbHlSdW5uaW5nVHJhbnNpdGlvbi0+cmV2ZXJzaW5nQWRqdXN0ZWRTdGFydFN0
eWxlKCksICZhZnRlckNoYW5nZVN0eWxlKSkgeworICAgICAgICB9IGVsc2UgaWYgKENTU1Byb3Bl
cnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwocHJvcGVydHksIHByZXZpb3VzbHlSdW5uaW5n
VHJhbnNpdGlvbi0+cmV2ZXJzaW5nQWRqdXN0ZWRTdGFydFN0eWxlKCksIGFmdGVyQ2hhbmdlU3R5
bGUpKSB7CiAgICAgICAgICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHRoZSByZXZlcnNpbmctYWRq
dXN0ZWQgc3RhcnQgdmFsdWUgb2YgdGhlIHJ1bm5pbmcgdHJhbnNpdGlvbiBpcyB0aGUgc2FtZSBh
cyB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBhZnRlci1jaGFuZ2UKICAgICAgICAg
ICAgIC8vICAgIHN0eWxlIChzZWUgdGhlIHNlY3Rpb24gb24gcmV2ZXJzaW5nIG9mIHRyYW5zaXRp
b25zIGZvciB3aHkgdGhlc2UgY2FzZSBleGlzdHMpLCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBjYW5j
ZWwgdGhlIHJ1bm5pbmcgdHJhbnNpdGlvbgogICAgICAgICAgICAgcHJldmlvdXNseVJ1bm5pbmdU
cmFuc2l0aW9uLT5jYW5jZWxGcm9tU3R5bGUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425778</attachid>
            <date>2021-04-12 13:12:05 -0700</date>
            <delta_ts>2021-04-13 00:50:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224433-20210412221203.patch</filename>
            <type>text/plain</type>
            <size>175533</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1NzkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTBkMjExNTRiZmY2ZTg2
NWFhYjlhYzYzYzVjNWUxM2VlNjA1OGQzMS4uYmY2NGZjNmYzMGY2ZjRhYjQ0ODA0OWM1ZThmMGZh
ZjQxYmIyYTM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMSBAQAorMjAyMS0wNC0xMiAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZWZhY3RvciBwYXJh
bWV0ZXJzIHRvIGJsZW5kaW5nIGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0NDMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmVkdWNlIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBwYXNz
ZWQgdG8gdGhlIGJsZW5kaW5nIGZ1bmN0aW9ucyBzdWNoIHRoYXQgd2UgcGFja2FnZQorICAgICAg
ICB0aGUgY2xpZW50IGFuZCBwcm9ncmVzcyB0b2dldGhlciBhbmQgdHJhY2sgd2hldGhlciB0aGUg
YW5pbWF0aW9uIGlzIGRpc2NyZXRlIGluc3RlYWQKKyAgICAgICAgb2YgY29tcHV0aW5nIGl0IHNl
dmVyYWwgdGltZXMuIFRoaXMgaW5mb3JtYXRpb24gaXMgbm93IHBhc3NlZCBhcyBhIEJsZW5kaW5n
Q29udGV4dAorICAgICAgICBwYXJhbWV0ZXIsIGFuZCBhIENTU1Byb3BlcnR5QmxlbmRpbmdDb250
ZXh0IHByaXZhdGUgdG8gQ1NTUHJvcGVydHlBbmltYXRpb24uCisgCisgICAgICAgIFdoZW4gd2Ug
c3VwcG9ydCBjb21wb3NpdGUgb3BlcnRpb25zLCB3ZSdsbCBqdXN0IG5lZWQgdG8gYWRkIGEgbmV3
IG1lbWJlciB0byB0aGF0CisgICAgICAgIHN0cnVjdCBpbnN0ZWFkIG9mIG1vZGlmeWluZyBhbGwg
dGhlIG1ldGhvZCBzaWduYXR1cmVzLgorCisgICAgICAgIFNpbmNlIHdlIGFyZSBtb2RpZnlpbmcg
dGhlIG1ldGhvZCBzaWduYXR1cmVzLCB3ZSBhbHNvIGNoYW5nZSB0aGUgUmVuZGVyU3R5bGUgcG9p
bnRlcnMKKyAgICAgICAgdG8gcmVmZXJlbmNlcyBzaW5jZSB3ZSB3b3VsZCBuZXZlciBwYXNzIGlu
IGEgbnVsbCB2YWx1ZS4KKworICAgICAgICAqIGFuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dDo6Q1NT
UHJvcGVydHlCbGVuZGluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRGdW5jKToK
KyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRmlsdGVyT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpibGVuZEZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpjcm9zc2ZhZGVCbGVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlOjpjYW5JbnRlcnBv
bGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI6OnZh
bHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNhbkludGVycG9sYXRlQ2FyZXRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0aWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1
YWwpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlBbmltYXRpb246OmNhblByb3BlcnR5
QmVJbnRlcnBvbGF0ZWQpOgorICAgICAgICAqIGFuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlv
bi5oOgorICAgICAgICAqIGFuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpLZXlmcmFtZUVmZmVjdDo6c2V0QW5pbWF0ZWRQcm9wZXJ0aWVzSW5TdHlsZSk6Cisg
ICAgICAgICogY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJs
ZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDcm9zc2ZhZGVWYWx1ZTo6YmxlbmQgY29u
c3QpOgorICAgICAgICAqIGNzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5oOgorICAgICAgICAqIGNzcy9D
U1NHcmFkaWVudFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlhbEdyYWRpZW50QWRh
cHRlcjo6bm9ybWFsaXplU3RvcHNBbmRFbmRwb2ludHNPdXRzaWRlUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q29uaWNHcmFkaWVudEFkYXB0ZXI6Om5vcm1hbGl6ZVN0b3BzQW5kRW5kcG9pbnRz
T3V0c2lkZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRpZW50VmFsdWU6OmNvbXB1
dGVTdG9wcyk6CisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmJsZW5kTWl4ZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpibGVuZCk6CisgICAgICAg
ICogcGxhdGZvcm0vTGVuZ3RoLmg6CisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoUG9pbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OmJsZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MZW5ndGhTaXpl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpibGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vYW5pbWF0
aW9uL0FuaW1hdGlvblV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6QmxlbmRpbmdDb250
ZXh0OjpCbGVuZGluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6YmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRXaXRob3V0UHJlbXVsdGlwbHkpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246
OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb246OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkludmVydExpZ2h0bmVzc0ZpbHRl
ck9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6Qmx1ckZpbHRlck9wZXJhdGlv
bjo6YmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6
YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OmJsZW5kKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0
aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXgzRFRy
YW5zZm9ybU9wZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVPcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNmb3Jt
T3BlcmF0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRy
aXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWF0cml4VHJhbnNm
b3JtT3BlcmF0aW9uOjpibGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL1BlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9w
ZXJhdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUm90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5zZm9ybU9wZXJhdGlv
bi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3Bl
cmF0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zv
cm1PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbnM6
OmJsZW5kQnlNYXRjaGluZ09wZXJhdGlvbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJh
bnNmb3JtT3BlcmF0aW9uczo6YmxlbmRCeVVzaW5nTWF0cml4SW50ZXJwb2xhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb25zOjpibGVuZCBjb25zdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25z
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpibGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5
bGUvQmFzaWNTaGFwZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzaWNTaGFwZUNpcmNsZTo6
YmxlbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFzaWNTaGFwZUVsbGlwc2U6OmJsZW5k
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljU2hhcGVQb2x5Z29uOjpibGVuZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY1NoYXBlUGF0aDo6YmxlbmQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6QmFzaWNTaGFwZUluc2V0OjpibGVuZCBjb25zdCk6CisgICAgICAgICog
cmVuZGVyaW5nL3N0eWxlL0Jhc2ljU2hhcGVzLmg6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY1No
YXBlQ2VudGVyQ29vcmRpbmF0ZTo6YmxlbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFz
aWNTaGFwZVJhZGl1czo6YmxlbmQgY29uc3QpOgorICAgICAgICAqIHN0eWxlL1N0eWxlYWJsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwcm9wZXJ0eUluU3R5bGVNYXRjaGVzVmFsdWVGb3JUcmFu
c2l0aW9uSW5NYXApOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JT
dHlsZWFibGVBbmRQcm9wZXJ0eSk6CisKIDIwMjEtMDQtMDkgIEFudG9pbmUgUXVpbnQgIDxncmFv
dXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgY2FsYygpIHNpbXBsaWZpY2F0aW9uIGZvciBhIG11
bHRpcGxpY2F0aW9uIHNob3VsZCBhcHBseSB0aGUgbXVsdGlwbGljYXRpb24gdG8gZWFjaCB2YWx1
ZSBvZiBhbiBhZGRpdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NT
U1Byb3BlcnR5QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9w
ZXJ0eUFuaW1hdGlvbi5jcHAKaW5kZXggNDcyYThmODcyYTY4MzNhMmYxOGVmYmEwNGFkMGQzMzA0
MjQ3OGY3My4uMWE4Zjc5NTZmY2FkNTkwMjA0MzRkOGIzMmEwMTY3NDRiMDVjNzE2NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCkBA
IC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlBbmltYXRpb24uaCIKIAorI2luY2x1ZGUgIkFuaW1hdGlvblV0aWxpdGllcy5oIgogI2luY2x1
ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU0Nyb3NzZmFk
ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oIgpAQCAtNzAsODcgKzcx
LDk3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGlubGluZSBpbnQgYmxlbmRG
dW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBpbnQgZnJvbSwgaW50IHRvLCBk
b3VibGUgcHJvZ3Jlc3MpCitzdHJ1Y3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQgOiBCbGVu
ZGluZ0NvbnRleHQgeworICAgIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVu
dDsKKworICAgIENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0KGRvdWJsZSBwcm9ncmVzcywgYm9v
bCBpc0Rpc2NyZXRlLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQpCisg
ICAgICAgIDogQmxlbmRpbmdDb250ZXh0KHByb2dyZXNzLCBpc0Rpc2NyZXRlKQorICAgICAgICAs
IGNsaWVudChjbGllbnQpCisgICAgeworICAgIH0KK307CisKK3N0YXRpYyBpbmxpbmUgaW50IGJs
ZW5kRnVuYyhpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4
dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAg
ICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIGNvbnRleHQpOwogfQogCi1zdGF0aWMgaW5saW5lIGRv
dWJsZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGRvdWJsZSBm
cm9tLCBkb3VibGUgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgZG91YmxlIGJs
ZW5kRnVuYyhkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNz
KTsKKyAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIGNvbnRleHQpOwogfQogCi1zdGF0aWMgaW5s
aW5lIGZsb2F0IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgZmxv
YXQgZnJvbSwgZmxvYXQgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgZmxvYXQg
YmxlbmRGdW5jKGZsb2F0IGZyb20sIGZsb2F0IHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9GbG9hdChm
cm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVzcyk7CisgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoZnJvbSArICh0byAtIGZyb20pICogY29udGV4dC5wcm9ncmVzcyk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgQ29sb3IgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqLCBjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
CitzdGF0aWMgaW5saW5lIENvbG9yIGJsZW5kRnVuYyhjb25zdCBDb2xvciYgZnJvbSwgY29uc3Qg
Q29sb3ImIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsK
LSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAgICByZXR1cm4gYmxlbmQo
ZnJvbSwgdG8sIGNvbnRleHQpOwogfQogCi1zdGF0aWMgaW5saW5lIExlbmd0aCBibGVuZEZ1bmMo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IExlbmd0aCYgZnJvbSwgY29u
c3QgTGVuZ3RoJiB0bywgZG91YmxlIHByb2dyZXNzLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBW
YWx1ZVJhbmdlQWxsKQorc3RhdGljIGlubGluZSBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IExlbmd0
aCYgZnJvbSwgY29uc3QgTGVuZ3RoJiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRl
eHQmIGNvbnRleHQsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2VBbGwpCiB7Ci0g
ICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9ncmVzcywgdmFsdWVSYW5nZSk7CisgICAgcmV0
dXJuIGJsZW5kKGZyb20sIHRvLCBjb250ZXh0LCB2YWx1ZVJhbmdlKTsKIH0KIAotc3RhdGljIGlu
bGluZSBHYXBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
LCBjb25zdCBHYXBMZW5ndGgmIGZyb20sIGNvbnN0IEdhcExlbmd0aCYgdG8sIGRvdWJsZSBwcm9n
cmVzcykKK3N0YXRpYyBpbmxpbmUgR2FwTGVuZ3RoIGJsZW5kRnVuYyhjb25zdCBHYXBMZW5ndGgm
IGZyb20sIGNvbnN0IEdhcExlbmd0aCYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250
ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChmcm9tLmlzTm9ybWFsKCkgfHwgdG8uaXNOb3JtYWwo
KSkKLSAgICAgICAgcmV0dXJuIHByb2dyZXNzIDwgMC41ID8gZnJvbSA6IHRvOwotICAgIHJldHVy
biBibGVuZChmcm9tLmxlbmd0aCgpLCB0by5sZW5ndGgoKSwgcHJvZ3Jlc3MsIFZhbHVlUmFuZ2VO
b25OZWdhdGl2ZSk7CisgICAgICAgIHJldHVybiBjb250ZXh0LnByb2dyZXNzIDwgMC41ID8gZnJv
bSA6IHRvOworICAgIHJldHVybiBibGVuZChmcm9tLmxlbmd0aCgpLCB0by5sZW5ndGgoKSwgY29u
dGV4dCwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKIH0KIAotc3RhdGljIGlubGluZSBUYWJTaXpl
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgY29uc3QgVGFiU2l6
ZSYgZnJvbSwgY29uc3QgVGFiU2l6ZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxp
bmUgVGFiU2l6ZSBibGVuZEZ1bmMoY29uc3QgVGFiU2l6ZSYgZnJvbSwgY29uc3QgVGFiU2l6ZSYg
dG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewotICAgIGF1
dG8gYmxlbmRlZFZhbHVlID0gYmxlbmQoZnJvbS52YWx1ZSgpLCB0by52YWx1ZSgpLCBwcm9ncmVz
cyk7CisgICAgYXV0byBibGVuZGVkVmFsdWUgPSBibGVuZChmcm9tLnZhbHVlKCksIHRvLnZhbHVl
KCksIGNvbnRleHQpOwogICAgIHJldHVybiB7IGJsZW5kZWRWYWx1ZSA8IDAgPyAwIDogYmxlbmRl
ZFZhbHVlLCBmcm9tLmlzU3BhY2VzKCkgPyBTcGFjZVZhbHVlVHlwZSA6IExlbmd0aFZhbHVlVHlw
ZSB9OwogfQogCi1zdGF0aWMgaW5saW5lIExlbmd0aFNpemUgYmxlbmRGdW5jKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgY29uc3QgTGVuZ3RoU2l6ZSYgZnJvbSwgY29u
c3QgTGVuZ3RoU2l6ZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgTGVuZ3Ro
U2l6ZSBibGVuZEZ1bmMoY29uc3QgTGVuZ3RoU2l6ZSYgZnJvbSwgY29uc3QgTGVuZ3RoU2l6ZSYg
dG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJl
dHVybiB7IGJsZW5kRnVuYyhjbGllbnQsIGZyb20ud2lkdGgsIHRvLndpZHRoLCBwcm9ncmVzcywg
VmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSwKLSAgICAgICAgICAgICBibGVuZEZ1bmMoY2xpZW50LCBm
cm9tLmhlaWdodCwgdG8uaGVpZ2h0LCBwcm9ncmVzcywgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSB9
OworICAgIHJldHVybiB7IGJsZW5kRnVuYyhmcm9tLndpZHRoLCB0by53aWR0aCwgY29udGV4dCwg
VmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSwKKyAgICAgICAgICAgICBibGVuZEZ1bmMoZnJvbS5oZWln
aHQsIHRvLmhlaWdodCwgY29udGV4dCwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSB9OwogfQogCi1z
dGF0aWMgaW5saW5lIExlbmd0aFBvaW50IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiwgY29uc3QgTGVuZ3RoUG9pbnQmIGZyb20sIGNvbnN0IExlbmd0aFBvaW50JiB0
bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBMZW5ndGhQb2ludCBibGVuZEZ1bmMo
Y29uc3QgTGVuZ3RoUG9pbnQmIGZyb20sIGNvbnN0IExlbmd0aFBvaW50JiB0bywgY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGJsZW5kKGZy
b20sIHRvLCBwcm9ncmVzcyk7CisgICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBjb250ZXh0KTsK
IH0KIAotc3RhdGljIGlubGluZSBTaGFkb3dTdHlsZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBTaGFkb3dTdHlsZSBmcm9tLCBTaGFkb3dTdHlsZSB0
bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBTaGFkb3dTdHlsZSBibGVuZEZ1bmMo
U2hhZG93U3R5bGUgZnJvbSwgU2hhZG93U3R5bGUgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChmcm9tID09IHRvKQogICAgICAgICByZXR1
cm4gdG87CiAKICAgICBkb3VibGUgZnJvbVZhbCA9IGZyb20gPT0gU2hhZG93U3R5bGU6Ok5vcm1h
bCA/IDEgOiAwOwogICAgIGRvdWJsZSB0b1ZhbCA9IHRvID09IFNoYWRvd1N0eWxlOjpOb3JtYWwg
PyAxIDogMDsKLSAgICBkb3VibGUgcmVzdWx0ID0gYmxlbmRGdW5jKGNsaWVudCwgZnJvbVZhbCwg
dG9WYWwsIHByb2dyZXNzKTsKKyAgICBkb3VibGUgcmVzdWx0ID0gYmxlbmRGdW5jKGZyb21WYWws
IHRvVmFsLCBjb250ZXh0KTsKICAgICByZXR1cm4gcmVzdWx0ID4gMCA/IFNoYWRvd1N0eWxlOjpO
b3JtYWwgOiBTaGFkb3dTdHlsZTo6SW5zZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RkOjp1bmlx
dWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBjbGllbnQsIGNvbnN0IFNoYWRvd0RhdGEqIGZyb20sIGNvbnN0IFNoYWRvd0RhdGEqIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dE
YXRhPiBibGVuZEZ1bmMoY29uc3QgU2hhZG93RGF0YSogZnJvbSwgY29uc3QgU2hhZG93RGF0YSog
dG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIEFT
U0VSVChmcm9tICYmIHRvKTsKICAgICBBU1NFUlQoZnJvbS0+c3R5bGUoKSA9PSB0by0+c3R5bGUo
KSk7CiAKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPihibGVuZChmcm9tLT5sb2Nh
dGlvbigpLCB0by0+bG9jYXRpb24oKSwgcHJvZ3Jlc3MpLAotICAgICAgICBzdGQ6Om1heCgwLCBi
bGVuZChmcm9tLT5yYWRpdXMoKSwgdG8tPnJhZGl1cygpLCBwcm9ncmVzcykpLAotICAgICAgICBi
bGVuZChmcm9tLT5zcHJlYWQoKSwgdG8tPnNwcmVhZCgpLCBwcm9ncmVzcyksCi0gICAgICAgIGJs
ZW5kRnVuYyhjbGllbnQsIGZyb20tPnN0eWxlKCksIHRvLT5zdHlsZSgpLCBwcm9ncmVzcyksCisg
ICAgcmV0dXJuIG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oYmxlbmQoZnJvbS0+bG9jYXRpb24oKSwg
dG8tPmxvY2F0aW9uKCksIGNvbnRleHQpLAorICAgICAgICBzdGQ6Om1heCgwLCBibGVuZChmcm9t
LT5yYWRpdXMoKSwgdG8tPnJhZGl1cygpLCBjb250ZXh0KSksCisgICAgICAgIGJsZW5kKGZyb20t
PnNwcmVhZCgpLCB0by0+c3ByZWFkKCksIGNvbnRleHQpLAorICAgICAgICBibGVuZEZ1bmMoZnJv
bS0+c3R5bGUoKSwgdG8tPnN0eWxlKCksIGNvbnRleHQpLAogICAgICAgICBmcm9tLT5pc1dlYmtp
dEJveFNoYWRvdygpLAotICAgICAgICBibGVuZChmcm9tLT5jb2xvcigpLCB0by0+Y29sb3IoKSwg
cHJvZ3Jlc3MpKTsKKyAgICAgICAgYmxlbmQoZnJvbS0+Y29sb3IoKSwgdG8tPmNvbG9yKCksIGNv
bnRleHQpKTsKIH0KIAotc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kRnVu
Yyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIGNvbnN0IFRyYW5zZm9y
bU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRGdW5jKGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMm
IHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBp
ZiAoY2xpZW50LT50cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2goKSkKLSAgICAgICAgcmV0dXJu
IHRvLmJsZW5kQnlNYXRjaGluZ09wZXJhdGlvbnMoZnJvbSwgcHJvZ3Jlc3MpOwotICAgIHJldHVy
biB0by5ibGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9uKGZyb20sIHByb2dyZXNzLCBpczxS
ZW5kZXJCb3g+KGNsaWVudC0+cmVuZGVyZXIoKSkgPyBkb3duY2FzdDxSZW5kZXJCb3g+KCpjbGll
bnQtPnJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKS5zaXplKCkgOiBMYXlvdXRTaXplKCkpOwor
ICAgIGlmIChjb250ZXh0LmNsaWVudC0+dHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNoKCkpCisg
ICAgICAgIHJldHVybiB0by5ibGVuZEJ5TWF0Y2hpbmdPcGVyYXRpb25zKGZyb20sIGNvbnRleHQp
OworICAgIHJldHVybiB0by5ibGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9uKGZyb20sIGNv
bnRleHQsIGlzPFJlbmRlckJveD4oY29udGV4dC5jbGllbnQtPnJlbmRlcmVyKCkpID8gZG93bmNh
c3Q8UmVuZGVyQm94PigqY29udGV4dC5jbGllbnQtPnJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3Qo
KS5zaXplKCkgOiBMYXlvdXRTaXplKCkpOwogfQogCi1zdGF0aWMgUmVmUHRyPFNjYWxlVHJhbnNm
b3JtT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCog
Y2xpZW50LCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgU2NhbGVUcmFuc2Zvcm1PcGVy
YXRpb24qIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgUmVmUHRyPFNjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uPiBibGVuZEZ1bmMoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIFNjYWxl
VHJhbnNmb3JtT3BlcmF0aW9uKiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQm
IGNvbnRleHQpCiB7CiAgICAgaWYgKCFmcm9tICYmICF0bykKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CkBAIC0xNzUsMTAgKzE4NiwxMCBAQCBzdGF0aWMgUmVmUHRyPFNjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudAogICAgICAg
ICAgICAgbm9ybWFsaXplZEZyb20gPSBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGZy
b20tPngoKSwgZnJvbS0+eSgpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFKTsKICAgICAgICAg
ICAgIG5vcm1hbGl6ZWRUbyA9IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodG8tPngo
KSwgdG8tPnkoKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRSk7CiAgICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIGJsZW5kRnVuYyhjbGllbnQsIG5vcm1hbGl6ZWRGcm9tLmdldCgpLCBub3JtYWxp
emVkVG8uZ2V0KCksIHByb2dyZXNzKTsKKyAgICAgICAgcmV0dXJuIGJsZW5kRnVuYyhub3JtYWxp
emVkRnJvbS5nZXQoKSwgbm9ybWFsaXplZFRvLmdldCgpLCBjb250ZXh0KTsKICAgICB9CiAKLSAg
ICBhdXRvIGJsZW5kZWRPcGVyYXRpb24gPSB0by0+YmxlbmQoZnJvbSwgcHJvZ3Jlc3MpOworICAg
IGF1dG8gYmxlbmRlZE9wZXJhdGlvbiA9IHRvLT5ibGVuZChmcm9tLCBjb250ZXh0KTsKICAgICBp
ZiAoaXM8U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24+KGJsZW5kZWRPcGVyYXRpb24uZ2V0KCkpKSB7
CiAgICAgICAgIGF1dG8mIHNjYWxlID0gZG93bmNhc3Q8U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24+
KGJsZW5kZWRPcGVyYXRpb24uZ2V0KCkpOwogICAgICAgICByZXR1cm4gU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShzY2FsZS54KCksIHNjYWxlLnkoKSwgc2NhbGUueigpLCBzY2FsZS50
eXBlKCkpOwpAQCAtMTg2LDcgKzE5Nyw3IEBAIHN0YXRpYyBSZWZQdHI8U2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb24+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50CiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZWZQdHI8Um90YXRlVHJhbnNmb3JtT3BlcmF0
aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBS
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiog
dG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBSZWZQdHI8Um90YXRlVHJhbnNmb3JtT3BlcmF0
aW9uPiBibGVuZEZ1bmMoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBSb3RhdGVUcmFu
c2Zvcm1PcGVyYXRpb24qIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29u
dGV4dCkKIHsKICAgICBpZiAoIWZyb20gJiYgIXRvKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
QEAgLTIxMSwxMCArMjIyLDEwIEBAIHN0YXRpYyBSZWZQdHI8Um90YXRlVHJhbnNmb3JtT3BlcmF0
aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVuCiAgICAgICAgICAg
ICBub3JtYWxpemVkRnJvbSA9IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGZyb20t
PmFuZ2xlKCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFKTsKICAgICAgICAgICAgIG5vcm1h
bGl6ZWRUbyA9IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRvLT5hbmdsZSgpLCBU
cmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJs
ZW5kRnVuYyhjbGllbnQsIG5vcm1hbGl6ZWRGcm9tLmdldCgpLCBub3JtYWxpemVkVG8uZ2V0KCks
IHByb2dyZXNzKTsKKyAgICAgICAgcmV0dXJuIGJsZW5kRnVuYyhub3JtYWxpemVkRnJvbS5nZXQo
KSwgbm9ybWFsaXplZFRvLmdldCgpLCBjb250ZXh0KTsKICAgICB9CiAKLSAgICBhdXRvIGJsZW5k
ZWRPcGVyYXRpb24gPSB0by0+YmxlbmQoZnJvbSwgcHJvZ3Jlc3MpOworICAgIGF1dG8gYmxlbmRl
ZE9wZXJhdGlvbiA9IHRvLT5ibGVuZChmcm9tLCBjb250ZXh0KTsKICAgICBpZiAoaXM8Um90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uPihibGVuZGVkT3BlcmF0aW9uLmdldCgpKSkgewogICAgICAgICBh
dXRvJiByb3RhdGUgPSBkb3duY2FzdDxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24+KGJsZW5kZWRP
cGVyYXRpb24uZ2V0KCkpOwogICAgICAgICByZXR1cm4gUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUocm90YXRlLngoKSwgcm90YXRlLnkoKSwgcm90YXRlLnooKSwgcm90YXRlLmFuZ2xl
KCksIHJvdGF0ZS50eXBlKCkpOwpAQCAtMjIyLDcgKzIzMyw3IEBAIHN0YXRpYyBSZWZQdHI8Um90
YXRlVHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVuCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZWZQdHI8VHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogY2xpZW50LCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbiogdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBSZWZQdHI8
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZEZ1bmMoVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uKiBmcm9tLCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRvLCBjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoIWZyb20gJiYg
IXRvKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI0NywxMCArMjU4LDEwIEBAIHN0YXRp
YyBSZWZQdHI8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsCiAgICAgICAgICAgICBub3JtYWxpemVkRnJvbSA9IFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGZyb20tPngoKSwgZnJvbS0+eSgpLCBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURSk7CiAgICAgICAgICAgICBub3JtYWxpemVkVG8gPSBUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0by0+eCgpLCB0by0+eSgpLCBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJsZW5k
RnVuYyhjbGllbnQsIG5vcm1hbGl6ZWRGcm9tLmdldCgpLCBub3JtYWxpemVkVG8uZ2V0KCksIHBy
b2dyZXNzKTsKKyAgICAgICAgcmV0dXJuIGJsZW5kRnVuYyhub3JtYWxpemVkRnJvbS5nZXQoKSwg
bm9ybWFsaXplZFRvLmdldCgpLCBjb250ZXh0KTsKICAgICB9CiAKLSAgICBSZWY8VHJhbnNmb3Jt
T3BlcmF0aW9uPiBibGVuZGVkT3BlcmF0aW9uID0gdG8tPmJsZW5kKGZyb20sIHByb2dyZXNzKTsK
KyAgICBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZGVkT3BlcmF0aW9uID0gdG8tPmJsZW5k
KGZyb20sIGNvbnRleHQpOwogICAgIGlmIChpczxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24+
KGJsZW5kZWRPcGVyYXRpb24uZ2V0KCkpKSB7CiAgICAgICAgIFRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbiYgdHJhbnNsYXRlID0gZG93bmNhc3Q8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
PihibGVuZGVkT3BlcmF0aW9uLmdldCgpKTsKICAgICAgICAgcmV0dXJuIFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zbGF0ZS54KCksIHRyYW5zbGF0ZS55KCksIHRyYW5z
bGF0ZS56KCksIHRyYW5zbGF0ZS50eXBlKCkpOwpAQCAtMjU4LDcgKzI2OSw3IEBAIHN0YXRpYyBS
ZWZQdHI8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJv
cGVydHlCbGVuZGluZ0NsCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
UmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCosIENsaXBQYXRoT3BlcmF0aW9uKiBmcm9tLCBDbGlwUGF0aE9wZXJhdGlvbiog
dG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgUmVmUHRyPENsaXBQYXRoT3BlcmF0
aW9uPiBibGVuZEZ1bmMoQ2xpcFBhdGhPcGVyYXRpb24qIGZyb20sIENsaXBQYXRoT3BlcmF0aW9u
KiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAg
aWYgKCFmcm9tIHx8ICF0bykKICAgICAgICAgcmV0dXJuIHRvOwpAQCAtMjczLDMwICsyODQsMzAg
QEAgc3RhdGljIGlubGluZSBSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IGJsZW5kRnVuYyhjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW4KICAgICBpZiAoIWZyb21TaGFwZS5jYW5CbGVuZCh0
b1NoYXBlKSkKICAgICAgICAgcmV0dXJuIHRvOwogCi0gICAgcmV0dXJuIFNoYXBlQ2xpcFBhdGhP
cGVyYXRpb246OmNyZWF0ZSh0b1NoYXBlLmJsZW5kKGZyb21TaGFwZSwgcHJvZ3Jlc3MpKTsKKyAg
ICByZXR1cm4gU2hhcGVDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKHRvU2hhcGUuYmxlbmQoZnJv
bVNoYXBlLCBjb250ZXh0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVmUHRyPFNoYXBlVmFsdWU+
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgU2hhcGVWYWx1ZSog
ZnJvbSwgU2hhcGVWYWx1ZSogdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgUmVm
UHRyPFNoYXBlVmFsdWU+IGJsZW5kRnVuYyhTaGFwZVZhbHVlKiBmcm9tLCBTaGFwZVZhbHVlKiB0
bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgaWYg
KCFwcm9ncmVzcykKKyAgICBpZiAoIWNvbnRleHQucHJvZ3Jlc3MpCiAgICAgICAgIHJldHVybiBm
cm9tOwogCi0gICAgaWYgKHByb2dyZXNzID09IDEuMCkKKyAgICBpZiAoY29udGV4dC5wcm9ncmVz
cyA9PSAxLjApCiAgICAgICAgIHJldHVybiB0bzsKIAogICAgIEFTU0VSVChmcm9tICYmIHRvKTsK
ICAgICBjb25zdCBCYXNpY1NoYXBlJiBmcm9tU2hhcGUgPSAqZnJvbS0+c2hhcGUoKTsKICAgICBj
b25zdCBCYXNpY1NoYXBlJiB0b1NoYXBlID0gKnRvLT5zaGFwZSgpOwotICAgIHJldHVybiBTaGFw
ZVZhbHVlOjpjcmVhdGUodG9TaGFwZS5ibGVuZChmcm9tU2hhcGUsIHByb2dyZXNzKSwgdG8tPmNz
c0JveCgpKTsKKyAgICByZXR1cm4gU2hhcGVWYWx1ZTo6Y3JlYXRlKHRvU2hhcGUuYmxlbmQoZnJv
bVNoYXBlLCBjb250ZXh0KSwgdG8tPmNzc0JveCgpKTsKIH0KIAotc3RhdGljIGlubGluZSBSZWZQ
dHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCosIEZpbHRlck9wZXJhdGlvbiogZnJvbSwgRmlsdGVyT3BlcmF0aW9uKiB0bywgZG91Ymxl
IHByb2dyZXNzLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKQorc3RhdGljIGlubGlu
ZSBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZEZ1bmMoRmlsdGVyT3BlcmF0aW9uKiBmcm9t
LCBGaWx0ZXJPcGVyYXRpb24qIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYg
Y29udGV4dCwgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2ggPSBmYWxzZSkKIHsKICAgICBBU1NFUlQo
dG8pOwotICAgIHJldHVybiB0by0+YmxlbmQoZnJvbSwgcHJvZ3Jlc3MsIGJsZW5kVG9QYXNzdGhy
b3VnaCk7CisgICAgcmV0dXJuIHRvLT5ibGVuZChmcm9tLCBjb250ZXh0LCBibGVuZFRvUGFzc3Ro
cm91Z2gpOwogfQogCi1zdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGaWx0ZXJP
cGVyYXRpb25zKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgIGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvLCBkb3Vi
bGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGaWx0ZXJP
cGVyYXRpb25zKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsK
ICAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKICAgICBzaXplX3QgZnJvbVNpemUgPSBmcm9t
Lm9wZXJhdGlvbnMoKS5zaXplKCk7CkBAIC0zMDUsMTIgKzMxNiwxMiBAQCBzdGF0aWMgaW5saW5l
IEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAg
ICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZyb21PcCA9IChpIDwgZnJvbVNpemUpID8gZnJv
bS5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiAwOwogICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0
aW9uPiB0b09wID0gKGkgPCB0b1NpemUpID8gdG8ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogMDsK
LSAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRlZE9wID0gdG9PcCA/IGJsZW5k
RnVuYyhjbGllbnQsIGZyb21PcC5nZXQoKSwgdG9PcC5nZXQoKSwgcHJvZ3Jlc3MpIDogKGZyb21P
cCA/IGJsZW5kRnVuYyhjbGllbnQsIDAsIGZyb21PcC5nZXQoKSwgcHJvZ3Jlc3MsIHRydWUpIDog
MCk7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kZWRPcCA9IHRvT3AgPyBi
bGVuZEZ1bmMoZnJvbU9wLmdldCgpLCB0b09wLmdldCgpLCBjb250ZXh0KSA6IChmcm9tT3AgPyBi
bGVuZEZ1bmMoMCwgZnJvbU9wLmdldCgpLCBjb250ZXh0LCB0cnVlKSA6IDApOwogICAgICAgICBp
ZiAoYmxlbmRlZE9wKQogICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMoKS5hcHBlbmQoYmxl
bmRlZE9wKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBhdXRvIGlkZW50aXR5T3AgPSBQ
YXNzdGhyb3VnaEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBpZiAocHJv
Z3Jlc3MgPiAwLjUpCisgICAgICAgICAgICBpZiAoY29udGV4dC5wcm9ncmVzcyA+IDAuNSkKICAg
ICAgICAgICAgICAgICByZXN1bHQub3BlcmF0aW9ucygpLmFwcGVuZCh0b09wID8gdG9PcCA6IFdU
Rk1vdmUoaWRlbnRpdHlPcCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJl
c3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKGZyb21PcCA/IGZyb21PcCA6IFdURk1vdmUoaWRlbnRp
dHlPcCkpOwpAQCAtMzE5LDcgKzMzMCw3IEBAIHN0YXRpYyBpbmxpbmUgRmlsdGVyT3BlcmF0aW9u
cyBibGVuZEZpbHRlck9wZXJhdGlvbnMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBGaWx0ZXJPcGVyYXRpb25zIGJsZW5k
RnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJv
Z3Jlc3MsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IENTU1Byb3BlcnR5RmlsdGVyKQorc3Rh
dGljIGlubGluZSBGaWx0ZXJPcGVyYXRpb25zIGJsZW5kRnVuYyhjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0bywgY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NvbnRleHQmIGNvbnRleHQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IENTU1By
b3BlcnR5RmlsdGVyKQogewogICAgIEZpbHRlck9wZXJhdGlvbnMgcmVzdWx0OwogCkBAIC0zMjgs
MjIgKzMzOSwyMiBAQCBzdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudAogICAgIGJvb2wgbGlzdHNNYXRj
aCA9IGZhbHNlOwogICAgIHN3aXRjaCAocHJvcGVydHlJRCkgewogICAgIGNhc2UgQ1NTUHJvcGVy
dHlGaWx0ZXI6Ci0gICAgICAgIGxpc3RzTWF0Y2ggPSBjbGllbnQtPmZpbHRlckZ1bmN0aW9uTGlz
dHNNYXRjaCgpOworICAgICAgICBsaXN0c01hdGNoID0gY29udGV4dC5jbGllbnQtPmZpbHRlckZ1
bmN0aW9uTGlzdHNNYXRjaCgpOwogICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoRklMVEVSU19M
RVZFTF8yKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRlcjoKLSAgICAg
ICAgbGlzdHNNYXRjaCA9IGNsaWVudC0+YmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2go
KTsKKyAgICAgICAgbGlzdHNNYXRjaCA9IGNvbnRleHQuY2xpZW50LT5iYWNrZHJvcEZpbHRlckZ1
bmN0aW9uTGlzdHNNYXRjaCgpOwogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2UgQ1NT
UHJvcGVydHlBcHBsZUNvbG9yRmlsdGVyOgotICAgICAgICBsaXN0c01hdGNoID0gY2xpZW50LT5j
b2xvckZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpOworICAgICAgICBsaXN0c01hdGNoID0gY29u
dGV4dC5jbGllbnQtPmNvbG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKICAgICBpZiAo
bGlzdHNNYXRjaCkKLSAgICAgICAgcmVzdWx0ID0gYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGNsaWVu
dCwgZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAgICAgICAgcmVzdWx0ID0gYmxlbmRGaWx0ZXJPcGVy
YXRpb25zKGZyb20sIHRvLCBjb250ZXh0KTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSWYgdGhl
IGZpbHRlciBmdW5jdGlvbiBsaXN0cyBkb24ndCBtYXRjaCwgd2UgY291bGQgdHJ5IHRvIGNyb3Nz
LWZhZGUsIGJ1dCBkb24ndCB5ZXQgaGF2ZSBhIHdheSB0byByZXByZXNlbnQgdGhhdCBpbiBDU1Mu
CiAgICAgICAgIC8vIEZvciBub3cgd2UnbGwganVzdCBmYWlsIHRvIGFuaW1hdGUuCkBAIC0zNTMs
MjAgKzM2NCwyMCBAQCBzdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudAogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRmlsdGVyKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgQ2FjaGVkSW1hZ2UqIGltYWdlLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0bywg
ZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRG
aWx0ZXIoQ2FjaGVkSW1hZ2UqIGltYWdlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRl
eHQmIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKGltYWdlKTsKLSAgICBGaWx0ZXJPcGVyYXRpb25z
IGZpbHRlclJlc3VsdCA9IGJsZW5kRmlsdGVyT3BlcmF0aW9ucyhjbGllbnQsIGZyb20sIHRvLCBw
cm9ncmVzcyk7CisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJSZXN1bHQgPSBibGVuZEZpbHRl
ck9wZXJhdGlvbnMoZnJvbSwgdG8sIGNvbnRleHQpOwogCiAgICAgYXV0byBpbWFnZVZhbHVlID0g
Q1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKCppbWFnZSk7Ci0gICAgYXV0byBmaWx0ZXJWYWx1ZSA9IENv
bXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yRmlsdGVyKGNsaWVudC0+Y3VycmVudFN0eWxl
KCksIGZpbHRlclJlc3VsdCwgRG9Ob3RBZGp1c3RQaXhlbFZhbHVlcyk7CisgICAgYXV0byBmaWx0
ZXJWYWx1ZSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yRmlsdGVyKGNvbnRleHQu
Y2xpZW50LT5jdXJyZW50U3R5bGUoKSwgZmlsdGVyUmVzdWx0LCBEb05vdEFkanVzdFBpeGVsVmFs
dWVzKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6Y3JlYXRlKFdU
Rk1vdmUoaW1hZ2VWYWx1ZSksIFdURk1vdmUoZmlsdGVyVmFsdWUpKTsKICAgICByZXN1bHQuZ2V0
KCkuc2V0RmlsdGVyT3BlcmF0aW9ucyhmaWx0ZXJSZXN1bHQpOwogICAgIHJldHVybiBTdHlsZUdl
bmVyYXRlZEltYWdlOjpjcmVhdGUoV1RGTW92ZShyZXN1bHQpKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBWaXNpYmlsaXR5IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBj
bGllbnQsIFZpc2liaWxpdHkgZnJvbSwgVmlzaWJpbGl0eSB0bywgZG91YmxlIHByb2dyZXNzKQor
c3RhdGljIGlubGluZSBWaXNpYmlsaXR5IGJsZW5kRnVuYyhWaXNpYmlsaXR5IGZyb20sIFZpc2li
aWxpdHkgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewog
ICAgIC8vIEFueSBub24temVybyByZXN1bHQgbWVhbnMgd2UgY29uc2lkZXIgdGhlIG9iamVjdCB0
byBiZSB2aXNpYmxlLiBPbmx5IGF0IDAgZG8gd2UgY29uc2lkZXIgdGhlIG9iamVjdCB0byBiZQog
ICAgIC8vIGludmlzaWJsZS4gVGhlIGludmlzaWJsZSB2YWx1ZSB3ZSB1c2UgKFZpc2liaWxpdHk6
OkhpZGRlbiB2cy4gVmlzaWJpbGl0eTo6Q29sbGFwc2UpIGRlcGVuZHMgb24gdGhlIHNwZWNpZmll
ZCBmcm9tL3RvIHZhbHVlcy4KQEAgLTM3NCw0NiArMzg1LDQ2IEBAIHN0YXRpYyBpbmxpbmUgVmlz
aWJpbGl0eSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50
LCBWaXNpCiAgICAgZG91YmxlIHRvVmFsID0gdG8gPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSA/IDEu
IDogMC47CiAgICAgaWYgKGZyb21WYWwgPT0gdG9WYWwpCiAgICAgICAgIHJldHVybiB0bzsKLSAg
ICBkb3VibGUgcmVzdWx0ID0gYmxlbmRGdW5jKGNsaWVudCwgZnJvbVZhbCwgdG9WYWwsIHByb2dy
ZXNzKTsKKyAgICBkb3VibGUgcmVzdWx0ID0gYmxlbmRGdW5jKGZyb21WYWwsIHRvVmFsLCBjb250
ZXh0KTsKICAgICByZXR1cm4gcmVzdWx0ID4gMC4gPyBWaXNpYmlsaXR5OjpWaXNpYmxlIDogKHRv
ICE9IFZpc2liaWxpdHk6OlZpc2libGUgPyB0byA6IGZyb20pOwogfQogCi1zdGF0aWMgaW5saW5l
IFRleHRVbmRlcmxpbmVPZmZzZXQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGNsaWVudCwgY29uc3QgVGV4dFVuZGVybGluZU9mZnNldCYgZnJvbSwgY29uc3QgVGV4
dFVuZGVybGluZU9mZnNldCYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgVGV4
dFVuZGVybGluZU9mZnNldCBibGVuZEZ1bmMoY29uc3QgVGV4dFVuZGVybGluZU9mZnNldCYgZnJv
bSwgY29uc3QgVGV4dFVuZGVybGluZU9mZnNldCYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChmcm9tLmlzTGVuZ3RoKCkgJiYgdG8uaXNM
ZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFRleHRVbmRlcmxpbmVPZmZzZXQ6OmNyZWF0ZVdpdGhM
ZW5ndGgoYmxlbmRGdW5jKGNsaWVudCwgZnJvbS5sZW5ndGhWYWx1ZSgpLCB0by5sZW5ndGhWYWx1
ZSgpLCBwcm9ncmVzcykpOworICAgICAgICByZXR1cm4gVGV4dFVuZGVybGluZU9mZnNldDo6Y3Jl
YXRlV2l0aExlbmd0aChibGVuZEZ1bmMoZnJvbS5sZW5ndGhWYWx1ZSgpLCB0by5sZW5ndGhWYWx1
ZSgpLCBjb250ZXh0KSk7CiAgICAgcmV0dXJuIFRleHRVbmRlcmxpbmVPZmZzZXQ6OmNyZWF0ZVdp
dGhBdXRvKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgVGV4dERlY29yYXRpb25UaGlja25lc3MgYmxl
bmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgY29uc3QgVGV4
dERlY29yYXRpb25UaGlja25lc3MmIGZyb20sIGNvbnN0IFRleHREZWNvcmF0aW9uVGhpY2tuZXNz
JiB0bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBUZXh0RGVjb3JhdGlvblRoaWNr
bmVzcyBibGVuZEZ1bmMoY29uc3QgVGV4dERlY29yYXRpb25UaGlja25lc3MmIGZyb20sIGNvbnN0
IFRleHREZWNvcmF0aW9uVGhpY2tuZXNzJiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Nv
bnRleHQmIGNvbnRleHQpCiB7CiAgICAgaWYgKGZyb20uaXNMZW5ndGgoKSAmJiB0by5pc0xlbmd0
aCgpKQotICAgICAgICByZXR1cm4gVGV4dERlY29yYXRpb25UaGlja25lc3M6OmNyZWF0ZVdpdGhM
ZW5ndGgoYmxlbmRGdW5jKGNsaWVudCwgZnJvbS5sZW5ndGhWYWx1ZSgpLCB0by5sZW5ndGhWYWx1
ZSgpLCBwcm9ncmVzcykpOworICAgICAgICByZXR1cm4gVGV4dERlY29yYXRpb25UaGlja25lc3M6
OmNyZWF0ZVdpdGhMZW5ndGgoYmxlbmRGdW5jKGZyb20ubGVuZ3RoVmFsdWUoKSwgdG8ubGVuZ3Ro
VmFsdWUoKSwgY29udGV4dCkpOwogICAgIHJldHVybiBUZXh0RGVjb3JhdGlvblRoaWNrbmVzczo6
Y3JlYXRlV2l0aEF1dG8oKTsKIH0KIAotc3RhdGljIGlubGluZSBMZW5ndGhCb3ggYmxlbmRGdW5j
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgY29uc3QgTGVuZ3RoQm94
JiBmcm9tLCBjb25zdCBMZW5ndGhCb3gmIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSkKK3N0YXRpYyBpbmxpbmUgTGVuZ3Ro
Qm94IGJsZW5kRnVuYyhjb25zdCBMZW5ndGhCb3gmIGZyb20sIGNvbnN0IExlbmd0aEJveCYgdG8s
IGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0LCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UgPSBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpCiB7Ci0gICAgTGVuZ3RoQm94IHJlc3Vs
dChibGVuZEZ1bmMoY2xpZW50LCBmcm9tLnRvcCgpLCB0by50b3AoKSwgcHJvZ3Jlc3MsIHZhbHVl
UmFuZ2UpLAotICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGNsaWVudCwgZnJvbS5yaWdo
dCgpLCB0by5yaWdodCgpLCBwcm9ncmVzcywgdmFsdWVSYW5nZSksCi0gICAgICAgICAgICAgICAg
ICAgICBibGVuZEZ1bmMoY2xpZW50LCBmcm9tLmJvdHRvbSgpLCB0by5ib3R0b20oKSwgcHJvZ3Jl
c3MsIHZhbHVlUmFuZ2UpLAotICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGNsaWVudCwg
ZnJvbS5sZWZ0KCksIHRvLmxlZnQoKSwgcHJvZ3Jlc3MsIHZhbHVlUmFuZ2UpKTsKKyAgICBMZW5n
dGhCb3ggcmVzdWx0KGJsZW5kRnVuYyhmcm9tLnRvcCgpLCB0by50b3AoKSwgY29udGV4dCwgdmFs
dWVSYW5nZSksCisgICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoZnJvbS5yaWdodCgpLCB0
by5yaWdodCgpLCBjb250ZXh0LCB2YWx1ZVJhbmdlKSwKKyAgICAgICAgICAgICAgICAgICAgIGJs
ZW5kRnVuYyhmcm9tLmJvdHRvbSgpLCB0by5ib3R0b20oKSwgY29udGV4dCwgdmFsdWVSYW5nZSks
CisgICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoZnJvbS5sZWZ0KCksIHRvLmxlZnQoKSwg
Y29udGV4dCwgdmFsdWVSYW5nZSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgU1ZHTGVuZ3RoVmFsdWUgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqLCBjb25zdCBTVkdMZW5ndGhWYWx1ZSYgZnJvbSwgY29uc3QgU1ZHTGVuZ3RoVmFsdWUm
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIFNWR0xlbmd0aFZhbHVlIGJsZW5k
RnVuYyhjb25zdCBTVkdMZW5ndGhWYWx1ZSYgZnJvbSwgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIHRv
LCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1
cm4gU1ZHTGVuZ3RoVmFsdWU6OmJsZW5kKGZyb20sIHRvLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KHByb2dyZXNzKSk7CisgICAgcmV0dXJuIFNWR0xlbmd0aFZhbHVlOjpibGVuZChmcm9tLCB0bywg
bmFycm93UHJlY2lzaW9uVG9GbG9hdChjb250ZXh0LnByb2dyZXNzKSk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCosIGNvbnN0IFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4mIGZyb20sIGNvbnN0
IFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4mIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5s
aW5lIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IFZlY3RvcjxTVkdMZW5n
dGhWYWx1ZT4mIGZyb20sIGNvbnN0IFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4mIHRvLCBjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBzaXplX3QgZnJvbUxl
bmd0aCA9IGZyb20uc2l6ZSgpOwogICAgIHNpemVfdCB0b0xlbmd0aCA9IHRvLnNpemUoKTsKICAg
ICBpZiAoIWZyb21MZW5ndGgpCi0gICAgICAgIHJldHVybiAhcHJvZ3Jlc3MgPyBmcm9tIDogdG87
CisgICAgICAgIHJldHVybiAhY29udGV4dC5wcm9ncmVzcyA/IGZyb20gOiB0bzsKICAgICBpZiAo
IXRvTGVuZ3RoKQotICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgPT0gMSA/IGZyb20gOiB0bzsKKyAg
ICAgICAgcmV0dXJuIGNvbnRleHQucHJvZ3Jlc3MgPT0gMSA/IGZyb20gOiB0bzsKICAgICBzaXpl
X3QgcmVzdWx0TGVuZ3RoID0gZnJvbUxlbmd0aDsKICAgICBpZiAoZnJvbUxlbmd0aCAhPSB0b0xl
bmd0aCkgewogICAgICAgICBpZiAoIXJlbWFpbmRlcihzdGQ6Om1heChmcm9tTGVuZ3RoLCB0b0xl
bmd0aCksIHN0ZDo6bWluKGZyb21MZW5ndGgsIHRvTGVuZ3RoKSkpCkBAIC00MjMsMzUgKzQzNCwz
NSBAQCBzdGF0aWMgaW5saW5lIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLAogICAgIH0KICAgICBWZWN0b3I8U1ZHTGVuZ3Ro
VmFsdWU+IHJlc3VsdChyZXN1bHRMZW5ndGgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cmVzdWx0TGVuZ3RoOyArK2kpCi0gICAgICAgIHJlc3VsdFtpXSA9IFNWR0xlbmd0aFZhbHVlOjpi
bGVuZChmcm9tW2kgJSBmcm9tTGVuZ3RoXSwgdG9baSAlIHRvTGVuZ3RoXSwgbmFycm93UHJlY2lz
aW9uVG9GbG9hdChwcm9ncmVzcykpOworICAgICAgICByZXN1bHRbaV0gPSBTVkdMZW5ndGhWYWx1
ZTo6YmxlbmQoZnJvbVtpICUgZnJvbUxlbmd0aF0sIHRvW2kgJSB0b0xlbmd0aF0sIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoY29udGV4dC5wcm9ncmVzcykpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGNyb3NzZmFkZUJsZW5kKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBTdHlsZUNhY2hlZEltYWdlKiBmcm9tU3R5bGVJ
bWFnZSwgU3R5bGVDYWNoZWRJbWFnZSogdG9TdHlsZUltYWdlLCBkb3VibGUgcHJvZ3Jlc3MpCitz
dGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBjcm9zc2ZhZGVCbGVuZChTdHlsZUNhY2hl
ZEltYWdlKiBmcm9tU3R5bGVJbWFnZSwgU3R5bGVDYWNoZWRJbWFnZSogdG9TdHlsZUltYWdlLCBj
b25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKICAgICAvLyBJZiBw
cm9ncmVzcyBpcyBhdCBvbmUgb2YgdGhlIGV4dHJlbWVzLCB3ZSB3YW50IGdldENvbXB1dGVkU3R5
bGUgdG8gc2hvdyB0aGUgaW1hZ2UsCiAgICAgLy8gbm90IGEgY29tcGxldGVkIGNyb3NzLWZhZGUs
IHNvIHdlIGhhbmQgYmFjayBvbmUgb2YgdGhlIGV4aXN0aW5nIGltYWdlcy4KLSAgICBpZiAoIXBy
b2dyZXNzKQorICAgIGlmICghY29udGV4dC5wcm9ncmVzcykKICAgICAgICAgcmV0dXJuIGZyb21T
dHlsZUltYWdlOwotICAgIGlmIChwcm9ncmVzcyA9PSAxKQorICAgIGlmIChjb250ZXh0LnByb2dy
ZXNzID09IDEpCiAgICAgICAgIHJldHVybiB0b1N0eWxlSW1hZ2U7CiAgICAgaWYgKCFmcm9tU3R5
bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKSB8fCAhdG9TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKQog
ICAgICAgICByZXR1cm4gdG9TdHlsZUltYWdlOwogCiAgICAgYXV0byBmcm9tSW1hZ2VWYWx1ZSA9
IENTU0ltYWdlVmFsdWU6OmNyZWF0ZSgqZnJvbVN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkpOwog
ICAgIGF1dG8gdG9JbWFnZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKCp0b1N0eWxlSW1h
Z2UtPmNhY2hlZEltYWdlKCkpOwotICAgIGF1dG8gcGVyY2VudGFnZVZhbHVlID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZShwcm9ncmVzcywgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAg
IGF1dG8gcGVyY2VudGFnZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShjb250ZXh0
LnByb2dyZXNzLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CiAKICAgICBhdXRvIGNyb3NzZmFk
ZVZhbHVlID0gQ1NTQ3Jvc3NmYWRlVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKGZyb21JbWFnZVZhbHVl
KSwgV1RGTW92ZSh0b0ltYWdlVmFsdWUpLCBXVEZNb3ZlKHBlcmNlbnRhZ2VWYWx1ZSkpOwogICAg
IHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoV1RGTW92ZShjcm9zc2ZhZGVWYWx1
ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBibGVuZEZ1bmMoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBTdHlsZUltYWdlKiBmcm9tLCBT
dHlsZUltYWdlKiB0bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBSZWZQdHI8U3R5
bGVJbWFnZT4gYmxlbmRGdW5jKFN0eWxlSW1hZ2UqIGZyb20sIFN0eWxlSW1hZ2UqIHRvLCBjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBpZiAoIXByb2dy
ZXNzKQorICAgIGlmICghY29udGV4dC5wcm9ncmVzcykKICAgICAgICAgcmV0dXJuIGZyb207CiAK
LSAgICBpZiAocHJvZ3Jlc3MgPT0gMS4wKQorICAgIGlmIChjb250ZXh0LnByb2dyZXNzID09IDEu
MCkKICAgICAgICAgcmV0dXJuIHRvOwogCiAgICAgQVNTRVJUKGZyb20gJiYgdG8pOwpAQCAtNDcz
LDE0ICs0ODQsMTQgQEAgc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRGdW5j
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWUKICAgICAgICAgICAgIENTU0Zp
bHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVl
Pihmcm9tR2VuZXJhdGVkKTsKICAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIHRvRmls
dGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0ZWQpOwogICAgICAg
ICAgICAgaWYgKGZyb21GaWx0ZXIuZXF1YWxJbnB1dEltYWdlcyh0b0ZpbHRlcikgJiYgZnJvbUZp
bHRlci5jYWNoZWRJbWFnZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBibGVuZEZpbHRlcihj
bGllbnQsIGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwgZnJvbUZpbHRlci5maWx0ZXJPcGVyYXRp
b25zKCksIHRvRmlsdGVyLmZpbHRlck9wZXJhdGlvbnMoKSwgcHJvZ3Jlc3MpOworICAgICAgICAg
ICAgICAgIHJldHVybiBibGVuZEZpbHRlcihmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21G
aWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIGNv
bnRleHQpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzPENTU0Nyb3NzZmFkZVZhbHVlPihm
cm9tR2VuZXJhdGVkKSAmJiBpczxDU1NDcm9zc2ZhZGVWYWx1ZT4odG9HZW5lcmF0ZWQpKSB7CiAg
ICAgICAgICAgICBDU1NDcm9zc2ZhZGVWYWx1ZSYgZnJvbUNyb3NzZmFkZSA9IGRvd25jYXN0PENT
U0Nyb3NzZmFkZVZhbHVlPihmcm9tR2VuZXJhdGVkKTsKICAgICAgICAgICAgIENTU0Nyb3NzZmFk
ZVZhbHVlJiB0b0Nyb3NzZmFkZSA9IGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPih0b0dlbmVy
YXRlZCk7CiAgICAgICAgICAgICBpZiAoZnJvbUNyb3NzZmFkZS5lcXVhbElucHV0SW1hZ2VzKHRv
Q3Jvc3NmYWRlKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvIGNyb3NzZmFkZUJsZW5kID0g
dG9Dcm9zc2ZhZGUuYmxlbmQoZnJvbUNyb3NzZmFkZSwgcHJvZ3Jlc3MpKQorICAgICAgICAgICAg
ICAgIGlmIChhdXRvIGNyb3NzZmFkZUJsZW5kID0gdG9Dcm9zc2ZhZGUuYmxlbmQoZnJvbUNyb3Nz
ZmFkZSwgY29udGV4dC5wcm9ncmVzcykpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHls
ZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoKmNyb3NzZmFkZUJsZW5kKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtNDkyLDcgKzUwMyw3IEBAIHN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxl
SW1hZ2U+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllCiAg
ICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKSkgewogICAg
ICAgICAgICAgQ1NTRmlsdGVySW1hZ2VWYWx1ZSYgZnJvbUZpbHRlciA9IGRvd25jYXN0PENTU0Zp
bHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpOwogICAgICAgICAgICAgaWYgKGZyb21GaWx0
ZXIuY2FjaGVkSW1hZ2UoKSAmJiBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPigqdG8pLmNhY2hl
ZEltYWdlKCkgPT0gZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBibGVuZEZpbHRlcihjbGllbnQsIGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwgZnJvbUZp
bHRlci5maWx0ZXJPcGVyYXRpb25zKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgcHJvZ3Jlc3MpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBibGVuZEZpbHRlcihmcm9tRmlsdGVyLmNhY2hlZEltYWdl
KCksIGZyb21GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBGaWx0ZXJPcGVyYXRpb25zKCksIGNv
bnRleHQpOwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgaW50ZXJwb2xhdGlvbiBi
ZXR3ZWVuIGNyb3NzLWZhZGUgYW5kIGltYWdlIHNvdXJjZS4KICAgICB9IGVsc2UgaWYgKGlzPFN0
eWxlQ2FjaGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8pKSB7
CkBAIC01MDAsNyArNTExLDcgQEAgc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxl
bmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWUKICAgICAgICAgaWYg
KGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKSkgewogICAgICAgICAgICAgQ1NT
RmlsdGVySW1hZ2VWYWx1ZSYgdG9GaWx0ZXIgPSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVl
Pih0b0dlbmVyYXRlZCk7CiAgICAgICAgICAgICBpZiAodG9GaWx0ZXIuY2FjaGVkSW1hZ2UoKSAm
JiBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPigqZnJvbSkuY2FjaGVkSW1hZ2UoKSA9PSB0b0Zp
bHRlci5jYWNoZWRJbWFnZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBibGVuZEZpbHRlcihj
bGllbnQsIHRvRmlsdGVyLmNhY2hlZEltYWdlKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgdG9GaWx0
ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGJsZW5kRmlsdGVyKHRvRmlsdGVyLmNhY2hlZEltYWdlKCksIEZpbHRlck9wZXJhdGlvbnMoKSwg
dG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBjb250ZXh0KTsKICAgICAgICAgfQogICAgICAg
ICAvLyBGSVhNRTogQWRkIGludGVycG9sYXRpb24gYmV0d2VlbiBpbWFnZSBzb3VyY2UgYW5kIGNy
b3NzLWZhZGUuCiAgICAgfQpAQCAtNTA4LDEyICs1MTksMTIgQEAgc3RhdGljIGlubGluZSBSZWZQ
dHI8U3R5bGVJbWFnZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGNsaWUKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgY3Jvc3MgZmFkZSBiZXR3ZWVuIGNhY2hl
ZCBhbmQgZ2VuZXJhdGVkIGltYWdlcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzgyOTMKICAgICBpZiAoaXM8U3R5bGVDYWNoZWRJbWFnZT4oKmZyb20p
ICYmIGlzPFN0eWxlQ2FjaGVkSW1hZ2U+KCp0bykpCi0gICAgICAgIHJldHVybiBjcm9zc2ZhZGVC
bGVuZChjbGllbnQsIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KGZyb20pLCBkb3duY2FzdDxT
dHlsZUNhY2hlZEltYWdlPih0byksIHByb2dyZXNzKTsKKyAgICAgICAgcmV0dXJuIGNyb3NzZmFk
ZUJsZW5kKGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KGZyb20pLCBkb3duY2FzdDxTdHlsZUNh
Y2hlZEltYWdlPih0byksIGNvbnRleHQpOwogCiAgICAgcmV0dXJuIHRvOwogfQogCi1zdGF0aWMg
aW5saW5lIE5pbmVQaWVjZUltYWdlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiBjbGllbnQsIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBmcm9tLCBjb25zdCBOaW5lUGll
Y2VJbWFnZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgTmluZVBpZWNlSW1h
Z2UgYmxlbmRGdW5jKGNvbnN0IE5pbmVQaWVjZUltYWdlJiBmcm9tLCBjb25zdCBOaW5lUGllY2VJ
bWFnZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewog
ICAgIGlmICghZnJvbS5oYXNJbWFnZSgpIHx8ICF0by5oYXNJbWFnZSgpKQogICAgICAgICByZXR1
cm4gdG87CkBAIC01MjMsMjMgKzUzNCwyMyBAQCBzdGF0aWMgaW5saW5lIE5pbmVQaWVjZUltYWdl
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsCiAgICAg
aWYgKGZyb20uaW1hZ2VTbGljZXMoKSAhPSB0by5pbWFnZVNsaWNlcygpIHx8IGZyb20uYm9yZGVy
U2xpY2VzKCkgIT0gdG8uYm9yZGVyU2xpY2VzKCkgfHwgZnJvbS5vdXRzZXQoKSAhPSB0by5vdXRz
ZXQoKSB8fCBmcm9tLmZpbGwoKSAhPSB0by5maWxsKCkgfHwgZnJvbS5ob3Jpem9udGFsUnVsZSgp
ICE9IHRvLmhvcml6b250YWxSdWxlKCkgfHwgZnJvbS52ZXJ0aWNhbFJ1bGUoKSAhPSB0by52ZXJ0
aWNhbFJ1bGUoKSkKICAgICAgICAgcmV0dXJuIHRvOwogCi0gICAgaWYgKGF1dG8qIHJlbmRlcmVy
ID0gY2xpZW50LT5yZW5kZXJlcigpKSB7CisgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gY29udGV4
dC5jbGllbnQtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgaWYgKGZyb20uaW1hZ2UoKS0+aW1hZ2VT
aXplKHJlbmRlcmVyLCAxLjApICE9IHRvLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4w
KSkKICAgICAgICAgICAgIHJldHVybiB0bzsKICAgICB9CiAKLSAgICByZXR1cm4gTmluZVBpZWNl
SW1hZ2UoYmxlbmRGdW5jKGNsaWVudCwgZnJvbS5pbWFnZSgpLCB0by5pbWFnZSgpLCBwcm9ncmVz
cyksCisgICAgcmV0dXJuIE5pbmVQaWVjZUltYWdlKGJsZW5kRnVuYyhmcm9tLmltYWdlKCksIHRv
LmltYWdlKCksIGNvbnRleHQpLAogICAgICAgICBmcm9tLmltYWdlU2xpY2VzKCksIGZyb20uZmls
bCgpLCBmcm9tLmJvcmRlclNsaWNlcygpLCBmcm9tLm91dHNldCgpLCBmcm9tLmhvcml6b250YWxS
dWxlKCksIGZyb20udmVydGljYWxSdWxlKCkpOwogfQogCiAjaWYgRU5BQkxFKFZBUklBVElPTl9G
T05UUykKIAotc3RhdGljIGlubGluZSBGb250VmFyaWF0aW9uU2V0dGluZ3MgYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgY29uc3QgRm9udFZhcmlhdGlv
blNldHRpbmdzJiBmcm9tLCBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBibGVuZEZ1bmMo
Y29uc3QgRm9udFZhcmlhdGlvblNldHRpbmdzJiBmcm9tLCBjb25zdCBGb250VmFyaWF0aW9uU2V0
dGluZ3MmIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsK
LSAgICBpZiAoIXByb2dyZXNzKQorICAgIGlmICghY29udGV4dC5wcm9ncmVzcykKICAgICAgICAg
cmV0dXJuIGZyb207CiAKLSAgICBpZiAocHJvZ3Jlc3MgPT0gMS4wKQorICAgIGlmIChjb250ZXh0
LnByb2dyZXNzID09IDEuMCkKICAgICAgICAgcmV0dXJuIHRvOwogCiAgICAgQVNTRVJUKGZyb20u
c2l6ZSgpID09IHRvLnNpemUoKSk7CkBAIC01NDksNyArNTYwLDcgQEAgc3RhdGljIGlubGluZSBG
b250VmFyaWF0aW9uU2V0dGluZ3MgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGMKICAgICAgICAgYXV0byYgZnJvbUl0ZW0gPSBmcm9tLmF0KGkpOwogICAgICAgICBh
dXRvJiB0b0l0ZW0gPSB0by5hdChpKTsKICAgICAgICAgQVNTRVJUKGZyb21JdGVtLnRhZygpID09
IHRvSXRlbS50YWcoKSk7Ci0gICAgICAgIGZsb2F0IGludGVycG9sYXRlZCA9IGJsZW5kRnVuYyhj
bGllbnQsIGZyb21JdGVtLnZhbHVlKCksIHRvSXRlbS52YWx1ZSgpLCBwcm9ncmVzcyk7CisgICAg
ICAgIGZsb2F0IGludGVycG9sYXRlZCA9IGJsZW5kRnVuYyhmcm9tSXRlbS52YWx1ZSgpLCB0b0l0
ZW0udmFsdWUoKSwgY29udGV4dCk7CiAgICAgICAgIHJlc3VsdC5pbnNlcnQoeyBmcm9tSXRlbS50
YWcoKSwgaW50ZXJwb2xhdGVkIH0pOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNTU3
LDE0ICs1NjgsMTQgQEAgc3RhdGljIGlubGluZSBGb250VmFyaWF0aW9uU2V0dGluZ3MgYmxlbmRG
dW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGMKIAogI2VuZGlmCiAKLXN0YXRp
YyBpbmxpbmUgRm9udFNlbGVjdGlvblZhbHVlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiBjbGllbnQsIEZvbnRTZWxlY3Rpb25WYWx1ZSBmcm9tLCBGb250U2VsZWN0
aW9uVmFsdWUgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgRm9udFNlbGVjdGlv
blZhbHVlIGJsZW5kRnVuYyhGb250U2VsZWN0aW9uVmFsdWUgZnJvbSwgRm9udFNlbGVjdGlvblZh
bHVlIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKLSAg
ICByZXR1cm4gRm9udFNlbGVjdGlvblZhbHVlKHN0ZDo6bWF4KDAuMGYsIGJsZW5kRnVuYyhjbGll
bnQsIHN0YXRpY19jYXN0PGZsb2F0Pihmcm9tKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvKSwgcHJv
Z3Jlc3MpKSk7CisgICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25WYWx1ZShzdGQ6Om1heCgwLjBmLCBi
bGVuZEZ1bmMoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZyb20pLCBzdGF0aWNfY2FzdDxmbG9hdD4odG8p
LCBjb250ZXh0KSkpOwogfQogCi1zdGF0aWMgaW5saW5lIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25W
YWx1ZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwg
T3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiBmcm9tLCBPcHRpb25hbDxGb250U2VsZWN0aW9u
VmFsdWU+IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIE9wdGlvbmFsPEZvbnRT
ZWxlY3Rpb25WYWx1ZT4gYmxlbmRGdW5jKE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gZnJv
bSwgT3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGJsZW5kRnVuYyhjbGllbnQsICpm
cm9tLCAqdG8sIHByb2dyZXNzKTsKKyAgICByZXR1cm4gYmxlbmRGdW5jKCpmcm9tLCAqdG8sIGNv
bnRleHQpOwogfQogCiBjbGFzcyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKQEAgLTU3
OCwxMiArNTg5LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbmltYXRpb25Qcm9wZXJ0eVdy
YXBwZXJCYXNlKCkgPSBkZWZhdWx0OwogCiAgICAgdmlydHVhbCBib29sIGlzU2hvcnRoYW5kV3Jh
cHBlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGVxdWFscyhj
b25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRl
clN0eWxlKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBibGVuZChj
b25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5k
ZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgZG91YmxlKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlJikg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJT
dHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZp
cnR1YWwgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYpIGNvbnN0ID0g
MDsKICAgICAKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdmlydHVhbCB2b2lkIGxvZ0JsZW5kKGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSos
IGRvdWJsZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBkb3VibGUp
IGNvbnN0ID0gMDsKICNlbmRpZgogCiAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvcGVydHk7IH0KQEAgLTYwNCwyNSArNjE1LDIzIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgfQogCi0gICAgVCB2YWx1ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
CisgICAgVCB2YWx1ZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gKHN0eWxlLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIHJldHVybiAoc3R5bGUu
Km1fZ2V0dGVyKSgpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIGVxdWFscyhjb25zdCBS
ZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAg
Ym9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUmIGEsIGNvbnN0IFJlbmRlclN0eWxlJiBiKSBj
b25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgaWYgKCZh
ID09ICZiKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIHZhbHVlKGEpID09IHZh
bHVlKGIpOwogICAgIH0KIAogI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNv
bnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8sIGNvbnN0IFJlbmRl
clN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGxv
Z0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNv
bnN0IFJlbmRlclN0eWxlJiBkZXN0aW5hdGlvbiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5h
bAogICAgIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAi
ICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAiIGZyb20gIiA8
PCB2YWx1ZShmcm9tKSA8PCAiIHRvICIgPDwgdmFsdWUodG8pIDw8ICIgYXQgIiA8PCBUZXh0U3Ry
ZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8
PCB2YWx1ZShyZXN1bHQpKTsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0
cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAi
IGZyb20gIiA8PCB2YWx1ZShmcm9tKSA8PCAiIHRvICIgPDwgdmFsdWUodG8pIDw8ICIgYXQgIiA8
PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8
ICIgLT4gIiA8PCB2YWx1ZShkZXN0aW5hdGlvbikpOwogICAgIH0KICNlbmRpZgogCkBAIC02Mzks
OSArNjQ4LDkgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0
aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3Vi
bGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYg
ZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYg
dG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdCBvdmVy
cmlkZQogICAgIHsKLSAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhj
bGllbnQsIHRoaXMtPnZhbHVlKGZyb20pLCB0aGlzLT52YWx1ZSh0byksIHByb2dyZXNzKSk7Cisg
ICAgICAgIChkZXN0aW5hdGlvbi4qbV9zZXR0ZXIpKGJsZW5kRnVuYyh0aGlzLT52YWx1ZShmcm9t
KSwgdGhpcy0+dmFsdWUodG8pLCBjb250ZXh0KSk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6CkBAIC02
NTgsMTAgKzY2NywxMCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgYmxl
bmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBSZW5kZXJTdHlsZSog
ZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSog
dG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGJsZW5kKFJlbmRlclN0
eWxlJiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0
eWxlJiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
IGZpbmFsCiAgICAgewotICAgICAgICBhdXRvIGJsZW5kZWRWYWx1ZSA9IGJsZW5kRnVuYyhjbGll
bnQsIHRoaXMtPnZhbHVlKGZyb20pLCB0aGlzLT52YWx1ZSh0byksIHByb2dyZXNzKTsKLSAgICAg
ICAgKGRlc3RpbmF0aW9uLT4qdGhpcy0+bV9zZXR0ZXIpKGJsZW5kZWRWYWx1ZSA+IDEgPyBibGVu
ZGVkVmFsdWUgOiAxKTsKKyAgICAgICAgYXV0byBibGVuZGVkVmFsdWUgPSBibGVuZEZ1bmModGhp
cy0+dmFsdWUoZnJvbSksIHRoaXMtPnZhbHVlKHRvKSwgY29udGV4dCk7CisgICAgICAgIChkZXN0
aW5hdGlvbi4qdGhpcy0+bV9zZXR0ZXIpKGJsZW5kZWRWYWx1ZSA+IDEgPyBibGVuZGVkVmFsdWUg
OiAxKTsKICAgICB9CiB9OwogCkBAIC02NzYsMTIgKzY4NSwxMiBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqLCBj
b25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlJikg
Y29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudCosIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3Qg
UmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNz
KSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBj
b25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QgZmluYWwKICAgICB7Ci0gICAg
ICAgIEFTU0VSVCghcHJvZ3Jlc3MgfHwgcHJvZ3Jlc3MgPT0gMS4wKTsKLSAgICAgICAgKGRlc3Rp
bmF0aW9uLT4qdGhpcy0+bV9zZXR0ZXIpKHRoaXMtPnZhbHVlKHByb2dyZXNzID8gdG8gOiBmcm9t
KSk7CisgICAgICAgIEFTU0VSVCghY29udGV4dC5wcm9ncmVzcyB8fCBjb250ZXh0LnByb2dyZXNz
ID09IDEuMCk7CisgICAgICAgIChkZXN0aW5hdGlvbi4qdGhpcy0+bV9zZXR0ZXIpKHRoaXMtPnZh
bHVlKGNvbnRleHQucHJvZ3Jlc3MgPyB0byA6IGZyb20pKTsKICAgICB9CiAKICAgICB2b2lkIChS
ZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShUKTsKQEAgLTY5OCw5ICs3MDcsOSBAQCBwdWJsaWM6CiAg
ICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogY2xpZW50LCBSZW5kZXJTdHlsZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0
eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qg
ZmluYWwKKyAgICB2b2lkIGJsZW5kKFJlbmRlclN0eWxlJiBkZXN0aW5hdGlvbiwgY29uc3QgUmVu
ZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bywgY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICAoZGVz
dGluYXRpb24tPip0aGlzLT5tX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgdGhpcy0+dmFsdWUo
ZnJvbSksIHRoaXMtPnZhbHVlKHRvKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgKGRlc3RpbmF0aW9u
Lip0aGlzLT5tX3NldHRlcikoYmxlbmRGdW5jKHRoaXMtPnZhbHVlKGZyb20pLCB0aGlzLT52YWx1
ZSh0byksIGNvbnRleHQpKTsKICAgICB9CiAKICAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0
dGVyKShSZWZQdHI8VD4mJik7CkBAIC03MzksMTUgKzc0OCwxNSBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcm90ZWN0ZWQ6Ci0gICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSog
ZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBvdmVycmlkZQorICAgIGJvb2wgY2Fu
SW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0
bykgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJldHVybiBjYW5JbnRlcnBvbGF0ZUxl
bmd0aHModmFsdWUoZnJvbSksIHZhbHVlKHRvKSwgbV9mbGFncy5jb250YWlucyhGbGFnczo6SXNM
ZW5ndGhQZXJjZW50YWdlKSk7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29u
c3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dy
ZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0
aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3Qgb3ZlcnJpZGUKICAg
ICB7CiAgICAgICAgIGF1dG8gdmFsdWVSYW5nZSA9IG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Ok5l
Z2F0aXZlTGVuZ3Roc0FyZUludmFsaWQpID8gVmFsdWVSYW5nZU5vbk5lZ2F0aXZlIDogVmFsdWVS
YW5nZUFsbDsKLSAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhjbGll
bnQsIHZhbHVlKGZyb20pLCB2YWx1ZSh0byksIHByb2dyZXNzLCB2YWx1ZVJhbmdlKSk7CisgICAg
ICAgIChkZXN0aW5hdGlvbi4qbV9zZXR0ZXIpKGJsZW5kRnVuYyh2YWx1ZShmcm9tKSwgdmFsdWUo
dG8pLCBjb250ZXh0LCB2YWx1ZVJhbmdlKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtNzgwLDkg
Kzc4OSw5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBibGVuZChjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5h
dGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91
YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRl
c3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRv
LCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QgZmluYWwK
ICAgICB7Ci0gICAgICAgIChkZXN0aW5hdGlvbi0+Km1fc2V0dGVyKShibGVuZEZ1bmMoY2xpZW50
LCB2YWx1ZShmcm9tKSwgdmFsdWUodG8pLCBwcm9ncmVzcykpOworICAgICAgICAoZGVzdGluYXRp
b24uKm1fc2V0dGVyKShibGVuZEZ1bmModmFsdWUoZnJvbSksIHZhbHVlKHRvKSwgY29udGV4dCkp
OwogICAgIH0KIAogICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKExlbmd0aFBvaW50
JiYpOwpAQCAtNzk5LDE0ICs4MDgsMTQgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAg
ICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5k
ZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBS
ZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvKSBjb25zdCBmaW5hbAogICAg
IHsKICAgICAgICAgcmV0dXJuIGNhbkludGVycG9sYXRlTGVuZ3RoVmFyaWFudHModGhpcy0+dmFs
dWUoZnJvbSksIHRoaXMtPnZhbHVlKHRvKSk7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5h
dGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91
YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRl
c3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRv
LCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QgZmluYWwK
ICAgICB7Ci0gICAgICAgIChkZXN0aW5hdGlvbi0+Km1fc2V0dGVyKShibGVuZEZ1bmMoY2xpZW50
LCB0aGlzLT52YWx1ZShmcm9tKSwgdGhpcy0+dmFsdWUodG8pLCBwcm9ncmVzcykpOworICAgICAg
ICAoZGVzdGluYXRpb24uKm1fc2V0dGVyKShibGVuZEZ1bmModGhpcy0+dmFsdWUoZnJvbSksIHRo
aXMtPnZhbHVlKHRvKSwgY29udGV4dCkpOwogICAgIH0KIAogICAgIHZvaWQgKFJlbmRlclN0eWxl
OjoqbV9zZXR0ZXIpKFQmJik7CkBAIC04MjgsOSArODM3LDkgQEAgcHVibGljOgogICAgIH0KIAog
cHJpdmF0ZToKLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9t
LCBjb25zdCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCisgICAgYm9vbCBjYW5JbnRlcnBv
bGF0ZShjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvKSBjb25z
dCBmaW5hbAogICAgIHsKLSAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6OlVzZXNG
aWxsS2V5d29yZCkgJiYgZnJvbS0+Ym9yZGVySW1hZ2UoKS5maWxsKCkgIT0gdG8tPmJvcmRlcklt
YWdlKCkuZmlsbCgpKQorICAgICAgICBpZiAobV9mbGFncy5jb250YWlucyhGbGFnczo6VXNlc0Zp
bGxLZXl3b3JkKSAmJiBmcm9tLmJvcmRlckltYWdlKCkuZmlsbCgpICE9IHRvLmJvcmRlckltYWdl
KCkuZmlsbCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGF1dG8mIGZy
b21MZW5ndGhCb3ggPSB2YWx1ZShmcm9tKTsKQEAgLTg0MiwxMiArODUxLDEyIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAmJiBjYW5JbnRlcnBvbGF0ZUxlbmd0aHMoZnJvbUxlbmd0aEJveC5sZWZ0
KCksIHRvTGVuZ3RoQm94LmxlZnQoKSwgaXNMZW5ndGhQZXJjZW50YWdlKTsKICAgICB9CiAKLSAg
ICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVu
ZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVu
ZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25z
dCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250
ZXh0KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxh
Z3M6OlVzZXNGaWxsS2V5d29yZCkpCi0gICAgICAgICAgICBkZXN0aW5hdGlvbi0+c2V0Qm9yZGVy
SW1hZ2VTbGljZUZpbGwoKCFwcm9ncmVzcyB8fCBjYW5JbnRlcnBvbGF0ZShmcm9tLCB0bykgPyBm
cm9tIDogdG8pLT5ib3JkZXJJbWFnZSgpLmZpbGwoKSk7CisgICAgICAgICAgICBkZXN0aW5hdGlv
bi5zZXRCb3JkZXJJbWFnZVNsaWNlRmlsbCgoIWNvbnRleHQucHJvZ3Jlc3MgfHwgIWNvbnRleHQu
aXNEaXNjcmV0ZSA/IGZyb20gOiB0bykuYm9yZGVySW1hZ2UoKS5maWxsKCkpOwogICAgICAgICBh
dXRvIHZhbHVlUmFuZ2UgPSBtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpBbGxvd3NOZWdhdGl2ZVZh
bHVlcykgPyBWYWx1ZVJhbmdlQWxsIDogVmFsdWVSYW5nZU5vbk5lZ2F0aXZlOwotICAgICAgICAo
ZGVzdGluYXRpb24tPiptX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgdmFsdWUoZnJvbSksIHZh
bHVlKHRvKSwgcHJvZ3Jlc3MsIHZhbHVlUmFuZ2UpKTsKKyAgICAgICAgKGRlc3RpbmF0aW9uLipt
X3NldHRlcikoYmxlbmRGdW5jKHZhbHVlKGZyb20pLCB2YWx1ZSh0byksIGNvbnRleHQsIHZhbHVl
UmFuZ2UpKTsKICAgICB9CiAKICAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShMZW5n
dGhCb3gmJik7CkBAIC04NjMsMTQgKzg3MiwxMSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRl
OgotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYikgY29uc3QgZmluYWwKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwg
Y29uc3QgUmVuZGVyU3R5bGUmIGIpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICAvLyBJZiB0
aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRl
c3QuCi0gICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGgg
YXJlIG51bGwsIHJldHVybiB0cnVlLgotICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICBpZiAo
JmEgPT0gJmIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFi
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGF1dG8qIGNsaXBQYXRoQSA9
IHZhbHVlKGEpOwogICAgICAgICBhdXRvKiBjbGlwUGF0aEIgPSB2YWx1ZShiKTsKQEAgLTg5Miwx
OCArODk4LDE1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBlcXVhbHMo
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBmaW5hbAor
ICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25zdCBSZW5kZXJTdHlsZSYg
YikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIC8vIElmIHRoZSBzdHlsZSBwb2ludGVycyBh
cmUgdGhlIHNhbWUsIGRvbid0IGJvdGhlciBkb2luZyB0aGUgdGVzdC4KLSAgICAgICAgLy8gSWYg
ZWl0aGVyIGlzIG51bGwsIHJldHVybiBmYWxzZS4gSWYgYm90aCBhcmUgbnVsbCwgcmV0dXJuIHRy
dWUuCi0gICAgICAgIGlmIChhID09IGIpCisgICAgICAgIGlmICgmYSA9PSAmYikKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB2YWx1ZShhKSA9PSB2YWx1ZShiKTsKICAgICB9CiAK
LSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBS
ZW5kZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25z
dCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvKSBjb25zdCBmaW5hbAog
ICAgIHsKICAgICAgICAgYXV0byBmcm9tVmFyaWF0aW9uU2V0dGluZ3MgPSB2YWx1ZShmcm9tKTsK
ICAgICAgICAgYXV0byB0b1ZhcmlhdGlvblNldHRpbmdzID0gdmFsdWUodG8pOwpAQCAtOTMxLDE0
ICs5MzQsMTEgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIGVxdWFscyhj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IGZpbmFsCisg
ICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUmIGEsIGNvbnN0IFJlbmRlclN0eWxlJiBi
KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50ZXJzIGFy
ZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAgICAvLyBJZiBl
aXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1cm4gdHJ1
ZS4KLSAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgaWYgKCZhID09ICZiKQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICBhdXRvKiBzaGFwZUEgPSB2YWx1ZShhKTsKICAgICAgICAgYXV0
byogc2hhcGVCID0gdmFsdWUoYik7CkBAIC05NDksNyArOTQ5LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgcmV0dXJuICpzaGFwZUEgPT0gKnNoYXBlQjsKICAgICB9CiAKLSAgICBib29sIGNhbkludGVy
cG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8pIGNv
bnN0IGZpbmFsCisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSYgZnJv
bSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgYXV0
byogZnJvbVNoYXBlID0gdmFsdWUoZnJvbSk7CiAgICAgICAgIGF1dG8qIHRvU2hhcGUgPSB2YWx1
ZSh0byk7CkBAIC05NzYsMTkgKzk3NiwxNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YikgY29uc3QgZmluYWwKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwgY29u
c3QgUmVuZGVyU3R5bGUmIGIpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoYSA9PSBi
KQorICAgICAgICBpZiAoJmEgPT0gJmIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgaWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGF1
dG8qIGltYWdlQSA9IHZhbHVlKGEpOwogICAgICAgICBhdXRvKiBpbWFnZUIgPSB2YWx1ZShiKTsK
ICAgICAgICAgcmV0dXJuIGFyZVBvaW50aW5nVG9FcXVhbERhdGEoaW1hZ2VBLCBpbWFnZUIpOwog
ICAgIH0KIAotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20s
IGNvbnN0IFJlbmRlclN0eWxlKiB0bykgY29uc3QgZmluYWwKKyAgICBib29sIGNhbkludGVycG9s
YXRlKGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8pIGNvbnN0
IGZpbmFsCiAgICAgewogICAgICAgICByZXR1cm4gdmFsdWUoZnJvbSkgJiYgdmFsdWUodG8pOwog
ICAgIH0KQEAgLTEwMTksNyArMTAxNyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgYm9vbCBh
bmltYXRpb25Jc0FjY2VsZXJhdGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCi0g
ICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBi
KSBjb25zdCBmaW5hbAorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25z
dCBSZW5kZXJTdHlsZSYgYikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHJldHVybiBhcmVQ
b2ludGluZ1RvRXF1YWxEYXRhKHRoaXMtPnZhbHVlKGEpLCB0aGlzLT52YWx1ZShiKSk7CiAgICAg
fQpAQCAtMTA0Myw5ICsxMDQxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIDsKICAgICB9CiAK
LSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwg
UmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3Qg
UmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBi
bGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBj
b25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBj
b250ZXh0KSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0
ZXIpKGJsZW5kRnVuYyhjbGllbnQsIHZhbHVlKGZyb20pLCB2YWx1ZSh0byksIHByb2dyZXNzLCBw
cm9wZXJ0eSgpKSk7CisgICAgICAgIChkZXN0aW5hdGlvbi4qbV9zZXR0ZXIpKGJsZW5kRnVuYyh2
YWx1ZShmcm9tKSwgdmFsdWUodG8pLCBjb250ZXh0LCBwcm9wZXJ0eSgpKSk7CiAgICAgfQogfTsK
IApAQCAtMTA4NCwxNSArMTA4MiwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAg
IGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikg
Y29uc3QgZmluYWwKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwgY29uc3Qg
UmVuZGVyU3R5bGUmIGIpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoYSA9PSBiKQor
ICAgICAgICBpZiAoJmEgPT0gJmIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
aWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGNvbnN0
IFNoYWRvd0RhdGEqIHNoYWRvd0EgPSAoYS0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBjb25zdCBT
aGFkb3dEYXRhKiBzaGFkb3dCID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAgY29uc3QgU2hh
ZG93RGF0YSogc2hhZG93QSA9IChhLiptX2dldHRlcikoKTsKKyAgICAgICAgY29uc3QgU2hhZG93
RGF0YSogc2hhZG93QiA9IChiLiptX2dldHRlcikoKTsKIAogICAgICAgICB3aGlsZSAodHJ1ZSkg
ewogICAgICAgICAgICAgLy8gZW5kIG9mIGJvdGggbGlzdHMKQEAgLTExMTMsMTAgKzExMDksMTAg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBjYW5J
bnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRv
KSBjb25zdCBmaW5hbAorICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUm
IGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAg
IGNvbnN0IFNoYWRvd0RhdGEqIGZyb21TaGFkb3cgPSAoZnJvbS0+Km1fZ2V0dGVyKSgpOwotICAg
ICAgICBjb25zdCBTaGFkb3dEYXRhKiB0b1NoYWRvdyA9ICh0by0+Km1fZ2V0dGVyKSgpOworICAg
ICAgICBjb25zdCBTaGFkb3dEYXRhKiBmcm9tU2hhZG93ID0gKGZyb20uKm1fZ2V0dGVyKSgpOwor
ICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiB0b1NoYWRvdyA9ICh0by4qbV9nZXR0ZXIpKCk7CiAK
ICAgICAgICAgLy8gVGhlIG9ubHkgc2NlbmFyaW8gd2hlcmUgd2UgY2FuJ3QgaW50ZXJwb2xhdGUg
aXMgaWYgc3BlY2lmaWVkIGl0ZW1zIGRvbid0IGhhdmUgdGhlIHNhbWUgc2hhZG93IHN0eWxlLgog
ICAgICAgICB3aGlsZSAoZnJvbVNoYWRvdyAmJiB0b1NoYWRvdykgewpAQCAtMTEyOSwxNSArMTEy
NSwxNSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB2b2lk
IGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5
bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5
bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5k
ZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5k
ZXJTdHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBj
b25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZnJvbVNoYWRvdyA9
IChmcm9tLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHRvU2hhZG93
ID0gKHRvLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIGZyb21TaGFk
b3cgPSAoZnJvbS4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHRvU2hh
ZG93ID0gKHRvLiptX2dldHRlcikoKTsKIAotICAgICAgICBpZiAoIWNhbkludGVycG9sYXRlKGZy
b20sIHRvKSkgewotICAgICAgICAgICAgQVNTRVJUKCFwcm9ncmVzcyB8fCBwcm9ncmVzcyA9PSAx
LjApOwotICAgICAgICAgICAgYXV0byogc2hhZG93ID0gcHJvZ3Jlc3MgPyB0b1NoYWRvdyA6IGZy
b21TaGFkb3c7Ci0gICAgICAgICAgICAoZGVzdGluYXRpb24tPiptX3NldHRlcikoc2hhZG93ID8g
bWFrZVVuaXF1ZTxTaGFkb3dEYXRhPigqc2hhZG93KSA6IG51bGxwdHIsIGZhbHNlKTsKKyAgICAg
ICAgaWYgKGNvbnRleHQuaXNEaXNjcmV0ZSkgeworICAgICAgICAgICAgQVNTRVJUKCFjb250ZXh0
LnByb2dyZXNzIHx8IGNvbnRleHQucHJvZ3Jlc3MgPT0gMS4wKTsKKyAgICAgICAgICAgIGF1dG8q
IHNoYWRvdyA9IGNvbnRleHQucHJvZ3Jlc3MgPyB0b1NoYWRvdyA6IGZyb21TaGFkb3c7CisgICAg
ICAgICAgICAoZGVzdGluYXRpb24uKm1fc2V0dGVyKShzaGFkb3cgPyBtYWtlVW5pcXVlPFNoYWRv
d0RhdGE+KCpzaGFkb3cpIDogbnVsbHB0ciwgZmFsc2UpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKQEAgLTExNDUsMjIgKzExNDEsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgaW50
IHRvTGVuZ3RoID0gc2hhZG93TGlzdExlbmd0aCh0b1NoYWRvdyk7CiAKICAgICAgICAgaWYgKGZy
b21MZW5ndGggPT0gdG9MZW5ndGggfHwgKGZyb21MZW5ndGggPD0gMSAmJiB0b0xlbmd0aCA8PSAx
KSkgewotICAgICAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0ZXIpKGJsZW5kU2ltcGxlT3JN
YXRjaGVkU2hhZG93TGlzdHMoY2xpZW50LCBwcm9ncmVzcywgZnJvbVNoYWRvdywgdG9TaGFkb3cp
LCBmYWxzZSk7CisgICAgICAgICAgICAoZGVzdGluYXRpb24uKm1fc2V0dGVyKShibGVuZFNpbXBs
ZU9yTWF0Y2hlZFNoYWRvd0xpc3RzKGZyb21TaGFkb3csIHRvU2hhZG93LCBjb250ZXh0KSwgZmFs
c2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgKGRlc3RpbmF0
aW9uLT4qbV9zZXR0ZXIpKGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGNsaWVudCwgcHJvZ3Jl
c3MsIGZyb21TaGFkb3csIHRvU2hhZG93LCBmcm9tTGVuZ3RoLCB0b0xlbmd0aCksIGZhbHNlKTsK
KyAgICAgICAgKGRlc3RpbmF0aW9uLiptX3NldHRlcikoYmxlbmRNaXNtYXRjaGVkU2hhZG93TGlz
dHMoZnJvbVNoYWRvdywgdG9TaGFkb3csIGZyb21MZW5ndGgsIHRvTGVuZ3RoLCBjb250ZXh0KSwg
ZmFsc2UpOwogICAgIH0KIAogI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSos
IGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJl
bmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGRvdWJs
ZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBiZXR0ZXIg
bG9nZ2luZy4KICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAi
ICBibGVuZGluZyBTaGFkb3dEYXRhIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVz
cGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7CiAgICAgfQogI2VuZGlmCiAKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRTaW1wbGVPck1hdGNoZWRTaGFkb3dMaXN0cyhjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIGRvdWJsZSBwcm9ncmVzcywgY29u
c3QgU2hhZG93RGF0YSogc2hhZG93QSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QikgY29uc3QK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRTaW1wbGVPck1hdGNoZWRTaGFk
b3dMaXN0cyhjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFk
b3dCLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBuZXdTaGFkb3dEYXRhOwog
ICAgICAgICBTaGFkb3dEYXRhKiBsYXN0U2hhZG93ID0gMDsKQEAgLTExNjksNyArMTE2NSw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFkb3cgPSBzaGFk
b3dGb3JCbGVuZGluZyhzaGFkb3dBLCBzaGFkb3dCKTsKICAgICAgICAgICAgIGNvbnN0IFNoYWRv
d0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0IsIHNoYWRvd0EpOwog
Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRlZFNoYWRvdyA9
IGJsZW5kRnVuYyhjbGllbnQsIHNyY1NoYWRvdywgZHN0U2hhZG93LCBwcm9ncmVzcyk7CisgICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRlZFNoYWRvdyA9IGJsZW5k
RnVuYyhzcmNTaGFkb3csIGRzdFNoYWRvdywgY29udGV4dCk7CiAgICAgICAgICAgICBTaGFkb3dE
YXRhKiBibGVuZGVkU2hhZG93UHRyID0gYmxlbmRlZFNoYWRvdy5nZXQoKTsKIAogICAgICAgICAg
ICAgaWYgKCFsYXN0U2hhZG93KQpAQCAtMTE4Niw3ICsxMTgyLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgcmV0dXJuIG5ld1NoYWRvd0RhdGE7CiAgICAgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNo
YWRvd0RhdGE+IGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGNvbnN0IENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQqIGNsaWVudCwgZG91YmxlIHByb2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBz
aGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dCLCBpbnQgZnJvbUxlbmd0aCwgaW50IHRv
TGVuZ3RoKSBjb25zdAorICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZE1pc21h
dGNoZWRTaGFkb3dMaXN0cyhjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dE
YXRhKiBzaGFkb3dCLCBpbnQgZnJvbUxlbmd0aCwgaW50IHRvTGVuZ3RoLCBjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICB7CiAgICAgICAgIC8vIFRo
ZSBzaGFkb3dzIGluIFNoYWRvd0RhdGEgYXJlIHN0b3JlZCBpbiByZXZlcnNlIG9yZGVyLCBzbyB3
aGVuIGFuaW1hdGluZyBtaXNtYXRjaGVkIGxpc3RzLAogICAgICAgICAvLyByZXZlcnNlIHRoZW0g
YW5kIG1hdGNoIGZyb20gdGhlIGVuZC4KQEAgLTEyMTIsNyArMTIwOCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFkb3cgPSBzaGFkb3dGb3JCbGVuZGlu
Zyhmcm9tU2hhZG93LCB0b1NoYWRvdyk7CiAgICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBk
c3RTaGFkb3cgPSBzaGFkb3dGb3JCbGVuZGluZyh0b1NoYWRvdywgZnJvbVNoYWRvdyk7CiAKLSAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxl
bmRGdW5jKGNsaWVudCwgc3JjU2hhZG93LCBkc3RTaGFkb3csIHByb2dyZXNzKTsKKyAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxlbmRGdW5j
KHNyY1NoYWRvdywgZHN0U2hhZG93LCBjb250ZXh0KTsKICAgICAgICAgICAgIC8vIEluc2VydCBh
dCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QgdG8gcHJlc2VydmUgdGhlIG9yZGVyLgogICAgICAgICAg
ICAgYmxlbmRlZFNoYWRvdy0+c2V0TmV4dChXVEZNb3ZlKG5ld1NoYWRvd0RhdGEpKTsKICAgICAg
ICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZNb3ZlKGJsZW5kZWRTaGFkb3cpOwpAQCAtMTIzNiwx
MiArMTIzMiwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIGJvb2wgZXF1YWxz
KGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QgZmluYWwK
KyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwgY29uc3QgUmVuZGVyU3R5bGUm
IGIpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICBpZiAo
JmEgPT0gJmIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFi
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIENvbG9yIGZyb21Db2xvciA9
IHZhbHVlKGEpOwogICAgICAgICBDb2xvciB0b0NvbG9yID0gdmFsdWUoYik7CkBAIC0xMjUwLDE0
ICsxMjQ0LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAg
ICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBmcm9tQ29sb3IgPSBhLT5j
b2xvcigpOworICAgICAgICAgICAgZnJvbUNvbG9yID0gYS5jb2xvcigpOwogICAgICAgICBpZiAo
IXRvQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgdG9Db2xvciA9IGItPmNvbG9yKCk7Cisg
ICAgICAgICAgICB0b0NvbG9yID0gYi5jb2xvcigpOwogCiAgICAgICAgIHJldHVybiBmcm9tQ29s
b3IgPT0gdG9Db2xvcjsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBS
ZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNv
bnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAg
ICAgQ29sb3IgZnJvbUNvbG9yID0gdmFsdWUoZnJvbSk7CiAgICAgICAgIENvbG9yIHRvQ29sb3Ig
PSB2YWx1ZSh0byk7CkBAIC0xMjY2LDIyICsxMjYwLDIyIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAg
ICAgZnJvbUNvbG9yID0gZnJvbS0+Y29sb3IoKTsKKyAgICAgICAgICAgIGZyb21Db2xvciA9IGZy
b20uY29sb3IoKTsKICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAg
IHRvQ29sb3IgPSB0by0+Y29sb3IoKTsKLSAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0ZXIp
KGJsZW5kRnVuYyhjbGllbnQsIGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKKyAgICAg
ICAgICAgIHRvQ29sb3IgPSB0by5jb2xvcigpOworICAgICAgICAoZGVzdGluYXRpb24uKm1fc2V0
dGVyKShibGVuZEZ1bmMoZnJvbUNvbG9yLCB0b0NvbG9yLCBjb250ZXh0KSk7CiAgICAgfQogCi0g
ICAgQ29sb3IgdmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorICAgIENvbG9y
IHZhbHVlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiAoc3R5bGUtPiptX2dldHRlcikoKTsKKyAgICAgICAgcmV0dXJuIChzdHlsZS4qbV9nZXR0
ZXIpKCk7CiAgICAgfQogCiAjaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29u
c3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgY29uc3QgUmVuZGVy
U3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgbG9n
QmxlbmQoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bywgY29u
c3QgUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFs
CiAgICAgewogICAgICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcuCi0gICAgICAgIExPR19X
SVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9w
ZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoZnJvbSkgPDwgIiB0byAi
IDw8IHZhbHVlKHRvKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVj
dGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAg
ICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8
PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoZnJvbSkg
PDwgIiB0byAiIDw8IHZhbHVlKHRvKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVt
YmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUoZGVzdGlu
YXRpb24pKTsKICAgICB9CiAjZW5kaWYKIApAQCAtMTMwOCwxNSArMTMwMiwxNSBAQCBwdWJsaWM6
CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIGJvb2wgZXF1YWxz
KGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25zdCBSZW5kZXJTdHlsZSYgYikgY29uc3Qgb3ZlcnJp
ZGUKICAgICB7CiAgICAgICAgIHJldHVybiBtX3dyYXBwZXItPmVxdWFscyhhLCBiKSAmJiBtX3Zp
c2l0ZWRXcmFwcGVyLT5lcXVhbHMoYSwgYik7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5h
dGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91
YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUm
IGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUm
IHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3Qgb3Zl
cnJpZGUKICAgICB7Ci0gICAgICAgIG1fd3JhcHBlci0+YmxlbmQoY2xpZW50LCBkZXN0aW5hdGlv
biwgZnJvbSwgdG8sIHByb2dyZXNzKTsKLSAgICAgICAgbV92aXNpdGVkV3JhcHBlci0+YmxlbmQo
Y2xpZW50LCBkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAgICAgICAgbV93cmFw
cGVyLT5ibGVuZChkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIGNvbnRleHQpOworICAgICAgICBtX3Zp
c2l0ZWRXcmFwcGVyLT5ibGVuZChkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIGNvbnRleHQpOwogICAg
IH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPiBt
X3dyYXBwZXI7CkBAIC0xMzI0LDE5ICsxMzE4LDE5IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToK
ICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSog
ZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBk
b3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5k
ZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBSZW5kZXJTdHlsZSYg
ZGVzdGluYXRpb24sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAg
IG1fd3JhcHBlci0+bG9nQmxlbmQoZnJvbSwgdG8sIHJlc3VsdCwgcHJvZ3Jlc3MpOwotICAgICAg
ICBtX3Zpc2l0ZWRXcmFwcGVyLT5sb2dCbGVuZChmcm9tLCB0bywgcmVzdWx0LCBwcm9ncmVzcyk7
CisgICAgICAgIG1fd3JhcHBlci0+bG9nQmxlbmQoZnJvbSwgdG8sIGRlc3RpbmF0aW9uLCBwcm9n
cmVzcyk7CisgICAgICAgIG1fdmlzaXRlZFdyYXBwZXItPmxvZ0JsZW5kKGZyb20sIHRvLCBkZXN0
aW5hdGlvbiwgcHJvZ3Jlc3MpOwogICAgIH0KICNlbmRpZgogfTsKIAotc3RhdGljIGJvb2wgY2Fu
SW50ZXJwb2xhdGVDYXJldENvbG9yKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5k
ZXJTdHlsZSogdG8sIGJvb2wgdmlzaXRlZCkKK3N0YXRpYyBib29sIGNhbkludGVycG9sYXRlQ2Fy
ZXRDb2xvcihjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBi
b29sIHZpc2l0ZWQpCiB7CiAgICAgaWYgKHZpc2l0ZWQpCi0gICAgICAgIHJldHVybiAhZnJvbS0+
aGFzVmlzaXRlZExpbmtBdXRvQ2FyZXRDb2xvcigpICYmICF0by0+aGFzVmlzaXRlZExpbmtBdXRv
Q2FyZXRDb2xvcigpOwotICAgIHJldHVybiAhZnJvbS0+aGFzQXV0b0NhcmV0Q29sb3IoKSAmJiAh
dG8tPmhhc0F1dG9DYXJldENvbG9yKCk7CisgICAgICAgIHJldHVybiAhZnJvbS5oYXNWaXNpdGVk
TGlua0F1dG9DYXJldENvbG9yKCkgJiYgIXRvLmhhc1Zpc2l0ZWRMaW5rQXV0b0NhcmV0Q29sb3Io
KTsKKyAgICByZXR1cm4gIWZyb20uaGFzQXV0b0NhcmV0Q29sb3IoKSAmJiAhdG8uaGFzQXV0b0Nh
cmV0Q29sb3IoKTsKIH0KIAogY2xhc3MgQ2FyZXRDb2xvclByb3BlcnR5V3JhcHBlciBmaW5hbCA6
IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvciB7CkBAIC0xMzQ4LDM4
ICsxMzQyLDM4IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBlcXVhbHMo
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBmaW5hbAor
ICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25zdCBSZW5kZXJTdHlsZSYg
YikgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIHJldHVybiBhLT5oYXNBdXRvQ2FyZXRDb2xv
cigpID09IGItPmhhc0F1dG9DYXJldENvbG9yKCkKLSAgICAgICAgICAgICYmIGEtPmhhc1Zpc2l0
ZWRMaW5rQXV0b0NhcmV0Q29sb3IoKSA9PSBiLT5oYXNWaXNpdGVkTGlua0F1dG9DYXJldENvbG9y
KCkKKyAgICAgICAgcmV0dXJuIGEuaGFzQXV0b0NhcmV0Q29sb3IoKSA9PSBiLmhhc0F1dG9DYXJl
dENvbG9yKCkKKyAgICAgICAgICAgICYmIGEuaGFzVmlzaXRlZExpbmtBdXRvQ2FyZXRDb2xvcigp
ID09IGIuaGFzVmlzaXRlZExpbmtBdXRvQ2FyZXRDb2xvcigpCiAgICAgICAgICAgICAmJiBQcm9w
ZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcjo6ZXF1YWxzKGEsIGIpOwogICAgIH0KIAot
ICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJl
bmRlclN0eWxlKiB0bykgY29uc3QgZmluYWwKKyAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0
IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8pIGNvbnN0IGZpbmFsCiAg
ICAgewogICAgICAgICByZXR1cm4gY2FuSW50ZXJwb2xhdGVDYXJldENvbG9yKGZyb20sIHRvLCBm
YWxzZSkgfHwgY2FuSW50ZXJwb2xhdGVDYXJldENvbG9yKGZyb20sIHRvLCB0cnVlKTsKICAgICB9
CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVu
dCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29u
c3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9p
ZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9t
LCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0
JiBjb250ZXh0KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgaWYgKGNhbkludGVycG9sYXRl
Q2FyZXRDb2xvcihmcm9tLCB0bywgZmFsc2UpKQotICAgICAgICAgICAgbV93cmFwcGVyLT5ibGVu
ZChjbGllbnQsIGRlc3RpbmF0aW9uLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOworICAgICAgICAgICAg
bV93cmFwcGVyLT5ibGVuZChkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIGNvbnRleHQpOwogICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8qIGJsZW5kaW5nUmVuZGVyU3R5bGUgPSBwcm9ncmVz
cyA8IDAuNSA/IGZyb20gOiB0bzsKLSAgICAgICAgICAgIGlmIChibGVuZGluZ1JlbmRlclN0eWxl
LT5oYXNBdXRvQ2FyZXRDb2xvcigpKQotICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLT5zZXRI
YXNBdXRvQ2FyZXRDb2xvcigpOworICAgICAgICAgICAgYXV0byYgYmxlbmRpbmdSZW5kZXJTdHls
ZSA9IGNvbnRleHQucHJvZ3Jlc3MgPCAwLjUgPyBmcm9tIDogdG87CisgICAgICAgICAgICBpZiAo
YmxlbmRpbmdSZW5kZXJTdHlsZS5oYXNBdXRvQ2FyZXRDb2xvcigpKQorICAgICAgICAgICAgICAg
IGRlc3RpbmF0aW9uLnNldEhhc0F1dG9DYXJldENvbG9yKCk7CiAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZGVzdGluYXRpb24tPnNldENhcmV0Q29sb3IoYmxlbmRpbmdSZW5kZXJT
dHlsZS0+Y2FyZXRDb2xvcigpKTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5zZXRDYXJl
dENvbG9yKGJsZW5kaW5nUmVuZGVyU3R5bGUuY2FyZXRDb2xvcigpKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGlmIChjYW5JbnRlcnBvbGF0ZUNhcmV0Q29sb3IoZnJvbSwgdG8sIHRydWUpKQotICAg
ICAgICAgICAgbV92aXNpdGVkV3JhcHBlci0+YmxlbmQoY2xpZW50LCBkZXN0aW5hdGlvbiwgZnJv
bSwgdG8sIHByb2dyZXNzKTsKKyAgICAgICAgICAgIG1fdmlzaXRlZFdyYXBwZXItPmJsZW5kKGRl
c3RpbmF0aW9uLCBmcm9tLCB0bywgY29udGV4dCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgYXV0byogYmxlbmRpbmdSZW5kZXJTdHlsZSA9IHByb2dyZXNzIDwgMC41ID8gZnJvbSA6IHRv
OwotICAgICAgICAgICAgaWYgKGJsZW5kaW5nUmVuZGVyU3R5bGUtPmhhc1Zpc2l0ZWRMaW5rQXV0
b0NhcmV0Q29sb3IoKSkKLSAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi0+c2V0SGFzVmlzaXRl
ZExpbmtBdXRvQ2FyZXRDb2xvcigpOworICAgICAgICAgICAgYXV0byYgYmxlbmRpbmdSZW5kZXJT
dHlsZSA9IGNvbnRleHQucHJvZ3Jlc3MgPCAwLjUgPyBmcm9tIDogdG87CisgICAgICAgICAgICBp
ZiAoYmxlbmRpbmdSZW5kZXJTdHlsZS5oYXNWaXNpdGVkTGlua0F1dG9DYXJldENvbG9yKCkpCisg
ICAgICAgICAgICAgICAgZGVzdGluYXRpb24uc2V0SGFzVmlzaXRlZExpbmtBdXRvQ2FyZXRDb2xv
cigpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLT5zZXRW
aXNpdGVkTGlua0NhcmV0Q29sb3IoYmxlbmRpbmdSZW5kZXJTdHlsZS0+dmlzaXRlZExpbmtDYXJl
dENvbG9yKCkpOworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLnNldFZpc2l0ZWRMaW5rQ2Fy
ZXRDb2xvcihibGVuZGluZ1JlbmRlclN0eWxlLnZpc2l0ZWRMaW5rQ2FyZXRDb2xvcigpKTsKICAg
ICAgICAgfQogICAgIH0KIH07CkBAIC0xMzk3LDExICsxMzkxLDExIEBAIHB1YmxpYzoKICAgICBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eTsgfQogCiAg
ICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5ZXIq
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQqLCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5
ZXIqLCBkb3VibGUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoRmlsbExheWVy
KiwgY29uc3QgRmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKiwgY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NvbnRleHQmKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGNhbkludGVycG9s
YXRlKGNvbnN0IEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXllciopIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIAogI2lmICFMT0dfRElTQUJMRUQKLSAgICB2aXJ0dWFsIHZvaWQgbG9nQmxlbmQoY29u
c3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXllcios
IGRvdWJsZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxs
TGF5ZXIqIGRlc3RpbmF0aW9uLCBjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5ZXIqLCBk
b3VibGUpIGNvbnN0ID0gMDsKICNlbmRpZgogCiBwcml2YXRlOgpAQCAtMTQzNSw5ICsxNDI5LDkg
QEAgcHJvdGVjdGVkOgogICAgIH0KIAogI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0Js
ZW5kKGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0
IEZpbGxMYXllciogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB2b2lk
IGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciogZGVzdGluYXRpb24sIGNvbnN0IEZpbGxMYXllciog
ZnJvbSwgY29uc3QgRmlsbExheWVyKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlk
ZQogICAgIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAi
ICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAiIGZyb20gIiA8
PCB2YWx1ZShmcm9tKSA8PCAiIHRvICIgPDwgdmFsdWUodG8pIDw8ICIgYXQgIiA8PCBUZXh0U3Ry
ZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8
PCB2YWx1ZShyZXN1bHQpKTsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0
cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAi
IGZyb20gIiA8PCB2YWx1ZShmcm9tKSA8PCAiIHRvICIgPDwgdmFsdWUodG8pIDw8ICIgYXQgIiA8
PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8
ICIgLT4gIiA8PCB2YWx1ZShkZXN0aW5hdGlvbikpOwogICAgIH0KICNlbmRpZgogCkBAIC0xNDU2
LDkgKzE0NTAsOSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgYmxlbmQo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBGaWxsTGF5ZXIqIGRlc3Rp
bmF0aW9uLCBjb25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0IEZpbGxMYXllciogdG8sIGRvdWJs
ZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGJsZW5kKEZpbGxMYXllciogZGVzdGlu
YXRpb24sIGNvbnN0IEZpbGxMYXllciogZnJvbSwgY29uc3QgRmlsbExheWVyKiB0bywgY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0IGZpbmFsCiAgICAgewot
ICAgICAgICAoZGVzdGluYXRpb24tPip0aGlzLT5tX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwg
dGhpcy0+dmFsdWUoZnJvbSksIHRoaXMtPnZhbHVlKHRvKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAg
KGRlc3RpbmF0aW9uLT4qdGhpcy0+bV9zZXR0ZXIpKGJsZW5kRnVuYyh0aGlzLT52YWx1ZShmcm9t
KSwgdGhpcy0+dmFsdWUodG8pLCBjb250ZXh0KSk7CiAgICAgfQogCiAgICAgYm9vbCBjYW5JbnRl
cnBvbGF0ZShjb25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0IEZpbGxMYXllciogdG8pIGNvbnN0
IGZpbmFsCkBAIC0xNDY3LDEyICsxNDYxLDEyIEBAIHByaXZhdGU6CiAgICAgfQogCiAjaWYgIUxP
R19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNv
bnN0IEZpbGxMYXllciogZnJvbSwgY29uc3QgRmlsbExheWVyKiB0bywgZG91YmxlIHByb2dyZXNz
KSBjb25zdCBmaW5hbAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiBkZXN0aW5h
dGlvbiwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25zdCBGaWxsTGF5ZXIqIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5p
bWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKEZpbGxM
YXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnByb3BlcnR5KCkpCiAgICAgICAg
ICAgICA8PCAiIGZyb20gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3Qg
VCY+Ojp2YWx1ZShmcm9tKQogICAgICAgICAgICAgPDwgIiB0byAiIDw8IEZpbGxMYXllclByb3Bl
cnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnZhbHVlKHRvKQotICAgICAgICAgICAgPDwgIiBh
dCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVz
cykgPDwgIiAtPiAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46
OnZhbHVlKHJlc3VsdCkpOworICAgICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZv
cm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxM
YXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnZhbHVlKGRlc3RpbmF0aW9uKSk7
CiAgICAgfQogI2VuZGlmCiAKQEAgLTE1MDgsNyArMTUwMiw3IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBmcm9tTGVuZ3RoID09IHRvTGVuZ3RoICYmIGZyb21FZGdlID09IHRvRWRnZTsKICAg
ICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNs
aWVudCwgRmlsbExheWVyKiBkZXN0aW5hdGlvbiwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25z
dCBGaWxsTGF5ZXIqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBi
bGVuZChGaWxsTGF5ZXIqIGRlc3RpbmF0aW9uLCBjb25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0
IEZpbGxMYXllciogdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0
KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgYXV0byBmcm9tTGVuZ3RoID0gdmFsdWUoZnJv
bSk7CiAgICAgICAgIGF1dG8gdG9MZW5ndGggPSB2YWx1ZSh0byk7CkBAIC0xNTI2LDEzICsxNTIw
LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICAoZGVz
dGluYXRpb24tPiptX2xlbmd0aFNldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgZnJvbUxlbmd0aCwg
dG9MZW5ndGgsIHByb2dyZXNzKSk7CisgICAgICAgIChkZXN0aW5hdGlvbi0+Km1fbGVuZ3RoU2V0
dGVyKShibGVuZEZ1bmMoZnJvbUxlbmd0aCwgdG9MZW5ndGgsIGNvbnRleHQpKTsKICAgICB9CiAK
ICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJl
c3VsdCwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25zdCBGaWxsTGF5ZXIqIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIq
IGRlc3RpbmF0aW9uLCBjb25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0IEZpbGxMYXllciogdG8s
IGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIExPR19XSVRIX1NU
UkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5h
bWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoZnJvbSkgPDwgIiB0byAiIDw8IHZh
bHVlKHRvKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0lu
dGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgICAgIExP
R19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQ
cm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoZnJvbSkgPDwgIiB0
byAiIDw8IHZhbHVlKHRvKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVz
cGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUoZGVzdGluYXRpb24p
KTsKICAgICB9CiAjZW5kaWYKIApAQCAtMTU1MywxOCArMTU0NywxOCBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogY2xpZW50LCBGaWxsTGF5ZXIqIGRlc3RpbmF0aW9uLCBjb25zdCBGaWxsTGF5ZXIqIGZy
b20sIGNvbnN0IEZpbGxMYXllciogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAg
ICB2b2lkIGJsZW5kKEZpbGxMYXllciogZGVzdGluYXRpb24sIGNvbnN0IEZpbGxMYXllciogZnJv
bSwgY29uc3QgRmlsbExheWVyKiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICAoZGVzdGluYXRpb24tPip0aGlz
LT5tX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgdGhpcy0+dmFsdWUoZnJvbSksIHRoaXMtPnZh
bHVlKHRvKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgKGRlc3RpbmF0aW9uLT4qdGhpcy0+bV9zZXR0
ZXIpKGJsZW5kRnVuYyh0aGlzLT52YWx1ZShmcm9tKSwgdGhpcy0+dmFsdWUodG8pLCBjb250ZXh0
KSk7CiAgICAgfQogCiAjaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3Qg
RmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogZnJvbSwgY29uc3QgRmlsbExheWVy
KiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHZvaWQgbG9nQmxlbmQo
Y29uc3QgRmlsbExheWVyKiBkZXN0aW5hdGlvbiwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25z
dCBGaWxsTGF5ZXIqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCiAgICAgewog
ICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5n
ICIgPDwgZ2V0UHJvcGVydHlOYW1lKEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46
OnByb3BlcnR5KCkpCiAgICAgICAgICAgICA8PCAiIGZyb20gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8VCo+Ojp2YWx1ZShmcm9tKQogICAgICAgICAgICAgPDwgIiB0byAiIDw8
IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKHRvKQotICAgICAgICAg
ICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vy
cyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxU
Kj46OnZhbHVlKHJlc3VsdCkpOworICAgICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06
OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZp
bGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKGRlc3RpbmF0aW9uKSk7CiAg
ICAgfQogI2VuZGlmCiAKQEAgLTE1OTUsOSArMTU4OSw5IEBAIHByaXZhdGU6CiAgICAgfQogCiAj
aWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1
bHQsIGNvbnN0IEZpbGxMYXllciogZnJvbSwgY29uc3QgRmlsbExheWVyKiB0bywgZG91YmxlIHBy
b2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiBk
ZXN0aW5hdGlvbiwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25zdCBGaWxsTGF5ZXIqIHRvLCBk
b3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBMT0dfV0lUSF9TVFJF
QU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1l
KHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGZyb20pIDw8ICIgdG8gIiA8PCB2YWx1
ZSh0bykgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRl
Z2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOworICAgICAgICBMT0df
V0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJv
cGVydHlOYW1lKHRoaXMtPnByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHRoaXMtPnZhbHVlKGZy
b20pIDw8ICIgdG8gIiA8PCB0aGlzLT52YWx1ZSh0bykgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06
OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IHZh
bHVlKGRlc3RpbmF0aW9uKSk7CiAgICAgfQogI2VuZGlmCiB9OwpAQCAtMTYzNiwxNSArMTYzMCwx
MyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QgZmluYWwKKyAgICBib29s
IGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwgY29uc3QgUmVuZGVyU3R5bGUmIGIpIGNvbnN0
IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICBpZiAoJmEgPT0gJmIp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFiKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGF1dG8qIGZyb21MYXllciA9ICYoYS0+Km1f
bGF5ZXJzR2V0dGVyKSgpOwotICAgICAgICBhdXRvKiB0b0xheWVyID0gJihiLT4qbV9sYXllcnNH
ZXR0ZXIpKCk7CisgICAgICAgIGF1dG8qIGZyb21MYXllciA9ICYoYS4qbV9sYXllcnNHZXR0ZXIp
KCk7CisgICAgICAgIGF1dG8qIHRvTGF5ZXIgPSAmKGIuKm1fbGF5ZXJzR2V0dGVyKSgpOwogCiAg
ICAgICAgIHdoaWxlIChmcm9tTGF5ZXIgJiYgdG9MYXllcikgewogICAgICAgICAgICAgaWYgKCFt
X2ZpbGxMYXllclByb3BlcnR5V3JhcHBlci0+ZXF1YWxzKGZyb21MYXllciwgdG9MYXllcikpCkBA
IC0xNjU3LDEwICsxNjQ5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNv
bnN0IFJlbmRlclN0eWxlKiB0bykgY29uc3QgZmluYWwKKyAgICBib29sIGNhbkludGVycG9sYXRl
KGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8pIGNvbnN0IGZp
bmFsCiAgICAgewotICAgICAgICBhdXRvKiBmcm9tTGF5ZXIgPSAmKGZyb20tPiptX2xheWVyc0dl
dHRlcikoKTsKLSAgICAgICAgYXV0byogdG9MYXllciA9ICYodG8tPiptX2xheWVyc0dldHRlciko
KTsKKyAgICAgICAgYXV0byogZnJvbUxheWVyID0gJihmcm9tLiptX2xheWVyc0dldHRlcikoKTsK
KyAgICAgICAgYXV0byogdG9MYXllciA9ICYodG8uKm1fbGF5ZXJzR2V0dGVyKSgpOwogCiAgICAg
ICAgIHdoaWxlIChmcm9tTGF5ZXIgJiYgdG9MYXllcikgewogICAgICAgICAgICAgaWYgKGZyb21M
YXllci0+c2l6ZVR5cGUoKSAhPSB0b0xheWVyLT5zaXplVHlwZSgpKQpAQCAtMTY3NiwxNSArMTY2
OCwxNSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB2b2lk
IGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5
bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5
bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5k
ZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5k
ZXJTdHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBj
b25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgYXV0byogZnJvbUxheWVyID0gJihmcm9tLT4qbV9s
YXllcnNHZXR0ZXIpKCk7Ci0gICAgICAgIGF1dG8qIHRvTGF5ZXIgPSAmKHRvLT4qbV9sYXllcnNH
ZXR0ZXIpKCk7Ci0gICAgICAgIGF1dG8qIGRzdExheWVyID0gJihkZXN0aW5hdGlvbi0+Km1fbGF5
ZXJzQWNjZXNzb3IpKCk7CisgICAgICAgIGF1dG8qIGZyb21MYXllciA9ICYoZnJvbS4qbV9sYXll
cnNHZXR0ZXIpKCk7CisgICAgICAgIGF1dG8qIHRvTGF5ZXIgPSAmKHRvLiptX2xheWVyc0dldHRl
cikoKTsKKyAgICAgICAgYXV0byogZHN0TGF5ZXIgPSAmKGRlc3RpbmF0aW9uLiptX2xheWVyc0Fj
Y2Vzc29yKSgpOwogCiAgICAgICAgIHdoaWxlIChmcm9tTGF5ZXIgJiYgdG9MYXllciAmJiBkc3RM
YXllcikgewotICAgICAgICAgICAgZHN0TGF5ZXItPnNldFNpemVUeXBlKChwcm9ncmVzcyA/IHRv
TGF5ZXIgOiBmcm9tTGF5ZXIpLT5zaXplVHlwZSgpKTsKLSAgICAgICAgICAgIG1fZmlsbExheWVy
UHJvcGVydHlXcmFwcGVyLT5ibGVuZChjbGllbnQsIGRzdExheWVyLCBmcm9tTGF5ZXIsIHRvTGF5
ZXIsIHByb2dyZXNzKTsKKyAgICAgICAgICAgIGRzdExheWVyLT5zZXRTaXplVHlwZSgoY29udGV4
dC5wcm9ncmVzcyA/IHRvTGF5ZXIgOiBmcm9tTGF5ZXIpLT5zaXplVHlwZSgpKTsKKyAgICAgICAg
ICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5ibGVuZChkc3RMYXllciwgZnJvbUxheWVy
LCB0b0xheWVyLCBjb250ZXh0KTsKICAgICAgICAgICAgIGZyb21MYXllciA9IGZyb21MYXllci0+
bmV4dCgpOwogICAgICAgICAgICAgdG9MYXllciA9IHRvTGF5ZXItPm5leHQoKTsKICAgICAgICAg
ICAgIGRzdExheWVyID0gZHN0TGF5ZXItPm5leHQoKTsKQEAgLTE2OTIsMTEgKzE2ODQsMTEgQEAg
cHJpdmF0ZToKICAgICB9CiAKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChj
b25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBjb25zdCBSZW5k
ZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBs
b2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBj
b25zdCBSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmlu
YWwKICAgICB7Ci0gICAgICAgIGF1dG8qIGZyb21MYXllciA9ICYoZnJvbS0+Km1fbGF5ZXJzR2V0
dGVyKSgpOwotICAgICAgICBhdXRvKiB0b0xheWVyID0gJih0by0+Km1fbGF5ZXJzR2V0dGVyKSgp
OwotICAgICAgICBhdXRvKiBkc3RMYXllciA9ICYocmVzdWx0LT4qbV9sYXllcnNHZXR0ZXIpKCk7
CisgICAgICAgIGF1dG8qIGZyb21MYXllciA9ICYoZnJvbS4qbV9sYXllcnNHZXR0ZXIpKCk7Cisg
ICAgICAgIGF1dG8qIHRvTGF5ZXIgPSAmKHRvLiptX2xheWVyc0dldHRlcikoKTsKKyAgICAgICAg
YXV0byogZHN0TGF5ZXIgPSAmKGRlc3RpbmF0aW9uLiptX2xheWVyc0dldHRlcikoKTsKIAogICAg
ICAgICB3aGlsZSAoZnJvbUxheWVyICYmIHRvTGF5ZXIgJiYgZHN0TGF5ZXIpIHsKICAgICAgICAg
ICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5sb2dCbGVuZChkc3RMYXllciwgZnJvbUxh
eWVyLCB0b0xheWVyLCBwcm9ncmVzcyk7CkBAIC0xNzI2LDEyICsxNzE4LDEwIEBAIHB1YmxpYzoK
ICAgICBjb25zdCBWZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+JiBwcm9wZXJ0
eVdyYXBwZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzOyB9CiAKIHByaXZh
dGU6Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiKSBjb25zdCBmaW5hbAorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlJiBh
LCBjb25zdCBSZW5kZXJTdHlsZSYgYikgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIGlmIChh
ID09IGIpCisgICAgICAgIGlmICgmYSA9PSAmYikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgZm9yIChhdXRvJiB3cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKSB7CiAgICAgICAgICAg
ICBpZiAoIXdyYXBwZXItPmVxdWFscyhhLCBiKSkKQEAgLTE3NDAsMTQgKzE3MzAsMTQgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5h
dGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91
YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRl
c3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRv
LCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QgZmluYWwK
ICAgICB7CiAgICAgICAgIGZvciAoYXV0byYgd3JhcHBlciA6IG1fcHJvcGVydHlXcmFwcGVycykK
LSAgICAgICAgICAgIHdyYXBwZXItPmJsZW5kKGNsaWVudCwgZGVzdGluYXRpb24sIGZyb20sIHRv
LCBwcm9ncmVzcyk7CisgICAgICAgICAgICB3cmFwcGVyLT5ibGVuZChkZXN0aW5hdGlvbiwgZnJv
bSwgdG8sIGNvbnRleHQpOwogICAgIH0KIAogI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxv
Z0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8sIGNv
bnN0IFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5h
bAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRl
clN0eWxlJiB0bywgY29uc3QgUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBmb3IgKGF1dG8mIHdyYXBwZXIgOiBtX3By
b3BlcnR5V3JhcHBlcnMpCiAgICAgICAgICAgICB3cmFwcGVyLT5sb2dCbGVuZChmcm9tLCB0bywg
ZGVzdGluYXRpb24sIHByb2dyZXNzKTsKQEAgLTE3NjYsMzAgKzE3NTYsMjggQEAgcHVibGljOgog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IGZpbmFsCisgICAgYm9vbCBlcXVhbHMoY29uc3Qg
UmVuZGVyU3R5bGUmIGEsIGNvbnN0IFJlbmRlclN0eWxlJiBiKSBjb25zdCBmaW5hbAogICAgIHsK
LSAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgaWYgKCZhID09ICZiKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgICAgICByZXR1cm4gYS0+ZmxleEJhc2lzKCkgPT0gYi0+ZmxleEJhc2lzKCkg
JiYgYS0+ZmxleEdyb3coKSA9PSBiLT5mbGV4R3JvdygpICYmIGEtPmZsZXhTaHJpbmsoKSA9PSBi
LT5mbGV4U2hyaW5rKCk7CisgICAgICAgIHJldHVybiBhLmZsZXhCYXNpcygpID09IGIuZmxleEJh
c2lzKCkgJiYgYS5mbGV4R3JvdygpID09IGIuZmxleEdyb3coKSAmJiBhLmZsZXhTaHJpbmsoKSA9
PSBiLmZsZXhTaHJpbmsoKTsKICAgICB9CiAKLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0
IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCisg
ICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVu
ZGVyU3R5bGUmIHRvKSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgcmV0dXJuIGZyb20tPmZs
ZXhHcm93KCkgIT0gdG8tPmZsZXhHcm93KCkgJiYgZnJvbS0+ZmxleFNocmluaygpICE9IHRvLT5m
bGV4U2hyaW5rKCkgJiYgY2FuSW50ZXJwb2xhdGVMZW5ndGhzKGZyb20tPmZsZXhCYXNpcygpLCB0
by0+ZmxleEJhc2lzKCksIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGZyb20uZmxleEdyb3coKSAh
PSB0by5mbGV4R3JvdygpICYmIGZyb20uZmxleFNocmluaygpICE9IHRvLmZsZXhTaHJpbmsoKSAm
JiBjYW5JbnRlcnBvbGF0ZUxlbmd0aHMoZnJvbS5mbGV4QmFzaXMoKSwgdG8uZmxleEJhc2lzKCks
IGZhbHNlKTsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJT
dHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0
IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJl
bmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgZGVz
dGluYXRpb24tPnNldEZsZXhCYXNpcyhibGVuZEZ1bmMoY2xpZW50LCBmcm9tLT5mbGV4QmFzaXMo
KSwgdG8tPmZsZXhCYXNpcygpLCBwcm9ncmVzcykpOwotICAgICAgICBkZXN0aW5hdGlvbi0+c2V0
RmxleEdyb3coYmxlbmRGdW5jKGNsaWVudCwgZnJvbS0+ZmxleEdyb3coKSwgdG8tPmZsZXhHcm93
KCksIHByb2dyZXNzKSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uLT5zZXRGbGV4U2hyaW5rKGJsZW5k
RnVuYyhjbGllbnQsIGZyb20tPmZsZXhTaHJpbmsoKSwgdG8tPmZsZXhTaHJpbmsoKSwgcHJvZ3Jl
c3MpKTsKKyAgICAgICAgZGVzdGluYXRpb24uc2V0RmxleEJhc2lzKGJsZW5kRnVuYyhmcm9tLmZs
ZXhCYXNpcygpLCB0by5mbGV4QmFzaXMoKSwgY29udGV4dCkpOworICAgICAgICBkZXN0aW5hdGlv
bi5zZXRGbGV4R3JvdyhibGVuZEZ1bmMoZnJvbS5mbGV4R3JvdygpLCB0by5mbGV4R3JvdygpLCBj
b250ZXh0KSk7CisgICAgICAgIGRlc3RpbmF0aW9uLnNldEZsZXhTaHJpbmsoYmxlbmRGdW5jKGZy
b20uZmxleFNocmluaygpLCB0by5mbGV4U2hyaW5rKCksIGNvbnRleHQpKTsKICAgICB9CiAKICNp
ZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSosIGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUgcHJvZ3Jlc3MpIGNv
bnN0IGZpbmFsCisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJl
bmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZp
bmFsCiAgICAgewogICAgICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcuCiAgICAgICAgIExP
R19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgZmxleCBhdCAi
IDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykp
OwpAQCAtMTgwOSwyMiArMTc5NywyMCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAg
IGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikg
Y29uc3QgZmluYWwKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwgY29uc3Qg
UmVuZGVyU3R5bGUmIGIpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoYSA9PSBiKQor
ICAgICAgICBpZiAoJmEgPT0gJmIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
aWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmICgo
YS0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpICE9IChiLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkpCisg
ICAgICAgIGlmICgoYS4qbV9wYWludFR5cGVHZXR0ZXIpKCkgIT0gKGIuKm1fcGFpbnRUeXBlR2V0
dGVyKSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIC8vIFdlIG9ubHkg
c3VwcG9ydCBhbmltYXRpb25zIGJldHdlZW4gU1ZHUGFpbnRzIHRoYXQgYXJlIHB1cmUgQ29sb3Ig
dmFsdWVzLgogICAgICAgICAvLyBGb3IgZXZlcnl0aGluZyBlbHNlIHdlIG11c3QgcmV0dXJuIHRy
dWUgZm9yIHRoaXMgbWV0aG9kLCBvdGhlcndpc2UKICAgICAgICAgLy8gd2Ugd2lsbCB0cnkgdG8g
YW5pbWF0ZSBiZXR3ZWVuIHZhbHVlcyBmb3JldmVyLgotICAgICAgICBpZiAoKGEtPiptX3BhaW50
VHlwZUdldHRlcikoKSA9PSBTVkdQYWludFR5cGU6OlJHQkNvbG9yKSB7Ci0gICAgICAgICAgICBD
b2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVyKSgpOwotICAgICAgICAgICAgQ29sb3IgdG9D
b2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGlmICgoYS4qbV9wYWludFR5cGVHZXR0
ZXIpKCkgPT0gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvcikgeworICAgICAgICAgICAgQ29sb3IgZnJv
bUNvbG9yID0gKGEuKm1fZ2V0dGVyKSgpOworICAgICAgICAgICAgQ29sb3IgdG9Db2xvciA9IChi
LiptX2dldHRlcikoKTsKIAogICAgICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpICYm
ICF0b0NvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE4
MzksMTQgKzE4MjUsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
Ci0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQs
IFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0
IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQg
YmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwg
Y29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYg
Y29udGV4dCkgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIGlmICgoZnJvbS0+Km1fcGFpbnRU
eXBlR2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IKLSAgICAgICAgICAgIHx8ICh0
by0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IpCisgICAg
ICAgIGlmICgoZnJvbS4qbV9wYWludFR5cGVHZXR0ZXIpKCkgIT0gU1ZHUGFpbnRUeXBlOjpSR0JD
b2xvcgorICAgICAgICAgICAgfHwgKHRvLiptX3BhaW50VHlwZUdldHRlcikoKSAhPSBTVkdQYWlu
dFR5cGU6OlJHQkNvbG9yKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIENvbG9yIGZy
b21Db2xvciA9IChmcm9tLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIENvbG9yIHRvQ29sb3IgPSAo
dG8tPiptX2dldHRlcikoKTsKKyAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gKGZyb20uKm1fZ2V0
dGVyKSgpOworICAgICAgICBDb2xvciB0b0NvbG9yID0gKHRvLiptX2dldHRlcikoKTsKIAogICAg
ICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkgJiYgIXRvQ29sb3IuaXNWYWxpZCgpKQogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtMTg1NSwxMSArMTg0MSwxMSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgZnJvbUNvbG9yID0gQ29sb3IoKTsKICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQo
KSkKICAgICAgICAgICAgIHRvQ29sb3IgPSBDb2xvcigpOwotICAgICAgICAoZGVzdGluYXRpb24t
PiptX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgZnJvbUNvbG9yLCB0b0NvbG9yLCBwcm9ncmVz
cykpOworICAgICAgICAoZGVzdGluYXRpb24uKm1fc2V0dGVyKShibGVuZEZ1bmMoZnJvbUNvbG9y
LCB0b0NvbG9yLCBjb250ZXh0KSk7CiAgICAgfQogCiAjaWYgIUxPR19ESVNBQkxFRAotICAgIHZv
aWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0
IFJlbmRlclN0eWxlKiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgbG9n
QmxlbmQoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRl
clN0eWxlJiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgLy8g
RklYTUU6IGJldHRlciBsb2dnaW5nLgogICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9u
cywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nIFNWR1BhaW50IGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9y
bWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7CkBAIC0xODgwLDMxICsxODY2
LDI5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBjYW5JbnRlcnBvbGF0
ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBm
aW5hbAorICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNv
bnN0IFJlbmRlclN0eWxlJiB0bykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIHJldHVybiBm
cm9tLT5mb250SXRhbGljKCkgJiYgdG8tPmZvbnRJdGFsaWMoKSAmJiBmcm9tLT5mb250RGVzY3Jp
cHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhpczo6c2xudCAmJiB0by0+Zm9u
dERlc2NyaXB0aW9uKCkuZm9udFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4aXM6OnNsbnQ7Cisg
ICAgICAgIHJldHVybiBmcm9tLmZvbnRJdGFsaWMoKSAmJiB0by5mb250SXRhbGljKCkgJiYgZnJv
bS5mb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhpczo6c2xu
dCAmJiB0by5mb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhp
czo6c2xudDsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJT
dHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0
IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJl
bmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgYXV0
byBkaXNjcmV0ZSA9ICFjYW5JbnRlcnBvbGF0ZShmcm9tLCB0byk7Ci0KICAgICAgICAgYXV0byBi
bGVuZGVkU3R5bGVBeGlzID0gRm9udFN0eWxlQXhpczo6c2xudDsKLSAgICAgICAgaWYgKGRpc2Ny
ZXRlKQotICAgICAgICAgICAgYmxlbmRlZFN0eWxlQXhpcyA9IChwcm9ncmVzcyA8IDAuNSA/IGZy
b20gOiB0byktPmZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKTsKKyAgICAgICAgaWYg
KGNvbnRleHQuaXNEaXNjcmV0ZSkKKyAgICAgICAgICAgIGJsZW5kZWRTdHlsZUF4aXMgPSAoY29u
dGV4dC5wcm9ncmVzcyA8IDAuNSA/IGZyb20gOiB0bykuZm9udERlc2NyaXB0aW9uKCkuZm9udFN0
eWxlQXhpcygpOwogCi0gICAgICAgIGF1dG8gZnJvbUZvbnRJdGFsaWMgPSBmcm9tLT5mb250SXRh
bGljKCk7Ci0gICAgICAgIGF1dG8gdG9Gb250SXRhbGljID0gdG8tPmZvbnRJdGFsaWMoKTsKLSAg
ICAgICAgYXV0byBibGVuZGVkRm9udEl0YWxpYyA9IHByb2dyZXNzIDwgMC41ID8gZnJvbUZvbnRJ
dGFsaWMgOiB0b0ZvbnRJdGFsaWM7Ci0gICAgICAgIGlmICghZGlzY3JldGUpCi0gICAgICAgICAg
ICBibGVuZGVkRm9udEl0YWxpYyA9IGJsZW5kRnVuYyhjbGllbnQsIGZyb21Gb250SXRhbGljLCB0
b0ZvbnRJdGFsaWMsIHByb2dyZXNzKTsKKyAgICAgICAgYXV0byBmcm9tRm9udEl0YWxpYyA9IGZy
b20uZm9udEl0YWxpYygpOworICAgICAgICBhdXRvIHRvRm9udEl0YWxpYyA9IHRvLmZvbnRJdGFs
aWMoKTsKKyAgICAgICAgYXV0byBibGVuZGVkRm9udEl0YWxpYyA9IGNvbnRleHQucHJvZ3Jlc3Mg
PCAwLjUgPyBmcm9tRm9udEl0YWxpYyA6IHRvRm9udEl0YWxpYzsKKyAgICAgICAgaWYgKCFjb250
ZXh0LmlzRGlzY3JldGUpCisgICAgICAgICAgICBibGVuZGVkRm9udEl0YWxpYyA9IGJsZW5kRnVu
Yyhmcm9tRm9udEl0YWxpYywgdG9Gb250SXRhbGljLCBjb250ZXh0KTsKIAotICAgICAgICBGb250
U2VsZWN0b3IqIGN1cnJlbnRGb250U2VsZWN0b3IgPSBkZXN0aW5hdGlvbi0+Zm9udENhc2NhZGUo
KS5mb250U2VsZWN0b3IoKTsKLSAgICAgICAgYXV0byBkZXNjcmlwdGlvbiA9IGRlc3RpbmF0aW9u
LT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgYXV0byogY3VycmVudEZvbnRTZWxlY3RvciA9
IGRlc3RpbmF0aW9uLmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCk7CisgICAgICAgIGF1dG8g
ZGVzY3JpcHRpb24gPSBkZXN0aW5hdGlvbi5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgZGVz
Y3JpcHRpb24uc2V0SXRhbGljKGJsZW5kZWRGb250SXRhbGljKTsKICAgICAgICAgZGVzY3JpcHRp
b24uc2V0Rm9udFN0eWxlQXhpcyhibGVuZGVkU3R5bGVBeGlzKTsKLSAgICAgICAgZGVzdGluYXRp
b24tPnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGRl
c3RpbmF0aW9uLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShjdXJyZW50Rm9udFNlbGVjdG9yKTsKKyAg
ICAgICAgZGVzdGluYXRpb24uc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZGVzY3JpcHRpb24p
KTsKKyAgICAgICAgZGVzdGluYXRpb24uZm9udENhc2NhZGUoKS51cGRhdGUoY3VycmVudEZvbnRT
ZWxlY3Rvcik7CiAgICAgfQogfTsKIApAQCAtMTkyMSwyOCArMTkwNSwyOCBAQCBwdWJsaWM6CiAg
ICAgfQogCiBwcml2YXRlOgotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5
bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bykgY29uc3QgZmluYWwKKyAgICBib29sIGNh
bkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYg
dG8pIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICByZXR1cm4gIShmcm9tLT4qbV9hdXRvR2V0
dGVyKSgpICYmICEodG8tPiptX2F1dG9HZXR0ZXIpKCk7CisgICAgICAgIHJldHVybiAhKGZyb20u
Km1fYXV0b0dldHRlcikoKSAmJiAhKHRvLiptX2F1dG9HZXR0ZXIpKCk7CiAgICAgfQogCi0gICAg
dm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRl
clN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRl
clN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQo
UmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3Qg
UmVuZGVyU3R5bGUmIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4
dCkgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIGF1dG8gYmxlbmRlZFZhbHVlID0gYmxlbmRG
dW5jKGNsaWVudCwgdGhpcy0+dmFsdWUoZnJvbSksIHRoaXMtPnZhbHVlKHRvKSwgcHJvZ3Jlc3Mp
OworICAgICAgICBhdXRvIGJsZW5kZWRWYWx1ZSA9IGJsZW5kRnVuYyh0aGlzLT52YWx1ZShmcm9t
KSwgdGhpcy0+dmFsdWUodG8pLCBjb250ZXh0KTsKICAgICAgICAgaWYgKG1fbWluVmFsdWUpCiAg
ICAgICAgICAgICBibGVuZGVkVmFsdWUgPSBibGVuZGVkVmFsdWUgPiAqbV9taW5WYWx1ZSA/IGJs
ZW5kZWRWYWx1ZSA6ICptX21pblZhbHVlOwotICAgICAgICAoZGVzdGluYXRpb24tPip0aGlzLT5t
X3NldHRlcikoYmxlbmRlZFZhbHVlKTsKKyAgICAgICAgKGRlc3RpbmF0aW9uLip0aGlzLT5tX3Nl
dHRlcikoYmxlbmRlZFZhbHVlKTsKIAotICAgICAgICBpZiAoY2FuSW50ZXJwb2xhdGUoZnJvbSwg
dG8pKQorICAgICAgICBpZiAoIWNvbnRleHQuaXNEaXNjcmV0ZSkKICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICBBU1NFUlQoIXByb2dyZXNzIHx8IHByb2dyZXNzID09IDEuMCk7Ci0gICAg
ICAgIGlmICghcHJvZ3Jlc3MpIHsKLSAgICAgICAgICAgIGlmICgoZnJvbS0+Km1fYXV0b0dldHRl
cikoKSkKLSAgICAgICAgICAgICAgICAoZGVzdGluYXRpb24tPiptX2F1dG9TZXR0ZXIpKCk7Cisg
ICAgICAgIEFTU0VSVCghY29udGV4dC5wcm9ncmVzcyB8fCBjb250ZXh0LnByb2dyZXNzID09IDEu
MCk7CisgICAgICAgIGlmICghY29udGV4dC5wcm9ncmVzcykgeworICAgICAgICAgICAgaWYgKChm
cm9tLiptX2F1dG9HZXR0ZXIpKCkpCisgICAgICAgICAgICAgICAgKGRlc3RpbmF0aW9uLiptX2F1
dG9TZXR0ZXIpKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoKHRvLT4qbV9h
dXRvR2V0dGVyKSgpKQotICAgICAgICAgICAgICAgIChkZXN0aW5hdGlvbi0+Km1fYXV0b1NldHRl
cikoKTsKKyAgICAgICAgICAgIGlmICgodG8uKm1fYXV0b0dldHRlcikoKSkKKyAgICAgICAgICAg
ICAgICAoZGVzdGluYXRpb24uKm1fYXV0b1NldHRlcikoKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtMTk2MCwxMCArMTk0NCwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAg
dm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRl
clN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRl
clN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHZvaWQgYmxl
bmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29u
c3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29u
dGV4dCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGF1dG8gYmxlbmRlZFZhbHVlID0g
YmxlbmRGdW5jKGNsaWVudCwgdmFsdWUoZnJvbSksIHZhbHVlKHRvKSwgcHJvZ3Jlc3MpOwotICAg
ICAgICAoZGVzdGluYXRpb24tPiptX3NldHRlcikoYmxlbmRlZFZhbHVlID4gMCA/IGJsZW5kZWRW
YWx1ZSA6IDApOworICAgICAgICBhdXRvIGJsZW5kZWRWYWx1ZSA9IGJsZW5kRnVuYyh2YWx1ZShm
cm9tKSwgdmFsdWUodG8pLCBjb250ZXh0KTsKKyAgICAgICAgKGRlc3RpbmF0aW9uLiptX3NldHRl
cikoYmxlbmRlZFZhbHVlID4gMCA/IGJsZW5kZWRWYWx1ZSA6IDApOwogICAgIH0KIH07CiAKQEAg
LTE5NzYsMTYgKzE5NjAsMTYgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29s
IGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHls
ZSogdG8pIGNvbnN0IGZpbmFsCisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJT
dHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvKSBjb25zdCBmaW5hbAogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZyb20tPnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpMZW5n
dGggJiYgdG8tPnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpMZW5ndGggJiYgTGVu
Z3RoUHJvcGVydHlXcmFwcGVyOjpjYW5JbnRlcnBvbGF0ZShmcm9tLCB0byk7CisgICAgICAgIHJl
dHVybiBmcm9tLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpMZW5ndGggJiYgdG8u
dmVydGljYWxBbGlnbigpID09IFZlcnRpY2FsQWxpZ246Okxlbmd0aCAmJiBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXI6OmNhbkludGVycG9sYXRlKGZyb20sIHRvKTsKICAgICB9CiAKLSAgICB2b2lkIGJs
ZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUq
IGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUq
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5kZXJT
dHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJT
dHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25z
dCBmaW5hbAogICAgIHsKLSAgICAgICAgTGVuZ3RoUHJvcGVydHlXcmFwcGVyOjpibGVuZChjbGll
bnQsIGRlc3RpbmF0aW9uLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOwotICAgICAgICBhdXRvKiBibGVu
ZGluZ1N0eWxlID0gIWNhbkludGVycG9sYXRlKGZyb20sIHRvKSAmJiBwcm9ncmVzcyA/IHRvIDog
ZnJvbTsKLSAgICAgICAgZGVzdGluYXRpb24tPnNldFZlcnRpY2FsQWxpZ24oYmxlbmRpbmdTdHls
ZS0+dmVydGljYWxBbGlnbigpKTsKKyAgICAgICAgTGVuZ3RoUHJvcGVydHlXcmFwcGVyOjpibGVu
ZChkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIGNvbnRleHQpOworICAgICAgICBhdXRvJiBibGVuZGlu
Z1N0eWxlID0gY29udGV4dC5pc0Rpc2NyZXRlICYmIGNvbnRleHQucHJvZ3Jlc3MgPyB0byA6IGZy
b207CisgICAgICAgIGRlc3RpbmF0aW9uLnNldFZlcnRpY2FsQWxpZ24oYmxlbmRpbmdTdHlsZS52
ZXJ0aWNhbEFsaWduKCkpOwogICAgIH0KIH07CiAKQEAgLTE5OTgsMjEgKzE5ODIsMjEgQEAgcHVi
bGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJl
bmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCisgICAg
Ym9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVy
U3R5bGUmIHRvKSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgaWYgKGZyb20tPnRleHRJbmRl
bnRMaW5lKCkgIT0gdG8tPnRleHRJbmRlbnRMaW5lKCkpCisgICAgICAgIGlmIChmcm9tLnRleHRJ
bmRlbnRMaW5lKCkgIT0gdG8udGV4dEluZGVudExpbmUoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKGZyb20tPnRleHRJbmRlbnRUeXBlKCkgIT0gdG8tPnRleHRJbmRl
bnRUeXBlKCkpCisgICAgICAgIGlmIChmcm9tLnRleHRJbmRlbnRUeXBlKCkgIT0gdG8udGV4dElu
ZGVudFR5cGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIExl
bmd0aFByb3BlcnR5V3JhcHBlcjo6Y2FuSW50ZXJwb2xhdGUoZnJvbSwgdG8pOwogICAgIH0KIAot
ICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBS
ZW5kZXJTdHlsZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBS
ZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGJs
ZW5kKFJlbmRlclN0eWxlJiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNv
bnN0IFJlbmRlclN0eWxlJiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBhdXRvKiBibGVuZGluZ1N0eWxlID0g
IWNhbkludGVycG9sYXRlKGZyb20sIHRvKSAmJiBwcm9ncmVzcyA/IHRvIDogZnJvbTsKLSAgICAg
ICAgZGVzdGluYXRpb24tPnNldFRleHRJbmRlbnRMaW5lKGJsZW5kaW5nU3R5bGUtPnRleHRJbmRl
bnRMaW5lKCkpOwotICAgICAgICBkZXN0aW5hdGlvbi0+c2V0VGV4dEluZGVudFR5cGUoYmxlbmRp
bmdTdHlsZS0+dGV4dEluZGVudFR5cGUoKSk7Ci0gICAgICAgIExlbmd0aFByb3BlcnR5V3JhcHBl
cjo6YmxlbmQoY2xpZW50LCBkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAgICAg
ICAgYXV0byYgYmxlbmRpbmdTdHlsZSA9IGNvbnRleHQuaXNEaXNjcmV0ZSAmJiBjb250ZXh0LnBy
b2dyZXNzID8gdG8gOiBmcm9tOworICAgICAgICBkZXN0aW5hdGlvbi5zZXRUZXh0SW5kZW50TGlu
ZShibGVuZGluZ1N0eWxlLnRleHRJbmRlbnRMaW5lKCkpOworICAgICAgICBkZXN0aW5hdGlvbi5z
ZXRUZXh0SW5kZW50VHlwZShibGVuZGluZ1N0eWxlLnRleHRJbmRlbnRUeXBlKCkpOworICAgICAg
ICBMZW5ndGhQcm9wZXJ0eVdyYXBwZXI6OmJsZW5kKGRlc3RpbmF0aW9uLCBmcm9tLCB0bywgY29u
dGV4dCk7CiAgICAgfQogfTsKIApAQCAtMjAyNSwxOSArMjAwOSwxOSBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUq
IGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bykgY29uc3QgZmluYWwKKyAgICBib29sIGNhbklu
dGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8p
IGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoIWZyb20tPmhhc1BlcnNwZWN0aXZlKCkg
fHwgIXRvLT5oYXNQZXJzcGVjdGl2ZSgpKQorICAgICAgICBpZiAoIWZyb20uaGFzUGVyc3BlY3Rp
dmUoKSB8fCAhdG8uaGFzUGVyc3BlY3RpdmUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgcmV0dXJuIE5vbk5lZ2F0aXZlRmxvYXRQcm9wZXJ0eVdyYXBwZXI6OmNhbkludGVy
cG9sYXRlKGZyb20sIHRvKTsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25z
dCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24s
IGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdCBmaW5hbAogICAgIHsKLSAg
ICAgICAgaWYgKCFjYW5JbnRlcnBvbGF0ZShmcm9tLCB0bykpCi0gICAgICAgICAgICAoZGVzdGlu
YXRpb24tPiptX3NldHRlcikocHJvZ3Jlc3MgPyB2YWx1ZSh0bykgOiB2YWx1ZShmcm9tKSk7Cisg
ICAgICAgIGlmIChjb250ZXh0LmlzRGlzY3JldGUpCisgICAgICAgICAgICAoZGVzdGluYXRpb24u
Km1fc2V0dGVyKShjb250ZXh0LnByb2dyZXNzID8gdmFsdWUodG8pIDogdmFsdWUoZnJvbSkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBOb25OZWdhdGl2ZUZsb2F0UHJvcGVydHlXcmFwcGVy
OjpibGVuZChjbGllbnQsIGRlc3RpbmF0aW9uLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOworICAgICAg
ICAgICAgTm9uTmVnYXRpdmVGbG9hdFByb3BlcnR5V3JhcHBlcjo6YmxlbmQoZGVzdGluYXRpb24s
IGZyb20sIHRvLCBjb250ZXh0KTsKICAgICB9CiB9OwogCkBAIC0yMDUwLDE3ICsyMDM0LDE3IEBA
IHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25z
dCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBmaW5hbAor
ICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJl
bmRlclN0eWxlJiB0bykgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHJldHVybiB2YWx1ZShm
cm9tKS5pc1NwYWNlcygpID09IHZhbHVlKHRvKS5pc1NwYWNlcygpOwogICAgIH0KIAotICAgIHZv
aWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBSZW5kZXJT
dHlsZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJT
dHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGJsZW5kKFJl
bmRlclN0eWxlJiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJl
bmRlclN0eWxlJiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoIWNhbkludGVycG9sYXRlKGZyb20sIHRv
KSkKLSAgICAgICAgICAgIChkZXN0aW5hdGlvbi0+Km1fc2V0dGVyKShwcm9ncmVzcyA/IHZhbHVl
KHRvKSA6IHZhbHVlKGZyb20pKTsKKyAgICAgICAgaWYgKGNvbnRleHQuaXNEaXNjcmV0ZSkKKyAg
ICAgICAgICAgIChkZXN0aW5hdGlvbi4qbV9zZXR0ZXIpKGNvbnRleHQucHJvZ3Jlc3MgPyB2YWx1
ZSh0bykgOiB2YWx1ZShmcm9tKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFByb3BlcnR5
V3JhcHBlcjo6YmxlbmQoY2xpZW50LCBkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIHByb2dyZXNzKTsK
KyAgICAgICAgICAgIFByb3BlcnR5V3JhcHBlcjo6YmxlbmQoZGVzdGluYXRpb24sIGZyb20sIHRv
LCBjb250ZXh0KTsKICAgICB9CiB9OwogCkBAIC0yMDcyLDQxICsyMDU2LDM5IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBmaW5hbAorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJl
bmRlclN0eWxlJiBhLCBjb25zdCBSZW5kZXJTdHlsZSYgYikgY29uc3QgZmluYWwKICAgICB7Ci0g
ICAgICAgIGlmIChhID09IGIpCisgICAgICAgIGlmICgmYSA9PSAmYikKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgcmV0dXJuIGEtPmFzcGVjdFJhdGlvVHlwZSgpID09IGItPmFzcGVjdFJh
dGlvVHlwZSgpICYmIGEtPmFzcGVjdFJhdGlvV2lkdGgoKSA9PSBiLT5hc3BlY3RSYXRpb1dpZHRo
KCkgJiYgYS0+YXNwZWN0UmF0aW9IZWlnaHQoKSA9PSBiLT5hc3BlY3RSYXRpb0hlaWdodCgpOwor
ICAgICAgICByZXR1cm4gYS5hc3BlY3RSYXRpb1R5cGUoKSA9PSBiLmFzcGVjdFJhdGlvVHlwZSgp
ICYmIGEuYXNwZWN0UmF0aW9XaWR0aCgpID09IGIuYXNwZWN0UmF0aW9XaWR0aCgpICYmIGEuYXNw
ZWN0UmF0aW9IZWlnaHQoKSA9PSBiLmFzcGVjdFJhdGlvSGVpZ2h0KCk7CiAgICAgfQogCi0gICAg
Ym9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVy
U3R5bGUqIHRvKSBjb25zdCBmaW5hbAorICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVu
ZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bykgY29uc3QgZmluYWwKICAgICB7
Ci0gICAgICAgIHJldHVybiAoZnJvbS0+YXNwZWN0UmF0aW9UeXBlKCkgPT0gQXNwZWN0UmF0aW9U
eXBlOjpSYXRpbyAmJiB0by0+YXNwZWN0UmF0aW9UeXBlKCkgPT0gQXNwZWN0UmF0aW9UeXBlOjpS
YXRpbykgfHwgKGZyb20tPmFzcGVjdFJhdGlvVHlwZSgpID09IEFzcGVjdFJhdGlvVHlwZTo6QXV0
b0FuZFJhdGlvICYmIHRvLT5hc3BlY3RSYXRpb1R5cGUoKSA9PSBBc3BlY3RSYXRpb1R5cGU6OkF1
dG9BbmRSYXRpbyk7CisgICAgICAgIHJldHVybiAoZnJvbS5hc3BlY3RSYXRpb1R5cGUoKSA9PSBB
c3BlY3RSYXRpb1R5cGU6OlJhdGlvICYmIHRvLmFzcGVjdFJhdGlvVHlwZSgpID09IEFzcGVjdFJh
dGlvVHlwZTo6UmF0aW8pIHx8IChmcm9tLmFzcGVjdFJhdGlvVHlwZSgpID09IEFzcGVjdFJhdGlv
VHlwZTo6QXV0b0FuZFJhdGlvICYmIHRvLmFzcGVjdFJhdGlvVHlwZSgpID09IEFzcGVjdFJhdGlv
VHlwZTo6QXV0b0FuZFJhdGlvKTsKICAgICB9CiAKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9p
ZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRv
LCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFs
CisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVy
U3R5bGUmIHRvLCBjb25zdCBSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGRvdWJsZSBwcm9ncmVz
cykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25z
LCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkg
PDwgIiBmcm9tICIgPDwgZnJvbS0+bG9naWNhbEFzcGVjdFJhdGlvKCkgPDwgIiB0byAiIDw8IHRv
LT5sb2dpY2FsQXNwZWN0UmF0aW8oKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVt
YmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgcmVzdWx0LT5sb2dp
Y2FsQXNwZWN0UmF0aW8oKSk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBz
dHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwg
IiBmcm9tICIgPDwgZnJvbS5sb2dpY2FsQXNwZWN0UmF0aW8oKSA8PCAiIHRvICIgPDwgdG8ubG9n
aWNhbEFzcGVjdFJhdGlvKCkgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJl
c3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IGRlc3RpbmF0aW9uLmxvZ2lj
YWxBc3BlY3RSYXRpbygpKTsKICAgICB9CiAjZW5kaWYKIAotICAgIHZvaWQgYmxlbmQoY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29u
c3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dy
ZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9u
LCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QgZmluYWwKICAgICB7Ci0g
ICAgICAgIGRlc3RpbmF0aW9uLT5zZXRBc3BlY3RSYXRpb1R5cGUocHJvZ3Jlc3MgPCAwLjUgPyBm
cm9tLT5hc3BlY3RSYXRpb1R5cGUoKSA6IHRvLT5hc3BlY3RSYXRpb1R5cGUoKSk7Ci0gICAgICAg
IGlmIChjYW5JbnRlcnBvbGF0ZShmcm9tLCB0bykpIHsKLSAgICAgICAgICAgIGF1dG8gYXNwZWN0
UmF0aW9Ec3QgPSBXZWJDb3JlOjpibGVuZChsb2coZnJvbS0+bG9naWNhbEFzcGVjdFJhdGlvKCkp
LCBsb2codG8tPmxvZ2ljYWxBc3BlY3RSYXRpbygpKSwgcHJvZ3Jlc3MpOwotICAgICAgICAgICAg
ZGVzdGluYXRpb24tPnNldEFzcGVjdFJhdGlvKGV4cChhc3BlY3RSYXRpb0RzdCksIDEpOworICAg
ICAgICBkZXN0aW5hdGlvbi5zZXRBc3BlY3RSYXRpb1R5cGUoY29udGV4dC5wcm9ncmVzcyA8IDAu
NSA/IGZyb20uYXNwZWN0UmF0aW9UeXBlKCkgOiB0by5hc3BlY3RSYXRpb1R5cGUoKSk7CisgICAg
ICAgIGlmICghY29udGV4dC5pc0Rpc2NyZXRlKSB7CisgICAgICAgICAgICBhdXRvIGFzcGVjdFJh
dGlvRHN0ID0gV2ViQ29yZTo6YmxlbmQobG9nKGZyb20ubG9naWNhbEFzcGVjdFJhdGlvKCkpLCBs
b2codG8ubG9naWNhbEFzcGVjdFJhdGlvKCkpLCBjb250ZXh0KTsKKyAgICAgICAgICAgIGRlc3Rp
bmF0aW9uLnNldEFzcGVjdFJhdGlvKGV4cChhc3BlY3RSYXRpb0RzdCksIDEpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIEZvciBhdXRvL2F1dG8temVybyBhc3Bl
Y3QtcmF0aW8gd2UgdXNlIGRpc2NyZXRlIHZhbHVlcywgd2UgY2FuJ3QgdXNlIGdlbmVyYWwKICAg
ICAgICAgLy8gbG9naWMgc2luY2UgbG9naWNhbEFzcGVjdFJhdGlvIGFzc2VydHMgb24gYXNwZWN0
LXJhdGlvIHR5cGUuCi0gICAgICAgIEFTU0VSVCghcHJvZ3Jlc3MgfHwgcHJvZ3Jlc3MgPT0gMSk7
Ci0gICAgICAgIGF1dG8qIGFwcGxpY2FibGVTdHlsZSA9IHByb2dyZXNzID8gdG8gOiBmcm9tOwot
ICAgICAgICBkZXN0aW5hdGlvbi0+c2V0QXNwZWN0UmF0aW8oYXBwbGljYWJsZVN0eWxlLT5hc3Bl
Y3RSYXRpb1dpZHRoKCksIGFwcGxpY2FibGVTdHlsZS0+YXNwZWN0UmF0aW9IZWlnaHQoKSk7Cisg
ICAgICAgIEFTU0VSVCghY29udGV4dC5wcm9ncmVzcyB8fCBjb250ZXh0LnByb2dyZXNzID09IDEp
OworICAgICAgICBhdXRvJiBhcHBsaWNhYmxlU3R5bGUgPSBjb250ZXh0LnByb2dyZXNzID8gdG8g
OiBmcm9tOworICAgICAgICBkZXN0aW5hdGlvbi5zZXRBc3BlY3RSYXRpbyhhcHBsaWNhYmxlU3R5
bGUuYXNwZWN0UmF0aW9XaWR0aCgpLCBhcHBsaWNhYmxlU3R5bGUuYXNwZWN0UmF0aW9IZWlnaHQo
KSk7CiAgICAgfQogfTsKIApAQCAtMjUwNiwxOCArMjQ4OCwxOSBAQCBzdGF0aWMgYm9vbCBnYXRo
ZXJFbmNsb3NpbmdTaG9ydGhhbmRQcm9wZXJ0aWVzKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIEFu
aW1hdGlvbgogICAgIHJldHVybiBjb250YWluZWQ7CiB9CiAKLXZvaWQgQ1NTUHJvcGVydHlBbmlt
YXRpb246OmJsZW5kUHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBj
bGllbnQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwg
Y29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHBy
b2dyZXNzKQordm9pZCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0aWVzKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29u
c3QgUmVuZGVyU3R5bGUmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiB7CiAgICAgQVNTRVJUKHByb3Bl
cnR5ICE9IENTU1Byb3BlcnR5SW52YWxpZCk7CiAKICAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlKiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0
b24oKS53cmFwcGVyRm9yUHJvcGVydHkocHJvcGVydHkpOwogICAgIGlmICh3cmFwcGVyKSB7CiAg
ICAgICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy93ZWItYW5pbWF0aW9ucy0xLyNkaXNj
cmV0ZQotICAgICAgICAvLyBUaGUgcHJvcGVydHnigJlzIHZhbHVlcyBjYW5ub3QgYmUgbWVhbmlu
Z2Z1bGx5IGNvbWJpbmVkLCB0aHVzIGl0IGlzIG5vdCBhZGRpdGl2ZSBhbmQKKyAgICAgICAgLy8g
VGhlIHByb3BlcnR5J3MgdmFsdWVzIGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgY29tYmluZWQsIHRo
dXMgaXQgaXMgbm90IGFkZGl0aXZlIGFuZAogICAgICAgICAvLyBpbnRlcnBvbGF0aW9uIHN3YXBz
IGZyb20gVmEgdG8gVmIgYXQgNTAlIChwPTAuNSkuCi0gICAgICAgIGlmICghd3JhcHBlci0+Y2Fu
SW50ZXJwb2xhdGUoZnJvbSwgdG8pKQorICAgICAgICBhdXRvIGlzRGlzY3JldGUgPSAhd3JhcHBl
ci0+Y2FuSW50ZXJwb2xhdGUoZnJvbSwgdG8pOworICAgICAgICBpZiAoaXNEaXNjcmV0ZSkKICAg
ICAgICAgICAgIHByb2dyZXNzID0gcHJvZ3Jlc3MgPCAwLjUgPyAwIDogMTsKLSAgICAgICAgd3Jh
cHBlci0+YmxlbmQoY2xpZW50LCBkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAg
ICAgICAgd3JhcHBlci0+YmxlbmQoZGVzdGluYXRpb24sIGZyb20sIHRvLCB7IHByb2dyZXNzLCBp
c0Rpc2NyZXRlLCBjbGllbnQgfSk7CiAjaWYgIUxPR19ESVNBQkxFRAogICAgICAgICB3cmFwcGVy
LT5sb2dCbGVuZChmcm9tLCB0bywgZGVzdGluYXRpb24sIHByb2dyZXNzKTsKICNlbmRpZgpAQCAt
MjU0Nyw3ICsyNTMwLDcgQEAgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBDU1NQcm9wZXJ0eUFuaW1h
dGlvbjo6YW5pbWF0YWJsZVNob3J0aGFuZHNBZmZlY3RpbmdQcm9wZXIKICAgICByZXR1cm4gZm91
bmRQcm9wZXJ0aWVzOwogfQogCi1ib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVz
RXF1YWwoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0
IFJlbmRlclN0eWxlKiBiKQorYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6cHJvcGVydGllc0Vx
dWFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSYgYikKIHsKICAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFw
cGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVy
Rm9yUHJvcGVydHkocHJvcGVydHkpOwogICAgIGlmICh3cmFwcGVyKQpAQCAtMjU1NSw3ICsyNTM4
LDcgQEAgYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIGNvbnN0IFJlbmRlclMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5
bGUqIHRvKQorYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9s
YXRlZChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29u
c3QgUmVuZGVyU3R5bGUmIHRvKQogewogICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Uq
IHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLndy
YXBwZXJGb3JQcm9wZXJ0eShwcm9wZXJ0eSk7CiAgICAgaWYgKHdyYXBwZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oCmluZGV4IGNkZTJjODc1
ODMyMzgwYzUzZjUwYTU1ZjBlZDQ0ZWY2ZDg0NDQxOWIuLmU2ZTg0ZjY1NGQzMDQ5MGUyOWYyZjk1
YmE0MDA2ZDZjNDZjMTZmMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9D
U1NQcm9wZXJ0eUFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQ
cm9wZXJ0eUFuaW1hdGlvbi5oCkBAIC00MCwxNSArNDAsMTQgQEAgY2xhc3MgQ1NTUHJvcGVydHlB
bmltYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGlzUHJvcGVydHlBbmltYXRhYmxl
KENTU1Byb3BlcnR5SUQpOwogICAgIHN0YXRpYyBib29sIGFuaW1hdGlvbk9mUHJvcGVydHlJc0Fj
Y2VsZXJhdGVkKENTU1Byb3BlcnR5SUQpOwotICAgIHN0YXRpYyBib29sIHByb3BlcnRpZXNFcXVh
bChDU1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIpOwotICAgIHN0YXRpYyBib29sIGNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQoQ1NTUHJvcGVy
dHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKTsKKyAgICBz
dGF0aWMgYm9vbCBwcm9wZXJ0aWVzRXF1YWwoQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5
bGUmIGEsIGNvbnN0IFJlbmRlclN0eWxlJiBiKTsKKyAgICBzdGF0aWMgYm9vbCBjYW5Qcm9wZXJ0
eUJlSW50ZXJwb2xhdGVkKENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25z
dCBSZW5kZXJTdHlsZSYgYik7CiAgICAgc3RhdGljIENTU1Byb3BlcnR5SUQgZ2V0UHJvcGVydHlB
dEluZGV4KGludCwgT3B0aW9uYWw8Ym9vbD4mIGlzU2hvcnRoYW5kKTsKICAgICBzdGF0aWMgaW50
IGdldE51bVByb3BlcnRpZXMoKTsKIAogICAgIHN0YXRpYyBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+
IGFuaW1hdGFibGVTaG9ydGhhbmRzQWZmZWN0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7CiAK
LSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IHNvZnR3YXJlIGFuaW1hdGlv
biB0aW1lcnMKLSAgICBzdGF0aWMgdm9pZCBibGVuZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCosIENTU1Byb3BlcnR5SUQsIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0
IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKTsK
KyAgICBzdGF0aWMgdm9pZCBibGVuZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCosIENTU1Byb3BlcnR5SUQsIFJlbmRlclN0eWxlJiBkZXN0aW5hdGlvbiwgY29uc3Qg
UmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bywgZG91YmxlIHByb2dyZXNz
KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRp
b24vS2V5ZnJhbWVFZmZlY3QuY3BwCmluZGV4IDQ5YTM0YTY2Y2Q1OGNiNmRmNTE5NWJmMjgzOTdi
NTc4ZWQ4MzUwMmUuLjQxNzRkYjIyYmRlZGJjNzEzYzY5Yjc4M2JkYzAwYjM2NDcwNmM4OTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcApAQCAtMTQxOCw3
ICsxNDE4LDcgQEAgdm9pZCBLZXlmcmFtZUVmZmVjdDo6c2V0QW5pbWF0ZWRQcm9wZXJ0aWVzSW5T
dHlsZShSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIGRvdWIKICAgICAvLyBwcm9ncmVzcyB3aGlj
aCBhbHJlYWR5IGFjY291bnRzIGZvciB0aGUgdHJhbnNpdGlvbidzIHRpbWluZyBmdW5jdGlvbi4K
ICAgICBpZiAobV9ibGVuZGluZ0tleWZyYW1lc1NvdXJjZSA9PSBCbGVuZGluZ0tleWZyYW1lc1Nv
dXJjZTo6Q1NTVHJhbnNpdGlvbikgewogICAgICAgICBBU1NFUlQocHJvcGVydGllcy5zaXplKCkg
PT0gMSk7Ci0gICAgICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFByb3BlcnRpZXModGhp
cywgKnByb3BlcnRpZXMuYmVnaW4oKSwgJnRhcmdldFN0eWxlLCBtX2JsZW5kaW5nS2V5ZnJhbWVz
WzBdLnN0eWxlKCksIG1fYmxlbmRpbmdLZXlmcmFtZXNbMV0uc3R5bGUoKSwgaXRlcmF0aW9uUHJv
Z3Jlc3MpOworICAgICAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0aWVzKHRo
aXMsICpwcm9wZXJ0aWVzLmJlZ2luKCksIHRhcmdldFN0eWxlLCAqbV9ibGVuZGluZ0tleWZyYW1l
c1swXS5zdHlsZSgpLCAqbV9ibGVuZGluZ0tleWZyYW1lc1sxXS5zdHlsZSgpLCBpdGVyYXRpb25Q
cm9ncmVzcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE1MzIsNyArMTUzMiw3IEBA
IHZvaWQgS2V5ZnJhbWVFZmZlY3Q6OnNldEFuaW1hdGVkUHJvcGVydGllc0luU3R5bGUoUmVuZGVy
U3R5bGUmIHRhcmdldFN0eWxlLCBkb3ViCiAgICAgICAgIGlmIChpbnRlcnZhbEVuZHBvaW50cy5z
aXplKCkgPT0gMSkgewogICAgICAgICAgICAgYXV0byBrZXlmcmFtZUluZGV4ID0gaW50ZXJ2YWxF
bmRwb2ludHNbMF07CiAgICAgICAgICAgICBhdXRvIGtleWZyYW1lU3R5bGUgPSAha2V5ZnJhbWVJ
bmRleCA/ICZ0YXJnZXRTdHlsZSA6IG1fYmxlbmRpbmdLZXlmcmFtZXNba2V5ZnJhbWVJbmRleC52
YWx1ZSgpXS5zdHlsZSgpOwotICAgICAgICAgICAgQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5k
UHJvcGVydGllcyh0aGlzLCBjc3NQcm9wZXJ0eUlkLCAmdGFyZ2V0U3R5bGUsIGtleWZyYW1lU3R5
bGUsIGtleWZyYW1lU3R5bGUsIDApOworICAgICAgICAgICAgQ1NTUHJvcGVydHlBbmltYXRpb246
OmJsZW5kUHJvcGVydGllcyh0aGlzLCBjc3NQcm9wZXJ0eUlkLCB0YXJnZXRTdHlsZSwgKmtleWZy
YW1lU3R5bGUsICprZXlmcmFtZVN0eWxlLCAwKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICB9CiAKQEAgLTE1NjMsNyArMTU2Myw3IEBAIHZvaWQgS2V5ZnJhbWVFZmZlY3Q6OnNldEFu
aW1hdGVkUHJvcGVydGllc0luU3R5bGUoUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBkb3ViCiAg
ICAgICAgIC8vICAgICBkaXN0YW5jZSBhcyB0aGUgaW50ZXJwb2xhdGlvbiBwYXJhbWV0ZXIgcC4K
ICAgICAgICAgYXV0byBzdGFydFN0eWxlID0gIXN0YXJ0S2V5ZnJhbWVJbmRleCA/ICZ0YXJnZXRT
dHlsZSA6IG1fYmxlbmRpbmdLZXlmcmFtZXNbc3RhcnRLZXlmcmFtZUluZGV4LnZhbHVlKCldLnN0
eWxlKCk7CiAgICAgICAgIGF1dG8gZW5kU3R5bGUgPSAhZW5kS2V5ZnJhbWVJbmRleCA/ICZ0YXJn
ZXRTdHlsZSA6IG1fYmxlbmRpbmdLZXlmcmFtZXNbZW5kS2V5ZnJhbWVJbmRleC52YWx1ZSgpXS5z
dHlsZSgpOwotICAgICAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0aWVzKHRo
aXMsIGNzc1Byb3BlcnR5SWQsICZ0YXJnZXRTdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIHRy
YW5zZm9ybWVkRGlzdGFuY2UpOworICAgICAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQ
cm9wZXJ0aWVzKHRoaXMsIGNzc1Byb3BlcnR5SWQsIHRhcmdldFN0eWxlLCAqc3RhcnRTdHlsZSwg
KmVuZFN0eWxlLCB0cmFuc2Zvcm1lZERpc3RhbmNlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwCmluZGV4IDllNmFiNjgwODUxNWMwMTU0YTgwOGFi
OTE1MzdjNzFlNThhZGM5ZDIuLjhlYmVhNGIyYWIxZTI0N2RmNWVhNWNjNDZjODg1Y2MxMGNjN2Iw
ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcApAQCAtMzgsOSAr
MzgsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbmxpbmUgZG91YmxlIGJs
ZW5kRnVuYyhkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMg
aW5saW5lIGRvdWJsZSBibGVuZEZ1bmMoZG91YmxlIGZyb20sIGRvdWJsZSB0bywgY29uc3QgQmxl
bmRpbmdDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJv
Z3Jlc3MpOworICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgY29udGV4dCk7CiB9CiAKIHN0YXRp
YyBib29sIHN1YmltYWdlS25vd25Ub0JlT3BhcXVlKGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSwgY29u
c3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCkBAIC0yMDIsNyArMjAyLDcgQEAgYm9vbCBDU1ND
cm9zc2ZhZGVWYWx1ZTo6dHJhdmVyc2VTdWJyZXNvdXJjZXMoY29uc3QgV1RGOjpGdW5jdGlvbjxi
b29sIChjb25zdCBDYWMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVJlZlB0cjxDU1NDcm9zc2Zh
ZGVWYWx1ZT4gQ1NTQ3Jvc3NmYWRlVmFsdWU6OmJsZW5kKGNvbnN0IENTU0Nyb3NzZmFkZVZhbHVl
JiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0CitSZWZQdHI8Q1NTQ3Jvc3NmYWRlVmFsdWU+
IENTU0Nyb3NzZmFkZVZhbHVlOjpibGVuZChjb25zdCBDU1NDcm9zc2ZhZGVWYWx1ZSYgZnJvbSwg
Y29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIEFTU0VSVChlcXVh
bElucHV0SW1hZ2VzKGZyb20pKTsKIApAQCAtMjE4LDcgKzIxOCw3IEBAIFJlZlB0cjxDU1NDcm9z
c2ZhZGVWYWx1ZT4gQ1NTQ3Jvc3NmYWRlVmFsdWU6OmJsZW5kKGNvbnN0IENTU0Nyb3NzZmFkZVZh
bHVlJiBmcm9tCiAgICAgZG91YmxlIHRvUGVyY2VudGFnZSA9IG1fcGVyY2VudGFnZVZhbHVlLT5k
b3VibGVWYWx1ZSgpOwogICAgIGlmIChtX3BlcmNlbnRhZ2VWYWx1ZS0+aXNQZXJjZW50YWdlKCkp
CiAgICAgICAgIHRvUGVyY2VudGFnZSAvPSAxMDAuMDsKLSAgICBhdXRvIHBlcmNlbnRhZ2VWYWx1
ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoYmxlbmRGdW5jKGZyb21QZXJjZW50YWdlLCB0
b1BlcmNlbnRhZ2UsIHByb2dyZXNzKSwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAgIGF1
dG8gcGVyY2VudGFnZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShibGVuZEZ1bmMo
ZnJvbVBlcmNlbnRhZ2UsIHRvUGVyY2VudGFnZSwgY29udGV4dCksIENTU1VuaXRUeXBlOjpDU1Nf
TlVNQkVSKTsKIAogICAgIHJldHVybiBDU1NDcm9zc2ZhZGVWYWx1ZTo6Y3JlYXRlKFdURk1vdmUo
ZnJvbUltYWdlVmFsdWUpLCBXVEZNb3ZlKHRvSW1hZ2VWYWx1ZSksIFdURk1vdmUocGVyY2VudGFn
ZVZhbHVlKSwgZnJvbS5pc1ByZWZpeGVkKCkgJiYgaXNQcmVmaXhlZCgpKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmgKaW5kZXggOTQ1MjM1Mjg1MTUxYzYwYTU0Y2ZkYTMy
MGY0MjU3NDE5YTE5NmE4MC4uZWJhYjdhY2RlYzY4ZDVhZjk5NDNhMDVlOGE4MDUzZDUyOTllODlm
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmgKQEAgLTMyLDYgKzMyLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQmxlbmRpbmdDb250ZXh0OwogY2xh
c3MgQ1NTUHJpbWl0aXZlVmFsdWU7CiAKIGNsYXNzIENTU0Nyb3NzZmFkZVZhbHVlIGZpbmFsIDog
cHVibGljIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUgewpAQCAtNTQsNyArNTUsNyBAQCBwdWJsaWM6
CiAKICAgICBib29sIHRyYXZlcnNlU3VicmVzb3VyY2VzKGNvbnN0IFdURjo6RnVuY3Rpb248Ym9v
bCAoY29uc3QgQ2FjaGVkUmVzb3VyY2UmKT4mIGhhbmRsZXIpIGNvbnN0OwogCi0gICAgUmVmUHRy
PENTU0Nyb3NzZmFkZVZhbHVlPiBibGVuZChjb25zdCBDU1NDcm9zc2ZhZGVWYWx1ZSYsIGRvdWJs
ZSkgY29uc3Q7CisgICAgUmVmUHRyPENTU0Nyb3NzZmFkZVZhbHVlPiBibGVuZChjb25zdCBDU1ND
cm9zc2ZhZGVWYWx1ZSYsIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYpIGNvbnN0OwogCiAgICAgYm9v
bCBlcXVhbHMoY29uc3QgQ1NTQ3Jvc3NmYWRlVmFsdWUmKSBjb25zdDsKICAgICBib29sIGVxdWFs
SW5wdXRJbWFnZXMoY29uc3QgQ1NTQ3Jvc3NmYWRlVmFsdWUmKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCA1NWFiYjgyZWY5OWQzNzliN2RhMzNlOTgy
MjM1ODk2N2MyNzM5OGIzLi4xYjZkZGY1ZTIwNjY1ZWMxNTQwZTAxZThkMDA4OTUxMmYzNmE5NGQ5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCkBAIC0yNiw2ICsyNiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTR3JhZGllbnRWYWx1ZS5oIgog
CisjaW5jbHVkZSAiQW5pbWF0aW9uVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaCIKICNpbmNs
dWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCkBAIC0yMDUsNyArMjA2LDcgQEAgcHVibGljOgogCiAg
ICAgICAgICAgICAgICAgZmxvYXQgaW50ZXJTdG9wUHJvcG9ydGlvbiA9IC1wcmV2T2Zmc2V0IC8g
KG5leHRPZmZzZXQgLSBwcmV2T2Zmc2V0KTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2hl
biB3ZSBpbnRlcnBvbGF0ZSBncmFkaWVudHMgdXNpbmcgcHJlbXVsdGlwbGllZCBjb2xvcnMsIHRo
aXMgc2hvdWxkIGRvIHByZW11bHRpcGxpY2F0aW9uLgotICAgICAgICAgICAgICAgIENvbG9yIGJs
ZW5kZWRDb2xvciA9IGJsZW5kKHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4IC0gMV0uY29s
b3IsIHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5jb2xvciwgaW50ZXJTdG9wUHJvcG9y
dGlvbik7CisgICAgICAgICAgICAgICAgQ29sb3IgYmxlbmRlZENvbG9yID0gYmxlbmQoc3RvcHNb
Zmlyc3RaZXJvT3JHcmVhdGVySW5kZXggLSAxXS5jb2xvciwgc3RvcHNbZmlyc3RaZXJvT3JHcmVh
dGVySW5kZXhdLmNvbG9yLCB7IGludGVyU3RvcFByb3BvcnRpb24gfSk7CiAKICAgICAgICAgICAg
ICAgICAvLyBDbGFtcCB0aGUgcG9zaXRpb25zIHRvIDAgYW5kIHNldCB0aGUgY29sb3IuCiAgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaXJzdFplcm9PckdyZWF0ZXJJbmRl
eDsgKytpKSB7CkBAIC0yNTYsNyArMjU3LDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICAgICAg
ZmxvYXQgaW50ZXJTdG9wUHJvcG9ydGlvbiA9IC1wcmV2aW91c09mZnNldCAvIChuZXh0T2Zmc2V0
IC0gcHJldmlvdXNPZmZzZXQpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGlu
dGVycG9sYXRlIGdyYWRpZW50cyB1c2luZyBwcmVtdWx0aXBsaWVkIGNvbG9ycywgdGhpcyBzaG91
bGQgZG8gcHJlbXVsdGlwbGljYXRpb24uCi0gICAgICAgICAgICAgICAgQ29sb3IgYmxlbmRlZENv
bG9yID0gYmxlbmQoc3RvcHNbaW5kZXggLSAxXS5jb2xvciwgc3RvcHNbaW5kZXhdLmNvbG9yLCBp
bnRlclN0b3BQcm9wb3J0aW9uKTsKKyAgICAgICAgICAgICAgICBDb2xvciBibGVuZGVkQ29sb3Ig
PSBibGVuZChzdG9wc1tpbmRleCAtIDFdLmNvbG9yLCBzdG9wc1tpbmRleF0uY29sb3IsIHsgaW50
ZXJTdG9wUHJvcG9ydGlvbiB9KTsKIAogICAgICAgICAgICAgICAgIC8vIENsYW1wIHRoZSBwb3Np
dGlvbnMgdG8gMCBhbmQgc2V0IHRoZSBjb2xvci4KICAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGluZGV4OyArK2kpIHsKQEAgLTI4Niw3ICsyODcsNyBAQCBwdWJsaWM6CiAK
ICAgICAgICAgICAgICAgICBmbG9hdCBpbnRlclN0b3BQcm9wb3J0aW9uID0gKDEgLSBwcmV2aW91
c09mZnNldCkgLyAobmV4dE9mZnNldCAtIHByZXZpb3VzT2Zmc2V0KTsKICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogd2hlbiB3ZSBpbnRlcnBvbGF0ZSBncmFkaWVudHMgdXNpbmcgcHJlbXVsdGlw
bGllZCBjb2xvcnMsIHRoaXMgc2hvdWxkIGRvIHByZW11bHRpcGxpY2F0aW9uLgotICAgICAgICAg
ICAgICAgIENvbG9yIGJsZW5kZWRDb2xvciA9IGJsZW5kKHN0b3BzW2luZGV4XS5jb2xvciwgc3Rv
cHNbaW5kZXggKyAxXS5jb2xvciwgaW50ZXJTdG9wUHJvcG9ydGlvbik7CisgICAgICAgICAgICAg
ICAgQ29sb3IgYmxlbmRlZENvbG9yID0gYmxlbmQoc3RvcHNbaW5kZXhdLmNvbG9yLCBzdG9wc1tp
bmRleCArIDFdLmNvbG9yLCB7IGludGVyU3RvcFByb3BvcnRpb24gfSk7CiAKICAgICAgICAgICAg
ICAgICAvLyBDbGFtcCB0aGUgcG9zaXRpb25zIHRvIDEgYW5kIHNldCB0aGUgY29sb3IuCiAgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGluZGV4ICsgMTsgaSA8PSBsYXN0U3RvcEluZGV4
OyArK2kpIHsKQEAgLTQ4NSw3ICs0ODYsNyBAQCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENT
U0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZQogICAg
ICAgICAgICAgZmxvYXQgcmVsYXRpdmVPZmZzZXQgPSAoKm5ld1N0b3BzW3ldLm9mZnNldCAtIG9m
ZnNldDEpIC8gKG9mZnNldDIgLSBvZmZzZXQxKTsKICAgICAgICAgICAgIGZsb2F0IG11bHRpcGxp
ZXIgPSBzdGQ6OnBvdyhyZWxhdGl2ZU9mZnNldCwgc3RkOjpsb2coLjVmKSAvIHN0ZDo6bG9nKG1p
ZHBvaW50KSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2h5IG5vdCBwcmVtdWx0aXBseSBoZXJl
PwotICAgICAgICAgICAgbmV3U3RvcHNbeV0uY29sb3IgPSBibGVuZFdpdGhvdXRQcmVtdWx0aXBs
eShjb2xvcjEsIGNvbG9yMiwgbXVsdGlwbGllcik7CisgICAgICAgICAgICBuZXdTdG9wc1t5XS5j
b2xvciA9IGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbG9yMSwgY29sb3IyLCB7IG11bHRpcGxp
ZXIgfSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdG9wcy5yZW1vdmUoeCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vTGVuZ3RoLmNwcAppbmRleCBmYzdlMzAyZjFhOWY2YmNiODNkOWI3N2JlYzk2NmI4ZDg0
OGI1Njc2Li44NjQ2YzgzMTg2MDc0ZjMwYzI0ZjNhNmFlMjFiYjZhM2ZjNjQ5ZjU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJMZW5ndGguaCIKIAorI2luY2x1ZGUgIkFuaW1hdGlvblV0aWxpdGll
cy5oIgogI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlD
VHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0yOTQsMzcgKzI5NSwzNyBAQCBM
ZW5ndGggY29udmVydFRvMTAwUGVyY2VudE1pbnVzTGVuZ3RoKGNvbnN0IExlbmd0aCYgbGVuZ3Ro
KQogICAgIHJldHVybiBMZW5ndGgoQ2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKFdURk1vdmUob3Ap
LCBWYWx1ZVJhbmdlQWxsKSk7CiB9CiAKLXN0YXRpYyBMZW5ndGggYmxlbmRNaXhlZFR5cGVzKGNv
bnN0IExlbmd0aCYgZnJvbSwgY29uc3QgTGVuZ3RoJiB0bywgZG91YmxlIHByb2dyZXNzKQorc3Rh
dGljIExlbmd0aCBibGVuZE1peGVkVHlwZXMoY29uc3QgTGVuZ3RoJiBmcm9tLCBjb25zdCBMZW5n
dGgmIHRvLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgaWYgKCFwcm9n
cmVzcykKKyAgICBpZiAoIWNvbnRleHQucHJvZ3Jlc3MpCiAgICAgICAgIHJldHVybiBmcm9tOwog
Ci0gICAgaWYgKHByb2dyZXNzID09IDEuMCkKKyAgICBpZiAoY29udGV4dC5wcm9ncmVzcyA9PSAx
LjApCiAgICAgICAgIHJldHVybiB0bzsKIAotICAgIGF1dG8gYmxlbmQgPSBtYWtlVW5pcXVlPENh
bGNFeHByZXNzaW9uQmxlbmRMZW5ndGg+KGZyb20sIHRvLCBwcm9ncmVzcyk7CisgICAgYXV0byBi
bGVuZCA9IG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aD4oZnJvbSwgdG8sIGNv
bnRleHQucHJvZ3Jlc3MpOwogICAgIHJldHVybiBMZW5ndGgoQ2FsY3VsYXRpb25WYWx1ZTo6Y3Jl
YXRlKFdURk1vdmUoYmxlbmQpLCBWYWx1ZVJhbmdlQWxsKSk7CiB9CiAKLUxlbmd0aCBibGVuZChj
b25zdCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK0xl
bmd0aCBibGVuZChjb25zdCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGNvbnN0IEJs
ZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBpZiAoIXByb2dyZXNzKQorICAgIGlmICgh
Y29udGV4dC5wcm9ncmVzcykKICAgICAgICAgcmV0dXJuIGZyb207CiAKLSAgICBpZiAocHJvZ3Jl
c3MgPT0gMSkKKyAgICBpZiAoY29udGV4dC5wcm9ncmVzcyA9PSAxKQogICAgICAgICByZXR1cm4g
dG87CiAKICAgICBpZiAoZnJvbS5pc0F1dG8oKSB8fCB0by5pc0F1dG8oKSkKLSAgICAgICAgcmV0
dXJuIHByb2dyZXNzIDwgMC41ID8gZnJvbSA6IHRvOworICAgICAgICByZXR1cm4gY29udGV4dC5w
cm9ncmVzcyA8IDAuNSA/IGZyb20gOiB0bzsKIAogICAgIGlmIChmcm9tLmlzVW5kZWZpbmVkKCkg
fHwgdG8uaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIHRvOwogCiAgICAgaWYgKGZyb20u
aXNDYWxjdWxhdGVkKCkgfHwgdG8uaXNDYWxjdWxhdGVkKCkpCi0gICAgICAgIHJldHVybiBibGVu
ZE1peGVkVHlwZXMoZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAgICAgICAgcmV0dXJuIGJsZW5kTWl4
ZWRUeXBlcyhmcm9tLCB0bywgY29udGV4dCk7CiAKICAgICBpZiAoIWZyb20uaXNaZXJvKCkgJiYg
IXRvLmlzWmVybygpICYmIGZyb20udHlwZSgpICE9IHRvLnR5cGUoKSkKLSAgICAgICAgcmV0dXJu
IGJsZW5kTWl4ZWRUeXBlcyhmcm9tLCB0bywgcHJvZ3Jlc3MpOworICAgICAgICByZXR1cm4gYmxl
bmRNaXhlZFR5cGVzKGZyb20sIHRvLCBjb250ZXh0KTsKIAogICAgIExlbmd0aFR5cGUgcmVzdWx0
VHlwZSA9IHRvLnR5cGUoKTsKICAgICBpZiAodG8uaXNaZXJvKCkpCkBAIC0zMzMsMTcgKzMzNCwx
NyBAQCBMZW5ndGggYmxlbmQoY29uc3QgTGVuZ3RoJiBmcm9tLCBjb25zdCBMZW5ndGgmIHRvLCBk
b3VibGUgcHJvZ3Jlc3MpCiAgICAgaWYgKHJlc3VsdFR5cGUgPT0gTGVuZ3RoVHlwZTo6UGVyY2Vu
dCkgewogICAgICAgICBmbG9hdCBmcm9tUGVyY2VudCA9IGZyb20uaXNaZXJvKCkgPyAwIDogZnJv
bS5wZXJjZW50KCk7CiAgICAgICAgIGZsb2F0IHRvUGVyY2VudCA9IHRvLmlzWmVybygpID8gMCA6
IHRvLnBlcmNlbnQoKTsKLSAgICAgICAgcmV0dXJuIExlbmd0aChXZWJDb3JlOjpibGVuZChmcm9t
UGVyY2VudCwgdG9QZXJjZW50LCBwcm9ncmVzcyksIExlbmd0aFR5cGU6OlBlcmNlbnQpOworICAg
ICAgICByZXR1cm4gTGVuZ3RoKFdlYkNvcmU6OmJsZW5kKGZyb21QZXJjZW50LCB0b1BlcmNlbnQs
IGNvbnRleHQpLCBMZW5ndGhUeXBlOjpQZXJjZW50KTsKICAgICB9CiAKICAgICBmbG9hdCBmcm9t
VmFsdWUgPSBmcm9tLmlzWmVybygpID8gMCA6IGZyb20udmFsdWUoKTsKICAgICBmbG9hdCB0b1Zh
bHVlID0gdG8uaXNaZXJvKCkgPyAwIDogdG8udmFsdWUoKTsKLSAgICByZXR1cm4gTGVuZ3RoKFdl
YkNvcmU6OmJsZW5kKGZyb21WYWx1ZSwgdG9WYWx1ZSwgcHJvZ3Jlc3MpLCByZXN1bHRUeXBlKTsK
KyAgICByZXR1cm4gTGVuZ3RoKFdlYkNvcmU6OmJsZW5kKGZyb21WYWx1ZSwgdG9WYWx1ZSwgY29u
dGV4dCksIHJlc3VsdFR5cGUpOwogfQogCi1MZW5ndGggYmxlbmQoY29uc3QgTGVuZ3RoJiBmcm9t
LCBjb25zdCBMZW5ndGgmIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIFZhbHVlUmFuZ2UgdmFsdWVSYW5n
ZSkKK0xlbmd0aCBibGVuZChjb25zdCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGNv
bnN0IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQogewot
ICAgIGF1dG8gYmxlbmRlZCA9IGJsZW5kKGZyb20sIHRvLCBwcm9ncmVzcyk7CisgICAgYXV0byBi
bGVuZGVkID0gYmxlbmQoZnJvbSwgdG8sIGNvbnRleHQpOwogICAgIGlmICh2YWx1ZVJhbmdlID09
IFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSAmJiBibGVuZGVkLmlzTmVnYXRpdmUoKSkKICAgICAgICAg
cmV0dXJuIHsgMCwgZnJvbS5pc1plcm8gKCkgPyB0by50eXBlKCkgOiBmcm9tLnR5cGUoKSB9Owog
ICAgIHJldHVybiBibGVuZGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TGVuZ3RoLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguaAppbmRleCBhZjM5NjYw
M2E0ZmIxMzkwZDhlYzRmMmVhZDE5ODU0MWY5Yjg3NTdmLi40NTE4Nzk0OTBhYmNmYTU5YjE5ZWQ3
ZDc1NzcyNGYzOGUyZTVjZTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9M
ZW5ndGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguaApAQCAtNDksNiAr
NDksNyBAQCBlbnVtIFZhbHVlUmFuZ2UgewogICAgIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZQogfTsK
IAorc3RydWN0IEJsZW5kaW5nQ29udGV4dDsKIGNsYXNzIENhbGN1bGF0aW9uVmFsdWU7CiAKIHN0
cnVjdCBMZW5ndGggewpAQCAtMTM3LDggKzEzOCw4IEBAIHByaXZhdGU6CiB9OwogCiAvLyBCbGVu
ZCB0d28gbGVuZ3RocyB0byBwcm9kdWNlIGEgbmV3IGxlbmd0aCB0aGF0IGlzIGluIGJldHdlZW4g
dGhlbS4gVXNlZCBmb3IgYW5pbWF0aW9uLgotTGVuZ3RoIGJsZW5kKGNvbnN0IExlbmd0aCYgZnJv
bSwgY29uc3QgTGVuZ3RoJiB0bywgZG91YmxlIHByb2dyZXNzKTsKLUxlbmd0aCBibGVuZChjb25z
dCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGRvdWJsZSBwcm9ncmVzcywgVmFsdWVS
YW5nZSk7CitMZW5ndGggYmxlbmQoY29uc3QgTGVuZ3RoJiBmcm9tLCBjb25zdCBMZW5ndGgmIHRv
LCBjb25zdCBCbGVuZGluZ0NvbnRleHQmKTsKK0xlbmd0aCBibGVuZChjb25zdCBMZW5ndGgmIGZy
b20sIGNvbnN0IExlbmd0aCYgdG8sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYsIFZhbHVlUmFuZ2Up
OwogCiBVbmlxdWVBcnJheTxMZW5ndGg+IG5ld0Nvb3Jkc0FycmF5KGNvbnN0IFN0cmluZyYsIGlu
dCYgbGVuZ3RoKTsKIFVuaXF1ZUFycmF5PExlbmd0aD4gbmV3TGVuZ3RoQXJyYXkoY29uc3QgU3Ry
aW5nJiwgaW50JiBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TGVuZ3RoUG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aFBvaW50LmgKaW5k
ZXggZjY5NDgzM2Q4YzBhMTk2NDRjYTMxMTdhMWYwNTAwMTVkNzgyMmY5ZS4uZTcwMmY4YmM1ZGZj
MjkwMDhhY2ZiODA3ZTIyNzYxNGRmYmE0MWYzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTGVuZ3RoUG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5n
dGhQb2ludC5oCkBAIC0yOSw2ICsyOSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3Ry
dWN0IEJsZW5kaW5nQ29udGV4dDsKKwogc3RydWN0IExlbmd0aFBvaW50IHsKIHB1YmxpYzoKICAg
ICBMZW5ndGhQb2ludCgpCkBAIC02Myw5ICs2NSw5IEBAIHByaXZhdGU6CiAgICAgTGVuZ3RoIG1f
eTsKIH07CiAKLWlubGluZSBMZW5ndGhQb2ludCBibGVuZChjb25zdCBMZW5ndGhQb2ludCYgZnJv
bSwgY29uc3QgTGVuZ3RoUG9pbnQmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitpbmxpbmUgTGVuZ3Ro
UG9pbnQgYmxlbmQoY29uc3QgTGVuZ3RoUG9pbnQmIGZyb20sIGNvbnN0IExlbmd0aFBvaW50JiB0
bywgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBMZW5ndGhQ
b2ludChibGVuZChmcm9tLngoKSwgdG8ueCgpLCBwcm9ncmVzcyksIGJsZW5kKGZyb20ueSgpLCB0
by55KCksIHByb2dyZXNzKSk7CisgICAgcmV0dXJuIExlbmd0aFBvaW50KGJsZW5kKGZyb20ueCgp
LCB0by54KCksIGNvbnRleHQpLCBibGVuZChmcm9tLnkoKSwgdG8ueSgpLCBjb250ZXh0KSk7CiB9
CiAKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBM
ZW5ndGhQb2ludCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3Ro
U2l6ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoU2l6ZS5oCmluZGV4IGJkNTc0
MWExYWQ5ODQ3NTY3MGFkZjljOTI2ZTQ1NTE1YWE0YTM0NmIuLjNhYzIxYTQ3NDRiZjFmNzFkODdk
YTA3ODdmNWEyNDIzYmZjNTVmZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0xlbmd0aFNpemUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGhTaXplLmgK
QEAgLTIzLDYgKzIzLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQmxlbmRp
bmdDb250ZXh0OworCiBzdHJ1Y3QgTGVuZ3RoU2l6ZSB7CiAgICAgTGVuZ3RoIHdpZHRoOwogICAg
IExlbmd0aCBoZWlnaHQ7CkBAIC0zNiw5ICszOCw5IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IExlbmd0aFNpemUmIGEsIGNvbnN0IExlbmd0aFNpemUmIGIpCiAgICAgcmV0
dXJuIGEud2lkdGggPT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PSBiLmhlaWdodDsKIH0KIAotaW5s
aW5lIExlbmd0aFNpemUgYmxlbmQoY29uc3QgTGVuZ3RoU2l6ZSYgZnJvbSwgY29uc3QgTGVuZ3Ro
U2l6ZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK2lubGluZSBMZW5ndGhTaXplIGJsZW5kKGNvbnN0
IExlbmd0aFNpemUmIGZyb20sIGNvbnN0IExlbmd0aFNpemUmIHRvLCBjb25zdCBCbGVuZGluZ0Nv
bnRleHQmIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIHsgYmxlbmQoZnJvbS53aWR0aCwgdG8ud2lk
dGgsIHByb2dyZXNzKSwgYmxlbmQoZnJvbS5oZWlnaHQsIHRvLmhlaWdodCwgcHJvZ3Jlc3MpIH07
CisgICAgcmV0dXJuIHsgYmxlbmQoZnJvbS53aWR0aCwgdG8ud2lkdGgsIGNvbnRleHQpLCBibGVu
ZChmcm9tLmhlaWdodCwgdG8uaGVpZ2h0LCBjb250ZXh0KSB9OwogfQogCiBXVEY6OlRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgTGVuZ3RoU2l6ZSYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvblV0aWxp
dGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvblV0aWxp
dGllcy5oCmluZGV4IDM0YmJiZTllOGRlYzBiM2I2ZTg1NTFhOTgyMTE1ODFhNGVkZjM1MjMuLmVj
NDA5NzVkYmZmZGM1ODEwNmFlMWRhZWQ2YmFlOTJlMTdmNjY1OTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmgKQEAg
LTMwLDQxICszMCw1MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlubGluZSBpbnQgYmxl
bmQoaW50IGZyb20sIGludCB0bywgZG91YmxlIHByb2dyZXNzKQorc3RydWN0IEJsZW5kaW5nQ29u
dGV4dCB7CisgICAgZG91YmxlIHByb2dyZXNzOworICAgIGJvb2wgaXNEaXNjcmV0ZSB7IGZhbHNl
IH07CisKKyAgICBCbGVuZGluZ0NvbnRleHQoZG91YmxlIHByb2dyZXNzLCBib29sIGlzRGlzY3Jl
dGUgPSBmYWxzZSkKKyAgICAgICAgOiBwcm9ncmVzcyhwcm9ncmVzcykKKyAgICAgICAgLCBpc0Rp
c2NyZXRlKGlzRGlzY3JldGUpCisgICAgeworICAgIH0KK307CisKK2lubGluZSBpbnQgYmxlbmQo
aW50IGZyb20sIGludCB0bywgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogeyAgCi0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obHJvdW5kKHN0YXRpY19jYXN0PGRvdWJsZT4oZnJv
bSkgKyBzdGF0aWNfY2FzdDxkb3VibGU+KHRvIC0gZnJvbSkgKiBwcm9ncmVzcykpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZChzdGF0aWNfY2FzdDxkb3VibGU+KGZyb20pICsg
c3RhdGljX2Nhc3Q8ZG91YmxlPih0byAtIGZyb20pICogY29udGV4dC5wcm9ncmVzcykpOwogfQog
Ci1pbmxpbmUgdW5zaWduZWQgYmxlbmQodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIGRvdWJs
ZSBwcm9ncmVzcykKK2lubGluZSB1bnNpZ25lZCBibGVuZCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCB0bywgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obHJvdW5kKHRvID4gZnJvbSA/IHN0YXRpY19jYXN0PGRvdWJsZT4o
ZnJvbSkgKyBzdGF0aWNfY2FzdDxkb3VibGU+KHRvIC0gZnJvbSkgKiBwcm9ncmVzcyA6IHN0YXRp
Y19jYXN0PGRvdWJsZT4oZnJvbSkgLSBzdGF0aWNfY2FzdDxkb3VibGU+KGZyb20gLSB0bykgKiBw
cm9ncmVzcykpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obHJvdW5kKHRvID4g
ZnJvbSA/IHN0YXRpY19jYXN0PGRvdWJsZT4oZnJvbSkgKyBzdGF0aWNfY2FzdDxkb3VibGU+KHRv
IC0gZnJvbSkgKiBjb250ZXh0LnByb2dyZXNzIDogc3RhdGljX2Nhc3Q8ZG91YmxlPihmcm9tKSAt
IHN0YXRpY19jYXN0PGRvdWJsZT4oZnJvbSAtIHRvKSAqIGNvbnRleHQucHJvZ3Jlc3MpKTsKIH0K
IAotaW5saW5lIGRvdWJsZSBibGVuZChkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUgcHJv
Z3Jlc3MpCitpbmxpbmUgZG91YmxlIGJsZW5kKGRvdWJsZSBmcm9tLCBkb3VibGUgdG8sIGNvbnN0
IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsgIAotICAgIHJldHVybiBmcm9tICsgKHRvIC0g
ZnJvbSkgKiBwcm9ncmVzczsKKyAgICByZXR1cm4gZnJvbSArICh0byAtIGZyb20pICogY29udGV4
dC5wcm9ncmVzczsKIH0KIAotaW5saW5lIGZsb2F0IGJsZW5kKGZsb2F0IGZyb20sIGZsb2F0IHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCitpbmxpbmUgZmxvYXQgYmxlbmQoZmxvYXQgZnJvbSwgZmxvYXQg
dG8sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsgIAotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4oZnJvbSArICh0byAtIGZyb20pICogcHJvZ3Jlc3MpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4oZnJvbSArICh0byAtIGZyb20pICogY29udGV4dC5wcm9ncmVz
cyk7CiB9CiAKLWlubGluZSBMYXlvdXRVbml0IGJsZW5kKExheW91dFVuaXQgZnJvbSwgTGF5b3V0
VW5pdCB0bywgZG91YmxlIHByb2dyZXNzKQoraW5saW5lIExheW91dFVuaXQgYmxlbmQoTGF5b3V0
VW5pdCBmcm9tLCBMYXlvdXRVbml0IHRvLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQp
CiB7Ci0gICAgcmV0dXJuIExheW91dFVuaXQoYmxlbmQoZnJvbS50b0Zsb2F0KCksIHRvLnRvRmxv
YXQoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gTGF5b3V0VW5pdChibGVuZChmcm9tLnRvRmxv
YXQoKSwgdG8udG9GbG9hdCgpLCBjb250ZXh0KSk7CiB9CiAKLWlubGluZSBJbnRQb2ludCBibGVu
ZChjb25zdCBJbnRQb2ludCYgZnJvbSwgY29uc3QgSW50UG9pbnQmIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCitpbmxpbmUgSW50UG9pbnQgYmxlbmQoY29uc3QgSW50UG9pbnQmIGZyb20sIGNvbnN0IElu
dFBvaW50JiB0bywgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVy
biBJbnRQb2ludChibGVuZChmcm9tLngoKSwgdG8ueCgpLCBwcm9ncmVzcyksCi0gICAgICAgIGJs
ZW5kKGZyb20ueSgpLCB0by55KCksIHByb2dyZXNzKSk7CisgICAgcmV0dXJuIEludFBvaW50KGJs
ZW5kKGZyb20ueCgpLCB0by54KCksIGNvbnRleHQpLAorICAgICAgICBibGVuZChmcm9tLnkoKSwg
dG8ueSgpLCBjb250ZXh0KSk7CiB9CiAKLWlubGluZSBMYXlvdXRQb2ludCBibGVuZChjb25zdCBM
YXlvdXRQb2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
CitpbmxpbmUgTGF5b3V0UG9pbnQgYmxlbmQoY29uc3QgTGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0
IExheW91dFBvaW50JiB0bywgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewotICAg
IHJldHVybiBMYXlvdXRQb2ludChibGVuZChmcm9tLngoKSwgdG8ueCgpLCBwcm9ncmVzcyksCi0g
ICAgICAgIGJsZW5kKGZyb20ueSgpLCB0by55KCksIHByb2dyZXNzKSk7CisgICAgcmV0dXJuIExh
eW91dFBvaW50KGJsZW5kKGZyb20ueCgpLCB0by54KCksIGNvbnRleHQpLAorICAgICAgICBibGVu
ZChmcm9tLnkoKSwgdG8ueSgpLCBjb250ZXh0KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxl
bmRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGlu
Zy5jcHAKaW5kZXggNzE3OTA4MTJjYjI1NGMwY2M1YzY2ZTVkNjZhOTk2MjZmMjhjMjIwMS4uYjll
N2RhYmQyOWQ5NTRiYTBlMTU3YWY5NTU5NzE1ZWY3MmY5ZGQ2ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAKQEAgLTkwLDQxICs5
MCw0MSBAQCBDb2xvciBibGVuZFdpdGhXaGl0ZShjb25zdCBDb2xvciYgY29sb3IpCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENv
bG9yJiB0bywgZG91YmxlIHByb2dyZXNzKQorQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20s
IGNvbnN0IENvbG9yJiB0bywgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAg
IC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4K
ICAgICAvLyBXZSBuZWVkIHRvIHByZXNlcnZlIHRoZSBzdGF0ZSBvZiB0aGUgdmFsaWQgZmxhZyBh
dCB0aGUgZW5kIG9mIHRoZSBhbmltYXRpb24KLSAgICBpZiAocHJvZ3Jlc3MgPT0gMSAmJiAhdG8u
aXNWYWxpZCgpKQorICAgIGlmIChjb250ZXh0LnByb2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQo
KSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGF1dG8gcHJlbXVsdGlwbGllZEZyb20gPSBw
cmVtdWx0aXBsaWVkKGZyb20udG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkpOwogICAg
IGF1dG8gcHJlbXVsdGlwbGllZFRvID0gcHJlbXVsdGlwbGllZCh0by50b0NvbG9yVHlwZUxvc3N5
PFNSR0JBPGZsb2F0Pj4oKSk7CiAKICAgICBhdXRvIHByZW11bHRpcGxpZWRCbGVuZGVkID0gbWFr
ZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PigKLSAgICAgICAgV2ViQ29yZTo6
YmxlbmQocHJlbXVsdGlwbGllZEZyb20ucmVkLCBwcmVtdWx0aXBsaWVkVG8ucmVkLCBwcm9ncmVz
cyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmdyZWVuLCBwcmVt
dWx0aXBsaWVkVG8uZ3JlZW4sIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJl
bXVsdGlwbGllZEZyb20uYmx1ZSwgcHJlbXVsdGlwbGllZFRvLmJsdWUsIHByb2dyZXNzKSwKLSAg
ICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20uYWxwaGEsIHByZW11bHRpcGxp
ZWRUby5hbHBoYSwgcHJvZ3Jlc3MpCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxp
ZWRGcm9tLnJlZCwgcHJlbXVsdGlwbGllZFRvLnJlZCwgY29udGV4dC5wcm9ncmVzcyksCisgICAg
ICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmdyZWVuLCBwcmVtdWx0aXBsaWVk
VG8uZ3JlZW4sIGNvbnRleHQucHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVt
dWx0aXBsaWVkRnJvbS5ibHVlLCBwcmVtdWx0aXBsaWVkVG8uYmx1ZSwgY29udGV4dC5wcm9ncmVz
cyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmFscGhhLCBwcmVt
dWx0aXBsaWVkVG8uYWxwaGEsIGNvbnRleHQucHJvZ3Jlc3MpCiAgICAgKTsKIAogICAgIHJldHVy
biBjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KHVucHJlbXVsdGlwbGllZChwcmVtdWx0aXBs
aWVkQmxlbmRlZCkpOwogfQogCi1Db2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBD
b2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitDb2xvciBibGVu
ZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBj
b25zdCBCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgLy8gRklYTUU6IEV4dGVuZGVk
Q29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgogICAgIC8vIFdlIG5lZWQgdG8g
cHJlc2VydmUgdGhlIHN0YXRlIG9mIHRoZSB2YWxpZCBmbGFnIGF0IHRoZSBlbmQgb2YgdGhlIGFu
aW1hdGlvbgotICAgIGlmIChwcm9ncmVzcyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCisgICAgaWYg
KGNvbnRleHQucHJvZ3Jlc3MgPT0gMSAmJiAhdG8uaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4g
eyB9OwogCiAgICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9Db2xvclR5cGVMb3NzeTxTUkdCQTxm
bG9hdD4+KCk7CiAgICAgYXV0byB0b1NSR0IgPSB0by50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZs
b2F0Pj4oKTsKIAogICAgIGF1dG8gYmxlbmRlZCA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5n
PFNSR0JBPGZsb2F0Pj4oCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLnJlZCwgdG9T
UkdCLnJlZCwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ncmVl
biwgdG9TUkdCLmdyZWVuLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21T
UkdCLmJsdWUsIHRvU1JHQi5ibHVlLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5k
KGZyb21TUkdCLmFscGhhLCB0b1NSR0IuYWxwaGEsIHByb2dyZXNzKQorICAgICAgICBXZWJDb3Jl
OjpibGVuZChmcm9tU1JHQi5yZWQsIHRvU1JHQi5yZWQsIGNvbnRleHQucHJvZ3Jlc3MpLAorICAg
ICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ncmVlbiwgdG9TUkdCLmdyZWVuLCBjb250ZXh0
LnByb2dyZXNzKSwKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYmx1ZSwgdG9TUkdC
LmJsdWUsIGNvbnRleHQucHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JH
Qi5hbHBoYSwgdG9TUkdCLmFscGhhLCBjb250ZXh0LnByb2dyZXNzKQogICAgICk7CiAKICAgICBy
ZXR1cm4gY29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+PihibGVuZGVkKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuaAppbmRleCA0YmM4ZTBm
MzU5MWU0ZWUwMDYxYTk4MmMwMGIxNGMwODMwMTQwYjNiLi5jYmNlOGFkMmZiNDczMjBiN2ViZTcx
NmNhMDIyOTIyMThmNmE2OGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvckJsZW5kaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JCbGVuZGluZy5oCkBAIC0yNyw2ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorc3RydWN0IEJsZW5kaW5nQ29udGV4dDsKIGNsYXNzIENvbG9yOwogCiAvLyBOT1RF
OiBUaGVzZSBmdW5jdGlvbnMgZG8gYSBsb3NzeSBjb252ZXJzaW9uIHRvIDgtYml0IHNSR0JBIGJl
Zm9yZSBibGVuZGluZy4KQEAgLTM3LDcgKzM4LDcgQEAgQ29sb3IgYmxlbmRTb3VyY2VPdmVyKGNv
bnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKIC8vIEJlc3Bva2UgIndoaXRlbmluZyIgYWxnb3Jp
dGhtIHVzZWQgYnkgUmVuZGVyVGhlbWU6OnRyYW5zZm9ybVNlbGVjdGlvbkJhY2tncm91bmRDb2xv
ci4KIENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJik7CiAKLUNvbG9yIGJsZW5kKGNv
bnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcyk7Ci1Db2xv
ciBibGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3Im
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpOworQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNv
bnN0IENvbG9yJiB0bywgY29uc3QgQmxlbmRpbmdDb250ZXh0Jik7CitDb2xvciBibGVuZFdpdGhv
dXRQcmVtdWx0aXBseShjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBjb25zdCBC
bGVuZGluZ0NvbnRleHQmKTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2Eu
bW0KaW5kZXggY2JjODRmZjU0OGQ5NjM3ZjU2MjkxOTI4NzllMTQwODNlZGJlM2YzYi4uMDAwZDkz
NzAzNzRiYmE5YjQ1YWFmNWRiMzdlZTM2OWJiNzUwNzM0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9y
bUNBRmlsdGVyc0NvY29hLm1tCkBAIC00NjMsMTggKzQ2MywxOSBAQCBSZXRhaW5QdHI8TlNWYWx1
ZT4gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoRmlsdGVyT3Bl
cmF0aW9uOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewogICAgICAgICBkb3Vi
bGUgdCA9IGZpbHRlck9wZXJhdGlvbiA/IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24+KCpmaWx0ZXJPcGVyYXRpb24pLmFtb3VudCgpIDogMDsKICAgICAgICAgdCA9IHN0
ZDo6bWluKHN0ZDo6bWF4KDAuMCwgdCksIDEuMCk7CisgICAgICAgIEJsZW5kaW5nQ29udGV4dCBj
b250ZXh0IHsgdCB9OwogICAgICAgICBDQUNvbG9yTWF0cml4IGNvbG9yTWF0cml4ID0gewotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0
YW50c1swXVswXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzBdWzBdLCB0KSksCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBdWzFd
LCBzZXBpYUZ1bGxDb25zdGFudHNbMF1bMV0sIHQpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0
PGZsb2F0PihXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMF1bMl0sIHNlcGlhRnVs
bENvbnN0YW50c1swXVsyXSwgdCkpLCAwLCAwLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1swXVswXSwgc2VwaWFGdWxsQ29u
c3RhbnRzWzBdWzBdLCBjb250ZXh0KSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4o
V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBdWzFdLCBzZXBpYUZ1bGxDb25zdGFu
dHNbMF1bMV0sIGNvbnRleHQpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJD
b3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMF1bMl0sIHNlcGlhRnVsbENvbnN0YW50c1sw
XVsyXSwgY29udGV4dCkpLCAwLCAwLAogICAgICAgICAgICAgCi0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzFdWzBdLCBzZXBp
YUZ1bGxDb25zdGFudHNbMV1bMF0sIHQpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0
PihXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMV1bMV0sIHNlcGlhRnVsbENvbnN0
YW50c1sxXVsxXSwgdCkpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6
OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1sxXVsyXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzFdWzJd
LCB0KSksIDAsIDAsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6Ymxl
bmQoc2VwaWFOb25lQ29uc3RhbnRzWzFdWzBdLCBzZXBpYUZ1bGxDb25zdGFudHNbMV1bMF0sIGNv
bnRleHQpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZChz
ZXBpYU5vbmVDb25zdGFudHNbMV1bMV0sIHNlcGlhRnVsbENvbnN0YW50c1sxXVsxXSwgY29udGV4
dCkpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlh
Tm9uZUNvbnN0YW50c1sxXVsyXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzFdWzJdLCBjb250ZXh0KSks
IDAsIDAsCiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJD
b3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMl1bMF0sIHNlcGlhRnVsbENvbnN0YW50c1sy
XVswXSwgdCkpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5k
KHNlcGlhTm9uZUNvbnN0YW50c1syXVsxXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzJdWzFdLCB0KSks
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25l
Q29uc3RhbnRzWzJdWzJdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1bMl0sIHQpKSwgMCwgMCwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25z
dGFudHNbMl1bMF0sIHNlcGlhRnVsbENvbnN0YW50c1syXVswXSwgY29udGV4dCkpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50
c1syXVsxXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzJdWzFdLCBjb250ZXh0KSksCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzJd
WzJdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1bMl0sIGNvbnRleHQpKSwgMCwgMCwKICAgICAgICAg
ICAgIDAsIDAsIDAsIDEsIDAKICAgICAgICAgfTsKICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZh
bHVlV2l0aENBQ29sb3JNYXRyaXg6Y29sb3JNYXRyaXhdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3Bw
CmluZGV4IDNlOTFjNDE3YTU5YWFkYzkxYzgxMGY2MWU2ZjE2ZjdhNThiOGUxZTAuLmNlZGQwNTYw
NjAzYTJjOWNjMjhlNGNhNTZhZTI2OTcxN2YyNDc0NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5j
cHAKQEAgLTc0LDE3ICs3NCwxNyBAQCB2b2lkIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6bG9h
ZEV4dGVybmFsRG9jdW1lbnRJZk5lZWRlZChDYWNoZWRSZXNvdXJjZUxvYWRlcgogICAgIG1fY2Fj
aGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UtPmxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIsIG9wdGlv
bnMpOwogfQogCi1SZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uOjpibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9n
cmVzcywgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2gpCitSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRp
b24qIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCwgYm9vbCBibGVuZFRvUGFz
c3Rocm91Z2gpCiB7CiAgICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQog
ICAgICAgICByZXR1cm4gdGhpczsKICAgICAKICAgICBpZiAoYmxlbmRUb1Bhc3N0aHJvdWdoKQot
ICAgICAgICByZXR1cm4gQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKFdl
YkNvcmU6OmJsZW5kKG1fYW1vdW50LCBwYXNzdGhyb3VnaEFtb3VudCgpLCBwcm9ncmVzcyksIG1f
dHlwZSk7CisgICAgICAgIHJldHVybiBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpj
cmVhdGUoV2ViQ29yZTo6YmxlbmQobV9hbW91bnQsIHBhc3N0aHJvdWdoQW1vdW50KCksIGNvbnRl
eHQpLCBtX3R5cGUpOwogICAgICAgICAKICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uKiBmcm9tT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbj4oZnJvbSk7CiAgICAgZG91YmxlIGZyb21BbW91bnQgPSBmcm9tT3BlcmF0aW9u
ID8gZnJvbU9wZXJhdGlvbi0+YW1vdW50KCkgOiBwYXNzdGhyb3VnaEFtb3VudCgpOwotICAgIHJl
dHVybiBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6Ymxl
bmQoZnJvbUFtb3VudCwgbV9hbW91bnQsIHByb2dyZXNzKSwgbV90eXBlKTsKKyAgICByZXR1cm4g
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKGZy
b21BbW91bnQsIG1fYW1vdW50LCBjb250ZXh0KSwgbV90eXBlKTsKIH0KIAogYm9vbCBCYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4mIGNv
bG9yKSBjb25zdApAQCAtMTM3LDE3ICsxMzcsMTcgQEAgZG91YmxlIEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb246OnBhc3N0aHJvdWdoQW1vdW50KCkgY29uc3QKICAgICB9CiB9CiAKLVJl
ZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b246OmJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBi
b29sIGJsZW5kVG9QYXNzdGhyb3VnaCkKK1JlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEJhc2ljQ29t
cG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OmJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlv
biogZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0LCBib29sIGJsZW5kVG9QYXNz
dGhyb3VnaCkKIHsKICAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgqdGhpcykpCiAg
ICAgICAgIHJldHVybiB0aGlzOwogICAgIAogICAgIGlmIChibGVuZFRvUGFzc3Rocm91Z2gpCi0g
ICAgICAgIHJldHVybiBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVh
dGUoV2ViQ29yZTo6YmxlbmQobV9hbW91bnQsIHBhc3N0aHJvdWdoQW1vdW50KCksIHByb2dyZXNz
KSwgbV90eXBlKTsKKyAgICAgICAgcmV0dXJuIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChtX2Ftb3VudCwgcGFzc3Rocm91Z2hBbW91
bnQoKSwgY29udGV4dCksIG1fdHlwZSk7CiAgICAgICAgIAogICAgIGNvbnN0IEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIGZyb21PcGVyYXRpb24gPSBkb3duY2FzdDxCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmcm9tKTsKICAgICBkb3VibGUgZnJv
bUFtb3VudCA9IGZyb21PcGVyYXRpb24gPyBmcm9tT3BlcmF0aW9uLT5hbW91bnQoKSA6IHBhc3N0
aHJvdWdoQW1vdW50KCk7Ci0gICAgcmV0dXJuIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChmcm9tQW1vdW50LCBtX2Ftb3VudCwgcHJv
Z3Jlc3MpLCBtX3R5cGUpOworICAgIHJldHVybiBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbUFtb3VudCwgbV9hbW91bnQsIGNv
bnRleHQpLCBtX3R5cGUpOwogfQogCiBib29sIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb246OnRyYW5zZm9ybUNvbG9yKFNSR0JBPGZsb2F0PiYgY29sb3IpIGNvbnN0CkBAIC0y
MTUsNyArMjE1LDcgQEAgYm9vbCBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246Om9wZXJh
dG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24KICAgICByZXR1cm4gdHJ1ZTsK
IH0KICAgICAKLVJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEludmVydExpZ2h0bmVzc0ZpbHRlck9w
ZXJhdGlvbjo6YmxlbmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUsIGJvb2wp
CitSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246
OmJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0
JiwgYm9vbCkKIHsKICAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgqdGhpcykpCiAg
ICAgICAgIHJldHVybiB0aGlzOwpAQCAtMzMxLDcgKzMzMSw3IEBAIGJvb2wgQmx1ckZpbHRlck9w
ZXJhdGlvbjo6b3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbikgY29u
c3QKICAgICByZXR1cm4gbV9zdGREZXZpYXRpb24gPT0gZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJh
dGlvbj4ob3BlcmF0aW9uKS5zdGREZXZpYXRpb24oKTsKIH0KICAgICAKLVJlZlB0cjxGaWx0ZXJP
cGVyYXRpb24+IEJsdXJGaWx0ZXJPcGVyYXRpb246OmJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlv
biogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCkKK1JlZlB0
cjxGaWx0ZXJPcGVyYXRpb24+IEJsdXJGaWx0ZXJPcGVyYXRpb246OmJsZW5kKGNvbnN0IEZpbHRl
ck9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0LCBib29sIGJs
ZW5kVG9QYXNzdGhyb3VnaCkKIHsKICAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgq
dGhpcykpCiAgICAgICAgIHJldHVybiB0aGlzOwpAQCAtMzM5LDExICszMzksMTEgQEAgUmVmUHRy
PEZpbHRlck9wZXJhdGlvbj4gQmx1ckZpbHRlck9wZXJhdGlvbjo6YmxlbmQoY29uc3QgRmlsdGVy
T3BlcmF0aW9uKiBmcm9tLAogICAgIExlbmd0aFR5cGUgbGVuZ3RoVHlwZSA9IG1fc3RkRGV2aWF0
aW9uLnR5cGUoKTsKIAogICAgIGlmIChibGVuZFRvUGFzc3Rocm91Z2gpCi0gICAgICAgIHJldHVy
biBCbHVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQobV9zdGREZXZpYXRp
b24sIExlbmd0aChsZW5ndGhUeXBlKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgcmV0dXJuIEJsdXJG
aWx0ZXJPcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChtX3N0ZERldmlhdGlvbiwgTGVu
Z3RoKGxlbmd0aFR5cGUpLCBjb250ZXh0KSk7CiAKICAgICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0
aW9uKiBmcm9tT3BlcmF0aW9uID0gZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJhdGlvbj4oZnJvbSk7
CiAgICAgTGVuZ3RoIGZyb21MZW5ndGggPSBmcm9tT3BlcmF0aW9uID8gZnJvbU9wZXJhdGlvbi0+
bV9zdGREZXZpYXRpb24gOiBMZW5ndGgobGVuZ3RoVHlwZSk7Ci0gICAgcmV0dXJuIEJsdXJGaWx0
ZXJPcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChmcm9tTGVuZ3RoLCBtX3N0ZERldmlh
dGlvbiwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gQmx1ckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRl
KFdlYkNvcmU6OmJsZW5kKGZyb21MZW5ndGgsIG1fc3RkRGV2aWF0aW9uLCBjb250ZXh0KSk7CiB9
CiAgICAgCiBib29sIERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3Qg
RmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24pIGNvbnN0CkBAIC0zNTQsMTYgKzM1NCwxNiBAQCBi
b29sIERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3Bl
cmF0aW9uJiBvcGVyYXRpb24pIGNvbgogICAgIHJldHVybiBtX2xvY2F0aW9uID09IG90aGVyLm1f
bG9jYXRpb24gJiYgbV9zdGREZXZpYXRpb24gPT0gb3RoZXIubV9zdGREZXZpYXRpb24gJiYgbV9j
b2xvciA9PSBvdGhlci5tX2NvbG9yOwogfQogICAgIAotUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4g
RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6YmxlbmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBm
cm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoKQorUmVmUHRyPEZp
bHRlck9wZXJhdGlvbj4gRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6YmxlbmQoY29uc3QgRmls
dGVyT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQsIGJvb2wg
YmxlbmRUb1Bhc3N0aHJvdWdoKQogewogICAgIGlmIChmcm9tICYmICFmcm9tLT5pc1NhbWVUeXBl
KCp0aGlzKSkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICBpZiAoYmxlbmRUb1Bhc3N0aHJv
dWdoKQogICAgICAgICByZXR1cm4gRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKAot
ICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQobV9sb2NhdGlvbiwgSW50UG9pbnQoKSwgcHJvZ3Jl
c3MpLAotICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQobV9zdGREZXZpYXRpb24sIDAsIHByb2dy
ZXNzKSwKLSAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKG1fY29sb3IsIENvbG9yOjp0cmFuc3Bh
cmVudEJsYWNrLCBwcm9ncmVzcykpOworICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQobV9sb2Nh
dGlvbiwgSW50UG9pbnQoKSwgY29udGV4dCksCisgICAgICAgICAgICBXZWJDb3JlOjpibGVuZCht
X3N0ZERldmlhdGlvbiwgMCwgY29udGV4dCksCisgICAgICAgICAgICBXZWJDb3JlOjpibGVuZCht
X2NvbG9yLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjaywgY29udGV4dCkpOwogCiAgICAgY29uc3Qg
RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiogZnJvbU9wZXJhdGlvbiA9IGRvd25jYXN0PERyb3BT
aGFkb3dGaWx0ZXJPcGVyYXRpb24+KGZyb20pOwogICAgIEludFBvaW50IGZyb21Mb2NhdGlvbiA9
IGZyb21PcGVyYXRpb24gPyBmcm9tT3BlcmF0aW9uLT5sb2NhdGlvbigpIDogSW50UG9pbnQoKTsK
QEAgLTM3MSw5ICszNzEsOSBAQCBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBEcm9wU2hhZG93Rmls
dGVyT3BlcmF0aW9uOjpibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qCiAgICAgQ29sb3IgZnJv
bUNvbG9yID0gZnJvbU9wZXJhdGlvbiA/IGZyb21PcGVyYXRpb24tPmNvbG9yKCkgOiBDb2xvcjo6
dHJhbnNwYXJlbnRCbGFjazsKICAgICAKICAgICByZXR1cm4gRHJvcFNoYWRvd0ZpbHRlck9wZXJh
dGlvbjo6Y3JlYXRlKAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tTG9jYXRpb24sIG1fbG9j
YXRpb24sIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVN0ZERldmlhdGlv
biwgbV9zdGREZXZpYXRpb24sIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJv
bUNvbG9yLCBtX2NvbG9yLCBwcm9ncmVzcykpOworICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9t
TG9jYXRpb24sIG1fbG9jYXRpb24sIGNvbnRleHQpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChm
cm9tU3RkRGV2aWF0aW9uLCBtX3N0ZERldmlhdGlvbiwgY29udGV4dCksCisgICAgICAgIFdlYkNv
cmU6OmJsZW5kKGZyb21Db2xvciwgbV9jb2xvciwgY29udGV4dCkpOwogfQogCiBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIGZpbHRl
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCmluZGV4IGUwMTUwZjgwYTJlMWRkOTcwZWMzOTY5YzZmYWZi
YjQ2ZGVkNDc5YWYuLjUxMzViYjAyYTQwMjJkYzViYjRjOTA0NDkxOGNhZjc1NGQwODI3M2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJPcGVyYXRpb24uaApAQCAtNDIsNiArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIC8vIENTUyBGaWx0ZXJzCiAKK3N0cnVjdCBCbGVuZGluZ0NvbnRleHQ7CiBjbGFzcyBDYWNo
ZWRSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlOwogY2xh
c3MgRmlsdGVyRWZmZWN0OwpAQCAtNzQsNyArNzUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIG9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJikgY29uc3QgPSAwOwogICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG8pIGNvbnN0IHsgcmV0dXJuICEo
KnRoaXMgPT0gbyk7IH0KIAotICAgIHZpcnR1YWwgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxl
bmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiAvKmZyb20qLywgZG91YmxlIC8qcHJvZ3Jlc3MqLywg
Ym9vbCAvKmJsZW5kVG9QYXNzdGhyb3VnaCovID0gZmFsc2UpCisgICAgdmlydHVhbCBSZWZQdHI8
RmlsdGVyT3BlcmF0aW9uPiBibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIC8qZnJvbSovLCBj
b25zdCBCbGVuZGluZ0NvbnRleHQmLCBib29sIC8qYmxlbmRUb1Bhc3N0aHJvdWdoKi8gPSBmYWxz
ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTIxNSw3ICsyMTYs
NyBAQCBwdWJsaWM6CiAKICAgICBkb3VibGUgYW1vdW50KCkgY29uc3QgeyByZXR1cm4gbV9hbW91
bnQ7IH0KIAotICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kKGNvbnN0IEZpbHRlck9w
ZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9
IGZhbHNlKSBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZChjb25z
dCBGaWx0ZXJPcGVyYXRpb24qIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYsIGJvb2wgYmxl
bmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb24mKSBjb25zdCBvdmVycmlkZTsKQEAgLTI1
MCw3ICsyNTEsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGFmZmVjdHNPcGFjaXR5KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV90eXBlID09IE9QQUNJVFk7IH0KIAotICAgIFJlZlB0cjxGaWx0
ZXJPcGVyYXRpb24+IGJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHBy
b2dyZXNzLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKSBvdmVycmlkZTsKKyAgICBS
ZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZyb20s
IGNvbnN0IEJsZW5kaW5nQ29udGV4dCYsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2Up
IG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGaWx0ZXJP
cGVyYXRpb24mKSBjb25zdCBvdmVycmlkZTsKQEAgLTI4MCw3ICsyODEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlv
bigpKTsKICAgICB9CiAKLSAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZChjb25zdCBG
aWx0ZXJPcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvUGFzc3Ro
cm91Z2ggPSBmYWxzZSkgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxl
bmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmLCBi
b29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJikgY29uc3QgZmluYWw7CkBA
IC0zMTEsNyArMzEyLDcgQEAgcHVibGljOgogICAgIGJvb2wgYWZmZWN0c09wYWNpdHkoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBtb3Zlc1BpeGVscygpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+
IGJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29s
IGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKSBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVy
T3BlcmF0aW9uPiBibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZyb20sIGNvbnN0IEJsZW5k
aW5nQ29udGV4dCYsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpIG92ZXJyaWRlOwog
CiBwcml2YXRlOgogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb24mKSBj
b25zdCBvdmVycmlkZTsKQEAgLTM0Niw3ICszNDcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBhZmZl
Y3RzT3BhY2l0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICBib29sIG1v
dmVzUGl4ZWxzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgUmVmUHRy
PEZpbHRlck9wZXJhdGlvbj4gYmxlbmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmcm9tLCBkb3Vi
bGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpIG92ZXJyaWRlOwor
ICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiog
ZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiwgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2ggPSBm
YWxzZSkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZp
bHRlck9wZXJhdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9JZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9JZGVudGl0
eVRyYW5zZm9ybU9wZXJhdGlvbi5oCmluZGV4IDAzZDkyODA5NzQxYTA1Y2Y4MzBmNjM0YzdiZjU5
MmU2ZGQ1YWEzMjMuLmY0ZTBiMjNlYjdiOTM1YThiYmRjN2Q1ZTVjOTAzOTJlZjE0NWE1YzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvSWRl
bnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmgKQEAgLTI5LDYg
KzI5LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQmxlbmRpbmdDb250ZXh0
OworCiBjbGFzcyBJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbiBmaW5hbCA6IHB1YmxpYyBUcmFu
c2Zvcm1PcGVyYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8SWRlbnRpdHlUcmFuc2Zv
cm1PcGVyYXRpb24+IGNyZWF0ZSgpCkBAIC01NCw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVu
ZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qLCBkb3VibGUsIGJvb2wgPSBmYWxzZSkgb3ZlcnJp
ZGUKKyAgICBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb24qLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmLCBib29sID0gZmFsc2UpIG92ZXJyaWRlCiAg
ICAgewogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXgzRFRyYW5zZm9ybU9wZXJh
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01h
dHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAppbmRleCAyNDdlMmQzZDgzOGI3MDEzYjc0NGE1
ZTliYmRmZjIzNjIxMmM5YzJhLi5kYWY1OWU2MzExOTNiZTc2OGQ4ZTA2ZGUzYjNlM2M4ZmE5MDIy
NzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNw
cApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hdHJp
eDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAKKyNpbmNsdWRlICJBbmltYXRpb25VdGlsaXRpZXMu
aCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCkBAIC0zNiwxMyArMzcsMTMgQEAgYm9vbCBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6
b3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG90aGVyKSBjb24KICAgICByZXR1
cm4gaXNTYW1lVHlwZShvdGhlcikgJiYgbV9tYXRyaXggPT0gZG93bmNhc3Q8TWF0cml4M0RUcmFu
c2Zvcm1PcGVyYXRpb24+KG90aGVyKS5tX21hdHJpeDsKIH0KIAotc3RhdGljIFJlZjxUcmFuc2Zv
cm1PcGVyYXRpb24+IGNyZWF0ZU9wZXJhdGlvbihUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdG8sIFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgUmVmPFRy
YW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlT3BlcmF0aW9uKFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
bywgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYgY29u
dGV4dCkKIHsKLSAgICB0by5ibGVuZChmcm9tLCBwcm9ncmVzcyk7CisgICAgdG8uYmxlbmQoZnJv
bSwgY29udGV4dC5wcm9ncmVzcyk7CiAgICAgcmV0dXJuIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUodG8pOwogfQogCi1SZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBNYXRyaXgzRFRy
YW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBk
b3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5KQorUmVmPFRyYW5zZm9ybU9wZXJh
dGlvbj4gTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0LCBib29sIGJsZW5k
VG9JZGVudGl0eSkKIHsKICAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgqdGhpcykp
CiAgICAgICAgIHJldHVybiAqdGhpczsKQEAgLTU3LDggKzU4LDggQEAgUmVmPFRyYW5zZm9ybU9w
ZXJhdGlvbj4gTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9y
bU9wZXJhdGkKICAgICBhcHBseSh0b1QsIHNpemUpOwogCiAgICAgaWYgKGJsZW5kVG9JZGVudGl0
eSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU9wZXJhdGlvbihmcm9tVCwgdG9ULCBwcm9ncmVzcyk7
Ci0gICAgcmV0dXJuIGNyZWF0ZU9wZXJhdGlvbih0b1QsIGZyb21ULCBwcm9ncmVzcyk7CisgICAg
ICAgIHJldHVybiBjcmVhdGVPcGVyYXRpb24oZnJvbVQsIHRvVCwgY29udGV4dCk7CisgICAgcmV0
dXJuIGNyZWF0ZU9wZXJhdGlvbih0b1QsIGZyb21ULCBjb250ZXh0KTsKIH0KIAogYm9vbCBNYXRy
aXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6aXNSZXByZXNlbnRhYmxlSW4yRCgpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJp
eDNEVHJhbnNmb3JtT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgKaW5kZXggMDUyODhjMzhj
MDc3NDk4Y2E0OTZiMjg4NWVjYWQ3NjBhNWFmM2IyMC4uN2IwMWJhZmQ1MTM3ZTU5MGIxODU0Y2Rk
Yjg2YzI3MTQzYjE2OWYzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1P
cGVyYXRpb24uaApAQCAtMzAsNiArMzAsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0
cnVjdCBCbGVuZGluZ0NvbnRleHQ7CisKIGNsYXNzIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9u
IGZpbmFsIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZjxNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtYXRyaXgpCkBAIC01OCw3ICs2MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVu
ZFRvSWRlbnRpdHkgPSBmYWxzZSkgb3ZlcnJpZGU7CisgICAgUmVmPFRyYW5zZm9ybU9wZXJhdGlv
bj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBCbGVuZGluZ0Nv
bnRleHQmLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKSBvdmVycmlkZTsKICAgICAKICAg
ICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJhbnNm
b3JtT3BlcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNwcAppbmRleCBiN2Y2NDRhOTY4YzBmODE0
NzE2MWUzNTNjMTdkMWNjNjZjZjc5OWM5Li45MmU2ZGZlMGE2NTFiZjk4OTZjMDU2MzJhMzEyMTY2
NDc1ZTk1ZmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL01hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24u
Y3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWF0
cml4VHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAKKyNpbmNsdWRlICJBbmltYXRpb25VdGlsaXRpZXMu
aCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCkBAIC0zNSwxMCArMzYsMTAgQEAgYm9vbCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246Om9w
ZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvdGhlcikgY29uc3QKICAgICByZXR1
cm4gbV9hID09IG0ubV9hICYmIG1fYiA9PSBtLm1fYiAmJiBtX2MgPT0gbS5tX2MgJiYgbV9kID09
IG0ubV9kICYmIG1fZSA9PSBtLm1fZSAmJiBtX2YgPT0gbS5tX2Y7CiB9CiAKLVJlZjxUcmFuc2Zv
cm1PcGVyYXRpb24+IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5
KQorUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVu
ZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYg
Y29udGV4dCwgYm9vbCBibGVuZFRvSWRlbnRpdHkpCiB7Ci0gICAgYXV0byBjcmVhdGVPcGVyYXRp
b24gPSBbXSAoVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRvLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
ZnJvbSwgZG91YmxlIHByb2dyZXNzKSB7Ci0gICAgICAgIHRvLmJsZW5kKGZyb20sIHByb2dyZXNz
KTsKKyAgICBhdXRvIGNyZWF0ZU9wZXJhdGlvbiA9IFtdIChUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dG8sIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmIGNv
bnRleHQpIHsKKyAgICAgICAgdG8uYmxlbmQoZnJvbSwgY29udGV4dC5wcm9ncmVzcyk7CiAgICAg
ICAgIHJldHVybiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0byk7CiAgICAgfTsK
IApAQCAtNTQsOCArNTUsOCBAQCBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBNYXRyaXhUcmFuc2Zv
cm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbgogICAgIH0KIAogICAg
IGlmIChibGVuZFRvSWRlbnRpdHkpCi0gICAgICAgIHJldHVybiBjcmVhdGVPcGVyYXRpb24oZnJv
bVQsIHRvVCwgcHJvZ3Jlc3MpOwotICAgIHJldHVybiBjcmVhdGVPcGVyYXRpb24odG9ULCBmcm9t
VCwgcHJvZ3Jlc3MpOworICAgICAgICByZXR1cm4gY3JlYXRlT3BlcmF0aW9uKGZyb21ULCB0b1Qs
IGNvbnRleHQpOworICAgIHJldHVybiBjcmVhdGVPcGVyYXRpb24odG9ULCBmcm9tVCwgY29udGV4
dCk7CiB9CiAKIHZvaWQgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpkdW1wKFRleHRTdHJlYW0m
IHRzKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmgKaW5k
ZXggYjU2N2JjN2ZhNGRjMTI4ZGMyOWQyZmYyZWQ4NWIzMmZiMmE1ZjQwMy4uYWVhNmI5MTNjN2E1
ODIxMTcwYTQ4OThjM2M5YjQ2Njk1YzcyOTAwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbi5oCkBAIC0zMCw2ICszMCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorc3RydWN0IEJsZW5kaW5nQ29udGV4dDsKKwogY2xhc3MgTWF0cml4VHJhbnNmb3JtT3Bl
cmF0aW9uIGZpbmFsIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZShkb3VibGUgYSwgZG91
YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIGUsIGRvdWJsZSBmKQpAQCAtNjIsNyAr
NjQsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgUmVm
PFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9t
LCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpIG92ZXJyaWRl
OworICAgIFJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbiogZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiwgYm9vbCBibGVuZFRvSWRlbnRpdHkg
PSBmYWxzZSkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29u
c3QgZmluYWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9w
ZXJhdGlvbi5jcHAKaW5kZXggZDRjZGU5Yzg5Y2YwNWZmZGM1NTgwMDcxM2FjYTdmZjkwMWQxYmY4
Yy4uZWFkNjU0MzE0YTJjOGY0ODk0Y2Y1YWQ1NTE2MzNhZjU1NjMwYzRmMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRy
YW5zZm9ybU9wZXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKQEAgLTM5LDE0
ICszOSwxNCBAQCBib29sIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOjpvcGVyYXRvcj09
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgb3RoZXIpCiAgICAgcmV0dXJuIG1fcCA9PSBkb3du
Y2FzdDxQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbj4ob3RoZXIpLm1fcDsKIH0KIAotUmVm
PFRyYW5zZm9ybU9wZXJhdGlvbj4gUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5k
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJs
ZW5kVG9JZGVudGl0eSkKK1JlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IFBlcnNwZWN0aXZlVHJhbnNm
b3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGNvbnN0
IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCwgYm9vbCBibGVuZFRvSWRlbnRpdHkpCiB7CiAgICAg
aWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQogICAgICAgICByZXR1cm4gKnRo
aXM7CiAgICAgCiAgICAgaWYgKGJsZW5kVG9JZGVudGl0eSkgewogICAgICAgICBkb3VibGUgcCA9
IGZsb2F0VmFsdWVGb3JMZW5ndGgobV9wLCAxKTsKLSAgICAgICAgcCA9IFdlYkNvcmU6OmJsZW5k
KHAsIDEuMCwgcHJvZ3Jlc3MpOyAvLyBGSVhNRTogdGhpcyBzZWVtcyB3cm9uZy4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyNzAwCisgICAgICAgIHAgPSBXZWJDb3Jl
OjpibGVuZChwLCAxLjAsIGNvbnRleHQpOyAvLyBGSVhNRTogdGhpcyBzZWVtcyB3cm9uZy4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyNzAwCiAgICAgICAgIHJldHVy
biBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aChjbGFtcFRvUG9z
aXRpdmVJbnRlZ2VyKHApLCBMZW5ndGhUeXBlOjpGaXhlZCkpOwogICAgIH0KICAgICAKQEAgLTU4
LDcgKzU4LDcgQEAgUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gUGVyc3BlY3RpdmVUcmFuc2Zvcm1P
cGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXIKICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0b1Q7CiAgICAgZnJvbVQuYXBwbHlQZXJzcGVjdGl2ZShmbG9hdFZhbHVlRm9yTGVuZ3Ro
KGZyb21QLCAxKSk7CiAgICAgdG9ULmFwcGx5UGVyc3BlY3RpdmUoZmxvYXRWYWx1ZUZvckxlbmd0
aCh0b1AsIDEpKTsKLSAgICB0b1QuYmxlbmQoZnJvbVQsIHByb2dyZXNzKTsKKyAgICB0b1QuYmxl
bmQoZnJvbVQsIGNvbnRleHQucHJvZ3Jlc3MpOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpE
ZWNvbXBvc2VkNFR5cGUgZGVjb21wOwogICAgIHRvVC5kZWNvbXBvc2U0KGRlY29tcCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUGVy
c3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaAppbmRleCA4
OWQwOTZmM2RjOGExOWM2ZTlmY2Y4MTAxNWNkY2U1MzMzYjYzZmM4Li43YWQxYTQxZDNkMzgxOWEy
MWFmYzM1ZWQ0MGE2ODAyMjhiOWEwMmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1BlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVj
dGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCkBAIC0zMiw2ICszMiw4IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorc3RydWN0IEJsZW5kaW5nQ29udGV4dDsKKwogY2xhc3MgUGVyc3BlY3RpdmVU
cmFuc2Zvcm1PcGVyYXRpb24gZmluYWwgOiBwdWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVmPFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVh
dGUoY29uc3QgTGVuZ3RoJiBwKQpAQCAtNTksNyArNjEsNyBAQCBwcml2YXRlOgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQo
Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxl
bmRUb0lkZW50aXR5ID0gZmFsc2UpIG92ZXJyaWRlOworICAgIFJlZjxUcmFuc2Zvcm1PcGVyYXRp
b24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRpbmdD
b250ZXh0JiwgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSkgb3ZlcnJpZGU7CiAKICAgICB2
b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAppbmRleCA5NjJlN2MxMDQ1MDg4MDEwODBi
MGIwNWQ3MGExMTZhYmM4N2VmNmQyLi45MGRjZWExNWU4NDI4ZjY5OWUwNDJlYWNmMzVjNjkwODE1
MDMwOTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3Bw
CkBAIC0zNywxMyArMzcsMTMgQEAgYm9vbCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246Om9wZXJh
dG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4g
bV94ID09IHIubV94ICYmIG1feSA9PSByLm1feSAmJiBtX3ogPT0gci5tX3ogJiYgbV9hbmdsZSA9
PSByLm1fYW5nbGU7CiB9CiAKLVJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IFJvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUg
cHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5KQorUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4g
Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24q
IGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCwgYm9vbCBibGVuZFRvSWRlbnRp
dHkpCiB7CiAgICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQogICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgCiAgICAgaWYgKGJsZW5kVG9JZGVudGl0eSkKLSAgICAgICAg
cmV0dXJuIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1feCwgbV95LCBtX3osIG1f
YW5nbGUgLSBtX2FuZ2xlICogcHJvZ3Jlc3MsIHR5cGUoKSk7CisgICAgICAgIHJldHVybiBSb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtX3gsIG1feSwgbV96LCBtX2FuZ2xlIC0gbV9h
bmdsZSAqIGNvbnRleHQucHJvZ3Jlc3MsIHR5cGUoKSk7CiAgICAgCiAgICAgY29uc3QgUm90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSBkb3duY2FzdDxSb3RhdGVUcmFuc2Zvcm1PcGVy
YXRpb24+KGZyb20pOwogICAgIApAQCAtNTUsNyArNTUsNyBAQCBSZWY8VHJhbnNmb3JtT3BlcmF0
aW9uPiBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbgogICAgICAgICByZXR1cm4gUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoZnJv
bU9wID8gZnJvbU9wLT5tX3ggOiBtX3gsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZnJvbU9wID8gZnJvbU9wLT5tX3kgOiBtX3ksIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbU9wID8gZnJvbU9wLT5t
X3ogOiBtX3osIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViQ29yZTo6YmxlbmQoZnJvbUFuZ2xlLCBtX2FuZ2xlLCBwcm9ncmVzcyksIHR5cGUoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3Jl
OjpibGVuZChmcm9tQW5nbGUsIG1fYW5nbGUsIGNvbnRleHQpLCB0eXBlKCkpOwogICAgIH0KIAog
ICAgIGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdG9PcCA9IHRoaXM7CkBAIC03NCw3
ICs3NCw3IEBAIFJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bjo6YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uCiAgICAgICAgICh0b09wID8gdG9PcC0+
bV9hbmdsZSA6IDApKTsKICAgICAKICAgICAvLyBCbGVuZCB0aGVtCi0gICAgdG9ULmJsZW5kKGZy
b21ULCBwcm9ncmVzcyk7CisgICAgdG9ULmJsZW5kKGZyb21ULCBjb250ZXh0LnByb2dyZXNzKTsK
ICAgICAKICAgICAvLyBFeHRyYWN0IHRoZSByZXN1bHQgYXMgYSBxdWF0ZXJuaW9uCiAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXg6OkRlY29tcG9zZWQ0VHlwZSBkZWNvbXA7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1JvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaAppbmRleCAxMjcxODc2NTY5MGYwMGVhYzk2N2Q5
NDc1NmRiZTNiZTQ3ZjU1ZGZmLi41ODI5YjJjZjhmNjdhNmE3MGQwYTM4MDVjYTY4ODZiMWMyNzM2
Zjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgKQEAgLTI5
LDYgKzI5LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQmxlbmRpbmdDb250
ZXh0OworCiBjbGFzcyBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24gZmluYWwgOiBwdWJsaWMgVHJh
bnNmb3JtT3BlcmF0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFJvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbj4gY3JlYXRlKGRvdWJsZSBhbmdsZSwgT3BlcmF0aW9uVHlwZSB0eXBlKQpAQCAt
NTMsNyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBSZWY8VHJhbnNmb3JtT3BlcmF0
aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVz
cywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSkgZmluYWw7CisgICAgUmVmPFRyYW5zZm9y
bU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBC
bGVuZGluZ0NvbnRleHQmLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKSBmaW5hbDsKIAog
ICAgIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICFtX2FuZ2xlOyB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKaW5kZXggODNjZjNk
NDQwNGYyZWMzOGIwYzc5MGRiYTEzMWE3ZWQ1NWFiYWI2Mi4uMDgzZTJlMzAwOTg2OGYxY2E4M2Zm
NzA0NDc2YjI3MGMxNWExNzQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbi5jcHAKQEAgLTM1LDIzICszNSwyMyBAQCBib29sIFNjYWxlVHJhbnNmb3JtT3BlcmF0
aW9uOjpvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgb3RoZXIpIGNvbnN0CiAg
ICAgcmV0dXJuIG1feCA9PSBzLm1feCAmJiBtX3kgPT0gcy5tX3kgJiYgbV96ID09IHMubV96Owog
fQogCi1SZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Ymxl
bmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wg
YmxlbmRUb0lkZW50aXR5KQorUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxl
bmRpbmdDb250ZXh0JiBjb250ZXh0LCBib29sIGJsZW5kVG9JZGVudGl0eSkKIHsKICAgICBpZiAo
ZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgqdGhpcykpCiAgICAgICAgIHJldHVybiAqdGhpczsK
ICAgICAKICAgICBpZiAoYmxlbmRUb0lkZW50aXR5KQotICAgICAgICByZXR1cm4gU2NhbGVUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChtX3gsIDEuMCwgcHJvZ3Jlc3Mp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3Jl
OjpibGVuZChtX3ksIDEuMCwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChtX3osIDEuMCwgcHJvZ3Jlc3MpLCB0
eXBlKCkpOworICAgICAgICByZXR1cm4gU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShX
ZWJDb3JlOjpibGVuZChtX3gsIDEuMCwgY29udGV4dCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKG1feSwgMS4wLCBjb250ZXh0
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQobV96LCAxLjAsIGNvbnRleHQpLCB0eXBlKCkpOwogICAgIAogICAgIGNvbnN0IFNj
YWxlVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSBkb3duY2FzdDxTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbj4oZnJvbSk7CiAgICAgZG91YmxlIGZyb21YID0gZnJvbU9wID8gZnJvbU9wLT5tX3gg
OiAxLjA7CiAgICAgZG91YmxlIGZyb21ZID0gZnJvbU9wID8gZnJvbU9wLT5tX3kgOiAxLjA7CiAg
ICAgZG91YmxlIGZyb21aID0gZnJvbU9wID8gZnJvbU9wLT5tX3ogOiAxLjA7Ci0gICAgcmV0dXJu
IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbVgsIG1f
eCwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYkNvcmU6OmJsZW5kKGZyb21ZLCBtX3ksIHByb2dyZXNzKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tWiwgbV96LCBwcm9n
cmVzcyksIHR5cGUoKSk7CisgICAgcmV0dXJuIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVh
dGUoV2ViQ29yZTo6YmxlbmQoZnJvbVgsIG1feCwgY29udGV4dCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVksIG1feSwgY29u
dGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQoZnJvbVosIG1feiwgY29udGV4dCksIHR5cGUoKSk7CiB9CiAKIHZvaWQgU2NhbGVU
cmFuc2Zvcm1PcGVyYXRpb246OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NjYWxlVHJhbnNm
b3JtT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgKaW5kZXggZjhlMTU3Mzg3OGE4YWY5ZTdkMWY5
MzE5NzMyYjczNzY5NzJiYTY4NC4uN2I0N2E0YzUzY2M3ZTVlMGRjNTU2MjMwY2ZiYzBlZTc1M2Uy
ZTJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaApAQCAtMjks
NiArMjksOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBCbGVuZGluZ0NvbnRl
eHQ7CisKIGNsYXNzIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uIGZpbmFsIDogcHVibGljIFRyYW5z
Zm9ybU9wZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbj4gY3JlYXRlKGRvdWJsZSBzeCwgZG91YmxlIHN5LCBPcGVyYXRpb25UeXBlIHR5cGUp
CkBAIC01Miw3ICs1NCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb24mKSBjb25zdCBmaW5hbDsKIAotICAgIFJlZjxUcmFuc2Zvcm1PcGVy
YXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dy
ZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKSBmaW5hbDsKKyAgICBSZWY8VHJhbnNm
b3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGNvbnN0
IEJsZW5kaW5nQ29udGV4dCYsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpIGZpbmFsOwog
CiAgICAgYm9vbCBpc0lkZW50aXR5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV94ID09IDEgJiYg
IG1feSA9PSAxICYmICBtX3ogPT0gMTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3Jt
T3BlcmF0aW9uLmNwcAppbmRleCA4MDkwNzBhZGU2ODc2MWM4NDZhODA5OTM3ZTgzYWE0NjBiMDI5
N2FhLi4zOWQyZjZkMDI0YjI1MWUxNjcxM2ZlMzFhNzY0YWZmMGRlMGEyZTBmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFuc2Zv
cm1PcGVyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5jcHAKQEAgLTM1LDE4ICszNSwxOCBAQCBi
b29sIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3Bl
cmF0aW9uJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gbV9hbmdsZVggPT0gcy5tX2FuZ2xlWCAm
JiBtX2FuZ2xlWSA9PSBzLm1fYW5nbGVZOwogfQogCi1SZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBT
a2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZy
b20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkpCitSZWY8VHJhbnNmb3Jt
T3BlcmF0aW9uPiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb24qIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCwgYm9vbCBibGVu
ZFRvSWRlbnRpdHkpCiB7CiAgICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMp
KQogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgCiAgICAgaWYgKGJsZW5kVG9JZGVudGl0eSkK
LSAgICAgICAgcmV0dXJuIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpi
bGVuZChtX2FuZ2xlWCwgMC4wLCBwcm9ncmVzcyksIFdlYkNvcmU6OmJsZW5kKG1fYW5nbGVZLCAw
LjAsIHByb2dyZXNzKSwgdHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIFNrZXdUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChtX2FuZ2xlWCwgMC4wLCBjb250ZXh0KSwgV2Vi
Q29yZTo6YmxlbmQobV9hbmdsZVksIDAuMCwgY29udGV4dCksIHR5cGUoKSk7CiAgICAgCiAgICAg
Y29uc3QgU2tld1RyYW5zZm9ybU9wZXJhdGlvbiogZnJvbU9wID0gZG93bmNhc3Q8U2tld1RyYW5z
Zm9ybU9wZXJhdGlvbj4oZnJvbSk7CiAgICAgZG91YmxlIGZyb21BbmdsZVggPSBmcm9tT3AgPyBm
cm9tT3AtPm1fYW5nbGVYIDogMDsKICAgICBkb3VibGUgZnJvbUFuZ2xlWSA9IGZyb21PcCA/IGZy
b21PcC0+bV9hbmdsZVkgOiAwOwotICAgIHJldHVybiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbUFuZ2xlWCwgbV9hbmdsZVgsIHByb2dyZXNzKSwgV2Vi
Q29yZTo6YmxlbmQoZnJvbUFuZ2xlWSwgbV9hbmdsZVksIHByb2dyZXNzKSwgdHlwZSgpKTsKKyAg
ICByZXR1cm4gU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKGZy
b21BbmdsZVgsIG1fYW5nbGVYLCBjb250ZXh0KSwgV2ViQ29yZTo6YmxlbmQoZnJvbUFuZ2xlWSwg
bV9hbmdsZVksIGNvbnRleHQpLCB0eXBlKCkpOwogfQogCiB2b2lkIFNrZXdUcmFuc2Zvcm1PcGVy
YXRpb246OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5z
Zm9ybU9wZXJhdGlvbi5oCmluZGV4IDc5N2RjOTUwZDA1MTI5ODUwOGY4NzZmYTIyYTUwZGUwMTBl
MzE4MWIuLjE2MTAzNTQ1NWE2YTM2ZTExZWRkYWZlNWYyNjllNjQ4OTA1Y2UyODkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5z
Zm9ybU9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oCkBAIC0yOSw2ICsyOSw4IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorc3RydWN0IEJsZW5kaW5nQ29udGV4dDsKKwogY2xhc3MgU2tl
d1RyYW5zZm9ybU9wZXJhdGlvbiBmaW5hbCA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24gewog
cHVibGljOgogICAgIHN0YXRpYyBSZWY8U2tld1RyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKGRv
dWJsZSBhbmdsZVgsIGRvdWJsZSBhbmdsZVksIE9wZXJhdGlvblR5cGUgdHlwZSkKQEAgLTU2LDcg
KzU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFJl
ZjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJv
bSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKSBvdmVycmlk
ZTsKKyAgICBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb24qIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYsIGJvb2wgYmxlbmRUb0lkZW50aXR5
ID0gZmFsc2UpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYpIGNv
bnN0IGZpbmFsOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9uLmgKaW5kZXggMDU3
NGE1NGY3MDU3NDkyMzgwN2ExOGQ2YTI4OWU3Mzc5NjU1ZDI0NC4uMWYxMDFlYzA5YTMxMmE3ODdk
YzVkZmQ5Y2I5MDcwNmYyMmNlYmNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbi5o
CkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gQ1NTIFRyYW5z
Zm9ybXMgKG1heSBiZWNvbWUgcGFydCBvZiBDU1MzKQorc3RydWN0IEJsZW5kT3B0aW9uOwogCiBj
bGFzcyBUcmFuc2Zvcm1PcGVyYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxUcmFuc2Zvcm1PcGVy
YXRpb24+IHsKIHB1YmxpYzoKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAgIC8vIFJldHVy
biB0cnVlIGlmIHRoZSBib3JkZXJCb3hTaXplIHdhcyB1c2VkIGluIHRoZSBjb21wdXRhdGlvbiwg
ZmFsc2Ugb3RoZXJ3aXNlLgogICAgIHZpcnR1YWwgYm9vbCBhcHBseShUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYsIGNvbnN0IEZsb2F0U2l6ZSYgYm9yZGVyQm94U2l6ZSkgY29uc3QgPSAwOwogCi0gICAg
dmlydHVhbCBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxz
ZSkgPSAwOworICAgIHZpcnR1YWwgUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmLCBib29sIGJs
ZW5kVG9JZGVudGl0eSA9IGZhbHNlKSA9IDA7CiAKICAgICBPcGVyYXRpb25UeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBib29sIGlzU2FtZVR5cGUoY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IG90aGVyLnR5cGUo
KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAKaW5kZXggYjE0NTJmZTJi
NjY3YmRlZjMxYThiYzljZTMxZjRlNmQyZWM3YjM4MS4uYzRiNTY3ZWFiM2ZlODJkNWMzYzExYTli
Y2E2ZjY4OGY5MDE5ODcxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbnMuY3Bw
CkBAIC03Myw3ICs3Myw3IEBAIGJvb2wgVHJhbnNmb3JtT3BlcmF0aW9uczo6YWZmZWN0ZWRCeVRy
YW5zZm9ybU9yaWdpbigpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1UcmFuc2Zvcm1P
cGVyYXRpb25zIFRyYW5zZm9ybU9wZXJhdGlvbnM6OmJsZW5kQnlNYXRjaGluZ09wZXJhdGlvbnMo
Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgZG91YmxlJiBwcm9ncmVzcykg
Y29uc3QKK1RyYW5zZm9ybU9wZXJhdGlvbnMgVHJhbnNmb3JtT3BlcmF0aW9uczo6YmxlbmRCeU1h
dGNoaW5nT3BlcmF0aW9ucyhjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBjb25zdCBC
bGVuZGluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgVHJhbnNmb3JtT3BlcmF0aW9u
cyByZXN1bHQ7CiAKQEAgLTgzLDEyICs4MywxMiBAQCBUcmFuc2Zvcm1PcGVyYXRpb25zIFRyYW5z
Zm9ybU9wZXJhdGlvbnM6OmJsZW5kQnlNYXRjaGluZ09wZXJhdGlvbnMoY29uc3QgVHJhbnNmbwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICAgUmVmUHRy
PFRyYW5zZm9ybU9wZXJhdGlvbj4gZnJvbU9wZXJhdGlvbiA9IChpIDwgZnJvbVNpemUpID8gZnJv
bS5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiBudWxscHRyOwogICAgICAgICBSZWZQdHI8VHJhbnNm
b3JtT3BlcmF0aW9uPiB0b09wZXJhdGlvbiA9IChpIDwgdG9TaXplKSA/IG9wZXJhdGlvbnMoKVtp
XS5nZXQoKSA6IG51bGxwdHI7Ci0gICAgICAgIFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJs
ZW5kZWRPcGVyYXRpb24gPSB0b09wZXJhdGlvbiA/IHRvT3BlcmF0aW9uLT5ibGVuZChmcm9tT3Bl
cmF0aW9uLmdldCgpLCBwcm9ncmVzcykgOiAoZnJvbU9wZXJhdGlvbiA/IFJlZlB0cjxUcmFuc2Zv
cm1PcGVyYXRpb24+KGZyb21PcGVyYXRpb24tPmJsZW5kKG51bGxwdHIsIHByb2dyZXNzLCB0cnVl
KSkgOiBudWxscHRyKTsKKyAgICAgICAgUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmRl
ZE9wZXJhdGlvbiA9IHRvT3BlcmF0aW9uID8gdG9PcGVyYXRpb24tPmJsZW5kKGZyb21PcGVyYXRp
b24uZ2V0KCksIGNvbnRleHQpIDogKGZyb21PcGVyYXRpb24gPyBSZWZQdHI8VHJhbnNmb3JtT3Bl
cmF0aW9uPihmcm9tT3BlcmF0aW9uLT5ibGVuZChudWxscHRyLCBjb250ZXh0LCB0cnVlKSkgOiBu
dWxscHRyKTsKICAgICAgICAgaWYgKGJsZW5kZWRPcGVyYXRpb24pCiAgICAgICAgICAgICByZXN1
bHQub3BlcmF0aW9ucygpLmFwcGVuZChibGVuZGVkT3BlcmF0aW9uKTsKICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICBhdXRvIGlkZW50aXR5T3BlcmF0aW9uID0gSWRlbnRpdHlUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZSgpOwotICAgICAgICAgICAgaWYgKHByb2dyZXNzID4gMC41KQorICAg
ICAgICAgICAgaWYgKGNvbnRleHQucHJvZ3Jlc3MgPiAwLjUpCiAgICAgICAgICAgICAgICAgcmVz
dWx0Lm9wZXJhdGlvbnMoKS5hcHBlbmQodG9PcGVyYXRpb24gPyB0b09wZXJhdGlvbiA6IFdURk1v
dmUoaWRlbnRpdHlPcGVyYXRpb24pKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICByZXN1bHQub3BlcmF0aW9ucygpLmFwcGVuZChmcm9tT3BlcmF0aW9uID8gZnJvbU9wZXJhdGlv
biA6IFdURk1vdmUoaWRlbnRpdHlPcGVyYXRpb24pKTsKQEAgLTk4LDcgKzk4LDcgQEAgVHJhbnNm
b3JtT3BlcmF0aW9ucyBUcmFuc2Zvcm1PcGVyYXRpb25zOjpibGVuZEJ5TWF0Y2hpbmdPcGVyYXRp
b25zKGNvbnN0IFRyYW5zZm8KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1UcmFuc2Zvcm1PcGVy
YXRpb25zIFRyYW5zZm9ybU9wZXJhdGlvbnM6OmJsZW5kQnlVc2luZ01hdHJpeEludGVycG9sYXRp
b24oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgZG91YmxlIHByb2dyZXNzLCBjb25z
dCBMYXlvdXRTaXplJiBzaXplKSBjb25zdAorVHJhbnNmb3JtT3BlcmF0aW9ucyBUcmFuc2Zvcm1P
cGVyYXRpb25zOjpibGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9uKGNvbnN0IFRyYW5zZm9y
bU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
TGF5b3V0U2l6ZSYgc2l6ZSkgY29uc3QKIHsKICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIHJlc3Vs
dDsKIApAQCAtMTA4LDcgKzEwOCw3IEBAIFRyYW5zZm9ybU9wZXJhdGlvbnMgVHJhbnNmb3JtT3Bl
cmF0aW9uczo6YmxlbmRCeVVzaW5nTWF0cml4SW50ZXJwb2xhdGlvbihjb25zdCBUCiAgICAgZnJv
bS5hcHBseShzaXplLCBmcm9tVHJhbnNmb3JtKTsKICAgICBhcHBseShzaXplLCB0b1RyYW5zZm9y
bSk7CiAKLSAgICB0b1RyYW5zZm9ybS5ibGVuZChmcm9tVHJhbnNmb3JtLCBwcm9ncmVzcyk7Cisg
ICAgdG9UcmFuc2Zvcm0uYmxlbmQoZnJvbVRyYW5zZm9ybSwgY29udGV4dC5wcm9ncmVzcyk7CiAK
ICAgICAvLyBBcHBlbmQgdGhlIHJlc3VsdAogICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5k
KE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodG9UcmFuc2Zvcm0pKTsKQEAgLTEx
NiwxNSArMTE2LDE1IEBAIFRyYW5zZm9ybU9wZXJhdGlvbnMgVHJhbnNmb3JtT3BlcmF0aW9uczo6
YmxlbmRCeVVzaW5nTWF0cml4SW50ZXJwb2xhdGlvbihjb25zdCBUCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotVHJhbnNmb3JtT3BlcmF0aW9ucyBUcmFuc2Zvcm1PcGVyYXRpb25zOjpibGVuZChj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGNvbnN0IExh
eW91dFNpemUmIHNpemUpIGNvbnN0CitUcmFuc2Zvcm1PcGVyYXRpb25zIFRyYW5zZm9ybU9wZXJh
dGlvbnM6OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEJsZW5k
aW5nQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkgY29uc3QKIHsKICAg
ICBpZiAoZnJvbSA9PSAqdGhpcykKICAgICAgICAgcmV0dXJuICp0aGlzOwogCiAgICAgaWYgKGZy
b20uc2l6ZSgpICYmIGZyb20ub3BlcmF0aW9uc01hdGNoKCp0aGlzKSkKLSAgICAgICAgcmV0dXJu
IGJsZW5kQnlNYXRjaGluZ09wZXJhdGlvbnMoZnJvbSwgcHJvZ3Jlc3MpOworICAgICAgICByZXR1
cm4gYmxlbmRCeU1hdGNoaW5nT3BlcmF0aW9ucyhmcm9tLCBjb250ZXh0KTsKIAotICAgIHJldHVy
biBibGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9uKGZyb20sIHByb2dyZXNzLCBzaXplKTsK
KyAgICByZXR1cm4gYmxlbmRCeVVzaW5nTWF0cml4SW50ZXJwb2xhdGlvbihmcm9tLCBjb250ZXh0
LCBzaXplKTsKIH0KIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3BzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlv
bnMuaAppbmRleCBmODI1NmE3ZjRkNWFiN2JiMThlNmFmNDQ2MDMwMzc5MzY5ODIxZDFkLi5jZjU5
YTE5ZTgyNjFhNDQ2NzVmYjI3NWYyNTBiYTEyZWY4ZDYzY2U4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbnMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5z
Zm9ybU9wZXJhdGlvbnMuaApAQCAtMzEsNiArMzEsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK3N0cnVjdCBCbGVuZGluZ0NvbnRleHQ7CisKIGNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbnMg
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtODMsOSArODUsOSBA
QCBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdGlvbnMu
c2l6ZSgpOyB9CiAgICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBhdChzaXplX3QgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIGluZGV4IDwgbV9vcGVyYXRpb25zLnNpemUoKSA/IG1fb3BlcmF0aW9u
cy5hdChpbmRleCkuZ2V0KCkgOiAwOyB9CiAKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5k
QnlNYXRjaGluZ09wZXJhdGlvbnMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgY29u
c3QgZG91YmxlJiBwcm9ncmVzcykgY29uc3Q7Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVu
ZEJ5VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9uKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZy
b20sIGRvdWJsZSBwcm9ncmVzcywgY29uc3QgTGF5b3V0U2l6ZSYpIGNvbnN0OwotICAgIFRyYW5z
Zm9ybU9wZXJhdGlvbnMgYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgZG91
YmxlIHByb2dyZXNzLCBjb25zdCBMYXlvdXRTaXplJikgY29uc3Q7CisgICAgVHJhbnNmb3JtT3Bl
cmF0aW9ucyBibGVuZEJ5TWF0Y2hpbmdPcGVyYXRpb25zKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlv
bnMmIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYpIGNvbnN0OworICAgIFRyYW5zZm9ybU9w
ZXJhdGlvbnMgYmxlbmRCeVVzaW5nTWF0cml4SW50ZXJwb2xhdGlvbihjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb25zJiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmLCBjb25zdCBMYXlvdXRTaXpl
JikgY29uc3Q7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZChjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb25zJiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmLCBjb25zdCBMYXlvdXRTaXpl
JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRp
b24+PiBtX29wZXJhdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbi5jcHAKaW5kZXggOTY5NzNiZTM0MTJjZjcxMDg1MzBkNDRlMmUyOWJiNjFmZTFi
ZjA1Yi4uMzIzN2M0MjMwYjYyZjkzMGEzZTBkZTQ0Y2E4ZDNmMDY0MmJkM2RhYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcApAQCAtMjIsNiAr
MjIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbi5oIgogCisjaW5jbHVkZSAiQW5pbWF0aW9uVXRpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgog
CkBAIC0zNSwyMCArMzYsMjAgQEAgYm9vbCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246Om9w
ZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvdGhlcikgY28KICAgICByZXR1cm4g
bV94ID09IHQubV94ICYmIG1feSA9PSB0Lm1feSAmJiBtX3ogPT0gdC5tX3o7CiB9CiAKLVJlZjxU
cmFuc2Zvcm1PcGVyYXRpb24+IFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQoY29u
c3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRU
b0lkZW50aXR5KQorUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gVHJhbnNsYXRlVHJhbnNmb3JtT3Bl
cmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGNvbnN0IEJsZW5k
aW5nQ29udGV4dCYgY29udGV4dCwgYm9vbCBibGVuZFRvSWRlbnRpdHkpCiB7CiAgICAgaWYgKGZy
b20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAK
ICAgICBMZW5ndGggemVyb0xlbmd0aCgwLCBMZW5ndGhUeXBlOjpGaXhlZCk7CiAgICAgaWYgKGJs
ZW5kVG9JZGVudGl0eSkKLSAgICAgICAgcmV0dXJuIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKG1feCwgemVyb0xlbmd0aCwgcHJvZ3Jlc3MpLCBXZWJD
b3JlOjpibGVuZChtX3ksIHplcm9MZW5ndGgsIHByb2dyZXNzKSwgV2ViQ29yZTo6YmxlbmQobV96
LCB6ZXJvTGVuZ3RoLCBwcm9ncmVzcyksIHR5cGUoKSk7CisgICAgICAgIHJldHVybiBUcmFuc2xh
dGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChtX3gsIHplcm9MZW5n
dGgsIGNvbnRleHQpLCBXZWJDb3JlOjpibGVuZChtX3ksIHplcm9MZW5ndGgsIGNvbnRleHQpLCBX
ZWJDb3JlOjpibGVuZChtX3osIHplcm9MZW5ndGgsIGNvbnRleHQpLCB0eXBlKCkpOwogCiAgICAg
Y29uc3QgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSBkb3duY2FzdDxUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24+KGZyb20pOwogICAgIExlbmd0aCBmcm9tWCA9IGZyb21P
cCA/IGZyb21PcC0+bV94IDogemVyb0xlbmd0aDsKICAgICBMZW5ndGggZnJvbVkgPSBmcm9tT3Ag
PyBmcm9tT3AtPm1feSA6IHplcm9MZW5ndGg7CiAgICAgTGVuZ3RoIGZyb21aID0gZnJvbU9wID8g
ZnJvbU9wLT5tX3ogOiB6ZXJvTGVuZ3RoOwotICAgIHJldHVybiBUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChmcm9tWCwgeCgpLCBwcm9ncmVzcyksIFdl
YkNvcmU6OmJsZW5kKGZyb21ZLCB5KCksIHByb2dyZXNzKSwgV2ViQ29yZTo6YmxlbmQoZnJvbVos
IHooKSwgcHJvZ3Jlc3MpLCB0eXBlKCkpOworICAgIHJldHVybiBUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChmcm9tWCwgeCgpLCBjb250ZXh0KSwgV2Vi
Q29yZTo6YmxlbmQoZnJvbVksIHkoKSwgY29udGV4dCksIFdlYkNvcmU6OmJsZW5kKGZyb21aLCB6
KCksIGNvbnRleHQpLCB0eXBlKCkpOwogfQogCiB2b2lkIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbjo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCmluZGV4IGVkN2M4ZmRkNjk3MDcxYTk5NTM3NjZiZWRk
YjJiNTU1YTdhYWQ0ODAuLjAwMGY0Yzc5ZWZlNGQ4ZWQzNGEyMDU5M2YzY2VmYzdiMjdmYjhlODYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaApAQCAt
MzEsNiArMzEsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBCbGVuZGluZ0Nv
bnRleHQ7CisKIGNsYXNzIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiBmaW5hbCA6IHB1Ymxp
YyBUcmFuc2Zvcm1PcGVyYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8VHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVhdGUoY29uc3QgTGVuZ3RoJiB0eCwgY29uc3QgTGVuZ3Ro
JiB0eSwgT3BlcmF0aW9uVHlwZSB0eXBlKQpAQCAtNjYsNyArNjgsNyBAQCBwdWJsaWM6CiAKICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJikgY29uc3QgZmluYWw7
CiAKLSAgICBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxz
ZSkgZmluYWw7CisgICAgUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmLCBib29sIGJsZW5kVG9J
ZGVudGl0eSA9IGZhbHNlKSBmaW5hbDsKIAogICAgIGJvb2wgaXNSZXByZXNlbnRhYmxlSW4yRCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fei5pc1plcm8oKTsgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFwZXMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL0Jhc2ljU2hhcGVzLmNwcAppbmRleCA4ZGRjMTcyOWFjOGZlNWU2
YzVlNmNhZTUyNTNlZGI2MjM0MzEzN2ZhLi44YWU3MDc4NDdmMzg2ZGNhY2JjNDhmNDc2ZDVmNWY3
ZGMwYjU5MDQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQmFz
aWNTaGFwZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9CYXNpY1No
YXBlcy5jcHAKQEAgLTE4OSwxNSArMTg5LDE1IEBAIGJvb2wgQmFzaWNTaGFwZUNpcmNsZTo6Y2Fu
QmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuIHJhZGl1cygp
LmNhbkJsZW5kKGRvd25jYXN0PEJhc2ljU2hhcGVDaXJjbGU+KG90aGVyKS5yYWRpdXMoKSk7CiB9
CiAKLVJlZjxCYXNpY1NoYXBlPiBCYXNpY1NoYXBlQ2lyY2xlOjpibGVuZChjb25zdCBCYXNpY1No
YXBlJiBvdGhlciwgZG91YmxlIHByb2dyZXNzKSBjb25zdAorUmVmPEJhc2ljU2hhcGU+IEJhc2lj
U2hhcGVDaXJjbGU6OmJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIG90aGVyLCBjb25zdCBCbGVuZGlu
Z0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHR5cGUoKSA9PSBvdGhlci50
eXBlKCkpOwogICAgIGF1dG8mIG90aGVyQ2lyY2xlID0gZG93bmNhc3Q8QmFzaWNTaGFwZUNpcmNs
ZT4ob3RoZXIpOwogICAgIGF1dG8gcmVzdWx0ID0gIEJhc2ljU2hhcGVDaXJjbGU6OmNyZWF0ZSgp
OwogCi0gICAgcmVzdWx0LT5zZXRDZW50ZXJYKG1fY2VudGVyWC5ibGVuZChvdGhlckNpcmNsZS5j
ZW50ZXJYKCksIHByb2dyZXNzKSk7Ci0gICAgcmVzdWx0LT5zZXRDZW50ZXJZKG1fY2VudGVyWS5i
bGVuZChvdGhlckNpcmNsZS5jZW50ZXJZKCksIHByb2dyZXNzKSk7Ci0gICAgcmVzdWx0LT5zZXRS
YWRpdXMobV9yYWRpdXMuYmxlbmQob3RoZXJDaXJjbGUucmFkaXVzKCksIHByb2dyZXNzKSk7Cisg
ICAgcmVzdWx0LT5zZXRDZW50ZXJYKG1fY2VudGVyWC5ibGVuZChvdGhlckNpcmNsZS5jZW50ZXJY
KCksIGNvbnRleHQpKTsKKyAgICByZXN1bHQtPnNldENlbnRlclkobV9jZW50ZXJZLmJsZW5kKG90
aGVyQ2lyY2xlLmNlbnRlclkoKSwgY29udGV4dCkpOworICAgIHJlc3VsdC0+c2V0UmFkaXVzKG1f
cmFkaXVzLmJsZW5kKG90aGVyQ2lyY2xlLnJhZGl1cygpLCBjb250ZXh0KSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApAQCAtMjUyLDcgKzI1Miw3IEBAIGJvb2wgQmFzaWNTaGFwZUVsbGlwc2U6
OmNhbkJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIG90aGVyKSBjb25zdAogICAgIHJldHVybiByYWRp
dXNYKCkuY2FuQmxlbmQob3RoZXJFbGxpcHNlLnJhZGl1c1goKSkgJiYgcmFkaXVzWSgpLmNhbkJs
ZW5kKG90aGVyRWxsaXBzZS5yYWRpdXNZKCkpOwogfQogCi1SZWY8QmFzaWNTaGFwZT4gQmFzaWNT
aGFwZUVsbGlwc2U6OmJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIG90aGVyLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0CitSZWY8QmFzaWNTaGFwZT4gQmFzaWNTaGFwZUVsbGlwc2U6OmJsZW5kKGNvbnN0
IEJhc2ljU2hhcGUmIG90aGVyLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKHR5cGUoKSA9PSBvdGhlci50eXBlKCkpOwogICAgIGF1dG8mIG90aGVy
RWxsaXBzZSA9IGRvd25jYXN0PEJhc2ljU2hhcGVFbGxpcHNlPihvdGhlcik7CkBAIC0yNjcsMTAg
KzI2NywxMCBAQCBSZWY8QmFzaWNTaGFwZT4gQmFzaWNTaGFwZUVsbGlwc2U6OmJsZW5kKGNvbnN0
IEJhc2ljU2hhcGUmIG90aGVyLCBkb3VibGUgcHJvZ3JlcwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIAotICAgIHJlc3VsdC0+c2V0Q2VudGVyWChtX2NlbnRlclguYmxlbmQob3RoZXJF
bGxpcHNlLmNlbnRlclgoKSwgcHJvZ3Jlc3MpKTsKLSAgICByZXN1bHQtPnNldENlbnRlclkobV9j
ZW50ZXJZLmJsZW5kKG90aGVyRWxsaXBzZS5jZW50ZXJZKCksIHByb2dyZXNzKSk7Ci0gICAgcmVz
dWx0LT5zZXRSYWRpdXNYKG1fcmFkaXVzWC5ibGVuZChvdGhlckVsbGlwc2UucmFkaXVzWCgpLCBw
cm9ncmVzcykpOwotICAgIHJlc3VsdC0+c2V0UmFkaXVzWShtX3JhZGl1c1kuYmxlbmQob3RoZXJF
bGxpcHNlLnJhZGl1c1koKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXN1bHQtPnNldENlbnRlclgobV9j
ZW50ZXJYLmJsZW5kKG90aGVyRWxsaXBzZS5jZW50ZXJYKCksIGNvbnRleHQpKTsKKyAgICByZXN1
bHQtPnNldENlbnRlclkobV9jZW50ZXJZLmJsZW5kKG90aGVyRWxsaXBzZS5jZW50ZXJZKCksIGNv
bnRleHQpKTsKKyAgICByZXN1bHQtPnNldFJhZGl1c1gobV9yYWRpdXNYLmJsZW5kKG90aGVyRWxs
aXBzZS5yYWRpdXNYKCksIGNvbnRleHQpKTsKKyAgICByZXN1bHQtPnNldFJhZGl1c1kobV9yYWRp
dXNZLmJsZW5kKG90aGVyRWxsaXBzZS5yYWRpdXNZKCksIGNvbnRleHQpKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCkBAIC0zMTUsNyArMzE1LDcgQEAgYm9vbCBCYXNpY1NoYXBlUG9seWdvbjo6
Y2FuQmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuIHZhbHVl
cygpLnNpemUoKSA9PSBvdGhlclBvbHlnb24udmFsdWVzKCkuc2l6ZSgpICYmIHdpbmRSdWxlKCkg
PT0gb3RoZXJQb2x5Z29uLndpbmRSdWxlKCk7CiB9CiAKLVJlZjxCYXNpY1NoYXBlPiBCYXNpY1No
YXBlUG9seWdvbjo6YmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgb3RoZXIsIGRvdWJsZSBwcm9ncmVz
cykgY29uc3QKK1JlZjxCYXNpY1NoYXBlPiBCYXNpY1NoYXBlUG9seWdvbjo6YmxlbmQoY29uc3Qg
QmFzaWNTaGFwZSYgb3RoZXIsIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QK
IHsKICAgICBBU1NFUlQodHlwZSgpID09IG90aGVyLnR5cGUoKSk7CiAKQEAgLTMzMiw4ICszMzIs
OCBAQCBSZWY8QmFzaWNTaGFwZT4gQmFzaWNTaGFwZVBvbHlnb246OmJsZW5kKGNvbnN0IEJhc2lj
U2hhcGUmIG90aGVyLCBkb3VibGUgcHJvZ3JlcwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsZW5ndGg7IGkgPSBpICsgMikgewogICAgICAgICByZXN1bHQtPmFwcGVuZFBvaW50KAotICAg
ICAgICAgICAgV2ViQ29yZTo6YmxlbmQob3RoZXJQb2x5Z29uLnZhbHVlcygpLmF0KGkpLCBtX3Zh
bHVlcy5hdChpKSwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQob3RoZXJQ
b2x5Z29uLnZhbHVlcygpLmF0KGkgKyAxKSwgbV92YWx1ZXMuYXQoaSArIDEpLCBwcm9ncmVzcykp
OworICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQob3RoZXJQb2x5Z29uLnZhbHVlcygpLmF0KGkp
LCBtX3ZhbHVlcy5hdChpKSwgY29udGV4dCksCisgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChv
dGhlclBvbHlnb24udmFsdWVzKCkuYXQoaSArIDEpLCBtX3ZhbHVlcy5hdChpICsgMSksIGNvbnRl
eHQpKTsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzczLDE0ICszNzMsMTQgQEAg
Ym9vbCBCYXNpY1NoYXBlUGF0aDo6Y2FuQmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgb3RoZXIpIGNv
bnN0CiAgICAgcmV0dXJuIHdpbmRSdWxlKCkgPT0gb3RoZXJQYXRoLndpbmRSdWxlKCkgJiYgY2Fu
QmxlbmRTVkdQYXRoQnl0ZVN0cmVhbXMoKm1fYnl0ZVN0cmVhbSwgKm90aGVyUGF0aC5wYXRoRGF0
YSgpKTsKIH0KIAotUmVmPEJhc2ljU2hhcGU+IEJhc2ljU2hhcGVQYXRoOjpibGVuZChjb25zdCBC
YXNpY1NoYXBlJiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0CitSZWY8QmFzaWNTaGFwZT4g
QmFzaWNTaGFwZVBhdGg6OmJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIGZyb20sIGNvbnN0IEJsZW5k
aW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBBU1NFUlQodHlwZSgpID09IGZyb20u
dHlwZSgpKTsKIAogICAgIGF1dG8mIGZyb21QYXRoID0gZG93bmNhc3Q8QmFzaWNTaGFwZVBhdGg+
KGZyb20pOwogCiAgICAgYXV0byByZXN1bHRpbmdQYXRoQnl0ZXMgPSBtYWtlVW5pcXVlPFNWR1Bh
dGhCeXRlU3RyZWFtPigpOwotICAgIGJ1aWxkQW5pbWF0ZWRTVkdQYXRoQnl0ZVN0cmVhbSgqZnJv
bVBhdGgubV9ieXRlU3RyZWFtLCAqbV9ieXRlU3RyZWFtLCAqcmVzdWx0aW5nUGF0aEJ5dGVzLCBw
cm9ncmVzcyk7CisgICAgYnVpbGRBbmltYXRlZFNWR1BhdGhCeXRlU3RyZWFtKCpmcm9tUGF0aC5t
X2J5dGVTdHJlYW0sICptX2J5dGVTdHJlYW0sICpyZXN1bHRpbmdQYXRoQnl0ZXMsIGNvbnRleHQu
cHJvZ3Jlc3MpOwogICAgIGF1dG8gcmVzdWx0ID0gQmFzaWNTaGFwZVBhdGg6OmNyZWF0ZShXVEZN
b3ZlKHJlc3VsdGluZ1BhdGhCeXRlcykpOwogICAgIHJlc3VsdC0+c2V0V2luZFJ1bGUod2luZFJ1
bGUoKSk7CiAgICAgcmVzdWx0LT5zZXRab29tKG1fem9vbSk7CkBAIC00MzAsMjEgKzQzMCwyMSBA
QCBib29sIEJhc2ljU2hhcGVJbnNldDo6Y2FuQmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgb3RoZXIp
IGNvbnN0CiAgICAgcmV0dXJuIHR5cGUoKSA9PSBvdGhlci50eXBlKCk7CiB9CiAKLVJlZjxCYXNp
Y1NoYXBlPiBCYXNpY1NoYXBlSW5zZXQ6OmJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIGZyb20sIGRv
dWJsZSBwcm9ncmVzcykgY29uc3QKK1JlZjxCYXNpY1NoYXBlPiBCYXNpY1NoYXBlSW5zZXQ6OmJs
ZW5kKGNvbnN0IEJhc2ljU2hhcGUmIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYgY29udGV4
dCkgY29uc3QKIHsKICAgICBBU1NFUlQodHlwZSgpID09IGZyb20udHlwZSgpKTsKIAogICAgIGF1
dG8mIGZyb21JbnNldCA9IGRvd25jYXN0PEJhc2ljU2hhcGVJbnNldD4oZnJvbSk7CiAgICAgYXV0
byByZXN1bHQgPSAgQmFzaWNTaGFwZUluc2V0OjpjcmVhdGUoKTsKLSAgICByZXN1bHQtPnNldFRv
cChXZWJDb3JlOjpibGVuZChmcm9tSW5zZXQudG9wKCksIHRvcCgpLCBwcm9ncmVzcykpOwotICAg
IHJlc3VsdC0+c2V0UmlnaHQoV2ViQ29yZTo6YmxlbmQoZnJvbUluc2V0LnJpZ2h0KCksIHJpZ2h0
KCksIHByb2dyZXNzKSk7Ci0gICAgcmVzdWx0LT5zZXRCb3R0b20oV2ViQ29yZTo6YmxlbmQoZnJv
bUluc2V0LmJvdHRvbSgpLCBib3R0b20oKSwgcHJvZ3Jlc3MpKTsKLSAgICByZXN1bHQtPnNldExl
ZnQoV2ViQ29yZTo6YmxlbmQoZnJvbUluc2V0LmxlZnQoKSwgbGVmdCgpLCBwcm9ncmVzcykpOwot
Ci0gICAgcmVzdWx0LT5zZXRUb3BMZWZ0UmFkaXVzKFdlYkNvcmU6OmJsZW5kKGZyb21JbnNldC50
b3BMZWZ0UmFkaXVzKCksIHRvcExlZnRSYWRpdXMoKSwgcHJvZ3Jlc3MpKTsKLSAgICByZXN1bHQt
PnNldFRvcFJpZ2h0UmFkaXVzKFdlYkNvcmU6OmJsZW5kKGZyb21JbnNldC50b3BSaWdodFJhZGl1
cygpLCB0b3BSaWdodFJhZGl1cygpLCBwcm9ncmVzcykpOwotICAgIHJlc3VsdC0+c2V0Qm90dG9t
UmlnaHRSYWRpdXMoV2ViQ29yZTo6YmxlbmQoZnJvbUluc2V0LmJvdHRvbVJpZ2h0UmFkaXVzKCks
IGJvdHRvbVJpZ2h0UmFkaXVzKCksIHByb2dyZXNzKSk7Ci0gICAgcmVzdWx0LT5zZXRCb3R0b21M
ZWZ0UmFkaXVzKFdlYkNvcmU6OmJsZW5kKGZyb21JbnNldC5ib3R0b21MZWZ0UmFkaXVzKCksIGJv
dHRvbUxlZnRSYWRpdXMoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXN1bHQtPnNldFRvcChXZWJDb3Jl
OjpibGVuZChmcm9tSW5zZXQudG9wKCksIHRvcCgpLCBjb250ZXh0KSk7CisgICAgcmVzdWx0LT5z
ZXRSaWdodChXZWJDb3JlOjpibGVuZChmcm9tSW5zZXQucmlnaHQoKSwgcmlnaHQoKSwgY29udGV4
dCkpOworICAgIHJlc3VsdC0+c2V0Qm90dG9tKFdlYkNvcmU6OmJsZW5kKGZyb21JbnNldC5ib3R0
b20oKSwgYm90dG9tKCksIGNvbnRleHQpKTsKKyAgICByZXN1bHQtPnNldExlZnQoV2ViQ29yZTo6
YmxlbmQoZnJvbUluc2V0LmxlZnQoKSwgbGVmdCgpLCBjb250ZXh0KSk7CisKKyAgICByZXN1bHQt
PnNldFRvcExlZnRSYWRpdXMoV2ViQ29yZTo6YmxlbmQoZnJvbUluc2V0LnRvcExlZnRSYWRpdXMo
KSwgdG9wTGVmdFJhZGl1cygpLCBjb250ZXh0KSk7CisgICAgcmVzdWx0LT5zZXRUb3BSaWdodFJh
ZGl1cyhXZWJDb3JlOjpibGVuZChmcm9tSW5zZXQudG9wUmlnaHRSYWRpdXMoKSwgdG9wUmlnaHRS
YWRpdXMoKSwgY29udGV4dCkpOworICAgIHJlc3VsdC0+c2V0Qm90dG9tUmlnaHRSYWRpdXMoV2Vi
Q29yZTo6YmxlbmQoZnJvbUluc2V0LmJvdHRvbVJpZ2h0UmFkaXVzKCksIGJvdHRvbVJpZ2h0UmFk
aXVzKCksIGNvbnRleHQpKTsKKyAgICByZXN1bHQtPnNldEJvdHRvbUxlZnRSYWRpdXMoV2ViQ29y
ZTo6YmxlbmQoZnJvbUluc2V0LmJvdHRvbUxlZnRSYWRpdXMoKSwgYm90dG9tTGVmdFJhZGl1cygp
LCBjb250ZXh0KSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0Jhc2ljU2hhcGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFwZXMuaAppbmRleCA4NTUwY2Y5MjBiZWJiZTQ1ZWI3NDY1
ZDhjMjg1YmFmODg0NTZmYjg4Li45YmYwMzczNDc2YjUzZTVjN2E0YTliYzYyMzllNDVlYzRhZDUz
NGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFw
ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFwZXMuaApA
QCAtNDMsNiArNDMsNyBAQCBjbGFzcyBUZXh0U3RyZWFtOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK3N0cnVjdCBCbGVuZGluZ0NvbnRleHQ7CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBQYXRo
OwogY2xhc3MgUmVuZGVyQm94OwpAQCAtNjYsNyArNjcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBXaW5kUnVsZSB3aW5kUnVsZSgpIGNvbnN0IHsgcmV0dXJuIFdpbmRSdWxlOjpOb25aZXJvOyB9
CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuQmxlbmQoY29uc3QgQmFzaWNTaGFwZSYpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIFJlZjxCYXNpY1NoYXBlPiBibGVuZChjb25zdCBCYXNpY1NoYXBlJiBm
cm9tLCBkb3VibGUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZjxCYXNpY1NoYXBlPiBibGVu
ZChjb25zdCBCYXNpY1NoYXBlJiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmKSBjb25zdCA9
IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCYXNpY1NoYXBlJikgY29u
c3QgPSAwOwogICAgIApAQCAtOTYsOSArOTcsOSBAQCBwdWJsaWM6CiAgICAgY29uc3QgTGVuZ3Ro
JiBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQogICAgIGNvbnN0IExlbmd0aCYg
Y29tcHV0ZWRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2NvbXB1dGVkTGVuZ3RoOyB9CiAKLSAg
ICBCYXNpY1NoYXBlQ2VudGVyQ29vcmRpbmF0ZSBibGVuZChjb25zdCBCYXNpY1NoYXBlQ2VudGVy
Q29vcmRpbmF0ZSYgZnJvbSwgZG91YmxlIHByb2dyZXNzKSBjb25zdAorICAgIEJhc2ljU2hhcGVD
ZW50ZXJDb29yZGluYXRlIGJsZW5kKGNvbnN0IEJhc2ljU2hhcGVDZW50ZXJDb29yZGluYXRlJiBm
cm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gQmFzaWNTaGFwZUNlbnRlckNvb3JkaW5hdGUoVG9wTGVmdCwgV2ViQ29yZTo6Ymxl
bmQoZnJvbS5tX2NvbXB1dGVkTGVuZ3RoLCBtX2NvbXB1dGVkTGVuZ3RoLCBwcm9ncmVzcykpOwor
ICAgICAgICByZXR1cm4gQmFzaWNTaGFwZUNlbnRlckNvb3JkaW5hdGUoVG9wTGVmdCwgV2ViQ29y
ZTo6YmxlbmQoZnJvbS5tX2NvbXB1dGVkTGVuZ3RoLCBtX2NvbXB1dGVkTGVuZ3RoLCBjb250ZXh0
KSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCYXNpY1NoYXBlQ2Vu
dGVyQ29vcmRpbmF0ZSYgb3RoZXIpIGNvbnN0CkBAIC0xNDQsMTIgKzE0NSwxMiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX3R5cGUgPT0gVmFsdWUgJiYgb3RoZXIudHlwZSgpID09IFZhbHVl
OwogICAgIH0KIAotICAgIEJhc2ljU2hhcGVSYWRpdXMgYmxlbmQoY29uc3QgQmFzaWNTaGFwZVJh
ZGl1cyYgZnJvbSwgZG91YmxlIHByb2dyZXNzKSBjb25zdAorICAgIEJhc2ljU2hhcGVSYWRpdXMg
YmxlbmQoY29uc3QgQmFzaWNTaGFwZVJhZGl1cyYgZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fdHlwZSAhPSBWYWx1ZSB8fCBm
cm9tLnR5cGUoKSAhPSBWYWx1ZSkKICAgICAgICAgICAgIHJldHVybiBCYXNpY1NoYXBlUmFkaXVz
KGZyb20pOwogCi0gICAgICAgIHJldHVybiBCYXNpY1NoYXBlUmFkaXVzKFdlYkNvcmU6OmJsZW5k
KGZyb20udmFsdWUoKSwgdmFsdWUoKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgcmV0dXJuIEJhc2lj
U2hhcGVSYWRpdXMoV2ViQ29yZTo6YmxlbmQoZnJvbS52YWx1ZSgpLCB2YWx1ZSgpLCBjb250ZXh0
KSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCYXNpY1NoYXBlUmFk
aXVzJiBvdGhlcikgY29uc3QKQEAgLTE4Myw3ICsxODQsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0
IFBhdGgmIHBhdGgoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICBib29sIGNhbkJs
ZW5kKGNvbnN0IEJhc2ljU2hhcGUmKSBjb25zdCBvdmVycmlkZTsKLSAgICBSZWY8QmFzaWNTaGFw
ZT4gYmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgZnJvbSwgZG91YmxlKSBjb25zdCBvdmVycmlkZTsK
KyAgICBSZWY8QmFzaWNTaGFwZT4gYmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgZnJvbSwgY29uc3Qg
QmxlbmRpbmdDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQmFzaWNTaGFwZSYpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0yMTcsNyArMjE4LDcgQEAg
cHJpdmF0ZToKICAgICBjb25zdCBQYXRoJiBwYXRoKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRl
OwogCiAgICAgYm9vbCBjYW5CbGVuZChjb25zdCBCYXNpY1NoYXBlJikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgUmVmPEJhc2ljU2hhcGU+IGJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIGZyb20sIGRvdWJs
ZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPEJhc2ljU2hhcGU+IGJsZW5kKGNvbnN0IEJhc2lj
U2hhcGUmIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJhc2ljU2hhcGUmKSBjb25zdCBvdmVycmlkZTsKIApA
QCAtMjUwLDcgKzI1MSw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgUGF0aCYgcGF0aChjb25zdCBG
bG9hdFJlY3QmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgY2FuQmxlbmQoY29uc3QgQmFzaWNTaGFw
ZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIFJlZjxCYXNpY1NoYXBlPiBibGVuZChjb25zdCBCYXNp
Y1NoYXBlJiBmcm9tLCBkb3VibGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxCYXNpY1NoYXBl
PiBibGVuZChjb25zdCBCYXNpY1NoYXBlJiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCYXNpY1NoYXBlJikg
Y29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTI4Miw3ICsyODMsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0
IFBhdGgmIHBhdGgoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICBib29sIGNhbkJs
ZW5kKGNvbnN0IEJhc2ljU2hhcGUmKSBjb25zdCBvdmVycmlkZTsKLSAgICBSZWY8QmFzaWNTaGFw
ZT4gYmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgZnJvbSwgZG91YmxlKSBjb25zdCBvdmVycmlkZTsK
KyAgICBSZWY8QmFzaWNTaGFwZT4gYmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgZnJvbSwgY29uc3Qg
QmxlbmRpbmdDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQmFzaWNTaGFwZSYpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0zMjUsNyArMzI2LDcgQEAg
cHJpdmF0ZToKICAgICBjb25zdCBQYXRoJiBwYXRoKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRl
OwogCiAgICAgYm9vbCBjYW5CbGVuZChjb25zdCBCYXNpY1NoYXBlJikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgUmVmPEJhc2ljU2hhcGU+IGJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIGZyb20sIGRvdWJs
ZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPEJhc2ljU2hhcGU+IGJsZW5kKGNvbnN0IEJhc2lj
U2hhcGUmIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJhc2ljU2hhcGUmKSBjb25zdCBvdmVycmlkZTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVhYmxlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlYWJsZS5jcHAKaW5kZXggOTZkNTVhODJlOTY5MDQ0ZmJlYzAzNjk1
OGRkNjBiMWRlZWRjNzE1ZS4uNzY1M2MxNjlhOGY4NGM1YWYwNTJiYWYxMjVmODBjZDA3Zjg5ZDdi
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVhYmxlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZWFibGUuY3BwCkBAIC0yMzQsNyArMjM0LDcgQEAgc3Rh
dGljIEtleWZyYW1lRWZmZWN0KiBrZXlmcmFtZUVmZmVjdEZvckVsZW1lbnRBbmRQcm9wZXJ0eShj
b25zdCBTdHlsZWFibGUmIHN0eWwKIHN0YXRpYyBib29sIHByb3BlcnR5SW5TdHlsZU1hdGNoZXNW
YWx1ZUZvclRyYW5zaXRpb25Jbk1hcChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIFByb3BlcnR5VG9UcmFuc2l0aW9uTWFwJiB0cmFuc2l0aW9ucykKIHsK
ICAgICBpZiAoYXV0byogdHJhbnNpdGlvbiA9IHRyYW5zaXRpb25zLmdldChwcm9wZXJ0eSkpIHsK
LSAgICAgICAgaWYgKENTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwocHJvcGVy
dHksICZzdHlsZSwgJnRyYW5zaXRpb24tPnRhcmdldFN0eWxlKCkpKQorICAgICAgICBpZiAoQ1NT
UHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChwcm9wZXJ0eSwgc3R5bGUsIHRyYW5z
aXRpb24tPnRhcmdldFN0eWxlKCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIHJldHVybiBmYWxzZTsKQEAgLTM1Niw4ICszNTYsOCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVD
U1NUcmFuc2l0aW9uc0ZvclN0eWxlYWJsZUFuZFByb3BlcnR5KGNvbnN0IFN0eWxlYWJsZSYgc3R5
bGVhYgogICAgIH0oKTsKIAogICAgIGlmICghc3R5bGVhYmxlLmhhc1J1bm5pbmdUcmFuc2l0aW9u
Rm9yUHJvcGVydHkocHJvcGVydHkpCi0gICAgICAgICYmICFDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6
cHJvcGVydGllc0VxdWFsKHByb3BlcnR5LCAmYmVmb3JlQ2hhbmdlU3R5bGUsICZhZnRlckNoYW5n
ZVN0eWxlKQotICAgICAgICAmJiBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUlu
dGVycG9sYXRlZChwcm9wZXJ0eSwgJmJlZm9yZUNoYW5nZVN0eWxlLCAmYWZ0ZXJDaGFuZ2VTdHls
ZSkKKyAgICAgICAgJiYgIUNTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwocHJv
cGVydHksIGJlZm9yZUNoYW5nZVN0eWxlLCBhZnRlckNoYW5nZVN0eWxlKQorICAgICAgICAmJiBD
U1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChwcm9wZXJ0eSwg
YmVmb3JlQ2hhbmdlU3R5bGUsIGFmdGVyQ2hhbmdlU3R5bGUpCiAgICAgICAgICYmICFwcm9wZXJ0
eUluU3R5bGVNYXRjaGVzVmFsdWVGb3JUcmFuc2l0aW9uSW5NYXAocHJvcGVydHksIGFmdGVyQ2hh
bmdlU3R5bGUsIHN0eWxlYWJsZS5lbnN1cmVDb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHko
KSkKICAgICAgICAgJiYgbWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uICYmIHRyYW5zaXRpb25Db21i
aW5lZER1cmF0aW9uKG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbikgPiAwKSB7CiAgICAgICAgIC8v
IDEuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlOgpAQCAtNDAzLDE1ICs0MDMsMTUg
QEAgc3RhdGljIHZvaWQgdXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JTdHlsZWFibGVBbmRQcm9wZXJ0
eShjb25zdCBTdHlsZWFibGUmIHN0eWxlYWIKICAgICAgICAgYXV0byYgcHJldmlvdXNseVJ1bm5p
bmdUcmFuc2l0aW9uQ3VycmVudFN0eWxlID0gcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uLT5j
dXJyZW50U3R5bGUoKTsKICAgICAgICAgLy8gNC4gSWYgdGhlIGVsZW1lbnQgaGFzIGEgcnVubmlu
ZyB0cmFuc2l0aW9uIGZvciB0aGUgcHJvcGVydHksIHRoZXJlIGlzIGEgbWF0Y2hpbmcgdHJhbnNp
dGlvbi1wcm9wZXJ0eSB2YWx1ZSwgYW5kIHRoZSBlbmQgdmFsdWUgb2YgdGhlIHJ1bm5pbmcKICAg
ICAgICAgLy8gICAgdHJhbnNpdGlvbiBpcyBub3QgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIHRoZSBw
cm9wZXJ0eSBpbiB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxlLCB0aGVuOgotICAgICAgICBpZiAoQ1NT
UHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChwcm9wZXJ0eSwgJnByZXZpb3VzbHlS
dW5uaW5nVHJhbnNpdGlvbkN1cnJlbnRTdHlsZSwgJmFmdGVyQ2hhbmdlU3R5bGUpIHx8ICFDU1NQ
cm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChwcm9wZXJ0eSwgJmN1
cnJlbnRTdHlsZSwgJmFmdGVyQ2hhbmdlU3R5bGUpKSB7CisgICAgICAgIGlmIChDU1NQcm9wZXJ0
eUFuaW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKHByb3BlcnR5LCBwcmV2aW91c2x5UnVubmluZ1Ry
YW5zaXRpb25DdXJyZW50U3R5bGUsIGFmdGVyQ2hhbmdlU3R5bGUpIHx8ICFDU1NQcm9wZXJ0eUFu
aW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChwcm9wZXJ0eSwgY3VycmVudFN0eWxl
LCBhZnRlckNoYW5nZVN0eWxlKSkgewogICAgICAgICAgICAgLy8gMS4gSWYgdGhlIGN1cnJlbnQg
dmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBydW5uaW5nIHRyYW5zaXRpb24gaXMgZXF1YWwg
dG8gdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxlLAog
ICAgICAgICAgICAgLy8gICAgb3IgaWYgdGhlc2UgdHdvIHZhbHVlcyBjYW5ub3QgYmUgaW50ZXJw
b2xhdGVkLCB0aGVuIGltcGxlbWVudGF0aW9ucyBtdXN0IGNhbmNlbCB0aGUgcnVubmluZyB0cmFu
c2l0aW9uLgogICAgICAgICAgICAgcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uLT5jYW5jZWxG
cm9tU3R5bGUoKTsKLSAgICAgICAgfSBlbHNlIGlmICh0cmFuc2l0aW9uQ29tYmluZWREdXJhdGlv
bihtYXRjaGluZ0JhY2tpbmdBbmltYXRpb24pIDw9IDAuMCB8fCAhQ1NTUHJvcGVydHlBbmltYXRp
b246OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQocHJvcGVydHksICZwcmV2aW91c2x5UnVubmlu
Z1RyYW5zaXRpb25DdXJyZW50U3R5bGUsICZhZnRlckNoYW5nZVN0eWxlKSkgeworICAgICAgICB9
IGVsc2UgaWYgKHRyYW5zaXRpb25Db21iaW5lZER1cmF0aW9uKG1hdGNoaW5nQmFja2luZ0FuaW1h
dGlvbikgPD0gMC4wIHx8ICFDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVy
cG9sYXRlZChwcm9wZXJ0eSwgcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uQ3VycmVudFN0eWxl
LCBhZnRlckNoYW5nZVN0eWxlKSkgewogICAgICAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0
aGUgY29tYmluZWQgZHVyYXRpb24gaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDBzLCBvciBpZiB0
aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIHJ1bm5pbmcgdHJhbnNpdGlv
bgogICAgICAgICAgICAgLy8gICAgY2Fubm90IGJlIGludGVycG9sYXRlZCB3aXRoIHRoZSB2YWx1
ZSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIGFmdGVyLWNoYW5nZSBzdHlsZSwgdGhlbiBpbXBsZW1l
bnRhdGlvbnMgbXVzdCBjYW5jZWwgdGhlIHJ1bm5pbmcgdHJhbnNpdGlvbi4KICAgICAgICAgICAg
IHByZXZpb3VzbHlSdW5uaW5nVHJhbnNpdGlvbi0+Y2FuY2VsRnJvbVN0eWxlKCk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoQ1NTUHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChwcm9wZXJ0
eSwgJnByZXZpb3VzbHlSdW5uaW5nVHJhbnNpdGlvbi0+cmV2ZXJzaW5nQWRqdXN0ZWRTdGFydFN0
eWxlKCksICZhZnRlckNoYW5nZVN0eWxlKSkgeworICAgICAgICB9IGVsc2UgaWYgKENTU1Byb3Bl
cnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwocHJvcGVydHksIHByZXZpb3VzbHlSdW5uaW5n
VHJhbnNpdGlvbi0+cmV2ZXJzaW5nQWRqdXN0ZWRTdGFydFN0eWxlKCksIGFmdGVyQ2hhbmdlU3R5
bGUpKSB7CiAgICAgICAgICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHRoZSByZXZlcnNpbmctYWRq
dXN0ZWQgc3RhcnQgdmFsdWUgb2YgdGhlIHJ1bm5pbmcgdHJhbnNpdGlvbiBpcyB0aGUgc2FtZSBh
cyB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBhZnRlci1jaGFuZ2UKICAgICAgICAg
ICAgIC8vICAgIHN0eWxlIChzZWUgdGhlIHNlY3Rpb24gb24gcmV2ZXJzaW5nIG9mIHRyYW5zaXRp
b25zIGZvciB3aHkgdGhlc2UgY2FzZSBleGlzdHMpLCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBjYW5j
ZWwgdGhlIHJ1bm5pbmcgdHJhbnNpdGlvbgogICAgICAgICAgICAgcHJldmlvdXNseVJ1bm5pbmdU
cmFuc2l0aW9uLT5jYW5jZWxGcm9tU3R5bGUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425843</attachid>
            <date>2021-04-13 00:50:37 -0700</date>
            <delta_ts>2021-04-13 01:37:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224433-20210413095035.patch</filename>
            <type>text/plain</type>
            <size>175537</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1NzkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTBkMjExNTRiZmY2ZTg2
NWFhYjlhYzYzYzVjNWUxM2VlNjA1OGQzMS4uYmY2NGZjNmYzMGY2ZjRhYjQ0ODA0OWM1ZThmMGZh
ZjQxYmIyYTM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMSBAQAorMjAyMS0wNC0xMiAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZWZhY3RvciBwYXJh
bWV0ZXJzIHRvIGJsZW5kaW5nIGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0NDMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmVkdWNlIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBwYXNz
ZWQgdG8gdGhlIGJsZW5kaW5nIGZ1bmN0aW9ucyBzdWNoIHRoYXQgd2UgcGFja2FnZQorICAgICAg
ICB0aGUgY2xpZW50IGFuZCBwcm9ncmVzcyB0b2dldGhlciBhbmQgdHJhY2sgd2hldGhlciB0aGUg
YW5pbWF0aW9uIGlzIGRpc2NyZXRlIGluc3RlYWQKKyAgICAgICAgb2YgY29tcHV0aW5nIGl0IHNl
dmVyYWwgdGltZXMuIFRoaXMgaW5mb3JtYXRpb24gaXMgbm93IHBhc3NlZCBhcyBhIEJsZW5kaW5n
Q29udGV4dAorICAgICAgICBwYXJhbWV0ZXIsIGFuZCBhIENTU1Byb3BlcnR5QmxlbmRpbmdDb250
ZXh0IHByaXZhdGUgdG8gQ1NTUHJvcGVydHlBbmltYXRpb24uCisgCisgICAgICAgIFdoZW4gd2Ug
c3VwcG9ydCBjb21wb3NpdGUgb3BlcnRpb25zLCB3ZSdsbCBqdXN0IG5lZWQgdG8gYWRkIGEgbmV3
IG1lbWJlciB0byB0aGF0CisgICAgICAgIHN0cnVjdCBpbnN0ZWFkIG9mIG1vZGlmeWluZyBhbGwg
dGhlIG1ldGhvZCBzaWduYXR1cmVzLgorCisgICAgICAgIFNpbmNlIHdlIGFyZSBtb2RpZnlpbmcg
dGhlIG1ldGhvZCBzaWduYXR1cmVzLCB3ZSBhbHNvIGNoYW5nZSB0aGUgUmVuZGVyU3R5bGUgcG9p
bnRlcnMKKyAgICAgICAgdG8gcmVmZXJlbmNlcyBzaW5jZSB3ZSB3b3VsZCBuZXZlciBwYXNzIGlu
IGEgbnVsbCB2YWx1ZS4KKworICAgICAgICAqIGFuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dDo6Q1NT
UHJvcGVydHlCbGVuZGluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRGdW5jKToK
KyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRmlsdGVyT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpibGVuZEZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpjcm9zc2ZhZGVCbGVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlOjpjYW5JbnRlcnBv
bGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI6OnZh
bHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNhbkludGVycG9sYXRlQ2FyZXRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0aWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1
YWwpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlBbmltYXRpb246OmNhblByb3BlcnR5
QmVJbnRlcnBvbGF0ZWQpOgorICAgICAgICAqIGFuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlv
bi5oOgorICAgICAgICAqIGFuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpLZXlmcmFtZUVmZmVjdDo6c2V0QW5pbWF0ZWRQcm9wZXJ0aWVzSW5TdHlsZSk6Cisg
ICAgICAgICogY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJs
ZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDcm9zc2ZhZGVWYWx1ZTo6YmxlbmQgY29u
c3QpOgorICAgICAgICAqIGNzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5oOgorICAgICAgICAqIGNzcy9D
U1NHcmFkaWVudFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlhbEdyYWRpZW50QWRh
cHRlcjo6bm9ybWFsaXplU3RvcHNBbmRFbmRwb2ludHNPdXRzaWRlUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q29uaWNHcmFkaWVudEFkYXB0ZXI6Om5vcm1hbGl6ZVN0b3BzQW5kRW5kcG9pbnRz
T3V0c2lkZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRpZW50VmFsdWU6OmNvbXB1
dGVTdG9wcyk6CisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmJsZW5kTWl4ZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpibGVuZCk6CisgICAgICAg
ICogcGxhdGZvcm0vTGVuZ3RoLmg6CisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoUG9pbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OmJsZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MZW5ndGhTaXpl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpibGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vYW5pbWF0
aW9uL0FuaW1hdGlvblV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6QmxlbmRpbmdDb250
ZXh0OjpCbGVuZGluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6YmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRXaXRob3V0UHJlbXVsdGlwbHkpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246
OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb246OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkludmVydExpZ2h0bmVzc0ZpbHRl
ck9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6Qmx1ckZpbHRlck9wZXJhdGlv
bjo6YmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6
YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OmJsZW5kKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0
aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXgzRFRy
YW5zZm9ybU9wZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVPcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNmb3Jt
T3BlcmF0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRy
aXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWF0cml4VHJhbnNm
b3JtT3BlcmF0aW9uOjpibGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL1BlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9w
ZXJhdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUm90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5zZm9ybU9wZXJhdGlv
bi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3Bl
cmF0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zv
cm1PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbnM6
OmJsZW5kQnlNYXRjaGluZ09wZXJhdGlvbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJh
bnNmb3JtT3BlcmF0aW9uczo6YmxlbmRCeVVzaW5nTWF0cml4SW50ZXJwb2xhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb25zOjpibGVuZCBjb25zdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25z
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpibGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5
bGUvQmFzaWNTaGFwZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzaWNTaGFwZUNpcmNsZTo6
YmxlbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFzaWNTaGFwZUVsbGlwc2U6OmJsZW5k
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljU2hhcGVQb2x5Z29uOjpibGVuZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY1NoYXBlUGF0aDo6YmxlbmQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6QmFzaWNTaGFwZUluc2V0OjpibGVuZCBjb25zdCk6CisgICAgICAgICog
cmVuZGVyaW5nL3N0eWxlL0Jhc2ljU2hhcGVzLmg6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY1No
YXBlQ2VudGVyQ29vcmRpbmF0ZTo6YmxlbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFz
aWNTaGFwZVJhZGl1czo6YmxlbmQgY29uc3QpOgorICAgICAgICAqIHN0eWxlL1N0eWxlYWJsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwcm9wZXJ0eUluU3R5bGVNYXRjaGVzVmFsdWVGb3JUcmFu
c2l0aW9uSW5NYXApOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JT
dHlsZWFibGVBbmRQcm9wZXJ0eSk6CisKIDIwMjEtMDQtMDkgIEFudG9pbmUgUXVpbnQgIDxncmFv
dXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgY2FsYygpIHNpbXBsaWZpY2F0aW9uIGZvciBhIG11
bHRpcGxpY2F0aW9uIHNob3VsZCBhcHBseSB0aGUgbXVsdGlwbGljYXRpb24gdG8gZWFjaCB2YWx1
ZSBvZiBhbiBhZGRpdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NT
U1Byb3BlcnR5QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9w
ZXJ0eUFuaW1hdGlvbi5jcHAKaW5kZXggNDcyYThmODcyYTY4MzNhMmYxOGVmYmEwNGFkMGQzMzA0
MjQ3OGY3My4uMWE4Zjc5NTZmY2FkNTkwMjA0MzRkOGIzMmEwMTY3NDRiMDVjNzE2NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCkBA
IC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlBbmltYXRpb24uaCIKIAorI2luY2x1ZGUgIkFuaW1hdGlvblV0aWxpdGllcy5oIgogI2luY2x1
ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU0Nyb3NzZmFk
ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oIgpAQCAtNzAsODcgKzcx
LDk3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGlubGluZSBpbnQgYmxlbmRG
dW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBpbnQgZnJvbSwgaW50IHRvLCBk
b3VibGUgcHJvZ3Jlc3MpCitzdHJ1Y3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQgOiBCbGVu
ZGluZ0NvbnRleHQgeworICAgIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVu
dDsKKworICAgIENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0KGRvdWJsZSBwcm9ncmVzcywgYm9v
bCBpc0Rpc2NyZXRlLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQpCisg
ICAgICAgIDogQmxlbmRpbmdDb250ZXh0KHByb2dyZXNzLCBpc0Rpc2NyZXRlKQorICAgICAgICAs
IGNsaWVudChjbGllbnQpCisgICAgeworICAgIH0KK307CisKK3N0YXRpYyBpbmxpbmUgaW50IGJs
ZW5kRnVuYyhpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4
dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAg
ICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIGNvbnRleHQpOwogfQogCi1zdGF0aWMgaW5saW5lIGRv
dWJsZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGRvdWJsZSBm
cm9tLCBkb3VibGUgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgZG91YmxlIGJs
ZW5kRnVuYyhkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNz
KTsKKyAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIGNvbnRleHQpOwogfQogCi1zdGF0aWMgaW5s
aW5lIGZsb2F0IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgZmxv
YXQgZnJvbSwgZmxvYXQgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgZmxvYXQg
YmxlbmRGdW5jKGZsb2F0IGZyb20sIGZsb2F0IHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9GbG9hdChm
cm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVzcyk7CisgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoZnJvbSArICh0byAtIGZyb20pICogY29udGV4dC5wcm9ncmVzcyk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgQ29sb3IgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqLCBjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
CitzdGF0aWMgaW5saW5lIENvbG9yIGJsZW5kRnVuYyhjb25zdCBDb2xvciYgZnJvbSwgY29uc3Qg
Q29sb3ImIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsK
LSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAgICByZXR1cm4gYmxlbmQo
ZnJvbSwgdG8sIGNvbnRleHQpOwogfQogCi1zdGF0aWMgaW5saW5lIExlbmd0aCBibGVuZEZ1bmMo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IExlbmd0aCYgZnJvbSwgY29u
c3QgTGVuZ3RoJiB0bywgZG91YmxlIHByb2dyZXNzLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBW
YWx1ZVJhbmdlQWxsKQorc3RhdGljIGlubGluZSBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IExlbmd0
aCYgZnJvbSwgY29uc3QgTGVuZ3RoJiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRl
eHQmIGNvbnRleHQsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2VBbGwpCiB7Ci0g
ICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9ncmVzcywgdmFsdWVSYW5nZSk7CisgICAgcmV0
dXJuIGJsZW5kKGZyb20sIHRvLCBjb250ZXh0LCB2YWx1ZVJhbmdlKTsKIH0KIAotc3RhdGljIGlu
bGluZSBHYXBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
LCBjb25zdCBHYXBMZW5ndGgmIGZyb20sIGNvbnN0IEdhcExlbmd0aCYgdG8sIGRvdWJsZSBwcm9n
cmVzcykKK3N0YXRpYyBpbmxpbmUgR2FwTGVuZ3RoIGJsZW5kRnVuYyhjb25zdCBHYXBMZW5ndGgm
IGZyb20sIGNvbnN0IEdhcExlbmd0aCYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250
ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChmcm9tLmlzTm9ybWFsKCkgfHwgdG8uaXNOb3JtYWwo
KSkKLSAgICAgICAgcmV0dXJuIHByb2dyZXNzIDwgMC41ID8gZnJvbSA6IHRvOwotICAgIHJldHVy
biBibGVuZChmcm9tLmxlbmd0aCgpLCB0by5sZW5ndGgoKSwgcHJvZ3Jlc3MsIFZhbHVlUmFuZ2VO
b25OZWdhdGl2ZSk7CisgICAgICAgIHJldHVybiBjb250ZXh0LnByb2dyZXNzIDwgMC41ID8gZnJv
bSA6IHRvOworICAgIHJldHVybiBibGVuZChmcm9tLmxlbmd0aCgpLCB0by5sZW5ndGgoKSwgY29u
dGV4dCwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKIH0KIAotc3RhdGljIGlubGluZSBUYWJTaXpl
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgY29uc3QgVGFiU2l6
ZSYgZnJvbSwgY29uc3QgVGFiU2l6ZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxp
bmUgVGFiU2l6ZSBibGVuZEZ1bmMoY29uc3QgVGFiU2l6ZSYgZnJvbSwgY29uc3QgVGFiU2l6ZSYg
dG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewotICAgIGF1
dG8gYmxlbmRlZFZhbHVlID0gYmxlbmQoZnJvbS52YWx1ZSgpLCB0by52YWx1ZSgpLCBwcm9ncmVz
cyk7CisgICAgYXV0byBibGVuZGVkVmFsdWUgPSBibGVuZChmcm9tLnZhbHVlKCksIHRvLnZhbHVl
KCksIGNvbnRleHQpOwogICAgIHJldHVybiB7IGJsZW5kZWRWYWx1ZSA8IDAgPyAwIDogYmxlbmRl
ZFZhbHVlLCBmcm9tLmlzU3BhY2VzKCkgPyBTcGFjZVZhbHVlVHlwZSA6IExlbmd0aFZhbHVlVHlw
ZSB9OwogfQogCi1zdGF0aWMgaW5saW5lIExlbmd0aFNpemUgYmxlbmRGdW5jKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgY29uc3QgTGVuZ3RoU2l6ZSYgZnJvbSwgY29u
c3QgTGVuZ3RoU2l6ZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgTGVuZ3Ro
U2l6ZSBibGVuZEZ1bmMoY29uc3QgTGVuZ3RoU2l6ZSYgZnJvbSwgY29uc3QgTGVuZ3RoU2l6ZSYg
dG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJl
dHVybiB7IGJsZW5kRnVuYyhjbGllbnQsIGZyb20ud2lkdGgsIHRvLndpZHRoLCBwcm9ncmVzcywg
VmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSwKLSAgICAgICAgICAgICBibGVuZEZ1bmMoY2xpZW50LCBm
cm9tLmhlaWdodCwgdG8uaGVpZ2h0LCBwcm9ncmVzcywgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSB9
OworICAgIHJldHVybiB7IGJsZW5kRnVuYyhmcm9tLndpZHRoLCB0by53aWR0aCwgY29udGV4dCwg
VmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSwKKyAgICAgICAgICAgICBibGVuZEZ1bmMoZnJvbS5oZWln
aHQsIHRvLmhlaWdodCwgY29udGV4dCwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSB9OwogfQogCi1z
dGF0aWMgaW5saW5lIExlbmd0aFBvaW50IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiwgY29uc3QgTGVuZ3RoUG9pbnQmIGZyb20sIGNvbnN0IExlbmd0aFBvaW50JiB0
bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBMZW5ndGhQb2ludCBibGVuZEZ1bmMo
Y29uc3QgTGVuZ3RoUG9pbnQmIGZyb20sIGNvbnN0IExlbmd0aFBvaW50JiB0bywgY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGJsZW5kKGZy
b20sIHRvLCBwcm9ncmVzcyk7CisgICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBjb250ZXh0KTsK
IH0KIAotc3RhdGljIGlubGluZSBTaGFkb3dTdHlsZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBTaGFkb3dTdHlsZSBmcm9tLCBTaGFkb3dTdHlsZSB0
bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBTaGFkb3dTdHlsZSBibGVuZEZ1bmMo
U2hhZG93U3R5bGUgZnJvbSwgU2hhZG93U3R5bGUgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChmcm9tID09IHRvKQogICAgICAgICByZXR1
cm4gdG87CiAKICAgICBkb3VibGUgZnJvbVZhbCA9IGZyb20gPT0gU2hhZG93U3R5bGU6Ok5vcm1h
bCA/IDEgOiAwOwogICAgIGRvdWJsZSB0b1ZhbCA9IHRvID09IFNoYWRvd1N0eWxlOjpOb3JtYWwg
PyAxIDogMDsKLSAgICBkb3VibGUgcmVzdWx0ID0gYmxlbmRGdW5jKGNsaWVudCwgZnJvbVZhbCwg
dG9WYWwsIHByb2dyZXNzKTsKKyAgICBkb3VibGUgcmVzdWx0ID0gYmxlbmRGdW5jKGZyb21WYWws
IHRvVmFsLCBjb250ZXh0KTsKICAgICByZXR1cm4gcmVzdWx0ID4gMCA/IFNoYWRvd1N0eWxlOjpO
b3JtYWwgOiBTaGFkb3dTdHlsZTo6SW5zZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RkOjp1bmlx
dWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBjbGllbnQsIGNvbnN0IFNoYWRvd0RhdGEqIGZyb20sIGNvbnN0IFNoYWRvd0RhdGEqIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dE
YXRhPiBibGVuZEZ1bmMoY29uc3QgU2hhZG93RGF0YSogZnJvbSwgY29uc3QgU2hhZG93RGF0YSog
dG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIEFT
U0VSVChmcm9tICYmIHRvKTsKICAgICBBU1NFUlQoZnJvbS0+c3R5bGUoKSA9PSB0by0+c3R5bGUo
KSk7CiAKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPihibGVuZChmcm9tLT5sb2Nh
dGlvbigpLCB0by0+bG9jYXRpb24oKSwgcHJvZ3Jlc3MpLAotICAgICAgICBzdGQ6Om1heCgwLCBi
bGVuZChmcm9tLT5yYWRpdXMoKSwgdG8tPnJhZGl1cygpLCBwcm9ncmVzcykpLAotICAgICAgICBi
bGVuZChmcm9tLT5zcHJlYWQoKSwgdG8tPnNwcmVhZCgpLCBwcm9ncmVzcyksCi0gICAgICAgIGJs
ZW5kRnVuYyhjbGllbnQsIGZyb20tPnN0eWxlKCksIHRvLT5zdHlsZSgpLCBwcm9ncmVzcyksCisg
ICAgcmV0dXJuIG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oYmxlbmQoZnJvbS0+bG9jYXRpb24oKSwg
dG8tPmxvY2F0aW9uKCksIGNvbnRleHQpLAorICAgICAgICBzdGQ6Om1heCgwLCBibGVuZChmcm9t
LT5yYWRpdXMoKSwgdG8tPnJhZGl1cygpLCBjb250ZXh0KSksCisgICAgICAgIGJsZW5kKGZyb20t
PnNwcmVhZCgpLCB0by0+c3ByZWFkKCksIGNvbnRleHQpLAorICAgICAgICBibGVuZEZ1bmMoZnJv
bS0+c3R5bGUoKSwgdG8tPnN0eWxlKCksIGNvbnRleHQpLAogICAgICAgICBmcm9tLT5pc1dlYmtp
dEJveFNoYWRvdygpLAotICAgICAgICBibGVuZChmcm9tLT5jb2xvcigpLCB0by0+Y29sb3IoKSwg
cHJvZ3Jlc3MpKTsKKyAgICAgICAgYmxlbmQoZnJvbS0+Y29sb3IoKSwgdG8tPmNvbG9yKCksIGNv
bnRleHQpKTsKIH0KIAotc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kRnVu
Yyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIGNvbnN0IFRyYW5zZm9y
bU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRGdW5jKGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMm
IHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBp
ZiAoY2xpZW50LT50cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2goKSkKLSAgICAgICAgcmV0dXJu
IHRvLmJsZW5kQnlNYXRjaGluZ09wZXJhdGlvbnMoZnJvbSwgcHJvZ3Jlc3MpOwotICAgIHJldHVy
biB0by5ibGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9uKGZyb20sIHByb2dyZXNzLCBpczxS
ZW5kZXJCb3g+KGNsaWVudC0+cmVuZGVyZXIoKSkgPyBkb3duY2FzdDxSZW5kZXJCb3g+KCpjbGll
bnQtPnJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKS5zaXplKCkgOiBMYXlvdXRTaXplKCkpOwor
ICAgIGlmIChjb250ZXh0LmNsaWVudC0+dHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNoKCkpCisg
ICAgICAgIHJldHVybiB0by5ibGVuZEJ5TWF0Y2hpbmdPcGVyYXRpb25zKGZyb20sIGNvbnRleHQp
OworICAgIHJldHVybiB0by5ibGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9uKGZyb20sIGNv
bnRleHQsIGlzPFJlbmRlckJveD4oY29udGV4dC5jbGllbnQtPnJlbmRlcmVyKCkpID8gZG93bmNh
c3Q8UmVuZGVyQm94PigqY29udGV4dC5jbGllbnQtPnJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3Qo
KS5zaXplKCkgOiBMYXlvdXRTaXplKCkpOwogfQogCi1zdGF0aWMgUmVmUHRyPFNjYWxlVHJhbnNm
b3JtT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCog
Y2xpZW50LCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgU2NhbGVUcmFuc2Zvcm1PcGVy
YXRpb24qIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgUmVmUHRyPFNjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uPiBibGVuZEZ1bmMoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIFNjYWxl
VHJhbnNmb3JtT3BlcmF0aW9uKiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQm
IGNvbnRleHQpCiB7CiAgICAgaWYgKCFmcm9tICYmICF0bykKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CkBAIC0xNzUsMTAgKzE4NiwxMCBAQCBzdGF0aWMgUmVmUHRyPFNjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudAogICAgICAg
ICAgICAgbm9ybWFsaXplZEZyb20gPSBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGZy
b20tPngoKSwgZnJvbS0+eSgpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFKTsKICAgICAgICAg
ICAgIG5vcm1hbGl6ZWRUbyA9IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodG8tPngo
KSwgdG8tPnkoKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRSk7CiAgICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIGJsZW5kRnVuYyhjbGllbnQsIG5vcm1hbGl6ZWRGcm9tLmdldCgpLCBub3JtYWxp
emVkVG8uZ2V0KCksIHByb2dyZXNzKTsKKyAgICAgICAgcmV0dXJuIGJsZW5kRnVuYyhub3JtYWxp
emVkRnJvbS5nZXQoKSwgbm9ybWFsaXplZFRvLmdldCgpLCBjb250ZXh0KTsKICAgICB9CiAKLSAg
ICBhdXRvIGJsZW5kZWRPcGVyYXRpb24gPSB0by0+YmxlbmQoZnJvbSwgcHJvZ3Jlc3MpOworICAg
IGF1dG8gYmxlbmRlZE9wZXJhdGlvbiA9IHRvLT5ibGVuZChmcm9tLCBjb250ZXh0KTsKICAgICBp
ZiAoaXM8U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24+KGJsZW5kZWRPcGVyYXRpb24uZ2V0KCkpKSB7
CiAgICAgICAgIGF1dG8mIHNjYWxlID0gZG93bmNhc3Q8U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24+
KGJsZW5kZWRPcGVyYXRpb24uZ2V0KCkpOwogICAgICAgICByZXR1cm4gU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShzY2FsZS54KCksIHNjYWxlLnkoKSwgc2NhbGUueigpLCBzY2FsZS50
eXBlKCkpOwpAQCAtMTg2LDcgKzE5Nyw3IEBAIHN0YXRpYyBSZWZQdHI8U2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb24+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50CiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZWZQdHI8Um90YXRlVHJhbnNmb3JtT3BlcmF0
aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBS
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiog
dG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBSZWZQdHI8Um90YXRlVHJhbnNmb3JtT3BlcmF0
aW9uPiBibGVuZEZ1bmMoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBSb3RhdGVUcmFu
c2Zvcm1PcGVyYXRpb24qIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29u
dGV4dCkKIHsKICAgICBpZiAoIWZyb20gJiYgIXRvKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
QEAgLTIxMSwxMCArMjIyLDEwIEBAIHN0YXRpYyBSZWZQdHI8Um90YXRlVHJhbnNmb3JtT3BlcmF0
aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVuCiAgICAgICAgICAg
ICBub3JtYWxpemVkRnJvbSA9IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGZyb20t
PmFuZ2xlKCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFKTsKICAgICAgICAgICAgIG5vcm1h
bGl6ZWRUbyA9IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRvLT5hbmdsZSgpLCBU
cmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJs
ZW5kRnVuYyhjbGllbnQsIG5vcm1hbGl6ZWRGcm9tLmdldCgpLCBub3JtYWxpemVkVG8uZ2V0KCks
IHByb2dyZXNzKTsKKyAgICAgICAgcmV0dXJuIGJsZW5kRnVuYyhub3JtYWxpemVkRnJvbS5nZXQo
KSwgbm9ybWFsaXplZFRvLmdldCgpLCBjb250ZXh0KTsKICAgICB9CiAKLSAgICBhdXRvIGJsZW5k
ZWRPcGVyYXRpb24gPSB0by0+YmxlbmQoZnJvbSwgcHJvZ3Jlc3MpOworICAgIGF1dG8gYmxlbmRl
ZE9wZXJhdGlvbiA9IHRvLT5ibGVuZChmcm9tLCBjb250ZXh0KTsKICAgICBpZiAoaXM8Um90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uPihibGVuZGVkT3BlcmF0aW9uLmdldCgpKSkgewogICAgICAgICBh
dXRvJiByb3RhdGUgPSBkb3duY2FzdDxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24+KGJsZW5kZWRP
cGVyYXRpb24uZ2V0KCkpOwogICAgICAgICByZXR1cm4gUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUocm90YXRlLngoKSwgcm90YXRlLnkoKSwgcm90YXRlLnooKSwgcm90YXRlLmFuZ2xl
KCksIHJvdGF0ZS50eXBlKCkpOwpAQCAtMjIyLDcgKzIzMyw3IEBAIHN0YXRpYyBSZWZQdHI8Um90
YXRlVHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVuCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZWZQdHI8VHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogY2xpZW50LCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbiogdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBSZWZQdHI8
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZEZ1bmMoVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uKiBmcm9tLCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRvLCBjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoIWZyb20gJiYg
IXRvKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI0NywxMCArMjU4LDEwIEBAIHN0YXRp
YyBSZWZQdHI8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsCiAgICAgICAgICAgICBub3JtYWxpemVkRnJvbSA9IFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGZyb20tPngoKSwgZnJvbS0+eSgpLCBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURSk7CiAgICAgICAgICAgICBub3JtYWxpemVkVG8gPSBUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0by0+eCgpLCB0by0+eSgpLCBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJsZW5k
RnVuYyhjbGllbnQsIG5vcm1hbGl6ZWRGcm9tLmdldCgpLCBub3JtYWxpemVkVG8uZ2V0KCksIHBy
b2dyZXNzKTsKKyAgICAgICAgcmV0dXJuIGJsZW5kRnVuYyhub3JtYWxpemVkRnJvbS5nZXQoKSwg
bm9ybWFsaXplZFRvLmdldCgpLCBjb250ZXh0KTsKICAgICB9CiAKLSAgICBSZWY8VHJhbnNmb3Jt
T3BlcmF0aW9uPiBibGVuZGVkT3BlcmF0aW9uID0gdG8tPmJsZW5kKGZyb20sIHByb2dyZXNzKTsK
KyAgICBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZGVkT3BlcmF0aW9uID0gdG8tPmJsZW5k
KGZyb20sIGNvbnRleHQpOwogICAgIGlmIChpczxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24+
KGJsZW5kZWRPcGVyYXRpb24uZ2V0KCkpKSB7CiAgICAgICAgIFRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbiYgdHJhbnNsYXRlID0gZG93bmNhc3Q8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
PihibGVuZGVkT3BlcmF0aW9uLmdldCgpKTsKICAgICAgICAgcmV0dXJuIFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zbGF0ZS54KCksIHRyYW5zbGF0ZS55KCksIHRyYW5z
bGF0ZS56KCksIHRyYW5zbGF0ZS50eXBlKCkpOwpAQCAtMjU4LDcgKzI2OSw3IEBAIHN0YXRpYyBS
ZWZQdHI8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJv
cGVydHlCbGVuZGluZ0NsCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
UmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCosIENsaXBQYXRoT3BlcmF0aW9uKiBmcm9tLCBDbGlwUGF0aE9wZXJhdGlvbiog
dG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgUmVmUHRyPENsaXBQYXRoT3BlcmF0
aW9uPiBibGVuZEZ1bmMoQ2xpcFBhdGhPcGVyYXRpb24qIGZyb20sIENsaXBQYXRoT3BlcmF0aW9u
KiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAg
aWYgKCFmcm9tIHx8ICF0bykKICAgICAgICAgcmV0dXJuIHRvOwpAQCAtMjczLDMwICsyODQsMzAg
QEAgc3RhdGljIGlubGluZSBSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IGJsZW5kRnVuYyhjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW4KICAgICBpZiAoIWZyb21TaGFwZS5jYW5CbGVuZCh0
b1NoYXBlKSkKICAgICAgICAgcmV0dXJuIHRvOwogCi0gICAgcmV0dXJuIFNoYXBlQ2xpcFBhdGhP
cGVyYXRpb246OmNyZWF0ZSh0b1NoYXBlLmJsZW5kKGZyb21TaGFwZSwgcHJvZ3Jlc3MpKTsKKyAg
ICByZXR1cm4gU2hhcGVDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKHRvU2hhcGUuYmxlbmQoZnJv
bVNoYXBlLCBjb250ZXh0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVmUHRyPFNoYXBlVmFsdWU+
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgU2hhcGVWYWx1ZSog
ZnJvbSwgU2hhcGVWYWx1ZSogdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgUmVm
UHRyPFNoYXBlVmFsdWU+IGJsZW5kRnVuYyhTaGFwZVZhbHVlKiBmcm9tLCBTaGFwZVZhbHVlKiB0
bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgaWYg
KCFwcm9ncmVzcykKKyAgICBpZiAoIWNvbnRleHQucHJvZ3Jlc3MpCiAgICAgICAgIHJldHVybiBm
cm9tOwogCi0gICAgaWYgKHByb2dyZXNzID09IDEuMCkKKyAgICBpZiAoY29udGV4dC5wcm9ncmVz
cyA9PSAxLjApCiAgICAgICAgIHJldHVybiB0bzsKIAogICAgIEFTU0VSVChmcm9tICYmIHRvKTsK
ICAgICBjb25zdCBCYXNpY1NoYXBlJiBmcm9tU2hhcGUgPSAqZnJvbS0+c2hhcGUoKTsKICAgICBj
b25zdCBCYXNpY1NoYXBlJiB0b1NoYXBlID0gKnRvLT5zaGFwZSgpOwotICAgIHJldHVybiBTaGFw
ZVZhbHVlOjpjcmVhdGUodG9TaGFwZS5ibGVuZChmcm9tU2hhcGUsIHByb2dyZXNzKSwgdG8tPmNz
c0JveCgpKTsKKyAgICByZXR1cm4gU2hhcGVWYWx1ZTo6Y3JlYXRlKHRvU2hhcGUuYmxlbmQoZnJv
bVNoYXBlLCBjb250ZXh0KSwgdG8tPmNzc0JveCgpKTsKIH0KIAotc3RhdGljIGlubGluZSBSZWZQ
dHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCosIEZpbHRlck9wZXJhdGlvbiogZnJvbSwgRmlsdGVyT3BlcmF0aW9uKiB0bywgZG91Ymxl
IHByb2dyZXNzLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKQorc3RhdGljIGlubGlu
ZSBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZEZ1bmMoRmlsdGVyT3BlcmF0aW9uKiBmcm9t
LCBGaWx0ZXJPcGVyYXRpb24qIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYg
Y29udGV4dCwgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2ggPSBmYWxzZSkKIHsKICAgICBBU1NFUlQo
dG8pOwotICAgIHJldHVybiB0by0+YmxlbmQoZnJvbSwgcHJvZ3Jlc3MsIGJsZW5kVG9QYXNzdGhy
b3VnaCk7CisgICAgcmV0dXJuIHRvLT5ibGVuZChmcm9tLCBjb250ZXh0LCBibGVuZFRvUGFzc3Ro
cm91Z2gpOwogfQogCi1zdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGaWx0ZXJP
cGVyYXRpb25zKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgIGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvLCBkb3Vi
bGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGaWx0ZXJP
cGVyYXRpb25zKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsK
ICAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKICAgICBzaXplX3QgZnJvbVNpemUgPSBmcm9t
Lm9wZXJhdGlvbnMoKS5zaXplKCk7CkBAIC0zMDUsMTIgKzMxNiwxMiBAQCBzdGF0aWMgaW5saW5l
IEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAg
ICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZyb21PcCA9IChpIDwgZnJvbVNpemUpID8gZnJv
bS5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiAwOwogICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0
aW9uPiB0b09wID0gKGkgPCB0b1NpemUpID8gdG8ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogMDsK
LSAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRlZE9wID0gdG9PcCA/IGJsZW5k
RnVuYyhjbGllbnQsIGZyb21PcC5nZXQoKSwgdG9PcC5nZXQoKSwgcHJvZ3Jlc3MpIDogKGZyb21P
cCA/IGJsZW5kRnVuYyhjbGllbnQsIDAsIGZyb21PcC5nZXQoKSwgcHJvZ3Jlc3MsIHRydWUpIDog
MCk7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kZWRPcCA9IHRvT3AgPyBi
bGVuZEZ1bmMoZnJvbU9wLmdldCgpLCB0b09wLmdldCgpLCBjb250ZXh0KSA6IChmcm9tT3AgPyBi
bGVuZEZ1bmMoMCwgZnJvbU9wLmdldCgpLCBjb250ZXh0LCB0cnVlKSA6IDApOwogICAgICAgICBp
ZiAoYmxlbmRlZE9wKQogICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMoKS5hcHBlbmQoYmxl
bmRlZE9wKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBhdXRvIGlkZW50aXR5T3AgPSBQ
YXNzdGhyb3VnaEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBpZiAocHJv
Z3Jlc3MgPiAwLjUpCisgICAgICAgICAgICBpZiAoY29udGV4dC5wcm9ncmVzcyA+IDAuNSkKICAg
ICAgICAgICAgICAgICByZXN1bHQub3BlcmF0aW9ucygpLmFwcGVuZCh0b09wID8gdG9PcCA6IFdU
Rk1vdmUoaWRlbnRpdHlPcCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJl
c3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKGZyb21PcCA/IGZyb21PcCA6IFdURk1vdmUoaWRlbnRp
dHlPcCkpOwpAQCAtMzE5LDcgKzMzMCw3IEBAIHN0YXRpYyBpbmxpbmUgRmlsdGVyT3BlcmF0aW9u
cyBibGVuZEZpbHRlck9wZXJhdGlvbnMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBGaWx0ZXJPcGVyYXRpb25zIGJsZW5k
RnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJv
Z3Jlc3MsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IENTU1Byb3BlcnR5RmlsdGVyKQorc3Rh
dGljIGlubGluZSBGaWx0ZXJPcGVyYXRpb25zIGJsZW5kRnVuYyhjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0bywgY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NvbnRleHQmIGNvbnRleHQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IENTU1By
b3BlcnR5RmlsdGVyKQogewogICAgIEZpbHRlck9wZXJhdGlvbnMgcmVzdWx0OwogCkBAIC0zMjgs
MjIgKzMzOSwyMiBAQCBzdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudAogICAgIGJvb2wgbGlzdHNNYXRj
aCA9IGZhbHNlOwogICAgIHN3aXRjaCAocHJvcGVydHlJRCkgewogICAgIGNhc2UgQ1NTUHJvcGVy
dHlGaWx0ZXI6Ci0gICAgICAgIGxpc3RzTWF0Y2ggPSBjbGllbnQtPmZpbHRlckZ1bmN0aW9uTGlz
dHNNYXRjaCgpOworICAgICAgICBsaXN0c01hdGNoID0gY29udGV4dC5jbGllbnQtPmZpbHRlckZ1
bmN0aW9uTGlzdHNNYXRjaCgpOwogICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoRklMVEVSU19M
RVZFTF8yKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRlcjoKLSAgICAg
ICAgbGlzdHNNYXRjaCA9IGNsaWVudC0+YmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2go
KTsKKyAgICAgICAgbGlzdHNNYXRjaCA9IGNvbnRleHQuY2xpZW50LT5iYWNrZHJvcEZpbHRlckZ1
bmN0aW9uTGlzdHNNYXRjaCgpOwogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2UgQ1NT
UHJvcGVydHlBcHBsZUNvbG9yRmlsdGVyOgotICAgICAgICBsaXN0c01hdGNoID0gY2xpZW50LT5j
b2xvckZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpOworICAgICAgICBsaXN0c01hdGNoID0gY29u
dGV4dC5jbGllbnQtPmNvbG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKICAgICBpZiAo
bGlzdHNNYXRjaCkKLSAgICAgICAgcmVzdWx0ID0gYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGNsaWVu
dCwgZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAgICAgICAgcmVzdWx0ID0gYmxlbmRGaWx0ZXJPcGVy
YXRpb25zKGZyb20sIHRvLCBjb250ZXh0KTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSWYgdGhl
IGZpbHRlciBmdW5jdGlvbiBsaXN0cyBkb24ndCBtYXRjaCwgd2UgY291bGQgdHJ5IHRvIGNyb3Nz
LWZhZGUsIGJ1dCBkb24ndCB5ZXQgaGF2ZSBhIHdheSB0byByZXByZXNlbnQgdGhhdCBpbiBDU1Mu
CiAgICAgICAgIC8vIEZvciBub3cgd2UnbGwganVzdCBmYWlsIHRvIGFuaW1hdGUuCkBAIC0zNTMs
MjAgKzM2NCwyMCBAQCBzdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudAogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRmlsdGVyKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgQ2FjaGVkSW1hZ2UqIGltYWdlLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0bywg
ZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRG
aWx0ZXIoQ2FjaGVkSW1hZ2UqIGltYWdlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRl
eHQmIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKGltYWdlKTsKLSAgICBGaWx0ZXJPcGVyYXRpb25z
IGZpbHRlclJlc3VsdCA9IGJsZW5kRmlsdGVyT3BlcmF0aW9ucyhjbGllbnQsIGZyb20sIHRvLCBw
cm9ncmVzcyk7CisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJSZXN1bHQgPSBibGVuZEZpbHRl
ck9wZXJhdGlvbnMoZnJvbSwgdG8sIGNvbnRleHQpOwogCiAgICAgYXV0byBpbWFnZVZhbHVlID0g
Q1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKCppbWFnZSk7Ci0gICAgYXV0byBmaWx0ZXJWYWx1ZSA9IENv
bXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yRmlsdGVyKGNsaWVudC0+Y3VycmVudFN0eWxl
KCksIGZpbHRlclJlc3VsdCwgRG9Ob3RBZGp1c3RQaXhlbFZhbHVlcyk7CisgICAgYXV0byBmaWx0
ZXJWYWx1ZSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yRmlsdGVyKGNvbnRleHQu
Y2xpZW50LT5jdXJyZW50U3R5bGUoKSwgZmlsdGVyUmVzdWx0LCBEb05vdEFkanVzdFBpeGVsVmFs
dWVzKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6Y3JlYXRlKFdU
Rk1vdmUoaW1hZ2VWYWx1ZSksIFdURk1vdmUoZmlsdGVyVmFsdWUpKTsKICAgICByZXN1bHQuZ2V0
KCkuc2V0RmlsdGVyT3BlcmF0aW9ucyhmaWx0ZXJSZXN1bHQpOwogICAgIHJldHVybiBTdHlsZUdl
bmVyYXRlZEltYWdlOjpjcmVhdGUoV1RGTW92ZShyZXN1bHQpKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBWaXNpYmlsaXR5IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBj
bGllbnQsIFZpc2liaWxpdHkgZnJvbSwgVmlzaWJpbGl0eSB0bywgZG91YmxlIHByb2dyZXNzKQor
c3RhdGljIGlubGluZSBWaXNpYmlsaXR5IGJsZW5kRnVuYyhWaXNpYmlsaXR5IGZyb20sIFZpc2li
aWxpdHkgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewog
ICAgIC8vIEFueSBub24temVybyByZXN1bHQgbWVhbnMgd2UgY29uc2lkZXIgdGhlIG9iamVjdCB0
byBiZSB2aXNpYmxlLiBPbmx5IGF0IDAgZG8gd2UgY29uc2lkZXIgdGhlIG9iamVjdCB0byBiZQog
ICAgIC8vIGludmlzaWJsZS4gVGhlIGludmlzaWJsZSB2YWx1ZSB3ZSB1c2UgKFZpc2liaWxpdHk6
OkhpZGRlbiB2cy4gVmlzaWJpbGl0eTo6Q29sbGFwc2UpIGRlcGVuZHMgb24gdGhlIHNwZWNpZmll
ZCBmcm9tL3RvIHZhbHVlcy4KQEAgLTM3NCw0NiArMzg1LDQ2IEBAIHN0YXRpYyBpbmxpbmUgVmlz
aWJpbGl0eSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50
LCBWaXNpCiAgICAgZG91YmxlIHRvVmFsID0gdG8gPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSA/IDEu
IDogMC47CiAgICAgaWYgKGZyb21WYWwgPT0gdG9WYWwpCiAgICAgICAgIHJldHVybiB0bzsKLSAg
ICBkb3VibGUgcmVzdWx0ID0gYmxlbmRGdW5jKGNsaWVudCwgZnJvbVZhbCwgdG9WYWwsIHByb2dy
ZXNzKTsKKyAgICBkb3VibGUgcmVzdWx0ID0gYmxlbmRGdW5jKGZyb21WYWwsIHRvVmFsLCBjb250
ZXh0KTsKICAgICByZXR1cm4gcmVzdWx0ID4gMC4gPyBWaXNpYmlsaXR5OjpWaXNpYmxlIDogKHRv
ICE9IFZpc2liaWxpdHk6OlZpc2libGUgPyB0byA6IGZyb20pOwogfQogCi1zdGF0aWMgaW5saW5l
IFRleHRVbmRlcmxpbmVPZmZzZXQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGNsaWVudCwgY29uc3QgVGV4dFVuZGVybGluZU9mZnNldCYgZnJvbSwgY29uc3QgVGV4
dFVuZGVybGluZU9mZnNldCYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgVGV4
dFVuZGVybGluZU9mZnNldCBibGVuZEZ1bmMoY29uc3QgVGV4dFVuZGVybGluZU9mZnNldCYgZnJv
bSwgY29uc3QgVGV4dFVuZGVybGluZU9mZnNldCYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChmcm9tLmlzTGVuZ3RoKCkgJiYgdG8uaXNM
ZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFRleHRVbmRlcmxpbmVPZmZzZXQ6OmNyZWF0ZVdpdGhM
ZW5ndGgoYmxlbmRGdW5jKGNsaWVudCwgZnJvbS5sZW5ndGhWYWx1ZSgpLCB0by5sZW5ndGhWYWx1
ZSgpLCBwcm9ncmVzcykpOworICAgICAgICByZXR1cm4gVGV4dFVuZGVybGluZU9mZnNldDo6Y3Jl
YXRlV2l0aExlbmd0aChibGVuZEZ1bmMoZnJvbS5sZW5ndGhWYWx1ZSgpLCB0by5sZW5ndGhWYWx1
ZSgpLCBjb250ZXh0KSk7CiAgICAgcmV0dXJuIFRleHRVbmRlcmxpbmVPZmZzZXQ6OmNyZWF0ZVdp
dGhBdXRvKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgVGV4dERlY29yYXRpb25UaGlja25lc3MgYmxl
bmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgY29uc3QgVGV4
dERlY29yYXRpb25UaGlja25lc3MmIGZyb20sIGNvbnN0IFRleHREZWNvcmF0aW9uVGhpY2tuZXNz
JiB0bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBUZXh0RGVjb3JhdGlvblRoaWNr
bmVzcyBibGVuZEZ1bmMoY29uc3QgVGV4dERlY29yYXRpb25UaGlja25lc3MmIGZyb20sIGNvbnN0
IFRleHREZWNvcmF0aW9uVGhpY2tuZXNzJiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Nv
bnRleHQmIGNvbnRleHQpCiB7CiAgICAgaWYgKGZyb20uaXNMZW5ndGgoKSAmJiB0by5pc0xlbmd0
aCgpKQotICAgICAgICByZXR1cm4gVGV4dERlY29yYXRpb25UaGlja25lc3M6OmNyZWF0ZVdpdGhM
ZW5ndGgoYmxlbmRGdW5jKGNsaWVudCwgZnJvbS5sZW5ndGhWYWx1ZSgpLCB0by5sZW5ndGhWYWx1
ZSgpLCBwcm9ncmVzcykpOworICAgICAgICByZXR1cm4gVGV4dERlY29yYXRpb25UaGlja25lc3M6
OmNyZWF0ZVdpdGhMZW5ndGgoYmxlbmRGdW5jKGZyb20ubGVuZ3RoVmFsdWUoKSwgdG8ubGVuZ3Ro
VmFsdWUoKSwgY29udGV4dCkpOwogICAgIHJldHVybiBUZXh0RGVjb3JhdGlvblRoaWNrbmVzczo6
Y3JlYXRlV2l0aEF1dG8oKTsKIH0KIAotc3RhdGljIGlubGluZSBMZW5ndGhCb3ggYmxlbmRGdW5j
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgY29uc3QgTGVuZ3RoQm94
JiBmcm9tLCBjb25zdCBMZW5ndGhCb3gmIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSkKK3N0YXRpYyBpbmxpbmUgTGVuZ3Ro
Qm94IGJsZW5kRnVuYyhjb25zdCBMZW5ndGhCb3gmIGZyb20sIGNvbnN0IExlbmd0aEJveCYgdG8s
IGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0LCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UgPSBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpCiB7Ci0gICAgTGVuZ3RoQm94IHJlc3Vs
dChibGVuZEZ1bmMoY2xpZW50LCBmcm9tLnRvcCgpLCB0by50b3AoKSwgcHJvZ3Jlc3MsIHZhbHVl
UmFuZ2UpLAotICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGNsaWVudCwgZnJvbS5yaWdo
dCgpLCB0by5yaWdodCgpLCBwcm9ncmVzcywgdmFsdWVSYW5nZSksCi0gICAgICAgICAgICAgICAg
ICAgICBibGVuZEZ1bmMoY2xpZW50LCBmcm9tLmJvdHRvbSgpLCB0by5ib3R0b20oKSwgcHJvZ3Jl
c3MsIHZhbHVlUmFuZ2UpLAotICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGNsaWVudCwg
ZnJvbS5sZWZ0KCksIHRvLmxlZnQoKSwgcHJvZ3Jlc3MsIHZhbHVlUmFuZ2UpKTsKKyAgICBMZW5n
dGhCb3ggcmVzdWx0KGJsZW5kRnVuYyhmcm9tLnRvcCgpLCB0by50b3AoKSwgY29udGV4dCwgdmFs
dWVSYW5nZSksCisgICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoZnJvbS5yaWdodCgpLCB0
by5yaWdodCgpLCBjb250ZXh0LCB2YWx1ZVJhbmdlKSwKKyAgICAgICAgICAgICAgICAgICAgIGJs
ZW5kRnVuYyhmcm9tLmJvdHRvbSgpLCB0by5ib3R0b20oKSwgY29udGV4dCwgdmFsdWVSYW5nZSks
CisgICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoZnJvbS5sZWZ0KCksIHRvLmxlZnQoKSwg
Y29udGV4dCwgdmFsdWVSYW5nZSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgU1ZHTGVuZ3RoVmFsdWUgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqLCBjb25zdCBTVkdMZW5ndGhWYWx1ZSYgZnJvbSwgY29uc3QgU1ZHTGVuZ3RoVmFsdWUm
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIFNWR0xlbmd0aFZhbHVlIGJsZW5k
RnVuYyhjb25zdCBTVkdMZW5ndGhWYWx1ZSYgZnJvbSwgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIHRv
LCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1
cm4gU1ZHTGVuZ3RoVmFsdWU6OmJsZW5kKGZyb20sIHRvLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KHByb2dyZXNzKSk7CisgICAgcmV0dXJuIFNWR0xlbmd0aFZhbHVlOjpibGVuZChmcm9tLCB0bywg
bmFycm93UHJlY2lzaW9uVG9GbG9hdChjb250ZXh0LnByb2dyZXNzKSk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCosIGNvbnN0IFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4mIGZyb20sIGNvbnN0
IFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4mIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5s
aW5lIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IFZlY3RvcjxTVkdMZW5n
dGhWYWx1ZT4mIGZyb20sIGNvbnN0IFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4mIHRvLCBjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBzaXplX3QgZnJvbUxl
bmd0aCA9IGZyb20uc2l6ZSgpOwogICAgIHNpemVfdCB0b0xlbmd0aCA9IHRvLnNpemUoKTsKICAg
ICBpZiAoIWZyb21MZW5ndGgpCi0gICAgICAgIHJldHVybiAhcHJvZ3Jlc3MgPyBmcm9tIDogdG87
CisgICAgICAgIHJldHVybiAhY29udGV4dC5wcm9ncmVzcyA/IGZyb20gOiB0bzsKICAgICBpZiAo
IXRvTGVuZ3RoKQotICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgPT0gMSA/IGZyb20gOiB0bzsKKyAg
ICAgICAgcmV0dXJuIGNvbnRleHQucHJvZ3Jlc3MgPT0gMSA/IGZyb20gOiB0bzsKICAgICBzaXpl
X3QgcmVzdWx0TGVuZ3RoID0gZnJvbUxlbmd0aDsKICAgICBpZiAoZnJvbUxlbmd0aCAhPSB0b0xl
bmd0aCkgewogICAgICAgICBpZiAoIXJlbWFpbmRlcihzdGQ6Om1heChmcm9tTGVuZ3RoLCB0b0xl
bmd0aCksIHN0ZDo6bWluKGZyb21MZW5ndGgsIHRvTGVuZ3RoKSkpCkBAIC00MjMsMzUgKzQzNCwz
NSBAQCBzdGF0aWMgaW5saW5lIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLAogICAgIH0KICAgICBWZWN0b3I8U1ZHTGVuZ3Ro
VmFsdWU+IHJlc3VsdChyZXN1bHRMZW5ndGgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cmVzdWx0TGVuZ3RoOyArK2kpCi0gICAgICAgIHJlc3VsdFtpXSA9IFNWR0xlbmd0aFZhbHVlOjpi
bGVuZChmcm9tW2kgJSBmcm9tTGVuZ3RoXSwgdG9baSAlIHRvTGVuZ3RoXSwgbmFycm93UHJlY2lz
aW9uVG9GbG9hdChwcm9ncmVzcykpOworICAgICAgICByZXN1bHRbaV0gPSBTVkdMZW5ndGhWYWx1
ZTo6YmxlbmQoZnJvbVtpICUgZnJvbUxlbmd0aF0sIHRvW2kgJSB0b0xlbmd0aF0sIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoY29udGV4dC5wcm9ncmVzcykpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGNyb3NzZmFkZUJsZW5kKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBTdHlsZUNhY2hlZEltYWdlKiBmcm9tU3R5bGVJ
bWFnZSwgU3R5bGVDYWNoZWRJbWFnZSogdG9TdHlsZUltYWdlLCBkb3VibGUgcHJvZ3Jlc3MpCitz
dGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBjcm9zc2ZhZGVCbGVuZChTdHlsZUNhY2hl
ZEltYWdlKiBmcm9tU3R5bGVJbWFnZSwgU3R5bGVDYWNoZWRJbWFnZSogdG9TdHlsZUltYWdlLCBj
b25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKICAgICAvLyBJZiBw
cm9ncmVzcyBpcyBhdCBvbmUgb2YgdGhlIGV4dHJlbWVzLCB3ZSB3YW50IGdldENvbXB1dGVkU3R5
bGUgdG8gc2hvdyB0aGUgaW1hZ2UsCiAgICAgLy8gbm90IGEgY29tcGxldGVkIGNyb3NzLWZhZGUs
IHNvIHdlIGhhbmQgYmFjayBvbmUgb2YgdGhlIGV4aXN0aW5nIGltYWdlcy4KLSAgICBpZiAoIXBy
b2dyZXNzKQorICAgIGlmICghY29udGV4dC5wcm9ncmVzcykKICAgICAgICAgcmV0dXJuIGZyb21T
dHlsZUltYWdlOwotICAgIGlmIChwcm9ncmVzcyA9PSAxKQorICAgIGlmIChjb250ZXh0LnByb2dy
ZXNzID09IDEpCiAgICAgICAgIHJldHVybiB0b1N0eWxlSW1hZ2U7CiAgICAgaWYgKCFmcm9tU3R5
bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKSB8fCAhdG9TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKQog
ICAgICAgICByZXR1cm4gdG9TdHlsZUltYWdlOwogCiAgICAgYXV0byBmcm9tSW1hZ2VWYWx1ZSA9
IENTU0ltYWdlVmFsdWU6OmNyZWF0ZSgqZnJvbVN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkpOwog
ICAgIGF1dG8gdG9JbWFnZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKCp0b1N0eWxlSW1h
Z2UtPmNhY2hlZEltYWdlKCkpOwotICAgIGF1dG8gcGVyY2VudGFnZVZhbHVlID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZShwcm9ncmVzcywgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAg
IGF1dG8gcGVyY2VudGFnZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShjb250ZXh0
LnByb2dyZXNzLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CiAKICAgICBhdXRvIGNyb3NzZmFk
ZVZhbHVlID0gQ1NTQ3Jvc3NmYWRlVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKGZyb21JbWFnZVZhbHVl
KSwgV1RGTW92ZSh0b0ltYWdlVmFsdWUpLCBXVEZNb3ZlKHBlcmNlbnRhZ2VWYWx1ZSkpOwogICAg
IHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoV1RGTW92ZShjcm9zc2ZhZGVWYWx1
ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBibGVuZEZ1bmMoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBTdHlsZUltYWdlKiBmcm9tLCBT
dHlsZUltYWdlKiB0bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBSZWZQdHI8U3R5
bGVJbWFnZT4gYmxlbmRGdW5jKFN0eWxlSW1hZ2UqIGZyb20sIFN0eWxlSW1hZ2UqIHRvLCBjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBpZiAoIXByb2dy
ZXNzKQorICAgIGlmICghY29udGV4dC5wcm9ncmVzcykKICAgICAgICAgcmV0dXJuIGZyb207CiAK
LSAgICBpZiAocHJvZ3Jlc3MgPT0gMS4wKQorICAgIGlmIChjb250ZXh0LnByb2dyZXNzID09IDEu
MCkKICAgICAgICAgcmV0dXJuIHRvOwogCiAgICAgQVNTRVJUKGZyb20gJiYgdG8pOwpAQCAtNDcz
LDE0ICs0ODQsMTQgQEAgc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRGdW5j
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWUKICAgICAgICAgICAgIENTU0Zp
bHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVl
Pihmcm9tR2VuZXJhdGVkKTsKICAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIHRvRmls
dGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0ZWQpOwogICAgICAg
ICAgICAgaWYgKGZyb21GaWx0ZXIuZXF1YWxJbnB1dEltYWdlcyh0b0ZpbHRlcikgJiYgZnJvbUZp
bHRlci5jYWNoZWRJbWFnZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBibGVuZEZpbHRlcihj
bGllbnQsIGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwgZnJvbUZpbHRlci5maWx0ZXJPcGVyYXRp
b25zKCksIHRvRmlsdGVyLmZpbHRlck9wZXJhdGlvbnMoKSwgcHJvZ3Jlc3MpOworICAgICAgICAg
ICAgICAgIHJldHVybiBibGVuZEZpbHRlcihmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21G
aWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIGNv
bnRleHQpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzPENTU0Nyb3NzZmFkZVZhbHVlPihm
cm9tR2VuZXJhdGVkKSAmJiBpczxDU1NDcm9zc2ZhZGVWYWx1ZT4odG9HZW5lcmF0ZWQpKSB7CiAg
ICAgICAgICAgICBDU1NDcm9zc2ZhZGVWYWx1ZSYgZnJvbUNyb3NzZmFkZSA9IGRvd25jYXN0PENT
U0Nyb3NzZmFkZVZhbHVlPihmcm9tR2VuZXJhdGVkKTsKICAgICAgICAgICAgIENTU0Nyb3NzZmFk
ZVZhbHVlJiB0b0Nyb3NzZmFkZSA9IGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPih0b0dlbmVy
YXRlZCk7CiAgICAgICAgICAgICBpZiAoZnJvbUNyb3NzZmFkZS5lcXVhbElucHV0SW1hZ2VzKHRv
Q3Jvc3NmYWRlKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvIGNyb3NzZmFkZUJsZW5kID0g
dG9Dcm9zc2ZhZGUuYmxlbmQoZnJvbUNyb3NzZmFkZSwgcHJvZ3Jlc3MpKQorICAgICAgICAgICAg
ICAgIGlmIChhdXRvIGNyb3NzZmFkZUJsZW5kID0gdG9Dcm9zc2ZhZGUuYmxlbmQoZnJvbUNyb3Nz
ZmFkZSwgY29udGV4dC5wcm9ncmVzcykpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHls
ZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoKmNyb3NzZmFkZUJsZW5kKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtNDkyLDcgKzUwMyw3IEBAIHN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxl
SW1hZ2U+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllCiAg
ICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKSkgewogICAg
ICAgICAgICAgQ1NTRmlsdGVySW1hZ2VWYWx1ZSYgZnJvbUZpbHRlciA9IGRvd25jYXN0PENTU0Zp
bHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpOwogICAgICAgICAgICAgaWYgKGZyb21GaWx0
ZXIuY2FjaGVkSW1hZ2UoKSAmJiBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPigqdG8pLmNhY2hl
ZEltYWdlKCkgPT0gZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBibGVuZEZpbHRlcihjbGllbnQsIGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwgZnJvbUZp
bHRlci5maWx0ZXJPcGVyYXRpb25zKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgcHJvZ3Jlc3MpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBibGVuZEZpbHRlcihmcm9tRmlsdGVyLmNhY2hlZEltYWdl
KCksIGZyb21GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBGaWx0ZXJPcGVyYXRpb25zKCksIGNv
bnRleHQpOwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgaW50ZXJwb2xhdGlvbiBi
ZXR3ZWVuIGNyb3NzLWZhZGUgYW5kIGltYWdlIHNvdXJjZS4KICAgICB9IGVsc2UgaWYgKGlzPFN0
eWxlQ2FjaGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8pKSB7
CkBAIC01MDAsNyArNTExLDcgQEAgc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxl
bmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWUKICAgICAgICAgaWYg
KGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKSkgewogICAgICAgICAgICAgQ1NT
RmlsdGVySW1hZ2VWYWx1ZSYgdG9GaWx0ZXIgPSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVl
Pih0b0dlbmVyYXRlZCk7CiAgICAgICAgICAgICBpZiAodG9GaWx0ZXIuY2FjaGVkSW1hZ2UoKSAm
JiBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPigqZnJvbSkuY2FjaGVkSW1hZ2UoKSA9PSB0b0Zp
bHRlci5jYWNoZWRJbWFnZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBibGVuZEZpbHRlcihj
bGllbnQsIHRvRmlsdGVyLmNhY2hlZEltYWdlKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgdG9GaWx0
ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGJsZW5kRmlsdGVyKHRvRmlsdGVyLmNhY2hlZEltYWdlKCksIEZpbHRlck9wZXJhdGlvbnMoKSwg
dG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBjb250ZXh0KTsKICAgICAgICAgfQogICAgICAg
ICAvLyBGSVhNRTogQWRkIGludGVycG9sYXRpb24gYmV0d2VlbiBpbWFnZSBzb3VyY2UgYW5kIGNy
b3NzLWZhZGUuCiAgICAgfQpAQCAtNTA4LDEyICs1MTksMTIgQEAgc3RhdGljIGlubGluZSBSZWZQ
dHI8U3R5bGVJbWFnZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGNsaWUKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgY3Jvc3MgZmFkZSBiZXR3ZWVuIGNhY2hl
ZCBhbmQgZ2VuZXJhdGVkIGltYWdlcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzgyOTMKICAgICBpZiAoaXM8U3R5bGVDYWNoZWRJbWFnZT4oKmZyb20p
ICYmIGlzPFN0eWxlQ2FjaGVkSW1hZ2U+KCp0bykpCi0gICAgICAgIHJldHVybiBjcm9zc2ZhZGVC
bGVuZChjbGllbnQsIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KGZyb20pLCBkb3duY2FzdDxT
dHlsZUNhY2hlZEltYWdlPih0byksIHByb2dyZXNzKTsKKyAgICAgICAgcmV0dXJuIGNyb3NzZmFk
ZUJsZW5kKGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KGZyb20pLCBkb3duY2FzdDxTdHlsZUNh
Y2hlZEltYWdlPih0byksIGNvbnRleHQpOwogCiAgICAgcmV0dXJuIHRvOwogfQogCi1zdGF0aWMg
aW5saW5lIE5pbmVQaWVjZUltYWdlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiBjbGllbnQsIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBmcm9tLCBjb25zdCBOaW5lUGll
Y2VJbWFnZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgTmluZVBpZWNlSW1h
Z2UgYmxlbmRGdW5jKGNvbnN0IE5pbmVQaWVjZUltYWdlJiBmcm9tLCBjb25zdCBOaW5lUGllY2VJ
bWFnZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewog
ICAgIGlmICghZnJvbS5oYXNJbWFnZSgpIHx8ICF0by5oYXNJbWFnZSgpKQogICAgICAgICByZXR1
cm4gdG87CkBAIC01MjMsMjMgKzUzNCwyMyBAQCBzdGF0aWMgaW5saW5lIE5pbmVQaWVjZUltYWdl
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsCiAgICAg
aWYgKGZyb20uaW1hZ2VTbGljZXMoKSAhPSB0by5pbWFnZVNsaWNlcygpIHx8IGZyb20uYm9yZGVy
U2xpY2VzKCkgIT0gdG8uYm9yZGVyU2xpY2VzKCkgfHwgZnJvbS5vdXRzZXQoKSAhPSB0by5vdXRz
ZXQoKSB8fCBmcm9tLmZpbGwoKSAhPSB0by5maWxsKCkgfHwgZnJvbS5ob3Jpem9udGFsUnVsZSgp
ICE9IHRvLmhvcml6b250YWxSdWxlKCkgfHwgZnJvbS52ZXJ0aWNhbFJ1bGUoKSAhPSB0by52ZXJ0
aWNhbFJ1bGUoKSkKICAgICAgICAgcmV0dXJuIHRvOwogCi0gICAgaWYgKGF1dG8qIHJlbmRlcmVy
ID0gY2xpZW50LT5yZW5kZXJlcigpKSB7CisgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gY29udGV4
dC5jbGllbnQtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgaWYgKGZyb20uaW1hZ2UoKS0+aW1hZ2VT
aXplKHJlbmRlcmVyLCAxLjApICE9IHRvLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4w
KSkKICAgICAgICAgICAgIHJldHVybiB0bzsKICAgICB9CiAKLSAgICByZXR1cm4gTmluZVBpZWNl
SW1hZ2UoYmxlbmRGdW5jKGNsaWVudCwgZnJvbS5pbWFnZSgpLCB0by5pbWFnZSgpLCBwcm9ncmVz
cyksCisgICAgcmV0dXJuIE5pbmVQaWVjZUltYWdlKGJsZW5kRnVuYyhmcm9tLmltYWdlKCksIHRv
LmltYWdlKCksIGNvbnRleHQpLAogICAgICAgICBmcm9tLmltYWdlU2xpY2VzKCksIGZyb20uZmls
bCgpLCBmcm9tLmJvcmRlclNsaWNlcygpLCBmcm9tLm91dHNldCgpLCBmcm9tLmhvcml6b250YWxS
dWxlKCksIGZyb20udmVydGljYWxSdWxlKCkpOwogfQogCiAjaWYgRU5BQkxFKFZBUklBVElPTl9G
T05UUykKIAotc3RhdGljIGlubGluZSBGb250VmFyaWF0aW9uU2V0dGluZ3MgYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgY29uc3QgRm9udFZhcmlhdGlv
blNldHRpbmdzJiBmcm9tLCBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBibGVuZEZ1bmMo
Y29uc3QgRm9udFZhcmlhdGlvblNldHRpbmdzJiBmcm9tLCBjb25zdCBGb250VmFyaWF0aW9uU2V0
dGluZ3MmIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsK
LSAgICBpZiAoIXByb2dyZXNzKQorICAgIGlmICghY29udGV4dC5wcm9ncmVzcykKICAgICAgICAg
cmV0dXJuIGZyb207CiAKLSAgICBpZiAocHJvZ3Jlc3MgPT0gMS4wKQorICAgIGlmIChjb250ZXh0
LnByb2dyZXNzID09IDEuMCkKICAgICAgICAgcmV0dXJuIHRvOwogCiAgICAgQVNTRVJUKGZyb20u
c2l6ZSgpID09IHRvLnNpemUoKSk7CkBAIC01NDksNyArNTYwLDcgQEAgc3RhdGljIGlubGluZSBG
b250VmFyaWF0aW9uU2V0dGluZ3MgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGMKICAgICAgICAgYXV0byYgZnJvbUl0ZW0gPSBmcm9tLmF0KGkpOwogICAgICAgICBh
dXRvJiB0b0l0ZW0gPSB0by5hdChpKTsKICAgICAgICAgQVNTRVJUKGZyb21JdGVtLnRhZygpID09
IHRvSXRlbS50YWcoKSk7Ci0gICAgICAgIGZsb2F0IGludGVycG9sYXRlZCA9IGJsZW5kRnVuYyhj
bGllbnQsIGZyb21JdGVtLnZhbHVlKCksIHRvSXRlbS52YWx1ZSgpLCBwcm9ncmVzcyk7CisgICAg
ICAgIGZsb2F0IGludGVycG9sYXRlZCA9IGJsZW5kRnVuYyhmcm9tSXRlbS52YWx1ZSgpLCB0b0l0
ZW0udmFsdWUoKSwgY29udGV4dCk7CiAgICAgICAgIHJlc3VsdC5pbnNlcnQoeyBmcm9tSXRlbS50
YWcoKSwgaW50ZXJwb2xhdGVkIH0pOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNTU3
LDE0ICs1NjgsMTQgQEAgc3RhdGljIGlubGluZSBGb250VmFyaWF0aW9uU2V0dGluZ3MgYmxlbmRG
dW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGMKIAogI2VuZGlmCiAKLXN0YXRp
YyBpbmxpbmUgRm9udFNlbGVjdGlvblZhbHVlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiBjbGllbnQsIEZvbnRTZWxlY3Rpb25WYWx1ZSBmcm9tLCBGb250U2VsZWN0
aW9uVmFsdWUgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgRm9udFNlbGVjdGlv
blZhbHVlIGJsZW5kRnVuYyhGb250U2VsZWN0aW9uVmFsdWUgZnJvbSwgRm9udFNlbGVjdGlvblZh
bHVlIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKLSAg
ICByZXR1cm4gRm9udFNlbGVjdGlvblZhbHVlKHN0ZDo6bWF4KDAuMGYsIGJsZW5kRnVuYyhjbGll
bnQsIHN0YXRpY19jYXN0PGZsb2F0Pihmcm9tKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvKSwgcHJv
Z3Jlc3MpKSk7CisgICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25WYWx1ZShzdGQ6Om1heCgwLjBmLCBi
bGVuZEZ1bmMoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZyb20pLCBzdGF0aWNfY2FzdDxmbG9hdD4odG8p
LCBjb250ZXh0KSkpOwogfQogCi1zdGF0aWMgaW5saW5lIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25W
YWx1ZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwg
T3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiBmcm9tLCBPcHRpb25hbDxGb250U2VsZWN0aW9u
VmFsdWU+IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIE9wdGlvbmFsPEZvbnRT
ZWxlY3Rpb25WYWx1ZT4gYmxlbmRGdW5jKE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gZnJv
bSwgT3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGJsZW5kRnVuYyhjbGllbnQsICpm
cm9tLCAqdG8sIHByb2dyZXNzKTsKKyAgICByZXR1cm4gYmxlbmRGdW5jKCpmcm9tLCAqdG8sIGNv
bnRleHQpOwogfQogCiBjbGFzcyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKQEAgLTU3
OCwxMiArNTg5LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbmltYXRpb25Qcm9wZXJ0eVdy
YXBwZXJCYXNlKCkgPSBkZWZhdWx0OwogCiAgICAgdmlydHVhbCBib29sIGlzU2hvcnRoYW5kV3Jh
cHBlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGVxdWFscyhj
b25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRl
clN0eWxlKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBibGVuZChj
b25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5k
ZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgZG91YmxlKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlJikg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJT
dHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZp
cnR1YWwgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYpIGNvbnN0ID0g
MDsKICAgICAKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdmlydHVhbCB2b2lkIGxvZ0JsZW5kKGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSos
IGRvdWJsZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBkb3VibGUp
IGNvbnN0ID0gMDsKICNlbmRpZgogCiAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvcGVydHk7IH0KQEAgLTYwNCwyNSArNjE1LDIzIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgfQogCi0gICAgVCB2YWx1ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
CisgICAgVCB2YWx1ZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gKHN0eWxlLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIHJldHVybiAoc3R5bGUu
Km1fZ2V0dGVyKSgpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIGVxdWFscyhjb25zdCBS
ZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAg
Ym9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUmIGEsIGNvbnN0IFJlbmRlclN0eWxlJiBiKSBj
b25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgaWYgKCZh
ID09ICZiKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIHZhbHVlKGEpID09IHZh
bHVlKGIpOwogICAgIH0KIAogI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNv
bnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8sIGNvbnN0IFJlbmRl
clN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGxv
Z0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNv
bnN0IFJlbmRlclN0eWxlJiBkZXN0aW5hdGlvbiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5h
bAogICAgIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAi
ICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAiIGZyb20gIiA8
PCB2YWx1ZShmcm9tKSA8PCAiIHRvICIgPDwgdmFsdWUodG8pIDw8ICIgYXQgIiA8PCBUZXh0U3Ry
ZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8
PCB2YWx1ZShyZXN1bHQpKTsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0
cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAi
IGZyb20gIiA8PCB2YWx1ZShmcm9tKSA8PCAiIHRvICIgPDwgdmFsdWUodG8pIDw8ICIgYXQgIiA8
PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8
ICIgLT4gIiA8PCB2YWx1ZShkZXN0aW5hdGlvbikpOwogICAgIH0KICNlbmRpZgogCkBAIC02Mzks
OSArNjQ4LDkgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0
aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3Vi
bGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYg
ZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYg
dG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdCBvdmVy
cmlkZQogICAgIHsKLSAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhj
bGllbnQsIHRoaXMtPnZhbHVlKGZyb20pLCB0aGlzLT52YWx1ZSh0byksIHByb2dyZXNzKSk7Cisg
ICAgICAgIChkZXN0aW5hdGlvbi4qbV9zZXR0ZXIpKGJsZW5kRnVuYyh0aGlzLT52YWx1ZShmcm9t
KSwgdGhpcy0+dmFsdWUodG8pLCBjb250ZXh0KSk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6CkBAIC02
NTgsMTAgKzY2NywxMCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgYmxl
bmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBSZW5kZXJTdHlsZSog
ZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSog
dG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGJsZW5kKFJlbmRlclN0
eWxlJiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0
eWxlJiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
IGZpbmFsCiAgICAgewotICAgICAgICBhdXRvIGJsZW5kZWRWYWx1ZSA9IGJsZW5kRnVuYyhjbGll
bnQsIHRoaXMtPnZhbHVlKGZyb20pLCB0aGlzLT52YWx1ZSh0byksIHByb2dyZXNzKTsKLSAgICAg
ICAgKGRlc3RpbmF0aW9uLT4qdGhpcy0+bV9zZXR0ZXIpKGJsZW5kZWRWYWx1ZSA+IDEgPyBibGVu
ZGVkVmFsdWUgOiAxKTsKKyAgICAgICAgYXV0byBibGVuZGVkVmFsdWUgPSBibGVuZEZ1bmModGhp
cy0+dmFsdWUoZnJvbSksIHRoaXMtPnZhbHVlKHRvKSwgY29udGV4dCk7CisgICAgICAgIChkZXN0
aW5hdGlvbi4qdGhpcy0+bV9zZXR0ZXIpKGJsZW5kZWRWYWx1ZSA+IDEgPyBibGVuZGVkVmFsdWUg
OiAxKTsKICAgICB9CiB9OwogCkBAIC02NzYsMTIgKzY4NSwxMiBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqLCBj
b25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlJikg
Y29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudCosIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3Qg
UmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNz
KSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBj
b25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QgZmluYWwKICAgICB7Ci0gICAg
ICAgIEFTU0VSVCghcHJvZ3Jlc3MgfHwgcHJvZ3Jlc3MgPT0gMS4wKTsKLSAgICAgICAgKGRlc3Rp
bmF0aW9uLT4qdGhpcy0+bV9zZXR0ZXIpKHRoaXMtPnZhbHVlKHByb2dyZXNzID8gdG8gOiBmcm9t
KSk7CisgICAgICAgIEFTU0VSVCghY29udGV4dC5wcm9ncmVzcyB8fCBjb250ZXh0LnByb2dyZXNz
ID09IDEuMCk7CisgICAgICAgIChkZXN0aW5hdGlvbi4qdGhpcy0+bV9zZXR0ZXIpKHRoaXMtPnZh
bHVlKGNvbnRleHQucHJvZ3Jlc3MgPyB0byA6IGZyb20pKTsKICAgICB9CiAKICAgICB2b2lkIChS
ZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShUKTsKQEAgLTY5OCw5ICs3MDcsOSBAQCBwdWJsaWM6CiAg
ICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogY2xpZW50LCBSZW5kZXJTdHlsZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0
eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qg
ZmluYWwKKyAgICB2b2lkIGJsZW5kKFJlbmRlclN0eWxlJiBkZXN0aW5hdGlvbiwgY29uc3QgUmVu
ZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bywgY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICAoZGVz
dGluYXRpb24tPip0aGlzLT5tX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgdGhpcy0+dmFsdWUo
ZnJvbSksIHRoaXMtPnZhbHVlKHRvKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgKGRlc3RpbmF0aW9u
Lip0aGlzLT5tX3NldHRlcikoYmxlbmRGdW5jKHRoaXMtPnZhbHVlKGZyb20pLCB0aGlzLT52YWx1
ZSh0byksIGNvbnRleHQpKTsKICAgICB9CiAKICAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0
dGVyKShSZWZQdHI8VD4mJik7CkBAIC03MzksMTUgKzc0OCwxNSBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcm90ZWN0ZWQ6Ci0gICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSog
ZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBvdmVycmlkZQorICAgIGJvb2wgY2Fu
SW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0
bykgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJldHVybiBjYW5JbnRlcnBvbGF0ZUxl
bmd0aHModmFsdWUoZnJvbSksIHZhbHVlKHRvKSwgbV9mbGFncy5jb250YWlucyhGbGFnczo6SXNM
ZW5ndGhQZXJjZW50YWdlKSk7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29u
c3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dy
ZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0
aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3Qgb3ZlcnJpZGUKICAg
ICB7CiAgICAgICAgIGF1dG8gdmFsdWVSYW5nZSA9IG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Ok5l
Z2F0aXZlTGVuZ3Roc0FyZUludmFsaWQpID8gVmFsdWVSYW5nZU5vbk5lZ2F0aXZlIDogVmFsdWVS
YW5nZUFsbDsKLSAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhjbGll
bnQsIHZhbHVlKGZyb20pLCB2YWx1ZSh0byksIHByb2dyZXNzLCB2YWx1ZVJhbmdlKSk7CisgICAg
ICAgIChkZXN0aW5hdGlvbi4qbV9zZXR0ZXIpKGJsZW5kRnVuYyh2YWx1ZShmcm9tKSwgdmFsdWUo
dG8pLCBjb250ZXh0LCB2YWx1ZVJhbmdlKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtNzgwLDkg
Kzc4OSw5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBibGVuZChjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5h
dGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91
YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRl
c3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRv
LCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QgZmluYWwK
ICAgICB7Ci0gICAgICAgIChkZXN0aW5hdGlvbi0+Km1fc2V0dGVyKShibGVuZEZ1bmMoY2xpZW50
LCB2YWx1ZShmcm9tKSwgdmFsdWUodG8pLCBwcm9ncmVzcykpOworICAgICAgICAoZGVzdGluYXRp
b24uKm1fc2V0dGVyKShibGVuZEZ1bmModmFsdWUoZnJvbSksIHZhbHVlKHRvKSwgY29udGV4dCkp
OwogICAgIH0KIAogICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKExlbmd0aFBvaW50
JiYpOwpAQCAtNzk5LDE0ICs4MDgsMTQgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAg
ICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5k
ZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBS
ZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvKSBjb25zdCBmaW5hbAogICAg
IHsKICAgICAgICAgcmV0dXJuIGNhbkludGVycG9sYXRlTGVuZ3RoVmFyaWFudHModGhpcy0+dmFs
dWUoZnJvbSksIHRoaXMtPnZhbHVlKHRvKSk7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5h
dGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91
YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRl
c3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRv
LCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QgZmluYWwK
ICAgICB7Ci0gICAgICAgIChkZXN0aW5hdGlvbi0+Km1fc2V0dGVyKShibGVuZEZ1bmMoY2xpZW50
LCB0aGlzLT52YWx1ZShmcm9tKSwgdGhpcy0+dmFsdWUodG8pLCBwcm9ncmVzcykpOworICAgICAg
ICAoZGVzdGluYXRpb24uKm1fc2V0dGVyKShibGVuZEZ1bmModGhpcy0+dmFsdWUoZnJvbSksIHRo
aXMtPnZhbHVlKHRvKSwgY29udGV4dCkpOwogICAgIH0KIAogICAgIHZvaWQgKFJlbmRlclN0eWxl
OjoqbV9zZXR0ZXIpKFQmJik7CkBAIC04MjgsOSArODM3LDkgQEAgcHVibGljOgogICAgIH0KIAog
cHJpdmF0ZToKLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9t
LCBjb25zdCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCisgICAgYm9vbCBjYW5JbnRlcnBv
bGF0ZShjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvKSBjb25z
dCBmaW5hbAogICAgIHsKLSAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6OlVzZXNG
aWxsS2V5d29yZCkgJiYgZnJvbS0+Ym9yZGVySW1hZ2UoKS5maWxsKCkgIT0gdG8tPmJvcmRlcklt
YWdlKCkuZmlsbCgpKQorICAgICAgICBpZiAobV9mbGFncy5jb250YWlucyhGbGFnczo6VXNlc0Zp
bGxLZXl3b3JkKSAmJiBmcm9tLmJvcmRlckltYWdlKCkuZmlsbCgpICE9IHRvLmJvcmRlckltYWdl
KCkuZmlsbCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGF1dG8mIGZy
b21MZW5ndGhCb3ggPSB2YWx1ZShmcm9tKTsKQEAgLTg0MiwxMiArODUxLDEyIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAmJiBjYW5JbnRlcnBvbGF0ZUxlbmd0aHMoZnJvbUxlbmd0aEJveC5sZWZ0
KCksIHRvTGVuZ3RoQm94LmxlZnQoKSwgaXNMZW5ndGhQZXJjZW50YWdlKTsKICAgICB9CiAKLSAg
ICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVu
ZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVu
ZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25z
dCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250
ZXh0KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxh
Z3M6OlVzZXNGaWxsS2V5d29yZCkpCi0gICAgICAgICAgICBkZXN0aW5hdGlvbi0+c2V0Qm9yZGVy
SW1hZ2VTbGljZUZpbGwoKCFwcm9ncmVzcyB8fCBjYW5JbnRlcnBvbGF0ZShmcm9tLCB0bykgPyBm
cm9tIDogdG8pLT5ib3JkZXJJbWFnZSgpLmZpbGwoKSk7CisgICAgICAgICAgICBkZXN0aW5hdGlv
bi5zZXRCb3JkZXJJbWFnZVNsaWNlRmlsbCgoIWNvbnRleHQucHJvZ3Jlc3MgfHwgIWNvbnRleHQu
aXNEaXNjcmV0ZSA/IGZyb20gOiB0bykuYm9yZGVySW1hZ2UoKS5maWxsKCkpOwogICAgICAgICBh
dXRvIHZhbHVlUmFuZ2UgPSBtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpBbGxvd3NOZWdhdGl2ZVZh
bHVlcykgPyBWYWx1ZVJhbmdlQWxsIDogVmFsdWVSYW5nZU5vbk5lZ2F0aXZlOwotICAgICAgICAo
ZGVzdGluYXRpb24tPiptX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgdmFsdWUoZnJvbSksIHZh
bHVlKHRvKSwgcHJvZ3Jlc3MsIHZhbHVlUmFuZ2UpKTsKKyAgICAgICAgKGRlc3RpbmF0aW9uLipt
X3NldHRlcikoYmxlbmRGdW5jKHZhbHVlKGZyb20pLCB2YWx1ZSh0byksIGNvbnRleHQsIHZhbHVl
UmFuZ2UpKTsKICAgICB9CiAKICAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShMZW5n
dGhCb3gmJik7CkBAIC04NjMsMTQgKzg3MiwxMSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRl
OgotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYikgY29uc3QgZmluYWwKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwg
Y29uc3QgUmVuZGVyU3R5bGUmIGIpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICAvLyBJZiB0
aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRl
c3QuCi0gICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGgg
YXJlIG51bGwsIHJldHVybiB0cnVlLgotICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICBpZiAo
JmEgPT0gJmIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFi
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGF1dG8qIGNsaXBQYXRoQSA9
IHZhbHVlKGEpOwogICAgICAgICBhdXRvKiBjbGlwUGF0aEIgPSB2YWx1ZShiKTsKQEAgLTg5Miwx
OCArODk4LDE1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBlcXVhbHMo
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBmaW5hbAor
ICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25zdCBSZW5kZXJTdHlsZSYg
YikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIC8vIElmIHRoZSBzdHlsZSBwb2ludGVycyBh
cmUgdGhlIHNhbWUsIGRvbid0IGJvdGhlciBkb2luZyB0aGUgdGVzdC4KLSAgICAgICAgLy8gSWYg
ZWl0aGVyIGlzIG51bGwsIHJldHVybiBmYWxzZS4gSWYgYm90aCBhcmUgbnVsbCwgcmV0dXJuIHRy
dWUuCi0gICAgICAgIGlmIChhID09IGIpCisgICAgICAgIGlmICgmYSA9PSAmYikKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB2YWx1ZShhKSA9PSB2YWx1ZShiKTsKICAgICB9CiAK
LSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBS
ZW5kZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25z
dCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvKSBjb25zdCBmaW5hbAog
ICAgIHsKICAgICAgICAgYXV0byBmcm9tVmFyaWF0aW9uU2V0dGluZ3MgPSB2YWx1ZShmcm9tKTsK
ICAgICAgICAgYXV0byB0b1ZhcmlhdGlvblNldHRpbmdzID0gdmFsdWUodG8pOwpAQCAtOTMxLDE0
ICs5MzQsMTEgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIGVxdWFscyhj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IGZpbmFsCisg
ICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUmIGEsIGNvbnN0IFJlbmRlclN0eWxlJiBi
KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50ZXJzIGFy
ZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAgICAvLyBJZiBl
aXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1cm4gdHJ1
ZS4KLSAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgaWYgKCZhID09ICZiKQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICBhdXRvKiBzaGFwZUEgPSB2YWx1ZShhKTsKICAgICAgICAgYXV0
byogc2hhcGVCID0gdmFsdWUoYik7CkBAIC05NDksNyArOTQ5LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgcmV0dXJuICpzaGFwZUEgPT0gKnNoYXBlQjsKICAgICB9CiAKLSAgICBib29sIGNhbkludGVy
cG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8pIGNv
bnN0IGZpbmFsCisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSYgZnJv
bSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgYXV0
byogZnJvbVNoYXBlID0gdmFsdWUoZnJvbSk7CiAgICAgICAgIGF1dG8qIHRvU2hhcGUgPSB2YWx1
ZSh0byk7CkBAIC05NzYsMTkgKzk3NiwxNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YikgY29uc3QgZmluYWwKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwgY29u
c3QgUmVuZGVyU3R5bGUmIGIpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoYSA9PSBi
KQorICAgICAgICBpZiAoJmEgPT0gJmIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgaWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGF1
dG8qIGltYWdlQSA9IHZhbHVlKGEpOwogICAgICAgICBhdXRvKiBpbWFnZUIgPSB2YWx1ZShiKTsK
ICAgICAgICAgcmV0dXJuIGFyZVBvaW50aW5nVG9FcXVhbERhdGEoaW1hZ2VBLCBpbWFnZUIpOwog
ICAgIH0KIAotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20s
IGNvbnN0IFJlbmRlclN0eWxlKiB0bykgY29uc3QgZmluYWwKKyAgICBib29sIGNhbkludGVycG9s
YXRlKGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8pIGNvbnN0
IGZpbmFsCiAgICAgewogICAgICAgICByZXR1cm4gdmFsdWUoZnJvbSkgJiYgdmFsdWUodG8pOwog
ICAgIH0KQEAgLTEwMTksNyArMTAxNyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgYm9vbCBh
bmltYXRpb25Jc0FjY2VsZXJhdGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCi0g
ICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBi
KSBjb25zdCBmaW5hbAorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25z
dCBSZW5kZXJTdHlsZSYgYikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHJldHVybiBhcmVQ
b2ludGluZ1RvRXF1YWxEYXRhKHRoaXMtPnZhbHVlKGEpLCB0aGlzLT52YWx1ZShiKSk7CiAgICAg
fQpAQCAtMTA0Myw5ICsxMDQxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIDsKICAgICB9CiAK
LSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwg
UmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3Qg
UmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBi
bGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBj
b25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBj
b250ZXh0KSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0
ZXIpKGJsZW5kRnVuYyhjbGllbnQsIHZhbHVlKGZyb20pLCB2YWx1ZSh0byksIHByb2dyZXNzLCBw
cm9wZXJ0eSgpKSk7CisgICAgICAgIChkZXN0aW5hdGlvbi4qbV9zZXR0ZXIpKGJsZW5kRnVuYyh2
YWx1ZShmcm9tKSwgdmFsdWUodG8pLCBjb250ZXh0LCBwcm9wZXJ0eSgpKSk7CiAgICAgfQogfTsK
IApAQCAtMTA4NCwxNSArMTA4MiwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAg
IGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikg
Y29uc3QgZmluYWwKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwgY29uc3Qg
UmVuZGVyU3R5bGUmIGIpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoYSA9PSBiKQor
ICAgICAgICBpZiAoJmEgPT0gJmIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
aWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGNvbnN0
IFNoYWRvd0RhdGEqIHNoYWRvd0EgPSAoYS0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBjb25zdCBT
aGFkb3dEYXRhKiBzaGFkb3dCID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAgY29uc3QgU2hh
ZG93RGF0YSogc2hhZG93QSA9IChhLiptX2dldHRlcikoKTsKKyAgICAgICAgY29uc3QgU2hhZG93
RGF0YSogc2hhZG93QiA9IChiLiptX2dldHRlcikoKTsKIAogICAgICAgICB3aGlsZSAodHJ1ZSkg
ewogICAgICAgICAgICAgLy8gZW5kIG9mIGJvdGggbGlzdHMKQEAgLTExMTMsMTAgKzExMDksMTAg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBjYW5J
bnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRv
KSBjb25zdCBmaW5hbAorICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUm
IGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAg
IGNvbnN0IFNoYWRvd0RhdGEqIGZyb21TaGFkb3cgPSAoZnJvbS0+Km1fZ2V0dGVyKSgpOwotICAg
ICAgICBjb25zdCBTaGFkb3dEYXRhKiB0b1NoYWRvdyA9ICh0by0+Km1fZ2V0dGVyKSgpOworICAg
ICAgICBjb25zdCBTaGFkb3dEYXRhKiBmcm9tU2hhZG93ID0gKGZyb20uKm1fZ2V0dGVyKSgpOwor
ICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiB0b1NoYWRvdyA9ICh0by4qbV9nZXR0ZXIpKCk7CiAK
ICAgICAgICAgLy8gVGhlIG9ubHkgc2NlbmFyaW8gd2hlcmUgd2UgY2FuJ3QgaW50ZXJwb2xhdGUg
aXMgaWYgc3BlY2lmaWVkIGl0ZW1zIGRvbid0IGhhdmUgdGhlIHNhbWUgc2hhZG93IHN0eWxlLgog
ICAgICAgICB3aGlsZSAoZnJvbVNoYWRvdyAmJiB0b1NoYWRvdykgewpAQCAtMTEyOSwxNSArMTEy
NSwxNSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB2b2lk
IGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5
bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5
bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5k
ZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5k
ZXJTdHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBj
b25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZnJvbVNoYWRvdyA9
IChmcm9tLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHRvU2hhZG93
ID0gKHRvLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIGZyb21TaGFk
b3cgPSAoZnJvbS4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHRvU2hh
ZG93ID0gKHRvLiptX2dldHRlcikoKTsKIAotICAgICAgICBpZiAoIWNhbkludGVycG9sYXRlKGZy
b20sIHRvKSkgewotICAgICAgICAgICAgQVNTRVJUKCFwcm9ncmVzcyB8fCBwcm9ncmVzcyA9PSAx
LjApOwotICAgICAgICAgICAgYXV0byogc2hhZG93ID0gcHJvZ3Jlc3MgPyB0b1NoYWRvdyA6IGZy
b21TaGFkb3c7Ci0gICAgICAgICAgICAoZGVzdGluYXRpb24tPiptX3NldHRlcikoc2hhZG93ID8g
bWFrZVVuaXF1ZTxTaGFkb3dEYXRhPigqc2hhZG93KSA6IG51bGxwdHIsIGZhbHNlKTsKKyAgICAg
ICAgaWYgKGNvbnRleHQuaXNEaXNjcmV0ZSkgeworICAgICAgICAgICAgQVNTRVJUKCFjb250ZXh0
LnByb2dyZXNzIHx8IGNvbnRleHQucHJvZ3Jlc3MgPT0gMS4wKTsKKyAgICAgICAgICAgIGF1dG8q
IHNoYWRvdyA9IGNvbnRleHQucHJvZ3Jlc3MgPyB0b1NoYWRvdyA6IGZyb21TaGFkb3c7CisgICAg
ICAgICAgICAoZGVzdGluYXRpb24uKm1fc2V0dGVyKShzaGFkb3cgPyBtYWtlVW5pcXVlPFNoYWRv
d0RhdGE+KCpzaGFkb3cpIDogbnVsbHB0ciwgZmFsc2UpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKQEAgLTExNDUsMjIgKzExNDEsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgaW50
IHRvTGVuZ3RoID0gc2hhZG93TGlzdExlbmd0aCh0b1NoYWRvdyk7CiAKICAgICAgICAgaWYgKGZy
b21MZW5ndGggPT0gdG9MZW5ndGggfHwgKGZyb21MZW5ndGggPD0gMSAmJiB0b0xlbmd0aCA8PSAx
KSkgewotICAgICAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0ZXIpKGJsZW5kU2ltcGxlT3JN
YXRjaGVkU2hhZG93TGlzdHMoY2xpZW50LCBwcm9ncmVzcywgZnJvbVNoYWRvdywgdG9TaGFkb3cp
LCBmYWxzZSk7CisgICAgICAgICAgICAoZGVzdGluYXRpb24uKm1fc2V0dGVyKShibGVuZFNpbXBs
ZU9yTWF0Y2hlZFNoYWRvd0xpc3RzKGZyb21TaGFkb3csIHRvU2hhZG93LCBjb250ZXh0KSwgZmFs
c2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgKGRlc3RpbmF0
aW9uLT4qbV9zZXR0ZXIpKGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGNsaWVudCwgcHJvZ3Jl
c3MsIGZyb21TaGFkb3csIHRvU2hhZG93LCBmcm9tTGVuZ3RoLCB0b0xlbmd0aCksIGZhbHNlKTsK
KyAgICAgICAgKGRlc3RpbmF0aW9uLiptX3NldHRlcikoYmxlbmRNaXNtYXRjaGVkU2hhZG93TGlz
dHMoZnJvbVNoYWRvdywgdG9TaGFkb3csIGZyb21MZW5ndGgsIHRvTGVuZ3RoLCBjb250ZXh0KSwg
ZmFsc2UpOwogICAgIH0KIAogI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSos
IGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJl
bmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGRvdWJs
ZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBiZXR0ZXIg
bG9nZ2luZy4KICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAi
ICBibGVuZGluZyBTaGFkb3dEYXRhIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVz
cGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7CiAgICAgfQogI2VuZGlmCiAKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRTaW1wbGVPck1hdGNoZWRTaGFkb3dMaXN0cyhjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIGRvdWJsZSBwcm9ncmVzcywgY29u
c3QgU2hhZG93RGF0YSogc2hhZG93QSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QikgY29uc3QK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRTaW1wbGVPck1hdGNoZWRTaGFk
b3dMaXN0cyhjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFk
b3dCLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBuZXdTaGFkb3dEYXRhOwog
ICAgICAgICBTaGFkb3dEYXRhKiBsYXN0U2hhZG93ID0gMDsKQEAgLTExNjksNyArMTE2NSw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFkb3cgPSBzaGFk
b3dGb3JCbGVuZGluZyhzaGFkb3dBLCBzaGFkb3dCKTsKICAgICAgICAgICAgIGNvbnN0IFNoYWRv
d0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0IsIHNoYWRvd0EpOwog
Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRlZFNoYWRvdyA9
IGJsZW5kRnVuYyhjbGllbnQsIHNyY1NoYWRvdywgZHN0U2hhZG93LCBwcm9ncmVzcyk7CisgICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRlZFNoYWRvdyA9IGJsZW5k
RnVuYyhzcmNTaGFkb3csIGRzdFNoYWRvdywgY29udGV4dCk7CiAgICAgICAgICAgICBTaGFkb3dE
YXRhKiBibGVuZGVkU2hhZG93UHRyID0gYmxlbmRlZFNoYWRvdy5nZXQoKTsKIAogICAgICAgICAg
ICAgaWYgKCFsYXN0U2hhZG93KQpAQCAtMTE4Niw3ICsxMTgyLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgcmV0dXJuIG5ld1NoYWRvd0RhdGE7CiAgICAgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNo
YWRvd0RhdGE+IGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGNvbnN0IENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQqIGNsaWVudCwgZG91YmxlIHByb2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBz
aGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dCLCBpbnQgZnJvbUxlbmd0aCwgaW50IHRv
TGVuZ3RoKSBjb25zdAorICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZE1pc21h
dGNoZWRTaGFkb3dMaXN0cyhjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dE
YXRhKiBzaGFkb3dCLCBpbnQgZnJvbUxlbmd0aCwgaW50IHRvTGVuZ3RoLCBjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICB7CiAgICAgICAgIC8vIFRo
ZSBzaGFkb3dzIGluIFNoYWRvd0RhdGEgYXJlIHN0b3JlZCBpbiByZXZlcnNlIG9yZGVyLCBzbyB3
aGVuIGFuaW1hdGluZyBtaXNtYXRjaGVkIGxpc3RzLAogICAgICAgICAvLyByZXZlcnNlIHRoZW0g
YW5kIG1hdGNoIGZyb20gdGhlIGVuZC4KQEAgLTEyMTIsNyArMTIwOCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFkb3cgPSBzaGFkb3dGb3JCbGVuZGlu
Zyhmcm9tU2hhZG93LCB0b1NoYWRvdyk7CiAgICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBk
c3RTaGFkb3cgPSBzaGFkb3dGb3JCbGVuZGluZyh0b1NoYWRvdywgZnJvbVNoYWRvdyk7CiAKLSAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxl
bmRGdW5jKGNsaWVudCwgc3JjU2hhZG93LCBkc3RTaGFkb3csIHByb2dyZXNzKTsKKyAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxlbmRGdW5j
KHNyY1NoYWRvdywgZHN0U2hhZG93LCBjb250ZXh0KTsKICAgICAgICAgICAgIC8vIEluc2VydCBh
dCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QgdG8gcHJlc2VydmUgdGhlIG9yZGVyLgogICAgICAgICAg
ICAgYmxlbmRlZFNoYWRvdy0+c2V0TmV4dChXVEZNb3ZlKG5ld1NoYWRvd0RhdGEpKTsKICAgICAg
ICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZNb3ZlKGJsZW5kZWRTaGFkb3cpOwpAQCAtMTIzNiwx
MiArMTIzMiwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIGJvb2wgZXF1YWxz
KGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QgZmluYWwK
KyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwgY29uc3QgUmVuZGVyU3R5bGUm
IGIpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICBpZiAo
JmEgPT0gJmIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFi
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIENvbG9yIGZyb21Db2xvciA9
IHZhbHVlKGEpOwogICAgICAgICBDb2xvciB0b0NvbG9yID0gdmFsdWUoYik7CkBAIC0xMjUwLDE0
ICsxMjQ0LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAg
ICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBmcm9tQ29sb3IgPSBhLT5j
b2xvcigpOworICAgICAgICAgICAgZnJvbUNvbG9yID0gYS5jb2xvcigpOwogICAgICAgICBpZiAo
IXRvQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgdG9Db2xvciA9IGItPmNvbG9yKCk7Cisg
ICAgICAgICAgICB0b0NvbG9yID0gYi5jb2xvcigpOwogCiAgICAgICAgIHJldHVybiBmcm9tQ29s
b3IgPT0gdG9Db2xvcjsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBS
ZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNv
bnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAg
ICAgQ29sb3IgZnJvbUNvbG9yID0gdmFsdWUoZnJvbSk7CiAgICAgICAgIENvbG9yIHRvQ29sb3Ig
PSB2YWx1ZSh0byk7CkBAIC0xMjY2LDIyICsxMjYwLDIyIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAg
ICAgZnJvbUNvbG9yID0gZnJvbS0+Y29sb3IoKTsKKyAgICAgICAgICAgIGZyb21Db2xvciA9IGZy
b20uY29sb3IoKTsKICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAg
IHRvQ29sb3IgPSB0by0+Y29sb3IoKTsKLSAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0ZXIp
KGJsZW5kRnVuYyhjbGllbnQsIGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKKyAgICAg
ICAgICAgIHRvQ29sb3IgPSB0by5jb2xvcigpOworICAgICAgICAoZGVzdGluYXRpb24uKm1fc2V0
dGVyKShibGVuZEZ1bmMoZnJvbUNvbG9yLCB0b0NvbG9yLCBjb250ZXh0KSk7CiAgICAgfQogCi0g
ICAgQ29sb3IgdmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorICAgIENvbG9y
IHZhbHVlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiAoc3R5bGUtPiptX2dldHRlcikoKTsKKyAgICAgICAgcmV0dXJuIChzdHlsZS4qbV9nZXR0
ZXIpKCk7CiAgICAgfQogCiAjaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29u
c3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgY29uc3QgUmVuZGVy
U3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgbG9n
QmxlbmQoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bywgY29u
c3QgUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFs
CiAgICAgewogICAgICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcuCi0gICAgICAgIExPR19X
SVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9w
ZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoZnJvbSkgPDwgIiB0byAi
IDw8IHZhbHVlKHRvKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVj
dGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAg
ICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8
PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoZnJvbSkg
PDwgIiB0byAiIDw8IHZhbHVlKHRvKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVt
YmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUoZGVzdGlu
YXRpb24pKTsKICAgICB9CiAjZW5kaWYKIApAQCAtMTMwOCwxNSArMTMwMiwxNSBAQCBwdWJsaWM6
CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIGJvb2wgZXF1YWxz
KGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25zdCBSZW5kZXJTdHlsZSYgYikgY29uc3Qgb3ZlcnJp
ZGUKICAgICB7CiAgICAgICAgIHJldHVybiBtX3dyYXBwZXItPmVxdWFscyhhLCBiKSAmJiBtX3Zp
c2l0ZWRXcmFwcGVyLT5lcXVhbHMoYSwgYik7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5h
dGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91
YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUm
IGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUm
IHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3Qgb3Zl
cnJpZGUKICAgICB7Ci0gICAgICAgIG1fd3JhcHBlci0+YmxlbmQoY2xpZW50LCBkZXN0aW5hdGlv
biwgZnJvbSwgdG8sIHByb2dyZXNzKTsKLSAgICAgICAgbV92aXNpdGVkV3JhcHBlci0+YmxlbmQo
Y2xpZW50LCBkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAgICAgICAgbV93cmFw
cGVyLT5ibGVuZChkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIGNvbnRleHQpOworICAgICAgICBtX3Zp
c2l0ZWRXcmFwcGVyLT5ibGVuZChkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIGNvbnRleHQpOwogICAg
IH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPiBt
X3dyYXBwZXI7CkBAIC0xMzI0LDE5ICsxMzE4LDE5IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToK
ICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSog
ZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBk
b3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5k
ZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBSZW5kZXJTdHlsZSYg
ZGVzdGluYXRpb24sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAg
IG1fd3JhcHBlci0+bG9nQmxlbmQoZnJvbSwgdG8sIHJlc3VsdCwgcHJvZ3Jlc3MpOwotICAgICAg
ICBtX3Zpc2l0ZWRXcmFwcGVyLT5sb2dCbGVuZChmcm9tLCB0bywgcmVzdWx0LCBwcm9ncmVzcyk7
CisgICAgICAgIG1fd3JhcHBlci0+bG9nQmxlbmQoZnJvbSwgdG8sIGRlc3RpbmF0aW9uLCBwcm9n
cmVzcyk7CisgICAgICAgIG1fdmlzaXRlZFdyYXBwZXItPmxvZ0JsZW5kKGZyb20sIHRvLCBkZXN0
aW5hdGlvbiwgcHJvZ3Jlc3MpOwogICAgIH0KICNlbmRpZgogfTsKIAotc3RhdGljIGJvb2wgY2Fu
SW50ZXJwb2xhdGVDYXJldENvbG9yKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5k
ZXJTdHlsZSogdG8sIGJvb2wgdmlzaXRlZCkKK3N0YXRpYyBib29sIGNhbkludGVycG9sYXRlQ2Fy
ZXRDb2xvcihjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBi
b29sIHZpc2l0ZWQpCiB7CiAgICAgaWYgKHZpc2l0ZWQpCi0gICAgICAgIHJldHVybiAhZnJvbS0+
aGFzVmlzaXRlZExpbmtBdXRvQ2FyZXRDb2xvcigpICYmICF0by0+aGFzVmlzaXRlZExpbmtBdXRv
Q2FyZXRDb2xvcigpOwotICAgIHJldHVybiAhZnJvbS0+aGFzQXV0b0NhcmV0Q29sb3IoKSAmJiAh
dG8tPmhhc0F1dG9DYXJldENvbG9yKCk7CisgICAgICAgIHJldHVybiAhZnJvbS5oYXNWaXNpdGVk
TGlua0F1dG9DYXJldENvbG9yKCkgJiYgIXRvLmhhc1Zpc2l0ZWRMaW5rQXV0b0NhcmV0Q29sb3Io
KTsKKyAgICByZXR1cm4gIWZyb20uaGFzQXV0b0NhcmV0Q29sb3IoKSAmJiAhdG8uaGFzQXV0b0Nh
cmV0Q29sb3IoKTsKIH0KIAogY2xhc3MgQ2FyZXRDb2xvclByb3BlcnR5V3JhcHBlciBmaW5hbCA6
IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvciB7CkBAIC0xMzQ4LDM4
ICsxMzQyLDM4IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBlcXVhbHMo
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBmaW5hbAor
ICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25zdCBSZW5kZXJTdHlsZSYg
YikgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIHJldHVybiBhLT5oYXNBdXRvQ2FyZXRDb2xv
cigpID09IGItPmhhc0F1dG9DYXJldENvbG9yKCkKLSAgICAgICAgICAgICYmIGEtPmhhc1Zpc2l0
ZWRMaW5rQXV0b0NhcmV0Q29sb3IoKSA9PSBiLT5oYXNWaXNpdGVkTGlua0F1dG9DYXJldENvbG9y
KCkKKyAgICAgICAgcmV0dXJuIGEuaGFzQXV0b0NhcmV0Q29sb3IoKSA9PSBiLmhhc0F1dG9DYXJl
dENvbG9yKCkKKyAgICAgICAgICAgICYmIGEuaGFzVmlzaXRlZExpbmtBdXRvQ2FyZXRDb2xvcigp
ID09IGIuaGFzVmlzaXRlZExpbmtBdXRvQ2FyZXRDb2xvcigpCiAgICAgICAgICAgICAmJiBQcm9w
ZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcjo6ZXF1YWxzKGEsIGIpOwogICAgIH0KIAot
ICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJl
bmRlclN0eWxlKiB0bykgY29uc3QgZmluYWwKKyAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0
IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8pIGNvbnN0IGZpbmFsCiAg
ICAgewogICAgICAgICByZXR1cm4gY2FuSW50ZXJwb2xhdGVDYXJldENvbG9yKGZyb20sIHRvLCBm
YWxzZSkgfHwgY2FuSW50ZXJwb2xhdGVDYXJldENvbG9yKGZyb20sIHRvLCB0cnVlKTsKICAgICB9
CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVu
dCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29u
c3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9p
ZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9t
LCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0
JiBjb250ZXh0KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgaWYgKGNhbkludGVycG9sYXRl
Q2FyZXRDb2xvcihmcm9tLCB0bywgZmFsc2UpKQotICAgICAgICAgICAgbV93cmFwcGVyLT5ibGVu
ZChjbGllbnQsIGRlc3RpbmF0aW9uLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOworICAgICAgICAgICAg
bV93cmFwcGVyLT5ibGVuZChkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIGNvbnRleHQpOwogICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8qIGJsZW5kaW5nUmVuZGVyU3R5bGUgPSBwcm9ncmVz
cyA8IDAuNSA/IGZyb20gOiB0bzsKLSAgICAgICAgICAgIGlmIChibGVuZGluZ1JlbmRlclN0eWxl
LT5oYXNBdXRvQ2FyZXRDb2xvcigpKQotICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLT5zZXRI
YXNBdXRvQ2FyZXRDb2xvcigpOworICAgICAgICAgICAgYXV0byYgYmxlbmRpbmdSZW5kZXJTdHls
ZSA9IGNvbnRleHQucHJvZ3Jlc3MgPCAwLjUgPyBmcm9tIDogdG87CisgICAgICAgICAgICBpZiAo
YmxlbmRpbmdSZW5kZXJTdHlsZS5oYXNBdXRvQ2FyZXRDb2xvcigpKQorICAgICAgICAgICAgICAg
IGRlc3RpbmF0aW9uLnNldEhhc0F1dG9DYXJldENvbG9yKCk7CiAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZGVzdGluYXRpb24tPnNldENhcmV0Q29sb3IoYmxlbmRpbmdSZW5kZXJT
dHlsZS0+Y2FyZXRDb2xvcigpKTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5zZXRDYXJl
dENvbG9yKGJsZW5kaW5nUmVuZGVyU3R5bGUuY2FyZXRDb2xvcigpKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGlmIChjYW5JbnRlcnBvbGF0ZUNhcmV0Q29sb3IoZnJvbSwgdG8sIHRydWUpKQotICAg
ICAgICAgICAgbV92aXNpdGVkV3JhcHBlci0+YmxlbmQoY2xpZW50LCBkZXN0aW5hdGlvbiwgZnJv
bSwgdG8sIHByb2dyZXNzKTsKKyAgICAgICAgICAgIG1fdmlzaXRlZFdyYXBwZXItPmJsZW5kKGRl
c3RpbmF0aW9uLCBmcm9tLCB0bywgY29udGV4dCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgYXV0byogYmxlbmRpbmdSZW5kZXJTdHlsZSA9IHByb2dyZXNzIDwgMC41ID8gZnJvbSA6IHRv
OwotICAgICAgICAgICAgaWYgKGJsZW5kaW5nUmVuZGVyU3R5bGUtPmhhc1Zpc2l0ZWRMaW5rQXV0
b0NhcmV0Q29sb3IoKSkKLSAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi0+c2V0SGFzVmlzaXRl
ZExpbmtBdXRvQ2FyZXRDb2xvcigpOworICAgICAgICAgICAgYXV0byYgYmxlbmRpbmdSZW5kZXJT
dHlsZSA9IGNvbnRleHQucHJvZ3Jlc3MgPCAwLjUgPyBmcm9tIDogdG87CisgICAgICAgICAgICBp
ZiAoYmxlbmRpbmdSZW5kZXJTdHlsZS5oYXNWaXNpdGVkTGlua0F1dG9DYXJldENvbG9yKCkpCisg
ICAgICAgICAgICAgICAgZGVzdGluYXRpb24uc2V0SGFzVmlzaXRlZExpbmtBdXRvQ2FyZXRDb2xv
cigpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLT5zZXRW
aXNpdGVkTGlua0NhcmV0Q29sb3IoYmxlbmRpbmdSZW5kZXJTdHlsZS0+dmlzaXRlZExpbmtDYXJl
dENvbG9yKCkpOworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLnNldFZpc2l0ZWRMaW5rQ2Fy
ZXRDb2xvcihibGVuZGluZ1JlbmRlclN0eWxlLnZpc2l0ZWRMaW5rQ2FyZXRDb2xvcigpKTsKICAg
ICAgICAgfQogICAgIH0KIH07CkBAIC0xMzk3LDExICsxMzkxLDExIEBAIHB1YmxpYzoKICAgICBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eTsgfQogCiAg
ICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5ZXIq
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQqLCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5
ZXIqLCBkb3VibGUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoRmlsbExheWVy
KiwgY29uc3QgRmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKiwgY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NvbnRleHQmKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGNhbkludGVycG9s
YXRlKGNvbnN0IEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXllciopIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIAogI2lmICFMT0dfRElTQUJMRUQKLSAgICB2aXJ0dWFsIHZvaWQgbG9nQmxlbmQoY29u
c3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXllcios
IGRvdWJsZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxs
TGF5ZXIqIGRlc3RpbmF0aW9uLCBjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5ZXIqLCBk
b3VibGUpIGNvbnN0ID0gMDsKICNlbmRpZgogCiBwcml2YXRlOgpAQCAtMTQzNSw5ICsxNDI5LDkg
QEAgcHJvdGVjdGVkOgogICAgIH0KIAogI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0Js
ZW5kKGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0
IEZpbGxMYXllciogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB2b2lk
IGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciogZGVzdGluYXRpb24sIGNvbnN0IEZpbGxMYXllciog
ZnJvbSwgY29uc3QgRmlsbExheWVyKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlk
ZQogICAgIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAi
ICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAiIGZyb20gIiA8
PCB2YWx1ZShmcm9tKSA8PCAiIHRvICIgPDwgdmFsdWUodG8pIDw8ICIgYXQgIiA8PCBUZXh0U3Ry
ZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8
PCB2YWx1ZShyZXN1bHQpKTsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0
cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAi
IGZyb20gIiA8PCB2YWx1ZShmcm9tKSA8PCAiIHRvICIgPDwgdmFsdWUodG8pIDw8ICIgYXQgIiA8
PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8
ICIgLT4gIiA8PCB2YWx1ZShkZXN0aW5hdGlvbikpOwogICAgIH0KICNlbmRpZgogCkBAIC0xNDU2
LDkgKzE0NTAsOSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgYmxlbmQo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBGaWxsTGF5ZXIqIGRlc3Rp
bmF0aW9uLCBjb25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0IEZpbGxMYXllciogdG8sIGRvdWJs
ZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGJsZW5kKEZpbGxMYXllciogZGVzdGlu
YXRpb24sIGNvbnN0IEZpbGxMYXllciogZnJvbSwgY29uc3QgRmlsbExheWVyKiB0bywgY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0IGZpbmFsCiAgICAgewot
ICAgICAgICAoZGVzdGluYXRpb24tPip0aGlzLT5tX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwg
dGhpcy0+dmFsdWUoZnJvbSksIHRoaXMtPnZhbHVlKHRvKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAg
KGRlc3RpbmF0aW9uLT4qdGhpcy0+bV9zZXR0ZXIpKGJsZW5kRnVuYyh0aGlzLT52YWx1ZShmcm9t
KSwgdGhpcy0+dmFsdWUodG8pLCBjb250ZXh0KSk7CiAgICAgfQogCiAgICAgYm9vbCBjYW5JbnRl
cnBvbGF0ZShjb25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0IEZpbGxMYXllciogdG8pIGNvbnN0
IGZpbmFsCkBAIC0xNDY3LDEyICsxNDYxLDEyIEBAIHByaXZhdGU6CiAgICAgfQogCiAjaWYgIUxP
R19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNv
bnN0IEZpbGxMYXllciogZnJvbSwgY29uc3QgRmlsbExheWVyKiB0bywgZG91YmxlIHByb2dyZXNz
KSBjb25zdCBmaW5hbAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiBkZXN0aW5h
dGlvbiwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25zdCBGaWxsTGF5ZXIqIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5p
bWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKEZpbGxM
YXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnByb3BlcnR5KCkpCiAgICAgICAg
ICAgICA8PCAiIGZyb20gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3Qg
VCY+Ojp2YWx1ZShmcm9tKQogICAgICAgICAgICAgPDwgIiB0byAiIDw8IEZpbGxMYXllclByb3Bl
cnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnZhbHVlKHRvKQotICAgICAgICAgICAgPDwgIiBh
dCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVz
cykgPDwgIiAtPiAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46
OnZhbHVlKHJlc3VsdCkpOworICAgICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZv
cm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxM
YXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnZhbHVlKGRlc3RpbmF0aW9uKSk7
CiAgICAgfQogI2VuZGlmCiAKQEAgLTE1MDgsNyArMTUwMiw3IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBmcm9tTGVuZ3RoID09IHRvTGVuZ3RoICYmIGZyb21FZGdlID09IHRvRWRnZTsKICAg
ICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNs
aWVudCwgRmlsbExheWVyKiBkZXN0aW5hdGlvbiwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25z
dCBGaWxsTGF5ZXIqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBi
bGVuZChGaWxsTGF5ZXIqIGRlc3RpbmF0aW9uLCBjb25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0
IEZpbGxMYXllciogdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0
KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgYXV0byBmcm9tTGVuZ3RoID0gdmFsdWUoZnJv
bSk7CiAgICAgICAgIGF1dG8gdG9MZW5ndGggPSB2YWx1ZSh0byk7CkBAIC0xNTI2LDEzICsxNTIw
LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICAoZGVz
dGluYXRpb24tPiptX2xlbmd0aFNldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgZnJvbUxlbmd0aCwg
dG9MZW5ndGgsIHByb2dyZXNzKSk7CisgICAgICAgIChkZXN0aW5hdGlvbi0+Km1fbGVuZ3RoU2V0
dGVyKShibGVuZEZ1bmMoZnJvbUxlbmd0aCwgdG9MZW5ndGgsIGNvbnRleHQpKTsKICAgICB9CiAK
ICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJl
c3VsdCwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25zdCBGaWxsTGF5ZXIqIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIq
IGRlc3RpbmF0aW9uLCBjb25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0IEZpbGxMYXllciogdG8s
IGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIExPR19XSVRIX1NU
UkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5h
bWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoZnJvbSkgPDwgIiB0byAiIDw8IHZh
bHVlKHRvKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0lu
dGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgICAgIExP
R19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQ
cm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoZnJvbSkgPDwgIiB0
byAiIDw8IHZhbHVlKHRvKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVz
cGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUoZGVzdGluYXRpb24p
KTsKICAgICB9CiAjZW5kaWYKIApAQCAtMTU1MywxOCArMTU0NywxOCBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogY2xpZW50LCBGaWxsTGF5ZXIqIGRlc3RpbmF0aW9uLCBjb25zdCBGaWxsTGF5ZXIqIGZy
b20sIGNvbnN0IEZpbGxMYXllciogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAg
ICB2b2lkIGJsZW5kKEZpbGxMYXllciogZGVzdGluYXRpb24sIGNvbnN0IEZpbGxMYXllciogZnJv
bSwgY29uc3QgRmlsbExheWVyKiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICAoZGVzdGluYXRpb24tPip0aGlz
LT5tX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgdGhpcy0+dmFsdWUoZnJvbSksIHRoaXMtPnZh
bHVlKHRvKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgKGRlc3RpbmF0aW9uLT4qdGhpcy0+bV9zZXR0
ZXIpKGJsZW5kRnVuYyh0aGlzLT52YWx1ZShmcm9tKSwgdGhpcy0+dmFsdWUodG8pLCBjb250ZXh0
KSk7CiAgICAgfQogCiAjaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3Qg
RmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogZnJvbSwgY29uc3QgRmlsbExheWVy
KiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHZvaWQgbG9nQmxlbmQo
Y29uc3QgRmlsbExheWVyKiBkZXN0aW5hdGlvbiwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25z
dCBGaWxsTGF5ZXIqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCiAgICAgewog
ICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5n
ICIgPDwgZ2V0UHJvcGVydHlOYW1lKEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46
OnByb3BlcnR5KCkpCiAgICAgICAgICAgICA8PCAiIGZyb20gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8VCo+Ojp2YWx1ZShmcm9tKQogICAgICAgICAgICAgPDwgIiB0byAiIDw8
IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKHRvKQotICAgICAgICAg
ICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vy
cyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxU
Kj46OnZhbHVlKHJlc3VsdCkpOworICAgICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06
OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZp
bGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKGRlc3RpbmF0aW9uKSk7CiAg
ICAgfQogI2VuZGlmCiAKQEAgLTE1OTUsOSArMTU4OSw5IEBAIHByaXZhdGU6CiAgICAgfQogCiAj
aWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1
bHQsIGNvbnN0IEZpbGxMYXllciogZnJvbSwgY29uc3QgRmlsbExheWVyKiB0bywgZG91YmxlIHBy
b2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiBk
ZXN0aW5hdGlvbiwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25zdCBGaWxsTGF5ZXIqIHRvLCBk
b3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBMT0dfV0lUSF9TVFJF
QU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1l
KHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGZyb20pIDw8ICIgdG8gIiA8PCB2YWx1
ZSh0bykgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRl
Z2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOworICAgICAgICBMT0df
V0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJv
cGVydHlOYW1lKHRoaXMtPnByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHRoaXMtPnZhbHVlKGZy
b20pIDw8ICIgdG8gIiA8PCB0aGlzLT52YWx1ZSh0bykgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06
OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IHZh
bHVlKGRlc3RpbmF0aW9uKSk7CiAgICAgfQogI2VuZGlmCiB9OwpAQCAtMTYzNiwxNSArMTYzMCwx
MyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QgZmluYWwKKyAgICBib29s
IGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwgY29uc3QgUmVuZGVyU3R5bGUmIGIpIGNvbnN0
IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICBpZiAoJmEgPT0gJmIp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFiKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGF1dG8qIGZyb21MYXllciA9ICYoYS0+Km1f
bGF5ZXJzR2V0dGVyKSgpOwotICAgICAgICBhdXRvKiB0b0xheWVyID0gJihiLT4qbV9sYXllcnNH
ZXR0ZXIpKCk7CisgICAgICAgIGF1dG8qIGZyb21MYXllciA9ICYoYS4qbV9sYXllcnNHZXR0ZXIp
KCk7CisgICAgICAgIGF1dG8qIHRvTGF5ZXIgPSAmKGIuKm1fbGF5ZXJzR2V0dGVyKSgpOwogCiAg
ICAgICAgIHdoaWxlIChmcm9tTGF5ZXIgJiYgdG9MYXllcikgewogICAgICAgICAgICAgaWYgKCFt
X2ZpbGxMYXllclByb3BlcnR5V3JhcHBlci0+ZXF1YWxzKGZyb21MYXllciwgdG9MYXllcikpCkBA
IC0xNjU3LDEwICsxNjQ5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNv
bnN0IFJlbmRlclN0eWxlKiB0bykgY29uc3QgZmluYWwKKyAgICBib29sIGNhbkludGVycG9sYXRl
KGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8pIGNvbnN0IGZp
bmFsCiAgICAgewotICAgICAgICBhdXRvKiBmcm9tTGF5ZXIgPSAmKGZyb20tPiptX2xheWVyc0dl
dHRlcikoKTsKLSAgICAgICAgYXV0byogdG9MYXllciA9ICYodG8tPiptX2xheWVyc0dldHRlciko
KTsKKyAgICAgICAgYXV0byogZnJvbUxheWVyID0gJihmcm9tLiptX2xheWVyc0dldHRlcikoKTsK
KyAgICAgICAgYXV0byogdG9MYXllciA9ICYodG8uKm1fbGF5ZXJzR2V0dGVyKSgpOwogCiAgICAg
ICAgIHdoaWxlIChmcm9tTGF5ZXIgJiYgdG9MYXllcikgewogICAgICAgICAgICAgaWYgKGZyb21M
YXllci0+c2l6ZVR5cGUoKSAhPSB0b0xheWVyLT5zaXplVHlwZSgpKQpAQCAtMTY3NiwxNSArMTY2
OCwxNSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB2b2lk
IGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5
bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5
bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5k
ZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5k
ZXJTdHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBj
b25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgYXV0byogZnJvbUxheWVyID0gJihmcm9tLT4qbV9s
YXllcnNHZXR0ZXIpKCk7Ci0gICAgICAgIGF1dG8qIHRvTGF5ZXIgPSAmKHRvLT4qbV9sYXllcnNH
ZXR0ZXIpKCk7Ci0gICAgICAgIGF1dG8qIGRzdExheWVyID0gJihkZXN0aW5hdGlvbi0+Km1fbGF5
ZXJzQWNjZXNzb3IpKCk7CisgICAgICAgIGF1dG8qIGZyb21MYXllciA9ICYoZnJvbS4qbV9sYXll
cnNHZXR0ZXIpKCk7CisgICAgICAgIGF1dG8qIHRvTGF5ZXIgPSAmKHRvLiptX2xheWVyc0dldHRl
cikoKTsKKyAgICAgICAgYXV0byogZHN0TGF5ZXIgPSAmKGRlc3RpbmF0aW9uLiptX2xheWVyc0Fj
Y2Vzc29yKSgpOwogCiAgICAgICAgIHdoaWxlIChmcm9tTGF5ZXIgJiYgdG9MYXllciAmJiBkc3RM
YXllcikgewotICAgICAgICAgICAgZHN0TGF5ZXItPnNldFNpemVUeXBlKChwcm9ncmVzcyA/IHRv
TGF5ZXIgOiBmcm9tTGF5ZXIpLT5zaXplVHlwZSgpKTsKLSAgICAgICAgICAgIG1fZmlsbExheWVy
UHJvcGVydHlXcmFwcGVyLT5ibGVuZChjbGllbnQsIGRzdExheWVyLCBmcm9tTGF5ZXIsIHRvTGF5
ZXIsIHByb2dyZXNzKTsKKyAgICAgICAgICAgIGRzdExheWVyLT5zZXRTaXplVHlwZSgoY29udGV4
dC5wcm9ncmVzcyA/IHRvTGF5ZXIgOiBmcm9tTGF5ZXIpLT5zaXplVHlwZSgpKTsKKyAgICAgICAg
ICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5ibGVuZChkc3RMYXllciwgZnJvbUxheWVy
LCB0b0xheWVyLCBjb250ZXh0KTsKICAgICAgICAgICAgIGZyb21MYXllciA9IGZyb21MYXllci0+
bmV4dCgpOwogICAgICAgICAgICAgdG9MYXllciA9IHRvTGF5ZXItPm5leHQoKTsKICAgICAgICAg
ICAgIGRzdExheWVyID0gZHN0TGF5ZXItPm5leHQoKTsKQEAgLTE2OTIsMTEgKzE2ODQsMTEgQEAg
cHJpdmF0ZToKICAgICB9CiAKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChj
b25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBjb25zdCBSZW5k
ZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBs
b2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBj
b25zdCBSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmlu
YWwKICAgICB7Ci0gICAgICAgIGF1dG8qIGZyb21MYXllciA9ICYoZnJvbS0+Km1fbGF5ZXJzR2V0
dGVyKSgpOwotICAgICAgICBhdXRvKiB0b0xheWVyID0gJih0by0+Km1fbGF5ZXJzR2V0dGVyKSgp
OwotICAgICAgICBhdXRvKiBkc3RMYXllciA9ICYocmVzdWx0LT4qbV9sYXllcnNHZXR0ZXIpKCk7
CisgICAgICAgIGF1dG8qIGZyb21MYXllciA9ICYoZnJvbS4qbV9sYXllcnNHZXR0ZXIpKCk7Cisg
ICAgICAgIGF1dG8qIHRvTGF5ZXIgPSAmKHRvLiptX2xheWVyc0dldHRlcikoKTsKKyAgICAgICAg
YXV0byogZHN0TGF5ZXIgPSAmKGRlc3RpbmF0aW9uLiptX2xheWVyc0dldHRlcikoKTsKIAogICAg
ICAgICB3aGlsZSAoZnJvbUxheWVyICYmIHRvTGF5ZXIgJiYgZHN0TGF5ZXIpIHsKICAgICAgICAg
ICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5sb2dCbGVuZChkc3RMYXllciwgZnJvbUxh
eWVyLCB0b0xheWVyLCBwcm9ncmVzcyk7CkBAIC0xNzI2LDEyICsxNzE4LDEwIEBAIHB1YmxpYzoK
ICAgICBjb25zdCBWZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+JiBwcm9wZXJ0
eVdyYXBwZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzOyB9CiAKIHByaXZh
dGU6Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiKSBjb25zdCBmaW5hbAorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlJiBh
LCBjb25zdCBSZW5kZXJTdHlsZSYgYikgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIGlmIChh
ID09IGIpCisgICAgICAgIGlmICgmYSA9PSAmYikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgZm9yIChhdXRvJiB3cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKSB7CiAgICAgICAgICAg
ICBpZiAoIXdyYXBwZXItPmVxdWFscyhhLCBiKSkKQEAgLTE3NDAsMTQgKzE3MzAsMTQgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5h
dGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91
YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRl
c3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRv
LCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QgZmluYWwK
ICAgICB7CiAgICAgICAgIGZvciAoYXV0byYgd3JhcHBlciA6IG1fcHJvcGVydHlXcmFwcGVycykK
LSAgICAgICAgICAgIHdyYXBwZXItPmJsZW5kKGNsaWVudCwgZGVzdGluYXRpb24sIGZyb20sIHRv
LCBwcm9ncmVzcyk7CisgICAgICAgICAgICB3cmFwcGVyLT5ibGVuZChkZXN0aW5hdGlvbiwgZnJv
bSwgdG8sIGNvbnRleHQpOwogICAgIH0KIAogI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxv
Z0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8sIGNv
bnN0IFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5h
bAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRl
clN0eWxlJiB0bywgY29uc3QgUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBmb3IgKGF1dG8mIHdyYXBwZXIgOiBtX3By
b3BlcnR5V3JhcHBlcnMpCiAgICAgICAgICAgICB3cmFwcGVyLT5sb2dCbGVuZChmcm9tLCB0bywg
ZGVzdGluYXRpb24sIHByb2dyZXNzKTsKQEAgLTE3NjYsMzAgKzE3NTYsMjggQEAgcHVibGljOgog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IGZpbmFsCisgICAgYm9vbCBlcXVhbHMoY29uc3Qg
UmVuZGVyU3R5bGUmIGEsIGNvbnN0IFJlbmRlclN0eWxlJiBiKSBjb25zdCBmaW5hbAogICAgIHsK
LSAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgaWYgKCZhID09ICZiKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgICAgICByZXR1cm4gYS0+ZmxleEJhc2lzKCkgPT0gYi0+ZmxleEJhc2lzKCkg
JiYgYS0+ZmxleEdyb3coKSA9PSBiLT5mbGV4R3JvdygpICYmIGEtPmZsZXhTaHJpbmsoKSA9PSBi
LT5mbGV4U2hyaW5rKCk7CisgICAgICAgIHJldHVybiBhLmZsZXhCYXNpcygpID09IGIuZmxleEJh
c2lzKCkgJiYgYS5mbGV4R3JvdygpID09IGIuZmxleEdyb3coKSAmJiBhLmZsZXhTaHJpbmsoKSA9
PSBiLmZsZXhTaHJpbmsoKTsKICAgICB9CiAKLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0
IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCisg
ICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVu
ZGVyU3R5bGUmIHRvKSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgcmV0dXJuIGZyb20tPmZs
ZXhHcm93KCkgIT0gdG8tPmZsZXhHcm93KCkgJiYgZnJvbS0+ZmxleFNocmluaygpICE9IHRvLT5m
bGV4U2hyaW5rKCkgJiYgY2FuSW50ZXJwb2xhdGVMZW5ndGhzKGZyb20tPmZsZXhCYXNpcygpLCB0
by0+ZmxleEJhc2lzKCksIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGZyb20uZmxleEdyb3coKSAh
PSB0by5mbGV4R3JvdygpICYmIGZyb20uZmxleFNocmluaygpICE9IHRvLmZsZXhTaHJpbmsoKSAm
JiBjYW5JbnRlcnBvbGF0ZUxlbmd0aHMoZnJvbS5mbGV4QmFzaXMoKSwgdG8uZmxleEJhc2lzKCks
IGZhbHNlKTsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJT
dHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0
IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJl
bmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgZGVz
dGluYXRpb24tPnNldEZsZXhCYXNpcyhibGVuZEZ1bmMoY2xpZW50LCBmcm9tLT5mbGV4QmFzaXMo
KSwgdG8tPmZsZXhCYXNpcygpLCBwcm9ncmVzcykpOwotICAgICAgICBkZXN0aW5hdGlvbi0+c2V0
RmxleEdyb3coYmxlbmRGdW5jKGNsaWVudCwgZnJvbS0+ZmxleEdyb3coKSwgdG8tPmZsZXhHcm93
KCksIHByb2dyZXNzKSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uLT5zZXRGbGV4U2hyaW5rKGJsZW5k
RnVuYyhjbGllbnQsIGZyb20tPmZsZXhTaHJpbmsoKSwgdG8tPmZsZXhTaHJpbmsoKSwgcHJvZ3Jl
c3MpKTsKKyAgICAgICAgZGVzdGluYXRpb24uc2V0RmxleEJhc2lzKGJsZW5kRnVuYyhmcm9tLmZs
ZXhCYXNpcygpLCB0by5mbGV4QmFzaXMoKSwgY29udGV4dCkpOworICAgICAgICBkZXN0aW5hdGlv
bi5zZXRGbGV4R3JvdyhibGVuZEZ1bmMoZnJvbS5mbGV4R3JvdygpLCB0by5mbGV4R3JvdygpLCBj
b250ZXh0KSk7CisgICAgICAgIGRlc3RpbmF0aW9uLnNldEZsZXhTaHJpbmsoYmxlbmRGdW5jKGZy
b20uZmxleFNocmluaygpLCB0by5mbGV4U2hyaW5rKCksIGNvbnRleHQpKTsKICAgICB9CiAKICNp
ZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSosIGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUgcHJvZ3Jlc3MpIGNv
bnN0IGZpbmFsCisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJl
bmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZp
bmFsCiAgICAgewogICAgICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcuCiAgICAgICAgIExP
R19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgZmxleCBhdCAi
IDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykp
OwpAQCAtMTgwOSwyMiArMTc5NywyMCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAg
IGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikg
Y29uc3QgZmluYWwKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwgY29uc3Qg
UmVuZGVyU3R5bGUmIGIpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoYSA9PSBiKQor
ICAgICAgICBpZiAoJmEgPT0gJmIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
aWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmICgo
YS0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpICE9IChiLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkpCisg
ICAgICAgIGlmICgoYS4qbV9wYWludFR5cGVHZXR0ZXIpKCkgIT0gKGIuKm1fcGFpbnRUeXBlR2V0
dGVyKSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIC8vIFdlIG9ubHkg
c3VwcG9ydCBhbmltYXRpb25zIGJldHdlZW4gU1ZHUGFpbnRzIHRoYXQgYXJlIHB1cmUgQ29sb3Ig
dmFsdWVzLgogICAgICAgICAvLyBGb3IgZXZlcnl0aGluZyBlbHNlIHdlIG11c3QgcmV0dXJuIHRy
dWUgZm9yIHRoaXMgbWV0aG9kLCBvdGhlcndpc2UKICAgICAgICAgLy8gd2Ugd2lsbCB0cnkgdG8g
YW5pbWF0ZSBiZXR3ZWVuIHZhbHVlcyBmb3JldmVyLgotICAgICAgICBpZiAoKGEtPiptX3BhaW50
VHlwZUdldHRlcikoKSA9PSBTVkdQYWludFR5cGU6OlJHQkNvbG9yKSB7Ci0gICAgICAgICAgICBD
b2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVyKSgpOwotICAgICAgICAgICAgQ29sb3IgdG9D
b2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGlmICgoYS4qbV9wYWludFR5cGVHZXR0
ZXIpKCkgPT0gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvcikgeworICAgICAgICAgICAgQ29sb3IgZnJv
bUNvbG9yID0gKGEuKm1fZ2V0dGVyKSgpOworICAgICAgICAgICAgQ29sb3IgdG9Db2xvciA9IChi
LiptX2dldHRlcikoKTsKIAogICAgICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpICYm
ICF0b0NvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE4
MzksMTQgKzE4MjUsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
Ci0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQs
IFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0
IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQg
YmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwg
Y29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYg
Y29udGV4dCkgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIGlmICgoZnJvbS0+Km1fcGFpbnRU
eXBlR2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IKLSAgICAgICAgICAgIHx8ICh0
by0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IpCisgICAg
ICAgIGlmICgoZnJvbS4qbV9wYWludFR5cGVHZXR0ZXIpKCkgIT0gU1ZHUGFpbnRUeXBlOjpSR0JD
b2xvcgorICAgICAgICAgICAgfHwgKHRvLiptX3BhaW50VHlwZUdldHRlcikoKSAhPSBTVkdQYWlu
dFR5cGU6OlJHQkNvbG9yKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIENvbG9yIGZy
b21Db2xvciA9IChmcm9tLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIENvbG9yIHRvQ29sb3IgPSAo
dG8tPiptX2dldHRlcikoKTsKKyAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gKGZyb20uKm1fZ2V0
dGVyKSgpOworICAgICAgICBDb2xvciB0b0NvbG9yID0gKHRvLiptX2dldHRlcikoKTsKIAogICAg
ICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkgJiYgIXRvQ29sb3IuaXNWYWxpZCgpKQogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtMTg1NSwxMSArMTg0MSwxMSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgZnJvbUNvbG9yID0gQ29sb3IoKTsKICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQo
KSkKICAgICAgICAgICAgIHRvQ29sb3IgPSBDb2xvcigpOwotICAgICAgICAoZGVzdGluYXRpb24t
PiptX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgZnJvbUNvbG9yLCB0b0NvbG9yLCBwcm9ncmVz
cykpOworICAgICAgICAoZGVzdGluYXRpb24uKm1fc2V0dGVyKShibGVuZEZ1bmMoZnJvbUNvbG9y
LCB0b0NvbG9yLCBjb250ZXh0KSk7CiAgICAgfQogCiAjaWYgIUxPR19ESVNBQkxFRAotICAgIHZv
aWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0
IFJlbmRlclN0eWxlKiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgbG9n
QmxlbmQoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRl
clN0eWxlJiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgLy8g
RklYTUU6IGJldHRlciBsb2dnaW5nLgogICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9u
cywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nIFNWR1BhaW50IGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9y
bWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7CkBAIC0xODgwLDMxICsxODY2
LDI5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBjYW5JbnRlcnBvbGF0
ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBm
aW5hbAorICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNv
bnN0IFJlbmRlclN0eWxlJiB0bykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIHJldHVybiBm
cm9tLT5mb250SXRhbGljKCkgJiYgdG8tPmZvbnRJdGFsaWMoKSAmJiBmcm9tLT5mb250RGVzY3Jp
cHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhpczo6c2xudCAmJiB0by0+Zm9u
dERlc2NyaXB0aW9uKCkuZm9udFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4aXM6OnNsbnQ7Cisg
ICAgICAgIHJldHVybiBmcm9tLmZvbnRJdGFsaWMoKSAmJiB0by5mb250SXRhbGljKCkgJiYgZnJv
bS5mb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhpczo6c2xu
dCAmJiB0by5mb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhp
czo6c2xudDsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJT
dHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0
IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJl
bmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgYXV0
byBkaXNjcmV0ZSA9ICFjYW5JbnRlcnBvbGF0ZShmcm9tLCB0byk7Ci0KICAgICAgICAgYXV0byBi
bGVuZGVkU3R5bGVBeGlzID0gRm9udFN0eWxlQXhpczo6c2xudDsKLSAgICAgICAgaWYgKGRpc2Ny
ZXRlKQotICAgICAgICAgICAgYmxlbmRlZFN0eWxlQXhpcyA9IChwcm9ncmVzcyA8IDAuNSA/IGZy
b20gOiB0byktPmZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKTsKKyAgICAgICAgaWYg
KGNvbnRleHQuaXNEaXNjcmV0ZSkKKyAgICAgICAgICAgIGJsZW5kZWRTdHlsZUF4aXMgPSAoY29u
dGV4dC5wcm9ncmVzcyA8IDAuNSA/IGZyb20gOiB0bykuZm9udERlc2NyaXB0aW9uKCkuZm9udFN0
eWxlQXhpcygpOwogCi0gICAgICAgIGF1dG8gZnJvbUZvbnRJdGFsaWMgPSBmcm9tLT5mb250SXRh
bGljKCk7Ci0gICAgICAgIGF1dG8gdG9Gb250SXRhbGljID0gdG8tPmZvbnRJdGFsaWMoKTsKLSAg
ICAgICAgYXV0byBibGVuZGVkRm9udEl0YWxpYyA9IHByb2dyZXNzIDwgMC41ID8gZnJvbUZvbnRJ
dGFsaWMgOiB0b0ZvbnRJdGFsaWM7Ci0gICAgICAgIGlmICghZGlzY3JldGUpCi0gICAgICAgICAg
ICBibGVuZGVkRm9udEl0YWxpYyA9IGJsZW5kRnVuYyhjbGllbnQsIGZyb21Gb250SXRhbGljLCB0
b0ZvbnRJdGFsaWMsIHByb2dyZXNzKTsKKyAgICAgICAgYXV0byBmcm9tRm9udEl0YWxpYyA9IGZy
b20uZm9udEl0YWxpYygpOworICAgICAgICBhdXRvIHRvRm9udEl0YWxpYyA9IHRvLmZvbnRJdGFs
aWMoKTsKKyAgICAgICAgYXV0byBibGVuZGVkRm9udEl0YWxpYyA9IGNvbnRleHQucHJvZ3Jlc3Mg
PCAwLjUgPyBmcm9tRm9udEl0YWxpYyA6IHRvRm9udEl0YWxpYzsKKyAgICAgICAgaWYgKCFjb250
ZXh0LmlzRGlzY3JldGUpCisgICAgICAgICAgICBibGVuZGVkRm9udEl0YWxpYyA9IGJsZW5kRnVu
Yyhmcm9tRm9udEl0YWxpYywgdG9Gb250SXRhbGljLCBjb250ZXh0KTsKIAotICAgICAgICBGb250
U2VsZWN0b3IqIGN1cnJlbnRGb250U2VsZWN0b3IgPSBkZXN0aW5hdGlvbi0+Zm9udENhc2NhZGUo
KS5mb250U2VsZWN0b3IoKTsKLSAgICAgICAgYXV0byBkZXNjcmlwdGlvbiA9IGRlc3RpbmF0aW9u
LT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgYXV0byogY3VycmVudEZvbnRTZWxlY3RvciA9
IGRlc3RpbmF0aW9uLmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCk7CisgICAgICAgIGF1dG8g
ZGVzY3JpcHRpb24gPSBkZXN0aW5hdGlvbi5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgZGVz
Y3JpcHRpb24uc2V0SXRhbGljKGJsZW5kZWRGb250SXRhbGljKTsKICAgICAgICAgZGVzY3JpcHRp
b24uc2V0Rm9udFN0eWxlQXhpcyhibGVuZGVkU3R5bGVBeGlzKTsKLSAgICAgICAgZGVzdGluYXRp
b24tPnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGRl
c3RpbmF0aW9uLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShjdXJyZW50Rm9udFNlbGVjdG9yKTsKKyAg
ICAgICAgZGVzdGluYXRpb24uc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZGVzY3JpcHRpb24p
KTsKKyAgICAgICAgZGVzdGluYXRpb24uZm9udENhc2NhZGUoKS51cGRhdGUoY3VycmVudEZvbnRT
ZWxlY3Rvcik7CiAgICAgfQogfTsKIApAQCAtMTkyMSwyOCArMTkwNSwyOCBAQCBwdWJsaWM6CiAg
ICAgfQogCiBwcml2YXRlOgotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5
bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bykgY29uc3QgZmluYWwKKyAgICBib29sIGNh
bkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYg
dG8pIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICByZXR1cm4gIShmcm9tLT4qbV9hdXRvR2V0
dGVyKSgpICYmICEodG8tPiptX2F1dG9HZXR0ZXIpKCk7CisgICAgICAgIHJldHVybiAhKGZyb20u
Km1fYXV0b0dldHRlcikoKSAmJiAhKHRvLiptX2F1dG9HZXR0ZXIpKCk7CiAgICAgfQogCi0gICAg
dm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRl
clN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRl
clN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQo
UmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3Qg
UmVuZGVyU3R5bGUmIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4
dCkgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIGF1dG8gYmxlbmRlZFZhbHVlID0gYmxlbmRG
dW5jKGNsaWVudCwgdGhpcy0+dmFsdWUoZnJvbSksIHRoaXMtPnZhbHVlKHRvKSwgcHJvZ3Jlc3Mp
OworICAgICAgICBhdXRvIGJsZW5kZWRWYWx1ZSA9IGJsZW5kRnVuYyh0aGlzLT52YWx1ZShmcm9t
KSwgdGhpcy0+dmFsdWUodG8pLCBjb250ZXh0KTsKICAgICAgICAgaWYgKG1fbWluVmFsdWUpCiAg
ICAgICAgICAgICBibGVuZGVkVmFsdWUgPSBibGVuZGVkVmFsdWUgPiAqbV9taW5WYWx1ZSA/IGJs
ZW5kZWRWYWx1ZSA6ICptX21pblZhbHVlOwotICAgICAgICAoZGVzdGluYXRpb24tPip0aGlzLT5t
X3NldHRlcikoYmxlbmRlZFZhbHVlKTsKKyAgICAgICAgKGRlc3RpbmF0aW9uLip0aGlzLT5tX3Nl
dHRlcikoYmxlbmRlZFZhbHVlKTsKIAotICAgICAgICBpZiAoY2FuSW50ZXJwb2xhdGUoZnJvbSwg
dG8pKQorICAgICAgICBpZiAoIWNvbnRleHQuaXNEaXNjcmV0ZSkKICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICBBU1NFUlQoIXByb2dyZXNzIHx8IHByb2dyZXNzID09IDEuMCk7Ci0gICAg
ICAgIGlmICghcHJvZ3Jlc3MpIHsKLSAgICAgICAgICAgIGlmICgoZnJvbS0+Km1fYXV0b0dldHRl
cikoKSkKLSAgICAgICAgICAgICAgICAoZGVzdGluYXRpb24tPiptX2F1dG9TZXR0ZXIpKCk7Cisg
ICAgICAgIEFTU0VSVCghY29udGV4dC5wcm9ncmVzcyB8fCBjb250ZXh0LnByb2dyZXNzID09IDEu
MCk7CisgICAgICAgIGlmICghY29udGV4dC5wcm9ncmVzcykgeworICAgICAgICAgICAgaWYgKChm
cm9tLiptX2F1dG9HZXR0ZXIpKCkpCisgICAgICAgICAgICAgICAgKGRlc3RpbmF0aW9uLiptX2F1
dG9TZXR0ZXIpKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoKHRvLT4qbV9h
dXRvR2V0dGVyKSgpKQotICAgICAgICAgICAgICAgIChkZXN0aW5hdGlvbi0+Km1fYXV0b1NldHRl
cikoKTsKKyAgICAgICAgICAgIGlmICgodG8uKm1fYXV0b0dldHRlcikoKSkKKyAgICAgICAgICAg
ICAgICAoZGVzdGluYXRpb24uKm1fYXV0b1NldHRlcikoKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtMTk2MCwxMCArMTk0NCwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAg
dm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRl
clN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRl
clN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHZvaWQgYmxl
bmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29u
c3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29u
dGV4dCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGF1dG8gYmxlbmRlZFZhbHVlID0g
YmxlbmRGdW5jKGNsaWVudCwgdmFsdWUoZnJvbSksIHZhbHVlKHRvKSwgcHJvZ3Jlc3MpOwotICAg
ICAgICAoZGVzdGluYXRpb24tPiptX3NldHRlcikoYmxlbmRlZFZhbHVlID4gMCA/IGJsZW5kZWRW
YWx1ZSA6IDApOworICAgICAgICBhdXRvIGJsZW5kZWRWYWx1ZSA9IGJsZW5kRnVuYyh2YWx1ZShm
cm9tKSwgdmFsdWUodG8pLCBjb250ZXh0KTsKKyAgICAgICAgKGRlc3RpbmF0aW9uLiptX3NldHRl
cikoYmxlbmRlZFZhbHVlID4gMCA/IGJsZW5kZWRWYWx1ZSA6IDApOwogICAgIH0KIH07CiAKQEAg
LTE5NzYsMTYgKzE5NjAsMTYgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29s
IGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHls
ZSogdG8pIGNvbnN0IGZpbmFsCisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJT
dHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvKSBjb25zdCBmaW5hbAogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZyb20tPnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpMZW5n
dGggJiYgdG8tPnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpMZW5ndGggJiYgTGVu
Z3RoUHJvcGVydHlXcmFwcGVyOjpjYW5JbnRlcnBvbGF0ZShmcm9tLCB0byk7CisgICAgICAgIHJl
dHVybiBmcm9tLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpMZW5ndGggJiYgdG8u
dmVydGljYWxBbGlnbigpID09IFZlcnRpY2FsQWxpZ246Okxlbmd0aCAmJiBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXI6OmNhbkludGVycG9sYXRlKGZyb20sIHRvKTsKICAgICB9CiAKLSAgICB2b2lkIGJs
ZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUq
IGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUq
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5kZXJT
dHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJT
dHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25z
dCBmaW5hbAogICAgIHsKLSAgICAgICAgTGVuZ3RoUHJvcGVydHlXcmFwcGVyOjpibGVuZChjbGll
bnQsIGRlc3RpbmF0aW9uLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOwotICAgICAgICBhdXRvKiBibGVu
ZGluZ1N0eWxlID0gIWNhbkludGVycG9sYXRlKGZyb20sIHRvKSAmJiBwcm9ncmVzcyA/IHRvIDog
ZnJvbTsKLSAgICAgICAgZGVzdGluYXRpb24tPnNldFZlcnRpY2FsQWxpZ24oYmxlbmRpbmdTdHls
ZS0+dmVydGljYWxBbGlnbigpKTsKKyAgICAgICAgTGVuZ3RoUHJvcGVydHlXcmFwcGVyOjpibGVu
ZChkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIGNvbnRleHQpOworICAgICAgICBhdXRvJiBibGVuZGlu
Z1N0eWxlID0gY29udGV4dC5pc0Rpc2NyZXRlICYmIGNvbnRleHQucHJvZ3Jlc3MgPyB0byA6IGZy
b207CisgICAgICAgIGRlc3RpbmF0aW9uLnNldFZlcnRpY2FsQWxpZ24oYmxlbmRpbmdTdHlsZS52
ZXJ0aWNhbEFsaWduKCkpOwogICAgIH0KIH07CiAKQEAgLTE5OTgsMjEgKzE5ODIsMjEgQEAgcHVi
bGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJl
bmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCisgICAg
Ym9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVy
U3R5bGUmIHRvKSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgaWYgKGZyb20tPnRleHRJbmRl
bnRMaW5lKCkgIT0gdG8tPnRleHRJbmRlbnRMaW5lKCkpCisgICAgICAgIGlmIChmcm9tLnRleHRJ
bmRlbnRMaW5lKCkgIT0gdG8udGV4dEluZGVudExpbmUoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKGZyb20tPnRleHRJbmRlbnRUeXBlKCkgIT0gdG8tPnRleHRJbmRl
bnRUeXBlKCkpCisgICAgICAgIGlmIChmcm9tLnRleHRJbmRlbnRUeXBlKCkgIT0gdG8udGV4dElu
ZGVudFR5cGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIExl
bmd0aFByb3BlcnR5V3JhcHBlcjo6Y2FuSW50ZXJwb2xhdGUoZnJvbSwgdG8pOwogICAgIH0KIAot
ICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBS
ZW5kZXJTdHlsZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBS
ZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGJs
ZW5kKFJlbmRlclN0eWxlJiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNv
bnN0IFJlbmRlclN0eWxlJiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBhdXRvKiBibGVuZGluZ1N0eWxlID0g
IWNhbkludGVycG9sYXRlKGZyb20sIHRvKSAmJiBwcm9ncmVzcyA/IHRvIDogZnJvbTsKLSAgICAg
ICAgZGVzdGluYXRpb24tPnNldFRleHRJbmRlbnRMaW5lKGJsZW5kaW5nU3R5bGUtPnRleHRJbmRl
bnRMaW5lKCkpOwotICAgICAgICBkZXN0aW5hdGlvbi0+c2V0VGV4dEluZGVudFR5cGUoYmxlbmRp
bmdTdHlsZS0+dGV4dEluZGVudFR5cGUoKSk7Ci0gICAgICAgIExlbmd0aFByb3BlcnR5V3JhcHBl
cjo6YmxlbmQoY2xpZW50LCBkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAgICAg
ICAgYXV0byYgYmxlbmRpbmdTdHlsZSA9IGNvbnRleHQuaXNEaXNjcmV0ZSAmJiBjb250ZXh0LnBy
b2dyZXNzID8gdG8gOiBmcm9tOworICAgICAgICBkZXN0aW5hdGlvbi5zZXRUZXh0SW5kZW50TGlu
ZShibGVuZGluZ1N0eWxlLnRleHRJbmRlbnRMaW5lKCkpOworICAgICAgICBkZXN0aW5hdGlvbi5z
ZXRUZXh0SW5kZW50VHlwZShibGVuZGluZ1N0eWxlLnRleHRJbmRlbnRUeXBlKCkpOworICAgICAg
ICBMZW5ndGhQcm9wZXJ0eVdyYXBwZXI6OmJsZW5kKGRlc3RpbmF0aW9uLCBmcm9tLCB0bywgY29u
dGV4dCk7CiAgICAgfQogfTsKIApAQCAtMjAyNSwxOSArMjAwOSwxOSBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUq
IGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bykgY29uc3QgZmluYWwKKyAgICBib29sIGNhbklu
dGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8p
IGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoIWZyb20tPmhhc1BlcnNwZWN0aXZlKCkg
fHwgIXRvLT5oYXNQZXJzcGVjdGl2ZSgpKQorICAgICAgICBpZiAoIWZyb20uaGFzUGVyc3BlY3Rp
dmUoKSB8fCAhdG8uaGFzUGVyc3BlY3RpdmUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgcmV0dXJuIE5vbk5lZ2F0aXZlRmxvYXRQcm9wZXJ0eVdyYXBwZXI6OmNhbkludGVy
cG9sYXRlKGZyb20sIHRvKTsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25z
dCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24s
IGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdCBmaW5hbAogICAgIHsKLSAg
ICAgICAgaWYgKCFjYW5JbnRlcnBvbGF0ZShmcm9tLCB0bykpCi0gICAgICAgICAgICAoZGVzdGlu
YXRpb24tPiptX3NldHRlcikocHJvZ3Jlc3MgPyB2YWx1ZSh0bykgOiB2YWx1ZShmcm9tKSk7Cisg
ICAgICAgIGlmIChjb250ZXh0LmlzRGlzY3JldGUpCisgICAgICAgICAgICAoZGVzdGluYXRpb24u
Km1fc2V0dGVyKShjb250ZXh0LnByb2dyZXNzID8gdmFsdWUodG8pIDogdmFsdWUoZnJvbSkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBOb25OZWdhdGl2ZUZsb2F0UHJvcGVydHlXcmFwcGVy
OjpibGVuZChjbGllbnQsIGRlc3RpbmF0aW9uLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOworICAgICAg
ICAgICAgTm9uTmVnYXRpdmVGbG9hdFByb3BlcnR5V3JhcHBlcjo6YmxlbmQoZGVzdGluYXRpb24s
IGZyb20sIHRvLCBjb250ZXh0KTsKICAgICB9CiB9OwogCkBAIC0yMDUwLDE3ICsyMDM0LDE3IEBA
IHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25z
dCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBmaW5hbAor
ICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJl
bmRlclN0eWxlJiB0bykgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHJldHVybiB2YWx1ZShm
cm9tKS5pc1NwYWNlcygpID09IHZhbHVlKHRvKS5pc1NwYWNlcygpOwogICAgIH0KIAotICAgIHZv
aWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBSZW5kZXJT
dHlsZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJT
dHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGJsZW5kKFJl
bmRlclN0eWxlJiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJl
bmRlclN0eWxlJiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoIWNhbkludGVycG9sYXRlKGZyb20sIHRv
KSkKLSAgICAgICAgICAgIChkZXN0aW5hdGlvbi0+Km1fc2V0dGVyKShwcm9ncmVzcyA/IHZhbHVl
KHRvKSA6IHZhbHVlKGZyb20pKTsKKyAgICAgICAgaWYgKGNvbnRleHQuaXNEaXNjcmV0ZSkKKyAg
ICAgICAgICAgIChkZXN0aW5hdGlvbi4qbV9zZXR0ZXIpKGNvbnRleHQucHJvZ3Jlc3MgPyB2YWx1
ZSh0bykgOiB2YWx1ZShmcm9tKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFByb3BlcnR5
V3JhcHBlcjo6YmxlbmQoY2xpZW50LCBkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIHByb2dyZXNzKTsK
KyAgICAgICAgICAgIFByb3BlcnR5V3JhcHBlcjo6YmxlbmQoZGVzdGluYXRpb24sIGZyb20sIHRv
LCBjb250ZXh0KTsKICAgICB9CiB9OwogCkBAIC0yMDcyLDQxICsyMDU2LDM5IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBmaW5hbAorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJl
bmRlclN0eWxlJiBhLCBjb25zdCBSZW5kZXJTdHlsZSYgYikgY29uc3QgZmluYWwKICAgICB7Ci0g
ICAgICAgIGlmIChhID09IGIpCisgICAgICAgIGlmICgmYSA9PSAmYikKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgcmV0dXJuIGEtPmFzcGVjdFJhdGlvVHlwZSgpID09IGItPmFzcGVjdFJh
dGlvVHlwZSgpICYmIGEtPmFzcGVjdFJhdGlvV2lkdGgoKSA9PSBiLT5hc3BlY3RSYXRpb1dpZHRo
KCkgJiYgYS0+YXNwZWN0UmF0aW9IZWlnaHQoKSA9PSBiLT5hc3BlY3RSYXRpb0hlaWdodCgpOwor
ICAgICAgICByZXR1cm4gYS5hc3BlY3RSYXRpb1R5cGUoKSA9PSBiLmFzcGVjdFJhdGlvVHlwZSgp
ICYmIGEuYXNwZWN0UmF0aW9XaWR0aCgpID09IGIuYXNwZWN0UmF0aW9XaWR0aCgpICYmIGEuYXNw
ZWN0UmF0aW9IZWlnaHQoKSA9PSBiLmFzcGVjdFJhdGlvSGVpZ2h0KCk7CiAgICAgfQogCi0gICAg
Ym9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVy
U3R5bGUqIHRvKSBjb25zdCBmaW5hbAorICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVu
ZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bykgY29uc3QgZmluYWwKICAgICB7
Ci0gICAgICAgIHJldHVybiAoZnJvbS0+YXNwZWN0UmF0aW9UeXBlKCkgPT0gQXNwZWN0UmF0aW9U
eXBlOjpSYXRpbyAmJiB0by0+YXNwZWN0UmF0aW9UeXBlKCkgPT0gQXNwZWN0UmF0aW9UeXBlOjpS
YXRpbykgfHwgKGZyb20tPmFzcGVjdFJhdGlvVHlwZSgpID09IEFzcGVjdFJhdGlvVHlwZTo6QXV0
b0FuZFJhdGlvICYmIHRvLT5hc3BlY3RSYXRpb1R5cGUoKSA9PSBBc3BlY3RSYXRpb1R5cGU6OkF1
dG9BbmRSYXRpbyk7CisgICAgICAgIHJldHVybiAoZnJvbS5hc3BlY3RSYXRpb1R5cGUoKSA9PSBB
c3BlY3RSYXRpb1R5cGU6OlJhdGlvICYmIHRvLmFzcGVjdFJhdGlvVHlwZSgpID09IEFzcGVjdFJh
dGlvVHlwZTo6UmF0aW8pIHx8IChmcm9tLmFzcGVjdFJhdGlvVHlwZSgpID09IEFzcGVjdFJhdGlv
VHlwZTo6QXV0b0FuZFJhdGlvICYmIHRvLmFzcGVjdFJhdGlvVHlwZSgpID09IEFzcGVjdFJhdGlv
VHlwZTo6QXV0b0FuZFJhdGlvKTsKICAgICB9CiAKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9p
ZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRv
LCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFs
CisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVy
U3R5bGUmIHRvLCBjb25zdCBSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGRvdWJsZSBwcm9ncmVz
cykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25z
LCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkg
PDwgIiBmcm9tICIgPDwgZnJvbS0+bG9naWNhbEFzcGVjdFJhdGlvKCkgPDwgIiB0byAiIDw8IHRv
LT5sb2dpY2FsQXNwZWN0UmF0aW8oKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVt
YmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgcmVzdWx0LT5sb2dp
Y2FsQXNwZWN0UmF0aW8oKSk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBz
dHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwg
IiBmcm9tICIgPDwgZnJvbS5sb2dpY2FsQXNwZWN0UmF0aW8oKSA8PCAiIHRvICIgPDwgdG8ubG9n
aWNhbEFzcGVjdFJhdGlvKCkgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJl
c3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IGRlc3RpbmF0aW9uLmxvZ2lj
YWxBc3BlY3RSYXRpbygpKTsKICAgICB9CiAjZW5kaWYKIAotICAgIHZvaWQgYmxlbmQoY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29u
c3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dy
ZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9u
LCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QgZmluYWwKICAgICB7Ci0g
ICAgICAgIGRlc3RpbmF0aW9uLT5zZXRBc3BlY3RSYXRpb1R5cGUocHJvZ3Jlc3MgPCAwLjUgPyBm
cm9tLT5hc3BlY3RSYXRpb1R5cGUoKSA6IHRvLT5hc3BlY3RSYXRpb1R5cGUoKSk7Ci0gICAgICAg
IGlmIChjYW5JbnRlcnBvbGF0ZShmcm9tLCB0bykpIHsKLSAgICAgICAgICAgIGF1dG8gYXNwZWN0
UmF0aW9Ec3QgPSBXZWJDb3JlOjpibGVuZChsb2coZnJvbS0+bG9naWNhbEFzcGVjdFJhdGlvKCkp
LCBsb2codG8tPmxvZ2ljYWxBc3BlY3RSYXRpbygpKSwgcHJvZ3Jlc3MpOwotICAgICAgICAgICAg
ZGVzdGluYXRpb24tPnNldEFzcGVjdFJhdGlvKGV4cChhc3BlY3RSYXRpb0RzdCksIDEpOworICAg
ICAgICBkZXN0aW5hdGlvbi5zZXRBc3BlY3RSYXRpb1R5cGUoY29udGV4dC5wcm9ncmVzcyA8IDAu
NSA/IGZyb20uYXNwZWN0UmF0aW9UeXBlKCkgOiB0by5hc3BlY3RSYXRpb1R5cGUoKSk7CisgICAg
ICAgIGlmICghY29udGV4dC5pc0Rpc2NyZXRlKSB7CisgICAgICAgICAgICBhdXRvIGFzcGVjdFJh
dGlvRHN0ID0gV2ViQ29yZTo6YmxlbmQobG9nKGZyb20ubG9naWNhbEFzcGVjdFJhdGlvKCkpLCBs
b2codG8ubG9naWNhbEFzcGVjdFJhdGlvKCkpLCBjb250ZXh0KTsKKyAgICAgICAgICAgIGRlc3Rp
bmF0aW9uLnNldEFzcGVjdFJhdGlvKGV4cChhc3BlY3RSYXRpb0RzdCksIDEpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIEZvciBhdXRvL2F1dG8temVybyBhc3Bl
Y3QtcmF0aW8gd2UgdXNlIGRpc2NyZXRlIHZhbHVlcywgd2UgY2FuJ3QgdXNlIGdlbmVyYWwKICAg
ICAgICAgLy8gbG9naWMgc2luY2UgbG9naWNhbEFzcGVjdFJhdGlvIGFzc2VydHMgb24gYXNwZWN0
LXJhdGlvIHR5cGUuCi0gICAgICAgIEFTU0VSVCghcHJvZ3Jlc3MgfHwgcHJvZ3Jlc3MgPT0gMSk7
Ci0gICAgICAgIGF1dG8qIGFwcGxpY2FibGVTdHlsZSA9IHByb2dyZXNzID8gdG8gOiBmcm9tOwot
ICAgICAgICBkZXN0aW5hdGlvbi0+c2V0QXNwZWN0UmF0aW8oYXBwbGljYWJsZVN0eWxlLT5hc3Bl
Y3RSYXRpb1dpZHRoKCksIGFwcGxpY2FibGVTdHlsZS0+YXNwZWN0UmF0aW9IZWlnaHQoKSk7Cisg
ICAgICAgIEFTU0VSVCghY29udGV4dC5wcm9ncmVzcyB8fCBjb250ZXh0LnByb2dyZXNzID09IDEp
OworICAgICAgICBhdXRvJiBhcHBsaWNhYmxlU3R5bGUgPSBjb250ZXh0LnByb2dyZXNzID8gdG8g
OiBmcm9tOworICAgICAgICBkZXN0aW5hdGlvbi5zZXRBc3BlY3RSYXRpbyhhcHBsaWNhYmxlU3R5
bGUuYXNwZWN0UmF0aW9XaWR0aCgpLCBhcHBsaWNhYmxlU3R5bGUuYXNwZWN0UmF0aW9IZWlnaHQo
KSk7CiAgICAgfQogfTsKIApAQCAtMjUwNiwxOCArMjQ4OCwxOSBAQCBzdGF0aWMgYm9vbCBnYXRo
ZXJFbmNsb3NpbmdTaG9ydGhhbmRQcm9wZXJ0aWVzKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIEFu
aW1hdGlvbgogICAgIHJldHVybiBjb250YWluZWQ7CiB9CiAKLXZvaWQgQ1NTUHJvcGVydHlBbmlt
YXRpb246OmJsZW5kUHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBj
bGllbnQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwg
Y29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHBy
b2dyZXNzKQordm9pZCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0aWVzKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29u
c3QgUmVuZGVyU3R5bGUmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiB7CiAgICAgQVNTRVJUKHByb3Bl
cnR5ICE9IENTU1Byb3BlcnR5SW52YWxpZCk7CiAKICAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlKiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0
b24oKS53cmFwcGVyRm9yUHJvcGVydHkocHJvcGVydHkpOwogICAgIGlmICh3cmFwcGVyKSB7CiAg
ICAgICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy93ZWItYW5pbWF0aW9ucy0xLyNkaXNj
cmV0ZQotICAgICAgICAvLyBUaGUgcHJvcGVydHnigJlzIHZhbHVlcyBjYW5ub3QgYmUgbWVhbmlu
Z2Z1bGx5IGNvbWJpbmVkLCB0aHVzIGl0IGlzIG5vdCBhZGRpdGl2ZSBhbmQKKyAgICAgICAgLy8g
VGhlIHByb3BlcnR5J3MgdmFsdWVzIGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgY29tYmluZWQsIHRo
dXMgaXQgaXMgbm90IGFkZGl0aXZlIGFuZAogICAgICAgICAvLyBpbnRlcnBvbGF0aW9uIHN3YXBz
IGZyb20gVmEgdG8gVmIgYXQgNTAlIChwPTAuNSkuCi0gICAgICAgIGlmICghd3JhcHBlci0+Y2Fu
SW50ZXJwb2xhdGUoZnJvbSwgdG8pKQorICAgICAgICBhdXRvIGlzRGlzY3JldGUgPSAhd3JhcHBl
ci0+Y2FuSW50ZXJwb2xhdGUoZnJvbSwgdG8pOworICAgICAgICBpZiAoaXNEaXNjcmV0ZSkKICAg
ICAgICAgICAgIHByb2dyZXNzID0gcHJvZ3Jlc3MgPCAwLjUgPyAwIDogMTsKLSAgICAgICAgd3Jh
cHBlci0+YmxlbmQoY2xpZW50LCBkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAg
ICAgICAgd3JhcHBlci0+YmxlbmQoZGVzdGluYXRpb24sIGZyb20sIHRvLCB7IHByb2dyZXNzLCBp
c0Rpc2NyZXRlLCBjbGllbnQgfSk7CiAjaWYgIUxPR19ESVNBQkxFRAogICAgICAgICB3cmFwcGVy
LT5sb2dCbGVuZChmcm9tLCB0bywgZGVzdGluYXRpb24sIHByb2dyZXNzKTsKICNlbmRpZgpAQCAt
MjU0Nyw3ICsyNTMwLDcgQEAgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBDU1NQcm9wZXJ0eUFuaW1h
dGlvbjo6YW5pbWF0YWJsZVNob3J0aGFuZHNBZmZlY3RpbmdQcm9wZXIKICAgICByZXR1cm4gZm91
bmRQcm9wZXJ0aWVzOwogfQogCi1ib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVz
RXF1YWwoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0
IFJlbmRlclN0eWxlKiBiKQorYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6cHJvcGVydGllc0Vx
dWFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSYgYikKIHsKICAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFw
cGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVy
Rm9yUHJvcGVydHkocHJvcGVydHkpOwogICAgIGlmICh3cmFwcGVyKQpAQCAtMjU1NSw3ICsyNTM4
LDcgQEAgYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIGNvbnN0IFJlbmRlclMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5
bGUqIHRvKQorYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9s
YXRlZChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29u
c3QgUmVuZGVyU3R5bGUmIHRvKQogewogICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Uq
IHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLndy
YXBwZXJGb3JQcm9wZXJ0eShwcm9wZXJ0eSk7CiAgICAgaWYgKHdyYXBwZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oCmluZGV4IGNkZTJjODc1
ODMyMzgwYzUzZjUwYTU1ZjBlZDQ0ZWY2ZDg0NDQxOWIuLmU2ZTg0ZjY1NGQzMDQ5MGUyOWYyZjk1
YmE0MDA2ZDZjNDZjMTZmMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9D
U1NQcm9wZXJ0eUFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQ
cm9wZXJ0eUFuaW1hdGlvbi5oCkBAIC00MCwxNSArNDAsMTQgQEAgY2xhc3MgQ1NTUHJvcGVydHlB
bmltYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGlzUHJvcGVydHlBbmltYXRhYmxl
KENTU1Byb3BlcnR5SUQpOwogICAgIHN0YXRpYyBib29sIGFuaW1hdGlvbk9mUHJvcGVydHlJc0Fj
Y2VsZXJhdGVkKENTU1Byb3BlcnR5SUQpOwotICAgIHN0YXRpYyBib29sIHByb3BlcnRpZXNFcXVh
bChDU1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIpOwotICAgIHN0YXRpYyBib29sIGNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQoQ1NTUHJvcGVy
dHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKTsKKyAgICBz
dGF0aWMgYm9vbCBwcm9wZXJ0aWVzRXF1YWwoQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5
bGUmIGEsIGNvbnN0IFJlbmRlclN0eWxlJiBiKTsKKyAgICBzdGF0aWMgYm9vbCBjYW5Qcm9wZXJ0
eUJlSW50ZXJwb2xhdGVkKENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25z
dCBSZW5kZXJTdHlsZSYgYik7CiAgICAgc3RhdGljIENTU1Byb3BlcnR5SUQgZ2V0UHJvcGVydHlB
dEluZGV4KGludCwgT3B0aW9uYWw8Ym9vbD4mIGlzU2hvcnRoYW5kKTsKICAgICBzdGF0aWMgaW50
IGdldE51bVByb3BlcnRpZXMoKTsKIAogICAgIHN0YXRpYyBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+
IGFuaW1hdGFibGVTaG9ydGhhbmRzQWZmZWN0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7CiAK
LSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IHNvZnR3YXJlIGFuaW1hdGlv
biB0aW1lcnMKLSAgICBzdGF0aWMgdm9pZCBibGVuZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCosIENTU1Byb3BlcnR5SUQsIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0
IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKTsK
KyAgICBzdGF0aWMgdm9pZCBibGVuZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCosIENTU1Byb3BlcnR5SUQsIFJlbmRlclN0eWxlJiBkZXN0aW5hdGlvbiwgY29uc3Qg
UmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bywgZG91YmxlIHByb2dyZXNz
KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRp
b24vS2V5ZnJhbWVFZmZlY3QuY3BwCmluZGV4IDQ5YTM0YTY2Y2Q1OGNiNmRmNTE5NWJmMjgzOTdi
NTc4ZWQ4MzUwMmUuLjQxNzRkYjIyYmRlZGJjNzEzYzY5Yjc4M2JkYzAwYjM2NDcwNmM4OTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcApAQCAtMTQxOCw3
ICsxNDE4LDcgQEAgdm9pZCBLZXlmcmFtZUVmZmVjdDo6c2V0QW5pbWF0ZWRQcm9wZXJ0aWVzSW5T
dHlsZShSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIGRvdWIKICAgICAvLyBwcm9ncmVzcyB3aGlj
aCBhbHJlYWR5IGFjY291bnRzIGZvciB0aGUgdHJhbnNpdGlvbidzIHRpbWluZyBmdW5jdGlvbi4K
ICAgICBpZiAobV9ibGVuZGluZ0tleWZyYW1lc1NvdXJjZSA9PSBCbGVuZGluZ0tleWZyYW1lc1Nv
dXJjZTo6Q1NTVHJhbnNpdGlvbikgewogICAgICAgICBBU1NFUlQocHJvcGVydGllcy5zaXplKCkg
PT0gMSk7Ci0gICAgICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFByb3BlcnRpZXModGhp
cywgKnByb3BlcnRpZXMuYmVnaW4oKSwgJnRhcmdldFN0eWxlLCBtX2JsZW5kaW5nS2V5ZnJhbWVz
WzBdLnN0eWxlKCksIG1fYmxlbmRpbmdLZXlmcmFtZXNbMV0uc3R5bGUoKSwgaXRlcmF0aW9uUHJv
Z3Jlc3MpOworICAgICAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0aWVzKHRo
aXMsICpwcm9wZXJ0aWVzLmJlZ2luKCksIHRhcmdldFN0eWxlLCAqbV9ibGVuZGluZ0tleWZyYW1l
c1swXS5zdHlsZSgpLCAqbV9ibGVuZGluZ0tleWZyYW1lc1sxXS5zdHlsZSgpLCBpdGVyYXRpb25Q
cm9ncmVzcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE1MzIsNyArMTUzMiw3IEBA
IHZvaWQgS2V5ZnJhbWVFZmZlY3Q6OnNldEFuaW1hdGVkUHJvcGVydGllc0luU3R5bGUoUmVuZGVy
U3R5bGUmIHRhcmdldFN0eWxlLCBkb3ViCiAgICAgICAgIGlmIChpbnRlcnZhbEVuZHBvaW50cy5z
aXplKCkgPT0gMSkgewogICAgICAgICAgICAgYXV0byBrZXlmcmFtZUluZGV4ID0gaW50ZXJ2YWxF
bmRwb2ludHNbMF07CiAgICAgICAgICAgICBhdXRvIGtleWZyYW1lU3R5bGUgPSAha2V5ZnJhbWVJ
bmRleCA/ICZ0YXJnZXRTdHlsZSA6IG1fYmxlbmRpbmdLZXlmcmFtZXNba2V5ZnJhbWVJbmRleC52
YWx1ZSgpXS5zdHlsZSgpOwotICAgICAgICAgICAgQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5k
UHJvcGVydGllcyh0aGlzLCBjc3NQcm9wZXJ0eUlkLCAmdGFyZ2V0U3R5bGUsIGtleWZyYW1lU3R5
bGUsIGtleWZyYW1lU3R5bGUsIDApOworICAgICAgICAgICAgQ1NTUHJvcGVydHlBbmltYXRpb246
OmJsZW5kUHJvcGVydGllcyh0aGlzLCBjc3NQcm9wZXJ0eUlkLCB0YXJnZXRTdHlsZSwgKmtleWZy
YW1lU3R5bGUsICprZXlmcmFtZVN0eWxlLCAwKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICB9CiAKQEAgLTE1NjMsNyArMTU2Myw3IEBAIHZvaWQgS2V5ZnJhbWVFZmZlY3Q6OnNldEFu
aW1hdGVkUHJvcGVydGllc0luU3R5bGUoUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBkb3ViCiAg
ICAgICAgIC8vICAgICBkaXN0YW5jZSBhcyB0aGUgaW50ZXJwb2xhdGlvbiBwYXJhbWV0ZXIgcC4K
ICAgICAgICAgYXV0byBzdGFydFN0eWxlID0gIXN0YXJ0S2V5ZnJhbWVJbmRleCA/ICZ0YXJnZXRT
dHlsZSA6IG1fYmxlbmRpbmdLZXlmcmFtZXNbc3RhcnRLZXlmcmFtZUluZGV4LnZhbHVlKCldLnN0
eWxlKCk7CiAgICAgICAgIGF1dG8gZW5kU3R5bGUgPSAhZW5kS2V5ZnJhbWVJbmRleCA/ICZ0YXJn
ZXRTdHlsZSA6IG1fYmxlbmRpbmdLZXlmcmFtZXNbZW5kS2V5ZnJhbWVJbmRleC52YWx1ZSgpXS5z
dHlsZSgpOwotICAgICAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0aWVzKHRo
aXMsIGNzc1Byb3BlcnR5SWQsICZ0YXJnZXRTdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIHRy
YW5zZm9ybWVkRGlzdGFuY2UpOworICAgICAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQ
cm9wZXJ0aWVzKHRoaXMsIGNzc1Byb3BlcnR5SWQsIHRhcmdldFN0eWxlLCAqc3RhcnRTdHlsZSwg
KmVuZFN0eWxlLCB0cmFuc2Zvcm1lZERpc3RhbmNlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwCmluZGV4IDllNmFiNjgwODUxNWMwMTU0YTgwOGFi
OTE1MzdjNzFlNThhZGM5ZDIuLjhlYmVhNGIyYWIxZTI0N2RmNWVhNWNjNDZjODg1Y2MxMGNjN2Iw
ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcApAQCAtMzgsOSAr
MzgsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbmxpbmUgZG91YmxlIGJs
ZW5kRnVuYyhkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMg
aW5saW5lIGRvdWJsZSBibGVuZEZ1bmMoZG91YmxlIGZyb20sIGRvdWJsZSB0bywgY29uc3QgQmxl
bmRpbmdDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJv
Z3Jlc3MpOworICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgY29udGV4dCk7CiB9CiAKIHN0YXRp
YyBib29sIHN1YmltYWdlS25vd25Ub0JlT3BhcXVlKGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSwgY29u
c3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCkBAIC0yMDIsNyArMjAyLDcgQEAgYm9vbCBDU1ND
cm9zc2ZhZGVWYWx1ZTo6dHJhdmVyc2VTdWJyZXNvdXJjZXMoY29uc3QgV1RGOjpGdW5jdGlvbjxi
b29sIChjb25zdCBDYWMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVJlZlB0cjxDU1NDcm9zc2Zh
ZGVWYWx1ZT4gQ1NTQ3Jvc3NmYWRlVmFsdWU6OmJsZW5kKGNvbnN0IENTU0Nyb3NzZmFkZVZhbHVl
JiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0CitSZWZQdHI8Q1NTQ3Jvc3NmYWRlVmFsdWU+
IENTU0Nyb3NzZmFkZVZhbHVlOjpibGVuZChjb25zdCBDU1NDcm9zc2ZhZGVWYWx1ZSYgZnJvbSwg
Y29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIEFTU0VSVChlcXVh
bElucHV0SW1hZ2VzKGZyb20pKTsKIApAQCAtMjE4LDcgKzIxOCw3IEBAIFJlZlB0cjxDU1NDcm9z
c2ZhZGVWYWx1ZT4gQ1NTQ3Jvc3NmYWRlVmFsdWU6OmJsZW5kKGNvbnN0IENTU0Nyb3NzZmFkZVZh
bHVlJiBmcm9tCiAgICAgZG91YmxlIHRvUGVyY2VudGFnZSA9IG1fcGVyY2VudGFnZVZhbHVlLT5k
b3VibGVWYWx1ZSgpOwogICAgIGlmIChtX3BlcmNlbnRhZ2VWYWx1ZS0+aXNQZXJjZW50YWdlKCkp
CiAgICAgICAgIHRvUGVyY2VudGFnZSAvPSAxMDAuMDsKLSAgICBhdXRvIHBlcmNlbnRhZ2VWYWx1
ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoYmxlbmRGdW5jKGZyb21QZXJjZW50YWdlLCB0
b1BlcmNlbnRhZ2UsIHByb2dyZXNzKSwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAgIGF1
dG8gcGVyY2VudGFnZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShibGVuZEZ1bmMo
ZnJvbVBlcmNlbnRhZ2UsIHRvUGVyY2VudGFnZSwgY29udGV4dCksIENTU1VuaXRUeXBlOjpDU1Nf
TlVNQkVSKTsKIAogICAgIHJldHVybiBDU1NDcm9zc2ZhZGVWYWx1ZTo6Y3JlYXRlKFdURk1vdmUo
ZnJvbUltYWdlVmFsdWUpLCBXVEZNb3ZlKHRvSW1hZ2VWYWx1ZSksIFdURk1vdmUocGVyY2VudGFn
ZVZhbHVlKSwgZnJvbS5pc1ByZWZpeGVkKCkgJiYgaXNQcmVmaXhlZCgpKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmgKaW5kZXggOTQ1MjM1Mjg1MTUxYzYwYTU0Y2ZkYTMy
MGY0MjU3NDE5YTE5NmE4MC4uZWJhYjdhY2RlYzY4ZDVhZjk5NDNhMDVlOGE4MDUzZDUyOTllODlm
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmgKQEAgLTMyLDYgKzMyLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQmxlbmRpbmdDb250ZXh0OwogY2xh
c3MgQ1NTUHJpbWl0aXZlVmFsdWU7CiAKIGNsYXNzIENTU0Nyb3NzZmFkZVZhbHVlIGZpbmFsIDog
cHVibGljIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUgewpAQCAtNTQsNyArNTUsNyBAQCBwdWJsaWM6
CiAKICAgICBib29sIHRyYXZlcnNlU3VicmVzb3VyY2VzKGNvbnN0IFdURjo6RnVuY3Rpb248Ym9v
bCAoY29uc3QgQ2FjaGVkUmVzb3VyY2UmKT4mIGhhbmRsZXIpIGNvbnN0OwogCi0gICAgUmVmUHRy
PENTU0Nyb3NzZmFkZVZhbHVlPiBibGVuZChjb25zdCBDU1NDcm9zc2ZhZGVWYWx1ZSYsIGRvdWJs
ZSkgY29uc3Q7CisgICAgUmVmUHRyPENTU0Nyb3NzZmFkZVZhbHVlPiBibGVuZChjb25zdCBDU1ND
cm9zc2ZhZGVWYWx1ZSYsIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYpIGNvbnN0OwogCiAgICAgYm9v
bCBlcXVhbHMoY29uc3QgQ1NTQ3Jvc3NmYWRlVmFsdWUmKSBjb25zdDsKICAgICBib29sIGVxdWFs
SW5wdXRJbWFnZXMoY29uc3QgQ1NTQ3Jvc3NmYWRlVmFsdWUmKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCA1NWFiYjgyZWY5OWQzNzliN2RhMzNlOTgy
MjM1ODk2N2MyNzM5OGIzLi4xYjZkZGY1ZTIwNjY1ZWMxNTQwZTAxZThkMDA4OTUxMmYzNmE5NGQ5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCkBAIC0yNiw2ICsyNiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTR3JhZGllbnRWYWx1ZS5oIgog
CisjaW5jbHVkZSAiQW5pbWF0aW9uVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaCIKICNpbmNs
dWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCkBAIC0yMDUsNyArMjA2LDcgQEAgcHVibGljOgogCiAg
ICAgICAgICAgICAgICAgZmxvYXQgaW50ZXJTdG9wUHJvcG9ydGlvbiA9IC1wcmV2T2Zmc2V0IC8g
KG5leHRPZmZzZXQgLSBwcmV2T2Zmc2V0KTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2hl
biB3ZSBpbnRlcnBvbGF0ZSBncmFkaWVudHMgdXNpbmcgcHJlbXVsdGlwbGllZCBjb2xvcnMsIHRo
aXMgc2hvdWxkIGRvIHByZW11bHRpcGxpY2F0aW9uLgotICAgICAgICAgICAgICAgIENvbG9yIGJs
ZW5kZWRDb2xvciA9IGJsZW5kKHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4IC0gMV0uY29s
b3IsIHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5jb2xvciwgaW50ZXJTdG9wUHJvcG9y
dGlvbik7CisgICAgICAgICAgICAgICAgQ29sb3IgYmxlbmRlZENvbG9yID0gYmxlbmQoc3RvcHNb
Zmlyc3RaZXJvT3JHcmVhdGVySW5kZXggLSAxXS5jb2xvciwgc3RvcHNbZmlyc3RaZXJvT3JHcmVh
dGVySW5kZXhdLmNvbG9yLCB7IGludGVyU3RvcFByb3BvcnRpb24gfSk7CiAKICAgICAgICAgICAg
ICAgICAvLyBDbGFtcCB0aGUgcG9zaXRpb25zIHRvIDAgYW5kIHNldCB0aGUgY29sb3IuCiAgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaXJzdFplcm9PckdyZWF0ZXJJbmRl
eDsgKytpKSB7CkBAIC0yNTYsNyArMjU3LDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICAgICAg
ZmxvYXQgaW50ZXJTdG9wUHJvcG9ydGlvbiA9IC1wcmV2aW91c09mZnNldCAvIChuZXh0T2Zmc2V0
IC0gcHJldmlvdXNPZmZzZXQpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGlu
dGVycG9sYXRlIGdyYWRpZW50cyB1c2luZyBwcmVtdWx0aXBsaWVkIGNvbG9ycywgdGhpcyBzaG91
bGQgZG8gcHJlbXVsdGlwbGljYXRpb24uCi0gICAgICAgICAgICAgICAgQ29sb3IgYmxlbmRlZENv
bG9yID0gYmxlbmQoc3RvcHNbaW5kZXggLSAxXS5jb2xvciwgc3RvcHNbaW5kZXhdLmNvbG9yLCBp
bnRlclN0b3BQcm9wb3J0aW9uKTsKKyAgICAgICAgICAgICAgICBDb2xvciBibGVuZGVkQ29sb3Ig
PSBibGVuZChzdG9wc1tpbmRleCAtIDFdLmNvbG9yLCBzdG9wc1tpbmRleF0uY29sb3IsIHsgaW50
ZXJTdG9wUHJvcG9ydGlvbiB9KTsKIAogICAgICAgICAgICAgICAgIC8vIENsYW1wIHRoZSBwb3Np
dGlvbnMgdG8gMCBhbmQgc2V0IHRoZSBjb2xvci4KICAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGluZGV4OyArK2kpIHsKQEAgLTI4Niw3ICsyODcsNyBAQCBwdWJsaWM6CiAK
ICAgICAgICAgICAgICAgICBmbG9hdCBpbnRlclN0b3BQcm9wb3J0aW9uID0gKDEgLSBwcmV2aW91
c09mZnNldCkgLyAobmV4dE9mZnNldCAtIHByZXZpb3VzT2Zmc2V0KTsKICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogd2hlbiB3ZSBpbnRlcnBvbGF0ZSBncmFkaWVudHMgdXNpbmcgcHJlbXVsdGlw
bGllZCBjb2xvcnMsIHRoaXMgc2hvdWxkIGRvIHByZW11bHRpcGxpY2F0aW9uLgotICAgICAgICAg
ICAgICAgIENvbG9yIGJsZW5kZWRDb2xvciA9IGJsZW5kKHN0b3BzW2luZGV4XS5jb2xvciwgc3Rv
cHNbaW5kZXggKyAxXS5jb2xvciwgaW50ZXJTdG9wUHJvcG9ydGlvbik7CisgICAgICAgICAgICAg
ICAgQ29sb3IgYmxlbmRlZENvbG9yID0gYmxlbmQoc3RvcHNbaW5kZXhdLmNvbG9yLCBzdG9wc1tp
bmRleCArIDFdLmNvbG9yLCB7IGludGVyU3RvcFByb3BvcnRpb24gfSk7CiAKICAgICAgICAgICAg
ICAgICAvLyBDbGFtcCB0aGUgcG9zaXRpb25zIHRvIDEgYW5kIHNldCB0aGUgY29sb3IuCiAgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGluZGV4ICsgMTsgaSA8PSBsYXN0U3RvcEluZGV4
OyArK2kpIHsKQEAgLTQ4NSw3ICs0ODYsNyBAQCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENT
U0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZQogICAg
ICAgICAgICAgZmxvYXQgcmVsYXRpdmVPZmZzZXQgPSAoKm5ld1N0b3BzW3ldLm9mZnNldCAtIG9m
ZnNldDEpIC8gKG9mZnNldDIgLSBvZmZzZXQxKTsKICAgICAgICAgICAgIGZsb2F0IG11bHRpcGxp
ZXIgPSBzdGQ6OnBvdyhyZWxhdGl2ZU9mZnNldCwgc3RkOjpsb2coLjVmKSAvIHN0ZDo6bG9nKG1p
ZHBvaW50KSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2h5IG5vdCBwcmVtdWx0aXBseSBoZXJl
PwotICAgICAgICAgICAgbmV3U3RvcHNbeV0uY29sb3IgPSBibGVuZFdpdGhvdXRQcmVtdWx0aXBs
eShjb2xvcjEsIGNvbG9yMiwgbXVsdGlwbGllcik7CisgICAgICAgICAgICBuZXdTdG9wc1t5XS5j
b2xvciA9IGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbG9yMSwgY29sb3IyLCB7IG11bHRpcGxp
ZXIgfSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdG9wcy5yZW1vdmUoeCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vTGVuZ3RoLmNwcAppbmRleCBmYzdlMzAyZjFhOWY2YmNiODNkOWI3N2JlYzk2NmI4ZDg0
OGI1Njc2Li44NjQ2YzgzMTg2MDc0ZjMwYzI0ZjNhNmFlMjFiYjZhM2ZjNjQ5ZjU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJMZW5ndGguaCIKIAorI2luY2x1ZGUgIkFuaW1hdGlvblV0aWxpdGll
cy5oIgogI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlD
VHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0yOTQsMzcgKzI5NSwzNyBAQCBM
ZW5ndGggY29udmVydFRvMTAwUGVyY2VudE1pbnVzTGVuZ3RoKGNvbnN0IExlbmd0aCYgbGVuZ3Ro
KQogICAgIHJldHVybiBMZW5ndGgoQ2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKFdURk1vdmUob3Ap
LCBWYWx1ZVJhbmdlQWxsKSk7CiB9CiAKLXN0YXRpYyBMZW5ndGggYmxlbmRNaXhlZFR5cGVzKGNv
bnN0IExlbmd0aCYgZnJvbSwgY29uc3QgTGVuZ3RoJiB0bywgZG91YmxlIHByb2dyZXNzKQorc3Rh
dGljIExlbmd0aCBibGVuZE1peGVkVHlwZXMoY29uc3QgTGVuZ3RoJiBmcm9tLCBjb25zdCBMZW5n
dGgmIHRvLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgaWYgKCFwcm9n
cmVzcykKKyAgICBpZiAoIWNvbnRleHQucHJvZ3Jlc3MpCiAgICAgICAgIHJldHVybiBmcm9tOwog
Ci0gICAgaWYgKHByb2dyZXNzID09IDEuMCkKKyAgICBpZiAoY29udGV4dC5wcm9ncmVzcyA9PSAx
LjApCiAgICAgICAgIHJldHVybiB0bzsKIAotICAgIGF1dG8gYmxlbmQgPSBtYWtlVW5pcXVlPENh
bGNFeHByZXNzaW9uQmxlbmRMZW5ndGg+KGZyb20sIHRvLCBwcm9ncmVzcyk7CisgICAgYXV0byBi
bGVuZCA9IG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aD4oZnJvbSwgdG8sIGNv
bnRleHQucHJvZ3Jlc3MpOwogICAgIHJldHVybiBMZW5ndGgoQ2FsY3VsYXRpb25WYWx1ZTo6Y3Jl
YXRlKFdURk1vdmUoYmxlbmQpLCBWYWx1ZVJhbmdlQWxsKSk7CiB9CiAKLUxlbmd0aCBibGVuZChj
b25zdCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK0xl
bmd0aCBibGVuZChjb25zdCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGNvbnN0IEJs
ZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBpZiAoIXByb2dyZXNzKQorICAgIGlmICgh
Y29udGV4dC5wcm9ncmVzcykKICAgICAgICAgcmV0dXJuIGZyb207CiAKLSAgICBpZiAocHJvZ3Jl
c3MgPT0gMSkKKyAgICBpZiAoY29udGV4dC5wcm9ncmVzcyA9PSAxKQogICAgICAgICByZXR1cm4g
dG87CiAKICAgICBpZiAoZnJvbS5pc0F1dG8oKSB8fCB0by5pc0F1dG8oKSkKLSAgICAgICAgcmV0
dXJuIHByb2dyZXNzIDwgMC41ID8gZnJvbSA6IHRvOworICAgICAgICByZXR1cm4gY29udGV4dC5w
cm9ncmVzcyA8IDAuNSA/IGZyb20gOiB0bzsKIAogICAgIGlmIChmcm9tLmlzVW5kZWZpbmVkKCkg
fHwgdG8uaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIHRvOwogCiAgICAgaWYgKGZyb20u
aXNDYWxjdWxhdGVkKCkgfHwgdG8uaXNDYWxjdWxhdGVkKCkpCi0gICAgICAgIHJldHVybiBibGVu
ZE1peGVkVHlwZXMoZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAgICAgICAgcmV0dXJuIGJsZW5kTWl4
ZWRUeXBlcyhmcm9tLCB0bywgY29udGV4dCk7CiAKICAgICBpZiAoIWZyb20uaXNaZXJvKCkgJiYg
IXRvLmlzWmVybygpICYmIGZyb20udHlwZSgpICE9IHRvLnR5cGUoKSkKLSAgICAgICAgcmV0dXJu
IGJsZW5kTWl4ZWRUeXBlcyhmcm9tLCB0bywgcHJvZ3Jlc3MpOworICAgICAgICByZXR1cm4gYmxl
bmRNaXhlZFR5cGVzKGZyb20sIHRvLCBjb250ZXh0KTsKIAogICAgIExlbmd0aFR5cGUgcmVzdWx0
VHlwZSA9IHRvLnR5cGUoKTsKICAgICBpZiAodG8uaXNaZXJvKCkpCkBAIC0zMzMsMTcgKzMzNCwx
NyBAQCBMZW5ndGggYmxlbmQoY29uc3QgTGVuZ3RoJiBmcm9tLCBjb25zdCBMZW5ndGgmIHRvLCBk
b3VibGUgcHJvZ3Jlc3MpCiAgICAgaWYgKHJlc3VsdFR5cGUgPT0gTGVuZ3RoVHlwZTo6UGVyY2Vu
dCkgewogICAgICAgICBmbG9hdCBmcm9tUGVyY2VudCA9IGZyb20uaXNaZXJvKCkgPyAwIDogZnJv
bS5wZXJjZW50KCk7CiAgICAgICAgIGZsb2F0IHRvUGVyY2VudCA9IHRvLmlzWmVybygpID8gMCA6
IHRvLnBlcmNlbnQoKTsKLSAgICAgICAgcmV0dXJuIExlbmd0aChXZWJDb3JlOjpibGVuZChmcm9t
UGVyY2VudCwgdG9QZXJjZW50LCBwcm9ncmVzcyksIExlbmd0aFR5cGU6OlBlcmNlbnQpOworICAg
ICAgICByZXR1cm4gTGVuZ3RoKFdlYkNvcmU6OmJsZW5kKGZyb21QZXJjZW50LCB0b1BlcmNlbnQs
IGNvbnRleHQpLCBMZW5ndGhUeXBlOjpQZXJjZW50KTsKICAgICB9CiAKICAgICBmbG9hdCBmcm9t
VmFsdWUgPSBmcm9tLmlzWmVybygpID8gMCA6IGZyb20udmFsdWUoKTsKICAgICBmbG9hdCB0b1Zh
bHVlID0gdG8uaXNaZXJvKCkgPyAwIDogdG8udmFsdWUoKTsKLSAgICByZXR1cm4gTGVuZ3RoKFdl
YkNvcmU6OmJsZW5kKGZyb21WYWx1ZSwgdG9WYWx1ZSwgcHJvZ3Jlc3MpLCByZXN1bHRUeXBlKTsK
KyAgICByZXR1cm4gTGVuZ3RoKFdlYkNvcmU6OmJsZW5kKGZyb21WYWx1ZSwgdG9WYWx1ZSwgY29u
dGV4dCksIHJlc3VsdFR5cGUpOwogfQogCi1MZW5ndGggYmxlbmQoY29uc3QgTGVuZ3RoJiBmcm9t
LCBjb25zdCBMZW5ndGgmIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIFZhbHVlUmFuZ2UgdmFsdWVSYW5n
ZSkKK0xlbmd0aCBibGVuZChjb25zdCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGNv
bnN0IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQogewot
ICAgIGF1dG8gYmxlbmRlZCA9IGJsZW5kKGZyb20sIHRvLCBwcm9ncmVzcyk7CisgICAgYXV0byBi
bGVuZGVkID0gYmxlbmQoZnJvbSwgdG8sIGNvbnRleHQpOwogICAgIGlmICh2YWx1ZVJhbmdlID09
IFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSAmJiBibGVuZGVkLmlzTmVnYXRpdmUoKSkKICAgICAgICAg
cmV0dXJuIHsgMCwgZnJvbS5pc1plcm8gKCkgPyB0by50eXBlKCkgOiBmcm9tLnR5cGUoKSB9Owog
ICAgIHJldHVybiBibGVuZGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TGVuZ3RoLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguaAppbmRleCBhZjM5NjYw
M2E0ZmIxMzkwZDhlYzRmMmVhZDE5ODU0MWY5Yjg3NTdmLi40NTE4Nzk0OTBhYmNmYTU5YjE5ZWQ3
ZDc1NzcyNGYzOGUyZTVjZTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9M
ZW5ndGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguaApAQCAtNDksNiAr
NDksNyBAQCBlbnVtIFZhbHVlUmFuZ2UgewogICAgIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZQogfTsK
IAorc3RydWN0IEJsZW5kaW5nQ29udGV4dDsKIGNsYXNzIENhbGN1bGF0aW9uVmFsdWU7CiAKIHN0
cnVjdCBMZW5ndGggewpAQCAtMTM3LDggKzEzOCw4IEBAIHByaXZhdGU6CiB9OwogCiAvLyBCbGVu
ZCB0d28gbGVuZ3RocyB0byBwcm9kdWNlIGEgbmV3IGxlbmd0aCB0aGF0IGlzIGluIGJldHdlZW4g
dGhlbS4gVXNlZCBmb3IgYW5pbWF0aW9uLgotTGVuZ3RoIGJsZW5kKGNvbnN0IExlbmd0aCYgZnJv
bSwgY29uc3QgTGVuZ3RoJiB0bywgZG91YmxlIHByb2dyZXNzKTsKLUxlbmd0aCBibGVuZChjb25z
dCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGRvdWJsZSBwcm9ncmVzcywgVmFsdWVS
YW5nZSk7CitMZW5ndGggYmxlbmQoY29uc3QgTGVuZ3RoJiBmcm9tLCBjb25zdCBMZW5ndGgmIHRv
LCBjb25zdCBCbGVuZGluZ0NvbnRleHQmKTsKK0xlbmd0aCBibGVuZChjb25zdCBMZW5ndGgmIGZy
b20sIGNvbnN0IExlbmd0aCYgdG8sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYsIFZhbHVlUmFuZ2Up
OwogCiBVbmlxdWVBcnJheTxMZW5ndGg+IG5ld0Nvb3Jkc0FycmF5KGNvbnN0IFN0cmluZyYsIGlu
dCYgbGVuZ3RoKTsKIFVuaXF1ZUFycmF5PExlbmd0aD4gbmV3TGVuZ3RoQXJyYXkoY29uc3QgU3Ry
aW5nJiwgaW50JiBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TGVuZ3RoUG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aFBvaW50LmgKaW5k
ZXggZjY5NDgzM2Q4YzBhMTk2NDRjYTMxMTdhMWYwNTAwMTVkNzgyMmY5ZS4uZTcwMmY4YmM1ZGZj
MjkwMDhhY2ZiODA3ZTIyNzYxNGRmYmE0MWYzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTGVuZ3RoUG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5n
dGhQb2ludC5oCkBAIC0yOSw2ICsyOSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3Ry
dWN0IEJsZW5kaW5nQ29udGV4dDsKKwogc3RydWN0IExlbmd0aFBvaW50IHsKIHB1YmxpYzoKICAg
ICBMZW5ndGhQb2ludCgpCkBAIC02Myw5ICs2NSw5IEBAIHByaXZhdGU6CiAgICAgTGVuZ3RoIG1f
eTsKIH07CiAKLWlubGluZSBMZW5ndGhQb2ludCBibGVuZChjb25zdCBMZW5ndGhQb2ludCYgZnJv
bSwgY29uc3QgTGVuZ3RoUG9pbnQmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitpbmxpbmUgTGVuZ3Ro
UG9pbnQgYmxlbmQoY29uc3QgTGVuZ3RoUG9pbnQmIGZyb20sIGNvbnN0IExlbmd0aFBvaW50JiB0
bywgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBMZW5ndGhQ
b2ludChibGVuZChmcm9tLngoKSwgdG8ueCgpLCBwcm9ncmVzcyksIGJsZW5kKGZyb20ueSgpLCB0
by55KCksIHByb2dyZXNzKSk7CisgICAgcmV0dXJuIExlbmd0aFBvaW50KGJsZW5kKGZyb20ueCgp
LCB0by54KCksIGNvbnRleHQpLCBibGVuZChmcm9tLnkoKSwgdG8ueSgpLCBjb250ZXh0KSk7CiB9
CiAKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBM
ZW5ndGhQb2ludCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3Ro
U2l6ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoU2l6ZS5oCmluZGV4IGJkNTc0
MWExYWQ5ODQ3NTY3MGFkZjljOTI2ZTQ1NTE1YWE0YTM0NmIuLjNhYzIxYTQ3NDRiZjFmNzFkODdk
YTA3ODdmNWEyNDIzYmZjNTVmZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0xlbmd0aFNpemUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGhTaXplLmgK
QEAgLTIzLDYgKzIzLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQmxlbmRp
bmdDb250ZXh0OworCiBzdHJ1Y3QgTGVuZ3RoU2l6ZSB7CiAgICAgTGVuZ3RoIHdpZHRoOwogICAg
IExlbmd0aCBoZWlnaHQ7CkBAIC0zNiw5ICszOCw5IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IExlbmd0aFNpemUmIGEsIGNvbnN0IExlbmd0aFNpemUmIGIpCiAgICAgcmV0
dXJuIGEud2lkdGggPT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PSBiLmhlaWdodDsKIH0KIAotaW5s
aW5lIExlbmd0aFNpemUgYmxlbmQoY29uc3QgTGVuZ3RoU2l6ZSYgZnJvbSwgY29uc3QgTGVuZ3Ro
U2l6ZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK2lubGluZSBMZW5ndGhTaXplIGJsZW5kKGNvbnN0
IExlbmd0aFNpemUmIGZyb20sIGNvbnN0IExlbmd0aFNpemUmIHRvLCBjb25zdCBCbGVuZGluZ0Nv
bnRleHQmIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIHsgYmxlbmQoZnJvbS53aWR0aCwgdG8ud2lk
dGgsIHByb2dyZXNzKSwgYmxlbmQoZnJvbS5oZWlnaHQsIHRvLmhlaWdodCwgcHJvZ3Jlc3MpIH07
CisgICAgcmV0dXJuIHsgYmxlbmQoZnJvbS53aWR0aCwgdG8ud2lkdGgsIGNvbnRleHQpLCBibGVu
ZChmcm9tLmhlaWdodCwgdG8uaGVpZ2h0LCBjb250ZXh0KSB9OwogfQogCiBXVEY6OlRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgTGVuZ3RoU2l6ZSYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvblV0aWxp
dGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvblV0aWxp
dGllcy5oCmluZGV4IDM0YmJiZTllOGRlYzBiM2I2ZTg1NTFhOTgyMTE1ODFhNGVkZjM1MjMuLmVj
NDA5NzVkYmZmZGM1ODEwNmFlMWRhZWQ2YmFlOTJlMTdmNjY1OTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmgKQEAg
LTMwLDQxICszMCw1MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlubGluZSBpbnQgYmxl
bmQoaW50IGZyb20sIGludCB0bywgZG91YmxlIHByb2dyZXNzKQorc3RydWN0IEJsZW5kaW5nQ29u
dGV4dCB7CisgICAgZG91YmxlIHByb2dyZXNzOworICAgIGJvb2wgaXNEaXNjcmV0ZSB7IGZhbHNl
IH07CisKKyAgICBCbGVuZGluZ0NvbnRleHQoZG91YmxlIHByb2dyZXNzLCBib29sIGlzRGlzY3Jl
dGUgPSBmYWxzZSkKKyAgICAgICAgOiBwcm9ncmVzcyhwcm9ncmVzcykKKyAgICAgICAgLCBpc0Rp
c2NyZXRlKGlzRGlzY3JldGUpCisgICAgeworICAgIH0KK307CisKK2lubGluZSBpbnQgYmxlbmQo
aW50IGZyb20sIGludCB0bywgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogeyAgCi0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obHJvdW5kKHN0YXRpY19jYXN0PGRvdWJsZT4oZnJv
bSkgKyBzdGF0aWNfY2FzdDxkb3VibGU+KHRvIC0gZnJvbSkgKiBwcm9ncmVzcykpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZChzdGF0aWNfY2FzdDxkb3VibGU+KGZyb20pICsg
c3RhdGljX2Nhc3Q8ZG91YmxlPih0byAtIGZyb20pICogY29udGV4dC5wcm9ncmVzcykpOwogfQog
Ci1pbmxpbmUgdW5zaWduZWQgYmxlbmQodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIGRvdWJs
ZSBwcm9ncmVzcykKK2lubGluZSB1bnNpZ25lZCBibGVuZCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCB0bywgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obHJvdW5kKHRvID4gZnJvbSA/IHN0YXRpY19jYXN0PGRvdWJsZT4o
ZnJvbSkgKyBzdGF0aWNfY2FzdDxkb3VibGU+KHRvIC0gZnJvbSkgKiBwcm9ncmVzcyA6IHN0YXRp
Y19jYXN0PGRvdWJsZT4oZnJvbSkgLSBzdGF0aWNfY2FzdDxkb3VibGU+KGZyb20gLSB0bykgKiBw
cm9ncmVzcykpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obHJvdW5kKHRvID4g
ZnJvbSA/IHN0YXRpY19jYXN0PGRvdWJsZT4oZnJvbSkgKyBzdGF0aWNfY2FzdDxkb3VibGU+KHRv
IC0gZnJvbSkgKiBjb250ZXh0LnByb2dyZXNzIDogc3RhdGljX2Nhc3Q8ZG91YmxlPihmcm9tKSAt
IHN0YXRpY19jYXN0PGRvdWJsZT4oZnJvbSAtIHRvKSAqIGNvbnRleHQucHJvZ3Jlc3MpKTsKIH0K
IAotaW5saW5lIGRvdWJsZSBibGVuZChkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUgcHJv
Z3Jlc3MpCitpbmxpbmUgZG91YmxlIGJsZW5kKGRvdWJsZSBmcm9tLCBkb3VibGUgdG8sIGNvbnN0
IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsgIAotICAgIHJldHVybiBmcm9tICsgKHRvIC0g
ZnJvbSkgKiBwcm9ncmVzczsKKyAgICByZXR1cm4gZnJvbSArICh0byAtIGZyb20pICogY29udGV4
dC5wcm9ncmVzczsKIH0KIAotaW5saW5lIGZsb2F0IGJsZW5kKGZsb2F0IGZyb20sIGZsb2F0IHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCitpbmxpbmUgZmxvYXQgYmxlbmQoZmxvYXQgZnJvbSwgZmxvYXQg
dG8sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsgIAotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4oZnJvbSArICh0byAtIGZyb20pICogcHJvZ3Jlc3MpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4oZnJvbSArICh0byAtIGZyb20pICogY29udGV4dC5wcm9ncmVz
cyk7CiB9CiAKLWlubGluZSBMYXlvdXRVbml0IGJsZW5kKExheW91dFVuaXQgZnJvbSwgTGF5b3V0
VW5pdCB0bywgZG91YmxlIHByb2dyZXNzKQoraW5saW5lIExheW91dFVuaXQgYmxlbmQoTGF5b3V0
VW5pdCBmcm9tLCBMYXlvdXRVbml0IHRvLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQp
CiB7Ci0gICAgcmV0dXJuIExheW91dFVuaXQoYmxlbmQoZnJvbS50b0Zsb2F0KCksIHRvLnRvRmxv
YXQoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gTGF5b3V0VW5pdChibGVuZChmcm9tLnRvRmxv
YXQoKSwgdG8udG9GbG9hdCgpLCBjb250ZXh0KSk7CiB9CiAKLWlubGluZSBJbnRQb2ludCBibGVu
ZChjb25zdCBJbnRQb2ludCYgZnJvbSwgY29uc3QgSW50UG9pbnQmIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCitpbmxpbmUgSW50UG9pbnQgYmxlbmQoY29uc3QgSW50UG9pbnQmIGZyb20sIGNvbnN0IElu
dFBvaW50JiB0bywgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVy
biBJbnRQb2ludChibGVuZChmcm9tLngoKSwgdG8ueCgpLCBwcm9ncmVzcyksCi0gICAgICAgIGJs
ZW5kKGZyb20ueSgpLCB0by55KCksIHByb2dyZXNzKSk7CisgICAgcmV0dXJuIEludFBvaW50KGJs
ZW5kKGZyb20ueCgpLCB0by54KCksIGNvbnRleHQpLAorICAgICAgICBibGVuZChmcm9tLnkoKSwg
dG8ueSgpLCBjb250ZXh0KSk7CiB9CiAKLWlubGluZSBMYXlvdXRQb2ludCBibGVuZChjb25zdCBM
YXlvdXRQb2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
CitpbmxpbmUgTGF5b3V0UG9pbnQgYmxlbmQoY29uc3QgTGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0
IExheW91dFBvaW50JiB0bywgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewotICAg
IHJldHVybiBMYXlvdXRQb2ludChibGVuZChmcm9tLngoKSwgdG8ueCgpLCBwcm9ncmVzcyksCi0g
ICAgICAgIGJsZW5kKGZyb20ueSgpLCB0by55KCksIHByb2dyZXNzKSk7CisgICAgcmV0dXJuIExh
eW91dFBvaW50KGJsZW5kKGZyb20ueCgpLCB0by54KCksIGNvbnRleHQpLAorICAgICAgICBibGVu
ZChmcm9tLnkoKSwgdG8ueSgpLCBjb250ZXh0KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxl
bmRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGlu
Zy5jcHAKaW5kZXggNzE3OTA4MTJjYjI1NGMwY2M1YzY2ZTVkNjZhOTk2MjZmMjhjMjIwMS4uYjll
N2RhYmQyOWQ5NTRiYTBlMTU3YWY5NTU5NzE1ZWY3MmY5ZGQ2ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAKQEAgLTkwLDQxICs5
MCw0MSBAQCBDb2xvciBibGVuZFdpdGhXaGl0ZShjb25zdCBDb2xvciYgY29sb3IpCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENv
bG9yJiB0bywgZG91YmxlIHByb2dyZXNzKQorQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20s
IGNvbnN0IENvbG9yJiB0bywgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAg
IC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4K
ICAgICAvLyBXZSBuZWVkIHRvIHByZXNlcnZlIHRoZSBzdGF0ZSBvZiB0aGUgdmFsaWQgZmxhZyBh
dCB0aGUgZW5kIG9mIHRoZSBhbmltYXRpb24KLSAgICBpZiAocHJvZ3Jlc3MgPT0gMSAmJiAhdG8u
aXNWYWxpZCgpKQorICAgIGlmIChjb250ZXh0LnByb2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQo
KSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGF1dG8gcHJlbXVsdGlwbGllZEZyb20gPSBw
cmVtdWx0aXBsaWVkKGZyb20udG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkpOwogICAg
IGF1dG8gcHJlbXVsdGlwbGllZFRvID0gcHJlbXVsdGlwbGllZCh0by50b0NvbG9yVHlwZUxvc3N5
PFNSR0JBPGZsb2F0Pj4oKSk7CiAKICAgICBhdXRvIHByZW11bHRpcGxpZWRCbGVuZGVkID0gbWFr
ZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PigKLSAgICAgICAgV2ViQ29yZTo6
YmxlbmQocHJlbXVsdGlwbGllZEZyb20ucmVkLCBwcmVtdWx0aXBsaWVkVG8ucmVkLCBwcm9ncmVz
cyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmdyZWVuLCBwcmVt
dWx0aXBsaWVkVG8uZ3JlZW4sIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJl
bXVsdGlwbGllZEZyb20uYmx1ZSwgcHJlbXVsdGlwbGllZFRvLmJsdWUsIHByb2dyZXNzKSwKLSAg
ICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20uYWxwaGEsIHByZW11bHRpcGxp
ZWRUby5hbHBoYSwgcHJvZ3Jlc3MpCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxp
ZWRGcm9tLnJlZCwgcHJlbXVsdGlwbGllZFRvLnJlZCwgY29udGV4dC5wcm9ncmVzcyksCisgICAg
ICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmdyZWVuLCBwcmVtdWx0aXBsaWVk
VG8uZ3JlZW4sIGNvbnRleHQucHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVt
dWx0aXBsaWVkRnJvbS5ibHVlLCBwcmVtdWx0aXBsaWVkVG8uYmx1ZSwgY29udGV4dC5wcm9ncmVz
cyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmFscGhhLCBwcmVt
dWx0aXBsaWVkVG8uYWxwaGEsIGNvbnRleHQucHJvZ3Jlc3MpCiAgICAgKTsKIAogICAgIHJldHVy
biBjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KHVucHJlbXVsdGlwbGllZChwcmVtdWx0aXBs
aWVkQmxlbmRlZCkpOwogfQogCi1Db2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBD
b2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitDb2xvciBibGVu
ZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBj
b25zdCBCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgLy8gRklYTUU6IEV4dGVuZGVk
Q29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgogICAgIC8vIFdlIG5lZWQgdG8g
cHJlc2VydmUgdGhlIHN0YXRlIG9mIHRoZSB2YWxpZCBmbGFnIGF0IHRoZSBlbmQgb2YgdGhlIGFu
aW1hdGlvbgotICAgIGlmIChwcm9ncmVzcyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCisgICAgaWYg
KGNvbnRleHQucHJvZ3Jlc3MgPT0gMSAmJiAhdG8uaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4g
eyB9OwogCiAgICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9Db2xvclR5cGVMb3NzeTxTUkdCQTxm
bG9hdD4+KCk7CiAgICAgYXV0byB0b1NSR0IgPSB0by50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZs
b2F0Pj4oKTsKIAogICAgIGF1dG8gYmxlbmRlZCA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5n
PFNSR0JBPGZsb2F0Pj4oCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLnJlZCwgdG9T
UkdCLnJlZCwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ncmVl
biwgdG9TUkdCLmdyZWVuLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21T
UkdCLmJsdWUsIHRvU1JHQi5ibHVlLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5k
KGZyb21TUkdCLmFscGhhLCB0b1NSR0IuYWxwaGEsIHByb2dyZXNzKQorICAgICAgICBXZWJDb3Jl
OjpibGVuZChmcm9tU1JHQi5yZWQsIHRvU1JHQi5yZWQsIGNvbnRleHQucHJvZ3Jlc3MpLAorICAg
ICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ncmVlbiwgdG9TUkdCLmdyZWVuLCBjb250ZXh0
LnByb2dyZXNzKSwKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYmx1ZSwgdG9TUkdC
LmJsdWUsIGNvbnRleHQucHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JH
Qi5hbHBoYSwgdG9TUkdCLmFscGhhLCBjb250ZXh0LnByb2dyZXNzKQogICAgICk7CiAKICAgICBy
ZXR1cm4gY29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+PihibGVuZGVkKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuaAppbmRleCA0YmM4ZTBm
MzU5MWU0ZWUwMDYxYTk4MmMwMGIxNGMwODMwMTQwYjNiLi5jYmNlOGFkMmZiNDczMjBiN2ViZTcx
NmNhMDIyOTIyMThmNmE2OGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvckJsZW5kaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JCbGVuZGluZy5oCkBAIC0yNyw2ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorc3RydWN0IEJsZW5kaW5nQ29udGV4dDsKIGNsYXNzIENvbG9yOwogCiAvLyBOT1RF
OiBUaGVzZSBmdW5jdGlvbnMgZG8gYSBsb3NzeSBjb252ZXJzaW9uIHRvIDgtYml0IHNSR0JBIGJl
Zm9yZSBibGVuZGluZy4KQEAgLTM3LDcgKzM4LDcgQEAgQ29sb3IgYmxlbmRTb3VyY2VPdmVyKGNv
bnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKIC8vIEJlc3Bva2UgIndoaXRlbmluZyIgYWxnb3Jp
dGhtIHVzZWQgYnkgUmVuZGVyVGhlbWU6OnRyYW5zZm9ybVNlbGVjdGlvbkJhY2tncm91bmRDb2xv
ci4KIENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJik7CiAKLUNvbG9yIGJsZW5kKGNv
bnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcyk7Ci1Db2xv
ciBibGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3Im
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpOworQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNv
bnN0IENvbG9yJiB0bywgY29uc3QgQmxlbmRpbmdDb250ZXh0Jik7CitDb2xvciBibGVuZFdpdGhv
dXRQcmVtdWx0aXBseShjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBjb25zdCBC
bGVuZGluZ0NvbnRleHQmKTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2Eu
bW0KaW5kZXggY2JjODRmZjU0OGQ5NjM3ZjU2MjkxOTI4NzllMTQwODNlZGJlM2YzYi4uMDAwZDkz
NzAzNzRiYmE5YjQ1YWFmNWRiMzdlZTM2OWJiNzUwNzM0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9y
bUNBRmlsdGVyc0NvY29hLm1tCkBAIC00NjMsMTggKzQ2MywxOSBAQCBSZXRhaW5QdHI8TlNWYWx1
ZT4gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoRmlsdGVyT3Bl
cmF0aW9uOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewogICAgICAgICBkb3Vi
bGUgdCA9IGZpbHRlck9wZXJhdGlvbiA/IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24+KCpmaWx0ZXJPcGVyYXRpb24pLmFtb3VudCgpIDogMDsKICAgICAgICAgdCA9IHN0
ZDo6bWluKHN0ZDo6bWF4KDAuMCwgdCksIDEuMCk7CisgICAgICAgIEJsZW5kaW5nQ29udGV4dCBj
b250ZXh0IHsgdCB9OwogICAgICAgICBDQUNvbG9yTWF0cml4IGNvbG9yTWF0cml4ID0gewotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0
YW50c1swXVswXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzBdWzBdLCB0KSksCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBdWzFd
LCBzZXBpYUZ1bGxDb25zdGFudHNbMF1bMV0sIHQpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0
PGZsb2F0PihXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMF1bMl0sIHNlcGlhRnVs
bENvbnN0YW50c1swXVsyXSwgdCkpLCAwLCAwLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1swXVswXSwgc2VwaWFGdWxsQ29u
c3RhbnRzWzBdWzBdLCBjb250ZXh0KSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4o
V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBdWzFdLCBzZXBpYUZ1bGxDb25zdGFu
dHNbMF1bMV0sIGNvbnRleHQpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJD
b3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMF1bMl0sIHNlcGlhRnVsbENvbnN0YW50c1sw
XVsyXSwgY29udGV4dCkpLCAwLCAwLAogICAgICAgICAgICAgCi0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzFdWzBdLCBzZXBp
YUZ1bGxDb25zdGFudHNbMV1bMF0sIHQpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0
PihXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMV1bMV0sIHNlcGlhRnVsbENvbnN0
YW50c1sxXVsxXSwgdCkpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6
OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1sxXVsyXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzFdWzJd
LCB0KSksIDAsIDAsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6Ymxl
bmQoc2VwaWFOb25lQ29uc3RhbnRzWzFdWzBdLCBzZXBpYUZ1bGxDb25zdGFudHNbMV1bMF0sIGNv
bnRleHQpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZChz
ZXBpYU5vbmVDb25zdGFudHNbMV1bMV0sIHNlcGlhRnVsbENvbnN0YW50c1sxXVsxXSwgY29udGV4
dCkpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlh
Tm9uZUNvbnN0YW50c1sxXVsyXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzFdWzJdLCBjb250ZXh0KSks
IDAsIDAsCiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJD
b3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMl1bMF0sIHNlcGlhRnVsbENvbnN0YW50c1sy
XVswXSwgdCkpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5k
KHNlcGlhTm9uZUNvbnN0YW50c1syXVsxXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzJdWzFdLCB0KSks
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25l
Q29uc3RhbnRzWzJdWzJdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1bMl0sIHQpKSwgMCwgMCwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25z
dGFudHNbMl1bMF0sIHNlcGlhRnVsbENvbnN0YW50c1syXVswXSwgY29udGV4dCkpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50
c1syXVsxXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzJdWzFdLCBjb250ZXh0KSksCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzJd
WzJdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1bMl0sIGNvbnRleHQpKSwgMCwgMCwKICAgICAgICAg
ICAgIDAsIDAsIDAsIDEsIDAKICAgICAgICAgfTsKICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZh
bHVlV2l0aENBQ29sb3JNYXRyaXg6Y29sb3JNYXRyaXhdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3Bw
CmluZGV4IDNlOTFjNDE3YTU5YWFkYzkxYzgxMGY2MWU2ZjE2ZjdhNThiOGUxZTAuLmNlZGQwNTYw
NjAzYTJjOWNjMjhlNGNhNTZhZTI2OTcxN2YyNDc0NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5j
cHAKQEAgLTc0LDE3ICs3NCwxNyBAQCB2b2lkIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6bG9h
ZEV4dGVybmFsRG9jdW1lbnRJZk5lZWRlZChDYWNoZWRSZXNvdXJjZUxvYWRlcgogICAgIG1fY2Fj
aGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UtPmxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIsIG9wdGlv
bnMpOwogfQogCi1SZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uOjpibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9n
cmVzcywgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2gpCitSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRp
b24qIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCwgYm9vbCBibGVuZFRvUGFz
c3Rocm91Z2gpCiB7CiAgICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQog
ICAgICAgICByZXR1cm4gdGhpczsKICAgICAKICAgICBpZiAoYmxlbmRUb1Bhc3N0aHJvdWdoKQot
ICAgICAgICByZXR1cm4gQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKFdl
YkNvcmU6OmJsZW5kKG1fYW1vdW50LCBwYXNzdGhyb3VnaEFtb3VudCgpLCBwcm9ncmVzcyksIG1f
dHlwZSk7CisgICAgICAgIHJldHVybiBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpj
cmVhdGUoV2ViQ29yZTo6YmxlbmQobV9hbW91bnQsIHBhc3N0aHJvdWdoQW1vdW50KCksIGNvbnRl
eHQpLCBtX3R5cGUpOwogICAgICAgICAKICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uKiBmcm9tT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbj4oZnJvbSk7CiAgICAgZG91YmxlIGZyb21BbW91bnQgPSBmcm9tT3BlcmF0aW9u
ID8gZnJvbU9wZXJhdGlvbi0+YW1vdW50KCkgOiBwYXNzdGhyb3VnaEFtb3VudCgpOwotICAgIHJl
dHVybiBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6Ymxl
bmQoZnJvbUFtb3VudCwgbV9hbW91bnQsIHByb2dyZXNzKSwgbV90eXBlKTsKKyAgICByZXR1cm4g
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKGZy
b21BbW91bnQsIG1fYW1vdW50LCBjb250ZXh0KSwgbV90eXBlKTsKIH0KIAogYm9vbCBCYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4mIGNv
bG9yKSBjb25zdApAQCAtMTM3LDE3ICsxMzcsMTcgQEAgZG91YmxlIEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb246OnBhc3N0aHJvdWdoQW1vdW50KCkgY29uc3QKICAgICB9CiB9CiAKLVJl
ZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b246OmJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBi
b29sIGJsZW5kVG9QYXNzdGhyb3VnaCkKK1JlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEJhc2ljQ29t
cG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OmJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlv
biogZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0LCBib29sIGJsZW5kVG9QYXNz
dGhyb3VnaCkKIHsKICAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgqdGhpcykpCiAg
ICAgICAgIHJldHVybiB0aGlzOwogICAgIAogICAgIGlmIChibGVuZFRvUGFzc3Rocm91Z2gpCi0g
ICAgICAgIHJldHVybiBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVh
dGUoV2ViQ29yZTo6YmxlbmQobV9hbW91bnQsIHBhc3N0aHJvdWdoQW1vdW50KCksIHByb2dyZXNz
KSwgbV90eXBlKTsKKyAgICAgICAgcmV0dXJuIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChtX2Ftb3VudCwgcGFzc3Rocm91Z2hBbW91
bnQoKSwgY29udGV4dCksIG1fdHlwZSk7CiAgICAgICAgIAogICAgIGNvbnN0IEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIGZyb21PcGVyYXRpb24gPSBkb3duY2FzdDxCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmcm9tKTsKICAgICBkb3VibGUgZnJv
bUFtb3VudCA9IGZyb21PcGVyYXRpb24gPyBmcm9tT3BlcmF0aW9uLT5hbW91bnQoKSA6IHBhc3N0
aHJvdWdoQW1vdW50KCk7Ci0gICAgcmV0dXJuIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChmcm9tQW1vdW50LCBtX2Ftb3VudCwgcHJv
Z3Jlc3MpLCBtX3R5cGUpOworICAgIHJldHVybiBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbUFtb3VudCwgbV9hbW91bnQsIGNv
bnRleHQpLCBtX3R5cGUpOwogfQogCiBib29sIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb246OnRyYW5zZm9ybUNvbG9yKFNSR0JBPGZsb2F0PiYgY29sb3IpIGNvbnN0CkBAIC0y
MTUsNyArMjE1LDcgQEAgYm9vbCBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246Om9wZXJh
dG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24KICAgICByZXR1cm4gdHJ1ZTsK
IH0KICAgICAKLVJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEludmVydExpZ2h0bmVzc0ZpbHRlck9w
ZXJhdGlvbjo6YmxlbmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUsIGJvb2wp
CitSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246
OmJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0
JiwgYm9vbCkKIHsKICAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgqdGhpcykpCiAg
ICAgICAgIHJldHVybiB0aGlzOwpAQCAtMzMxLDcgKzMzMSw3IEBAIGJvb2wgQmx1ckZpbHRlck9w
ZXJhdGlvbjo6b3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbikgY29u
c3QKICAgICByZXR1cm4gbV9zdGREZXZpYXRpb24gPT0gZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJh
dGlvbj4ob3BlcmF0aW9uKS5zdGREZXZpYXRpb24oKTsKIH0KICAgICAKLVJlZlB0cjxGaWx0ZXJP
cGVyYXRpb24+IEJsdXJGaWx0ZXJPcGVyYXRpb246OmJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlv
biogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCkKK1JlZlB0
cjxGaWx0ZXJPcGVyYXRpb24+IEJsdXJGaWx0ZXJPcGVyYXRpb246OmJsZW5kKGNvbnN0IEZpbHRl
ck9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0LCBib29sIGJs
ZW5kVG9QYXNzdGhyb3VnaCkKIHsKICAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgq
dGhpcykpCiAgICAgICAgIHJldHVybiB0aGlzOwpAQCAtMzM5LDExICszMzksMTEgQEAgUmVmUHRy
PEZpbHRlck9wZXJhdGlvbj4gQmx1ckZpbHRlck9wZXJhdGlvbjo6YmxlbmQoY29uc3QgRmlsdGVy
T3BlcmF0aW9uKiBmcm9tLAogICAgIExlbmd0aFR5cGUgbGVuZ3RoVHlwZSA9IG1fc3RkRGV2aWF0
aW9uLnR5cGUoKTsKIAogICAgIGlmIChibGVuZFRvUGFzc3Rocm91Z2gpCi0gICAgICAgIHJldHVy
biBCbHVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQobV9zdGREZXZpYXRp
b24sIExlbmd0aChsZW5ndGhUeXBlKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgcmV0dXJuIEJsdXJG
aWx0ZXJPcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChtX3N0ZERldmlhdGlvbiwgTGVu
Z3RoKGxlbmd0aFR5cGUpLCBjb250ZXh0KSk7CiAKICAgICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0
aW9uKiBmcm9tT3BlcmF0aW9uID0gZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJhdGlvbj4oZnJvbSk7
CiAgICAgTGVuZ3RoIGZyb21MZW5ndGggPSBmcm9tT3BlcmF0aW9uID8gZnJvbU9wZXJhdGlvbi0+
bV9zdGREZXZpYXRpb24gOiBMZW5ndGgobGVuZ3RoVHlwZSk7Ci0gICAgcmV0dXJuIEJsdXJGaWx0
ZXJPcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChmcm9tTGVuZ3RoLCBtX3N0ZERldmlh
dGlvbiwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gQmx1ckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRl
KFdlYkNvcmU6OmJsZW5kKGZyb21MZW5ndGgsIG1fc3RkRGV2aWF0aW9uLCBjb250ZXh0KSk7CiB9
CiAgICAgCiBib29sIERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3Qg
RmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24pIGNvbnN0CkBAIC0zNTQsMTYgKzM1NCwxNiBAQCBi
b29sIERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3Bl
cmF0aW9uJiBvcGVyYXRpb24pIGNvbgogICAgIHJldHVybiBtX2xvY2F0aW9uID09IG90aGVyLm1f
bG9jYXRpb24gJiYgbV9zdGREZXZpYXRpb24gPT0gb3RoZXIubV9zdGREZXZpYXRpb24gJiYgbV9j
b2xvciA9PSBvdGhlci5tX2NvbG9yOwogfQogICAgIAotUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4g
RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6YmxlbmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBm
cm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoKQorUmVmUHRyPEZp
bHRlck9wZXJhdGlvbj4gRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6YmxlbmQoY29uc3QgRmls
dGVyT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQsIGJvb2wg
YmxlbmRUb1Bhc3N0aHJvdWdoKQogewogICAgIGlmIChmcm9tICYmICFmcm9tLT5pc1NhbWVUeXBl
KCp0aGlzKSkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICBpZiAoYmxlbmRUb1Bhc3N0aHJv
dWdoKQogICAgICAgICByZXR1cm4gRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKAot
ICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQobV9sb2NhdGlvbiwgSW50UG9pbnQoKSwgcHJvZ3Jl
c3MpLAotICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQobV9zdGREZXZpYXRpb24sIDAsIHByb2dy
ZXNzKSwKLSAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKG1fY29sb3IsIENvbG9yOjp0cmFuc3Bh
cmVudEJsYWNrLCBwcm9ncmVzcykpOworICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQobV9sb2Nh
dGlvbiwgSW50UG9pbnQoKSwgY29udGV4dCksCisgICAgICAgICAgICBXZWJDb3JlOjpibGVuZCht
X3N0ZERldmlhdGlvbiwgMCwgY29udGV4dCksCisgICAgICAgICAgICBXZWJDb3JlOjpibGVuZCht
X2NvbG9yLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjaywgY29udGV4dCkpOwogCiAgICAgY29uc3Qg
RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiogZnJvbU9wZXJhdGlvbiA9IGRvd25jYXN0PERyb3BT
aGFkb3dGaWx0ZXJPcGVyYXRpb24+KGZyb20pOwogICAgIEludFBvaW50IGZyb21Mb2NhdGlvbiA9
IGZyb21PcGVyYXRpb24gPyBmcm9tT3BlcmF0aW9uLT5sb2NhdGlvbigpIDogSW50UG9pbnQoKTsK
QEAgLTM3MSw5ICszNzEsOSBAQCBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBEcm9wU2hhZG93Rmls
dGVyT3BlcmF0aW9uOjpibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qCiAgICAgQ29sb3IgZnJv
bUNvbG9yID0gZnJvbU9wZXJhdGlvbiA/IGZyb21PcGVyYXRpb24tPmNvbG9yKCkgOiBDb2xvcjo6
dHJhbnNwYXJlbnRCbGFjazsKICAgICAKICAgICByZXR1cm4gRHJvcFNoYWRvd0ZpbHRlck9wZXJh
dGlvbjo6Y3JlYXRlKAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tTG9jYXRpb24sIG1fbG9j
YXRpb24sIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVN0ZERldmlhdGlv
biwgbV9zdGREZXZpYXRpb24sIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJv
bUNvbG9yLCBtX2NvbG9yLCBwcm9ncmVzcykpOworICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9t
TG9jYXRpb24sIG1fbG9jYXRpb24sIGNvbnRleHQpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChm
cm9tU3RkRGV2aWF0aW9uLCBtX3N0ZERldmlhdGlvbiwgY29udGV4dCksCisgICAgICAgIFdlYkNv
cmU6OmJsZW5kKGZyb21Db2xvciwgbV9jb2xvciwgY29udGV4dCkpOwogfQogCiBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIGZpbHRl
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCmluZGV4IGUwMTUwZjgwYTJlMWRkOTcwZWMzOTY5YzZmYWZi
YjQ2ZGVkNDc5YWYuLjUxMzViYjAyYTQwMjJkYzViYjRjOTA0NDkxOGNhZjc1NGQwODI3M2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJPcGVyYXRpb24uaApAQCAtNDIsNiArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIC8vIENTUyBGaWx0ZXJzCiAKK3N0cnVjdCBCbGVuZGluZ0NvbnRleHQ7CiBjbGFzcyBDYWNo
ZWRSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlOwogY2xh
c3MgRmlsdGVyRWZmZWN0OwpAQCAtNzQsNyArNzUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIG9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJikgY29uc3QgPSAwOwogICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG8pIGNvbnN0IHsgcmV0dXJuICEo
KnRoaXMgPT0gbyk7IH0KIAotICAgIHZpcnR1YWwgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxl
bmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiAvKmZyb20qLywgZG91YmxlIC8qcHJvZ3Jlc3MqLywg
Ym9vbCAvKmJsZW5kVG9QYXNzdGhyb3VnaCovID0gZmFsc2UpCisgICAgdmlydHVhbCBSZWZQdHI8
RmlsdGVyT3BlcmF0aW9uPiBibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIC8qZnJvbSovLCBj
b25zdCBCbGVuZGluZ0NvbnRleHQmLCBib29sIC8qYmxlbmRUb1Bhc3N0aHJvdWdoKi8gPSBmYWxz
ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTIxNSw3ICsyMTYs
NyBAQCBwdWJsaWM6CiAKICAgICBkb3VibGUgYW1vdW50KCkgY29uc3QgeyByZXR1cm4gbV9hbW91
bnQ7IH0KIAotICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kKGNvbnN0IEZpbHRlck9w
ZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9
IGZhbHNlKSBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZChjb25z
dCBGaWx0ZXJPcGVyYXRpb24qIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYsIGJvb2wgYmxl
bmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb24mKSBjb25zdCBvdmVycmlkZTsKQEAgLTI1
MCw3ICsyNTEsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGFmZmVjdHNPcGFjaXR5KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV90eXBlID09IE9QQUNJVFk7IH0KIAotICAgIFJlZlB0cjxGaWx0
ZXJPcGVyYXRpb24+IGJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHBy
b2dyZXNzLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKSBvdmVycmlkZTsKKyAgICBS
ZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZyb20s
IGNvbnN0IEJsZW5kaW5nQ29udGV4dCYsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2Up
IG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGaWx0ZXJP
cGVyYXRpb24mKSBjb25zdCBvdmVycmlkZTsKQEAgLTI4MCw3ICsyODEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlv
bigpKTsKICAgICB9CiAKLSAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZChjb25zdCBG
aWx0ZXJPcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvUGFzc3Ro
cm91Z2ggPSBmYWxzZSkgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxl
bmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmLCBi
b29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJikgY29uc3QgZmluYWw7CkBA
IC0zMTEsNyArMzEyLDcgQEAgcHVibGljOgogICAgIGJvb2wgYWZmZWN0c09wYWNpdHkoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBtb3Zlc1BpeGVscygpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+
IGJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29s
IGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKSBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVy
T3BlcmF0aW9uPiBibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZyb20sIGNvbnN0IEJsZW5k
aW5nQ29udGV4dCYsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpIG92ZXJyaWRlOwog
CiBwcml2YXRlOgogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb24mKSBj
b25zdCBvdmVycmlkZTsKQEAgLTM0Niw3ICszNDcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBhZmZl
Y3RzT3BhY2l0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICBib29sIG1v
dmVzUGl4ZWxzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgUmVmUHRy
PEZpbHRlck9wZXJhdGlvbj4gYmxlbmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmcm9tLCBkb3Vi
bGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpIG92ZXJyaWRlOwor
ICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiog
ZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiwgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2ggPSBm
YWxzZSkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZp
bHRlck9wZXJhdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9JZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9JZGVudGl0
eVRyYW5zZm9ybU9wZXJhdGlvbi5oCmluZGV4IDAzZDkyODA5NzQxYTA1Y2Y4MzBmNjM0YzdiZjU5
MmU2ZGQ1YWEzMjMuLmY0ZTBiMjNlYjdiOTM1YThiYmRjN2Q1ZTVjOTAzOTJlZjE0NWE1YzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvSWRl
bnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmgKQEAgLTI5LDYg
KzI5LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQmxlbmRpbmdDb250ZXh0
OworCiBjbGFzcyBJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbiBmaW5hbCA6IHB1YmxpYyBUcmFu
c2Zvcm1PcGVyYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8SWRlbnRpdHlUcmFuc2Zv
cm1PcGVyYXRpb24+IGNyZWF0ZSgpCkBAIC01NCw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVu
ZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qLCBkb3VibGUsIGJvb2wgPSBmYWxzZSkgb3ZlcnJp
ZGUKKyAgICBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb24qLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmLCBib29sID0gZmFsc2UpIG92ZXJyaWRlCiAg
ICAgewogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXgzRFRyYW5zZm9ybU9wZXJh
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01h
dHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAppbmRleCAyNDdlMmQzZDgzOGI3MDEzYjc0NGE1
ZTliYmRmZjIzNjIxMmM5YzJhLi5kYWY1OWU2MzExOTNiZTc2OGQ4ZTA2ZGUzYjNlM2M4ZmE5MDIy
NzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNw
cApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hdHJp
eDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAKKyNpbmNsdWRlICJBbmltYXRpb25VdGlsaXRpZXMu
aCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCkBAIC0zNiwxMyArMzcsMTMgQEAgYm9vbCBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6
b3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG90aGVyKSBjb24KICAgICByZXR1
cm4gaXNTYW1lVHlwZShvdGhlcikgJiYgbV9tYXRyaXggPT0gZG93bmNhc3Q8TWF0cml4M0RUcmFu
c2Zvcm1PcGVyYXRpb24+KG90aGVyKS5tX21hdHJpeDsKIH0KIAotc3RhdGljIFJlZjxUcmFuc2Zv
cm1PcGVyYXRpb24+IGNyZWF0ZU9wZXJhdGlvbihUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdG8sIFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgUmVmPFRy
YW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlT3BlcmF0aW9uKFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
bywgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYgY29u
dGV4dCkKIHsKLSAgICB0by5ibGVuZChmcm9tLCBwcm9ncmVzcyk7CisgICAgdG8uYmxlbmQoZnJv
bSwgY29udGV4dC5wcm9ncmVzcyk7CiAgICAgcmV0dXJuIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUodG8pOwogfQogCi1SZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBNYXRyaXgzRFRy
YW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBk
b3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5KQorUmVmPFRyYW5zZm9ybU9wZXJh
dGlvbj4gTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0LCBib29sIGJsZW5k
VG9JZGVudGl0eSkKIHsKICAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgqdGhpcykp
CiAgICAgICAgIHJldHVybiAqdGhpczsKQEAgLTU3LDggKzU4LDggQEAgUmVmPFRyYW5zZm9ybU9w
ZXJhdGlvbj4gTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9y
bU9wZXJhdGkKICAgICBhcHBseSh0b1QsIHNpemUpOwogCiAgICAgaWYgKGJsZW5kVG9JZGVudGl0
eSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU9wZXJhdGlvbihmcm9tVCwgdG9ULCBwcm9ncmVzcyk7
Ci0gICAgcmV0dXJuIGNyZWF0ZU9wZXJhdGlvbih0b1QsIGZyb21ULCBwcm9ncmVzcyk7CisgICAg
ICAgIHJldHVybiBjcmVhdGVPcGVyYXRpb24oZnJvbVQsIHRvVCwgY29udGV4dCk7CisgICAgcmV0
dXJuIGNyZWF0ZU9wZXJhdGlvbih0b1QsIGZyb21ULCBjb250ZXh0KTsKIH0KIAogYm9vbCBNYXRy
aXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6aXNSZXByZXNlbnRhYmxlSW4yRCgpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJp
eDNEVHJhbnNmb3JtT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgKaW5kZXggMDUyODhjMzhj
MDc3NDk4Y2E0OTZiMjg4NWVjYWQ3NjBhNWFmM2IyMC4uN2IwMWJhZmQ1MTM3ZTU5MGIxODU0Y2Rk
Yjg2YzI3MTQzYjE2OWYzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1P
cGVyYXRpb24uaApAQCAtMzAsNiArMzAsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0
cnVjdCBCbGVuZGluZ0NvbnRleHQ7CisKIGNsYXNzIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9u
IGZpbmFsIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZjxNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtYXRyaXgpCkBAIC01OCw3ICs2MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVu
ZFRvSWRlbnRpdHkgPSBmYWxzZSkgb3ZlcnJpZGU7CisgICAgUmVmPFRyYW5zZm9ybU9wZXJhdGlv
bj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBCbGVuZGluZ0Nv
bnRleHQmLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKSBvdmVycmlkZTsKICAgICAKICAg
ICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJhbnNm
b3JtT3BlcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNwcAppbmRleCBiN2Y2NDRhOTY4YzBmODE0
NzE2MWUzNTNjMTdkMWNjNjZjZjc5OWM5Li45MmU2ZGZlMGE2NTFiZjk4OTZjMDU2MzJhMzEyMTY2
NDc1ZTk1ZmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL01hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24u
Y3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWF0
cml4VHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAKKyNpbmNsdWRlICJBbmltYXRpb25VdGlsaXRpZXMu
aCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCkBAIC0zNSwxMCArMzYsMTAgQEAgYm9vbCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246Om9w
ZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvdGhlcikgY29uc3QKICAgICByZXR1
cm4gbV9hID09IG0ubV9hICYmIG1fYiA9PSBtLm1fYiAmJiBtX2MgPT0gbS5tX2MgJiYgbV9kID09
IG0ubV9kICYmIG1fZSA9PSBtLm1fZSAmJiBtX2YgPT0gbS5tX2Y7CiB9CiAKLVJlZjxUcmFuc2Zv
cm1PcGVyYXRpb24+IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5
KQorUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVu
ZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYg
Y29udGV4dCwgYm9vbCBibGVuZFRvSWRlbnRpdHkpCiB7Ci0gICAgYXV0byBjcmVhdGVPcGVyYXRp
b24gPSBbXSAoVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRvLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
ZnJvbSwgZG91YmxlIHByb2dyZXNzKSB7Ci0gICAgICAgIHRvLmJsZW5kKGZyb20sIHByb2dyZXNz
KTsKKyAgICBhdXRvIGNyZWF0ZU9wZXJhdGlvbiA9IFtdIChUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dG8sIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmIGNv
bnRleHQpIHsKKyAgICAgICAgdG8uYmxlbmQoZnJvbSwgY29udGV4dC5wcm9ncmVzcyk7CiAgICAg
ICAgIHJldHVybiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0byk7CiAgICAgfTsK
IApAQCAtNTQsOCArNTUsOCBAQCBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBNYXRyaXhUcmFuc2Zv
cm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbgogICAgIH0KIAogICAg
IGlmIChibGVuZFRvSWRlbnRpdHkpCi0gICAgICAgIHJldHVybiBjcmVhdGVPcGVyYXRpb24oZnJv
bVQsIHRvVCwgcHJvZ3Jlc3MpOwotICAgIHJldHVybiBjcmVhdGVPcGVyYXRpb24odG9ULCBmcm9t
VCwgcHJvZ3Jlc3MpOworICAgICAgICByZXR1cm4gY3JlYXRlT3BlcmF0aW9uKGZyb21ULCB0b1Qs
IGNvbnRleHQpOworICAgIHJldHVybiBjcmVhdGVPcGVyYXRpb24odG9ULCBmcm9tVCwgY29udGV4
dCk7CiB9CiAKIHZvaWQgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpkdW1wKFRleHRTdHJlYW0m
IHRzKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmgKaW5k
ZXggYjU2N2JjN2ZhNGRjMTI4ZGMyOWQyZmYyZWQ4NWIzMmZiMmE1ZjQwMy4uYWVhNmI5MTNjN2E1
ODIxMTcwYTQ4OThjM2M5YjQ2Njk1YzcyOTAwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbi5oCkBAIC0zMCw2ICszMCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorc3RydWN0IEJsZW5kaW5nQ29udGV4dDsKKwogY2xhc3MgTWF0cml4VHJhbnNmb3JtT3Bl
cmF0aW9uIGZpbmFsIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZShkb3VibGUgYSwgZG91
YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIGUsIGRvdWJsZSBmKQpAQCAtNjIsNyAr
NjQsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgUmVm
PFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9t
LCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpIG92ZXJyaWRl
OworICAgIFJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbiogZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiwgYm9vbCBibGVuZFRvSWRlbnRpdHkg
PSBmYWxzZSkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29u
c3QgZmluYWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9w
ZXJhdGlvbi5jcHAKaW5kZXggZDRjZGU5Yzg5Y2YwNWZmZGM1NTgwMDcxM2FjYTdmZjkwMWQxYmY4
Yy4uZWFkNjU0MzE0YTJjOGY0ODk0Y2Y1YWQ1NTE2MzNhZjU1NjMwYzRmMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRy
YW5zZm9ybU9wZXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKQEAgLTM5LDE0
ICszOSwxNCBAQCBib29sIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOjpvcGVyYXRvcj09
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgb3RoZXIpCiAgICAgcmV0dXJuIG1fcCA9PSBkb3du
Y2FzdDxQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbj4ob3RoZXIpLm1fcDsKIH0KIAotUmVm
PFRyYW5zZm9ybU9wZXJhdGlvbj4gUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5k
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJs
ZW5kVG9JZGVudGl0eSkKK1JlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IFBlcnNwZWN0aXZlVHJhbnNm
b3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGNvbnN0
IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCwgYm9vbCBibGVuZFRvSWRlbnRpdHkpCiB7CiAgICAg
aWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQogICAgICAgICByZXR1cm4gKnRo
aXM7CiAgICAgCiAgICAgaWYgKGJsZW5kVG9JZGVudGl0eSkgewogICAgICAgICBkb3VibGUgcCA9
IGZsb2F0VmFsdWVGb3JMZW5ndGgobV9wLCAxKTsKLSAgICAgICAgcCA9IFdlYkNvcmU6OmJsZW5k
KHAsIDEuMCwgcHJvZ3Jlc3MpOyAvLyBGSVhNRTogdGhpcyBzZWVtcyB3cm9uZy4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyNzAwCisgICAgICAgIHAgPSBXZWJDb3Jl
OjpibGVuZChwLCAxLjAsIGNvbnRleHQpOyAvLyBGSVhNRTogdGhpcyBzZWVtcyB3cm9uZy4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyNzAwCiAgICAgICAgIHJldHVy
biBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aChjbGFtcFRvUG9z
aXRpdmVJbnRlZ2VyKHApLCBMZW5ndGhUeXBlOjpGaXhlZCkpOwogICAgIH0KICAgICAKQEAgLTU4
LDcgKzU4LDcgQEAgUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gUGVyc3BlY3RpdmVUcmFuc2Zvcm1P
cGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXIKICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0b1Q7CiAgICAgZnJvbVQuYXBwbHlQZXJzcGVjdGl2ZShmbG9hdFZhbHVlRm9yTGVuZ3Ro
KGZyb21QLCAxKSk7CiAgICAgdG9ULmFwcGx5UGVyc3BlY3RpdmUoZmxvYXRWYWx1ZUZvckxlbmd0
aCh0b1AsIDEpKTsKLSAgICB0b1QuYmxlbmQoZnJvbVQsIHByb2dyZXNzKTsKKyAgICB0b1QuYmxl
bmQoZnJvbVQsIGNvbnRleHQucHJvZ3Jlc3MpOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpE
ZWNvbXBvc2VkNFR5cGUgZGVjb21wOwogICAgIHRvVC5kZWNvbXBvc2U0KGRlY29tcCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUGVy
c3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaAppbmRleCA4
OWQwOTZmM2RjOGExOWM2ZTlmY2Y4MTAxNWNkY2U1MzMzYjYzZmM4Li43YWQxYTQxZDNkMzgxOWEy
MWFmYzM1ZWQ0MGE2ODAyMjhiOWEwMmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1BlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVj
dGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCkBAIC0zMiw2ICszMiw4IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorc3RydWN0IEJsZW5kaW5nQ29udGV4dDsKKwogY2xhc3MgUGVyc3BlY3RpdmVU
cmFuc2Zvcm1PcGVyYXRpb24gZmluYWwgOiBwdWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVmPFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVh
dGUoY29uc3QgTGVuZ3RoJiBwKQpAQCAtNTksNyArNjEsNyBAQCBwcml2YXRlOgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQo
Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxl
bmRUb0lkZW50aXR5ID0gZmFsc2UpIG92ZXJyaWRlOworICAgIFJlZjxUcmFuc2Zvcm1PcGVyYXRp
b24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRpbmdD
b250ZXh0JiwgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSkgb3ZlcnJpZGU7CiAKICAgICB2
b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAppbmRleCA5NjJlN2MxMDQ1MDg4MDEwODBi
MGIwNWQ3MGExMTZhYmM4N2VmNmQyLi45MGRjZWExNWU4NDI4ZjY5OWUwNDJlYWNmMzVjNjkwODE1
MDMwOTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3Bw
CkBAIC0zNywxMyArMzcsMTMgQEAgYm9vbCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246Om9wZXJh
dG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4g
bV94ID09IHIubV94ICYmIG1feSA9PSByLm1feSAmJiBtX3ogPT0gci5tX3ogJiYgbV9hbmdsZSA9
PSByLm1fYW5nbGU7CiB9CiAKLVJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IFJvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUg
cHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5KQorUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4g
Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24q
IGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCwgYm9vbCBibGVuZFRvSWRlbnRp
dHkpCiB7CiAgICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQogICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgCiAgICAgaWYgKGJsZW5kVG9JZGVudGl0eSkKLSAgICAgICAg
cmV0dXJuIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1feCwgbV95LCBtX3osIG1f
YW5nbGUgLSBtX2FuZ2xlICogcHJvZ3Jlc3MsIHR5cGUoKSk7CisgICAgICAgIHJldHVybiBSb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtX3gsIG1feSwgbV96LCBtX2FuZ2xlIC0gbV9h
bmdsZSAqIGNvbnRleHQucHJvZ3Jlc3MsIHR5cGUoKSk7CiAgICAgCiAgICAgY29uc3QgUm90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSBkb3duY2FzdDxSb3RhdGVUcmFuc2Zvcm1PcGVy
YXRpb24+KGZyb20pOwogICAgIApAQCAtNTUsNyArNTUsNyBAQCBSZWY8VHJhbnNmb3JtT3BlcmF0
aW9uPiBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbgogICAgICAgICByZXR1cm4gUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoZnJv
bU9wID8gZnJvbU9wLT5tX3ggOiBtX3gsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZnJvbU9wID8gZnJvbU9wLT5tX3kgOiBtX3ksIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbU9wID8gZnJvbU9wLT5t
X3ogOiBtX3osIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViQ29yZTo6YmxlbmQoZnJvbUFuZ2xlLCBtX2FuZ2xlLCBwcm9ncmVzcyksIHR5cGUoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3Jl
OjpibGVuZChmcm9tQW5nbGUsIG1fYW5nbGUsIGNvbnRleHQpLCB0eXBlKCkpOwogICAgIH0KIAog
ICAgIGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdG9PcCA9IHRoaXM7CkBAIC03NCw3
ICs3NCw3IEBAIFJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bjo6YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uCiAgICAgICAgICh0b09wID8gdG9PcC0+
bV9hbmdsZSA6IDApKTsKICAgICAKICAgICAvLyBCbGVuZCB0aGVtCi0gICAgdG9ULmJsZW5kKGZy
b21ULCBwcm9ncmVzcyk7CisgICAgdG9ULmJsZW5kKGZyb21ULCBjb250ZXh0LnByb2dyZXNzKTsK
ICAgICAKICAgICAvLyBFeHRyYWN0IHRoZSByZXN1bHQgYXMgYSBxdWF0ZXJuaW9uCiAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXg6OkRlY29tcG9zZWQ0VHlwZSBkZWNvbXA7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1JvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaAppbmRleCAxMjcxODc2NTY5MGYwMGVhYzk2N2Q5
NDc1NmRiZTNiZTQ3ZjU1ZGZmLi41ODI5YjJjZjhmNjdhNmE3MGQwYTM4MDVjYTY4ODZiMWMyNzM2
Zjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgKQEAgLTI5
LDYgKzI5LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQmxlbmRpbmdDb250
ZXh0OworCiBjbGFzcyBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24gZmluYWwgOiBwdWJsaWMgVHJh
bnNmb3JtT3BlcmF0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFJvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbj4gY3JlYXRlKGRvdWJsZSBhbmdsZSwgT3BlcmF0aW9uVHlwZSB0eXBlKQpAQCAt
NTMsNyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBSZWY8VHJhbnNmb3JtT3BlcmF0
aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVz
cywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSkgZmluYWw7CisgICAgUmVmPFRyYW5zZm9y
bU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBC
bGVuZGluZ0NvbnRleHQmLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKSBmaW5hbDsKIAog
ICAgIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICFtX2FuZ2xlOyB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKaW5kZXggODNjZjNk
NDQwNGYyZWMzOGIwYzc5MGRiYTEzMWE3ZWQ1NWFiYWI2Mi4uMDgzZTJlMzAwOTg2OGYxY2E4M2Zm
NzA0NDc2YjI3MGMxNWExNzQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbi5jcHAKQEAgLTM1LDIzICszNSwyMyBAQCBib29sIFNjYWxlVHJhbnNmb3JtT3BlcmF0
aW9uOjpvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgb3RoZXIpIGNvbnN0CiAg
ICAgcmV0dXJuIG1feCA9PSBzLm1feCAmJiBtX3kgPT0gcy5tX3kgJiYgbV96ID09IHMubV96Owog
fQogCi1SZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Ymxl
bmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wg
YmxlbmRUb0lkZW50aXR5KQorUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxl
bmRpbmdDb250ZXh0JiBjb250ZXh0LCBib29sIGJsZW5kVG9JZGVudGl0eSkKIHsKICAgICBpZiAo
ZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgqdGhpcykpCiAgICAgICAgIHJldHVybiAqdGhpczsK
ICAgICAKICAgICBpZiAoYmxlbmRUb0lkZW50aXR5KQotICAgICAgICByZXR1cm4gU2NhbGVUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChtX3gsIDEuMCwgcHJvZ3Jlc3Mp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3Jl
OjpibGVuZChtX3ksIDEuMCwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChtX3osIDEuMCwgcHJvZ3Jlc3MpLCB0
eXBlKCkpOworICAgICAgICByZXR1cm4gU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShX
ZWJDb3JlOjpibGVuZChtX3gsIDEuMCwgY29udGV4dCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKG1feSwgMS4wLCBjb250ZXh0
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQobV96LCAxLjAsIGNvbnRleHQpLCB0eXBlKCkpOwogICAgIAogICAgIGNvbnN0IFNj
YWxlVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSBkb3duY2FzdDxTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbj4oZnJvbSk7CiAgICAgZG91YmxlIGZyb21YID0gZnJvbU9wID8gZnJvbU9wLT5tX3gg
OiAxLjA7CiAgICAgZG91YmxlIGZyb21ZID0gZnJvbU9wID8gZnJvbU9wLT5tX3kgOiAxLjA7CiAg
ICAgZG91YmxlIGZyb21aID0gZnJvbU9wID8gZnJvbU9wLT5tX3ogOiAxLjA7Ci0gICAgcmV0dXJu
IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbVgsIG1f
eCwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYkNvcmU6OmJsZW5kKGZyb21ZLCBtX3ksIHByb2dyZXNzKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tWiwgbV96LCBwcm9n
cmVzcyksIHR5cGUoKSk7CisgICAgcmV0dXJuIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVh
dGUoV2ViQ29yZTo6YmxlbmQoZnJvbVgsIG1feCwgY29udGV4dCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVksIG1feSwgY29u
dGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQoZnJvbVosIG1feiwgY29udGV4dCksIHR5cGUoKSk7CiB9CiAKIHZvaWQgU2NhbGVU
cmFuc2Zvcm1PcGVyYXRpb246OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NjYWxlVHJhbnNm
b3JtT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgKaW5kZXggZjhlMTU3Mzg3OGE4YWY5ZTdkMWY5
MzE5NzMyYjczNzY5NzJiYTY4NC4uN2I0N2E0YzUzY2M3ZTVlMGRjNTU2MjMwY2ZiYzBlZTc1M2Uy
ZTJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaApAQCAtMjks
NiArMjksOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBCbGVuZGluZ0NvbnRl
eHQ7CisKIGNsYXNzIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uIGZpbmFsIDogcHVibGljIFRyYW5z
Zm9ybU9wZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbj4gY3JlYXRlKGRvdWJsZSBzeCwgZG91YmxlIHN5LCBPcGVyYXRpb25UeXBlIHR5cGUp
CkBAIC01Miw3ICs1NCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb24mKSBjb25zdCBmaW5hbDsKIAotICAgIFJlZjxUcmFuc2Zvcm1PcGVy
YXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dy
ZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKSBmaW5hbDsKKyAgICBSZWY8VHJhbnNm
b3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGNvbnN0
IEJsZW5kaW5nQ29udGV4dCYsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpIGZpbmFsOwog
CiAgICAgYm9vbCBpc0lkZW50aXR5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV94ID09IDEgJiYg
IG1feSA9PSAxICYmICBtX3ogPT0gMTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3Jt
T3BlcmF0aW9uLmNwcAppbmRleCA4MDkwNzBhZGU2ODc2MWM4NDZhODA5OTM3ZTgzYWE0NjBiMDI5
N2FhLi4zOWQyZjZkMDI0YjI1MWUxNjcxM2ZlMzFhNzY0YWZmMGRlMGEyZTBmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFuc2Zv
cm1PcGVyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5jcHAKQEAgLTM1LDE4ICszNSwxOCBAQCBi
b29sIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3Bl
cmF0aW9uJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gbV9hbmdsZVggPT0gcy5tX2FuZ2xlWCAm
JiBtX2FuZ2xlWSA9PSBzLm1fYW5nbGVZOwogfQogCi1SZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBT
a2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZy
b20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkpCitSZWY8VHJhbnNmb3Jt
T3BlcmF0aW9uPiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb24qIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCwgYm9vbCBibGVu
ZFRvSWRlbnRpdHkpCiB7CiAgICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMp
KQogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgCiAgICAgaWYgKGJsZW5kVG9JZGVudGl0eSkK
LSAgICAgICAgcmV0dXJuIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpi
bGVuZChtX2FuZ2xlWCwgMC4wLCBwcm9ncmVzcyksIFdlYkNvcmU6OmJsZW5kKG1fYW5nbGVZLCAw
LjAsIHByb2dyZXNzKSwgdHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIFNrZXdUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChtX2FuZ2xlWCwgMC4wLCBjb250ZXh0KSwgV2Vi
Q29yZTo6YmxlbmQobV9hbmdsZVksIDAuMCwgY29udGV4dCksIHR5cGUoKSk7CiAgICAgCiAgICAg
Y29uc3QgU2tld1RyYW5zZm9ybU9wZXJhdGlvbiogZnJvbU9wID0gZG93bmNhc3Q8U2tld1RyYW5z
Zm9ybU9wZXJhdGlvbj4oZnJvbSk7CiAgICAgZG91YmxlIGZyb21BbmdsZVggPSBmcm9tT3AgPyBm
cm9tT3AtPm1fYW5nbGVYIDogMDsKICAgICBkb3VibGUgZnJvbUFuZ2xlWSA9IGZyb21PcCA/IGZy
b21PcC0+bV9hbmdsZVkgOiAwOwotICAgIHJldHVybiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbUFuZ2xlWCwgbV9hbmdsZVgsIHByb2dyZXNzKSwgV2Vi
Q29yZTo6YmxlbmQoZnJvbUFuZ2xlWSwgbV9hbmdsZVksIHByb2dyZXNzKSwgdHlwZSgpKTsKKyAg
ICByZXR1cm4gU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKGZy
b21BbmdsZVgsIG1fYW5nbGVYLCBjb250ZXh0KSwgV2ViQ29yZTo6YmxlbmQoZnJvbUFuZ2xlWSwg
bV9hbmdsZVksIGNvbnRleHQpLCB0eXBlKCkpOwogfQogCiB2b2lkIFNrZXdUcmFuc2Zvcm1PcGVy
YXRpb246OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5z
Zm9ybU9wZXJhdGlvbi5oCmluZGV4IDc5N2RjOTUwZDA1MTI5ODUwOGY4NzZmYTIyYTUwZGUwMTBl
MzE4MWIuLjE2MTAzNTQ1NWE2YTM2ZTExZWRkYWZlNWYyNjllNjQ4OTA1Y2UyODkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5z
Zm9ybU9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oCkBAIC0yOSw2ICsyOSw4IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorc3RydWN0IEJsZW5kaW5nQ29udGV4dDsKKwogY2xhc3MgU2tl
d1RyYW5zZm9ybU9wZXJhdGlvbiBmaW5hbCA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24gewog
cHVibGljOgogICAgIHN0YXRpYyBSZWY8U2tld1RyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKGRv
dWJsZSBhbmdsZVgsIGRvdWJsZSBhbmdsZVksIE9wZXJhdGlvblR5cGUgdHlwZSkKQEAgLTU2LDcg
KzU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFJl
ZjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJv
bSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKSBvdmVycmlk
ZTsKKyAgICBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb24qIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYsIGJvb2wgYmxlbmRUb0lkZW50aXR5
ID0gZmFsc2UpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYpIGNv
bnN0IGZpbmFsOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9uLmgKaW5kZXggMDU3
NGE1NGY3MDU3NDkyMzgwN2ExOGQ2YTI4OWU3Mzc5NjU1ZDI0NC4uZGU0NWY3MmJhMGVhYWVlYWVi
NWU1YzgxYTUwMzgyNzg2MGI5NzkyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbi5o
CkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gQ1NTIFRyYW5z
Zm9ybXMgKG1heSBiZWNvbWUgcGFydCBvZiBDU1MzKQorc3RydWN0IEJsZW5kaW5nQ29udGV4dDsK
IAogY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8VHJhbnNmb3Jt
T3BlcmF0aW9uPiB7CiBwdWJsaWM6CkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiB0aGUgYm9yZGVyQm94U2l6ZSB3YXMgdXNlZCBpbiB0aGUgY29tcHV0YXRp
b24sIGZhbHNlIG90aGVyd2lzZS4KICAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoVHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBjb25zdCBGbG9hdFNpemUmIGJvcmRlckJveFNpemUpIGNvbnN0ID0gMDsKIAot
ICAgIHZpcnR1YWwgUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0g
ZmFsc2UpID0gMDsKKyAgICB2aXJ0dWFsIFJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiwgYm9v
bCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSkgPSAwOwogCiAgICAgT3BlcmF0aW9uVHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgYm9vbCBpc1NhbWVUeXBlKGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbiYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBvdGhlci50
eXBlKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbnMuY3BwCmluZGV4IGIxNDUy
ZmUyYjY2N2JkZWYzMWE4YmM5Y2UzMWY0ZTZkMmVjN2IzODEuLmM0YjU2N2VhYjNmZTgyZDVjM2Mx
MWE5YmNhNmY2ODhmOTAxOTg3MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25z
LmNwcApAQCAtNzMsNyArNzMsNyBAQCBib29sIFRyYW5zZm9ybU9wZXJhdGlvbnM6OmFmZmVjdGVk
QnlUcmFuc2Zvcm1PcmlnaW4oKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVHJhbnNm
b3JtT3BlcmF0aW9ucyBUcmFuc2Zvcm1PcGVyYXRpb25zOjpibGVuZEJ5TWF0Y2hpbmdPcGVyYXRp
b25zKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IGRvdWJsZSYgcHJvZ3Jl
c3MpIGNvbnN0CitUcmFuc2Zvcm1PcGVyYXRpb25zIFRyYW5zZm9ybU9wZXJhdGlvbnM6OmJsZW5k
QnlNYXRjaGluZ09wZXJhdGlvbnMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgY29u
c3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIFRyYW5zZm9ybU9wZXJh
dGlvbnMgcmVzdWx0OwogCkBAIC04MywxMiArODMsMTIgQEAgVHJhbnNmb3JtT3BlcmF0aW9ucyBU
cmFuc2Zvcm1PcGVyYXRpb25zOjpibGVuZEJ5TWF0Y2hpbmdPcGVyYXRpb25zKGNvbnN0IFRyYW5z
Zm8KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgIFJl
ZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGZyb21PcGVyYXRpb24gPSAoaSA8IGZyb21TaXplKSA/
IGZyb20ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogbnVsbHB0cjsKICAgICAgICAgUmVmUHRyPFRy
YW5zZm9ybU9wZXJhdGlvbj4gdG9PcGVyYXRpb24gPSAoaSA8IHRvU2l6ZSkgPyBvcGVyYXRpb25z
KClbaV0uZ2V0KCkgOiBudWxscHRyOwotICAgICAgICBSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9u
PiBibGVuZGVkT3BlcmF0aW9uID0gdG9PcGVyYXRpb24gPyB0b09wZXJhdGlvbi0+YmxlbmQoZnJv
bU9wZXJhdGlvbi5nZXQoKSwgcHJvZ3Jlc3MpIDogKGZyb21PcGVyYXRpb24gPyBSZWZQdHI8VHJh
bnNmb3JtT3BlcmF0aW9uPihmcm9tT3BlcmF0aW9uLT5ibGVuZChudWxscHRyLCBwcm9ncmVzcywg
dHJ1ZSkpIDogbnVsbHB0cik7CisgICAgICAgIFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJs
ZW5kZWRPcGVyYXRpb24gPSB0b09wZXJhdGlvbiA/IHRvT3BlcmF0aW9uLT5ibGVuZChmcm9tT3Bl
cmF0aW9uLmdldCgpLCBjb250ZXh0KSA6IChmcm9tT3BlcmF0aW9uID8gUmVmUHRyPFRyYW5zZm9y
bU9wZXJhdGlvbj4oZnJvbU9wZXJhdGlvbi0+YmxlbmQobnVsbHB0ciwgY29udGV4dCwgdHJ1ZSkp
IDogbnVsbHB0cik7CiAgICAgICAgIGlmIChibGVuZGVkT3BlcmF0aW9uKQogICAgICAgICAgICAg
cmVzdWx0Lm9wZXJhdGlvbnMoKS5hcHBlbmQoYmxlbmRlZE9wZXJhdGlvbik7CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgYXV0byBpZGVudGl0eU9wZXJhdGlvbiA9IElkZW50aXR5VHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGlmIChwcm9ncmVzcyA+IDAuNSkK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LnByb2dyZXNzID4gMC41KQogICAgICAgICAgICAgICAg
IHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKHRvT3BlcmF0aW9uID8gdG9PcGVyYXRpb24gOiBX
VEZNb3ZlKGlkZW50aXR5T3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMoKS5hcHBlbmQoZnJvbU9wZXJhdGlvbiA/IGZyb21PcGVy
YXRpb24gOiBXVEZNb3ZlKGlkZW50aXR5T3BlcmF0aW9uKSk7CkBAIC05OCw3ICs5OCw3IEBAIFRy
YW5zZm9ybU9wZXJhdGlvbnMgVHJhbnNmb3JtT3BlcmF0aW9uczo6YmxlbmRCeU1hdGNoaW5nT3Bl
cmF0aW9ucyhjb25zdCBUcmFuc2ZvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVHJhbnNmb3Jt
T3BlcmF0aW9ucyBUcmFuc2Zvcm1PcGVyYXRpb25zOjpibGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBv
bGF0aW9uKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGRvdWJsZSBwcm9ncmVzcywg
Y29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkgY29uc3QKK1RyYW5zZm9ybU9wZXJhdGlvbnMgVHJhbnNm
b3JtT3BlcmF0aW9uczo6YmxlbmRCeVVzaW5nTWF0cml4SW50ZXJwb2xhdGlvbihjb25zdCBUcmFu
c2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IExheW91dFNpemUmIHNpemUpIGNvbnN0CiB7CiAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBy
ZXN1bHQ7CiAKQEAgLTEwOCw3ICsxMDgsNyBAQCBUcmFuc2Zvcm1PcGVyYXRpb25zIFRyYW5zZm9y
bU9wZXJhdGlvbnM6OmJsZW5kQnlVc2luZ01hdHJpeEludGVycG9sYXRpb24oY29uc3QgVAogICAg
IGZyb20uYXBwbHkoc2l6ZSwgZnJvbVRyYW5zZm9ybSk7CiAgICAgYXBwbHkoc2l6ZSwgdG9UcmFu
c2Zvcm0pOwogCi0gICAgdG9UcmFuc2Zvcm0uYmxlbmQoZnJvbVRyYW5zZm9ybSwgcHJvZ3Jlc3Mp
OworICAgIHRvVHJhbnNmb3JtLmJsZW5kKGZyb21UcmFuc2Zvcm0sIGNvbnRleHQucHJvZ3Jlc3Mp
OwogCiAgICAgLy8gQXBwZW5kIHRoZSByZXN1bHQKICAgICByZXN1bHQub3BlcmF0aW9ucygpLmFw
cGVuZChNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRvVHJhbnNmb3JtKSk7CkBA
IC0xMTYsMTUgKzExNiwxNSBAQCBUcmFuc2Zvcm1PcGVyYXRpb25zIFRyYW5zZm9ybU9wZXJhdGlv
bnM6OmJsZW5kQnlVc2luZ01hdHJpeEludGVycG9sYXRpb24oY29uc3QgVAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLVRyYW5zZm9ybU9wZXJhdGlvbnMgVHJhbnNmb3JtT3BlcmF0aW9uczo6Ymxl
bmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgZG91YmxlIHByb2dyZXNzLCBjb25z
dCBMYXlvdXRTaXplJiBzaXplKSBjb25zdAorVHJhbnNmb3JtT3BlcmF0aW9ucyBUcmFuc2Zvcm1P
cGVyYXRpb25zOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBjb25zdCBC
bGVuZGluZ0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFNpemUmIHNpemUpIGNvbnN0CiB7
CiAgICAgaWYgKGZyb20gPT0gKnRoaXMpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAogICAgIGlm
IChmcm9tLnNpemUoKSAmJiBmcm9tLm9wZXJhdGlvbnNNYXRjaCgqdGhpcykpCi0gICAgICAgIHJl
dHVybiBibGVuZEJ5TWF0Y2hpbmdPcGVyYXRpb25zKGZyb20sIHByb2dyZXNzKTsKKyAgICAgICAg
cmV0dXJuIGJsZW5kQnlNYXRjaGluZ09wZXJhdGlvbnMoZnJvbSwgY29udGV4dCk7CiAKLSAgICBy
ZXR1cm4gYmxlbmRCeVVzaW5nTWF0cml4SW50ZXJwb2xhdGlvbihmcm9tLCBwcm9ncmVzcywgc2l6
ZSk7CisgICAgcmV0dXJuIGJsZW5kQnlVc2luZ01hdHJpeEludGVycG9sYXRpb24oZnJvbSwgY29u
dGV4dCwgc2l6ZSk7CiB9CiAKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIG9wcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVy
YXRpb25zLmgKaW5kZXggZjgyNTZhN2Y0ZDVhYjdiYjE4ZTZhZjQ0NjAzMDM3OTM2OTgyMWQxZC4u
Y2Y1OWExOWU4MjYxYTQ0Njc1ZmIyNzVmMjUwYmExMmVmOGQ2M2NlOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRp
b25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9U
cmFuc2Zvcm1PcGVyYXRpb25zLmgKQEAgLTMxLDYgKzMxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitzdHJ1Y3QgQmxlbmRpbmdDb250ZXh0OworCiBjbGFzcyBUcmFuc2Zvcm1PcGVyYXRp
b25zIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTgzLDkgKzg1
LDkgQEAgcHVibGljOgogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRp
b25zLnNpemUoKTsgfQogICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogYXQoc2l6ZV90IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA8IG1fb3BlcmF0aW9ucy5zaXplKCkgPyBtX29wZXJh
dGlvbnMuYXQoaW5kZXgpLmdldCgpIDogMDsgfQogCi0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBi
bGVuZEJ5TWF0Y2hpbmdPcGVyYXRpb25zKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20s
IGNvbnN0IGRvdWJsZSYgcHJvZ3Jlc3MpIGNvbnN0OwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMg
YmxlbmRCeVVzaW5nTWF0cml4SW50ZXJwb2xhdGlvbihjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25z
JiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGNvbnN0IExheW91dFNpemUmKSBjb25zdDsKLSAgICBU
cmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20s
IGRvdWJsZSBwcm9ncmVzcywgY29uc3QgTGF5b3V0U2l6ZSYpIGNvbnN0OworICAgIFRyYW5zZm9y
bU9wZXJhdGlvbnMgYmxlbmRCeU1hdGNoaW5nT3BlcmF0aW9ucyhjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb25zJiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmKSBjb25zdDsKKyAgICBUcmFuc2Zv
cm1PcGVyYXRpb25zIGJsZW5kQnlVc2luZ01hdHJpeEludGVycG9sYXRpb24oY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiwgY29uc3QgTGF5b3V0
U2l6ZSYpIGNvbnN0OworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmQoY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiwgY29uc3QgTGF5b3V0
U2l6ZSYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8VHJhbnNmb3JtT3Bl
cmF0aW9uPj4gbV9vcGVyYXRpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb24uY3BwCmluZGV4IDk2OTczYmUzNDEyY2Y3MTA4NTMwZDQ0ZTJlMjliYjYx
ZmUxYmYwNWIuLjMyMzdjNDIzMGI2MmY5MzBhM2UwZGU0NGNhOGQzZjA2NDJiZDNkYWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNs
YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKQEAgLTIy
LDYgKzIyLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb24uaCIKIAorI2luY2x1ZGUgIkFuaW1hdGlvblV0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KIApAQCAtMzUsMjAgKzM2LDIwIEBAIGJvb2wgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
OjpvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgb3RoZXIpIGNvCiAgICAgcmV0
dXJuIG1feCA9PSB0Lm1feCAmJiBtX3kgPT0gdC5tX3kgJiYgbV96ID09IHQubV96OwogfQogCi1S
ZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5k
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJs
ZW5kVG9JZGVudGl0eSkKK1JlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IFRyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBC
bGVuZGluZ0NvbnRleHQmIGNvbnRleHQsIGJvb2wgYmxlbmRUb0lkZW50aXR5KQogewogICAgIGlm
IChmcm9tICYmICFmcm9tLT5pc1NhbWVUeXBlKCp0aGlzKSkKICAgICAgICAgcmV0dXJuICp0aGlz
OwogCiAgICAgTGVuZ3RoIHplcm9MZW5ndGgoMCwgTGVuZ3RoVHlwZTo6Rml4ZWQpOwogICAgIGlm
IChibGVuZFRvSWRlbnRpdHkpCi0gICAgICAgIHJldHVybiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChtX3gsIHplcm9MZW5ndGgsIHByb2dyZXNzKSwg
V2ViQ29yZTo6YmxlbmQobV95LCB6ZXJvTGVuZ3RoLCBwcm9ncmVzcyksIFdlYkNvcmU6OmJsZW5k
KG1feiwgemVyb0xlbmd0aCwgcHJvZ3Jlc3MpLCB0eXBlKCkpOworICAgICAgICByZXR1cm4gVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQobV94LCB6ZXJv
TGVuZ3RoLCBjb250ZXh0KSwgV2ViQ29yZTo6YmxlbmQobV95LCB6ZXJvTGVuZ3RoLCBjb250ZXh0
KSwgV2ViQ29yZTo6YmxlbmQobV96LCB6ZXJvTGVuZ3RoLCBjb250ZXh0KSwgdHlwZSgpKTsKIAog
ICAgIGNvbnN0IFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbU9wID0gZG93bmNhc3Q8
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uPihmcm9tKTsKICAgICBMZW5ndGggZnJvbVggPSBm
cm9tT3AgPyBmcm9tT3AtPm1feCA6IHplcm9MZW5ndGg7CiAgICAgTGVuZ3RoIGZyb21ZID0gZnJv
bU9wID8gZnJvbU9wLT5tX3kgOiB6ZXJvTGVuZ3RoOwogICAgIExlbmd0aCBmcm9tWiA9IGZyb21P
cCA/IGZyb21PcC0+bV96IDogemVyb0xlbmd0aDsKLSAgICByZXR1cm4gVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbVgsIHgoKSwgcHJvZ3Jlc3Mp
LCBXZWJDb3JlOjpibGVuZChmcm9tWSwgeSgpLCBwcm9ncmVzcyksIFdlYkNvcmU6OmJsZW5kKGZy
b21aLCB6KCksIHByb2dyZXNzKSwgdHlwZSgpKTsKKyAgICByZXR1cm4gVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbVgsIHgoKSwgY29udGV4dCks
IFdlYkNvcmU6OmJsZW5kKGZyb21ZLCB5KCksIGNvbnRleHQpLCBXZWJDb3JlOjpibGVuZChmcm9t
WiwgeigpLCBjb250ZXh0KSwgdHlwZSgpKTsKIH0KIAogdm9pZCBUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb246OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9U
cmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaAppbmRleCBlZDdjOGZkZDY5NzA3MWE5OTUzNzY2
YmVkZGIyYjU1NWE3YWFkNDgwLi4wMDBmNGM3OWVmZTRkOGVkMzRhMjA1OTNmM2NlZmM3YjI3ZmI4
ZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgK
QEAgLTMxLDYgKzMxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQmxlbmRp
bmdDb250ZXh0OworCiBjbGFzcyBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24gZmluYWwgOiBw
dWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKGNvbnN0IExlbmd0aCYgdHgsIGNvbnN0IExl
bmd0aCYgdHksIE9wZXJhdGlvblR5cGUgdHlwZSkKQEAgLTY2LDcgKzY4LDcgQEAgcHVibGljOgog
CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYpIGNvbnN0IGZp
bmFsOwogCi0gICAgUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0g
ZmFsc2UpIGZpbmFsOworICAgIFJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiwgYm9vbCBibGVu
ZFRvSWRlbnRpdHkgPSBmYWxzZSkgZmluYWw7CiAKICAgICBib29sIGlzUmVwcmVzZW50YWJsZUlu
MkQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ouaXNaZXJvKCk7IH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0Jhc2ljU2hhcGVzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5jcHAKaW5kZXggOGRkYzE3MjlhYzhm
ZTVlNmM1ZTZjYWU1MjUzZWRiNjIzNDMxMzdmYS4uOGFlNzA3ODQ3ZjM4NmRjYWNiYzQ4ZjQ3NmQ1
ZjVmN2RjMGI1OTA0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L0Jhc2ljU2hhcGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQmFz
aWNTaGFwZXMuY3BwCkBAIC0xODksMTUgKzE4OSwxNSBAQCBib29sIEJhc2ljU2hhcGVDaXJjbGU6
OmNhbkJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIG90aGVyKSBjb25zdAogICAgIHJldHVybiByYWRp
dXMoKS5jYW5CbGVuZChkb3duY2FzdDxCYXNpY1NoYXBlQ2lyY2xlPihvdGhlcikucmFkaXVzKCkp
OwogfQogCi1SZWY8QmFzaWNTaGFwZT4gQmFzaWNTaGFwZUNpcmNsZTo6YmxlbmQoY29uc3QgQmFz
aWNTaGFwZSYgb3RoZXIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QKK1JlZjxCYXNpY1NoYXBlPiBC
YXNpY1NoYXBlQ2lyY2xlOjpibGVuZChjb25zdCBCYXNpY1NoYXBlJiBvdGhlciwgY29uc3QgQmxl
bmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIEFTU0VSVCh0eXBlKCkgPT0gb3Ro
ZXIudHlwZSgpKTsKICAgICBhdXRvJiBvdGhlckNpcmNsZSA9IGRvd25jYXN0PEJhc2ljU2hhcGVD
aXJjbGU+KG90aGVyKTsKICAgICBhdXRvIHJlc3VsdCA9ICBCYXNpY1NoYXBlQ2lyY2xlOjpjcmVh
dGUoKTsKIAotICAgIHJlc3VsdC0+c2V0Q2VudGVyWChtX2NlbnRlclguYmxlbmQob3RoZXJDaXJj
bGUuY2VudGVyWCgpLCBwcm9ncmVzcykpOwotICAgIHJlc3VsdC0+c2V0Q2VudGVyWShtX2NlbnRl
clkuYmxlbmQob3RoZXJDaXJjbGUuY2VudGVyWSgpLCBwcm9ncmVzcykpOwotICAgIHJlc3VsdC0+
c2V0UmFkaXVzKG1fcmFkaXVzLmJsZW5kKG90aGVyQ2lyY2xlLnJhZGl1cygpLCBwcm9ncmVzcykp
OworICAgIHJlc3VsdC0+c2V0Q2VudGVyWChtX2NlbnRlclguYmxlbmQob3RoZXJDaXJjbGUuY2Vu
dGVyWCgpLCBjb250ZXh0KSk7CisgICAgcmVzdWx0LT5zZXRDZW50ZXJZKG1fY2VudGVyWS5ibGVu
ZChvdGhlckNpcmNsZS5jZW50ZXJZKCksIGNvbnRleHQpKTsKKyAgICByZXN1bHQtPnNldFJhZGl1
cyhtX3JhZGl1cy5ibGVuZChvdGhlckNpcmNsZS5yYWRpdXMoKSwgY29udGV4dCkpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKQEAgLTI1Miw3ICsyNTIsNyBAQCBib29sIEJhc2ljU2hhcGVFbGxp
cHNlOjpjYW5CbGVuZChjb25zdCBCYXNpY1NoYXBlJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4g
cmFkaXVzWCgpLmNhbkJsZW5kKG90aGVyRWxsaXBzZS5yYWRpdXNYKCkpICYmIHJhZGl1c1koKS5j
YW5CbGVuZChvdGhlckVsbGlwc2UucmFkaXVzWSgpKTsKIH0KIAotUmVmPEJhc2ljU2hhcGU+IEJh
c2ljU2hhcGVFbGxpcHNlOjpibGVuZChjb25zdCBCYXNpY1NoYXBlJiBvdGhlciwgZG91YmxlIHBy
b2dyZXNzKSBjb25zdAorUmVmPEJhc2ljU2hhcGU+IEJhc2ljU2hhcGVFbGxpcHNlOjpibGVuZChj
b25zdCBCYXNpY1NoYXBlJiBvdGhlciwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBj
b25zdAogewogICAgIEFTU0VSVCh0eXBlKCkgPT0gb3RoZXIudHlwZSgpKTsKICAgICBhdXRvJiBv
dGhlckVsbGlwc2UgPSBkb3duY2FzdDxCYXNpY1NoYXBlRWxsaXBzZT4ob3RoZXIpOwpAQCAtMjY3
LDEwICsyNjcsMTAgQEAgUmVmPEJhc2ljU2hhcGU+IEJhc2ljU2hhcGVFbGxpcHNlOjpibGVuZChj
b25zdCBCYXNpY1NoYXBlJiBvdGhlciwgZG91YmxlIHByb2dyZXMKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKLSAgICByZXN1bHQtPnNldENlbnRlclgobV9jZW50ZXJYLmJsZW5kKG90
aGVyRWxsaXBzZS5jZW50ZXJYKCksIHByb2dyZXNzKSk7Ci0gICAgcmVzdWx0LT5zZXRDZW50ZXJZ
KG1fY2VudGVyWS5ibGVuZChvdGhlckVsbGlwc2UuY2VudGVyWSgpLCBwcm9ncmVzcykpOwotICAg
IHJlc3VsdC0+c2V0UmFkaXVzWChtX3JhZGl1c1guYmxlbmQob3RoZXJFbGxpcHNlLnJhZGl1c1go
KSwgcHJvZ3Jlc3MpKTsKLSAgICByZXN1bHQtPnNldFJhZGl1c1kobV9yYWRpdXNZLmJsZW5kKG90
aGVyRWxsaXBzZS5yYWRpdXNZKCksIHByb2dyZXNzKSk7CisgICAgcmVzdWx0LT5zZXRDZW50ZXJY
KG1fY2VudGVyWC5ibGVuZChvdGhlckVsbGlwc2UuY2VudGVyWCgpLCBjb250ZXh0KSk7CisgICAg
cmVzdWx0LT5zZXRDZW50ZXJZKG1fY2VudGVyWS5ibGVuZChvdGhlckVsbGlwc2UuY2VudGVyWSgp
LCBjb250ZXh0KSk7CisgICAgcmVzdWx0LT5zZXRSYWRpdXNYKG1fcmFkaXVzWC5ibGVuZChvdGhl
ckVsbGlwc2UucmFkaXVzWCgpLCBjb250ZXh0KSk7CisgICAgcmVzdWx0LT5zZXRSYWRpdXNZKG1f
cmFkaXVzWS5ibGVuZChvdGhlckVsbGlwc2UucmFkaXVzWSgpLCBjb250ZXh0KSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApAQCAtMzE1LDcgKzMxNSw3IEBAIGJvb2wgQmFzaWNTaGFwZVBvbHln
b246OmNhbkJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIG90aGVyKSBjb25zdAogICAgIHJldHVybiB2
YWx1ZXMoKS5zaXplKCkgPT0gb3RoZXJQb2x5Z29uLnZhbHVlcygpLnNpemUoKSAmJiB3aW5kUnVs
ZSgpID09IG90aGVyUG9seWdvbi53aW5kUnVsZSgpOwogfQogCi1SZWY8QmFzaWNTaGFwZT4gQmFz
aWNTaGFwZVBvbHlnb246OmJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIG90aGVyLCBkb3VibGUgcHJv
Z3Jlc3MpIGNvbnN0CitSZWY8QmFzaWNTaGFwZT4gQmFzaWNTaGFwZVBvbHlnb246OmJsZW5kKGNv
bnN0IEJhc2ljU2hhcGUmIG90aGVyLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKHR5cGUoKSA9PSBvdGhlci50eXBlKCkpOwogCkBAIC0zMzIsOCAr
MzMyLDggQEAgUmVmPEJhc2ljU2hhcGU+IEJhc2ljU2hhcGVQb2x5Z29uOjpibGVuZChjb25zdCBC
YXNpY1NoYXBlJiBvdGhlciwgZG91YmxlIHByb2dyZXMKIAogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGVuZ3RoOyBpID0gaSArIDIpIHsKICAgICAgICAgcmVzdWx0LT5hcHBlbmRQb2ludCgK
LSAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKG90aGVyUG9seWdvbi52YWx1ZXMoKS5hdChpKSwg
bV92YWx1ZXMuYXQoaSksIHByb2dyZXNzKSwKLSAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKG90
aGVyUG9seWdvbi52YWx1ZXMoKS5hdChpICsgMSksIG1fdmFsdWVzLmF0KGkgKyAxKSwgcHJvZ3Jl
c3MpKTsKKyAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKG90aGVyUG9seWdvbi52YWx1ZXMoKS5h
dChpKSwgbV92YWx1ZXMuYXQoaSksIGNvbnRleHQpLAorICAgICAgICAgICAgV2ViQ29yZTo6Ymxl
bmQob3RoZXJQb2x5Z29uLnZhbHVlcygpLmF0KGkgKyAxKSwgbV92YWx1ZXMuYXQoaSArIDEpLCBj
b250ZXh0KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM3MywxNCArMzczLDE0
IEBAIGJvb2wgQmFzaWNTaGFwZVBhdGg6OmNhbkJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIG90aGVy
KSBjb25zdAogICAgIHJldHVybiB3aW5kUnVsZSgpID09IG90aGVyUGF0aC53aW5kUnVsZSgpICYm
IGNhbkJsZW5kU1ZHUGF0aEJ5dGVTdHJlYW1zKCptX2J5dGVTdHJlYW0sICpvdGhlclBhdGgucGF0
aERhdGEoKSk7CiB9CiAKLVJlZjxCYXNpY1NoYXBlPiBCYXNpY1NoYXBlUGF0aDo6YmxlbmQoY29u
c3QgQmFzaWNTaGFwZSYgZnJvbSwgZG91YmxlIHByb2dyZXNzKSBjb25zdAorUmVmPEJhc2ljU2hh
cGU+IEJhc2ljU2hhcGVQYXRoOjpibGVuZChjb25zdCBCYXNpY1NoYXBlJiBmcm9tLCBjb25zdCBC
bGVuZGluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHR5cGUoKSA9PSBm
cm9tLnR5cGUoKSk7CiAKICAgICBhdXRvJiBmcm9tUGF0aCA9IGRvd25jYXN0PEJhc2ljU2hhcGVQ
YXRoPihmcm9tKTsKIAogICAgIGF1dG8gcmVzdWx0aW5nUGF0aEJ5dGVzID0gbWFrZVVuaXF1ZTxT
VkdQYXRoQnl0ZVN0cmVhbT4oKTsKLSAgICBidWlsZEFuaW1hdGVkU1ZHUGF0aEJ5dGVTdHJlYW0o
KmZyb21QYXRoLm1fYnl0ZVN0cmVhbSwgKm1fYnl0ZVN0cmVhbSwgKnJlc3VsdGluZ1BhdGhCeXRl
cywgcHJvZ3Jlc3MpOworICAgIGJ1aWxkQW5pbWF0ZWRTVkdQYXRoQnl0ZVN0cmVhbSgqZnJvbVBh
dGgubV9ieXRlU3RyZWFtLCAqbV9ieXRlU3RyZWFtLCAqcmVzdWx0aW5nUGF0aEJ5dGVzLCBjb250
ZXh0LnByb2dyZXNzKTsKICAgICBhdXRvIHJlc3VsdCA9IEJhc2ljU2hhcGVQYXRoOjpjcmVhdGUo
V1RGTW92ZShyZXN1bHRpbmdQYXRoQnl0ZXMpKTsKICAgICByZXN1bHQtPnNldFdpbmRSdWxlKHdp
bmRSdWxlKCkpOwogICAgIHJlc3VsdC0+c2V0Wm9vbShtX3pvb20pOwpAQCAtNDMwLDIxICs0MzAs
MjEgQEAgYm9vbCBCYXNpY1NoYXBlSW5zZXQ6OmNhbkJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIG90
aGVyKSBjb25zdAogICAgIHJldHVybiB0eXBlKCkgPT0gb3RoZXIudHlwZSgpOwogfQogCi1SZWY8
QmFzaWNTaGFwZT4gQmFzaWNTaGFwZUluc2V0OjpibGVuZChjb25zdCBCYXNpY1NoYXBlJiBmcm9t
LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0CitSZWY8QmFzaWNTaGFwZT4gQmFzaWNTaGFwZUluc2V0
OjpibGVuZChjb25zdCBCYXNpY1NoYXBlJiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHR5cGUoKSA9PSBmcm9tLnR5cGUoKSk7CiAKICAg
ICBhdXRvJiBmcm9tSW5zZXQgPSBkb3duY2FzdDxCYXNpY1NoYXBlSW5zZXQ+KGZyb20pOwogICAg
IGF1dG8gcmVzdWx0ID0gIEJhc2ljU2hhcGVJbnNldDo6Y3JlYXRlKCk7Ci0gICAgcmVzdWx0LT5z
ZXRUb3AoV2ViQ29yZTo6YmxlbmQoZnJvbUluc2V0LnRvcCgpLCB0b3AoKSwgcHJvZ3Jlc3MpKTsK
LSAgICByZXN1bHQtPnNldFJpZ2h0KFdlYkNvcmU6OmJsZW5kKGZyb21JbnNldC5yaWdodCgpLCBy
aWdodCgpLCBwcm9ncmVzcykpOwotICAgIHJlc3VsdC0+c2V0Qm90dG9tKFdlYkNvcmU6OmJsZW5k
KGZyb21JbnNldC5ib3R0b20oKSwgYm90dG9tKCksIHByb2dyZXNzKSk7Ci0gICAgcmVzdWx0LT5z
ZXRMZWZ0KFdlYkNvcmU6OmJsZW5kKGZyb21JbnNldC5sZWZ0KCksIGxlZnQoKSwgcHJvZ3Jlc3Mp
KTsKLQotICAgIHJlc3VsdC0+c2V0VG9wTGVmdFJhZGl1cyhXZWJDb3JlOjpibGVuZChmcm9tSW5z
ZXQudG9wTGVmdFJhZGl1cygpLCB0b3BMZWZ0UmFkaXVzKCksIHByb2dyZXNzKSk7Ci0gICAgcmVz
dWx0LT5zZXRUb3BSaWdodFJhZGl1cyhXZWJDb3JlOjpibGVuZChmcm9tSW5zZXQudG9wUmlnaHRS
YWRpdXMoKSwgdG9wUmlnaHRSYWRpdXMoKSwgcHJvZ3Jlc3MpKTsKLSAgICByZXN1bHQtPnNldEJv
dHRvbVJpZ2h0UmFkaXVzKFdlYkNvcmU6OmJsZW5kKGZyb21JbnNldC5ib3R0b21SaWdodFJhZGl1
cygpLCBib3R0b21SaWdodFJhZGl1cygpLCBwcm9ncmVzcykpOwotICAgIHJlc3VsdC0+c2V0Qm90
dG9tTGVmdFJhZGl1cyhXZWJDb3JlOjpibGVuZChmcm9tSW5zZXQuYm90dG9tTGVmdFJhZGl1cygp
LCBib3R0b21MZWZ0UmFkaXVzKCksIHByb2dyZXNzKSk7CisgICAgcmVzdWx0LT5zZXRUb3AoV2Vi
Q29yZTo6YmxlbmQoZnJvbUluc2V0LnRvcCgpLCB0b3AoKSwgY29udGV4dCkpOworICAgIHJlc3Vs
dC0+c2V0UmlnaHQoV2ViQ29yZTo6YmxlbmQoZnJvbUluc2V0LnJpZ2h0KCksIHJpZ2h0KCksIGNv
bnRleHQpKTsKKyAgICByZXN1bHQtPnNldEJvdHRvbShXZWJDb3JlOjpibGVuZChmcm9tSW5zZXQu
Ym90dG9tKCksIGJvdHRvbSgpLCBjb250ZXh0KSk7CisgICAgcmVzdWx0LT5zZXRMZWZ0KFdlYkNv
cmU6OmJsZW5kKGZyb21JbnNldC5sZWZ0KCksIGxlZnQoKSwgY29udGV4dCkpOworCisgICAgcmVz
dWx0LT5zZXRUb3BMZWZ0UmFkaXVzKFdlYkNvcmU6OmJsZW5kKGZyb21JbnNldC50b3BMZWZ0UmFk
aXVzKCksIHRvcExlZnRSYWRpdXMoKSwgY29udGV4dCkpOworICAgIHJlc3VsdC0+c2V0VG9wUmln
aHRSYWRpdXMoV2ViQ29yZTo6YmxlbmQoZnJvbUluc2V0LnRvcFJpZ2h0UmFkaXVzKCksIHRvcFJp
Z2h0UmFkaXVzKCksIGNvbnRleHQpKTsKKyAgICByZXN1bHQtPnNldEJvdHRvbVJpZ2h0UmFkaXVz
KFdlYkNvcmU6OmJsZW5kKGZyb21JbnNldC5ib3R0b21SaWdodFJhZGl1cygpLCBib3R0b21SaWdo
dFJhZGl1cygpLCBjb250ZXh0KSk7CisgICAgcmVzdWx0LT5zZXRCb3R0b21MZWZ0UmFkaXVzKFdl
YkNvcmU6OmJsZW5kKGZyb21JbnNldC5ib3R0b21MZWZ0UmFkaXVzKCksIGJvdHRvbUxlZnRSYWRp
dXMoKSwgY29udGV4dCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL0Jhc2ljU2hhcGVzLmgKaW5kZXggODU1MGNmOTIwYmViYmU0NWVi
NzQ2NWQ4YzI4NWJhZjg4NDU2ZmI4OC4uOWJmMDM3MzQ3NmI1M2U1YzdhNGE5YmM2MjM5ZTQ1ZWM0
YWQ1MzRlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0Jhc2lj
U2hhcGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0Jhc2ljU2hhcGVz
LmgKQEAgLTQzLDYgKzQzLDcgQEAgY2xhc3MgVGV4dFN0cmVhbTsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitzdHJ1Y3QgQmxlbmRpbmdDb250ZXh0OwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3Mg
UGF0aDsKIGNsYXNzIFJlbmRlckJveDsKQEAgLTY2LDcgKzY3LDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgV2luZFJ1bGUgd2luZFJ1bGUoKSBjb25zdCB7IHJldHVybiBXaW5kUnVsZTo6Tm9uWmVy
bzsgfQogCiAgICAgdmlydHVhbCBib29sIGNhbkJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBSZWY8QmFzaWNTaGFwZT4gYmxlbmQoY29uc3QgQmFzaWNTaGFw
ZSYgZnJvbSwgZG91YmxlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWY8QmFzaWNTaGFwZT4g
YmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JikgY29u
c3QgPSAwOwogCiAgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgQmFzaWNTaGFwZSYp
IGNvbnN0ID0gMDsKICAgICAKQEAgLTk2LDkgKzk3LDkgQEAgcHVibGljOgogICAgIGNvbnN0IExl
bmd0aCYgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KICAgICBjb25zdCBMZW5n
dGgmIGNvbXB1dGVkTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9jb21wdXRlZExlbmd0aDsgfQog
Ci0gICAgQmFzaWNTaGFwZUNlbnRlckNvb3JkaW5hdGUgYmxlbmQoY29uc3QgQmFzaWNTaGFwZUNl
bnRlckNvb3JkaW5hdGUmIGZyb20sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QKKyAgICBCYXNpY1No
YXBlQ2VudGVyQ29vcmRpbmF0ZSBibGVuZChjb25zdCBCYXNpY1NoYXBlQ2VudGVyQ29vcmRpbmF0
ZSYgZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgIHsKLSAg
ICAgICAgcmV0dXJuIEJhc2ljU2hhcGVDZW50ZXJDb29yZGluYXRlKFRvcExlZnQsIFdlYkNvcmU6
OmJsZW5kKGZyb20ubV9jb21wdXRlZExlbmd0aCwgbV9jb21wdXRlZExlbmd0aCwgcHJvZ3Jlc3Mp
KTsKKyAgICAgICAgcmV0dXJuIEJhc2ljU2hhcGVDZW50ZXJDb29yZGluYXRlKFRvcExlZnQsIFdl
YkNvcmU6OmJsZW5kKGZyb20ubV9jb21wdXRlZExlbmd0aCwgbV9jb21wdXRlZExlbmd0aCwgY29u
dGV4dCkpOwogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQmFzaWNTaGFw
ZUNlbnRlckNvb3JkaW5hdGUmIG90aGVyKSBjb25zdApAQCAtMTQ0LDEyICsxNDUsMTIgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV90eXBlID09IFZhbHVlICYmIG90aGVyLnR5cGUoKSA9PSBW
YWx1ZTsKICAgICB9CiAKLSAgICBCYXNpY1NoYXBlUmFkaXVzIGJsZW5kKGNvbnN0IEJhc2ljU2hh
cGVSYWRpdXMmIGZyb20sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QKKyAgICBCYXNpY1NoYXBlUmFk
aXVzIGJsZW5kKGNvbnN0IEJhc2ljU2hhcGVSYWRpdXMmIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX3R5cGUgIT0gVmFsdWUg
fHwgZnJvbS50eXBlKCkgIT0gVmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gQmFzaWNTaGFwZVJh
ZGl1cyhmcm9tKTsKIAotICAgICAgICByZXR1cm4gQmFzaWNTaGFwZVJhZGl1cyhXZWJDb3JlOjpi
bGVuZChmcm9tLnZhbHVlKCksIHZhbHVlKCksIHByb2dyZXNzKSk7CisgICAgICAgIHJldHVybiBC
YXNpY1NoYXBlUmFkaXVzKFdlYkNvcmU6OmJsZW5kKGZyb20udmFsdWUoKSwgdmFsdWUoKSwgY29u
dGV4dCkpOwogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQmFzaWNTaGFw
ZVJhZGl1cyYgb3RoZXIpIGNvbnN0CkBAIC0xODMsNyArMTg0LDcgQEAgcHJpdmF0ZToKICAgICBj
b25zdCBQYXRoJiBwYXRoKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBj
YW5CbGVuZChjb25zdCBCYXNpY1NoYXBlJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUmVmPEJhc2lj
U2hhcGU+IGJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIGZyb20sIGRvdWJsZSkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgUmVmPEJhc2ljU2hhcGU+IGJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIGZyb20sIGNv
bnN0IEJsZW5kaW5nQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEJhc2ljU2hhcGUmKSBjb25zdCBvdmVycmlkZTsKIApAQCAtMjE3LDcgKzIxOCw3
IEBAIHByaXZhdGU6CiAgICAgY29uc3QgUGF0aCYgcGF0aChjb25zdCBGbG9hdFJlY3QmKSBvdmVy
cmlkZTsKIAogICAgIGJvb2wgY2FuQmxlbmQoY29uc3QgQmFzaWNTaGFwZSYpIGNvbnN0IG92ZXJy
aWRlOwotICAgIFJlZjxCYXNpY1NoYXBlPiBibGVuZChjb25zdCBCYXNpY1NoYXBlJiBmcm9tLCBk
b3VibGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxCYXNpY1NoYXBlPiBibGVuZChjb25zdCBC
YXNpY1NoYXBlJiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCYXNpY1NoYXBlJikgY29uc3Qgb3ZlcnJpZGU7
CiAKQEAgLTI1MCw3ICsyNTEsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IFBhdGgmIHBhdGgoY29u
c3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICBib29sIGNhbkJsZW5kKGNvbnN0IEJhc2lj
U2hhcGUmKSBjb25zdCBvdmVycmlkZTsKLSAgICBSZWY8QmFzaWNTaGFwZT4gYmxlbmQoY29uc3Qg
QmFzaWNTaGFwZSYgZnJvbSwgZG91YmxlKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWY8QmFzaWNT
aGFwZT4gYmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQmFzaWNTaGFw
ZSYpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0yODIsNyArMjgzLDcgQEAgcHJpdmF0ZToKICAgICBj
b25zdCBQYXRoJiBwYXRoKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBj
YW5CbGVuZChjb25zdCBCYXNpY1NoYXBlJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUmVmPEJhc2lj
U2hhcGU+IGJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIGZyb20sIGRvdWJsZSkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgUmVmPEJhc2ljU2hhcGU+IGJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIGZyb20sIGNv
bnN0IEJsZW5kaW5nQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEJhc2ljU2hhcGUmKSBjb25zdCBvdmVycmlkZTsKIApAQCAtMzI1LDcgKzMyNiw3
IEBAIHByaXZhdGU6CiAgICAgY29uc3QgUGF0aCYgcGF0aChjb25zdCBGbG9hdFJlY3QmKSBvdmVy
cmlkZTsKIAogICAgIGJvb2wgY2FuQmxlbmQoY29uc3QgQmFzaWNTaGFwZSYpIGNvbnN0IG92ZXJy
aWRlOwotICAgIFJlZjxCYXNpY1NoYXBlPiBibGVuZChjb25zdCBCYXNpY1NoYXBlJiBmcm9tLCBk
b3VibGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxCYXNpY1NoYXBlPiBibGVuZChjb25zdCBC
YXNpY1NoYXBlJiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCYXNpY1NoYXBlJikgY29uc3Qgb3ZlcnJpZGU7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlYWJsZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZWFibGUuY3BwCmluZGV4IDk2ZDU1YTgyZTk2OTA0NGZiZWMw
MzY5NThkZDYwYjFkZWVkYzcxNWUuLjc2NTNjMTY5YThmODRjNWFmMDUyYmFmMTI1ZjgwY2QwN2Y4
OWQ3YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlYWJsZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVhYmxlLmNwcApAQCAtMjM0LDcgKzIzNCw3IEBA
IHN0YXRpYyBLZXlmcmFtZUVmZmVjdCoga2V5ZnJhbWVFZmZlY3RGb3JFbGVtZW50QW5kUHJvcGVy
dHkoY29uc3QgU3R5bGVhYmxlJiBzdHlsCiBzdGF0aWMgYm9vbCBwcm9wZXJ0eUluU3R5bGVNYXRj
aGVzVmFsdWVGb3JUcmFuc2l0aW9uSW5NYXAoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBQcm9wZXJ0eVRvVHJhbnNpdGlvbk1hcCYgdHJhbnNpdGlvbnMp
CiB7CiAgICAgaWYgKGF1dG8qIHRyYW5zaXRpb24gPSB0cmFuc2l0aW9ucy5nZXQocHJvcGVydHkp
KSB7Ci0gICAgICAgIGlmIChDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKHBy
b3BlcnR5LCAmc3R5bGUsICZ0cmFuc2l0aW9uLT50YXJnZXRTdHlsZSgpKSkKKyAgICAgICAgaWYg
KENTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwocHJvcGVydHksIHN0eWxlLCB0
cmFuc2l0aW9uLT50YXJnZXRTdHlsZSgpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNTYsOCArMzU2LDggQEAgc3RhdGljIHZvaWQgdXBk
YXRlQ1NTVHJhbnNpdGlvbnNGb3JTdHlsZWFibGVBbmRQcm9wZXJ0eShjb25zdCBTdHlsZWFibGUm
IHN0eWxlYWIKICAgICB9KCk7CiAKICAgICBpZiAoIXN0eWxlYWJsZS5oYXNSdW5uaW5nVHJhbnNp
dGlvbkZvclByb3BlcnR5KHByb3BlcnR5KQotICAgICAgICAmJiAhQ1NTUHJvcGVydHlBbmltYXRp
b246OnByb3BlcnRpZXNFcXVhbChwcm9wZXJ0eSwgJmJlZm9yZUNoYW5nZVN0eWxlLCAmYWZ0ZXJD
aGFuZ2VTdHlsZSkKLSAgICAgICAgJiYgQ1NTUHJvcGVydHlBbmltYXRpb246OmNhblByb3BlcnR5
QmVJbnRlcnBvbGF0ZWQocHJvcGVydHksICZiZWZvcmVDaGFuZ2VTdHlsZSwgJmFmdGVyQ2hhbmdl
U3R5bGUpCisgICAgICAgICYmICFDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6cHJvcGVydGllc0VxdWFs
KHByb3BlcnR5LCBiZWZvcmVDaGFuZ2VTdHlsZSwgYWZ0ZXJDaGFuZ2VTdHlsZSkKKyAgICAgICAg
JiYgQ1NTUHJvcGVydHlBbmltYXRpb246OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQocHJvcGVy
dHksIGJlZm9yZUNoYW5nZVN0eWxlLCBhZnRlckNoYW5nZVN0eWxlKQogICAgICAgICAmJiAhcHJv
cGVydHlJblN0eWxlTWF0Y2hlc1ZhbHVlRm9yVHJhbnNpdGlvbkluTWFwKHByb3BlcnR5LCBhZnRl
ckNoYW5nZVN0eWxlLCBzdHlsZWFibGUuZW5zdXJlQ29tcGxldGVkVHJhbnNpdGlvbnNCeVByb3Bl
cnR5KCkpCiAgICAgICAgICYmIG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbiAmJiB0cmFuc2l0aW9u
Q29tYmluZWREdXJhdGlvbihtYXRjaGluZ0JhY2tpbmdBbmltYXRpb24pID4gMCkgewogICAgICAg
ICAvLyAxLiBJZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZToKQEAgLTQwMywxNSArNDAz
LDE1IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUNTU1RyYW5zaXRpb25zRm9yU3R5bGVhYmxlQW5kUHJv
cGVydHkoY29uc3QgU3R5bGVhYmxlJiBzdHlsZWFiCiAgICAgICAgIGF1dG8mIHByZXZpb3VzbHlS
dW5uaW5nVHJhbnNpdGlvbkN1cnJlbnRTdHlsZSA9IHByZXZpb3VzbHlSdW5uaW5nVHJhbnNpdGlv
bi0+Y3VycmVudFN0eWxlKCk7CiAgICAgICAgIC8vIDQuIElmIHRoZSBlbGVtZW50IGhhcyBhIHJ1
bm5pbmcgdHJhbnNpdGlvbiBmb3IgdGhlIHByb3BlcnR5LCB0aGVyZSBpcyBhIG1hdGNoaW5nIHRy
YW5zaXRpb24tcHJvcGVydHkgdmFsdWUsIGFuZCB0aGUgZW5kIHZhbHVlIG9mIHRoZSBydW5uaW5n
CiAgICAgICAgIC8vICAgIHRyYW5zaXRpb24gaXMgbm90IGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiB0
aGUgcHJvcGVydHkgaW4gdGhlIGFmdGVyLWNoYW5nZSBzdHlsZSwgdGhlbjoKLSAgICAgICAgaWYg
KENTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwocHJvcGVydHksICZwcmV2aW91
c2x5UnVubmluZ1RyYW5zaXRpb25DdXJyZW50U3R5bGUsICZhZnRlckNoYW5nZVN0eWxlKSB8fCAh
Q1NTUHJvcGVydHlBbmltYXRpb246OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQocHJvcGVydHks
ICZjdXJyZW50U3R5bGUsICZhZnRlckNoYW5nZVN0eWxlKSkgeworICAgICAgICBpZiAoQ1NTUHJv
cGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChwcm9wZXJ0eSwgcHJldmlvdXNseVJ1bm5p
bmdUcmFuc2l0aW9uQ3VycmVudFN0eWxlLCBhZnRlckNoYW5nZVN0eWxlKSB8fCAhQ1NTUHJvcGVy
dHlBbmltYXRpb246OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQocHJvcGVydHksIGN1cnJlbnRT
dHlsZSwgYWZ0ZXJDaGFuZ2VTdHlsZSkpIHsKICAgICAgICAgICAgIC8vIDEuIElmIHRoZSBjdXJy
ZW50IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgcnVubmluZyB0cmFuc2l0aW9uIGlzIGVx
dWFsIHRvIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIGFmdGVyLWNoYW5nZSBzdHls
ZSwKICAgICAgICAgICAgIC8vICAgIG9yIGlmIHRoZXNlIHR3byB2YWx1ZXMgY2Fubm90IGJlIGlu
dGVycG9sYXRlZCwgdGhlbiBpbXBsZW1lbnRhdGlvbnMgbXVzdCBjYW5jZWwgdGhlIHJ1bm5pbmcg
dHJhbnNpdGlvbi4KICAgICAgICAgICAgIHByZXZpb3VzbHlSdW5uaW5nVHJhbnNpdGlvbi0+Y2Fu
Y2VsRnJvbVN0eWxlKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodHJhbnNpdGlvbkNvbWJpbmVkRHVy
YXRpb24obWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uKSA8PSAwLjAgfHwgIUNTU1Byb3BlcnR5QW5p
bWF0aW9uOjpjYW5Qcm9wZXJ0eUJlSW50ZXJwb2xhdGVkKHByb3BlcnR5LCAmcHJldmlvdXNseVJ1
bm5pbmdUcmFuc2l0aW9uQ3VycmVudFN0eWxlLCAmYWZ0ZXJDaGFuZ2VTdHlsZSkpIHsKKyAgICAg
ICAgfSBlbHNlIGlmICh0cmFuc2l0aW9uQ29tYmluZWREdXJhdGlvbihtYXRjaGluZ0JhY2tpbmdB
bmltYXRpb24pIDw9IDAuMCB8fCAhQ1NTUHJvcGVydHlBbmltYXRpb246OmNhblByb3BlcnR5QmVJ
bnRlcnBvbGF0ZWQocHJvcGVydHksIHByZXZpb3VzbHlSdW5uaW5nVHJhbnNpdGlvbkN1cnJlbnRT
dHlsZSwgYWZ0ZXJDaGFuZ2VTdHlsZSkpIHsKICAgICAgICAgICAgIC8vIDIuIE90aGVyd2lzZSwg
aWYgdGhlIGNvbWJpbmVkIGR1cmF0aW9uIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAwcywgb3Ig
aWYgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBydW5uaW5nIHRyYW5z
aXRpb24KICAgICAgICAgICAgIC8vICAgIGNhbm5vdCBiZSBpbnRlcnBvbGF0ZWQgd2l0aCB0aGUg
dmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBhZnRlci1jaGFuZ2Ugc3R5bGUsIHRoZW4gaW1w
bGVtZW50YXRpb25zIG11c3QgY2FuY2VsIHRoZSBydW5uaW5nIHRyYW5zaXRpb24uCiAgICAgICAg
ICAgICBwcmV2aW91c2x5UnVubmluZ1RyYW5zaXRpb24tPmNhbmNlbEZyb21TdHlsZSgpOwotICAg
ICAgICB9IGVsc2UgaWYgKENTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwocHJv
cGVydHksICZwcmV2aW91c2x5UnVubmluZ1RyYW5zaXRpb24tPnJldmVyc2luZ0FkanVzdGVkU3Rh
cnRTdHlsZSgpLCAmYWZ0ZXJDaGFuZ2VTdHlsZSkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChDU1NQ
cm9wZXJ0eUFuaW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKHByb3BlcnR5LCBwcmV2aW91c2x5UnVu
bmluZ1RyYW5zaXRpb24tPnJldmVyc2luZ0FkanVzdGVkU3RhcnRTdHlsZSgpLCBhZnRlckNoYW5n
ZVN0eWxlKSkgewogICAgICAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiB0aGUgcmV2ZXJzaW5n
LWFkanVzdGVkIHN0YXJ0IHZhbHVlIG9mIHRoZSBydW5uaW5nIHRyYW5zaXRpb24gaXMgdGhlIHNh
bWUgYXMgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgYWZ0ZXItY2hhbmdlCiAgICAg
ICAgICAgICAvLyAgICBzdHlsZSAoc2VlIHRoZSBzZWN0aW9uIG9uIHJldmVyc2luZyBvZiB0cmFu
c2l0aW9ucyBmb3Igd2h5IHRoZXNlIGNhc2UgZXhpc3RzKSwgaW1wbGVtZW50YXRpb25zIG11c3Qg
Y2FuY2VsIHRoZSBydW5uaW5nIHRyYW5zaXRpb24KICAgICAgICAgICAgIHByZXZpb3VzbHlSdW5u
aW5nVHJhbnNpdGlvbi0+Y2FuY2VsRnJvbVN0eWxlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425846</attachid>
            <date>2021-04-13 01:37:48 -0700</date>
            <delta_ts>2021-04-14 11:20:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224433-20210413103746.patch</filename>
            <type>text/plain</type>
            <size>175938</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1ODY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTBkNzlmMGRmOWRlNDI4
MWQ0MGZhZTg1MDIxNWUzN2MzNGViMWRiZC4uMWNjNWQ1YjliYzNlZDZkNTdiZjY3Y2QwMGRlY2M4
Zjk5MmVlMDJhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMSBAQAorMjAyMS0wNC0xMiAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZWZhY3RvciBwYXJh
bWV0ZXJzIHRvIGJsZW5kaW5nIGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0NDMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmVkdWNlIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBwYXNz
ZWQgdG8gdGhlIGJsZW5kaW5nIGZ1bmN0aW9ucyBzdWNoIHRoYXQgd2UgcGFja2FnZQorICAgICAg
ICB0aGUgY2xpZW50IGFuZCBwcm9ncmVzcyB0b2dldGhlciBhbmQgdHJhY2sgd2hldGhlciB0aGUg
YW5pbWF0aW9uIGlzIGRpc2NyZXRlIGluc3RlYWQKKyAgICAgICAgb2YgY29tcHV0aW5nIGl0IHNl
dmVyYWwgdGltZXMuIFRoaXMgaW5mb3JtYXRpb24gaXMgbm93IHBhc3NlZCBhcyBhIEJsZW5kaW5n
Q29udGV4dAorICAgICAgICBwYXJhbWV0ZXIsIGFuZCBhIENTU1Byb3BlcnR5QmxlbmRpbmdDb250
ZXh0IHByaXZhdGUgdG8gQ1NTUHJvcGVydHlBbmltYXRpb24uCisgCisgICAgICAgIFdoZW4gd2Ug
c3VwcG9ydCBjb21wb3NpdGUgb3BlcnRpb25zLCB3ZSdsbCBqdXN0IG5lZWQgdG8gYWRkIGEgbmV3
IG1lbWJlciB0byB0aGF0CisgICAgICAgIHN0cnVjdCBpbnN0ZWFkIG9mIG1vZGlmeWluZyBhbGwg
dGhlIG1ldGhvZCBzaWduYXR1cmVzLgorCisgICAgICAgIFNpbmNlIHdlIGFyZSBtb2RpZnlpbmcg
dGhlIG1ldGhvZCBzaWduYXR1cmVzLCB3ZSBhbHNvIGNoYW5nZSB0aGUgUmVuZGVyU3R5bGUgcG9p
bnRlcnMKKyAgICAgICAgdG8gcmVmZXJlbmNlcyBzaW5jZSB3ZSB3b3VsZCBuZXZlciBwYXNzIGlu
IGEgbnVsbCB2YWx1ZS4KKworICAgICAgICAqIGFuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dDo6Q1NT
UHJvcGVydHlCbGVuZGluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRGdW5jKToK
KyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRmlsdGVyT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpibGVuZEZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpjcm9zc2ZhZGVCbGVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlOjpjYW5JbnRlcnBv
bGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI6OnZh
bHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNhbkludGVycG9sYXRlQ2FyZXRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0aWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1
YWwpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlBbmltYXRpb246OmNhblByb3BlcnR5
QmVJbnRlcnBvbGF0ZWQpOgorICAgICAgICAqIGFuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlv
bi5oOgorICAgICAgICAqIGFuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpLZXlmcmFtZUVmZmVjdDo6c2V0QW5pbWF0ZWRQcm9wZXJ0aWVzSW5TdHlsZSk6Cisg
ICAgICAgICogY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJs
ZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDcm9zc2ZhZGVWYWx1ZTo6YmxlbmQgY29u
c3QpOgorICAgICAgICAqIGNzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5oOgorICAgICAgICAqIGNzcy9D
U1NHcmFkaWVudFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlhbEdyYWRpZW50QWRh
cHRlcjo6bm9ybWFsaXplU3RvcHNBbmRFbmRwb2ludHNPdXRzaWRlUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q29uaWNHcmFkaWVudEFkYXB0ZXI6Om5vcm1hbGl6ZVN0b3BzQW5kRW5kcG9pbnRz
T3V0c2lkZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRpZW50VmFsdWU6OmNvbXB1
dGVTdG9wcyk6CisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmJsZW5kTWl4ZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpibGVuZCk6CisgICAgICAg
ICogcGxhdGZvcm0vTGVuZ3RoLmg6CisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoUG9pbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OmJsZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MZW5ndGhTaXpl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpibGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vYW5pbWF0
aW9uL0FuaW1hdGlvblV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6QmxlbmRpbmdDb250
ZXh0OjpCbGVuZGluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6YmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRXaXRob3V0UHJlbXVsdGlwbHkpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246
OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb246OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkludmVydExpZ2h0bmVzc0ZpbHRl
ck9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6Qmx1ckZpbHRlck9wZXJhdGlv
bjo6YmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6
YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OmJsZW5kKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0
aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXgzRFRy
YW5zZm9ybU9wZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVPcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNmb3Jt
T3BlcmF0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRy
aXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWF0cml4VHJhbnNm
b3JtT3BlcmF0aW9uOjpibGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL1BlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9w
ZXJhdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUm90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5zZm9ybU9wZXJhdGlv
bi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3Bl
cmF0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zv
cm1PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbnM6
OmJsZW5kQnlNYXRjaGluZ09wZXJhdGlvbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJh
bnNmb3JtT3BlcmF0aW9uczo6YmxlbmRCeVVzaW5nTWF0cml4SW50ZXJwb2xhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb25zOjpibGVuZCBjb25zdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25z
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpibGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5
bGUvQmFzaWNTaGFwZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzaWNTaGFwZUNpcmNsZTo6
YmxlbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFzaWNTaGFwZUVsbGlwc2U6OmJsZW5k
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljU2hhcGVQb2x5Z29uOjpibGVuZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY1NoYXBlUGF0aDo6YmxlbmQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6QmFzaWNTaGFwZUluc2V0OjpibGVuZCBjb25zdCk6CisgICAgICAgICog
cmVuZGVyaW5nL3N0eWxlL0Jhc2ljU2hhcGVzLmg6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY1No
YXBlQ2VudGVyQ29vcmRpbmF0ZTo6YmxlbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFz
aWNTaGFwZVJhZGl1czo6YmxlbmQgY29uc3QpOgorICAgICAgICAqIHN0eWxlL1N0eWxlYWJsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwcm9wZXJ0eUluU3R5bGVNYXRjaGVzVmFsdWVGb3JUcmFu
c2l0aW9uSW5NYXApOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JT
dHlsZWFibGVBbmRQcm9wZXJ0eSk6CisKIDIwMjEtMDQtMTMgIEFudG9pbmUgUXVpbnQgIDxncmFv
dXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgY2FsYygpIHNpbXBsaWZpY2F0aW9uIGZvciBhIG11
bHRpcGxpY2F0aW9uIHNob3VsZCBhcHBseSB0aGUgbXVsdGlwbGljYXRpb24gdG8gZWFjaCB2YWx1
ZSBvZiBhbiBhZGRpdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NT
U1Byb3BlcnR5QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9w
ZXJ0eUFuaW1hdGlvbi5jcHAKaW5kZXggNDcyYThmODcyYTY4MzNhMmYxOGVmYmEwNGFkMGQzMzA0
MjQ3OGY3My4uMWE4Zjc5NTZmY2FkNTkwMjA0MzRkOGIzMmEwMTY3NDRiMDVjNzE2NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCkBA
IC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlBbmltYXRpb24uaCIKIAorI2luY2x1ZGUgIkFuaW1hdGlvblV0aWxpdGllcy5oIgogI2luY2x1
ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU0Nyb3NzZmFk
ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oIgpAQCAtNzAsODcgKzcx
LDk3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGlubGluZSBpbnQgYmxlbmRG
dW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBpbnQgZnJvbSwgaW50IHRvLCBk
b3VibGUgcHJvZ3Jlc3MpCitzdHJ1Y3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQgOiBCbGVu
ZGluZ0NvbnRleHQgeworICAgIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVu
dDsKKworICAgIENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0KGRvdWJsZSBwcm9ncmVzcywgYm9v
bCBpc0Rpc2NyZXRlLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQpCisg
ICAgICAgIDogQmxlbmRpbmdDb250ZXh0KHByb2dyZXNzLCBpc0Rpc2NyZXRlKQorICAgICAgICAs
IGNsaWVudChjbGllbnQpCisgICAgeworICAgIH0KK307CisKK3N0YXRpYyBpbmxpbmUgaW50IGJs
ZW5kRnVuYyhpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4
dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAg
ICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIGNvbnRleHQpOwogfQogCi1zdGF0aWMgaW5saW5lIGRv
dWJsZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGRvdWJsZSBm
cm9tLCBkb3VibGUgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgZG91YmxlIGJs
ZW5kRnVuYyhkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNz
KTsKKyAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIGNvbnRleHQpOwogfQogCi1zdGF0aWMgaW5s
aW5lIGZsb2F0IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgZmxv
YXQgZnJvbSwgZmxvYXQgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgZmxvYXQg
YmxlbmRGdW5jKGZsb2F0IGZyb20sIGZsb2F0IHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9GbG9hdChm
cm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVzcyk7CisgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoZnJvbSArICh0byAtIGZyb20pICogY29udGV4dC5wcm9ncmVzcyk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgQ29sb3IgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqLCBjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
CitzdGF0aWMgaW5saW5lIENvbG9yIGJsZW5kRnVuYyhjb25zdCBDb2xvciYgZnJvbSwgY29uc3Qg
Q29sb3ImIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsK
LSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAgICByZXR1cm4gYmxlbmQo
ZnJvbSwgdG8sIGNvbnRleHQpOwogfQogCi1zdGF0aWMgaW5saW5lIExlbmd0aCBibGVuZEZ1bmMo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IExlbmd0aCYgZnJvbSwgY29u
c3QgTGVuZ3RoJiB0bywgZG91YmxlIHByb2dyZXNzLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBW
YWx1ZVJhbmdlQWxsKQorc3RhdGljIGlubGluZSBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IExlbmd0
aCYgZnJvbSwgY29uc3QgTGVuZ3RoJiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRl
eHQmIGNvbnRleHQsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2VBbGwpCiB7Ci0g
ICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9ncmVzcywgdmFsdWVSYW5nZSk7CisgICAgcmV0
dXJuIGJsZW5kKGZyb20sIHRvLCBjb250ZXh0LCB2YWx1ZVJhbmdlKTsKIH0KIAotc3RhdGljIGlu
bGluZSBHYXBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
LCBjb25zdCBHYXBMZW5ndGgmIGZyb20sIGNvbnN0IEdhcExlbmd0aCYgdG8sIGRvdWJsZSBwcm9n
cmVzcykKK3N0YXRpYyBpbmxpbmUgR2FwTGVuZ3RoIGJsZW5kRnVuYyhjb25zdCBHYXBMZW5ndGgm
IGZyb20sIGNvbnN0IEdhcExlbmd0aCYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250
ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChmcm9tLmlzTm9ybWFsKCkgfHwgdG8uaXNOb3JtYWwo
KSkKLSAgICAgICAgcmV0dXJuIHByb2dyZXNzIDwgMC41ID8gZnJvbSA6IHRvOwotICAgIHJldHVy
biBibGVuZChmcm9tLmxlbmd0aCgpLCB0by5sZW5ndGgoKSwgcHJvZ3Jlc3MsIFZhbHVlUmFuZ2VO
b25OZWdhdGl2ZSk7CisgICAgICAgIHJldHVybiBjb250ZXh0LnByb2dyZXNzIDwgMC41ID8gZnJv
bSA6IHRvOworICAgIHJldHVybiBibGVuZChmcm9tLmxlbmd0aCgpLCB0by5sZW5ndGgoKSwgY29u
dGV4dCwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKIH0KIAotc3RhdGljIGlubGluZSBUYWJTaXpl
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgY29uc3QgVGFiU2l6
ZSYgZnJvbSwgY29uc3QgVGFiU2l6ZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxp
bmUgVGFiU2l6ZSBibGVuZEZ1bmMoY29uc3QgVGFiU2l6ZSYgZnJvbSwgY29uc3QgVGFiU2l6ZSYg
dG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewotICAgIGF1
dG8gYmxlbmRlZFZhbHVlID0gYmxlbmQoZnJvbS52YWx1ZSgpLCB0by52YWx1ZSgpLCBwcm9ncmVz
cyk7CisgICAgYXV0byBibGVuZGVkVmFsdWUgPSBibGVuZChmcm9tLnZhbHVlKCksIHRvLnZhbHVl
KCksIGNvbnRleHQpOwogICAgIHJldHVybiB7IGJsZW5kZWRWYWx1ZSA8IDAgPyAwIDogYmxlbmRl
ZFZhbHVlLCBmcm9tLmlzU3BhY2VzKCkgPyBTcGFjZVZhbHVlVHlwZSA6IExlbmd0aFZhbHVlVHlw
ZSB9OwogfQogCi1zdGF0aWMgaW5saW5lIExlbmd0aFNpemUgYmxlbmRGdW5jKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgY29uc3QgTGVuZ3RoU2l6ZSYgZnJvbSwgY29u
c3QgTGVuZ3RoU2l6ZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgTGVuZ3Ro
U2l6ZSBibGVuZEZ1bmMoY29uc3QgTGVuZ3RoU2l6ZSYgZnJvbSwgY29uc3QgTGVuZ3RoU2l6ZSYg
dG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJl
dHVybiB7IGJsZW5kRnVuYyhjbGllbnQsIGZyb20ud2lkdGgsIHRvLndpZHRoLCBwcm9ncmVzcywg
VmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSwKLSAgICAgICAgICAgICBibGVuZEZ1bmMoY2xpZW50LCBm
cm9tLmhlaWdodCwgdG8uaGVpZ2h0LCBwcm9ncmVzcywgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSB9
OworICAgIHJldHVybiB7IGJsZW5kRnVuYyhmcm9tLndpZHRoLCB0by53aWR0aCwgY29udGV4dCwg
VmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSwKKyAgICAgICAgICAgICBibGVuZEZ1bmMoZnJvbS5oZWln
aHQsIHRvLmhlaWdodCwgY29udGV4dCwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSB9OwogfQogCi1z
dGF0aWMgaW5saW5lIExlbmd0aFBvaW50IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiwgY29uc3QgTGVuZ3RoUG9pbnQmIGZyb20sIGNvbnN0IExlbmd0aFBvaW50JiB0
bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBMZW5ndGhQb2ludCBibGVuZEZ1bmMo
Y29uc3QgTGVuZ3RoUG9pbnQmIGZyb20sIGNvbnN0IExlbmd0aFBvaW50JiB0bywgY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGJsZW5kKGZy
b20sIHRvLCBwcm9ncmVzcyk7CisgICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBjb250ZXh0KTsK
IH0KIAotc3RhdGljIGlubGluZSBTaGFkb3dTdHlsZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBTaGFkb3dTdHlsZSBmcm9tLCBTaGFkb3dTdHlsZSB0
bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBTaGFkb3dTdHlsZSBibGVuZEZ1bmMo
U2hhZG93U3R5bGUgZnJvbSwgU2hhZG93U3R5bGUgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChmcm9tID09IHRvKQogICAgICAgICByZXR1
cm4gdG87CiAKICAgICBkb3VibGUgZnJvbVZhbCA9IGZyb20gPT0gU2hhZG93U3R5bGU6Ok5vcm1h
bCA/IDEgOiAwOwogICAgIGRvdWJsZSB0b1ZhbCA9IHRvID09IFNoYWRvd1N0eWxlOjpOb3JtYWwg
PyAxIDogMDsKLSAgICBkb3VibGUgcmVzdWx0ID0gYmxlbmRGdW5jKGNsaWVudCwgZnJvbVZhbCwg
dG9WYWwsIHByb2dyZXNzKTsKKyAgICBkb3VibGUgcmVzdWx0ID0gYmxlbmRGdW5jKGZyb21WYWws
IHRvVmFsLCBjb250ZXh0KTsKICAgICByZXR1cm4gcmVzdWx0ID4gMCA/IFNoYWRvd1N0eWxlOjpO
b3JtYWwgOiBTaGFkb3dTdHlsZTo6SW5zZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RkOjp1bmlx
dWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBjbGllbnQsIGNvbnN0IFNoYWRvd0RhdGEqIGZyb20sIGNvbnN0IFNoYWRvd0RhdGEqIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dE
YXRhPiBibGVuZEZ1bmMoY29uc3QgU2hhZG93RGF0YSogZnJvbSwgY29uc3QgU2hhZG93RGF0YSog
dG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIEFT
U0VSVChmcm9tICYmIHRvKTsKICAgICBBU1NFUlQoZnJvbS0+c3R5bGUoKSA9PSB0by0+c3R5bGUo
KSk7CiAKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPihibGVuZChmcm9tLT5sb2Nh
dGlvbigpLCB0by0+bG9jYXRpb24oKSwgcHJvZ3Jlc3MpLAotICAgICAgICBzdGQ6Om1heCgwLCBi
bGVuZChmcm9tLT5yYWRpdXMoKSwgdG8tPnJhZGl1cygpLCBwcm9ncmVzcykpLAotICAgICAgICBi
bGVuZChmcm9tLT5zcHJlYWQoKSwgdG8tPnNwcmVhZCgpLCBwcm9ncmVzcyksCi0gICAgICAgIGJs
ZW5kRnVuYyhjbGllbnQsIGZyb20tPnN0eWxlKCksIHRvLT5zdHlsZSgpLCBwcm9ncmVzcyksCisg
ICAgcmV0dXJuIG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oYmxlbmQoZnJvbS0+bG9jYXRpb24oKSwg
dG8tPmxvY2F0aW9uKCksIGNvbnRleHQpLAorICAgICAgICBzdGQ6Om1heCgwLCBibGVuZChmcm9t
LT5yYWRpdXMoKSwgdG8tPnJhZGl1cygpLCBjb250ZXh0KSksCisgICAgICAgIGJsZW5kKGZyb20t
PnNwcmVhZCgpLCB0by0+c3ByZWFkKCksIGNvbnRleHQpLAorICAgICAgICBibGVuZEZ1bmMoZnJv
bS0+c3R5bGUoKSwgdG8tPnN0eWxlKCksIGNvbnRleHQpLAogICAgICAgICBmcm9tLT5pc1dlYmtp
dEJveFNoYWRvdygpLAotICAgICAgICBibGVuZChmcm9tLT5jb2xvcigpLCB0by0+Y29sb3IoKSwg
cHJvZ3Jlc3MpKTsKKyAgICAgICAgYmxlbmQoZnJvbS0+Y29sb3IoKSwgdG8tPmNvbG9yKCksIGNv
bnRleHQpKTsKIH0KIAotc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kRnVu
Yyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIGNvbnN0IFRyYW5zZm9y
bU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRGdW5jKGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMm
IHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBp
ZiAoY2xpZW50LT50cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2goKSkKLSAgICAgICAgcmV0dXJu
IHRvLmJsZW5kQnlNYXRjaGluZ09wZXJhdGlvbnMoZnJvbSwgcHJvZ3Jlc3MpOwotICAgIHJldHVy
biB0by5ibGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9uKGZyb20sIHByb2dyZXNzLCBpczxS
ZW5kZXJCb3g+KGNsaWVudC0+cmVuZGVyZXIoKSkgPyBkb3duY2FzdDxSZW5kZXJCb3g+KCpjbGll
bnQtPnJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKS5zaXplKCkgOiBMYXlvdXRTaXplKCkpOwor
ICAgIGlmIChjb250ZXh0LmNsaWVudC0+dHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNoKCkpCisg
ICAgICAgIHJldHVybiB0by5ibGVuZEJ5TWF0Y2hpbmdPcGVyYXRpb25zKGZyb20sIGNvbnRleHQp
OworICAgIHJldHVybiB0by5ibGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9uKGZyb20sIGNv
bnRleHQsIGlzPFJlbmRlckJveD4oY29udGV4dC5jbGllbnQtPnJlbmRlcmVyKCkpID8gZG93bmNh
c3Q8UmVuZGVyQm94PigqY29udGV4dC5jbGllbnQtPnJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3Qo
KS5zaXplKCkgOiBMYXlvdXRTaXplKCkpOwogfQogCi1zdGF0aWMgUmVmUHRyPFNjYWxlVHJhbnNm
b3JtT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCog
Y2xpZW50LCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgU2NhbGVUcmFuc2Zvcm1PcGVy
YXRpb24qIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgUmVmUHRyPFNjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uPiBibGVuZEZ1bmMoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIFNjYWxl
VHJhbnNmb3JtT3BlcmF0aW9uKiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQm
IGNvbnRleHQpCiB7CiAgICAgaWYgKCFmcm9tICYmICF0bykKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CkBAIC0xNzUsMTAgKzE4NiwxMCBAQCBzdGF0aWMgUmVmUHRyPFNjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudAogICAgICAg
ICAgICAgbm9ybWFsaXplZEZyb20gPSBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGZy
b20tPngoKSwgZnJvbS0+eSgpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFKTsKICAgICAgICAg
ICAgIG5vcm1hbGl6ZWRUbyA9IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodG8tPngo
KSwgdG8tPnkoKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRSk7CiAgICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIGJsZW5kRnVuYyhjbGllbnQsIG5vcm1hbGl6ZWRGcm9tLmdldCgpLCBub3JtYWxp
emVkVG8uZ2V0KCksIHByb2dyZXNzKTsKKyAgICAgICAgcmV0dXJuIGJsZW5kRnVuYyhub3JtYWxp
emVkRnJvbS5nZXQoKSwgbm9ybWFsaXplZFRvLmdldCgpLCBjb250ZXh0KTsKICAgICB9CiAKLSAg
ICBhdXRvIGJsZW5kZWRPcGVyYXRpb24gPSB0by0+YmxlbmQoZnJvbSwgcHJvZ3Jlc3MpOworICAg
IGF1dG8gYmxlbmRlZE9wZXJhdGlvbiA9IHRvLT5ibGVuZChmcm9tLCBjb250ZXh0KTsKICAgICBp
ZiAoaXM8U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24+KGJsZW5kZWRPcGVyYXRpb24uZ2V0KCkpKSB7
CiAgICAgICAgIGF1dG8mIHNjYWxlID0gZG93bmNhc3Q8U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24+
KGJsZW5kZWRPcGVyYXRpb24uZ2V0KCkpOwogICAgICAgICByZXR1cm4gU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShzY2FsZS54KCksIHNjYWxlLnkoKSwgc2NhbGUueigpLCBzY2FsZS50
eXBlKCkpOwpAQCAtMTg2LDcgKzE5Nyw3IEBAIHN0YXRpYyBSZWZQdHI8U2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb24+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50CiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZWZQdHI8Um90YXRlVHJhbnNmb3JtT3BlcmF0
aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBS
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiog
dG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBSZWZQdHI8Um90YXRlVHJhbnNmb3JtT3BlcmF0
aW9uPiBibGVuZEZ1bmMoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBSb3RhdGVUcmFu
c2Zvcm1PcGVyYXRpb24qIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29u
dGV4dCkKIHsKICAgICBpZiAoIWZyb20gJiYgIXRvKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
QEAgLTIxMSwxMCArMjIyLDEwIEBAIHN0YXRpYyBSZWZQdHI8Um90YXRlVHJhbnNmb3JtT3BlcmF0
aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVuCiAgICAgICAgICAg
ICBub3JtYWxpemVkRnJvbSA9IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGZyb20t
PmFuZ2xlKCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFKTsKICAgICAgICAgICAgIG5vcm1h
bGl6ZWRUbyA9IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRvLT5hbmdsZSgpLCBU
cmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJs
ZW5kRnVuYyhjbGllbnQsIG5vcm1hbGl6ZWRGcm9tLmdldCgpLCBub3JtYWxpemVkVG8uZ2V0KCks
IHByb2dyZXNzKTsKKyAgICAgICAgcmV0dXJuIGJsZW5kRnVuYyhub3JtYWxpemVkRnJvbS5nZXQo
KSwgbm9ybWFsaXplZFRvLmdldCgpLCBjb250ZXh0KTsKICAgICB9CiAKLSAgICBhdXRvIGJsZW5k
ZWRPcGVyYXRpb24gPSB0by0+YmxlbmQoZnJvbSwgcHJvZ3Jlc3MpOworICAgIGF1dG8gYmxlbmRl
ZE9wZXJhdGlvbiA9IHRvLT5ibGVuZChmcm9tLCBjb250ZXh0KTsKICAgICBpZiAoaXM8Um90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uPihibGVuZGVkT3BlcmF0aW9uLmdldCgpKSkgewogICAgICAgICBh
dXRvJiByb3RhdGUgPSBkb3duY2FzdDxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24+KGJsZW5kZWRP
cGVyYXRpb24uZ2V0KCkpOwogICAgICAgICByZXR1cm4gUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUocm90YXRlLngoKSwgcm90YXRlLnkoKSwgcm90YXRlLnooKSwgcm90YXRlLmFuZ2xl
KCksIHJvdGF0ZS50eXBlKCkpOwpAQCAtMjIyLDcgKzIzMyw3IEBAIHN0YXRpYyBSZWZQdHI8Um90
YXRlVHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVuCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZWZQdHI8VHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogY2xpZW50LCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbiogdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBSZWZQdHI8
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZEZ1bmMoVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uKiBmcm9tLCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRvLCBjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoIWZyb20gJiYg
IXRvKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI0NywxMCArMjU4LDEwIEBAIHN0YXRp
YyBSZWZQdHI8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsCiAgICAgICAgICAgICBub3JtYWxpemVkRnJvbSA9IFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGZyb20tPngoKSwgZnJvbS0+eSgpLCBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURSk7CiAgICAgICAgICAgICBub3JtYWxpemVkVG8gPSBUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0by0+eCgpLCB0by0+eSgpLCBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJsZW5k
RnVuYyhjbGllbnQsIG5vcm1hbGl6ZWRGcm9tLmdldCgpLCBub3JtYWxpemVkVG8uZ2V0KCksIHBy
b2dyZXNzKTsKKyAgICAgICAgcmV0dXJuIGJsZW5kRnVuYyhub3JtYWxpemVkRnJvbS5nZXQoKSwg
bm9ybWFsaXplZFRvLmdldCgpLCBjb250ZXh0KTsKICAgICB9CiAKLSAgICBSZWY8VHJhbnNmb3Jt
T3BlcmF0aW9uPiBibGVuZGVkT3BlcmF0aW9uID0gdG8tPmJsZW5kKGZyb20sIHByb2dyZXNzKTsK
KyAgICBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZGVkT3BlcmF0aW9uID0gdG8tPmJsZW5k
KGZyb20sIGNvbnRleHQpOwogICAgIGlmIChpczxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24+
KGJsZW5kZWRPcGVyYXRpb24uZ2V0KCkpKSB7CiAgICAgICAgIFRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbiYgdHJhbnNsYXRlID0gZG93bmNhc3Q8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
PihibGVuZGVkT3BlcmF0aW9uLmdldCgpKTsKICAgICAgICAgcmV0dXJuIFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zbGF0ZS54KCksIHRyYW5zbGF0ZS55KCksIHRyYW5z
bGF0ZS56KCksIHRyYW5zbGF0ZS50eXBlKCkpOwpAQCAtMjU4LDcgKzI2OSw3IEBAIHN0YXRpYyBS
ZWZQdHI8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJv
cGVydHlCbGVuZGluZ0NsCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
UmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCosIENsaXBQYXRoT3BlcmF0aW9uKiBmcm9tLCBDbGlwUGF0aE9wZXJhdGlvbiog
dG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgUmVmUHRyPENsaXBQYXRoT3BlcmF0
aW9uPiBibGVuZEZ1bmMoQ2xpcFBhdGhPcGVyYXRpb24qIGZyb20sIENsaXBQYXRoT3BlcmF0aW9u
KiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAg
aWYgKCFmcm9tIHx8ICF0bykKICAgICAgICAgcmV0dXJuIHRvOwpAQCAtMjczLDMwICsyODQsMzAg
QEAgc3RhdGljIGlubGluZSBSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IGJsZW5kRnVuYyhjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW4KICAgICBpZiAoIWZyb21TaGFwZS5jYW5CbGVuZCh0
b1NoYXBlKSkKICAgICAgICAgcmV0dXJuIHRvOwogCi0gICAgcmV0dXJuIFNoYXBlQ2xpcFBhdGhP
cGVyYXRpb246OmNyZWF0ZSh0b1NoYXBlLmJsZW5kKGZyb21TaGFwZSwgcHJvZ3Jlc3MpKTsKKyAg
ICByZXR1cm4gU2hhcGVDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKHRvU2hhcGUuYmxlbmQoZnJv
bVNoYXBlLCBjb250ZXh0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVmUHRyPFNoYXBlVmFsdWU+
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgU2hhcGVWYWx1ZSog
ZnJvbSwgU2hhcGVWYWx1ZSogdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgUmVm
UHRyPFNoYXBlVmFsdWU+IGJsZW5kRnVuYyhTaGFwZVZhbHVlKiBmcm9tLCBTaGFwZVZhbHVlKiB0
bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgaWYg
KCFwcm9ncmVzcykKKyAgICBpZiAoIWNvbnRleHQucHJvZ3Jlc3MpCiAgICAgICAgIHJldHVybiBm
cm9tOwogCi0gICAgaWYgKHByb2dyZXNzID09IDEuMCkKKyAgICBpZiAoY29udGV4dC5wcm9ncmVz
cyA9PSAxLjApCiAgICAgICAgIHJldHVybiB0bzsKIAogICAgIEFTU0VSVChmcm9tICYmIHRvKTsK
ICAgICBjb25zdCBCYXNpY1NoYXBlJiBmcm9tU2hhcGUgPSAqZnJvbS0+c2hhcGUoKTsKICAgICBj
b25zdCBCYXNpY1NoYXBlJiB0b1NoYXBlID0gKnRvLT5zaGFwZSgpOwotICAgIHJldHVybiBTaGFw
ZVZhbHVlOjpjcmVhdGUodG9TaGFwZS5ibGVuZChmcm9tU2hhcGUsIHByb2dyZXNzKSwgdG8tPmNz
c0JveCgpKTsKKyAgICByZXR1cm4gU2hhcGVWYWx1ZTo6Y3JlYXRlKHRvU2hhcGUuYmxlbmQoZnJv
bVNoYXBlLCBjb250ZXh0KSwgdG8tPmNzc0JveCgpKTsKIH0KIAotc3RhdGljIGlubGluZSBSZWZQ
dHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCosIEZpbHRlck9wZXJhdGlvbiogZnJvbSwgRmlsdGVyT3BlcmF0aW9uKiB0bywgZG91Ymxl
IHByb2dyZXNzLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKQorc3RhdGljIGlubGlu
ZSBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZEZ1bmMoRmlsdGVyT3BlcmF0aW9uKiBmcm9t
LCBGaWx0ZXJPcGVyYXRpb24qIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYg
Y29udGV4dCwgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2ggPSBmYWxzZSkKIHsKICAgICBBU1NFUlQo
dG8pOwotICAgIHJldHVybiB0by0+YmxlbmQoZnJvbSwgcHJvZ3Jlc3MsIGJsZW5kVG9QYXNzdGhy
b3VnaCk7CisgICAgcmV0dXJuIHRvLT5ibGVuZChmcm9tLCBjb250ZXh0LCBibGVuZFRvUGFzc3Ro
cm91Z2gpOwogfQogCi1zdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGaWx0ZXJP
cGVyYXRpb25zKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgIGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvLCBkb3Vi
bGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGaWx0ZXJP
cGVyYXRpb25zKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsK
ICAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKICAgICBzaXplX3QgZnJvbVNpemUgPSBmcm9t
Lm9wZXJhdGlvbnMoKS5zaXplKCk7CkBAIC0zMDUsMTIgKzMxNiwxMiBAQCBzdGF0aWMgaW5saW5l
IEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAg
ICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZyb21PcCA9IChpIDwgZnJvbVNpemUpID8gZnJv
bS5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiAwOwogICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0
aW9uPiB0b09wID0gKGkgPCB0b1NpemUpID8gdG8ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogMDsK
LSAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRlZE9wID0gdG9PcCA/IGJsZW5k
RnVuYyhjbGllbnQsIGZyb21PcC5nZXQoKSwgdG9PcC5nZXQoKSwgcHJvZ3Jlc3MpIDogKGZyb21P
cCA/IGJsZW5kRnVuYyhjbGllbnQsIDAsIGZyb21PcC5nZXQoKSwgcHJvZ3Jlc3MsIHRydWUpIDog
MCk7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kZWRPcCA9IHRvT3AgPyBi
bGVuZEZ1bmMoZnJvbU9wLmdldCgpLCB0b09wLmdldCgpLCBjb250ZXh0KSA6IChmcm9tT3AgPyBi
bGVuZEZ1bmMoMCwgZnJvbU9wLmdldCgpLCBjb250ZXh0LCB0cnVlKSA6IDApOwogICAgICAgICBp
ZiAoYmxlbmRlZE9wKQogICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMoKS5hcHBlbmQoYmxl
bmRlZE9wKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBhdXRvIGlkZW50aXR5T3AgPSBQ
YXNzdGhyb3VnaEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBpZiAocHJv
Z3Jlc3MgPiAwLjUpCisgICAgICAgICAgICBpZiAoY29udGV4dC5wcm9ncmVzcyA+IDAuNSkKICAg
ICAgICAgICAgICAgICByZXN1bHQub3BlcmF0aW9ucygpLmFwcGVuZCh0b09wID8gdG9PcCA6IFdU
Rk1vdmUoaWRlbnRpdHlPcCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJl
c3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKGZyb21PcCA/IGZyb21PcCA6IFdURk1vdmUoaWRlbnRp
dHlPcCkpOwpAQCAtMzE5LDcgKzMzMCw3IEBAIHN0YXRpYyBpbmxpbmUgRmlsdGVyT3BlcmF0aW9u
cyBibGVuZEZpbHRlck9wZXJhdGlvbnMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBGaWx0ZXJPcGVyYXRpb25zIGJsZW5k
RnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJv
Z3Jlc3MsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IENTU1Byb3BlcnR5RmlsdGVyKQorc3Rh
dGljIGlubGluZSBGaWx0ZXJPcGVyYXRpb25zIGJsZW5kRnVuYyhjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0bywgY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NvbnRleHQmIGNvbnRleHQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IENTU1By
b3BlcnR5RmlsdGVyKQogewogICAgIEZpbHRlck9wZXJhdGlvbnMgcmVzdWx0OwogCkBAIC0zMjgs
MjIgKzMzOSwyMiBAQCBzdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudAogICAgIGJvb2wgbGlzdHNNYXRj
aCA9IGZhbHNlOwogICAgIHN3aXRjaCAocHJvcGVydHlJRCkgewogICAgIGNhc2UgQ1NTUHJvcGVy
dHlGaWx0ZXI6Ci0gICAgICAgIGxpc3RzTWF0Y2ggPSBjbGllbnQtPmZpbHRlckZ1bmN0aW9uTGlz
dHNNYXRjaCgpOworICAgICAgICBsaXN0c01hdGNoID0gY29udGV4dC5jbGllbnQtPmZpbHRlckZ1
bmN0aW9uTGlzdHNNYXRjaCgpOwogICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoRklMVEVSU19M
RVZFTF8yKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRlcjoKLSAgICAg
ICAgbGlzdHNNYXRjaCA9IGNsaWVudC0+YmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2go
KTsKKyAgICAgICAgbGlzdHNNYXRjaCA9IGNvbnRleHQuY2xpZW50LT5iYWNrZHJvcEZpbHRlckZ1
bmN0aW9uTGlzdHNNYXRjaCgpOwogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2UgQ1NT
UHJvcGVydHlBcHBsZUNvbG9yRmlsdGVyOgotICAgICAgICBsaXN0c01hdGNoID0gY2xpZW50LT5j
b2xvckZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpOworICAgICAgICBsaXN0c01hdGNoID0gY29u
dGV4dC5jbGllbnQtPmNvbG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKICAgICBpZiAo
bGlzdHNNYXRjaCkKLSAgICAgICAgcmVzdWx0ID0gYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGNsaWVu
dCwgZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAgICAgICAgcmVzdWx0ID0gYmxlbmRGaWx0ZXJPcGVy
YXRpb25zKGZyb20sIHRvLCBjb250ZXh0KTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSWYgdGhl
IGZpbHRlciBmdW5jdGlvbiBsaXN0cyBkb24ndCBtYXRjaCwgd2UgY291bGQgdHJ5IHRvIGNyb3Nz
LWZhZGUsIGJ1dCBkb24ndCB5ZXQgaGF2ZSBhIHdheSB0byByZXByZXNlbnQgdGhhdCBpbiBDU1Mu
CiAgICAgICAgIC8vIEZvciBub3cgd2UnbGwganVzdCBmYWlsIHRvIGFuaW1hdGUuCkBAIC0zNTMs
MjAgKzM2NCwyMCBAQCBzdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudAogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRmlsdGVyKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgQ2FjaGVkSW1hZ2UqIGltYWdlLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0bywg
ZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRG
aWx0ZXIoQ2FjaGVkSW1hZ2UqIGltYWdlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRl
eHQmIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKGltYWdlKTsKLSAgICBGaWx0ZXJPcGVyYXRpb25z
IGZpbHRlclJlc3VsdCA9IGJsZW5kRmlsdGVyT3BlcmF0aW9ucyhjbGllbnQsIGZyb20sIHRvLCBw
cm9ncmVzcyk7CisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJSZXN1bHQgPSBibGVuZEZpbHRl
ck9wZXJhdGlvbnMoZnJvbSwgdG8sIGNvbnRleHQpOwogCiAgICAgYXV0byBpbWFnZVZhbHVlID0g
Q1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKCppbWFnZSk7Ci0gICAgYXV0byBmaWx0ZXJWYWx1ZSA9IENv
bXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yRmlsdGVyKGNsaWVudC0+Y3VycmVudFN0eWxl
KCksIGZpbHRlclJlc3VsdCwgRG9Ob3RBZGp1c3RQaXhlbFZhbHVlcyk7CisgICAgYXV0byBmaWx0
ZXJWYWx1ZSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yRmlsdGVyKGNvbnRleHQu
Y2xpZW50LT5jdXJyZW50U3R5bGUoKSwgZmlsdGVyUmVzdWx0LCBEb05vdEFkanVzdFBpeGVsVmFs
dWVzKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6Y3JlYXRlKFdU
Rk1vdmUoaW1hZ2VWYWx1ZSksIFdURk1vdmUoZmlsdGVyVmFsdWUpKTsKICAgICByZXN1bHQuZ2V0
KCkuc2V0RmlsdGVyT3BlcmF0aW9ucyhmaWx0ZXJSZXN1bHQpOwogICAgIHJldHVybiBTdHlsZUdl
bmVyYXRlZEltYWdlOjpjcmVhdGUoV1RGTW92ZShyZXN1bHQpKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBWaXNpYmlsaXR5IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBj
bGllbnQsIFZpc2liaWxpdHkgZnJvbSwgVmlzaWJpbGl0eSB0bywgZG91YmxlIHByb2dyZXNzKQor
c3RhdGljIGlubGluZSBWaXNpYmlsaXR5IGJsZW5kRnVuYyhWaXNpYmlsaXR5IGZyb20sIFZpc2li
aWxpdHkgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewog
ICAgIC8vIEFueSBub24temVybyByZXN1bHQgbWVhbnMgd2UgY29uc2lkZXIgdGhlIG9iamVjdCB0
byBiZSB2aXNpYmxlLiBPbmx5IGF0IDAgZG8gd2UgY29uc2lkZXIgdGhlIG9iamVjdCB0byBiZQog
ICAgIC8vIGludmlzaWJsZS4gVGhlIGludmlzaWJsZSB2YWx1ZSB3ZSB1c2UgKFZpc2liaWxpdHk6
OkhpZGRlbiB2cy4gVmlzaWJpbGl0eTo6Q29sbGFwc2UpIGRlcGVuZHMgb24gdGhlIHNwZWNpZmll
ZCBmcm9tL3RvIHZhbHVlcy4KQEAgLTM3NCw0NiArMzg1LDQ2IEBAIHN0YXRpYyBpbmxpbmUgVmlz
aWJpbGl0eSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50
LCBWaXNpCiAgICAgZG91YmxlIHRvVmFsID0gdG8gPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSA/IDEu
IDogMC47CiAgICAgaWYgKGZyb21WYWwgPT0gdG9WYWwpCiAgICAgICAgIHJldHVybiB0bzsKLSAg
ICBkb3VibGUgcmVzdWx0ID0gYmxlbmRGdW5jKGNsaWVudCwgZnJvbVZhbCwgdG9WYWwsIHByb2dy
ZXNzKTsKKyAgICBkb3VibGUgcmVzdWx0ID0gYmxlbmRGdW5jKGZyb21WYWwsIHRvVmFsLCBjb250
ZXh0KTsKICAgICByZXR1cm4gcmVzdWx0ID4gMC4gPyBWaXNpYmlsaXR5OjpWaXNpYmxlIDogKHRv
ICE9IFZpc2liaWxpdHk6OlZpc2libGUgPyB0byA6IGZyb20pOwogfQogCi1zdGF0aWMgaW5saW5l
IFRleHRVbmRlcmxpbmVPZmZzZXQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGNsaWVudCwgY29uc3QgVGV4dFVuZGVybGluZU9mZnNldCYgZnJvbSwgY29uc3QgVGV4
dFVuZGVybGluZU9mZnNldCYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgVGV4
dFVuZGVybGluZU9mZnNldCBibGVuZEZ1bmMoY29uc3QgVGV4dFVuZGVybGluZU9mZnNldCYgZnJv
bSwgY29uc3QgVGV4dFVuZGVybGluZU9mZnNldCYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChmcm9tLmlzTGVuZ3RoKCkgJiYgdG8uaXNM
ZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFRleHRVbmRlcmxpbmVPZmZzZXQ6OmNyZWF0ZVdpdGhM
ZW5ndGgoYmxlbmRGdW5jKGNsaWVudCwgZnJvbS5sZW5ndGhWYWx1ZSgpLCB0by5sZW5ndGhWYWx1
ZSgpLCBwcm9ncmVzcykpOworICAgICAgICByZXR1cm4gVGV4dFVuZGVybGluZU9mZnNldDo6Y3Jl
YXRlV2l0aExlbmd0aChibGVuZEZ1bmMoZnJvbS5sZW5ndGhWYWx1ZSgpLCB0by5sZW5ndGhWYWx1
ZSgpLCBjb250ZXh0KSk7CiAgICAgcmV0dXJuIFRleHRVbmRlcmxpbmVPZmZzZXQ6OmNyZWF0ZVdp
dGhBdXRvKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgVGV4dERlY29yYXRpb25UaGlja25lc3MgYmxl
bmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgY29uc3QgVGV4
dERlY29yYXRpb25UaGlja25lc3MmIGZyb20sIGNvbnN0IFRleHREZWNvcmF0aW9uVGhpY2tuZXNz
JiB0bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBUZXh0RGVjb3JhdGlvblRoaWNr
bmVzcyBibGVuZEZ1bmMoY29uc3QgVGV4dERlY29yYXRpb25UaGlja25lc3MmIGZyb20sIGNvbnN0
IFRleHREZWNvcmF0aW9uVGhpY2tuZXNzJiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Nv
bnRleHQmIGNvbnRleHQpCiB7CiAgICAgaWYgKGZyb20uaXNMZW5ndGgoKSAmJiB0by5pc0xlbmd0
aCgpKQotICAgICAgICByZXR1cm4gVGV4dERlY29yYXRpb25UaGlja25lc3M6OmNyZWF0ZVdpdGhM
ZW5ndGgoYmxlbmRGdW5jKGNsaWVudCwgZnJvbS5sZW5ndGhWYWx1ZSgpLCB0by5sZW5ndGhWYWx1
ZSgpLCBwcm9ncmVzcykpOworICAgICAgICByZXR1cm4gVGV4dERlY29yYXRpb25UaGlja25lc3M6
OmNyZWF0ZVdpdGhMZW5ndGgoYmxlbmRGdW5jKGZyb20ubGVuZ3RoVmFsdWUoKSwgdG8ubGVuZ3Ro
VmFsdWUoKSwgY29udGV4dCkpOwogICAgIHJldHVybiBUZXh0RGVjb3JhdGlvblRoaWNrbmVzczo6
Y3JlYXRlV2l0aEF1dG8oKTsKIH0KIAotc3RhdGljIGlubGluZSBMZW5ndGhCb3ggYmxlbmRGdW5j
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgY29uc3QgTGVuZ3RoQm94
JiBmcm9tLCBjb25zdCBMZW5ndGhCb3gmIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSkKK3N0YXRpYyBpbmxpbmUgTGVuZ3Ro
Qm94IGJsZW5kRnVuYyhjb25zdCBMZW5ndGhCb3gmIGZyb20sIGNvbnN0IExlbmd0aEJveCYgdG8s
IGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0LCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UgPSBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpCiB7Ci0gICAgTGVuZ3RoQm94IHJlc3Vs
dChibGVuZEZ1bmMoY2xpZW50LCBmcm9tLnRvcCgpLCB0by50b3AoKSwgcHJvZ3Jlc3MsIHZhbHVl
UmFuZ2UpLAotICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGNsaWVudCwgZnJvbS5yaWdo
dCgpLCB0by5yaWdodCgpLCBwcm9ncmVzcywgdmFsdWVSYW5nZSksCi0gICAgICAgICAgICAgICAg
ICAgICBibGVuZEZ1bmMoY2xpZW50LCBmcm9tLmJvdHRvbSgpLCB0by5ib3R0b20oKSwgcHJvZ3Jl
c3MsIHZhbHVlUmFuZ2UpLAotICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGNsaWVudCwg
ZnJvbS5sZWZ0KCksIHRvLmxlZnQoKSwgcHJvZ3Jlc3MsIHZhbHVlUmFuZ2UpKTsKKyAgICBMZW5n
dGhCb3ggcmVzdWx0KGJsZW5kRnVuYyhmcm9tLnRvcCgpLCB0by50b3AoKSwgY29udGV4dCwgdmFs
dWVSYW5nZSksCisgICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoZnJvbS5yaWdodCgpLCB0
by5yaWdodCgpLCBjb250ZXh0LCB2YWx1ZVJhbmdlKSwKKyAgICAgICAgICAgICAgICAgICAgIGJs
ZW5kRnVuYyhmcm9tLmJvdHRvbSgpLCB0by5ib3R0b20oKSwgY29udGV4dCwgdmFsdWVSYW5nZSks
CisgICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoZnJvbS5sZWZ0KCksIHRvLmxlZnQoKSwg
Y29udGV4dCwgdmFsdWVSYW5nZSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgU1ZHTGVuZ3RoVmFsdWUgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqLCBjb25zdCBTVkdMZW5ndGhWYWx1ZSYgZnJvbSwgY29uc3QgU1ZHTGVuZ3RoVmFsdWUm
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIFNWR0xlbmd0aFZhbHVlIGJsZW5k
RnVuYyhjb25zdCBTVkdMZW5ndGhWYWx1ZSYgZnJvbSwgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIHRv
LCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1
cm4gU1ZHTGVuZ3RoVmFsdWU6OmJsZW5kKGZyb20sIHRvLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KHByb2dyZXNzKSk7CisgICAgcmV0dXJuIFNWR0xlbmd0aFZhbHVlOjpibGVuZChmcm9tLCB0bywg
bmFycm93UHJlY2lzaW9uVG9GbG9hdChjb250ZXh0LnByb2dyZXNzKSk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCosIGNvbnN0IFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4mIGZyb20sIGNvbnN0
IFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4mIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5s
aW5lIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IFZlY3RvcjxTVkdMZW5n
dGhWYWx1ZT4mIGZyb20sIGNvbnN0IFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4mIHRvLCBjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBzaXplX3QgZnJvbUxl
bmd0aCA9IGZyb20uc2l6ZSgpOwogICAgIHNpemVfdCB0b0xlbmd0aCA9IHRvLnNpemUoKTsKICAg
ICBpZiAoIWZyb21MZW5ndGgpCi0gICAgICAgIHJldHVybiAhcHJvZ3Jlc3MgPyBmcm9tIDogdG87
CisgICAgICAgIHJldHVybiAhY29udGV4dC5wcm9ncmVzcyA/IGZyb20gOiB0bzsKICAgICBpZiAo
IXRvTGVuZ3RoKQotICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgPT0gMSA/IGZyb20gOiB0bzsKKyAg
ICAgICAgcmV0dXJuIGNvbnRleHQucHJvZ3Jlc3MgPT0gMSA/IGZyb20gOiB0bzsKICAgICBzaXpl
X3QgcmVzdWx0TGVuZ3RoID0gZnJvbUxlbmd0aDsKICAgICBpZiAoZnJvbUxlbmd0aCAhPSB0b0xl
bmd0aCkgewogICAgICAgICBpZiAoIXJlbWFpbmRlcihzdGQ6Om1heChmcm9tTGVuZ3RoLCB0b0xl
bmd0aCksIHN0ZDo6bWluKGZyb21MZW5ndGgsIHRvTGVuZ3RoKSkpCkBAIC00MjMsMzUgKzQzNCwz
NSBAQCBzdGF0aWMgaW5saW5lIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLAogICAgIH0KICAgICBWZWN0b3I8U1ZHTGVuZ3Ro
VmFsdWU+IHJlc3VsdChyZXN1bHRMZW5ndGgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cmVzdWx0TGVuZ3RoOyArK2kpCi0gICAgICAgIHJlc3VsdFtpXSA9IFNWR0xlbmd0aFZhbHVlOjpi
bGVuZChmcm9tW2kgJSBmcm9tTGVuZ3RoXSwgdG9baSAlIHRvTGVuZ3RoXSwgbmFycm93UHJlY2lz
aW9uVG9GbG9hdChwcm9ncmVzcykpOworICAgICAgICByZXN1bHRbaV0gPSBTVkdMZW5ndGhWYWx1
ZTo6YmxlbmQoZnJvbVtpICUgZnJvbUxlbmd0aF0sIHRvW2kgJSB0b0xlbmd0aF0sIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoY29udGV4dC5wcm9ncmVzcykpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGNyb3NzZmFkZUJsZW5kKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBTdHlsZUNhY2hlZEltYWdlKiBmcm9tU3R5bGVJ
bWFnZSwgU3R5bGVDYWNoZWRJbWFnZSogdG9TdHlsZUltYWdlLCBkb3VibGUgcHJvZ3Jlc3MpCitz
dGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBjcm9zc2ZhZGVCbGVuZChTdHlsZUNhY2hl
ZEltYWdlKiBmcm9tU3R5bGVJbWFnZSwgU3R5bGVDYWNoZWRJbWFnZSogdG9TdHlsZUltYWdlLCBj
b25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKICAgICAvLyBJZiBw
cm9ncmVzcyBpcyBhdCBvbmUgb2YgdGhlIGV4dHJlbWVzLCB3ZSB3YW50IGdldENvbXB1dGVkU3R5
bGUgdG8gc2hvdyB0aGUgaW1hZ2UsCiAgICAgLy8gbm90IGEgY29tcGxldGVkIGNyb3NzLWZhZGUs
IHNvIHdlIGhhbmQgYmFjayBvbmUgb2YgdGhlIGV4aXN0aW5nIGltYWdlcy4KLSAgICBpZiAoIXBy
b2dyZXNzKQorICAgIGlmICghY29udGV4dC5wcm9ncmVzcykKICAgICAgICAgcmV0dXJuIGZyb21T
dHlsZUltYWdlOwotICAgIGlmIChwcm9ncmVzcyA9PSAxKQorICAgIGlmIChjb250ZXh0LnByb2dy
ZXNzID09IDEpCiAgICAgICAgIHJldHVybiB0b1N0eWxlSW1hZ2U7CiAgICAgaWYgKCFmcm9tU3R5
bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKSB8fCAhdG9TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKQog
ICAgICAgICByZXR1cm4gdG9TdHlsZUltYWdlOwogCiAgICAgYXV0byBmcm9tSW1hZ2VWYWx1ZSA9
IENTU0ltYWdlVmFsdWU6OmNyZWF0ZSgqZnJvbVN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkpOwog
ICAgIGF1dG8gdG9JbWFnZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKCp0b1N0eWxlSW1h
Z2UtPmNhY2hlZEltYWdlKCkpOwotICAgIGF1dG8gcGVyY2VudGFnZVZhbHVlID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZShwcm9ncmVzcywgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAg
IGF1dG8gcGVyY2VudGFnZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShjb250ZXh0
LnByb2dyZXNzLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CiAKICAgICBhdXRvIGNyb3NzZmFk
ZVZhbHVlID0gQ1NTQ3Jvc3NmYWRlVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKGZyb21JbWFnZVZhbHVl
KSwgV1RGTW92ZSh0b0ltYWdlVmFsdWUpLCBXVEZNb3ZlKHBlcmNlbnRhZ2VWYWx1ZSkpOwogICAg
IHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoV1RGTW92ZShjcm9zc2ZhZGVWYWx1
ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBibGVuZEZ1bmMoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBTdHlsZUltYWdlKiBmcm9tLCBT
dHlsZUltYWdlKiB0bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBSZWZQdHI8U3R5
bGVJbWFnZT4gYmxlbmRGdW5jKFN0eWxlSW1hZ2UqIGZyb20sIFN0eWxlSW1hZ2UqIHRvLCBjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBpZiAoIXByb2dy
ZXNzKQorICAgIGlmICghY29udGV4dC5wcm9ncmVzcykKICAgICAgICAgcmV0dXJuIGZyb207CiAK
LSAgICBpZiAocHJvZ3Jlc3MgPT0gMS4wKQorICAgIGlmIChjb250ZXh0LnByb2dyZXNzID09IDEu
MCkKICAgICAgICAgcmV0dXJuIHRvOwogCiAgICAgQVNTRVJUKGZyb20gJiYgdG8pOwpAQCAtNDcz
LDE0ICs0ODQsMTQgQEAgc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRGdW5j
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWUKICAgICAgICAgICAgIENTU0Zp
bHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVl
Pihmcm9tR2VuZXJhdGVkKTsKICAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIHRvRmls
dGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0ZWQpOwogICAgICAg
ICAgICAgaWYgKGZyb21GaWx0ZXIuZXF1YWxJbnB1dEltYWdlcyh0b0ZpbHRlcikgJiYgZnJvbUZp
bHRlci5jYWNoZWRJbWFnZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBibGVuZEZpbHRlcihj
bGllbnQsIGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwgZnJvbUZpbHRlci5maWx0ZXJPcGVyYXRp
b25zKCksIHRvRmlsdGVyLmZpbHRlck9wZXJhdGlvbnMoKSwgcHJvZ3Jlc3MpOworICAgICAgICAg
ICAgICAgIHJldHVybiBibGVuZEZpbHRlcihmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21G
aWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIGNv
bnRleHQpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzPENTU0Nyb3NzZmFkZVZhbHVlPihm
cm9tR2VuZXJhdGVkKSAmJiBpczxDU1NDcm9zc2ZhZGVWYWx1ZT4odG9HZW5lcmF0ZWQpKSB7CiAg
ICAgICAgICAgICBDU1NDcm9zc2ZhZGVWYWx1ZSYgZnJvbUNyb3NzZmFkZSA9IGRvd25jYXN0PENT
U0Nyb3NzZmFkZVZhbHVlPihmcm9tR2VuZXJhdGVkKTsKICAgICAgICAgICAgIENTU0Nyb3NzZmFk
ZVZhbHVlJiB0b0Nyb3NzZmFkZSA9IGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPih0b0dlbmVy
YXRlZCk7CiAgICAgICAgICAgICBpZiAoZnJvbUNyb3NzZmFkZS5lcXVhbElucHV0SW1hZ2VzKHRv
Q3Jvc3NmYWRlKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvIGNyb3NzZmFkZUJsZW5kID0g
dG9Dcm9zc2ZhZGUuYmxlbmQoZnJvbUNyb3NzZmFkZSwgcHJvZ3Jlc3MpKQorICAgICAgICAgICAg
ICAgIGlmIChhdXRvIGNyb3NzZmFkZUJsZW5kID0gdG9Dcm9zc2ZhZGUuYmxlbmQoZnJvbUNyb3Nz
ZmFkZSwgY29udGV4dC5wcm9ncmVzcykpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHls
ZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoKmNyb3NzZmFkZUJsZW5kKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtNDkyLDcgKzUwMyw3IEBAIHN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxl
SW1hZ2U+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllCiAg
ICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKSkgewogICAg
ICAgICAgICAgQ1NTRmlsdGVySW1hZ2VWYWx1ZSYgZnJvbUZpbHRlciA9IGRvd25jYXN0PENTU0Zp
bHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpOwogICAgICAgICAgICAgaWYgKGZyb21GaWx0
ZXIuY2FjaGVkSW1hZ2UoKSAmJiBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPigqdG8pLmNhY2hl
ZEltYWdlKCkgPT0gZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBibGVuZEZpbHRlcihjbGllbnQsIGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwgZnJvbUZp
bHRlci5maWx0ZXJPcGVyYXRpb25zKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgcHJvZ3Jlc3MpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBibGVuZEZpbHRlcihmcm9tRmlsdGVyLmNhY2hlZEltYWdl
KCksIGZyb21GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBGaWx0ZXJPcGVyYXRpb25zKCksIGNv
bnRleHQpOwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgaW50ZXJwb2xhdGlvbiBi
ZXR3ZWVuIGNyb3NzLWZhZGUgYW5kIGltYWdlIHNvdXJjZS4KICAgICB9IGVsc2UgaWYgKGlzPFN0
eWxlQ2FjaGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8pKSB7
CkBAIC01MDAsNyArNTExLDcgQEAgc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxl
bmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWUKICAgICAgICAgaWYg
KGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKSkgewogICAgICAgICAgICAgQ1NT
RmlsdGVySW1hZ2VWYWx1ZSYgdG9GaWx0ZXIgPSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVl
Pih0b0dlbmVyYXRlZCk7CiAgICAgICAgICAgICBpZiAodG9GaWx0ZXIuY2FjaGVkSW1hZ2UoKSAm
JiBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPigqZnJvbSkuY2FjaGVkSW1hZ2UoKSA9PSB0b0Zp
bHRlci5jYWNoZWRJbWFnZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBibGVuZEZpbHRlcihj
bGllbnQsIHRvRmlsdGVyLmNhY2hlZEltYWdlKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgdG9GaWx0
ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGJsZW5kRmlsdGVyKHRvRmlsdGVyLmNhY2hlZEltYWdlKCksIEZpbHRlck9wZXJhdGlvbnMoKSwg
dG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBjb250ZXh0KTsKICAgICAgICAgfQogICAgICAg
ICAvLyBGSVhNRTogQWRkIGludGVycG9sYXRpb24gYmV0d2VlbiBpbWFnZSBzb3VyY2UgYW5kIGNy
b3NzLWZhZGUuCiAgICAgfQpAQCAtNTA4LDEyICs1MTksMTIgQEAgc3RhdGljIGlubGluZSBSZWZQ
dHI8U3R5bGVJbWFnZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGNsaWUKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgY3Jvc3MgZmFkZSBiZXR3ZWVuIGNhY2hl
ZCBhbmQgZ2VuZXJhdGVkIGltYWdlcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzgyOTMKICAgICBpZiAoaXM8U3R5bGVDYWNoZWRJbWFnZT4oKmZyb20p
ICYmIGlzPFN0eWxlQ2FjaGVkSW1hZ2U+KCp0bykpCi0gICAgICAgIHJldHVybiBjcm9zc2ZhZGVC
bGVuZChjbGllbnQsIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KGZyb20pLCBkb3duY2FzdDxT
dHlsZUNhY2hlZEltYWdlPih0byksIHByb2dyZXNzKTsKKyAgICAgICAgcmV0dXJuIGNyb3NzZmFk
ZUJsZW5kKGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KGZyb20pLCBkb3duY2FzdDxTdHlsZUNh
Y2hlZEltYWdlPih0byksIGNvbnRleHQpOwogCiAgICAgcmV0dXJuIHRvOwogfQogCi1zdGF0aWMg
aW5saW5lIE5pbmVQaWVjZUltYWdlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiBjbGllbnQsIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBmcm9tLCBjb25zdCBOaW5lUGll
Y2VJbWFnZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgTmluZVBpZWNlSW1h
Z2UgYmxlbmRGdW5jKGNvbnN0IE5pbmVQaWVjZUltYWdlJiBmcm9tLCBjb25zdCBOaW5lUGllY2VJ
bWFnZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewog
ICAgIGlmICghZnJvbS5oYXNJbWFnZSgpIHx8ICF0by5oYXNJbWFnZSgpKQogICAgICAgICByZXR1
cm4gdG87CkBAIC01MjMsMjMgKzUzNCwyMyBAQCBzdGF0aWMgaW5saW5lIE5pbmVQaWVjZUltYWdl
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsCiAgICAg
aWYgKGZyb20uaW1hZ2VTbGljZXMoKSAhPSB0by5pbWFnZVNsaWNlcygpIHx8IGZyb20uYm9yZGVy
U2xpY2VzKCkgIT0gdG8uYm9yZGVyU2xpY2VzKCkgfHwgZnJvbS5vdXRzZXQoKSAhPSB0by5vdXRz
ZXQoKSB8fCBmcm9tLmZpbGwoKSAhPSB0by5maWxsKCkgfHwgZnJvbS5ob3Jpem9udGFsUnVsZSgp
ICE9IHRvLmhvcml6b250YWxSdWxlKCkgfHwgZnJvbS52ZXJ0aWNhbFJ1bGUoKSAhPSB0by52ZXJ0
aWNhbFJ1bGUoKSkKICAgICAgICAgcmV0dXJuIHRvOwogCi0gICAgaWYgKGF1dG8qIHJlbmRlcmVy
ID0gY2xpZW50LT5yZW5kZXJlcigpKSB7CisgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gY29udGV4
dC5jbGllbnQtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgaWYgKGZyb20uaW1hZ2UoKS0+aW1hZ2VT
aXplKHJlbmRlcmVyLCAxLjApICE9IHRvLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4w
KSkKICAgICAgICAgICAgIHJldHVybiB0bzsKICAgICB9CiAKLSAgICByZXR1cm4gTmluZVBpZWNl
SW1hZ2UoYmxlbmRGdW5jKGNsaWVudCwgZnJvbS5pbWFnZSgpLCB0by5pbWFnZSgpLCBwcm9ncmVz
cyksCisgICAgcmV0dXJuIE5pbmVQaWVjZUltYWdlKGJsZW5kRnVuYyhmcm9tLmltYWdlKCksIHRv
LmltYWdlKCksIGNvbnRleHQpLAogICAgICAgICBmcm9tLmltYWdlU2xpY2VzKCksIGZyb20uZmls
bCgpLCBmcm9tLmJvcmRlclNsaWNlcygpLCBmcm9tLm91dHNldCgpLCBmcm9tLmhvcml6b250YWxS
dWxlKCksIGZyb20udmVydGljYWxSdWxlKCkpOwogfQogCiAjaWYgRU5BQkxFKFZBUklBVElPTl9G
T05UUykKIAotc3RhdGljIGlubGluZSBGb250VmFyaWF0aW9uU2V0dGluZ3MgYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgY29uc3QgRm9udFZhcmlhdGlv
blNldHRpbmdzJiBmcm9tLCBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBibGVuZEZ1bmMo
Y29uc3QgRm9udFZhcmlhdGlvblNldHRpbmdzJiBmcm9tLCBjb25zdCBGb250VmFyaWF0aW9uU2V0
dGluZ3MmIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsK
LSAgICBpZiAoIXByb2dyZXNzKQorICAgIGlmICghY29udGV4dC5wcm9ncmVzcykKICAgICAgICAg
cmV0dXJuIGZyb207CiAKLSAgICBpZiAocHJvZ3Jlc3MgPT0gMS4wKQorICAgIGlmIChjb250ZXh0
LnByb2dyZXNzID09IDEuMCkKICAgICAgICAgcmV0dXJuIHRvOwogCiAgICAgQVNTRVJUKGZyb20u
c2l6ZSgpID09IHRvLnNpemUoKSk7CkBAIC01NDksNyArNTYwLDcgQEAgc3RhdGljIGlubGluZSBG
b250VmFyaWF0aW9uU2V0dGluZ3MgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGMKICAgICAgICAgYXV0byYgZnJvbUl0ZW0gPSBmcm9tLmF0KGkpOwogICAgICAgICBh
dXRvJiB0b0l0ZW0gPSB0by5hdChpKTsKICAgICAgICAgQVNTRVJUKGZyb21JdGVtLnRhZygpID09
IHRvSXRlbS50YWcoKSk7Ci0gICAgICAgIGZsb2F0IGludGVycG9sYXRlZCA9IGJsZW5kRnVuYyhj
bGllbnQsIGZyb21JdGVtLnZhbHVlKCksIHRvSXRlbS52YWx1ZSgpLCBwcm9ncmVzcyk7CisgICAg
ICAgIGZsb2F0IGludGVycG9sYXRlZCA9IGJsZW5kRnVuYyhmcm9tSXRlbS52YWx1ZSgpLCB0b0l0
ZW0udmFsdWUoKSwgY29udGV4dCk7CiAgICAgICAgIHJlc3VsdC5pbnNlcnQoeyBmcm9tSXRlbS50
YWcoKSwgaW50ZXJwb2xhdGVkIH0pOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNTU3
LDE0ICs1NjgsMTQgQEAgc3RhdGljIGlubGluZSBGb250VmFyaWF0aW9uU2V0dGluZ3MgYmxlbmRG
dW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGMKIAogI2VuZGlmCiAKLXN0YXRp
YyBpbmxpbmUgRm9udFNlbGVjdGlvblZhbHVlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiBjbGllbnQsIEZvbnRTZWxlY3Rpb25WYWx1ZSBmcm9tLCBGb250U2VsZWN0
aW9uVmFsdWUgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgRm9udFNlbGVjdGlv
blZhbHVlIGJsZW5kRnVuYyhGb250U2VsZWN0aW9uVmFsdWUgZnJvbSwgRm9udFNlbGVjdGlvblZh
bHVlIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKLSAg
ICByZXR1cm4gRm9udFNlbGVjdGlvblZhbHVlKHN0ZDo6bWF4KDAuMGYsIGJsZW5kRnVuYyhjbGll
bnQsIHN0YXRpY19jYXN0PGZsb2F0Pihmcm9tKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvKSwgcHJv
Z3Jlc3MpKSk7CisgICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25WYWx1ZShzdGQ6Om1heCgwLjBmLCBi
bGVuZEZ1bmMoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZyb20pLCBzdGF0aWNfY2FzdDxmbG9hdD4odG8p
LCBjb250ZXh0KSkpOwogfQogCi1zdGF0aWMgaW5saW5lIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25W
YWx1ZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwg
T3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiBmcm9tLCBPcHRpb25hbDxGb250U2VsZWN0aW9u
VmFsdWU+IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIE9wdGlvbmFsPEZvbnRT
ZWxlY3Rpb25WYWx1ZT4gYmxlbmRGdW5jKE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gZnJv
bSwgT3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGJsZW5kRnVuYyhjbGllbnQsICpm
cm9tLCAqdG8sIHByb2dyZXNzKTsKKyAgICByZXR1cm4gYmxlbmRGdW5jKCpmcm9tLCAqdG8sIGNv
bnRleHQpOwogfQogCiBjbGFzcyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKQEAgLTU3
OCwxMiArNTg5LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbmltYXRpb25Qcm9wZXJ0eVdy
YXBwZXJCYXNlKCkgPSBkZWZhdWx0OwogCiAgICAgdmlydHVhbCBib29sIGlzU2hvcnRoYW5kV3Jh
cHBlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGVxdWFscyhj
b25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRl
clN0eWxlKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBibGVuZChj
b25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5k
ZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgZG91YmxlKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlJikg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJT
dHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZp
cnR1YWwgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYpIGNvbnN0ID0g
MDsKICAgICAKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdmlydHVhbCB2b2lkIGxvZ0JsZW5kKGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSos
IGRvdWJsZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBkb3VibGUp
IGNvbnN0ID0gMDsKICNlbmRpZgogCiAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvcGVydHk7IH0KQEAgLTYwNCwyNSArNjE1LDIzIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgfQogCi0gICAgVCB2YWx1ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
CisgICAgVCB2YWx1ZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gKHN0eWxlLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIHJldHVybiAoc3R5bGUu
Km1fZ2V0dGVyKSgpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIGVxdWFscyhjb25zdCBS
ZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAg
Ym9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUmIGEsIGNvbnN0IFJlbmRlclN0eWxlJiBiKSBj
b25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgaWYgKCZh
ID09ICZiKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIHZhbHVlKGEpID09IHZh
bHVlKGIpOwogICAgIH0KIAogI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNv
bnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8sIGNvbnN0IFJlbmRl
clN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGxv
Z0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNv
bnN0IFJlbmRlclN0eWxlJiBkZXN0aW5hdGlvbiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5h
bAogICAgIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAi
ICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAiIGZyb20gIiA8
PCB2YWx1ZShmcm9tKSA8PCAiIHRvICIgPDwgdmFsdWUodG8pIDw8ICIgYXQgIiA8PCBUZXh0U3Ry
ZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8
PCB2YWx1ZShyZXN1bHQpKTsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0
cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAi
IGZyb20gIiA8PCB2YWx1ZShmcm9tKSA8PCAiIHRvICIgPDwgdmFsdWUodG8pIDw8ICIgYXQgIiA8
PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8
ICIgLT4gIiA8PCB2YWx1ZShkZXN0aW5hdGlvbikpOwogICAgIH0KICNlbmRpZgogCkBAIC02Mzks
OSArNjQ4LDkgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0
aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3Vi
bGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYg
ZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYg
dG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdCBvdmVy
cmlkZQogICAgIHsKLSAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhj
bGllbnQsIHRoaXMtPnZhbHVlKGZyb20pLCB0aGlzLT52YWx1ZSh0byksIHByb2dyZXNzKSk7Cisg
ICAgICAgIChkZXN0aW5hdGlvbi4qbV9zZXR0ZXIpKGJsZW5kRnVuYyh0aGlzLT52YWx1ZShmcm9t
KSwgdGhpcy0+dmFsdWUodG8pLCBjb250ZXh0KSk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6CkBAIC02
NTgsMTAgKzY2NywxMCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgYmxl
bmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBSZW5kZXJTdHlsZSog
ZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSog
dG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGJsZW5kKFJlbmRlclN0
eWxlJiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0
eWxlJiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
IGZpbmFsCiAgICAgewotICAgICAgICBhdXRvIGJsZW5kZWRWYWx1ZSA9IGJsZW5kRnVuYyhjbGll
bnQsIHRoaXMtPnZhbHVlKGZyb20pLCB0aGlzLT52YWx1ZSh0byksIHByb2dyZXNzKTsKLSAgICAg
ICAgKGRlc3RpbmF0aW9uLT4qdGhpcy0+bV9zZXR0ZXIpKGJsZW5kZWRWYWx1ZSA+IDEgPyBibGVu
ZGVkVmFsdWUgOiAxKTsKKyAgICAgICAgYXV0byBibGVuZGVkVmFsdWUgPSBibGVuZEZ1bmModGhp
cy0+dmFsdWUoZnJvbSksIHRoaXMtPnZhbHVlKHRvKSwgY29udGV4dCk7CisgICAgICAgIChkZXN0
aW5hdGlvbi4qdGhpcy0+bV9zZXR0ZXIpKGJsZW5kZWRWYWx1ZSA+IDEgPyBibGVuZGVkVmFsdWUg
OiAxKTsKICAgICB9CiB9OwogCkBAIC02NzYsMTIgKzY4NSwxMiBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqLCBj
b25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlJikg
Y29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudCosIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3Qg
UmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNz
KSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBj
b25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QgZmluYWwKICAgICB7Ci0gICAg
ICAgIEFTU0VSVCghcHJvZ3Jlc3MgfHwgcHJvZ3Jlc3MgPT0gMS4wKTsKLSAgICAgICAgKGRlc3Rp
bmF0aW9uLT4qdGhpcy0+bV9zZXR0ZXIpKHRoaXMtPnZhbHVlKHByb2dyZXNzID8gdG8gOiBmcm9t
KSk7CisgICAgICAgIEFTU0VSVCghY29udGV4dC5wcm9ncmVzcyB8fCBjb250ZXh0LnByb2dyZXNz
ID09IDEuMCk7CisgICAgICAgIChkZXN0aW5hdGlvbi4qdGhpcy0+bV9zZXR0ZXIpKHRoaXMtPnZh
bHVlKGNvbnRleHQucHJvZ3Jlc3MgPyB0byA6IGZyb20pKTsKICAgICB9CiAKICAgICB2b2lkIChS
ZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShUKTsKQEAgLTY5OCw5ICs3MDcsOSBAQCBwdWJsaWM6CiAg
ICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogY2xpZW50LCBSZW5kZXJTdHlsZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0
eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qg
ZmluYWwKKyAgICB2b2lkIGJsZW5kKFJlbmRlclN0eWxlJiBkZXN0aW5hdGlvbiwgY29uc3QgUmVu
ZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bywgY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICAoZGVz
dGluYXRpb24tPip0aGlzLT5tX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgdGhpcy0+dmFsdWUo
ZnJvbSksIHRoaXMtPnZhbHVlKHRvKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgKGRlc3RpbmF0aW9u
Lip0aGlzLT5tX3NldHRlcikoYmxlbmRGdW5jKHRoaXMtPnZhbHVlKGZyb20pLCB0aGlzLT52YWx1
ZSh0byksIGNvbnRleHQpKTsKICAgICB9CiAKICAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0
dGVyKShSZWZQdHI8VD4mJik7CkBAIC03MzksMTUgKzc0OCwxNSBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcm90ZWN0ZWQ6Ci0gICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSog
ZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBvdmVycmlkZQorICAgIGJvb2wgY2Fu
SW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0
bykgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJldHVybiBjYW5JbnRlcnBvbGF0ZUxl
bmd0aHModmFsdWUoZnJvbSksIHZhbHVlKHRvKSwgbV9mbGFncy5jb250YWlucyhGbGFnczo6SXNM
ZW5ndGhQZXJjZW50YWdlKSk7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29u
c3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dy
ZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0
aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3Qgb3ZlcnJpZGUKICAg
ICB7CiAgICAgICAgIGF1dG8gdmFsdWVSYW5nZSA9IG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Ok5l
Z2F0aXZlTGVuZ3Roc0FyZUludmFsaWQpID8gVmFsdWVSYW5nZU5vbk5lZ2F0aXZlIDogVmFsdWVS
YW5nZUFsbDsKLSAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhjbGll
bnQsIHZhbHVlKGZyb20pLCB2YWx1ZSh0byksIHByb2dyZXNzLCB2YWx1ZVJhbmdlKSk7CisgICAg
ICAgIChkZXN0aW5hdGlvbi4qbV9zZXR0ZXIpKGJsZW5kRnVuYyh2YWx1ZShmcm9tKSwgdmFsdWUo
dG8pLCBjb250ZXh0LCB2YWx1ZVJhbmdlKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtNzgwLDkg
Kzc4OSw5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBibGVuZChjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5h
dGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91
YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRl
c3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRv
LCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QgZmluYWwK
ICAgICB7Ci0gICAgICAgIChkZXN0aW5hdGlvbi0+Km1fc2V0dGVyKShibGVuZEZ1bmMoY2xpZW50
LCB2YWx1ZShmcm9tKSwgdmFsdWUodG8pLCBwcm9ncmVzcykpOworICAgICAgICAoZGVzdGluYXRp
b24uKm1fc2V0dGVyKShibGVuZEZ1bmModmFsdWUoZnJvbSksIHZhbHVlKHRvKSwgY29udGV4dCkp
OwogICAgIH0KIAogICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKExlbmd0aFBvaW50
JiYpOwpAQCAtNzk5LDE0ICs4MDgsMTQgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAg
ICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5k
ZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBS
ZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvKSBjb25zdCBmaW5hbAogICAg
IHsKICAgICAgICAgcmV0dXJuIGNhbkludGVycG9sYXRlTGVuZ3RoVmFyaWFudHModGhpcy0+dmFs
dWUoZnJvbSksIHRoaXMtPnZhbHVlKHRvKSk7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5h
dGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91
YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRl
c3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRv
LCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QgZmluYWwK
ICAgICB7Ci0gICAgICAgIChkZXN0aW5hdGlvbi0+Km1fc2V0dGVyKShibGVuZEZ1bmMoY2xpZW50
LCB0aGlzLT52YWx1ZShmcm9tKSwgdGhpcy0+dmFsdWUodG8pLCBwcm9ncmVzcykpOworICAgICAg
ICAoZGVzdGluYXRpb24uKm1fc2V0dGVyKShibGVuZEZ1bmModGhpcy0+dmFsdWUoZnJvbSksIHRo
aXMtPnZhbHVlKHRvKSwgY29udGV4dCkpOwogICAgIH0KIAogICAgIHZvaWQgKFJlbmRlclN0eWxl
OjoqbV9zZXR0ZXIpKFQmJik7CkBAIC04MjgsOSArODM3LDkgQEAgcHVibGljOgogICAgIH0KIAog
cHJpdmF0ZToKLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9t
LCBjb25zdCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCisgICAgYm9vbCBjYW5JbnRlcnBv
bGF0ZShjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvKSBjb25z
dCBmaW5hbAogICAgIHsKLSAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6OlVzZXNG
aWxsS2V5d29yZCkgJiYgZnJvbS0+Ym9yZGVySW1hZ2UoKS5maWxsKCkgIT0gdG8tPmJvcmRlcklt
YWdlKCkuZmlsbCgpKQorICAgICAgICBpZiAobV9mbGFncy5jb250YWlucyhGbGFnczo6VXNlc0Zp
bGxLZXl3b3JkKSAmJiBmcm9tLmJvcmRlckltYWdlKCkuZmlsbCgpICE9IHRvLmJvcmRlckltYWdl
KCkuZmlsbCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGF1dG8mIGZy
b21MZW5ndGhCb3ggPSB2YWx1ZShmcm9tKTsKQEAgLTg0MiwxMiArODUxLDEyIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAmJiBjYW5JbnRlcnBvbGF0ZUxlbmd0aHMoZnJvbUxlbmd0aEJveC5sZWZ0
KCksIHRvTGVuZ3RoQm94LmxlZnQoKSwgaXNMZW5ndGhQZXJjZW50YWdlKTsKICAgICB9CiAKLSAg
ICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVu
ZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVu
ZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25z
dCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250
ZXh0KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxh
Z3M6OlVzZXNGaWxsS2V5d29yZCkpCi0gICAgICAgICAgICBkZXN0aW5hdGlvbi0+c2V0Qm9yZGVy
SW1hZ2VTbGljZUZpbGwoKCFwcm9ncmVzcyB8fCBjYW5JbnRlcnBvbGF0ZShmcm9tLCB0bykgPyBm
cm9tIDogdG8pLT5ib3JkZXJJbWFnZSgpLmZpbGwoKSk7CisgICAgICAgICAgICBkZXN0aW5hdGlv
bi5zZXRCb3JkZXJJbWFnZVNsaWNlRmlsbCgoIWNvbnRleHQucHJvZ3Jlc3MgfHwgIWNvbnRleHQu
aXNEaXNjcmV0ZSA/IGZyb20gOiB0bykuYm9yZGVySW1hZ2UoKS5maWxsKCkpOwogICAgICAgICBh
dXRvIHZhbHVlUmFuZ2UgPSBtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpBbGxvd3NOZWdhdGl2ZVZh
bHVlcykgPyBWYWx1ZVJhbmdlQWxsIDogVmFsdWVSYW5nZU5vbk5lZ2F0aXZlOwotICAgICAgICAo
ZGVzdGluYXRpb24tPiptX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgdmFsdWUoZnJvbSksIHZh
bHVlKHRvKSwgcHJvZ3Jlc3MsIHZhbHVlUmFuZ2UpKTsKKyAgICAgICAgKGRlc3RpbmF0aW9uLipt
X3NldHRlcikoYmxlbmRGdW5jKHZhbHVlKGZyb20pLCB2YWx1ZSh0byksIGNvbnRleHQsIHZhbHVl
UmFuZ2UpKTsKICAgICB9CiAKICAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShMZW5n
dGhCb3gmJik7CkBAIC04NjMsMTQgKzg3MiwxMSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRl
OgotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYikgY29uc3QgZmluYWwKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwg
Y29uc3QgUmVuZGVyU3R5bGUmIGIpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICAvLyBJZiB0
aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRl
c3QuCi0gICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGgg
YXJlIG51bGwsIHJldHVybiB0cnVlLgotICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICBpZiAo
JmEgPT0gJmIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFi
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGF1dG8qIGNsaXBQYXRoQSA9
IHZhbHVlKGEpOwogICAgICAgICBhdXRvKiBjbGlwUGF0aEIgPSB2YWx1ZShiKTsKQEAgLTg5Miwx
OCArODk4LDE1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBlcXVhbHMo
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBmaW5hbAor
ICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25zdCBSZW5kZXJTdHlsZSYg
YikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIC8vIElmIHRoZSBzdHlsZSBwb2ludGVycyBh
cmUgdGhlIHNhbWUsIGRvbid0IGJvdGhlciBkb2luZyB0aGUgdGVzdC4KLSAgICAgICAgLy8gSWYg
ZWl0aGVyIGlzIG51bGwsIHJldHVybiBmYWxzZS4gSWYgYm90aCBhcmUgbnVsbCwgcmV0dXJuIHRy
dWUuCi0gICAgICAgIGlmIChhID09IGIpCisgICAgICAgIGlmICgmYSA9PSAmYikKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB2YWx1ZShhKSA9PSB2YWx1ZShiKTsKICAgICB9CiAK
LSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBS
ZW5kZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25z
dCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvKSBjb25zdCBmaW5hbAog
ICAgIHsKICAgICAgICAgYXV0byBmcm9tVmFyaWF0aW9uU2V0dGluZ3MgPSB2YWx1ZShmcm9tKTsK
ICAgICAgICAgYXV0byB0b1ZhcmlhdGlvblNldHRpbmdzID0gdmFsdWUodG8pOwpAQCAtOTMxLDE0
ICs5MzQsMTEgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIGVxdWFscyhj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IGZpbmFsCisg
ICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUmIGEsIGNvbnN0IFJlbmRlclN0eWxlJiBi
KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50ZXJzIGFy
ZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAgICAvLyBJZiBl
aXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1cm4gdHJ1
ZS4KLSAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgaWYgKCZhID09ICZiKQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICBhdXRvKiBzaGFwZUEgPSB2YWx1ZShhKTsKICAgICAgICAgYXV0
byogc2hhcGVCID0gdmFsdWUoYik7CkBAIC05NDksNyArOTQ5LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgcmV0dXJuICpzaGFwZUEgPT0gKnNoYXBlQjsKICAgICB9CiAKLSAgICBib29sIGNhbkludGVy
cG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8pIGNv
bnN0IGZpbmFsCisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSYgZnJv
bSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgYXV0
byogZnJvbVNoYXBlID0gdmFsdWUoZnJvbSk7CiAgICAgICAgIGF1dG8qIHRvU2hhcGUgPSB2YWx1
ZSh0byk7CkBAIC05NzYsMTkgKzk3NiwxNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YikgY29uc3QgZmluYWwKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwgY29u
c3QgUmVuZGVyU3R5bGUmIGIpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoYSA9PSBi
KQorICAgICAgICBpZiAoJmEgPT0gJmIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgaWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGF1
dG8qIGltYWdlQSA9IHZhbHVlKGEpOwogICAgICAgICBhdXRvKiBpbWFnZUIgPSB2YWx1ZShiKTsK
ICAgICAgICAgcmV0dXJuIGFyZVBvaW50aW5nVG9FcXVhbERhdGEoaW1hZ2VBLCBpbWFnZUIpOwog
ICAgIH0KIAotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20s
IGNvbnN0IFJlbmRlclN0eWxlKiB0bykgY29uc3QgZmluYWwKKyAgICBib29sIGNhbkludGVycG9s
YXRlKGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8pIGNvbnN0
IGZpbmFsCiAgICAgewogICAgICAgICByZXR1cm4gdmFsdWUoZnJvbSkgJiYgdmFsdWUodG8pOwog
ICAgIH0KQEAgLTEwMTksNyArMTAxNyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgYm9vbCBh
bmltYXRpb25Jc0FjY2VsZXJhdGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCi0g
ICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBi
KSBjb25zdCBmaW5hbAorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25z
dCBSZW5kZXJTdHlsZSYgYikgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHJldHVybiBhcmVQ
b2ludGluZ1RvRXF1YWxEYXRhKHRoaXMtPnZhbHVlKGEpLCB0aGlzLT52YWx1ZShiKSk7CiAgICAg
fQpAQCAtMTA0Myw5ICsxMDQxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIDsKICAgICB9CiAK
LSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwg
UmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3Qg
UmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBi
bGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBj
b25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBj
b250ZXh0KSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0
ZXIpKGJsZW5kRnVuYyhjbGllbnQsIHZhbHVlKGZyb20pLCB2YWx1ZSh0byksIHByb2dyZXNzLCBw
cm9wZXJ0eSgpKSk7CisgICAgICAgIChkZXN0aW5hdGlvbi4qbV9zZXR0ZXIpKGJsZW5kRnVuYyh2
YWx1ZShmcm9tKSwgdmFsdWUodG8pLCBjb250ZXh0LCBwcm9wZXJ0eSgpKSk7CiAgICAgfQogfTsK
IApAQCAtMTA4NCwxNSArMTA4MiwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAg
IGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikg
Y29uc3QgZmluYWwKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwgY29uc3Qg
UmVuZGVyU3R5bGUmIGIpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoYSA9PSBiKQor
ICAgICAgICBpZiAoJmEgPT0gJmIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
aWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGNvbnN0
IFNoYWRvd0RhdGEqIHNoYWRvd0EgPSAoYS0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBjb25zdCBT
aGFkb3dEYXRhKiBzaGFkb3dCID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAgY29uc3QgU2hh
ZG93RGF0YSogc2hhZG93QSA9IChhLiptX2dldHRlcikoKTsKKyAgICAgICAgY29uc3QgU2hhZG93
RGF0YSogc2hhZG93QiA9IChiLiptX2dldHRlcikoKTsKIAogICAgICAgICB3aGlsZSAodHJ1ZSkg
ewogICAgICAgICAgICAgLy8gZW5kIG9mIGJvdGggbGlzdHMKQEAgLTExMTMsMTAgKzExMDksMTAg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBjYW5J
bnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRv
KSBjb25zdCBmaW5hbAorICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUm
IGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAg
IGNvbnN0IFNoYWRvd0RhdGEqIGZyb21TaGFkb3cgPSAoZnJvbS0+Km1fZ2V0dGVyKSgpOwotICAg
ICAgICBjb25zdCBTaGFkb3dEYXRhKiB0b1NoYWRvdyA9ICh0by0+Km1fZ2V0dGVyKSgpOworICAg
ICAgICBjb25zdCBTaGFkb3dEYXRhKiBmcm9tU2hhZG93ID0gKGZyb20uKm1fZ2V0dGVyKSgpOwor
ICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiB0b1NoYWRvdyA9ICh0by4qbV9nZXR0ZXIpKCk7CiAK
ICAgICAgICAgLy8gVGhlIG9ubHkgc2NlbmFyaW8gd2hlcmUgd2UgY2FuJ3QgaW50ZXJwb2xhdGUg
aXMgaWYgc3BlY2lmaWVkIGl0ZW1zIGRvbid0IGhhdmUgdGhlIHNhbWUgc2hhZG93IHN0eWxlLgog
ICAgICAgICB3aGlsZSAoZnJvbVNoYWRvdyAmJiB0b1NoYWRvdykgewpAQCAtMTEyOSwxNSArMTEy
NSwxNSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB2b2lk
IGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5
bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5
bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5k
ZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5k
ZXJTdHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBj
b25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZnJvbVNoYWRvdyA9
IChmcm9tLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHRvU2hhZG93
ID0gKHRvLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIGZyb21TaGFk
b3cgPSAoZnJvbS4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHRvU2hh
ZG93ID0gKHRvLiptX2dldHRlcikoKTsKIAotICAgICAgICBpZiAoIWNhbkludGVycG9sYXRlKGZy
b20sIHRvKSkgewotICAgICAgICAgICAgQVNTRVJUKCFwcm9ncmVzcyB8fCBwcm9ncmVzcyA9PSAx
LjApOwotICAgICAgICAgICAgYXV0byogc2hhZG93ID0gcHJvZ3Jlc3MgPyB0b1NoYWRvdyA6IGZy
b21TaGFkb3c7Ci0gICAgICAgICAgICAoZGVzdGluYXRpb24tPiptX3NldHRlcikoc2hhZG93ID8g
bWFrZVVuaXF1ZTxTaGFkb3dEYXRhPigqc2hhZG93KSA6IG51bGxwdHIsIGZhbHNlKTsKKyAgICAg
ICAgaWYgKGNvbnRleHQuaXNEaXNjcmV0ZSkgeworICAgICAgICAgICAgQVNTRVJUKCFjb250ZXh0
LnByb2dyZXNzIHx8IGNvbnRleHQucHJvZ3Jlc3MgPT0gMS4wKTsKKyAgICAgICAgICAgIGF1dG8q
IHNoYWRvdyA9IGNvbnRleHQucHJvZ3Jlc3MgPyB0b1NoYWRvdyA6IGZyb21TaGFkb3c7CisgICAg
ICAgICAgICAoZGVzdGluYXRpb24uKm1fc2V0dGVyKShzaGFkb3cgPyBtYWtlVW5pcXVlPFNoYWRv
d0RhdGE+KCpzaGFkb3cpIDogbnVsbHB0ciwgZmFsc2UpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKQEAgLTExNDUsMjIgKzExNDEsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgaW50
IHRvTGVuZ3RoID0gc2hhZG93TGlzdExlbmd0aCh0b1NoYWRvdyk7CiAKICAgICAgICAgaWYgKGZy
b21MZW5ndGggPT0gdG9MZW5ndGggfHwgKGZyb21MZW5ndGggPD0gMSAmJiB0b0xlbmd0aCA8PSAx
KSkgewotICAgICAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0ZXIpKGJsZW5kU2ltcGxlT3JN
YXRjaGVkU2hhZG93TGlzdHMoY2xpZW50LCBwcm9ncmVzcywgZnJvbVNoYWRvdywgdG9TaGFkb3cp
LCBmYWxzZSk7CisgICAgICAgICAgICAoZGVzdGluYXRpb24uKm1fc2V0dGVyKShibGVuZFNpbXBs
ZU9yTWF0Y2hlZFNoYWRvd0xpc3RzKGZyb21TaGFkb3csIHRvU2hhZG93LCBjb250ZXh0KSwgZmFs
c2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgKGRlc3RpbmF0
aW9uLT4qbV9zZXR0ZXIpKGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGNsaWVudCwgcHJvZ3Jl
c3MsIGZyb21TaGFkb3csIHRvU2hhZG93LCBmcm9tTGVuZ3RoLCB0b0xlbmd0aCksIGZhbHNlKTsK
KyAgICAgICAgKGRlc3RpbmF0aW9uLiptX3NldHRlcikoYmxlbmRNaXNtYXRjaGVkU2hhZG93TGlz
dHMoZnJvbVNoYWRvdywgdG9TaGFkb3csIGZyb21MZW5ndGgsIHRvTGVuZ3RoLCBjb250ZXh0KSwg
ZmFsc2UpOwogICAgIH0KIAogI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSos
IGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJl
bmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGRvdWJs
ZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBiZXR0ZXIg
bG9nZ2luZy4KICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAi
ICBibGVuZGluZyBTaGFkb3dEYXRhIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVz
cGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7CiAgICAgfQogI2VuZGlmCiAKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRTaW1wbGVPck1hdGNoZWRTaGFkb3dMaXN0cyhjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIGRvdWJsZSBwcm9ncmVzcywgY29u
c3QgU2hhZG93RGF0YSogc2hhZG93QSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QikgY29uc3QK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRTaW1wbGVPck1hdGNoZWRTaGFk
b3dMaXN0cyhjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFk
b3dCLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBuZXdTaGFkb3dEYXRhOwog
ICAgICAgICBTaGFkb3dEYXRhKiBsYXN0U2hhZG93ID0gMDsKQEAgLTExNjksNyArMTE2NSw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFkb3cgPSBzaGFk
b3dGb3JCbGVuZGluZyhzaGFkb3dBLCBzaGFkb3dCKTsKICAgICAgICAgICAgIGNvbnN0IFNoYWRv
d0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0IsIHNoYWRvd0EpOwog
Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRlZFNoYWRvdyA9
IGJsZW5kRnVuYyhjbGllbnQsIHNyY1NoYWRvdywgZHN0U2hhZG93LCBwcm9ncmVzcyk7CisgICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRlZFNoYWRvdyA9IGJsZW5k
RnVuYyhzcmNTaGFkb3csIGRzdFNoYWRvdywgY29udGV4dCk7CiAgICAgICAgICAgICBTaGFkb3dE
YXRhKiBibGVuZGVkU2hhZG93UHRyID0gYmxlbmRlZFNoYWRvdy5nZXQoKTsKIAogICAgICAgICAg
ICAgaWYgKCFsYXN0U2hhZG93KQpAQCAtMTE4Niw3ICsxMTgyLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgcmV0dXJuIG5ld1NoYWRvd0RhdGE7CiAgICAgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNo
YWRvd0RhdGE+IGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGNvbnN0IENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQqIGNsaWVudCwgZG91YmxlIHByb2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBz
aGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dCLCBpbnQgZnJvbUxlbmd0aCwgaW50IHRv
TGVuZ3RoKSBjb25zdAorICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZE1pc21h
dGNoZWRTaGFkb3dMaXN0cyhjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dE
YXRhKiBzaGFkb3dCLCBpbnQgZnJvbUxlbmd0aCwgaW50IHRvTGVuZ3RoLCBjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICB7CiAgICAgICAgIC8vIFRo
ZSBzaGFkb3dzIGluIFNoYWRvd0RhdGEgYXJlIHN0b3JlZCBpbiByZXZlcnNlIG9yZGVyLCBzbyB3
aGVuIGFuaW1hdGluZyBtaXNtYXRjaGVkIGxpc3RzLAogICAgICAgICAvLyByZXZlcnNlIHRoZW0g
YW5kIG1hdGNoIGZyb20gdGhlIGVuZC4KQEAgLTEyMTIsNyArMTIwOCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFkb3cgPSBzaGFkb3dGb3JCbGVuZGlu
Zyhmcm9tU2hhZG93LCB0b1NoYWRvdyk7CiAgICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBk
c3RTaGFkb3cgPSBzaGFkb3dGb3JCbGVuZGluZyh0b1NoYWRvdywgZnJvbVNoYWRvdyk7CiAKLSAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxl
bmRGdW5jKGNsaWVudCwgc3JjU2hhZG93LCBkc3RTaGFkb3csIHByb2dyZXNzKTsKKyAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxlbmRGdW5j
KHNyY1NoYWRvdywgZHN0U2hhZG93LCBjb250ZXh0KTsKICAgICAgICAgICAgIC8vIEluc2VydCBh
dCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QgdG8gcHJlc2VydmUgdGhlIG9yZGVyLgogICAgICAgICAg
ICAgYmxlbmRlZFNoYWRvdy0+c2V0TmV4dChXVEZNb3ZlKG5ld1NoYWRvd0RhdGEpKTsKICAgICAg
ICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZNb3ZlKGJsZW5kZWRTaGFkb3cpOwpAQCAtMTIzNiwx
MiArMTIzMiwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIGJvb2wgZXF1YWxz
KGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QgZmluYWwK
KyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwgY29uc3QgUmVuZGVyU3R5bGUm
IGIpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICBpZiAo
JmEgPT0gJmIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFi
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIENvbG9yIGZyb21Db2xvciA9
IHZhbHVlKGEpOwogICAgICAgICBDb2xvciB0b0NvbG9yID0gdmFsdWUoYik7CkBAIC0xMjUwLDE0
ICsxMjQ0LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAg
ICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBmcm9tQ29sb3IgPSBhLT5j
b2xvcigpOworICAgICAgICAgICAgZnJvbUNvbG9yID0gYS5jb2xvcigpOwogICAgICAgICBpZiAo
IXRvQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgdG9Db2xvciA9IGItPmNvbG9yKCk7Cisg
ICAgICAgICAgICB0b0NvbG9yID0gYi5jb2xvcigpOwogCiAgICAgICAgIHJldHVybiBmcm9tQ29s
b3IgPT0gdG9Db2xvcjsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBS
ZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNv
bnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAg
ICAgQ29sb3IgZnJvbUNvbG9yID0gdmFsdWUoZnJvbSk7CiAgICAgICAgIENvbG9yIHRvQ29sb3Ig
PSB2YWx1ZSh0byk7CkBAIC0xMjY2LDIyICsxMjYwLDIyIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAg
ICAgZnJvbUNvbG9yID0gZnJvbS0+Y29sb3IoKTsKKyAgICAgICAgICAgIGZyb21Db2xvciA9IGZy
b20uY29sb3IoKTsKICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAg
IHRvQ29sb3IgPSB0by0+Y29sb3IoKTsKLSAgICAgICAgKGRlc3RpbmF0aW9uLT4qbV9zZXR0ZXIp
KGJsZW5kRnVuYyhjbGllbnQsIGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKKyAgICAg
ICAgICAgIHRvQ29sb3IgPSB0by5jb2xvcigpOworICAgICAgICAoZGVzdGluYXRpb24uKm1fc2V0
dGVyKShibGVuZEZ1bmMoZnJvbUNvbG9yLCB0b0NvbG9yLCBjb250ZXh0KSk7CiAgICAgfQogCi0g
ICAgQ29sb3IgdmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorICAgIENvbG9y
IHZhbHVlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiAoc3R5bGUtPiptX2dldHRlcikoKTsKKyAgICAgICAgcmV0dXJuIChzdHlsZS4qbV9nZXR0
ZXIpKCk7CiAgICAgfQogCiAjaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29u
c3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgY29uc3QgUmVuZGVy
U3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgbG9n
QmxlbmQoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bywgY29u
c3QgUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFs
CiAgICAgewogICAgICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcuCi0gICAgICAgIExPR19X
SVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9w
ZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoZnJvbSkgPDwgIiB0byAi
IDw8IHZhbHVlKHRvKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVj
dGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAg
ICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8
PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoZnJvbSkg
PDwgIiB0byAiIDw8IHZhbHVlKHRvKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVt
YmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUoZGVzdGlu
YXRpb24pKTsKICAgICB9CiAjZW5kaWYKIApAQCAtMTMwOCwxNSArMTMwMiwxNSBAQCBwdWJsaWM6
CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIGJvb2wgZXF1YWxz
KGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25zdCBSZW5kZXJTdHlsZSYgYikgY29uc3Qgb3ZlcnJp
ZGUKICAgICB7CiAgICAgICAgIHJldHVybiBtX3dyYXBwZXItPmVxdWFscyhhLCBiKSAmJiBtX3Zp
c2l0ZWRXcmFwcGVyLT5lcXVhbHMoYSwgYik7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5h
dGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91
YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUm
IGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUm
IHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3Qgb3Zl
cnJpZGUKICAgICB7Ci0gICAgICAgIG1fd3JhcHBlci0+YmxlbmQoY2xpZW50LCBkZXN0aW5hdGlv
biwgZnJvbSwgdG8sIHByb2dyZXNzKTsKLSAgICAgICAgbV92aXNpdGVkV3JhcHBlci0+YmxlbmQo
Y2xpZW50LCBkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAgICAgICAgbV93cmFw
cGVyLT5ibGVuZChkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIGNvbnRleHQpOworICAgICAgICBtX3Zp
c2l0ZWRXcmFwcGVyLT5ibGVuZChkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIGNvbnRleHQpOwogICAg
IH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPiBt
X3dyYXBwZXI7CkBAIC0xMzI0LDE5ICsxMzE4LDE5IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToK
ICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSog
ZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBk
b3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5k
ZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBSZW5kZXJTdHlsZSYg
ZGVzdGluYXRpb24sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAg
IG1fd3JhcHBlci0+bG9nQmxlbmQoZnJvbSwgdG8sIHJlc3VsdCwgcHJvZ3Jlc3MpOwotICAgICAg
ICBtX3Zpc2l0ZWRXcmFwcGVyLT5sb2dCbGVuZChmcm9tLCB0bywgcmVzdWx0LCBwcm9ncmVzcyk7
CisgICAgICAgIG1fd3JhcHBlci0+bG9nQmxlbmQoZnJvbSwgdG8sIGRlc3RpbmF0aW9uLCBwcm9n
cmVzcyk7CisgICAgICAgIG1fdmlzaXRlZFdyYXBwZXItPmxvZ0JsZW5kKGZyb20sIHRvLCBkZXN0
aW5hdGlvbiwgcHJvZ3Jlc3MpOwogICAgIH0KICNlbmRpZgogfTsKIAotc3RhdGljIGJvb2wgY2Fu
SW50ZXJwb2xhdGVDYXJldENvbG9yKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5k
ZXJTdHlsZSogdG8sIGJvb2wgdmlzaXRlZCkKK3N0YXRpYyBib29sIGNhbkludGVycG9sYXRlQ2Fy
ZXRDb2xvcihjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBi
b29sIHZpc2l0ZWQpCiB7CiAgICAgaWYgKHZpc2l0ZWQpCi0gICAgICAgIHJldHVybiAhZnJvbS0+
aGFzVmlzaXRlZExpbmtBdXRvQ2FyZXRDb2xvcigpICYmICF0by0+aGFzVmlzaXRlZExpbmtBdXRv
Q2FyZXRDb2xvcigpOwotICAgIHJldHVybiAhZnJvbS0+aGFzQXV0b0NhcmV0Q29sb3IoKSAmJiAh
dG8tPmhhc0F1dG9DYXJldENvbG9yKCk7CisgICAgICAgIHJldHVybiAhZnJvbS5oYXNWaXNpdGVk
TGlua0F1dG9DYXJldENvbG9yKCkgJiYgIXRvLmhhc1Zpc2l0ZWRMaW5rQXV0b0NhcmV0Q29sb3Io
KTsKKyAgICByZXR1cm4gIWZyb20uaGFzQXV0b0NhcmV0Q29sb3IoKSAmJiAhdG8uaGFzQXV0b0Nh
cmV0Q29sb3IoKTsKIH0KIAogY2xhc3MgQ2FyZXRDb2xvclByb3BlcnR5V3JhcHBlciBmaW5hbCA6
IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvciB7CkBAIC0xMzQ4LDM4
ICsxMzQyLDM4IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBlcXVhbHMo
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBmaW5hbAor
ICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25zdCBSZW5kZXJTdHlsZSYg
YikgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIHJldHVybiBhLT5oYXNBdXRvQ2FyZXRDb2xv
cigpID09IGItPmhhc0F1dG9DYXJldENvbG9yKCkKLSAgICAgICAgICAgICYmIGEtPmhhc1Zpc2l0
ZWRMaW5rQXV0b0NhcmV0Q29sb3IoKSA9PSBiLT5oYXNWaXNpdGVkTGlua0F1dG9DYXJldENvbG9y
KCkKKyAgICAgICAgcmV0dXJuIGEuaGFzQXV0b0NhcmV0Q29sb3IoKSA9PSBiLmhhc0F1dG9DYXJl
dENvbG9yKCkKKyAgICAgICAgICAgICYmIGEuaGFzVmlzaXRlZExpbmtBdXRvQ2FyZXRDb2xvcigp
ID09IGIuaGFzVmlzaXRlZExpbmtBdXRvQ2FyZXRDb2xvcigpCiAgICAgICAgICAgICAmJiBQcm9w
ZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcjo6ZXF1YWxzKGEsIGIpOwogICAgIH0KIAot
ICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJl
bmRlclN0eWxlKiB0bykgY29uc3QgZmluYWwKKyAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0
IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8pIGNvbnN0IGZpbmFsCiAg
ICAgewogICAgICAgICByZXR1cm4gY2FuSW50ZXJwb2xhdGVDYXJldENvbG9yKGZyb20sIHRvLCBm
YWxzZSkgfHwgY2FuSW50ZXJwb2xhdGVDYXJldENvbG9yKGZyb20sIHRvLCB0cnVlKTsKICAgICB9
CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVu
dCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29u
c3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9p
ZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9t
LCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0
JiBjb250ZXh0KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgaWYgKGNhbkludGVycG9sYXRl
Q2FyZXRDb2xvcihmcm9tLCB0bywgZmFsc2UpKQotICAgICAgICAgICAgbV93cmFwcGVyLT5ibGVu
ZChjbGllbnQsIGRlc3RpbmF0aW9uLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOworICAgICAgICAgICAg
bV93cmFwcGVyLT5ibGVuZChkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIGNvbnRleHQpOwogICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8qIGJsZW5kaW5nUmVuZGVyU3R5bGUgPSBwcm9ncmVz
cyA8IDAuNSA/IGZyb20gOiB0bzsKLSAgICAgICAgICAgIGlmIChibGVuZGluZ1JlbmRlclN0eWxl
LT5oYXNBdXRvQ2FyZXRDb2xvcigpKQotICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLT5zZXRI
YXNBdXRvQ2FyZXRDb2xvcigpOworICAgICAgICAgICAgYXV0byYgYmxlbmRpbmdSZW5kZXJTdHls
ZSA9IGNvbnRleHQucHJvZ3Jlc3MgPCAwLjUgPyBmcm9tIDogdG87CisgICAgICAgICAgICBpZiAo
YmxlbmRpbmdSZW5kZXJTdHlsZS5oYXNBdXRvQ2FyZXRDb2xvcigpKQorICAgICAgICAgICAgICAg
IGRlc3RpbmF0aW9uLnNldEhhc0F1dG9DYXJldENvbG9yKCk7CiAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZGVzdGluYXRpb24tPnNldENhcmV0Q29sb3IoYmxlbmRpbmdSZW5kZXJT
dHlsZS0+Y2FyZXRDb2xvcigpKTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5zZXRDYXJl
dENvbG9yKGJsZW5kaW5nUmVuZGVyU3R5bGUuY2FyZXRDb2xvcigpKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGlmIChjYW5JbnRlcnBvbGF0ZUNhcmV0Q29sb3IoZnJvbSwgdG8sIHRydWUpKQotICAg
ICAgICAgICAgbV92aXNpdGVkV3JhcHBlci0+YmxlbmQoY2xpZW50LCBkZXN0aW5hdGlvbiwgZnJv
bSwgdG8sIHByb2dyZXNzKTsKKyAgICAgICAgICAgIG1fdmlzaXRlZFdyYXBwZXItPmJsZW5kKGRl
c3RpbmF0aW9uLCBmcm9tLCB0bywgY29udGV4dCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgYXV0byogYmxlbmRpbmdSZW5kZXJTdHlsZSA9IHByb2dyZXNzIDwgMC41ID8gZnJvbSA6IHRv
OwotICAgICAgICAgICAgaWYgKGJsZW5kaW5nUmVuZGVyU3R5bGUtPmhhc1Zpc2l0ZWRMaW5rQXV0
b0NhcmV0Q29sb3IoKSkKLSAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi0+c2V0SGFzVmlzaXRl
ZExpbmtBdXRvQ2FyZXRDb2xvcigpOworICAgICAgICAgICAgYXV0byYgYmxlbmRpbmdSZW5kZXJT
dHlsZSA9IGNvbnRleHQucHJvZ3Jlc3MgPCAwLjUgPyBmcm9tIDogdG87CisgICAgICAgICAgICBp
ZiAoYmxlbmRpbmdSZW5kZXJTdHlsZS5oYXNWaXNpdGVkTGlua0F1dG9DYXJldENvbG9yKCkpCisg
ICAgICAgICAgICAgICAgZGVzdGluYXRpb24uc2V0SGFzVmlzaXRlZExpbmtBdXRvQ2FyZXRDb2xv
cigpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLT5zZXRW
aXNpdGVkTGlua0NhcmV0Q29sb3IoYmxlbmRpbmdSZW5kZXJTdHlsZS0+dmlzaXRlZExpbmtDYXJl
dENvbG9yKCkpOworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLnNldFZpc2l0ZWRMaW5rQ2Fy
ZXRDb2xvcihibGVuZGluZ1JlbmRlclN0eWxlLnZpc2l0ZWRMaW5rQ2FyZXRDb2xvcigpKTsKICAg
ICAgICAgfQogICAgIH0KIH07CkBAIC0xMzk3LDExICsxMzkxLDExIEBAIHB1YmxpYzoKICAgICBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eTsgfQogCiAg
ICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5ZXIq
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQqLCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5
ZXIqLCBkb3VibGUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoRmlsbExheWVy
KiwgY29uc3QgRmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKiwgY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NvbnRleHQmKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGNhbkludGVycG9s
YXRlKGNvbnN0IEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXllciopIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIAogI2lmICFMT0dfRElTQUJMRUQKLSAgICB2aXJ0dWFsIHZvaWQgbG9nQmxlbmQoY29u
c3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXllcios
IGRvdWJsZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxs
TGF5ZXIqIGRlc3RpbmF0aW9uLCBjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5ZXIqLCBk
b3VibGUpIGNvbnN0ID0gMDsKICNlbmRpZgogCiBwcml2YXRlOgpAQCAtMTQzNSw5ICsxNDI5LDkg
QEAgcHJvdGVjdGVkOgogICAgIH0KIAogI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0Js
ZW5kKGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0
IEZpbGxMYXllciogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB2b2lk
IGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciogZGVzdGluYXRpb24sIGNvbnN0IEZpbGxMYXllciog
ZnJvbSwgY29uc3QgRmlsbExheWVyKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlk
ZQogICAgIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAi
ICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAiIGZyb20gIiA8
PCB2YWx1ZShmcm9tKSA8PCAiIHRvICIgPDwgdmFsdWUodG8pIDw8ICIgYXQgIiA8PCBUZXh0U3Ry
ZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8
PCB2YWx1ZShyZXN1bHQpKTsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0
cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAi
IGZyb20gIiA8PCB2YWx1ZShmcm9tKSA8PCAiIHRvICIgPDwgdmFsdWUodG8pIDw8ICIgYXQgIiA8
PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8
ICIgLT4gIiA8PCB2YWx1ZShkZXN0aW5hdGlvbikpOwogICAgIH0KICNlbmRpZgogCkBAIC0xNDU2
LDkgKzE0NTAsOSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgYmxlbmQo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBGaWxsTGF5ZXIqIGRlc3Rp
bmF0aW9uLCBjb25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0IEZpbGxMYXllciogdG8sIGRvdWJs
ZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGJsZW5kKEZpbGxMYXllciogZGVzdGlu
YXRpb24sIGNvbnN0IEZpbGxMYXllciogZnJvbSwgY29uc3QgRmlsbExheWVyKiB0bywgY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0IGZpbmFsCiAgICAgewot
ICAgICAgICAoZGVzdGluYXRpb24tPip0aGlzLT5tX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwg
dGhpcy0+dmFsdWUoZnJvbSksIHRoaXMtPnZhbHVlKHRvKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAg
KGRlc3RpbmF0aW9uLT4qdGhpcy0+bV9zZXR0ZXIpKGJsZW5kRnVuYyh0aGlzLT52YWx1ZShmcm9t
KSwgdGhpcy0+dmFsdWUodG8pLCBjb250ZXh0KSk7CiAgICAgfQogCiAgICAgYm9vbCBjYW5JbnRl
cnBvbGF0ZShjb25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0IEZpbGxMYXllciogdG8pIGNvbnN0
IGZpbmFsCkBAIC0xNDY3LDEyICsxNDYxLDEyIEBAIHByaXZhdGU6CiAgICAgfQogCiAjaWYgIUxP
R19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNv
bnN0IEZpbGxMYXllciogZnJvbSwgY29uc3QgRmlsbExheWVyKiB0bywgZG91YmxlIHByb2dyZXNz
KSBjb25zdCBmaW5hbAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiBkZXN0aW5h
dGlvbiwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25zdCBGaWxsTGF5ZXIqIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5p
bWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKEZpbGxM
YXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnByb3BlcnR5KCkpCiAgICAgICAg
ICAgICA8PCAiIGZyb20gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3Qg
VCY+Ojp2YWx1ZShmcm9tKQogICAgICAgICAgICAgPDwgIiB0byAiIDw8IEZpbGxMYXllclByb3Bl
cnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnZhbHVlKHRvKQotICAgICAgICAgICAgPDwgIiBh
dCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVz
cykgPDwgIiAtPiAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46
OnZhbHVlKHJlc3VsdCkpOworICAgICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZv
cm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxM
YXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnZhbHVlKGRlc3RpbmF0aW9uKSk7
CiAgICAgfQogI2VuZGlmCiAKQEAgLTE1MDgsNyArMTUwMiw3IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBmcm9tTGVuZ3RoID09IHRvTGVuZ3RoICYmIGZyb21FZGdlID09IHRvRWRnZTsKICAg
ICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNs
aWVudCwgRmlsbExheWVyKiBkZXN0aW5hdGlvbiwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25z
dCBGaWxsTGF5ZXIqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBi
bGVuZChGaWxsTGF5ZXIqIGRlc3RpbmF0aW9uLCBjb25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0
IEZpbGxMYXllciogdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0
KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgYXV0byBmcm9tTGVuZ3RoID0gdmFsdWUoZnJv
bSk7CiAgICAgICAgIGF1dG8gdG9MZW5ndGggPSB2YWx1ZSh0byk7CkBAIC0xNTI2LDEzICsxNTIw
LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICAoZGVz
dGluYXRpb24tPiptX2xlbmd0aFNldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgZnJvbUxlbmd0aCwg
dG9MZW5ndGgsIHByb2dyZXNzKSk7CisgICAgICAgIChkZXN0aW5hdGlvbi0+Km1fbGVuZ3RoU2V0
dGVyKShibGVuZEZ1bmMoZnJvbUxlbmd0aCwgdG9MZW5ndGgsIGNvbnRleHQpKTsKICAgICB9CiAK
ICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJl
c3VsdCwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25zdCBGaWxsTGF5ZXIqIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIq
IGRlc3RpbmF0aW9uLCBjb25zdCBGaWxsTGF5ZXIqIGZyb20sIGNvbnN0IEZpbGxMYXllciogdG8s
IGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIExPR19XSVRIX1NU
UkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5h
bWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoZnJvbSkgPDwgIiB0byAiIDw8IHZh
bHVlKHRvKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0lu
dGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgICAgIExP
R19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQ
cm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoZnJvbSkgPDwgIiB0
byAiIDw8IHZhbHVlKHRvKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVz
cGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUoZGVzdGluYXRpb24p
KTsKICAgICB9CiAjZW5kaWYKIApAQCAtMTU1MywxOCArMTU0NywxOCBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogY2xpZW50LCBGaWxsTGF5ZXIqIGRlc3RpbmF0aW9uLCBjb25zdCBGaWxsTGF5ZXIqIGZy
b20sIGNvbnN0IEZpbGxMYXllciogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAg
ICB2b2lkIGJsZW5kKEZpbGxMYXllciogZGVzdGluYXRpb24sIGNvbnN0IEZpbGxMYXllciogZnJv
bSwgY29uc3QgRmlsbExheWVyKiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICAoZGVzdGluYXRpb24tPip0aGlz
LT5tX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgdGhpcy0+dmFsdWUoZnJvbSksIHRoaXMtPnZh
bHVlKHRvKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgKGRlc3RpbmF0aW9uLT4qdGhpcy0+bV9zZXR0
ZXIpKGJsZW5kRnVuYyh0aGlzLT52YWx1ZShmcm9tKSwgdGhpcy0+dmFsdWUodG8pLCBjb250ZXh0
KSk7CiAgICAgfQogCiAjaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3Qg
RmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogZnJvbSwgY29uc3QgRmlsbExheWVy
KiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHZvaWQgbG9nQmxlbmQo
Y29uc3QgRmlsbExheWVyKiBkZXN0aW5hdGlvbiwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25z
dCBGaWxsTGF5ZXIqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCiAgICAgewog
ICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5n
ICIgPDwgZ2V0UHJvcGVydHlOYW1lKEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46
OnByb3BlcnR5KCkpCiAgICAgICAgICAgICA8PCAiIGZyb20gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8VCo+Ojp2YWx1ZShmcm9tKQogICAgICAgICAgICAgPDwgIiB0byAiIDw8
IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKHRvKQotICAgICAgICAg
ICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vy
cyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxU
Kj46OnZhbHVlKHJlc3VsdCkpOworICAgICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06
OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZp
bGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKGRlc3RpbmF0aW9uKSk7CiAg
ICAgfQogI2VuZGlmCiAKQEAgLTE1OTUsOSArMTU4OSw5IEBAIHByaXZhdGU6CiAgICAgfQogCiAj
aWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1
bHQsIGNvbnN0IEZpbGxMYXllciogZnJvbSwgY29uc3QgRmlsbExheWVyKiB0bywgZG91YmxlIHBy
b2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiBk
ZXN0aW5hdGlvbiwgY29uc3QgRmlsbExheWVyKiBmcm9tLCBjb25zdCBGaWxsTGF5ZXIqIHRvLCBk
b3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBMT0dfV0lUSF9TVFJF
QU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1l
KHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGZyb20pIDw8ICIgdG8gIiA8PCB2YWx1
ZSh0bykgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRl
Z2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOworICAgICAgICBMT0df
V0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJv
cGVydHlOYW1lKHRoaXMtPnByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHRoaXMtPnZhbHVlKGZy
b20pIDw8ICIgdG8gIiA8PCB0aGlzLT52YWx1ZSh0bykgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06
OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IHZh
bHVlKGRlc3RpbmF0aW9uKSk7CiAgICAgfQogI2VuZGlmCiB9OwpAQCAtMTYzNiwxNSArMTYzMCwx
MyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QgZmluYWwKKyAgICBib29s
IGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwgY29uc3QgUmVuZGVyU3R5bGUmIGIpIGNvbnN0
IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICBpZiAoJmEgPT0gJmIp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFiKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGF1dG8qIGZyb21MYXllciA9ICYoYS0+Km1f
bGF5ZXJzR2V0dGVyKSgpOwotICAgICAgICBhdXRvKiB0b0xheWVyID0gJihiLT4qbV9sYXllcnNH
ZXR0ZXIpKCk7CisgICAgICAgIGF1dG8qIGZyb21MYXllciA9ICYoYS4qbV9sYXllcnNHZXR0ZXIp
KCk7CisgICAgICAgIGF1dG8qIHRvTGF5ZXIgPSAmKGIuKm1fbGF5ZXJzR2V0dGVyKSgpOwogCiAg
ICAgICAgIHdoaWxlIChmcm9tTGF5ZXIgJiYgdG9MYXllcikgewogICAgICAgICAgICAgaWYgKCFt
X2ZpbGxMYXllclByb3BlcnR5V3JhcHBlci0+ZXF1YWxzKGZyb21MYXllciwgdG9MYXllcikpCkBA
IC0xNjU3LDEwICsxNjQ5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNv
bnN0IFJlbmRlclN0eWxlKiB0bykgY29uc3QgZmluYWwKKyAgICBib29sIGNhbkludGVycG9sYXRl
KGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8pIGNvbnN0IGZp
bmFsCiAgICAgewotICAgICAgICBhdXRvKiBmcm9tTGF5ZXIgPSAmKGZyb20tPiptX2xheWVyc0dl
dHRlcikoKTsKLSAgICAgICAgYXV0byogdG9MYXllciA9ICYodG8tPiptX2xheWVyc0dldHRlciko
KTsKKyAgICAgICAgYXV0byogZnJvbUxheWVyID0gJihmcm9tLiptX2xheWVyc0dldHRlcikoKTsK
KyAgICAgICAgYXV0byogdG9MYXllciA9ICYodG8uKm1fbGF5ZXJzR2V0dGVyKSgpOwogCiAgICAg
ICAgIHdoaWxlIChmcm9tTGF5ZXIgJiYgdG9MYXllcikgewogICAgICAgICAgICAgaWYgKGZyb21M
YXllci0+c2l6ZVR5cGUoKSAhPSB0b0xheWVyLT5zaXplVHlwZSgpKQpAQCAtMTY3NiwxNSArMTY2
OCwxNSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB2b2lk
IGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5
bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5
bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5k
ZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5k
ZXJTdHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBj
b25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgYXV0byogZnJvbUxheWVyID0gJihmcm9tLT4qbV9s
YXllcnNHZXR0ZXIpKCk7Ci0gICAgICAgIGF1dG8qIHRvTGF5ZXIgPSAmKHRvLT4qbV9sYXllcnNH
ZXR0ZXIpKCk7Ci0gICAgICAgIGF1dG8qIGRzdExheWVyID0gJihkZXN0aW5hdGlvbi0+Km1fbGF5
ZXJzQWNjZXNzb3IpKCk7CisgICAgICAgIGF1dG8qIGZyb21MYXllciA9ICYoZnJvbS4qbV9sYXll
cnNHZXR0ZXIpKCk7CisgICAgICAgIGF1dG8qIHRvTGF5ZXIgPSAmKHRvLiptX2xheWVyc0dldHRl
cikoKTsKKyAgICAgICAgYXV0byogZHN0TGF5ZXIgPSAmKGRlc3RpbmF0aW9uLiptX2xheWVyc0Fj
Y2Vzc29yKSgpOwogCiAgICAgICAgIHdoaWxlIChmcm9tTGF5ZXIgJiYgdG9MYXllciAmJiBkc3RM
YXllcikgewotICAgICAgICAgICAgZHN0TGF5ZXItPnNldFNpemVUeXBlKChwcm9ncmVzcyA/IHRv
TGF5ZXIgOiBmcm9tTGF5ZXIpLT5zaXplVHlwZSgpKTsKLSAgICAgICAgICAgIG1fZmlsbExheWVy
UHJvcGVydHlXcmFwcGVyLT5ibGVuZChjbGllbnQsIGRzdExheWVyLCBmcm9tTGF5ZXIsIHRvTGF5
ZXIsIHByb2dyZXNzKTsKKyAgICAgICAgICAgIGRzdExheWVyLT5zZXRTaXplVHlwZSgoY29udGV4
dC5wcm9ncmVzcyA/IHRvTGF5ZXIgOiBmcm9tTGF5ZXIpLT5zaXplVHlwZSgpKTsKKyAgICAgICAg
ICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5ibGVuZChkc3RMYXllciwgZnJvbUxheWVy
LCB0b0xheWVyLCBjb250ZXh0KTsKICAgICAgICAgICAgIGZyb21MYXllciA9IGZyb21MYXllci0+
bmV4dCgpOwogICAgICAgICAgICAgdG9MYXllciA9IHRvTGF5ZXItPm5leHQoKTsKICAgICAgICAg
ICAgIGRzdExheWVyID0gZHN0TGF5ZXItPm5leHQoKTsKQEAgLTE2OTIsMTEgKzE2ODQsMTEgQEAg
cHJpdmF0ZToKICAgICB9CiAKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChj
b25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBjb25zdCBSZW5k
ZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBs
b2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBj
b25zdCBSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmlu
YWwKICAgICB7Ci0gICAgICAgIGF1dG8qIGZyb21MYXllciA9ICYoZnJvbS0+Km1fbGF5ZXJzR2V0
dGVyKSgpOwotICAgICAgICBhdXRvKiB0b0xheWVyID0gJih0by0+Km1fbGF5ZXJzR2V0dGVyKSgp
OwotICAgICAgICBhdXRvKiBkc3RMYXllciA9ICYocmVzdWx0LT4qbV9sYXllcnNHZXR0ZXIpKCk7
CisgICAgICAgIGF1dG8qIGZyb21MYXllciA9ICYoZnJvbS4qbV9sYXllcnNHZXR0ZXIpKCk7Cisg
ICAgICAgIGF1dG8qIHRvTGF5ZXIgPSAmKHRvLiptX2xheWVyc0dldHRlcikoKTsKKyAgICAgICAg
YXV0byogZHN0TGF5ZXIgPSAmKGRlc3RpbmF0aW9uLiptX2xheWVyc0dldHRlcikoKTsKIAogICAg
ICAgICB3aGlsZSAoZnJvbUxheWVyICYmIHRvTGF5ZXIgJiYgZHN0TGF5ZXIpIHsKICAgICAgICAg
ICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5sb2dCbGVuZChkc3RMYXllciwgZnJvbUxh
eWVyLCB0b0xheWVyLCBwcm9ncmVzcyk7CkBAIC0xNzI2LDEyICsxNzE4LDEwIEBAIHB1YmxpYzoK
ICAgICBjb25zdCBWZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+JiBwcm9wZXJ0
eVdyYXBwZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzOyB9CiAKIHByaXZh
dGU6Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiKSBjb25zdCBmaW5hbAorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlJiBh
LCBjb25zdCBSZW5kZXJTdHlsZSYgYikgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIGlmIChh
ID09IGIpCisgICAgICAgIGlmICgmYSA9PSAmYikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgZm9yIChhdXRvJiB3cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKSB7CiAgICAgICAgICAg
ICBpZiAoIXdyYXBwZXItPmVxdWFscyhhLCBiKSkKQEAgLTE3NDAsMTQgKzE3MzAsMTQgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdm9pZCBibGVuZChjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRlclN0eWxlKiBkZXN0aW5h
dGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91
YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRl
c3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRv
LCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QgZmluYWwK
ICAgICB7CiAgICAgICAgIGZvciAoYXV0byYgd3JhcHBlciA6IG1fcHJvcGVydHlXcmFwcGVycykK
LSAgICAgICAgICAgIHdyYXBwZXItPmJsZW5kKGNsaWVudCwgZGVzdGluYXRpb24sIGZyb20sIHRv
LCBwcm9ncmVzcyk7CisgICAgICAgICAgICB3cmFwcGVyLT5ibGVuZChkZXN0aW5hdGlvbiwgZnJv
bSwgdG8sIGNvbnRleHQpOwogICAgIH0KIAogI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxv
Z0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8sIGNv
bnN0IFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5h
bAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRl
clN0eWxlJiB0bywgY29uc3QgUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBmb3IgKGF1dG8mIHdyYXBwZXIgOiBtX3By
b3BlcnR5V3JhcHBlcnMpCiAgICAgICAgICAgICB3cmFwcGVyLT5sb2dCbGVuZChmcm9tLCB0bywg
ZGVzdGluYXRpb24sIHByb2dyZXNzKTsKQEAgLTE3NjYsMzAgKzE3NTYsMjggQEAgcHVibGljOgog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IGZpbmFsCisgICAgYm9vbCBlcXVhbHMoY29uc3Qg
UmVuZGVyU3R5bGUmIGEsIGNvbnN0IFJlbmRlclN0eWxlJiBiKSBjb25zdCBmaW5hbAogICAgIHsK
LSAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgaWYgKCZhID09ICZiKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgICAgICByZXR1cm4gYS0+ZmxleEJhc2lzKCkgPT0gYi0+ZmxleEJhc2lzKCkg
JiYgYS0+ZmxleEdyb3coKSA9PSBiLT5mbGV4R3JvdygpICYmIGEtPmZsZXhTaHJpbmsoKSA9PSBi
LT5mbGV4U2hyaW5rKCk7CisgICAgICAgIHJldHVybiBhLmZsZXhCYXNpcygpID09IGIuZmxleEJh
c2lzKCkgJiYgYS5mbGV4R3JvdygpID09IGIuZmxleEdyb3coKSAmJiBhLmZsZXhTaHJpbmsoKSA9
PSBiLmZsZXhTaHJpbmsoKTsKICAgICB9CiAKLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0
IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCisg
ICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVu
ZGVyU3R5bGUmIHRvKSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgcmV0dXJuIGZyb20tPmZs
ZXhHcm93KCkgIT0gdG8tPmZsZXhHcm93KCkgJiYgZnJvbS0+ZmxleFNocmluaygpICE9IHRvLT5m
bGV4U2hyaW5rKCkgJiYgY2FuSW50ZXJwb2xhdGVMZW5ndGhzKGZyb20tPmZsZXhCYXNpcygpLCB0
by0+ZmxleEJhc2lzKCksIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGZyb20uZmxleEdyb3coKSAh
PSB0by5mbGV4R3JvdygpICYmIGZyb20uZmxleFNocmluaygpICE9IHRvLmZsZXhTaHJpbmsoKSAm
JiBjYW5JbnRlcnBvbGF0ZUxlbmd0aHMoZnJvbS5mbGV4QmFzaXMoKSwgdG8uZmxleEJhc2lzKCks
IGZhbHNlKTsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJT
dHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0
IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJl
bmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgZGVz
dGluYXRpb24tPnNldEZsZXhCYXNpcyhibGVuZEZ1bmMoY2xpZW50LCBmcm9tLT5mbGV4QmFzaXMo
KSwgdG8tPmZsZXhCYXNpcygpLCBwcm9ncmVzcykpOwotICAgICAgICBkZXN0aW5hdGlvbi0+c2V0
RmxleEdyb3coYmxlbmRGdW5jKGNsaWVudCwgZnJvbS0+ZmxleEdyb3coKSwgdG8tPmZsZXhHcm93
KCksIHByb2dyZXNzKSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uLT5zZXRGbGV4U2hyaW5rKGJsZW5k
RnVuYyhjbGllbnQsIGZyb20tPmZsZXhTaHJpbmsoKSwgdG8tPmZsZXhTaHJpbmsoKSwgcHJvZ3Jl
c3MpKTsKKyAgICAgICAgZGVzdGluYXRpb24uc2V0RmxleEJhc2lzKGJsZW5kRnVuYyhmcm9tLmZs
ZXhCYXNpcygpLCB0by5mbGV4QmFzaXMoKSwgY29udGV4dCkpOworICAgICAgICBkZXN0aW5hdGlv
bi5zZXRGbGV4R3JvdyhibGVuZEZ1bmMoZnJvbS5mbGV4R3JvdygpLCB0by5mbGV4R3JvdygpLCBj
b250ZXh0KSk7CisgICAgICAgIGRlc3RpbmF0aW9uLnNldEZsZXhTaHJpbmsoYmxlbmRGdW5jKGZy
b20uZmxleFNocmluaygpLCB0by5mbGV4U2hyaW5rKCksIGNvbnRleHQpKTsKICAgICB9CiAKICNp
ZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSosIGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUgcHJvZ3Jlc3MpIGNv
bnN0IGZpbmFsCisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJl
bmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZp
bmFsCiAgICAgewogICAgICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcuCiAgICAgICAgIExP
R19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgZmxleCBhdCAi
IDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykp
OwpAQCAtMTgwOSwyMiArMTc5NywyMCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAg
IGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikg
Y29uc3QgZmluYWwKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwgY29uc3Qg
UmVuZGVyU3R5bGUmIGIpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoYSA9PSBiKQor
ICAgICAgICBpZiAoJmEgPT0gJmIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
aWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmICgo
YS0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpICE9IChiLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkpCisg
ICAgICAgIGlmICgoYS4qbV9wYWludFR5cGVHZXR0ZXIpKCkgIT0gKGIuKm1fcGFpbnRUeXBlR2V0
dGVyKSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIC8vIFdlIG9ubHkg
c3VwcG9ydCBhbmltYXRpb25zIGJldHdlZW4gU1ZHUGFpbnRzIHRoYXQgYXJlIHB1cmUgQ29sb3Ig
dmFsdWVzLgogICAgICAgICAvLyBGb3IgZXZlcnl0aGluZyBlbHNlIHdlIG11c3QgcmV0dXJuIHRy
dWUgZm9yIHRoaXMgbWV0aG9kLCBvdGhlcndpc2UKICAgICAgICAgLy8gd2Ugd2lsbCB0cnkgdG8g
YW5pbWF0ZSBiZXR3ZWVuIHZhbHVlcyBmb3JldmVyLgotICAgICAgICBpZiAoKGEtPiptX3BhaW50
VHlwZUdldHRlcikoKSA9PSBTVkdQYWludFR5cGU6OlJHQkNvbG9yKSB7Ci0gICAgICAgICAgICBD
b2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVyKSgpOwotICAgICAgICAgICAgQ29sb3IgdG9D
b2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGlmICgoYS4qbV9wYWludFR5cGVHZXR0
ZXIpKCkgPT0gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvcikgeworICAgICAgICAgICAgQ29sb3IgZnJv
bUNvbG9yID0gKGEuKm1fZ2V0dGVyKSgpOworICAgICAgICAgICAgQ29sb3IgdG9Db2xvciA9IChi
LiptX2dldHRlcikoKTsKIAogICAgICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpICYm
ICF0b0NvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE4
MzksMTQgKzE4MjUsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
Ci0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQs
IFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0
IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQg
YmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwg
Y29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYg
Y29udGV4dCkgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIGlmICgoZnJvbS0+Km1fcGFpbnRU
eXBlR2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IKLSAgICAgICAgICAgIHx8ICh0
by0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IpCisgICAg
ICAgIGlmICgoZnJvbS4qbV9wYWludFR5cGVHZXR0ZXIpKCkgIT0gU1ZHUGFpbnRUeXBlOjpSR0JD
b2xvcgorICAgICAgICAgICAgfHwgKHRvLiptX3BhaW50VHlwZUdldHRlcikoKSAhPSBTVkdQYWlu
dFR5cGU6OlJHQkNvbG9yKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIENvbG9yIGZy
b21Db2xvciA9IChmcm9tLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIENvbG9yIHRvQ29sb3IgPSAo
dG8tPiptX2dldHRlcikoKTsKKyAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gKGZyb20uKm1fZ2V0
dGVyKSgpOworICAgICAgICBDb2xvciB0b0NvbG9yID0gKHRvLiptX2dldHRlcikoKTsKIAogICAg
ICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkgJiYgIXRvQ29sb3IuaXNWYWxpZCgpKQogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtMTg1NSwxMSArMTg0MSwxMSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgZnJvbUNvbG9yID0gQ29sb3IoKTsKICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQo
KSkKICAgICAgICAgICAgIHRvQ29sb3IgPSBDb2xvcigpOwotICAgICAgICAoZGVzdGluYXRpb24t
PiptX3NldHRlcikoYmxlbmRGdW5jKGNsaWVudCwgZnJvbUNvbG9yLCB0b0NvbG9yLCBwcm9ncmVz
cykpOworICAgICAgICAoZGVzdGluYXRpb24uKm1fc2V0dGVyKShibGVuZEZ1bmMoZnJvbUNvbG9y
LCB0b0NvbG9yLCBjb250ZXh0KSk7CiAgICAgfQogCiAjaWYgIUxPR19ESVNBQkxFRAotICAgIHZv
aWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0
IFJlbmRlclN0eWxlKiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgbG9n
QmxlbmQoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRl
clN0eWxlJiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgLy8g
RklYTUU6IGJldHRlciBsb2dnaW5nLgogICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9u
cywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nIFNWR1BhaW50IGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9y
bWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7CkBAIC0xODgwLDMxICsxODY2
LDI5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBjYW5JbnRlcnBvbGF0
ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBm
aW5hbAorICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNv
bnN0IFJlbmRlclN0eWxlJiB0bykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIHJldHVybiBm
cm9tLT5mb250SXRhbGljKCkgJiYgdG8tPmZvbnRJdGFsaWMoKSAmJiBmcm9tLT5mb250RGVzY3Jp
cHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhpczo6c2xudCAmJiB0by0+Zm9u
dERlc2NyaXB0aW9uKCkuZm9udFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4aXM6OnNsbnQ7Cisg
ICAgICAgIHJldHVybiBmcm9tLmZvbnRJdGFsaWMoKSAmJiB0by5mb250SXRhbGljKCkgJiYgZnJv
bS5mb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhpczo6c2xu
dCAmJiB0by5mb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhp
czo6c2xudDsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJT
dHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0
IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJl
bmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgYXV0
byBkaXNjcmV0ZSA9ICFjYW5JbnRlcnBvbGF0ZShmcm9tLCB0byk7Ci0KICAgICAgICAgYXV0byBi
bGVuZGVkU3R5bGVBeGlzID0gRm9udFN0eWxlQXhpczo6c2xudDsKLSAgICAgICAgaWYgKGRpc2Ny
ZXRlKQotICAgICAgICAgICAgYmxlbmRlZFN0eWxlQXhpcyA9IChwcm9ncmVzcyA8IDAuNSA/IGZy
b20gOiB0byktPmZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKTsKKyAgICAgICAgaWYg
KGNvbnRleHQuaXNEaXNjcmV0ZSkKKyAgICAgICAgICAgIGJsZW5kZWRTdHlsZUF4aXMgPSAoY29u
dGV4dC5wcm9ncmVzcyA8IDAuNSA/IGZyb20gOiB0bykuZm9udERlc2NyaXB0aW9uKCkuZm9udFN0
eWxlQXhpcygpOwogCi0gICAgICAgIGF1dG8gZnJvbUZvbnRJdGFsaWMgPSBmcm9tLT5mb250SXRh
bGljKCk7Ci0gICAgICAgIGF1dG8gdG9Gb250SXRhbGljID0gdG8tPmZvbnRJdGFsaWMoKTsKLSAg
ICAgICAgYXV0byBibGVuZGVkRm9udEl0YWxpYyA9IHByb2dyZXNzIDwgMC41ID8gZnJvbUZvbnRJ
dGFsaWMgOiB0b0ZvbnRJdGFsaWM7Ci0gICAgICAgIGlmICghZGlzY3JldGUpCi0gICAgICAgICAg
ICBibGVuZGVkRm9udEl0YWxpYyA9IGJsZW5kRnVuYyhjbGllbnQsIGZyb21Gb250SXRhbGljLCB0
b0ZvbnRJdGFsaWMsIHByb2dyZXNzKTsKKyAgICAgICAgYXV0byBmcm9tRm9udEl0YWxpYyA9IGZy
b20uZm9udEl0YWxpYygpOworICAgICAgICBhdXRvIHRvRm9udEl0YWxpYyA9IHRvLmZvbnRJdGFs
aWMoKTsKKyAgICAgICAgYXV0byBibGVuZGVkRm9udEl0YWxpYyA9IGNvbnRleHQucHJvZ3Jlc3Mg
PCAwLjUgPyBmcm9tRm9udEl0YWxpYyA6IHRvRm9udEl0YWxpYzsKKyAgICAgICAgaWYgKCFjb250
ZXh0LmlzRGlzY3JldGUpCisgICAgICAgICAgICBibGVuZGVkRm9udEl0YWxpYyA9IGJsZW5kRnVu
Yyhmcm9tRm9udEl0YWxpYywgdG9Gb250SXRhbGljLCBjb250ZXh0KTsKIAotICAgICAgICBGb250
U2VsZWN0b3IqIGN1cnJlbnRGb250U2VsZWN0b3IgPSBkZXN0aW5hdGlvbi0+Zm9udENhc2NhZGUo
KS5mb250U2VsZWN0b3IoKTsKLSAgICAgICAgYXV0byBkZXNjcmlwdGlvbiA9IGRlc3RpbmF0aW9u
LT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgYXV0byogY3VycmVudEZvbnRTZWxlY3RvciA9
IGRlc3RpbmF0aW9uLmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCk7CisgICAgICAgIGF1dG8g
ZGVzY3JpcHRpb24gPSBkZXN0aW5hdGlvbi5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgZGVz
Y3JpcHRpb24uc2V0SXRhbGljKGJsZW5kZWRGb250SXRhbGljKTsKICAgICAgICAgZGVzY3JpcHRp
b24uc2V0Rm9udFN0eWxlQXhpcyhibGVuZGVkU3R5bGVBeGlzKTsKLSAgICAgICAgZGVzdGluYXRp
b24tPnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGRl
c3RpbmF0aW9uLT5mb250Q2FzY2FkZSgpLnVwZGF0ZShjdXJyZW50Rm9udFNlbGVjdG9yKTsKKyAg
ICAgICAgZGVzdGluYXRpb24uc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZGVzY3JpcHRpb24p
KTsKKyAgICAgICAgZGVzdGluYXRpb24uZm9udENhc2NhZGUoKS51cGRhdGUoY3VycmVudEZvbnRT
ZWxlY3Rvcik7CiAgICAgfQogfTsKIApAQCAtMTkyMSwyOCArMTkwNSwyOCBAQCBwdWJsaWM6CiAg
ICAgfQogCiBwcml2YXRlOgotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5
bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bykgY29uc3QgZmluYWwKKyAgICBib29sIGNh
bkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYg
dG8pIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICByZXR1cm4gIShmcm9tLT4qbV9hdXRvR2V0
dGVyKSgpICYmICEodG8tPiptX2F1dG9HZXR0ZXIpKCk7CisgICAgICAgIHJldHVybiAhKGZyb20u
Km1fYXV0b0dldHRlcikoKSAmJiAhKHRvLiptX2F1dG9HZXR0ZXIpKCk7CiAgICAgfQogCi0gICAg
dm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRl
clN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRl
clN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQo
UmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3Qg
UmVuZGVyU3R5bGUmIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4
dCkgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIGF1dG8gYmxlbmRlZFZhbHVlID0gYmxlbmRG
dW5jKGNsaWVudCwgdGhpcy0+dmFsdWUoZnJvbSksIHRoaXMtPnZhbHVlKHRvKSwgcHJvZ3Jlc3Mp
OworICAgICAgICBhdXRvIGJsZW5kZWRWYWx1ZSA9IGJsZW5kRnVuYyh0aGlzLT52YWx1ZShmcm9t
KSwgdGhpcy0+dmFsdWUodG8pLCBjb250ZXh0KTsKICAgICAgICAgaWYgKG1fbWluVmFsdWUpCiAg
ICAgICAgICAgICBibGVuZGVkVmFsdWUgPSBibGVuZGVkVmFsdWUgPiAqbV9taW5WYWx1ZSA/IGJs
ZW5kZWRWYWx1ZSA6ICptX21pblZhbHVlOwotICAgICAgICAoZGVzdGluYXRpb24tPip0aGlzLT5t
X3NldHRlcikoYmxlbmRlZFZhbHVlKTsKKyAgICAgICAgKGRlc3RpbmF0aW9uLip0aGlzLT5tX3Nl
dHRlcikoYmxlbmRlZFZhbHVlKTsKIAotICAgICAgICBpZiAoY2FuSW50ZXJwb2xhdGUoZnJvbSwg
dG8pKQorICAgICAgICBpZiAoIWNvbnRleHQuaXNEaXNjcmV0ZSkKICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICBBU1NFUlQoIXByb2dyZXNzIHx8IHByb2dyZXNzID09IDEuMCk7Ci0gICAg
ICAgIGlmICghcHJvZ3Jlc3MpIHsKLSAgICAgICAgICAgIGlmICgoZnJvbS0+Km1fYXV0b0dldHRl
cikoKSkKLSAgICAgICAgICAgICAgICAoZGVzdGluYXRpb24tPiptX2F1dG9TZXR0ZXIpKCk7Cisg
ICAgICAgIEFTU0VSVCghY29udGV4dC5wcm9ncmVzcyB8fCBjb250ZXh0LnByb2dyZXNzID09IDEu
MCk7CisgICAgICAgIGlmICghY29udGV4dC5wcm9ncmVzcykgeworICAgICAgICAgICAgaWYgKChm
cm9tLiptX2F1dG9HZXR0ZXIpKCkpCisgICAgICAgICAgICAgICAgKGRlc3RpbmF0aW9uLiptX2F1
dG9TZXR0ZXIpKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoKHRvLT4qbV9h
dXRvR2V0dGVyKSgpKQotICAgICAgICAgICAgICAgIChkZXN0aW5hdGlvbi0+Km1fYXV0b1NldHRl
cikoKTsKKyAgICAgICAgICAgIGlmICgodG8uKm1fYXV0b0dldHRlcikoKSkKKyAgICAgICAgICAg
ICAgICAoZGVzdGluYXRpb24uKm1fYXV0b1NldHRlcikoKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtMTk2MCwxMCArMTk0NCwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAg
dm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBjbGllbnQsIFJlbmRl
clN0eWxlKiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRl
clN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHZvaWQgYmxl
bmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29u
c3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29u
dGV4dCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGF1dG8gYmxlbmRlZFZhbHVlID0g
YmxlbmRGdW5jKGNsaWVudCwgdmFsdWUoZnJvbSksIHZhbHVlKHRvKSwgcHJvZ3Jlc3MpOwotICAg
ICAgICAoZGVzdGluYXRpb24tPiptX3NldHRlcikoYmxlbmRlZFZhbHVlID4gMCA/IGJsZW5kZWRW
YWx1ZSA6IDApOworICAgICAgICBhdXRvIGJsZW5kZWRWYWx1ZSA9IGJsZW5kRnVuYyh2YWx1ZShm
cm9tKSwgdmFsdWUodG8pLCBjb250ZXh0KTsKKyAgICAgICAgKGRlc3RpbmF0aW9uLiptX3NldHRl
cikoYmxlbmRlZFZhbHVlID4gMCA/IGJsZW5kZWRWYWx1ZSA6IDApOwogICAgIH0KIH07CiAKQEAg
LTE5NzYsMTYgKzE5NjAsMTYgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29s
IGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHls
ZSogdG8pIGNvbnN0IGZpbmFsCisgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJT
dHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvKSBjb25zdCBmaW5hbAogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZyb20tPnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpMZW5n
dGggJiYgdG8tPnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpMZW5ndGggJiYgTGVu
Z3RoUHJvcGVydHlXcmFwcGVyOjpjYW5JbnRlcnBvbGF0ZShmcm9tLCB0byk7CisgICAgICAgIHJl
dHVybiBmcm9tLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpMZW5ndGggJiYgdG8u
dmVydGljYWxBbGlnbigpID09IFZlcnRpY2FsQWxpZ246Okxlbmd0aCAmJiBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXI6OmNhbkludGVycG9sYXRlKGZyb20sIHRvKTsKICAgICB9CiAKLSAgICB2b2lkIGJs
ZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUq
IGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUq
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5kZXJT
dHlsZSYgZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJT
dHlsZSYgdG8sIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25z
dCBmaW5hbAogICAgIHsKLSAgICAgICAgTGVuZ3RoUHJvcGVydHlXcmFwcGVyOjpibGVuZChjbGll
bnQsIGRlc3RpbmF0aW9uLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOwotICAgICAgICBhdXRvKiBibGVu
ZGluZ1N0eWxlID0gIWNhbkludGVycG9sYXRlKGZyb20sIHRvKSAmJiBwcm9ncmVzcyA/IHRvIDog
ZnJvbTsKLSAgICAgICAgZGVzdGluYXRpb24tPnNldFZlcnRpY2FsQWxpZ24oYmxlbmRpbmdTdHls
ZS0+dmVydGljYWxBbGlnbigpKTsKKyAgICAgICAgTGVuZ3RoUHJvcGVydHlXcmFwcGVyOjpibGVu
ZChkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIGNvbnRleHQpOworICAgICAgICBhdXRvJiBibGVuZGlu
Z1N0eWxlID0gY29udGV4dC5pc0Rpc2NyZXRlICYmIGNvbnRleHQucHJvZ3Jlc3MgPyB0byA6IGZy
b207CisgICAgICAgIGRlc3RpbmF0aW9uLnNldFZlcnRpY2FsQWxpZ24oYmxlbmRpbmdTdHlsZS52
ZXJ0aWNhbEFsaWduKCkpOwogICAgIH0KIH07CiAKQEAgLTE5OTgsMjEgKzE5ODIsMjEgQEAgcHVi
bGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJl
bmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IGZpbmFsCisgICAg
Ym9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVy
U3R5bGUmIHRvKSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgaWYgKGZyb20tPnRleHRJbmRl
bnRMaW5lKCkgIT0gdG8tPnRleHRJbmRlbnRMaW5lKCkpCisgICAgICAgIGlmIChmcm9tLnRleHRJ
bmRlbnRMaW5lKCkgIT0gdG8udGV4dEluZGVudExpbmUoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKGZyb20tPnRleHRJbmRlbnRUeXBlKCkgIT0gdG8tPnRleHRJbmRl
bnRUeXBlKCkpCisgICAgICAgIGlmIChmcm9tLnRleHRJbmRlbnRUeXBlKCkgIT0gdG8udGV4dElu
ZGVudFR5cGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIExl
bmd0aFByb3BlcnR5V3JhcHBlcjo6Y2FuSW50ZXJwb2xhdGUoZnJvbSwgdG8pOwogICAgIH0KIAot
ICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBS
ZW5kZXJTdHlsZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBS
ZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGJs
ZW5kKFJlbmRlclN0eWxlJiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNv
bnN0IFJlbmRlclN0eWxlJiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBhdXRvKiBibGVuZGluZ1N0eWxlID0g
IWNhbkludGVycG9sYXRlKGZyb20sIHRvKSAmJiBwcm9ncmVzcyA/IHRvIDogZnJvbTsKLSAgICAg
ICAgZGVzdGluYXRpb24tPnNldFRleHRJbmRlbnRMaW5lKGJsZW5kaW5nU3R5bGUtPnRleHRJbmRl
bnRMaW5lKCkpOwotICAgICAgICBkZXN0aW5hdGlvbi0+c2V0VGV4dEluZGVudFR5cGUoYmxlbmRp
bmdTdHlsZS0+dGV4dEluZGVudFR5cGUoKSk7Ci0gICAgICAgIExlbmd0aFByb3BlcnR5V3JhcHBl
cjo6YmxlbmQoY2xpZW50LCBkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAgICAg
ICAgYXV0byYgYmxlbmRpbmdTdHlsZSA9IGNvbnRleHQuaXNEaXNjcmV0ZSAmJiBjb250ZXh0LnBy
b2dyZXNzID8gdG8gOiBmcm9tOworICAgICAgICBkZXN0aW5hdGlvbi5zZXRUZXh0SW5kZW50TGlu
ZShibGVuZGluZ1N0eWxlLnRleHRJbmRlbnRMaW5lKCkpOworICAgICAgICBkZXN0aW5hdGlvbi5z
ZXRUZXh0SW5kZW50VHlwZShibGVuZGluZ1N0eWxlLnRleHRJbmRlbnRUeXBlKCkpOworICAgICAg
ICBMZW5ndGhQcm9wZXJ0eVdyYXBwZXI6OmJsZW5kKGRlc3RpbmF0aW9uLCBmcm9tLCB0bywgY29u
dGV4dCk7CiAgICAgfQogfTsKIApAQCAtMjAyNSwxOSArMjAwOSwxOSBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUq
IGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bykgY29uc3QgZmluYWwKKyAgICBib29sIGNhbklu
dGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8p
IGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoIWZyb20tPmhhc1BlcnNwZWN0aXZlKCkg
fHwgIXRvLT5oYXNQZXJzcGVjdGl2ZSgpKQorICAgICAgICBpZiAoIWZyb20uaGFzUGVyc3BlY3Rp
dmUoKSB8fCAhdG8uaGFzUGVyc3BlY3RpdmUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgcmV0dXJuIE5vbk5lZ2F0aXZlRmxvYXRQcm9wZXJ0eVdyYXBwZXI6OmNhbkludGVy
cG9sYXRlKGZyb20sIHRvKTsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgUmVuZGVyU3R5bGUqIGRlc3RpbmF0aW9uLCBjb25z
dCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IGZpbmFsCisgICAgdm9pZCBibGVuZChSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24s
IGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSYgdG8sIGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdCBmaW5hbAogICAgIHsKLSAg
ICAgICAgaWYgKCFjYW5JbnRlcnBvbGF0ZShmcm9tLCB0bykpCi0gICAgICAgICAgICAoZGVzdGlu
YXRpb24tPiptX3NldHRlcikocHJvZ3Jlc3MgPyB2YWx1ZSh0bykgOiB2YWx1ZShmcm9tKSk7Cisg
ICAgICAgIGlmIChjb250ZXh0LmlzRGlzY3JldGUpCisgICAgICAgICAgICAoZGVzdGluYXRpb24u
Km1fc2V0dGVyKShjb250ZXh0LnByb2dyZXNzID8gdmFsdWUodG8pIDogdmFsdWUoZnJvbSkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBOb25OZWdhdGl2ZUZsb2F0UHJvcGVydHlXcmFwcGVy
OjpibGVuZChjbGllbnQsIGRlc3RpbmF0aW9uLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOworICAgICAg
ICAgICAgTm9uTmVnYXRpdmVGbG9hdFByb3BlcnR5V3JhcHBlcjo6YmxlbmQoZGVzdGluYXRpb24s
IGZyb20sIHRvLCBjb250ZXh0KTsKICAgICB9CiB9OwogCkBAIC0yMDUwLDE3ICsyMDM0LDE3IEBA
IHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25z
dCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBmaW5hbAor
ICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJl
bmRlclN0eWxlJiB0bykgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHJldHVybiB2YWx1ZShm
cm9tKS5pc1NwYWNlcygpID09IHZhbHVlKHRvKS5pc1NwYWNlcygpOwogICAgIH0KIAotICAgIHZv
aWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogY2xpZW50LCBSZW5kZXJT
dHlsZSogZGVzdGluYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJT
dHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB2b2lkIGJsZW5kKFJl
bmRlclN0eWxlJiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJl
bmRlclN0eWxlJiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0IGZpbmFsCiAgICAgewotICAgICAgICBpZiAoIWNhbkludGVycG9sYXRlKGZyb20sIHRv
KSkKLSAgICAgICAgICAgIChkZXN0aW5hdGlvbi0+Km1fc2V0dGVyKShwcm9ncmVzcyA/IHZhbHVl
KHRvKSA6IHZhbHVlKGZyb20pKTsKKyAgICAgICAgaWYgKGNvbnRleHQuaXNEaXNjcmV0ZSkKKyAg
ICAgICAgICAgIChkZXN0aW5hdGlvbi4qbV9zZXR0ZXIpKGNvbnRleHQucHJvZ3Jlc3MgPyB2YWx1
ZSh0bykgOiB2YWx1ZShmcm9tKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFByb3BlcnR5
V3JhcHBlcjo6YmxlbmQoY2xpZW50LCBkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIHByb2dyZXNzKTsK
KyAgICAgICAgICAgIFByb3BlcnR5V3JhcHBlcjo6YmxlbmQoZGVzdGluYXRpb24sIGZyb20sIHRv
LCBjb250ZXh0KTsKICAgICB9CiB9OwogCkBAIC0yMDcyLDQxICsyMDU2LDM5IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBmaW5hbAorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJl
bmRlclN0eWxlJiBhLCBjb25zdCBSZW5kZXJTdHlsZSYgYikgY29uc3QgZmluYWwKICAgICB7Ci0g
ICAgICAgIGlmIChhID09IGIpCisgICAgICAgIGlmICgmYSA9PSAmYikKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgcmV0dXJuIGEtPmFzcGVjdFJhdGlvVHlwZSgpID09IGItPmFzcGVjdFJh
dGlvVHlwZSgpICYmIGEtPmFzcGVjdFJhdGlvV2lkdGgoKSA9PSBiLT5hc3BlY3RSYXRpb1dpZHRo
KCkgJiYgYS0+YXNwZWN0UmF0aW9IZWlnaHQoKSA9PSBiLT5hc3BlY3RSYXRpb0hlaWdodCgpOwor
ICAgICAgICByZXR1cm4gYS5hc3BlY3RSYXRpb1R5cGUoKSA9PSBiLmFzcGVjdFJhdGlvVHlwZSgp
ICYmIGEuYXNwZWN0UmF0aW9XaWR0aCgpID09IGIuYXNwZWN0UmF0aW9XaWR0aCgpICYmIGEuYXNw
ZWN0UmF0aW9IZWlnaHQoKSA9PSBiLmFzcGVjdFJhdGlvSGVpZ2h0KCk7CiAgICAgfQogCi0gICAg
Ym9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVy
U3R5bGUqIHRvKSBjb25zdCBmaW5hbAorICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVu
ZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bykgY29uc3QgZmluYWwKICAgICB7
Ci0gICAgICAgIHJldHVybiAoZnJvbS0+YXNwZWN0UmF0aW9UeXBlKCkgPT0gQXNwZWN0UmF0aW9U
eXBlOjpSYXRpbyAmJiB0by0+YXNwZWN0UmF0aW9UeXBlKCkgPT0gQXNwZWN0UmF0aW9UeXBlOjpS
YXRpbykgfHwgKGZyb20tPmFzcGVjdFJhdGlvVHlwZSgpID09IEFzcGVjdFJhdGlvVHlwZTo6QXV0
b0FuZFJhdGlvICYmIHRvLT5hc3BlY3RSYXRpb1R5cGUoKSA9PSBBc3BlY3RSYXRpb1R5cGU6OkF1
dG9BbmRSYXRpbyk7CisgICAgICAgIHJldHVybiAoZnJvbS5hc3BlY3RSYXRpb1R5cGUoKSA9PSBB
c3BlY3RSYXRpb1R5cGU6OlJhdGlvICYmIHRvLmFzcGVjdFJhdGlvVHlwZSgpID09IEFzcGVjdFJh
dGlvVHlwZTo6UmF0aW8pIHx8IChmcm9tLmFzcGVjdFJhdGlvVHlwZSgpID09IEFzcGVjdFJhdGlv
VHlwZTo6QXV0b0FuZFJhdGlvICYmIHRvLmFzcGVjdFJhdGlvVHlwZSgpID09IEFzcGVjdFJhdGlv
VHlwZTo6QXV0b0FuZFJhdGlvKTsKICAgICB9CiAKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9p
ZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRv
LCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFs
CisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVy
U3R5bGUmIHRvLCBjb25zdCBSZW5kZXJTdHlsZSYgZGVzdGluYXRpb24sIGRvdWJsZSBwcm9ncmVz
cykgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25z
LCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkg
PDwgIiBmcm9tICIgPDwgZnJvbS0+bG9naWNhbEFzcGVjdFJhdGlvKCkgPDwgIiB0byAiIDw8IHRv
LT5sb2dpY2FsQXNwZWN0UmF0aW8oKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVt
YmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgcmVzdWx0LT5sb2dp
Y2FsQXNwZWN0UmF0aW8oKSk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBz
dHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwg
IiBmcm9tICIgPDwgZnJvbS5sb2dpY2FsQXNwZWN0UmF0aW8oKSA8PCAiIHRvICIgPDwgdG8ubG9n
aWNhbEFzcGVjdFJhdGlvKCkgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJl
c3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IGRlc3RpbmF0aW9uLmxvZ2lj
YWxBc3BlY3RSYXRpbygpKTsKICAgICB9CiAjZW5kaWYKIAotICAgIHZvaWQgYmxlbmQoY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwgY29u
c3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dy
ZXNzKSBjb25zdCBmaW5hbAorICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9u
LCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QgZmluYWwKICAgICB7Ci0g
ICAgICAgIGRlc3RpbmF0aW9uLT5zZXRBc3BlY3RSYXRpb1R5cGUocHJvZ3Jlc3MgPCAwLjUgPyBm
cm9tLT5hc3BlY3RSYXRpb1R5cGUoKSA6IHRvLT5hc3BlY3RSYXRpb1R5cGUoKSk7Ci0gICAgICAg
IGlmIChjYW5JbnRlcnBvbGF0ZShmcm9tLCB0bykpIHsKLSAgICAgICAgICAgIGF1dG8gYXNwZWN0
UmF0aW9Ec3QgPSBXZWJDb3JlOjpibGVuZChsb2coZnJvbS0+bG9naWNhbEFzcGVjdFJhdGlvKCkp
LCBsb2codG8tPmxvZ2ljYWxBc3BlY3RSYXRpbygpKSwgcHJvZ3Jlc3MpOwotICAgICAgICAgICAg
ZGVzdGluYXRpb24tPnNldEFzcGVjdFJhdGlvKGV4cChhc3BlY3RSYXRpb0RzdCksIDEpOworICAg
ICAgICBkZXN0aW5hdGlvbi5zZXRBc3BlY3RSYXRpb1R5cGUoY29udGV4dC5wcm9ncmVzcyA8IDAu
NSA/IGZyb20uYXNwZWN0UmF0aW9UeXBlKCkgOiB0by5hc3BlY3RSYXRpb1R5cGUoKSk7CisgICAg
ICAgIGlmICghY29udGV4dC5pc0Rpc2NyZXRlKSB7CisgICAgICAgICAgICBhdXRvIGFzcGVjdFJh
dGlvRHN0ID0gV2ViQ29yZTo6YmxlbmQobG9nKGZyb20ubG9naWNhbEFzcGVjdFJhdGlvKCkpLCBs
b2codG8ubG9naWNhbEFzcGVjdFJhdGlvKCkpLCBjb250ZXh0KTsKKyAgICAgICAgICAgIGRlc3Rp
bmF0aW9uLnNldEFzcGVjdFJhdGlvKGV4cChhc3BlY3RSYXRpb0RzdCksIDEpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIEZvciBhdXRvL2F1dG8temVybyBhc3Bl
Y3QtcmF0aW8gd2UgdXNlIGRpc2NyZXRlIHZhbHVlcywgd2UgY2FuJ3QgdXNlIGdlbmVyYWwKICAg
ICAgICAgLy8gbG9naWMgc2luY2UgbG9naWNhbEFzcGVjdFJhdGlvIGFzc2VydHMgb24gYXNwZWN0
LXJhdGlvIHR5cGUuCi0gICAgICAgIEFTU0VSVCghcHJvZ3Jlc3MgfHwgcHJvZ3Jlc3MgPT0gMSk7
Ci0gICAgICAgIGF1dG8qIGFwcGxpY2FibGVTdHlsZSA9IHByb2dyZXNzID8gdG8gOiBmcm9tOwot
ICAgICAgICBkZXN0aW5hdGlvbi0+c2V0QXNwZWN0UmF0aW8oYXBwbGljYWJsZVN0eWxlLT5hc3Bl
Y3RSYXRpb1dpZHRoKCksIGFwcGxpY2FibGVTdHlsZS0+YXNwZWN0UmF0aW9IZWlnaHQoKSk7Cisg
ICAgICAgIEFTU0VSVCghY29udGV4dC5wcm9ncmVzcyB8fCBjb250ZXh0LnByb2dyZXNzID09IDEp
OworICAgICAgICBhdXRvJiBhcHBsaWNhYmxlU3R5bGUgPSBjb250ZXh0LnByb2dyZXNzID8gdG8g
OiBmcm9tOworICAgICAgICBkZXN0aW5hdGlvbi5zZXRBc3BlY3RSYXRpbyhhcHBsaWNhYmxlU3R5
bGUuYXNwZWN0UmF0aW9XaWR0aCgpLCBhcHBsaWNhYmxlU3R5bGUuYXNwZWN0UmF0aW9IZWlnaHQo
KSk7CiAgICAgfQogfTsKIApAQCAtMjUwNiwxOCArMjQ4OCwxOSBAQCBzdGF0aWMgYm9vbCBnYXRo
ZXJFbmNsb3NpbmdTaG9ydGhhbmRQcm9wZXJ0aWVzKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIEFu
aW1hdGlvbgogICAgIHJldHVybiBjb250YWluZWQ7CiB9CiAKLXZvaWQgQ1NTUHJvcGVydHlBbmlt
YXRpb246OmJsZW5kUHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBj
bGllbnQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFJlbmRlclN0eWxlKiBkZXN0aW5hdGlvbiwg
Y29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHBy
b2dyZXNzKQordm9pZCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0aWVzKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGNsaWVudCwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29u
c3QgUmVuZGVyU3R5bGUmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiB7CiAgICAgQVNTRVJUKHByb3Bl
cnR5ICE9IENTU1Byb3BlcnR5SW52YWxpZCk7CiAKICAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlKiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0
b24oKS53cmFwcGVyRm9yUHJvcGVydHkocHJvcGVydHkpOwogICAgIGlmICh3cmFwcGVyKSB7CiAg
ICAgICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy93ZWItYW5pbWF0aW9ucy0xLyNkaXNj
cmV0ZQotICAgICAgICAvLyBUaGUgcHJvcGVydHnigJlzIHZhbHVlcyBjYW5ub3QgYmUgbWVhbmlu
Z2Z1bGx5IGNvbWJpbmVkLCB0aHVzIGl0IGlzIG5vdCBhZGRpdGl2ZSBhbmQKKyAgICAgICAgLy8g
VGhlIHByb3BlcnR5J3MgdmFsdWVzIGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgY29tYmluZWQsIHRo
dXMgaXQgaXMgbm90IGFkZGl0aXZlIGFuZAogICAgICAgICAvLyBpbnRlcnBvbGF0aW9uIHN3YXBz
IGZyb20gVmEgdG8gVmIgYXQgNTAlIChwPTAuNSkuCi0gICAgICAgIGlmICghd3JhcHBlci0+Y2Fu
SW50ZXJwb2xhdGUoZnJvbSwgdG8pKQorICAgICAgICBhdXRvIGlzRGlzY3JldGUgPSAhd3JhcHBl
ci0+Y2FuSW50ZXJwb2xhdGUoZnJvbSwgdG8pOworICAgICAgICBpZiAoaXNEaXNjcmV0ZSkKICAg
ICAgICAgICAgIHByb2dyZXNzID0gcHJvZ3Jlc3MgPCAwLjUgPyAwIDogMTsKLSAgICAgICAgd3Jh
cHBlci0+YmxlbmQoY2xpZW50LCBkZXN0aW5hdGlvbiwgZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAg
ICAgICAgd3JhcHBlci0+YmxlbmQoZGVzdGluYXRpb24sIGZyb20sIHRvLCB7IHByb2dyZXNzLCBp
c0Rpc2NyZXRlLCBjbGllbnQgfSk7CiAjaWYgIUxPR19ESVNBQkxFRAogICAgICAgICB3cmFwcGVy
LT5sb2dCbGVuZChmcm9tLCB0bywgZGVzdGluYXRpb24sIHByb2dyZXNzKTsKICNlbmRpZgpAQCAt
MjU0Nyw3ICsyNTMwLDcgQEAgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBDU1NQcm9wZXJ0eUFuaW1h
dGlvbjo6YW5pbWF0YWJsZVNob3J0aGFuZHNBZmZlY3RpbmdQcm9wZXIKICAgICByZXR1cm4gZm91
bmRQcm9wZXJ0aWVzOwogfQogCi1ib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVz
RXF1YWwoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0
IFJlbmRlclN0eWxlKiBiKQorYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6cHJvcGVydGllc0Vx
dWFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSYgYikKIHsKICAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFw
cGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVy
Rm9yUHJvcGVydHkocHJvcGVydHkpOwogICAgIGlmICh3cmFwcGVyKQpAQCAtMjU1NSw3ICsyNTM4
LDcgQEAgYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIGNvbnN0IFJlbmRlclMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5
bGUqIHRvKQorYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9s
YXRlZChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29u
c3QgUmVuZGVyU3R5bGUmIHRvKQogewogICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Uq
IHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLndy
YXBwZXJGb3JQcm9wZXJ0eShwcm9wZXJ0eSk7CiAgICAgaWYgKHdyYXBwZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oCmluZGV4IGNkZTJjODc1
ODMyMzgwYzUzZjUwYTU1ZjBlZDQ0ZWY2ZDg0NDQxOWIuLmU2ZTg0ZjY1NGQzMDQ5MGUyOWYyZjk1
YmE0MDA2ZDZjNDZjMTZmMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9D
U1NQcm9wZXJ0eUFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQ
cm9wZXJ0eUFuaW1hdGlvbi5oCkBAIC00MCwxNSArNDAsMTQgQEAgY2xhc3MgQ1NTUHJvcGVydHlB
bmltYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGlzUHJvcGVydHlBbmltYXRhYmxl
KENTU1Byb3BlcnR5SUQpOwogICAgIHN0YXRpYyBib29sIGFuaW1hdGlvbk9mUHJvcGVydHlJc0Fj
Y2VsZXJhdGVkKENTU1Byb3BlcnR5SUQpOwotICAgIHN0YXRpYyBib29sIHByb3BlcnRpZXNFcXVh
bChDU1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIpOwotICAgIHN0YXRpYyBib29sIGNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQoQ1NTUHJvcGVy
dHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKTsKKyAgICBz
dGF0aWMgYm9vbCBwcm9wZXJ0aWVzRXF1YWwoQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5
bGUmIGEsIGNvbnN0IFJlbmRlclN0eWxlJiBiKTsKKyAgICBzdGF0aWMgYm9vbCBjYW5Qcm9wZXJ0
eUJlSW50ZXJwb2xhdGVkKENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25z
dCBSZW5kZXJTdHlsZSYgYik7CiAgICAgc3RhdGljIENTU1Byb3BlcnR5SUQgZ2V0UHJvcGVydHlB
dEluZGV4KGludCwgT3B0aW9uYWw8Ym9vbD4mIGlzU2hvcnRoYW5kKTsKICAgICBzdGF0aWMgaW50
IGdldE51bVByb3BlcnRpZXMoKTsKIAogICAgIHN0YXRpYyBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+
IGFuaW1hdGFibGVTaG9ydGhhbmRzQWZmZWN0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7CiAK
LSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IHNvZnR3YXJlIGFuaW1hdGlv
biB0aW1lcnMKLSAgICBzdGF0aWMgdm9pZCBibGVuZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCosIENTU1Byb3BlcnR5SUQsIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0
IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKTsK
KyAgICBzdGF0aWMgdm9pZCBibGVuZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCosIENTU1Byb3BlcnR5SUQsIFJlbmRlclN0eWxlJiBkZXN0aW5hdGlvbiwgY29uc3Qg
UmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bywgZG91YmxlIHByb2dyZXNz
KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRp
b24vS2V5ZnJhbWVFZmZlY3QuY3BwCmluZGV4IDQ5YTM0YTY2Y2Q1OGNiNmRmNTE5NWJmMjgzOTdi
NTc4ZWQ4MzUwMmUuLjQxNzRkYjIyYmRlZGJjNzEzYzY5Yjc4M2JkYzAwYjM2NDcwNmM4OTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcApAQCAtMTQxOCw3
ICsxNDE4LDcgQEAgdm9pZCBLZXlmcmFtZUVmZmVjdDo6c2V0QW5pbWF0ZWRQcm9wZXJ0aWVzSW5T
dHlsZShSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIGRvdWIKICAgICAvLyBwcm9ncmVzcyB3aGlj
aCBhbHJlYWR5IGFjY291bnRzIGZvciB0aGUgdHJhbnNpdGlvbidzIHRpbWluZyBmdW5jdGlvbi4K
ICAgICBpZiAobV9ibGVuZGluZ0tleWZyYW1lc1NvdXJjZSA9PSBCbGVuZGluZ0tleWZyYW1lc1Nv
dXJjZTo6Q1NTVHJhbnNpdGlvbikgewogICAgICAgICBBU1NFUlQocHJvcGVydGllcy5zaXplKCkg
PT0gMSk7Ci0gICAgICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFByb3BlcnRpZXModGhp
cywgKnByb3BlcnRpZXMuYmVnaW4oKSwgJnRhcmdldFN0eWxlLCBtX2JsZW5kaW5nS2V5ZnJhbWVz
WzBdLnN0eWxlKCksIG1fYmxlbmRpbmdLZXlmcmFtZXNbMV0uc3R5bGUoKSwgaXRlcmF0aW9uUHJv
Z3Jlc3MpOworICAgICAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0aWVzKHRo
aXMsICpwcm9wZXJ0aWVzLmJlZ2luKCksIHRhcmdldFN0eWxlLCAqbV9ibGVuZGluZ0tleWZyYW1l
c1swXS5zdHlsZSgpLCAqbV9ibGVuZGluZ0tleWZyYW1lc1sxXS5zdHlsZSgpLCBpdGVyYXRpb25Q
cm9ncmVzcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE1MzIsNyArMTUzMiw3IEBA
IHZvaWQgS2V5ZnJhbWVFZmZlY3Q6OnNldEFuaW1hdGVkUHJvcGVydGllc0luU3R5bGUoUmVuZGVy
U3R5bGUmIHRhcmdldFN0eWxlLCBkb3ViCiAgICAgICAgIGlmIChpbnRlcnZhbEVuZHBvaW50cy5z
aXplKCkgPT0gMSkgewogICAgICAgICAgICAgYXV0byBrZXlmcmFtZUluZGV4ID0gaW50ZXJ2YWxF
bmRwb2ludHNbMF07CiAgICAgICAgICAgICBhdXRvIGtleWZyYW1lU3R5bGUgPSAha2V5ZnJhbWVJ
bmRleCA/ICZ0YXJnZXRTdHlsZSA6IG1fYmxlbmRpbmdLZXlmcmFtZXNba2V5ZnJhbWVJbmRleC52
YWx1ZSgpXS5zdHlsZSgpOwotICAgICAgICAgICAgQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5k
UHJvcGVydGllcyh0aGlzLCBjc3NQcm9wZXJ0eUlkLCAmdGFyZ2V0U3R5bGUsIGtleWZyYW1lU3R5
bGUsIGtleWZyYW1lU3R5bGUsIDApOworICAgICAgICAgICAgQ1NTUHJvcGVydHlBbmltYXRpb246
OmJsZW5kUHJvcGVydGllcyh0aGlzLCBjc3NQcm9wZXJ0eUlkLCB0YXJnZXRTdHlsZSwgKmtleWZy
YW1lU3R5bGUsICprZXlmcmFtZVN0eWxlLCAwKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICB9CiAKQEAgLTE1NjMsNyArMTU2Myw3IEBAIHZvaWQgS2V5ZnJhbWVFZmZlY3Q6OnNldEFu
aW1hdGVkUHJvcGVydGllc0luU3R5bGUoUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBkb3ViCiAg
ICAgICAgIC8vICAgICBkaXN0YW5jZSBhcyB0aGUgaW50ZXJwb2xhdGlvbiBwYXJhbWV0ZXIgcC4K
ICAgICAgICAgYXV0byBzdGFydFN0eWxlID0gIXN0YXJ0S2V5ZnJhbWVJbmRleCA/ICZ0YXJnZXRT
dHlsZSA6IG1fYmxlbmRpbmdLZXlmcmFtZXNbc3RhcnRLZXlmcmFtZUluZGV4LnZhbHVlKCldLnN0
eWxlKCk7CiAgICAgICAgIGF1dG8gZW5kU3R5bGUgPSAhZW5kS2V5ZnJhbWVJbmRleCA/ICZ0YXJn
ZXRTdHlsZSA6IG1fYmxlbmRpbmdLZXlmcmFtZXNbZW5kS2V5ZnJhbWVJbmRleC52YWx1ZSgpXS5z
dHlsZSgpOwotICAgICAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0aWVzKHRo
aXMsIGNzc1Byb3BlcnR5SWQsICZ0YXJnZXRTdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIHRy
YW5zZm9ybWVkRGlzdGFuY2UpOworICAgICAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQ
cm9wZXJ0aWVzKHRoaXMsIGNzc1Byb3BlcnR5SWQsIHRhcmdldFN0eWxlLCAqc3RhcnRTdHlsZSwg
KmVuZFN0eWxlLCB0cmFuc2Zvcm1lZERpc3RhbmNlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwCmluZGV4IDllNmFiNjgwODUxNWMwMTU0YTgwOGFi
OTE1MzdjNzFlNThhZGM5ZDIuLjhlYmVhNGIyYWIxZTI0N2RmNWVhNWNjNDZjODg1Y2MxMGNjN2Iw
ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcApAQCAtMzgsOSAr
MzgsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbmxpbmUgZG91YmxlIGJs
ZW5kRnVuYyhkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMg
aW5saW5lIGRvdWJsZSBibGVuZEZ1bmMoZG91YmxlIGZyb20sIGRvdWJsZSB0bywgY29uc3QgQmxl
bmRpbmdDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJv
Z3Jlc3MpOworICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgY29udGV4dCk7CiB9CiAKIHN0YXRp
YyBib29sIHN1YmltYWdlS25vd25Ub0JlT3BhcXVlKGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSwgY29u
c3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCkBAIC0yMDIsNyArMjAyLDcgQEAgYm9vbCBDU1ND
cm9zc2ZhZGVWYWx1ZTo6dHJhdmVyc2VTdWJyZXNvdXJjZXMoY29uc3QgV1RGOjpGdW5jdGlvbjxi
b29sIChjb25zdCBDYWMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVJlZlB0cjxDU1NDcm9zc2Zh
ZGVWYWx1ZT4gQ1NTQ3Jvc3NmYWRlVmFsdWU6OmJsZW5kKGNvbnN0IENTU0Nyb3NzZmFkZVZhbHVl
JiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0CitSZWZQdHI8Q1NTQ3Jvc3NmYWRlVmFsdWU+
IENTU0Nyb3NzZmFkZVZhbHVlOjpibGVuZChjb25zdCBDU1NDcm9zc2ZhZGVWYWx1ZSYgZnJvbSwg
Y29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIEFTU0VSVChlcXVh
bElucHV0SW1hZ2VzKGZyb20pKTsKIApAQCAtMjE4LDcgKzIxOCw3IEBAIFJlZlB0cjxDU1NDcm9z
c2ZhZGVWYWx1ZT4gQ1NTQ3Jvc3NmYWRlVmFsdWU6OmJsZW5kKGNvbnN0IENTU0Nyb3NzZmFkZVZh
bHVlJiBmcm9tCiAgICAgZG91YmxlIHRvUGVyY2VudGFnZSA9IG1fcGVyY2VudGFnZVZhbHVlLT5k
b3VibGVWYWx1ZSgpOwogICAgIGlmIChtX3BlcmNlbnRhZ2VWYWx1ZS0+aXNQZXJjZW50YWdlKCkp
CiAgICAgICAgIHRvUGVyY2VudGFnZSAvPSAxMDAuMDsKLSAgICBhdXRvIHBlcmNlbnRhZ2VWYWx1
ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoYmxlbmRGdW5jKGZyb21QZXJjZW50YWdlLCB0
b1BlcmNlbnRhZ2UsIHByb2dyZXNzKSwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAgIGF1
dG8gcGVyY2VudGFnZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShibGVuZEZ1bmMo
ZnJvbVBlcmNlbnRhZ2UsIHRvUGVyY2VudGFnZSwgY29udGV4dCksIENTU1VuaXRUeXBlOjpDU1Nf
TlVNQkVSKTsKIAogICAgIHJldHVybiBDU1NDcm9zc2ZhZGVWYWx1ZTo6Y3JlYXRlKFdURk1vdmUo
ZnJvbUltYWdlVmFsdWUpLCBXVEZNb3ZlKHRvSW1hZ2VWYWx1ZSksIFdURk1vdmUocGVyY2VudGFn
ZVZhbHVlKSwgZnJvbS5pc1ByZWZpeGVkKCkgJiYgaXNQcmVmaXhlZCgpKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmgKaW5kZXggOTQ1MjM1Mjg1MTUxYzYwYTU0Y2ZkYTMy
MGY0MjU3NDE5YTE5NmE4MC4uZWJhYjdhY2RlYzY4ZDVhZjk5NDNhMDVlOGE4MDUzZDUyOTllODlm
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmgKQEAgLTMyLDYgKzMyLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQmxlbmRpbmdDb250ZXh0OwogY2xh
c3MgQ1NTUHJpbWl0aXZlVmFsdWU7CiAKIGNsYXNzIENTU0Nyb3NzZmFkZVZhbHVlIGZpbmFsIDog
cHVibGljIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUgewpAQCAtNTQsNyArNTUsNyBAQCBwdWJsaWM6
CiAKICAgICBib29sIHRyYXZlcnNlU3VicmVzb3VyY2VzKGNvbnN0IFdURjo6RnVuY3Rpb248Ym9v
bCAoY29uc3QgQ2FjaGVkUmVzb3VyY2UmKT4mIGhhbmRsZXIpIGNvbnN0OwogCi0gICAgUmVmUHRy
PENTU0Nyb3NzZmFkZVZhbHVlPiBibGVuZChjb25zdCBDU1NDcm9zc2ZhZGVWYWx1ZSYsIGRvdWJs
ZSkgY29uc3Q7CisgICAgUmVmUHRyPENTU0Nyb3NzZmFkZVZhbHVlPiBibGVuZChjb25zdCBDU1ND
cm9zc2ZhZGVWYWx1ZSYsIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYpIGNvbnN0OwogCiAgICAgYm9v
bCBlcXVhbHMoY29uc3QgQ1NTQ3Jvc3NmYWRlVmFsdWUmKSBjb25zdDsKICAgICBib29sIGVxdWFs
SW5wdXRJbWFnZXMoY29uc3QgQ1NTQ3Jvc3NmYWRlVmFsdWUmKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCA1NWFiYjgyZWY5OWQzNzliN2RhMzNlOTgy
MjM1ODk2N2MyNzM5OGIzLi4xYjZkZGY1ZTIwNjY1ZWMxNTQwZTAxZThkMDA4OTUxMmYzNmE5NGQ5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCkBAIC0yNiw2ICsyNiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTR3JhZGllbnRWYWx1ZS5oIgog
CisjaW5jbHVkZSAiQW5pbWF0aW9uVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaCIKICNpbmNs
dWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCkBAIC0yMDUsNyArMjA2LDcgQEAgcHVibGljOgogCiAg
ICAgICAgICAgICAgICAgZmxvYXQgaW50ZXJTdG9wUHJvcG9ydGlvbiA9IC1wcmV2T2Zmc2V0IC8g
KG5leHRPZmZzZXQgLSBwcmV2T2Zmc2V0KTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2hl
biB3ZSBpbnRlcnBvbGF0ZSBncmFkaWVudHMgdXNpbmcgcHJlbXVsdGlwbGllZCBjb2xvcnMsIHRo
aXMgc2hvdWxkIGRvIHByZW11bHRpcGxpY2F0aW9uLgotICAgICAgICAgICAgICAgIENvbG9yIGJs
ZW5kZWRDb2xvciA9IGJsZW5kKHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4IC0gMV0uY29s
b3IsIHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5jb2xvciwgaW50ZXJTdG9wUHJvcG9y
dGlvbik7CisgICAgICAgICAgICAgICAgQ29sb3IgYmxlbmRlZENvbG9yID0gYmxlbmQoc3RvcHNb
Zmlyc3RaZXJvT3JHcmVhdGVySW5kZXggLSAxXS5jb2xvciwgc3RvcHNbZmlyc3RaZXJvT3JHcmVh
dGVySW5kZXhdLmNvbG9yLCB7IGludGVyU3RvcFByb3BvcnRpb24gfSk7CiAKICAgICAgICAgICAg
ICAgICAvLyBDbGFtcCB0aGUgcG9zaXRpb25zIHRvIDAgYW5kIHNldCB0aGUgY29sb3IuCiAgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaXJzdFplcm9PckdyZWF0ZXJJbmRl
eDsgKytpKSB7CkBAIC0yNTYsNyArMjU3LDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICAgICAg
ZmxvYXQgaW50ZXJTdG9wUHJvcG9ydGlvbiA9IC1wcmV2aW91c09mZnNldCAvIChuZXh0T2Zmc2V0
IC0gcHJldmlvdXNPZmZzZXQpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGlu
dGVycG9sYXRlIGdyYWRpZW50cyB1c2luZyBwcmVtdWx0aXBsaWVkIGNvbG9ycywgdGhpcyBzaG91
bGQgZG8gcHJlbXVsdGlwbGljYXRpb24uCi0gICAgICAgICAgICAgICAgQ29sb3IgYmxlbmRlZENv
bG9yID0gYmxlbmQoc3RvcHNbaW5kZXggLSAxXS5jb2xvciwgc3RvcHNbaW5kZXhdLmNvbG9yLCBp
bnRlclN0b3BQcm9wb3J0aW9uKTsKKyAgICAgICAgICAgICAgICBDb2xvciBibGVuZGVkQ29sb3Ig
PSBibGVuZChzdG9wc1tpbmRleCAtIDFdLmNvbG9yLCBzdG9wc1tpbmRleF0uY29sb3IsIHsgaW50
ZXJTdG9wUHJvcG9ydGlvbiB9KTsKIAogICAgICAgICAgICAgICAgIC8vIENsYW1wIHRoZSBwb3Np
dGlvbnMgdG8gMCBhbmQgc2V0IHRoZSBjb2xvci4KICAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGluZGV4OyArK2kpIHsKQEAgLTI4Niw3ICsyODcsNyBAQCBwdWJsaWM6CiAK
ICAgICAgICAgICAgICAgICBmbG9hdCBpbnRlclN0b3BQcm9wb3J0aW9uID0gKDEgLSBwcmV2aW91
c09mZnNldCkgLyAobmV4dE9mZnNldCAtIHByZXZpb3VzT2Zmc2V0KTsKICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogd2hlbiB3ZSBpbnRlcnBvbGF0ZSBncmFkaWVudHMgdXNpbmcgcHJlbXVsdGlw
bGllZCBjb2xvcnMsIHRoaXMgc2hvdWxkIGRvIHByZW11bHRpcGxpY2F0aW9uLgotICAgICAgICAg
ICAgICAgIENvbG9yIGJsZW5kZWRDb2xvciA9IGJsZW5kKHN0b3BzW2luZGV4XS5jb2xvciwgc3Rv
cHNbaW5kZXggKyAxXS5jb2xvciwgaW50ZXJTdG9wUHJvcG9ydGlvbik7CisgICAgICAgICAgICAg
ICAgQ29sb3IgYmxlbmRlZENvbG9yID0gYmxlbmQoc3RvcHNbaW5kZXhdLmNvbG9yLCBzdG9wc1tp
bmRleCArIDFdLmNvbG9yLCB7IGludGVyU3RvcFByb3BvcnRpb24gfSk7CiAKICAgICAgICAgICAg
ICAgICAvLyBDbGFtcCB0aGUgcG9zaXRpb25zIHRvIDEgYW5kIHNldCB0aGUgY29sb3IuCiAgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGluZGV4ICsgMTsgaSA8PSBsYXN0U3RvcEluZGV4
OyArK2kpIHsKQEAgLTQ4NSw3ICs0ODYsNyBAQCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENT
U0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZQogICAg
ICAgICAgICAgZmxvYXQgcmVsYXRpdmVPZmZzZXQgPSAoKm5ld1N0b3BzW3ldLm9mZnNldCAtIG9m
ZnNldDEpIC8gKG9mZnNldDIgLSBvZmZzZXQxKTsKICAgICAgICAgICAgIGZsb2F0IG11bHRpcGxp
ZXIgPSBzdGQ6OnBvdyhyZWxhdGl2ZU9mZnNldCwgc3RkOjpsb2coLjVmKSAvIHN0ZDo6bG9nKG1p
ZHBvaW50KSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2h5IG5vdCBwcmVtdWx0aXBseSBoZXJl
PwotICAgICAgICAgICAgbmV3U3RvcHNbeV0uY29sb3IgPSBibGVuZFdpdGhvdXRQcmVtdWx0aXBs
eShjb2xvcjEsIGNvbG9yMiwgbXVsdGlwbGllcik7CisgICAgICAgICAgICBuZXdTdG9wc1t5XS5j
b2xvciA9IGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbG9yMSwgY29sb3IyLCB7IG11bHRpcGxp
ZXIgfSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdG9wcy5yZW1vdmUoeCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vTGVuZ3RoLmNwcAppbmRleCBmYzdlMzAyZjFhOWY2YmNiODNkOWI3N2JlYzk2NmI4ZDg0
OGI1Njc2Li44NjQ2YzgzMTg2MDc0ZjMwYzI0ZjNhNmFlMjFiYjZhM2ZjNjQ5ZjU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJMZW5ndGguaCIKIAorI2luY2x1ZGUgIkFuaW1hdGlvblV0aWxpdGll
cy5oIgogI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlD
VHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0yOTQsMzcgKzI5NSwzNyBAQCBM
ZW5ndGggY29udmVydFRvMTAwUGVyY2VudE1pbnVzTGVuZ3RoKGNvbnN0IExlbmd0aCYgbGVuZ3Ro
KQogICAgIHJldHVybiBMZW5ndGgoQ2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKFdURk1vdmUob3Ap
LCBWYWx1ZVJhbmdlQWxsKSk7CiB9CiAKLXN0YXRpYyBMZW5ndGggYmxlbmRNaXhlZFR5cGVzKGNv
bnN0IExlbmd0aCYgZnJvbSwgY29uc3QgTGVuZ3RoJiB0bywgZG91YmxlIHByb2dyZXNzKQorc3Rh
dGljIExlbmd0aCBibGVuZE1peGVkVHlwZXMoY29uc3QgTGVuZ3RoJiBmcm9tLCBjb25zdCBMZW5n
dGgmIHRvLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgaWYgKCFwcm9n
cmVzcykKKyAgICBpZiAoIWNvbnRleHQucHJvZ3Jlc3MpCiAgICAgICAgIHJldHVybiBmcm9tOwog
Ci0gICAgaWYgKHByb2dyZXNzID09IDEuMCkKKyAgICBpZiAoY29udGV4dC5wcm9ncmVzcyA9PSAx
LjApCiAgICAgICAgIHJldHVybiB0bzsKIAotICAgIGF1dG8gYmxlbmQgPSBtYWtlVW5pcXVlPENh
bGNFeHByZXNzaW9uQmxlbmRMZW5ndGg+KGZyb20sIHRvLCBwcm9ncmVzcyk7CisgICAgYXV0byBi
bGVuZCA9IG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aD4oZnJvbSwgdG8sIGNv
bnRleHQucHJvZ3Jlc3MpOwogICAgIHJldHVybiBMZW5ndGgoQ2FsY3VsYXRpb25WYWx1ZTo6Y3Jl
YXRlKFdURk1vdmUoYmxlbmQpLCBWYWx1ZVJhbmdlQWxsKSk7CiB9CiAKLUxlbmd0aCBibGVuZChj
b25zdCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK0xl
bmd0aCBibGVuZChjb25zdCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGNvbnN0IEJs
ZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBpZiAoIXByb2dyZXNzKQorICAgIGlmICgh
Y29udGV4dC5wcm9ncmVzcykKICAgICAgICAgcmV0dXJuIGZyb207CiAKLSAgICBpZiAocHJvZ3Jl
c3MgPT0gMSkKKyAgICBpZiAoY29udGV4dC5wcm9ncmVzcyA9PSAxKQogICAgICAgICByZXR1cm4g
dG87CiAKICAgICBpZiAoZnJvbS5pc0F1dG8oKSB8fCB0by5pc0F1dG8oKSkKLSAgICAgICAgcmV0
dXJuIHByb2dyZXNzIDwgMC41ID8gZnJvbSA6IHRvOworICAgICAgICByZXR1cm4gY29udGV4dC5w
cm9ncmVzcyA8IDAuNSA/IGZyb20gOiB0bzsKIAogICAgIGlmIChmcm9tLmlzVW5kZWZpbmVkKCkg
fHwgdG8uaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIHRvOwogCiAgICAgaWYgKGZyb20u
aXNDYWxjdWxhdGVkKCkgfHwgdG8uaXNDYWxjdWxhdGVkKCkpCi0gICAgICAgIHJldHVybiBibGVu
ZE1peGVkVHlwZXMoZnJvbSwgdG8sIHByb2dyZXNzKTsKKyAgICAgICAgcmV0dXJuIGJsZW5kTWl4
ZWRUeXBlcyhmcm9tLCB0bywgY29udGV4dCk7CiAKICAgICBpZiAoIWZyb20uaXNaZXJvKCkgJiYg
IXRvLmlzWmVybygpICYmIGZyb20udHlwZSgpICE9IHRvLnR5cGUoKSkKLSAgICAgICAgcmV0dXJu
IGJsZW5kTWl4ZWRUeXBlcyhmcm9tLCB0bywgcHJvZ3Jlc3MpOworICAgICAgICByZXR1cm4gYmxl
bmRNaXhlZFR5cGVzKGZyb20sIHRvLCBjb250ZXh0KTsKIAogICAgIExlbmd0aFR5cGUgcmVzdWx0
VHlwZSA9IHRvLnR5cGUoKTsKICAgICBpZiAodG8uaXNaZXJvKCkpCkBAIC0zMzMsMTcgKzMzNCwx
NyBAQCBMZW5ndGggYmxlbmQoY29uc3QgTGVuZ3RoJiBmcm9tLCBjb25zdCBMZW5ndGgmIHRvLCBk
b3VibGUgcHJvZ3Jlc3MpCiAgICAgaWYgKHJlc3VsdFR5cGUgPT0gTGVuZ3RoVHlwZTo6UGVyY2Vu
dCkgewogICAgICAgICBmbG9hdCBmcm9tUGVyY2VudCA9IGZyb20uaXNaZXJvKCkgPyAwIDogZnJv
bS5wZXJjZW50KCk7CiAgICAgICAgIGZsb2F0IHRvUGVyY2VudCA9IHRvLmlzWmVybygpID8gMCA6
IHRvLnBlcmNlbnQoKTsKLSAgICAgICAgcmV0dXJuIExlbmd0aChXZWJDb3JlOjpibGVuZChmcm9t
UGVyY2VudCwgdG9QZXJjZW50LCBwcm9ncmVzcyksIExlbmd0aFR5cGU6OlBlcmNlbnQpOworICAg
ICAgICByZXR1cm4gTGVuZ3RoKFdlYkNvcmU6OmJsZW5kKGZyb21QZXJjZW50LCB0b1BlcmNlbnQs
IGNvbnRleHQpLCBMZW5ndGhUeXBlOjpQZXJjZW50KTsKICAgICB9CiAKICAgICBmbG9hdCBmcm9t
VmFsdWUgPSBmcm9tLmlzWmVybygpID8gMCA6IGZyb20udmFsdWUoKTsKICAgICBmbG9hdCB0b1Zh
bHVlID0gdG8uaXNaZXJvKCkgPyAwIDogdG8udmFsdWUoKTsKLSAgICByZXR1cm4gTGVuZ3RoKFdl
YkNvcmU6OmJsZW5kKGZyb21WYWx1ZSwgdG9WYWx1ZSwgcHJvZ3Jlc3MpLCByZXN1bHRUeXBlKTsK
KyAgICByZXR1cm4gTGVuZ3RoKFdlYkNvcmU6OmJsZW5kKGZyb21WYWx1ZSwgdG9WYWx1ZSwgY29u
dGV4dCksIHJlc3VsdFR5cGUpOwogfQogCi1MZW5ndGggYmxlbmQoY29uc3QgTGVuZ3RoJiBmcm9t
LCBjb25zdCBMZW5ndGgmIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIFZhbHVlUmFuZ2UgdmFsdWVSYW5n
ZSkKK0xlbmd0aCBibGVuZChjb25zdCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGNv
bnN0IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQogewot
ICAgIGF1dG8gYmxlbmRlZCA9IGJsZW5kKGZyb20sIHRvLCBwcm9ncmVzcyk7CisgICAgYXV0byBi
bGVuZGVkID0gYmxlbmQoZnJvbSwgdG8sIGNvbnRleHQpOwogICAgIGlmICh2YWx1ZVJhbmdlID09
IFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSAmJiBibGVuZGVkLmlzTmVnYXRpdmUoKSkKICAgICAgICAg
cmV0dXJuIHsgMCwgZnJvbS5pc1plcm8gKCkgPyB0by50eXBlKCkgOiBmcm9tLnR5cGUoKSB9Owog
ICAgIHJldHVybiBibGVuZGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TGVuZ3RoLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguaAppbmRleCBhZjM5NjYw
M2E0ZmIxMzkwZDhlYzRmMmVhZDE5ODU0MWY5Yjg3NTdmLi40NTE4Nzk0OTBhYmNmYTU5YjE5ZWQ3
ZDc1NzcyNGYzOGUyZTVjZTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9M
ZW5ndGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguaApAQCAtNDksNiAr
NDksNyBAQCBlbnVtIFZhbHVlUmFuZ2UgewogICAgIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZQogfTsK
IAorc3RydWN0IEJsZW5kaW5nQ29udGV4dDsKIGNsYXNzIENhbGN1bGF0aW9uVmFsdWU7CiAKIHN0
cnVjdCBMZW5ndGggewpAQCAtMTM3LDggKzEzOCw4IEBAIHByaXZhdGU6CiB9OwogCiAvLyBCbGVu
ZCB0d28gbGVuZ3RocyB0byBwcm9kdWNlIGEgbmV3IGxlbmd0aCB0aGF0IGlzIGluIGJldHdlZW4g
dGhlbS4gVXNlZCBmb3IgYW5pbWF0aW9uLgotTGVuZ3RoIGJsZW5kKGNvbnN0IExlbmd0aCYgZnJv
bSwgY29uc3QgTGVuZ3RoJiB0bywgZG91YmxlIHByb2dyZXNzKTsKLUxlbmd0aCBibGVuZChjb25z
dCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGRvdWJsZSBwcm9ncmVzcywgVmFsdWVS
YW5nZSk7CitMZW5ndGggYmxlbmQoY29uc3QgTGVuZ3RoJiBmcm9tLCBjb25zdCBMZW5ndGgmIHRv
LCBjb25zdCBCbGVuZGluZ0NvbnRleHQmKTsKK0xlbmd0aCBibGVuZChjb25zdCBMZW5ndGgmIGZy
b20sIGNvbnN0IExlbmd0aCYgdG8sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYsIFZhbHVlUmFuZ2Up
OwogCiBVbmlxdWVBcnJheTxMZW5ndGg+IG5ld0Nvb3Jkc0FycmF5KGNvbnN0IFN0cmluZyYsIGlu
dCYgbGVuZ3RoKTsKIFVuaXF1ZUFycmF5PExlbmd0aD4gbmV3TGVuZ3RoQXJyYXkoY29uc3QgU3Ry
aW5nJiwgaW50JiBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TGVuZ3RoUG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aFBvaW50LmgKaW5k
ZXggZjY5NDgzM2Q4YzBhMTk2NDRjYTMxMTdhMWYwNTAwMTVkNzgyMmY5ZS4uZTcwMmY4YmM1ZGZj
MjkwMDhhY2ZiODA3ZTIyNzYxNGRmYmE0MWYzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTGVuZ3RoUG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5n
dGhQb2ludC5oCkBAIC0yOSw2ICsyOSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3Ry
dWN0IEJsZW5kaW5nQ29udGV4dDsKKwogc3RydWN0IExlbmd0aFBvaW50IHsKIHB1YmxpYzoKICAg
ICBMZW5ndGhQb2ludCgpCkBAIC02Myw5ICs2NSw5IEBAIHByaXZhdGU6CiAgICAgTGVuZ3RoIG1f
eTsKIH07CiAKLWlubGluZSBMZW5ndGhQb2ludCBibGVuZChjb25zdCBMZW5ndGhQb2ludCYgZnJv
bSwgY29uc3QgTGVuZ3RoUG9pbnQmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitpbmxpbmUgTGVuZ3Ro
UG9pbnQgYmxlbmQoY29uc3QgTGVuZ3RoUG9pbnQmIGZyb20sIGNvbnN0IExlbmd0aFBvaW50JiB0
bywgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBMZW5ndGhQ
b2ludChibGVuZChmcm9tLngoKSwgdG8ueCgpLCBwcm9ncmVzcyksIGJsZW5kKGZyb20ueSgpLCB0
by55KCksIHByb2dyZXNzKSk7CisgICAgcmV0dXJuIExlbmd0aFBvaW50KGJsZW5kKGZyb20ueCgp
LCB0by54KCksIGNvbnRleHQpLCBibGVuZChmcm9tLnkoKSwgdG8ueSgpLCBjb250ZXh0KSk7CiB9
CiAKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBM
ZW5ndGhQb2ludCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3Ro
U2l6ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoU2l6ZS5oCmluZGV4IGJkNTc0
MWExYWQ5ODQ3NTY3MGFkZjljOTI2ZTQ1NTE1YWE0YTM0NmIuLjNhYzIxYTQ3NDRiZjFmNzFkODdk
YTA3ODdmNWEyNDIzYmZjNTVmZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0xlbmd0aFNpemUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGhTaXplLmgK
QEAgLTIzLDYgKzIzLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQmxlbmRp
bmdDb250ZXh0OworCiBzdHJ1Y3QgTGVuZ3RoU2l6ZSB7CiAgICAgTGVuZ3RoIHdpZHRoOwogICAg
IExlbmd0aCBoZWlnaHQ7CkBAIC0zNiw5ICszOCw5IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IExlbmd0aFNpemUmIGEsIGNvbnN0IExlbmd0aFNpemUmIGIpCiAgICAgcmV0
dXJuIGEud2lkdGggPT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PSBiLmhlaWdodDsKIH0KIAotaW5s
aW5lIExlbmd0aFNpemUgYmxlbmQoY29uc3QgTGVuZ3RoU2l6ZSYgZnJvbSwgY29uc3QgTGVuZ3Ro
U2l6ZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK2lubGluZSBMZW5ndGhTaXplIGJsZW5kKGNvbnN0
IExlbmd0aFNpemUmIGZyb20sIGNvbnN0IExlbmd0aFNpemUmIHRvLCBjb25zdCBCbGVuZGluZ0Nv
bnRleHQmIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIHsgYmxlbmQoZnJvbS53aWR0aCwgdG8ud2lk
dGgsIHByb2dyZXNzKSwgYmxlbmQoZnJvbS5oZWlnaHQsIHRvLmhlaWdodCwgcHJvZ3Jlc3MpIH07
CisgICAgcmV0dXJuIHsgYmxlbmQoZnJvbS53aWR0aCwgdG8ud2lkdGgsIGNvbnRleHQpLCBibGVu
ZChmcm9tLmhlaWdodCwgdG8uaGVpZ2h0LCBjb250ZXh0KSB9OwogfQogCiBXVEY6OlRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgTGVuZ3RoU2l6ZSYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvblV0aWxp
dGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvblV0aWxp
dGllcy5oCmluZGV4IDM0YmJiZTllOGRlYzBiM2I2ZTg1NTFhOTgyMTE1ODFhNGVkZjM1MjMuLmVj
NDA5NzVkYmZmZGM1ODEwNmFlMWRhZWQ2YmFlOTJlMTdmNjY1OTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmgKQEAg
LTMwLDQxICszMCw1MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlubGluZSBpbnQgYmxl
bmQoaW50IGZyb20sIGludCB0bywgZG91YmxlIHByb2dyZXNzKQorc3RydWN0IEJsZW5kaW5nQ29u
dGV4dCB7CisgICAgZG91YmxlIHByb2dyZXNzOworICAgIGJvb2wgaXNEaXNjcmV0ZSB7IGZhbHNl
IH07CisKKyAgICBCbGVuZGluZ0NvbnRleHQoZG91YmxlIHByb2dyZXNzLCBib29sIGlzRGlzY3Jl
dGUgPSBmYWxzZSkKKyAgICAgICAgOiBwcm9ncmVzcyhwcm9ncmVzcykKKyAgICAgICAgLCBpc0Rp
c2NyZXRlKGlzRGlzY3JldGUpCisgICAgeworICAgIH0KK307CisKK2lubGluZSBpbnQgYmxlbmQo
aW50IGZyb20sIGludCB0bywgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogeyAgCi0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obHJvdW5kKHN0YXRpY19jYXN0PGRvdWJsZT4oZnJv
bSkgKyBzdGF0aWNfY2FzdDxkb3VibGU+KHRvIC0gZnJvbSkgKiBwcm9ncmVzcykpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZChzdGF0aWNfY2FzdDxkb3VibGU+KGZyb20pICsg
c3RhdGljX2Nhc3Q8ZG91YmxlPih0byAtIGZyb20pICogY29udGV4dC5wcm9ncmVzcykpOwogfQog
Ci1pbmxpbmUgdW5zaWduZWQgYmxlbmQodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIGRvdWJs
ZSBwcm9ncmVzcykKK2lubGluZSB1bnNpZ25lZCBibGVuZCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCB0bywgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obHJvdW5kKHRvID4gZnJvbSA/IHN0YXRpY19jYXN0PGRvdWJsZT4o
ZnJvbSkgKyBzdGF0aWNfY2FzdDxkb3VibGU+KHRvIC0gZnJvbSkgKiBwcm9ncmVzcyA6IHN0YXRp
Y19jYXN0PGRvdWJsZT4oZnJvbSkgLSBzdGF0aWNfY2FzdDxkb3VibGU+KGZyb20gLSB0bykgKiBw
cm9ncmVzcykpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obHJvdW5kKHRvID4g
ZnJvbSA/IHN0YXRpY19jYXN0PGRvdWJsZT4oZnJvbSkgKyBzdGF0aWNfY2FzdDxkb3VibGU+KHRv
IC0gZnJvbSkgKiBjb250ZXh0LnByb2dyZXNzIDogc3RhdGljX2Nhc3Q8ZG91YmxlPihmcm9tKSAt
IHN0YXRpY19jYXN0PGRvdWJsZT4oZnJvbSAtIHRvKSAqIGNvbnRleHQucHJvZ3Jlc3MpKTsKIH0K
IAotaW5saW5lIGRvdWJsZSBibGVuZChkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUgcHJv
Z3Jlc3MpCitpbmxpbmUgZG91YmxlIGJsZW5kKGRvdWJsZSBmcm9tLCBkb3VibGUgdG8sIGNvbnN0
IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsgIAotICAgIHJldHVybiBmcm9tICsgKHRvIC0g
ZnJvbSkgKiBwcm9ncmVzczsKKyAgICByZXR1cm4gZnJvbSArICh0byAtIGZyb20pICogY29udGV4
dC5wcm9ncmVzczsKIH0KIAotaW5saW5lIGZsb2F0IGJsZW5kKGZsb2F0IGZyb20sIGZsb2F0IHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCitpbmxpbmUgZmxvYXQgYmxlbmQoZmxvYXQgZnJvbSwgZmxvYXQg
dG8sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKIHsgIAotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4oZnJvbSArICh0byAtIGZyb20pICogcHJvZ3Jlc3MpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4oZnJvbSArICh0byAtIGZyb20pICogY29udGV4dC5wcm9ncmVz
cyk7CiB9CiAKLWlubGluZSBMYXlvdXRVbml0IGJsZW5kKExheW91dFVuaXQgZnJvbSwgTGF5b3V0
VW5pdCB0bywgZG91YmxlIHByb2dyZXNzKQoraW5saW5lIExheW91dFVuaXQgYmxlbmQoTGF5b3V0
VW5pdCBmcm9tLCBMYXlvdXRVbml0IHRvLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQp
CiB7Ci0gICAgcmV0dXJuIExheW91dFVuaXQoYmxlbmQoZnJvbS50b0Zsb2F0KCksIHRvLnRvRmxv
YXQoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gTGF5b3V0VW5pdChibGVuZChmcm9tLnRvRmxv
YXQoKSwgdG8udG9GbG9hdCgpLCBjb250ZXh0KSk7CiB9CiAKLWlubGluZSBJbnRQb2ludCBibGVu
ZChjb25zdCBJbnRQb2ludCYgZnJvbSwgY29uc3QgSW50UG9pbnQmIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCitpbmxpbmUgSW50UG9pbnQgYmxlbmQoY29uc3QgSW50UG9pbnQmIGZyb20sIGNvbnN0IElu
dFBvaW50JiB0bywgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVy
biBJbnRQb2ludChibGVuZChmcm9tLngoKSwgdG8ueCgpLCBwcm9ncmVzcyksCi0gICAgICAgIGJs
ZW5kKGZyb20ueSgpLCB0by55KCksIHByb2dyZXNzKSk7CisgICAgcmV0dXJuIEludFBvaW50KGJs
ZW5kKGZyb20ueCgpLCB0by54KCksIGNvbnRleHQpLAorICAgICAgICBibGVuZChmcm9tLnkoKSwg
dG8ueSgpLCBjb250ZXh0KSk7CiB9CiAKLWlubGluZSBMYXlvdXRQb2ludCBibGVuZChjb25zdCBM
YXlvdXRQb2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
CitpbmxpbmUgTGF5b3V0UG9pbnQgYmxlbmQoY29uc3QgTGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0
IExheW91dFBvaW50JiB0bywgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewotICAg
IHJldHVybiBMYXlvdXRQb2ludChibGVuZChmcm9tLngoKSwgdG8ueCgpLCBwcm9ncmVzcyksCi0g
ICAgICAgIGJsZW5kKGZyb20ueSgpLCB0by55KCksIHByb2dyZXNzKSk7CisgICAgcmV0dXJuIExh
eW91dFBvaW50KGJsZW5kKGZyb20ueCgpLCB0by54KCksIGNvbnRleHQpLAorICAgICAgICBibGVu
ZChmcm9tLnkoKSwgdG8ueSgpLCBjb250ZXh0KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxl
bmRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGlu
Zy5jcHAKaW5kZXggNzE3OTA4MTJjYjI1NGMwY2M1YzY2ZTVkNjZhOTk2MjZmMjhjMjIwMS4uYjll
N2RhYmQyOWQ5NTRiYTBlMTU3YWY5NTU5NzE1ZWY3MmY5ZGQ2ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAKQEAgLTkwLDQxICs5
MCw0MSBAQCBDb2xvciBibGVuZFdpdGhXaGl0ZShjb25zdCBDb2xvciYgY29sb3IpCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENv
bG9yJiB0bywgZG91YmxlIHByb2dyZXNzKQorQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20s
IGNvbnN0IENvbG9yJiB0bywgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAg
IC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4K
ICAgICAvLyBXZSBuZWVkIHRvIHByZXNlcnZlIHRoZSBzdGF0ZSBvZiB0aGUgdmFsaWQgZmxhZyBh
dCB0aGUgZW5kIG9mIHRoZSBhbmltYXRpb24KLSAgICBpZiAocHJvZ3Jlc3MgPT0gMSAmJiAhdG8u
aXNWYWxpZCgpKQorICAgIGlmIChjb250ZXh0LnByb2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQo
KSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGF1dG8gcHJlbXVsdGlwbGllZEZyb20gPSBw
cmVtdWx0aXBsaWVkKGZyb20udG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkpOwogICAg
IGF1dG8gcHJlbXVsdGlwbGllZFRvID0gcHJlbXVsdGlwbGllZCh0by50b0NvbG9yVHlwZUxvc3N5
PFNSR0JBPGZsb2F0Pj4oKSk7CiAKICAgICBhdXRvIHByZW11bHRpcGxpZWRCbGVuZGVkID0gbWFr
ZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PigKLSAgICAgICAgV2ViQ29yZTo6
YmxlbmQocHJlbXVsdGlwbGllZEZyb20ucmVkLCBwcmVtdWx0aXBsaWVkVG8ucmVkLCBwcm9ncmVz
cyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmdyZWVuLCBwcmVt
dWx0aXBsaWVkVG8uZ3JlZW4sIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJl
bXVsdGlwbGllZEZyb20uYmx1ZSwgcHJlbXVsdGlwbGllZFRvLmJsdWUsIHByb2dyZXNzKSwKLSAg
ICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20uYWxwaGEsIHByZW11bHRpcGxp
ZWRUby5hbHBoYSwgcHJvZ3Jlc3MpCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxp
ZWRGcm9tLnJlZCwgcHJlbXVsdGlwbGllZFRvLnJlZCwgY29udGV4dC5wcm9ncmVzcyksCisgICAg
ICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmdyZWVuLCBwcmVtdWx0aXBsaWVk
VG8uZ3JlZW4sIGNvbnRleHQucHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVt
dWx0aXBsaWVkRnJvbS5ibHVlLCBwcmVtdWx0aXBsaWVkVG8uYmx1ZSwgY29udGV4dC5wcm9ncmVz
cyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmFscGhhLCBwcmVt
dWx0aXBsaWVkVG8uYWxwaGEsIGNvbnRleHQucHJvZ3Jlc3MpCiAgICAgKTsKIAogICAgIHJldHVy
biBjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KHVucHJlbXVsdGlwbGllZChwcmVtdWx0aXBs
aWVkQmxlbmRlZCkpOwogfQogCi1Db2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBD
b2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitDb2xvciBibGVu
ZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBj
b25zdCBCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgLy8gRklYTUU6IEV4dGVuZGVk
Q29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgogICAgIC8vIFdlIG5lZWQgdG8g
cHJlc2VydmUgdGhlIHN0YXRlIG9mIHRoZSB2YWxpZCBmbGFnIGF0IHRoZSBlbmQgb2YgdGhlIGFu
aW1hdGlvbgotICAgIGlmIChwcm9ncmVzcyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCisgICAgaWYg
KGNvbnRleHQucHJvZ3Jlc3MgPT0gMSAmJiAhdG8uaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4g
eyB9OwogCiAgICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9Db2xvclR5cGVMb3NzeTxTUkdCQTxm
bG9hdD4+KCk7CiAgICAgYXV0byB0b1NSR0IgPSB0by50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPGZs
b2F0Pj4oKTsKIAogICAgIGF1dG8gYmxlbmRlZCA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5n
PFNSR0JBPGZsb2F0Pj4oCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLnJlZCwgdG9T
UkdCLnJlZCwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ncmVl
biwgdG9TUkdCLmdyZWVuLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21T
UkdCLmJsdWUsIHRvU1JHQi5ibHVlLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5k
KGZyb21TUkdCLmFscGhhLCB0b1NSR0IuYWxwaGEsIHByb2dyZXNzKQorICAgICAgICBXZWJDb3Jl
OjpibGVuZChmcm9tU1JHQi5yZWQsIHRvU1JHQi5yZWQsIGNvbnRleHQucHJvZ3Jlc3MpLAorICAg
ICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ncmVlbiwgdG9TUkdCLmdyZWVuLCBjb250ZXh0
LnByb2dyZXNzKSwKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYmx1ZSwgdG9TUkdC
LmJsdWUsIGNvbnRleHQucHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JH
Qi5hbHBoYSwgdG9TUkdCLmFscGhhLCBjb250ZXh0LnByb2dyZXNzKQogICAgICk7CiAKICAgICBy
ZXR1cm4gY29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+PihibGVuZGVkKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuaAppbmRleCA0YmM4ZTBm
MzU5MWU0ZWUwMDYxYTk4MmMwMGIxNGMwODMwMTQwYjNiLi5jYmNlOGFkMmZiNDczMjBiN2ViZTcx
NmNhMDIyOTIyMThmNmE2OGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvckJsZW5kaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JCbGVuZGluZy5oCkBAIC0yNyw2ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorc3RydWN0IEJsZW5kaW5nQ29udGV4dDsKIGNsYXNzIENvbG9yOwogCiAvLyBOT1RF
OiBUaGVzZSBmdW5jdGlvbnMgZG8gYSBsb3NzeSBjb252ZXJzaW9uIHRvIDgtYml0IHNSR0JBIGJl
Zm9yZSBibGVuZGluZy4KQEAgLTM3LDcgKzM4LDcgQEAgQ29sb3IgYmxlbmRTb3VyY2VPdmVyKGNv
bnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKIC8vIEJlc3Bva2UgIndoaXRlbmluZyIgYWxnb3Jp
dGhtIHVzZWQgYnkgUmVuZGVyVGhlbWU6OnRyYW5zZm9ybVNlbGVjdGlvbkJhY2tncm91bmRDb2xv
ci4KIENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJik7CiAKLUNvbG9yIGJsZW5kKGNv
bnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcyk7Ci1Db2xv
ciBibGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3Im
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpOworQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNv
bnN0IENvbG9yJiB0bywgY29uc3QgQmxlbmRpbmdDb250ZXh0Jik7CitDb2xvciBibGVuZFdpdGhv
dXRQcmVtdWx0aXBseShjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBjb25zdCBC
bGVuZGluZ0NvbnRleHQmKTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2Eu
bW0KaW5kZXggY2JjODRmZjU0OGQ5NjM3ZjU2MjkxOTI4NzllMTQwODNlZGJlM2YzYi4uMDAwZDkz
NzAzNzRiYmE5YjQ1YWFmNWRiMzdlZTM2OWJiNzUwNzM0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9y
bUNBRmlsdGVyc0NvY29hLm1tCkBAIC00NjMsMTggKzQ2MywxOSBAQCBSZXRhaW5QdHI8TlNWYWx1
ZT4gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoRmlsdGVyT3Bl
cmF0aW9uOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewogICAgICAgICBkb3Vi
bGUgdCA9IGZpbHRlck9wZXJhdGlvbiA/IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24+KCpmaWx0ZXJPcGVyYXRpb24pLmFtb3VudCgpIDogMDsKICAgICAgICAgdCA9IHN0
ZDo6bWluKHN0ZDo6bWF4KDAuMCwgdCksIDEuMCk7CisgICAgICAgIEJsZW5kaW5nQ29udGV4dCBj
b250ZXh0IHsgdCB9OwogICAgICAgICBDQUNvbG9yTWF0cml4IGNvbG9yTWF0cml4ID0gewotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0
YW50c1swXVswXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzBdWzBdLCB0KSksCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBdWzFd
LCBzZXBpYUZ1bGxDb25zdGFudHNbMF1bMV0sIHQpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0
PGZsb2F0PihXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMF1bMl0sIHNlcGlhRnVs
bENvbnN0YW50c1swXVsyXSwgdCkpLCAwLCAwLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1swXVswXSwgc2VwaWFGdWxsQ29u
c3RhbnRzWzBdWzBdLCBjb250ZXh0KSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4o
V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzBdWzFdLCBzZXBpYUZ1bGxDb25zdGFu
dHNbMF1bMV0sIGNvbnRleHQpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJD
b3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMF1bMl0sIHNlcGlhRnVsbENvbnN0YW50c1sw
XVsyXSwgY29udGV4dCkpLCAwLCAwLAogICAgICAgICAgICAgCi0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzFdWzBdLCBzZXBp
YUZ1bGxDb25zdGFudHNbMV1bMF0sIHQpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0
PihXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMV1bMV0sIHNlcGlhRnVsbENvbnN0
YW50c1sxXVsxXSwgdCkpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6
OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1sxXVsyXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzFdWzJd
LCB0KSksIDAsIDAsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6Ymxl
bmQoc2VwaWFOb25lQ29uc3RhbnRzWzFdWzBdLCBzZXBpYUZ1bGxDb25zdGFudHNbMV1bMF0sIGNv
bnRleHQpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZChz
ZXBpYU5vbmVDb25zdGFudHNbMV1bMV0sIHNlcGlhRnVsbENvbnN0YW50c1sxXVsxXSwgY29udGV4
dCkpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlh
Tm9uZUNvbnN0YW50c1sxXVsyXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzFdWzJdLCBjb250ZXh0KSks
IDAsIDAsCiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJD
b3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMl1bMF0sIHNlcGlhRnVsbENvbnN0YW50c1sy
XVswXSwgdCkpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5k
KHNlcGlhTm9uZUNvbnN0YW50c1syXVsxXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzJdWzFdLCB0KSks
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25l
Q29uc3RhbnRzWzJdWzJdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1bMl0sIHQpKSwgMCwgMCwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25z
dGFudHNbMl1bMF0sIHNlcGlhRnVsbENvbnN0YW50c1syXVswXSwgY29udGV4dCkpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50
c1syXVsxXSwgc2VwaWFGdWxsQ29uc3RhbnRzWzJdWzFdLCBjb250ZXh0KSksCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzJd
WzJdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1bMl0sIGNvbnRleHQpKSwgMCwgMCwKICAgICAgICAg
ICAgIDAsIDAsIDAsIDEsIDAKICAgICAgICAgfTsKICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZh
bHVlV2l0aENBQ29sb3JNYXRyaXg6Y29sb3JNYXRyaXhdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3Bw
CmluZGV4IDNlOTFjNDE3YTU5YWFkYzkxYzgxMGY2MWU2ZjE2ZjdhNThiOGUxZTAuLmNlZGQwNTYw
NjAzYTJjOWNjMjhlNGNhNTZhZTI2OTcxN2YyNDc0NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5j
cHAKQEAgLTc0LDE3ICs3NCwxNyBAQCB2b2lkIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6bG9h
ZEV4dGVybmFsRG9jdW1lbnRJZk5lZWRlZChDYWNoZWRSZXNvdXJjZUxvYWRlcgogICAgIG1fY2Fj
aGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UtPmxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIsIG9wdGlv
bnMpOwogfQogCi1SZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uOjpibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9n
cmVzcywgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2gpCitSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRp
b24qIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCwgYm9vbCBibGVuZFRvUGFz
c3Rocm91Z2gpCiB7CiAgICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQog
ICAgICAgICByZXR1cm4gdGhpczsKICAgICAKICAgICBpZiAoYmxlbmRUb1Bhc3N0aHJvdWdoKQot
ICAgICAgICByZXR1cm4gQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKFdl
YkNvcmU6OmJsZW5kKG1fYW1vdW50LCBwYXNzdGhyb3VnaEFtb3VudCgpLCBwcm9ncmVzcyksIG1f
dHlwZSk7CisgICAgICAgIHJldHVybiBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpj
cmVhdGUoV2ViQ29yZTo6YmxlbmQobV9hbW91bnQsIHBhc3N0aHJvdWdoQW1vdW50KCksIGNvbnRl
eHQpLCBtX3R5cGUpOwogICAgICAgICAKICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uKiBmcm9tT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbj4oZnJvbSk7CiAgICAgZG91YmxlIGZyb21BbW91bnQgPSBmcm9tT3BlcmF0aW9u
ID8gZnJvbU9wZXJhdGlvbi0+YW1vdW50KCkgOiBwYXNzdGhyb3VnaEFtb3VudCgpOwotICAgIHJl
dHVybiBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6Ymxl
bmQoZnJvbUFtb3VudCwgbV9hbW91bnQsIHByb2dyZXNzKSwgbV90eXBlKTsKKyAgICByZXR1cm4g
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKGZy
b21BbW91bnQsIG1fYW1vdW50LCBjb250ZXh0KSwgbV90eXBlKTsKIH0KIAogYm9vbCBCYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4mIGNv
bG9yKSBjb25zdApAQCAtMTM3LDE3ICsxMzcsMTcgQEAgZG91YmxlIEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb246OnBhc3N0aHJvdWdoQW1vdW50KCkgY29uc3QKICAgICB9CiB9CiAKLVJl
ZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b246OmJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBi
b29sIGJsZW5kVG9QYXNzdGhyb3VnaCkKK1JlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEJhc2ljQ29t
cG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OmJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlv
biogZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0LCBib29sIGJsZW5kVG9QYXNz
dGhyb3VnaCkKIHsKICAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgqdGhpcykpCiAg
ICAgICAgIHJldHVybiB0aGlzOwogICAgIAogICAgIGlmIChibGVuZFRvUGFzc3Rocm91Z2gpCi0g
ICAgICAgIHJldHVybiBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVh
dGUoV2ViQ29yZTo6YmxlbmQobV9hbW91bnQsIHBhc3N0aHJvdWdoQW1vdW50KCksIHByb2dyZXNz
KSwgbV90eXBlKTsKKyAgICAgICAgcmV0dXJuIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChtX2Ftb3VudCwgcGFzc3Rocm91Z2hBbW91
bnQoKSwgY29udGV4dCksIG1fdHlwZSk7CiAgICAgICAgIAogICAgIGNvbnN0IEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIGZyb21PcGVyYXRpb24gPSBkb3duY2FzdDxCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmcm9tKTsKICAgICBkb3VibGUgZnJv
bUFtb3VudCA9IGZyb21PcGVyYXRpb24gPyBmcm9tT3BlcmF0aW9uLT5hbW91bnQoKSA6IHBhc3N0
aHJvdWdoQW1vdW50KCk7Ci0gICAgcmV0dXJuIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChmcm9tQW1vdW50LCBtX2Ftb3VudCwgcHJv
Z3Jlc3MpLCBtX3R5cGUpOworICAgIHJldHVybiBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbUFtb3VudCwgbV9hbW91bnQsIGNv
bnRleHQpLCBtX3R5cGUpOwogfQogCiBib29sIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb246OnRyYW5zZm9ybUNvbG9yKFNSR0JBPGZsb2F0PiYgY29sb3IpIGNvbnN0CkBAIC0y
MTUsNyArMjE1LDcgQEAgYm9vbCBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246Om9wZXJh
dG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24KICAgICByZXR1cm4gdHJ1ZTsK
IH0KICAgICAKLVJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEludmVydExpZ2h0bmVzc0ZpbHRlck9w
ZXJhdGlvbjo6YmxlbmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUsIGJvb2wp
CitSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246
OmJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0
JiwgYm9vbCkKIHsKICAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgqdGhpcykpCiAg
ICAgICAgIHJldHVybiB0aGlzOwpAQCAtMzMxLDcgKzMzMSw3IEBAIGJvb2wgQmx1ckZpbHRlck9w
ZXJhdGlvbjo6b3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbikgY29u
c3QKICAgICByZXR1cm4gbV9zdGREZXZpYXRpb24gPT0gZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJh
dGlvbj4ob3BlcmF0aW9uKS5zdGREZXZpYXRpb24oKTsKIH0KICAgICAKLVJlZlB0cjxGaWx0ZXJP
cGVyYXRpb24+IEJsdXJGaWx0ZXJPcGVyYXRpb246OmJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlv
biogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCkKK1JlZlB0
cjxGaWx0ZXJPcGVyYXRpb24+IEJsdXJGaWx0ZXJPcGVyYXRpb246OmJsZW5kKGNvbnN0IEZpbHRl
ck9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0LCBib29sIGJs
ZW5kVG9QYXNzdGhyb3VnaCkKIHsKICAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgq
dGhpcykpCiAgICAgICAgIHJldHVybiB0aGlzOwpAQCAtMzM5LDExICszMzksMTEgQEAgUmVmUHRy
PEZpbHRlck9wZXJhdGlvbj4gQmx1ckZpbHRlck9wZXJhdGlvbjo6YmxlbmQoY29uc3QgRmlsdGVy
T3BlcmF0aW9uKiBmcm9tLAogICAgIExlbmd0aFR5cGUgbGVuZ3RoVHlwZSA9IG1fc3RkRGV2aWF0
aW9uLnR5cGUoKTsKIAogICAgIGlmIChibGVuZFRvUGFzc3Rocm91Z2gpCi0gICAgICAgIHJldHVy
biBCbHVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQobV9zdGREZXZpYXRp
b24sIExlbmd0aChsZW5ndGhUeXBlKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgcmV0dXJuIEJsdXJG
aWx0ZXJPcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChtX3N0ZERldmlhdGlvbiwgTGVu
Z3RoKGxlbmd0aFR5cGUpLCBjb250ZXh0KSk7CiAKICAgICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0
aW9uKiBmcm9tT3BlcmF0aW9uID0gZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJhdGlvbj4oZnJvbSk7
CiAgICAgTGVuZ3RoIGZyb21MZW5ndGggPSBmcm9tT3BlcmF0aW9uID8gZnJvbU9wZXJhdGlvbi0+
bV9zdGREZXZpYXRpb24gOiBMZW5ndGgobGVuZ3RoVHlwZSk7Ci0gICAgcmV0dXJuIEJsdXJGaWx0
ZXJPcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChmcm9tTGVuZ3RoLCBtX3N0ZERldmlh
dGlvbiwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gQmx1ckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRl
KFdlYkNvcmU6OmJsZW5kKGZyb21MZW5ndGgsIG1fc3RkRGV2aWF0aW9uLCBjb250ZXh0KSk7CiB9
CiAgICAgCiBib29sIERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3Qg
RmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24pIGNvbnN0CkBAIC0zNTQsMTYgKzM1NCwxNiBAQCBi
b29sIERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3Bl
cmF0aW9uJiBvcGVyYXRpb24pIGNvbgogICAgIHJldHVybiBtX2xvY2F0aW9uID09IG90aGVyLm1f
bG9jYXRpb24gJiYgbV9zdGREZXZpYXRpb24gPT0gb3RoZXIubV9zdGREZXZpYXRpb24gJiYgbV9j
b2xvciA9PSBvdGhlci5tX2NvbG9yOwogfQogICAgIAotUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4g
RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6YmxlbmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBm
cm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoKQorUmVmUHRyPEZp
bHRlck9wZXJhdGlvbj4gRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6YmxlbmQoY29uc3QgRmls
dGVyT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQsIGJvb2wg
YmxlbmRUb1Bhc3N0aHJvdWdoKQogewogICAgIGlmIChmcm9tICYmICFmcm9tLT5pc1NhbWVUeXBl
KCp0aGlzKSkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICBpZiAoYmxlbmRUb1Bhc3N0aHJv
dWdoKQogICAgICAgICByZXR1cm4gRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKAot
ICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQobV9sb2NhdGlvbiwgSW50UG9pbnQoKSwgcHJvZ3Jl
c3MpLAotICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQobV9zdGREZXZpYXRpb24sIDAsIHByb2dy
ZXNzKSwKLSAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKG1fY29sb3IsIENvbG9yOjp0cmFuc3Bh
cmVudEJsYWNrLCBwcm9ncmVzcykpOworICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQobV9sb2Nh
dGlvbiwgSW50UG9pbnQoKSwgY29udGV4dCksCisgICAgICAgICAgICBXZWJDb3JlOjpibGVuZCht
X3N0ZERldmlhdGlvbiwgMCwgY29udGV4dCksCisgICAgICAgICAgICBXZWJDb3JlOjpibGVuZCht
X2NvbG9yLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjaywgY29udGV4dCkpOwogCiAgICAgY29uc3Qg
RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiogZnJvbU9wZXJhdGlvbiA9IGRvd25jYXN0PERyb3BT
aGFkb3dGaWx0ZXJPcGVyYXRpb24+KGZyb20pOwogICAgIEludFBvaW50IGZyb21Mb2NhdGlvbiA9
IGZyb21PcGVyYXRpb24gPyBmcm9tT3BlcmF0aW9uLT5sb2NhdGlvbigpIDogSW50UG9pbnQoKTsK
QEAgLTM3MSw5ICszNzEsOSBAQCBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBEcm9wU2hhZG93Rmls
dGVyT3BlcmF0aW9uOjpibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qCiAgICAgQ29sb3IgZnJv
bUNvbG9yID0gZnJvbU9wZXJhdGlvbiA/IGZyb21PcGVyYXRpb24tPmNvbG9yKCkgOiBDb2xvcjo6
dHJhbnNwYXJlbnRCbGFjazsKICAgICAKICAgICByZXR1cm4gRHJvcFNoYWRvd0ZpbHRlck9wZXJh
dGlvbjo6Y3JlYXRlKAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tTG9jYXRpb24sIG1fbG9j
YXRpb24sIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVN0ZERldmlhdGlv
biwgbV9zdGREZXZpYXRpb24sIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJv
bUNvbG9yLCBtX2NvbG9yLCBwcm9ncmVzcykpOworICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9t
TG9jYXRpb24sIG1fbG9jYXRpb24sIGNvbnRleHQpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChm
cm9tU3RkRGV2aWF0aW9uLCBtX3N0ZERldmlhdGlvbiwgY29udGV4dCksCisgICAgICAgIFdlYkNv
cmU6OmJsZW5kKGZyb21Db2xvciwgbV9jb2xvciwgY29udGV4dCkpOwogfQogCiBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIGZpbHRl
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCmluZGV4IGUwMTUwZjgwYTJlMWRkOTcwZWMzOTY5YzZmYWZi
YjQ2ZGVkNDc5YWYuLjUxMzViYjAyYTQwMjJkYzViYjRjOTA0NDkxOGNhZjc1NGQwODI3M2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJPcGVyYXRpb24uaApAQCAtNDIsNiArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIC8vIENTUyBGaWx0ZXJzCiAKK3N0cnVjdCBCbGVuZGluZ0NvbnRleHQ7CiBjbGFzcyBDYWNo
ZWRSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlOwogY2xh
c3MgRmlsdGVyRWZmZWN0OwpAQCAtNzQsNyArNzUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIG9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJikgY29uc3QgPSAwOwogICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG8pIGNvbnN0IHsgcmV0dXJuICEo
KnRoaXMgPT0gbyk7IH0KIAotICAgIHZpcnR1YWwgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxl
bmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiAvKmZyb20qLywgZG91YmxlIC8qcHJvZ3Jlc3MqLywg
Ym9vbCAvKmJsZW5kVG9QYXNzdGhyb3VnaCovID0gZmFsc2UpCisgICAgdmlydHVhbCBSZWZQdHI8
RmlsdGVyT3BlcmF0aW9uPiBibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIC8qZnJvbSovLCBj
b25zdCBCbGVuZGluZ0NvbnRleHQmLCBib29sIC8qYmxlbmRUb1Bhc3N0aHJvdWdoKi8gPSBmYWxz
ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTIxNSw3ICsyMTYs
NyBAQCBwdWJsaWM6CiAKICAgICBkb3VibGUgYW1vdW50KCkgY29uc3QgeyByZXR1cm4gbV9hbW91
bnQ7IH0KIAotICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kKGNvbnN0IEZpbHRlck9w
ZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9
IGZhbHNlKSBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZChjb25z
dCBGaWx0ZXJPcGVyYXRpb24qIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYsIGJvb2wgYmxl
bmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb24mKSBjb25zdCBvdmVycmlkZTsKQEAgLTI1
MCw3ICsyNTEsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGFmZmVjdHNPcGFjaXR5KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV90eXBlID09IE9QQUNJVFk7IH0KIAotICAgIFJlZlB0cjxGaWx0
ZXJPcGVyYXRpb24+IGJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHBy
b2dyZXNzLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKSBvdmVycmlkZTsKKyAgICBS
ZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZyb20s
IGNvbnN0IEJsZW5kaW5nQ29udGV4dCYsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2Up
IG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGaWx0ZXJP
cGVyYXRpb24mKSBjb25zdCBvdmVycmlkZTsKQEAgLTI4MCw3ICsyODEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlv
bigpKTsKICAgICB9CiAKLSAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZChjb25zdCBG
aWx0ZXJPcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvUGFzc3Ro
cm91Z2ggPSBmYWxzZSkgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxl
bmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmLCBi
b29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJikgY29uc3QgZmluYWw7CkBA
IC0zMTEsNyArMzEyLDcgQEAgcHVibGljOgogICAgIGJvb2wgYWZmZWN0c09wYWNpdHkoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBtb3Zlc1BpeGVscygpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+
IGJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29s
IGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKSBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVy
T3BlcmF0aW9uPiBibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZyb20sIGNvbnN0IEJsZW5k
aW5nQ29udGV4dCYsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpIG92ZXJyaWRlOwog
CiBwcml2YXRlOgogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb24mKSBj
b25zdCBvdmVycmlkZTsKQEAgLTM0Niw3ICszNDcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBhZmZl
Y3RzT3BhY2l0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICBib29sIG1v
dmVzUGl4ZWxzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgUmVmUHRy
PEZpbHRlck9wZXJhdGlvbj4gYmxlbmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmcm9tLCBkb3Vi
bGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpIG92ZXJyaWRlOwor
ICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiog
ZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiwgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2ggPSBm
YWxzZSkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZp
bHRlck9wZXJhdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9JZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9JZGVudGl0
eVRyYW5zZm9ybU9wZXJhdGlvbi5oCmluZGV4IDAzZDkyODA5NzQxYTA1Y2Y4MzBmNjM0YzdiZjU5
MmU2ZGQ1YWEzMjMuLmY0ZTBiMjNlYjdiOTM1YThiYmRjN2Q1ZTVjOTAzOTJlZjE0NWE1YzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvSWRl
bnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmgKQEAgLTI5LDYg
KzI5LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQmxlbmRpbmdDb250ZXh0
OworCiBjbGFzcyBJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbiBmaW5hbCA6IHB1YmxpYyBUcmFu
c2Zvcm1PcGVyYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8SWRlbnRpdHlUcmFuc2Zv
cm1PcGVyYXRpb24+IGNyZWF0ZSgpCkBAIC01NCw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVu
ZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qLCBkb3VibGUsIGJvb2wgPSBmYWxzZSkgb3ZlcnJp
ZGUKKyAgICBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb24qLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmLCBib29sID0gZmFsc2UpIG92ZXJyaWRlCiAg
ICAgewogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXgzRFRyYW5zZm9ybU9wZXJh
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01h
dHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAppbmRleCAyNDdlMmQzZDgzOGI3MDEzYjc0NGE1
ZTliYmRmZjIzNjIxMmM5YzJhLi5kYWY1OWU2MzExOTNiZTc2OGQ4ZTA2ZGUzYjNlM2M4ZmE5MDIy
NzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNw
cApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hdHJp
eDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAKKyNpbmNsdWRlICJBbmltYXRpb25VdGlsaXRpZXMu
aCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCkBAIC0zNiwxMyArMzcsMTMgQEAgYm9vbCBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6
b3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG90aGVyKSBjb24KICAgICByZXR1
cm4gaXNTYW1lVHlwZShvdGhlcikgJiYgbV9tYXRyaXggPT0gZG93bmNhc3Q8TWF0cml4M0RUcmFu
c2Zvcm1PcGVyYXRpb24+KG90aGVyKS5tX21hdHJpeDsKIH0KIAotc3RhdGljIFJlZjxUcmFuc2Zv
cm1PcGVyYXRpb24+IGNyZWF0ZU9wZXJhdGlvbihUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdG8sIFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgUmVmPFRy
YW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlT3BlcmF0aW9uKFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
bywgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYgY29u
dGV4dCkKIHsKLSAgICB0by5ibGVuZChmcm9tLCBwcm9ncmVzcyk7CisgICAgdG8uYmxlbmQoZnJv
bSwgY29udGV4dC5wcm9ncmVzcyk7CiAgICAgcmV0dXJuIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUodG8pOwogfQogCi1SZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBNYXRyaXgzRFRy
YW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBk
b3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5KQorUmVmPFRyYW5zZm9ybU9wZXJh
dGlvbj4gTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiBjb250ZXh0LCBib29sIGJsZW5k
VG9JZGVudGl0eSkKIHsKICAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgqdGhpcykp
CiAgICAgICAgIHJldHVybiAqdGhpczsKQEAgLTU3LDggKzU4LDggQEAgUmVmPFRyYW5zZm9ybU9w
ZXJhdGlvbj4gTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9y
bU9wZXJhdGkKICAgICBhcHBseSh0b1QsIHNpemUpOwogCiAgICAgaWYgKGJsZW5kVG9JZGVudGl0
eSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU9wZXJhdGlvbihmcm9tVCwgdG9ULCBwcm9ncmVzcyk7
Ci0gICAgcmV0dXJuIGNyZWF0ZU9wZXJhdGlvbih0b1QsIGZyb21ULCBwcm9ncmVzcyk7CisgICAg
ICAgIHJldHVybiBjcmVhdGVPcGVyYXRpb24oZnJvbVQsIHRvVCwgY29udGV4dCk7CisgICAgcmV0
dXJuIGNyZWF0ZU9wZXJhdGlvbih0b1QsIGZyb21ULCBjb250ZXh0KTsKIH0KIAogYm9vbCBNYXRy
aXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6aXNSZXByZXNlbnRhYmxlSW4yRCgpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJp
eDNEVHJhbnNmb3JtT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgKaW5kZXggMDUyODhjMzhj
MDc3NDk4Y2E0OTZiMjg4NWVjYWQ3NjBhNWFmM2IyMC4uN2IwMWJhZmQ1MTM3ZTU5MGIxODU0Y2Rk
Yjg2YzI3MTQzYjE2OWYzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1P
cGVyYXRpb24uaApAQCAtMzAsNiArMzAsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0
cnVjdCBCbGVuZGluZ0NvbnRleHQ7CisKIGNsYXNzIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9u
IGZpbmFsIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZjxNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtYXRyaXgpCkBAIC01OCw3ICs2MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVu
ZFRvSWRlbnRpdHkgPSBmYWxzZSkgb3ZlcnJpZGU7CisgICAgUmVmPFRyYW5zZm9ybU9wZXJhdGlv
bj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBCbGVuZGluZ0Nv
bnRleHQmLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKSBvdmVycmlkZTsKICAgICAKICAg
ICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJhbnNm
b3JtT3BlcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNwcAppbmRleCBiN2Y2NDRhOTY4YzBmODE0
NzE2MWUzNTNjMTdkMWNjNjZjZjc5OWM5Li45MmU2ZGZlMGE2NTFiZjk4OTZjMDU2MzJhMzEyMTY2
NDc1ZTk1ZmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL01hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24u
Y3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWF0
cml4VHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAKKyNpbmNsdWRlICJBbmltYXRpb25VdGlsaXRpZXMu
aCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCkBAIC0zNSwxMCArMzYsMTAgQEAgYm9vbCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246Om9w
ZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvdGhlcikgY29uc3QKICAgICByZXR1
cm4gbV9hID09IG0ubV9hICYmIG1fYiA9PSBtLm1fYiAmJiBtX2MgPT0gbS5tX2MgJiYgbV9kID09
IG0ubV9kICYmIG1fZSA9PSBtLm1fZSAmJiBtX2YgPT0gbS5tX2Y7CiB9CiAKLVJlZjxUcmFuc2Zv
cm1PcGVyYXRpb24+IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5
KQorUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVu
ZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYg
Y29udGV4dCwgYm9vbCBibGVuZFRvSWRlbnRpdHkpCiB7Ci0gICAgYXV0byBjcmVhdGVPcGVyYXRp
b24gPSBbXSAoVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRvLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
ZnJvbSwgZG91YmxlIHByb2dyZXNzKSB7Ci0gICAgICAgIHRvLmJsZW5kKGZyb20sIHByb2dyZXNz
KTsKKyAgICBhdXRvIGNyZWF0ZU9wZXJhdGlvbiA9IFtdIChUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dG8sIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmIGNv
bnRleHQpIHsKKyAgICAgICAgdG8uYmxlbmQoZnJvbSwgY29udGV4dC5wcm9ncmVzcyk7CiAgICAg
ICAgIHJldHVybiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0byk7CiAgICAgfTsK
IApAQCAtNTQsOCArNTUsOCBAQCBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBNYXRyaXhUcmFuc2Zv
cm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbgogICAgIH0KIAogICAg
IGlmIChibGVuZFRvSWRlbnRpdHkpCi0gICAgICAgIHJldHVybiBjcmVhdGVPcGVyYXRpb24oZnJv
bVQsIHRvVCwgcHJvZ3Jlc3MpOwotICAgIHJldHVybiBjcmVhdGVPcGVyYXRpb24odG9ULCBmcm9t
VCwgcHJvZ3Jlc3MpOworICAgICAgICByZXR1cm4gY3JlYXRlT3BlcmF0aW9uKGZyb21ULCB0b1Qs
IGNvbnRleHQpOworICAgIHJldHVybiBjcmVhdGVPcGVyYXRpb24odG9ULCBmcm9tVCwgY29udGV4
dCk7CiB9CiAKIHZvaWQgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpkdW1wKFRleHRTdHJlYW0m
IHRzKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmgKaW5k
ZXggYjU2N2JjN2ZhNGRjMTI4ZGMyOWQyZmYyZWQ4NWIzMmZiMmE1ZjQwMy4uYWVhNmI5MTNjN2E1
ODIxMTcwYTQ4OThjM2M5YjQ2Njk1YzcyOTAwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbi5oCkBAIC0zMCw2ICszMCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorc3RydWN0IEJsZW5kaW5nQ29udGV4dDsKKwogY2xhc3MgTWF0cml4VHJhbnNmb3JtT3Bl
cmF0aW9uIGZpbmFsIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZShkb3VibGUgYSwgZG91
YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIGUsIGRvdWJsZSBmKQpAQCAtNjIsNyAr
NjQsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgUmVm
PFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9t
LCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpIG92ZXJyaWRl
OworICAgIFJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbiogZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiwgYm9vbCBibGVuZFRvSWRlbnRpdHkg
PSBmYWxzZSkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29u
c3QgZmluYWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9w
ZXJhdGlvbi5jcHAKaW5kZXggZDRjZGU5Yzg5Y2YwNWZmZGM1NTgwMDcxM2FjYTdmZjkwMWQxYmY4
Yy4uZWFkNjU0MzE0YTJjOGY0ODk0Y2Y1YWQ1NTE2MzNhZjU1NjMwYzRmMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRy
YW5zZm9ybU9wZXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKQEAgLTM5LDE0
ICszOSwxNCBAQCBib29sIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOjpvcGVyYXRvcj09
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgb3RoZXIpCiAgICAgcmV0dXJuIG1fcCA9PSBkb3du
Y2FzdDxQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbj4ob3RoZXIpLm1fcDsKIH0KIAotUmVm
PFRyYW5zZm9ybU9wZXJhdGlvbj4gUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5k
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJs
ZW5kVG9JZGVudGl0eSkKK1JlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IFBlcnNwZWN0aXZlVHJhbnNm
b3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGNvbnN0
IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCwgYm9vbCBibGVuZFRvSWRlbnRpdHkpCiB7CiAgICAg
aWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQogICAgICAgICByZXR1cm4gKnRo
aXM7CiAgICAgCiAgICAgaWYgKGJsZW5kVG9JZGVudGl0eSkgewogICAgICAgICBkb3VibGUgcCA9
IGZsb2F0VmFsdWVGb3JMZW5ndGgobV9wLCAxKTsKLSAgICAgICAgcCA9IFdlYkNvcmU6OmJsZW5k
KHAsIDEuMCwgcHJvZ3Jlc3MpOyAvLyBGSVhNRTogdGhpcyBzZWVtcyB3cm9uZy4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyNzAwCisgICAgICAgIHAgPSBXZWJDb3Jl
OjpibGVuZChwLCAxLjAsIGNvbnRleHQpOyAvLyBGSVhNRTogdGhpcyBzZWVtcyB3cm9uZy4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyNzAwCiAgICAgICAgIHJldHVy
biBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aChjbGFtcFRvUG9z
aXRpdmVJbnRlZ2VyKHApLCBMZW5ndGhUeXBlOjpGaXhlZCkpOwogICAgIH0KICAgICAKQEAgLTU4
LDcgKzU4LDcgQEAgUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gUGVyc3BlY3RpdmVUcmFuc2Zvcm1P
cGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXIKICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0b1Q7CiAgICAgZnJvbVQuYXBwbHlQZXJzcGVjdGl2ZShmbG9hdFZhbHVlRm9yTGVuZ3Ro
KGZyb21QLCAxKSk7CiAgICAgdG9ULmFwcGx5UGVyc3BlY3RpdmUoZmxvYXRWYWx1ZUZvckxlbmd0
aCh0b1AsIDEpKTsKLSAgICB0b1QuYmxlbmQoZnJvbVQsIHByb2dyZXNzKTsKKyAgICB0b1QuYmxl
bmQoZnJvbVQsIGNvbnRleHQucHJvZ3Jlc3MpOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpE
ZWNvbXBvc2VkNFR5cGUgZGVjb21wOwogICAgIHRvVC5kZWNvbXBvc2U0KGRlY29tcCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUGVy
c3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaAppbmRleCA4
OWQwOTZmM2RjOGExOWM2ZTlmY2Y4MTAxNWNkY2U1MzMzYjYzZmM4Li43YWQxYTQxZDNkMzgxOWEy
MWFmYzM1ZWQ0MGE2ODAyMjhiOWEwMmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1BlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVj
dGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCkBAIC0zMiw2ICszMiw4IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorc3RydWN0IEJsZW5kaW5nQ29udGV4dDsKKwogY2xhc3MgUGVyc3BlY3RpdmVU
cmFuc2Zvcm1PcGVyYXRpb24gZmluYWwgOiBwdWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVmPFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVh
dGUoY29uc3QgTGVuZ3RoJiBwKQpAQCAtNTksNyArNjEsNyBAQCBwcml2YXRlOgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQo
Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxl
bmRUb0lkZW50aXR5ID0gZmFsc2UpIG92ZXJyaWRlOworICAgIFJlZjxUcmFuc2Zvcm1PcGVyYXRp
b24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRpbmdD
b250ZXh0JiwgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSkgb3ZlcnJpZGU7CiAKICAgICB2
b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAppbmRleCA5NjJlN2MxMDQ1MDg4MDEwODBi
MGIwNWQ3MGExMTZhYmM4N2VmNmQyLi45MGRjZWExNWU4NDI4ZjY5OWUwNDJlYWNmMzVjNjkwODE1
MDMwOTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3Bw
CkBAIC0zNywxMyArMzcsMTMgQEAgYm9vbCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246Om9wZXJh
dG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4g
bV94ID09IHIubV94ICYmIG1feSA9PSByLm1feSAmJiBtX3ogPT0gci5tX3ogJiYgbV9hbmdsZSA9
PSByLm1fYW5nbGU7CiB9CiAKLVJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IFJvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUg
cHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5KQorUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4g
Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24q
IGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCwgYm9vbCBibGVuZFRvSWRlbnRp
dHkpCiB7CiAgICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQogICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgCiAgICAgaWYgKGJsZW5kVG9JZGVudGl0eSkKLSAgICAgICAg
cmV0dXJuIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1feCwgbV95LCBtX3osIG1f
YW5nbGUgLSBtX2FuZ2xlICogcHJvZ3Jlc3MsIHR5cGUoKSk7CisgICAgICAgIHJldHVybiBSb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtX3gsIG1feSwgbV96LCBtX2FuZ2xlIC0gbV9h
bmdsZSAqIGNvbnRleHQucHJvZ3Jlc3MsIHR5cGUoKSk7CiAgICAgCiAgICAgY29uc3QgUm90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSBkb3duY2FzdDxSb3RhdGVUcmFuc2Zvcm1PcGVy
YXRpb24+KGZyb20pOwogICAgIApAQCAtNTUsNyArNTUsNyBAQCBSZWY8VHJhbnNmb3JtT3BlcmF0
aW9uPiBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbgogICAgICAgICByZXR1cm4gUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoZnJv
bU9wID8gZnJvbU9wLT5tX3ggOiBtX3gsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZnJvbU9wID8gZnJvbU9wLT5tX3kgOiBtX3ksIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbU9wID8gZnJvbU9wLT5t
X3ogOiBtX3osIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViQ29yZTo6YmxlbmQoZnJvbUFuZ2xlLCBtX2FuZ2xlLCBwcm9ncmVzcyksIHR5cGUoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3Jl
OjpibGVuZChmcm9tQW5nbGUsIG1fYW5nbGUsIGNvbnRleHQpLCB0eXBlKCkpOwogICAgIH0KIAog
ICAgIGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdG9PcCA9IHRoaXM7CkBAIC03NCw3
ICs3NCw3IEBAIFJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bjo6YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uCiAgICAgICAgICh0b09wID8gdG9PcC0+
bV9hbmdsZSA6IDApKTsKICAgICAKICAgICAvLyBCbGVuZCB0aGVtCi0gICAgdG9ULmJsZW5kKGZy
b21ULCBwcm9ncmVzcyk7CisgICAgdG9ULmJsZW5kKGZyb21ULCBjb250ZXh0LnByb2dyZXNzKTsK
ICAgICAKICAgICAvLyBFeHRyYWN0IHRoZSByZXN1bHQgYXMgYSBxdWF0ZXJuaW9uCiAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXg6OkRlY29tcG9zZWQ0VHlwZSBkZWNvbXA7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1JvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaAppbmRleCAxMjcxODc2NTY5MGYwMGVhYzk2N2Q5
NDc1NmRiZTNiZTQ3ZjU1ZGZmLi41ODI5YjJjZjhmNjdhNmE3MGQwYTM4MDVjYTY4ODZiMWMyNzM2
Zjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgKQEAgLTI5
LDYgKzI5LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQmxlbmRpbmdDb250
ZXh0OworCiBjbGFzcyBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24gZmluYWwgOiBwdWJsaWMgVHJh
bnNmb3JtT3BlcmF0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFJvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbj4gY3JlYXRlKGRvdWJsZSBhbmdsZSwgT3BlcmF0aW9uVHlwZSB0eXBlKQpAQCAt
NTMsNyArNTUsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBSZWY8VHJhbnNmb3JtT3BlcmF0
aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVz
cywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSkgZmluYWw7CisgICAgUmVmPFRyYW5zZm9y
bU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBC
bGVuZGluZ0NvbnRleHQmLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKSBmaW5hbDsKIAog
ICAgIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICFtX2FuZ2xlOyB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKaW5kZXggODNjZjNk
NDQwNGYyZWMzOGIwYzc5MGRiYTEzMWE3ZWQ1NWFiYWI2Mi4uMDgzZTJlMzAwOTg2OGYxY2E4M2Zm
NzA0NDc2YjI3MGMxNWExNzQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbi5jcHAKQEAgLTM1LDIzICszNSwyMyBAQCBib29sIFNjYWxlVHJhbnNmb3JtT3BlcmF0
aW9uOjpvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgb3RoZXIpIGNvbnN0CiAg
ICAgcmV0dXJuIG1feCA9PSBzLm1feCAmJiBtX3kgPT0gcy5tX3kgJiYgbV96ID09IHMubV96Owog
fQogCi1SZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Ymxl
bmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wg
YmxlbmRUb0lkZW50aXR5KQorUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxl
bmRpbmdDb250ZXh0JiBjb250ZXh0LCBib29sIGJsZW5kVG9JZGVudGl0eSkKIHsKICAgICBpZiAo
ZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgqdGhpcykpCiAgICAgICAgIHJldHVybiAqdGhpczsK
ICAgICAKICAgICBpZiAoYmxlbmRUb0lkZW50aXR5KQotICAgICAgICByZXR1cm4gU2NhbGVUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChtX3gsIDEuMCwgcHJvZ3Jlc3Mp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3Jl
OjpibGVuZChtX3ksIDEuMCwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChtX3osIDEuMCwgcHJvZ3Jlc3MpLCB0
eXBlKCkpOworICAgICAgICByZXR1cm4gU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShX
ZWJDb3JlOjpibGVuZChtX3gsIDEuMCwgY29udGV4dCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKG1feSwgMS4wLCBjb250ZXh0
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQobV96LCAxLjAsIGNvbnRleHQpLCB0eXBlKCkpOwogICAgIAogICAgIGNvbnN0IFNj
YWxlVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSBkb3duY2FzdDxTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbj4oZnJvbSk7CiAgICAgZG91YmxlIGZyb21YID0gZnJvbU9wID8gZnJvbU9wLT5tX3gg
OiAxLjA7CiAgICAgZG91YmxlIGZyb21ZID0gZnJvbU9wID8gZnJvbU9wLT5tX3kgOiAxLjA7CiAg
ICAgZG91YmxlIGZyb21aID0gZnJvbU9wID8gZnJvbU9wLT5tX3ogOiAxLjA7Ci0gICAgcmV0dXJu
IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbVgsIG1f
eCwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYkNvcmU6OmJsZW5kKGZyb21ZLCBtX3ksIHByb2dyZXNzKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tWiwgbV96LCBwcm9n
cmVzcyksIHR5cGUoKSk7CisgICAgcmV0dXJuIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVh
dGUoV2ViQ29yZTo6YmxlbmQoZnJvbVgsIG1feCwgY29udGV4dCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVksIG1feSwgY29u
dGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQoZnJvbVosIG1feiwgY29udGV4dCksIHR5cGUoKSk7CiB9CiAKIHZvaWQgU2NhbGVU
cmFuc2Zvcm1PcGVyYXRpb246OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NjYWxlVHJhbnNm
b3JtT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgKaW5kZXggZjhlMTU3Mzg3OGE4YWY5ZTdkMWY5
MzE5NzMyYjczNzY5NzJiYTY4NC4uN2I0N2E0YzUzY2M3ZTVlMGRjNTU2MjMwY2ZiYzBlZTc1M2Uy
ZTJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaApAQCAtMjks
NiArMjksOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBCbGVuZGluZ0NvbnRl
eHQ7CisKIGNsYXNzIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uIGZpbmFsIDogcHVibGljIFRyYW5z
Zm9ybU9wZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbj4gY3JlYXRlKGRvdWJsZSBzeCwgZG91YmxlIHN5LCBPcGVyYXRpb25UeXBlIHR5cGUp
CkBAIC01Miw3ICs1NCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb24mKSBjb25zdCBmaW5hbDsKIAotICAgIFJlZjxUcmFuc2Zvcm1PcGVy
YXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dy
ZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKSBmaW5hbDsKKyAgICBSZWY8VHJhbnNm
b3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGNvbnN0
IEJsZW5kaW5nQ29udGV4dCYsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpIGZpbmFsOwog
CiAgICAgYm9vbCBpc0lkZW50aXR5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV94ID09IDEgJiYg
IG1feSA9PSAxICYmICBtX3ogPT0gMTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3Jt
T3BlcmF0aW9uLmNwcAppbmRleCA4MDkwNzBhZGU2ODc2MWM4NDZhODA5OTM3ZTgzYWE0NjBiMDI5
N2FhLi4zOWQyZjZkMDI0YjI1MWUxNjcxM2ZlMzFhNzY0YWZmMGRlMGEyZTBmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFuc2Zv
cm1PcGVyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5jcHAKQEAgLTM1LDE4ICszNSwxOCBAQCBi
b29sIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3Bl
cmF0aW9uJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gbV9hbmdsZVggPT0gcy5tX2FuZ2xlWCAm
JiBtX2FuZ2xlWSA9PSBzLm1fYW5nbGVZOwogfQogCi1SZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBT
a2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZy
b20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkpCitSZWY8VHJhbnNmb3Jt
T3BlcmF0aW9uPiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb24qIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCwgYm9vbCBibGVu
ZFRvSWRlbnRpdHkpCiB7CiAgICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMp
KQogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgCiAgICAgaWYgKGJsZW5kVG9JZGVudGl0eSkK
LSAgICAgICAgcmV0dXJuIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpi
bGVuZChtX2FuZ2xlWCwgMC4wLCBwcm9ncmVzcyksIFdlYkNvcmU6OmJsZW5kKG1fYW5nbGVZLCAw
LjAsIHByb2dyZXNzKSwgdHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIFNrZXdUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChtX2FuZ2xlWCwgMC4wLCBjb250ZXh0KSwgV2Vi
Q29yZTo6YmxlbmQobV9hbmdsZVksIDAuMCwgY29udGV4dCksIHR5cGUoKSk7CiAgICAgCiAgICAg
Y29uc3QgU2tld1RyYW5zZm9ybU9wZXJhdGlvbiogZnJvbU9wID0gZG93bmNhc3Q8U2tld1RyYW5z
Zm9ybU9wZXJhdGlvbj4oZnJvbSk7CiAgICAgZG91YmxlIGZyb21BbmdsZVggPSBmcm9tT3AgPyBm
cm9tT3AtPm1fYW5nbGVYIDogMDsKICAgICBkb3VibGUgZnJvbUFuZ2xlWSA9IGZyb21PcCA/IGZy
b21PcC0+bV9hbmdsZVkgOiAwOwotICAgIHJldHVybiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbUFuZ2xlWCwgbV9hbmdsZVgsIHByb2dyZXNzKSwgV2Vi
Q29yZTo6YmxlbmQoZnJvbUFuZ2xlWSwgbV9hbmdsZVksIHByb2dyZXNzKSwgdHlwZSgpKTsKKyAg
ICByZXR1cm4gU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKGZy
b21BbmdsZVgsIG1fYW5nbGVYLCBjb250ZXh0KSwgV2ViQ29yZTo6YmxlbmQoZnJvbUFuZ2xlWSwg
bV9hbmdsZVksIGNvbnRleHQpLCB0eXBlKCkpOwogfQogCiB2b2lkIFNrZXdUcmFuc2Zvcm1PcGVy
YXRpb246OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5z
Zm9ybU9wZXJhdGlvbi5oCmluZGV4IDc5N2RjOTUwZDA1MTI5ODUwOGY4NzZmYTIyYTUwZGUwMTBl
MzE4MWIuLjE2MTAzNTQ1NWE2YTM2ZTExZWRkYWZlNWYyNjllNjQ4OTA1Y2UyODkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5z
Zm9ybU9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oCkBAIC0yOSw2ICsyOSw4IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorc3RydWN0IEJsZW5kaW5nQ29udGV4dDsKKwogY2xhc3MgU2tl
d1RyYW5zZm9ybU9wZXJhdGlvbiBmaW5hbCA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24gewog
cHVibGljOgogICAgIHN0YXRpYyBSZWY8U2tld1RyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKGRv
dWJsZSBhbmdsZVgsIGRvdWJsZSBhbmdsZVksIE9wZXJhdGlvblR5cGUgdHlwZSkKQEAgLTU2LDcg
KzU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFJl
ZjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJv
bSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKSBvdmVycmlk
ZTsKKyAgICBSZWY8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb24qIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYsIGJvb2wgYmxlbmRUb0lkZW50aXR5
ID0gZmFsc2UpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYpIGNv
bnN0IGZpbmFsOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9uLmgKaW5kZXggMDU3
NGE1NGY3MDU3NDkyMzgwN2ExOGQ2YTI4OWU3Mzc5NjU1ZDI0NC4uZGU0NWY3MmJhMGVhYWVlYWVi
NWU1YzgxYTUwMzgyNzg2MGI5NzkyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbi5o
CkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gQ1NTIFRyYW5z
Zm9ybXMgKG1heSBiZWNvbWUgcGFydCBvZiBDU1MzKQorc3RydWN0IEJsZW5kaW5nQ29udGV4dDsK
IAogY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8VHJhbnNmb3Jt
T3BlcmF0aW9uPiB7CiBwdWJsaWM6CkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiB0aGUgYm9yZGVyQm94U2l6ZSB3YXMgdXNlZCBpbiB0aGUgY29tcHV0YXRp
b24sIGZhbHNlIG90aGVyd2lzZS4KICAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoVHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBjb25zdCBGbG9hdFNpemUmIGJvcmRlckJveFNpemUpIGNvbnN0ID0gMDsKIAot
ICAgIHZpcnR1YWwgUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0g
ZmFsc2UpID0gMDsKKyAgICB2aXJ0dWFsIFJlZjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3QgQmxlbmRpbmdDb250ZXh0JiwgYm9v
bCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSkgPSAwOwogCiAgICAgT3BlcmF0aW9uVHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgYm9vbCBpc1NhbWVUeXBlKGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbiYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBvdGhlci50
eXBlKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbnMuY3BwCmluZGV4IGIxNDUy
ZmUyYjY2N2JkZWYzMWE4YmM5Y2UzMWY0ZTZkMmVjN2IzODEuLjRmY2NmMjQ5Mjc3MTQ0OWU3MDEy
NDUxNWZiYzM4YzFiZTg5Zjg1NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25z
LmNwcApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRy
YW5zZm9ybU9wZXJhdGlvbnMuaCIKIAorI2luY2x1ZGUgIkFuaW1hdGlvblV0aWxpdGllcy5oIgog
I2luY2x1ZGUgIklkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiTWF0cml4
M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CkBAIC03Myw3ICs3
NCw3IEBAIGJvb2wgVHJhbnNmb3JtT3BlcmF0aW9uczo6YWZmZWN0ZWRCeVRyYW5zZm9ybU9yaWdp
bigpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1UcmFuc2Zvcm1PcGVyYXRpb25zIFRy
YW5zZm9ybU9wZXJhdGlvbnM6OmJsZW5kQnlNYXRjaGluZ09wZXJhdGlvbnMoY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgZG91YmxlJiBwcm9ncmVzcykgY29uc3QKK1RyYW5z
Zm9ybU9wZXJhdGlvbnMgVHJhbnNmb3JtT3BlcmF0aW9uczo6YmxlbmRCeU1hdGNoaW5nT3BlcmF0
aW9ucyhjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyByZXN1bHQ7CiAK
QEAgLTgzLDEyICs4NCwxMiBAQCBUcmFuc2Zvcm1PcGVyYXRpb25zIFRyYW5zZm9ybU9wZXJhdGlv
bnM6OmJsZW5kQnlNYXRjaGluZ09wZXJhdGlvbnMoY29uc3QgVHJhbnNmbwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICAgUmVmUHRyPFRyYW5zZm9ybU9w
ZXJhdGlvbj4gZnJvbU9wZXJhdGlvbiA9IChpIDwgZnJvbVNpemUpID8gZnJvbS5vcGVyYXRpb25z
KClbaV0uZ2V0KCkgOiBudWxscHRyOwogICAgICAgICBSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9u
PiB0b09wZXJhdGlvbiA9IChpIDwgdG9TaXplKSA/IG9wZXJhdGlvbnMoKVtpXS5nZXQoKSA6IG51
bGxwdHI7Ci0gICAgICAgIFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kZWRPcGVyYXRp
b24gPSB0b09wZXJhdGlvbiA/IHRvT3BlcmF0aW9uLT5ibGVuZChmcm9tT3BlcmF0aW9uLmdldCgp
LCBwcm9ncmVzcykgOiAoZnJvbU9wZXJhdGlvbiA/IFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+
KGZyb21PcGVyYXRpb24tPmJsZW5kKG51bGxwdHIsIHByb2dyZXNzLCB0cnVlKSkgOiBudWxscHRy
KTsKKyAgICAgICAgUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmRlZE9wZXJhdGlvbiA9
IHRvT3BlcmF0aW9uID8gdG9PcGVyYXRpb24tPmJsZW5kKGZyb21PcGVyYXRpb24uZ2V0KCksIGNv
bnRleHQpIDogKGZyb21PcGVyYXRpb24gPyBSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPihmcm9t
T3BlcmF0aW9uLT5ibGVuZChudWxscHRyLCBjb250ZXh0LCB0cnVlKSkgOiBudWxscHRyKTsKICAg
ICAgICAgaWYgKGJsZW5kZWRPcGVyYXRpb24pCiAgICAgICAgICAgICByZXN1bHQub3BlcmF0aW9u
cygpLmFwcGVuZChibGVuZGVkT3BlcmF0aW9uKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICBhdXRvIGlkZW50aXR5T3BlcmF0aW9uID0gSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb246OmNy
ZWF0ZSgpOwotICAgICAgICAgICAgaWYgKHByb2dyZXNzID4gMC41KQorICAgICAgICAgICAgaWYg
KGNvbnRleHQucHJvZ3Jlc3MgPiAwLjUpCiAgICAgICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlv
bnMoKS5hcHBlbmQodG9PcGVyYXRpb24gPyB0b09wZXJhdGlvbiA6IFdURk1vdmUoaWRlbnRpdHlP
cGVyYXRpb24pKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXN1bHQub3Bl
cmF0aW9ucygpLmFwcGVuZChmcm9tT3BlcmF0aW9uID8gZnJvbU9wZXJhdGlvbiA6IFdURk1vdmUo
aWRlbnRpdHlPcGVyYXRpb24pKTsKQEAgLTk4LDcgKzk5LDcgQEAgVHJhbnNmb3JtT3BlcmF0aW9u
cyBUcmFuc2Zvcm1PcGVyYXRpb25zOjpibGVuZEJ5TWF0Y2hpbmdPcGVyYXRpb25zKGNvbnN0IFRy
YW5zZm8KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1UcmFuc2Zvcm1PcGVyYXRpb25zIFRyYW5z
Zm9ybU9wZXJhdGlvbnM6OmJsZW5kQnlVc2luZ01hdHJpeEludGVycG9sYXRpb24oY29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgZG91YmxlIHByb2dyZXNzLCBjb25zdCBMYXlvdXRTaXpl
JiBzaXplKSBjb25zdAorVHJhbnNmb3JtT3BlcmF0aW9ucyBUcmFuc2Zvcm1PcGVyYXRpb25zOjpi
bGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9uKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMm
IGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0U2l6ZSYg
c2l6ZSkgY29uc3QKIHsKICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIHJlc3VsdDsKIApAQCAtMTA4
LDcgKzEwOSw3IEBAIFRyYW5zZm9ybU9wZXJhdGlvbnMgVHJhbnNmb3JtT3BlcmF0aW9uczo6Ymxl
bmRCeVVzaW5nTWF0cml4SW50ZXJwb2xhdGlvbihjb25zdCBUCiAgICAgZnJvbS5hcHBseShzaXpl
LCBmcm9tVHJhbnNmb3JtKTsKICAgICBhcHBseShzaXplLCB0b1RyYW5zZm9ybSk7CiAKLSAgICB0
b1RyYW5zZm9ybS5ibGVuZChmcm9tVHJhbnNmb3JtLCBwcm9ncmVzcyk7CisgICAgdG9UcmFuc2Zv
cm0uYmxlbmQoZnJvbVRyYW5zZm9ybSwgY29udGV4dC5wcm9ncmVzcyk7CiAKICAgICAvLyBBcHBl
bmQgdGhlIHJlc3VsdAogICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKE1hdHJpeDNEVHJh
bnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodG9UcmFuc2Zvcm0pKTsKQEAgLTExNiwxNSArMTE3LDE1
IEBAIFRyYW5zZm9ybU9wZXJhdGlvbnMgVHJhbnNmb3JtT3BlcmF0aW9uczo6YmxlbmRCeVVzaW5n
TWF0cml4SW50ZXJwb2xhdGlvbihjb25zdCBUCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVHJh
bnNmb3JtT3BlcmF0aW9ucyBUcmFuc2Zvcm1PcGVyYXRpb25zOjpibGVuZChjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb25zJiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGNvbnN0IExheW91dFNpemUmIHNp
emUpIGNvbnN0CitUcmFuc2Zvcm1PcGVyYXRpb25zIFRyYW5zZm9ybU9wZXJhdGlvbnM6OmJsZW5k
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkgY29uc3QKIHsKICAgICBpZiAoZnJvbSA9
PSAqdGhpcykKICAgICAgICAgcmV0dXJuICp0aGlzOwogCiAgICAgaWYgKGZyb20uc2l6ZSgpICYm
IGZyb20ub3BlcmF0aW9uc01hdGNoKCp0aGlzKSkKLSAgICAgICAgcmV0dXJuIGJsZW5kQnlNYXRj
aGluZ09wZXJhdGlvbnMoZnJvbSwgcHJvZ3Jlc3MpOworICAgICAgICByZXR1cm4gYmxlbmRCeU1h
dGNoaW5nT3BlcmF0aW9ucyhmcm9tLCBjb250ZXh0KTsKIAotICAgIHJldHVybiBibGVuZEJ5VXNp
bmdNYXRyaXhJbnRlcnBvbGF0aW9uKGZyb20sIHByb2dyZXNzLCBzaXplKTsKKyAgICByZXR1cm4g
YmxlbmRCeVVzaW5nTWF0cml4SW50ZXJwb2xhdGlvbihmcm9tLCBjb250ZXh0LCBzaXplKTsKIH0K
IAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9ucyYgb3BzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbnMuaAppbmRleCBm
ODI1NmE3ZjRkNWFiN2JiMThlNmFmNDQ2MDMwMzc5MzY5ODIxZDFkLi5jZjU5YTE5ZTgyNjFhNDQ2
NzVmYjI3NWYyNTBiYTEyZWY4ZDYzY2U4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbnMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlv
bnMuaApAQCAtMzEsNiArMzEsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBC
bGVuZGluZ0NvbnRleHQ7CisKIGNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbnMgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtODMsOSArODUsOSBAQCBwdWJsaWM6CiAg
ICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdGlvbnMuc2l6ZSgpOyB9CiAg
ICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIGluZGV4IDwgbV9vcGVyYXRpb25zLnNpemUoKSA/IG1fb3BlcmF0aW9ucy5hdChpbmRleCku
Z2V0KCkgOiAwOyB9CiAKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kQnlNYXRjaGluZ09w
ZXJhdGlvbnMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgZG91YmxlJiBw
cm9ncmVzcykgY29uc3Q7Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZEJ5VXNpbmdNYXRy
aXhJbnRlcnBvbGF0aW9uKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGRvdWJsZSBw
cm9ncmVzcywgY29uc3QgTGF5b3V0U2l6ZSYpIGNvbnN0OwotICAgIFRyYW5zZm9ybU9wZXJhdGlv
bnMgYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgZG91YmxlIHByb2dyZXNz
LCBjb25zdCBMYXlvdXRTaXplJikgY29uc3Q7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVu
ZEJ5TWF0Y2hpbmdPcGVyYXRpb25zKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNv
bnN0IEJsZW5kaW5nQ29udGV4dCYpIGNvbnN0OworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxl
bmRCeVVzaW5nTWF0cml4SW50ZXJwb2xhdGlvbihjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBm
cm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmLCBjb25zdCBMYXlvdXRTaXplJikgY29uc3Q7Cisg
ICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBm
cm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmLCBjb25zdCBMYXlvdXRTaXplJikgY29uc3Q7CiAK
IHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+PiBtX29wZXJh
dGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5j
cHAKaW5kZXggOTY5NzNiZTM0MTJjZjcxMDg1MzBkNDRlMmUyOWJiNjFmZTFiZjA1Yi4uMzIzN2M0
MjMwYjYyZjkzMGEzZTBkZTQ0Y2E4ZDNmMDY0MmJkM2RhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcApAQCAtMjIsNiArMjIsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5o
IgogCisjaW5jbHVkZSAiQW5pbWF0aW9uVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252
ZXJzaW9uLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCkBAIC0zNSwyMCAr
MzYsMjAgQEAgYm9vbCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246Om9wZXJhdG9yPT0oY29u
c3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvdGhlcikgY28KICAgICByZXR1cm4gbV94ID09IHQubV94
ICYmIG1feSA9PSB0Lm1feSAmJiBtX3ogPT0gdC5tX3o7CiB9CiAKLVJlZjxUcmFuc2Zvcm1PcGVy
YXRpb24+IFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5KQor
UmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVu
ZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYg
Y29udGV4dCwgYm9vbCBibGVuZFRvSWRlbnRpdHkpCiB7CiAgICAgaWYgKGZyb20gJiYgIWZyb20t
PmlzU2FtZVR5cGUoKnRoaXMpKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAgICBMZW5ndGgg
emVyb0xlbmd0aCgwLCBMZW5ndGhUeXBlOjpGaXhlZCk7CiAgICAgaWYgKGJsZW5kVG9JZGVudGl0
eSkKLSAgICAgICAgcmV0dXJuIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKFdl
YkNvcmU6OmJsZW5kKG1feCwgemVyb0xlbmd0aCwgcHJvZ3Jlc3MpLCBXZWJDb3JlOjpibGVuZCht
X3ksIHplcm9MZW5ndGgsIHByb2dyZXNzKSwgV2ViQ29yZTo6YmxlbmQobV96LCB6ZXJvTGVuZ3Ro
LCBwcm9ncmVzcyksIHR5cGUoKSk7CisgICAgICAgIHJldHVybiBUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChtX3gsIHplcm9MZW5ndGgsIGNvbnRleHQp
LCBXZWJDb3JlOjpibGVuZChtX3ksIHplcm9MZW5ndGgsIGNvbnRleHQpLCBXZWJDb3JlOjpibGVu
ZChtX3osIHplcm9MZW5ndGgsIGNvbnRleHQpLCB0eXBlKCkpOwogCiAgICAgY29uc3QgVHJhbnNs
YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSBkb3duY2FzdDxUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb24+KGZyb20pOwogICAgIExlbmd0aCBmcm9tWCA9IGZyb21PcCA/IGZyb21PcC0+
bV94IDogemVyb0xlbmd0aDsKICAgICBMZW5ndGggZnJvbVkgPSBmcm9tT3AgPyBmcm9tT3AtPm1f
eSA6IHplcm9MZW5ndGg7CiAgICAgTGVuZ3RoIGZyb21aID0gZnJvbU9wID8gZnJvbU9wLT5tX3og
OiB6ZXJvTGVuZ3RoOwotICAgIHJldHVybiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNy
ZWF0ZShXZWJDb3JlOjpibGVuZChmcm9tWCwgeCgpLCBwcm9ncmVzcyksIFdlYkNvcmU6OmJsZW5k
KGZyb21ZLCB5KCksIHByb2dyZXNzKSwgV2ViQ29yZTo6YmxlbmQoZnJvbVosIHooKSwgcHJvZ3Jl
c3MpLCB0eXBlKCkpOworICAgIHJldHVybiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNy
ZWF0ZShXZWJDb3JlOjpibGVuZChmcm9tWCwgeCgpLCBjb250ZXh0KSwgV2ViQ29yZTo6YmxlbmQo
ZnJvbVksIHkoKSwgY29udGV4dCksIFdlYkNvcmU6OmJsZW5kKGZyb21aLCB6KCksIGNvbnRleHQp
LCB0eXBlKCkpOwogfQogCiB2b2lkIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6ZHVtcChU
ZXh0U3RyZWFtJiB0cykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbi5oCmluZGV4IGVkN2M4ZmRkNjk3MDcxYTk5NTM3NjZiZWRkYjJiNTU1YTdhYWQ0
ODAuLjAwMGY0Yzc5ZWZlNGQ4ZWQzNGEyMDU5M2YzY2VmYzdiMjdmYjhlODYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaApAQCAtMzEsNiArMzEsOCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBCbGVuZGluZ0NvbnRleHQ7CisKIGNs
YXNzIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiBmaW5hbCA6IHB1YmxpYyBUcmFuc2Zvcm1P
cGVyYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8VHJhbnNsYXRlVHJhbnNmb3JtT3Bl
cmF0aW9uPiBjcmVhdGUoY29uc3QgTGVuZ3RoJiB0eCwgY29uc3QgTGVuZ3RoJiB0eSwgT3BlcmF0
aW9uVHlwZSB0eXBlKQpAQCAtNjYsNyArNjgsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJikgY29uc3QgZmluYWw7CiAKLSAgICBSZWY8
VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20s
IGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSkgZmluYWw7Cisg
ICAgUmVmPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9u
KiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZh
bHNlKSBmaW5hbDsKIAogICAgIGJvb2wgaXNSZXByZXNlbnRhYmxlSW4yRCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fei5pc1plcm8oKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFwZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL0Jhc2ljU2hhcGVzLmNwcAppbmRleCA4ZGRjMTcyOWFjOGZlNWU2YzVlNmNhZTUyNTNl
ZGI2MjM0MzEzN2ZhLi45N2U1NzY2NjE3MTAyYTgyOTRhY2NkZTg1NTNiMDU1Y2FlZDg0ZDM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFwZXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5jcHAKQEAg
LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJCYXNpY1NoYXBl
cy5oIgogCisjaW5jbHVkZSAiQW5pbWF0aW9uVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiQmFzaWNT
aGFwZUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKICNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKQEAgLTE4OSwxNSArMTkwLDE1IEBAIGJvb2wgQmFzaWNTaGFwZUNpcmNs
ZTo6Y2FuQmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuIHJh
ZGl1cygpLmNhbkJsZW5kKGRvd25jYXN0PEJhc2ljU2hhcGVDaXJjbGU+KG90aGVyKS5yYWRpdXMo
KSk7CiB9CiAKLVJlZjxCYXNpY1NoYXBlPiBCYXNpY1NoYXBlQ2lyY2xlOjpibGVuZChjb25zdCBC
YXNpY1NoYXBlJiBvdGhlciwgZG91YmxlIHByb2dyZXNzKSBjb25zdAorUmVmPEJhc2ljU2hhcGU+
IEJhc2ljU2hhcGVDaXJjbGU6OmJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIG90aGVyLCBjb25zdCBC
bGVuZGluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHR5cGUoKSA9PSBv
dGhlci50eXBlKCkpOwogICAgIGF1dG8mIG90aGVyQ2lyY2xlID0gZG93bmNhc3Q8QmFzaWNTaGFw
ZUNpcmNsZT4ob3RoZXIpOwogICAgIGF1dG8gcmVzdWx0ID0gIEJhc2ljU2hhcGVDaXJjbGU6OmNy
ZWF0ZSgpOwogCi0gICAgcmVzdWx0LT5zZXRDZW50ZXJYKG1fY2VudGVyWC5ibGVuZChvdGhlckNp
cmNsZS5jZW50ZXJYKCksIHByb2dyZXNzKSk7Ci0gICAgcmVzdWx0LT5zZXRDZW50ZXJZKG1fY2Vu
dGVyWS5ibGVuZChvdGhlckNpcmNsZS5jZW50ZXJZKCksIHByb2dyZXNzKSk7Ci0gICAgcmVzdWx0
LT5zZXRSYWRpdXMobV9yYWRpdXMuYmxlbmQob3RoZXJDaXJjbGUucmFkaXVzKCksIHByb2dyZXNz
KSk7CisgICAgcmVzdWx0LT5zZXRDZW50ZXJYKG1fY2VudGVyWC5ibGVuZChvdGhlckNpcmNsZS5j
ZW50ZXJYKCksIGNvbnRleHQpKTsKKyAgICByZXN1bHQtPnNldENlbnRlclkobV9jZW50ZXJZLmJs
ZW5kKG90aGVyQ2lyY2xlLmNlbnRlclkoKSwgY29udGV4dCkpOworICAgIHJlc3VsdC0+c2V0UmFk
aXVzKG1fcmFkaXVzLmJsZW5kKG90aGVyQ2lyY2xlLnJhZGl1cygpLCBjb250ZXh0KSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjUyLDcgKzI1Myw3IEBAIGJvb2wgQmFzaWNTaGFwZUVs
bGlwc2U6OmNhbkJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIG90aGVyKSBjb25zdAogICAgIHJldHVy
biByYWRpdXNYKCkuY2FuQmxlbmQob3RoZXJFbGxpcHNlLnJhZGl1c1goKSkgJiYgcmFkaXVzWSgp
LmNhbkJsZW5kKG90aGVyRWxsaXBzZS5yYWRpdXNZKCkpOwogfQogCi1SZWY8QmFzaWNTaGFwZT4g
QmFzaWNTaGFwZUVsbGlwc2U6OmJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIG90aGVyLCBkb3VibGUg
cHJvZ3Jlc3MpIGNvbnN0CitSZWY8QmFzaWNTaGFwZT4gQmFzaWNTaGFwZUVsbGlwc2U6OmJsZW5k
KGNvbnN0IEJhc2ljU2hhcGUmIG90aGVyLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKHR5cGUoKSA9PSBvdGhlci50eXBlKCkpOwogICAgIGF1dG8m
IG90aGVyRWxsaXBzZSA9IGRvd25jYXN0PEJhc2ljU2hhcGVFbGxpcHNlPihvdGhlcik7CkBAIC0y
NjcsMTAgKzI2OCwxMCBAQCBSZWY8QmFzaWNTaGFwZT4gQmFzaWNTaGFwZUVsbGlwc2U6OmJsZW5k
KGNvbnN0IEJhc2ljU2hhcGUmIG90aGVyLCBkb3VibGUgcHJvZ3JlcwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIAotICAgIHJlc3VsdC0+c2V0Q2VudGVyWChtX2NlbnRlclguYmxlbmQo
b3RoZXJFbGxpcHNlLmNlbnRlclgoKSwgcHJvZ3Jlc3MpKTsKLSAgICByZXN1bHQtPnNldENlbnRl
clkobV9jZW50ZXJZLmJsZW5kKG90aGVyRWxsaXBzZS5jZW50ZXJZKCksIHByb2dyZXNzKSk7Ci0g
ICAgcmVzdWx0LT5zZXRSYWRpdXNYKG1fcmFkaXVzWC5ibGVuZChvdGhlckVsbGlwc2UucmFkaXVz
WCgpLCBwcm9ncmVzcykpOwotICAgIHJlc3VsdC0+c2V0UmFkaXVzWShtX3JhZGl1c1kuYmxlbmQo
b3RoZXJFbGxpcHNlLnJhZGl1c1koKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXN1bHQtPnNldENlbnRl
clgobV9jZW50ZXJYLmJsZW5kKG90aGVyRWxsaXBzZS5jZW50ZXJYKCksIGNvbnRleHQpKTsKKyAg
ICByZXN1bHQtPnNldENlbnRlclkobV9jZW50ZXJZLmJsZW5kKG90aGVyRWxsaXBzZS5jZW50ZXJZ
KCksIGNvbnRleHQpKTsKKyAgICByZXN1bHQtPnNldFJhZGl1c1gobV9yYWRpdXNYLmJsZW5kKG90
aGVyRWxsaXBzZS5yYWRpdXNYKCksIGNvbnRleHQpKTsKKyAgICByZXN1bHQtPnNldFJhZGl1c1ko
bV9yYWRpdXNZLmJsZW5kKG90aGVyRWxsaXBzZS5yYWRpdXNZKCksIGNvbnRleHQpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zMTUsNyArMzE2LDcgQEAgYm9vbCBCYXNpY1NoYXBlUG9s
eWdvbjo6Y2FuQmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJu
IHZhbHVlcygpLnNpemUoKSA9PSBvdGhlclBvbHlnb24udmFsdWVzKCkuc2l6ZSgpICYmIHdpbmRS
dWxlKCkgPT0gb3RoZXJQb2x5Z29uLndpbmRSdWxlKCk7CiB9CiAKLVJlZjxCYXNpY1NoYXBlPiBC
YXNpY1NoYXBlUG9seWdvbjo6YmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgb3RoZXIsIGRvdWJsZSBw
cm9ncmVzcykgY29uc3QKK1JlZjxCYXNpY1NoYXBlPiBCYXNpY1NoYXBlUG9seWdvbjo6YmxlbmQo
Y29uc3QgQmFzaWNTaGFwZSYgb3RoZXIsIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKIHsKICAgICBBU1NFUlQodHlwZSgpID09IG90aGVyLnR5cGUoKSk7CiAKQEAgLTMzMiw4
ICszMzMsOCBAQCBSZWY8QmFzaWNTaGFwZT4gQmFzaWNTaGFwZVBvbHlnb246OmJsZW5kKGNvbnN0
IEJhc2ljU2hhcGUmIG90aGVyLCBkb3VibGUgcHJvZ3JlcwogCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsZW5ndGg7IGkgPSBpICsgMikgewogICAgICAgICByZXN1bHQtPmFwcGVuZFBvaW50
KAotICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQob3RoZXJQb2x5Z29uLnZhbHVlcygpLmF0KGkp
LCBtX3ZhbHVlcy5hdChpKSwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQo
b3RoZXJQb2x5Z29uLnZhbHVlcygpLmF0KGkgKyAxKSwgbV92YWx1ZXMuYXQoaSArIDEpLCBwcm9n
cmVzcykpOworICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQob3RoZXJQb2x5Z29uLnZhbHVlcygp
LmF0KGkpLCBtX3ZhbHVlcy5hdChpKSwgY29udGV4dCksCisgICAgICAgICAgICBXZWJDb3JlOjpi
bGVuZChvdGhlclBvbHlnb24udmFsdWVzKCkuYXQoaSArIDEpLCBtX3ZhbHVlcy5hdChpICsgMSks
IGNvbnRleHQpKTsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzczLDE0ICszNzQs
MTQgQEAgYm9vbCBCYXNpY1NoYXBlUGF0aDo6Y2FuQmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgb3Ro
ZXIpIGNvbnN0CiAgICAgcmV0dXJuIHdpbmRSdWxlKCkgPT0gb3RoZXJQYXRoLndpbmRSdWxlKCkg
JiYgY2FuQmxlbmRTVkdQYXRoQnl0ZVN0cmVhbXMoKm1fYnl0ZVN0cmVhbSwgKm90aGVyUGF0aC5w
YXRoRGF0YSgpKTsKIH0KIAotUmVmPEJhc2ljU2hhcGU+IEJhc2ljU2hhcGVQYXRoOjpibGVuZChj
b25zdCBCYXNpY1NoYXBlJiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0CitSZWY8QmFzaWNT
aGFwZT4gQmFzaWNTaGFwZVBhdGg6OmJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIGZyb20sIGNvbnN0
IEJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBBU1NFUlQodHlwZSgpID09
IGZyb20udHlwZSgpKTsKIAogICAgIGF1dG8mIGZyb21QYXRoID0gZG93bmNhc3Q8QmFzaWNTaGFw
ZVBhdGg+KGZyb20pOwogCiAgICAgYXV0byByZXN1bHRpbmdQYXRoQnl0ZXMgPSBtYWtlVW5pcXVl
PFNWR1BhdGhCeXRlU3RyZWFtPigpOwotICAgIGJ1aWxkQW5pbWF0ZWRTVkdQYXRoQnl0ZVN0cmVh
bSgqZnJvbVBhdGgubV9ieXRlU3RyZWFtLCAqbV9ieXRlU3RyZWFtLCAqcmVzdWx0aW5nUGF0aEJ5
dGVzLCBwcm9ncmVzcyk7CisgICAgYnVpbGRBbmltYXRlZFNWR1BhdGhCeXRlU3RyZWFtKCpmcm9t
UGF0aC5tX2J5dGVTdHJlYW0sICptX2J5dGVTdHJlYW0sICpyZXN1bHRpbmdQYXRoQnl0ZXMsIGNv
bnRleHQucHJvZ3Jlc3MpOwogICAgIGF1dG8gcmVzdWx0ID0gQmFzaWNTaGFwZVBhdGg6OmNyZWF0
ZShXVEZNb3ZlKHJlc3VsdGluZ1BhdGhCeXRlcykpOwogICAgIHJlc3VsdC0+c2V0V2luZFJ1bGUo
d2luZFJ1bGUoKSk7CiAgICAgcmVzdWx0LT5zZXRab29tKG1fem9vbSk7CkBAIC00MzAsMjEgKzQz
MSwyMSBAQCBib29sIEJhc2ljU2hhcGVJbnNldDo6Y2FuQmxlbmQoY29uc3QgQmFzaWNTaGFwZSYg
b3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuIHR5cGUoKSA9PSBvdGhlci50eXBlKCk7CiB9CiAKLVJl
ZjxCYXNpY1NoYXBlPiBCYXNpY1NoYXBlSW5zZXQ6OmJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIGZy
b20sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QKK1JlZjxCYXNpY1NoYXBlPiBCYXNpY1NoYXBlSW5z
ZXQ6OmJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKIHsKICAgICBBU1NFUlQodHlwZSgpID09IGZyb20udHlwZSgpKTsKIAog
ICAgIGF1dG8mIGZyb21JbnNldCA9IGRvd25jYXN0PEJhc2ljU2hhcGVJbnNldD4oZnJvbSk7CiAg
ICAgYXV0byByZXN1bHQgPSAgQmFzaWNTaGFwZUluc2V0OjpjcmVhdGUoKTsKLSAgICByZXN1bHQt
PnNldFRvcChXZWJDb3JlOjpibGVuZChmcm9tSW5zZXQudG9wKCksIHRvcCgpLCBwcm9ncmVzcykp
OwotICAgIHJlc3VsdC0+c2V0UmlnaHQoV2ViQ29yZTo6YmxlbmQoZnJvbUluc2V0LnJpZ2h0KCks
IHJpZ2h0KCksIHByb2dyZXNzKSk7Ci0gICAgcmVzdWx0LT5zZXRCb3R0b20oV2ViQ29yZTo6Ymxl
bmQoZnJvbUluc2V0LmJvdHRvbSgpLCBib3R0b20oKSwgcHJvZ3Jlc3MpKTsKLSAgICByZXN1bHQt
PnNldExlZnQoV2ViQ29yZTo6YmxlbmQoZnJvbUluc2V0LmxlZnQoKSwgbGVmdCgpLCBwcm9ncmVz
cykpOwotCi0gICAgcmVzdWx0LT5zZXRUb3BMZWZ0UmFkaXVzKFdlYkNvcmU6OmJsZW5kKGZyb21J
bnNldC50b3BMZWZ0UmFkaXVzKCksIHRvcExlZnRSYWRpdXMoKSwgcHJvZ3Jlc3MpKTsKLSAgICBy
ZXN1bHQtPnNldFRvcFJpZ2h0UmFkaXVzKFdlYkNvcmU6OmJsZW5kKGZyb21JbnNldC50b3BSaWdo
dFJhZGl1cygpLCB0b3BSaWdodFJhZGl1cygpLCBwcm9ncmVzcykpOwotICAgIHJlc3VsdC0+c2V0
Qm90dG9tUmlnaHRSYWRpdXMoV2ViQ29yZTo6YmxlbmQoZnJvbUluc2V0LmJvdHRvbVJpZ2h0UmFk
aXVzKCksIGJvdHRvbVJpZ2h0UmFkaXVzKCksIHByb2dyZXNzKSk7Ci0gICAgcmVzdWx0LT5zZXRC
b3R0b21MZWZ0UmFkaXVzKFdlYkNvcmU6OmJsZW5kKGZyb21JbnNldC5ib3R0b21MZWZ0UmFkaXVz
KCksIGJvdHRvbUxlZnRSYWRpdXMoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXN1bHQtPnNldFRvcChX
ZWJDb3JlOjpibGVuZChmcm9tSW5zZXQudG9wKCksIHRvcCgpLCBjb250ZXh0KSk7CisgICAgcmVz
dWx0LT5zZXRSaWdodChXZWJDb3JlOjpibGVuZChmcm9tSW5zZXQucmlnaHQoKSwgcmlnaHQoKSwg
Y29udGV4dCkpOworICAgIHJlc3VsdC0+c2V0Qm90dG9tKFdlYkNvcmU6OmJsZW5kKGZyb21JbnNl
dC5ib3R0b20oKSwgYm90dG9tKCksIGNvbnRleHQpKTsKKyAgICByZXN1bHQtPnNldExlZnQoV2Vi
Q29yZTo6YmxlbmQoZnJvbUluc2V0LmxlZnQoKSwgbGVmdCgpLCBjb250ZXh0KSk7CisKKyAgICBy
ZXN1bHQtPnNldFRvcExlZnRSYWRpdXMoV2ViQ29yZTo6YmxlbmQoZnJvbUluc2V0LnRvcExlZnRS
YWRpdXMoKSwgdG9wTGVmdFJhZGl1cygpLCBjb250ZXh0KSk7CisgICAgcmVzdWx0LT5zZXRUb3BS
aWdodFJhZGl1cyhXZWJDb3JlOjpibGVuZChmcm9tSW5zZXQudG9wUmlnaHRSYWRpdXMoKSwgdG9w
UmlnaHRSYWRpdXMoKSwgY29udGV4dCkpOworICAgIHJlc3VsdC0+c2V0Qm90dG9tUmlnaHRSYWRp
dXMoV2ViQ29yZTo6YmxlbmQoZnJvbUluc2V0LmJvdHRvbVJpZ2h0UmFkaXVzKCksIGJvdHRvbVJp
Z2h0UmFkaXVzKCksIGNvbnRleHQpKTsKKyAgICByZXN1bHQtPnNldEJvdHRvbUxlZnRSYWRpdXMo
V2ViQ29yZTo6YmxlbmQoZnJvbUluc2V0LmJvdHRvbUxlZnRSYWRpdXMoKSwgYm90dG9tTGVmdFJh
ZGl1cygpLCBjb250ZXh0KSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0Jhc2ljU2hhcGVzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFwZXMuaAppbmRleCA4NTUwY2Y5MjBiZWJiZTQ1
ZWI3NDY1ZDhjMjg1YmFmODg0NTZmYjg4Li45YmYwMzczNDc2YjUzZTVjN2E0YTliYzYyMzllNDVl
YzRhZDUzNGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQmFz
aWNTaGFwZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFw
ZXMuaApAQCAtNDMsNiArNDMsNyBAQCBjbGFzcyBUZXh0U3RyZWFtOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK3N0cnVjdCBCbGVuZGluZ0NvbnRleHQ7CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFz
cyBQYXRoOwogY2xhc3MgUmVuZGVyQm94OwpAQCAtNjYsNyArNjcsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBXaW5kUnVsZSB3aW5kUnVsZSgpIGNvbnN0IHsgcmV0dXJuIFdpbmRSdWxlOjpOb25a
ZXJvOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuQmxlbmQoY29uc3QgQmFzaWNTaGFwZSYpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIFJlZjxCYXNpY1NoYXBlPiBibGVuZChjb25zdCBCYXNpY1No
YXBlJiBmcm9tLCBkb3VibGUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZjxCYXNpY1NoYXBl
PiBibGVuZChjb25zdCBCYXNpY1NoYXBlJiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmKSBj
b25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCYXNpY1NoYXBl
JikgY29uc3QgPSAwOwogICAgIApAQCAtOTYsOSArOTcsOSBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
TGVuZ3RoJiBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQogICAgIGNvbnN0IExl
bmd0aCYgY29tcHV0ZWRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2NvbXB1dGVkTGVuZ3RoOyB9
CiAKLSAgICBCYXNpY1NoYXBlQ2VudGVyQ29vcmRpbmF0ZSBibGVuZChjb25zdCBCYXNpY1NoYXBl
Q2VudGVyQ29vcmRpbmF0ZSYgZnJvbSwgZG91YmxlIHByb2dyZXNzKSBjb25zdAorICAgIEJhc2lj
U2hhcGVDZW50ZXJDb29yZGluYXRlIGJsZW5kKGNvbnN0IEJhc2ljU2hhcGVDZW50ZXJDb29yZGlu
YXRlJiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgewot
ICAgICAgICByZXR1cm4gQmFzaWNTaGFwZUNlbnRlckNvb3JkaW5hdGUoVG9wTGVmdCwgV2ViQ29y
ZTo6YmxlbmQoZnJvbS5tX2NvbXB1dGVkTGVuZ3RoLCBtX2NvbXB1dGVkTGVuZ3RoLCBwcm9ncmVz
cykpOworICAgICAgICByZXR1cm4gQmFzaWNTaGFwZUNlbnRlckNvb3JkaW5hdGUoVG9wTGVmdCwg
V2ViQ29yZTo6YmxlbmQoZnJvbS5tX2NvbXB1dGVkTGVuZ3RoLCBtX2NvbXB1dGVkTGVuZ3RoLCBj
b250ZXh0KSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCYXNpY1No
YXBlQ2VudGVyQ29vcmRpbmF0ZSYgb3RoZXIpIGNvbnN0CkBAIC0xNDQsMTIgKzE0NSwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX3R5cGUgPT0gVmFsdWUgJiYgb3RoZXIudHlwZSgpID09
IFZhbHVlOwogICAgIH0KIAotICAgIEJhc2ljU2hhcGVSYWRpdXMgYmxlbmQoY29uc3QgQmFzaWNT
aGFwZVJhZGl1cyYgZnJvbSwgZG91YmxlIHByb2dyZXNzKSBjb25zdAorICAgIEJhc2ljU2hhcGVS
YWRpdXMgYmxlbmQoY29uc3QgQmFzaWNTaGFwZVJhZGl1cyYgZnJvbSwgY29uc3QgQmxlbmRpbmdD
b250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fdHlwZSAhPSBWYWx1
ZSB8fCBmcm9tLnR5cGUoKSAhPSBWYWx1ZSkKICAgICAgICAgICAgIHJldHVybiBCYXNpY1NoYXBl
UmFkaXVzKGZyb20pOwogCi0gICAgICAgIHJldHVybiBCYXNpY1NoYXBlUmFkaXVzKFdlYkNvcmU6
OmJsZW5kKGZyb20udmFsdWUoKSwgdmFsdWUoKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgcmV0dXJu
IEJhc2ljU2hhcGVSYWRpdXMoV2ViQ29yZTo6YmxlbmQoZnJvbS52YWx1ZSgpLCB2YWx1ZSgpLCBj
b250ZXh0KSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCYXNpY1No
YXBlUmFkaXVzJiBvdGhlcikgY29uc3QKQEAgLTE4Myw3ICsxODQsNyBAQCBwcml2YXRlOgogICAg
IGNvbnN0IFBhdGgmIHBhdGgoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICBib29s
IGNhbkJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmKSBjb25zdCBvdmVycmlkZTsKLSAgICBSZWY8QmFz
aWNTaGFwZT4gYmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgZnJvbSwgZG91YmxlKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBSZWY8QmFzaWNTaGFwZT4gYmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgZnJvbSwg
Y29uc3QgQmxlbmRpbmdDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgQmFzaWNTaGFwZSYpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0yMTcsNyArMjE4
LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBQYXRoJiBwYXRoKGNvbnN0IEZsb2F0UmVjdCYpIG92
ZXJyaWRlOwogCiAgICAgYm9vbCBjYW5CbGVuZChjb25zdCBCYXNpY1NoYXBlJikgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgUmVmPEJhc2ljU2hhcGU+IGJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIGZyb20s
IGRvdWJsZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPEJhc2ljU2hhcGU+IGJsZW5kKGNvbnN0
IEJhc2ljU2hhcGUmIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJhc2ljU2hhcGUmKSBjb25zdCBvdmVycmlk
ZTsKIApAQCAtMjUwLDcgKzI1MSw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgUGF0aCYgcGF0aChj
b25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgY2FuQmxlbmQoY29uc3QgQmFz
aWNTaGFwZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIFJlZjxCYXNpY1NoYXBlPiBibGVuZChjb25z
dCBCYXNpY1NoYXBlJiBmcm9tLCBkb3VibGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxCYXNp
Y1NoYXBlPiBibGVuZChjb25zdCBCYXNpY1NoYXBlJiBmcm9tLCBjb25zdCBCbGVuZGluZ0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCYXNpY1No
YXBlJikgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTI4Miw3ICsyODMsNyBAQCBwcml2YXRlOgogICAg
IGNvbnN0IFBhdGgmIHBhdGgoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICBib29s
IGNhbkJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmKSBjb25zdCBvdmVycmlkZTsKLSAgICBSZWY8QmFz
aWNTaGFwZT4gYmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgZnJvbSwgZG91YmxlKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBSZWY8QmFzaWNTaGFwZT4gYmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgZnJvbSwg
Y29uc3QgQmxlbmRpbmdDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgQmFzaWNTaGFwZSYpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0zMjUsNyArMzI2
LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBQYXRoJiBwYXRoKGNvbnN0IEZsb2F0UmVjdCYpIG92
ZXJyaWRlOwogCiAgICAgYm9vbCBjYW5CbGVuZChjb25zdCBCYXNpY1NoYXBlJikgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgUmVmPEJhc2ljU2hhcGU+IGJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIGZyb20s
IGRvdWJsZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPEJhc2ljU2hhcGU+IGJsZW5kKGNvbnN0
IEJhc2ljU2hhcGUmIGZyb20sIGNvbnN0IEJsZW5kaW5nQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJhc2ljU2hhcGUmKSBjb25zdCBvdmVycmlk
ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVhYmxlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlYWJsZS5jcHAKaW5kZXggOTZkNTVhODJlOTY5MDQ0ZmJl
YzAzNjk1OGRkNjBiMWRlZWRjNzE1ZS4uNzY1M2MxNjlhOGY4NGM1YWYwNTJiYWYxMjVmODBjZDA3
Zjg5ZDdiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVhYmxlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZWFibGUuY3BwCkBAIC0yMzQsNyArMjM0LDcg
QEAgc3RhdGljIEtleWZyYW1lRWZmZWN0KiBrZXlmcmFtZUVmZmVjdEZvckVsZW1lbnRBbmRQcm9w
ZXJ0eShjb25zdCBTdHlsZWFibGUmIHN0eWwKIHN0YXRpYyBib29sIHByb3BlcnR5SW5TdHlsZU1h
dGNoZXNWYWx1ZUZvclRyYW5zaXRpb25Jbk1hcChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIFByb3BlcnR5VG9UcmFuc2l0aW9uTWFwJiB0cmFuc2l0aW9u
cykKIHsKICAgICBpZiAoYXV0byogdHJhbnNpdGlvbiA9IHRyYW5zaXRpb25zLmdldChwcm9wZXJ0
eSkpIHsKLSAgICAgICAgaWYgKENTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwo
cHJvcGVydHksICZzdHlsZSwgJnRyYW5zaXRpb24tPnRhcmdldFN0eWxlKCkpKQorICAgICAgICBp
ZiAoQ1NTUHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChwcm9wZXJ0eSwgc3R5bGUs
IHRyYW5zaXRpb24tPnRhcmdldFN0eWxlKCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTM1Niw4ICszNTYsOCBAQCBzdGF0aWMgdm9pZCB1
cGRhdGVDU1NUcmFuc2l0aW9uc0ZvclN0eWxlYWJsZUFuZFByb3BlcnR5KGNvbnN0IFN0eWxlYWJs
ZSYgc3R5bGVhYgogICAgIH0oKTsKIAogICAgIGlmICghc3R5bGVhYmxlLmhhc1J1bm5pbmdUcmFu
c2l0aW9uRm9yUHJvcGVydHkocHJvcGVydHkpCi0gICAgICAgICYmICFDU1NQcm9wZXJ0eUFuaW1h
dGlvbjo6cHJvcGVydGllc0VxdWFsKHByb3BlcnR5LCAmYmVmb3JlQ2hhbmdlU3R5bGUsICZhZnRl
ckNoYW5nZVN0eWxlKQotICAgICAgICAmJiBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVy
dHlCZUludGVycG9sYXRlZChwcm9wZXJ0eSwgJmJlZm9yZUNoYW5nZVN0eWxlLCAmYWZ0ZXJDaGFu
Z2VTdHlsZSkKKyAgICAgICAgJiYgIUNTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1
YWwocHJvcGVydHksIGJlZm9yZUNoYW5nZVN0eWxlLCBhZnRlckNoYW5nZVN0eWxlKQorICAgICAg
ICAmJiBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChwcm9w
ZXJ0eSwgYmVmb3JlQ2hhbmdlU3R5bGUsIGFmdGVyQ2hhbmdlU3R5bGUpCiAgICAgICAgICYmICFw
cm9wZXJ0eUluU3R5bGVNYXRjaGVzVmFsdWVGb3JUcmFuc2l0aW9uSW5NYXAocHJvcGVydHksIGFm
dGVyQ2hhbmdlU3R5bGUsIHN0eWxlYWJsZS5lbnN1cmVDb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJv
cGVydHkoKSkKICAgICAgICAgJiYgbWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uICYmIHRyYW5zaXRp
b25Db21iaW5lZER1cmF0aW9uKG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbikgPiAwKSB7CiAgICAg
ICAgIC8vIDEuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlOgpAQCAtNDAzLDE1ICs0
MDMsMTUgQEAgc3RhdGljIHZvaWQgdXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JTdHlsZWFibGVBbmRQ
cm9wZXJ0eShjb25zdCBTdHlsZWFibGUmIHN0eWxlYWIKICAgICAgICAgYXV0byYgcHJldmlvdXNs
eVJ1bm5pbmdUcmFuc2l0aW9uQ3VycmVudFN0eWxlID0gcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0
aW9uLT5jdXJyZW50U3R5bGUoKTsKICAgICAgICAgLy8gNC4gSWYgdGhlIGVsZW1lbnQgaGFzIGEg
cnVubmluZyB0cmFuc2l0aW9uIGZvciB0aGUgcHJvcGVydHksIHRoZXJlIGlzIGEgbWF0Y2hpbmcg
dHJhbnNpdGlvbi1wcm9wZXJ0eSB2YWx1ZSwgYW5kIHRoZSBlbmQgdmFsdWUgb2YgdGhlIHJ1bm5p
bmcKICAgICAgICAgLy8gICAgdHJhbnNpdGlvbiBpcyBub3QgZXF1YWwgdG8gdGhlIHZhbHVlIG9m
IHRoZSBwcm9wZXJ0eSBpbiB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxlLCB0aGVuOgotICAgICAgICBp
ZiAoQ1NTUHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChwcm9wZXJ0eSwgJnByZXZp
b3VzbHlSdW5uaW5nVHJhbnNpdGlvbkN1cnJlbnRTdHlsZSwgJmFmdGVyQ2hhbmdlU3R5bGUpIHx8
ICFDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChwcm9wZXJ0
eSwgJmN1cnJlbnRTdHlsZSwgJmFmdGVyQ2hhbmdlU3R5bGUpKSB7CisgICAgICAgIGlmIChDU1NQ
cm9wZXJ0eUFuaW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKHByb3BlcnR5LCBwcmV2aW91c2x5UnVu
bmluZ1RyYW5zaXRpb25DdXJyZW50U3R5bGUsIGFmdGVyQ2hhbmdlU3R5bGUpIHx8ICFDU1NQcm9w
ZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChwcm9wZXJ0eSwgY3VycmVu
dFN0eWxlLCBhZnRlckNoYW5nZVN0eWxlKSkgewogICAgICAgICAgICAgLy8gMS4gSWYgdGhlIGN1
cnJlbnQgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBydW5uaW5nIHRyYW5zaXRpb24gaXMg
ZXF1YWwgdG8gdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgYWZ0ZXItY2hhbmdlIHN0
eWxlLAogICAgICAgICAgICAgLy8gICAgb3IgaWYgdGhlc2UgdHdvIHZhbHVlcyBjYW5ub3QgYmUg
aW50ZXJwb2xhdGVkLCB0aGVuIGltcGxlbWVudGF0aW9ucyBtdXN0IGNhbmNlbCB0aGUgcnVubmlu
ZyB0cmFuc2l0aW9uLgogICAgICAgICAgICAgcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uLT5j
YW5jZWxGcm9tU3R5bGUoKTsKLSAgICAgICAgfSBlbHNlIGlmICh0cmFuc2l0aW9uQ29tYmluZWRE
dXJhdGlvbihtYXRjaGluZ0JhY2tpbmdBbmltYXRpb24pIDw9IDAuMCB8fCAhQ1NTUHJvcGVydHlB
bmltYXRpb246OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQocHJvcGVydHksICZwcmV2aW91c2x5
UnVubmluZ1RyYW5zaXRpb25DdXJyZW50U3R5bGUsICZhZnRlckNoYW5nZVN0eWxlKSkgeworICAg
ICAgICB9IGVsc2UgaWYgKHRyYW5zaXRpb25Db21iaW5lZER1cmF0aW9uKG1hdGNoaW5nQmFja2lu
Z0FuaW1hdGlvbikgPD0gMC4wIHx8ICFDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlC
ZUludGVycG9sYXRlZChwcm9wZXJ0eSwgcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uQ3VycmVu
dFN0eWxlLCBhZnRlckNoYW5nZVN0eWxlKSkgewogICAgICAgICAgICAgLy8gMi4gT3RoZXJ3aXNl
LCBpZiB0aGUgY29tYmluZWQgZHVyYXRpb24gaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDBzLCBv
ciBpZiB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIHJ1bm5pbmcgdHJh
bnNpdGlvbgogICAgICAgICAgICAgLy8gICAgY2Fubm90IGJlIGludGVycG9sYXRlZCB3aXRoIHRo
ZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIGFmdGVyLWNoYW5nZSBzdHlsZSwgdGhlbiBp
bXBsZW1lbnRhdGlvbnMgbXVzdCBjYW5jZWwgdGhlIHJ1bm5pbmcgdHJhbnNpdGlvbi4KICAgICAg
ICAgICAgIHByZXZpb3VzbHlSdW5uaW5nVHJhbnNpdGlvbi0+Y2FuY2VsRnJvbVN0eWxlKCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoQ1NTUHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChw
cm9wZXJ0eSwgJnByZXZpb3VzbHlSdW5uaW5nVHJhbnNpdGlvbi0+cmV2ZXJzaW5nQWRqdXN0ZWRT
dGFydFN0eWxlKCksICZhZnRlckNoYW5nZVN0eWxlKSkgeworICAgICAgICB9IGVsc2UgaWYgKENT
U1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwocHJvcGVydHksIHByZXZpb3VzbHlS
dW5uaW5nVHJhbnNpdGlvbi0+cmV2ZXJzaW5nQWRqdXN0ZWRTdGFydFN0eWxlKCksIGFmdGVyQ2hh
bmdlU3R5bGUpKSB7CiAgICAgICAgICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHRoZSByZXZlcnNp
bmctYWRqdXN0ZWQgc3RhcnQgdmFsdWUgb2YgdGhlIHJ1bm5pbmcgdHJhbnNpdGlvbiBpcyB0aGUg
c2FtZSBhcyB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBhZnRlci1jaGFuZ2UKICAg
ICAgICAgICAgIC8vICAgIHN0eWxlIChzZWUgdGhlIHNlY3Rpb24gb24gcmV2ZXJzaW5nIG9mIHRy
YW5zaXRpb25zIGZvciB3aHkgdGhlc2UgY2FzZSBleGlzdHMpLCBpbXBsZW1lbnRhdGlvbnMgbXVz
dCBjYW5jZWwgdGhlIHJ1bm5pbmcgdHJhbnNpdGlvbgogICAgICAgICAgICAgcHJldmlvdXNseVJ1
bm5pbmdUcmFuc2l0aW9uLT5jYW5jZWxGcm9tU3R5bGUoKTsK
</data>
<flag name="review"
          id="445922"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>