<?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>233863</bug_id>
          
          <creation_ts>2021-12-05 16:08:23 -0800</creation_ts>
          <short_desc>[LBSE] Begin layer-aware RenderSVGRoot implementation</short_desc>
          <delta_ts>2022-01-05 04:41:13 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</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>
          <dependson>233666</dependson>
    
    <dependson>233870</dependson>
    
    <dependson>233871</dependson>
          <blocked>90738</blocked>
    
    <blocked>233872</blocked>
    
    <blocked>233873</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>joepeck</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pangle</cc>
    
    <cc>pdr</cc>
    
    <cc>rbuis</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1820506</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-05 16:08:23 -0800</bug_when>
    <thetext>Following the move RenderSVGRoot -&gt; LegacyRenderSVGRoot (bug #233666), a new RenderSVGRoot implementation, tied to ENABLE(LAYER_BASED_SVG_ENGINE) is needed. Instead of starting totally from scratch, I&apos;ve decided to import the RenderSVGRoot implementation from the LBSE downstream repository, and stub out parts that can and should be upstreamed / reviewed independently.

Many parts of the &quot;new&quot; RenderSVGRoot are still 1:1 copies of the existing code in LegacyRenderSVGRoot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820574</commentid>
    <comment_count>1</comment_count>
      <attachid>446024</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-06 04:13:03 -0800</bug_when>
    <thetext>Created attachment 446024
Patch, v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820576</commentid>
    <comment_count>2</comment_count>
      <attachid>446024</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2021-12-06 04:31:01 -0800</bug_when>
    <thetext>Comment on attachment 446024
Patch, v1

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

I think the patch is too big to review. I think you can split it more:
- introduce isSVGRootOrLegacySVGRoot and ajust call sites
- add LAYER_BASED_SVG_ENGINE/runtime stuff
- Introduce RenderSVGRoot
or something like that.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:955
&gt; +        if (auto svgRoot = ancestorsOfType&lt;RenderSVGRoot&gt;(*m_renderer).first()) {

It now seems you are checking the same condition twice?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820591</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-06 05:59:41 -0800</bug_when>
    <thetext>(In reply to Rob Buis from comment #2)
&gt; Comment on attachment 446024 [details]
&gt; Patch, v1
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=446024&amp;action=review
&gt; 
&gt; I think the patch is too big to review. I think you can split it more:
Absolutely good idea, will do.

&gt; &gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:955
&gt; &gt; +        if (auto svgRoot = ancestorsOfType&lt;RenderSVGRoot&gt;(*m_renderer).first()) {
&gt; 
&gt; It now seems you are checking the same condition twice?

Indeed, a typo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820596</commentid>
    <comment_count>4</comment_count>
      <attachid>446035</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-06 06:22:44 -0800</bug_when>
    <thetext>Created attachment 446035
Patch, v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820716</commentid>
    <comment_count>5</comment_count>
      <attachid>446035</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2021-12-06 12:23:00 -0800</bug_when>
    <thetext>Comment on attachment 446035
Patch, v2

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

&gt; Source/WebCore/rendering/svg/RenderSVGRoot.cpp:185
&gt; +#endif

I wonder if this can be introduced when/just after introducing SVGLogger.

&gt; Source/WebCore/rendering/svg/RenderSVGRoot.cpp:294
&gt; +#endif

Ditto.

&gt; Source/WebCore/rendering/svg/RenderSVGRoot.cpp:393
&gt; +    newPhase = (newPhase == PaintPhase::ChildBlockBackgrounds) ? PaintPhase::ChildBlockBackground : newPhase;

Probably better as if statement. Why is this phase changing needed? May need a comment?

&gt; Source/WebCore/rendering/svg/RenderSVGRoot.cpp:469
&gt; +    if (zoom != 1)

I guess a float notation may be nicer here.

&gt; Source/WebCore/rendering/svg/RenderSVGRoot.cpp:543
&gt; +        if (zoom != 1)

Ditto.

&gt; Source/WebCore/rendering/svg/RenderSVGRoot.cpp:650
&gt; +        if (zoom != 1) {

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820970</commentid>
    <comment_count>6</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-07 03:50:44 -0800</bug_when>
    <thetext>(In reply to Rob Buis from comment #5)
&gt; Comment on attachment 446035 [details]
&gt; Patch, v2
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=446035&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGRoot.cpp:185
&gt; &gt; +#endif
&gt; 
&gt; I wonder if this can be introduced when/just after introducing SVGLogger.
Agreed, much better to actually also show the output in the ChangeLog, makes it easier to judge about the logger code.

I used this extensively during development / verification of the two-pass layout approach - it&apos;s a SVG-focused view of the render tree, showing SVG specific information (objectBoundingBox, ... etc), CSS view of the SVG renderer (frameRectEquivalent/visualOverflowRectEquivalent/...), and dumps the whole tree in ASCII art with &quot;boxes&quot; enclosing renderers.

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGRoot.cpp:294
&gt; &gt; +#endif
&gt; 
&gt; Ditto.
Ack.

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGRoot.cpp:393
&gt; &gt; +    newPhase = (newPhase == PaintPhase::ChildBlockBackgrounds) ? PaintPhase::ChildBlockBackground : newPhase;
&gt; 
&gt; Probably better as if statement. Why is this phase changing needed? May need
&gt; a comment?
That&apos;s a 1:1 copy from RenderBlock::paintContents(), for the non-inline children case. In principle one could refactor both RenderBlock::paintContents() and RenderSVGRoot::paintContents() into e.g. a protected RenderBox::paintBlockContents() helper. However it doesn&apos;t really belong into RenderBox, just happens to be the common ancestor for RenderSVGRoot - thus RenderReplaced - and RenderBlock.

Regarding the question, why is this phase changing needed?

May 6, 2003, Dave Hyatt (2da7013f33ed6):
+    // We don&apos;t paint our own background, but we do let the kids paint their backgrounds.
+    if (paintAction == PaintActionChildBackgrounds)
+        paintAction = PaintActionChildBackground;

His comment got list in time.

&gt; &gt; Source/WebCore/rendering/svg/RenderSVGRoot.cpp:469
&gt; &gt; +    if (zoom != 1)
&gt;
&gt; I guess a float notation may be nicer here.
I thought we avoid that in the CSS places that deal with this, I&apos;ll double check.

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGRoot.cpp:543
&gt; &gt; +        if (zoom != 1)
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGRoot.cpp:650
&gt; &gt; +        if (zoom != 1) {
&gt; 
&gt; Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820975</commentid>
    <comment_count>7</comment_count>
      <attachid>446152</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-07 04:12:33 -0800</bug_when>
    <thetext>Created attachment 446152
Patch, v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820994</commentid>
    <comment_count>8</comment_count>
      <attachid>446162</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-07 04:47:22 -0800</bug_when>
    <thetext>Created attachment 446162
Patch, v4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821003</commentid>
    <comment_count>9</comment_count>
      <attachid>446162</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2021-12-07 06:00:31 -0800</bug_when>
    <thetext>Comment on attachment 446162
Patch, v4

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

&gt; Source/WebCore/rendering/svg/RenderSVGRoot.cpp:557
&gt; +        // There can&apos;t be a transform between repaintContainer and o, because transforms create containers, so it should be safe

o is not very clear :)

&gt; Source/WebCore/rendering/svg/RenderSVGRoot.cpp:582
&gt; +            if (transformAboveSVGFragment) {

Can be combined to one if statement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821005</commentid>
    <comment_count>10</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-07 06:05:38 -0800</bug_when>
    <thetext>(In reply to Rob Buis from comment #9)
&gt; Comment on attachment 446162 [details]
&gt; Patch, v4
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=446162&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGRoot.cpp:557
&gt; &gt; +        // There can&apos;t be a transform between repaintContainer and o, because transforms create containers, so it should be safe
&gt; 
&gt; o is not very clear :)
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGRoot.cpp:582
&gt; &gt; +            if (transformAboveSVGFragment) {
&gt; 
&gt; Can be combined to one if statement.

Fixed, thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821006</commentid>
    <comment_count>11</comment_count>
      <attachid>446165</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-07 06:06:02 -0800</bug_when>
    <thetext>Created attachment 446165
Patch, v5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822616</commentid>
    <comment_count>12</comment_count>
      <attachid>446165</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2021-12-10 02:57:40 -0800</bug_when>
    <thetext>Comment on attachment 446165
Patch, v5

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

&gt; Source/WebCore/rendering/svg/RenderSVGRoot.cpp:246
&gt; +    return effectiveOverflowX() == Overflow::Hidden

The effectiveOverflowX makes only sense when compared with visible IIRC. I guess the question is what to do here for overflow:clip or it being enabled due to contain: paint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822620</commentid>
    <comment_count>13</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-10 03:16:08 -0800</bug_when>
    <thetext>(In reply to Rob Buis from comment #12)
&gt; Comment on attachment 446165 [details]
&gt; Patch, v5
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=446165&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGRoot.cpp:246
&gt; &gt; +    return effectiveOverflowX() == Overflow::Hidden
&gt; 
&gt; The effectiveOverflowX makes only sense when compared with visible IIRC. I
&gt; guess the question is what to do here for overflow:clip or it being enabled
&gt; due to contain: paint.

I followed your change in LegacyRenderSVGRoot from Nov 16.

5ed3c610d08e7 Source/WebCore/rendering/svg/RenderSVGRoot.cpp       (Rob Buis              2021-11-16 22:32:39 +0000 218)     return effectiveOverflowX() == Overflow::Hidden

commit 5ed3c610d08e786fec6b85e6137676ce89002aed
Author: Rob Buis &lt;rbuis@igalia.com&gt;
Date:   Tue Nov 16 22:32:39 2021 +0000

    [css-contain] Support contain:paint
    https://bugs.webkit.org/show_bug.cgi?id=224742

There you specifically moved to check effectiveOverflowX() == Overflow::Hidden for (Legacy)RenderSVGRoot. You have to clarify if that&apos;s correct wrt to contain: paint ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822622</commentid>
    <comment_count>14</comment_count>
      <attachid>446165</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2021-12-10 03:21:37 -0800</bug_when>
    <thetext>Comment on attachment 446165
Patch, v5

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

&gt;&gt;&gt; Source/WebCore/rendering/svg/RenderSVGRoot.cpp:246
&gt;&gt;&gt; +    return effectiveOverflowX() == Overflow::Hidden
&gt;&gt; 
&gt;&gt; The effectiveOverflowX makes only sense when compared with visible IIRC. I guess the question is what to do here for overflow:clip or it being enabled due to contain: paint.
&gt; 
&gt; I followed your change in LegacyRenderSVGRoot from Nov 16.
&gt; 
&gt; 5ed3c610d08e7 Source/WebCore/rendering/svg/RenderSVGRoot.cpp       (Rob Buis              2021-11-16 22:32:39 +0000 218)     return effectiveOverflowX() == Overflow::Hidden
&gt; 
&gt; commit 5ed3c610d08e786fec6b85e6137676ce89002aed
&gt; Author: Rob Buis &lt;rbuis@igalia.com&gt;
&gt; Date:   Tue Nov 16 22:32:39 2021 +0000
&gt; 
&gt;     [css-contain] Support contain:paint
&gt;     https://bugs.webkit.org/show_bug.cgi?id=224742
&gt; 
&gt; There you specifically moved to check effectiveOverflowX() == Overflow::Hidden for (Legacy)RenderSVGRoot. You have to clarify if that&apos;s correct wrt to contain: paint ;-)

Ok, then it must be right :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822625</commentid>
    <comment_count>15</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-10 03:25:10 -0800</bug_when>
    <thetext>Thanks Rob, great comment ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822626</commentid>
    <comment_count>16</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-10 03:25:14 -0800</bug_when>
    <thetext>Committed r286842 (245075@trunk): &lt;https://commits.webkit.org/245075@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822627</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-10 03:26:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/86315362&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446024</attachid>
            <date>2021-12-06 04:13:03 -0800</date>
            <delta_ts>2021-12-06 06:22:37 -0800</delta_ts>
            <desc>Patch, v1</desc>
            <filename>bug-233863-20211206041301.patch</filename>
            <type>text/plain</type>
            <size>95706</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NTQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDk4NzliYjBhODE2YWVjYTI1MzdjOWZm
YzcwYTM4OTkzNzZkYjBhODkuLjRlMjdiMDA5NzhkMjFiNzBhMWM5OTg5NDQ4MWE5OGZhZGM1YTI1
ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMjEtMTItMDYgIE5pa29sYXMgWmltbWVybWFubiAg
PG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0xCU0VdIEJlZ2luIGxheWVyLWF3
YXJlIFJlbmRlclNWR1Jvb3QgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzg2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZ2luIGltcGxlbWVudGluZyBSZW5kZXJTVkdSb290
IC0gdGhlIHJlbmRlcmVyIGZvciB0aGUgb3V0ZXJtb3N0IDxzdmc+IGVsZW1lbnQgLQorICAgICAg
ICBmb3IgdGhlIGxheWVyLWJhc2VkIFNWRyBlbmdpbmUgKExCU0UpLiBTdGFydGluZyB3aXRoIHRo
ZSBkb3duc3RyZWFtIGltcGxlbWVudGF0aW9uLAorICAgICAgICBhbGwgcGFydHMgd2VyZSByZW1v
dmVkIHRoYXQgY2FuIGJlIHVwc3RyZWFtZWQgc2VwZXJhdGVkIChTVkdCb3VuZGluZ0JveENvbXB1
dGF0aW9uLAorICAgICAgICBTVkdDb250YWluZXJMYXlvdXQsIGV0Yy4pLiBBbiAnYWxsb3dsaXN0
JyBhcHByb2FjaCBpcyB1c2VkIHRvIG9ubHkgY3JlYXRlIHJlbmRlcmVycworICAgICAgICBmb3Ig
dGhvc2UgU1ZHIGVsZW1lbnRzIHRoYXQgYXJlIGF3YXJlIG9mIExCU0U6IG91dGVybW9zdCA8c3Zn
PiBlbGVtZW50ICsgPHJlY3Q+CisgICAgICAgIGVsZW1lbnQuIEZvciBhbGwgb3RoZXIgZWxlbWVu
dHMgbm8gcmVuZGVyZXJzIHdpbGwgYmUgY3JlYXRlZCBpbiBMQlNFIGZvciBub3cuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBsZWF2ZXMgdGhlIGxlZ2FjeSBlbmdpbmUgdW5jaGFuZ2VkIChwcm9iZWQg
YnkgRVdTICYgbG9jYWwgdGVzdCBydW5zKSwKKyAgICAgICAgYW5kIGFsc28gTEJTRSBzaG93cyBu
byBhc3NlcnRpb25zL2NyYXNoZXMvaGFuZ3MgaW4gcmVsZWFzZS9kZWJ1ZyBidWlsZHMgLSB0ZXN0
ZWQKKyAgICAgICAgd2l0aCAicnVuLXdlYmtpdC10ZXN0cyAtLWludGVybmFsLWZlYXR1cmU9TGF5
ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQiLgorCisgICAgICAgIE5vdGUgdGhhdCBtYW55IGxheW91
dCB0ZXN0cyB3aWxsIGVpdGhlciB0aW1lb3V0IG9yIHNob3cgYSBkaWZmZXJlbnQgcmVzdWx0LAor
ICAgICAgICBkdWUgdG8gdGhlIHNtYWxsIGNhcGFiaWxpdGllcyBvZiBMQlNFIGF0IHByZXNlbnQu
IFRoZXJlZm9yZSBpdCdzIGJlbmVmaWNpYWwgdG8KKyAgICAgICAgZGVjcmVhc2UgdGltZW91dHMg
LyB1c2UgbW9yZSB3b3JrZXJzIHdoZW4gcnVubmluZyBsYXlvdXQgdGVzdHMuIE90aGVyd2lzZSB0
aGV5CisgICAgICAgIHdpbGwgdGFrZSBhIGxvbmcgdGltZSB0byBjb21wbGV0ZS4gT24gbXkgbWFj
T1MgTW9udGVyZXkgTTEgTWFjQm9vaywgZm9sbG93aW5nCisgICAgICAgIHBhcmFtZXRlcnMgbGVh
ZCB0byBhIHJlYXNvbmFibGUgdGVzdCBleGVjdXRpb24gdGltZToKKworICAgICAgICBydW4td2Vi
a2l0LXRlc3RzIC0taW50ZXJuYWwtZmVhdHVyZT1MYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCAt
LXRpbWVvdXQ9NTAwMCBcCisgICAgICAgIC0tbm8tc2FtcGxlLW9uLXRpbWVvdXQgLS1uby1yZXRy
eS1mYWlsdXJlcyAtLWNoaWxkLXByb2Nlc3Nlcz0xNSBcCisgICAgICAgIFstLXJlbGVhc2UgLyAt
LWRlYnVnXSBzdmcKKworICAgICAgICAqIFNjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5j
ZXNJbnRlcm5hbC55YW1sOiBXaGVuICJMYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZCIgY2hhbmdl
cyBjYWxsCisgICAgICAgIFdlYkNvcmU6OlNldHRpbmdzQmFzZTo6bGF5ZXJCYXNlZFNWR0VuZ2lu
ZUVuYWJsZWRDaGFuZ2VkKCkgdG8gYXNzdXJlIHRoZSBzd2l0Y2ggZnJvbSBsZWdhY3kgdG8KKyAg
ICAgICAgTEJTRSBlbmdpbmUgYW5kIHZpY2UtdmVyc2EgaXMgbGl2ZSBhbmQgZG9lc24ndCBuZWVk
IHJlbG9hZHMgdG8gdGFrZSBlZmZlY3QuCisKIDIwMjEtMTItMDYgIFlvdWVubiBGYWJsZXQgIDx5
b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEVuYWJsZSBOYXZpZ2F0aW9uUHJlbG9hZE1hbmFn
ZXIgYnkgZGVmYXVsdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDI1YTA4MjRiYjdjNzg1MDc0YWY4MTM2NTkxMDYx
MDBkYmUzZjA1YTAuLjFlZGEzZTc4ODAwMzc3NzAxNjQzMTMzYzAwZDJlN2U5ZThkNDg3NzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxMzggQEAKKzIwMjEtMTItMDYgIE5pa29sYXMgWmltbWVybWFu
biAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0xCU0VdIEJlZ2luIGxheWVy
LWF3YXJlIFJlbmRlclNWR1Jvb3QgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzg2MworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZ2luIGltcGxlbWVudGluZyBSZW5kZXJTVkdS
b290IC0gdGhlIHJlbmRlcmVyIGZvciB0aGUgb3V0ZXJtb3N0IDxzdmc+IGVsZW1lbnQgLQorICAg
ICAgICBmb3IgdGhlIGxheWVyLWJhc2VkIFNWRyBlbmdpbmUgKExCU0UpLiBTdGFydGluZyB3aXRo
IHRoZSBkb3duc3RyZWFtIGltcGxlbWVudGF0aW9uLAorICAgICAgICBhbGwgcGFydHMgd2VyZSBy
ZW1vdmVkIHRoYXQgY2FuIGJlIHVwc3RyZWFtZWQgc2VwZXJhdGVkIChTVkdCb3VuZGluZ0JveENv
bXB1dGF0aW9uLAorICAgICAgICBTVkdDb250YWluZXJMYXlvdXQsIGV0Yy4pLiBBbiAnYWxsb3ds
aXN0JyBhcHByb2FjaCBpcyB1c2VkIHRvIG9ubHkgY3JlYXRlIHJlbmRlcmVycworICAgICAgICBm
b3IgdGhvc2UgU1ZHIGVsZW1lbnRzIHRoYXQgYXJlIGF3YXJlIG9mIExCU0U6IG91dGVybW9zdCA8
c3ZnPiBlbGVtZW50ICsgPHJlY3Q+CisgICAgICAgIGVsZW1lbnQuIEZvciBhbGwgb3RoZXIgZWxl
bWVudHMgbm8gcmVuZGVyZXJzIHdpbGwgYmUgY3JlYXRlZCBpbiBMQlNFIGZvciBub3cuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBsZWF2ZXMgdGhlIGxlZ2FjeSBlbmdpbmUgdW5jaGFuZ2VkIChwcm9i
ZWQgYnkgRVdTICYgbG9jYWwgdGVzdCBydW5zKSwKKyAgICAgICAgYW5kIGFsc28gTEJTRSBzaG93
cyBubyBhc3NlcnRpb25zL2NyYXNoZXMvaGFuZ3MgaW4gcmVsZWFzZS9kZWJ1ZyBidWlsZHMgLSB0
ZXN0ZWQKKyAgICAgICAgd2l0aCAicnVuLXdlYmtpdC10ZXN0cyAtLWludGVybmFsLWZlYXR1cmU9
TGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQiLgorCisgICAgICAgIE5vdGUgdGhhdCBtYW55IGxh
eW91dCB0ZXN0cyB3aWxsIGVpdGhlciB0aW1lb3V0IG9yIHNob3cgYSBkaWZmZXJlbnQgcmVzdWx0
LAorICAgICAgICBkdWUgdG8gdGhlIHNtYWxsIGNhcGFiaWxpdGllcyBvZiBMQlNFIGF0IHByZXNl
bnQuIFRoZXJlZm9yZSBpdCdzIGJlbmVmaWNpYWwgdG8KKyAgICAgICAgZGVjcmVhc2UgdGltZW91
dHMgLyB1c2UgbW9yZSB3b3JrZXJzIHdoZW4gcnVubmluZyBsYXlvdXQgdGVzdHMuIE90aGVyd2lz
ZSB0aGV5CisgICAgICAgIHdpbGwgdGFrZSBhIGxvbmcgdGltZSB0byBjb21wbGV0ZS4gT24gbXkg
bWFjT1MgTW9udGVyZXkgTTEgTWFjQm9vaywgZm9sbG93aW5nCisgICAgICAgIHBhcmFtZXRlcnMg
bGVhZCB0byBhIHJlYXNvbmFibGUgdGVzdCBleGVjdXRpb24gdGltZToKKworICAgICAgICBydW4t
d2Via2l0LXRlc3RzIC0taW50ZXJuYWwtZmVhdHVyZT1MYXllckJhc2VkU1ZHRW5naW5lRW5hYmxl
ZCAtLXRpbWVvdXQ9NTAwMCBcCisgICAgICAgIC0tbm8tc2FtcGxlLW9uLXRpbWVvdXQgLS1uby1y
ZXRyeS1mYWlsdXJlcyAtLWNoaWxkLXByb2Nlc3Nlcz0xNSBcCisgICAgICAgIFstLXJlbGVhc2Ug
LyAtLWRlYnVnXSBzdmcKKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisg
ICAgICAgICogU291cmNlcy50eHQ6IEFkZCBSZW5kZXJTVkdSb290LihjcHB8aCkgdG8gYnVpbGQu
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlRnJvbVJlbmRlcmVyKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6Ym91bmRpbmdCb3hSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmVsZW1lbnRQYXRoIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRldGVybWluZUFjY2Vzc2liaWxpdHlS
b2xlKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50Ojpib3VuZGluZ0Fic29sdXRlUmVjdFdpdGhvdXRMYXlvdXQpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkUmVuZGVy
ZXJIaWdobGlnaHQpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3Jh
dGlvbkNvdmVyYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpj
YW5Vc2VGb3JDaGlsZCk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVWaWV3OjphcHBseU92ZXJmbG93VG9WaWV3cG9ydCk6CisgICAgICAgICog
cGFnZS9TZXR0aW5nc0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3NCYXNlOjps
YXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZENoYW5nZWQpOiBJbnZhbGlkYXRlIHN0eWxlIC8gcmVu
ZGVyZXJzIG9mIHRoZSB3aG9sZSBTVkcgc3VidHJlZSwgaWYgdGhlIExCU0UtZmxhZyBjaGFuZ2Vz
IGF0IHJ1bnRpbWUuCisgICAgICAgICogcGFnZS9TZXR0aW5nc0Jhc2UuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpUcmFuc2Zvcm1TdGF0ZTo6ZGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FuTWFwQmV0
d2VlblJlbmRlcmVyc1ZpYUxheWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpiZWdpblRyYW5zcGFyZW5jeUxh
eWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3Rz
IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpjYW5Vc2VPZmZzZXRGcm9tQW5jZXN0b3IgY29uc3QpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b2Jq
ZWN0SXNSZWxheW91dEJvdW5kYXJ5KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzTGVnYWN5U1ZHUm9vdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzU1ZHUm9vdE9yTGVnYWN5U1ZH
Um9vdCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Omhhc0ludHJpbnNpY1NpemUpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3
OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvTGVnYWN5UmVuZGVyU1ZHUm9vdC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNsaXBwZWRPdmVyZmxvd1JlY3Qg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om5vZGVBdFBv
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6dmlzdWFsT3ZlcmZsb3dSZWN0
RXF1aXZhbGVudCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0Zvckxh
eW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jvb3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1Jvb3Q6OlJlbmRlclNWR1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6
c3ZnU1ZHRWxlbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojpj
b21wdXRlSW50cmluc2ljUmF0aW9JbmZvcm1hdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSb290Ojppc0VtYmVkZGVkVGhyb3VnaFNWR0ltYWdlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmlzRW1iZWRkZWRUaHJvdWdoRnJhbWVDb250YWlu
aW5nU1ZHRG9jdW1lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6
Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jvb3Q6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jvb3Q6OnNob3VsZEFwcGx5Vmlld3BvcnRDbGlwIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jvb3Q6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1Jvb3Q6OnBhaW50T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OnBh
aW50Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6d2lsbEJlRGVz
dHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6Omluc2VydGVkSW50b1Ry
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6d2lsbEJlUmVtb3ZlZEZyb21U
cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OnN0eWxlRGlkQ2hhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OnVwZGF0ZUxheWVySW5mb3JtYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6dXBkYXRlRnJvbVN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmNsaXBwZWRPdmVyZmxvd1JlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVRyYW5zZm9ybWF0aW9u
TWF0cmljZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6aGFzUmVsYXRpdmVEaW1lbnNpb25z
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmFkZFJlc291cmNlRm9y
Q2xpZW50SW52YWxpZGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmN1
cnJlbnRWaWV3cG9ydFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9v
dDo6bWFwTG9jYWxUb0NvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSb290OjpvdmVyZmxvd0NsaXBSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jvb3Q6OmFwcGx5VHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jvb3Q6OmFic29sdXRlUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHUm9vdDo6YWJzb2x1dGVRdWFkcyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSb290Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
TGVnYWN5UmVuZGVyU1ZHUm9vdC5oLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
U3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsYXlvdXRTaXplT2ZOZWFyZXN0Vmlld3Bv
cnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlclN1cHBvcnQ6OnRyYW5zZm9y
bVRvUm9vdENoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFz
VGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZSk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRl
eHQ6OnByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVu
ZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5h
dGVTeXN0ZW0pOgorICAgICAgICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6YXR0YWNoSW50ZXJu
YWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6OmRldGFjaCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6cmVwb3J0VmlzdWFsbHlOb25FbXB0eUNv
bnRlbnQpOgorICAgICAgICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlclNW
Ry5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6U1ZHOjphdHRhY2gp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6OlNWRzo6ZGV0YWNoKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJTVkcuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTVkdMYXll
ckF3YXJlRWxlbWVudFNldCk6CisgICAgICAgIChXZWJDb3JlOjppc1NWR0xheWVyQXdhcmVFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVu
ZGVyZXIgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdTVkdFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmN1cnJlbnRWaWV3Qm94UmVjdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjdXJyZW50Vmlld3BvcnRTaXplIGNvbnN0KToK
KwogMjAyMS0xMi0wNiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAg
ICAgW0xGQ11bSW50ZWdyYXRpb25dIFVzZSBlbmQgYml0cyBpbiB0ZXh0IGJveCBpdGVyYXRvcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2Vz
SW50ZXJuYWwueWFtbCBiL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJl
bmNlc0ludGVybmFsLnlhbWwKaW5kZXggOTczMDRkMGI3OWZiMzIyNzEyODdiODNjOGM1Y2VkNGM2
ZTlkMDQwMi4uNDA0YWM0NDJhZGY5YTVlNDExYWJhNmVhMDIxZGFjZWFmM2Y5YjQzMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzSW50ZXJu
YWwueWFtbAorKysgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5j
ZXNJbnRlcm5hbC55YW1sCkBAIC00NTAsNyArNDUwLDcgQEAgTGF5ZXJCYXNlZFNWR0VuZ2luZUVu
YWJsZWQ6CiAgIGh1bWFuUmVhZGFibGVOYW1lOiAiTGF5ZXItYmFzZWQgU1ZHIEVuZ2luZSAoTEJT
RSkiCiAgIGh1bWFuUmVhZGFibGVEZXNjcmlwdGlvbjogIkVuYWJsZSBuZXh0LWdlbmVyYXRpb24g
bGF5ZXItYmFzZWQgU1ZHIEVuZ2luZSAoTEJTRSkiCiAgIGNvbmRpdGlvbjogRU5BQkxFKExBWUVS
X0JBU0VEX1NWR19FTkdJTkUpCi0gIHdlYmNvcmVPbkNoYW5nZTogc2V0TmVlZHNSZWxheW91dEFs
bEZyYW1lcworICB3ZWJjb3JlT25DaGFuZ2U6IGxheWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkQ2hh
bmdlZAogICBkZWZhdWx0VmFsdWU6CiAgICAgV2ViQ29yZToKICAgICAgIGRlZmF1bHQ6IGZhbHNl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CmluZGV4IGViMzY4YmQwYTM0MzBhMGJhNjRhZjc3NGM3NzU4NTIwNzNmM2Uy
ZTUuLjUxNDYxNThkZmY1MjU0YzhlYTg4ZGZlOWQzYWJkZTVhNDUwY2MzMWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CkBAIC0yNDkzLDYgKzI0OTMsNyBAQCByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
TWFza2VyLmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwCiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKK3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUm9vdC5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDZkYjAxYjVhMGNkZjVmYTY4N2QzMmUzZjE1NDNiMWM0Y2M5ODhkMWIuLjQzYTFmZjlj
YTQ5OWI5ZmNmMTA2YjdjMTk0NTc0MmExMjRkZmYxMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEyNTMsNiArMTI1Myw3IEBA
CiAJCTQzNjcwOERGMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwOEEw
MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCAqLzsgfTsKIAkJ
NDM2NzA4RTExMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGll
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcw
OEEyMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50Lmgg
Ki87IH07CiAJCTQzNjcwOEUzMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQzNjcwOEE0MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
aCAqLzsgfTsKKwkJNDM2NzA4RTUxMkQ5REI0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jvb3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwOEE2MTJE
OURCNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSb290LmggKi87IH07CiAJCTQzNjcwOEU1MTJEOUNB
NEIwMDA0NDIzNCAvKiBMZWdhY3lSZW5kZXJTVkdSb290LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDhBNjEyRDlDQTRCMDAwNDQyMzQgLyogTGVn
YWN5UmVuZGVyU1ZHUm9vdC5oICovOyB9OwogCQk0MzY3MDhFOTEyRDlDQTRCMDAwNDQyMzQgLyog
UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4QUExMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRl
clNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuaCAqLzsgfTsKIAkJNDM2NzA4RUIxMkQ5Q0E0QjAw
MDQ0MjM0IC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDhBQzEyRDlDQTRCMDAwNDQyMzQgLyog
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCAqLzsgfTsKQEAgLTg5NzUsNiArODk3Niw4IEBA
CiAJCTQzNjcwOEEyMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdy
YWRpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291
cmNlUmFkaWFsR3JhZGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM2NzA4
QTMxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZVNvbGlk
Q29sb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDhBNDEyRDlDQTRC
MDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDhBNTEyRDlDQTVDMDAwNDQyMzQgLyogUmVuZGVy
U1ZHUm9vdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJT
VkdSb290LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4QTYxMkQ5REI0
QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jvb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVuZGVyU1ZHUm9vdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzY3
MDhBNTEyRDlDQTRCMDAwNDQyMzQgLyogTGVnYWN5UmVuZGVyU1ZHUm9vdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lSZW5kZXJTVkdSb290LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM2NzA4QTYxMkQ5Q0E0QjAwMDQ0MjM0IC8qIExl
Z2FjeVJlbmRlclNWR1Jvb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVn
YWN5UmVuZGVyU1ZHUm9vdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDhB
OTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4ODA1LDYg
KzE4ODA4LDggQEAKIAkJMDg4QzJGNzQxMjM5MDA4MDAwM0Q2NUNFIC8qIHN2ZyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNDM2NzA4QTUxMkQ5Q0E1QzAw
MDQ0MjM0IC8qIFJlbmRlclNWR1Jvb3QuY3BwICovLAorCQkJCTQzNjcwOEE2MTJEOURCNEIwMDA0
NDIzNCAvKiBSZW5kZXJTVkdSb290LmggKi8sCiAJCQkJNDM2NzA4QTUxMkQ5Q0E0QjAwMDQ0MjM0
IC8qIExlZ2FjeVJlbmRlclNWR1Jvb3QuY3BwICovLAogCQkJCTQzNjcwOEE2MTJEOUNBNEIwMDA0
NDIzNCAvKiBMZWdhY3lSZW5kZXJTVkdSb290LmggKi8sCiAJCQkJNDM2NzA4ODExMkQ5Q0E0QTAw
MDQ0MjM0IC8qIFJlbmRlclNWR0Jsb2NrLmNwcCAqLywKQEAgLTM1NzEwLDYgKzM1NzE1LDcgQEAK
IAkJCQlGNDRBNUY1OTFGRUQzOEYyMDA3RjU5NDQgLyogTGVnYWN5TlNQYXN0ZWJvYXJkVHlwZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUExODVCNDJBMUU4MjExQTEwMERDOTExOCAvKiBMZWdhY3lQ
cmV2aWV3TG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTBEQkY0NzE4RjkyMzE3MDAwRDcw
QzYgLyogTGVnYWN5UHJldmlld0xvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDM2
NzA4RTUxMkQ5REI0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jvb3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQzNjcwOEU1MTJEOUNBNEIwMDA0NDIzNCAvKiBMZWdhY3lSZW5kZXJTVkdSb290LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOENGRjVFMTBBMTU1QTA1MDAwQTQyMzQgLyogTGVnYWN5Um9vdElu
bGluZUJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE2MkM3RjUxMUY3N0VGQjAwNjEyRUZFIC8q
IExlZ2FjeVNjaGVtZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IGE1MDM0ZjZlOTI5ZTZjMzRi
MDkwYmNmZDkxYTcxNmU2ZGQwYWM5YzIuLjNiZjM4ODNkZDZhNjBkZjk1YWY4ZGQ3YzY4Yzk2NGNl
MzVmNGY2MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmNwcApAQCAtODcsNyArODcsNiBAQAogI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJJbmxp
bmVSdW5BbmRPZmZzZXQuaCIKLSNpbmNsdWRlICJMZWdhY3lSZW5kZXJTVkdSb290LmgiCiAjaW5j
bHVkZSAiTWF0aE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSYW5n
ZS5oIgpAQCAtNTQ3LDcgKzU0Niw3IEBAIHN0YXRpYyBSZWY8QWNjZXNzaWJpbGl0eU9iamVjdD4g
Y3JlYXRlRnJvbVJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgICAgIHJldHVy
biBBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q6OmNyZWF0ZShyZW5kZXJlcik7CiAjZW5kaWYKIAot
ICAgIGlmIChpczxMZWdhY3lSZW5kZXJTVkdSb290PigqcmVuZGVyZXIpKQorICAgIGlmIChyZW5k
ZXJlci0+aXNTVkdSb290T3JMZWdhY3lTVkdSb290KCkpCiAgICAgICAgIHJldHVybiBBY2Nlc3Np
YmlsaXR5U1ZHUm9vdDo6Y3JlYXRlKHJlbmRlcmVyKTsKICAgICAKICAgICBpZiAoaXM8U1ZHRWxl
bWVudD4obm9kZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBmZjQ2YWY4NmM5NTJmN2E2ZDMw
MzJlODZkZGNkZDlhZDkzNmIwMjZlLi5hYzk4OTI3OGUxNTRkMTk0NjYxMjMwODFmZTY1ZjgyODkz
ZGMxZDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTk0LDYgKzk0LDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWF0aE1MQmxvY2suaCIKICNp
bmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgog
I2luY2x1ZGUgIlJlbmRlclRleHQuaCIKQEAgLTg1Niw3ICs4NTcsNyBAQCBMYXlvdXRSZWN0IEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmJvdW5kaW5nQm94UmVjdCgpIGNvbnN0CiAgICAgVmVj
dG9yPEZsb2F0UXVhZD4gcXVhZHM7CiAgICAgYm9vbCBpc1NWR1Jvb3QgPSBmYWxzZTsKIAotICAg
IGlmIChvYmotPmlzU1ZHUm9vdCgpKQorICAgIGlmIChvYmotPmlzU1ZHUm9vdE9yTGVnYWN5U1ZH
Um9vdCgpKQogICAgICAgICBpc1NWR1Jvb3QgPSB0cnVlOwogCiAgICAgaWYgKGlzPFJlbmRlclRl
eHQ+KCpvYmopKQpAQCAtOTUxLDkgKzk1MiwxNCBAQCBQYXRoIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmVsZW1lbnRQYXRoKCkgY29uc3QKICAgICAgICAgUGF0aCBwYXRoID0gZG93bmNhc3Q8
UmVuZGVyU1ZHU2hhcGU+KCptX3JlbmRlcmVyKS5wYXRoKCk7CiAKICAgICAgICAgLy8gVGhlIFNW
RyBwYXRoIGlzIGluIHRlcm1zIG9mIHRoZSBwYXJlbnQncyBib3VuZGluZyBib3guIFRoZSBwYXRo
IG5lZWRzIHRvIGJlIG9mZnNldCB0byBmcmFtZSBjb29yZGluYXRlcy4KLSAgICAgICAgaWYgKGF1
dG8gc3ZnUm9vdCA9IGFuY2VzdG9yc09mVHlwZTxMZWdhY3lSZW5kZXJTVkdSb290PigqbV9yZW5k
ZXJlcikuZmlyc3QoKSkgeworICAgICAgICBpZiAoYXV0byBzdmdSb290ID0gYW5jZXN0b3JzT2ZU
eXBlPFJlbmRlclNWR1Jvb3Q+KCptX3JlbmRlcmVyKS5maXJzdCgpKSB7CiAgICAgICAgICAgICBM
YXlvdXRQb2ludCBwYXJlbnRPZmZzZXQgPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKCYq
c3ZnUm9vdCktPmVsZW1lbnRSZWN0KCkubG9jYXRpb24oKTsKICAgICAgICAgICAgIHBhdGgudHJh
bnNmb3JtKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZShwYXJlbnRPZmZzZXQueCgpLCBwYXJl
bnRPZmZzZXQueSgpKSk7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAg
ICAgIH0gZWxzZSBpZiAoYXV0byBzdmdSb290ID0gYW5jZXN0b3JzT2ZUeXBlPFJlbmRlclNWR1Jv
b3Q+KCptX3JlbmRlcmVyKS5maXJzdCgpKSB7CisgICAgICAgICAgICBMYXlvdXRQb2ludCBwYXJl
bnRPZmZzZXQgPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKCYqc3ZnUm9vdCktPmVsZW1l
bnRSZWN0KCkubG9jYXRpb24oKTsKKyAgICAgICAgICAgIHBhdGgudHJhbnNmb3JtKEFmZmluZVRy
YW5zZm9ybSgpLnRyYW5zbGF0ZShwYXJlbnRPZmZzZXQueCgpLCBwYXJlbnRPZmZzZXQueSgpKSk7
CisjZW5kaWYKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBwYXRoOwpAQCAtMzAxMSw3ICsz
MDE3LDcgQEAgQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZGV0
ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKQogICAgIGlmIChoZWFkaW5nTGV2ZWwoKSkKICAgICAg
ICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSb2xlOjpIZWFkaW5nOwogICAgIAotICAgIGlmIChtX3Jl
bmRlcmVyLT5pc1NWR1Jvb3QoKSkKKyAgICBpZiAobV9yZW5kZXJlci0+aXNTVkdSb290T3JMZWdh
Y3lTVkdSb290KCkpCiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Um9sZTo6U1ZHUm9vdDsK
ICAgICAKICAgICBpZiAoaXNTdHlsZUZvcm1hdEdyb3VwKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAppbmRleCAxNzgyZjZkYjI4ZGEwNjg2YzgyZjAxMmMxMzdhMmUyNWEzYzQ4ZDJkLi45YzAzMThl
NTM4MTRiNzEwMmQ5N2YwNDkwNWM3M2U0ZWY2ODhiNmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CkBAIC0xNzE0LDcgKzE3MTQsNyBAQCBzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxSZW5kZXJPYmpl
Y3QqLCBGbG9hdFJlY3Q+PiBFbGVtZW50Ojpib3VuZGluZ0Fic29sdXRlUmVjdAogewogICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgIFZlY3RvcjxGbG9h
dFF1YWQ+IHF1YWRzOwotICAgIGlmIChpc1NWR0VsZW1lbnQoKSAmJiByZW5kZXJlciAmJiAhcmVu
ZGVyZXItPmlzU1ZHUm9vdCgpKSB7CisgICAgaWYgKGlzU1ZHRWxlbWVudCgpICYmIHJlbmRlcmVy
ICYmICFyZW5kZXJlci0+aXNTVkdSb290T3JMZWdhY3lTVkdSb290KCkpIHsKICAgICAgICAgLy8g
R2V0IHRoZSBib3VuZGluZyByZWN0YW5nbGUgZnJvbSB0aGUgU1ZHIG1vZGVsLgogICAgICAgICBT
VkdFbGVtZW50JiBzdmdFbGVtZW50ID0gZG93bmNhc3Q8U1ZHRWxlbWVudD4oKnRoaXMpOwogICAg
ICAgICBpZiAoYXV0byBsb2NhbFJlY3QgPSBzdmdFbGVtZW50LmdldEJvdW5kaW5nQm94KCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKaW5kZXggYzQ2
ZTNlNzQ4ZjU5MTVkYmFmNTRiNTQyZTE0YmEyM2VmZDNjZjZkMi4uODI3ZmE1ZTMxNzc0NWQ4ODZm
MTQ1M2VjOWNlOTAxYzc5NjU5Y2ZhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5LmNwcApAQCAtMTQzLDggKzE0Myw4IEBAIHN0YXRpYyB2b2lkIGJ1aWxk
UmVuZGVyZXJIaWdobGlnaHQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW5zcGVjdG9y
T3ZlcmxhCiAgICAgRnJhbWVWaWV3KiBjb250YWluaW5nVmlldyA9IGNvbnRhaW5pbmdGcmFtZS0+
dmlldygpOwogICAgIEZyYW1lVmlldyogbWFpblZpZXcgPSBjb250YWluaW5nRnJhbWUtPnBhZ2Uo
KS0+bWFpbkZyYW1lKCkudmlldygpOwogCi0gICAgLy8gTGVnYWN5UmVuZGVyU1ZHUm9vdCBzaG91
bGQgYmUgaGlnaGxpZ2h0ZWQgdGhyb3VnaCB0aGUgaXNCb3goKSBjb2RlIHBhdGgsIGFsbCBvdGhl
ciBTVkcgZWxlbWVudHMgc2hvdWxkIGp1c3QgZHVtcCB0aGVpciBhYnNvbHV0ZVF1YWRzKCkuCi0g
ICAgYm9vbCBpc1NWR1JlbmRlcmVyID0gcmVuZGVyZXItPm5vZGUoKSAmJiByZW5kZXJlci0+bm9k
ZSgpLT5pc1NWR0VsZW1lbnQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHUm9vdCgpOworICAgIC8vIChM
ZWdhY3kpUmVuZGVyU1ZHUm9vdCBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQgdGhyb3VnaCB0aGUgaXNC
b3goKSBjb2RlIHBhdGgsIGFsbCBvdGhlciBTVkcgZWxlbWVudHMgc2hvdWxkIGp1c3QgZHVtcCB0
aGVpciBhYnNvbHV0ZVF1YWRzKCkuCisgICAgYm9vbCBpc1NWR1JlbmRlcmVyID0gcmVuZGVyZXIt
Pm5vZGUoKSAmJiByZW5kZXJlci0+bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSAmJiAhcmVuZGVyZXIt
PmlzU1ZHUm9vdE9yTGVnYWN5U1ZHUm9vdCgpOwogCiAgICAgaWYgKGlzU1ZHUmVuZGVyZXIpIHsK
ICAgICAgICAgaGlnaGxpZ2h0LnR5cGUgPSBJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OlR5
cGU6OlJlY3RzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uQ292ZXJhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
dGVncmF0aW9uL0xheW91dEludGVncmF0aW9uQ292ZXJhZ2UuY3BwCmluZGV4IDJhMmQ2ZTczYmIw
NTU2ZTY1Y2YyOThlMTUzZTE3MmY1YTg2NjU5MzQuLjNkOWZiY2Q2MDFkOWRlZjdmOTM3OTUzOGVi
MGZhNjUxYzM2ZDliZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3Jh
dGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Db3ZlcmFnZS5jcHAKQEAgLTUzMyw3
ICs1MzMsNyBAQCBzdGF0aWMgT3B0aW9uU2V0PEF2b2lkYW5jZVJlYXNvbj4gY2FuVXNlRm9yQ2hp
bGQoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBjbwogICAgICAgICBpZiAocmVwbGFjZWQu
aXNGbG9hdGluZygpIHx8IHJlcGxhY2VkLmlzUG9zaXRpb25lZCgpKQogICAgICAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChDaGlsZEJveElzRmxvYXRpbmdPclBvc2l0aW9u
ZWQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKQogCi0gICAgICAgIGlmIChyZXBsYWNlZC5pc1NW
R1Jvb3QoKSkKKyAgICAgICAgaWYgKHJlcGxhY2VkLmlzU1ZHUm9vdE9yTGVnYWN5U1ZHUm9vdCgp
KQogICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChDb250ZW50SXNT
VkcsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKIAogICAgICAgICBpZiAoaXM8UmVuZGVySW1h
Z2U+KHJlcGxhY2VkKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGQzMmExNjg3
M2VmZGQ4NDNlNzA2NmY2ZWU5MTdhM2I5ZjViZGNkNGUuLjA1MmIyMThkNTllMTQxM2U4ZTQxNTU4
YmVkZDNhYjU2NTY2M2MyZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTg3LDYg
Kzg3LDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5k
ZXJMYXllckNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJh
ci5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclBhcnQuaCIKICNpbmNsdWRlICJSZW5kZXJT
dHlsZS5oIgpAQCAtNjQ3LDYgKzY0OCwxNyBAQCB2b2lkIEZyYW1lVmlldzo6YXBwbHlPdmVyZmxv
d1RvVmlld3BvcnQoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIFNjcm9sbGJhcgogICAg
IE92ZXJmbG93IG92ZXJmbG93WCA9IHJlbmRlcmVyLmVmZmVjdGl2ZU92ZXJmbG93WCgpOwogICAg
IE92ZXJmbG93IG92ZXJmbG93WSA9IHJlbmRlcmVyLmVmZmVjdGl2ZU92ZXJmbG93WSgpOwogCisj
aWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKGlzPFJlbmRlclNWR1Jv
b3Q+KHJlbmRlcmVyKSkgeworICAgICAgICAvLyBGSVhNRTogZXZhbHVhdGUgaWYgd2UgY2FuIGFs
bG93IG92ZXJmbG93IGZvciB0aGVzZSBjYXNlcyB0b28uCisgICAgICAgIC8vIE92ZXJmbG93IGlz
IGFsd2F5cyBoaWRkZW4gd2hlbiBzdGFuZC1hbG9uZSBTVkcgZG9jdW1lbnRzIGFyZSBlbWJlZGRl
ZC4KKyAgICAgICAgaWYgKGRvd25jYXN0PFJlbmRlclNWR1Jvb3Q+KHJlbmRlcmVyKS5pc0VtYmVk
ZGVkVGhyb3VnaEZyYW1lQ29udGFpbmluZ1NWR0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgIG92
ZXJmbG93WCA9IE92ZXJmbG93OjpIaWRkZW47CisgICAgICAgICAgICBvdmVyZmxvd1kgPSBPdmVy
Zmxvdzo6SGlkZGVuOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKICAgICBpZiAoaXM8TGVn
YWN5UmVuZGVyU1ZHUm9vdD4ocmVuZGVyZXIpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBldmFsdWF0
ZSBpZiB3ZSBjYW4gYWxsb3cgb3ZlcmZsb3cgZm9yIHRoZXNlIGNhc2VzIHRvby4KICAgICAgICAg
Ly8gT3ZlcmZsb3cgaXMgYWx3YXlzIGhpZGRlbiB3aGVuIHN0YW5kLWFsb25lIFNWRyBkb2N1bWVu
dHMgYXJlIGVtYmVkZGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
c0Jhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuY3BwCmluZGV4IDM5
ZTBhOWY1MDc5N2I4NGZhODRmNzlkNDk5MzAyYjM1NWE1MjE1NTcuLjQ0NjAxZjlkOTgxZTI1OGJm
Mzg2NDViYTg5MzNhY2M0YTU2YjY4NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3NCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5j
cHAKQEAgLTMwOCw2ICszMDgsMjkgQEAgdm9pZCBTZXR0aW5nc0Jhc2U6Om1vY2tDYXB0dXJlRGV2
aWNlc0VuYWJsZWRDaGFuZ2VkKCkKIAogI2VuZGlmCiAKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURf
U1ZHX0VOR0lORSkKKwordm9pZCBTZXR0aW5nc0Jhc2U6OmxheWVyQmFzZWRTVkdFbmdpbmVFbmFi
bGVkQ2hhbmdlZCgpCit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAg
IGZvciAoYXV0byogZnJhbWUgPSAmbV9wYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgeworICAgICAgICBhdXRvKiBkb2N1bWVudCA9
IGZyYW1lLT5kb2N1bWVudCgpOworICAgICAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgYXV0byogZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQtPmRv
Y3VtZW50RWxlbWVudCgpOworICAgICAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGRvY3VtZW50RWxlbWVudC0+aW52YWxpZGF0ZVN0eWxl
QW5kUmVuZGVyZXJzRm9yU3VidHJlZSgpOworICAgICAgICBkb2N1bWVudC0+c2NoZWR1bGVGdWxs
U3R5bGVSZWJ1aWxkKCk7CisgICAgfQorfQorCisjZW5kaWYKKwogdm9pZCBTZXR0aW5nc0Jhc2U6
OnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkKCkKIHsKICAgICBpZiAobV9wYWdlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmgKaW5kZXggZGY3YjhkNWY3MzllMGUwMWU3YTMxYWRiYThm
ZTFjNjRhNDE2MTYzNi4uNDBkZGI4YTdmN2FmODQ1ZDRiNjVlNjMwZmI3YWIyZTY1NGJhMWM5MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5oCkBAIC0xMzksNiArMTM5LDkgQEAgcHJvdGVj
dGVkOgogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgdm9pZCBtb2NrQ2FwdHVyZURldmlj
ZXNFbmFibGVkQ2hhbmdlZCgpOwogI2VuZGlmCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19F
TkdJTkUpCisgICAgdm9pZCBsYXllckJhc2VkU1ZHRW5naW5lRW5hYmxlZENoYW5nZWQoKTsKKyNl
bmRpZgogCiAgICAgUGFnZSogbV9wYWdlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmgKaW5kZXgg
ZDEwMWNmODZiMGQ0ODU4NjM1ZTViYjEwNDBiMjYyYjNiOTUzM2ZiNC4uYWQxYWM2OTQ1NjkzODcw
NWRkOTJiNTIwY2VlNzcyYzkzY2Q0ZGFkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtU3RhdGUuaApAQCAt
MTEzLDYgKzExMyw3IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UXVhZD4gbWFw
cGVkU2Vjb25kYXJ5UXVhZChib29sKiB3YXNDbGFtcGVkID0gbnVsbHB0cikgY29uc3Q7CiAKICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCogYWNjdW11bGF0ZWRUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtLmdldCgpOyB9CisgICAgVHJhbnNmb3JtRGlyZWN0
aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CiAKIHByaXZhdGU6
CiAgICAgdm9pZCB0cmFuc2xhdGVUcmFuc2Zvcm0oY29uc3QgTGF5b3V0U2l6ZSYpOwpAQCAtMTIw
LDcgKzEyMSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmbGF0dGVuV2l0aFRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGJvb2wqIHdhc0NsYW1wZWQpOwogICAgIHZvaWQgYXBw
bHlBY2N1bXVsYXRlZE9mZnNldCgpOwogICAgIAotICAgIFRyYW5zZm9ybURpcmVjdGlvbiBkaXJl
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQogICAgIFRyYW5zZm9ybURpcmVj
dGlvbiBpbnZlcnNlRGlyZWN0aW9uKCkgY29uc3Q7CiAKICAgICB2b2lkIG1hcFF1YWQoRmxvYXRR
dWFkJiwgVHJhbnNmb3JtRGlyZWN0aW9uLCBib29sKiBjbGFtcGVkID0gbnVsbHB0cikgY29uc3Q7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdlb21ldHJ5TWFwLmNwcAppbmRl
eCAyMjE4YzBjZDcwZGY1MjYxMTlmZmEyOTVlOGJjYjc3Nzk0NGNmODg2Li4zN2Y2MjRiMmVmYWY5
NmYyY2NlNjIxZjJiNTMyOWIzMGFkNjVhNWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJHZW9tZXRyeU1hcC5jcHAKQEAgLTE1Niw3ICsxNTYsNyBAQCBzdGF0aWMgYm9v
bCBjYW5NYXBCZXR3ZWVuUmVuZGVyZXJzVmlhTGF5ZXJzKGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QmIHJlbmRlcgogICAgICAgICBpZiAoY3VycmVudC0+aXNSZW5kZXJGcmFnbWVudGVkRmxv
dygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChjdXJyZW50LT5p
c1NWR1Jvb3QoKSkKKyAgICAgICAgaWYgKGN1cnJlbnQtPmlzTGVnYWN5U1ZHUm9vdCgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmIChjdXJyZW50ID09ICZhbmNlc3Rv
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGFjNmZlNWRi
NjJmYjFhMDdhNzJjNmM1YmYxYTY3ZDU5MTdjNjQ3ZjkuLjQ4Yzg2OGRjOTAzNDIxNTEyYmYxMmNh
N2VmOTAwODlkODM2NjQ0ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcApAQCAtMjIwNSw3ICsyMjA1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6YmVnaW5UcmFuc3Bh
cmVuY3lMYXllcnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclAKICAgICAg
ICAgY29udGV4dC5jbGlwKHBpeGVsU25hcHBlZENsaXBSZWN0KTsKIAogI2lmIEVOQUJMRShDU1Nf
Q09NUE9TSVRJTkcpCi0gICAgICAgIGJvb2wgdXNlc0NvbXBvc2l0ZU9wZXJhdGlvbiA9IGhhc0Js
ZW5kTW9kZSgpICYmICEocmVuZGVyZXIoKS5pc1NWR1Jvb3QoKSAmJiBwYXJlbnQoKSAmJiBwYXJl
bnQoKS0+aXNSZW5kZXJWaWV3TGF5ZXIoKSk7CisgICAgICAgIGJvb2wgdXNlc0NvbXBvc2l0ZU9w
ZXJhdGlvbiA9IGhhc0JsZW5kTW9kZSgpICYmICEocmVuZGVyZXIoKS5pc0xlZ2FjeVNWR1Jvb3Qo
KSAmJiBwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNSZW5kZXJWaWV3TGF5ZXIoKSk7CiAgICAgICAg
IGlmICh1c2VzQ29tcG9zaXRlT3BlcmF0aW9uKQogICAgICAgICAgICAgY29udGV4dC5zZXRDb21w
b3NpdGVPcGVyYXRpb24oY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKCkp
OwogI2VuZGlmCkBAIC01NTQxLDcgKzU1NDEsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVG
aWx0ZXJzQWZ0ZXJTdHlsZUNoYW5nZSgpCiAKICAgICAvLyBBZGQgdGhlIGZpbHRlciBhcyBhIGNs
aWVudCB0byB0aGlzIHJlbmRlcmVyLCB1bmxlc3Mgd2UgYXJlIGEgUmVuZGVyTGF5ZXIgYWNjb21t
b2RhdGluZwogICAgIC8vIGFuIFNWRy4gSW4gdGhhdCBjYXNlIGl0IHRha2VzIGNhcmUgb2YgaXRz
IG93biByZXNvdXJjZSBtYW5hZ2VtZW50IGZvciBmaWx0ZXJzLgotICAgIGlmIChyZW5kZXJlcigp
LnN0eWxlKCkuZmlsdGVyKCkuaGFzUmVmZXJlbmNlRmlsdGVyKCkgJiYgIXJlbmRlcmVyKCkuaXNT
VkdSb290KCkpIHsKKyAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLmZpbHRlcigpLmhhc1JlZmVy
ZW5jZUZpbHRlcigpICYmICFyZW5kZXJlcigpLmlzU1ZHUm9vdE9yTGVnYWN5U1ZHUm9vdCgpKSB7
CiAgICAgICAgIGVuc3VyZUxheWVyRmlsdGVycygpOwogICAgICAgICBtX2ZpbHRlcnMtPnVwZGF0
ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMocmVuZGVyZXIoKS5zdHlsZSgpLmZpbHRlcigpKTsKICAg
ICB9IGVsc2UgaWYgKG1fZmlsdGVycykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmgKaW5kZXggZWI5NjdiNTM5ZDAyYzYwZmI0MTVkZDgzYmYyNjM3MzNhZTExM2NlNi4uYmQ2ZDM4
MTY3NGJjNDI1N2Y4MTVhNzY3NDA0Y2E4NDdkMzU1ZGUwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmgKQEAgLTYwMCw3ICs2MDAsNyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICAvLyBGSVhNRTogVGhpcyByZWFsbHkgbmVlZHMgdG8ga25vdyBpZiB0aGVyZSBhcmUgdHJh
bnNmb3JtcyBvbiB0aGlzIGxheWVyIGFuZCBhbnkgb2YgdGhlIGxheWVycwogICAgICAgICAvLyBi
ZXR3ZWVuIGl0IGFuZCB0aGUgYW5jZXN0b3IgaW4gcXVlc3Rpb24uCi0gICAgICAgIHJldHVybiAh
cmVuZGVyZXIoKS5oYXNUcmFuc2Zvcm0oKSAmJiAhcmVuZGVyZXIoKS5pc1NWR1Jvb3QoKTsKKyAg
ICAgICAgcmV0dXJuICFyZW5kZXJlcigpLmhhc1RyYW5zZm9ybSgpICYmICFyZW5kZXJlcigpLmlz
U1ZHUm9vdE9yTGVnYWN5U1ZHUm9vdCgpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBhZGp1c3RG
b3JDb2x1bW5zIGFsbG93cyB1cyB0byBwb3NpdGlvbiBjb21wb3NpdGluZyBsYXllcnMgaW4gY29s
dW1ucyBjb3JyZWN0bHksIGJ1dCBldmVudHVhbGx5IHRoZXkgbmVlZCB0byBiZSBzcGxpdCBhY3Jv
c3MgY29sdW1ucyB0b28uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CmluZGV4IDE2ODNmODVjODc2ZmNlOWYyMzUyYWE3ZGE2MmFmNWY1MTY5MTNhYjIuLjQ3ZjdjM2Ez
MDg1OTE0OGJjMzQ4ZTExMGNlYzg1MmJmMWZmNmViYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC01MDgsNyArNTA4LDcgQEAgc3RhdGljIGlubGluZSBi
b29sIG9iamVjdElzUmVsYXlvdXRCb3VuZGFyeShjb25zdCBSZW5kZXJFbGVtZW50KiBvYmplY3Qp
CiAgICAgaWYgKHNob3VsZEFwcGx5TGF5b3V0Q29udGFpbm1lbnQoKm9iamVjdCkgJiYgc2hvdWxk
QXBwbHlTaXplQ29udGFpbm1lbnQoKm9iamVjdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0g
ICAgaWYgKG9iamVjdC0+aXNTVkdSb290KCkpCisgICAgaWYgKG9iamVjdC0+aXNTVkdSb290T3JM
ZWdhY3lTVkdSb290KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKCFvYmplY3Qt
Pmhhc05vblZpc2libGVPdmVyZmxvdygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oCmluZGV4IGQ0OTk4Nzg3MmVmMzQxMDNhYzBlODI0ZDcxZjM5NGM2ZWJjZTk3ZDMuLjhl
YmNmMjk0ZmI2N2E0NWIyZjQ3MGY5ZjdmZDFiNzE2NWI2MmU0YTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTMyNiw2ICszMjYsNyBAQCBwdWJsaWM6CiAgICAg
Ly8gdG8gYWRkIFNWRyByZW5kZXJlciBtZXRob2RzIHRvIFJlbmRlck9iamVjdCB3aXRoIGFuIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCBi
b29sIGlzUmVuZGVyU1ZHTW9kZWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBpc1JlbmRlclNWR0Jsb2NrKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH07
CisgICAgdmlydHVhbCBib29sIGlzTGVnYWN5U1ZHUm9vdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHUm9vdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgdmlydHVhbCBib29sIGlzU1ZHQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KQEAgLTM0NSw2ICszNDYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIGlzU1ZHUmVzb3VyY2VGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBpc1NWR1Jlc291cmNlQ2xpcHBlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNTVkdSb290T3JMZWdhY3lTVkdSb290KCkg
Y29uc3QgeyByZXR1cm4gaXNTVkdSb290KCkgfHwgaXNMZWdhY3lTVkdSb290KCk7IH0KIAogICAg
IC8vIEZJWE1FOiBUaG9zZSBiZWxvbmcgaW50byBhIFNWRyBzcGVjaWZpYyBiYXNlLWNsYXNzIGZv
ciBhbGwgcmVuZGVyZXJzIChzZWUgYWJvdmUpCiAgICAgLy8gVW5mb3J0dW5hdGVseSB3ZSBkb24n
dCBoYXZlIHN1Y2ggYSBjbGFzcyB5ZXQsIGJlY2F1c2UgaXQncyBub3QgcG9zc2libGUgZm9yIGFs
bCByZW5kZXJlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJS
ZXBsYWNlZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3Bw
CmluZGV4IDYwZTVkZjVhMGYyNTc3MWYxMzEyNzJiN2E1NzAzZTc3MmIwMmY3NTguLmU5ZjExZmQ0
YTE4MTNhOTQyYzhiYmYwNGYwYmMzYWIzN2UwYzgwZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcApAQCAtNTQ0LDcgKzU0NCw3IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBoYXNJbnRyaW5zaWNTaXplKFJlbmRlckJveCpjb250ZW50UmVuZGVyZXIsIGJvb2wg
aGFzSW50cmluc2ljCiAgICAgaWYgKGhhc0ludHJpbnNpY1dpZHRoICYmIGhhc0ludHJpbnNpY0hl
aWdodCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGhhc0ludHJpbnNpY1dpZHRoIHx8
IGhhc0ludHJpbnNpY0hlaWdodCkKLSAgICAgICAgcmV0dXJuIGNvbnRlbnRSZW5kZXJlciAmJiBj
b250ZW50UmVuZGVyZXItPmlzU1ZHUm9vdCgpOworICAgICAgICByZXR1cm4gY29udGVudFJlbmRl
cmVyICYmIGNvbnRlbnRSZW5kZXJlci0+aXNTVkdSb290T3JMZWdhY3lTVkdSb290KCk7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHAKaW5kZXggYjkwZjFiNjVkOTZjODlhN2MxOTczMWNiNDdmYTk3NTQxMGI5MDdm
Mi4uNmI2OGRlZmFkZjEzYzE5MDliMWUyNzUyZjg0ZDU5ZmM4NWY4ZGQyNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNjMsNiArNjMsNyBA
QAogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdQ
YXRoLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUg
IlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTU3Myw2ICs1
NzQsMTIgQEAgdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBv
LCBPcHRpb25TZXQ8UmVuZGVyQXNUZXh0RmxhZz4gYmUKICAgICAgICAgd3JpdGVTVkdDb250YWlu
ZXIodHMsIGRvd25jYXN0PFJlbmRlclNWR0NvbnRhaW5lcj4obyksIGJlaGF2aW9yKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAg
ICBpZiAoaXM8UmVuZGVyU1ZHUm9vdD4obykpIHsKKyAgICAgICAgd3JpdGUodHMsIGRvd25jYXN0
PFJlbmRlclNWR1Jvb3Q+KG8pLCBiZWhhdmlvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYKICAgICBpZiAoaXM8TGVnYWN5UmVuZGVyU1ZHUm9vdD4obykpIHsKICAgICAgICAgd3Jp
dGUodHMsIGRvd25jYXN0PExlZ2FjeVJlbmRlclNWR1Jvb3Q+KG8pLCBiZWhhdmlvcik7CiAgICAg
ICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAppbmRleCA2
M2UxZGM5Zjg1NjRkOTRjNGI5NDE0ZTliZjg1N2IwYTdkNGQwMThlLi4xNGU0ZjE1MWU5NzQ5MWNi
ZmVkNzU1MDI4ZTQ1ZmZmNzIyYTUxY2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clZpZXcuY3BwCkBAIC0xNjksNyArMTY5LDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpsYXlvdXQoKQog
ICAgICAgICAgICAgICAgIHx8IGJveC5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKS5pc1BlcmNlbnRP
ckNhbGN1bGF0ZWQoKQogICAgICAgICAgICAgICAgIHx8IGJveC5zdHlsZSgpLmxvZ2ljYWxNaW5I
ZWlnaHQoKS5pc1BlcmNlbnRPckNhbGN1bGF0ZWQoKQogICAgICAgICAgICAgICAgIHx8IGJveC5z
dHlsZSgpLmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1BlcmNlbnRPckNhbGN1bGF0ZWQoKQotICAgICAg
ICAgICAgICAgIHx8IGJveC5pc1NWR1Jvb3QoKQorICAgICAgICAgICAgICAgIHx8IGJveC5pc1NW
R1Jvb3RPckxlZ2FjeVNWR1Jvb3QoKQogICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAg
ICBib3guc2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwogICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL0xlZ2FjeVJlbmRlclNWR1Jvb3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvTGVnYWN5UmVuZGVyU1ZHUm9vdC5oCmlu
ZGV4IDIwODZhNTZhOTBjMmQ4ZTg0MjE4NTIyZjZhZjhlODVhNmQ5MmM0MDMuLmE2NGI3YmE0Y2Jm
MGVhNzM1OTg3MTk3NzNkZTRiNGQzZDNiYjliZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvTGVnYWN5UmVuZGVyU1ZHUm9vdC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvTGVnYWN5UmVuZGVyU1ZHUm9vdC5oCkBAIC02Niw3ICs2Niw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBlbGVtZW50KCkgY29uc3QgPSBkZWxldGU7CiAKLSAg
ICBib29sIGlzU1ZHUm9vdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBi
b29sIGlzTGVnYWN5U1ZHUm9vdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAog
ICAgIC8vIEludGVudGlhbGx5IGxlZnQgJ1JlbmRlclNWR1Jvb3QnIGluc3RlYWQgb2YgJ0xlZ2Fj
eVJlbmRlclNWR1Jvb3QnLCB0byBhdm9pZCBicmVha2luZyBsYXlvdXQgdGVzdHMuCiAgICAgY29u
c3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJSZW5kZXJTVkdS
b290IjsgfQpAQCAtMTIzLDQgKzEyMyw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKExlZ2FjeVJlbmRl
clNWR1Jvb3QsIGlzU1ZHUm9vdCgpKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JK
RUNUKExlZ2FjeVJlbmRlclNWR1Jvb3QsIGlzTGVnYWN5U1ZHUm9vdCgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAppbmRl
eCBkMGRjMzg1ODMyYTU0MGQ4ZWE4YjFlZjdiMTZlZDZlNTkzYzE3MDViLi5hNGY1NWU2MjY5NDI1
MDVhMmY4MDY1NWE3OWYwNDc1ZmVlYjBlNzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcApAQCAtMzEsOCArMzEsMTEg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5o
IgogCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyTW9kZWxPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTVkdFbGVt
ZW50SW5saW5lcy5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUmVzb3Vy
Y2VzQ2FjaGUuaCIKQEAgLTQ4LDggKzUxLDE4IEBAIFJlbmRlclNWR01vZGVsT2JqZWN0OjpSZW5k
ZXJTVkdNb2RlbE9iamVjdChTVkdFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0CiB7
CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNsaXBwZWRPdmVyZmxvd1Jl
Y3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgVmlzaWJs
ZVJlY3RDb250ZXh0KSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2xp
cHBlZE92ZXJmbG93UmVjdChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29u
dGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQgY29udGV4dCkgY29uc3QKIHsKKyNpZiBFTkFCTEUo
TEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmxh
eWVyQmFzZWRTVkdFbmdpbmVFbmFibGVkKCkpIHsKKyAgICAgICAgaWYgKHN0eWxlKCkudmlzaWJp
bGl0eSgpICE9IFZpc2liaWxpdHk6OlZpc2libGUgJiYgIWVuY2xvc2luZ0xheWVyKCktPmhhc1Zp
c2libGVDb250ZW50KCkpCisgICAgICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworCisgICAg
ICAgIEFTU0VSVCghdmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc1BhaW50T2Zm
c2V0Q2FjaGVFbmFibGVkKCkpOworICAgICAgICByZXR1cm4gY29tcHV0ZVJlY3QodmlzdWFsT3Zl
cmZsb3dSZWN0RXF1aXZhbGVudCgpLCByZXBhaW50Q29udGFpbmVyLCBjb250ZXh0KTsKKyAgICB9
CisjZW5kaWYKKwogICAgIHJldHVybiBTVkdSZW5kZXJTdXBwb3J0OjpjbGlwcGVkT3ZlcmZsb3dS
ZWN0Rm9yUmVwYWludCgqdGhpcywgcmVwYWludENvbnRhaW5lcik7CiB9CiAKQEAgLTExMSw2ICsx
MjQsMTQgQEAgdm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVE
aWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWwKIAogYm9vbCBSZW5kZXJTVkdNb2RlbE9i
amVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBIaXRUZXN0QWN0aW9u
KQogeworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChkb2N1bWVu
dCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkgeworICAgICAgICAv
LyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFJlbmRlclNWR01vZGVsT2JqZWN0IGluaGVyaXRhbmNl
IGNoYW5nZXMgKHNob3VsZCBpbmhlcml0IGZyb20gUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCkuCisg
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisj
ZW5kaWYKKwogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxP
YmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QuaAppbmRleCA5YjAxZjkxZjkzZDgzN2Y2MjU3YTFiMjhlMzMyZjgxZTFjMjk5NmQ4Li4xYTYy
YTJjOGE0Y2JhYjE5MDFkY2Y3NGQ3NDViMDJmMjA2YWZiOWExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCkBAIC02Miw2ICs2
MiwxMCBAQCBwdWJsaWM6CiAKICAgICBTVkdFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gZG93bmNhc3Q8U1ZHRWxlbWVudD4obm9kZUZvck5vbkFub255bW91cygpKTsgfQogCisgICAg
Ly8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uCisgICAg
Ly8gTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1
cm4gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVZpc3VhbE92ZXJmbG93UmVjdCgq
dGhpcyk7IH0KKyAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxlbnQoKSBj
b25zdCB7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0KKwogcHJvdGVjdGVkOgogICAgIFJlbmRlclNW
R01vZGVsT2JqZWN0KFNWR0VsZW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAppbmRleCAyYTI1
N2Y1YzIzOTg4OTVmZWRmMGFhYjJkNDM4YjdiMzU4NzY4YWI3Li5kOGJmYWE3MjEyYTgwZGM3NmYz
ZmZkYzljNDhiNTY4MTZjN2I0ZWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKKyNpbmNs
dWRlICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUg
IlNWR1Jlc291cmNlRWxlbWVudENsaWVudC5oIgogI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgpA
QCAtMjAyLDYgKzIwMywxMCBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0
QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24oUmVuZGVyT2JqZWN0JgogICAgICAgICAvLyBp
bnZhbGlkYXRlIHRoZSBhbmNlc3RvciByZW5kZXJlciBiZWNhdXNlIGl0IG1heSBoYXZlIGZpbmlz
aGVkIGl0cyBsYXlvdXQgYWxyZWFkeS4KICAgICAgICAgaWYgKGlzPExlZ2FjeVJlbmRlclNWR1Jv
b3Q+KG9iamVjdCkgJiYgZG93bmNhc3Q8TGVnYWN5UmVuZGVyU1ZHUm9vdD4ob2JqZWN0KS5pc0lu
TGF5b3V0KCkpCiAgICAgICAgICAgICBvYmplY3Quc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlz
KTsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICAgICAgZWxzZSBpZiAo
aXM8UmVuZGVyU1ZHUm9vdD4ob2JqZWN0KSAmJiBkb3duY2FzdDxSZW5kZXJTVkdSb290PihvYmpl
Y3QpLmlzSW5MYXlvdXQoKSkKKyAgICAgICAgICAgIG9iamVjdC5zZXROZWVkc0xheW91dChNYXJr
T25seVRoaXMpOworI2VuZGlmCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG9iamVjdC5zZXRO
ZWVkc0xheW91dChNYXJrQ29udGFpbmluZ0Jsb2NrQ2hhaW4pOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjMDJl
NmZiYTgwODYyYzVjZGQ5MjZmOTkwZmRiNzY3MmZkYTFiNjcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCkBAIC0wLDAgKzEs
Njg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA3LCAyMDA4LCAyMDA5IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCwg
MjAyMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZH
Um9vdC5oIgorCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCisjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJGcmFn
bWVudGVkRmxvdy5oIgorI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgorI2luY2x1ZGUgIlJlbmRl
ckl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHRm9yZWlnbk9i
amVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
ci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlQnVp
bGRlci5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKy8vIEZJWE1FOiBbTEJTRV0gVXBzdHJl
YW0gU1ZHQ29udGFpbmVyTGF5b3V0CisvLyAjaW5jbHVkZSAiU1ZHQ29udGFpbmVyTGF5b3V0Lmgi
CisjaW5jbHVkZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgiCisjaW5jbHVkZSAiU1ZHSW1hZ2Uu
aCIKKy8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHTGF5b3V0TG9nZ2VyCisvLyAjaW5jbHVk
ZSAiU1ZHTGF5b3V0TG9nZ2VyLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgor
I2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmgi
CisjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1ZpZXdTcGVjLmgiCisj
aW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5l
cy5oPgorI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgorI2luY2x1ZGUgPHd0Zi9TdGFja1N0
YXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9J
TVBMKFJlbmRlclNWR1Jvb3QpOworCitSZW5kZXJTVkdSb290OjpSZW5kZXJTVkdSb290KFNWR1NW
R0VsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCisgICAgOiBSZW5kZXJSZXBs
YWNlZChlbGVtZW50LCBXVEZNb3ZlKHN0eWxlKSkKK3sKK30KKworUmVuZGVyU1ZHUm9vdDo6flJl
bmRlclNWR1Jvb3QoKSA9IGRlZmF1bHQ7CisKK1NWR1NWR0VsZW1lbnQmIFJlbmRlclNWR1Jvb3Q6
OnN2Z1NWR0VsZW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBkb3duY2FzdDxTVkdTVkdFbGVt
ZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6OmNv
bXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9uKEZsb2F0U2l6ZSYgaW50cmluc2ljU2l6ZSwg
ZG91YmxlJiBpbnRyaW5zaWNSYXRpbykgY29uc3QKK3sKKyAgICBBU1NFUlQoIXNob3VsZEFwcGx5
U2l6ZUNvbnRhaW5tZW50KCp0aGlzKSk7CisKKyAgICAvLyBTcGVjOiBodHRwOi8vd3d3LnczLm9y
Zy9UUi9TVkcvY29vcmRzLmh0bWwjSW50cmluc2ljU2l6aW5nCisgICAgLy8gU1ZHIG5lZWRzIHRv
IHNwZWNpZnkgaG93IHRvIGNhbGN1bGF0ZSBzb21lIGludHJpbnNpYyBzaXppbmcgcHJvcGVydGll
cyB0byBlbmFibGUgaW5jbHVzaW9uIHdpdGhpbiBvdGhlciBsYW5ndWFnZXMuCisKKyAgICAvLyBU
aGUgaW50cmluc2ljIGFzcGVjdCByYXRpbyBvZiB0aGUgdmlld3BvcnQgb2YgU1ZHIGNvbnRlbnQg
aXMgbmVjZXNzYXJ5IGZvciBleGFtcGxlLCB3aGVuIGluY2x1ZGluZyBTVkcgZnJvbSBhbiDigJhv
YmplY3TigJkKKyAgICAvLyBlbGVtZW50IGluIEhUTUwgc3R5bGVkIHdpdGggQ1NTLiBJdCBpcyBw
b3NzaWJsZSAoaW5kZWVkLCBjb21tb24pIGZvciBhbiBTVkcgZ3JhcGhpYyB0byBoYXZlIGFuIGlu
dHJpbnNpYyBhc3BlY3QgcmF0aW8gYnV0CisgICAgLy8gbm90IHRvIGhhdmUgYW4gaW50cmluc2lj
IHdpZHRoIG9yIGhlaWdodC4gVGhlIGludHJpbnNpYyBhc3BlY3QgcmF0aW8gbXVzdCBiZSBjYWxj
dWxhdGVkIGJhc2VkIHVwb24gdGhlIGZvbGxvd2luZyBydWxlczoKKyAgICAvLyAtIFRoZSBhc3Bl
Y3QgcmF0aW8gaXMgY2FsY3VsYXRlZCBieSBkaXZpZGluZyBhIHdpZHRoIGJ5IGEgaGVpZ2h0Lgor
ICAgIC8vIC0gSWYgdGhlIOKAmHdpZHRo4oCZIGFuZCDigJhoZWlnaHTigJkgb2YgdGhlIHJvb3Rt
b3N0IOKAmHN2Z+KAmSBlbGVtZW50IGFyZSBib3RoIHNwZWNpZmllZCB3aXRoIHVuaXQgaWRlbnRp
ZmllcnMgKGluLCBtbSwgY20sIHB0LCBwYywKKyAgICAvLyAgIHB4LCBlbSwgZXgpIG9yIGluIHVz
ZXIgdW5pdHMsIHRoZW4gdGhlIGFzcGVjdCByYXRpbyBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIOKA
mHdpZHRo4oCZIGFuZCDigJhoZWlnaHTigJkgYXR0cmlidXRlcyBhZnRlcgorICAgIC8vICAgcmVz
b2x2aW5nIGJvdGggdmFsdWVzIHRvIHVzZXIgdW5pdHMuCisgICAgaW50cmluc2ljU2l6ZS5oYXNJ
bnRyaW5zaWNXaWR0aCA9IHN2Z1NWR0VsZW1lbnQoKS5oYXNJbnRyaW5zaWNXaWR0aCgpOworICAg
IGludHJpbnNpY1NpemUuaGFzSW50cmluc2ljSGVpZ2h0ID0gc3ZnU1ZHRWxlbWVudCgpLmhhc0lu
dHJpbnNpY0hlaWdodCgpOworICAgIGludHJpbnNpY1NpemUuc2V0V2lkdGgoZmxvYXRWYWx1ZUZv
ckxlbmd0aChzdmdTVkdFbGVtZW50KCkuaW50cmluc2ljV2lkdGgoKSwgMCkpOworICAgIGludHJp
bnNpY1NpemUuc2V0SGVpZ2h0KGZsb2F0VmFsdWVGb3JMZW5ndGgoc3ZnU1ZHRWxlbWVudCgpLmlu
dHJpbnNpY0hlaWdodCgpLCAwKSk7CisKKyAgICBpZiAoc3R5bGUoKS5hc3BlY3RSYXRpb1R5cGUo
KSA9PSBBc3BlY3RSYXRpb1R5cGU6OlJhdGlvKSB7CisgICAgICAgIGludHJpbnNpY1JhdGlvID0g
c3R5bGUoKS5sb2dpY2FsQXNwZWN0UmF0aW8oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBpbnRyaW5zaWNSYXRpb1ZhbHVlOworICAgIGlmICgh
aW50cmluc2ljU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIGludHJpbnNpY1JhdGlvVmFsdWUgPSBp
bnRyaW5zaWNTaXplLndpZHRoKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGludHJpbnNpY1NpemUu
aGVpZ2h0KCkpOworICAgIGVsc2UgeworICAgICAgICAvLyAtIElmIGVpdGhlci9ib3RoIG9mIHRo
ZSDigJh3aWR0aOKAmSBhbmQg4oCYaGVpZ2h04oCZIG9mIHRoZSByb290bW9zdCDigJhzdmfigJkg
ZWxlbWVudCBhcmUgaW4gcGVyY2VudGFnZSB1bml0cyAob3Igb21pdHRlZCksIHRoZQorICAgICAg
ICAvLyAgIGFzcGVjdCByYXRpbyBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIHdpZHRoIGFuZCBoZWln
aHQgdmFsdWVzIG9mIHRoZSDigJh2aWV3Qm944oCZIHNwZWNpZmllZCBmb3IgdGhlIGN1cnJlbnQg
U1ZHIGRvY3VtZW50CisgICAgICAgIC8vICAgZnJhZ21lbnQuIElmIHRoZSDigJh2aWV3Qm944oCZ
IGlzIG5vdCBjb3JyZWN0bHkgc3BlY2lmaWVkLCBvciBzZXQgdG8gJ25vbmUnLCB0aGUgaW50cmlu
c2ljIGFzcGVjdCByYXRpbyBjYW5ub3QgYmUKKyAgICAgICAgLy8gICBjYWxjdWxhdGVkIGFuZCBp
cyBjb25zaWRlcmVkIHVuc3BlY2lmaWVkLgorICAgICAgICBGbG9hdFNpemUgdmlld0JveFNpemUg
PSBzdmdTVkdFbGVtZW50KCkudmlld0JveCgpLnNpemUoKTsKKyAgICAgICAgaWYgKCF2aWV3Qm94
U2l6ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSB2aWV3Qm94IGNhbiBvbmx5IHlp
ZWxkIGFuIGludHJpbnNpYyByYXRpbywgbm90IGFuIGludHJpbnNpYyBzaXplLgorICAgICAgICAg
ICAgaW50cmluc2ljUmF0aW9WYWx1ZSA9IHZpZXdCb3hTaXplLndpZHRoKCkgLyBzdGF0aWNfY2Fz
dDxkb3VibGU+KHZpZXdCb3hTaXplLmhlaWdodCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChpbnRyaW5zaWNSYXRpb1ZhbHVlKQorICAgICAgICBpbnRyaW5zaWNSYXRpbyA9ICppbnRy
aW5zaWNSYXRpb1ZhbHVlOworICAgIGVsc2UgaWYgKHN0eWxlKCkuYXNwZWN0UmF0aW9UeXBlKCkg
PT0gQXNwZWN0UmF0aW9UeXBlOjpBdXRvQW5kUmF0aW8pCisgICAgICAgIGludHJpbnNpY1JhdGlv
ID0gc3R5bGUoKS5sb2dpY2FsQXNwZWN0UmF0aW8oKTsKK30KKworYm9vbCBSZW5kZXJTVkdSb290
Ojppc0VtYmVkZGVkVGhyb3VnaFNWR0ltYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNJblNW
R0ltYWdlKCZzdmdTVkdFbGVtZW50KCkpOworfQorCitib29sIFJlbmRlclNWR1Jvb3Q6OmlzRW1i
ZWRkZWRUaHJvdWdoRnJhbWVDb250YWluaW5nU1ZHRG9jdW1lbnQoKSBjb25zdAoreworICAgIC8v
IElmIG91ciBmcmFtZSBoYXMgYW4gb3duZXIgcmVuZGVyZXIsIHdlJ3JlIGVtYmVkZGVkIHRocm91
Z2ggZWcuIG9iamVjdC9lbWJlZC9pZnJhbWUsCisgICAgLy8gYnV0IHdlIG9ubHkgbmVnb3RpYXRl
IGlmIHdlJ3JlIGluIGFuIFNWRyBkb2N1bWVudCBpbnNpZGUgb2JqZWN0L2VtYmVkLCBub3QgaWZy
YW1lLgorICAgIGlmICghZnJhbWUoKS5vd25lclJlbmRlcmVyKCkgfHwgIWZyYW1lKCkub3duZXJS
ZW5kZXJlcigpLT5pc0VtYmVkZGVkT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gZnJhbWUoKS5kb2N1bWVudCgpLT5pc1NWR0RvY3VtZW50KCk7Cit9CisKK0xheW91
dFVuaXQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKFNob3VsZENv
bXB1dGVQcmVmZXJyZWQgc2hvdWxkQ29tcHV0ZVByZWZlcnJlZCkgY29uc3QKK3sKKyAgICAvLyBX
aGVuIHdlJ3JlIGVtYmVkZGVkIHRocm91Z2ggU1ZHSW1hZ2UgKGJvcmRlci1pbWFnZS9iYWNrZ3Jv
dW5kLWltYWdlLzxodG1sOmltZz4vLi4uKSB3ZSdyZSBmb3JjZWQgdG8gcmVzaXplIHRvIGEgc3Bl
Y2lmaWMgc2l6ZS4KKyAgICBpZiAoIW1fY29udGFpbmVyU2l6ZS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBtX2NvbnRhaW5lclNpemUud2lkdGgoKTsKKworICAgIC8vIFNWRyB2aWEgPG9iamVj
dD4KKyAgICBpZiAoaXNFbWJlZGRlZFRocm91Z2hGcmFtZUNvbnRhaW5pbmdTVkdEb2N1bWVudCgp
KQorICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJsZUxvZ2ljYWxXaWR0
aCgpOworCisgICAgLy8gU1ZHIGVtYmVkZGVkIHZpYSBTVkdJbWFnZSAoYmFja2dyb3VuZC1pbWFn
ZS9ib3JkZXItaW1hZ2UvZXRjKSAvIElubGluZSBTVkcuCisgICAgcmV0dXJuIFJlbmRlclJlcGxh
Y2VkOjpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoc2hvdWxkQ29tcHV0ZVByZWZlcnJlZCk7
Cit9CisKK0xheW91dFVuaXQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhl
aWdodChzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGVzdGltYXRlZFVzZWRXaWR0aCkgY29uc3QK
K3sKKyAgICAvLyBXaGVuIHdlJ3JlIGVtYmVkZGVkIHRocm91Z2ggU1ZHSW1hZ2UgKGJvcmRlci1p
bWFnZS9iYWNrZ3JvdW5kLWltYWdlLzxodG1sOmltZz4vLi4uKSB3ZSdyZSBmb3JjZWQgdG8gcmVz
aXplIHRvIGEgc3BlY2lmaWMgc2l6ZS4KKyAgICBpZiAoIW1fY29udGFpbmVyU2l6ZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBtX2NvbnRhaW5lclNpemUuaGVpZ2h0KCk7CisKKyAgICAvLyBT
VkcgdmlhIDxvYmplY3Q+CisgICAgaWYgKGlzRW1iZWRkZWRUaHJvdWdoRnJhbWVDb250YWluaW5n
U1ZHRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jaygpLT5hdmFpbGFi
bGVMb2dpY2FsSGVpZ2h0KEluY2x1ZGVNYXJnaW5Cb3JkZXJQYWRkaW5nKTsKKworICAgIC8vIFN0
YW5kYWxvbmUgU1ZHIC8gU1ZHIGVtYmVkZGVkIHZpYSBTVkdJbWFnZSAoYmFja2dyb3VuZC1pbWFn
ZS9ib3JkZXItaW1hZ2UvZXRjKSAvIElubGluZSBTVkcuCisgICAgcmV0dXJuIFJlbmRlclJlcGxh
Y2VkOjpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KGVzdGltYXRlZFVzZWRXaWR0aCk7Cit9
CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6bGF5b3V0KCkKK3sKKyNpZiAhZGVmaW5lZChOREVCVUcp
CisgICAgLyogRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdMb2dnZXIKKyAgICBTVkdMb2dnZXI6
OkRlYnVnU2NvcGUgZGVidWdTY29wZSgKKyAgICAgICAgWyZdKFRleHRTdHJlYW0mIHN0cmVhbSkg
eworICAgICAgICAgICAgc3RyZWFtIDw8IHJlbmRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAi
IC0+IGJlZ2luIGxheW91dCIKKyAgICAgICAgICAgIDw8ICIgKHNlbGZOZWVkc0xheW91dD0iIDw8
IHNlbGZOZWVkc0xheW91dCgpCisgICAgICAgICAgICA8PCAiLCBuZWVkc0xheW91dD0iIDw8IG5l
ZWRzTGF5b3V0KCkgPDwgIikiOworICAgICAgICB9LAorICAgICAgICBbJl0oVGV4dFN0cmVhbSYg
c3RyZWFtKSB7CisgICAgICAgICAgICBzdHJlYW0gPDwgcmVuZGVyTmFtZSgpIDw8ICIgIiA8PCB0
aGlzIDw8ICIgPC0gZW5kIGxheW91dCI7CisgICAgICAgIH0sCisgICAgICAgIFsmXSgpIHsKKyAg
ICAgICAgICAgIHNob3dTVkdSZW5kZXJUcmVlRm9yVGhpcygpOworICAgICAgICAgICAgLy8gRklY
TUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdDb250YWluZXJMYXlvdXQKKyAgICAgICAgICAgIC8vIFNW
R0NvbnRhaW5lckxheW91dDo6dmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeSgqdGhpcyk7
CisgICAgICAgIH0pOworICAgICovCisjZW5kaWYKKworICAgIFNldEZvclNjb3BlPGJvb2w+IGNo
YW5nZShtX2luTGF5b3V0LCB0cnVlKTsKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50
IGxheW91dENoZWNrUG9pbnQ7CisgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOworCisgICAgbV9y
ZXNvdXJjZXNOZWVkaW5nVG9JbnZhbGlkYXRlQ2xpZW50cy5jbGVhcigpOworCisgICAgTGF5b3V0
U3RhdGVEaXNhYmxlciBsYXlvdXRTdGF0ZURpc2FibGVyKHZpZXcoKS5mcmFtZVZpZXcoKS5sYXlv
dXRDb250ZXh0KCkpOworICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNr
Rm9yUmVwYWludER1cmluZ0xheW91dCgpKTsKKyAgICB7CisgICAgICAgIGF1dG8gcHJldmlvdXNM
b2dpY2FsU2l6ZSA9IHNpemUoKTsKKyAgICAgICAgdXBkYXRlTG9naWNhbFdpZHRoKCk7CisgICAg
ICAgIHVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgbV9pc0xheW91dFNpemVDaGFuZ2Vk
ID0gc2VsZk5lZWRzTGF5b3V0KCkgfHwgKHN2Z1NWR0VsZW1lbnQoKS5oYXNSZWxhdGl2ZUxlbmd0
aHMoKSAmJiBwcmV2aW91c0xvZ2ljYWxTaXplICE9IHNpemUoKSk7CisKKyAgICAgICAgYXV0byBv
bGRUcmFuc2Zvcm0gPSBtX3N1cHBsZW1lbnRhbExvY2FsVG9QYXJlbnRUcmFuc2Zvcm07CisgICAg
ICAgIGNvbXB1dGVUcmFuc2Zvcm1hdGlvbk1hdHJpY2VzKCk7CisKKyAgICAgICAgaWYgKG9sZFRy
YW5zZm9ybSAhPSBtX3N1cHBsZW1lbnRhbExvY2FsVG9QYXJlbnRUcmFuc2Zvcm0pCisgICAgICAg
ICAgICBtX2RpZFRyYW5zZm9ybVRvUm9vdFVwZGF0ZSA9IHRydWU7CisgICAgICAgIGVsc2UgaWYg
KHByZXZpb3VzTG9naWNhbFNpemUgIT0gc2l6ZSgpKQorICAgICAgICAgICAgbV9kaWRUcmFuc2Zv
cm1Ub1Jvb3RVcGRhdGUgPSB0cnVlOworCisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJl
YW0gU1ZHTGVuZ3RoQ29udGV4dCBjaGFuZ2VzCisgICAgICAgIC8vIHN2Z1NWR0VsZW1lbnQoKS51
cGRhdGVMZW5ndGhDb250ZXh0KCk7CisKKyAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVh
bSBTVkdMYXllclRyYW5zZm9ybVVwZGF0ZXIKKyAgICAgICAgLy8gU1ZHTGF5ZXJUcmFuc2Zvcm1V
cGRhdGVyIHRyYW5zZm9ybVVwZGF0ZXIoKnRoaXMpOworICAgICAgICB1cGRhdGVMYXllckluZm9y
bWF0aW9uKCk7CisKKyAgICAgICAgLyogRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdDb250YWlu
ZXJMYXlvdXQgLyBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uCisgICAgICAgIHsKKyAgICAgICAg
ICAgIFNWR0NvbnRhaW5lckxheW91dCBjb250YWluZXJMYXlvdXQoKnRoaXMpOworICAgICAgICAg
ICAgY29udGFpbmVyTGF5b3V0LmxheW91dENoaWxkcmVuKHNlbGZOZWVkc0xheW91dCgpIHx8IFNW
R1JlbmRlclN1cHBvcnQ6OmZpbHRlcnNGb3JjZUNvbnRhaW5lckxheW91dCgqdGhpcykpOworCisg
ICAgICAgICAgICBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uIGJvdW5kaW5nQm94Q29tcHV0YXRp
b24oKnRoaXMpOworICAgICAgICAgICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IGJvdW5kaW5nQm94
Q29tcHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KFNWR0JvdW5kaW5nQm94Q29t
cHV0YXRpb246Om9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlvbik7CisgICAgICAgICAgICBtX3N0
cm9rZUJvdW5kaW5nQm94ID0gYm91bmRpbmdCb3hDb21wdXRhdGlvbi5jb21wdXRlRGVjb3JhdGVk
Qm91bmRpbmdCb3goU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6c3Ryb2tlQm91bmRpbmdCb3hE
ZWNvcmF0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAqLworCisgICAgICAgIC8vIEZJWE1FOiBb
TEJTRV0gVXBzdHJlYW0gU1ZHQ29udGFpbmVyTGF5b3V0IC0tIHJlbW92ZSBTVkdSZW5kZXJTdXBw
b3J0OjpsYXlvdXRDaGlsZHJlbi4KKyAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6bGF5b3V0Q2hp
bGRyZW4oKnRoaXMsIHNlbGZOZWVkc0xheW91dCgpKTsKKworICAgICAgICBpZiAoIW1fcmVzb3Vy
Y2VzTmVlZGluZ1RvSW52YWxpZGF0ZUNsaWVudHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAv
LyBJbnZhbGlkYXRlIHJlc291cmNlIGNsaWVudHMsIHdoaWNoIG1heSBtYXJrIHNvbWUgbm9kZXMg
Zm9yIGxheW91dC4KKyAgICAgICAgICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiAgbV9yZXNvdXJj
ZXNOZWVkaW5nVG9JbnZhbGlkYXRlQ2xpZW50cykgeworICAgICAgICAgICAgICAgIHJlc291cmNl
LT5yZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKCk7CisgICAgICAgICAgICAgICAgU1ZHUmVzb3Vy
Y2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZCgqcmVzb3VyY2UsIFN0eWxlRGlmZmVyZW5jZTo6
TGF5b3V0LCByZXNvdXJjZS0+c3R5bGUoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IG1faXNMYXlvdXRTaXplQ2hhbmdlZCA9IGZhbHNlOworCisgICAgICAgICAgICAvKiBGSVhNRTog
W0xCU0VdIFVwc3RyZWFtIFNWR0NvbnRhaW5lckxheW91dAorICAgICAgICAgICAgU1ZHQ29udGFp
bmVyTGF5b3V0IGNvbnRhaW5lckxheW91dCgqdGhpcyk7CisgICAgICAgICAgICBjb250YWluZXJM
YXlvdXQubGF5b3V0Q2hpbGRyZW4oZmFsc2UpOworICAgICAgICAgICAgKi8KKyAgICAgICAgfQor
ICAgIH0KKworICAgIG1faXNMYXlvdXRTaXplQ2hhbmdlZCA9IGZhbHNlOworICAgIG1fZGlkVHJh
bnNmb3JtVG9Sb290VXBkYXRlID0gZmFsc2U7CisKKyAgICBjbGVhck92ZXJmbG93KCk7CisgICAg
aWYgKCFzaG91bGRBcHBseVZpZXdwb3J0Q2xpcCgpKSB7CisgICAgICAgIGF1dG8gdmlzdWFsT3Zl
cmZsb3dSZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChtX3ZpZXdCb3hUcmFuc2Zvcm0ubWFwUmVj
dCh2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkpKTsKKyAgICAgICAgYWRkVmlzdWFsT3Zl
cmZsb3codmlzdWFsT3ZlcmZsb3dSZWN0KTsKKyAgICAgICAgYWRkVmlzdWFsRWZmZWN0T3ZlcmZs
b3coKTsKKyAgICB9CisgICAgaW52YWxpZGF0ZUJhY2tncm91bmRPYnNjdXJhdGlvblN0YXR1cygp
OworCisgICAgbV9oYXNCb3hEZWNvcmF0aW9ucyA9IGlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIo
KSA/IGhhc1Zpc2libGVCb3hEZWNvcmF0aW9uU3R5bGUoKSA6IGhhc1Zpc2libGVCb3hEZWNvcmF0
aW9ucygpOworICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKKworICAgIGNsZWFy
TmVlZHNMYXlvdXQoKTsKK30KKworYm9vbCBSZW5kZXJTVkdSb290OjpzaG91bGRBcHBseVZpZXdw
b3J0Q2xpcCgpIGNvbnN0Cit7CisgICAgLy8gdGhlIG91dGVybW9zdCBzdmcgaXMgY2xpcHBlZCBp
ZiBhdXRvLCBhbmQgc3ZnIGRvY3VtZW50IHJvb3RzIGFyZSBhbHdheXMgY2xpcHBlZAorICAgIC8v
IFdoZW4gdGhlIHN2ZyBpcyBzdGFuZC1hbG9uZSAoaXNEb2N1bWVudEVsZW1lbnQoKSA9PSB0cnVl
KSB0aGUgdmlld3BvcnQgY2xpcHBpbmcgc2hvdWxkIGFsd2F5cworICAgIC8vIGJlIGFwcGxpZWQs
IG5vdGluZyB0aGF0IHRoZSB3aW5kb3cgc2Nyb2xsYmFycyBzaG91bGQgYmUgaGlkZGVuIGlmIG92
ZXJmbG93PWhpZGRlbi4KKyAgICByZXR1cm4gc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxv
dzo6SGlkZGVuCisgICAgICAgIHx8IHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1
dG8KKyAgICAgICAgfHwgc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsCisg
ICAgICAgIHx8IHRoaXMtPmlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIoKTsKK30KKwordm9pZCBS
ZW5kZXJTVkdSb290OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2Zmc2V0KQoreworICAgIC8vIERvbid0IHBhaW50LCBpZiB0aGUgY29udGV4dCBl
eHBsaWNpdGx5IGRpc2FibGVkIGl0LgorICAgIGlmIChwYWludEluZm8uY29udGV4dCgpLnBhaW50
aW5nRGlzYWJsZWQoKSAmJiAhcGFpbnRJbmZvLmNvbnRleHQoKS5kZXRlY3RpbmdDb250ZW50ZnVs
UGFpbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgIWRlZmluZWQoTkRFQlVHKQorICAgIC8q
IEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHTG9nZ2VyCisgICAgU1ZHTG9nZ2VyOjpEZWJ1Z1Nj
b3BlIGRlYnVnU2NvcGUoCisgICAgICAgIFsmXShUZXh0U3RyZWFtJiBzdHJlYW0pIHsKKyAgICAg
ICAgICAgIHN0cmVhbSA8PCByZW5kZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiAtPiBiZWdp
biBwYWludCIKKyAgICAgICAgICAgIDw8ICIgKHBhaW50T2Zmc2V0PSIgPDwgcGFpbnRPZmZzZXQK
KyAgICAgICAgICAgIDw8ICIsIGxvY2F0aW9uPSIgPDwgbG9jYXRpb24oKQorICAgICAgICAgICAg
PDwgIiwgb2JqZWN0Qm91bmRpbmdCb3g9IiA8PCBvYmplY3RCb3VuZGluZ0JveCgpCisgICAgICAg
ICAgICA8PCAiLCBjb250ZXh0LmdldENUTSgpPSIgPDwgcGFpbnRJbmZvLmNvbnRleHQoKS5nZXRD
VE0oKSA8PCAiKSI7CisgICAgICAgIH0sCisgICAgICAgIFsmXShUZXh0U3RyZWFtJiBzdHJlYW0p
IHsKKyAgICAgICAgICAgIHN0cmVhbSA8PCByZW5kZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwg
IiA8LSBlbmQgcGFpbnQiOworICAgICAgICB9KTsKKyAgICAgKi8KKyNlbmRpZgorCisgICAgLy8g
QW4gZW1wdHkgdmlld3BvcnQgZGlzYWJsZXMgcmVuZGVyaW5nLgorICAgIGlmIChib3JkZXJCb3hS
ZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGFkanVzdGVkUGFp
bnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CisKKyAgICAvLyBDaGVjayBpZiB3
ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGF0IGFsbC4KKyAgICAvLyBGSVhNRTogQ291bGQgZWxpbWlu
YXRlIHRoZSBpc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkgY2hlY2sgaWYgd2UgZml4IGJhY2tn
cm91bmQgcGFpbnRpbmcgc28gdGhhdCB0aGUgUmVuZGVyVmlldworICAgIC8vIHBhaW50cyB0aGUg
cm9vdCdzIGJhY2tncm91bmQuCisgICAgaWYgKCFpc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkg
JiYgIXBhaW50SW5mby5wYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkNvbXBv
c2l0ZWRPdmVyZmxvd1Njcm9sbENvbnRlbnQpKSB7CisgICAgICAgIGF1dG8gb3ZlcmZsb3dCb3gg
PSB2aXN1YWxPdmVyZmxvd1JlY3QoKTsKKyAgICAgICAgZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJm
bG93Qm94KTsKKyAgICAgICAgb3ZlcmZsb3dCb3gubW92ZUJ5KGFkanVzdGVkUGFpbnRPZmZzZXQp
OworICAgICAgICBpZiAoIW92ZXJmbG93Qm94LmludGVyc2VjdHMocGFpbnRJbmZvLnJlY3QpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wgcHVzaGVkQ2xpcCA9IHB1c2hD
b250ZW50c0NsaXAocGFpbnRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKKyAgICBwYWludE9i
amVjdChwYWludEluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOworICAgIGlmIChwdXNoZWRDbGlw
KQorICAgICAgICBwb3BDb250ZW50c0NsaXAocGFpbnRJbmZvLCBwYWludEluZm8ucGhhc2UsIGFk
anVzdGVkUGFpbnRPZmZzZXQpOworCisgICAgLy8gT3VyIHNjcm9sbGJhciB3aWRnZXRzIHBhaW50
IGV4YWN0bHkgd2hlbiB3ZSB0ZWxsIHRoZW0gdG8sIHNvIHRoYXQgdGhleSB3b3JrIHByb3Blcmx5
IHdpdGgKKyAgICAvLyB6LWluZGV4LiBXZSBwYWludCBhZnRlciB3ZSBwYWludGVkIHRoZSBiYWNr
Z3JvdW5kL2JvcmRlciwgc28gdGhhdCB0aGUgc2Nyb2xsYmFycyB3aWxsCisgICAgLy8gc2l0IGFi
b3ZlIHRoZSBiYWNrZ3JvdW5kL2JvcmRlci4KKyAgICBpZiAoKHBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlOjpCbG9ja0JhY2tncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhh
c2U6OkNoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBoYXNOb25WaXNpYmxlT3ZlcmZsb3coKSAmJiBs
YXllcigpICYmIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkKKyAgICAgICAgJiYgc3R5bGUoKS52
aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiBwYWludEluZm8uc2hvdWxkUGFp
bnRXaXRoaW5Sb290KCp0aGlzKSAmJiAhcGFpbnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRPbmx5
KCkpCisgICAgICAgIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCktPnBhaW50T3ZlcmZsb3dDb250
cm9scyhwYWludEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9m
ZnNldCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0KSk7Cit9CisKK3ZvaWQgUmVuZGVy
U1ZHUm9vdDo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZnNldCkKK3sKKyAgICBpZiAoKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBo
YXNlOjpCbG9ja0JhY2tncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OkNo
aWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5
OjpWaXNpYmxlKSB7CisgICAgICAgIGlmIChoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnMoKSkKKyAg
ICAgICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Cisg
ICAgfQorCisgICAgYXV0byBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2Nh
dGlvbigpOworICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6TWFzayAmJiBz
dHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlKSB7CisgICAgICAgIC8v
IEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHUmVuZGVyU3VwcG9ydCBjaGFuZ2VzCisgICAgICAg
IC8vIFNWR1JlbmRlclN1cHBvcnQ6OnBhaW50U1ZHTWFzaygqdGhpcywgcGFpbnRJbmZvLCBhZGp1
c3RlZFBhaW50T2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChwYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6Q2xpcHBpbmdNYXNrICYmIHN0eWxlKCkudmlzaWJp
bGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUpIHsKKyAgICAgICAgLy8gRklYTUU6IFtMQlNF
XSBVcHN0cmVhbSBTVkdSZW5kZXJTdXBwb3J0IGNoYW5nZXMKKyAgICAgICAgLy8gU1ZHUmVuZGVy
U3VwcG9ydDo6cGFpbnRTVkdDbGlwcGluZ01hc2soKnRoaXMsIHBhaW50SW5mbyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAocGFpbnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRP
bmx5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9
IHBhaW50SW5mby5jb250ZXh0KCk7CisgICAgaWYgKGNvbnRleHQuZGV0ZWN0aW5nQ29udGVudGZ1
bFBhaW50KCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBjdXJyZW50IDogY2hpbGRyZW5PZlR5cGU8
UmVuZGVyT2JqZWN0PigqdGhpcykpIHsKKyAgICAgICAgICAgIGlmICghY3VycmVudC5pc1NWR0hp
ZGRlbkNvbnRhaW5lcigpKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5zZXRDb250ZW50ZnVs
UGFpbnREZXRlY3RlZCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRG9uJ3QgcGFpbnQg
aWYgd2UgZG9uJ3QgaGF2ZSBraWRzLCBleGNlcHQgaWYgd2UgaGF2ZSBmaWx0ZXJzIHdlIHNob3Vs
ZCBwYWludCB0aG9zZS4KKyAgICBpZiAoIWZpcnN0Q2hpbGQoKSkgeworICAgICAgICBhdXRvKiBy
ZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyZXIo
KnRoaXMpOworICAgICAgICBpZiAoIXJlc291cmNlcyB8fCAhcmVzb3VyY2VzLT5maWx0ZXIoKSkg
eworICAgICAgICAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpGb3JlZ3Jv
dW5kKQorICAgICAgICAgICAgICAgIHBhZ2UoKS5hZGRSZWxldmFudFVucGFpbnRlZE9iamVjdCh0
aGlzLCB2aXN1YWxPdmVyZmxvd1JlY3QoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0g
UGFpbnRQaGFzZTo6QmxvY2tCYWNrZ3JvdW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
IHNjcm9sbGVkT2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisgICAgc2Nyb2xsZWRPZmZzZXQubW92ZUJ5
KC1zY3JvbGxQb3NpdGlvbigpKTsKKworICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQ
aGFzZTo6U2VsZk91dGxpbmUpCisgICAgICAgIHBhaW50Q29udGVudHMocGFpbnRJbmZvLCBzY3Jv
bGxlZE9mZnNldCk7CisKKyAgICBpZiAoKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpP
dXRsaW5lIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpTZWxmT3V0bGluZSkgJiYg
aGFzT3V0bGluZSgpICYmIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2li
bGUpCisgICAgICAgIHBhaW50T3V0bGluZShwYWludEluZm8sIExheW91dFJlY3QoYWRqdXN0ZWRQ
YWludE9mZnNldCwgc2l6ZSgpKSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6cGFpbnRDb250
ZW50cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0
KQoreworICAgIC8vIFN0eWxlIGlzIG5vbi1maW5hbCBpZiB0aGUgZWxlbWVudCBoYXMgYSBwZW5k
aW5nIHN0eWxlc2hlZXQgYmVmb3JlIGl0LiBXZSBlbmQgdXAgd2l0aCByZW5kZXJlcnMgd2l0aCBz
dWNoIHN0eWxlcyBpZiBhIHNjcmlwdAorICAgIC8vIGZvcmNlcyByZW5kZXJlciBjb25zdHJ1Y3Rp
b24gYnkgcXVlcnlpbmcgc29tZXRoaW5nIGxheW91dCBkZXBlbmRlbnQuCisgICAgLy8gQXZvaWQg
Rk9VQyBieSBub3QgcGFpbnRpbmcuIFN3aXRjaGluZyB0byBmaW5hbCBzdHlsZSB0cmlnZ2VycyBy
ZXBhaW50LgorICAgIGlmIChzdHlsZSgpLmlzTm90RmluYWwoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUGFpbnRQaGFzZSBuZXdQaGFzZSA9IChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFz
ZTo6Q2hpbGRPdXRsaW5lcykgPyBQYWludFBoYXNlOjpPdXRsaW5lIDogcGFpbnRJbmZvLnBoYXNl
OworICAgIG5ld1BoYXNlID0gKG5ld1BoYXNlID09IFBhaW50UGhhc2U6OkNoaWxkQmxvY2tCYWNr
Z3JvdW5kcykgPyBQYWludFBoYXNlOjpDaGlsZEJsb2NrQmFja2dyb3VuZCA6IG5ld1BoYXNlOwor
CisgICAgLy8gV2UgZG9uJ3QgcGFpbnQgb3VyIG93biBiYWNrZ3JvdW5kLCBidXQgd2UgZG8gbGV0
IHRoZSBraWRzIHBhaW50IHRoZWlyIGJhY2tncm91bmRzLgorICAgIGF1dG8gcGFpbnRJbmZvRm9y
Q2hpbGQocGFpbnRJbmZvKTsKKyAgICBwYWludEluZm9Gb3JDaGlsZC5waGFzZSA9IG5ld1BoYXNl
OworICAgIHBhaW50SW5mb0ZvckNoaWxkLnVwZGF0ZVN1YnRyZWVQYWludFJvb3RGb3JDaGlsZHJl
bih0aGlzKTsKKworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJF
bGVtZW50PigqdGhpcykpIHsKKyAgICAgICAgaWYgKCFjaGlsZC5oYXNTZWxmUGFpbnRpbmdMYXll
cigpKQorICAgICAgICAgICAgY2hpbGQucGFpbnQocGFpbnRJbmZvRm9yQ2hpbGQsIHBhaW50T2Zm
c2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6d2lsbEJlRGVzdHJveWVkKCkK
K3sKKyAgICBSZW5kZXJCbG9jazo6cmVtb3ZlUGVyY2VudEhlaWdodERlc2NlbmRhbnQoY29uc3Rf
Y2FzdDxSZW5kZXJTVkdSb290Jj4oKnRoaXMpKTsKKworICAgIFNWR1Jlc291cmNlc0NhY2hlOjpj
bGllbnREZXN0cm95ZWQoKnRoaXMpOworICAgIFJlbmRlclJlcGxhY2VkOjp3aWxsQmVEZXN0cm95
ZWQoKTsKK30KKwordm9pZCBSZW5kZXJTVkdSb290OjppbnNlcnRlZEludG9UcmVlKElzSW50ZXJu
YWxNb3ZlIGlzSW50ZXJuYWxNb3ZlKQoreworICAgIFJlbmRlclJlcGxhY2VkOjppbnNlcnRlZElu
dG9UcmVlKGlzSW50ZXJuYWxNb3ZlKTsKKyAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2Fz
QWRkZWRUb1RyZWUoKnRoaXMpOworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6OndpbGxCZVJlbW92
ZWRGcm9tVHJlZShJc0ludGVybmFsTW92ZSBpc0ludGVybmFsTW92ZSkKK3sKKyAgICBTVkdSZXNv
dXJjZXNDYWNoZTo6Y2xpZW50V2lsbEJlUmVtb3ZlZEZyb21UcmVlKCp0aGlzKTsKKyAgICBSZW5k
ZXJSZXBsYWNlZDo6d2lsbEJlUmVtb3ZlZEZyb21UcmVlKGlzSW50ZXJuYWxNb3ZlKTsKK30KKwor
dm9pZCBSZW5kZXJTVkdSb290OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwg
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQoreworICAgIC8vIEJveCBkZWNvcmF0aW9ucyBt
YXkgaGF2ZSBhcHBlYXJlZC9kaXNhcHBlYXJlZCAtIHJlY29tcHV0ZSBzdGF0dXMuCisgICAgaWYg
KGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlOjpSZXBhaW50KQorICAgICAgICBtX2hhc0JveERlY29y
YXRpb25zID0gaGFzVmlzaWJsZUJveERlY29yYXRpb25TdHlsZSgpOworCisgICAgUmVuZGVyUmVw
bGFjZWQ6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKKyAgICBTVkdSZXNvdXJjZXND
YWNoZTo6Y2xpZW50U3R5bGVDaGFuZ2VkKCp0aGlzLCBkaWZmLCBzdHlsZSgpKTsKK30KKwordm9p
ZCBSZW5kZXJTVkdSb290Ojp1cGRhdGVMYXllckluZm9ybWF0aW9uKCkKK3sKKyAgICAvKiBGSVhN
RTogW0xCU0VdIFVwc3RyZWFtIFNWR1JlbmRlclN1cHBvcnQgY2hhbmdlcworICAgIGlmIChTVkdS
ZW5kZXJTdXBwb3J0Ojppc1JlbmRlcmluZ0Rpc2FibGVkRHVlVG9FbXB0eVNWR1ZpZXdCb3goKnRo
aXMpKQorICAgICAgICBsYXllcigpLT5kaXJ0eUFuY2VzdG9yQ2hhaW5WaXNpYmxlRGVzY2VuZGFu
dFN0YXR1cygpOworICAgICAqLworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6OnVwZGF0ZUZyb21T
dHlsZSgpCit7CisgICAgUmVuZGVyUmVwbGFjZWQ6OnVwZGF0ZUZyb21TdHlsZSgpOworCisgICAg
Ly8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBSZW5kZXJPYmplY3QgY2hhbmdlcworICAgIC8vIHNl
dEhhc1NWR1RyYW5zZm9ybSgpOworCisgICAgaWYgKHNob3VsZEFwcGx5Vmlld3BvcnRDbGlwKCkp
CisgICAgICAgIHNldEhhc05vblZpc2libGVPdmVyZmxvdygpOworfQorCitMYXlvdXRSZWN0IFJl
bmRlclNWR1Jvb3Q6OmNsaXBwZWRPdmVyZmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0IGNvbnRleHQpIGNvbnN0
Cit7CisgICAgaWYgKHN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZpc2liaWxpdHk6OlZpc2libGUg
JiYgIWVuY2xvc2luZ0xheWVyKCktPmhhc1Zpc2libGVDb250ZW50KCkpCisgICAgICAgIHJldHVy
biBMYXlvdXRSZWN0KCk7CisKKyAgICBhdXRvIHJlcGFpbnRSZWN0ID0gTGF5b3V0UmVjdChtX3Zp
ZXdCb3hUcmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKS5tYXBS
ZWN0KGJvcmRlckJveFJlY3QoKSkpOworICAgIHJldHVybiBjb21wdXRlUmVjdChyZXBhaW50UmVj
dCwgcmVwYWludENvbnRhaW5lciwgY29udGV4dCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6
Y29tcHV0ZVRyYW5zZm9ybWF0aW9uTWF0cmljZXMoKQoreworICAgIC8vIENvbXB1dGUgU1ZHIHZp
ZXdCb3ggdHJhbnNmb3JtYXRpb24gYWdhaW5zdCB1bnNjYWxlZCB2aWV3cG9ydC4KKyAgICBhdXRv
IHZpZXdwb3J0U2l6ZSA9IGN1cnJlbnRWaWV3cG9ydFNpemUoKTsKKyAgICBhdXRvIHpvb20gPSBz
dHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKKyAgICBpZiAoem9vbSAhPSAxKQorICAgICAgICB2aWV3
cG9ydFNpemUuc2NhbGUoMS4wIC8gem9vbSk7CisgICAgbV92aWV3Qm94VHJhbnNmb3JtID0gc3Zn
U1ZHRWxlbWVudCgpLnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0odmlld3BvcnRTaXplLndpZHRoKCks
IHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSk7CisKKyAgICAvLyBDb21wdXRlIHRvdGFsIHRyYW5zZm9y
bWF0aW9uIG1hdHJpeCwgdGFraW5nIGJvcmRlciAvIHBhZGRpbmcgKGZvciBjaGlsZCByZW5kZXJl
cnMgdGhhdCBkb24ndCBmb2xsb3cgdGhlIENTUyBib3ggbW9kZWwgb2JqZWN0ISkgKyBwYW5uaW5n
IGludG8gYWNjb3VudC4KKyAgICBhdXRvIHBhbm5pbmcgPSBzdmdTVkdFbGVtZW50KCkuY3VycmVu
dFRyYW5zbGF0ZVZhbHVlKCk7CisgICAgYXV0byBjb250ZW50TG9jYXRpb24gPSBjb250ZW50Qm94
TG9jYXRpb24oKTsKKworICAgIG1fc3VwcGxlbWVudGFsTG9jYWxUb1BhcmVudFRyYW5zZm9ybS5t
YWtlSWRlbnRpdHkoKTsKKyAgICBtX3N1cHBsZW1lbnRhbExvY2FsVG9QYXJlbnRUcmFuc2Zvcm0u
dHJhbnNsYXRlKHBhbm5pbmcueCgpICsgY29udGVudExvY2F0aW9uLngoKSwgcGFubmluZy55KCkg
KyBjb250ZW50TG9jYXRpb24ueSgpKTsKKyAgICBtX3N1cHBsZW1lbnRhbExvY2FsVG9QYXJlbnRU
cmFuc2Zvcm0uc2NhbGUoem9vbSk7CisKKyAgICBpZiAoIW1fdmlld0JveFRyYW5zZm9ybS5pc0lk
ZW50aXR5KCkpCisgICAgICAgIG1fc3VwcGxlbWVudGFsTG9jYWxUb1BhcmVudFRyYW5zZm9ybS5t
dWx0aXBseShtX3ZpZXdCb3hUcmFuc2Zvcm0pOworfQorCitib29sIFJlbmRlclNWR1Jvb3Q6Om5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3Qg
TGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rp
b24pCit7CisgICAgYXV0byBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBs
b2NhdGlvbigpOworCisgICAgQVNTRVJUKFNWR0hpdFRlc3RDeWNsZURldGVjdGlvblNjb3BlOjpp
c0VtcHR5KCkpOworCisgICAgYXV0byB2aXN1YWxPdmVyZmxvd1JlY3QgPSB0aGlzLT52aXN1YWxP
dmVyZmxvd1JlY3QoKTsKKyAgICB2aXN1YWxPdmVyZmxvd1JlY3QubW92ZUJ5KGFkanVzdGVkTG9j
YXRpb24pOworCisgICAgLy8gVGVzdCBTVkcgY29udGVudCBpZiB0aGUgcG9pbnQgaXMgaW4gb3Vy
IGNvbnRlbnQgYm94IG9yIGl0IGlzIGluc2lkZSB0aGUgdmlzdWFsT3ZlcmZsb3dSZWN0IGFuZCB0
aGUgb3ZlcmZsb3cgaXMgdmlzaWJsZS4KKyAgICBpZiAoY29udGVudEJveFJlY3QoKS5jb250YWlu
cyhhZGp1c3RlZExvY2F0aW9uKSB8fCAoIXNob3VsZEFwcGx5Vmlld3BvcnRDbGlwKCkgJiYgbG9j
YXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKHZpc3VhbE92ZXJmbG93UmVjdCkpKSB7CisgICAg
ICAgIC8vIENoZWNrIGtpZHMgZmlyc3QuCisgICAgICAgIGZvciAoYXV0byogY2hpbGQgPSBsYXN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7CisgICAg
ICAgICAgICBpZiAoIWNoaWxkLT5oYXNMYXllcigpICYmIGNoaWxkLT5ub2RlQXRQb2ludChyZXF1
ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGFkanVzdGVkTG9jYXRpb24sIGhpdFRl
c3RBY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0
aW9uKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKFNWR0hpdFRlc3RDeWNsZURldGVjdGlvblNj
b3BlOjppc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gSWYgd2UgZGlkbid0IGVhcmx5IGV4aXQg
YWJvdmUsIHdlJ3ZlIGp1c3QgaGl0IHRoZSBjb250YWluZXIgPHN2Zz4gZWxlbWVudC4gVW5saWtl
IFNWRyAxLjEsIDJuZCBFZGl0aW9uIGFsbG93cyBjb250YWluZXIgZWxlbWVudHMgdG8gYmUgaGl0
LgorICAgIGlmICgoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGhp
dFRlc3RBY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiB2aXNpYmxlVG9I
aXRUZXN0aW5nKHJlcXVlc3QpKSB7CisgICAgICAgIExheW91dFJlY3QgYm91bmRzUmVjdChhZGp1
c3RlZExvY2F0aW9uLCBzaXplKCkpOworICAgICAgICBpZiAobG9jYXRpb25JbkNvbnRhaW5lci5p
bnRlcnNlY3RzKGJvdW5kc1JlY3QpKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0
KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSAt
IHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9uKSkpOworICAgICAgICAgICAgaWYgKHJlc3Vs
dC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KG5vZGVGb3JIaXRUZXN0KCksIHJlcXVlc3Qs
IGxvY2F0aW9uSW5Db250YWluZXIsIGJvdW5kc1JlY3QpID09IEhpdFRlc3RQcm9ncmVzczo6U3Rv
cCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IEFTU0VSVChTVkdIaXRUZXN0Q3ljbGVEZXRlY3Rpb25TY29wZTo6aXNFbXB0eSgpKTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJTVkdSb290OjpoYXNSZWxhdGl2ZURpbWVu
c2lvbnMoKSBjb25zdAoreworICAgIHJldHVybiBzdmdTVkdFbGVtZW50KCkuaW50cmluc2ljSGVp
Z2h0KCkuaXNQZXJjZW50T3JDYWxjdWxhdGVkKCkgfHwgc3ZnU1ZHRWxlbWVudCgpLmludHJpbnNp
Y1dpZHRoKCkuaXNQZXJjZW50T3JDYWxjdWxhdGVkKCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9v
dDo6YWRkUmVzb3VyY2VGb3JDbGllbnRJbnZhbGlkYXRpb24oUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIqIHJlc291cmNlKQoreworICAgIFVOVVNFRF9QQVJBTShyZXNvdXJjZSk7CisgICAgLyog
RklYTUU6IFtMQlNFXSBSZW5hbWUgZmluZFRyZWVSb290T2JqZWN0IC0+IGZpbmRMZWdhY3lUcmVl
Um9vdE9iamVjdCwgYW5kIHJlLWFkZCBmaW5kVHJlZVJvb3RPYmplY3QgZm9yIFJlbmRlclNWR1Jv
b3QKKyAgICBpZiAoYXV0byogc3ZnUm9vdCA9IFNWR1JlbmRlclN1cHBvcnQ6OmZpbmRUcmVlUm9v
dE9iamVjdCgqcmVzb3VyY2UpKQorICAgICAgICBzdmdSb290LT5tX3Jlc291cmNlc05lZWRpbmdU
b0ludmFsaWRhdGVDbGllbnRzLmFkZChyZXNvdXJjZSk7CisgICAgKi8KK30KKworRmxvYXRTaXpl
IFJlbmRlclNWR1Jvb3Q6OmN1cnJlbnRWaWV3cG9ydFNpemUoKSBjb25zdAoreworICAgIEZsb2F0
U2l6ZSByZXN1bHQgPSBjb250ZW50Qm94UmVjdCgpLnNpemUoKTsKKyAgICByZXN1bHQuc2V0V2lk
dGgocmVzdWx0LndpZHRoKCkgKyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkpOworICAgIHJlc3Vs
dC5zZXRIZWlnaHQocmVzdWx0LmhlaWdodCgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgp
KTsKKworICAgIGlmICghaXNFbWJlZGRlZFRocm91Z2hGcmFtZUNvbnRhaW5pbmdTVkdEb2N1bWVu
dCgpKSB7CisgICAgICAgIGF1dG8gem9vbSA9IHN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOworICAg
ICAgICBpZiAoem9vbSAhPSAxKQorICAgICAgICAgICAgcmVzdWx0LnNjYWxlKHN2Z1NWR0VsZW1l
bnQoKS5oYXNJbnRyaW5zaWNXaWR0aCgpID8gMSA6IHpvb20sIHN2Z1NWR0VsZW1lbnQoKS5oYXNJ
bnRyaW5zaWNIZWlnaHQoKSA/IDEgOiB6b29tKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6Om1hcExvY2FsVG9Db250YWluZXIoY29uc3QgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgVHJhbnNmb3JtU3RhdGUmIHRy
YW5zZm9ybVN0YXRlLCBPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiBtb2RlLCBib29sKiB3
YXNGaXhlZCkgY29uc3QKK3sKKyAgICBpZiAocmVwYWludENvbnRhaW5lciA9PSB0aGlzKQorICAg
ICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIXZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250
ZXh0KCkuaXNQYWludE9mZnNldENhY2hlRW5hYmxlZCgpKTsKKworICAgIGJvb2wgY29udGFpbmVy
U2tpcHBlZDsKKyAgICBhdXRvKiBjb250YWluZXIgPSB0aGlzLT5jb250YWluZXIocmVwYWludENv
bnRhaW5lciwgY29udGFpbmVyU2tpcHBlZCk7CisgICAgaWYgKCFjb250YWluZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIGJvb2wgaXNGaXhlZFBvcyA9IGlzRml4ZWRQb3NpdGlvbmVkKCk7Cisg
ICAgLy8gSWYgdGhpcyBib3ggaGFzIGEgdHJhbnNmb3JtLCBpdCBhY3RzIGFzIGEgZml4ZWQgcG9z
aXRpb24gY29udGFpbmVyIGZvciBmaXhlZCBkZXNjZW5kYW50cywKKyAgICAvLyBhbmQgbWF5IGl0
c2VsZiBhbHNvIGJlIGZpeGVkIHBvc2l0aW9uLiBTbyBwcm9wYWdhdGUgJ2ZpeGVkJyB1cCBvbmx5
IGlmIHRoaXMgYm94IGlzIGZpeGVkIHBvc2l0aW9uLgorICAgIGlmIChoYXNUcmFuc2Zvcm0oKSAm
JiAhaXNGaXhlZFBvcykKKyAgICAgICAgbW9kZS5yZW1vdmUoSXNGaXhlZCk7CisgICAgZWxzZSBp
ZiAoaXNGaXhlZFBvcykKKyAgICAgICAgbW9kZS5hZGQoSXNGaXhlZCk7CisKKyAgICBpZiAod2Fz
Rml4ZWQpCisgICAgICAgICp3YXNGaXhlZCA9IG1vZGUuY29udGFpbnMoSXNGaXhlZCk7CisKKyAg
ICBib29sIGNvbXB1dGluZ0NUTU9yU2NyZWVuQ1RNID0gZmFsc2U7CisgICAgLy8gRklYTUU6IFtM
QlNFXSBVcHN0cmVhbSBUcmFuc2Zvcm1TdGF0ZSBjaGFuZ2VzCisgICAgLy8gYm9vbCBjb21wdXRp
bmdDVE1PclNjcmVlbkNUTSA9IHRyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybU1hdHJpeFRyYWNraW5n
KCkgIT0gVHJhbnNmb3JtU3RhdGU6OkRvTm90VHJhY2tUcmFuc2Zvcm1NYXRyaXg7CisgICAgYXV0
byBjb250YWluZXJPZmZzZXQgPSBvZmZzZXRGcm9tQ29udGFpbmVyKCpjb250YWluZXIsIExheW91
dFBvaW50KHRyYW5zZm9ybVN0YXRlLm1hcHBlZFBvaW50KCkpKTsKKworICAgIGJvb2wgcHJlc2Vy
dmUzRCA9IG1vZGUgJiBVc2VUcmFuc2Zvcm1zICYmIChjb250YWluZXItPnN0eWxlKCkucHJlc2Vy
dmVzM0QoKSB8fCBzdHlsZSgpLnByZXNlcnZlczNEKCkpOworCisgICAgaWYgKG1vZGUgJiBVc2VU
cmFuc2Zvcm1zICYmIHNob3VsZFVzZVRyYW5zZm9ybUZyb21Db250YWluZXIoY29udGFpbmVyKSkg
eworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0OworICAgICAgICBnZXRUcmFuc2Zvcm1G
cm9tQ29udGFpbmVyKGNvbnRhaW5lciwgY29udGFpbmVyT2Zmc2V0LCB0KTsKKworICAgICAgICAv
KiBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFRyYW5zZm9ybVN0YXRlIGNoYW5nZXMKKyAgICAgICAg
aWYgKHRyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybU1hdHJpeFRyYWNraW5nKCkgPT0gVHJhbnNmb3Jt
U3RhdGU6OlRyYWNrU1ZHQ1RNTWF0cml4KSB7CisgICAgICAgICAgICBhdXRvIG9mZnNldCA9IHRv
TGF5b3V0U2l6ZShjb250ZW50Qm94TG9jYXRpb24oKSArIGNvbnRhaW5lck9mZnNldCk7CisgICAg
ICAgICAgICB0LnRyYW5zbGF0ZVJpZ2h0KC1vZmZzZXQud2lkdGgoKSwgLW9mZnNldC5oZWlnaHQo
KSk7CisgICAgICAgIH0KKyAgICAgICAgKi8KKworICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5hcHBs
eVRyYW5zZm9ybSh0LCBwcmVzZXJ2ZTNEID8gVHJhbnNmb3JtU3RhdGU6OkFjY3VtdWxhdGVUcmFu
c2Zvcm0gOiBUcmFuc2Zvcm1TdGF0ZTo6RmxhdHRlblRyYW5zZm9ybSk7CisgICAgfSBlbHNlCisg
ICAgICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUoY29udGFpbmVyT2Zmc2V0LndpZHRoKCksIGNvbnRh
aW5lck9mZnNldC5oZWlnaHQoKSwgcHJlc2VydmUzRCA/IFRyYW5zZm9ybVN0YXRlOjpBY2N1bXVs
YXRlVHJhbnNmb3JtIDogVHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm0pOworCisgICAg
aWYgKGNvbnRhaW5lclNraXBwZWQpIHsKKyAgICAgICAgLy8gVGhlcmUgY2FuJ3QgYmUgYSB0cmFu
c2Zvcm0gYmV0d2VlbiByZXBhaW50Q29udGFpbmVyIGFuZCBvLCBiZWNhdXNlIHRyYW5zZm9ybXMg
Y3JlYXRlIGNvbnRhaW5lcnMsIHNvIGl0IHNob3VsZCBiZSBzYWZlCisgICAgICAgIC8vIHRvIGp1
c3Qgc3VidHJhY3QgdGhlIGRlbHRhIGJldHdlZW4gdGhlIHJlcGFpbnRDb250YWluZXIgYW5kIG8u
CisgICAgICAgIGF1dG8gY29udGFpbmVyT2Zmc2V0ID0gcmVwYWludENvbnRhaW5lci0+b2Zmc2V0
RnJvbUFuY2VzdG9yQ29udGFpbmVyKCpjb250YWluZXIpOworICAgICAgICB0cmFuc2Zvcm1TdGF0
ZS5tb3ZlKC1jb250YWluZXJPZmZzZXQud2lkdGgoKSwgLWNvbnRhaW5lck9mZnNldC5oZWlnaHQo
KSwgcHJlc2VydmUzRCA/IFRyYW5zZm9ybVN0YXRlOjpBY2N1bXVsYXRlVHJhbnNmb3JtIDogVHJh
bnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm0pOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgbW9kZS5yZW1vdmUoQXBwbHlDb250YWluZXJGbGlwKTsKKworICAgIGlmIChjb21wdXRp
bmdDVE1PclNjcmVlbkNUTSkgeworICAgICAgICAvLyBUaGUgQ1NTIGxlbmd0aHMvbnVtYmVycyBh
Ym92ZSB0aGUgU1ZHIGZyYWdtZW50IChlLmcuIGluIEhUTUwpIGRvIG5vdCBhZGhlcmUgdG8gU1ZH
IHpvb20gcnVsZXMuCisgICAgICAgIC8vIEFsbCBsZW5ndGggaW5mb3JtYXRpb24gKGUuZy4gdG9w
L3dpZHRoLy4uLikgaW5jbHVkZSB0aGUgc2NhbGluZyBmYWN0b3IuIEluIFNWRyBubyBsZW5ndGhz
IGFyZQorICAgICAgICAvLyBzY2FsZWQgYnV0IGEgZ2xvYmFsIHNjYWxpbmcgb3BlcmF0aW9uIGlz
IGluY2x1ZGVkIGluIHRoZSB0cmFuc2Zvcm0gc3RhdGUuCisgICAgICAgIC8vIEZvciBnZXRDVE0v
Z2V0U2NyZWVuQ1RNIGNvbXB1dGF0aW9ucyB0aGUgcmVzdWx0IG11c3QgYmUgaW5kZXBlbmRlbnQg
b2YgdGhlIHBhZ2Ugem9vbSBmYWN0b3IuCisgICAgICAgIC8vIFRvIGNvbXB1dGUgdGhlc2UgbWF0
cmljZXMgd2l0aGluIGEgbm9uLVNWRyBjb250ZXh0IChlLmcuIFNWRyBlbWJlZGRlZCBpbiBIVE1M
IC0tIGlubGluZSBTVkcpCisgICAgICAgIC8vIHRoZSBzY2FsaW5nIG5lZWRzIHRvIGJlIHJlbW92
ZWQgZnJvbSB0aGUgQ1NTIHRyYW5zZm9ybSBzdGF0ZS4KKyAgICAgICAgVHJhbnNmb3JtU3RhdGUg
dHJhbnNmb3JtU3RhdGVBYm92ZVNWR0ZyYWdtZW50KHRyYW5zZm9ybVN0YXRlLmRpcmVjdGlvbigp
LCB0cmFuc2Zvcm1TdGF0ZS5tYXBwZWRQb2ludCgpKTsKKyAgICAgICAgLy8gRklYTUU6IFtMQlNF
XSBVcHN0cmVhbSBUcmFuc2Zvcm1TdGF0ZSBjaGFuZ2VzCisgICAgICAgIC8vIHRyYW5zZm9ybVN0
YXRlQWJvdmVTVkdGcmFnbWVudC5zZXRUcmFuc2Zvcm1NYXRyaXhUcmFja2luZyh0cmFuc2Zvcm1T
dGF0ZS50cmFuc2Zvcm1NYXRyaXhUcmFja2luZygpKTsKKyAgICAgICAgY29udGFpbmVyLT5tYXBM
b2NhbFRvQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHRyYW5zZm9ybVN0YXRlQWJvdmVTVkdG
cmFnbWVudCwgbW9kZSwgd2FzRml4ZWQpOworCisgICAgICAgIC8qIEZJWE1FOiBbTEJTRV0gVXBz
dHJlYW0gVHJhbnNmb3JtU3RhdGUgY2hhbmdlcworICAgICAgICBpZiAodHJhbnNmb3JtU3RhdGUu
dHJhbnNmb3JtTWF0cml4VHJhY2tpbmcoKSA9PSBUcmFuc2Zvcm1TdGF0ZTo6VHJhY2tTVkdTY3Jl
ZW5DVE1NYXRyaXgpIHsKKyAgICAgICAgICAgIGF1dG8gc2NhbGUgPSAxLjAgLyBzdHlsZSgpLmVm
ZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgICAgIGF1dG8gdHJhbnNmb3JtQWJvdmVTVkdGcmFnbWVu
dCA9IHRyYW5zZm9ybVN0YXRlQWJvdmVTVkdGcmFnbWVudC5yZWxlYXNlVHJhY2tlZFRyYW5zZm9y
bSgpOworICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUFib3ZlU1ZHRnJhZ21lbnQpIHsKKyAgICAg
ICAgICAgICAgICBGbG9hdFBvaW50IGxvY2F0aW9uKHRyYW5zZm9ybUFib3ZlU1ZHRnJhZ21lbnQt
PmUoKSwgdHJhbnNmb3JtQWJvdmVTVkdGcmFnbWVudC0+ZigpKTsKKyAgICAgICAgICAgICAgICBs
b2NhdGlvbi5zY2FsZShzY2FsZSk7CisKKyAgICAgICAgICAgICAgICBhdXRvIHVuc2NhbGVkVHJh
bnNmb3JtID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKS5zY2FsZShzY2FsZSkgKiAqdHJhbnNmb3Jt
QWJvdmVTVkdGcmFnbWVudDsKKyAgICAgICAgICAgICAgICB1bnNjYWxlZFRyYW5zZm9ybS5zZXRF
KGxvY2F0aW9uLngoKSk7CisgICAgICAgICAgICAgICAgdW5zY2FsZWRUcmFuc2Zvcm0uc2V0Rihs
b2NhdGlvbi55KCkpOworICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0YXRlLmFwcGx5VHJhbnNm
b3JtKHVuc2NhbGVkVHJhbnNmb3JtLCBwcmVzZXJ2ZTNEID8gVHJhbnNmb3JtU3RhdGU6OkFjY3Vt
dWxhdGVUcmFuc2Zvcm0gOiBUcmFuc2Zvcm1TdGF0ZTo6RmxhdHRlblRyYW5zZm9ybSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFJlc3BlY3Qgc2Nyb2xsIG9mZnNldCwgYWZ0ZXIg
bWFwcGluZyB0byBjb250YWluZXIgY29vcmRpbmF0ZXMuCisgICAgICAgICAgICBpZiAoUmVmUHRy
PEZyYW1lVmlldz4gdmlldyA9IGRvY3VtZW50KCkudmlldygpKSB7CisgICAgICAgICAgICAgICAg
TGF5b3V0UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSB2aWV3LT5zY3JvbGxQb3NpdGlvbigpOworICAg
ICAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uLnNjYWxlKHNjYWxlKTsKKyAgICAgICAgICAgICAg
ICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKC10b0xheW91dFNpemUoc2Nyb2xsUG9zaXRpb24pKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSovCisgICAgfSBlbHNlCisgICAgICAgIGNvbnRhaW5lci0+
bWFwTG9jYWxUb0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCB0cmFuc2Zvcm1TdGF0ZSwgbW9k
ZSwgd2FzRml4ZWQpOworfQorCitMYXlvdXRSZWN0IFJlbmRlclNWR1Jvb3Q6Om92ZXJmbG93Q2xp
cFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWVudENvbnRhaW5l
ciogZnJhZ21lbnQsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5LCBQYWludFBoYXNlKSBj
b25zdAoreworICAgIGF1dG8gY2xpcFJlY3QgPSBib3JkZXJCb3hSZWN0SW5GcmFnbWVudChmcmFn
bWVudCk7CisgICAgY2xpcFJlY3Quc2V0TG9jYXRpb24obG9jYXRpb24gKyBjbGlwUmVjdC5sb2Nh
dGlvbigpICsgTGF5b3V0U2l6ZShib3JkZXJMZWZ0KCksIGJvcmRlclRvcCgpKSk7CisgICAgY2xp
cFJlY3Quc2V0U2l6ZShjbGlwUmVjdC5zaXplKCkgLSBMYXlvdXRTaXplKGJvcmRlckxlZnQoKSAr
IGJvcmRlclJpZ2h0KCksIGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCkpKTsKKworICAgIGlm
ICghaXNFbWJlZGRlZFRocm91Z2hGcmFtZUNvbnRhaW5pbmdTVkdEb2N1bWVudCgpKSB7CisgICAg
ICAgIGF1dG8gem9vbSA9IHN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOworICAgICAgICBpZiAoem9v
bSAhPSAxKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzdmdTVkdFbGVtZW50ID0gZG93bmNh
c3Q8UmVuZGVyU1ZHUm9vdD4oKnRoaXMpLnN2Z1NWR0VsZW1lbnQoKTsKKyAgICAgICAgICAgIGNs
aXBSZWN0LnNjYWxlKHN2Z1NWR0VsZW1lbnQuaGFzSW50cmluc2ljV2lkdGgoKSA/IDEgOiB6b29t
LCBzdmdTVkdFbGVtZW50Lmhhc0ludHJpbnNpY0hlaWdodCgpID8gMSA6IHpvb20pOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIGNsaXBSZWN0OworfQorCit2b2lkIFJlbmRlclNWR1Jv
b3Q6OmFwcGx5VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCwgT3B0aW9u
U2V0PFJlbmRlclN0eWxlOjpUcmFuc2Zvcm1PcGVyYXRpb25PcHRpb24+IG9wdGlvbnMpIGNvbnN0
Cit7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zZm9ybSk7CisgICAgVU5VU0VEX1BBUkFNKHN0eWxl
KTsKKyAgICBVTlVTRURfUEFSQU0oYm91bmRpbmdCb3gpOworICAgIFVOVVNFRF9QQVJBTShvcHRp
b25zKTsKKyAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR1JlbmRlclN1cHBvcnQgY2hh
bmdlcworICAgIC8vIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5VHJhbnNmb3JtKCp0aGlzLCB0cmFu
c2Zvcm0sIHN0eWxlLCBib3VuZGluZ0JveCwgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQsIG9w
dGlvbnMpOworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6OmFic29sdXRlUmVjdHMoVmVjdG9yPElu
dFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25z
dAoreworICAgIGF1dG8gbG9jYWxSZWN0ID0gTGF5b3V0UmVjdChtX3N1cHBsZW1lbnRhbExvY2Fs
VG9QYXJlbnRUcmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKS5t
YXBSZWN0KGJvcmRlckJveFJlY3QoKSkpOworICAgIHJlY3RzLmFwcGVuZChzbmFwcGVkSW50UmVj
dChhY2N1bXVsYXRlZE9mZnNldCwgbG9jYWxSZWN0LnNpemUoKSkpOworfQorCit2b2lkIFJlbmRl
clNWR1Jvb3Q6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3
YXNGaXhlZCkgY29uc3QKK3sKKyAgICBSZW5kZXJGcmFnbWVudGVkRmxvdyogZnJhZ21lbnRlZEZs
b3cgPSBlbmNsb3NpbmdGcmFnbWVudGVkRmxvdygpOworICAgIGlmIChmcmFnbWVudGVkRmxvdyAm
JiBmcmFnbWVudGVkRmxvdy0+YWJzb2x1dGVRdWFkc0ZvckJveChxdWFkcywgd2FzRml4ZWQsIHRo
aXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGxvY2FsUmVjdCA9IEZsb2F0UmVjdCht
X3N1cHBsZW1lbnRhbExvY2FsVG9QYXJlbnRUcmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlX29yKEFm
ZmluZVRyYW5zZm9ybSgpKS5tYXBSZWN0KGJvcmRlckJveFJlY3QoKSkpOworICAgIHF1YWRzLmFw
cGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKGxvY2FsUmVjdCwgVXNlVHJhbnNmb3Jtcywgd2FzRml4
ZWQpKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjU0OWYzYTczYWM0OWNjMTA2YWIxM2JmYzMwMzM5ZmYzNzVjODIxNTYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaApAQCAt
MCwwICsxLDE1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAsIDIwMjEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZRVJfQkFT
RURfU1ZHX0VOR0lORSkKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJS
ZXBsYWNlZC5oIgorLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdCb3VuZGluZ0JveENvbXB1
dGF0aW9uCisvLyAjaW5jbHVkZSAiU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFmZmluZVRyYW5zZm9ybTsKK2NsYXNzIFJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyOworY2xhc3MgU1ZHU1ZHRWxlbWVudDsKKworY2xhc3MgUmVuZGVy
U1ZHUm9vdCBmaW5hbCA6IHB1YmxpYyBSZW5kZXJSZXBsYWNlZCB7CisgICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRChSZW5kZXJTVkdSb290KTsKK3B1YmxpYzoKKyAgICBSZW5kZXJTVkdSb290KFNW
R1NWR0VsZW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJTVkdSb290
KCk7CisKKyAgICBTVkdTVkdFbGVtZW50JiBzdmdTVkdFbGVtZW50KCkgY29uc3Q7CisgICAgRmxv
YXRTaXplIGN1cnJlbnRWaWV3cG9ydFNpemUoKSBjb25zdDsKKworICAgIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdmlld0JveFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld0JveFRyYW5z
Zm9ybTsgfQorICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3VwcGxlbWVudGFsTG9jYWxUb1Bh
cmVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VwcGxlbWVudGFsTG9jYWxUb1BhcmVu
dFRyYW5zZm9ybTsgfQorCisgICAgYm9vbCBpc0VtYmVkZGVkVGhyb3VnaFNWR0ltYWdlKCkgY29u
c3Q7CisgICAgYm9vbCBpc0VtYmVkZGVkVGhyb3VnaEZyYW1lQ29udGFpbmluZ1NWR0RvY3VtZW50
KCkgY29uc3Q7CisKKyAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9uKEZs
b2F0U2l6ZSYgaW50cmluc2ljU2l6ZSwgZG91YmxlJiBpbnRyaW5zaWNSYXRpbykgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICBib29sIGlzTGF5b3V0U2l6ZUNoYW5nZWQoKSBjb25zdCB7IHJldHVybiBt
X2lzTGF5b3V0U2l6ZUNoYW5nZWQ7IH0KKyAgICBib29sIGRpZFRyYW5zZm9ybVRvUm9vdFVwZGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlkVHJhbnNmb3JtVG9Sb290VXBkYXRlOyB9CisgICAgYm9v
bCBpc0luTGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbV9pbkxheW91dDsgfQorCisgICAgSW50U2l6
ZSBjb250YWluZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluZXJTaXplOyB9CisgICAg
dm9pZCBzZXRDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmIGNvbnRhaW5lclNpemUpIHsgbV9j
b250YWluZXJTaXplID0gY29udGFpbmVyU2l6ZTsgfQorCisgICAgYm9vbCBoYXNSZWxhdGl2ZURp
bWVuc2lvbnMoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIFRoZSBmbGFnIGlzIGNsZWFyZWQg
YXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGxheW91dCgpIHBhc3MuIEVsZW1lbnRzIHRoZW4gY2Fs
bCB0aGlzCisgICAgLy8gbWV0aG9kIGR1cmluZyBsYXlvdXQgd2hlbiB0aGV5IGFyZSBpbnZhbGlk
YXRlZCBieSBhIGZpbHRlci4KKyAgICBzdGF0aWMgdm9pZCBhZGRSZXNvdXJjZUZvckNsaWVudElu
dmFsaWRhdGlvbihSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciopOworCisgICAgYm9vbCBzaG91
bGRBcHBseVZpZXdwb3J0Q2xpcCgpIGNvbnN0OworCisgICAgLy8gRklYTUU6IFtMQlNFXSBNYXJr
IGZpbmFsLCBhZGQgYXBwbHlUcmFuc2Zvcm0gdG8gUmVuZGVyTGF5ZXJNb2RlbE9iamVjdAorICAg
IHZvaWQgYXBwbHlUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBSZW5kZXJT
dHlsZSYsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gsIE9wdGlvblNldDxSZW5kZXJTdHls
ZTo6VHJhbnNmb3JtT3BlcmF0aW9uT3B0aW9uPikgY29uc3Q7CisKKyAgICBGbG9hdFJlY3Qgb2Jq
ZWN0Qm91bmRpbmdCb3goKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94
OyB9CisgICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9zdHJva2VCb3VuZGluZ0JveDsgfQorCisgICAgLy8gRklYTUU6IFtMQlNFXSBNYXJrIGZp
bmFsLCBhZGQgcmVwYWludEJvdW5kaW5nQm94KCkgdG8gUmVuZGVyT2JqZWN0CisgICAgRmxvYXRS
ZWN0IHJlcGFpbnRCb3VuZGluZ0JveCgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBGSVhNRTog
W0xCU0VdIFVwc3RyZWFtIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24KKyAgICAgICAgLy8gcmV0
dXJuIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmNvbXB1dGVSZXBhaW50Qm91bmRpbmdCb3go
KnRoaXMpOworICAgICAgICByZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsKKyAgICB9CisKKyAg
ICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxlbnQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdCb3VuZGluZ0JveENvbXB1dGF0
aW9uCisgICAgICAgIC8vIHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRl
VmlzdWFsT3ZlcmZsb3dSZWN0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBlbGVtZW50KCkgY29uc3QgPSBkZWxldGU7CisK
KyAgICBib29sIGlzU1ZHUm9vdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIlJlbmRl
clNWR1Jvb3QiOyB9CisgICAgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gVG8gcHJldmVudCBjZXJ0YWluIGxlZ2FjeSBjb2RlIHBh
dGhzIHRvIGhpdCBhc3NlcnRpb25zIGluIGRlYnVnIGJ1aWxkcywgd2hlbiBzd2l0Y2hpbmcgb2Zm
IExCU0UgKGR1cmluZyB0aGUgdGVhcmRvd24gb2YgdGhlIExCU0UgdHJlZSkuCisgICAgc3RkOjpv
cHRpb25hbDxGbG9hdFJlY3Q+IGNvbXB1dGVGbG9hdFZpc2libGVSZWN0SW5Db250YWluZXIoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCosIFZpc2libGVSZWN0
Q29udGV4dCkgY29uc3QgZmluYWwgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CisKKyAgICBMYXlv
dXRVbml0IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChTaG91bGRDb21wdXRlUHJlZmVycmVk
ICA9IENvbXB1dGVBY3R1YWwpIGNvbnN0IG92ZXJyaWRlOworICAgIExheW91dFVuaXQgY29tcHV0
ZVJlcGxhY2VkTG9naWNhbEhlaWdodChzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGVzdGltYXRl
ZFVzZWRXaWR0aCA9IHN0ZDo6bnVsbG9wdCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBsYXlv
dXQoKSBvdmVycmlkZTsKKyAgICB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBv
aW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBwYWludE9iamVjdChQYWludEluZm8mLCBjb25zdCBM
YXlvdXRQb2ludCYpIG92ZXJyaWRlOworICAgIHZvaWQgcGFpbnRDb250ZW50cyhQYWludEluZm8m
LCBjb25zdCBMYXlvdXRQb2ludCYpOworCisgICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKSBvdmVy
cmlkZTsKKworICAgIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShJc0ludGVybmFsTW92ZSkgb3ZlcnJp
ZGU7CisgICAgdm9pZCB3aWxsQmVSZW1vdmVkRnJvbVRyZWUoSXNJbnRlcm5hbE1vdmUpIG92ZXJy
aWRlOworCisgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJl
bmRlclN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVMYXllckluZm9y
bWF0aW9uKCk7CisgICAgdm9pZCB1cGRhdGVGcm9tU3R5bGUoKSBvdmVycmlkZTsKKworICAgIGJv
b2wgZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBib29sIHN0cm9r
ZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBib29sIG5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2Nh
dGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBvdmVycmlkZTsKKworICAgIHZvaWQgY29tcHV0ZVRyYW5z
Zm9ybWF0aW9uTWF0cmljZXMoKTsKKworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdChj
b25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiA9IG51
bGxwdHIsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9s
bGJhclNpemUsIFBhaW50UGhhc2UgPSBQYWludFBoYXNlOjpCbG9ja0JhY2tncm91bmQpIGNvbnN0
IGZpbmFsOworICAgIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdChjb25zdCBSZW5kZXJM
YXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRl
ckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yQ29udGFpbmVyLCBUcmFuc2Zvcm1TdGF0ZSYsIE9w
dGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+LCBib29sKiB3YXNGaXhlZCkgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFi
c29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sKiB3YXNGaXhlZCkgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICBib29sIGNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2b2lkIGJ1aWxkVmlld3BvcnRUcmFuc2Zvcm0oKTsK
KworICAgIGJvb2wgbV9pbkxheW91dCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2RpZFRyYW5zZm9y
bVRvUm9vdFVwZGF0ZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQg
eyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNCb3hEZWNvcmF0aW9ucyB7IGZhbHNlIH07CisKKyAg
ICBJbnRTaXplIG1fY29udGFpbmVyU2l6ZTsKKyAgICBGbG9hdFJlY3QgbV9vYmplY3RCb3VuZGlu
Z0JveDsKKyAgICBGbG9hdFJlY3QgbV9zdHJva2VCb3VuZGluZ0JveDsKKyAgICBBZmZpbmVUcmFu
c2Zvcm0gbV92aWV3Qm94VHJhbnNmb3JtOworICAgIEFmZmluZVRyYW5zZm9ybSBtX3N1cHBsZW1l
bnRhbExvY2FsVG9QYXJlbnRUcmFuc2Zvcm07CisgICAgSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lcio+IG1fcmVzb3VyY2VzTmVlZGluZ1RvSW52YWxpZGF0ZUNsaWVudHM7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVOREVS
X09CSkVDVChSZW5kZXJTVkdSb290LCBpc1NWR1Jvb3QoKSkKKworI2VuZGlmIC8vIEVOQUJMRShM
QVlFUl9CQVNFRF9TVkdfRU5HSU5FKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKaW5kZXggYTRmNjRjYWY2MTk5MGUzNzY5M2I4YmM2ODVk
ODJhNDVmOTVjOTFhYi4uMzg3MzZhNDZhNGNiZjA1OTJlMTg5MzFmZmNhNzhmZjFkOTQyY2MwNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQu
Y3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
aCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlTWFza2VyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29u
dGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCIKQEAgLTIw
NCwxOSArMjA1LDIzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnZhbGlkYXRlUmVzb3VyY2VzT2ZD
aGlsZHJlbihSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKIHN0YXRpYyBpbmxpbmUgYm9vbCBsYXlv
dXRTaXplT2ZOZWFyZXN0Vmlld3BvcnRDaGFuZ2VkKGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyKQogewogICAgIGNvbnN0IFJlbmRlckVsZW1lbnQqIHN0YXJ0ID0gJnJlbmRlcmVyOwotICAg
IHdoaWxlIChzdGFydCAmJiAhaXM8TGVnYWN5UmVuZGVyU1ZHUm9vdD4oKnN0YXJ0KSAmJiAhaXM8
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI+KCpzdGFydCkpCisgICAgd2hpbGUgKHN0YXJ0ICYm
ICFzdGFydC0+aXNTVkdSb290T3JMZWdhY3lTVkdSb290KCkgJiYgIWlzPFJlbmRlclNWR1ZpZXdw
b3J0Q29udGFpbmVyPigqc3RhcnQpKQogICAgICAgICBzdGFydCA9IHN0YXJ0LT5wYXJlbnQoKTsK
IAogICAgIEFTU0VSVChzdGFydCk7CiAgICAgaWYgKGlzPFJlbmRlclNWR1ZpZXdwb3J0Q29udGFp
bmVyPigqc3RhcnQpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyU1ZHVmlld3BvcnRD
b250YWluZXI+KCpzdGFydCkuaXNMYXlvdXRTaXplQ2hhbmdlZCgpOwogCisjaWYgRU5BQkxFKExB
WUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKGlzPFJlbmRlclNWR1Jvb3Q+KCpzdGFydCkp
CisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJTVkdSb290Pigqc3RhcnQpLmlzTGF5b3V0
U2l6ZUNoYW5nZWQoKTsKKyNlbmRpZgogICAgIHJldHVybiBkb3duY2FzdDxMZWdhY3lSZW5kZXJT
VkdSb290Pigqc3RhcnQpLmlzTGF5b3V0U2l6ZUNoYW5nZWQoKTsKIH0KIAogYm9vbCBTVkdSZW5k
ZXJTdXBwb3J0Ojp0cmFuc2Zvcm1Ub1Jvb3RDaGFuZ2VkKFJlbmRlckVsZW1lbnQqIGFuY2VzdG9y
KQogewotICAgIHdoaWxlIChhbmNlc3RvciAmJiAhaXM8TGVnYWN5UmVuZGVyU1ZHUm9vdD4oKmFu
Y2VzdG9yKSkgeworICAgIHdoaWxlIChhbmNlc3RvciAmJiAhYW5jZXN0b3ItPmlzU1ZHUm9vdE9y
TGVnYWN5U1ZHUm9vdCgpKSB7CiAgICAgICAgIGlmIChpczxSZW5kZXJTVkdUcmFuc2Zvcm1hYmxl
Q29udGFpbmVyPigqYW5jZXN0b3IpKQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRl
clNWR1RyYW5zZm9ybWFibGVDb250YWluZXI+KCphbmNlc3RvcikuZGlkVHJhbnNmb3JtVG9Sb290
VXBkYXRlKCk7CiAgICAgICAgIGlmIChpczxSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcj4oKmFu
Y2VzdG9yKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clRyZWVBc1RleHQuY3BwCmluZGV4IDFjNGNkZDVhMjI1Yjg0MGU0MGIzNzQwYzA4MDNiMzFiMmNi
N2Y0NjAuLjBkMjMzZmIxY2IwMTcxMjlmYjMwN2I4NjFjMmFjNGE2ODc5MjQwNDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNw
cApAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5o
IgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnRJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCisjaW5jbHVkZSAiUmVuZGVy
U1ZHUm9vdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlSW5saW5lcy5oIgogI2luY2x1ZGUg
IlJlbmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJTVkdDaXJjbGVFbGVtZW50LmgiCkBAIC01MDgs
NiArNTA5LDE2IEBAIHZvaWQgd3JpdGVTVkdDb250YWluZXIoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFJlbmRlclNWR0NvbnRhaW5lciYgY29udGFpbmVyLCBPcHRpCiAgICAgd3JpdGVDaGlsZHJlbih0
cywgY29udGFpbmVyLCBiZWhhdmlvcik7CiB9CiAKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZH
X0VOR0lORSkKK3ZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1Jvb3Qm
IHJvb3QsIE9wdGlvblNldDxSZW5kZXJBc1RleHRGbGFnPiBiZWhhdmlvcikKK3sKKyAgICB3cml0
ZVN0YW5kYXJkUHJlZml4KHRzLCByb290LCBiZWhhdmlvcik7CisgICAgd3JpdGVQb3NpdGlvbkFu
ZFN0eWxlKHRzLCByb290LCBiZWhhdmlvcik7CisgICAgdHMgPDwgIlxuIjsKKyAgICB3cml0ZUNo
aWxkcmVuKHRzLCByb290LCBiZWhhdmlvcik7Cit9CisjZW5kaWYKKwogdm9pZCB3cml0ZShUZXh0
U3RyZWFtJiB0cywgY29uc3QgTGVnYWN5UmVuZGVyU1ZHUm9vdCYgcm9vdCwgT3B0aW9uU2V0PFJl
bmRlckFzVGV4dEZsYWc+IGJlaGF2aW9yKQogewogICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMs
IHJvb3QsIGJlaGF2aW9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmgKaW5kZXggODU5Njk0YTRiYTBiNGE2ODU4MWI1YTI2Mzc4OTBj
OTMwNGI4MThmOS4uNDJiYjhhNjAwNDRiODMyNTFjYzliYWQwMzM4OWNkZGI1MTg3NmM0YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0
LmgKQEAgLTMwLDkgKzMwLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQWZm
aW5lVHJhbnNmb3JtOwogY2xhc3MgQ29sb3I7CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBGbG9h
dFNpemU7CitjbGFzcyBMZWdhY3lSZW5kZXJTVkdSb290OwogY2xhc3MgTm9kZTsKIGNsYXNzIFJl
bmRlckltYWdlOwogY2xhc3MgUmVuZGVyT2JqZWN0OwpAQCAtNDEsMTUgKzQzLDE3IEBAIGNsYXNz
IFJlbmRlclNWR0dyYWRpZW50U3RvcDsKIGNsYXNzIFJlbmRlclNWR0ltYWdlOwogY2xhc3MgUmVu
ZGVyU1ZHSW5saW5lVGV4dDsKIGNsYXNzIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOworY2xh
c3MgUmVuZGVyU1ZHUm9vdDsKIGNsYXNzIFJlbmRlclNWR1NoYXBlOwotY2xhc3MgTGVnYWN5UmVu
ZGVyU1ZHUm9vdDsKIGNsYXNzIFJlbmRlclNWR1RleHQ7Ci1jbGFzcyBBZmZpbmVUcmFuc2Zvcm07
CiBjbGFzcyBTVkdVbml0VHlwZXM7CiAKIC8vIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBtYWluIFJl
bmRlclRyZWVBc1RleHQgY29kZQotdm9pZCB3cml0ZShXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBS
ZW5kZXJTVkdTaGFwZSYsIE9wdGlvblNldDxSZW5kZXJBc1RleHRGbGFnPik7CiB2b2lkIHdyaXRl
KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IExlZ2FjeVJlbmRlclNWR1Jvb3QmLCBPcHRpb25TZXQ8
UmVuZGVyQXNUZXh0RmxhZz4pOworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQor
dm9pZCB3cml0ZShXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdSb290JiwgT3B0aW9u
U2V0PFJlbmRlckFzVGV4dEZsYWc+KTsKKyNlbmRpZgordm9pZCB3cml0ZShXVEY6OlRleHRTdHJl
YW0mLCBjb25zdCBSZW5kZXJTVkdTaGFwZSYsIE9wdGlvblNldDxSZW5kZXJBc1RleHRGbGFnPik7
CiB2b2lkIHdyaXRlU1ZHR3JhZGllbnRTdG9wKFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRl
clNWR0dyYWRpZW50U3RvcCYsIE9wdGlvblNldDxSZW5kZXJBc1RleHRGbGFnPik7CiB2b2lkIHdy
aXRlU1ZHUmVzb3VyY2VDb250YWluZXIoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXImLCBPcHRpb25TZXQ8UmVuZGVyQXNUZXh0RmxhZz4pOwogdm9pZCB3
cml0ZVNWR0NvbnRhaW5lcihXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdDb250YWlu
ZXImLCBPcHRpb25TZXQ8UmVuZGVyQXNUZXh0RmxhZz4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggM2QwNjA3NGY0
NmVjODA0YjJkOTgyMGE5ZmZkODQ5NTBiOGEwMDVjZS4uNjQxYTBkNjdmYzZhMTcyMWVlY2FiZGNj
NWFjM2YxMGM2MzJkZWMwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgU1ZHUmVu
ZGVyaW5nQ29udGV4dDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudChSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlciwgUGFpCiAgICAgLy8gU2V0dXAgdHJhbnNwYXJlbmN5IGxheWVycyBiZWZvcmUgc2V0
dGluZyB1cCBTVkcgcmVzb3VyY2VzIQogICAgIGJvb2wgaXNSZW5kZXJpbmdNYXNrID0gaXNSZW5k
ZXJpbmdNYXNrSW1hZ2UoKm1fcmVuZGVyZXIpOwogICAgIC8vIFJlbmRlckxheWVyIHRha2VzIGNh
cmUgb2Ygcm9vdCBvcGFjaXR5LgotICAgIGZsb2F0IG9wYWNpdHkgPSAocmVuZGVyZXIuaXNTVkdS
b290KCkgfHwgaXNSZW5kZXJpbmdNYXNrKSA/IDEgOiBzdHlsZS5vcGFjaXR5KCk7CisgICAgZmxv
YXQgb3BhY2l0eSA9IChyZW5kZXJlci5pc0xlZ2FjeVNWR1Jvb3QoKSB8fCBpc1JlbmRlcmluZ01h
c2spID8gMSA6IHN0eWxlLm9wYWNpdHkoKTsKICAgICBib29sIGhhc0JsZW5kTW9kZSA9IHN0eWxl
Lmhhc0JsZW5kTW9kZSgpOwogICAgIGJvb2wgaGFzSXNvbGF0aW9uID0gc3R5bGUuaGFzSXNvbGF0
aW9uKCk7CiAgICAgYm9vbCBpc29sYXRlTWFza0ZvckJsZW5kaW5nID0gZmFsc2U7CkBAIC0yMDYs
NyArMjA2LDcgQEAgQWZmaW5lVHJhbnNmb3JtIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0
ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXQKICAgICBjb25zdCBSZW5kZXJPYmpl
Y3QqIGFuY2VzdG9yID0gJnJlbmRlcmVyOwogICAgIHdoaWxlIChhbmNlc3RvcikgewogICAgICAg
ICBhYnNvbHV0ZVRyYW5zZm9ybSA9IGFuY2VzdG9yLT5sb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkg
KiBhYnNvbHV0ZVRyYW5zZm9ybTsKLSAgICAgICAgaWYgKGFuY2VzdG9yLT5pc1NWR1Jvb3QoKSkK
KyAgICAgICAgaWYgKGFuY2VzdG9yLT5pc1NWR1Jvb3RPckxlZ2FjeVNWR1Jvb3QoKSkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnQoKTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVy
VHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRl
clRyZWVCdWlsZGVyLmNwcAppbmRleCA5N2MxMDg3MWIzOTY1ZjZhMWVhY2ZjNmFlYWM3MGI3YTBl
NGJjOTM3Li5mZjkwZjhkNDJhMzMyNTQ5ZmQ1MTZmMjAyNjEwMzYwNGJiYjcyMmRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVp
bGRlci5jcHAKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJSZW5kZXJSdWJ5UnVuLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5l
LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQu
aCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5o
IgpAQCAtMjkwLDYgKzI5MSwxMyBAQCB2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjphdHRhY2hJbnRl
cm5hbChSZW5kZXJFbGVtZW50JiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAg
aWYgKGlzPFJlbmRlclNWR1Jvb3Q+KHBhcmVudCkpIHsKKyAgICAgICAgc3ZnQnVpbGRlcigpLmF0
dGFjaChkb3duY2FzdDxSZW5kZXJTVkdSb290PihwYXJlbnQpLCBXVEZNb3ZlKGNoaWxkKSwgYmVm
b3JlQ2hpbGQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKICAgICBpZiAoaXM8
TGVnYWN5UmVuZGVyU1ZHUm9vdD4ocGFyZW50KSkgewogICAgICAgICBzdmdCdWlsZGVyKCkuYXR0
YWNoKGRvd25jYXN0PExlZ2FjeVJlbmRlclNWR1Jvb3Q+KHBhcmVudCksIFdURk1vdmUoY2hpbGQp
LCBiZWZvcmVDaGlsZCk7CiAgICAgICAgIHJldHVybjsKQEAgLTM3NCw2ICszODIsMTEgQEAgUmVu
ZGVyUHRyPFJlbmRlck9iamVjdD4gUmVuZGVyVHJlZUJ1aWxkZXI6OmRldGFjaChSZW5kZXJFbGVt
ZW50JiBwYXJlbnQsIFJlbmRlck8KICAgICBpZiAoaXM8UmVuZGVyU1ZHQ29udGFpbmVyPihwYXJl
bnQpKQogICAgICAgICByZXR1cm4gc3ZnQnVpbGRlcigpLmRldGFjaChkb3duY2FzdDxSZW5kZXJT
VkdDb250YWluZXI+KHBhcmVudCksIGNoaWxkKTsKIAorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9T
VkdfRU5HSU5FKQorICAgIGlmIChpczxSZW5kZXJTVkdSb290PihwYXJlbnQpKQorICAgICAgICBy
ZXR1cm4gc3ZnQnVpbGRlcigpLmRldGFjaChkb3duY2FzdDxSZW5kZXJTVkdSb290PihwYXJlbnQp
LCBjaGlsZCk7CisjZW5kaWYKKwogICAgIGlmIChpczxMZWdhY3lSZW5kZXJTVkdSb290PihwYXJl
bnQpKQogICAgICAgICByZXR1cm4gc3ZnQnVpbGRlcigpLmRldGFjaChkb3duY2FzdDxMZWdhY3lS
ZW5kZXJTVkdSb290PihwYXJlbnQpLCBjaGlsZCk7CiAKQEAgLTk5NSw3ICsxMDA4LDcgQEAgdm9p
ZCBSZW5kZXJUcmVlQnVpbGRlcjo6cmVwb3J0VmlzdWFsbHlOb25FbXB0eUNvbnRlbnQoY29uc3Qg
UmVuZGVyRWxlbWVudCYgcGFyZW4KICAgICAgICAgbV92aWV3LmZyYW1lVmlldygpLmluY3JlbWVu
dFZpc3VhbGx5Tm9uRW1wdHlQaXhlbENvdW50KHJvdW5kZWRJbnRTaXplKHJlcGxhY2VkUmVuZGVy
ZXIuaW50cmluc2ljU2l6ZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKGlz
PExlZ2FjeVJlbmRlclNWR1Jvb3Q+KGNoaWxkKSkgeworICAgIGlmIChjaGlsZC5pc1NWR1Jvb3RP
ckxlZ2FjeVNWR1Jvb3QoKSkgewogICAgICAgICBhdXRvIGZpeGVkU2l6ZSA9IFtdIChjb25zdCBh
dXRvJiByZW5kZXJlcikgLT4gc3RkOjpvcHRpb25hbDxJbnRTaXplPiB7CiAgICAgICAgICAgICBh
dXRvJiBzdHlsZSA9IHJlbmRlcmVyLnN0eWxlKCk7CiAgICAgICAgICAgICBpZiAoIXN0eWxlLndp
ZHRoKCkuaXNGaXhlZCgpIHx8ICFzdHlsZS5oZWlnaHQoKS5pc0ZpeGVkKCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJTVkcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVy
U1ZHLmNwcAppbmRleCBjNzZjNzYyNmVjZDgxMDljODYzMWQwYWY4NDhmMmNhNTRjZDBmZDBlLi45
ZTgwYWM0Yzk4Njk1NzFjNmMxZTdhNGJkZjk5ZTM0OTUxYWI5OTEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJTVkcuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlclNW
Ry5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJMZWdhY3lSZW5kZXJTVkdSb290Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5s
aW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Rl
eHQuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlckJsb2NrLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVHJlZUJ1aWxkZXJCbG9ja0Zsb3cuaCIKQEAgLTQyLDYgKzQzLDEzIEBAIFJlbmRlclRyZWVC
dWlsZGVyOjpTVkc6OlNWRyhSZW5kZXJUcmVlQnVpbGRlciYgYnVpbGRlcikKIHsKIH0KIAordm9p
ZCBSZW5kZXJUcmVlQnVpbGRlcjo6U1ZHOjphdHRhY2goTGVnYWN5UmVuZGVyU1ZHUm9vdCYgcGFy
ZW50LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCkKK3sKKyAgICBhdXRvJiBjaGlsZFRvQWRkID0gKmNoaWxkOworICAgIG1fYnVpbGRlci5h
dHRhY2hUb1JlbmRlckVsZW1lbnQocGFyZW50LCBXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQp
OworICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRXYXNBZGRlZFRvVHJlZShjaGlsZFRvQWRk
KTsKK30KKwogdm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6U1ZHOjphdHRhY2goUmVuZGVyU1ZHQ29u
dGFpbmVyJiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkKQogewogICAgIGF1dG8mIGNoaWxkVG9BZGQgPSAqY2hpbGQ7CkBAIC01
OSwxMiArNjcsMTQgQEAgdm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6U1ZHOjphdHRhY2goUmVuZGVy
U1ZHSW5saW5lJiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmoKICAgICAgICAgdGV4dEFuY2Vz
dG9yLT5zdWJ0cmVlQ2hpbGRXYXNBZGRlZCgmY2hpbGRUb0FkZCk7CiB9CiAKLXZvaWQgUmVuZGVy
VHJlZUJ1aWxkZXI6OlNWRzo6YXR0YWNoKExlZ2FjeVJlbmRlclNWR1Jvb3QmIHBhcmVudCwgUmVu
ZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCisj
aWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCit2b2lkIFJlbmRlclRyZWVCdWlsZGVy
OjpTVkc6OmF0dGFjaChSZW5kZXJTVkdSb290JiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmpl
Y3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewogICAgIGF1dG8mIGNoaWxk
VG9BZGQgPSAqY2hpbGQ7CiAgICAgbV9idWlsZGVyLmF0dGFjaFRvUmVuZGVyRWxlbWVudChwYXJl
bnQsIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6
OmNsaWVudFdhc0FkZGVkVG9UcmVlKGNoaWxkVG9BZGQpOwogfQorI2VuZGlmCiAKIHZvaWQgUmVu
ZGVyVHJlZUJ1aWxkZXI6OlNWRzo6YXR0YWNoKFJlbmRlclNWR1RleHQmIHBhcmVudCwgUmVuZGVy
UHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7CkBA
IC03NSw2ICs4NSwxMiBAQCB2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjpTVkc6OmF0dGFjaChSZW5k
ZXJTVkdUZXh0JiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmplYwogICAgIHBhcmVudC5zdWJ0
cmVlQ2hpbGRXYXNBZGRlZCgmY2hpbGRUb0FkZCk7CiB9CiAKK1JlbmRlclB0cjxSZW5kZXJPYmpl
Y3Q+IFJlbmRlclRyZWVCdWlsZGVyOjpTVkc6OmRldGFjaChMZWdhY3lSZW5kZXJTVkdSb290JiBw
YXJlbnQsIFJlbmRlck9iamVjdCYgY2hpbGQpCit7CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNs
aWVudFdpbGxCZVJlbW92ZWRGcm9tVHJlZShjaGlsZCk7CisgICAgcmV0dXJuIG1fYnVpbGRlci5k
ZXRhY2hGcm9tUmVuZGVyRWxlbWVudChwYXJlbnQsIGNoaWxkKTsKK30KKwogUmVuZGVyUHRyPFJl
bmRlck9iamVjdD4gUmVuZGVyVHJlZUJ1aWxkZXI6OlNWRzo6ZGV0YWNoKFJlbmRlclNWR1RleHQm
IHBhcmVudCwgUmVuZGVyT2JqZWN0JiBjaGlsZCkKIHsKICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6
Y2xpZW50V2lsbEJlUmVtb3ZlZEZyb21UcmVlKGNoaWxkKTsKQEAgLTEwNywxMCArMTIzLDEyIEBA
IFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlclRyZWVCdWlsZGVyOjpTVkc6OmRldGFjaChS
ZW5kZXJTVkdDb250YWluZXImIHBhcmVuCiAgICAgcmV0dXJuIG1fYnVpbGRlci5kZXRhY2hGcm9t
UmVuZGVyRWxlbWVudChwYXJlbnQsIGNoaWxkKTsKIH0KIAotUmVuZGVyUHRyPFJlbmRlck9iamVj
dD4gUmVuZGVyVHJlZUJ1aWxkZXI6OlNWRzo6ZGV0YWNoKExlZ2FjeVJlbmRlclNWR1Jvb3QmIHBh
cmVudCwgUmVuZGVyT2JqZWN0JiBjaGlsZCkKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VO
R0lORSkKK1JlbmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlclRyZWVCdWlsZGVyOjpTVkc6OmRl
dGFjaChSZW5kZXJTVkdSb290JiBwYXJlbnQsIFJlbmRlck9iamVjdCYgY2hpbGQpCiB7CiAgICAg
U1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdpbGxCZVJlbW92ZWRGcm9tVHJlZShjaGlsZCk7CiAg
ICAgcmV0dXJuIG1fYnVpbGRlci5kZXRhY2hGcm9tUmVuZGVyRWxlbWVudChwYXJlbnQsIGNoaWxk
KTsKIH0KKyNlbmRpZgogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
dXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJTVkcuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlclNWRy5oCmluZGV4IDhhNGQwZmE1YjhhNGY2NDAz
ODNiNWMwZDM0OWExZmNmYWU1YWE4ZDIuLmYyY2FkODBlOTRmYjYyODQ4N2U5OWJkYjE3MmRkZWE0
MWRlZWVhMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9S
ZW5kZXJUcmVlQnVpbGRlclNWRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRh
dGluZy9SZW5kZXJUcmVlQnVpbGRlclNWRy5oCkBAIC0yOSw5ICsyOSwxMCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIExlZ2FjeVJlbmRlclNWR1Jvb3Q7CiBjbGFzcyBSZW5kZXJT
VkdDb250YWluZXI7CiBjbGFzcyBSZW5kZXJTVkdJbmxpbmU7Ci1jbGFzcyBMZWdhY3lSZW5kZXJT
VkdSb290OworY2xhc3MgUmVuZGVyU1ZHUm9vdDsKIGNsYXNzIFJlbmRlclNWR1RleHQ7CiAKIGNs
YXNzIFJlbmRlclRyZWVCdWlsZGVyOjpTVkcgewpAQCAtMzksMTUgKzQwLDIxIEBAIGNsYXNzIFJl
bmRlclRyZWVCdWlsZGVyOjpTVkcgewogcHVibGljOgogICAgIFNWRyhSZW5kZXJUcmVlQnVpbGRl
ciYpOwogCisgICAgdm9pZCBhdHRhY2goTGVnYWN5UmVuZGVyU1ZHUm9vdCYgcGFyZW50LCBSZW5k
ZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CiAg
ICAgdm9pZCBhdHRhY2goUmVuZGVyU1ZHQ29udGFpbmVyJiBwYXJlbnQsIFJlbmRlclB0cjxSZW5k
ZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKTsKICAgICB2b2lkIGF0
dGFjaChSZW5kZXJTVkdJbmxpbmUmIHBhcmVudCwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hp
bGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwotICAgIHZvaWQgYXR0YWNoKExlZ2FjeVJl
bmRlclNWR1Jvb3QmIHBhcmVudCwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRl
ck9iamVjdCogYmVmb3JlQ2hpbGQpOworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5F
KQorICAgIHZvaWQgYXR0YWNoKFJlbmRlclNWR1Jvb3QmIHBhcmVudCwgUmVuZGVyUHRyPFJlbmRl
ck9iamVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOworI2VuZGlmCiAgICAg
dm9pZCBhdHRhY2goUmVuZGVyU1ZHVGV4dCYgcGFyZW50LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0
PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CiAKLSAgICBSZW5kZXJQdHI8UmVu
ZGVyT2JqZWN0PiBkZXRhY2goUmVuZGVyU1ZHVGV4dCYgcGFyZW50LCBSZW5kZXJPYmplY3QmIGNo
aWxkKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gZGV0
YWNoKFJlbmRlclNWR0lubGluZSYgcGFyZW50LCBSZW5kZXJPYmplY3QmIGNoaWxkKSBXQVJOX1VO
VVNFRF9SRVRVUk47Ci0gICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gZGV0YWNoKFJlbmRlclNW
R0NvbnRhaW5lciYgcGFyZW50LCBSZW5kZXJPYmplY3QmIGNoaWxkKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CiAgICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gZGV0YWNoKExlZ2FjeVJlbmRlclNWR1Jv
b3QmIHBhcmVudCwgUmVuZGVyT2JqZWN0JiBjaGlsZCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAg
IFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGRldGFjaChSZW5kZXJTVkdDb250YWluZXImIHBhcmVu
dCwgUmVuZGVyT2JqZWN0JiBjaGlsZCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIFJlbmRlclB0
cjxSZW5kZXJPYmplY3Q+IGRldGFjaChSZW5kZXJTVkdJbmxpbmUmIHBhcmVudCwgUmVuZGVyT2Jq
ZWN0JiBjaGlsZCkgV0FSTl9VTlVTRURfUkVUVVJOOworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9T
VkdfRU5HSU5FKQorICAgIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGRldGFjaChSZW5kZXJTVkdS
b290JiBwYXJlbnQsIFJlbmRlck9iamVjdCYgY2hpbGQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyNl
bmRpZgorICAgIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGRldGFjaChSZW5kZXJTVkdUZXh0JiBw
YXJlbnQsIFJlbmRlck9iamVjdCYgY2hpbGQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIAogcHJpdmF0
ZToKICAgICBSZW5kZXJUcmVlQnVpbGRlciYgbV9idWlsZGVyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwCmluZGV4IGJiNWM4NjYzZDcxYzE0MDA4YjAzZDU1YzAwZDZkODhlODViYjkzNDMuLmM4
NjgzMzNlODM2Y2I3ZTRlMGIyNDhjOTc3NDJmNTQ5M2JlMWRkZDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RWxlbWVudC5jcHAKQEAgLTUyNCwxMiArNTI0LDM4IEBAIHZvaWQgU1ZHRWxlbWVudDo6ZmluaXNo
UGFyc2luZ0NoaWxkcmVuKCkKICAgICBpbnZhbGlkYXRlSW5zdGFuY2VzKCk7CiB9CiAKKyNpZiBF
TkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKK3N0YXRpYyBNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gY3JlYXRlU1ZHTGF5ZXJBd2FyZUVsZW1l
bnRTZXQoKQoreworICAgIC8vIExpc3Qgb2YgYWxsIFNWRyBlbGVtZW50cyB3aG9zZSByZW5kZXJl
cnMgc3VwcG9ydCB0aGUgbGF5ZXIgYXdhcmUgbGF5b3V0IC8gcGFpbnRpbmcgLyBoaXQtdGVzdGlu
ZyBtb2RlICgnTEJTRS1tb2RlJykuCisgICAgdXNpbmcgbmFtZXNwYWNlIFNWR05hbWVzOworICAg
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7
CisgICAgZm9yIChhdXRvJiB0YWcgOiB7IHJlY3RUYWcuZ2V0KCkgfSkKKyAgICAgICAgc2V0LmFk
ZCh0YWcubG9jYWxOYW1lKCkpOworICAgIHJldHVybiBzZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBpc1NWR0xheWVyQXdhcmVFbGVtZW50KGNvbnN0IFNWR0VsZW1lbnQmIGVsZW1lbnQpCit7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaFNldDxBdG9tU3RyaW5nPj4gc2V0ID0gY3JlYXRlU1ZHTGF5ZXJBd2FyZUVsZW1lbnRT
ZXQoKTsKKyAgICByZXR1cm4gc2V0LmdldCgpLmNvbnRhaW5zKGVsZW1lbnQubG9jYWxOYW1lKCkp
OworfQorI2VuZGlmCisKIGJvb2wgU1ZHRWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJl
cihjb25zdCBOb2RlJiBjaGlsZCkgY29uc3QKIHsKICAgICBpZiAoIWNoaWxkLmlzU1ZHRWxlbWVu
dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYXV0byYgc3ZnQ2hpbGQgPSBkb3duY2Fz
dDxTVkdFbGVtZW50PihjaGlsZCk7CiAKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lO
RSkKKyAgICAvLyBJZiB0aGUgbGF5ZXIgYmFzZWQgU1ZHIGVuZ2luZSBpcyBlbmFibGVkLCBhbGwg
cmVuZGVyZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgdGhlCisgICAgLy8gUmVuZGVyTGF5ZXIgYXdh
cmUgbGF5b3V0IC8gcGFpbnRpbmcgLyBoaXQtdGVzdGluZyBtb2RlICgnTEJTRS1tb2RlJykgaGF2
ZSB0byBiZSBza2lwcGVkLgorICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gc3VwcG9ydCBm
b3IgYWxsIGVsZW1lbnRzLCBhbmQgcmVtb3ZlICdpc1NWR0xheWVyQXdhcmVFbGVtZW50JyBjaGVj
ayBhZnRlcndhcmRzLgorICAgIGlmIChkb2N1bWVudCgpLnNldHRpbmdzKCkubGF5ZXJCYXNlZFNW
R0VuZ2luZUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGlzU1ZHTGF5ZXJBd2FyZUVsZW1lbnQo
c3ZnQ2hpbGQpOworI2VuZGlmCisKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSogY29u
c3QgaW52YWxpZFRleHRDb250ZW50W10gewogICAgICAgICAmU1ZHTmFtZXM6OmFsdEdseXBoVGFn
LmdldCgpLAogICAgICAgICAmU1ZHTmFtZXM6OnRleHRQYXRoVGFnLmdldCgpLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1NWR0VsZW1lbnQuY3BwCmluZGV4IDZhMTAzYjJhM2M2MDdhYWQ3NmZmYjkyNzUzYTkz
MTA5MGRhNWM3ZWQuLmE2MGJjZTgzYzRjNjc4OTA2Y2MzYTQ1MDdkYmQzOTM0N2NhYzMzNmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkxlZ2FjeVJlbmRlclNWR1Jvb3QuaCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3Qu
aCIKICNpbmNsdWRlICJSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKICNpbmNsdWRlICJTTUlMVGltZUNvbnRhaW5lci5oIgpAQCAtMjExLDYgKzIx
MiwxMCBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgICAgIGludmFsaWRhdGVTVkdQcmVzZW50YXRpb25h
bEhpbnRTdHlsZSgpOwogCiAgICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVy
ZXIoKSkgeworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgICAgICAgICAg
aWYgKGlzPFJlbmRlclNWR1Jvb3Q+KHJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJTVkdSb290
PigqcmVuZGVyZXIpLmlzRW1iZWRkZWRUaHJvdWdoRnJhbWVDb250YWluaW5nU1ZHRG9jdW1lbnQo
KSkKKyAgICAgICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBh
cmVudFJlc291cmNlSW52YWxpZGF0aW9uKCpyZW5kZXJlcik7CisjZW5kaWYKICAgICAgICAgICAg
IGlmIChpczxMZWdhY3lSZW5kZXJTVkdSb290PihyZW5kZXJlcikgJiYgZG93bmNhc3Q8TGVnYWN5
UmVuZGVyU1ZHUm9vdD4oKnJlbmRlcmVyKS5pc0VtYmVkZGVkVGhyb3VnaEZyYW1lQ29udGFpbmlu
Z1NWR0RvY3VtZW50KCkpCiAgICAgICAgICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtG
b3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbigqcmVuZGVyZXIpOwogICAgICAg
ICB9CkBAIC0zOTMsOCArMzk4LDEzIEBAIGJvb2wgU1ZHU1ZHRWxlbWVudDo6cmVuZGVyZXJJc05l
ZWRlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiAKIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50
PiBTVkdTVkdFbGVtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiBzdHls
ZSwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikKIHsKLSAgICBpZiAoaXNPdXRlcm1vc3RTVkdT
VkdFbGVtZW50KCkpCisgICAgaWYgKGlzT3V0ZXJtb3N0U1ZHU1ZHRWxlbWVudCgpKSB7CisjaWYg
RU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgICAgIGlmIChkb2N1bWVudCgpLnNl
dHRpbmdzKCkubGF5ZXJCYXNlZFNWR0VuZ2luZUVuYWJsZWQoKSkKKyAgICAgICAgICAgIHJldHVy
biBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTVkdSb290PigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwor
I2VuZGlmCiAgICAgICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxMZWdhY3lSZW5kZXJTVkdSb290
PigqdGhpcywgV1RGTW92ZShzdHlsZSkpOworICAgIH0KICAgICByZXR1cm4gY3JlYXRlUmVuZGVy
ZXI8UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7CiB9
CiAKQEAgLTQ3NSwxOSArNDg1LDM3IEBAIEZsb2F0UmVjdCBTVkdTVkdFbGVtZW50OjpjdXJyZW50
Vmlld0JveFJlY3QoKSBjb25zdAogICAgIGlmICghdmlld0JveC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiB2aWV3Qm94OwogCi0gICAgaWYgKCFpczxMZWdhY3lSZW5kZXJTVkdSb290PihyZW5k
ZXJlcigpKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBpZiAoIWRvd25jYXN0PExlZ2FjeVJl
bmRlclNWR1Jvb3Q+KCpyZW5kZXJlcigpKS5pc0VtYmVkZGVkVGhyb3VnaFNWR0ltYWdlKCkpCi0g
ICAgICAgIHJldHVybiB7IH07CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisg
ICAgaWYgKGlzPFJlbmRlclNWR1Jvb3Q+KHJlbmRlcmVyKCkpKSB7CisgICAgICAgIGlmICghZG93
bmNhc3Q8UmVuZGVyU1ZHUm9vdD4oKnJlbmRlcmVyKCkpLmlzRW1iZWRkZWRUaHJvdWdoU1ZHSW1h
Z2UoKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBMZW5ndGggaW50cmluc2ljV2lk
dGggPSB0aGlzLT5pbnRyaW5zaWNXaWR0aCgpOwotICAgIExlbmd0aCBpbnRyaW5zaWNIZWlnaHQg
PSB0aGlzLT5pbnRyaW5zaWNIZWlnaHQoKTsKLSAgICBpZiAoIWludHJpbnNpY1dpZHRoLmlzRml4
ZWQoKSB8fCAhaW50cmluc2ljSGVpZ2h0LmlzRml4ZWQoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICAgICAgTGVuZ3RoIGludHJpbnNpY1dpZHRoID0gdGhpcy0+aW50cmluc2ljV2lkdGgoKTsK
KyAgICAgICAgTGVuZ3RoIGludHJpbnNpY0hlaWdodCA9IHRoaXMtPmludHJpbnNpY0hlaWdodCgp
OworICAgICAgICBpZiAoIWludHJpbnNpY1dpZHRoLmlzRml4ZWQoKSB8fCAhaW50cmluc2ljSGVp
Z2h0LmlzRml4ZWQoKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgLy8gSWYg
bm8gdmlld0JveCBpcyBzcGVjaWZpZWQgYnV0IG5vbi1yZWxhdGl2ZSB3aWR0aC9oZWlnaHQgdmFs
dWVzLCB0aGVuIHdlCisgICAgICAgIC8vIHNob3VsZCBhbHdheXMgc3ludGhlc2l6ZSBhIHZpZXdC
b3ggaWYgd2UncmUgZW1iZWRkZWQgdGhyb3VnaCBhIFNWR0ltYWdlLgorICAgICAgICByZXR1cm4g
eyAwLCAwLCBmbG9hdFZhbHVlRm9yTGVuZ3RoKGludHJpbnNpY1dpZHRoLCAwKSwgZmxvYXRWYWx1
ZUZvckxlbmd0aChpbnRyaW5zaWNIZWlnaHQsIDApIH07CisgICAgfQorI2VuZGlmCisKKyAgICBp
ZiAoaXM8TGVnYWN5UmVuZGVyU1ZHUm9vdD4ocmVuZGVyZXIoKSkpIHsKKyAgICAgICAgaWYgKCFk
b3duY2FzdDxMZWdhY3lSZW5kZXJTVkdSb290PigqcmVuZGVyZXIoKSkuaXNFbWJlZGRlZFRocm91
Z2hTVkdJbWFnZSgpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBMZW5ndGgg
aW50cmluc2ljV2lkdGggPSB0aGlzLT5pbnRyaW5zaWNXaWR0aCgpOworICAgICAgICBMZW5ndGgg
aW50cmluc2ljSGVpZ2h0ID0gdGhpcy0+aW50cmluc2ljSGVpZ2h0KCk7CisgICAgICAgIGlmICgh
aW50cmluc2ljV2lkdGguaXNGaXhlZCgpIHx8ICFpbnRyaW5zaWNIZWlnaHQuaXNGaXhlZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIC8vIElmIG5vIHZpZXdCb3ggaXMgc3BlY2lm
aWVkIGJ1dCBub24tcmVsYXRpdmUgd2lkdGgvaGVpZ2h0IHZhbHVlcywgdGhlbiB3ZQotICAgIC8v
IHNob3VsZCBhbHdheXMgc3ludGhlc2l6ZSBhIHZpZXdCb3ggaWYgd2UncmUgZW1iZWRkZWQgdGhy
b3VnaCBhIFNWR0ltYWdlLiAgICAKLSAgICByZXR1cm4geyAwLCAwLCBmbG9hdFZhbHVlRm9yTGVu
Z3RoKGludHJpbnNpY1dpZHRoLCAwKSwgZmxvYXRWYWx1ZUZvckxlbmd0aChpbnRyaW5zaWNIZWln
aHQsIDApIH07CisgICAgICAgIC8vIElmIG5vIHZpZXdCb3ggaXMgc3BlY2lmaWVkIGJ1dCBub24t
cmVsYXRpdmUgd2lkdGgvaGVpZ2h0IHZhbHVlcywgdGhlbiB3ZQorICAgICAgICAvLyBzaG91bGQg
YWx3YXlzIHN5bnRoZXNpemUgYSB2aWV3Qm94IGlmIHdlJ3JlIGVtYmVkZGVkIHRocm91Z2ggYSBT
VkdJbWFnZS4KKyAgICAgICAgcmV0dXJuIHsgMCwgMCwgZmxvYXRWYWx1ZUZvckxlbmd0aChpbnRy
aW5zaWNXaWR0aCwgMCksIGZsb2F0VmFsdWVGb3JMZW5ndGgoaW50cmluc2ljSGVpZ2h0LCAwKSB9
OworICAgIH0KKworICAgIHJldHVybiB7IH07CiB9CiAKIEZsb2F0U2l6ZSBTVkdTVkdFbGVtZW50
OjpjdXJyZW50Vmlld3BvcnRTaXplKCkgY29uc3QKQEAgLTQ5OCw2ICs1MjYsMTEgQEAgRmxvYXRT
aXplIFNWR1NWR0VsZW1lbnQ6OmN1cnJlbnRWaWV3cG9ydFNpemUoKSBjb25zdAogICAgICAgICBp
ZiAoaXM8TGVnYWN5UmVuZGVyU1ZHUm9vdD4oKnJlbmRlcmVyKCkpKSB7CiAgICAgICAgICAgICBh
dXRvJiByb290ID0gZG93bmNhc3Q8TGVnYWN5UmVuZGVyU1ZHUm9vdD4oKnJlbmRlcmVyKCkpOwog
ICAgICAgICAgICAgdmlld3BvcnRTaXplID0gcm9vdC5jb250ZW50Qm94UmVjdCgpLnNpemUoKSAv
IHJvb3Quc3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NW
R19FTkdJTkUpCisgICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyU1ZHUm9vdD4oKnJlbmRlcmVy
KCkpKSB7CisgICAgICAgICAgICBhdXRvJiByb290ID0gZG93bmNhc3Q8UmVuZGVyU1ZHUm9vdD4o
KnJlbmRlcmVyKCkpOworICAgICAgICAgICAgdmlld3BvcnRTaXplID0gcm9vdC5jb250ZW50Qm94
UmVjdCgpLnNpemUoKSAvIHJvb3Quc3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CisjZW5kaWYKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICB2aWV3cG9ydFNpemUgPSBkb3duY2FzdDxSZW5kZXJT
VkdWaWV3cG9ydENvbnRhaW5lcj4oKnJlbmRlcmVyKCkpLnZpZXdwb3J0KCkuc2l6ZSgpOwogICAg
IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446035</attachid>
            <date>2021-12-06 06:22:44 -0800</date>
            <delta_ts>2021-12-07 04:12:26 -0800</delta_ts>
            <desc>Patch, v2</desc>
            <filename>bug-233863-20211206062243.patch</filename>
            <type>text/plain</type>
            <size>47402</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NTQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDU2ZjIwNmJlNjk0ZGU4
M2ZjNDhlNjgwODQ4NmM1OWQ4ODkyZTgzZS4uMDQ0OWU2ODgxNDYyY2M4MTk1NDcxYTg5MDZlMGZm
NTQxM2ZlOWQyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDIxLTEyLTA2ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtMQlNF
XSBCZWdpbiBsYXllci1hd2FyZSBSZW5kZXJTVkdSb290IGltcGxlbWVudGF0aW9uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM4NjMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCZWdpbiBpbXBsZW1lbnRp
bmcgUmVuZGVyU1ZHUm9vdCAtIHRoZSByZW5kZXJlciBmb3IgdGhlIG91dGVybW9zdCA8c3ZnPiBl
bGVtZW50IC0KKyAgICAgICAgZm9yIHRoZSBsYXllci1iYXNlZCBTVkcgZW5naW5lIChMQlNFKS4g
U3RhcnRpbmcgd2l0aCB0aGUgZG93bnN0cmVhbSBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgYWxs
IHBhcnRzIHdlcmUgcmVtb3ZlZCB0aGF0IGNhbiBiZSB1cHN0cmVhbWVkIHNlcGFyYXRlZCAoU1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbiwKKyAgICAgICAgU1ZHQ29udGFpbmVyTGF5b3V0LCBldGMu
KS4gVGhpcyBvbmx5IGNyZWF0ZXMgdGhlIHJlbmRlcmVyIGFuZCBpbnRlZ3JhdGVzIGl0IHdpdGgK
KyAgICAgICAgdGhlIGJ1aWxkIHN5c3RlbXMuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGlu
ZyB0ZXN0cywgbm8gY2hhbmdlIGluIGJlaGF2aW91ci4KKworICAgICAgICAqIFNvdXJjZXMudHh0
OiBBZGQgUmVuZGVyU1ZHUm9vdC4qIHRvIGJ1aWxkLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oOiBNYWtlIGRpcmVjdGlvbigpIHB1YmxpYy4KKyAg
ICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybVN0YXRlOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUm9vdDo6UmVuZGVyU1ZHUm9vdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSb290OjpzdmdTVkdFbGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jvb3Q6OmNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmlzRW1iZWRkZWRUaHJvdWdoU1ZHSW1hZ2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6aXNFbWJlZGRlZFRocm91
Z2hGcmFtZUNvbnRhaW5pbmdTVkdEb2N1bWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSb290Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpsYXlvdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6c2hvdWxkQXBwbHlWaWV3cG9ydENsaXAgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6cGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUm9vdDo6cGFpbnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUm9vdDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdS
b290Ojp3aWxsQmVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6
aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojp3aWxs
QmVSZW1vdmVkRnJvbVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6c3R5
bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6dXBkYXRlTGF5
ZXJJbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojp1cGRhdGVG
cm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6Y2xpcHBlZE92ZXJm
bG93UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojpjb21wdXRl
VHJhbnNmb3JtYXRpb25NYXRyaWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290
Ojpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpoYXNSZWxh
dGl2ZURpbWVuc2lvbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6
YWRkUmVzb3VyY2VGb3JDbGllbnRJbnZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUm9vdDo6Y3VycmVudFZpZXdwb3J0U2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSb290OjptYXBMb2NhbFRvQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jvb3Q6Om92ZXJmbG93Q2xpcFJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6YXBwbHlUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6YWJzb2x1dGVSZWN0cyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSb290OjphYnNvbHV0ZVF1YWRzIGNvbnN0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaDogQWRkZWQuCisKIDIwMjEtMTItMDYgIE5pa29s
YXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0xCU0Vd
IFRvZ2dsaW5nIHRoZSBTZXR0aW5ncyAtPiBFbmFibGVkIExCU0UgZmxhZyBoYXMgbm8gaW1tZWRp
YXRlIGVmZmVjdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBlYjM2OGJkMGEzNDMwYTBiYTY0YWY3NzRjNzc1
ODUyMDczZjNlMmU1Li41MTQ2MTU4ZGZmNTI1NGM4ZWE4OGRmZTlkM2FiZGU1YTQ1MGNjMzFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dApAQCAtMjQ5Myw2ICsyNDkzLDcgQEAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZU1hc2tlci5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuLmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNw
cAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCityZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNw
cAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHVGV4dC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA2ZGIwMWI1YTBjZGY1ZmE2ODdkMzJlM2YxNTQzYjFjNGNjOTg4ZDFi
Li4wMDQ5NjJkZjFmOGQ2YjBmZmU1MWE1YTI0NTIyMDUyZTZjZWJkMzY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMjUzLDYg
KzEyNTMsNyBAQAogCQk0MzY3MDhERjEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3Vy
Y2VQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MzY3MDhBMDEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgg
Ki87IH07CiAJCTQzNjcwOEUxMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVJh
ZGlhbEdyYWRpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MzY3MDhBMjEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxH
cmFkaWVudC5oICovOyB9OwogCQk0MzY3MDhFMzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZH
UmVzb3VyY2VTb2xpZENvbG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MzY3MDhBNDEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VT
b2xpZENvbG9yLmggKi87IH07CisJCTQzNjcwOEU1MTJEOURCNEIwMDA0NDIzNCAvKiBSZW5kZXJT
VkdSb290LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
MzY3MDhBNjEyRDlEQjRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUm9vdC5oICovOyB9OwogCQk0MzY3
MDhFNTEyRDlDQTRCMDAwNDQyMzQgLyogTGVnYWN5UmVuZGVyU1ZHUm9vdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4QTYxMkQ5Q0E0QjAwMDQ0
MjM0IC8qIExlZ2FjeVJlbmRlclNWR1Jvb3QuaCAqLzsgfTsKIAkJNDM2NzA4RTkxMkQ5Q0E0QjAw
MDQ0MjM0IC8qIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwOEFBMTJEOUNBNEIwMDA0NDIz
NCAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmggKi87IH07CiAJCTQzNjcwOEVC
MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4QUMxMkQ5Q0E0QjAw
MDQ0MjM0IC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmggKi87IH07CkBAIC04OTc1LDYg
Kzg5NzYsOCBAQAogCQk0MzY3MDhBMjEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3Vy
Y2VSYWRpYWxHcmFkaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQzNjcwOEEzMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29s
b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM2NzA4
QTQxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4QTUxMkQ5Q0E1QzAwMDQ0MjM0
IC8qIFJlbmRlclNWR1Jvb3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVuZGVyU1ZHUm9vdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcw
OEE2MTJEOURCNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSb290LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jvb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDM2NzA4QTUxMkQ5Q0E0QjAwMDQ0MjM0IC8qIExlZ2FjeVJlbmRlclNWR1Jvb3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGVnYWN5UmVuZGVyU1ZHUm9v
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzNjcwOEE2MTJEOUNBNEIwMDA0
NDIzNCAvKiBMZWdhY3lSZW5kZXJTVkdSb290LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExlZ2FjeVJlbmRlclNWR1Jvb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDM2NzA4QTkxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250
YWluZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZH
VHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xODg2NCw2ICsxODg2Nyw4IEBACiAJCQkJQ0RGNzQ3RjgyNzBGODdDQjAwOEZFRUVDIC8qIFJl
bmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnRJbmxpbmVzLmggKi8sCiAJCQkJNDM2NzA4QTMx
MkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAgKi8sCiAJ
CQkJNDM2NzA4QTQxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
ci5oICovLAorCQkJCTQzNjcwOEE1MTJEOUNBNUMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSb290LmNw
cCAqLywKKwkJCQk0MzY3MDhBNjEyRDlEQjRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUm9vdC5oICov
LAogCQkJCUExMEJCNTg4MTQ4NEUzQjMwMEIyRTg3QSAvKiBSZW5kZXJTVkdTaGFwZS5jcHAgKi8s
CiAJCQkJQTEwQkI1ODkxNDg0RTNCMzAwQjJFODdBIC8qIFJlbmRlclNWR1NoYXBlLmggKi8sCiAJ
CQkJQ0RGNzQ3RjYyNzBGODZBNDAwOEZFRUVDIC8qIFJlbmRlclNWR1NoYXBlSW5saW5lcy5oICov
LApAQCAtMzY1MjksNiArMzY1MzQsNyBAQAogCQkJCTQzNjcwOEUxMTJEOUNBNEIwMDA0NDIzNCAv
KiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlD
REY3NDdGOTI3MEY4N0NCMDA4RkVFRUMgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVu
dElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNjcwOEUzMTJEOUNBNEIwMDA0NDIzNCAv
KiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTQzNjcw
OEU1MTJEOURCNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSb290LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBMTBCQjU4QjE0ODRFM0IzMDBCMkU4N0EgLyogUmVuZGVyU1ZHU2hhcGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUNERjc0N0Y3MjcwRjg2QTQwMDhGRUVFQyAvKiBSZW5kZXJTVkdTaGFwZUlubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NTRCMDE5MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5k
ZXJTVkdUZXh0LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtU3RhdGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtU3RhdGUuaAppbmRleCBk
MTAxY2Y4NmIwZDQ4NTg2MzVlNWJiMTA0MGIyNjJiM2I5NTMzZmI0Li5hZDFhYzY5NDU2OTM4NzA1
ZGQ5MmI1MjBjZWU3NzJjOTNjZDRkYWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oCkBAIC0x
MTMsNiArMTEzLDcgQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRRdWFkPiBtYXBw
ZWRTZWNvbmRhcnlRdWFkKGJvb2wqIHdhc0NsYW1wZWQgPSBudWxscHRyKSBjb25zdDsKIAogICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4KiBhY2N1bXVsYXRlZFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIG1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0uZ2V0KCk7IH0KKyAgICBUcmFuc2Zvcm1EaXJlY3Rp
b24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KIAogcHJpdmF0ZToK
ICAgICB2b2lkIHRyYW5zbGF0ZVRyYW5zZm9ybShjb25zdCBMYXlvdXRTaXplJik7CkBAIC0xMjAs
NyArMTIxLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZsYXR0ZW5XaXRoVHJhbnNmb3JtKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgYm9vbCogd2FzQ2xhbXBlZCk7CiAgICAgdm9pZCBhcHBs
eUFjY3VtdWxhdGVkT2Zmc2V0KCk7CiAgICAgCi0gICAgVHJhbnNmb3JtRGlyZWN0aW9uIGRpcmVj
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CiAgICAgVHJhbnNmb3JtRGlyZWN0
aW9uIGludmVyc2VEaXJlY3Rpb24oKSBjb25zdDsKIAogICAgIHZvaWQgbWFwUXVhZChGbG9hdFF1
YWQmLCBUcmFuc2Zvcm1EaXJlY3Rpb24sIGJvb2wqIGNsYW1wZWQgPSBudWxscHRyKSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjhjMDJlNmZiYTgwODYyYzVjZGQ5MjZmOTkwZmRiNzY3MmZkYTFiNjcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3Bw
CkBAIC0wLDAgKzEsNjg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3
IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMCwgMjAyMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUmVuZGVyU1ZHUm9vdC5oIgorCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUp
CisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCisjaW5j
bHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKKyNpbmNsdWRl
ICJSZW5kZXJGcmFnbWVudGVkRmxvdy5oIgorI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgorI2lu
Y2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYS5oIgorI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCisjaW5jbHVkZSAiUmVuZGVy
U1ZHRm9yZWlnbk9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKKyNpbmNsdWRlICJS
ZW5kZXJUcmVlQnVpbGRlci5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKy8vIEZJWE1FOiBb
TEJTRV0gVXBzdHJlYW0gU1ZHQ29udGFpbmVyTGF5b3V0CisvLyAjaW5jbHVkZSAiU1ZHQ29udGFp
bmVyTGF5b3V0LmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgiCisjaW5jbHVk
ZSAiU1ZHSW1hZ2UuaCIKKy8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHTGF5b3V0TG9nZ2Vy
CisvLyAjaW5jbHVkZSAiU1ZHTGF5b3V0TG9nZ2VyLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyaW5n
Q29udGV4dC5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgorI2luY2x1ZGUgIlNWR1Jlc291
cmNlc0NhY2hlLmgiCisjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1Zp
ZXdTcGVjLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgorI2luY2x1ZGUg
PHd0Zi9TdGFja1N0YXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNP
X0FMTE9DQVRFRF9JTVBMKFJlbmRlclNWR1Jvb3QpOworCitSZW5kZXJTVkdSb290OjpSZW5kZXJT
VkdSb290KFNWR1NWR0VsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCisgICAg
OiBSZW5kZXJSZXBsYWNlZChlbGVtZW50LCBXVEZNb3ZlKHN0eWxlKSkKK3sKK30KKworUmVuZGVy
U1ZHUm9vdDo6flJlbmRlclNWR1Jvb3QoKSA9IGRlZmF1bHQ7CisKK1NWR1NWR0VsZW1lbnQmIFJl
bmRlclNWR1Jvb3Q6OnN2Z1NWR0VsZW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBkb3duY2Fz
dDxTVkdTVkdFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOworfQorCit2b2lkIFJlbmRl
clNWR1Jvb3Q6OmNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9uKEZsb2F0U2l6ZSYgaW50
cmluc2ljU2l6ZSwgZG91YmxlJiBpbnRyaW5zaWNSYXRpbykgY29uc3QKK3sKKyAgICBBU1NFUlQo
IXNob3VsZEFwcGx5U2l6ZUNvbnRhaW5tZW50KCp0aGlzKSk7CisKKyAgICAvLyBTcGVjOiBodHRw
Oi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjSW50cmluc2ljU2l6aW5nCisgICAgLy8g
U1ZHIG5lZWRzIHRvIHNwZWNpZnkgaG93IHRvIGNhbGN1bGF0ZSBzb21lIGludHJpbnNpYyBzaXpp
bmcgcHJvcGVydGllcyB0byBlbmFibGUgaW5jbHVzaW9uIHdpdGhpbiBvdGhlciBsYW5ndWFnZXMu
CisKKyAgICAvLyBUaGUgaW50cmluc2ljIGFzcGVjdCByYXRpbyBvZiB0aGUgdmlld3BvcnQgb2Yg
U1ZHIGNvbnRlbnQgaXMgbmVjZXNzYXJ5IGZvciBleGFtcGxlLCB3aGVuIGluY2x1ZGluZyBTVkcg
ZnJvbSBhbiDigJhvYmplY3TigJkKKyAgICAvLyBlbGVtZW50IGluIEhUTUwgc3R5bGVkIHdpdGgg
Q1NTLiBJdCBpcyBwb3NzaWJsZSAoaW5kZWVkLCBjb21tb24pIGZvciBhbiBTVkcgZ3JhcGhpYyB0
byBoYXZlIGFuIGludHJpbnNpYyBhc3BlY3QgcmF0aW8gYnV0CisgICAgLy8gbm90IHRvIGhhdmUg
YW4gaW50cmluc2ljIHdpZHRoIG9yIGhlaWdodC4gVGhlIGludHJpbnNpYyBhc3BlY3QgcmF0aW8g
bXVzdCBiZSBjYWxjdWxhdGVkIGJhc2VkIHVwb24gdGhlIGZvbGxvd2luZyBydWxlczoKKyAgICAv
LyAtIFRoZSBhc3BlY3QgcmF0aW8gaXMgY2FsY3VsYXRlZCBieSBkaXZpZGluZyBhIHdpZHRoIGJ5
IGEgaGVpZ2h0LgorICAgIC8vIC0gSWYgdGhlIOKAmHdpZHRo4oCZIGFuZCDigJhoZWlnaHTigJkg
b2YgdGhlIHJvb3Rtb3N0IOKAmHN2Z+KAmSBlbGVtZW50IGFyZSBib3RoIHNwZWNpZmllZCB3aXRo
IHVuaXQgaWRlbnRpZmllcnMgKGluLCBtbSwgY20sIHB0LCBwYywKKyAgICAvLyAgIHB4LCBlbSwg
ZXgpIG9yIGluIHVzZXIgdW5pdHMsIHRoZW4gdGhlIGFzcGVjdCByYXRpbyBpcyBjYWxjdWxhdGVk
IGZyb20gdGhlIOKAmHdpZHRo4oCZIGFuZCDigJhoZWlnaHTigJkgYXR0cmlidXRlcyBhZnRlcgor
ICAgIC8vICAgcmVzb2x2aW5nIGJvdGggdmFsdWVzIHRvIHVzZXIgdW5pdHMuCisgICAgaW50cmlu
c2ljU2l6ZS5oYXNJbnRyaW5zaWNXaWR0aCA9IHN2Z1NWR0VsZW1lbnQoKS5oYXNJbnRyaW5zaWNX
aWR0aCgpOworICAgIGludHJpbnNpY1NpemUuaGFzSW50cmluc2ljSGVpZ2h0ID0gc3ZnU1ZHRWxl
bWVudCgpLmhhc0ludHJpbnNpY0hlaWdodCgpOworICAgIGludHJpbnNpY1NpemUuc2V0V2lkdGgo
ZmxvYXRWYWx1ZUZvckxlbmd0aChzdmdTVkdFbGVtZW50KCkuaW50cmluc2ljV2lkdGgoKSwgMCkp
OworICAgIGludHJpbnNpY1NpemUuc2V0SGVpZ2h0KGZsb2F0VmFsdWVGb3JMZW5ndGgoc3ZnU1ZH
RWxlbWVudCgpLmludHJpbnNpY0hlaWdodCgpLCAwKSk7CisKKyAgICBpZiAoc3R5bGUoKS5hc3Bl
Y3RSYXRpb1R5cGUoKSA9PSBBc3BlY3RSYXRpb1R5cGU6OlJhdGlvKSB7CisgICAgICAgIGludHJp
bnNpY1JhdGlvID0gc3R5bGUoKS5sb2dpY2FsQXNwZWN0UmF0aW8oKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBpbnRyaW5zaWNSYXRpb1ZhbHVl
OworICAgIGlmICghaW50cmluc2ljU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIGludHJpbnNpY1Jh
dGlvVmFsdWUgPSBpbnRyaW5zaWNTaXplLndpZHRoKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGlu
dHJpbnNpY1NpemUuaGVpZ2h0KCkpOworICAgIGVsc2UgeworICAgICAgICAvLyAtIElmIGVpdGhl
ci9ib3RoIG9mIHRoZSDigJh3aWR0aOKAmSBhbmQg4oCYaGVpZ2h04oCZIG9mIHRoZSByb290bW9z
dCDigJhzdmfigJkgZWxlbWVudCBhcmUgaW4gcGVyY2VudGFnZSB1bml0cyAob3Igb21pdHRlZCks
IHRoZQorICAgICAgICAvLyAgIGFzcGVjdCByYXRpbyBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIHdp
ZHRoIGFuZCBoZWlnaHQgdmFsdWVzIG9mIHRoZSDigJh2aWV3Qm944oCZIHNwZWNpZmllZCBmb3Ig
dGhlIGN1cnJlbnQgU1ZHIGRvY3VtZW50CisgICAgICAgIC8vICAgZnJhZ21lbnQuIElmIHRoZSDi
gJh2aWV3Qm944oCZIGlzIG5vdCBjb3JyZWN0bHkgc3BlY2lmaWVkLCBvciBzZXQgdG8gJ25vbmUn
LCB0aGUgaW50cmluc2ljIGFzcGVjdCByYXRpbyBjYW5ub3QgYmUKKyAgICAgICAgLy8gICBjYWxj
dWxhdGVkIGFuZCBpcyBjb25zaWRlcmVkIHVuc3BlY2lmaWVkLgorICAgICAgICBGbG9hdFNpemUg
dmlld0JveFNpemUgPSBzdmdTVkdFbGVtZW50KCkudmlld0JveCgpLnNpemUoKTsKKyAgICAgICAg
aWYgKCF2aWV3Qm94U2l6ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSB2aWV3Qm94
IGNhbiBvbmx5IHlpZWxkIGFuIGludHJpbnNpYyByYXRpbywgbm90IGFuIGludHJpbnNpYyBzaXpl
LgorICAgICAgICAgICAgaW50cmluc2ljUmF0aW9WYWx1ZSA9IHZpZXdCb3hTaXplLndpZHRoKCkg
LyBzdGF0aWNfY2FzdDxkb3VibGU+KHZpZXdCb3hTaXplLmhlaWdodCgpKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChpbnRyaW5zaWNSYXRpb1ZhbHVlKQorICAgICAgICBpbnRyaW5zaWNS
YXRpbyA9ICppbnRyaW5zaWNSYXRpb1ZhbHVlOworICAgIGVsc2UgaWYgKHN0eWxlKCkuYXNwZWN0
UmF0aW9UeXBlKCkgPT0gQXNwZWN0UmF0aW9UeXBlOjpBdXRvQW5kUmF0aW8pCisgICAgICAgIGlu
dHJpbnNpY1JhdGlvID0gc3R5bGUoKS5sb2dpY2FsQXNwZWN0UmF0aW8oKTsKK30KKworYm9vbCBS
ZW5kZXJTVkdSb290Ojppc0VtYmVkZGVkVGhyb3VnaFNWR0ltYWdlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaXNJblNWR0ltYWdlKCZzdmdTVkdFbGVtZW50KCkpOworfQorCitib29sIFJlbmRlclNW
R1Jvb3Q6OmlzRW1iZWRkZWRUaHJvdWdoRnJhbWVDb250YWluaW5nU1ZHRG9jdW1lbnQoKSBjb25z
dAoreworICAgIC8vIElmIG91ciBmcmFtZSBoYXMgYW4gb3duZXIgcmVuZGVyZXIsIHdlJ3JlIGVt
YmVkZGVkIHRocm91Z2ggZWcuIG9iamVjdC9lbWJlZC9pZnJhbWUsCisgICAgLy8gYnV0IHdlIG9u
bHkgbmVnb3RpYXRlIGlmIHdlJ3JlIGluIGFuIFNWRyBkb2N1bWVudCBpbnNpZGUgb2JqZWN0L2Vt
YmVkLCBub3QgaWZyYW1lLgorICAgIGlmICghZnJhbWUoKS5vd25lclJlbmRlcmVyKCkgfHwgIWZy
YW1lKCkub3duZXJSZW5kZXJlcigpLT5pc0VtYmVkZGVkT2JqZWN0KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gZnJhbWUoKS5kb2N1bWVudCgpLT5pc1NWR0RvY3VtZW50KCk7
Cit9CisKK0xheW91dFVuaXQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdp
ZHRoKFNob3VsZENvbXB1dGVQcmVmZXJyZWQgc2hvdWxkQ29tcHV0ZVByZWZlcnJlZCkgY29uc3QK
K3sKKyAgICAvLyBXaGVuIHdlJ3JlIGVtYmVkZGVkIHRocm91Z2ggU1ZHSW1hZ2UgKGJvcmRlci1p
bWFnZS9iYWNrZ3JvdW5kLWltYWdlLzxodG1sOmltZz4vLi4uKSB3ZSdyZSBmb3JjZWQgdG8gcmVz
aXplIHRvIGEgc3BlY2lmaWMgc2l6ZS4KKyAgICBpZiAoIW1fY29udGFpbmVyU2l6ZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBtX2NvbnRhaW5lclNpemUud2lkdGgoKTsKKworICAgIC8vIFNW
RyB2aWEgPG9iamVjdD4KKyAgICBpZiAoaXNFbWJlZGRlZFRocm91Z2hGcmFtZUNvbnRhaW5pbmdT
VkdEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aCgpOworCisgICAgLy8gU1ZHIGVtYmVkZGVkIHZpYSBTVkdJbWFnZSAoYmFj
a2dyb3VuZC1pbWFnZS9ib3JkZXItaW1hZ2UvZXRjKSAvIElubGluZSBTVkcuCisgICAgcmV0dXJu
IFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoc2hvdWxkQ29tcHV0
ZVByZWZlcnJlZCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxh
Y2VkTG9naWNhbEhlaWdodChzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGVzdGltYXRlZFVzZWRX
aWR0aCkgY29uc3QKK3sKKyAgICAvLyBXaGVuIHdlJ3JlIGVtYmVkZGVkIHRocm91Z2ggU1ZHSW1h
Z2UgKGJvcmRlci1pbWFnZS9iYWNrZ3JvdW5kLWltYWdlLzxodG1sOmltZz4vLi4uKSB3ZSdyZSBm
b3JjZWQgdG8gcmVzaXplIHRvIGEgc3BlY2lmaWMgc2l6ZS4KKyAgICBpZiAoIW1fY29udGFpbmVy
U2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtX2NvbnRhaW5lclNpemUuaGVpZ2h0KCk7
CisKKyAgICAvLyBTVkcgdmlhIDxvYmplY3Q+CisgICAgaWYgKGlzRW1iZWRkZWRUaHJvdWdoRnJh
bWVDb250YWluaW5nU1ZHRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9j
aygpLT5hdmFpbGFibGVMb2dpY2FsSGVpZ2h0KEluY2x1ZGVNYXJnaW5Cb3JkZXJQYWRkaW5nKTsK
KworICAgIC8vIFN0YW5kYWxvbmUgU1ZHIC8gU1ZHIGVtYmVkZGVkIHZpYSBTVkdJbWFnZSAoYmFj
a2dyb3VuZC1pbWFnZS9ib3JkZXItaW1hZ2UvZXRjKSAvIElubGluZSBTVkcuCisgICAgcmV0dXJu
IFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KGVzdGltYXRlZFVz
ZWRXaWR0aCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6bGF5b3V0KCkKK3sKKyNpZiAhZGVm
aW5lZChOREVCVUcpCisgICAgLyogRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdMb2dnZXIKKyAg
ICBTVkdMb2dnZXI6OkRlYnVnU2NvcGUgZGVidWdTY29wZSgKKyAgICAgICAgWyZdKFRleHRTdHJl
YW0mIHN0cmVhbSkgeworICAgICAgICAgICAgc3RyZWFtIDw8IHJlbmRlck5hbWUoKSA8PCAiICIg
PDwgdGhpcyA8PCAiIC0+IGJlZ2luIGxheW91dCIKKyAgICAgICAgICAgIDw8ICIgKHNlbGZOZWVk
c0xheW91dD0iIDw8IHNlbGZOZWVkc0xheW91dCgpCisgICAgICAgICAgICA8PCAiLCBuZWVkc0xh
eW91dD0iIDw8IG5lZWRzTGF5b3V0KCkgPDwgIikiOworICAgICAgICB9LAorICAgICAgICBbJl0o
VGV4dFN0cmVhbSYgc3RyZWFtKSB7CisgICAgICAgICAgICBzdHJlYW0gPDwgcmVuZGVyTmFtZSgp
IDw8ICIgIiA8PCB0aGlzIDw8ICIgPC0gZW5kIGxheW91dCI7CisgICAgICAgIH0sCisgICAgICAg
IFsmXSgpIHsKKyAgICAgICAgICAgIHNob3dTVkdSZW5kZXJUcmVlRm9yVGhpcygpOworICAgICAg
ICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdDb250YWluZXJMYXlvdXQKKyAgICAg
ICAgICAgIC8vIFNWR0NvbnRhaW5lckxheW91dDo6dmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0
ZW5jeSgqdGhpcyk7CisgICAgICAgIH0pOworICAgICovCisjZW5kaWYKKworICAgIFNldEZvclNj
b3BlPGJvb2w+IGNoYW5nZShtX2luTGF5b3V0LCB0cnVlKTsKKyAgICBTdGFja1N0YXRzOjpMYXlv
dXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7CisgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkp
OworCisgICAgbV9yZXNvdXJjZXNOZWVkaW5nVG9JbnZhbGlkYXRlQ2xpZW50cy5jbGVhcigpOwor
CisgICAgTGF5b3V0U3RhdGVEaXNhYmxlciBsYXlvdXRTdGF0ZURpc2FibGVyKHZpZXcoKS5mcmFt
ZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkpOworICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIo
KnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKTsKKyAgICB7CisgICAgICAgIGF1
dG8gcHJldmlvdXNMb2dpY2FsU2l6ZSA9IHNpemUoKTsKKyAgICAgICAgdXBkYXRlTG9naWNhbFdp
ZHRoKCk7CisgICAgICAgIHVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgbV9pc0xheW91
dFNpemVDaGFuZ2VkID0gc2VsZk5lZWRzTGF5b3V0KCkgfHwgKHN2Z1NWR0VsZW1lbnQoKS5oYXNS
ZWxhdGl2ZUxlbmd0aHMoKSAmJiBwcmV2aW91c0xvZ2ljYWxTaXplICE9IHNpemUoKSk7CisKKyAg
ICAgICAgYXV0byBvbGRUcmFuc2Zvcm0gPSBtX3N1cHBsZW1lbnRhbExvY2FsVG9QYXJlbnRUcmFu
c2Zvcm07CisgICAgICAgIGNvbXB1dGVUcmFuc2Zvcm1hdGlvbk1hdHJpY2VzKCk7CisKKyAgICAg
ICAgaWYgKG9sZFRyYW5zZm9ybSAhPSBtX3N1cHBsZW1lbnRhbExvY2FsVG9QYXJlbnRUcmFuc2Zv
cm0pCisgICAgICAgICAgICBtX2RpZFRyYW5zZm9ybVRvUm9vdFVwZGF0ZSA9IHRydWU7CisgICAg
ICAgIGVsc2UgaWYgKHByZXZpb3VzTG9naWNhbFNpemUgIT0gc2l6ZSgpKQorICAgICAgICAgICAg
bV9kaWRUcmFuc2Zvcm1Ub1Jvb3RVcGRhdGUgPSB0cnVlOworCisgICAgICAgIC8vIEZJWE1FOiBb
TEJTRV0gVXBzdHJlYW0gU1ZHTGVuZ3RoQ29udGV4dCBjaGFuZ2VzCisgICAgICAgIC8vIHN2Z1NW
R0VsZW1lbnQoKS51cGRhdGVMZW5ndGhDb250ZXh0KCk7CisKKyAgICAgICAgLy8gRklYTUU6IFtM
QlNFXSBVcHN0cmVhbSBTVkdMYXllclRyYW5zZm9ybVVwZGF0ZXIKKyAgICAgICAgLy8gU1ZHTGF5
ZXJUcmFuc2Zvcm1VcGRhdGVyIHRyYW5zZm9ybVVwZGF0ZXIoKnRoaXMpOworICAgICAgICB1cGRh
dGVMYXllckluZm9ybWF0aW9uKCk7CisKKyAgICAgICAgLyogRklYTUU6IFtMQlNFXSBVcHN0cmVh
bSBTVkdDb250YWluZXJMYXlvdXQgLyBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uCisgICAgICAg
IHsKKyAgICAgICAgICAgIFNWR0NvbnRhaW5lckxheW91dCBjb250YWluZXJMYXlvdXQoKnRoaXMp
OworICAgICAgICAgICAgY29udGFpbmVyTGF5b3V0LmxheW91dENoaWxkcmVuKHNlbGZOZWVkc0xh
eW91dCgpIHx8IFNWR1JlbmRlclN1cHBvcnQ6OmZpbHRlcnNGb3JjZUNvbnRhaW5lckxheW91dCgq
dGhpcykpOworCisgICAgICAgICAgICBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uIGJvdW5kaW5n
Qm94Q29tcHV0YXRpb24oKnRoaXMpOworICAgICAgICAgICAgbV9vYmplY3RCb3VuZGluZ0JveCA9
IGJvdW5kaW5nQm94Q29tcHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KFNWR0Jv
dW5kaW5nQm94Q29tcHV0YXRpb246Om9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlvbik7CisgICAg
ICAgICAgICBtX3N0cm9rZUJvdW5kaW5nQm94ID0gYm91bmRpbmdCb3hDb21wdXRhdGlvbi5jb21w
dXRlRGVjb3JhdGVkQm91bmRpbmdCb3goU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6c3Ryb2tl
Qm91bmRpbmdCb3hEZWNvcmF0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAqLworCisgICAgICAg
IC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQ29udGFpbmVyTGF5b3V0IC0tIHJlbW92ZSBT
VkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbi4KKyAgICAgICAgU1ZHUmVuZGVyU3VwcG9y
dDo6bGF5b3V0Q2hpbGRyZW4oKnRoaXMsIHNlbGZOZWVkc0xheW91dCgpKTsKKworICAgICAgICBp
ZiAoIW1fcmVzb3VyY2VzTmVlZGluZ1RvSW52YWxpZGF0ZUNsaWVudHMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICAvLyBJbnZhbGlkYXRlIHJlc291cmNlIGNsaWVudHMsIHdoaWNoIG1heSBtYXJr
IHNvbWUgbm9kZXMgZm9yIGxheW91dC4KKyAgICAgICAgICAgIGZvciAoYXV0byYgcmVzb3VyY2Ug
OiAgbV9yZXNvdXJjZXNOZWVkaW5nVG9JbnZhbGlkYXRlQ2xpZW50cykgeworICAgICAgICAgICAg
ICAgIHJlc291cmNlLT5yZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKCk7CisgICAgICAgICAgICAg
ICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZCgqcmVzb3VyY2UsIFN0eWxl
RGlmZmVyZW5jZTo6TGF5b3V0LCByZXNvdXJjZS0+c3R5bGUoKSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIG1faXNMYXlvdXRTaXplQ2hhbmdlZCA9IGZhbHNlOworCisgICAgICAgICAg
ICAvKiBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0NvbnRhaW5lckxheW91dAorICAgICAgICAg
ICAgU1ZHQ29udGFpbmVyTGF5b3V0IGNvbnRhaW5lckxheW91dCgqdGhpcyk7CisgICAgICAgICAg
ICBjb250YWluZXJMYXlvdXQubGF5b3V0Q2hpbGRyZW4oZmFsc2UpOworICAgICAgICAgICAgKi8K
KyAgICAgICAgfQorICAgIH0KKworICAgIG1faXNMYXlvdXRTaXplQ2hhbmdlZCA9IGZhbHNlOwor
ICAgIG1fZGlkVHJhbnNmb3JtVG9Sb290VXBkYXRlID0gZmFsc2U7CisKKyAgICBjbGVhck92ZXJm
bG93KCk7CisgICAgaWYgKCFzaG91bGRBcHBseVZpZXdwb3J0Q2xpcCgpKSB7CisgICAgICAgIGF1
dG8gdmlzdWFsT3ZlcmZsb3dSZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChtX3ZpZXdCb3hUcmFu
c2Zvcm0ubWFwUmVjdCh2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkpKTsKKyAgICAgICAg
YWRkVmlzdWFsT3ZlcmZsb3codmlzdWFsT3ZlcmZsb3dSZWN0KTsKKyAgICAgICAgYWRkVmlzdWFs
RWZmZWN0T3ZlcmZsb3coKTsKKyAgICB9CisgICAgaW52YWxpZGF0ZUJhY2tncm91bmRPYnNjdXJh
dGlvblN0YXR1cygpOworCisgICAgbV9oYXNCb3hEZWNvcmF0aW9ucyA9IGlzRG9jdW1lbnRFbGVt
ZW50UmVuZGVyZXIoKSA/IGhhc1Zpc2libGVCb3hEZWNvcmF0aW9uU3R5bGUoKSA6IGhhc1Zpc2li
bGVCb3hEZWNvcmF0aW9ucygpOworICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsK
KworICAgIGNsZWFyTmVlZHNMYXlvdXQoKTsKK30KKworYm9vbCBSZW5kZXJTVkdSb290OjpzaG91
bGRBcHBseVZpZXdwb3J0Q2xpcCgpIGNvbnN0Cit7CisgICAgLy8gdGhlIG91dGVybW9zdCBzdmcg
aXMgY2xpcHBlZCBpZiBhdXRvLCBhbmQgc3ZnIGRvY3VtZW50IHJvb3RzIGFyZSBhbHdheXMgY2xp
cHBlZAorICAgIC8vIFdoZW4gdGhlIHN2ZyBpcyBzdGFuZC1hbG9uZSAoaXNEb2N1bWVudEVsZW1l
bnQoKSA9PSB0cnVlKSB0aGUgdmlld3BvcnQgY2xpcHBpbmcgc2hvdWxkIGFsd2F5cworICAgIC8v
IGJlIGFwcGxpZWQsIG5vdGluZyB0aGF0IHRoZSB3aW5kb3cgc2Nyb2xsYmFycyBzaG91bGQgYmUg
aGlkZGVuIGlmIG92ZXJmbG93PWhpZGRlbi4KKyAgICByZXR1cm4gc3R5bGUoKS5vdmVyZmxvd1go
KSA9PSBPdmVyZmxvdzo6SGlkZGVuCisgICAgICAgIHx8IHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0g
T3ZlcmZsb3c6OkF1dG8KKyAgICAgICAgfHwgc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxv
dzo6U2Nyb2xsCisgICAgICAgIHx8IHRoaXMtPmlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIoKTsK
K30KKwordm9pZCBSZW5kZXJTVkdSb290OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQoreworICAgIC8vIERvbid0IHBhaW50LCBpZiB0
aGUgY29udGV4dCBleHBsaWNpdGx5IGRpc2FibGVkIGl0LgorICAgIGlmIChwYWludEluZm8uY29u
dGV4dCgpLnBhaW50aW5nRGlzYWJsZWQoKSAmJiAhcGFpbnRJbmZvLmNvbnRleHQoKS5kZXRlY3Rp
bmdDb250ZW50ZnVsUGFpbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgIWRlZmluZWQoTkRF
QlVHKQorICAgIC8qIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHTG9nZ2VyCisgICAgU1ZHTG9n
Z2VyOjpEZWJ1Z1Njb3BlIGRlYnVnU2NvcGUoCisgICAgICAgIFsmXShUZXh0U3RyZWFtJiBzdHJl
YW0pIHsKKyAgICAgICAgICAgIHN0cmVhbSA8PCByZW5kZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMg
PDwgIiAtPiBiZWdpbiBwYWludCIKKyAgICAgICAgICAgIDw8ICIgKHBhaW50T2Zmc2V0PSIgPDwg
cGFpbnRPZmZzZXQKKyAgICAgICAgICAgIDw8ICIsIGxvY2F0aW9uPSIgPDwgbG9jYXRpb24oKQor
ICAgICAgICAgICAgPDwgIiwgb2JqZWN0Qm91bmRpbmdCb3g9IiA8PCBvYmplY3RCb3VuZGluZ0Jv
eCgpCisgICAgICAgICAgICA8PCAiLCBjb250ZXh0LmdldENUTSgpPSIgPDwgcGFpbnRJbmZvLmNv
bnRleHQoKS5nZXRDVE0oKSA8PCAiKSI7CisgICAgICAgIH0sCisgICAgICAgIFsmXShUZXh0U3Ry
ZWFtJiBzdHJlYW0pIHsKKyAgICAgICAgICAgIHN0cmVhbSA8PCByZW5kZXJOYW1lKCkgPDwgIiAi
IDw8IHRoaXMgPDwgIiA8LSBlbmQgcGFpbnQiOworICAgICAgICB9KTsKKyAgICAgKi8KKyNlbmRp
ZgorCisgICAgLy8gQW4gZW1wdHkgdmlld3BvcnQgZGlzYWJsZXMgcmVuZGVyaW5nLgorICAgIGlm
IChib3JkZXJCb3hSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CisKKyAgICAv
LyBDaGVjayBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGF0IGFsbC4KKyAgICAvLyBGSVhNRTog
Q291bGQgZWxpbWluYXRlIHRoZSBpc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkgY2hlY2sgaWYg
d2UgZml4IGJhY2tncm91bmQgcGFpbnRpbmcgc28gdGhhdCB0aGUgUmVuZGVyVmlldworICAgIC8v
IHBhaW50cyB0aGUgcm9vdCdzIGJhY2tncm91bmQuCisgICAgaWYgKCFpc0RvY3VtZW50RWxlbWVu
dFJlbmRlcmVyKCkgJiYgIXBhaW50SW5mby5wYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVo
YXZpb3I6OkNvbXBvc2l0ZWRPdmVyZmxvd1Njcm9sbENvbnRlbnQpKSB7CisgICAgICAgIGF1dG8g
b3ZlcmZsb3dCb3ggPSB2aXN1YWxPdmVyZmxvd1JlY3QoKTsKKyAgICAgICAgZmxpcEZvcldyaXRp
bmdNb2RlKG92ZXJmbG93Qm94KTsKKyAgICAgICAgb3ZlcmZsb3dCb3gubW92ZUJ5KGFkanVzdGVk
UGFpbnRPZmZzZXQpOworICAgICAgICBpZiAoIW92ZXJmbG93Qm94LmludGVyc2VjdHMocGFpbnRJ
bmZvLnJlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wgcHVzaGVk
Q2xpcCA9IHB1c2hDb250ZW50c0NsaXAocGFpbnRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsK
KyAgICBwYWludE9iamVjdChwYWludEluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOworICAgIGlm
IChwdXNoZWRDbGlwKQorICAgICAgICBwb3BDb250ZW50c0NsaXAocGFpbnRJbmZvLCBwYWludElu
Zm8ucGhhc2UsIGFkanVzdGVkUGFpbnRPZmZzZXQpOworCisgICAgLy8gT3VyIHNjcm9sbGJhciB3
aWRnZXRzIHBhaW50IGV4YWN0bHkgd2hlbiB3ZSB0ZWxsIHRoZW0gdG8sIHNvIHRoYXQgdGhleSB3
b3JrIHByb3Blcmx5IHdpdGgKKyAgICAvLyB6LWluZGV4LiBXZSBwYWludCBhZnRlciB3ZSBwYWlu
dGVkIHRoZSBiYWNrZ3JvdW5kL2JvcmRlciwgc28gdGhhdCB0aGUgc2Nyb2xsYmFycyB3aWxsCisg
ICAgLy8gc2l0IGFib3ZlIHRoZSBiYWNrZ3JvdW5kL2JvcmRlci4KKyAgICBpZiAoKHBhaW50SW5m
by5waGFzZSA9PSBQYWludFBoYXNlOjpCbG9ja0JhY2tncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2U6OkNoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBoYXNOb25WaXNpYmxlT3Zl
cmZsb3coKSAmJiBsYXllcigpICYmIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkKKyAgICAgICAg
JiYgc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiBwYWludElu
Zm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSAmJiAhcGFpbnRJbmZvLnBhaW50Um9vdEJh
Y2tncm91bmRPbmx5KCkpCisgICAgICAgIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCktPnBhaW50
T3ZlcmZsb3dDb250cm9scyhwYWludEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRq
dXN0ZWRQYWludE9mZnNldCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0KSk7Cit9CisK
K3ZvaWQgUmVuZGVyU1ZHUm9vdDo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKK3sKKyAgICBpZiAoKHBhaW50SW5mby5waGFz
ZSA9PSBQYWludFBoYXNlOjpCbG9ja0JhY2tncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBh
aW50UGhhc2U6OkNoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBzdHlsZSgpLnZpc2liaWxpdHkoKSA9
PSBWaXNpYmlsaXR5OjpWaXNpYmxlKSB7CisgICAgICAgIGlmIChoYXNWaXNpYmxlQm94RGVjb3Jh
dGlvbnMoKSkKKyAgICAgICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCBwYWlu
dE9mZnNldCk7CisgICAgfQorCisgICAgYXV0byBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRP
ZmZzZXQgKyBsb2NhdGlvbigpOworICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFz
ZTo6TWFzayAmJiBzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlKSB7
CisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHUmVuZGVyU3VwcG9ydCBjaGFu
Z2VzCisgICAgICAgIC8vIFNWR1JlbmRlclN1cHBvcnQ6OnBhaW50U1ZHTWFzaygqdGhpcywgcGFp
bnRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6Q2xpcHBpbmdNYXNrICYmIHN0
eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUpIHsKKyAgICAgICAgLy8g
RklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdSZW5kZXJTdXBwb3J0IGNoYW5nZXMKKyAgICAgICAg
Ly8gU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRTVkdDbGlwcGluZ01hc2soKnRoaXMsIHBhaW50SW5m
byk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAocGFpbnRJbmZvLnBhaW50Um9v
dEJhY2tncm91bmRPbmx5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCk7CisgICAgaWYgKGNvbnRleHQuZGV0ZWN0
aW5nQ29udGVudGZ1bFBhaW50KCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBjdXJyZW50IDogY2hp
bGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0PigqdGhpcykpIHsKKyAgICAgICAgICAgIGlmICghY3Vy
cmVudC5pc1NWR0hpZGRlbkNvbnRhaW5lcigpKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5z
ZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
RG9uJ3QgcGFpbnQgaWYgd2UgZG9uJ3QgaGF2ZSBraWRzLCBleGNlcHQgaWYgd2UgaGF2ZSBmaWx0
ZXJzIHdlIHNob3VsZCBwYWludCB0aG9zZS4KKyAgICBpZiAoIWZpcnN0Q2hpbGQoKSkgeworICAg
ICAgICBhdXRvKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2Vz
Rm9yUmVuZGVyZXIoKnRoaXMpOworICAgICAgICBpZiAoIXJlc291cmNlcyB8fCAhcmVzb3VyY2Vz
LT5maWx0ZXIoKSkgeworICAgICAgICAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBo
YXNlOjpGb3JlZ3JvdW5kKQorICAgICAgICAgICAgICAgIHBhZ2UoKS5hZGRSZWxldmFudFVucGFp
bnRlZE9iamVjdCh0aGlzLCB2aXN1YWxPdmVyZmxvd1JlY3QoKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChwYWludElu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6QmxvY2tCYWNrZ3JvdW5kKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvIHNjcm9sbGVkT2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisgICAgc2Nyb2xsZWRP
ZmZzZXQubW92ZUJ5KC1zY3JvbGxQb3NpdGlvbigpKTsKKworICAgIGlmIChwYWludEluZm8ucGhh
c2UgIT0gUGFpbnRQaGFzZTo6U2VsZk91dGxpbmUpCisgICAgICAgIHBhaW50Q29udGVudHMocGFp
bnRJbmZvLCBzY3JvbGxlZE9mZnNldCk7CisKKyAgICBpZiAoKHBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlOjpPdXRsaW5lIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpTZWxm
T3V0bGluZSkgJiYgaGFzT3V0bGluZSgpICYmIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2li
aWxpdHk6OlZpc2libGUpCisgICAgICAgIHBhaW50T3V0bGluZShwYWludEluZm8sIExheW91dFJl
Y3QoYWRqdXN0ZWRQYWludE9mZnNldCwgc2l6ZSgpKSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9v
dDo6cGFpbnRDb250ZW50cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0KQoreworICAgIC8vIFN0eWxlIGlzIG5vbi1maW5hbCBpZiB0aGUgZWxlbWVu
dCBoYXMgYSBwZW5kaW5nIHN0eWxlc2hlZXQgYmVmb3JlIGl0LiBXZSBlbmQgdXAgd2l0aCByZW5k
ZXJlcnMgd2l0aCBzdWNoIHN0eWxlcyBpZiBhIHNjcmlwdAorICAgIC8vIGZvcmNlcyByZW5kZXJl
ciBjb25zdHJ1Y3Rpb24gYnkgcXVlcnlpbmcgc29tZXRoaW5nIGxheW91dCBkZXBlbmRlbnQuCisg
ICAgLy8gQXZvaWQgRk9VQyBieSBub3QgcGFpbnRpbmcuIFN3aXRjaGluZyB0byBmaW5hbCBzdHls
ZSB0cmlnZ2VycyByZXBhaW50LgorICAgIGlmIChzdHlsZSgpLmlzTm90RmluYWwoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUGFpbnRQaGFzZSBuZXdQaGFzZSA9IChwYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZTo6Q2hpbGRPdXRsaW5lcykgPyBQYWludFBoYXNlOjpPdXRsaW5lIDogcGFp
bnRJbmZvLnBoYXNlOworICAgIG5ld1BoYXNlID0gKG5ld1BoYXNlID09IFBhaW50UGhhc2U6OkNo
aWxkQmxvY2tCYWNrZ3JvdW5kcykgPyBQYWludFBoYXNlOjpDaGlsZEJsb2NrQmFja2dyb3VuZCA6
IG5ld1BoYXNlOworCisgICAgLy8gV2UgZG9uJ3QgcGFpbnQgb3VyIG93biBiYWNrZ3JvdW5kLCBi
dXQgd2UgZG8gbGV0IHRoZSBraWRzIHBhaW50IHRoZWlyIGJhY2tncm91bmRzLgorICAgIGF1dG8g
cGFpbnRJbmZvRm9yQ2hpbGQocGFpbnRJbmZvKTsKKyAgICBwYWludEluZm9Gb3JDaGlsZC5waGFz
ZSA9IG5ld1BoYXNlOworICAgIHBhaW50SW5mb0ZvckNoaWxkLnVwZGF0ZVN1YnRyZWVQYWludFJv
b3RGb3JDaGlsZHJlbih0aGlzKTsKKworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9m
VHlwZTxSZW5kZXJFbGVtZW50PigqdGhpcykpIHsKKyAgICAgICAgaWYgKCFjaGlsZC5oYXNTZWxm
UGFpbnRpbmdMYXllcigpKQorICAgICAgICAgICAgY2hpbGQucGFpbnQocGFpbnRJbmZvRm9yQ2hp
bGQsIHBhaW50T2Zmc2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6d2lsbEJl
RGVzdHJveWVkKCkKK3sKKyAgICBSZW5kZXJCbG9jazo6cmVtb3ZlUGVyY2VudEhlaWdodERlc2Nl
bmRhbnQoY29uc3RfY2FzdDxSZW5kZXJTVkdSb290Jj4oKnRoaXMpKTsKKworICAgIFNWR1Jlc291
cmNlc0NhY2hlOjpjbGllbnREZXN0cm95ZWQoKnRoaXMpOworICAgIFJlbmRlclJlcGxhY2VkOjp3
aWxsQmVEZXN0cm95ZWQoKTsKK30KKwordm9pZCBSZW5kZXJTVkdSb290OjppbnNlcnRlZEludG9U
cmVlKElzSW50ZXJuYWxNb3ZlIGlzSW50ZXJuYWxNb3ZlKQoreworICAgIFJlbmRlclJlcGxhY2Vk
OjppbnNlcnRlZEludG9UcmVlKGlzSW50ZXJuYWxNb3ZlKTsKKyAgICBTVkdSZXNvdXJjZXNDYWNo
ZTo6Y2xpZW50V2FzQWRkZWRUb1RyZWUoKnRoaXMpOworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6
OndpbGxCZVJlbW92ZWRGcm9tVHJlZShJc0ludGVybmFsTW92ZSBpc0ludGVybmFsTW92ZSkKK3sK
KyAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2lsbEJlUmVtb3ZlZEZyb21UcmVlKCp0aGlz
KTsKKyAgICBSZW5kZXJSZXBsYWNlZDo6d2lsbEJlUmVtb3ZlZEZyb21UcmVlKGlzSW50ZXJuYWxN
b3ZlKTsKK30KKwordm9pZCBSZW5kZXJTVkdSb290OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZl
cmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQoreworICAgIC8vIEJveCBk
ZWNvcmF0aW9ucyBtYXkgaGF2ZSBhcHBlYXJlZC9kaXNhcHBlYXJlZCAtIHJlY29tcHV0ZSBzdGF0
dXMuCisgICAgaWYgKGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlOjpSZXBhaW50KQorICAgICAgICBt
X2hhc0JveERlY29yYXRpb25zID0gaGFzVmlzaWJsZUJveERlY29yYXRpb25TdHlsZSgpOworCisg
ICAgUmVuZGVyUmVwbGFjZWQ6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKKyAgICBT
VkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVDaGFuZ2VkKCp0aGlzLCBkaWZmLCBzdHlsZSgp
KTsKK30KKwordm9pZCBSZW5kZXJTVkdSb290Ojp1cGRhdGVMYXllckluZm9ybWF0aW9uKCkKK3sK
KyAgICAvKiBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR1JlbmRlclN1cHBvcnQgY2hhbmdlcwor
ICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0Ojppc1JlbmRlcmluZ0Rpc2FibGVkRHVlVG9FbXB0eVNW
R1ZpZXdCb3goKnRoaXMpKQorICAgICAgICBsYXllcigpLT5kaXJ0eUFuY2VzdG9yQ2hhaW5WaXNp
YmxlRGVzY2VuZGFudFN0YXR1cygpOworICAgICAqLworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6
OnVwZGF0ZUZyb21TdHlsZSgpCit7CisgICAgUmVuZGVyUmVwbGFjZWQ6OnVwZGF0ZUZyb21TdHls
ZSgpOworCisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBSZW5kZXJPYmplY3QgY2hhbmdl
cworICAgIC8vIHNldEhhc1NWR1RyYW5zZm9ybSgpOworCisgICAgaWYgKHNob3VsZEFwcGx5Vmll
d3BvcnRDbGlwKCkpCisgICAgICAgIHNldEhhc05vblZpc2libGVPdmVyZmxvdygpOworfQorCitM
YXlvdXRSZWN0IFJlbmRlclNWR1Jvb3Q6OmNsaXBwZWRPdmVyZmxvd1JlY3QoY29uc3QgUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0IGNv
bnRleHQpIGNvbnN0Cit7CisgICAgaWYgKHN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZpc2liaWxp
dHk6OlZpc2libGUgJiYgIWVuY2xvc2luZ0xheWVyKCktPmhhc1Zpc2libGVDb250ZW50KCkpCisg
ICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CisKKyAgICBhdXRvIHJlcGFpbnRSZWN0ID0gTGF5
b3V0UmVjdChtX3ZpZXdCb3hUcmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5z
Zm9ybSgpKS5tYXBSZWN0KGJvcmRlckJveFJlY3QoKSkpOworICAgIHJldHVybiBjb21wdXRlUmVj
dChyZXBhaW50UmVjdCwgcmVwYWludENvbnRhaW5lciwgY29udGV4dCk7Cit9CisKK3ZvaWQgUmVu
ZGVyU1ZHUm9vdDo6Y29tcHV0ZVRyYW5zZm9ybWF0aW9uTWF0cmljZXMoKQoreworICAgIC8vIENv
bXB1dGUgU1ZHIHZpZXdCb3ggdHJhbnNmb3JtYXRpb24gYWdhaW5zdCB1bnNjYWxlZCB2aWV3cG9y
dC4KKyAgICBhdXRvIHZpZXdwb3J0U2l6ZSA9IGN1cnJlbnRWaWV3cG9ydFNpemUoKTsKKyAgICBh
dXRvIHpvb20gPSBzdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKKyAgICBpZiAoem9vbSAhPSAxKQor
ICAgICAgICB2aWV3cG9ydFNpemUuc2NhbGUoMS4wIC8gem9vbSk7CisgICAgbV92aWV3Qm94VHJh
bnNmb3JtID0gc3ZnU1ZHRWxlbWVudCgpLnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0odmlld3BvcnRT
aXplLndpZHRoKCksIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSk7CisKKyAgICAvLyBDb21wdXRlIHRv
dGFsIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCwgdGFraW5nIGJvcmRlciAvIHBhZGRpbmcgKGZvciBj
aGlsZCByZW5kZXJlcnMgdGhhdCBkb24ndCBmb2xsb3cgdGhlIENTUyBib3ggbW9kZWwgb2JqZWN0
ISkgKyBwYW5uaW5nIGludG8gYWNjb3VudC4KKyAgICBhdXRvIHBhbm5pbmcgPSBzdmdTVkdFbGVt
ZW50KCkuY3VycmVudFRyYW5zbGF0ZVZhbHVlKCk7CisgICAgYXV0byBjb250ZW50TG9jYXRpb24g
PSBjb250ZW50Qm94TG9jYXRpb24oKTsKKworICAgIG1fc3VwcGxlbWVudGFsTG9jYWxUb1BhcmVu
dFRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICBtX3N1cHBsZW1lbnRhbExvY2FsVG9QYXJl
bnRUcmFuc2Zvcm0udHJhbnNsYXRlKHBhbm5pbmcueCgpICsgY29udGVudExvY2F0aW9uLngoKSwg
cGFubmluZy55KCkgKyBjb250ZW50TG9jYXRpb24ueSgpKTsKKyAgICBtX3N1cHBsZW1lbnRhbExv
Y2FsVG9QYXJlbnRUcmFuc2Zvcm0uc2NhbGUoem9vbSk7CisKKyAgICBpZiAoIW1fdmlld0JveFRy
YW5zZm9ybS5pc0lkZW50aXR5KCkpCisgICAgICAgIG1fc3VwcGxlbWVudGFsTG9jYWxUb1BhcmVu
dFRyYW5zZm9ybS5tdWx0aXBseShtX3ZpZXdCb3hUcmFuc2Zvcm0pOworfQorCitib29sIFJlbmRl
clNWR1Jvb3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9u
IGhpdFRlc3RBY3Rpb24pCit7CisgICAgYXV0byBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0
ZWRPZmZzZXQgKyBsb2NhdGlvbigpOworCisgICAgQVNTRVJUKFNWR0hpdFRlc3RDeWNsZURldGVj
dGlvblNjb3BlOjppc0VtcHR5KCkpOworCisgICAgYXV0byB2aXN1YWxPdmVyZmxvd1JlY3QgPSB0
aGlzLT52aXN1YWxPdmVyZmxvd1JlY3QoKTsKKyAgICB2aXN1YWxPdmVyZmxvd1JlY3QubW92ZUJ5
KGFkanVzdGVkTG9jYXRpb24pOworCisgICAgLy8gVGVzdCBTVkcgY29udGVudCBpZiB0aGUgcG9p
bnQgaXMgaW4gb3VyIGNvbnRlbnQgYm94IG9yIGl0IGlzIGluc2lkZSB0aGUgdmlzdWFsT3ZlcmZs
b3dSZWN0IGFuZCB0aGUgb3ZlcmZsb3cgaXMgdmlzaWJsZS4KKyAgICBpZiAoY29udGVudEJveFJl
Y3QoKS5jb250YWlucyhhZGp1c3RlZExvY2F0aW9uKSB8fCAoIXNob3VsZEFwcGx5Vmlld3BvcnRD
bGlwKCkgJiYgbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKHZpc3VhbE92ZXJmbG93UmVj
dCkpKSB7CisgICAgICAgIC8vIENoZWNrIGtpZHMgZmlyc3QuCisgICAgICAgIGZvciAoYXV0byog
Y2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGlu
ZygpKSB7CisgICAgICAgICAgICBpZiAoIWNoaWxkLT5oYXNMYXllcigpICYmIGNoaWxkLT5ub2Rl
QXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGFkanVzdGVkTG9j
YXRpb24sIGhpdFRlc3RBY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShh
ZGp1c3RlZExvY2F0aW9uKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKFNWR0hpdFRlc3RDeWNs
ZURldGVjdGlvblNjb3BlOjppc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gSWYgd2UgZGlkbid0
IGVhcmx5IGV4aXQgYWJvdmUsIHdlJ3ZlIGp1c3QgaGl0IHRoZSBjb250YWluZXIgPHN2Zz4gZWxl
bWVudC4gVW5saWtlIFNWRyAxLjEsIDJuZCBFZGl0aW9uIGFsbG93cyBjb250YWluZXIgZWxlbWVu
dHMgdG8gYmUgaGl0LgorICAgIGlmICgoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNr
Z3JvdW5kIHx8IGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSAm
JiB2aXNpYmxlVG9IaXRUZXN0aW5nKHJlcXVlc3QpKSB7CisgICAgICAgIExheW91dFJlY3QgYm91
bmRzUmVjdChhZGp1c3RlZExvY2F0aW9uLCBzaXplKCkpOworICAgICAgICBpZiAobG9jYXRpb25J
bkNvbnRhaW5lci5pbnRlcnNlY3RzKGJvdW5kc1JlY3QpKSB7CisgICAgICAgICAgICB1cGRhdGVI
aXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKGxvY2F0aW9uSW5Db250YWlu
ZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9uKSkpOworICAgICAgICAg
ICAgaWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KG5vZGVGb3JIaXRUZXN0
KCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIsIGJvdW5kc1JlY3QpID09IEhpdFRlc3RQ
cm9ncmVzczo6U3RvcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIEFTU0VSVChTVkdIaXRUZXN0Q3ljbGVEZXRlY3Rpb25TY29wZTo6aXNFbXB0
eSgpKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJTVkdSb290OjpoYXNS
ZWxhdGl2ZURpbWVuc2lvbnMoKSBjb25zdAoreworICAgIHJldHVybiBzdmdTVkdFbGVtZW50KCku
aW50cmluc2ljSGVpZ2h0KCkuaXNQZXJjZW50T3JDYWxjdWxhdGVkKCkgfHwgc3ZnU1ZHRWxlbWVu
dCgpLmludHJpbnNpY1dpZHRoKCkuaXNQZXJjZW50T3JDYWxjdWxhdGVkKCk7Cit9CisKK3ZvaWQg
UmVuZGVyU1ZHUm9vdDo6YWRkUmVzb3VyY2VGb3JDbGllbnRJbnZhbGlkYXRpb24oUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIqIHJlc291cmNlKQoreworICAgIFVOVVNFRF9QQVJBTShyZXNvdXJj
ZSk7CisgICAgLyogRklYTUU6IFtMQlNFXSBSZW5hbWUgZmluZFRyZWVSb290T2JqZWN0IC0+IGZp
bmRMZWdhY3lUcmVlUm9vdE9iamVjdCwgYW5kIHJlLWFkZCBmaW5kVHJlZVJvb3RPYmplY3QgZm9y
IFJlbmRlclNWR1Jvb3QKKyAgICBpZiAoYXV0byogc3ZnUm9vdCA9IFNWR1JlbmRlclN1cHBvcnQ6
OmZpbmRUcmVlUm9vdE9iamVjdCgqcmVzb3VyY2UpKQorICAgICAgICBzdmdSb290LT5tX3Jlc291
cmNlc05lZWRpbmdUb0ludmFsaWRhdGVDbGllbnRzLmFkZChyZXNvdXJjZSk7CisgICAgKi8KK30K
KworRmxvYXRTaXplIFJlbmRlclNWR1Jvb3Q6OmN1cnJlbnRWaWV3cG9ydFNpemUoKSBjb25zdAor
eworICAgIEZsb2F0U2l6ZSByZXN1bHQgPSBjb250ZW50Qm94UmVjdCgpLnNpemUoKTsKKyAgICBy
ZXN1bHQuc2V0V2lkdGgocmVzdWx0LndpZHRoKCkgKyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkp
OworICAgIHJlc3VsdC5zZXRIZWlnaHQocmVzdWx0LmhlaWdodCgpICsgaG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCgpKTsKKworICAgIGlmICghaXNFbWJlZGRlZFRocm91Z2hGcmFtZUNvbnRhaW5p
bmdTVkdEb2N1bWVudCgpKSB7CisgICAgICAgIGF1dG8gem9vbSA9IHN0eWxlKCkuZWZmZWN0aXZl
Wm9vbSgpOworICAgICAgICBpZiAoem9vbSAhPSAxKQorICAgICAgICAgICAgcmVzdWx0LnNjYWxl
KHN2Z1NWR0VsZW1lbnQoKS5oYXNJbnRyaW5zaWNXaWR0aCgpID8gMSA6IHpvb20sIHN2Z1NWR0Vs
ZW1lbnQoKS5oYXNJbnRyaW5zaWNIZWlnaHQoKSA/IDEgOiB6b29tKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6Om1hcExvY2FsVG9Db250YWlu
ZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgVHJhbnNm
b3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlLCBPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiBt
b2RlLCBib29sKiB3YXNGaXhlZCkgY29uc3QKK3sKKyAgICBpZiAocmVwYWludENvbnRhaW5lciA9
PSB0aGlzKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIXZpZXcoKS5mcmFtZVZpZXco
KS5sYXlvdXRDb250ZXh0KCkuaXNQYWludE9mZnNldENhY2hlRW5hYmxlZCgpKTsKKworICAgIGJv
b2wgY29udGFpbmVyU2tpcHBlZDsKKyAgICBhdXRvKiBjb250YWluZXIgPSB0aGlzLT5jb250YWlu
ZXIocmVwYWludENvbnRhaW5lciwgY29udGFpbmVyU2tpcHBlZCk7CisgICAgaWYgKCFjb250YWlu
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgaXNGaXhlZFBvcyA9IGlzRml4ZWRQb3Np
dGlvbmVkKCk7CisgICAgLy8gSWYgdGhpcyBib3ggaGFzIGEgdHJhbnNmb3JtLCBpdCBhY3RzIGFz
IGEgZml4ZWQgcG9zaXRpb24gY29udGFpbmVyIGZvciBmaXhlZCBkZXNjZW5kYW50cywKKyAgICAv
LyBhbmQgbWF5IGl0c2VsZiBhbHNvIGJlIGZpeGVkIHBvc2l0aW9uLiBTbyBwcm9wYWdhdGUgJ2Zp
eGVkJyB1cCBvbmx5IGlmIHRoaXMgYm94IGlzIGZpeGVkIHBvc2l0aW9uLgorICAgIGlmIChoYXNU
cmFuc2Zvcm0oKSAmJiAhaXNGaXhlZFBvcykKKyAgICAgICAgbW9kZS5yZW1vdmUoSXNGaXhlZCk7
CisgICAgZWxzZSBpZiAoaXNGaXhlZFBvcykKKyAgICAgICAgbW9kZS5hZGQoSXNGaXhlZCk7CisK
KyAgICBpZiAod2FzRml4ZWQpCisgICAgICAgICp3YXNGaXhlZCA9IG1vZGUuY29udGFpbnMoSXNG
aXhlZCk7CisKKyAgICBib29sIGNvbXB1dGluZ0NUTU9yU2NyZWVuQ1RNID0gZmFsc2U7CisgICAg
Ly8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBUcmFuc2Zvcm1TdGF0ZSBjaGFuZ2VzCisgICAgLy8g
Ym9vbCBjb21wdXRpbmdDVE1PclNjcmVlbkNUTSA9IHRyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybU1h
dHJpeFRyYWNraW5nKCkgIT0gVHJhbnNmb3JtU3RhdGU6OkRvTm90VHJhY2tUcmFuc2Zvcm1NYXRy
aXg7CisgICAgYXV0byBjb250YWluZXJPZmZzZXQgPSBvZmZzZXRGcm9tQ29udGFpbmVyKCpjb250
YWluZXIsIExheW91dFBvaW50KHRyYW5zZm9ybVN0YXRlLm1hcHBlZFBvaW50KCkpKTsKKworICAg
IGJvb2wgcHJlc2VydmUzRCA9IG1vZGUgJiBVc2VUcmFuc2Zvcm1zICYmIChjb250YWluZXItPnN0
eWxlKCkucHJlc2VydmVzM0QoKSB8fCBzdHlsZSgpLnByZXNlcnZlczNEKCkpOworCisgICAgaWYg
KG1vZGUgJiBVc2VUcmFuc2Zvcm1zICYmIHNob3VsZFVzZVRyYW5zZm9ybUZyb21Db250YWluZXIo
Y29udGFpbmVyKSkgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0OworICAgICAgICBn
ZXRUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgY29udGFpbmVyT2Zmc2V0LCB0KTsK
KworICAgICAgICAvKiBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFRyYW5zZm9ybVN0YXRlIGNoYW5n
ZXMKKyAgICAgICAgaWYgKHRyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybU1hdHJpeFRyYWNraW5nKCkg
PT0gVHJhbnNmb3JtU3RhdGU6OlRyYWNrU1ZHQ1RNTWF0cml4KSB7CisgICAgICAgICAgICBhdXRv
IG9mZnNldCA9IHRvTGF5b3V0U2l6ZShjb250ZW50Qm94TG9jYXRpb24oKSArIGNvbnRhaW5lck9m
ZnNldCk7CisgICAgICAgICAgICB0LnRyYW5zbGF0ZVJpZ2h0KC1vZmZzZXQud2lkdGgoKSwgLW9m
ZnNldC5oZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICAgICAgKi8KKworICAgICAgICB0cmFuc2Zv
cm1TdGF0ZS5hcHBseVRyYW5zZm9ybSh0LCBwcmVzZXJ2ZTNEID8gVHJhbnNmb3JtU3RhdGU6OkFj
Y3VtdWxhdGVUcmFuc2Zvcm0gOiBUcmFuc2Zvcm1TdGF0ZTo6RmxhdHRlblRyYW5zZm9ybSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUoY29udGFpbmVyT2Zmc2V0Lndp
ZHRoKCksIGNvbnRhaW5lck9mZnNldC5oZWlnaHQoKSwgcHJlc2VydmUzRCA/IFRyYW5zZm9ybVN0
YXRlOjpBY2N1bXVsYXRlVHJhbnNmb3JtIDogVHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zv
cm0pOworCisgICAgaWYgKGNvbnRhaW5lclNraXBwZWQpIHsKKyAgICAgICAgLy8gVGhlcmUgY2Fu
J3QgYmUgYSB0cmFuc2Zvcm0gYmV0d2VlbiByZXBhaW50Q29udGFpbmVyIGFuZCBvLCBiZWNhdXNl
IHRyYW5zZm9ybXMgY3JlYXRlIGNvbnRhaW5lcnMsIHNvIGl0IHNob3VsZCBiZSBzYWZlCisgICAg
ICAgIC8vIHRvIGp1c3Qgc3VidHJhY3QgdGhlIGRlbHRhIGJldHdlZW4gdGhlIHJlcGFpbnRDb250
YWluZXIgYW5kIG8uCisgICAgICAgIGF1dG8gY29udGFpbmVyT2Zmc2V0ID0gcmVwYWludENvbnRh
aW5lci0+b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKCpjb250YWluZXIpOworICAgICAgICB0
cmFuc2Zvcm1TdGF0ZS5tb3ZlKC1jb250YWluZXJPZmZzZXQud2lkdGgoKSwgLWNvbnRhaW5lck9m
ZnNldC5oZWlnaHQoKSwgcHJlc2VydmUzRCA/IFRyYW5zZm9ybVN0YXRlOjpBY2N1bXVsYXRlVHJh
bnNmb3JtIDogVHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm0pOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgbW9kZS5yZW1vdmUoQXBwbHlDb250YWluZXJGbGlwKTsKKworICAg
IGlmIChjb21wdXRpbmdDVE1PclNjcmVlbkNUTSkgeworICAgICAgICAvLyBUaGUgQ1NTIGxlbmd0
aHMvbnVtYmVycyBhYm92ZSB0aGUgU1ZHIGZyYWdtZW50IChlLmcuIGluIEhUTUwpIGRvIG5vdCBh
ZGhlcmUgdG8gU1ZHIHpvb20gcnVsZXMuCisgICAgICAgIC8vIEFsbCBsZW5ndGggaW5mb3JtYXRp
b24gKGUuZy4gdG9wL3dpZHRoLy4uLikgaW5jbHVkZSB0aGUgc2NhbGluZyBmYWN0b3IuIEluIFNW
RyBubyBsZW5ndGhzIGFyZQorICAgICAgICAvLyBzY2FsZWQgYnV0IGEgZ2xvYmFsIHNjYWxpbmcg
b3BlcmF0aW9uIGlzIGluY2x1ZGVkIGluIHRoZSB0cmFuc2Zvcm0gc3RhdGUuCisgICAgICAgIC8v
IEZvciBnZXRDVE0vZ2V0U2NyZWVuQ1RNIGNvbXB1dGF0aW9ucyB0aGUgcmVzdWx0IG11c3QgYmUg
aW5kZXBlbmRlbnQgb2YgdGhlIHBhZ2Ugem9vbSBmYWN0b3IuCisgICAgICAgIC8vIFRvIGNvbXB1
dGUgdGhlc2UgbWF0cmljZXMgd2l0aGluIGEgbm9uLVNWRyBjb250ZXh0IChlLmcuIFNWRyBlbWJl
ZGRlZCBpbiBIVE1MIC0tIGlubGluZSBTVkcpCisgICAgICAgIC8vIHRoZSBzY2FsaW5nIG5lZWRz
IHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgQ1NTIHRyYW5zZm9ybSBzdGF0ZS4KKyAgICAgICAgVHJh
bnNmb3JtU3RhdGUgdHJhbnNmb3JtU3RhdGVBYm92ZVNWR0ZyYWdtZW50KHRyYW5zZm9ybVN0YXRl
LmRpcmVjdGlvbigpLCB0cmFuc2Zvcm1TdGF0ZS5tYXBwZWRQb2ludCgpKTsKKyAgICAgICAgLy8g
RklYTUU6IFtMQlNFXSBVcHN0cmVhbSBUcmFuc2Zvcm1TdGF0ZSBjaGFuZ2VzCisgICAgICAgIC8v
IHRyYW5zZm9ybVN0YXRlQWJvdmVTVkdGcmFnbWVudC5zZXRUcmFuc2Zvcm1NYXRyaXhUcmFja2lu
Zyh0cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1NYXRyaXhUcmFja2luZygpKTsKKyAgICAgICAgY29u
dGFpbmVyLT5tYXBMb2NhbFRvQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHRyYW5zZm9ybVN0
YXRlQWJvdmVTVkdGcmFnbWVudCwgbW9kZSwgd2FzRml4ZWQpOworCisgICAgICAgIC8qIEZJWE1F
OiBbTEJTRV0gVXBzdHJlYW0gVHJhbnNmb3JtU3RhdGUgY2hhbmdlcworICAgICAgICBpZiAodHJh
bnNmb3JtU3RhdGUudHJhbnNmb3JtTWF0cml4VHJhY2tpbmcoKSA9PSBUcmFuc2Zvcm1TdGF0ZTo6
VHJhY2tTVkdTY3JlZW5DVE1NYXRyaXgpIHsKKyAgICAgICAgICAgIGF1dG8gc2NhbGUgPSAxLjAg
LyBzdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgICAgIGF1dG8gdHJhbnNmb3JtQWJv
dmVTVkdGcmFnbWVudCA9IHRyYW5zZm9ybVN0YXRlQWJvdmVTVkdGcmFnbWVudC5yZWxlYXNlVHJh
Y2tlZFRyYW5zZm9ybSgpOworICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUFib3ZlU1ZHRnJhZ21l
bnQpIHsKKyAgICAgICAgICAgICAgICBGbG9hdFBvaW50IGxvY2F0aW9uKHRyYW5zZm9ybUFib3Zl
U1ZHRnJhZ21lbnQtPmUoKSwgdHJhbnNmb3JtQWJvdmVTVkdGcmFnbWVudC0+ZigpKTsKKyAgICAg
ICAgICAgICAgICBsb2NhdGlvbi5zY2FsZShzY2FsZSk7CisKKyAgICAgICAgICAgICAgICBhdXRv
IHVuc2NhbGVkVHJhbnNmb3JtID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKS5zY2FsZShzY2FsZSkg
KiAqdHJhbnNmb3JtQWJvdmVTVkdGcmFnbWVudDsKKyAgICAgICAgICAgICAgICB1bnNjYWxlZFRy
YW5zZm9ybS5zZXRFKGxvY2F0aW9uLngoKSk7CisgICAgICAgICAgICAgICAgdW5zY2FsZWRUcmFu
c2Zvcm0uc2V0Rihsb2NhdGlvbi55KCkpOworICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0YXRl
LmFwcGx5VHJhbnNmb3JtKHVuc2NhbGVkVHJhbnNmb3JtLCBwcmVzZXJ2ZTNEID8gVHJhbnNmb3Jt
U3RhdGU6OkFjY3VtdWxhdGVUcmFuc2Zvcm0gOiBUcmFuc2Zvcm1TdGF0ZTo6RmxhdHRlblRyYW5z
Zm9ybSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFJlc3BlY3Qgc2Nyb2xsIG9m
ZnNldCwgYWZ0ZXIgbWFwcGluZyB0byBjb250YWluZXIgY29vcmRpbmF0ZXMuCisgICAgICAgICAg
ICBpZiAoUmVmUHRyPEZyYW1lVmlldz4gdmlldyA9IGRvY3VtZW50KCkudmlldygpKSB7CisgICAg
ICAgICAgICAgICAgTGF5b3V0UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSB2aWV3LT5zY3JvbGxQb3Np
dGlvbigpOworICAgICAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uLnNjYWxlKHNjYWxlKTsKKyAg
ICAgICAgICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKC10b0xheW91dFNpemUoc2Nyb2xsUG9z
aXRpb24pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSovCisgICAgfSBlbHNlCisgICAgICAg
IGNvbnRhaW5lci0+bWFwTG9jYWxUb0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCB0cmFuc2Zv
cm1TdGF0ZSwgbW9kZSwgd2FzRml4ZWQpOworfQorCitMYXlvdXRSZWN0IFJlbmRlclNWR1Jvb3Q6
Om92ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFn
bWVudENvbnRhaW5lciogZnJhZ21lbnQsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5LCBQ
YWludFBoYXNlKSBjb25zdAoreworICAgIGF1dG8gY2xpcFJlY3QgPSBib3JkZXJCb3hSZWN0SW5G
cmFnbWVudChmcmFnbWVudCk7CisgICAgY2xpcFJlY3Quc2V0TG9jYXRpb24obG9jYXRpb24gKyBj
bGlwUmVjdC5sb2NhdGlvbigpICsgTGF5b3V0U2l6ZShib3JkZXJMZWZ0KCksIGJvcmRlclRvcCgp
KSk7CisgICAgY2xpcFJlY3Quc2V0U2l6ZShjbGlwUmVjdC5zaXplKCkgLSBMYXlvdXRTaXplKGJv
cmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCksIGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCkp
KTsKKworICAgIGlmICghaXNFbWJlZGRlZFRocm91Z2hGcmFtZUNvbnRhaW5pbmdTVkdEb2N1bWVu
dCgpKSB7CisgICAgICAgIGF1dG8gem9vbSA9IHN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOworICAg
ICAgICBpZiAoem9vbSAhPSAxKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzdmdTVkdFbGVt
ZW50ID0gZG93bmNhc3Q8UmVuZGVyU1ZHUm9vdD4oKnRoaXMpLnN2Z1NWR0VsZW1lbnQoKTsKKyAg
ICAgICAgICAgIGNsaXBSZWN0LnNjYWxlKHN2Z1NWR0VsZW1lbnQuaGFzSW50cmluc2ljV2lkdGgo
KSA/IDEgOiB6b29tLCBzdmdTVkdFbGVtZW50Lmhhc0ludHJpbnNpY0hlaWdodCgpID8gMSA6IHpv
b20pOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNsaXBSZWN0OworfQorCit2b2lk
IFJlbmRlclNWR1Jvb3Q6OmFwcGx5VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFu
c2Zvcm0sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGlu
Z0JveCwgT3B0aW9uU2V0PFJlbmRlclN0eWxlOjpUcmFuc2Zvcm1PcGVyYXRpb25PcHRpb24+IG9w
dGlvbnMpIGNvbnN0Cit7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zZm9ybSk7CisgICAgVU5VU0VE
X1BBUkFNKHN0eWxlKTsKKyAgICBVTlVTRURfUEFSQU0oYm91bmRpbmdCb3gpOworICAgIFVOVVNF
RF9QQVJBTShvcHRpb25zKTsKKyAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR1JlbmRl
clN1cHBvcnQgY2hhbmdlcworICAgIC8vIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5VHJhbnNmb3Jt
KCp0aGlzLCB0cmFuc2Zvcm0sIHN0eWxlLCBib3VuZGluZ0JveCwgc3RkOjpudWxsb3B0LCBzdGQ6
Om51bGxvcHQsIG9wdGlvbnMpOworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6OmFic29sdXRlUmVj
dHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0KSBjb25zdAoreworICAgIGF1dG8gbG9jYWxSZWN0ID0gTGF5b3V0UmVjdChtX3N1cHBs
ZW1lbnRhbExvY2FsVG9QYXJlbnRUcmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRy
YW5zZm9ybSgpKS5tYXBSZWN0KGJvcmRlckJveFJlY3QoKSkpOworICAgIHJlY3RzLmFwcGVuZChz
bmFwcGVkSW50UmVjdChhY2N1bXVsYXRlZE9mZnNldCwgbG9jYWxSZWN0LnNpemUoKSkpOworfQor
Cit2b2lkIFJlbmRlclNWR1Jvb3Q6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1
YWRzLCBib29sKiB3YXNGaXhlZCkgY29uc3QKK3sKKyAgICBSZW5kZXJGcmFnbWVudGVkRmxvdyog
ZnJhZ21lbnRlZEZsb3cgPSBlbmNsb3NpbmdGcmFnbWVudGVkRmxvdygpOworICAgIGlmIChmcmFn
bWVudGVkRmxvdyAmJiBmcmFnbWVudGVkRmxvdy0+YWJzb2x1dGVRdWFkc0ZvckJveChxdWFkcywg
d2FzRml4ZWQsIHRoaXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGxvY2FsUmVjdCA9
IEZsb2F0UmVjdChtX3N1cHBsZW1lbnRhbExvY2FsVG9QYXJlbnRUcmFuc2Zvcm0uaW52ZXJzZSgp
LnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKS5tYXBSZWN0KGJvcmRlckJveFJlY3QoKSkpOwor
ICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKGxvY2FsUmVjdCwgVXNlVHJhbnNm
b3Jtcywgd2FzRml4ZWQpKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKExBWUVSX0JBU0VE
X1NWR19FTkdJTkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jvb3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9v
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjU0OWYzYTczYWM0OWNjMTA2YWIxM2JmYzMwMzM5ZmYzNzVjODIxNTYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jvb3QuaApAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAsIDIwMjEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJSZW5kZXJSZXBsYWNlZC5oIgorLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdCb3Vu
ZGluZ0JveENvbXB1dGF0aW9uCisvLyAjaW5jbHVkZSAiU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlv
bi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFmZmluZVRyYW5zZm9ybTsKK2Ns
YXNzIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOworY2xhc3MgU1ZHU1ZHRWxlbWVudDsKKwor
Y2xhc3MgUmVuZGVyU1ZHUm9vdCBmaW5hbCA6IHB1YmxpYyBSZW5kZXJSZXBsYWNlZCB7CisgICAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRChSZW5kZXJTVkdSb290KTsKK3B1YmxpYzoKKyAgICBSZW5k
ZXJTVkdSb290KFNWR1NWR0VsZW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKKyAgICB2aXJ0dWFsIH5S
ZW5kZXJTVkdSb290KCk7CisKKyAgICBTVkdTVkdFbGVtZW50JiBzdmdTVkdFbGVtZW50KCkgY29u
c3Q7CisgICAgRmxvYXRTaXplIGN1cnJlbnRWaWV3cG9ydFNpemUoKSBjb25zdDsKKworICAgIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdmlld0JveFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmlld0JveFRyYW5zZm9ybTsgfQorICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3VwcGxlbWVu
dGFsTG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VwcGxlbWVudGFs
TG9jYWxUb1BhcmVudFRyYW5zZm9ybTsgfQorCisgICAgYm9vbCBpc0VtYmVkZGVkVGhyb3VnaFNW
R0ltYWdlKCkgY29uc3Q7CisgICAgYm9vbCBpc0VtYmVkZGVkVGhyb3VnaEZyYW1lQ29udGFpbmlu
Z1NWR0RvY3VtZW50KCkgY29uc3Q7CisKKyAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNSYXRpb0lu
Zm9ybWF0aW9uKEZsb2F0U2l6ZSYgaW50cmluc2ljU2l6ZSwgZG91YmxlJiBpbnRyaW5zaWNSYXRp
bykgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGlzTGF5b3V0U2l6ZUNoYW5nZWQoKSBjb25z
dCB7IHJldHVybiBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQ7IH0KKyAgICBib29sIGRpZFRyYW5zZm9y
bVRvUm9vdFVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlkVHJhbnNmb3JtVG9Sb290VXBkYXRl
OyB9CisgICAgYm9vbCBpc0luTGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbV9pbkxheW91dDsgfQor
CisgICAgSW50U2l6ZSBjb250YWluZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluZXJT
aXplOyB9CisgICAgdm9pZCBzZXRDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmIGNvbnRhaW5l
clNpemUpIHsgbV9jb250YWluZXJTaXplID0gY29udGFpbmVyU2l6ZTsgfQorCisgICAgYm9vbCBo
YXNSZWxhdGl2ZURpbWVuc2lvbnMoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIFRoZSBmbGFn
IGlzIGNsZWFyZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGxheW91dCgpIHBhc3MuIEVsZW1l
bnRzIHRoZW4gY2FsbCB0aGlzCisgICAgLy8gbWV0aG9kIGR1cmluZyBsYXlvdXQgd2hlbiB0aGV5
IGFyZSBpbnZhbGlkYXRlZCBieSBhIGZpbHRlci4KKyAgICBzdGF0aWMgdm9pZCBhZGRSZXNvdXJj
ZUZvckNsaWVudEludmFsaWRhdGlvbihSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciopOworCisg
ICAgYm9vbCBzaG91bGRBcHBseVZpZXdwb3J0Q2xpcCgpIGNvbnN0OworCisgICAgLy8gRklYTUU6
IFtMQlNFXSBNYXJrIGZpbmFsLCBhZGQgYXBwbHlUcmFuc2Zvcm0gdG8gUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdAorICAgIHZvaWQgYXBwbHlUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBj
b25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gsIE9wdGlvblNl
dDxSZW5kZXJTdHlsZTo6VHJhbnNmb3JtT3BlcmF0aW9uT3B0aW9uPikgY29uc3Q7CisKKyAgICBG
bG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX29iamVj
dEJvdW5kaW5nQm94OyB9CisgICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsgfQorCisgICAgLy8gRklYTUU6IFtM
QlNFXSBNYXJrIGZpbmFsLCBhZGQgcmVwYWludEJvdW5kaW5nQm94KCkgdG8gUmVuZGVyT2JqZWN0
CisgICAgRmxvYXRSZWN0IHJlcGFpbnRCb3VuZGluZ0JveCgpIGNvbnN0CisgICAgeworICAgICAg
ICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24KKyAg
ICAgICAgLy8gcmV0dXJuIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmNvbXB1dGVSZXBhaW50
Qm91bmRpbmdCb3goKnRoaXMpOworICAgICAgICByZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsK
KyAgICB9CisKKyAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxlbnQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdCb3VuZGlu
Z0JveENvbXB1dGF0aW9uCisgICAgICAgIC8vIHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1dGF0
aW9uOjpjb21wdXRlVmlzdWFsT3ZlcmZsb3dSZWN0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIExh
eW91dFJlY3QoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBlbGVtZW50KCkgY29uc3Qg
PSBkZWxldGU7CisKKyAgICBib29sIGlzU1ZHUm9vdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KKyAgICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gIlJlbmRlclNWR1Jvb3QiOyB9CisgICAgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gVG8gcHJldmVudCBjZXJ0YWluIGxl
Z2FjeSBjb2RlIHBhdGhzIHRvIGhpdCBhc3NlcnRpb25zIGluIGRlYnVnIGJ1aWxkcywgd2hlbiBz
d2l0Y2hpbmcgb2ZmIExCU0UgKGR1cmluZyB0aGUgdGVhcmRvd24gb2YgdGhlIExCU0UgdHJlZSku
CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGNvbXB1dGVGbG9hdFZpc2libGVSZWN0SW5D
b250YWluZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCos
IFZpc2libGVSZWN0Q29udGV4dCkgY29uc3QgZmluYWwgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9
CisKKyAgICBMYXlvdXRVbml0IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChTaG91bGRDb21w
dXRlUHJlZmVycmVkICA9IENvbXB1dGVBY3R1YWwpIGNvbnN0IG92ZXJyaWRlOworICAgIExheW91
dFVuaXQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodChzdGQ6Om9wdGlvbmFsPExheW91dFVu
aXQ+IGVzdGltYXRlZFVzZWRXaWR0aCA9IHN0ZDo6bnVsbG9wdCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBsYXlvdXQoKSBvdmVycmlkZTsKKyAgICB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBwYWludE9iamVjdChQYWludElu
Zm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIG92ZXJyaWRlOworICAgIHZvaWQgcGFpbnRDb250ZW50
cyhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOworCisgICAgdm9pZCB3aWxsQmVEZXN0
cm95ZWQoKSBvdmVycmlkZTsKKworICAgIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShJc0ludGVybmFs
TW92ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCB3aWxsQmVSZW1vdmVkRnJvbVRyZWUoSXNJbnRlcm5h
bE1vdmUpIG92ZXJyaWRlOworCisgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVu
Y2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRh
dGVMYXllckluZm9ybWF0aW9uKCk7CisgICAgdm9pZCB1cGRhdGVGcm9tU3R5bGUoKSBvdmVycmlk
ZTsKKworICAgIGJvb2wgZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAg
ICBib29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBvdmVycmlkZTsKKworICAgIHZvaWQg
Y29tcHV0ZVRyYW5zZm9ybWF0aW9uTWF0cmljZXMoKTsKKworICAgIExheW91dFJlY3Qgb3ZlcmZs
b3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZW50Q29u
dGFpbmVyKiA9IG51bGxwdHIsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3Jl
T3ZlcmxheVNjcm9sbGJhclNpemUsIFBhaW50UGhhc2UgPSBQYWludFBoYXNlOjpCbG9ja0JhY2tn
cm91bmQpIGNvbnN0IGZpbmFsOworICAgIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdChj
b25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBWaXNpYmxlUmVj
dENvbnRleHQpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVy
KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yQ29udGFpbmVyLCBUcmFuc2Zv
cm1TdGF0ZSYsIE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+LCBib29sKiB3YXNGaXhlZCkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+
JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sKiB3YXNGaXhl
ZCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2b2lkIGJ1aWxkVmlld3BvcnRU
cmFuc2Zvcm0oKTsKKworICAgIGJvb2wgbV9pbkxheW91dCB7IGZhbHNlIH07CisgICAgYm9vbCBt
X2RpZFRyYW5zZm9ybVRvUm9vdFVwZGF0ZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzTGF5b3V0
U2l6ZUNoYW5nZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNCb3hEZWNvcmF0aW9ucyB7IGZh
bHNlIH07CisKKyAgICBJbnRTaXplIG1fY29udGFpbmVyU2l6ZTsKKyAgICBGbG9hdFJlY3QgbV9v
YmplY3RCb3VuZGluZ0JveDsKKyAgICBGbG9hdFJlY3QgbV9zdHJva2VCb3VuZGluZ0JveDsKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gbV92aWV3Qm94VHJhbnNmb3JtOworICAgIEFmZmluZVRyYW5zZm9y
bSBtX3N1cHBsZW1lbnRhbExvY2FsVG9QYXJlbnRUcmFuc2Zvcm07CisgICAgSGFzaFNldDxSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+IG1fcmVzb3VyY2VzTmVlZGluZ1RvSW52YWxpZGF0ZUNs
aWVudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfUkVOREVSX09CSkVDVChSZW5kZXJTVkdSb290LCBpc1NWR1Jvb3QoKSkKKworI2VuZGlm
IC8vIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446152</attachid>
            <date>2021-12-07 04:12:33 -0800</date>
            <delta_ts>2021-12-07 04:47:15 -0800</delta_ts>
            <desc>Patch, v3</desc>
            <filename>bug-233863-20211207041232.patch</filename>
            <type>text/plain</type>
            <size>46155</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2QxMmRkN2Y2ZDgyZDYy
NTA5ODg0M2ZkNjY4MzU5MTFlODA2ZGI4OC4uZjlmNjNjNjJmMTM1NjUzMDA1NTg2MDE3NjNiNDgy
NmRiYTc4NGNmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDIxLTEyLTA2ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtMQlNF
XSBCZWdpbiBsYXllci1hd2FyZSBSZW5kZXJTVkdSb290IGltcGxlbWVudGF0aW9uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM4NjMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCZWdpbiBpbXBsZW1lbnRp
bmcgUmVuZGVyU1ZHUm9vdCAtIHRoZSByZW5kZXJlciBmb3IgdGhlIG91dGVybW9zdCA8c3ZnPiBl
bGVtZW50IC0KKyAgICAgICAgZm9yIHRoZSBsYXllci1iYXNlZCBTVkcgZW5naW5lIChMQlNFKS4g
U3RhcnRpbmcgd2l0aCB0aGUgZG93bnN0cmVhbSBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgYWxs
IHBhcnRzIHdlcmUgcmVtb3ZlZCB0aGF0IGNhbiBiZSB1cHN0cmVhbWVkIHNlcGFyYXRlZCAoU1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbiwKKyAgICAgICAgU1ZHQ29udGFpbmVyTGF5b3V0LCBldGMu
KS4gVGhpcyBvbmx5IGNyZWF0ZXMgdGhlIHJlbmRlcmVyIGFuZCBpbnRlZ3JhdGVzIGl0IHdpdGgK
KyAgICAgICAgdGhlIGJ1aWxkIHN5c3RlbXMuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGlu
ZyB0ZXN0cywgbm8gY2hhbmdlIGluIGJlaGF2aW91ci4KKworICAgICAgICAqIFNvdXJjZXMudHh0
OiBBZGQgUmVuZGVyU1ZHUm9vdC4qIHRvIGJ1aWxkLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oOiBNYWtlIGRpcmVjdGlvbigpIHB1YmxpYy4KKyAg
ICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybVN0YXRlOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUm9vdDo6UmVuZGVyU1ZHUm9vdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSb290OjpzdmdTVkdFbGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jvb3Q6OmNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmlzRW1iZWRkZWRUaHJvdWdoU1ZHSW1hZ2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6aXNFbWJlZGRlZFRocm91
Z2hGcmFtZUNvbnRhaW5pbmdTVkdEb2N1bWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSb290Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpsYXlvdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6c2hvdWxkQXBwbHlWaWV3cG9ydENsaXAgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6cGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUm9vdDo6cGFpbnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUm9vdDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdS
b290Ojp3aWxsQmVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6
aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojp3aWxs
QmVSZW1vdmVkRnJvbVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6c3R5
bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6dXBkYXRlTGF5
ZXJJbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojp1cGRhdGVG
cm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6Y2xpcHBlZE92ZXJm
bG93UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojpjb21wdXRl
VHJhbnNmb3JtYXRpb25NYXRyaWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290
Ojpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpoYXNSZWxh
dGl2ZURpbWVuc2lvbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6
YWRkUmVzb3VyY2VGb3JDbGllbnRJbnZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUm9vdDo6Y3VycmVudFZpZXdwb3J0U2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSb290OjptYXBMb2NhbFRvQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jvb3Q6Om92ZXJmbG93Q2xpcFJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6YXBwbHlUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6YWJzb2x1dGVSZWN0cyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSb290OjphYnNvbHV0ZVF1YWRzIGNvbnN0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaDogQWRkZWQuCisKIDIwMjEtMTItMDMgIFNlcmdp
byBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgW2Nzcy1mbGV4
Ym94XSBBY2NvdW50IGZvciBjYXB0aW9ucyB3aGVuIGZsZXhpbmcgdGFibGVzIHdpdGggc3BlY2lm
aWVkIHNpemVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDVjMDNiNTI0NDliZDQ3ZWUxM2ViOWZkNjUzOTI4
M2RkZWJjMjgyZWEuLjA2NDU5Zjc5ZmQ5MDkwMmE5YjY5MjlmMjNiMWJlYTk1YjA0NDYxNDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CkBAIC0yNDk0LDYgKzI0OTQsNyBAQCByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlTWFza2VyLmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm4uY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3Bw
CiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKK3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3Bw
CiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUZXh0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDJmNDUwMmUzZTAyNzQ0YjVlNjg2Nzg3ZDI5Njc3MDZiOTY1NDUyMzku
LjEyNDRlYjAwNDYxZjlkNjllNWJjNzZkNDYxZTM2MTljMjdlZjUwMzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEyNTQsNiAr
MTI1NCw3IEBACiAJCTQzNjcwOERGMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJj
ZVBhdHRlcm4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQzNjcwOEEwMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCAq
LzsgfTsKIAkJNDM2NzA4RTExMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlUmFk
aWFsR3JhZGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQzNjcwOEEyMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdy
YWRpZW50LmggKi87IH07CiAJCTQzNjcwOEUzMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdS
ZXNvdXJjZVNvbGlkQ29sb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQzNjcwOEE0MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IuaCAqLzsgfTsKKwkJNDM2NzA4RTUxMkQ5REI0QjAwMDQ0MjM0IC8qIFJlbmRlclNW
R1Jvb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQz
NjcwOEE2MTJEOURCNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSb290LmggKi87IH07CiAJCTQzNjcw
OEU1MTJEOUNBNEIwMDA0NDIzNCAvKiBMZWdhY3lSZW5kZXJTVkdSb290LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDhBNjEyRDlDQTRCMDAwNDQy
MzQgLyogTGVnYWN5UmVuZGVyU1ZHUm9vdC5oICovOyB9OwogCQk0MzY3MDhFOTEyRDlDQTRCMDAw
NDQyMzQgLyogUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4QUExMkQ5Q0E0QjAwMDQ0MjM0
IC8qIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuaCAqLzsgfTsKIAkJNDM2NzA4RUIx
MkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDhBQzEyRDlDQTRCMDAw
NDQyMzQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCAqLzsgfTsKQEAgLTg5ODIsNiAr
ODk4Myw4IEBACiAJCTQzNjcwOEEyMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJj
ZVJhZGlhbEdyYWRpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
clNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDM2NzA4QTMxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSZXNv
dXJjZVNvbGlkQ29sb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDhB
NDEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDhBNTEyRDlDQTVDMDAwNDQyMzQg
LyogUmVuZGVyU1ZHUm9vdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZW5kZXJTVkdSb290LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4
QTYxMkQ5REI0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jvb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUm9vdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MzY3MDhBNTEyRDlDQTRCMDAwNDQyMzQgLyogTGVnYWN5UmVuZGVyU1ZHUm9vdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lSZW5kZXJTVkdSb290
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM2NzA4QTYxMkQ5Q0E0QjAwMDQ0
MjM0IC8qIExlZ2FjeVJlbmRlclNWR1Jvb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTGVnYWN5UmVuZGVyU1ZHUm9vdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0MzY3MDhBOTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRh
aW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdU
cmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE4ODgwLDYgKzE4ODgzLDggQEAKIAkJCQlDREY3NDdGODI3MEY4N0NCMDA4RkVFRUMgLyogUmVu
ZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudElubGluZXMuaCAqLywKIAkJCQk0MzY3MDhBMzEy
RDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcCAqLywKIAkJ
CQk0MzY3MDhBNDEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9y
LmggKi8sCisJCQkJNDM2NzA4QTUxMkQ5Q0E1QzAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jvb3QuY3Bw
ICovLAorCQkJCTQzNjcwOEE2MTJEOURCNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSb290LmggKi8s
CiAJCQkJQTEwQkI1ODgxNDg0RTNCMzAwQjJFODdBIC8qIFJlbmRlclNWR1NoYXBlLmNwcCAqLywK
IAkJCQlBMTBCQjU4OTE0ODRFM0IzMDBCMkU4N0EgLyogUmVuZGVyU1ZHU2hhcGUuaCAqLywKIAkJ
CQlDREY3NDdGNjI3MEY4NkE0MDA4RkVFRUMgLyogUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmggKi8s
CkBAIC0zNjU1OSw2ICszNjU2NCw3IEBACiAJCQkJNDM2NzA4RTExMkQ5Q0E0QjAwMDQ0MjM0IC8q
IFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNE
Rjc0N0Y5MjcwRjg3Q0IwMDhGRUVFQyAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4RTMxMkQ5Q0E0QjAwMDQ0MjM0IC8q
IFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDM2NzA4
RTUxMkQ5REI0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jvb3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUExMEJCNThCMTQ4NEUzQjMwMEIyRTg3QSAvKiBSZW5kZXJTVkdTaGFwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQ0RGNzQ3RjcyNzBGODZBNDAwOEZFRUVDIC8qIFJlbmRlclNWR1NoYXBlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg1NEIwMTkxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRl
clNWR1RleHQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oCmluZGV4IGQx
MDFjZjg2YjBkNDg1ODYzNWU1YmIxMDQwYjI2MmIzYjk1MzNmYjQuLmFkMWFjNjk0NTY5Mzg3MDVk
ZDkyYjUyMGNlZTc3MmM5M2NkNGRhZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtU3RhdGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmgKQEAgLTEx
Myw2ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFF1YWQ+IG1hcHBl
ZFNlY29uZGFyeVF1YWQoYm9vbCogd2FzQ2xhbXBlZCA9IG51bGxwdHIpIGNvbnN0OwogCiAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXgqIGFjY3VtdWxhdGVkVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gbV9hY2N1bXVsYXRlZFRyYW5zZm9ybS5nZXQoKTsgfQorICAgIFRyYW5zZm9ybURpcmVjdGlv
biBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQogCiBwcml2YXRlOgog
ICAgIHZvaWQgdHJhbnNsYXRlVHJhbnNmb3JtKGNvbnN0IExheW91dFNpemUmKTsKQEAgLTEyMCw3
ICsxMjEsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZmxhdHRlbldpdGhUcmFuc2Zvcm0oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBib29sKiB3YXNDbGFtcGVkKTsKICAgICB2b2lkIGFwcGx5
QWNjdW11bGF0ZWRPZmZzZXQoKTsKICAgICAKLSAgICBUcmFuc2Zvcm1EaXJlY3Rpb24gZGlyZWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KICAgICBUcmFuc2Zvcm1EaXJlY3Rp
b24gaW52ZXJzZURpcmVjdGlvbigpIGNvbnN0OwogCiAgICAgdm9pZCBtYXBRdWFkKEZsb2F0UXVh
ZCYsIFRyYW5zZm9ybURpcmVjdGlvbiwgYm9vbCogY2xhbXBlZCA9IG51bGxwdHIpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMjliYTQzOTc5MWI3NGQ4NzE4MDRiM2FjZGJmNGM2MDdmMDNkYzUzYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAK
QEAgLTAsMCArMSw2NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDcsIDIwMDgsIDIwMDkgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIwLCAyMDIxIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJSZW5kZXJTVkdSb290LmgiCisKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkK
KyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKKyNpbmNs
dWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgorI2luY2x1ZGUg
IlJlbmRlckZyYWdtZW50ZWRGbG93LmgiCisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5j
bHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKKyNpbmNsdWRlICJSZW5kZXJT
VkdGb3JlaWduT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgorI2luY2x1ZGUgIlJl
bmRlclRyZWVCdWlsZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorLy8gRklYTUU6IFtM
QlNFXSBVcHN0cmVhbSBTVkdDb250YWluZXJMYXlvdXQKKy8vICNpbmNsdWRlICJTVkdDb250YWlu
ZXJMYXlvdXQuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50VHlwZUhlbHBlcnMuaCIKKyNpbmNsdWRl
ICJTVkdJbWFnZS5oIgorI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJTVkdSZXNvdXJjZXMuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5oIgorI2luY2x1
ZGUgIlNWR1NWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdWaWV3U3BlYy5oIgorI2luY2x1ZGUg
IlRyYW5zZm9ybVN0YXRlLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKyNp
bmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChSZW5k
ZXJTVkdSb290KTsKKworUmVuZGVyU1ZHUm9vdDo6UmVuZGVyU1ZHUm9vdChTVkdTVkdFbGVtZW50
JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQorICAgIDogUmVuZGVyUmVwbGFjZWQoZWxl
bWVudCwgV1RGTW92ZShzdHlsZSkpCit7Cit9CisKK1JlbmRlclNWR1Jvb3Q6On5SZW5kZXJTVkdS
b290KCkgPSBkZWZhdWx0OworCitTVkdTVkdFbGVtZW50JiBSZW5kZXJTVkdSb290OjpzdmdTVkdF
bGVtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZG93bmNhc3Q8U1ZHU1ZHRWxlbWVudD4obm9k
ZUZvck5vbkFub255bW91cygpKTsKK30KKwordm9pZCBSZW5kZXJTVkdSb290Ojpjb21wdXRlSW50
cmluc2ljUmF0aW9JbmZvcm1hdGlvbihGbG9hdFNpemUmIGludHJpbnNpY1NpemUsIGRvdWJsZSYg
aW50cmluc2ljUmF0aW8pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFzaG91bGRBcHBseVNpemVDb250
YWlubWVudCgqdGhpcykpOworCisgICAgLy8gU3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZH
L2Nvb3Jkcy5odG1sI0ludHJpbnNpY1NpemluZworICAgIC8vIFNWRyBuZWVkcyB0byBzcGVjaWZ5
IGhvdyB0byBjYWxjdWxhdGUgc29tZSBpbnRyaW5zaWMgc2l6aW5nIHByb3BlcnRpZXMgdG8gZW5h
YmxlIGluY2x1c2lvbiB3aXRoaW4gb3RoZXIgbGFuZ3VhZ2VzLgorCisgICAgLy8gVGhlIGludHJp
bnNpYyBhc3BlY3QgcmF0aW8gb2YgdGhlIHZpZXdwb3J0IG9mIFNWRyBjb250ZW50IGlzIG5lY2Vz
c2FyeSBmb3IgZXhhbXBsZSwgd2hlbiBpbmNsdWRpbmcgU1ZHIGZyb20gYW4g4oCYb2JqZWN04oCZ
CisgICAgLy8gZWxlbWVudCBpbiBIVE1MIHN0eWxlZCB3aXRoIENTUy4gSXQgaXMgcG9zc2libGUg
KGluZGVlZCwgY29tbW9uKSBmb3IgYW4gU1ZHIGdyYXBoaWMgdG8gaGF2ZSBhbiBpbnRyaW5zaWMg
YXNwZWN0IHJhdGlvIGJ1dAorICAgIC8vIG5vdCB0byBoYXZlIGFuIGludHJpbnNpYyB3aWR0aCBv
ciBoZWlnaHQuIFRoZSBpbnRyaW5zaWMgYXNwZWN0IHJhdGlvIG11c3QgYmUgY2FsY3VsYXRlZCBi
YXNlZCB1cG9uIHRoZSBmb2xsb3dpbmcgcnVsZXM6CisgICAgLy8gLSBUaGUgYXNwZWN0IHJhdGlv
IGlzIGNhbGN1bGF0ZWQgYnkgZGl2aWRpbmcgYSB3aWR0aCBieSBhIGhlaWdodC4KKyAgICAvLyAt
IElmIHRoZSDigJh3aWR0aOKAmSBhbmQg4oCYaGVpZ2h04oCZIG9mIHRoZSByb290bW9zdCDigJhz
dmfigJkgZWxlbWVudCBhcmUgYm90aCBzcGVjaWZpZWQgd2l0aCB1bml0IGlkZW50aWZpZXJzIChp
biwgbW0sIGNtLCBwdCwgcGMsCisgICAgLy8gICBweCwgZW0sIGV4KSBvciBpbiB1c2VyIHVuaXRz
LCB0aGVuIHRoZSBhc3BlY3QgcmF0aW8gaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSDigJh3aWR0aOKA
mSBhbmQg4oCYaGVpZ2h04oCZIGF0dHJpYnV0ZXMgYWZ0ZXIKKyAgICAvLyAgIHJlc29sdmluZyBi
b3RoIHZhbHVlcyB0byB1c2VyIHVuaXRzLgorICAgIGludHJpbnNpY1NpemUuaGFzSW50cmluc2lj
V2lkdGggPSBzdmdTVkdFbGVtZW50KCkuaGFzSW50cmluc2ljV2lkdGgoKTsKKyAgICBpbnRyaW5z
aWNTaXplLmhhc0ludHJpbnNpY0hlaWdodCA9IHN2Z1NWR0VsZW1lbnQoKS5oYXNJbnRyaW5zaWNI
ZWlnaHQoKTsKKyAgICBpbnRyaW5zaWNTaXplLnNldFdpZHRoKGZsb2F0VmFsdWVGb3JMZW5ndGgo
c3ZnU1ZHRWxlbWVudCgpLmludHJpbnNpY1dpZHRoKCksIDApKTsKKyAgICBpbnRyaW5zaWNTaXpl
LnNldEhlaWdodChmbG9hdFZhbHVlRm9yTGVuZ3RoKHN2Z1NWR0VsZW1lbnQoKS5pbnRyaW5zaWNI
ZWlnaHQoKSwgMCkpOworCisgICAgaWYgKHN0eWxlKCkuYXNwZWN0UmF0aW9UeXBlKCkgPT0gQXNw
ZWN0UmF0aW9UeXBlOjpSYXRpbykgeworICAgICAgICBpbnRyaW5zaWNSYXRpbyA9IHN0eWxlKCku
bG9naWNhbEFzcGVjdFJhdGlvKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGQ6
Om9wdGlvbmFsPGRvdWJsZT4gaW50cmluc2ljUmF0aW9WYWx1ZTsKKyAgICBpZiAoIWludHJpbnNp
Y1NpemUuaXNFbXB0eSgpKQorICAgICAgICBpbnRyaW5zaWNSYXRpb1ZhbHVlID0gaW50cmluc2lj
U2l6ZS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihpbnRyaW5zaWNTaXplLmhlaWdodCgp
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gLSBJZiBlaXRoZXIvYm90aCBvZiB0aGUg4oCYd2lk
dGjigJkgYW5kIOKAmGhlaWdodOKAmSBvZiB0aGUgcm9vdG1vc3Qg4oCYc3Zn4oCZIGVsZW1lbnQg
YXJlIGluIHBlcmNlbnRhZ2UgdW5pdHMgKG9yIG9taXR0ZWQpLCB0aGUKKyAgICAgICAgLy8gICBh
c3BlY3QgcmF0aW8gaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVl
cyBvZiB0aGUg4oCYdmlld0JveOKAmSBzcGVjaWZpZWQgZm9yIHRoZSBjdXJyZW50IFNWRyBkb2N1
bWVudAorICAgICAgICAvLyAgIGZyYWdtZW50LiBJZiB0aGUg4oCYdmlld0JveOKAmSBpcyBub3Qg
Y29ycmVjdGx5IHNwZWNpZmllZCwgb3Igc2V0IHRvICdub25lJywgdGhlIGludHJpbnNpYyBhc3Bl
Y3QgcmF0aW8gY2Fubm90IGJlCisgICAgICAgIC8vICAgY2FsY3VsYXRlZCBhbmQgaXMgY29uc2lk
ZXJlZCB1bnNwZWNpZmllZC4KKyAgICAgICAgRmxvYXRTaXplIHZpZXdCb3hTaXplID0gc3ZnU1ZH
RWxlbWVudCgpLnZpZXdCb3goKS5zaXplKCk7CisgICAgICAgIGlmICghdmlld0JveFNpemUuaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICAvLyBUaGUgdmlld0JveCBjYW4gb25seSB5aWVsZCBhbiBp
bnRyaW5zaWMgcmF0aW8sIG5vdCBhbiBpbnRyaW5zaWMgc2l6ZS4KKyAgICAgICAgICAgIGludHJp
bnNpY1JhdGlvVmFsdWUgPSB2aWV3Qm94U2l6ZS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91Ymxl
Pih2aWV3Qm94U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaW50
cmluc2ljUmF0aW9WYWx1ZSkKKyAgICAgICAgaW50cmluc2ljUmF0aW8gPSAqaW50cmluc2ljUmF0
aW9WYWx1ZTsKKyAgICBlbHNlIGlmIChzdHlsZSgpLmFzcGVjdFJhdGlvVHlwZSgpID09IEFzcGVj
dFJhdGlvVHlwZTo6QXV0b0FuZFJhdGlvKQorICAgICAgICBpbnRyaW5zaWNSYXRpbyA9IHN0eWxl
KCkubG9naWNhbEFzcGVjdFJhdGlvKCk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUm9vdDo6aXNFbWJl
ZGRlZFRocm91Z2hTVkdJbWFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzSW5TVkdJbWFnZSgm
c3ZnU1ZHRWxlbWVudCgpKTsKK30KKworYm9vbCBSZW5kZXJTVkdSb290Ojppc0VtYmVkZGVkVGhy
b3VnaEZyYW1lQ29udGFpbmluZ1NWR0RvY3VtZW50KCkgY29uc3QKK3sKKyAgICAvLyBJZiBvdXIg
ZnJhbWUgaGFzIGFuIG93bmVyIHJlbmRlcmVyLCB3ZSdyZSBlbWJlZGRlZCB0aHJvdWdoIGVnLiBv
YmplY3QvZW1iZWQvaWZyYW1lLAorICAgIC8vIGJ1dCB3ZSBvbmx5IG5lZ290aWF0ZSBpZiB3ZSdy
ZSBpbiBhbiBTVkcgZG9jdW1lbnQgaW5zaWRlIG9iamVjdC9lbWJlZCwgbm90IGlmcmFtZS4KKyAg
ICBpZiAoIWZyYW1lKCkub3duZXJSZW5kZXJlcigpIHx8ICFmcmFtZSgpLm93bmVyUmVuZGVyZXIo
KS0+aXNFbWJlZGRlZE9iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IGZyYW1lKCkuZG9jdW1lbnQoKS0+aXNTVkdEb2N1bWVudCgpOworfQorCitMYXlvdXRVbml0IFJl
bmRlclNWR1Jvb3Q6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChTaG91bGRDb21wdXRlUHJl
ZmVycmVkIHNob3VsZENvbXB1dGVQcmVmZXJyZWQpIGNvbnN0Cit7CisgICAgLy8gV2hlbiB3ZSdy
ZSBlbWJlZGRlZCB0aHJvdWdoIFNWR0ltYWdlIChib3JkZXItaW1hZ2UvYmFja2dyb3VuZC1pbWFn
ZS88aHRtbDppbWc+Ly4uLikgd2UncmUgZm9yY2VkIHRvIHJlc2l6ZSB0byBhIHNwZWNpZmljIHNp
emUuCisgICAgaWYgKCFtX2NvbnRhaW5lclNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
bV9jb250YWluZXJTaXplLndpZHRoKCk7CisKKyAgICBpZiAoaXNFbWJlZGRlZFRocm91Z2hGcmFt
ZUNvbnRhaW5pbmdTVkdEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2Nr
KCktPmF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpOworCisgICAgLy8gU1ZHIGVtYmVkZGVkIHZpYSBT
VkdJbWFnZSAoYmFja2dyb3VuZC1pbWFnZS9ib3JkZXItaW1hZ2UvZXRjKSAvIElubGluZSBTVkcu
CisgICAgcmV0dXJuIFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgo
c2hvdWxkQ29tcHV0ZVByZWZlcnJlZCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyU1ZHUm9vdDo6
Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodChzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGVz
dGltYXRlZFVzZWRXaWR0aCkgY29uc3QKK3sKKyAgICAvLyBXaGVuIHdlJ3JlIGVtYmVkZGVkIHRo
cm91Z2ggU1ZHSW1hZ2UgKGJvcmRlci1pbWFnZS9iYWNrZ3JvdW5kLWltYWdlLzxodG1sOmltZz4v
Li4uKSB3ZSdyZSBmb3JjZWQgdG8gcmVzaXplIHRvIGEgc3BlY2lmaWMgc2l6ZS4KKyAgICBpZiAo
IW1fY29udGFpbmVyU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtX2NvbnRhaW5lclNp
emUuaGVpZ2h0KCk7CisKKyAgICBpZiAoaXNFbWJlZGRlZFRocm91Z2hGcmFtZUNvbnRhaW5pbmdT
VkdEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJs
ZUxvZ2ljYWxIZWlnaHQoSW5jbHVkZU1hcmdpbkJvcmRlclBhZGRpbmcpOworCisgICAgLy8gU3Rh
bmRhbG9uZSBTVkcgLyBTVkcgZW1iZWRkZWQgdmlhIFNWR0ltYWdlIChiYWNrZ3JvdW5kLWltYWdl
L2JvcmRlci1pbWFnZS9ldGMpIC8gSW5saW5lIFNWRy4KKyAgICByZXR1cm4gUmVuZGVyUmVwbGFj
ZWQ6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoZXN0aW1hdGVkVXNlZFdpZHRoKTsKK30K
Kwordm9pZCBSZW5kZXJTVkdSb290OjpsYXlvdXQoKQoreworICAgIFNldEZvclNjb3BlPGJvb2w+
IGNoYW5nZShtX2luTGF5b3V0LCB0cnVlKTsKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1Bv
aW50IGxheW91dENoZWNrUG9pbnQ7CisgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOworCisgICAg
bV9yZXNvdXJjZXNOZWVkaW5nVG9JbnZhbGlkYXRlQ2xpZW50cy5jbGVhcigpOworCisgICAgLy8g
QXJiaXRyYXJ5IGFmZmluZSB0cmFuc2Zvcm1zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBSZW5kZXJM
YXlvdXRTdGF0ZS4KKyAgICBMYXlvdXRTdGF0ZURpc2FibGVyIGxheW91dFN0YXRlRGlzYWJsZXIo
dmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKSk7CisKKyAgICBib29sIG5lZWRzTGF5
b3V0ID0gc2VsZk5lZWRzTGF5b3V0KCk7CisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigq
dGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpOworCisgICAgYXV0byBwcmV2aW91
c0xvZ2ljYWxTaXplID0gc2l6ZSgpOworICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aCgpOworICAgIHVw
ZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKKyAgICBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQgPSBuZWVkc0xh
eW91dCB8fCAoc3ZnU1ZHRWxlbWVudCgpLmhhc1JlbGF0aXZlTGVuZ3RocygpICYmIHByZXZpb3Vz
TG9naWNhbFNpemUgIT0gc2l6ZSgpKTsKKworICAgIGF1dG8gb2xkVHJhbnNmb3JtID0gbV9zdXBw
bGVtZW50YWxMb2NhbFRvUGFyZW50VHJhbnNmb3JtOworICAgIGNvbXB1dGVUcmFuc2Zvcm1hdGlv
bk1hdHJpY2VzKCk7CisKKyAgICBpZiAob2xkVHJhbnNmb3JtICE9IG1fc3VwcGxlbWVudGFsTG9j
YWxUb1BhcmVudFRyYW5zZm9ybSkKKyAgICAgICAgbV9kaWRUcmFuc2Zvcm1Ub1Jvb3RVcGRhdGUg
PSB0cnVlOworICAgIGVsc2UgaWYgKHByZXZpb3VzTG9naWNhbFNpemUgIT0gc2l6ZSgpKQorICAg
ICAgICBtX2RpZFRyYW5zZm9ybVRvUm9vdFVwZGF0ZSA9IHRydWU7CisKKyAgICAvLyBGSVhNRTog
W0xCU0VdIFVwc3RyZWFtIFNWR0xlbmd0aENvbnRleHQgY2hhbmdlcworICAgIC8vIHN2Z1NWR0Vs
ZW1lbnQoKS51cGRhdGVMZW5ndGhDb250ZXh0KCk7CisKKyAgICAvLyBGSVhNRTogW0xCU0VdIFVw
c3RyZWFtIFNWR0xheWVyVHJhbnNmb3JtVXBkYXRlcgorICAgIC8vIFNWR0xheWVyVHJhbnNmb3Jt
VXBkYXRlciB0cmFuc2Zvcm1VcGRhdGVyKCp0aGlzKTsKKyAgICB1cGRhdGVMYXllckluZm9ybWF0
aW9uKCk7CisKKyAgICAvKiBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0NvbnRhaW5lckxheW91
dCAvIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24KKyAgICB7CisgICAgICAgIFNWR0NvbnRhaW5l
ckxheW91dCBjb250YWluZXJMYXlvdXQoKnRoaXMpOworICAgICAgICBjb250YWluZXJMYXlvdXQu
bGF5b3V0Q2hpbGRyZW4obmVlZHNMYXlvdXQgfHwgU1ZHUmVuZGVyU3VwcG9ydDo6ZmlsdGVyc0Zv
cmNlQ29udGFpbmVyTGF5b3V0KCp0aGlzKSk7CisKKyAgICAgICAgU1ZHQm91bmRpbmdCb3hDb21w
dXRhdGlvbiBib3VuZGluZ0JveENvbXB1dGF0aW9uKCp0aGlzKTsKKyAgICAgICAgbV9vYmplY3RC
b3VuZGluZ0JveCA9IGJvdW5kaW5nQm94Q29tcHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5k
aW5nQm94KFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246Om9iamVjdEJvdW5kaW5nQm94RGVjb3Jh
dGlvbik7CisgICAgICAgIG1fc3Ryb2tlQm91bmRpbmdCb3ggPSBib3VuZGluZ0JveENvbXB1dGF0
aW9uLmNvbXB1dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9u
OjpzdHJva2VCb3VuZGluZ0JveERlY29yYXRpb24pOworICAgIH0KKyAgICAqLworCisgICAgLy8g
RklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdDb250YWluZXJMYXlvdXQgLS0gcmVtb3ZlIFNWR1Jl
bmRlclN1cHBvcnQ6OmxheW91dENoaWxkcmVuLgorICAgIFNWR1JlbmRlclN1cHBvcnQ6OmxheW91
dENoaWxkcmVuKCp0aGlzLCBuZWVkc0xheW91dCk7CisKKyAgICBpZiAoIW1fcmVzb3VyY2VzTmVl
ZGluZ1RvSW52YWxpZGF0ZUNsaWVudHMuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEludmFsaWRh
dGUgcmVzb3VyY2UgY2xpZW50cywgd2hpY2ggbWF5IG1hcmsgc29tZSBub2RlcyBmb3IgbGF5b3V0
LgorICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogIG1fcmVzb3VyY2VzTmVlZGluZ1RvSW52
YWxpZGF0ZUNsaWVudHMpIHsKKyAgICAgICAgICAgIHJlc291cmNlLT5yZW1vdmVBbGxDbGllbnRz
RnJvbUNhY2hlKCk7CisgICAgICAgICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVD
aGFuZ2VkKCpyZXNvdXJjZSwgU3R5bGVEaWZmZXJlbmNlOjpMYXlvdXQsIHJlc291cmNlLT5zdHls
ZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIG1faXNMYXlvdXRTaXplQ2hhbmdlZCA9IGZhbHNl
OworCisgICAgICAgIC8qIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQ29udGFpbmVyTGF5b3V0
CisgICAgICAgIFNWR0NvbnRhaW5lckxheW91dCBjb250YWluZXJMYXlvdXQoKnRoaXMpOworICAg
ICAgICBjb250YWluZXJMYXlvdXQubGF5b3V0Q2hpbGRyZW4oZmFsc2UpOworICAgICAgICAqLwor
ICAgIH0KKworICAgIG1faXNMYXlvdXRTaXplQ2hhbmdlZCA9IGZhbHNlOworICAgIG1fZGlkVHJh
bnNmb3JtVG9Sb290VXBkYXRlID0gZmFsc2U7CisKKyAgICBjbGVhck92ZXJmbG93KCk7CisgICAg
aWYgKCFzaG91bGRBcHBseVZpZXdwb3J0Q2xpcCgpKSB7CisgICAgICAgIGF1dG8gdmlzdWFsT3Zl
cmZsb3dSZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChtX3ZpZXdCb3hUcmFuc2Zvcm0ubWFwUmVj
dCh2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkpKTsKKyAgICAgICAgYWRkVmlzdWFsT3Zl
cmZsb3codmlzdWFsT3ZlcmZsb3dSZWN0KTsKKyAgICAgICAgYWRkVmlzdWFsRWZmZWN0T3ZlcmZs
b3coKTsKKyAgICB9CisgICAgaW52YWxpZGF0ZUJhY2tncm91bmRPYnNjdXJhdGlvblN0YXR1cygp
OworCisgICAgbV9oYXNCb3hEZWNvcmF0aW9ucyA9IGlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIo
KSA/IGhhc1Zpc2libGVCb3hEZWNvcmF0aW9uU3R5bGUoKSA6IGhhc1Zpc2libGVCb3hEZWNvcmF0
aW9ucygpOworICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKKworICAgIGNsZWFy
TmVlZHNMYXlvdXQoKTsKK30KKworYm9vbCBSZW5kZXJTVkdSb290OjpzaG91bGRBcHBseVZpZXdw
b3J0Q2xpcCgpIGNvbnN0Cit7CisgICAgLy8gdGhlIG91dGVybW9zdCBzdmcgaXMgY2xpcHBlZCBp
ZiBhdXRvLCBhbmQgc3ZnIGRvY3VtZW50IHJvb3RzIGFyZSBhbHdheXMgY2xpcHBlZAorICAgIC8v
IFdoZW4gdGhlIHN2ZyBpcyBzdGFuZC1hbG9uZSAoaXNEb2N1bWVudEVsZW1lbnQoKSA9PSB0cnVl
KSB0aGUgdmlld3BvcnQgY2xpcHBpbmcgc2hvdWxkIGFsd2F5cworICAgIC8vIGJlIGFwcGxpZWQs
IG5vdGluZyB0aGF0IHRoZSB3aW5kb3cgc2Nyb2xsYmFycyBzaG91bGQgYmUgaGlkZGVuIGlmIG92
ZXJmbG93PWhpZGRlbi4KKyAgICByZXR1cm4gZWZmZWN0aXZlT3ZlcmZsb3dYKCkgPT0gT3ZlcmZs
b3c6OkhpZGRlbgorICAgICAgICB8fCBzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpB
dXRvCisgICAgICAgIHx8IHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbAor
ICAgICAgICB8fCB0aGlzLT5pc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCk7Cit9CisKKy8vIEZJ
WE1FOiBCYXNpY2FsbHkgYSBjb3B5IG9mIFJlbmRlckJsb2NrOjpwYWludCgpIC0gaWRlYWxseSBv
bmUgd291bGQgc2hhcmUgdGhpcyBjb2RlLgorLy8gSG93ZXZlciB3aXRoIExGQyBvbiB0aGUgaG9y
aXpvbiB0aGF0IGludmVzdG1lbnQgaXMgdXNlbGVzcywgd2Ugc2hvdWxkIGNvbmNlbnRyYXRlCisv
LyBvbiBMRkMvU1ZHIGludGVncmF0aW9uIG9uY2UgdGhlIExCU0UgaXMgdXBzdHJlYW1lZC4KK3Zv
aWQgUmVuZGVyU1ZHUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91
dFBvaW50JiBwYWludE9mZnNldCkKK3sKKyAgICAvLyBEb24ndCBwYWludCwgaWYgdGhlIGNvbnRl
eHQgZXhwbGljaXRseSBkaXNhYmxlZCBpdC4KKyAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQoKS5w
YWludGluZ0Rpc2FibGVkKCkgJiYgIXBhaW50SW5mby5jb250ZXh0KCkuZGV0ZWN0aW5nQ29udGVu
dGZ1bFBhaW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEFuIGVtcHR5IHZpZXdwb3J0
IGRpc2FibGVzIHJlbmRlcmluZy4KKyAgICBpZiAoYm9yZGVyQm94UmVjdCgpLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRP
ZmZzZXQgKyBsb2NhdGlvbigpOworCisgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBkbyBhbnl0
aGluZyBhdCBhbGwuCisgICAgLy8gRklYTUU6IENvdWxkIGVsaW1pbmF0ZSB0aGUgaXNEb2N1bWVu
dEVsZW1lbnRSZW5kZXJlcigpIGNoZWNrIGlmIHdlIGZpeCBiYWNrZ3JvdW5kIHBhaW50aW5nIHNv
IHRoYXQgdGhlIFJlbmRlclZpZXcKKyAgICAvLyBwYWludHMgdGhlIHJvb3QncyBiYWNrZ3JvdW5k
LgorICAgIGlmICghaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpICYmICFwYWludEluZm8ucGFp
bnRCZWhhdmlvci5jb250YWlucyhQYWludEJlaGF2aW9yOjpDb21wb3NpdGVkT3ZlcmZsb3dTY3Jv
bGxDb250ZW50KSkgeworICAgICAgICBhdXRvIG92ZXJmbG93Qm94ID0gdmlzdWFsT3ZlcmZsb3dS
ZWN0KCk7CisgICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd0JveCk7CisgICAgICAg
IG92ZXJmbG93Qm94Lm1vdmVCeShhZGp1c3RlZFBhaW50T2Zmc2V0KTsKKyAgICAgICAgaWYgKCFv
dmVyZmxvd0JveC5pbnRlcnNlY3RzKHBhaW50SW5mby5yZWN0KSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBib29sIHB1c2hlZENsaXAgPSBwdXNoQ29udGVudHNDbGlwKHBhaW50
SW5mbywgYWRqdXN0ZWRQYWludE9mZnNldCk7CisgICAgcGFpbnRPYmplY3QocGFpbnRJbmZvLCBh
ZGp1c3RlZFBhaW50T2Zmc2V0KTsKKyAgICBpZiAocHVzaGVkQ2xpcCkKKyAgICAgICAgcG9wQ29u
dGVudHNDbGlwKHBhaW50SW5mbywgcGFpbnRJbmZvLnBoYXNlLCBhZGp1c3RlZFBhaW50T2Zmc2V0
KTsKKworICAgIC8vIE91ciBzY3JvbGxiYXIgd2lkZ2V0cyBwYWludCBleGFjdGx5IHdoZW4gd2Ug
dGVsbCB0aGVtIHRvLCBzbyB0aGF0IHRoZXkgd29yayBwcm9wZXJseSB3aXRoCisgICAgLy8gei1p
bmRleC4gV2UgcGFpbnQgYWZ0ZXIgd2UgcGFpbnRlZCB0aGUgYmFja2dyb3VuZC9ib3JkZXIsIHNv
IHRoYXQgdGhlIHNjcm9sbGJhcnMgd2lsbAorICAgIC8vIHNpdCBhYm92ZSB0aGUgYmFja2dyb3Vu
ZC9ib3JkZXIuCisgICAgaWYgKChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6QmxvY2tC
YWNrZ3JvdW5kIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpDaGlsZEJsb2NrQmFj
a2dyb3VuZCkgJiYgaGFzTm9uVmlzaWJsZU92ZXJmbG93KCkgJiYgbGF5ZXIoKSAmJiBsYXllcigp
LT5zY3JvbGxhYmxlQXJlYSgpCisgICAgICAgICYmIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZp
c2liaWxpdHk6OlZpc2libGUgJiYgcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCgqdGhp
cykgJiYgIXBhaW50SW5mby5wYWludFJvb3RCYWNrZ3JvdW5kT25seSgpKQorICAgICAgICBsYXll
cigpLT5zY3JvbGxhYmxlQXJlYSgpLT5wYWludE92ZXJmbG93Q29udHJvbHMocGFpbnRJbmZvLmNv
bnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBzbmFwcGVkSW50
UmVjdChwYWludEluZm8ucmVjdCkpOworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6OnBhaW50T2Jq
ZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQp
Cit7CisgICAgaWYgKChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6QmxvY2tCYWNrZ3Jv
dW5kIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpDaGlsZEJsb2NrQmFja2dyb3Vu
ZCkgJiYgc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSkgeworICAg
ICAgICBpZiAoaGFzVmlzaWJsZUJveERlY29yYXRpb25zKCkpCisgICAgICAgICAgICBwYWludEJv
eERlY29yYXRpb25zKHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOworICAgIH0KKworICAgIGF1dG8g
YWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKKyAgICBpZiAo
cGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6Ok1hc2sgJiYgc3R5bGUoKS52aXNpYmlsaXR5
KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSkgeworICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVw
c3RyZWFtIFNWR1JlbmRlclN1cHBvcnQgY2hhbmdlcworICAgICAgICAvLyBTVkdSZW5kZXJTdXBw
b3J0OjpwYWludFNWR01hc2soKnRoaXMsIHBhaW50SW5mbywgYWRqdXN0ZWRQYWludE9mZnNldCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBh
aW50UGhhc2U6OkNsaXBwaW5nTWFzayAmJiBzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmls
aXR5OjpWaXNpYmxlKSB7CisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHUmVu
ZGVyU3VwcG9ydCBjaGFuZ2VzCisgICAgICAgIC8vIFNWR1JlbmRlclN1cHBvcnQ6OnBhaW50U1ZH
Q2xpcHBpbmdNYXNrKCp0aGlzLCBwYWludEluZm8pOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKHBhaW50SW5mby5wYWludFJvb3RCYWNrZ3JvdW5kT25seSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4
dCgpOworICAgIGlmIChjb250ZXh0LmRldGVjdGluZ0NvbnRlbnRmdWxQYWludCgpKSB7CisgICAg
ICAgIGZvciAoYXV0byYgY3VycmVudCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oKnRo
aXMpKSB7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuaXNTVkdIaWRkZW5Db250YWluZXIoKSkg
eworICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIERvbid0IHBhaW50IGlmIHdlIGRvbid0IGhhdmUg
a2lkcywgZXhjZXB0IGlmIHdlIGhhdmUgZmlsdGVycyB3ZSBzaG91bGQgcGFpbnQgdGhvc2UuCisg
ICAgaWYgKCFmaXJzdENoaWxkKCkpIHsKKyAgICAgICAgYXV0byogcmVzb3VyY2VzID0gU1ZHUmVz
b3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlcmVyKCp0aGlzKTsKKyAgICAgICAg
aWYgKCFyZXNvdXJjZXMgfHwgIXJlc291cmNlcy0+ZmlsdGVyKCkpIHsKKyAgICAgICAgICAgIGlm
IChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCkKKyAgICAgICAgICAg
ICAgICBwYWdlKCkuYWRkUmVsZXZhbnRVbnBhaW50ZWRPYmplY3QodGhpcywgdmlzdWFsT3ZlcmZs
b3dSZWN0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OkJsb2Nr
QmFja2dyb3VuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzY3JvbGxlZE9mZnNldCA9
IHBhaW50T2Zmc2V0OworICAgIHNjcm9sbGVkT2Zmc2V0Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24o
KSk7CisKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OlNlbGZPdXRsaW5l
KQorICAgICAgICBwYWludENvbnRlbnRzKHBhaW50SW5mbywgc2Nyb2xsZWRPZmZzZXQpOworCisg
ICAgaWYgKChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6T3V0bGluZSB8fCBwYWludElu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6U2VsZk91dGxpbmUpICYmIGhhc091dGxpbmUoKSAmJiBz
dHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlKQorICAgICAgICBwYWlu
dE91dGxpbmUocGFpbnRJbmZvLCBMYXlvdXRSZWN0KGFkanVzdGVkUGFpbnRPZmZzZXQsIHNpemUo
KSkpOworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6OnBhaW50Q29udGVudHMoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKK3sKKyAgICAvLyBTdHls
ZSBpcyBub24tZmluYWwgaWYgdGhlIGVsZW1lbnQgaGFzIGEgcGVuZGluZyBzdHlsZXNoZWV0IGJl
Zm9yZSBpdC4gV2UgZW5kIHVwIHdpdGggcmVuZGVyZXJzIHdpdGggc3VjaCBzdHlsZXMgaWYgYSBz
Y3JpcHQKKyAgICAvLyBmb3JjZXMgcmVuZGVyZXIgY29uc3RydWN0aW9uIGJ5IHF1ZXJ5aW5nIHNv
bWV0aGluZyBsYXlvdXQgZGVwZW5kZW50LgorICAgIC8vIEF2b2lkIEZPVUMgYnkgbm90IHBhaW50
aW5nLiBTd2l0Y2hpbmcgdG8gZmluYWwgc3R5bGUgdHJpZ2dlcnMgcmVwYWludC4KKyAgICBpZiAo
c3R5bGUoKS5pc05vdEZpbmFsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGRvbid0
IHBhaW50IG91ciBvd24gYmFja2dyb3VuZCwgYnV0IHdlIGRvIGxldCB0aGUga2lkcyBwYWludCB0
aGVpciBiYWNrZ3JvdW5kcy4KKyAgICBhdXRvIHBhaW50SW5mb0ZvckNoaWxkKHBhaW50SW5mbyk7
CisgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpDaGlsZE91dGxpbmVzKQor
ICAgICAgICBwYWludEluZm9Gb3JDaGlsZC5waGFzZSA9IFBhaW50UGhhc2U6Ok91dGxpbmU7Cisg
ICAgZWxzZSBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OkNoaWxkQmxvY2tCYWNr
Z3JvdW5kcykKKyAgICAgICAgcGFpbnRJbmZvRm9yQ2hpbGQucGhhc2UgPSBQYWludFBoYXNlOjpD
aGlsZEJsb2NrQmFja2dyb3VuZDsKKworICAgIHBhaW50SW5mb0ZvckNoaWxkLnVwZGF0ZVN1YnRy
ZWVQYWludFJvb3RGb3JDaGlsZHJlbih0aGlzKTsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hp
bGRyZW5PZlR5cGU8UmVuZGVyRWxlbWVudD4oKnRoaXMpKSB7CisgICAgICAgIGlmICghY2hpbGQu
aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkKKyAgICAgICAgICAgIGNoaWxkLnBhaW50KHBhaW50SW5m
b0ZvckNoaWxkLCBwYWludE9mZnNldCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6
OndpbGxCZURlc3Ryb3llZCgpCit7CisgICAgUmVuZGVyQmxvY2s6OnJlbW92ZVBlcmNlbnRIZWln
aHREZXNjZW5kYW50KGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHUm9vdCY+KCp0aGlzKSk7CisKKyAgICBT
VkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50RGVzdHJveWVkKCp0aGlzKTsKKyAgICBSZW5kZXJSZXBs
YWNlZDo6d2lsbEJlRGVzdHJveWVkKCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6aW5zZXJ0
ZWRJbnRvVHJlZShJc0ludGVybmFsTW92ZSBpc0ludGVybmFsTW92ZSkKK3sKKyAgICBSZW5kZXJS
ZXBsYWNlZDo6aW5zZXJ0ZWRJbnRvVHJlZShpc0ludGVybmFsTW92ZSk7CisgICAgU1ZHUmVzb3Vy
Y2VzQ2FjaGU6OmNsaWVudFdhc0FkZGVkVG9UcmVlKCp0aGlzKTsKK30KKwordm9pZCBSZW5kZXJT
VkdSb290Ojp3aWxsQmVSZW1vdmVkRnJvbVRyZWUoSXNJbnRlcm5hbE1vdmUgaXNJbnRlcm5hbE1v
dmUpCit7CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdpbGxCZVJlbW92ZWRGcm9tVHJl
ZSgqdGhpcyk7CisgICAgUmVuZGVyUmVwbGFjZWQ6OndpbGxCZVJlbW92ZWRGcm9tVHJlZShpc0lu
dGVybmFsTW92ZSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6c3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKK3sKKyAgICAv
LyBCb3ggZGVjb3JhdGlvbnMgbWF5IGhhdmUgYXBwZWFyZWQvZGlzYXBwZWFyZWQgLSByZWNvbXB1
dGUgc3RhdHVzLgorICAgIGlmIChkaWZmID09IFN0eWxlRGlmZmVyZW5jZTo6UmVwYWludCkKKyAg
ICAgICAgbV9oYXNCb3hEZWNvcmF0aW9ucyA9IGhhc1Zpc2libGVCb3hEZWNvcmF0aW9uU3R5bGUo
KTsKKworICAgIFJlbmRlclJlcGxhY2VkOjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7
CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZCgqdGhpcywgZGlmZiwg
c3R5bGUoKSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6dXBkYXRlTGF5ZXJJbmZvcm1hdGlv
bigpCit7CisgICAgLyogRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdSZW5kZXJTdXBwb3J0IGNo
YW5nZXMKKyAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6aXNSZW5kZXJpbmdEaXNhYmxlZER1ZVRv
RW1wdHlTVkdWaWV3Qm94KCp0aGlzKSkKKyAgICAgICAgbGF5ZXIoKS0+ZGlydHlBbmNlc3RvckNo
YWluVmlzaWJsZURlc2NlbmRhbnRTdGF0dXMoKTsKKyAgICAgKi8KK30KKwordm9pZCBSZW5kZXJT
VkdSb290Ojp1cGRhdGVGcm9tU3R5bGUoKQoreworICAgIFJlbmRlclJlcGxhY2VkOjp1cGRhdGVG
cm9tU3R5bGUoKTsKKworICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVyT2JqZWN0
IGNoYW5nZXMKKyAgICAvLyBzZXRIYXNTVkdUcmFuc2Zvcm0oKTsKKworICAgIGlmIChzaG91bGRB
cHBseVZpZXdwb3J0Q2xpcCgpKQorICAgICAgICBzZXRIYXNOb25WaXNpYmxlT3ZlcmZsb3coKTsK
K30KKworTGF5b3V0UmVjdCBSZW5kZXJTVkdSb290OjpjbGlwcGVkT3ZlcmZsb3dSZWN0KGNvbnN0
IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIFZpc2libGVSZWN0Q29u
dGV4dCBjb250ZXh0KSBjb25zdAoreworICAgIGlmIChzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBW
aXNpYmlsaXR5OjpWaXNpYmxlICYmICFlbmNsb3NpbmdMYXllcigpLT5oYXNWaXNpYmxlQ29udGVu
dCgpKQorICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworCisgICAgYXV0byByZXBhaW50UmVj
dCA9IExheW91dFJlY3QobV92aWV3Qm94VHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihBZmZp
bmVUcmFuc2Zvcm0oKSkubWFwUmVjdChib3JkZXJCb3hSZWN0KCkpKTsKKyAgICByZXR1cm4gY29t
cHV0ZVJlY3QocmVwYWludFJlY3QsIHJlcGFpbnRDb250YWluZXIsIGNvbnRleHQpOworfQorCit2
b2lkIFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVUcmFuc2Zvcm1hdGlvbk1hdHJpY2VzKCkKK3sKKyAg
ICAvLyBDb21wdXRlIFNWRyB2aWV3Qm94IHRyYW5zZm9ybWF0aW9uIGFnYWluc3QgdW5zY2FsZWQg
dmlld3BvcnQuCisgICAgYXV0byB2aWV3cG9ydFNpemUgPSBjdXJyZW50Vmlld3BvcnRTaXplKCk7
CisgICAgYXV0byB6b29tID0gc3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CisgICAgaWYgKHpvb20g
IT0gMSkKKyAgICAgICAgdmlld3BvcnRTaXplLnNjYWxlKDEuMCAvIHpvb20pOworICAgIG1fdmll
d0JveFRyYW5zZm9ybSA9IHN2Z1NWR0VsZW1lbnQoKS52aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHZp
ZXdwb3J0U2l6ZS53aWR0aCgpLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpOworCisgICAgLy8gQ29t
cHV0ZSB0b3RhbCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgsIHRha2luZyBib3JkZXIgLyBwYWRkaW5n
IChmb3IgY2hpbGQgcmVuZGVyZXJzIHRoYXQgZG9uJ3QgZm9sbG93IHRoZSBDU1MgYm94IG1vZGVs
IG9iamVjdCEpICsgcGFubmluZyBpbnRvIGFjY291bnQuCisgICAgYXV0byBwYW5uaW5nID0gc3Zn
U1ZHRWxlbWVudCgpLmN1cnJlbnRUcmFuc2xhdGVWYWx1ZSgpOworICAgIGF1dG8gY29udGVudExv
Y2F0aW9uID0gY29udGVudEJveExvY2F0aW9uKCk7CisKKyAgICBtX3N1cHBsZW1lbnRhbExvY2Fs
VG9QYXJlbnRUcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CisgICAgbV9zdXBwbGVtZW50YWxMb2Nh
bFRvUGFyZW50VHJhbnNmb3JtLnRyYW5zbGF0ZShwYW5uaW5nLngoKSArIGNvbnRlbnRMb2NhdGlv
bi54KCksIHBhbm5pbmcueSgpICsgY29udGVudExvY2F0aW9uLnkoKSk7CisgICAgbV9zdXBwbGVt
ZW50YWxMb2NhbFRvUGFyZW50VHJhbnNmb3JtLnNjYWxlKHpvb20pOworCisgICAgaWYgKCFtX3Zp
ZXdCb3hUcmFuc2Zvcm0uaXNJZGVudGl0eSgpKQorICAgICAgICBtX3N1cHBsZW1lbnRhbExvY2Fs
VG9QYXJlbnRUcmFuc2Zvcm0ubXVsdGlwbHkobV92aWV3Qm94VHJhbnNmb3JtKTsKK30KKworYm9v
bCBSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9u
SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVz
dEFjdGlvbiBoaXRUZXN0QWN0aW9uKQoreworICAgIGF1dG8gYWRqdXN0ZWRMb2NhdGlvbiA9IGFj
Y3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKKworICAgIEFTU0VSVChTVkdIaXRUZXN0Q3lj
bGVEZXRlY3Rpb25TY29wZTo6aXNFbXB0eSgpKTsKKworICAgIGF1dG8gdmlzdWFsT3ZlcmZsb3dS
ZWN0ID0gdGhpcy0+dmlzdWFsT3ZlcmZsb3dSZWN0KCk7CisgICAgdmlzdWFsT3ZlcmZsb3dSZWN0
Lm1vdmVCeShhZGp1c3RlZExvY2F0aW9uKTsKKworICAgIC8vIFRlc3QgU1ZHIGNvbnRlbnQgaWYg
dGhlIHBvaW50IGlzIGluIG91ciBjb250ZW50IGJveCBvciBpdCBpcyBpbnNpZGUgdGhlIHZpc3Vh
bE92ZXJmbG93UmVjdCBhbmQgdGhlIG92ZXJmbG93IGlzIHZpc2libGUuCisgICAgaWYgKGNvbnRl
bnRCb3hSZWN0KCkuY29udGFpbnMoYWRqdXN0ZWRMb2NhdGlvbikgfHwgKCFzaG91bGRBcHBseVZp
ZXdwb3J0Q2xpcCgpICYmIGxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyh2aXN1YWxPdmVy
Zmxvd1JlY3QpKSkgeworICAgICAgICAvLyBDaGVjayBraWRzIGZpcnN0LgorICAgICAgICBmb3Ig
KGF1dG8qIGNoaWxkID0gbGFzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91
c1NpYmxpbmcoKSkgeworICAgICAgICAgICAgaWYgKCFjaGlsZC0+aGFzTGF5ZXIoKSAmJiBjaGls
ZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBhZGp1
c3RlZExvY2F0aW9uLCBoaXRUZXN0QWN0aW9uKSkgeworICAgICAgICAgICAgICAgIHVwZGF0ZUhp
dFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91
dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOworICAgICAgICAgICAgICAgIEFTU0VSVChTVkdIaXRU
ZXN0Q3ljbGVEZXRlY3Rpb25TY29wZTo6aXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIElmIHdl
IGRpZG4ndCBlYXJseSBleGl0IGFib3ZlLCB3ZSd2ZSBqdXN0IGhpdCB0aGUgY29udGFpbmVyIDxz
dmc+IGVsZW1lbnQuIFVubGlrZSBTVkcgMS4xLCAybmQgRWRpdGlvbiBhbGxvd3MgY29udGFpbmVy
IGVsZW1lbnRzIHRvIGJlIGhpdC4KKyAgICBpZiAoKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEJs
b2NrQmFja2dyb3VuZCB8fCBoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dy
b3VuZCkgJiYgdmlzaWJsZVRvSGl0VGVzdGluZyhyZXF1ZXN0KSkgeworICAgICAgICBMYXlvdXRS
ZWN0IGJvdW5kc1JlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgc2l6ZSgpKTsKKyAgICAgICAgaWYgKGxv
Y2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhib3VuZHNSZWN0KSkgeworICAgICAgICAgICAg
dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShsb2NhdGlvbklu
Q29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpKTsKKyAg
ICAgICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChub2RlRm9y
SGl0VGVzdCgpLCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBib3VuZHNSZWN0KSA9PSBI
aXRUZXN0UHJvZ3Jlc3M6OlN0b3ApCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlQoU1ZHSGl0VGVzdEN5Y2xlRGV0ZWN0aW9uU2NvcGU6
OmlzRW1wdHkoKSk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUm9v
dDo6aGFzUmVsYXRpdmVEaW1lbnNpb25zKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3ZnU1ZHRWxl
bWVudCgpLmludHJpbnNpY0hlaWdodCgpLmlzUGVyY2VudE9yQ2FsY3VsYXRlZCgpIHx8IHN2Z1NW
R0VsZW1lbnQoKS5pbnRyaW5zaWNXaWR0aCgpLmlzUGVyY2VudE9yQ2FsY3VsYXRlZCgpOworfQor
Cit2b2lkIFJlbmRlclNWR1Jvb3Q6OmFkZFJlc291cmNlRm9yQ2xpZW50SW52YWxpZGF0aW9uKFJl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiByZXNvdXJjZSkKK3sKKyAgICBVTlVTRURfUEFSQU0o
cmVzb3VyY2UpOworICAgIC8qIEZJWE1FOiBbTEJTRV0gUmVuYW1lIGZpbmRUcmVlUm9vdE9iamVj
dCAtPiBmaW5kTGVnYWN5VHJlZVJvb3RPYmplY3QsIGFuZCByZS1hZGQgZmluZFRyZWVSb290T2Jq
ZWN0IGZvciBSZW5kZXJTVkdSb290CisgICAgaWYgKGF1dG8qIHN2Z1Jvb3QgPSBTVkdSZW5kZXJT
dXBwb3J0OjpmaW5kVHJlZVJvb3RPYmplY3QoKnJlc291cmNlKSkKKyAgICAgICAgc3ZnUm9vdC0+
bV9yZXNvdXJjZXNOZWVkaW5nVG9JbnZhbGlkYXRlQ2xpZW50cy5hZGQocmVzb3VyY2UpOworICAg
ICovCit9CisKK0Zsb2F0U2l6ZSBSZW5kZXJTVkdSb290OjpjdXJyZW50Vmlld3BvcnRTaXplKCkg
Y29uc3QKK3sKKyAgICBGbG9hdFNpemUgcmVzdWx0ID0gY29udGVudEJveFJlY3QoKS5zaXplKCk7
CisgICAgcmVzdWx0LnNldFdpZHRoKHJlc3VsdC53aWR0aCgpICsgdmVydGljYWxTY3JvbGxiYXJX
aWR0aCgpKTsKKyAgICByZXN1bHQuc2V0SGVpZ2h0KHJlc3VsdC5oZWlnaHQoKSArIGhvcml6b250
YWxTY3JvbGxiYXJIZWlnaHQoKSk7CisKKyAgICBpZiAoIWlzRW1iZWRkZWRUaHJvdWdoRnJhbWVD
b250YWluaW5nU1ZHRG9jdW1lbnQoKSkgeworICAgICAgICBhdXRvIHpvb20gPSBzdHlsZSgpLmVm
ZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgaWYgKHpvb20gIT0gMSkKKyAgICAgICAgICAgIHJlc3Vs
dC5zY2FsZShzdmdTVkdFbGVtZW50KCkuaGFzSW50cmluc2ljV2lkdGgoKSA/IDEgOiB6b29tLCBz
dmdTVkdFbGVtZW50KCkuaGFzSW50cmluc2ljSGVpZ2h0KCkgPyAxIDogem9vbSk7CisgICAgfQor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBSZW5kZXJTVkdSb290OjptYXBMb2NhbFRv
Q29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIs
IFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSwgT3B0aW9uU2V0PE1hcENvb3JkaW5hdGVz
TW9kZT4gbW9kZSwgYm9vbCogd2FzRml4ZWQpIGNvbnN0Cit7CisgICAgaWYgKHJlcGFpbnRDb250
YWluZXIgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCF2aWV3KCkuZnJh
bWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlzUGFpbnRPZmZzZXRDYWNoZUVuYWJsZWQoKSk7CisK
KyAgICBib29sIGNvbnRhaW5lclNraXBwZWQ7CisgICAgYXV0byogY29udGFpbmVyID0gdGhpcy0+
Y29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIGNvbnRhaW5lclNraXBwZWQpOworICAgIGlmICgh
Y29udGFpbmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGlzRml4ZWRQb3MgPSBpc0Zp
eGVkUG9zaXRpb25lZCgpOworICAgIC8vIElmIHRoaXMgYm94IGhhcyBhIHRyYW5zZm9ybSwgaXQg
YWN0cyBhcyBhIGZpeGVkIHBvc2l0aW9uIGNvbnRhaW5lciBmb3IgZml4ZWQgZGVzY2VuZGFudHMs
CisgICAgLy8gYW5kIG1heSBpdHNlbGYgYWxzbyBiZSBmaXhlZCBwb3NpdGlvbi4gU28gcHJvcGFn
YXRlICdmaXhlZCcgdXAgb25seSBpZiB0aGlzIGJveCBpcyBmaXhlZCBwb3NpdGlvbi4KKyAgICBp
ZiAoaGFzVHJhbnNmb3JtKCkgJiYgIWlzRml4ZWRQb3MpCisgICAgICAgIG1vZGUucmVtb3ZlKElz
Rml4ZWQpOworICAgIGVsc2UgaWYgKGlzRml4ZWRQb3MpCisgICAgICAgIG1vZGUuYWRkKElzRml4
ZWQpOworCisgICAgaWYgKHdhc0ZpeGVkKQorICAgICAgICAqd2FzRml4ZWQgPSBtb2RlLmNvbnRh
aW5zKElzRml4ZWQpOworCisgICAgYm9vbCBjb21wdXRpbmdDVE1PclNjcmVlbkNUTSA9IGZhbHNl
OworICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gVHJhbnNmb3JtU3RhdGUgY2hhbmdlcwor
ICAgIC8vIGJvb2wgY29tcHV0aW5nQ1RNT3JTY3JlZW5DVE0gPSB0cmFuc2Zvcm1TdGF0ZS50cmFu
c2Zvcm1NYXRyaXhUcmFja2luZygpICE9IFRyYW5zZm9ybVN0YXRlOjpEb05vdFRyYWNrVHJhbnNm
b3JtTWF0cml4OworICAgIGF1dG8gY29udGFpbmVyT2Zmc2V0ID0gb2Zmc2V0RnJvbUNvbnRhaW5l
cigqY29udGFpbmVyLCBMYXlvdXRQb2ludCh0cmFuc2Zvcm1TdGF0ZS5tYXBwZWRQb2ludCgpKSk7
CisKKyAgICBib29sIHByZXNlcnZlM0QgPSBtb2RlICYgVXNlVHJhbnNmb3JtcyAmJiAoY29udGFp
bmVyLT5zdHlsZSgpLnByZXNlcnZlczNEKCkgfHwgc3R5bGUoKS5wcmVzZXJ2ZXMzRCgpKTsKKwor
ICAgIGlmIChtb2RlICYgVXNlVHJhbnNmb3JtcyAmJiBzaG91bGRVc2VUcmFuc2Zvcm1Gcm9tQ29u
dGFpbmVyKGNvbnRhaW5lcikpIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdDsKKyAg
ICAgICAgZ2V0VHJhbnNmb3JtRnJvbUNvbnRhaW5lcihjb250YWluZXIsIGNvbnRhaW5lck9mZnNl
dCwgdCk7CisKKyAgICAgICAgLyogRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBUcmFuc2Zvcm1TdGF0
ZSBjaGFuZ2VzCisgICAgICAgIGlmICh0cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1NYXRyaXhUcmFj
a2luZygpID09IFRyYW5zZm9ybVN0YXRlOjpUcmFja1NWR0NUTU1hdHJpeCkgeworICAgICAgICAg
ICAgYXV0byBvZmZzZXQgPSB0b0xheW91dFNpemUoY29udGVudEJveExvY2F0aW9uKCkgKyBjb250
YWluZXJPZmZzZXQpOworICAgICAgICAgICAgdC50cmFuc2xhdGVSaWdodCgtb2Zmc2V0LndpZHRo
KCksIC1vZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICB9CisgICAgICAgICovCisKKyAgICAgICAg
dHJhbnNmb3JtU3RhdGUuYXBwbHlUcmFuc2Zvcm0odCwgcHJlc2VydmUzRCA/IFRyYW5zZm9ybVN0
YXRlOjpBY2N1bXVsYXRlVHJhbnNmb3JtIDogVHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zv
cm0pOworICAgIH0gZWxzZQorICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKGNvbnRhaW5lck9m
ZnNldC53aWR0aCgpLCBjb250YWluZXJPZmZzZXQuaGVpZ2h0KCksIHByZXNlcnZlM0QgPyBUcmFu
c2Zvcm1TdGF0ZTo6QWNjdW11bGF0ZVRyYW5zZm9ybSA6IFRyYW5zZm9ybVN0YXRlOjpGbGF0dGVu
VHJhbnNmb3JtKTsKKworICAgIGlmIChjb250YWluZXJTa2lwcGVkKSB7CisgICAgICAgIC8vIFRo
ZXJlIGNhbid0IGJlIGEgdHJhbnNmb3JtIGJldHdlZW4gcmVwYWludENvbnRhaW5lciBhbmQgbywg
YmVjYXVzZSB0cmFuc2Zvcm1zIGNyZWF0ZSBjb250YWluZXJzLCBzbyBpdCBzaG91bGQgYmUgc2Fm
ZQorICAgICAgICAvLyB0byBqdXN0IHN1YnRyYWN0IHRoZSBkZWx0YSBiZXR3ZWVuIHRoZSByZXBh
aW50Q29udGFpbmVyIGFuZCBvLgorICAgICAgICBhdXRvIGNvbnRhaW5lck9mZnNldCA9IHJlcGFp
bnRDb250YWluZXItPm9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcigqY29udGFpbmVyKTsKKyAg
ICAgICAgdHJhbnNmb3JtU3RhdGUubW92ZSgtY29udGFpbmVyT2Zmc2V0LndpZHRoKCksIC1jb250
YWluZXJPZmZzZXQuaGVpZ2h0KCksIHByZXNlcnZlM0QgPyBUcmFuc2Zvcm1TdGF0ZTo6QWNjdW11
bGF0ZVRyYW5zZm9ybSA6IFRyYW5zZm9ybVN0YXRlOjpGbGF0dGVuVHJhbnNmb3JtKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1vZGUucmVtb3ZlKEFwcGx5Q29udGFpbmVyRmxpcCk7
CisKKyAgICBpZiAoY29tcHV0aW5nQ1RNT3JTY3JlZW5DVE0pIHsKKyAgICAgICAgLy8gVGhlIENT
UyBsZW5ndGhzL251bWJlcnMgYWJvdmUgdGhlIFNWRyBmcmFnbWVudCAoZS5nLiBpbiBIVE1MKSBk
byBub3QgYWRoZXJlIHRvIFNWRyB6b29tIHJ1bGVzLgorICAgICAgICAvLyBBbGwgbGVuZ3RoIGlu
Zm9ybWF0aW9uIChlLmcuIHRvcC93aWR0aC8uLi4pIGluY2x1ZGUgdGhlIHNjYWxpbmcgZmFjdG9y
LiBJbiBTVkcgbm8gbGVuZ3RocyBhcmUKKyAgICAgICAgLy8gc2NhbGVkIGJ1dCBhIGdsb2JhbCBz
Y2FsaW5nIG9wZXJhdGlvbiBpcyBpbmNsdWRlZCBpbiB0aGUgdHJhbnNmb3JtIHN0YXRlLgorICAg
ICAgICAvLyBGb3IgZ2V0Q1RNL2dldFNjcmVlbkNUTSBjb21wdXRhdGlvbnMgdGhlIHJlc3VsdCBt
dXN0IGJlIGluZGVwZW5kZW50IG9mIHRoZSBwYWdlIHpvb20gZmFjdG9yLgorICAgICAgICAvLyBU
byBjb21wdXRlIHRoZXNlIG1hdHJpY2VzIHdpdGhpbiBhIG5vbi1TVkcgY29udGV4dCAoZS5nLiBT
VkcgZW1iZWRkZWQgaW4gSFRNTCAtLSBpbmxpbmUgU1ZHKQorICAgICAgICAvLyB0aGUgc2NhbGlu
ZyBuZWVkcyB0byBiZSByZW1vdmVkIGZyb20gdGhlIENTUyB0cmFuc2Zvcm0gc3RhdGUuCisgICAg
ICAgIFRyYW5zZm9ybVN0YXRlIHRyYW5zZm9ybVN0YXRlQWJvdmVTVkdGcmFnbWVudCh0cmFuc2Zv
cm1TdGF0ZS5kaXJlY3Rpb24oKSwgdHJhbnNmb3JtU3RhdGUubWFwcGVkUG9pbnQoKSk7CisgICAg
ICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gVHJhbnNmb3JtU3RhdGUgY2hhbmdlcworICAg
ICAgICAvLyB0cmFuc2Zvcm1TdGF0ZUFib3ZlU1ZHRnJhZ21lbnQuc2V0VHJhbnNmb3JtTWF0cml4
VHJhY2tpbmcodHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtTWF0cml4VHJhY2tpbmcoKSk7CisgICAg
ICAgIGNvbnRhaW5lci0+bWFwTG9jYWxUb0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCB0cmFu
c2Zvcm1TdGF0ZUFib3ZlU1ZHRnJhZ21lbnQsIG1vZGUsIHdhc0ZpeGVkKTsKKworICAgICAgICAv
KiBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFRyYW5zZm9ybVN0YXRlIGNoYW5nZXMKKyAgICAgICAg
aWYgKHRyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybU1hdHJpeFRyYWNraW5nKCkgPT0gVHJhbnNmb3Jt
U3RhdGU6OlRyYWNrU1ZHU2NyZWVuQ1RNTWF0cml4KSB7CisgICAgICAgICAgICBhdXRvIHNjYWxl
ID0gMS4wIC8gc3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CisgICAgICAgICAgICBhdXRvIHRyYW5z
Zm9ybUFib3ZlU1ZHRnJhZ21lbnQgPSB0cmFuc2Zvcm1TdGF0ZUFib3ZlU1ZHRnJhZ21lbnQucmVs
ZWFzZVRyYWNrZWRUcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1BYm92ZVNW
R0ZyYWdtZW50KSB7CisgICAgICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhdGlvbih0cmFuc2Zv
cm1BYm92ZVNWR0ZyYWdtZW50LT5lKCksIHRyYW5zZm9ybUFib3ZlU1ZHRnJhZ21lbnQtPmYoKSk7
CisgICAgICAgICAgICAgICAgbG9jYXRpb24uc2NhbGUoc2NhbGUpOworCisgICAgICAgICAgICAg
ICAgYXV0byB1bnNjYWxlZFRyYW5zZm9ybSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkuc2NhbGUo
c2NhbGUpICogKnRyYW5zZm9ybUFib3ZlU1ZHRnJhZ21lbnQ7CisgICAgICAgICAgICAgICAgdW5z
Y2FsZWRUcmFuc2Zvcm0uc2V0RShsb2NhdGlvbi54KCkpOworICAgICAgICAgICAgICAgIHVuc2Nh
bGVkVHJhbnNmb3JtLnNldEYobG9jYXRpb24ueSgpKTsKKyAgICAgICAgICAgICAgICB0cmFuc2Zv
cm1TdGF0ZS5hcHBseVRyYW5zZm9ybSh1bnNjYWxlZFRyYW5zZm9ybSwgcHJlc2VydmUzRCA/IFRy
YW5zZm9ybVN0YXRlOjpBY2N1bXVsYXRlVHJhbnNmb3JtIDogVHJhbnNmb3JtU3RhdGU6OkZsYXR0
ZW5UcmFuc2Zvcm0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBSZXNwZWN0IHNj
cm9sbCBvZmZzZXQsIGFmdGVyIG1hcHBpbmcgdG8gY29udGFpbmVyIGNvb3JkaW5hdGVzLgorICAg
ICAgICAgICAgaWYgKFJlZlB0cjxGcmFtZVZpZXc+IHZpZXcgPSBkb2N1bWVudCgpLnZpZXcoKSkg
eworICAgICAgICAgICAgICAgIExheW91dFBvaW50IHNjcm9sbFBvc2l0aW9uID0gdmlldy0+c2Ny
b2xsUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICBzY3JvbGxQb3NpdGlvbi5zY2FsZShzY2Fs
ZSk7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RhdGUubW92ZSgtdG9MYXlvdXRTaXplKHNj
cm9sbFBvc2l0aW9uKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0qLworICAgIH0gZWxzZQor
ICAgICAgICBjb250YWluZXItPm1hcExvY2FsVG9Db250YWluZXIocmVwYWludENvbnRhaW5lciwg
dHJhbnNmb3JtU3RhdGUsIG1vZGUsIHdhc0ZpeGVkKTsKK30KKworTGF5b3V0UmVjdCBSZW5kZXJT
VkdSb290OjpvdmVyZmxvd0NsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVu
ZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50LCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2
YW5jeSwgUGFpbnRQaGFzZSkgY29uc3QKK3sKKyAgICBhdXRvIGNsaXBSZWN0ID0gYm9yZGVyQm94
UmVjdEluRnJhZ21lbnQoZnJhZ21lbnQpOworICAgIGNsaXBSZWN0LnNldExvY2F0aW9uKGxvY2F0
aW9uICsgY2xpcFJlY3QubG9jYXRpb24oKSArIExheW91dFNpemUoYm9yZGVyTGVmdCgpLCBib3Jk
ZXJUb3AoKSkpOworICAgIGNsaXBSZWN0LnNldFNpemUoY2xpcFJlY3Quc2l6ZSgpIC0gTGF5b3V0
U2l6ZShib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpLCBib3JkZXJUb3AoKSArIGJvcmRlckJv
dHRvbSgpKSk7CisKKyAgICBpZiAoIWlzRW1iZWRkZWRUaHJvdWdoRnJhbWVDb250YWluaW5nU1ZH
RG9jdW1lbnQoKSkgeworICAgICAgICBhdXRvIHpvb20gPSBzdHlsZSgpLmVmZmVjdGl2ZVpvb20o
KTsKKyAgICAgICAgaWYgKHpvb20gIT0gMSkgeworICAgICAgICAgICAgY29uc3QgYXV0byYgc3Zn
U1ZHRWxlbWVudCA9IGRvd25jYXN0PFJlbmRlclNWR1Jvb3Q+KCp0aGlzKS5zdmdTVkdFbGVtZW50
KCk7CisgICAgICAgICAgICBjbGlwUmVjdC5zY2FsZShzdmdTVkdFbGVtZW50Lmhhc0ludHJpbnNp
Y1dpZHRoKCkgPyAxIDogem9vbSwgc3ZnU1ZHRWxlbWVudC5oYXNJbnRyaW5zaWNIZWlnaHQoKSA/
IDEgOiB6b29tKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjbGlwUmVjdDsKK30K
Kwordm9pZCBSZW5kZXJTVkdSb290OjphcHBseVRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgdHJhbnNmb3JtLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZsb2F0UmVjdCYg
Ym91bmRpbmdCb3gsIE9wdGlvblNldDxSZW5kZXJTdHlsZTo6VHJhbnNmb3JtT3BlcmF0aW9uT3B0
aW9uPiBvcHRpb25zKSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTSh0cmFuc2Zvcm0pOworICAg
IFVOVVNFRF9QQVJBTShzdHlsZSk7CisgICAgVU5VU0VEX1BBUkFNKGJvdW5kaW5nQm94KTsKKyAg
ICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7CisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBT
VkdSZW5kZXJTdXBwb3J0IGNoYW5nZXMKKyAgICAvLyBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVRy
YW5zZm9ybSgqdGhpcywgdHJhbnNmb3JtLCBzdHlsZSwgYm91bmRpbmdCb3gsIHN0ZDo6bnVsbG9w
dCwgc3RkOjpudWxsb3B0LCBvcHRpb25zKTsKK30KKwordm9pZCBSZW5kZXJTVkdSb290OjphYnNv
bHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCkgY29uc3QKK3sKKyAgICBhdXRvIGxvY2FsUmVjdCA9IExheW91dFJlY3Qo
bV9zdXBwbGVtZW50YWxMb2NhbFRvUGFyZW50VHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihB
ZmZpbmVUcmFuc2Zvcm0oKSkubWFwUmVjdChib3JkZXJCb3hSZWN0KCkpKTsKKyAgICByZWN0cy5h
cHBlbmQoc25hcHBlZEludFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQsIGxvY2FsUmVjdC5zaXplKCkp
KTsKK30KKwordm9pZCBSZW5kZXJTVkdSb290OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1
YWQ+JiBxdWFkcywgYm9vbCogd2FzRml4ZWQpIGNvbnN0Cit7CisgICAgUmVuZGVyRnJhZ21lbnRl
ZEZsb3cqIGZyYWdtZW50ZWRGbG93ID0gZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3coKTsKKyAgICBp
ZiAoZnJhZ21lbnRlZEZsb3cgJiYgZnJhZ21lbnRlZEZsb3ctPmFic29sdXRlUXVhZHNGb3JCb3go
cXVhZHMsIHdhc0ZpeGVkLCB0aGlzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBsb2Nh
bFJlY3QgPSBGbG9hdFJlY3QobV9zdXBwbGVtZW50YWxMb2NhbFRvUGFyZW50VHJhbnNmb3JtLmlu
dmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkubWFwUmVjdChib3JkZXJCb3hSZWN0
KCkpKTsKKyAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChsb2NhbFJlY3QsIFVz
ZVRyYW5zZm9ybXMsIHdhc0ZpeGVkKSk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShMQVlF
Ul9CQVNFRF9TVkdfRU5HSU5FKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NDlmM2E3M2FjNDljYzEwNmFiMTNiZmMzMDMzOWZmMzc1
YzgyMTU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSb290LmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIxIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiUmVuZGVyUmVwbGFjZWQuaCIKKy8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0g
U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbgorLy8gI2luY2x1ZGUgIlNWR0JvdW5kaW5nQm94Q29t
cHV0YXRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBZmZpbmVUcmFuc2Zv
cm07CitjbGFzcyBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjsKK2NsYXNzIFNWR1NWR0VsZW1l
bnQ7CisKK2NsYXNzIFJlbmRlclNWR1Jvb3QgZmluYWwgOiBwdWJsaWMgUmVuZGVyUmVwbGFjZWQg
eworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoUmVuZGVyU1ZHUm9vdCk7CitwdWJsaWM6Cisg
ICAgUmVuZGVyU1ZHUm9vdChTVkdTVkdFbGVtZW50JiwgUmVuZGVyU3R5bGUmJik7CisgICAgdmly
dHVhbCB+UmVuZGVyU1ZHUm9vdCgpOworCisgICAgU1ZHU1ZHRWxlbWVudCYgc3ZnU1ZHRWxlbWVu
dCgpIGNvbnN0OworICAgIEZsb2F0U2l6ZSBjdXJyZW50Vmlld3BvcnRTaXplKCkgY29uc3Q7CisK
KyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHZpZXdCb3hUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBtX3ZpZXdCb3hUcmFuc2Zvcm07IH0KKyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHN1
cHBsZW1lbnRhbExvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N1cHBs
ZW1lbnRhbExvY2FsVG9QYXJlbnRUcmFuc2Zvcm07IH0KKworICAgIGJvb2wgaXNFbWJlZGRlZFRo
cm91Z2hTVkdJbWFnZSgpIGNvbnN0OworICAgIGJvb2wgaXNFbWJlZGRlZFRocm91Z2hGcmFtZUNv
bnRhaW5pbmdTVkdEb2N1bWVudCgpIGNvbnN0OworCisgICAgdm9pZCBjb21wdXRlSW50cmluc2lj
UmF0aW9JbmZvcm1hdGlvbihGbG9hdFNpemUmIGludHJpbnNpY1NpemUsIGRvdWJsZSYgaW50cmlu
c2ljUmF0aW8pIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBpc0xheW91dFNpemVDaGFuZ2Vk
KCkgY29uc3QgeyByZXR1cm4gbV9pc0xheW91dFNpemVDaGFuZ2VkOyB9CisgICAgYm9vbCBkaWRU
cmFuc2Zvcm1Ub1Jvb3RVcGRhdGUoKSBjb25zdCB7IHJldHVybiBtX2RpZFRyYW5zZm9ybVRvUm9v
dFVwZGF0ZTsgfQorICAgIGJvb2wgaXNJbkxheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5MYXlv
dXQ7IH0KKworICAgIEludFNpemUgY29udGFpbmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGFpbmVyU2l6ZTsgfQorICAgIHZvaWQgc2V0Q29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJiBj
b250YWluZXJTaXplKSB7IG1fY29udGFpbmVyU2l6ZSA9IGNvbnRhaW5lclNpemU7IH0KKworICAg
IGJvb2wgaGFzUmVsYXRpdmVEaW1lbnNpb25zKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBU
aGUgZmxhZyBpcyBjbGVhcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBsYXlvdXQoKSBwYXNz
LiBFbGVtZW50cyB0aGVuIGNhbGwgdGhpcworICAgIC8vIG1ldGhvZCBkdXJpbmcgbGF5b3V0IHdo
ZW4gdGhleSBhcmUgaW52YWxpZGF0ZWQgYnkgYSBmaWx0ZXIuCisgICAgc3RhdGljIHZvaWQgYWRk
UmVzb3VyY2VGb3JDbGllbnRJbnZhbGlkYXRpb24oUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIq
KTsKKworICAgIGJvb2wgc2hvdWxkQXBwbHlWaWV3cG9ydENsaXAoKSBjb25zdDsKKworICAgIC8v
IEZJWE1FOiBbTEJTRV0gTWFyayBmaW5hbCwgYWRkIGFwcGx5VHJhbnNmb3JtIHRvIFJlbmRlckxh
eWVyTW9kZWxPYmplY3QKKyAgICB2b2lkIGFwcGx5VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0
cml4JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94LCBP
cHRpb25TZXQ8UmVuZGVyU3R5bGU6OlRyYW5zZm9ybU9wZXJhdGlvbk9wdGlvbj4pIGNvbnN0Owor
CisgICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9vYmplY3RCb3VuZGluZ0JveDsgfQorICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KKworICAgIC8vIEZJ
WE1FOiBbTEJTRV0gTWFyayBmaW5hbCwgYWRkIHJlcGFpbnRCb3VuZGluZ0JveCgpIHRvIFJlbmRl
ck9iamVjdAorICAgIEZsb2F0UmVjdCByZXBhaW50Qm91bmRpbmdCb3goKSBjb25zdAorICAgIHsK
KyAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdCb3VuZGluZ0JveENvbXB1dGF0
aW9uCisgICAgICAgIC8vIHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRl
UmVwYWludEJvdW5kaW5nQm94KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fc3Ryb2tlQm91bmRp
bmdCb3g7CisgICAgfQorCisgICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFs
ZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbgorICAgICAgICAvLyByZXR1cm4gU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbjo6Y29tcHV0ZVZpc3VhbE92ZXJmbG93UmVjdCgqdGhpcyk7CisgICAgICAgIHJl
dHVybiBMYXlvdXRSZWN0KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgZWxlbWVudCgp
IGNvbnN0ID0gZGVsZXRlOworCisgICAgYm9vbCBpc1NWR1Jvb3QoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9CisgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuICJSZW5kZXJTVkdSb290IjsgfQorICAgIGJvb2wgcmVxdWlyZXNMYXllcigp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8vIFRvIHByZXZlbnQgY2Vy
dGFpbiBsZWdhY3kgY29kZSBwYXRocyB0byBoaXQgYXNzZXJ0aW9ucyBpbiBkZWJ1ZyBidWlsZHMs
IHdoZW4gc3dpdGNoaW5nIG9mZiBMQlNFIChkdXJpbmcgdGhlIHRlYXJkb3duIG9mIHRoZSBMQlNF
IHRyZWUpLgorICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBjb21wdXRlRmxvYXRWaXNpYmxl
UmVjdEluQ29udGFpbmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QqLCBWaXNpYmxlUmVjdENvbnRleHQpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsgfQorCisgICAgTGF5b3V0VW5pdCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoU2hv
dWxkQ29tcHV0ZVByZWZlcnJlZCAgPSBDb21wdXRlQWN0dWFsKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBMYXlvdXRVbml0IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoc3RkOjpvcHRpb25hbDxM
YXlvdXRVbml0PiBlc3RpbWF0ZWRVc2VkV2lkdGggPSBzdGQ6Om51bGxvcHQpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZvaWQgbGF5b3V0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwYWludChQYWludElu
Zm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIG92ZXJyaWRlOworICAgIHZvaWQgcGFpbnRPYmplY3Qo
UGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHBhaW50
Q29udGVudHMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKworICAgIHZvaWQgd2ls
bEJlRGVzdHJveWVkKCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGluc2VydGVkSW50b1RyZWUoSXNJ
bnRlcm5hbE1vdmUpIG92ZXJyaWRlOworICAgIHZvaWQgd2lsbEJlUmVtb3ZlZEZyb21UcmVlKElz
SW50ZXJuYWxNb3ZlKSBvdmVycmlkZTsKKworICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVE
aWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRlOworICAgIHZv
aWQgdXBkYXRlTGF5ZXJJbmZvcm1hdGlvbigpOworICAgIHZvaWQgdXBkYXRlRnJvbVN0eWxlKCkg
b3ZlcnJpZGU7CisKKyAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29u
c3Q7CisgICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Cisg
ICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIGNvbXB1dGVUcmFuc2Zvcm1hdGlvbk1hdHJpY2VzKCk7CisKKyAgICBMYXlvdXRSZWN0
IG92ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFn
bWVudENvbnRhaW5lciogPSBudWxscHRyLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9
IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBQYWludFBoYXNlID0gUGFpbnRQaGFzZTo6Qmxv
Y2tCYWNrZ3JvdW5kKSBjb25zdCBmaW5hbDsKKyAgICBMYXlvdXRSZWN0IGNsaXBwZWRPdmVyZmxv
d1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgVmlz
aWJsZVJlY3RDb250ZXh0KSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgbWFwTG9jYWxUb0Nv
bnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRhaW5lciwg
VHJhbnNmb3JtU3RhdGUmLCBPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiwgYm9vbCogd2Fz
Rml4ZWQpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJ
bnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCog
d2FzRml4ZWQpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBjYW5CZVNlbGVjdGlvbkxlYWYo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgY2FuSGF2ZUNoaWxk
cmVuKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdm9pZCBidWlsZFZp
ZXdwb3J0VHJhbnNmb3JtKCk7CisKKyAgICBib29sIG1faW5MYXlvdXQgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9kaWRUcmFuc2Zvcm1Ub1Jvb3RVcGRhdGUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9p
c0xheW91dFNpemVDaGFuZ2VkIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzQm94RGVjb3JhdGlv
bnMgeyBmYWxzZSB9OworCisgICAgSW50U2l6ZSBtX2NvbnRhaW5lclNpemU7CisgICAgRmxvYXRS
ZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3g7CisgICAgRmxvYXRSZWN0IG1fc3Ryb2tlQm91bmRpbmdC
b3g7CisgICAgQWZmaW5lVHJhbnNmb3JtIG1fdmlld0JveFRyYW5zZm9ybTsKKyAgICBBZmZpbmVU
cmFuc2Zvcm0gbV9zdXBwbGVtZW50YWxMb2NhbFRvUGFyZW50VHJhbnNmb3JtOworICAgIEhhc2hT
ZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPiBtX3Jlc291cmNlc05lZWRpbmdUb0ludmFs
aWRhdGVDbGllbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVyU1ZHUm9vdCwgaXNTVkdSb290KCkpCisK
KyNlbmRpZiAvLyBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446162</attachid>
            <date>2021-12-07 04:47:22 -0800</date>
            <delta_ts>2021-12-07 06:05:54 -0800</delta_ts>
            <desc>Patch, v4</desc>
            <filename>bug-233863-20211207044718.patch</filename>
            <type>text/plain</type>
            <size>47578</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWJmOWEyYWYyZGExYjFh
NjY0YWE3YTRlODE3NDhjZTA1ZThiOTkwNy4uMDJlOTA5YTdlYWRjZjlmMTBkNjFmYmU1YTM4MTEw
N2NkNGI4OWIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDIxLTEyLTA3ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtMQlNF
XSBCZWdpbiBsYXllci1hd2FyZSBSZW5kZXJTVkdSb290IGltcGxlbWVudGF0aW9uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM4NjMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCZWdpbiBpbXBsZW1lbnRp
bmcgUmVuZGVyU1ZHUm9vdCAtIHRoZSByZW5kZXJlciBmb3IgdGhlIG91dGVybW9zdCA8c3ZnPiBl
bGVtZW50IC0KKyAgICAgICAgZm9yIHRoZSBsYXllci1iYXNlZCBTVkcgZW5naW5lIChMQlNFKS4g
U3RhcnRpbmcgd2l0aCB0aGUgZG93bnN0cmVhbSBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgYWxs
IHBhcnRzIHdlcmUgcmVtb3ZlZCB0aGF0IGNhbiBiZSB1cHN0cmVhbWVkIHNlcGFyYXRlZCAoU1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbiwKKyAgICAgICAgU1ZHQ29udGFpbmVyTGF5b3V0LCBldGMu
KS4gVGhpcyBvbmx5IGNyZWF0ZXMgdGhlIHJlbmRlcmVyIGFuZCBpbnRlZ3JhdGVzIGl0IHdpdGgK
KyAgICAgICAgdGhlIGJ1aWxkIHN5c3RlbXMuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGlu
ZyB0ZXN0cywgbm8gY2hhbmdlIGluIGJlaGF2aW91ci4KKworICAgICAgICAqIFNvdXJjZXMudHh0
OiBBZGQgUmVuZGVyU1ZHUm9vdC4qIHRvIGJ1aWxkLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3Jt
U3RhdGU6OmRpcmVjdGlvbiBjb25zdCk6IE1ha2UgZGlyZWN0aW9uKCkgcHVibGljLgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUm9vdDo6UmVuZGVyU1ZHUm9vdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSb290OjpzdmdTVkdFbGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jvb3Q6OmNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmlzRW1iZWRkZWRUaHJvdWdoU1ZHSW1hZ2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6aXNFbWJlZGRlZFRocm91
Z2hGcmFtZUNvbnRhaW5pbmdTVkdEb2N1bWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSb290Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpsYXlvdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6c2hvdWxkQXBwbHlWaWV3cG9ydENsaXAgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6cGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUm9vdDo6cGFpbnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUm9vdDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdS
b290Ojp3aWxsQmVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6
aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojp3aWxs
QmVSZW1vdmVkRnJvbVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6c3R5
bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6dXBkYXRlTGF5
ZXJJbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojp1cGRhdGVG
cm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6Y2xpcHBlZE92ZXJm
bG93UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojpjb21wdXRl
VHJhbnNmb3JtYXRpb25NYXRyaWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290
Ojpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpoYXNSZWxh
dGl2ZURpbWVuc2lvbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6
YWRkUmVzb3VyY2VGb3JDbGllbnRJbnZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUm9vdDo6Y3VycmVudFZpZXdwb3J0U2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSb290OjptYXBMb2NhbFRvQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jvb3Q6Om92ZXJmbG93Q2xpcFJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6YXBwbHlUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6YWJzb2x1dGVSZWN0cyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSb290OjphYnNvbHV0ZVF1YWRzIGNvbnN0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaDogQWRkZWQuCisKIDIwMjEtMTItMDcgIEtpbW1v
IEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBDb2NvYSBXZWJHTCBz
aG91bGQgc3VwcG9ydCBVSSBzaWRlIGNvbXBvc2l0aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDhiZjZl
YzgwMzk1YjFlNDMwMWVhZDA4MTgwYzU2OGFlZTYyYzlhYzQuLjcxMGFhNmU3N2Y1M2UwYzA1ZWNl
ZDdiN2U3ZDU5NmQ1ZDBjNDUxMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yNDk1LDYgKzI0OTUsNyBA
QCByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlUmFkaWFsR3JhZGllbnQuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
U29saWRDb2xvci5jcHAKK3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNw
cAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDk4M2ViZWFkYTRjYTg1NWRj
ZTE0YzA1ZjcyYWM0MTQ1MmE3M2IxZWIuLmQxNzZkZGU3YzI3ZWYzZmJjOWRmNjZlMWNiOWMwNzdk
NjY5ZTQ5OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTEyNTQsNiArMTI1NCw3IEBACiAJCTQzNjcwOERGMTJEOUNBNEIwMDA0
NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwOEEwMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5k
ZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCAqLzsgfTsKIAkJNDM2NzA4RTExMkQ5Q0E0QjAwMDQ0MjM0
IC8qIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwOEEyMTJEOUNBNEIwMDA0NDIzNCAvKiBS
ZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmggKi87IH07CiAJCTQzNjcwOEUzMTJEOUNB
NEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwOEE0MTJEOUNBNEIwMDA0NDIz
NCAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCAqLzsgfTsKKwkJNDM2NzA4RTUxMkQ5
REI0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jvb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwOEE2MTJEOURCNEIwMDA0NDIzNCAvKiBSZW5kZXJT
VkdSb290LmggKi87IH07CiAJCTQzNjcwOEU1MTJEOUNBNEIwMDA0NDIzNCAvKiBMZWdhY3lSZW5k
ZXJTVkdSb290LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MzY3MDhBNjEyRDlDQTRCMDAwNDQyMzQgLyogTGVnYWN5UmVuZGVyU1ZHUm9vdC5oICovOyB9
OwogCQk0MzY3MDhFOTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNv
bnRhaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDM2NzA4QUExMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWlu
ZXIuaCAqLzsgfTsKIAkJNDM2NzA4RUIxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1ZpZXdw
b3J0Q29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MzY3MDhBQzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWlu
ZXIuaCAqLzsgfTsKQEAgLTg5ODIsNiArODk4Myw4IEBACiAJCTQzNjcwOEEyMTJEOUNBNEIwMDA0
NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM2NzA4QTMxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJl
bmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MzY3MDhBNDEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
MzY3MDhBNTEyRDlDQTVDMDAwNDQyMzQgLyogUmVuZGVyU1ZHUm9vdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSb290LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4QTYxMkQ5REI0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jv
b3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUm9vdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDhBNTEyRDlDQTRCMDAwNDQyMzQgLyog
TGVnYWN5UmVuZGVyU1ZHUm9vdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBMZWdhY3lSZW5kZXJTVkdSb290LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDM2NzA4QTYxMkQ5Q0E0QjAwMDQ0MjM0IC8qIExlZ2FjeVJlbmRlclNWR1Jvb3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5UmVuZGVyU1ZHUm9vdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDhBOTEyRDlDQTRCMDAwNDQyMzQgLyogUmVu
ZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4ODgwLDYgKzE4ODgzLDggQEAKIAkJCQlDREY3NDdG
ODI3MEY4N0NCMDA4RkVFRUMgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudElubGlu
ZXMuaCAqLywKIAkJCQk0MzY3MDhBMzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yLmNwcCAqLywKIAkJCQk0MzY3MDhBNDEyRDlDQTRCMDAwNDQyMzQgLyogUmVu
ZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggKi8sCisJCQkJNDM2NzA4QTUxMkQ5Q0E1QzAwMDQ0
MjM0IC8qIFJlbmRlclNWR1Jvb3QuY3BwICovLAorCQkJCTQzNjcwOEE2MTJEOURCNEIwMDA0NDIz
NCAvKiBSZW5kZXJTVkdSb290LmggKi8sCiAJCQkJQTEwQkI1ODgxNDg0RTNCMzAwQjJFODdBIC8q
IFJlbmRlclNWR1NoYXBlLmNwcCAqLywKIAkJCQlBMTBCQjU4OTE0ODRFM0IzMDBCMkU4N0EgLyog
UmVuZGVyU1ZHU2hhcGUuaCAqLywKIAkJCQlDREY3NDdGNjI3MEY4NkE0MDA4RkVFRUMgLyogUmVu
ZGVyU1ZHU2hhcGVJbmxpbmVzLmggKi8sCkBAIC0zMzUxNSwxMCArMzM1MjAsMTIgQEAKIAkJCQlD
RDNFRUYzQzI1Nzk5RkFCMDA2NTYzQkIgLyogQ29sb3JHYW11dC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzEwM0I3REYxREIwMTU2NzAwOEJCODkwIC8qIENvbG9ySGFzaC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRjU1QjNEQjQxMjUxRjEyRDAwM0VGMjY5IC8qIENvbG9ySW5wdXRUeXBlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlCQzNBMDBDODI3NTQ0OTZEMDA0N0MwRTUgLyogQ29sb3JJbnRlcnBvbGF0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzRBMjNFQzI1RUMxNjAyMDBBQUM2MzAgLyogQ29s
b3JMdW1pbmFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUVERTNBNTAwMEM3QTQzMDYwMDk1NkEz
NyAvKiBDb2xvck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NBQzZBRTkyNDdGMDgyRjAwRTYx
RDU5IC8qIENvbG9yTWF0cml4LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzEwMTM3QzI1QzM2MjRC
MDBEQzc3M0MgLyogQ29sb3JNb2RlbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDQjJGODhFMjc1
QkVFNTgwMDcyMzFCRiAvKiBDb2xvck5vcm1hbGl6YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTdDRDFFNjkzMjRBQkY2MjQwMDg5QzQxOSAvKiBDb2xvclNlcmlhbGl6YXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzODJERjU4MTBBOEQ1QzkwMDkyNTY1MiAvKiBDb2xvclNwYWNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0FGRURCNDI1OTY4RDBCMDAzMEU2QUEgLyogQ29sb3JTcGFjZUNH
LmggaW4gSGVhZGVycyAqLywKQEAgLTM2MjQ0LDcgKzM2MjUxLDYgQEAKIAkJCQk0OUQ1REMyRTBG
NDIzQTczMDA4RjIwRkQgLyogUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFEQkMxQjU2MjM0N0IzRDIwMEI5MDFBRiAvKiBQaWN0dXJlSW5QaWN0dXJl
T2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFEMkM4MkI3MjM2QTNGNkEwMDU1RDZDNSAv
KiBQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMzQTAwQzgy
NzU0NDk2RDAwNDdDMEU1IC8qIENvbG9ySW50ZXJwb2xhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUQyRjhFMDYyMzQ0NzUyMzAwOTkzQjY4IC8qIFBpY3R1cmVJblBpY3R1cmVXaW5kb3cuaCBp
biBIZWFkZXJzICovLAogCQkJCTU3NTg1OTdDMjNBMUZDRjMwMEM3NDU3MiAvKiBQaW4uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUQwRkYyQTVFMTFGOEM0NUEwMDdFNzRFMCAvKiBQaW5nTG9hZGVyLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM2NTYxLDYgKzM2NTY3LDcgQEAKIAkJCQk0MzY3MDhFMTEyRDlD
QTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQ0RGNzQ3RjkyNzBGODdDQjAwOEZFRUVDIC8qIFJlbmRlclNWR1Jlc291cmNl
UmFkaWFsR3JhZGllbnRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzY3MDhFMzEyRDlD
QTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggaW4gSGVhZGVycyAq
LywKKwkJCQk0MzY3MDhFNTEyRDlEQjRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUm9vdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTEwQkI1OEIxNDg0RTNCMzAwQjJFODdBIC8qIFJlbmRlclNWR1NoYXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDREY3NDdGNzI3MEY4NkE0MDA4RkVFRUMgLyogUmVuZGVy
U1ZHU2hhcGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODU0QjAxOTEyNTVFNEU2MDBC
OUNERDAgLyogUmVuZGVyU1ZHVGV4dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjY2OSw3ICszNjY3
Niw2IEBACiAJCQkJNDE4OEQ1NjMyNkM1NTFCMTAwNDg1OEM4IC8qIFJUQ0R0bHNUcmFuc3BvcnRT
dGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4RTA5MjAxN0QxNEQxQzAwNDIwQUExIC8qIFJU
Q0RUTUZTZW5kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OEUwOTIxMTdEMTREMUMwMDQyMEFB
MSAvKiBSVENEVE1GVG9uZUNoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlCQ0IyRjg4
RTI3NUJFRTU4MDA3MjMxQkYgLyogQ29sb3JOb3JtYWxpemF0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0MUU2RDcxQjI2RUExQTQ2MDBCNzY1RDYgLyogUlRDRXJyb3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQxQUI5Nzk1MjZFNzVBMkUwMDdDMEZFNiAvKiBSVENFcnJvckRldGFpbFR5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTA3OEUwOTIzMTdEMTREMUMwMDQyMEFBMSAvKiBSVENJY2VDYW5k
aWRhdGUuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oCmluZGV4IGQxMDFj
Zjg2YjBkNDg1ODYzNWU1YmIxMDQwYjI2MmIzYjk1MzNmYjQuLmFkMWFjNjk0NTY5Mzg3MDVkZDky
YjUyMGNlZTc3MmM5M2NkNGRhZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmgKQEAgLTExMyw2
ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFF1YWQ+IG1hcHBlZFNl
Y29uZGFyeVF1YWQoYm9vbCogd2FzQ2xhbXBlZCA9IG51bGxwdHIpIGNvbnN0OwogCiAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXgqIGFjY3VtdWxhdGVkVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
bV9hY2N1bXVsYXRlZFRyYW5zZm9ybS5nZXQoKTsgfQorICAgIFRyYW5zZm9ybURpcmVjdGlvbiBk
aXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQogCiBwcml2YXRlOgogICAg
IHZvaWQgdHJhbnNsYXRlVHJhbnNmb3JtKGNvbnN0IExheW91dFNpemUmKTsKQEAgLTEyMCw3ICsx
MjEsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZmxhdHRlbldpdGhUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBib29sKiB3YXNDbGFtcGVkKTsKICAgICB2b2lkIGFwcGx5QWNj
dW11bGF0ZWRPZmZzZXQoKTsKICAgICAKLSAgICBUcmFuc2Zvcm1EaXJlY3Rpb24gZGlyZWN0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KICAgICBUcmFuc2Zvcm1EaXJlY3Rpb24g
aW52ZXJzZURpcmVjdGlvbigpIGNvbnN0OwogCiAgICAgdm9pZCBtYXBRdWFkKEZsb2F0UXVhZCYs
IFRyYW5zZm9ybURpcmVjdGlvbiwgYm9vbCogY2xhbXBlZCA9IG51bGxwdHIpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMjZiMmY2ZTZjNDQ0M2Y3NDZiZmU2OWQyMDhkMjYxOTI0N2MyZGY2ZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKQEAg
LTAsMCArMSw2NDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDcsIDIwMDgsIDIwMDkgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIwLCAyMDIxIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTVkdSb290LmgiCisKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgorI2luY2x1ZGUgIlJl
bmRlckZyYWdtZW50ZWRGbG93LmgiCisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVk
ZSAiUmVuZGVySXRlcmF0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdG
b3JlaWduT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgorI2luY2x1ZGUgIlJlbmRl
clRyZWVCdWlsZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorLy8gRklYTUU6IFtMQlNF
XSBVcHN0cmVhbSBTVkdDb250YWluZXJMYXlvdXQKKy8vICNpbmNsdWRlICJTVkdDb250YWluZXJM
YXlvdXQuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50VHlwZUhlbHBlcnMuaCIKKyNpbmNsdWRlICJT
VkdJbWFnZS5oIgorI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJT
VkdSZXNvdXJjZXMuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5oIgorI2luY2x1ZGUg
IlNWR1NWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdWaWV3U3BlYy5oIgorI2luY2x1ZGUgIlRy
YW5zZm9ybVN0YXRlLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNs
dWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChSZW5kZXJT
VkdSb290KTsKKworUmVuZGVyU1ZHUm9vdDo6UmVuZGVyU1ZHUm9vdChTVkdTVkdFbGVtZW50JiBl
bGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQorICAgIDogUmVuZGVyUmVwbGFjZWQoZWxlbWVu
dCwgV1RGTW92ZShzdHlsZSkpCit7Cit9CisKK1JlbmRlclNWR1Jvb3Q6On5SZW5kZXJTVkdSb290
KCkgPSBkZWZhdWx0OworCitTVkdTVkdFbGVtZW50JiBSZW5kZXJTVkdSb290OjpzdmdTVkdFbGVt
ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZG93bmNhc3Q8U1ZHU1ZHRWxlbWVudD4obm9kZUZv
ck5vbkFub255bW91cygpKTsKK30KKwordm9pZCBSZW5kZXJTVkdSb290Ojpjb21wdXRlSW50cmlu
c2ljUmF0aW9JbmZvcm1hdGlvbihGbG9hdFNpemUmIGludHJpbnNpY1NpemUsIGRvdWJsZSYgaW50
cmluc2ljUmF0aW8pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFzaG91bGRBcHBseVNpemVDb250YWlu
bWVudCgqdGhpcykpOworCisgICAgLy8gU3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2Nv
b3Jkcy5odG1sI0ludHJpbnNpY1NpemluZworICAgIC8vIFNWRyBuZWVkcyB0byBzcGVjaWZ5IGhv
dyB0byBjYWxjdWxhdGUgc29tZSBpbnRyaW5zaWMgc2l6aW5nIHByb3BlcnRpZXMgdG8gZW5hYmxl
IGluY2x1c2lvbiB3aXRoaW4gb3RoZXIgbGFuZ3VhZ2VzLgorCisgICAgLy8gVGhlIGludHJpbnNp
YyBhc3BlY3QgcmF0aW8gb2YgdGhlIHZpZXdwb3J0IG9mIFNWRyBjb250ZW50IGlzIG5lY2Vzc2Fy
eSBmb3IgZXhhbXBsZSwgd2hlbiBpbmNsdWRpbmcgU1ZHIGZyb20gYW4g4oCYb2JqZWN04oCZCisg
ICAgLy8gZWxlbWVudCBpbiBIVE1MIHN0eWxlZCB3aXRoIENTUy4gSXQgaXMgcG9zc2libGUgKGlu
ZGVlZCwgY29tbW9uKSBmb3IgYW4gU1ZHIGdyYXBoaWMgdG8gaGF2ZSBhbiBpbnRyaW5zaWMgYXNw
ZWN0IHJhdGlvIGJ1dAorICAgIC8vIG5vdCB0byBoYXZlIGFuIGludHJpbnNpYyB3aWR0aCBvciBo
ZWlnaHQuIFRoZSBpbnRyaW5zaWMgYXNwZWN0IHJhdGlvIG11c3QgYmUgY2FsY3VsYXRlZCBiYXNl
ZCB1cG9uIHRoZSBmb2xsb3dpbmcgcnVsZXM6CisgICAgLy8gLSBUaGUgYXNwZWN0IHJhdGlvIGlz
IGNhbGN1bGF0ZWQgYnkgZGl2aWRpbmcgYSB3aWR0aCBieSBhIGhlaWdodC4KKyAgICAvLyAtIElm
IHRoZSDigJh3aWR0aOKAmSBhbmQg4oCYaGVpZ2h04oCZIG9mIHRoZSByb290bW9zdCDigJhzdmfi
gJkgZWxlbWVudCBhcmUgYm90aCBzcGVjaWZpZWQgd2l0aCB1bml0IGlkZW50aWZpZXJzIChpbiwg
bW0sIGNtLCBwdCwgcGMsCisgICAgLy8gICBweCwgZW0sIGV4KSBvciBpbiB1c2VyIHVuaXRzLCB0
aGVuIHRoZSBhc3BlY3QgcmF0aW8gaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSDigJh3aWR0aOKAmSBh
bmQg4oCYaGVpZ2h04oCZIGF0dHJpYnV0ZXMgYWZ0ZXIKKyAgICAvLyAgIHJlc29sdmluZyBib3Ro
IHZhbHVlcyB0byB1c2VyIHVuaXRzLgorICAgIGludHJpbnNpY1NpemUuaGFzSW50cmluc2ljV2lk
dGggPSBzdmdTVkdFbGVtZW50KCkuaGFzSW50cmluc2ljV2lkdGgoKTsKKyAgICBpbnRyaW5zaWNT
aXplLmhhc0ludHJpbnNpY0hlaWdodCA9IHN2Z1NWR0VsZW1lbnQoKS5oYXNJbnRyaW5zaWNIZWln
aHQoKTsKKyAgICBpbnRyaW5zaWNTaXplLnNldFdpZHRoKGZsb2F0VmFsdWVGb3JMZW5ndGgoc3Zn
U1ZHRWxlbWVudCgpLmludHJpbnNpY1dpZHRoKCksIDApKTsKKyAgICBpbnRyaW5zaWNTaXplLnNl
dEhlaWdodChmbG9hdFZhbHVlRm9yTGVuZ3RoKHN2Z1NWR0VsZW1lbnQoKS5pbnRyaW5zaWNIZWln
aHQoKSwgMCkpOworCisgICAgaWYgKHN0eWxlKCkuYXNwZWN0UmF0aW9UeXBlKCkgPT0gQXNwZWN0
UmF0aW9UeXBlOjpSYXRpbykgeworICAgICAgICBpbnRyaW5zaWNSYXRpbyA9IHN0eWxlKCkubG9n
aWNhbEFzcGVjdFJhdGlvKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGQ6Om9w
dGlvbmFsPGRvdWJsZT4gaW50cmluc2ljUmF0aW9WYWx1ZTsKKyAgICBpZiAoIWludHJpbnNpY1Np
emUuaXNFbXB0eSgpKQorICAgICAgICBpbnRyaW5zaWNSYXRpb1ZhbHVlID0gaW50cmluc2ljU2l6
ZS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihpbnRyaW5zaWNTaXplLmhlaWdodCgpKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgLy8gLSBJZiBlaXRoZXIvYm90aCBvZiB0aGUg4oCYd2lkdGji
gJkgYW5kIOKAmGhlaWdodOKAmSBvZiB0aGUgcm9vdG1vc3Qg4oCYc3Zn4oCZIGVsZW1lbnQgYXJl
IGluIHBlcmNlbnRhZ2UgdW5pdHMgKG9yIG9taXR0ZWQpLCB0aGUKKyAgICAgICAgLy8gICBhc3Bl
Y3QgcmF0aW8gaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBv
ZiB0aGUg4oCYdmlld0JveOKAmSBzcGVjaWZpZWQgZm9yIHRoZSBjdXJyZW50IFNWRyBkb2N1bWVu
dAorICAgICAgICAvLyAgIGZyYWdtZW50LiBJZiB0aGUg4oCYdmlld0JveOKAmSBpcyBub3QgY29y
cmVjdGx5IHNwZWNpZmllZCwgb3Igc2V0IHRvICdub25lJywgdGhlIGludHJpbnNpYyBhc3BlY3Qg
cmF0aW8gY2Fubm90IGJlCisgICAgICAgIC8vICAgY2FsY3VsYXRlZCBhbmQgaXMgY29uc2lkZXJl
ZCB1bnNwZWNpZmllZC4KKyAgICAgICAgRmxvYXRTaXplIHZpZXdCb3hTaXplID0gc3ZnU1ZHRWxl
bWVudCgpLnZpZXdCb3goKS5zaXplKCk7CisgICAgICAgIGlmICghdmlld0JveFNpemUuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICAvLyBUaGUgdmlld0JveCBjYW4gb25seSB5aWVsZCBhbiBpbnRy
aW5zaWMgcmF0aW8sIG5vdCBhbiBpbnRyaW5zaWMgc2l6ZS4KKyAgICAgICAgICAgIGludHJpbnNp
Y1JhdGlvVmFsdWUgPSB2aWV3Qm94U2l6ZS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPih2
aWV3Qm94U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaW50cmlu
c2ljUmF0aW9WYWx1ZSkKKyAgICAgICAgaW50cmluc2ljUmF0aW8gPSAqaW50cmluc2ljUmF0aW9W
YWx1ZTsKKyAgICBlbHNlIGlmIChzdHlsZSgpLmFzcGVjdFJhdGlvVHlwZSgpID09IEFzcGVjdFJh
dGlvVHlwZTo6QXV0b0FuZFJhdGlvKQorICAgICAgICBpbnRyaW5zaWNSYXRpbyA9IHN0eWxlKCku
bG9naWNhbEFzcGVjdFJhdGlvKCk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUm9vdDo6aXNFbWJlZGRl
ZFRocm91Z2hTVkdJbWFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzSW5TVkdJbWFnZSgmc3Zn
U1ZHRWxlbWVudCgpKTsKK30KKworYm9vbCBSZW5kZXJTVkdSb290Ojppc0VtYmVkZGVkVGhyb3Vn
aEZyYW1lQ29udGFpbmluZ1NWR0RvY3VtZW50KCkgY29uc3QKK3sKKyAgICAvLyBJZiBvdXIgZnJh
bWUgaGFzIGFuIG93bmVyIHJlbmRlcmVyLCB3ZSdyZSBlbWJlZGRlZCB0aHJvdWdoIGVnLiBvYmpl
Y3QvZW1iZWQvaWZyYW1lLAorICAgIC8vIGJ1dCB3ZSBvbmx5IG5lZ290aWF0ZSBpZiB3ZSdyZSBp
biBhbiBTVkcgZG9jdW1lbnQgaW5zaWRlIG9iamVjdC9lbWJlZCwgbm90IGlmcmFtZS4KKyAgICBp
ZiAoIWZyYW1lKCkub3duZXJSZW5kZXJlcigpIHx8ICFmcmFtZSgpLm93bmVyUmVuZGVyZXIoKS0+
aXNFbWJlZGRlZE9iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGZy
YW1lKCkuZG9jdW1lbnQoKS0+aXNTVkdEb2N1bWVudCgpOworfQorCitMYXlvdXRVbml0IFJlbmRl
clNWR1Jvb3Q6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChTaG91bGRDb21wdXRlUHJlZmVy
cmVkIHNob3VsZENvbXB1dGVQcmVmZXJyZWQpIGNvbnN0Cit7CisgICAgLy8gV2hlbiB3ZSdyZSBl
bWJlZGRlZCB0aHJvdWdoIFNWR0ltYWdlIChib3JkZXItaW1hZ2UvYmFja2dyb3VuZC1pbWFnZS88
aHRtbDppbWc+Ly4uLikgd2UncmUgZm9yY2VkIHRvIHJlc2l6ZSB0byBhIHNwZWNpZmljIHNpemUu
CisgICAgaWYgKCFtX2NvbnRhaW5lclNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9j
b250YWluZXJTaXplLndpZHRoKCk7CisKKyAgICBpZiAoaXNFbWJlZGRlZFRocm91Z2hGcmFtZUNv
bnRhaW5pbmdTVkdEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrKCkt
PmF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpOworCisgICAgLy8gU1ZHIGVtYmVkZGVkIHZpYSBTVkdJ
bWFnZSAoYmFja2dyb3VuZC1pbWFnZS9ib3JkZXItaW1hZ2UvZXRjKSAvIElubGluZSBTVkcuCisg
ICAgcmV0dXJuIFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoc2hv
dWxkQ29tcHV0ZVByZWZlcnJlZCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyU1ZHUm9vdDo6Y29t
cHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodChzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGVzdGlt
YXRlZFVzZWRXaWR0aCkgY29uc3QKK3sKKyAgICAvLyBXaGVuIHdlJ3JlIGVtYmVkZGVkIHRocm91
Z2ggU1ZHSW1hZ2UgKGJvcmRlci1pbWFnZS9iYWNrZ3JvdW5kLWltYWdlLzxodG1sOmltZz4vLi4u
KSB3ZSdyZSBmb3JjZWQgdG8gcmVzaXplIHRvIGEgc3BlY2lmaWMgc2l6ZS4KKyAgICBpZiAoIW1f
Y29udGFpbmVyU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtX2NvbnRhaW5lclNpemUu
aGVpZ2h0KCk7CisKKyAgICBpZiAoaXNFbWJlZGRlZFRocm91Z2hGcmFtZUNvbnRhaW5pbmdTVkdE
b2N1bWVudCgpKQorICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJsZUxv
Z2ljYWxIZWlnaHQoSW5jbHVkZU1hcmdpbkJvcmRlclBhZGRpbmcpOworCisgICAgLy8gU3RhbmRh
bG9uZSBTVkcgLyBTVkcgZW1iZWRkZWQgdmlhIFNWR0ltYWdlIChiYWNrZ3JvdW5kLWltYWdlL2Jv
cmRlci1pbWFnZS9ldGMpIC8gSW5saW5lIFNWRy4KKyAgICByZXR1cm4gUmVuZGVyUmVwbGFjZWQ6
OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoZXN0aW1hdGVkVXNlZFdpZHRoKTsKK30KKwor
dm9pZCBSZW5kZXJTVkdSb290OjpsYXlvdXQoKQoreworICAgIFNldEZvclNjb3BlPGJvb2w+IGNo
YW5nZShtX2luTGF5b3V0LCB0cnVlKTsKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50
IGxheW91dENoZWNrUG9pbnQ7CisgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOworCisgICAgbV9y
ZXNvdXJjZXNOZWVkaW5nVG9JbnZhbGlkYXRlQ2xpZW50cy5jbGVhcigpOworCisgICAgLy8gQXJi
aXRyYXJ5IGFmZmluZSB0cmFuc2Zvcm1zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBSZW5kZXJMYXlv
dXRTdGF0ZS4KKyAgICBMYXlvdXRTdGF0ZURpc2FibGVyIGxheW91dFN0YXRlRGlzYWJsZXIodmll
dygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKSk7CisKKyAgICBib29sIG5lZWRzTGF5b3V0
ID0gc2VsZk5lZWRzTGF5b3V0KCk7CisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhp
cywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpOworCisgICAgYXV0byBwcmV2aW91c0xv
Z2ljYWxTaXplID0gc2l6ZSgpOworICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aCgpOworICAgIHVwZGF0
ZUxvZ2ljYWxIZWlnaHQoKTsKKyAgICBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQgPSBuZWVkc0xheW91
dCB8fCAoc3ZnU1ZHRWxlbWVudCgpLmhhc1JlbGF0aXZlTGVuZ3RocygpICYmIHByZXZpb3VzTG9n
aWNhbFNpemUgIT0gc2l6ZSgpKTsKKworICAgIGF1dG8gb2xkVHJhbnNmb3JtID0gbV9zdXBwbGVt
ZW50YWxMb2NhbFRvUGFyZW50VHJhbnNmb3JtOworICAgIGNvbXB1dGVUcmFuc2Zvcm1hdGlvbk1h
dHJpY2VzKCk7CisKKyAgICBpZiAob2xkVHJhbnNmb3JtICE9IG1fc3VwcGxlbWVudGFsTG9jYWxU
b1BhcmVudFRyYW5zZm9ybSkKKyAgICAgICAgbV9kaWRUcmFuc2Zvcm1Ub1Jvb3RVcGRhdGUgPSB0
cnVlOworICAgIGVsc2UgaWYgKHByZXZpb3VzTG9naWNhbFNpemUgIT0gc2l6ZSgpKQorICAgICAg
ICBtX2RpZFRyYW5zZm9ybVRvUm9vdFVwZGF0ZSA9IHRydWU7CisKKyAgICAvLyBGSVhNRTogW0xC
U0VdIFVwc3RyZWFtIFNWR0xlbmd0aENvbnRleHQgY2hhbmdlcworICAgIC8vIHN2Z1NWR0VsZW1l
bnQoKS51cGRhdGVMZW5ndGhDb250ZXh0KCk7CisKKyAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3Ry
ZWFtIFNWR0xheWVyVHJhbnNmb3JtVXBkYXRlcgorICAgIC8vIFNWR0xheWVyVHJhbnNmb3JtVXBk
YXRlciB0cmFuc2Zvcm1VcGRhdGVyKCp0aGlzKTsKKyAgICB1cGRhdGVMYXllckluZm9ybWF0aW9u
KCk7CisKKyAgICAvKiBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0NvbnRhaW5lckxheW91dCAv
IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24KKyAgICB7CisgICAgICAgIFNWR0NvbnRhaW5lckxh
eW91dCBjb250YWluZXJMYXlvdXQoKnRoaXMpOworICAgICAgICBjb250YWluZXJMYXlvdXQubGF5
b3V0Q2hpbGRyZW4obmVlZHNMYXlvdXQgfHwgU1ZHUmVuZGVyU3VwcG9ydDo6ZmlsdGVyc0ZvcmNl
Q29udGFpbmVyTGF5b3V0KCp0aGlzKSk7CisKKyAgICAgICAgU1ZHQm91bmRpbmdCb3hDb21wdXRh
dGlvbiBib3VuZGluZ0JveENvbXB1dGF0aW9uKCp0aGlzKTsKKyAgICAgICAgbV9vYmplY3RCb3Vu
ZGluZ0JveCA9IGJvdW5kaW5nQm94Q29tcHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5n
Qm94KFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246Om9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlv
bik7CisgICAgICAgIG1fc3Ryb2tlQm91bmRpbmdCb3ggPSBib3VuZGluZ0JveENvbXB1dGF0aW9u
LmNvbXB1dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpz
dHJva2VCb3VuZGluZ0JveERlY29yYXRpb24pOworICAgIH0KKyAgICAqLworCisgICAgLy8gRklY
TUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdDb250YWluZXJMYXlvdXQgLS0gcmVtb3ZlIFNWR1JlbmRl
clN1cHBvcnQ6OmxheW91dENoaWxkcmVuLgorICAgIFNWR1JlbmRlclN1cHBvcnQ6OmxheW91dENo
aWxkcmVuKCp0aGlzLCBuZWVkc0xheW91dCk7CisKKyAgICBpZiAoIW1fcmVzb3VyY2VzTmVlZGlu
Z1RvSW52YWxpZGF0ZUNsaWVudHMuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEludmFsaWRhdGUg
cmVzb3VyY2UgY2xpZW50cywgd2hpY2ggbWF5IG1hcmsgc29tZSBub2RlcyBmb3IgbGF5b3V0Lgor
ICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogIG1fcmVzb3VyY2VzTmVlZGluZ1RvSW52YWxp
ZGF0ZUNsaWVudHMpIHsKKyAgICAgICAgICAgIHJlc291cmNlLT5yZW1vdmVBbGxDbGllbnRzRnJv
bUNhY2hlKCk7CisgICAgICAgICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVDaGFu
Z2VkKCpyZXNvdXJjZSwgU3R5bGVEaWZmZXJlbmNlOjpMYXlvdXQsIHJlc291cmNlLT5zdHlsZSgp
KTsKKyAgICAgICAgfQorCisgICAgICAgIG1faXNMYXlvdXRTaXplQ2hhbmdlZCA9IGZhbHNlOwor
CisgICAgICAgIC8qIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQ29udGFpbmVyTGF5b3V0Cisg
ICAgICAgIFNWR0NvbnRhaW5lckxheW91dCBjb250YWluZXJMYXlvdXQoKnRoaXMpOworICAgICAg
ICBjb250YWluZXJMYXlvdXQubGF5b3V0Q2hpbGRyZW4oZmFsc2UpOworICAgICAgICAqLworICAg
IH0KKworICAgIG1faXNMYXlvdXRTaXplQ2hhbmdlZCA9IGZhbHNlOworICAgIG1fZGlkVHJhbnNm
b3JtVG9Sb290VXBkYXRlID0gZmFsc2U7CisKKyAgICBjbGVhck92ZXJmbG93KCk7CisgICAgaWYg
KCFzaG91bGRBcHBseVZpZXdwb3J0Q2xpcCgpKSB7CisgICAgICAgIGF1dG8gdmlzdWFsT3ZlcmZs
b3dSZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChtX3ZpZXdCb3hUcmFuc2Zvcm0ubWFwUmVjdCh2
aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkpKTsKKyAgICAgICAgYWRkVmlzdWFsT3ZlcmZs
b3codmlzdWFsT3ZlcmZsb3dSZWN0KTsKKyAgICAgICAgYWRkVmlzdWFsRWZmZWN0T3ZlcmZsb3co
KTsKKyAgICB9CisgICAgaW52YWxpZGF0ZUJhY2tncm91bmRPYnNjdXJhdGlvblN0YXR1cygpOwor
CisgICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOworCisgICAgY2xlYXJOZWVkc0xh
eW91dCgpOworfQorCitib29sIFJlbmRlclNWR1Jvb3Q6OnNob3VsZEFwcGx5Vmlld3BvcnRDbGlw
KCkgY29uc3QKK3sKKyAgICAvLyB0aGUgb3V0ZXJtb3N0IHN2ZyBpcyBjbGlwcGVkIGlmIGF1dG8s
IGFuZCBzdmcgZG9jdW1lbnQgcm9vdHMgYXJlIGFsd2F5cyBjbGlwcGVkCisgICAgLy8gV2hlbiB0
aGUgc3ZnIGlzIHN0YW5kLWFsb25lIChpc0RvY3VtZW50RWxlbWVudCgpID09IHRydWUpIHRoZSB2
aWV3cG9ydCBjbGlwcGluZyBzaG91bGQgYWx3YXlzCisgICAgLy8gYmUgYXBwbGllZCwgbm90aW5n
IHRoYXQgdGhlIHdpbmRvdyBzY3JvbGxiYXJzIHNob3VsZCBiZSBoaWRkZW4gaWYgb3ZlcmZsb3c9
aGlkZGVuLgorICAgIHJldHVybiBlZmZlY3RpdmVPdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6SGlk
ZGVuCisgICAgICAgIHx8IHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG8KKyAg
ICAgICAgfHwgc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsCisgICAgICAg
IHx8IHRoaXMtPmlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIoKTsKK30KKworLy8gRklYTUU6IEJh
c2ljYWxseSBhIGNvcHkgb2YgUmVuZGVyQmxvY2s6OnBhaW50KCkgLSBpZGVhbGx5IG9uZSB3b3Vs
ZCBzaGFyZSB0aGlzIGNvZGUuCisvLyBIb3dldmVyIHdpdGggTEZDIG9uIHRoZSBob3Jpem9uIHRo
YXQgaW52ZXN0bWVudCBpcyB1c2VsZXNzLCB3ZSBzaG91bGQgY29uY2VudHJhdGUKKy8vIG9uIExG
Qy9TVkcgaW50ZWdyYXRpb24gb25jZSB0aGUgTEJTRSBpcyB1cHN0cmVhbWVkLgordm9pZCBSZW5k
ZXJTVkdSb290OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0KQoreworICAgIC8vIERvbid0IHBhaW50LCBpZiB0aGUgY29udGV4dCBleHBs
aWNpdGx5IGRpc2FibGVkIGl0LgorICAgIGlmIChwYWludEluZm8uY29udGV4dCgpLnBhaW50aW5n
RGlzYWJsZWQoKSAmJiAhcGFpbnRJbmZvLmNvbnRleHQoKS5kZXRlY3RpbmdDb250ZW50ZnVsUGFp
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQW4gZW1wdHkgdmlld3BvcnQgZGlzYWJs
ZXMgcmVuZGVyaW5nLgorICAgIGlmIChib3JkZXJCb3hSZWN0KCkuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBhdXRvIGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCAr
IGxvY2F0aW9uKCk7CisKKyAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGF0
IGFsbC4KKyAgICAvLyBGSVhNRTogQ291bGQgZWxpbWluYXRlIHRoZSBpc0RvY3VtZW50RWxlbWVu
dFJlbmRlcmVyKCkgY2hlY2sgaWYgd2UgZml4IGJhY2tncm91bmQgcGFpbnRpbmcgc28gdGhhdCB0
aGUgUmVuZGVyVmlldworICAgIC8vIHBhaW50cyB0aGUgcm9vdCdzIGJhY2tncm91bmQuCisgICAg
aWYgKCFpc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkgJiYgIXBhaW50SW5mby5wYWludEJlaGF2
aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkNvbXBvc2l0ZWRPdmVyZmxvd1Njcm9sbENvbnRl
bnQpKSB7CisgICAgICAgIGF1dG8gb3ZlcmZsb3dCb3ggPSB2aXN1YWxPdmVyZmxvd1JlY3QoKTsK
KyAgICAgICAgZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93Qm94KTsKKyAgICAgICAgb3ZlcmZs
b3dCb3gubW92ZUJ5KGFkanVzdGVkUGFpbnRPZmZzZXQpOworICAgICAgICBpZiAoIW92ZXJmbG93
Qm94LmludGVyc2VjdHMocGFpbnRJbmZvLnJlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGJvb2wgcHVzaGVkQ2xpcCA9IHB1c2hDb250ZW50c0NsaXAocGFpbnRJbmZvLCBh
ZGp1c3RlZFBhaW50T2Zmc2V0KTsKKyAgICBwYWludE9iamVjdChwYWludEluZm8sIGFkanVzdGVk
UGFpbnRPZmZzZXQpOworICAgIGlmIChwdXNoZWRDbGlwKQorICAgICAgICBwb3BDb250ZW50c0Ns
aXAocGFpbnRJbmZvLCBwYWludEluZm8ucGhhc2UsIGFkanVzdGVkUGFpbnRPZmZzZXQpOworCisg
ICAgLy8gT3VyIHNjcm9sbGJhciB3aWRnZXRzIHBhaW50IGV4YWN0bHkgd2hlbiB3ZSB0ZWxsIHRo
ZW0gdG8sIHNvIHRoYXQgdGhleSB3b3JrIHByb3Blcmx5IHdpdGgKKyAgICAvLyB6LWluZGV4LiBX
ZSBwYWludCBhZnRlciB3ZSBwYWludGVkIHRoZSBiYWNrZ3JvdW5kL2JvcmRlciwgc28gdGhhdCB0
aGUgc2Nyb2xsYmFycyB3aWxsCisgICAgLy8gc2l0IGFib3ZlIHRoZSBiYWNrZ3JvdW5kL2JvcmRl
ci4KKyAgICBpZiAoKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpCbG9ja0JhY2tncm91
bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OkNoaWxkQmxvY2tCYWNrZ3JvdW5k
KSAmJiBoYXNOb25WaXNpYmxlT3ZlcmZsb3coKSAmJiBsYXllcigpICYmIGxheWVyKCktPnNjcm9s
bGFibGVBcmVhKCkKKyAgICAgICAgJiYgc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0
eTo6VmlzaWJsZSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSAmJiAh
cGFpbnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRPbmx5KCkpCisgICAgICAgIGxheWVyKCktPnNj
cm9sbGFibGVBcmVhKCktPnBhaW50T3ZlcmZsb3dDb250cm9scyhwYWludEluZm8uY29udGV4dCgp
LCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHNuYXBwZWRJbnRSZWN0KHBh
aW50SW5mby5yZWN0KSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6cGFpbnRPYmplY3QoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKK3sKKyAg
ICBpZiAoKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpCbG9ja0JhY2tncm91bmQgfHwg
cGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OkNoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBz
dHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlKSB7CisgICAgICAgIGlm
IChoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnMoKSkKKyAgICAgICAgICAgIHBhaW50Qm94RGVjb3Jh
dGlvbnMocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CisgICAgfQorCisgICAgYXV0byBhZGp1c3Rl
ZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOworICAgIGlmIChwYWludElu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6TWFzayAmJiBzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBW
aXNpYmlsaXR5OjpWaXNpYmxlKSB7CisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0g
U1ZHUmVuZGVyU3VwcG9ydCBjaGFuZ2VzCisgICAgICAgIC8vIFNWR1JlbmRlclN1cHBvcnQ6OnBh
aW50U1ZHTWFzaygqdGhpcywgcGFpbnRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFz
ZTo6Q2xpcHBpbmdNYXNrICYmIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZp
c2libGUpIHsKKyAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdSZW5kZXJTdXBw
b3J0IGNoYW5nZXMKKyAgICAgICAgLy8gU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRTVkdDbGlwcGlu
Z01hc2soKnRoaXMsIHBhaW50SW5mbyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAocGFpbnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRPbmx5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCk7Cisg
ICAgaWYgKGNvbnRleHQuZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KCkpIHsKKyAgICAgICAgZm9y
IChhdXRvJiBjdXJyZW50IDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0PigqdGhpcykpIHsK
KyAgICAgICAgICAgIGlmICghY3VycmVudC5pc1NWR0hpZGRlbkNvbnRhaW5lcigpKSB7CisgICAg
ICAgICAgICAgICAgY29udGV4dC5zZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCgpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gRG9uJ3QgcGFpbnQgaWYgd2UgZG9uJ3QgaGF2ZSBraWRzLCBl
eGNlcHQgaWYgd2UgaGF2ZSBmaWx0ZXJzIHdlIHNob3VsZCBwYWludCB0aG9zZS4KKyAgICBpZiAo
IWZpcnN0Q2hpbGQoKSkgeworICAgICAgICBhdXRvKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXND
YWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyZXIoKnRoaXMpOworICAgICAgICBpZiAoIXJl
c291cmNlcyB8fCAhcmVzb3VyY2VzLT5maWx0ZXIoKSkgeworICAgICAgICAgICAgaWYgKHBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpGb3JlZ3JvdW5kKQorICAgICAgICAgICAgICAgIHBh
Z2UoKS5hZGRSZWxldmFudFVucGFpbnRlZE9iamVjdCh0aGlzLCB2aXN1YWxPdmVyZmxvd1JlY3Qo
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6QmxvY2tCYWNrZ3Jv
dW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHNjcm9sbGVkT2Zmc2V0ID0gcGFpbnRP
ZmZzZXQ7CisgICAgc2Nyb2xsZWRPZmZzZXQubW92ZUJ5KC1zY3JvbGxQb3NpdGlvbigpKTsKKwor
ICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6U2VsZk91dGxpbmUpCisgICAg
ICAgIHBhaW50Q29udGVudHMocGFpbnRJbmZvLCBzY3JvbGxlZE9mZnNldCk7CisKKyAgICBpZiAo
KHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpPdXRsaW5lIHx8IHBhaW50SW5mby5waGFz
ZSA9PSBQYWludFBoYXNlOjpTZWxmT3V0bGluZSkgJiYgaGFzT3V0bGluZSgpICYmIHN0eWxlKCku
dmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUpCisgICAgICAgIHBhaW50T3V0bGlu
ZShwYWludEluZm8sIExheW91dFJlY3QoYWRqdXN0ZWRQYWludE9mZnNldCwgc2l6ZSgpKSk7Cit9
CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6cGFpbnRDb250ZW50cyhQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQoreworICAgIC8vIFN0eWxlIGlzIG5v
bi1maW5hbCBpZiB0aGUgZWxlbWVudCBoYXMgYSBwZW5kaW5nIHN0eWxlc2hlZXQgYmVmb3JlIGl0
LiBXZSBlbmQgdXAgd2l0aCByZW5kZXJlcnMgd2l0aCBzdWNoIHN0eWxlcyBpZiBhIHNjcmlwdAor
ICAgIC8vIGZvcmNlcyByZW5kZXJlciBjb25zdHJ1Y3Rpb24gYnkgcXVlcnlpbmcgc29tZXRoaW5n
IGxheW91dCBkZXBlbmRlbnQuCisgICAgLy8gQXZvaWQgRk9VQyBieSBub3QgcGFpbnRpbmcuIFN3
aXRjaGluZyB0byBmaW5hbCBzdHlsZSB0cmlnZ2VycyByZXBhaW50LgorICAgIGlmIChzdHlsZSgp
LmlzTm90RmluYWwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgZG9uJ3QgcGFpbnQg
b3VyIG93biBiYWNrZ3JvdW5kLCBidXQgd2UgZG8gbGV0IHRoZSBraWRzIHBhaW50IHRoZWlyIGJh
Y2tncm91bmRzLgorICAgIGF1dG8gcGFpbnRJbmZvRm9yQ2hpbGQocGFpbnRJbmZvKTsKKyAgICBp
ZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OkNoaWxkT3V0bGluZXMpCisgICAgICAg
IHBhaW50SW5mb0ZvckNoaWxkLnBoYXNlID0gUGFpbnRQaGFzZTo6T3V0bGluZTsKKyAgICBlbHNl
IGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6Q2hpbGRCbG9ja0JhY2tncm91bmRz
KQorICAgICAgICBwYWludEluZm9Gb3JDaGlsZC5waGFzZSA9IFBhaW50UGhhc2U6OkNoaWxkQmxv
Y2tCYWNrZ3JvdW5kOworCisgICAgcGFpbnRJbmZvRm9yQ2hpbGQudXBkYXRlU3VidHJlZVBhaW50
Um9vdEZvckNoaWxkcmVuKHRoaXMpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9m
VHlwZTxSZW5kZXJFbGVtZW50PigqdGhpcykpIHsKKyAgICAgICAgaWYgKCFjaGlsZC5oYXNTZWxm
UGFpbnRpbmdMYXllcigpKQorICAgICAgICAgICAgY2hpbGQucGFpbnQocGFpbnRJbmZvRm9yQ2hp
bGQsIHBhaW50T2Zmc2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6d2lsbEJl
RGVzdHJveWVkKCkKK3sKKyAgICBSZW5kZXJCbG9jazo6cmVtb3ZlUGVyY2VudEhlaWdodERlc2Nl
bmRhbnQoY29uc3RfY2FzdDxSZW5kZXJTVkdSb290Jj4oKnRoaXMpKTsKKworICAgIFNWR1Jlc291
cmNlc0NhY2hlOjpjbGllbnREZXN0cm95ZWQoKnRoaXMpOworICAgIFJlbmRlclJlcGxhY2VkOjp3
aWxsQmVEZXN0cm95ZWQoKTsKK30KKwordm9pZCBSZW5kZXJTVkdSb290OjppbnNlcnRlZEludG9U
cmVlKElzSW50ZXJuYWxNb3ZlIGlzSW50ZXJuYWxNb3ZlKQoreworICAgIFJlbmRlclJlcGxhY2Vk
OjppbnNlcnRlZEludG9UcmVlKGlzSW50ZXJuYWxNb3ZlKTsKKyAgICBTVkdSZXNvdXJjZXNDYWNo
ZTo6Y2xpZW50V2FzQWRkZWRUb1RyZWUoKnRoaXMpOworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6
OndpbGxCZVJlbW92ZWRGcm9tVHJlZShJc0ludGVybmFsTW92ZSBpc0ludGVybmFsTW92ZSkKK3sK
KyAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2lsbEJlUmVtb3ZlZEZyb21UcmVlKCp0aGlz
KTsKKyAgICBSZW5kZXJSZXBsYWNlZDo6d2lsbEJlUmVtb3ZlZEZyb21UcmVlKGlzSW50ZXJuYWxN
b3ZlKTsKK30KKwordm9pZCBSZW5kZXJTVkdSb290OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZl
cmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQoreworICAgIFJlbmRlclJl
cGxhY2VkOjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CisgICAgU1ZHUmVzb3VyY2Vz
Q2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZCgqdGhpcywgZGlmZiwgc3R5bGUoKSk7Cit9CisKK3Zv
aWQgUmVuZGVyU1ZHUm9vdDo6dXBkYXRlTGF5ZXJJbmZvcm1hdGlvbigpCit7CisgICAgLyogRklY
TUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdSZW5kZXJTdXBwb3J0IGNoYW5nZXMKKyAgICBpZiAoU1ZH
UmVuZGVyU3VwcG9ydDo6aXNSZW5kZXJpbmdEaXNhYmxlZER1ZVRvRW1wdHlTVkdWaWV3Qm94KCp0
aGlzKSkKKyAgICAgICAgbGF5ZXIoKS0+ZGlydHlBbmNlc3RvckNoYWluVmlzaWJsZURlc2NlbmRh
bnRTdGF0dXMoKTsKKyAgICAgKi8KK30KKwordm9pZCBSZW5kZXJTVkdSb290Ojp1cGRhdGVGcm9t
U3R5bGUoKQoreworICAgIFJlbmRlclJlcGxhY2VkOjp1cGRhdGVGcm9tU3R5bGUoKTsKKworICAg
IC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVyT2JqZWN0IGNoYW5nZXMKKyAgICAvLyBz
ZXRIYXNTVkdUcmFuc2Zvcm0oKTsKKworICAgIGlmIChzaG91bGRBcHBseVZpZXdwb3J0Q2xpcCgp
KQorICAgICAgICBzZXRIYXNOb25WaXNpYmxlT3ZlcmZsb3coKTsKK30KKworTGF5b3V0UmVjdCBS
ZW5kZXJTVkdSb290OjpjbGlwcGVkT3ZlcmZsb3dSZWN0KGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCBjb250ZXh0KSBjb25z
dAoreworICAgIGlmIChzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNpYmxl
ICYmICFlbmNsb3NpbmdMYXllcigpLT5oYXNWaXNpYmxlQ29udGVudCgpKQorICAgICAgICByZXR1
cm4gTGF5b3V0UmVjdCgpOworCisgICAgYXV0byByZXBhaW50UmVjdCA9IExheW91dFJlY3QobV92
aWV3Qm94VHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkubWFw
UmVjdChib3JkZXJCb3hSZWN0KCkpKTsKKyAgICByZXR1cm4gY29tcHV0ZVJlY3QocmVwYWludFJl
Y3QsIHJlcGFpbnRDb250YWluZXIsIGNvbnRleHQpOworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6
OmNvbXB1dGVUcmFuc2Zvcm1hdGlvbk1hdHJpY2VzKCkKK3sKKyAgICAvLyBDb21wdXRlIFNWRyB2
aWV3Qm94IHRyYW5zZm9ybWF0aW9uIGFnYWluc3QgdW5zY2FsZWQgdmlld3BvcnQuCisgICAgYXV0
byB2aWV3cG9ydFNpemUgPSBjdXJyZW50Vmlld3BvcnRTaXplKCk7CisgICAgYXV0byB6b29tID0g
c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CisgICAgaWYgKHpvb20gIT0gMSkKKyAgICAgICAgdmll
d3BvcnRTaXplLnNjYWxlKDEuMCAvIHpvb20pOworICAgIG1fdmlld0JveFRyYW5zZm9ybSA9IHN2
Z1NWR0VsZW1lbnQoKS52aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHZpZXdwb3J0U2l6ZS53aWR0aCgp
LCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpOworCisgICAgLy8gQ29tcHV0ZSB0b3RhbCB0cmFuc2Zv
cm1hdGlvbiBtYXRyaXgsIHRha2luZyBib3JkZXIgLyBwYWRkaW5nIChmb3IgY2hpbGQgcmVuZGVy
ZXJzIHRoYXQgZG9uJ3QgZm9sbG93IHRoZSBDU1MgYm94IG1vZGVsIG9iamVjdCEpICsgcGFubmlu
ZyBpbnRvIGFjY291bnQuCisgICAgYXV0byBwYW5uaW5nID0gc3ZnU1ZHRWxlbWVudCgpLmN1cnJl
bnRUcmFuc2xhdGVWYWx1ZSgpOworICAgIGF1dG8gY29udGVudExvY2F0aW9uID0gY29udGVudEJv
eExvY2F0aW9uKCk7CisKKyAgICBtX3N1cHBsZW1lbnRhbExvY2FsVG9QYXJlbnRUcmFuc2Zvcm0u
bWFrZUlkZW50aXR5KCk7CisgICAgbV9zdXBwbGVtZW50YWxMb2NhbFRvUGFyZW50VHJhbnNmb3Jt
LnRyYW5zbGF0ZShwYW5uaW5nLngoKSArIGNvbnRlbnRMb2NhdGlvbi54KCksIHBhbm5pbmcueSgp
ICsgY29udGVudExvY2F0aW9uLnkoKSk7CisgICAgbV9zdXBwbGVtZW50YWxMb2NhbFRvUGFyZW50
VHJhbnNmb3JtLnNjYWxlKHpvb20pOworCisgICAgaWYgKCFtX3ZpZXdCb3hUcmFuc2Zvcm0uaXNJ
ZGVudGl0eSgpKQorICAgICAgICBtX3N1cHBsZW1lbnRhbExvY2FsVG9QYXJlbnRUcmFuc2Zvcm0u
bXVsdGlwbHkobV92aWV3Qm94VHJhbnNmb3JtKTsKK30KKworYm9vbCBSZW5kZXJTVkdSb290Ojpu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0
aW9uKQoreworICAgIGF1dG8gYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsg
bG9jYXRpb24oKTsKKworICAgIEFTU0VSVChTVkdIaXRUZXN0Q3ljbGVEZXRlY3Rpb25TY29wZTo6
aXNFbXB0eSgpKTsKKworICAgIGF1dG8gdmlzdWFsT3ZlcmZsb3dSZWN0ID0gdGhpcy0+dmlzdWFs
T3ZlcmZsb3dSZWN0KCk7CisgICAgdmlzdWFsT3ZlcmZsb3dSZWN0Lm1vdmVCeShhZGp1c3RlZExv
Y2F0aW9uKTsKKworICAgIC8vIFRlc3QgU1ZHIGNvbnRlbnQgaWYgdGhlIHBvaW50IGlzIGluIG91
ciBjb250ZW50IGJveCBvciBpdCBpcyBpbnNpZGUgdGhlIHZpc3VhbE92ZXJmbG93UmVjdCBhbmQg
dGhlIG92ZXJmbG93IGlzIHZpc2libGUuCisgICAgaWYgKGNvbnRlbnRCb3hSZWN0KCkuY29udGFp
bnMoYWRqdXN0ZWRMb2NhdGlvbikgfHwgKCFzaG91bGRBcHBseVZpZXdwb3J0Q2xpcCgpICYmIGxv
Y2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyh2aXN1YWxPdmVyZmxvd1JlY3QpKSkgeworICAg
ICAgICAvLyBDaGVjayBraWRzIGZpcnN0LgorICAgICAgICBmb3IgKGF1dG8qIGNoaWxkID0gbGFz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgeworICAg
ICAgICAgICAgaWYgKCFjaGlsZC0+aGFzTGF5ZXIoKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVx
dWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBhZGp1c3RlZExvY2F0aW9uLCBoaXRU
ZXN0QWN0aW9uKSkgeworICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0
LCBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2Nh
dGlvbikpOworICAgICAgICAgICAgICAgIEFTU0VSVChTVkdIaXRUZXN0Q3ljbGVEZXRlY3Rpb25T
Y29wZTo6aXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIElmIHdlIGRpZG4ndCBlYXJseSBleGl0
IGFib3ZlLCB3ZSd2ZSBqdXN0IGhpdCB0aGUgY29udGFpbmVyIDxzdmc+IGVsZW1lbnQuIFVubGlr
ZSBTVkcgMS4xLCAybmQgRWRpdGlvbiBhbGxvd3MgY29udGFpbmVyIGVsZW1lbnRzIHRvIGJlIGhp
dC4KKyAgICBpZiAoKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBo
aXRUZXN0QWN0aW9uID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgdmlzaWJsZVRv
SGl0VGVzdGluZyhyZXF1ZXN0KSkgeworICAgICAgICBMYXlvdXRSZWN0IGJvdW5kc1JlY3QoYWRq
dXN0ZWRMb2NhdGlvbiwgc2l6ZSgpKTsKKyAgICAgICAgaWYgKGxvY2F0aW9uSW5Db250YWluZXIu
aW50ZXJzZWN0cyhib3VuZHNSZWN0KSkgeworICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkg
LSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpKTsKKyAgICAgICAgICAgIGlmIChyZXN1
bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChub2RlRm9ySGl0VGVzdCgpLCByZXF1ZXN0
LCBsb2NhdGlvbkluQ29udGFpbmVyLCBib3VuZHNSZWN0KSA9PSBIaXRUZXN0UHJvZ3Jlc3M6OlN0
b3ApCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBBU1NFUlQoU1ZHSGl0VGVzdEN5Y2xlRGV0ZWN0aW9uU2NvcGU6OmlzRW1wdHkoKSk7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUm9vdDo6aGFzUmVsYXRpdmVEaW1l
bnNpb25zKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3ZnU1ZHRWxlbWVudCgpLmludHJpbnNpY0hl
aWdodCgpLmlzUGVyY2VudE9yQ2FsY3VsYXRlZCgpIHx8IHN2Z1NWR0VsZW1lbnQoKS5pbnRyaW5z
aWNXaWR0aCgpLmlzUGVyY2VudE9yQ2FsY3VsYXRlZCgpOworfQorCit2b2lkIFJlbmRlclNWR1Jv
b3Q6OmFkZFJlc291cmNlRm9yQ2xpZW50SW52YWxpZGF0aW9uKFJlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyKiByZXNvdXJjZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVzb3VyY2UpOworICAgIC8q
IEZJWE1FOiBbTEJTRV0gUmVuYW1lIGZpbmRUcmVlUm9vdE9iamVjdCAtPiBmaW5kTGVnYWN5VHJl
ZVJvb3RPYmplY3QsIGFuZCByZS1hZGQgZmluZFRyZWVSb290T2JqZWN0IGZvciBSZW5kZXJTVkdS
b290CisgICAgaWYgKGF1dG8qIHN2Z1Jvb3QgPSBTVkdSZW5kZXJTdXBwb3J0OjpmaW5kVHJlZVJv
b3RPYmplY3QoKnJlc291cmNlKSkKKyAgICAgICAgc3ZnUm9vdC0+bV9yZXNvdXJjZXNOZWVkaW5n
VG9JbnZhbGlkYXRlQ2xpZW50cy5hZGQocmVzb3VyY2UpOworICAgICovCit9CisKK0Zsb2F0U2l6
ZSBSZW5kZXJTVkdSb290OjpjdXJyZW50Vmlld3BvcnRTaXplKCkgY29uc3QKK3sKKyAgICBGbG9h
dFNpemUgcmVzdWx0ID0gY29udGVudEJveFJlY3QoKS5zaXplKCk7CisgICAgcmVzdWx0LnNldFdp
ZHRoKHJlc3VsdC53aWR0aCgpICsgdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpKTsKKyAgICByZXN1
bHQuc2V0SGVpZ2h0KHJlc3VsdC5oZWlnaHQoKSArIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQo
KSk7CisKKyAgICBpZiAoIWlzRW1iZWRkZWRUaHJvdWdoRnJhbWVDb250YWluaW5nU1ZHRG9jdW1l
bnQoKSkgeworICAgICAgICBhdXRvIHpvb20gPSBzdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKKyAg
ICAgICAgaWYgKHpvb20gIT0gMSkKKyAgICAgICAgICAgIHJlc3VsdC5zY2FsZShzdmdTVkdFbGVt
ZW50KCkuaGFzSW50cmluc2ljV2lkdGgoKSA/IDEgOiB6b29tLCBzdmdTVkdFbGVtZW50KCkuaGFz
SW50cmluc2ljSGVpZ2h0KCkgPyAxIDogem9vbSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCBSZW5kZXJTVkdSb290OjptYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIFRyYW5zZm9ybVN0YXRlJiB0
cmFuc2Zvcm1TdGF0ZSwgT3B0aW9uU2V0PE1hcENvb3JkaW5hdGVzTW9kZT4gbW9kZSwgYm9vbCog
d2FzRml4ZWQpIGNvbnN0Cit7CisgICAgaWYgKHJlcGFpbnRDb250YWluZXIgPT0gdGhpcykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCF2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29u
dGV4dCgpLmlzUGFpbnRPZmZzZXRDYWNoZUVuYWJsZWQoKSk7CisKKyAgICBib29sIGNvbnRhaW5l
clNraXBwZWQ7CisgICAgYXV0byogY29udGFpbmVyID0gdGhpcy0+Y29udGFpbmVyKHJlcGFpbnRD
b250YWluZXIsIGNvbnRhaW5lclNraXBwZWQpOworICAgIGlmICghY29udGFpbmVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBib29sIGlzRml4ZWRQb3MgPSBpc0ZpeGVkUG9zaXRpb25lZCgpOwor
ICAgIC8vIElmIHRoaXMgYm94IGhhcyBhIHRyYW5zZm9ybSwgaXQgYWN0cyBhcyBhIGZpeGVkIHBv
c2l0aW9uIGNvbnRhaW5lciBmb3IgZml4ZWQgZGVzY2VuZGFudHMsCisgICAgLy8gYW5kIG1heSBp
dHNlbGYgYWxzbyBiZSBmaXhlZCBwb3NpdGlvbi4gU28gcHJvcGFnYXRlICdmaXhlZCcgdXAgb25s
eSBpZiB0aGlzIGJveCBpcyBmaXhlZCBwb3NpdGlvbi4KKyAgICBpZiAoaGFzVHJhbnNmb3JtKCkg
JiYgIWlzRml4ZWRQb3MpCisgICAgICAgIG1vZGUucmVtb3ZlKElzRml4ZWQpOworICAgIGVsc2Ug
aWYgKGlzRml4ZWRQb3MpCisgICAgICAgIG1vZGUuYWRkKElzRml4ZWQpOworCisgICAgaWYgKHdh
c0ZpeGVkKQorICAgICAgICAqd2FzRml4ZWQgPSBtb2RlLmNvbnRhaW5zKElzRml4ZWQpOworCisg
ICAgYm9vbCBjb21wdXRpbmdDVE1PclNjcmVlbkNUTSA9IGZhbHNlOworICAgIC8vIEZJWE1FOiBb
TEJTRV0gVXBzdHJlYW0gVHJhbnNmb3JtU3RhdGUgY2hhbmdlcworICAgIC8vIGJvb2wgY29tcHV0
aW5nQ1RNT3JTY3JlZW5DVE0gPSB0cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1NYXRyaXhUcmFja2lu
ZygpICE9IFRyYW5zZm9ybVN0YXRlOjpEb05vdFRyYWNrVHJhbnNmb3JtTWF0cml4OworICAgIGF1
dG8gY29udGFpbmVyT2Zmc2V0ID0gb2Zmc2V0RnJvbUNvbnRhaW5lcigqY29udGFpbmVyLCBMYXlv
dXRQb2ludCh0cmFuc2Zvcm1TdGF0ZS5tYXBwZWRQb2ludCgpKSk7CisKKyAgICBib29sIHByZXNl
cnZlM0QgPSBtb2RlICYgVXNlVHJhbnNmb3JtcyAmJiAoY29udGFpbmVyLT5zdHlsZSgpLnByZXNl
cnZlczNEKCkgfHwgc3R5bGUoKS5wcmVzZXJ2ZXMzRCgpKTsKKworICAgIGlmIChtb2RlICYgVXNl
VHJhbnNmb3JtcyAmJiBzaG91bGRVc2VUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lcikp
IHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdDsKKyAgICAgICAgZ2V0VHJhbnNmb3Jt
RnJvbUNvbnRhaW5lcihjb250YWluZXIsIGNvbnRhaW5lck9mZnNldCwgdCk7CisKKyAgICAgICAg
LyogRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBUcmFuc2Zvcm1TdGF0ZSBjaGFuZ2VzCisgICAgICAg
IGlmICh0cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1NYXRyaXhUcmFja2luZygpID09IFRyYW5zZm9y
bVN0YXRlOjpUcmFja1NWR0NUTU1hdHJpeCkgeworICAgICAgICAgICAgYXV0byBvZmZzZXQgPSB0
b0xheW91dFNpemUoY29udGVudEJveExvY2F0aW9uKCkgKyBjb250YWluZXJPZmZzZXQpOworICAg
ICAgICAgICAgdC50cmFuc2xhdGVSaWdodCgtb2Zmc2V0LndpZHRoKCksIC1vZmZzZXQuaGVpZ2h0
KCkpOworICAgICAgICB9CisgICAgICAgICovCisKKyAgICAgICAgdHJhbnNmb3JtU3RhdGUuYXBw
bHlUcmFuc2Zvcm0odCwgcHJlc2VydmUzRCA/IFRyYW5zZm9ybVN0YXRlOjpBY2N1bXVsYXRlVHJh
bnNmb3JtIDogVHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm0pOworICAgIH0gZWxzZQor
ICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKGNvbnRhaW5lck9mZnNldC53aWR0aCgpLCBjb250
YWluZXJPZmZzZXQuaGVpZ2h0KCksIHByZXNlcnZlM0QgPyBUcmFuc2Zvcm1TdGF0ZTo6QWNjdW11
bGF0ZVRyYW5zZm9ybSA6IFRyYW5zZm9ybVN0YXRlOjpGbGF0dGVuVHJhbnNmb3JtKTsKKworICAg
IGlmIChjb250YWluZXJTa2lwcGVkKSB7CisgICAgICAgIC8vIFRoZXJlIGNhbid0IGJlIGEgdHJh
bnNmb3JtIGJldHdlZW4gcmVwYWludENvbnRhaW5lciBhbmQgbywgYmVjYXVzZSB0cmFuc2Zvcm1z
IGNyZWF0ZSBjb250YWluZXJzLCBzbyBpdCBzaG91bGQgYmUgc2FmZQorICAgICAgICAvLyB0byBq
dXN0IHN1YnRyYWN0IHRoZSBkZWx0YSBiZXR3ZWVuIHRoZSByZXBhaW50Q29udGFpbmVyIGFuZCBv
LgorICAgICAgICBhdXRvIGNvbnRhaW5lck9mZnNldCA9IHJlcGFpbnRDb250YWluZXItPm9mZnNl
dEZyb21BbmNlc3RvckNvbnRhaW5lcigqY29udGFpbmVyKTsKKyAgICAgICAgdHJhbnNmb3JtU3Rh
dGUubW92ZSgtY29udGFpbmVyT2Zmc2V0LndpZHRoKCksIC1jb250YWluZXJPZmZzZXQuaGVpZ2h0
KCksIHByZXNlcnZlM0QgPyBUcmFuc2Zvcm1TdGF0ZTo6QWNjdW11bGF0ZVRyYW5zZm9ybSA6IFRy
YW5zZm9ybVN0YXRlOjpGbGF0dGVuVHJhbnNmb3JtKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1vZGUucmVtb3ZlKEFwcGx5Q29udGFpbmVyRmxpcCk7CisKKyAgICBpZiAoY29tcHV0
aW5nQ1RNT3JTY3JlZW5DVE0pIHsKKyAgICAgICAgLy8gVGhlIENTUyBsZW5ndGhzL251bWJlcnMg
YWJvdmUgdGhlIFNWRyBmcmFnbWVudCAoZS5nLiBpbiBIVE1MKSBkbyBub3QgYWRoZXJlIHRvIFNW
RyB6b29tIHJ1bGVzLgorICAgICAgICAvLyBBbGwgbGVuZ3RoIGluZm9ybWF0aW9uIChlLmcuIHRv
cC93aWR0aC8uLi4pIGluY2x1ZGUgdGhlIHNjYWxpbmcgZmFjdG9yLiBJbiBTVkcgbm8gbGVuZ3Ro
cyBhcmUKKyAgICAgICAgLy8gc2NhbGVkIGJ1dCBhIGdsb2JhbCBzY2FsaW5nIG9wZXJhdGlvbiBp
cyBpbmNsdWRlZCBpbiB0aGUgdHJhbnNmb3JtIHN0YXRlLgorICAgICAgICAvLyBGb3IgZ2V0Q1RN
L2dldFNjcmVlbkNUTSBjb21wdXRhdGlvbnMgdGhlIHJlc3VsdCBtdXN0IGJlIGluZGVwZW5kZW50
IG9mIHRoZSBwYWdlIHpvb20gZmFjdG9yLgorICAgICAgICAvLyBUbyBjb21wdXRlIHRoZXNlIG1h
dHJpY2VzIHdpdGhpbiBhIG5vbi1TVkcgY29udGV4dCAoZS5nLiBTVkcgZW1iZWRkZWQgaW4gSFRN
TCAtLSBpbmxpbmUgU1ZHKQorICAgICAgICAvLyB0aGUgc2NhbGluZyBuZWVkcyB0byBiZSByZW1v
dmVkIGZyb20gdGhlIENTUyB0cmFuc2Zvcm0gc3RhdGUuCisgICAgICAgIFRyYW5zZm9ybVN0YXRl
IHRyYW5zZm9ybVN0YXRlQWJvdmVTVkdGcmFnbWVudCh0cmFuc2Zvcm1TdGF0ZS5kaXJlY3Rpb24o
KSwgdHJhbnNmb3JtU3RhdGUubWFwcGVkUG9pbnQoKSk7CisgICAgICAgIC8vIEZJWE1FOiBbTEJT
RV0gVXBzdHJlYW0gVHJhbnNmb3JtU3RhdGUgY2hhbmdlcworICAgICAgICAvLyB0cmFuc2Zvcm1T
dGF0ZUFib3ZlU1ZHRnJhZ21lbnQuc2V0VHJhbnNmb3JtTWF0cml4VHJhY2tpbmcodHJhbnNmb3Jt
U3RhdGUudHJhbnNmb3JtTWF0cml4VHJhY2tpbmcoKSk7CisgICAgICAgIGNvbnRhaW5lci0+bWFw
TG9jYWxUb0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCB0cmFuc2Zvcm1TdGF0ZUFib3ZlU1ZH
RnJhZ21lbnQsIG1vZGUsIHdhc0ZpeGVkKTsKKworICAgICAgICAvKiBGSVhNRTogW0xCU0VdIFVw
c3RyZWFtIFRyYW5zZm9ybVN0YXRlIGNoYW5nZXMKKyAgICAgICAgaWYgKHRyYW5zZm9ybVN0YXRl
LnRyYW5zZm9ybU1hdHJpeFRyYWNraW5nKCkgPT0gVHJhbnNmb3JtU3RhdGU6OlRyYWNrU1ZHU2Ny
ZWVuQ1RNTWF0cml4KSB7CisgICAgICAgICAgICBhdXRvIHNjYWxlID0gMS4wIC8gc3R5bGUoKS5l
ZmZlY3RpdmVab29tKCk7CisgICAgICAgICAgICBhdXRvIHRyYW5zZm9ybUFib3ZlU1ZHRnJhZ21l
bnQgPSB0cmFuc2Zvcm1TdGF0ZUFib3ZlU1ZHRnJhZ21lbnQucmVsZWFzZVRyYWNrZWRUcmFuc2Zv
cm0oKTsKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1BYm92ZVNWR0ZyYWdtZW50KSB7CisgICAg
ICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhdGlvbih0cmFuc2Zvcm1BYm92ZVNWR0ZyYWdtZW50
LT5lKCksIHRyYW5zZm9ybUFib3ZlU1ZHRnJhZ21lbnQtPmYoKSk7CisgICAgICAgICAgICAgICAg
bG9jYXRpb24uc2NhbGUoc2NhbGUpOworCisgICAgICAgICAgICAgICAgYXV0byB1bnNjYWxlZFRy
YW5zZm9ybSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkuc2NhbGUoc2NhbGUpICogKnRyYW5zZm9y
bUFib3ZlU1ZHRnJhZ21lbnQ7CisgICAgICAgICAgICAgICAgdW5zY2FsZWRUcmFuc2Zvcm0uc2V0
RShsb2NhdGlvbi54KCkpOworICAgICAgICAgICAgICAgIHVuc2NhbGVkVHJhbnNmb3JtLnNldEYo
bG9jYXRpb24ueSgpKTsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5hcHBseVRyYW5z
Zm9ybSh1bnNjYWxlZFRyYW5zZm9ybSwgcHJlc2VydmUzRCA/IFRyYW5zZm9ybVN0YXRlOjpBY2N1
bXVsYXRlVHJhbnNmb3JtIDogVHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm0pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBSZXNwZWN0IHNjcm9sbCBvZmZzZXQsIGFmdGVy
IG1hcHBpbmcgdG8gY29udGFpbmVyIGNvb3JkaW5hdGVzLgorICAgICAgICAgICAgaWYgKFJlZlB0
cjxGcmFtZVZpZXc+IHZpZXcgPSBkb2N1bWVudCgpLnZpZXcoKSkgeworICAgICAgICAgICAgICAg
IExheW91dFBvaW50IHNjcm9sbFBvc2l0aW9uID0gdmlldy0+c2Nyb2xsUG9zaXRpb24oKTsKKyAg
ICAgICAgICAgICAgICBzY3JvbGxQb3NpdGlvbi5zY2FsZShzY2FsZSk7CisgICAgICAgICAgICAg
ICAgdHJhbnNmb3JtU3RhdGUubW92ZSgtdG9MYXlvdXRTaXplKHNjcm9sbFBvc2l0aW9uKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0qLworICAgIH0gZWxzZQorICAgICAgICBjb250YWluZXIt
Pm1hcExvY2FsVG9Db250YWluZXIocmVwYWludENvbnRhaW5lciwgdHJhbnNmb3JtU3RhdGUsIG1v
ZGUsIHdhc0ZpeGVkKTsKK30KKworTGF5b3V0UmVjdCBSZW5kZXJTVkdSb290OjpvdmVyZmxvd0Ns
aXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXIqIGZyYWdtZW50LCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgUGFpbnRQaGFzZSkg
Y29uc3QKK3sKKyAgICBhdXRvIGNsaXBSZWN0ID0gYm9yZGVyQm94UmVjdEluRnJhZ21lbnQoZnJh
Z21lbnQpOworICAgIGNsaXBSZWN0LnNldExvY2F0aW9uKGxvY2F0aW9uICsgY2xpcFJlY3QubG9j
YXRpb24oKSArIExheW91dFNpemUoYm9yZGVyTGVmdCgpLCBib3JkZXJUb3AoKSkpOworICAgIGNs
aXBSZWN0LnNldFNpemUoY2xpcFJlY3Quc2l6ZSgpIC0gTGF5b3V0U2l6ZShib3JkZXJMZWZ0KCkg
KyBib3JkZXJSaWdodCgpLCBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpKSk7CisKKyAgICBp
ZiAoIWlzRW1iZWRkZWRUaHJvdWdoRnJhbWVDb250YWluaW5nU1ZHRG9jdW1lbnQoKSkgeworICAg
ICAgICBhdXRvIHpvb20gPSBzdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgaWYgKHpv
b20gIT0gMSkgeworICAgICAgICAgICAgY29uc3QgYXV0byYgc3ZnU1ZHRWxlbWVudCA9IGRvd25j
YXN0PFJlbmRlclNWR1Jvb3Q+KCp0aGlzKS5zdmdTVkdFbGVtZW50KCk7CisgICAgICAgICAgICBj
bGlwUmVjdC5zY2FsZShzdmdTVkdFbGVtZW50Lmhhc0ludHJpbnNpY1dpZHRoKCkgPyAxIDogem9v
bSwgc3ZnU1ZHRWxlbWVudC5oYXNJbnRyaW5zaWNIZWlnaHQoKSA/IDEgOiB6b29tKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBjbGlwUmVjdDsKK30KKwordm9pZCBSZW5kZXJTVkdS
b290OjphcHBseVRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gsIE9wdGlv
blNldDxSZW5kZXJTdHlsZTo6VHJhbnNmb3JtT3BlcmF0aW9uT3B0aW9uPiBvcHRpb25zKSBjb25z
dAoreworICAgIFVOVVNFRF9QQVJBTSh0cmFuc2Zvcm0pOworICAgIFVOVVNFRF9QQVJBTShzdHls
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGJvdW5kaW5nQm94KTsKKyAgICBVTlVTRURfUEFSQU0ob3B0
aW9ucyk7CisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdSZW5kZXJTdXBwb3J0IGNo
YW5nZXMKKyAgICAvLyBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVRyYW5zZm9ybSgqdGhpcywgdHJh
bnNmb3JtLCBzdHlsZSwgYm91bmRpbmdCb3gsIHN0ZDo6bnVsbG9wdCwgc3RkOjpudWxsb3B0LCBv
cHRpb25zKTsKK30KKwordm9pZCBSZW5kZXJTVkdSb290OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJ
bnRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29u
c3QKK3sKKyAgICBhdXRvIGxvY2FsUmVjdCA9IExheW91dFJlY3QobV9zdXBwbGVtZW50YWxMb2Nh
bFRvUGFyZW50VHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSku
bWFwUmVjdChib3JkZXJCb3hSZWN0KCkpKTsKKyAgICByZWN0cy5hcHBlbmQoc25hcHBlZEludFJl
Y3QoYWNjdW11bGF0ZWRPZmZzZXQsIGxvY2FsUmVjdC5zaXplKCkpKTsKK30KKwordm9pZCBSZW5k
ZXJTVkdSb290OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCog
d2FzRml4ZWQpIGNvbnN0Cit7CisgICAgUmVuZGVyRnJhZ21lbnRlZEZsb3cqIGZyYWdtZW50ZWRG
bG93ID0gZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3coKTsKKyAgICBpZiAoZnJhZ21lbnRlZEZsb3cg
JiYgZnJhZ21lbnRlZEZsb3ctPmFic29sdXRlUXVhZHNGb3JCb3gocXVhZHMsIHdhc0ZpeGVkLCB0
aGlzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBsb2NhbFJlY3QgPSBGbG9hdFJlY3Qo
bV9zdXBwbGVtZW50YWxMb2NhbFRvUGFyZW50VHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihB
ZmZpbmVUcmFuc2Zvcm0oKSkubWFwUmVjdChib3JkZXJCb3hSZWN0KCkpKTsKKyAgICBxdWFkcy5h
cHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChsb2NhbFJlY3QsIFVzZVRyYW5zZm9ybXMsIHdhc0Zp
eGVkKSk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5F
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40MzczMTNkMDc5YmRlZDRlYzZmZTA1ZGIwMzUxY2NkNjljYzg2Nzk4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgKQEAg
LTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIwLCAyMDIxIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWUVSX0JB
U0VEX1NWR19FTkdJTkUpCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVy
UmVwbGFjZWQuaCIKKy8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQm91bmRpbmdCb3hDb21w
dXRhdGlvbgorLy8gI2luY2x1ZGUgIlNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CitjbGFzcyBSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lcjsKK2NsYXNzIFNWR1NWR0VsZW1lbnQ7CisKK2NsYXNzIFJlbmRl
clNWR1Jvb3QgZmluYWwgOiBwdWJsaWMgUmVuZGVyUmVwbGFjZWQgeworICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoUmVuZGVyU1ZHUm9vdCk7CitwdWJsaWM6CisgICAgUmVuZGVyU1ZHUm9vdChT
VkdTVkdFbGVtZW50JiwgUmVuZGVyU3R5bGUmJik7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHUm9v
dCgpOworCisgICAgU1ZHU1ZHRWxlbWVudCYgc3ZnU1ZHRWxlbWVudCgpIGNvbnN0OworICAgIEZs
b2F0U2l6ZSBjdXJyZW50Vmlld3BvcnRTaXplKCkgY29uc3Q7CisKKyAgICBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHZpZXdCb3hUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3ZpZXdCb3hUcmFu
c2Zvcm07IH0KKyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHN1cHBsZW1lbnRhbExvY2FsVG9Q
YXJlbnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N1cHBsZW1lbnRhbExvY2FsVG9QYXJl
bnRUcmFuc2Zvcm07IH0KKworICAgIGJvb2wgaXNFbWJlZGRlZFRocm91Z2hTVkdJbWFnZSgpIGNv
bnN0OworICAgIGJvb2wgaXNFbWJlZGRlZFRocm91Z2hGcmFtZUNvbnRhaW5pbmdTVkdEb2N1bWVu
dCgpIGNvbnN0OworCisgICAgdm9pZCBjb21wdXRlSW50cmluc2ljUmF0aW9JbmZvcm1hdGlvbihG
bG9hdFNpemUmIGludHJpbnNpY1NpemUsIGRvdWJsZSYgaW50cmluc2ljUmF0aW8pIGNvbnN0IG92
ZXJyaWRlOworCisgICAgYm9vbCBpc0xheW91dFNpemVDaGFuZ2VkKCkgY29uc3QgeyByZXR1cm4g
bV9pc0xheW91dFNpemVDaGFuZ2VkOyB9CisgICAgYm9vbCBkaWRUcmFuc2Zvcm1Ub1Jvb3RVcGRh
dGUoKSBjb25zdCB7IHJldHVybiBtX2RpZFRyYW5zZm9ybVRvUm9vdFVwZGF0ZTsgfQorICAgIGJv
b2wgaXNJbkxheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5MYXlvdXQ7IH0KKworICAgIEludFNp
emUgY29udGFpbmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbmVyU2l6ZTsgfQorICAg
IHZvaWQgc2V0Q29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJiBjb250YWluZXJTaXplKSB7IG1f
Y29udGFpbmVyU2l6ZSA9IGNvbnRhaW5lclNpemU7IH0KKworICAgIGJvb2wgaGFzUmVsYXRpdmVE
aW1lbnNpb25zKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBUaGUgZmxhZyBpcyBjbGVhcmVk
IGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBsYXlvdXQoKSBwYXNzLiBFbGVtZW50cyB0aGVuIGNh
bGwgdGhpcworICAgIC8vIG1ldGhvZCBkdXJpbmcgbGF5b3V0IHdoZW4gdGhleSBhcmUgaW52YWxp
ZGF0ZWQgYnkgYSBmaWx0ZXIuCisgICAgc3RhdGljIHZvaWQgYWRkUmVzb3VyY2VGb3JDbGllbnRJ
bnZhbGlkYXRpb24oUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqKTsKKworICAgIGJvb2wgc2hv
dWxkQXBwbHlWaWV3cG9ydENsaXAoKSBjb25zdDsKKworICAgIC8vIEZJWE1FOiBbTEJTRV0gTWFy
ayBmaW5hbCwgYWRkIGFwcGx5VHJhbnNmb3JtIHRvIFJlbmRlckxheWVyTW9kZWxPYmplY3QKKyAg
ICB2b2lkIGFwcGx5VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgUmVuZGVy
U3R5bGUmLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94LCBPcHRpb25TZXQ8UmVuZGVyU3R5
bGU6OlRyYW5zZm9ybU9wZXJhdGlvbk9wdGlvbj4pIGNvbnN0OworCisgICAgRmxvYXRSZWN0IG9i
amVjdEJvdW5kaW5nQm94KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0Jv
eDsgfQorICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KKworICAgIC8vIEZJWE1FOiBbTEJTRV0gTWFyayBm
aW5hbCwgYWRkIHJlcGFpbnRCb3VuZGluZ0JveCgpIHRvIFJlbmRlck9iamVjdAorICAgIEZsb2F0
UmVjdCByZXBhaW50Qm91bmRpbmdCb3goKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gRklYTUU6
IFtMQlNFXSBVcHN0cmVhbSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uCisgICAgICAgIC8vIHJl
dHVybiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlUmVwYWludEJvdW5kaW5nQm94
KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7CisgICAgfQorCisg
ICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkgY29uc3QKKyAgICB7
CisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQm91bmRpbmdCb3hDb21wdXRh
dGlvbgorICAgICAgICAvLyByZXR1cm4gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0
ZVZpc3VhbE92ZXJmbG93UmVjdCgqdGhpcyk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7
CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgZWxlbWVudCgpIGNvbnN0ID0gZGVsZXRlOwor
CisgICAgYm9vbCBpc1NWR1Jvb3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJSZW5k
ZXJTVkdSb290IjsgfQorICAgIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KKworICAgIC8vIFRvIHByZXZlbnQgY2VydGFpbiBsZWdhY3kgY29kZSBw
YXRocyB0byBoaXQgYXNzZXJ0aW9ucyBpbiBkZWJ1ZyBidWlsZHMsIHdoZW4gc3dpdGNoaW5nIG9m
ZiBMQlNFIChkdXJpbmcgdGhlIHRlYXJkb3duIG9mIHRoZSBMQlNFIHRyZWUpLgorICAgIHN0ZDo6
b3B0aW9uYWw8RmxvYXRSZWN0PiBjb21wdXRlRmxvYXRWaXNpYmxlUmVjdEluQ29udGFpbmVyKGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqLCBWaXNpYmxlUmVj
dENvbnRleHQpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQorCisgICAgTGF5
b3V0VW5pdCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoU2hvdWxkQ29tcHV0ZVByZWZlcnJl
ZCAgPSBDb21wdXRlQWN0dWFsKSBjb25zdCBvdmVycmlkZTsKKyAgICBMYXlvdXRVbml0IGNvbXB1
dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBlc3RpbWF0
ZWRVc2VkV2lkdGggPSBzdGQ6Om51bGxvcHQpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgbGF5
b3V0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQ
b2ludCYpIG92ZXJyaWRlOworICAgIHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgY29uc3Qg
TGF5b3V0UG9pbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHBhaW50Q29udGVudHMoUGFpbnRJbmZv
JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKworICAgIHZvaWQgd2lsbEJlRGVzdHJveWVkKCkgb3Zl
cnJpZGU7CisKKyAgICB2b2lkIGluc2VydGVkSW50b1RyZWUoSXNJbnRlcm5hbE1vdmUpIG92ZXJy
aWRlOworICAgIHZvaWQgd2lsbEJlUmVtb3ZlZEZyb21UcmVlKElzSW50ZXJuYWxNb3ZlKSBvdmVy
cmlkZTsKKworICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRlOworICAgIHZvaWQgdXBkYXRlTGF5ZXJJbmZv
cm1hdGlvbigpOworICAgIHZvaWQgdXBkYXRlRnJvbVN0eWxlKCkgb3ZlcnJpZGU7CisKKyAgICBi
b29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgYm9vbCBzdHJv
a2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNvbXB1dGVUcmFu
c2Zvcm1hdGlvbk1hdHJpY2VzKCk7CisKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJlY3Qo
Y29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogPSBu
dWxscHRyLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3Jv
bGxiYXJTaXplLCBQYWludFBoYXNlID0gUGFpbnRQaGFzZTo6QmxvY2tCYWNrZ3JvdW5kKSBjb25z
dCBmaW5hbDsKKyAgICBMYXlvdXRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3QoY29uc3QgUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBj
b25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRhaW5lciwgVHJhbnNmb3JtU3RhdGUmLCBP
cHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiwgYm9vbCogd2FzRml4ZWQpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExh
eW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBh
YnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCogd2FzRml4ZWQpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgYm9vbCBjYW5CZVNlbGVjdGlvbkxlYWYoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdm9pZCBidWlsZFZpZXdwb3J0VHJhbnNmb3JtKCk7
CisKKyAgICBib29sIG1faW5MYXlvdXQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9kaWRUcmFuc2Zv
cm1Ub1Jvb3RVcGRhdGUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc0xheW91dFNpemVDaGFuZ2Vk
IHsgZmFsc2UgfTsKKworICAgIEludFNpemUgbV9jb250YWluZXJTaXplOworICAgIEZsb2F0UmVj
dCBtX29iamVjdEJvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX3N0cm9rZUJvdW5kaW5nQm94
OworICAgIEFmZmluZVRyYW5zZm9ybSBtX3ZpZXdCb3hUcmFuc2Zvcm07CisgICAgQWZmaW5lVHJh
bnNmb3JtIG1fc3VwcGxlbWVudGFsTG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKKyAgICBIYXNoU2V0
PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj4gbV9yZXNvdXJjZXNOZWVkaW5nVG9JbnZhbGlk
YXRlQ2xpZW50czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKFJlbmRlclNWR1Jvb3QsIGlzU1ZHUm9vdCgpKQorCisj
ZW5kaWYgLy8gRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446165</attachid>
            <date>2021-12-07 06:06:02 -0800</date>
            <delta_ts>2021-12-10 03:21:37 -0800</delta_ts>
            <desc>Patch, v5</desc>
            <filename>bug-233863-20211207060558.patch</filename>
            <type>text/plain</type>
            <size>47554</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWJmOWEyYWYyZGExYjFh
NjY0YWE3YTRlODE3NDhjZTA1ZThiOTkwNy4uMDJlOTA5YTdlYWRjZjlmMTBkNjFmYmU1YTM4MTEw
N2NkNGI4OWIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDIxLTEyLTA3ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtMQlNF
XSBCZWdpbiBsYXllci1hd2FyZSBSZW5kZXJTVkdSb290IGltcGxlbWVudGF0aW9uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM4NjMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCZWdpbiBpbXBsZW1lbnRp
bmcgUmVuZGVyU1ZHUm9vdCAtIHRoZSByZW5kZXJlciBmb3IgdGhlIG91dGVybW9zdCA8c3ZnPiBl
bGVtZW50IC0KKyAgICAgICAgZm9yIHRoZSBsYXllci1iYXNlZCBTVkcgZW5naW5lIChMQlNFKS4g
U3RhcnRpbmcgd2l0aCB0aGUgZG93bnN0cmVhbSBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgYWxs
IHBhcnRzIHdlcmUgcmVtb3ZlZCB0aGF0IGNhbiBiZSB1cHN0cmVhbWVkIHNlcGFyYXRlZCAoU1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbiwKKyAgICAgICAgU1ZHQ29udGFpbmVyTGF5b3V0LCBldGMu
KS4gVGhpcyBvbmx5IGNyZWF0ZXMgdGhlIHJlbmRlcmVyIGFuZCBpbnRlZ3JhdGVzIGl0IHdpdGgK
KyAgICAgICAgdGhlIGJ1aWxkIHN5c3RlbXMuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGlu
ZyB0ZXN0cywgbm8gY2hhbmdlIGluIGJlaGF2aW91ci4KKworICAgICAgICAqIFNvdXJjZXMudHh0
OiBBZGQgUmVuZGVyU1ZHUm9vdC4qIHRvIGJ1aWxkLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3Jt
U3RhdGU6OmRpcmVjdGlvbiBjb25zdCk6IE1ha2UgZGlyZWN0aW9uKCkgcHVibGljLgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUm9vdDo6UmVuZGVyU1ZHUm9vdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSb290OjpzdmdTVkdFbGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jvb3Q6OmNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmlzRW1iZWRkZWRUaHJvdWdoU1ZHSW1hZ2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6aXNFbWJlZGRlZFRocm91
Z2hGcmFtZUNvbnRhaW5pbmdTVkdEb2N1bWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSb290Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpsYXlvdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6c2hvdWxkQXBwbHlWaWV3cG9ydENsaXAgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6cGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUm9vdDo6cGFpbnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUm9vdDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdS
b290Ojp3aWxsQmVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6
aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojp3aWxs
QmVSZW1vdmVkRnJvbVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6c3R5
bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6dXBkYXRlTGF5
ZXJJbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojp1cGRhdGVG
cm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6Y2xpcHBlZE92ZXJm
bG93UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojpjb21wdXRl
VHJhbnNmb3JtYXRpb25NYXRyaWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290
Ojpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpoYXNSZWxh
dGl2ZURpbWVuc2lvbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6
YWRkUmVzb3VyY2VGb3JDbGllbnRJbnZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUm9vdDo6Y3VycmVudFZpZXdwb3J0U2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSb290OjptYXBMb2NhbFRvQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jvb3Q6Om92ZXJmbG93Q2xpcFJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6YXBwbHlUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6YWJzb2x1dGVSZWN0cyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSb290OjphYnNvbHV0ZVF1YWRzIGNvbnN0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaDogQWRkZWQuCisKIDIwMjEtMTItMDcgIEtpbW1v
IEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBDb2NvYSBXZWJHTCBz
aG91bGQgc3VwcG9ydCBVSSBzaWRlIGNvbXBvc2l0aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDhiZjZl
YzgwMzk1YjFlNDMwMWVhZDA4MTgwYzU2OGFlZTYyYzlhYzQuLjcxMGFhNmU3N2Y1M2UwYzA1ZWNl
ZDdiN2U3ZDU5NmQ1ZDBjNDUxMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yNDk1LDYgKzI0OTUsNyBA
QCByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlUmFkaWFsR3JhZGllbnQuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
U29saWRDb2xvci5jcHAKK3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNw
cAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDk4M2ViZWFkYTRjYTg1NWRj
ZTE0YzA1ZjcyYWM0MTQ1MmE3M2IxZWIuLmQxNzZkZGU3YzI3ZWYzZmJjOWRmNjZlMWNiOWMwNzdk
NjY5ZTQ5OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTEyNTQsNiArMTI1NCw3IEBACiAJCTQzNjcwOERGMTJEOUNBNEIwMDA0
NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwOEEwMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5k
ZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCAqLzsgfTsKIAkJNDM2NzA4RTExMkQ5Q0E0QjAwMDQ0MjM0
IC8qIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwOEEyMTJEOUNBNEIwMDA0NDIzNCAvKiBS
ZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmggKi87IH07CiAJCTQzNjcwOEUzMTJEOUNB
NEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwOEE0MTJEOUNBNEIwMDA0NDIz
NCAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCAqLzsgfTsKKwkJNDM2NzA4RTUxMkQ5
REI0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jvb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwOEE2MTJEOURCNEIwMDA0NDIzNCAvKiBSZW5kZXJT
VkdSb290LmggKi87IH07CiAJCTQzNjcwOEU1MTJEOUNBNEIwMDA0NDIzNCAvKiBMZWdhY3lSZW5k
ZXJTVkdSb290LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MzY3MDhBNjEyRDlDQTRCMDAwNDQyMzQgLyogTGVnYWN5UmVuZGVyU1ZHUm9vdC5oICovOyB9
OwogCQk0MzY3MDhFOTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNv
bnRhaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDM2NzA4QUExMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWlu
ZXIuaCAqLzsgfTsKIAkJNDM2NzA4RUIxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1ZpZXdw
b3J0Q29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MzY3MDhBQzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWlu
ZXIuaCAqLzsgfTsKQEAgLTg5ODIsNiArODk4Myw4IEBACiAJCTQzNjcwOEEyMTJEOUNBNEIwMDA0
NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM2NzA4QTMxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJl
bmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MzY3MDhBNDEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
MzY3MDhBNTEyRDlDQTVDMDAwNDQyMzQgLyogUmVuZGVyU1ZHUm9vdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSb290LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4QTYxMkQ5REI0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jv
b3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUm9vdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDhBNTEyRDlDQTRCMDAwNDQyMzQgLyog
TGVnYWN5UmVuZGVyU1ZHUm9vdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBMZWdhY3lSZW5kZXJTVkdSb290LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDM2NzA4QTYxMkQ5Q0E0QjAwMDQ0MjM0IC8qIExlZ2FjeVJlbmRlclNWR1Jvb3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5UmVuZGVyU1ZHUm9vdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDhBOTEyRDlDQTRCMDAwNDQyMzQgLyogUmVu
ZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4ODgwLDYgKzE4ODgzLDggQEAKIAkJCQlDREY3NDdG
ODI3MEY4N0NCMDA4RkVFRUMgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudElubGlu
ZXMuaCAqLywKIAkJCQk0MzY3MDhBMzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yLmNwcCAqLywKIAkJCQk0MzY3MDhBNDEyRDlDQTRCMDAwNDQyMzQgLyogUmVu
ZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggKi8sCisJCQkJNDM2NzA4QTUxMkQ5Q0E1QzAwMDQ0
MjM0IC8qIFJlbmRlclNWR1Jvb3QuY3BwICovLAorCQkJCTQzNjcwOEE2MTJEOURCNEIwMDA0NDIz
NCAvKiBSZW5kZXJTVkdSb290LmggKi8sCiAJCQkJQTEwQkI1ODgxNDg0RTNCMzAwQjJFODdBIC8q
IFJlbmRlclNWR1NoYXBlLmNwcCAqLywKIAkJCQlBMTBCQjU4OTE0ODRFM0IzMDBCMkU4N0EgLyog
UmVuZGVyU1ZHU2hhcGUuaCAqLywKIAkJCQlDREY3NDdGNjI3MEY4NkE0MDA4RkVFRUMgLyogUmVu
ZGVyU1ZHU2hhcGVJbmxpbmVzLmggKi8sCkBAIC0zMzUxNSwxMCArMzM1MjAsMTIgQEAKIAkJCQlD
RDNFRUYzQzI1Nzk5RkFCMDA2NTYzQkIgLyogQ29sb3JHYW11dC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzEwM0I3REYxREIwMTU2NzAwOEJCODkwIC8qIENvbG9ySGFzaC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRjU1QjNEQjQxMjUxRjEyRDAwM0VGMjY5IC8qIENvbG9ySW5wdXRUeXBlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlCQzNBMDBDODI3NTQ0OTZEMDA0N0MwRTUgLyogQ29sb3JJbnRlcnBvbGF0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzRBMjNFQzI1RUMxNjAyMDBBQUM2MzAgLyogQ29s
b3JMdW1pbmFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUVERTNBNTAwMEM3QTQzMDYwMDk1NkEz
NyAvKiBDb2xvck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NBQzZBRTkyNDdGMDgyRjAwRTYx
RDU5IC8qIENvbG9yTWF0cml4LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzEwMTM3QzI1QzM2MjRC
MDBEQzc3M0MgLyogQ29sb3JNb2RlbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDQjJGODhFMjc1
QkVFNTgwMDcyMzFCRiAvKiBDb2xvck5vcm1hbGl6YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTdDRDFFNjkzMjRBQkY2MjQwMDg5QzQxOSAvKiBDb2xvclNlcmlhbGl6YXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzODJERjU4MTBBOEQ1QzkwMDkyNTY1MiAvKiBDb2xvclNwYWNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0FGRURCNDI1OTY4RDBCMDAzMEU2QUEgLyogQ29sb3JTcGFjZUNH
LmggaW4gSGVhZGVycyAqLywKQEAgLTM2MjQ0LDcgKzM2MjUxLDYgQEAKIAkJCQk0OUQ1REMyRTBG
NDIzQTczMDA4RjIwRkQgLyogUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFEQkMxQjU2MjM0N0IzRDIwMEI5MDFBRiAvKiBQaWN0dXJlSW5QaWN0dXJl
T2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFEMkM4MkI3MjM2QTNGNkEwMDU1RDZDNSAv
KiBQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMzQTAwQzgy
NzU0NDk2RDAwNDdDMEU1IC8qIENvbG9ySW50ZXJwb2xhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUQyRjhFMDYyMzQ0NzUyMzAwOTkzQjY4IC8qIFBpY3R1cmVJblBpY3R1cmVXaW5kb3cuaCBp
biBIZWFkZXJzICovLAogCQkJCTU3NTg1OTdDMjNBMUZDRjMwMEM3NDU3MiAvKiBQaW4uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUQwRkYyQTVFMTFGOEM0NUEwMDdFNzRFMCAvKiBQaW5nTG9hZGVyLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM2NTYxLDYgKzM2NTY3LDcgQEAKIAkJCQk0MzY3MDhFMTEyRDlD
QTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQ0RGNzQ3RjkyNzBGODdDQjAwOEZFRUVDIC8qIFJlbmRlclNWR1Jlc291cmNl
UmFkaWFsR3JhZGllbnRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzY3MDhFMzEyRDlD
QTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggaW4gSGVhZGVycyAq
LywKKwkJCQk0MzY3MDhFNTEyRDlEQjRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUm9vdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTEwQkI1OEIxNDg0RTNCMzAwQjJFODdBIC8qIFJlbmRlclNWR1NoYXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDREY3NDdGNzI3MEY4NkE0MDA4RkVFRUMgLyogUmVuZGVy
U1ZHU2hhcGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODU0QjAxOTEyNTVFNEU2MDBC
OUNERDAgLyogUmVuZGVyU1ZHVGV4dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjY2OSw3ICszNjY3
Niw2IEBACiAJCQkJNDE4OEQ1NjMyNkM1NTFCMTAwNDg1OEM4IC8qIFJUQ0R0bHNUcmFuc3BvcnRT
dGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4RTA5MjAxN0QxNEQxQzAwNDIwQUExIC8qIFJU
Q0RUTUZTZW5kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OEUwOTIxMTdEMTREMUMwMDQyMEFB
MSAvKiBSVENEVE1GVG9uZUNoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlCQ0IyRjg4
RTI3NUJFRTU4MDA3MjMxQkYgLyogQ29sb3JOb3JtYWxpemF0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0MUU2RDcxQjI2RUExQTQ2MDBCNzY1RDYgLyogUlRDRXJyb3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQxQUI5Nzk1MjZFNzVBMkUwMDdDMEZFNiAvKiBSVENFcnJvckRldGFpbFR5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTA3OEUwOTIzMTdEMTREMUMwMDQyMEFBMSAvKiBSVENJY2VDYW5k
aWRhdGUuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oCmluZGV4IGQxMDFj
Zjg2YjBkNDg1ODYzNWU1YmIxMDQwYjI2MmIzYjk1MzNmYjQuLmFkMWFjNjk0NTY5Mzg3MDVkZDky
YjUyMGNlZTc3MmM5M2NkNGRhZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmgKQEAgLTExMyw2
ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFF1YWQ+IG1hcHBlZFNl
Y29uZGFyeVF1YWQoYm9vbCogd2FzQ2xhbXBlZCA9IG51bGxwdHIpIGNvbnN0OwogCiAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXgqIGFjY3VtdWxhdGVkVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
bV9hY2N1bXVsYXRlZFRyYW5zZm9ybS5nZXQoKTsgfQorICAgIFRyYW5zZm9ybURpcmVjdGlvbiBk
aXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQogCiBwcml2YXRlOgogICAg
IHZvaWQgdHJhbnNsYXRlVHJhbnNmb3JtKGNvbnN0IExheW91dFNpemUmKTsKQEAgLTEyMCw3ICsx
MjEsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZmxhdHRlbldpdGhUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBib29sKiB3YXNDbGFtcGVkKTsKICAgICB2b2lkIGFwcGx5QWNj
dW11bGF0ZWRPZmZzZXQoKTsKICAgICAKLSAgICBUcmFuc2Zvcm1EaXJlY3Rpb24gZGlyZWN0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KICAgICBUcmFuc2Zvcm1EaXJlY3Rpb24g
aW52ZXJzZURpcmVjdGlvbigpIGNvbnN0OwogCiAgICAgdm9pZCBtYXBRdWFkKEZsb2F0UXVhZCYs
IFRyYW5zZm9ybURpcmVjdGlvbiwgYm9vbCogY2xhbXBlZCA9IG51bGxwdHIpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTU4YjFiMGIxMWIzMzM5ODJiM2NlYTE0YTM2ZTQ5NDNkYjRhNTU0YQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKQEAg
LTAsMCArMSw2NDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDcsIDIwMDgsIDIwMDkgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIwLCAyMDIxIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTVkdSb290LmgiCisKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgorI2luY2x1ZGUgIlJl
bmRlckZyYWdtZW50ZWRGbG93LmgiCisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVk
ZSAiUmVuZGVySXRlcmF0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdG
b3JlaWduT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgorI2luY2x1ZGUgIlJlbmRl
clRyZWVCdWlsZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorLy8gRklYTUU6IFtMQlNF
XSBVcHN0cmVhbSBTVkdDb250YWluZXJMYXlvdXQKKy8vICNpbmNsdWRlICJTVkdDb250YWluZXJM
YXlvdXQuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50VHlwZUhlbHBlcnMuaCIKKyNpbmNsdWRlICJT
VkdJbWFnZS5oIgorI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJT
VkdSZXNvdXJjZXMuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5oIgorI2luY2x1ZGUg
IlNWR1NWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdWaWV3U3BlYy5oIgorI2luY2x1ZGUgIlRy
YW5zZm9ybVN0YXRlLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNs
dWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChSZW5kZXJT
VkdSb290KTsKKworUmVuZGVyU1ZHUm9vdDo6UmVuZGVyU1ZHUm9vdChTVkdTVkdFbGVtZW50JiBl
bGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQorICAgIDogUmVuZGVyUmVwbGFjZWQoZWxlbWVu
dCwgV1RGTW92ZShzdHlsZSkpCit7Cit9CisKK1JlbmRlclNWR1Jvb3Q6On5SZW5kZXJTVkdSb290
KCkgPSBkZWZhdWx0OworCitTVkdTVkdFbGVtZW50JiBSZW5kZXJTVkdSb290OjpzdmdTVkdFbGVt
ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZG93bmNhc3Q8U1ZHU1ZHRWxlbWVudD4obm9kZUZv
ck5vbkFub255bW91cygpKTsKK30KKwordm9pZCBSZW5kZXJTVkdSb290Ojpjb21wdXRlSW50cmlu
c2ljUmF0aW9JbmZvcm1hdGlvbihGbG9hdFNpemUmIGludHJpbnNpY1NpemUsIGRvdWJsZSYgaW50
cmluc2ljUmF0aW8pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFzaG91bGRBcHBseVNpemVDb250YWlu
bWVudCgqdGhpcykpOworCisgICAgLy8gU3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2Nv
b3Jkcy5odG1sI0ludHJpbnNpY1NpemluZworICAgIC8vIFNWRyBuZWVkcyB0byBzcGVjaWZ5IGhv
dyB0byBjYWxjdWxhdGUgc29tZSBpbnRyaW5zaWMgc2l6aW5nIHByb3BlcnRpZXMgdG8gZW5hYmxl
IGluY2x1c2lvbiB3aXRoaW4gb3RoZXIgbGFuZ3VhZ2VzLgorCisgICAgLy8gVGhlIGludHJpbnNp
YyBhc3BlY3QgcmF0aW8gb2YgdGhlIHZpZXdwb3J0IG9mIFNWRyBjb250ZW50IGlzIG5lY2Vzc2Fy
eSBmb3IgZXhhbXBsZSwgd2hlbiBpbmNsdWRpbmcgU1ZHIGZyb20gYW4g4oCYb2JqZWN04oCZCisg
ICAgLy8gZWxlbWVudCBpbiBIVE1MIHN0eWxlZCB3aXRoIENTUy4gSXQgaXMgcG9zc2libGUgKGlu
ZGVlZCwgY29tbW9uKSBmb3IgYW4gU1ZHIGdyYXBoaWMgdG8gaGF2ZSBhbiBpbnRyaW5zaWMgYXNw
ZWN0IHJhdGlvIGJ1dAorICAgIC8vIG5vdCB0byBoYXZlIGFuIGludHJpbnNpYyB3aWR0aCBvciBo
ZWlnaHQuIFRoZSBpbnRyaW5zaWMgYXNwZWN0IHJhdGlvIG11c3QgYmUgY2FsY3VsYXRlZCBiYXNl
ZCB1cG9uIHRoZSBmb2xsb3dpbmcgcnVsZXM6CisgICAgLy8gLSBUaGUgYXNwZWN0IHJhdGlvIGlz
IGNhbGN1bGF0ZWQgYnkgZGl2aWRpbmcgYSB3aWR0aCBieSBhIGhlaWdodC4KKyAgICAvLyAtIElm
IHRoZSDigJh3aWR0aOKAmSBhbmQg4oCYaGVpZ2h04oCZIG9mIHRoZSByb290bW9zdCDigJhzdmfi
gJkgZWxlbWVudCBhcmUgYm90aCBzcGVjaWZpZWQgd2l0aCB1bml0IGlkZW50aWZpZXJzIChpbiwg
bW0sIGNtLCBwdCwgcGMsCisgICAgLy8gICBweCwgZW0sIGV4KSBvciBpbiB1c2VyIHVuaXRzLCB0
aGVuIHRoZSBhc3BlY3QgcmF0aW8gaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSDigJh3aWR0aOKAmSBh
bmQg4oCYaGVpZ2h04oCZIGF0dHJpYnV0ZXMgYWZ0ZXIKKyAgICAvLyAgIHJlc29sdmluZyBib3Ro
IHZhbHVlcyB0byB1c2VyIHVuaXRzLgorICAgIGludHJpbnNpY1NpemUuaGFzSW50cmluc2ljV2lk
dGggPSBzdmdTVkdFbGVtZW50KCkuaGFzSW50cmluc2ljV2lkdGgoKTsKKyAgICBpbnRyaW5zaWNT
aXplLmhhc0ludHJpbnNpY0hlaWdodCA9IHN2Z1NWR0VsZW1lbnQoKS5oYXNJbnRyaW5zaWNIZWln
aHQoKTsKKyAgICBpbnRyaW5zaWNTaXplLnNldFdpZHRoKGZsb2F0VmFsdWVGb3JMZW5ndGgoc3Zn
U1ZHRWxlbWVudCgpLmludHJpbnNpY1dpZHRoKCksIDApKTsKKyAgICBpbnRyaW5zaWNTaXplLnNl
dEhlaWdodChmbG9hdFZhbHVlRm9yTGVuZ3RoKHN2Z1NWR0VsZW1lbnQoKS5pbnRyaW5zaWNIZWln
aHQoKSwgMCkpOworCisgICAgaWYgKHN0eWxlKCkuYXNwZWN0UmF0aW9UeXBlKCkgPT0gQXNwZWN0
UmF0aW9UeXBlOjpSYXRpbykgeworICAgICAgICBpbnRyaW5zaWNSYXRpbyA9IHN0eWxlKCkubG9n
aWNhbEFzcGVjdFJhdGlvKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGQ6Om9w
dGlvbmFsPGRvdWJsZT4gaW50cmluc2ljUmF0aW9WYWx1ZTsKKyAgICBpZiAoIWludHJpbnNpY1Np
emUuaXNFbXB0eSgpKQorICAgICAgICBpbnRyaW5zaWNSYXRpb1ZhbHVlID0gaW50cmluc2ljU2l6
ZS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihpbnRyaW5zaWNTaXplLmhlaWdodCgpKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgLy8gLSBJZiBlaXRoZXIvYm90aCBvZiB0aGUg4oCYd2lkdGji
gJkgYW5kIOKAmGhlaWdodOKAmSBvZiB0aGUgcm9vdG1vc3Qg4oCYc3Zn4oCZIGVsZW1lbnQgYXJl
IGluIHBlcmNlbnRhZ2UgdW5pdHMgKG9yIG9taXR0ZWQpLCB0aGUKKyAgICAgICAgLy8gICBhc3Bl
Y3QgcmF0aW8gaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBv
ZiB0aGUg4oCYdmlld0JveOKAmSBzcGVjaWZpZWQgZm9yIHRoZSBjdXJyZW50IFNWRyBkb2N1bWVu
dAorICAgICAgICAvLyAgIGZyYWdtZW50LiBJZiB0aGUg4oCYdmlld0JveOKAmSBpcyBub3QgY29y
cmVjdGx5IHNwZWNpZmllZCwgb3Igc2V0IHRvICdub25lJywgdGhlIGludHJpbnNpYyBhc3BlY3Qg
cmF0aW8gY2Fubm90IGJlCisgICAgICAgIC8vICAgY2FsY3VsYXRlZCBhbmQgaXMgY29uc2lkZXJl
ZCB1bnNwZWNpZmllZC4KKyAgICAgICAgRmxvYXRTaXplIHZpZXdCb3hTaXplID0gc3ZnU1ZHRWxl
bWVudCgpLnZpZXdCb3goKS5zaXplKCk7CisgICAgICAgIGlmICghdmlld0JveFNpemUuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICAvLyBUaGUgdmlld0JveCBjYW4gb25seSB5aWVsZCBhbiBpbnRy
aW5zaWMgcmF0aW8sIG5vdCBhbiBpbnRyaW5zaWMgc2l6ZS4KKyAgICAgICAgICAgIGludHJpbnNp
Y1JhdGlvVmFsdWUgPSB2aWV3Qm94U2l6ZS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPih2
aWV3Qm94U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaW50cmlu
c2ljUmF0aW9WYWx1ZSkKKyAgICAgICAgaW50cmluc2ljUmF0aW8gPSAqaW50cmluc2ljUmF0aW9W
YWx1ZTsKKyAgICBlbHNlIGlmIChzdHlsZSgpLmFzcGVjdFJhdGlvVHlwZSgpID09IEFzcGVjdFJh
dGlvVHlwZTo6QXV0b0FuZFJhdGlvKQorICAgICAgICBpbnRyaW5zaWNSYXRpbyA9IHN0eWxlKCku
bG9naWNhbEFzcGVjdFJhdGlvKCk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUm9vdDo6aXNFbWJlZGRl
ZFRocm91Z2hTVkdJbWFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzSW5TVkdJbWFnZSgmc3Zn
U1ZHRWxlbWVudCgpKTsKK30KKworYm9vbCBSZW5kZXJTVkdSb290Ojppc0VtYmVkZGVkVGhyb3Vn
aEZyYW1lQ29udGFpbmluZ1NWR0RvY3VtZW50KCkgY29uc3QKK3sKKyAgICAvLyBJZiBvdXIgZnJh
bWUgaGFzIGFuIG93bmVyIHJlbmRlcmVyLCB3ZSdyZSBlbWJlZGRlZCB0aHJvdWdoIGVnLiBvYmpl
Y3QvZW1iZWQvaWZyYW1lLAorICAgIC8vIGJ1dCB3ZSBvbmx5IG5lZ290aWF0ZSBpZiB3ZSdyZSBp
biBhbiBTVkcgZG9jdW1lbnQgaW5zaWRlIG9iamVjdC9lbWJlZCwgbm90IGlmcmFtZS4KKyAgICBp
ZiAoIWZyYW1lKCkub3duZXJSZW5kZXJlcigpIHx8ICFmcmFtZSgpLm93bmVyUmVuZGVyZXIoKS0+
aXNFbWJlZGRlZE9iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGZy
YW1lKCkuZG9jdW1lbnQoKS0+aXNTVkdEb2N1bWVudCgpOworfQorCitMYXlvdXRVbml0IFJlbmRl
clNWR1Jvb3Q6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChTaG91bGRDb21wdXRlUHJlZmVy
cmVkIHNob3VsZENvbXB1dGVQcmVmZXJyZWQpIGNvbnN0Cit7CisgICAgLy8gV2hlbiB3ZSdyZSBl
bWJlZGRlZCB0aHJvdWdoIFNWR0ltYWdlIChib3JkZXItaW1hZ2UvYmFja2dyb3VuZC1pbWFnZS88
aHRtbDppbWc+Ly4uLikgd2UncmUgZm9yY2VkIHRvIHJlc2l6ZSB0byBhIHNwZWNpZmljIHNpemUu
CisgICAgaWYgKCFtX2NvbnRhaW5lclNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9j
b250YWluZXJTaXplLndpZHRoKCk7CisKKyAgICBpZiAoaXNFbWJlZGRlZFRocm91Z2hGcmFtZUNv
bnRhaW5pbmdTVkdEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrKCkt
PmF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpOworCisgICAgLy8gU1ZHIGVtYmVkZGVkIHZpYSBTVkdJ
bWFnZSAoYmFja2dyb3VuZC1pbWFnZS9ib3JkZXItaW1hZ2UvZXRjKSAvIElubGluZSBTVkcuCisg
ICAgcmV0dXJuIFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoc2hv
dWxkQ29tcHV0ZVByZWZlcnJlZCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyU1ZHUm9vdDo6Y29t
cHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodChzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGVzdGlt
YXRlZFVzZWRXaWR0aCkgY29uc3QKK3sKKyAgICAvLyBXaGVuIHdlJ3JlIGVtYmVkZGVkIHRocm91
Z2ggU1ZHSW1hZ2UgKGJvcmRlci1pbWFnZS9iYWNrZ3JvdW5kLWltYWdlLzxodG1sOmltZz4vLi4u
KSB3ZSdyZSBmb3JjZWQgdG8gcmVzaXplIHRvIGEgc3BlY2lmaWMgc2l6ZS4KKyAgICBpZiAoIW1f
Y29udGFpbmVyU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtX2NvbnRhaW5lclNpemUu
aGVpZ2h0KCk7CisKKyAgICBpZiAoaXNFbWJlZGRlZFRocm91Z2hGcmFtZUNvbnRhaW5pbmdTVkdE
b2N1bWVudCgpKQorICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJsZUxv
Z2ljYWxIZWlnaHQoSW5jbHVkZU1hcmdpbkJvcmRlclBhZGRpbmcpOworCisgICAgLy8gU3RhbmRh
bG9uZSBTVkcgLyBTVkcgZW1iZWRkZWQgdmlhIFNWR0ltYWdlIChiYWNrZ3JvdW5kLWltYWdlL2Jv
cmRlci1pbWFnZS9ldGMpIC8gSW5saW5lIFNWRy4KKyAgICByZXR1cm4gUmVuZGVyUmVwbGFjZWQ6
OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoZXN0aW1hdGVkVXNlZFdpZHRoKTsKK30KKwor
dm9pZCBSZW5kZXJTVkdSb290OjpsYXlvdXQoKQoreworICAgIFNldEZvclNjb3BlPGJvb2w+IGNo
YW5nZShtX2luTGF5b3V0LCB0cnVlKTsKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50
IGxheW91dENoZWNrUG9pbnQ7CisgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOworCisgICAgbV9y
ZXNvdXJjZXNOZWVkaW5nVG9JbnZhbGlkYXRlQ2xpZW50cy5jbGVhcigpOworCisgICAgLy8gQXJi
aXRyYXJ5IGFmZmluZSB0cmFuc2Zvcm1zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBSZW5kZXJMYXlv
dXRTdGF0ZS4KKyAgICBMYXlvdXRTdGF0ZURpc2FibGVyIGxheW91dFN0YXRlRGlzYWJsZXIodmll
dygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKSk7CisKKyAgICBib29sIG5lZWRzTGF5b3V0
ID0gc2VsZk5lZWRzTGF5b3V0KCk7CisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhp
cywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpOworCisgICAgYXV0byBwcmV2aW91c0xv
Z2ljYWxTaXplID0gc2l6ZSgpOworICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aCgpOworICAgIHVwZGF0
ZUxvZ2ljYWxIZWlnaHQoKTsKKyAgICBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQgPSBuZWVkc0xheW91
dCB8fCAoc3ZnU1ZHRWxlbWVudCgpLmhhc1JlbGF0aXZlTGVuZ3RocygpICYmIHByZXZpb3VzTG9n
aWNhbFNpemUgIT0gc2l6ZSgpKTsKKworICAgIGF1dG8gb2xkVHJhbnNmb3JtID0gbV9zdXBwbGVt
ZW50YWxMb2NhbFRvUGFyZW50VHJhbnNmb3JtOworICAgIGNvbXB1dGVUcmFuc2Zvcm1hdGlvbk1h
dHJpY2VzKCk7CisKKyAgICBpZiAob2xkVHJhbnNmb3JtICE9IG1fc3VwcGxlbWVudGFsTG9jYWxU
b1BhcmVudFRyYW5zZm9ybSkKKyAgICAgICAgbV9kaWRUcmFuc2Zvcm1Ub1Jvb3RVcGRhdGUgPSB0
cnVlOworICAgIGVsc2UgaWYgKHByZXZpb3VzTG9naWNhbFNpemUgIT0gc2l6ZSgpKQorICAgICAg
ICBtX2RpZFRyYW5zZm9ybVRvUm9vdFVwZGF0ZSA9IHRydWU7CisKKyAgICAvLyBGSVhNRTogW0xC
U0VdIFVwc3RyZWFtIFNWR0xlbmd0aENvbnRleHQgY2hhbmdlcworICAgIC8vIHN2Z1NWR0VsZW1l
bnQoKS51cGRhdGVMZW5ndGhDb250ZXh0KCk7CisKKyAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3Ry
ZWFtIFNWR0xheWVyVHJhbnNmb3JtVXBkYXRlcgorICAgIC8vIFNWR0xheWVyVHJhbnNmb3JtVXBk
YXRlciB0cmFuc2Zvcm1VcGRhdGVyKCp0aGlzKTsKKyAgICB1cGRhdGVMYXllckluZm9ybWF0aW9u
KCk7CisKKyAgICAvKiBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0NvbnRhaW5lckxheW91dCAv
IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24KKyAgICB7CisgICAgICAgIFNWR0NvbnRhaW5lckxh
eW91dCBjb250YWluZXJMYXlvdXQoKnRoaXMpOworICAgICAgICBjb250YWluZXJMYXlvdXQubGF5
b3V0Q2hpbGRyZW4obmVlZHNMYXlvdXQgfHwgU1ZHUmVuZGVyU3VwcG9ydDo6ZmlsdGVyc0ZvcmNl
Q29udGFpbmVyTGF5b3V0KCp0aGlzKSk7CisKKyAgICAgICAgU1ZHQm91bmRpbmdCb3hDb21wdXRh
dGlvbiBib3VuZGluZ0JveENvbXB1dGF0aW9uKCp0aGlzKTsKKyAgICAgICAgbV9vYmplY3RCb3Vu
ZGluZ0JveCA9IGJvdW5kaW5nQm94Q29tcHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5n
Qm94KFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246Om9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlv
bik7CisgICAgICAgIG1fc3Ryb2tlQm91bmRpbmdCb3ggPSBib3VuZGluZ0JveENvbXB1dGF0aW9u
LmNvbXB1dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpz
dHJva2VCb3VuZGluZ0JveERlY29yYXRpb24pOworICAgIH0KKyAgICAqLworCisgICAgLy8gRklY
TUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdDb250YWluZXJMYXlvdXQgLS0gcmVtb3ZlIFNWR1JlbmRl
clN1cHBvcnQ6OmxheW91dENoaWxkcmVuLgorICAgIFNWR1JlbmRlclN1cHBvcnQ6OmxheW91dENo
aWxkcmVuKCp0aGlzLCBuZWVkc0xheW91dCk7CisKKyAgICBpZiAoIW1fcmVzb3VyY2VzTmVlZGlu
Z1RvSW52YWxpZGF0ZUNsaWVudHMuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEludmFsaWRhdGUg
cmVzb3VyY2UgY2xpZW50cywgd2hpY2ggbWF5IG1hcmsgc29tZSBub2RlcyBmb3IgbGF5b3V0Lgor
ICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogIG1fcmVzb3VyY2VzTmVlZGluZ1RvSW52YWxp
ZGF0ZUNsaWVudHMpIHsKKyAgICAgICAgICAgIHJlc291cmNlLT5yZW1vdmVBbGxDbGllbnRzRnJv
bUNhY2hlKCk7CisgICAgICAgICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVDaGFu
Z2VkKCpyZXNvdXJjZSwgU3R5bGVEaWZmZXJlbmNlOjpMYXlvdXQsIHJlc291cmNlLT5zdHlsZSgp
KTsKKyAgICAgICAgfQorCisgICAgICAgIG1faXNMYXlvdXRTaXplQ2hhbmdlZCA9IGZhbHNlOwor
CisgICAgICAgIC8qIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQ29udGFpbmVyTGF5b3V0Cisg
ICAgICAgIFNWR0NvbnRhaW5lckxheW91dCBjb250YWluZXJMYXlvdXQoKnRoaXMpOworICAgICAg
ICBjb250YWluZXJMYXlvdXQubGF5b3V0Q2hpbGRyZW4oZmFsc2UpOworICAgICAgICAqLworICAg
IH0KKworICAgIG1faXNMYXlvdXRTaXplQ2hhbmdlZCA9IGZhbHNlOworICAgIG1fZGlkVHJhbnNm
b3JtVG9Sb290VXBkYXRlID0gZmFsc2U7CisKKyAgICBjbGVhck92ZXJmbG93KCk7CisgICAgaWYg
KCFzaG91bGRBcHBseVZpZXdwb3J0Q2xpcCgpKSB7CisgICAgICAgIGF1dG8gdmlzdWFsT3ZlcmZs
b3dSZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChtX3ZpZXdCb3hUcmFuc2Zvcm0ubWFwUmVjdCh2
aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkpKTsKKyAgICAgICAgYWRkVmlzdWFsT3ZlcmZs
b3codmlzdWFsT3ZlcmZsb3dSZWN0KTsKKyAgICAgICAgYWRkVmlzdWFsRWZmZWN0T3ZlcmZsb3co
KTsKKyAgICB9CisgICAgaW52YWxpZGF0ZUJhY2tncm91bmRPYnNjdXJhdGlvblN0YXR1cygpOwor
CisgICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOworCisgICAgY2xlYXJOZWVkc0xh
eW91dCgpOworfQorCitib29sIFJlbmRlclNWR1Jvb3Q6OnNob3VsZEFwcGx5Vmlld3BvcnRDbGlw
KCkgY29uc3QKK3sKKyAgICAvLyB0aGUgb3V0ZXJtb3N0IHN2ZyBpcyBjbGlwcGVkIGlmIGF1dG8s
IGFuZCBzdmcgZG9jdW1lbnQgcm9vdHMgYXJlIGFsd2F5cyBjbGlwcGVkCisgICAgLy8gV2hlbiB0
aGUgc3ZnIGlzIHN0YW5kLWFsb25lIChpc0RvY3VtZW50RWxlbWVudCgpID09IHRydWUpIHRoZSB2
aWV3cG9ydCBjbGlwcGluZyBzaG91bGQgYWx3YXlzCisgICAgLy8gYmUgYXBwbGllZCwgbm90aW5n
IHRoYXQgdGhlIHdpbmRvdyBzY3JvbGxiYXJzIHNob3VsZCBiZSBoaWRkZW4gaWYgb3ZlcmZsb3c9
aGlkZGVuLgorICAgIHJldHVybiBlZmZlY3RpdmVPdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6SGlk
ZGVuCisgICAgICAgIHx8IHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG8KKyAg
ICAgICAgfHwgc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsCisgICAgICAg
IHx8IHRoaXMtPmlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIoKTsKK30KKworLy8gRklYTUU6IEJh
c2ljYWxseSBhIGNvcHkgb2YgUmVuZGVyQmxvY2s6OnBhaW50KCkgLSBpZGVhbGx5IG9uZSB3b3Vs
ZCBzaGFyZSB0aGlzIGNvZGUuCisvLyBIb3dldmVyIHdpdGggTEZDIG9uIHRoZSBob3Jpem9uIHRo
YXQgaW52ZXN0bWVudCBpcyB1c2VsZXNzLCB3ZSBzaG91bGQgY29uY2VudHJhdGUKKy8vIG9uIExG
Qy9TVkcgaW50ZWdyYXRpb24gb25jZSB0aGUgTEJTRSBpcyB1cHN0cmVhbWVkLgordm9pZCBSZW5k
ZXJTVkdSb290OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0KQoreworICAgIC8vIERvbid0IHBhaW50LCBpZiB0aGUgY29udGV4dCBleHBs
aWNpdGx5IGRpc2FibGVkIGl0LgorICAgIGlmIChwYWludEluZm8uY29udGV4dCgpLnBhaW50aW5n
RGlzYWJsZWQoKSAmJiAhcGFpbnRJbmZvLmNvbnRleHQoKS5kZXRlY3RpbmdDb250ZW50ZnVsUGFp
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQW4gZW1wdHkgdmlld3BvcnQgZGlzYWJs
ZXMgcmVuZGVyaW5nLgorICAgIGlmIChib3JkZXJCb3hSZWN0KCkuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBhdXRvIGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCAr
IGxvY2F0aW9uKCk7CisKKyAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGF0
IGFsbC4KKyAgICAvLyBGSVhNRTogQ291bGQgZWxpbWluYXRlIHRoZSBpc0RvY3VtZW50RWxlbWVu
dFJlbmRlcmVyKCkgY2hlY2sgaWYgd2UgZml4IGJhY2tncm91bmQgcGFpbnRpbmcgc28gdGhhdCB0
aGUgUmVuZGVyVmlldworICAgIC8vIHBhaW50cyB0aGUgcm9vdCdzIGJhY2tncm91bmQuCisgICAg
aWYgKCFpc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkgJiYgIXBhaW50SW5mby5wYWludEJlaGF2
aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkNvbXBvc2l0ZWRPdmVyZmxvd1Njcm9sbENvbnRl
bnQpKSB7CisgICAgICAgIGF1dG8gb3ZlcmZsb3dCb3ggPSB2aXN1YWxPdmVyZmxvd1JlY3QoKTsK
KyAgICAgICAgZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93Qm94KTsKKyAgICAgICAgb3ZlcmZs
b3dCb3gubW92ZUJ5KGFkanVzdGVkUGFpbnRPZmZzZXQpOworICAgICAgICBpZiAoIW92ZXJmbG93
Qm94LmludGVyc2VjdHMocGFpbnRJbmZvLnJlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGJvb2wgcHVzaGVkQ2xpcCA9IHB1c2hDb250ZW50c0NsaXAocGFpbnRJbmZvLCBh
ZGp1c3RlZFBhaW50T2Zmc2V0KTsKKyAgICBwYWludE9iamVjdChwYWludEluZm8sIGFkanVzdGVk
UGFpbnRPZmZzZXQpOworICAgIGlmIChwdXNoZWRDbGlwKQorICAgICAgICBwb3BDb250ZW50c0Ns
aXAocGFpbnRJbmZvLCBwYWludEluZm8ucGhhc2UsIGFkanVzdGVkUGFpbnRPZmZzZXQpOworCisg
ICAgLy8gT3VyIHNjcm9sbGJhciB3aWRnZXRzIHBhaW50IGV4YWN0bHkgd2hlbiB3ZSB0ZWxsIHRo
ZW0gdG8sIHNvIHRoYXQgdGhleSB3b3JrIHByb3Blcmx5IHdpdGgKKyAgICAvLyB6LWluZGV4LiBX
ZSBwYWludCBhZnRlciB3ZSBwYWludGVkIHRoZSBiYWNrZ3JvdW5kL2JvcmRlciwgc28gdGhhdCB0
aGUgc2Nyb2xsYmFycyB3aWxsCisgICAgLy8gc2l0IGFib3ZlIHRoZSBiYWNrZ3JvdW5kL2JvcmRl
ci4KKyAgICBpZiAoKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpCbG9ja0JhY2tncm91
bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OkNoaWxkQmxvY2tCYWNrZ3JvdW5k
KSAmJiBoYXNOb25WaXNpYmxlT3ZlcmZsb3coKSAmJiBsYXllcigpICYmIGxheWVyKCktPnNjcm9s
bGFibGVBcmVhKCkKKyAgICAgICAgJiYgc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0
eTo6VmlzaWJsZSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSAmJiAh
cGFpbnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRPbmx5KCkpCisgICAgICAgIGxheWVyKCktPnNj
cm9sbGFibGVBcmVhKCktPnBhaW50T3ZlcmZsb3dDb250cm9scyhwYWludEluZm8uY29udGV4dCgp
LCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHNuYXBwZWRJbnRSZWN0KHBh
aW50SW5mby5yZWN0KSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6cGFpbnRPYmplY3QoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKK3sKKyAg
ICBpZiAoKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpCbG9ja0JhY2tncm91bmQgfHwg
cGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OkNoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBz
dHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlKSB7CisgICAgICAgIGlm
IChoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnMoKSkKKyAgICAgICAgICAgIHBhaW50Qm94RGVjb3Jh
dGlvbnMocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CisgICAgfQorCisgICAgYXV0byBhZGp1c3Rl
ZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOworICAgIGlmIChwYWludElu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6TWFzayAmJiBzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBW
aXNpYmlsaXR5OjpWaXNpYmxlKSB7CisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0g
U1ZHUmVuZGVyU3VwcG9ydCBjaGFuZ2VzCisgICAgICAgIC8vIFNWR1JlbmRlclN1cHBvcnQ6OnBh
aW50U1ZHTWFzaygqdGhpcywgcGFpbnRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFz
ZTo6Q2xpcHBpbmdNYXNrICYmIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZp
c2libGUpIHsKKyAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdSZW5kZXJTdXBw
b3J0IGNoYW5nZXMKKyAgICAgICAgLy8gU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRTVkdDbGlwcGlu
Z01hc2soKnRoaXMsIHBhaW50SW5mbyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAocGFpbnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRPbmx5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCk7Cisg
ICAgaWYgKGNvbnRleHQuZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KCkpIHsKKyAgICAgICAgZm9y
IChhdXRvJiBjdXJyZW50IDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0PigqdGhpcykpIHsK
KyAgICAgICAgICAgIGlmICghY3VycmVudC5pc1NWR0hpZGRlbkNvbnRhaW5lcigpKSB7CisgICAg
ICAgICAgICAgICAgY29udGV4dC5zZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCgpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gRG9uJ3QgcGFpbnQgaWYgd2UgZG9uJ3QgaGF2ZSBraWRzLCBl
eGNlcHQgaWYgd2UgaGF2ZSBmaWx0ZXJzIHdlIHNob3VsZCBwYWludCB0aG9zZS4KKyAgICBpZiAo
IWZpcnN0Q2hpbGQoKSkgeworICAgICAgICBhdXRvKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXND
YWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyZXIoKnRoaXMpOworICAgICAgICBpZiAoIXJl
c291cmNlcyB8fCAhcmVzb3VyY2VzLT5maWx0ZXIoKSkgeworICAgICAgICAgICAgaWYgKHBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpGb3JlZ3JvdW5kKQorICAgICAgICAgICAgICAgIHBh
Z2UoKS5hZGRSZWxldmFudFVucGFpbnRlZE9iamVjdCh0aGlzLCB2aXN1YWxPdmVyZmxvd1JlY3Qo
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6QmxvY2tCYWNrZ3Jv
dW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHNjcm9sbGVkT2Zmc2V0ID0gcGFpbnRP
ZmZzZXQ7CisgICAgc2Nyb2xsZWRPZmZzZXQubW92ZUJ5KC1zY3JvbGxQb3NpdGlvbigpKTsKKwor
ICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6U2VsZk91dGxpbmUpCisgICAg
ICAgIHBhaW50Q29udGVudHMocGFpbnRJbmZvLCBzY3JvbGxlZE9mZnNldCk7CisKKyAgICBpZiAo
KHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpPdXRsaW5lIHx8IHBhaW50SW5mby5waGFz
ZSA9PSBQYWludFBoYXNlOjpTZWxmT3V0bGluZSkgJiYgaGFzT3V0bGluZSgpICYmIHN0eWxlKCku
dmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUpCisgICAgICAgIHBhaW50T3V0bGlu
ZShwYWludEluZm8sIExheW91dFJlY3QoYWRqdXN0ZWRQYWludE9mZnNldCwgc2l6ZSgpKSk7Cit9
CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6cGFpbnRDb250ZW50cyhQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQoreworICAgIC8vIFN0eWxlIGlzIG5v
bi1maW5hbCBpZiB0aGUgZWxlbWVudCBoYXMgYSBwZW5kaW5nIHN0eWxlc2hlZXQgYmVmb3JlIGl0
LiBXZSBlbmQgdXAgd2l0aCByZW5kZXJlcnMgd2l0aCBzdWNoIHN0eWxlcyBpZiBhIHNjcmlwdAor
ICAgIC8vIGZvcmNlcyByZW5kZXJlciBjb25zdHJ1Y3Rpb24gYnkgcXVlcnlpbmcgc29tZXRoaW5n
IGxheW91dCBkZXBlbmRlbnQuCisgICAgLy8gQXZvaWQgRk9VQyBieSBub3QgcGFpbnRpbmcuIFN3
aXRjaGluZyB0byBmaW5hbCBzdHlsZSB0cmlnZ2VycyByZXBhaW50LgorICAgIGlmIChzdHlsZSgp
LmlzTm90RmluYWwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgZG9uJ3QgcGFpbnQg
b3VyIG93biBiYWNrZ3JvdW5kLCBidXQgd2UgZG8gbGV0IHRoZSBraWRzIHBhaW50IHRoZWlyIGJh
Y2tncm91bmRzLgorICAgIGF1dG8gcGFpbnRJbmZvRm9yQ2hpbGQocGFpbnRJbmZvKTsKKyAgICBp
ZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OkNoaWxkT3V0bGluZXMpCisgICAgICAg
IHBhaW50SW5mb0ZvckNoaWxkLnBoYXNlID0gUGFpbnRQaGFzZTo6T3V0bGluZTsKKyAgICBlbHNl
IGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6Q2hpbGRCbG9ja0JhY2tncm91bmRz
KQorICAgICAgICBwYWludEluZm9Gb3JDaGlsZC5waGFzZSA9IFBhaW50UGhhc2U6OkNoaWxkQmxv
Y2tCYWNrZ3JvdW5kOworCisgICAgcGFpbnRJbmZvRm9yQ2hpbGQudXBkYXRlU3VidHJlZVBhaW50
Um9vdEZvckNoaWxkcmVuKHRoaXMpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9m
VHlwZTxSZW5kZXJFbGVtZW50PigqdGhpcykpIHsKKyAgICAgICAgaWYgKCFjaGlsZC5oYXNTZWxm
UGFpbnRpbmdMYXllcigpKQorICAgICAgICAgICAgY2hpbGQucGFpbnQocGFpbnRJbmZvRm9yQ2hp
bGQsIHBhaW50T2Zmc2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6d2lsbEJl
RGVzdHJveWVkKCkKK3sKKyAgICBSZW5kZXJCbG9jazo6cmVtb3ZlUGVyY2VudEhlaWdodERlc2Nl
bmRhbnQoY29uc3RfY2FzdDxSZW5kZXJTVkdSb290Jj4oKnRoaXMpKTsKKworICAgIFNWR1Jlc291
cmNlc0NhY2hlOjpjbGllbnREZXN0cm95ZWQoKnRoaXMpOworICAgIFJlbmRlclJlcGxhY2VkOjp3
aWxsQmVEZXN0cm95ZWQoKTsKK30KKwordm9pZCBSZW5kZXJTVkdSb290OjppbnNlcnRlZEludG9U
cmVlKElzSW50ZXJuYWxNb3ZlIGlzSW50ZXJuYWxNb3ZlKQoreworICAgIFJlbmRlclJlcGxhY2Vk
OjppbnNlcnRlZEludG9UcmVlKGlzSW50ZXJuYWxNb3ZlKTsKKyAgICBTVkdSZXNvdXJjZXNDYWNo
ZTo6Y2xpZW50V2FzQWRkZWRUb1RyZWUoKnRoaXMpOworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6
OndpbGxCZVJlbW92ZWRGcm9tVHJlZShJc0ludGVybmFsTW92ZSBpc0ludGVybmFsTW92ZSkKK3sK
KyAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2lsbEJlUmVtb3ZlZEZyb21UcmVlKCp0aGlz
KTsKKyAgICBSZW5kZXJSZXBsYWNlZDo6d2lsbEJlUmVtb3ZlZEZyb21UcmVlKGlzSW50ZXJuYWxN
b3ZlKTsKK30KKwordm9pZCBSZW5kZXJTVkdSb290OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZl
cmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQoreworICAgIFJlbmRlclJl
cGxhY2VkOjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CisgICAgU1ZHUmVzb3VyY2Vz
Q2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZCgqdGhpcywgZGlmZiwgc3R5bGUoKSk7Cit9CisKK3Zv
aWQgUmVuZGVyU1ZHUm9vdDo6dXBkYXRlTGF5ZXJJbmZvcm1hdGlvbigpCit7CisgICAgLyogRklY
TUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdSZW5kZXJTdXBwb3J0IGNoYW5nZXMKKyAgICBpZiAoU1ZH
UmVuZGVyU3VwcG9ydDo6aXNSZW5kZXJpbmdEaXNhYmxlZER1ZVRvRW1wdHlTVkdWaWV3Qm94KCp0
aGlzKSkKKyAgICAgICAgbGF5ZXIoKS0+ZGlydHlBbmNlc3RvckNoYWluVmlzaWJsZURlc2NlbmRh
bnRTdGF0dXMoKTsKKyAgICAgKi8KK30KKwordm9pZCBSZW5kZXJTVkdSb290Ojp1cGRhdGVGcm9t
U3R5bGUoKQoreworICAgIFJlbmRlclJlcGxhY2VkOjp1cGRhdGVGcm9tU3R5bGUoKTsKKworICAg
IC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVyT2JqZWN0IGNoYW5nZXMKKyAgICAvLyBz
ZXRIYXNTVkdUcmFuc2Zvcm0oKTsKKworICAgIGlmIChzaG91bGRBcHBseVZpZXdwb3J0Q2xpcCgp
KQorICAgICAgICBzZXRIYXNOb25WaXNpYmxlT3ZlcmZsb3coKTsKK30KKworTGF5b3V0UmVjdCBS
ZW5kZXJTVkdSb290OjpjbGlwcGVkT3ZlcmZsb3dSZWN0KGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCBjb250ZXh0KSBjb25z
dAoreworICAgIGlmIChzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNpYmxl
ICYmICFlbmNsb3NpbmdMYXllcigpLT5oYXNWaXNpYmxlQ29udGVudCgpKQorICAgICAgICByZXR1
cm4gTGF5b3V0UmVjdCgpOworCisgICAgYXV0byByZXBhaW50UmVjdCA9IExheW91dFJlY3QobV92
aWV3Qm94VHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkubWFw
UmVjdChib3JkZXJCb3hSZWN0KCkpKTsKKyAgICByZXR1cm4gY29tcHV0ZVJlY3QocmVwYWludFJl
Y3QsIHJlcGFpbnRDb250YWluZXIsIGNvbnRleHQpOworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6
OmNvbXB1dGVUcmFuc2Zvcm1hdGlvbk1hdHJpY2VzKCkKK3sKKyAgICAvLyBDb21wdXRlIFNWRyB2
aWV3Qm94IHRyYW5zZm9ybWF0aW9uIGFnYWluc3QgdW5zY2FsZWQgdmlld3BvcnQuCisgICAgYXV0
byB2aWV3cG9ydFNpemUgPSBjdXJyZW50Vmlld3BvcnRTaXplKCk7CisgICAgYXV0byB6b29tID0g
c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CisgICAgaWYgKHpvb20gIT0gMSkKKyAgICAgICAgdmll
d3BvcnRTaXplLnNjYWxlKDEuMCAvIHpvb20pOworICAgIG1fdmlld0JveFRyYW5zZm9ybSA9IHN2
Z1NWR0VsZW1lbnQoKS52aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHZpZXdwb3J0U2l6ZS53aWR0aCgp
LCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpOworCisgICAgLy8gQ29tcHV0ZSB0b3RhbCB0cmFuc2Zv
cm1hdGlvbiBtYXRyaXgsIHRha2luZyBib3JkZXIgLyBwYWRkaW5nIChmb3IgY2hpbGQgcmVuZGVy
ZXJzIHRoYXQgZG9uJ3QgZm9sbG93IHRoZSBDU1MgYm94IG1vZGVsIG9iamVjdCEpICsgcGFubmlu
ZyBpbnRvIGFjY291bnQuCisgICAgYXV0byBwYW5uaW5nID0gc3ZnU1ZHRWxlbWVudCgpLmN1cnJl
bnRUcmFuc2xhdGVWYWx1ZSgpOworICAgIGF1dG8gY29udGVudExvY2F0aW9uID0gY29udGVudEJv
eExvY2F0aW9uKCk7CisKKyAgICBtX3N1cHBsZW1lbnRhbExvY2FsVG9QYXJlbnRUcmFuc2Zvcm0u
bWFrZUlkZW50aXR5KCk7CisgICAgbV9zdXBwbGVtZW50YWxMb2NhbFRvUGFyZW50VHJhbnNmb3Jt
LnRyYW5zbGF0ZShwYW5uaW5nLngoKSArIGNvbnRlbnRMb2NhdGlvbi54KCksIHBhbm5pbmcueSgp
ICsgY29udGVudExvY2F0aW9uLnkoKSk7CisgICAgbV9zdXBwbGVtZW50YWxMb2NhbFRvUGFyZW50
VHJhbnNmb3JtLnNjYWxlKHpvb20pOworCisgICAgaWYgKCFtX3ZpZXdCb3hUcmFuc2Zvcm0uaXNJ
ZGVudGl0eSgpKQorICAgICAgICBtX3N1cHBsZW1lbnRhbExvY2FsVG9QYXJlbnRUcmFuc2Zvcm0u
bXVsdGlwbHkobV92aWV3Qm94VHJhbnNmb3JtKTsKK30KKworYm9vbCBSZW5kZXJTVkdSb290Ojpu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0
aW9uKQoreworICAgIGF1dG8gYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsg
bG9jYXRpb24oKTsKKworICAgIEFTU0VSVChTVkdIaXRUZXN0Q3ljbGVEZXRlY3Rpb25TY29wZTo6
aXNFbXB0eSgpKTsKKworICAgIGF1dG8gdmlzdWFsT3ZlcmZsb3dSZWN0ID0gdGhpcy0+dmlzdWFs
T3ZlcmZsb3dSZWN0KCk7CisgICAgdmlzdWFsT3ZlcmZsb3dSZWN0Lm1vdmVCeShhZGp1c3RlZExv
Y2F0aW9uKTsKKworICAgIC8vIFRlc3QgU1ZHIGNvbnRlbnQgaWYgdGhlIHBvaW50IGlzIGluIG91
ciBjb250ZW50IGJveCBvciBpdCBpcyBpbnNpZGUgdGhlIHZpc3VhbE92ZXJmbG93UmVjdCBhbmQg
dGhlIG92ZXJmbG93IGlzIHZpc2libGUuCisgICAgaWYgKGNvbnRlbnRCb3hSZWN0KCkuY29udGFp
bnMoYWRqdXN0ZWRMb2NhdGlvbikgfHwgKCFzaG91bGRBcHBseVZpZXdwb3J0Q2xpcCgpICYmIGxv
Y2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyh2aXN1YWxPdmVyZmxvd1JlY3QpKSkgeworICAg
ICAgICAvLyBDaGVjayBraWRzIGZpcnN0LgorICAgICAgICBmb3IgKGF1dG8qIGNoaWxkID0gbGFz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgeworICAg
ICAgICAgICAgaWYgKCFjaGlsZC0+aGFzTGF5ZXIoKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVx
dWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBhZGp1c3RlZExvY2F0aW9uLCBoaXRU
ZXN0QWN0aW9uKSkgeworICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0
LCBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2Nh
dGlvbikpOworICAgICAgICAgICAgICAgIEFTU0VSVChTVkdIaXRUZXN0Q3ljbGVEZXRlY3Rpb25T
Y29wZTo6aXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIElmIHdlIGRpZG4ndCBlYXJseSBleGl0
IGFib3ZlLCB3ZSd2ZSBqdXN0IGhpdCB0aGUgY29udGFpbmVyIDxzdmc+IGVsZW1lbnQuIFVubGlr
ZSBTVkcgMS4xLCAybmQgRWRpdGlvbiBhbGxvd3MgY29udGFpbmVyIGVsZW1lbnRzIHRvIGJlIGhp
dC4KKyAgICBpZiAoKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBo
aXRUZXN0QWN0aW9uID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgdmlzaWJsZVRv
SGl0VGVzdGluZyhyZXF1ZXN0KSkgeworICAgICAgICBMYXlvdXRSZWN0IGJvdW5kc1JlY3QoYWRq
dXN0ZWRMb2NhdGlvbiwgc2l6ZSgpKTsKKyAgICAgICAgaWYgKGxvY2F0aW9uSW5Db250YWluZXIu
aW50ZXJzZWN0cyhib3VuZHNSZWN0KSkgeworICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkg
LSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpKTsKKyAgICAgICAgICAgIGlmIChyZXN1
bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChub2RlRm9ySGl0VGVzdCgpLCByZXF1ZXN0
LCBsb2NhdGlvbkluQ29udGFpbmVyLCBib3VuZHNSZWN0KSA9PSBIaXRUZXN0UHJvZ3Jlc3M6OlN0
b3ApCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBBU1NFUlQoU1ZHSGl0VGVzdEN5Y2xlRGV0ZWN0aW9uU2NvcGU6OmlzRW1wdHkoKSk7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUm9vdDo6aGFzUmVsYXRpdmVEaW1l
bnNpb25zKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3ZnU1ZHRWxlbWVudCgpLmludHJpbnNpY0hl
aWdodCgpLmlzUGVyY2VudE9yQ2FsY3VsYXRlZCgpIHx8IHN2Z1NWR0VsZW1lbnQoKS5pbnRyaW5z
aWNXaWR0aCgpLmlzUGVyY2VudE9yQ2FsY3VsYXRlZCgpOworfQorCit2b2lkIFJlbmRlclNWR1Jv
b3Q6OmFkZFJlc291cmNlRm9yQ2xpZW50SW52YWxpZGF0aW9uKFJlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyKiByZXNvdXJjZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVzb3VyY2UpOworICAgIC8q
IEZJWE1FOiBbTEJTRV0gUmVuYW1lIGZpbmRUcmVlUm9vdE9iamVjdCAtPiBmaW5kTGVnYWN5VHJl
ZVJvb3RPYmplY3QsIGFuZCByZS1hZGQgZmluZFRyZWVSb290T2JqZWN0IGZvciBSZW5kZXJTVkdS
b290CisgICAgaWYgKGF1dG8qIHN2Z1Jvb3QgPSBTVkdSZW5kZXJTdXBwb3J0OjpmaW5kVHJlZVJv
b3RPYmplY3QoKnJlc291cmNlKSkKKyAgICAgICAgc3ZnUm9vdC0+bV9yZXNvdXJjZXNOZWVkaW5n
VG9JbnZhbGlkYXRlQ2xpZW50cy5hZGQocmVzb3VyY2UpOworICAgICovCit9CisKK0Zsb2F0U2l6
ZSBSZW5kZXJTVkdSb290OjpjdXJyZW50Vmlld3BvcnRTaXplKCkgY29uc3QKK3sKKyAgICBGbG9h
dFNpemUgcmVzdWx0ID0gY29udGVudEJveFJlY3QoKS5zaXplKCk7CisgICAgcmVzdWx0LnNldFdp
ZHRoKHJlc3VsdC53aWR0aCgpICsgdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpKTsKKyAgICByZXN1
bHQuc2V0SGVpZ2h0KHJlc3VsdC5oZWlnaHQoKSArIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQo
KSk7CisKKyAgICBpZiAoIWlzRW1iZWRkZWRUaHJvdWdoRnJhbWVDb250YWluaW5nU1ZHRG9jdW1l
bnQoKSkgeworICAgICAgICBhdXRvIHpvb20gPSBzdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKKyAg
ICAgICAgaWYgKHpvb20gIT0gMSkKKyAgICAgICAgICAgIHJlc3VsdC5zY2FsZShzdmdTVkdFbGVt
ZW50KCkuaGFzSW50cmluc2ljV2lkdGgoKSA/IDEgOiB6b29tLCBzdmdTVkdFbGVtZW50KCkuaGFz
SW50cmluc2ljSGVpZ2h0KCkgPyAxIDogem9vbSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCBSZW5kZXJTVkdSb290OjptYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIFRyYW5zZm9ybVN0YXRlJiB0
cmFuc2Zvcm1TdGF0ZSwgT3B0aW9uU2V0PE1hcENvb3JkaW5hdGVzTW9kZT4gbW9kZSwgYm9vbCog
d2FzRml4ZWQpIGNvbnN0Cit7CisgICAgaWYgKHJlcGFpbnRDb250YWluZXIgPT0gdGhpcykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCF2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29u
dGV4dCgpLmlzUGFpbnRPZmZzZXRDYWNoZUVuYWJsZWQoKSk7CisKKyAgICBib29sIGNvbnRhaW5l
clNraXBwZWQ7CisgICAgYXV0byogY29udGFpbmVyID0gdGhpcy0+Y29udGFpbmVyKHJlcGFpbnRD
b250YWluZXIsIGNvbnRhaW5lclNraXBwZWQpOworICAgIGlmICghY29udGFpbmVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBib29sIGlzRml4ZWRQb3MgPSBpc0ZpeGVkUG9zaXRpb25lZCgpOwor
ICAgIC8vIElmIHRoaXMgYm94IGhhcyBhIHRyYW5zZm9ybSwgaXQgYWN0cyBhcyBhIGZpeGVkIHBv
c2l0aW9uIGNvbnRhaW5lciBmb3IgZml4ZWQgZGVzY2VuZGFudHMsCisgICAgLy8gYW5kIG1heSBp
dHNlbGYgYWxzbyBiZSBmaXhlZCBwb3NpdGlvbi4gU28gcHJvcGFnYXRlICdmaXhlZCcgdXAgb25s
eSBpZiB0aGlzIGJveCBpcyBmaXhlZCBwb3NpdGlvbi4KKyAgICBpZiAoaGFzVHJhbnNmb3JtKCkg
JiYgIWlzRml4ZWRQb3MpCisgICAgICAgIG1vZGUucmVtb3ZlKElzRml4ZWQpOworICAgIGVsc2Ug
aWYgKGlzRml4ZWRQb3MpCisgICAgICAgIG1vZGUuYWRkKElzRml4ZWQpOworCisgICAgaWYgKHdh
c0ZpeGVkKQorICAgICAgICAqd2FzRml4ZWQgPSBtb2RlLmNvbnRhaW5zKElzRml4ZWQpOworCisg
ICAgYm9vbCBjb21wdXRpbmdDVE1PclNjcmVlbkNUTSA9IGZhbHNlOworICAgIC8vIEZJWE1FOiBb
TEJTRV0gVXBzdHJlYW0gVHJhbnNmb3JtU3RhdGUgY2hhbmdlcworICAgIC8vIGJvb2wgY29tcHV0
aW5nQ1RNT3JTY3JlZW5DVE0gPSB0cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1NYXRyaXhUcmFja2lu
ZygpICE9IFRyYW5zZm9ybVN0YXRlOjpEb05vdFRyYWNrVHJhbnNmb3JtTWF0cml4OworICAgIGF1
dG8gY29udGFpbmVyT2Zmc2V0ID0gb2Zmc2V0RnJvbUNvbnRhaW5lcigqY29udGFpbmVyLCBMYXlv
dXRQb2ludCh0cmFuc2Zvcm1TdGF0ZS5tYXBwZWRQb2ludCgpKSk7CisKKyAgICBib29sIHByZXNl
cnZlM0QgPSBtb2RlICYgVXNlVHJhbnNmb3JtcyAmJiAoY29udGFpbmVyLT5zdHlsZSgpLnByZXNl
cnZlczNEKCkgfHwgc3R5bGUoKS5wcmVzZXJ2ZXMzRCgpKTsKKworICAgIGlmIChtb2RlICYgVXNl
VHJhbnNmb3JtcyAmJiBzaG91bGRVc2VUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lcikp
IHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdDsKKyAgICAgICAgZ2V0VHJhbnNmb3Jt
RnJvbUNvbnRhaW5lcihjb250YWluZXIsIGNvbnRhaW5lck9mZnNldCwgdCk7CisKKyAgICAgICAg
LyogRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBUcmFuc2Zvcm1TdGF0ZSBjaGFuZ2VzCisgICAgICAg
IGlmICh0cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1NYXRyaXhUcmFja2luZygpID09IFRyYW5zZm9y
bVN0YXRlOjpUcmFja1NWR0NUTU1hdHJpeCkgeworICAgICAgICAgICAgYXV0byBvZmZzZXQgPSB0
b0xheW91dFNpemUoY29udGVudEJveExvY2F0aW9uKCkgKyBjb250YWluZXJPZmZzZXQpOworICAg
ICAgICAgICAgdC50cmFuc2xhdGVSaWdodCgtb2Zmc2V0LndpZHRoKCksIC1vZmZzZXQuaGVpZ2h0
KCkpOworICAgICAgICB9CisgICAgICAgICovCisKKyAgICAgICAgdHJhbnNmb3JtU3RhdGUuYXBw
bHlUcmFuc2Zvcm0odCwgcHJlc2VydmUzRCA/IFRyYW5zZm9ybVN0YXRlOjpBY2N1bXVsYXRlVHJh
bnNmb3JtIDogVHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm0pOworICAgIH0gZWxzZQor
ICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKGNvbnRhaW5lck9mZnNldC53aWR0aCgpLCBjb250
YWluZXJPZmZzZXQuaGVpZ2h0KCksIHByZXNlcnZlM0QgPyBUcmFuc2Zvcm1TdGF0ZTo6QWNjdW11
bGF0ZVRyYW5zZm9ybSA6IFRyYW5zZm9ybVN0YXRlOjpGbGF0dGVuVHJhbnNmb3JtKTsKKworICAg
IGlmIChjb250YWluZXJTa2lwcGVkKSB7CisgICAgICAgIC8vIFRoZXJlIGNhbid0IGJlIGEgdHJh
bnNmb3JtIGJldHdlZW4gcmVwYWludENvbnRhaW5lciBhbmQgY29udGFpbmVyLCBiZWNhdXNlIHRy
YW5zZm9ybXMgY3JlYXRlIGNvbnRhaW5lcnMsIHNvIGl0IHNob3VsZCBiZSBzYWZlCisgICAgICAg
IC8vIHRvIGp1c3Qgc3VidHJhY3QgdGhlIGRlbHRhIGJldHdlZW4gdGhlIHJlcGFpbnRDb250YWlu
ZXIgYW5kIGNvbnRhaW5lci4KKyAgICAgICAgYXV0byBjb250YWluZXJPZmZzZXQgPSByZXBhaW50
Q29udGFpbmVyLT5vZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIoKmNvbnRhaW5lcik7CisgICAg
ICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUoLWNvbnRhaW5lck9mZnNldC53aWR0aCgpLCAtY29udGFp
bmVyT2Zmc2V0LmhlaWdodCgpLCBwcmVzZXJ2ZTNEID8gVHJhbnNmb3JtU3RhdGU6OkFjY3VtdWxh
dGVUcmFuc2Zvcm0gOiBUcmFuc2Zvcm1TdGF0ZTo6RmxhdHRlblRyYW5zZm9ybSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBtb2RlLnJlbW92ZShBcHBseUNvbnRhaW5lckZsaXApOwor
CisgICAgaWYgKGNvbXB1dGluZ0NUTU9yU2NyZWVuQ1RNKSB7CisgICAgICAgIC8vIFRoZSBDU1Mg
bGVuZ3Rocy9udW1iZXJzIGFib3ZlIHRoZSBTVkcgZnJhZ21lbnQgKGUuZy4gaW4gSFRNTCkgZG8g
bm90IGFkaGVyZSB0byBTVkcgem9vbSBydWxlcy4KKyAgICAgICAgLy8gQWxsIGxlbmd0aCBpbmZv
cm1hdGlvbiAoZS5nLiB0b3Avd2lkdGgvLi4uKSBpbmNsdWRlIHRoZSBzY2FsaW5nIGZhY3Rvci4g
SW4gU1ZHIG5vIGxlbmd0aHMgYXJlCisgICAgICAgIC8vIHNjYWxlZCBidXQgYSBnbG9iYWwgc2Nh
bGluZyBvcGVyYXRpb24gaXMgaW5jbHVkZWQgaW4gdGhlIHRyYW5zZm9ybSBzdGF0ZS4KKyAgICAg
ICAgLy8gRm9yIGdldENUTS9nZXRTY3JlZW5DVE0gY29tcHV0YXRpb25zIHRoZSByZXN1bHQgbXVz
dCBiZSBpbmRlcGVuZGVudCBvZiB0aGUgcGFnZSB6b29tIGZhY3Rvci4KKyAgICAgICAgLy8gVG8g
Y29tcHV0ZSB0aGVzZSBtYXRyaWNlcyB3aXRoaW4gYSBub24tU1ZHIGNvbnRleHQgKGUuZy4gU1ZH
IGVtYmVkZGVkIGluIEhUTUwgLS0gaW5saW5lIFNWRykKKyAgICAgICAgLy8gdGhlIHNjYWxpbmcg
bmVlZHMgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBDU1MgdHJhbnNmb3JtIHN0YXRlLgorICAgICAg
ICBUcmFuc2Zvcm1TdGF0ZSB0cmFuc2Zvcm1TdGF0ZUFib3ZlU1ZHRnJhZ21lbnQodHJhbnNmb3Jt
U3RhdGUuZGlyZWN0aW9uKCksIHRyYW5zZm9ybVN0YXRlLm1hcHBlZFBvaW50KCkpOworICAgICAg
ICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFRyYW5zZm9ybVN0YXRlIGNoYW5nZXMKKyAgICAg
ICAgLy8gdHJhbnNmb3JtU3RhdGVBYm92ZVNWR0ZyYWdtZW50LnNldFRyYW5zZm9ybU1hdHJpeFRy
YWNraW5nKHRyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybU1hdHJpeFRyYWNraW5nKCkpOworICAgICAg
ICBjb250YWluZXItPm1hcExvY2FsVG9Db250YWluZXIocmVwYWludENvbnRhaW5lciwgdHJhbnNm
b3JtU3RhdGVBYm92ZVNWR0ZyYWdtZW50LCBtb2RlLCB3YXNGaXhlZCk7CisKKyAgICAgICAgLyog
RklYTUU6IFtMQlNFXSBVcHN0cmVhbSBUcmFuc2Zvcm1TdGF0ZSBjaGFuZ2VzCisgICAgICAgIGlm
ICh0cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1NYXRyaXhUcmFja2luZygpID09IFRyYW5zZm9ybVN0
YXRlOjpUcmFja1NWR1NjcmVlbkNUTU1hdHJpeCkgeworICAgICAgICAgICAgYXV0byBzY2FsZSA9
IDEuMCAvIHN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOworICAgICAgICAgICAgaWYgKGF1dG8gdHJh
bnNmb3JtQWJvdmVTVkdGcmFnbWVudCA9IHRyYW5zZm9ybVN0YXRlQWJvdmVTVkdGcmFnbWVudC5y
ZWxlYXNlVHJhY2tlZFRyYW5zZm9ybSgpKSB7CisgICAgICAgICAgICAgICAgRmxvYXRQb2ludCBs
b2NhdGlvbih0cmFuc2Zvcm1BYm92ZVNWR0ZyYWdtZW50LT5lKCksIHRyYW5zZm9ybUFib3ZlU1ZH
RnJhZ21lbnQtPmYoKSk7CisgICAgICAgICAgICAgICAgbG9jYXRpb24uc2NhbGUoc2NhbGUpOwor
CisgICAgICAgICAgICAgICAgYXV0byB1bnNjYWxlZFRyYW5zZm9ybSA9IFRyYW5zZm9ybWF0aW9u
TWF0cml4KCkuc2NhbGUoc2NhbGUpICogKnRyYW5zZm9ybUFib3ZlU1ZHRnJhZ21lbnQ7CisgICAg
ICAgICAgICAgICAgdW5zY2FsZWRUcmFuc2Zvcm0uc2V0RShsb2NhdGlvbi54KCkpOworICAgICAg
ICAgICAgICAgIHVuc2NhbGVkVHJhbnNmb3JtLnNldEYobG9jYXRpb24ueSgpKTsKKyAgICAgICAg
ICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5hcHBseVRyYW5zZm9ybSh1bnNjYWxlZFRyYW5zZm9ybSwg
cHJlc2VydmUzRCA/IFRyYW5zZm9ybVN0YXRlOjpBY2N1bXVsYXRlVHJhbnNmb3JtIDogVHJhbnNm
b3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBSZXNwZWN0IHNjcm9sbCBvZmZzZXQsIGFmdGVyIG1hcHBpbmcgdG8gY29udGFpbmVyIGNv
b3JkaW5hdGVzLgorICAgICAgICAgICAgaWYgKFJlZlB0cjxGcmFtZVZpZXc+IHZpZXcgPSBkb2N1
bWVudCgpLnZpZXcoKSkgeworICAgICAgICAgICAgICAgIExheW91dFBvaW50IHNjcm9sbFBvc2l0
aW9uID0gdmlldy0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICBzY3JvbGxQb3Np
dGlvbi5zY2FsZShzY2FsZSk7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RhdGUubW92ZSgt
dG9MYXlvdXRTaXplKHNjcm9sbFBvc2l0aW9uKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0q
LworICAgIH0gZWxzZQorICAgICAgICBjb250YWluZXItPm1hcExvY2FsVG9Db250YWluZXIocmVw
YWludENvbnRhaW5lciwgdHJhbnNmb3JtU3RhdGUsIG1vZGUsIHdhc0ZpeGVkKTsKK30KKworTGF5
b3V0UmVjdCBSZW5kZXJTVkdSb290OjpvdmVyZmxvd0NsaXBSZWN0KGNvbnN0IExheW91dFBvaW50
JiBsb2NhdGlvbiwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50LCBPdmVybGF5U2Ny
b2xsYmFyU2l6ZVJlbGV2YW5jeSwgUGFpbnRQaGFzZSkgY29uc3QKK3sKKyAgICBhdXRvIGNsaXBS
ZWN0ID0gYm9yZGVyQm94UmVjdEluRnJhZ21lbnQoZnJhZ21lbnQpOworICAgIGNsaXBSZWN0LnNl
dExvY2F0aW9uKGxvY2F0aW9uICsgY2xpcFJlY3QubG9jYXRpb24oKSArIExheW91dFNpemUoYm9y
ZGVyTGVmdCgpLCBib3JkZXJUb3AoKSkpOworICAgIGNsaXBSZWN0LnNldFNpemUoY2xpcFJlY3Qu
c2l6ZSgpIC0gTGF5b3V0U2l6ZShib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpLCBib3JkZXJU
b3AoKSArIGJvcmRlckJvdHRvbSgpKSk7CisKKyAgICBpZiAoIWlzRW1iZWRkZWRUaHJvdWdoRnJh
bWVDb250YWluaW5nU1ZHRG9jdW1lbnQoKSkgeworICAgICAgICBhdXRvIHpvb20gPSBzdHlsZSgp
LmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgaWYgKHpvb20gIT0gMSkgeworICAgICAgICAgICAg
Y29uc3QgYXV0byYgc3ZnU1ZHRWxlbWVudCA9IGRvd25jYXN0PFJlbmRlclNWR1Jvb3Q+KCp0aGlz
KS5zdmdTVkdFbGVtZW50KCk7CisgICAgICAgICAgICBjbGlwUmVjdC5zY2FsZShzdmdTVkdFbGVt
ZW50Lmhhc0ludHJpbnNpY1dpZHRoKCkgPyAxIDogem9vbSwgc3ZnU1ZHRWxlbWVudC5oYXNJbnRy
aW5zaWNIZWlnaHQoKSA/IDEgOiB6b29tKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBjbGlwUmVjdDsKK30KKwordm9pZCBSZW5kZXJTVkdSb290OjphcHBseVRyYW5zZm9ybShUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNv
bnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gsIE9wdGlvblNldDxSZW5kZXJTdHlsZTo6VHJhbnNm
b3JtT3BlcmF0aW9uT3B0aW9uPiBvcHRpb25zKSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTSh0
cmFuc2Zvcm0pOworICAgIFVOVVNFRF9QQVJBTShzdHlsZSk7CisgICAgVU5VU0VEX1BBUkFNKGJv
dW5kaW5nQm94KTsKKyAgICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7CisgICAgLy8gRklYTUU6IFtM
QlNFXSBVcHN0cmVhbSBTVkdSZW5kZXJTdXBwb3J0IGNoYW5nZXMKKyAgICAvLyBTVkdSZW5kZXJT
dXBwb3J0OjphcHBseVRyYW5zZm9ybSgqdGhpcywgdHJhbnNmb3JtLCBzdHlsZSwgYm91bmRpbmdC
b3gsIHN0ZDo6bnVsbG9wdCwgc3RkOjpudWxsb3B0LCBvcHRpb25zKTsKK30KKwordm9pZCBSZW5k
ZXJTVkdSb290OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IExh
eW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29uc3QKK3sKKyAgICBhdXRvIGxvY2FsUmVj
dCA9IExheW91dFJlY3QobV9zdXBwbGVtZW50YWxMb2NhbFRvUGFyZW50VHJhbnNmb3JtLmludmVy
c2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkubWFwUmVjdChib3JkZXJCb3hSZWN0KCkp
KTsKKyAgICByZWN0cy5hcHBlbmQoc25hcHBlZEludFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQsIGxv
Y2FsUmVjdC5zaXplKCkpKTsKK30KKwordm9pZCBSZW5kZXJTVkdSb290OjphYnNvbHV0ZVF1YWRz
KFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCogd2FzRml4ZWQpIGNvbnN0Cit7CisgICAg
UmVuZGVyRnJhZ21lbnRlZEZsb3cqIGZyYWdtZW50ZWRGbG93ID0gZW5jbG9zaW5nRnJhZ21lbnRl
ZEZsb3coKTsKKyAgICBpZiAoZnJhZ21lbnRlZEZsb3cgJiYgZnJhZ21lbnRlZEZsb3ctPmFic29s
dXRlUXVhZHNGb3JCb3gocXVhZHMsIHdhc0ZpeGVkLCB0aGlzKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byBsb2NhbFJlY3QgPSBGbG9hdFJlY3QobV9zdXBwbGVtZW50YWxMb2NhbFRvUGFy
ZW50VHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkubWFwUmVj
dChib3JkZXJCb3hSZWN0KCkpKTsKKyAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVh
ZChsb2NhbFJlY3QsIFVzZVRyYW5zZm9ybXMsIHdhc0ZpeGVkKSk7Cit9CisKK30KKworI2VuZGlm
IC8vIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzczMTNkMDc5YmRlZDRlYzZm
ZTA1ZGIwMzUxY2NkNjljYzg2Nzk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIxIElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyUmVwbGFjZWQuaCIKKy8vIEZJWE1FOiBb
TEJTRV0gVXBzdHJlYW0gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbgorLy8gI2luY2x1ZGUgIlNW
R0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBBZmZpbmVUcmFuc2Zvcm07CitjbGFzcyBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjsKK2Ns
YXNzIFNWR1NWR0VsZW1lbnQ7CisKK2NsYXNzIFJlbmRlclNWR1Jvb3QgZmluYWwgOiBwdWJsaWMg
UmVuZGVyUmVwbGFjZWQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoUmVuZGVyU1ZHUm9v
dCk7CitwdWJsaWM6CisgICAgUmVuZGVyU1ZHUm9vdChTVkdTVkdFbGVtZW50JiwgUmVuZGVyU3R5
bGUmJik7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHUm9vdCgpOworCisgICAgU1ZHU1ZHRWxlbWVu
dCYgc3ZnU1ZHRWxlbWVudCgpIGNvbnN0OworICAgIEZsb2F0U2l6ZSBjdXJyZW50Vmlld3BvcnRT
aXplKCkgY29uc3Q7CisKKyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHZpZXdCb3hUcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBtX3ZpZXdCb3hUcmFuc2Zvcm07IH0KKyAgICBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHN1cHBsZW1lbnRhbExvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdCB7
IHJldHVybiBtX3N1cHBsZW1lbnRhbExvY2FsVG9QYXJlbnRUcmFuc2Zvcm07IH0KKworICAgIGJv
b2wgaXNFbWJlZGRlZFRocm91Z2hTVkdJbWFnZSgpIGNvbnN0OworICAgIGJvb2wgaXNFbWJlZGRl
ZFRocm91Z2hGcmFtZUNvbnRhaW5pbmdTVkdEb2N1bWVudCgpIGNvbnN0OworCisgICAgdm9pZCBj
b21wdXRlSW50cmluc2ljUmF0aW9JbmZvcm1hdGlvbihGbG9hdFNpemUmIGludHJpbnNpY1NpemUs
IGRvdWJsZSYgaW50cmluc2ljUmF0aW8pIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBpc0xh
eW91dFNpemVDaGFuZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc0xheW91dFNpemVDaGFuZ2VkOyB9
CisgICAgYm9vbCBkaWRUcmFuc2Zvcm1Ub1Jvb3RVcGRhdGUoKSBjb25zdCB7IHJldHVybiBtX2Rp
ZFRyYW5zZm9ybVRvUm9vdFVwZGF0ZTsgfQorICAgIGJvb2wgaXNJbkxheW91dCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5MYXlvdXQ7IH0KKworICAgIEludFNpemUgY29udGFpbmVyU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGFpbmVyU2l6ZTsgfQorICAgIHZvaWQgc2V0Q29udGFpbmVyU2l6ZShj
b25zdCBJbnRTaXplJiBjb250YWluZXJTaXplKSB7IG1fY29udGFpbmVyU2l6ZSA9IGNvbnRhaW5l
clNpemU7IH0KKworICAgIGJvb2wgaGFzUmVsYXRpdmVEaW1lbnNpb25zKCkgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICAvLyBUaGUgZmxhZyBpcyBjbGVhcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFj
aCBsYXlvdXQoKSBwYXNzLiBFbGVtZW50cyB0aGVuIGNhbGwgdGhpcworICAgIC8vIG1ldGhvZCBk
dXJpbmcgbGF5b3V0IHdoZW4gdGhleSBhcmUgaW52YWxpZGF0ZWQgYnkgYSBmaWx0ZXIuCisgICAg
c3RhdGljIHZvaWQgYWRkUmVzb3VyY2VGb3JDbGllbnRJbnZhbGlkYXRpb24oUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIqKTsKKworICAgIGJvb2wgc2hvdWxkQXBwbHlWaWV3cG9ydENsaXAoKSBj
b25zdDsKKworICAgIC8vIEZJWE1FOiBbTEJTRV0gTWFyayBmaW5hbCwgYWRkIGFwcGx5VHJhbnNm
b3JtIHRvIFJlbmRlckxheWVyTW9kZWxPYmplY3QKKyAgICB2b2lkIGFwcGx5VHJhbnNmb3JtKFRy
YW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGbG9hdFJlY3Qm
IGJvdW5kaW5nQm94LCBPcHRpb25TZXQ8UmVuZGVyU3R5bGU6OlRyYW5zZm9ybU9wZXJhdGlvbk9w
dGlvbj4pIGNvbnN0OworCisgICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQorICAgIEZsb2F0UmVjdCBzdHJv
a2VCb3VuZGluZ0JveCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7
IH0KKworICAgIC8vIEZJWE1FOiBbTEJTRV0gTWFyayBmaW5hbCwgYWRkIHJlcGFpbnRCb3VuZGlu
Z0JveCgpIHRvIFJlbmRlck9iamVjdAorICAgIEZsb2F0UmVjdCByZXBhaW50Qm91bmRpbmdCb3go
KSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdCb3Vu
ZGluZ0JveENvbXB1dGF0aW9uCisgICAgICAgIC8vIHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1
dGF0aW9uOjpjb21wdXRlUmVwYWludEJvdW5kaW5nQm94KCp0aGlzKTsKKyAgICAgICAgcmV0dXJu
IG1fc3Ryb2tlQm91bmRpbmdCb3g7CisgICAgfQorCisgICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVy
Zmxvd1JlY3RFcXVpdmFsZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBbTEJT
RV0gVXBzdHJlYW0gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbgorICAgICAgICAvLyByZXR1cm4g
U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVZpc3VhbE92ZXJmbG93UmVjdCgqdGhp
cyk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IHZvaWQgZWxlbWVudCgpIGNvbnN0ID0gZGVsZXRlOworCisgICAgYm9vbCBpc1NWR1Jvb3QoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgY29uc3QgY2hhciogcmVuZGVyTmFt
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJSZW5kZXJTVkdSb290IjsgfQorICAgIGJvb2wg
cmVxdWlyZXNMYXllcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8v
IFRvIHByZXZlbnQgY2VydGFpbiBsZWdhY3kgY29kZSBwYXRocyB0byBoaXQgYXNzZXJ0aW9ucyBp
biBkZWJ1ZyBidWlsZHMsIHdoZW4gc3dpdGNoaW5nIG9mZiBMQlNFIChkdXJpbmcgdGhlIHRlYXJk
b3duIG9mIHRoZSBMQlNFIHRyZWUpLgorICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBjb21w
dXRlRmxvYXRWaXNpYmxlUmVjdEluQ29udGFpbmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPYmplY3QqLCBWaXNpYmxlUmVjdENvbnRleHQpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQorCisgICAgTGF5b3V0VW5pdCBjb21wdXRlUmVwbGFjZWRM
b2dpY2FsV2lkdGgoU2hvdWxkQ29tcHV0ZVByZWZlcnJlZCAgPSBDb21wdXRlQWN0dWFsKSBjb25z
dCBvdmVycmlkZTsKKyAgICBMYXlvdXRVbml0IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQo
c3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBlc3RpbWF0ZWRVc2VkV2lkdGggPSBzdGQ6Om51bGxv
cHQpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgbGF5b3V0KCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIG92ZXJyaWRlOworICAgIHZv
aWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBvdmVycmlkZTsK
KyAgICB2b2lkIHBhaW50Q29udGVudHMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsK
KworICAgIHZvaWQgd2lsbEJlRGVzdHJveWVkKCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGluc2Vy
dGVkSW50b1RyZWUoSXNJbnRlcm5hbE1vdmUpIG92ZXJyaWRlOworICAgIHZvaWQgd2lsbEJlUmVt
b3ZlZEZyb21UcmVlKElzSW50ZXJuYWxNb3ZlKSBvdmVycmlkZTsKKworICAgIHZvaWQgc3R5bGVE
aWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92
ZXJyaWRlOworICAgIHZvaWQgdXBkYXRlTGF5ZXJJbmZvcm1hdGlvbigpOworICAgIHZvaWQgdXBk
YXRlRnJvbVN0eWxlKCkgb3ZlcnJpZGU7CisKKyAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBG
bG9hdFBvaW50JikgY29uc3Q7CisgICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBv
aW50JikgY29uc3Q7CisgICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWlu
ZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIGNvbXB1dGVUcmFuc2Zvcm1hdGlvbk1hdHJpY2VzKCk7CisK
KyAgICBMYXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0
aW9uLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogPSBudWxscHRyLCBPdmVybGF5U2Nyb2xsYmFy
U2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBQYWludFBoYXNlID0g
UGFpbnRQaGFzZTo6QmxvY2tCYWNrZ3JvdW5kKSBjb25zdCBmaW5hbDsKKyAgICBMYXlvdXRSZWN0
IGNsaXBwZWRPdmVyZmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdCBvdmVycmlkZTsKKworICAgIHZv
aWQgbWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNl
c3RvckNvbnRhaW5lciwgVHJhbnNmb3JtU3RhdGUmLCBPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNN
b2RlPiwgYm9vbCogd2FzRml4ZWQpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBhYnNvbHV0
ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9h
dFF1YWQ+JiwgYm9vbCogd2FzRml4ZWQpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBjYW5C
ZVNlbGVjdGlvbkxlYWYoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJv
b2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgdm9pZCBidWlsZFZpZXdwb3J0VHJhbnNmb3JtKCk7CisKKyAgICBib29sIG1faW5MYXlvdXQg
eyBmYWxzZSB9OworICAgIGJvb2wgbV9kaWRUcmFuc2Zvcm1Ub1Jvb3RVcGRhdGUgeyBmYWxzZSB9
OworICAgIGJvb2wgbV9pc0xheW91dFNpemVDaGFuZ2VkIHsgZmFsc2UgfTsKKworICAgIEludFNp
emUgbV9jb250YWluZXJTaXplOworICAgIEZsb2F0UmVjdCBtX29iamVjdEJvdW5kaW5nQm94Owor
ICAgIEZsb2F0UmVjdCBtX3N0cm9rZUJvdW5kaW5nQm94OworICAgIEFmZmluZVRyYW5zZm9ybSBt
X3ZpZXdCb3hUcmFuc2Zvcm07CisgICAgQWZmaW5lVHJhbnNmb3JtIG1fc3VwcGxlbWVudGFsTG9j
YWxUb1BhcmVudFRyYW5zZm9ybTsKKyAgICBIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyKj4gbV9yZXNvdXJjZXNOZWVkaW5nVG9JbnZhbGlkYXRlQ2xpZW50czsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNU
KFJlbmRlclNWR1Jvb3QsIGlzU1ZHUm9vdCgpKQorCisjZW5kaWYgLy8gRU5BQkxFKExBWUVSX0JB
U0VEX1NWR19FTkdJTkUpCg==
</data>
<flag name="review"
          id="471487"
          type_id="1"
          status="+"
          setter="rbuis"
    />
          </attachment>
      

    </bug>

</bugzilla>