<?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>234632</bug_id>
          
          <creation_ts>2021-12-23 02:21:56 -0800</creation_ts>
          <short_desc>[LBSE] Introduce SVGBoundingBoxComputation</short_desc>
          <delta_ts>2022-01-12 01:12:16 -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>234524</dependson>
    
    <dependson>234954</dependson>
    
    <dependson>234992</dependson>
          <blocked>90738</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>rbuis</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1826520</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-23 02:21:56 -0800</bug_when>
    <thetext>Introduce &apos;SVGBoundingBoxComputation&apos; a standalone class that implements the SVG2 object bounding box computation algorithm.
This is currently not Web-exposed, but very easy now to expose the algorithm to the Web (e.g. in getBbox() - which takes the new data structure as argument) -- this would improve SVG2 conformance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827221</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-30 02:22:15 -0800</bug_when>
    <thetext>&lt;rdar://problem/87001334&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829125</commentid>
    <comment_count>2</comment_count>
      <attachid>448643</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-07 16:09:12 -0800</bug_when>
    <thetext>Created attachment 448643
Patch, v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829127</commentid>
    <comment_count>3</comment_count>
      <attachid>448644</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-07 16:12:55 -0800</bug_when>
    <thetext>Created attachment 448644
Patch, v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829128</commentid>
    <comment_count>4</comment_count>
      <attachid>448644</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-07 16:17:19 -0800</bug_when>
    <thetext>Comment on attachment 448644
Patch, v1

This patch depends on 234954, postponing r? / EWS until it&apos;s resolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829391</commentid>
    <comment_count>5</comment_count>
      <attachid>448644</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2022-01-10 01:44:42 -0800</bug_when>
    <thetext>Comment on attachment 448644
Patch, v1

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

&gt; Source/WebCore/rendering/svg/SVGBoundingBoxComputation.cpp:45
&gt; +SVGBoundingBoxComputation::~SVGBoundingBoxComputation()

consider = default.

&gt; Source/WebCore/rendering/svg/SVGBoundingBoxComputation.cpp:237
&gt; +    //    defined by the âxâ, âyâ, âwidthâ and âheightâ geometric properties of the element.

Unicode problem?

&gt; Source/WebCore/rendering/svg/SVGBoundingBoxComputation.h:24
&gt; +#include &quot;RenderLayerModelObject.h&quot;

Is forward reference enough here?

&gt; Source/WebCore/rendering/svg/SVGBoundingBoxComputation.h:46
&gt; +        OverrideBoxWithFilterBoxForChildren = 1 &lt;&lt; 7  /* WebKit extension - interal     */

Some internal typos here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829395</commentid>
    <comment_count>6</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-10 01:54:30 -0800</bug_when>
    <thetext>(In reply to Rob Buis from comment #5)
&gt; Comment on attachment 448644 [details]
&gt; Patch, v1
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=448644&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/SVGBoundingBoxComputation.cpp:45
&gt; &gt; +SVGBoundingBoxComputation::~SVGBoundingBoxComputation()
&gt; 
&gt; consider = default.
Done in the header.

&gt; &gt; Source/WebCore/rendering/svg/SVGBoundingBoxComputation.cpp:237
&gt; &gt; +    //    defined by the âxâ, âyâ, âwidthâ and âheightâ geometric properties of the element.
&gt; 
&gt; Unicode problem?
Looks fine with a UTF-8 capable viewer :-) Indeed copy and paste from SVG spec -- I&apos;ll get rid of the non-ASCII quotes to avoid that.

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/SVGBoundingBoxComputation.h:24
&gt; &gt; +#include &quot;RenderLayerModelObject.h&quot;
&gt; 
&gt; Is forward reference enough here?
We store the RenderLayerModelObject as const reference member -- so we need to know the class size at compile time here -- therefore an include is necessary.

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/SVGBoundingBoxComputation.h:46
&gt; &gt; +        OverrideBoxWithFilterBoxForChildren = 1 &lt;&lt; 7  /* WebKit extension - interal     */
&gt; 
&gt; Some internal typos here.
Fixed, apparently a common typo in WebKit:
WebKitVanilla % git grep interal | wc -l
      15

Will upload a new version, so we can hear EWS opinion about the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829396</commentid>
    <comment_count>7</comment_count>
      <attachid>448727</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-10 01:58:46 -0800</bug_when>
    <thetext>Created attachment 448727
Patch, v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829399</commentid>
    <comment_count>8</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-10 02:33:25 -0800</bug_when>
    <thetext>Oops, this cannot compile yet: it depends on 234992.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829425</commentid>
    <comment_count>9</comment_count>
      <attachid>448736</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-10 05:16:02 -0800</bug_when>
    <thetext>Created attachment 448736
Patch, v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829446</commentid>
    <comment_count>10</comment_count>
      <attachid>448736</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2022-01-10 06:38:33 -0800</bug_when>
    <thetext>Comment on attachment 448736
Patch, v3

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

&gt; Source/WebCore/rendering/svg/SVGBoundingBoxComputation.cpp:80
&gt; +#endif

Likely not needed?

&gt; Source/WebCore/rendering/svg/SVGBoundingBoxComputation.cpp:132
&gt; +    auto transformationMatrixFromChild = [](const RenderLayerModelObject&amp; child) -&gt; std::optional&lt;TransformationMatrix&gt; {

Much more common to write lambda&apos;s like &quot;[] (...&quot;.

&gt; Source/WebCore/rendering/svg/SVGBoundingBoxComputation.cpp:153
&gt; +            return;

Cool logic ;)

&gt; Source/WebCore/rendering/svg/SVGBoundingBoxComputation.cpp:221
&gt; +        box.intersect(FloatRect(overflowClipRect));

The explicit conversion is likely not needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829758</commentid>
    <comment_count>11</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-11 04:15:39 -0800</bug_when>
    <thetext>(In reply to Rob Buis from comment #10)
&gt; Comment on attachment 448736 [details]
&gt; Patch, v3
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=448736&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/SVGBoundingBoxComputation.cpp:80
&gt; &gt; +#endif
&gt; 
&gt; Likely not needed?
True, debugging leftover.

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/SVGBoundingBoxComputation.cpp:132
&gt; &gt; +    auto transformationMatrixFromChild = [](const RenderLayerModelObject&amp; child) -&gt; std::optional&lt;TransformationMatrix&gt; {
&gt; 
&gt; Much more common to write lambda&apos;s like &quot;[] (...&quot;.
Ok.

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/SVGBoundingBoxComputation.cpp:153
&gt; &gt; +            return;
&gt; 
&gt; Cool logic ;)
? :-)

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/SVGBoundingBoxComputation.cpp:221
&gt; &gt; +        box.intersect(FloatRect(overflowClipRect));
&gt; 
&gt; The explicit conversion is likely not needed.
You&apos;re right, I&apos;ve adapted the code.

Thanks for the reviews Rob, it&apos;s highly appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829773</commentid>
    <comment_count>12</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-11 04:57:59 -0800</bug_when>
    <thetext>Committed r287873 (245917@trunk): &lt;https://commits.webkit.org/245917@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829896</commentid>
    <comment_count>13</comment_count>
      <attachid>448736</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-01-11 13:03:28 -0800</bug_when>
    <thetext>Comment on attachment 448736
Patch, v3

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

&gt;&gt;&gt; Source/WebCore/rendering/svg/SVGBoundingBoxComputation.cpp:132
&gt;&gt;&gt; +    auto transformationMatrixFromChild = [](const RenderLayerModelObject&amp; child) -&gt; std::optional&lt;TransformationMatrix&gt; {
&gt;&gt; 
&gt;&gt; Much more common to write lambda&apos;s like &quot;[] (...&quot;.
&gt; 
&gt; Ok.

I thought same as you, Rob, but Yusuke told me I was wrong about this, and we had agreed on &quot;[](...&quot;; I keep forgetting to do that. I am annoyed we have both styles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829899</commentid>
    <comment_count>14</comment_count>
      <attachid>448736</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2022-01-11 13:27:09 -0800</bug_when>
    <thetext>Comment on attachment 448736
Patch, v3

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

&gt;&gt;&gt;&gt; Source/WebCore/rendering/svg/SVGBoundingBoxComputation.cpp:132
&gt;&gt;&gt;&gt; +    auto transformationMatrixFromChild = [](const RenderLayerModelObject&amp; child) -&gt; std::optional&lt;TransformationMatrix&gt; {
&gt;&gt;&gt; 
&gt;&gt;&gt; Much more common to write lambda&apos;s like &quot;[] (...&quot;.
&gt;&gt; 
&gt;&gt; Ok.
&gt; 
&gt; I thought same as you, Rob, but Yusuke told me I was wrong about this, and we had agreed on &quot;[](...&quot;; I keep forgetting to do that. I am annoyed we have both styles!

Right, I did a quick grep, and there seemed to be more of the &apos;[] (foo&quot; kind, so that is what I suggested. Maybe we can have a (style) rule for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830036</commentid>
    <comment_count>15</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-12 01:12:16 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #13)
&gt; &gt;&gt; 
&gt; &gt;&gt; Much more common to write lambda&apos;s like &quot;[] (...&quot;.
&gt; &gt; 
&gt; &gt; Ok.
&gt; 
&gt; I thought same as you, Rob, but Yusuke told me I was wrong about this, and
&gt; we had agreed on &quot;[](...&quot;; I keep forgetting to do that. I am annoyed we
&gt; have both styles!

Thanks for the comment - I&apos;ll move back to &quot;[] (...)&quot;, if I touch the file next time. I agree with Rob, that a style rule would be helpful to ensure future consistency.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448643</attachid>
            <date>2022-01-07 16:09:12 -0800</date>
            <delta_ts>2022-01-07 16:12:51 -0800</delta_ts>
            <desc>Patch, v1</desc>
            <filename>bug-234632-20220107160911.patch</filename>
            <type>text/plain</type>
            <size>35178</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3Nzk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzBhMGUzMGRjYTIyYTJh
MDY3YTBkNWQzMDIzOTY3MDU0MTY2MGJmZC4uNWQ5NDAwMDBhZWJjMGIxZWMyMmFhY2MwMGMwNGZl
YjJmMTNhN2QzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDIyLTAxLTA3ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtMQlNF
XSBJbnRyb2R1Y2UgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0NjMyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS84NzAwMTMzND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBVcHN0cmVhbSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLCBhIHV0aWxpdHkgY2xh
c3MKKyAgICAgICAgaW1wbGVtZW50aW5nIHRoZSBTVkcyICJib3VuZGluZyBib3ggY29tcHV0YXRp
b24iIGFsZ29yaXRobSwKKyAgICAgICAgYXMgc3BlYydlZCBpbiBodHRwczovL3N2Z3dnLm9yZy9z
dmcyLWRyYWZ0L2Nvb3Jkcy5odG1sI0JvdW5kaW5nQm94ZXMuCisKKyAgICAgICAgU1ZHMiBhbHNv
IHNwZWNpZmllcyBhIG5ldyBvcHRpb25hbCBhcmd1bWVudCBmb3IgZ2V0QkJveCgpICYgZnJpZW5k
czoKKyAgICAgICAgRE9NUmVjdCBnZXRCQm94KG9wdGlvbmFsIFNWR0JvdW5kaW5nQm94T3B0aW9u
cyBvcHRpb25zID0ge30pOworCisgICAgICAgIFNWR0JvdW5kaW5nQm94T3B0aW9ucyBjYW4gYmUg
aW1wbGVtZW50ZWQgdXNpbmcgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjoKKyAgICAgICAgZXhw
b3NpbmcgdGhpcyB0byB0aGUgV2ViIGlzIGxlZnQgZm9yIHRoZSBmdXR1cmUsIG9uY2UgbW9yZSBv
ZiBMQlNFIGlzIHJlYWR5LgorCisgICAgICAgIExCU0UgdXRpbGl6ZXMgU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbiB3aGVuZXZlciBhbnkga2luZCBvZiBib3VuZGluZyBib3gKKyAgICAgICAgbmVl
ZHMgdG8gYmUgY29tcHV0ZWQgKG9iamVjdCAvIHN0cm9rZSAvIGRlY29yYXRlZCAoZS5nLiBpbmNs
dWRpbmcgbWFya2VycykuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cywgbm8g
Y2hhbmdlIGluIGJlaGF2aW91ci4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL0xlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpMZWdh
Y3lSZW5kZXJTVkdNb2RlbE9iamVjdDo6dmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVj
dC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnZpc3VhbE92ZXJm
bG93UmVjdEVxdWl2YWxlbnQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpsYXlvdXQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6U1ZHQm91bmRpbmdCb3hDb21wdXRh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjp+U1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdCb3VuZGluZ0Jv
eENvbXB1dGF0aW9uOjpjb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3ggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6aGFuZGxlU2hhcGVPclRleHRP
cklubGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdCb3VuZGluZ0JveENvbXB1dGF0
aW9uOjpoYW5kbGVSb290T3JDb250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbjo6aGFuZGxlRm9yZWlnbk9iamVjdE9ySW1hZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6YWRqdXN0Qm94
Rm9yQ2xpcHBpbmdBbmRFZmZlY3RzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NW
R0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdC
b3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3gpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVJlcGFpbnRC
b3VuZGluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9u
Ojpjb21wdXRlVmlzdWFsT3ZlcmZsb3dSZWN0KToKKwogMjAyMi0wMS0wNyAgTmlrb2xhcyBaaW1t
ZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KIAogICAgICAgICBbTEJTRV0gQmVnaW4g
bGF5ZXItYXdhcmUgUmVuZGVyU1ZHUmVjdCBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRl
eCAxM2VmZTRmZjMzNWEzNGI0MWM0NTE5ODQxNzRkYmY0MjdmOGQ2NjNkLi4wOWJhZDA4NjZlNjA3
MTgxZGFmOGZjOTFlNGRkNTdiNjE5YmZhZDNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjUwMSw2ICsy
NTAxLDcgQEAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0UGF0aC5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJs
ZUNvbnRhaW5lci5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIu
Y3BwCityZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uY3BwCiByZW5kZXJp
bmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRC
b3guY3BwCiByZW5kZXJpbmcvc3ZnL1NWR1BhdGhEYXRhLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDhmN2JjYmRhNDY3YTIx
YWY2MmFiYjE5NTY2NmU1ODliNDc2MmJjN2EuLmQyOGIzODMxZDRmNjkxOTJjYTU2MjAyYzgwMDRl
MTc4M2RjM2M1YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTI0NCw2ICsyNDQsNyBAQAogCQkwODU0QjAxOTEyNTVFNEU2MDBC
OUNERDAgLyogUmVuZGVyU1ZHVGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDg1NEIwMDcxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RleHQu
aCAqLzsgfTsKIAkJMDg1NEIwMUIxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RleHRQYXRo
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU0QjAw
OTEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVGV4dFBhdGguaCAqLzsgfTsKIAkJMDg1NEIw
MUQxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RTcGFuLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU0QjAwQjEyNTVFNEU2MDBCOUNERDAgLyog
UmVuZGVyU1ZHVFNwYW4uaCAqLzsgfTsKKwkJMDg0NEIwMUQxMjU1QjRFNjAwQjlDREQwIC8qIFNW
R0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4NDRCMDFEMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdCb3VuZGluZ0Jv
eENvbXB1dGF0aW9uLmggKi87IH07CiAJCTA4NTRCMDFGMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJ
bmxpbmVGbG93Qm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwODU0QjAwRDEyNTVFNEU2MDBCOUNERDAgLyogU1ZHSW5saW5lRmxvd0JveC5oICovOyB9
OwogCQkwODU0QjAyMTEyNTVFNEU2MDBCOUNERDAgLyogU1ZHSW5saW5lVGV4dEJveC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1NEIwMEYxMjU1RTRF
NjAwQjlDREQwIC8qIFNWR0lubGluZVRleHRCb3guaCAqLzsgfTsKIAkJMDg1NEIwMjMxMjU1RTRF
NjAwQjlDREQwIC8qIFNWR1Jvb3RJbmxpbmVCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTRCMDExMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdSb290
SW5saW5lQm94LmggKi87IH07CkBAIC02MTg1LDYgKzYxODYsOCBAQAogCQkwODU0QjAwODEyNTVF
NEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVGV4dFBhdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHVGV4dFBhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwODU0QjAwOTEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVGV4dFBh
dGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHVGV4dFBhdGgu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1NEIwMEIxMjU1RTRFNjAwQjlDREQw
IC8qIFJlbmRlclNWR1RTcGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlclNWR1RTcGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4MzRCMDBDMTI0
NEU0RTYwMEI5Q0REMCAvKiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwODQ0QjAxRDEyNTVFNEU2MDBCOUNERDAg
LyogU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA4NTRCMDBDMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJbmxpbmVGbG93Qm94LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0lubGluZUZsb3dCb3gu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODU0QjAwRDEyNTVFNEU2MDBCOUNE
RDAgLyogU1ZHSW5saW5lRmxvd0JveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTVkdJbmxpbmVGbG93Qm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NTRC
MDBFMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJbmxpbmVUZXh0Qm94LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0lubGluZVRleHRCb3guY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTg5OTQsNiArMTg5OTcsOCBAQAogCQkJCTA4NTRCMDBCMTI1
NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUU3Bhbi5oICovLAogCQkJCTQzNjcwOEFCMTJEOUNB
NEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAgKi8sCiAJCQkJNDM2
NzA4QUMxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmggKi8s
CisJCQkJMDgzNEIwMEMxMjQ0RTRFNjAwQjlDREQwIC8qIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRp
b24uY3BwICovLAorCQkJCTA4NDRCMDFEMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdCb3VuZGluZ0Jv
eENvbXB1dGF0aW9uLmggKi8sCiAJCQkJMDg1NEIwMEMxMjU1RTRFNjAwQjlDREQwIC8qIFNWR0lu
bGluZUZsb3dCb3guY3BwICovLAogCQkJCTA4NTRCMDBEMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJ
bmxpbmVGbG93Qm94LmggKi8sCiAJCQkJMDg1NEIwMEUxMjU1RTRFNjAwQjlDREQwIC8qIFNWR0lu
bGluZVRleHRCb3guY3BwICovLApAQCAtMzczMTUsNiArMzczMjAsNyBAQAogCQkJCUIyMjI3OTkz
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdBbmltYXRlTW90aW9uRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjIyMjc5OTUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5ODBEMDBCRjIyMDA3MUI3ODIgLyog
U1ZHQW5pbWF0aW9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDg0NEIwMUQxMjU1QjRF
NjAwQjlDREQwIC8qIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCUIyMjI3OTlDMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDaXJjbGVFbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMjIyNzk5RjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQ2xpcFBhdGhFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlBNTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9MZWdhY3lSZW5kZXJTVkdNb2RlbE9i
amVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9MZWdhY3lSZW5kZXJTVkdNb2Rl
bE9iamVjdC5oCmluZGV4IDcxOWQ4YmQyZDg0MDYxMDg5YWU5OTA3ZjkzOTYxNTA5Njc3ZGMwZmUu
LmI2ZjBlMzE3ZTY0MzkzYTI1YWRhODRhYTMwNjUwM2RhZjBiN2YyYTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL0xlZ2FjeVJlbmRlclNWR01vZGVsT2Jq
ZWN0LmgKQEAgLTYyLDEwICs2Miw2IEBAIHB1YmxpYzoKIAogICAgIFNWR0VsZW1lbnQmIGVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxTVkdFbGVtZW50Pihub2RlRm9yTm9uQW5vbnlt
b3VzKCkpOyB9CiAKLSAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb24KLSAgICAvLyBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxl
bnQoKSBjb25zdCB7IHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlVmlz
dWFsT3ZlcmZsb3dSZWN0KCp0aGlzKTsgfQotICAgIExheW91dFJlY3QgdmlzdWFsT3ZlcmZsb3dS
ZWN0RXF1aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFJlY3QoKTsgfQotCiBwcm90ZWN0
ZWQ6CiAgICAgTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QoU1ZHRWxlbWVudCYsIFJlbmRlclN0
eWxlJiYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR01vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmgKaW5kZXggZGJkYmUyMWNlNTZmMmYzMDJhZWM3YzU5OGE1OWY0NDUxZjM2
OGMwYS4uNzkyNGNmOGRjNWYxNjE3ODc3M2U3YTdhYmQzYzVkYmY0YTFiYTdhNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaApA
QCAtMzQsOCArMzQsNyBAQAogI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5o
IgotLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uCi0v
LyAjaW5jbHVkZSAiU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5oIgorI2luY2x1ZGUgIlNWR0Jv
dW5kaW5nQm94Q29tcHV0YXRpb24uaCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogCkBAIC02OSwxMiArNjgsNyBAQCBwdWJsaWM6CiAgICAg
TGF5b3V0UmVjdCBjb250ZW50Qm94UmVjdEVxdWl2YWxlbnQoKSBjb25zdCB7IHJldHVybiBib3Jk
ZXJCb3hSZWN0RXF1aXZhbGVudCgpOyB9CiAgICAgTGF5b3V0UmVjdCBmcmFtZVJlY3RFcXVpdmFs
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0OyB9CiAKLSAgICBMYXlvdXRSZWN0IHZp
c3VhbE92ZXJmbG93UmVjdEVxdWl2YWxlbnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uCi0gICAgICAgIC8v
IHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlVmlzdWFsT3ZlcmZsb3dS
ZWN0KCp0aGlzKTsKLSAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKLSAgICB9CisgICAgTGF5
b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4gU1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVZpc3VhbE92ZXJmbG93UmVjdCgqdGhpcyk7
IH0KIAogICAgIHZvaWQgYXBwbHlUb3BMZWZ0TG9jYXRpb25PZmZzZXRFcXVpdmFsZW50KExheW91
dFBvaW50JiBwb2ludCkgY29uc3QgeyBwb2ludC5tb3ZlQnkobGF5b3V0TG9jYXRpb24oKSk7IH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKaW5k
ZXggMTE0YWUxNTNlZDBiZGNlMjRmNDdmZDljY2RmNTc4ZGE1ZWM1NDQ0Mi4uMTIxYzYzNzY0OTA0
MWRlY2NlYmE1Nzk5NDlmNWNlNmRjM2ZmNDZkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCkBAIC0xOTMsMTYgKzE5MywxNiBAQCB2b2lkIFJl
bmRlclNWR1Jvb3Q6OmxheW91dCgpCiAgICAgLy8gU1ZHTGF5ZXJUcmFuc2Zvcm1VcGRhdGVyIHRy
YW5zZm9ybVVwZGF0ZXIoKnRoaXMpOwogICAgIHVwZGF0ZUxheWVySW5mb3JtYXRpb24oKTsKIAot
ICAgIC8qIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQ29udGFpbmVyTGF5b3V0IC8gU1ZHQm91
bmRpbmdCb3hDb21wdXRhdGlvbgogICAgIHsKKyAgICAgICAgLyogRklYTUU6IFtMQlNFXSBVcHN0
cmVhbSBTVkdDb250YWluZXJMYXlvdXQKICAgICAgICAgU1ZHQ29udGFpbmVyTGF5b3V0IGNvbnRh
aW5lckxheW91dCgqdGhpcyk7CiAgICAgICAgIGNvbnRhaW5lckxheW91dC5sYXlvdXRDaGlsZHJl
bihuZWVkc0xheW91dCB8fCBTVkdSZW5kZXJTdXBwb3J0OjpmaWx0ZXJzRm9yY2VDb250YWluZXJM
YXlvdXQoKnRoaXMpKTsKKyAgICAgICAgKi8KIAogICAgICAgICBTVkdCb3VuZGluZ0JveENvbXB1
dGF0aW9uIGJvdW5kaW5nQm94Q29tcHV0YXRpb24oKnRoaXMpOwogICAgICAgICBtX29iamVjdEJv
dW5kaW5nQm94ID0gYm91bmRpbmdCb3hDb21wdXRhdGlvbi5jb21wdXRlRGVjb3JhdGVkQm91bmRp
bmdCb3goU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6b2JqZWN0Qm91bmRpbmdCb3hEZWNvcmF0
aW9uKTsKICAgICAgICAgbV9zdHJva2VCb3VuZGluZ0JveCA9IGJvdW5kaW5nQm94Q29tcHV0YXRp
b24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246
OnN0cm9rZUJvdW5kaW5nQm94RGVjb3JhdGlvbik7CiAgICAgfQotICAgICovCiAKICAgICAvLyBG
SVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0NvbnRhaW5lckxheW91dCAtLSByZW1vdmUgU1ZHUmVu
ZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4uCiAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6bGF5b3V0
Q2hpbGRyZW4oKnRoaXMsIG5lZWRzTGF5b3V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290LmgKaW5kZXggNDM3MzEzZDA3OWJkZWQ0ZWM2ZmUwNWRiMDM1MWNj
ZDY5Y2M4Njc5OC4uNjZiYWIwODgxYTM3ZmU1ZjExMGI0NjVmZTBkODNiMWZhYzc4NjhjNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgKQEAgLTI2LDgg
KzI2LDcgQEAKICNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKICNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJSZXBsYWNlZC5oIgotLy8gRklYTUU6IFtMQlNF
XSBVcHN0cmVhbSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uCi0vLyAjaW5jbHVkZSAiU1ZHQm91
bmRpbmdCb3hDb21wdXRhdGlvbi5oIgorI2luY2x1ZGUgIlNWR0JvdW5kaW5nQm94Q29tcHV0YXRp
b24uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03MiwyMSArNzEsOSBAQCBwdWJsaWM6
CiAKICAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX29iamVjdEJvdW5kaW5nQm94OyB9CiAgICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsgfQorICAgIEZsb2F0
UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmNvbXB1dGVSZXBhaW50Qm91bmRpbmdCb3goKnRo
aXMpOyB9CiAKLSAgICAvLyBGSVhNRTogW0xCU0VdIE1hcmsgZmluYWwsIGFkZCByZXBhaW50Qm91
bmRpbmdCb3goKSB0byBSZW5kZXJPYmplY3QKLSAgICBGbG9hdFJlY3QgcmVwYWludEJvdW5kaW5n
Qm94KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbgotICAgICAgICAvLyByZXR1cm4gU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbjo6Y29tcHV0ZVJlcGFpbnRCb3VuZGluZ0JveCgqdGhpcyk7Ci0gICAgICAgIHJl
dHVybiBtX3N0cm9rZUJvdW5kaW5nQm94OwotICAgIH0KLQotICAgIExheW91dFJlY3QgdmlzdWFs
T3ZlcmZsb3dSZWN0RXF1aXZhbGVudCgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBGSVhNRTog
W0xCU0VdIFVwc3RyZWFtIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24KLSAgICAgICAgLy8gcmV0
dXJuIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmNvbXB1dGVWaXN1YWxPdmVyZmxvd1JlY3Qo
KnRoaXMpOwotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwotICAgIH0KKyAgICBMYXlvdXRS
ZWN0IHZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxlbnQoKSBjb25zdCB7IHJldHVybiBTVkdCb3Vu
ZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlVmlzdWFsT3ZlcmZsb3dSZWN0KCp0aGlzKTsgfQog
CiBwcml2YXRlOgogICAgIHZvaWQgZWxlbWVudCgpIGNvbnN0ID0gZGVsZXRlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAppbmRleCA5YTk1ZmEy
NTQ4ZDBmNDc0MTQ5NjI0MjhlMzhjMTQ1ODUxMGE3NzYzLi41YWJlZDIwZmM4ODAxMjE4N2MwNzQ0
ZjRhNDk2MjE5NDg4YWRjYzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1NoYXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1NoYXBlLmNwcApAQCAtNDAwLDcgKzQwMCw3IEBAIHN0YXRpYyBpbmxpbmUgUmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckZvclR5cGUoU1ZHTWFya2VyVHlwZSB0eXBlLCBS
ZW5kZXJTCiAgICAgcmV0dXJuIDA7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6Y29t
cHV0ZU1hcmtlckJvdW5kaW5nQm94KCkgY29uc3QKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6
Y29tcHV0ZU1hcmtlckJvdW5kaW5nQm94KGNvbnN0IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246
OkRlY29yYXRpb25PcHRpb25zJikgY29uc3QKIHsKICAgICBpZiAobV9tYXJrZXJQb3NpdGlvbnMu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CkBAIC00MTcsOCArNDE3LDEx
IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6Y29tcHV0ZU1hcmtlckJvdW5kaW5nQm94KCkg
Y29uc3QKICAgICBGbG9hdFJlY3QgYm91bmRhcmllczsKICAgICB1bnNpZ25lZCBzaXplID0gbV9t
YXJrZXJQb3NpdGlvbnMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKLSAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXIgPSBt
YXJrZXJGb3JUeXBlKG1fbWFya2VyUG9zaXRpb25zW2ldLnR5cGUsIG1hcmtlclN0YXJ0LCBtYXJr
ZXJNaWQsIG1hcmtlckVuZCkpCisgICAgICAgIGlmIChhdXRvKiBtYXJrZXIgPSBtYXJrZXJGb3JU
eXBlKG1fbWFya2VyUG9zaXRpb25zW2ldLnR5cGUsIG1hcmtlclN0YXJ0LCBtYXJrZXJNaWQsIG1h
cmtlckVuZCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIgY2hhbmdlcworICAgICAgICAgICAgLy8gYm91bmRhcmllcy51bml0
ZShtYXJrZXItPmNvbXB1dGVNYXJrZXJCb3VuZGluZ0JveChvcHRpb25zLCBtYXJrZXItPm1hcmtl
clRyYW5zZm9ybWF0aW9uKG1fbWFya2VyUG9zaXRpb25zW2ldLm9yaWdpbiwgbV9tYXJrZXJQb3Np
dGlvbnNbaV0uYW5nbGUsIHN0cm9rZVdpZHRoKCkpKSk7CiAgICAgICAgICAgICBib3VuZGFyaWVz
LnVuaXRlKG1hcmtlci0+bWFya2VyQm91bmRhcmllcyhtYXJrZXItPm1hcmtlclRyYW5zZm9ybWF0
aW9uKG1fbWFya2VyUG9zaXRpb25zW2ldLm9yaWdpbiwgbV9tYXJrZXJQb3NpdGlvbnNbaV0uYW5n
bGUsIHN0cm9rZVdpZHRoKCkpKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGJvdW5k
YXJpZXM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1NoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBl
LmgKaW5kZXggMWZhNGQ4YzM2MjU3NWMwNjlmYThiMjkwZjdhZWE3ZjZlODMzMDQ3MC4uNjkxZmI4
NmY5ZWZjMDkzYzU4NGIyMDBkOTVkYjNiZGU3YmM5ZWVkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaApAQCAtMzAsOCArMzAsNyBAQAogI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUg
IlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCi0vLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0Jv
dW5kaW5nQm94Q29tcHV0YXRpb24KLS8vICNpbmNsdWRlICJTVkdCb3VuZGluZ0JveENvbXB1dGF0
aW9uLmgiCisjaW5jbHVkZSAiU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5oIgogI2luY2x1ZGUg
IlNWR0dyYXBoaWNzRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR01hcmtlckRhdGEuaCIKICNpbmNs
dWRlIDxtZW1vcnk+CkBAIC04MCwxNSArNzksOSBAQCBwdWJsaWM6CiAKICAgICBGbG9hdFJlY3Qg
b2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbGxCb3VuZGluZ0Jv
eDsgfQogICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KKyAgICBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1
dGF0aW9uOjpjb21wdXRlUmVwYWludEJvdW5kaW5nQm94KCp0aGlzKTsgfQogCi0gICAgRmxvYXRS
ZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgZmluYWwKLSAgICB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlv
bgotICAgICAgICAvLyByZXR1cm4gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVJl
cGFpbnRCb3VuZGluZ0JveCgqdGhpcyk7IH0KLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwot
ICAgIH0KLQotICAgIEZsb2F0UmVjdCBjb21wdXRlTWFya2VyQm91bmRpbmdCb3goKSBjb25zdDsK
KyAgICBGbG9hdFJlY3QgY29tcHV0ZU1hcmtlckJvdW5kaW5nQm94KGNvbnN0IFNWR0JvdW5kaW5n
Qm94Q29tcHV0YXRpb246OkRlY29yYXRpb25PcHRpb25zJikgY29uc3Q7CiAKIHByb3RlY3RlZDoK
ICAgICB2b2lkIGVsZW1lbnQoKSBjb25zdCA9IGRlbGV0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjA2NzNmNjZhZWVjOWRmNWUxZjFkYWIxNTkwNGU2MWM2Mzc1Y2VmNjQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb24uY3BwCkBAIC0wLDAgKzEsMjkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxLCAyMDIyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdC
b3VuZGluZ0JveENvbXB1dGF0aW9uLmgiCisKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VO
R0lORSkKKyNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVy
U1ZHRm9yZWlnbk9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0ltYWdlLmgiCisjaW5jbHVk
ZSAiUmVuZGVyU1ZHSW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFza2Vy
LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBl
LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5o
IgorI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbihj
b25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKKyAgICA6IG1fcmVuZGVyZXIo
cmVuZGVyZXIpCit7Cit9CisKK1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246On5TVkdCb3VuZGlu
Z0JveENvbXB1dGF0aW9uKCkKK3sKK30KKworRmxvYXRSZWN0IFNWR0JvdW5kaW5nQm94Q29tcHV0
YXRpb246OmNvbXB1dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChjb25zdCBTVkdCb3VuZGluZ0JveENv
bXB1dGF0aW9uOjpEZWNvcmF0aW9uT3B0aW9ucyYgb3B0aW9ucywgYm9vbCogYm91bmRpbmdCb3hW
YWxpZCkgY29uc3QKK3sKKyAgICAvLyBTVkcyOiBCb3VuZGluZyBib3hlcyBhbGdvcml0aG0gKGh0
dHBzOi8vc3Znd2cub3JnL3N2ZzItZHJhZnQvY29vcmRzLmh0bWwjQm91bmRpbmdCb3hlcykKKwor
ICAgIC8vIFRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtIGRlZmluZXMgaG93IHRvIGNvbXB1dGUgYSBi
b3VuZGluZyBib3ggZm9yIGEgZ2l2ZW4gZWxlbWVudC4gVGhlIGlucHV0cyB0byB0aGUgYWxnb3Jp
dGhtIGFyZToKKyAgICAvLyAtIGVsZW1lbnQsIHRoZSBlbGVtZW50IHdlIGFyZSBjb21wdXRpbmcg
YSBib3VuZGluZyBib3ggZm9yOworICAgIC8vIC0gc3BhY2UsIGEgY29vcmRpbmF0ZSBzcGFjZSBp
biB3aGljaCB0aGUgYm91bmRpbmcgYm94IHdpbGwgYmUgY29tcHV0ZWQ7CisgICAgLy8gLSBmaWxs
LCBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBib3VuZGluZyBib3ggaW5jbHVkZXMg
dGhlIGdlb21ldHJ5IG9mIHRoZSBlbGVtZW50IGFuZCBpdHMgZGVzY2VuZGFudHM7CisgICAgLy8g
LSBzdHJva2UsIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGJvdW5kaW5nIGJveCBp
bmNsdWRlcyB0aGUgc3Ryb2tlIG9mIHRoZSBlbGVtZW50IGFuZCBpdHMgZGVzY2VuZGFudHM7Cisg
ICAgLy8gLSBtYXJrZXJzLCBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBib3VuZGlu
ZyBib3ggaW5jbHVkZXMgdGhlIG1hcmtlcnMgb2YgdGhlIGVsZW1lbnQgYW5kIGl0cyBkZXNjZW5k
YW50czsgYW5kCisgICAgLy8gLSBjbGlwcGVkLCBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVy
IHRoZSBib3VuZGluZyBib3ggaXMgYWZmZWN0ZWQgYnkgYW55IGNsaXBwaW5nIHBhdGhzIGFwcGxp
ZWQgdG8gdGhlIGVsZW1lbnQgYW5kIGl0cyBkZXNjZW5kYW50cy4KKworICAgIC8vIFRoZSBhbGdv
cml0aG0gdG8gY29tcHV0ZSB0aGUgYm91bmRpbmcgYm94IGlzIGFzIGZvbGxvd3MsIGRlcGVuZGlu
ZyBvbiB0aGUgdHlwZSBvZiBlbGVtZW50OgorICAgIC8vIC0gYSBzaGFwZSAoUmVuZGVyU1ZHU2hh
cGUpCisgICAgLy8gLSBhIHRleHQgY29udGVudCBlbGVtZW50IChSZW5kZXJTVkdUZXh0IG9yIFJl
bmRlclNWR0lubGluZSkKKyAgICAvLyAtIGFuIOKAmGHigJkgZWxlbWVudCB3aXRoaW4gYSB0ZXh0
IGNvbnRlbnQgZWxlbWVudCAoLT4gY3JlYXRlcyBSZW5kZXJTVkdJbmxpbmUpCisgICAgaWYgKGlz
PFJlbmRlclNWR1NoYXBlPihtX3JlbmRlcmVyKSB8fCBpczxSZW5kZXJTVkdUZXh0PihtX3JlbmRl
cmVyKSB8fCBpczxSZW5kZXJTVkdJbmxpbmU+KG1fcmVuZGVyZXIpKQorICAgICAgICByZXR1cm4g
aGFuZGxlU2hhcGVPclRleHRPcklubGluZShvcHRpb25zLCBib3VuZGluZ0JveFZhbGlkKTsKKwor
ICAgIC8vIC0gYSBjb250YWluZXIgZWxlbWVudCAoUmVuZGVyU1ZHUm9vdCAvIFJlbmRlclNWR0Nv
bnRhaW5lcikKKyAgICAvLyAtIOKAmHVzZeKAmSAoUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRh
aW5lcikKKyAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIG5ldyBSZW5kZXJTVkdDb250YWlu
ZXIgaW1wbGVtZW50YXRpb24KKyAgICAvLyBpZiAoaXM8UmVuZGVyU1ZHUm9vdD4obV9yZW5kZXJl
cikgfHwgaXM8UmVuZGVyU1ZHQ29udGFpbmVyPihtX3JlbmRlcmVyKSkKKyAgICBpZiAoaXM8UmVu
ZGVyU1ZHUm9vdD4obV9yZW5kZXJlcikpCisgICAgICAgIHJldHVybiBoYW5kbGVSb290T3JDb250
YWluZXIob3B0aW9ucywgYm91bmRpbmdCb3hWYWxpZCk7CisKKyAgICAvLyAtIOKAmGZvcmVpZ25P
YmplY3TigJkKKyAgICAvLyAtIOKAmGltYWdl4oCZCisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0
cmVhbSBuZXcgUmVuZGVyU1ZHSW1hZ2UgaW1wbGVtZW50YXRpb24KKyAgICAvLyBpZiAoaXM8UmVu
ZGVyU1ZHRm9yZWlnbk9iamVjdD4obV9yZW5kZXJlcikgfHwgaXM8UmVuZGVyU1ZHSW1hZ2U+KG1f
cmVuZGVyZXIpKQorICAgIGlmIChpczxSZW5kZXJTVkdGb3JlaWduT2JqZWN0PihtX3JlbmRlcmVy
KSkKKyAgICAgICAgcmV0dXJuIGhhbmRsZUZvcmVpZ25PYmplY3RPckltYWdlKG9wdGlvbnMsIGJv
dW5kaW5nQm94VmFsaWQpOworCisjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQorICAgIHNob3dS
ZW5kZXJUcmVlKCZtX3JlbmRlcmVyKTsKKyNlbmRpZgorCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworfQorCitGbG9hdFJlY3QgU1ZHQm91bmRpbmdC
b3hDb21wdXRhdGlvbjo6aGFuZGxlU2hhcGVPclRleHRPcklubGluZShjb25zdCBTVkdCb3VuZGlu
Z0JveENvbXB1dGF0aW9uOjpEZWNvcmF0aW9uT3B0aW9ucyYgb3B0aW9ucywgYm9vbCogYm91bmRp
bmdCb3hWYWxpZCkgY29uc3QKK3sKKyAgICAvLyAxLiBMZXQgYm94IGJlIGEgcmVjdGFuZ2xlIGlu
aXRpYWxpemVkIHRvICgwLCAwLCAwLCAwKS4KKyAgICBGbG9hdFJlY3QgYm94OworCisgICAgLy8g
Mi4gTGV0IGZpbGwtc2hhcGUgYmUgdGhlIGVxdWl2YWxlbnQgcGF0aCBvZiBlbGVtZW50IGlmIGl0
IGlzIGEgc2hhcGUsIG9yIGEgc2hhcGUgdGhhdCBpbmNsdWRlcyBlYWNoIG9mIHRoZQorICAgIC8v
ICAgIGdseXBoIGNlbGxzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHRleHQgd2l0aGluIHRoZSBlbGVt
ZW50cyBvdGhlcndpc2UuCisgICAgLy8gMy4gSWYgZmlsbCBpcyB0cnVlLCB0aGVuIHNldCBib3gg
dG8gdGhlIHRpZ2h0ZXN0IHJlY3RhbmdsZSBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gc3BhY2Ug
dGhhdCBjb250YWlucyBmaWxsLXNoYXBlLgorICAgIC8vCisgICAgLy8gTm90ZTogVGhlIHZhbHVl
cyBvZiB0aGUgZmlsbCwgZmlsbC1vcGFjaXR5IGFuZCBmaWxsLXJ1bGUgcHJvcGVydGllcyBkbyBu
b3QgYWZmZWN0IGZpbGwtc2hhcGUuCisgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoRGVjb3JhdGlv
bk9wdGlvbjo6SW5jbHVkZUZpbGxTaGFwZSkpCisgICAgICAgIGJveCA9IG1fcmVuZGVyZXIub2Jq
ZWN0Qm91bmRpbmdCb3goKTsKKworICAgIC8vIDQuIElmIHN0cm9rZSBpcyB0cnVlIGFuZCB0aGUg
ZWxlbWVudCdzIHN0cm9rZSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIG5vbmUsIHRoZW4gc2V0IGJv
eCB0byBiZSB0aGUgdW5pb24gb2YgYm94CisgICAgLy8gICAgYW5kIHRoZSB0aWdodGVzdCByZWN0
YW5nbGUgaW4gY29vcmRpbmF0ZSBzeXN0ZW0gc3BhY2UgdGhhdCBjb250YWlucyB0aGUgc3Ryb2tl
IHNoYXBlIG9mIHRoZSBlbGVtZW50LCB3aXRoIHRoZQorICAgIC8vICAgIGFzc3VtcHRpb24gdGhh
dCB0aGUgZWxlbWVudCBoYXMgbm8gZGFzaCBwYXR0ZXJuLgorICAgIC8vCisgICAgLy8gTm90ZTog
VGhlIHZhbHVlcyBvZiB0aGUgc3Ryb2tlLW9wYWNpdHksIHN0cm9rZS1kYXNoYXJyYXkgYW5kIHN0
cm9rZS1kYXNob2Zmc2V0IGRvIG5vdCBhZmZlY3QgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBzdHJv
a2Ugc2hhcGUuCisgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoRGVjb3JhdGlvbk9wdGlvbjo6SW5j
bHVkZVN0cm9rZVNoYXBlKSkKKyAgICAgICAgYm94LnVuaXRlKG1fcmVuZGVyZXIuc3Ryb2tlQm91
bmRpbmdCb3goKSk7CisKKyAgICAvLyA1LiBJZiBtYXJrZXJzIGlzIHRydWUsIHRoZW4gZm9yIGVh
Y2ggbWFya2VyIG1hcmtlciByZW5kZXJlZCBvbiB0aGUgZWxlbWVudDoKKyAgICAvLyAtIEZvciBl
YWNoIGRlc2NlbmRhbnQgZ3JhcGhpY3MgZWxlbWVudCBjaGlsZCBvZiB0aGUg4oCYbWFya2Vy4oCZ
IGVsZW1lbnQgdGhhdCBkZWZpbmVzIG1hcmtlcidzIGNvbnRlbnQ6CisgICAgLy8gICAtIElmIGNo
aWxkIGhhcyBhbiBhbmNlc3RvciBlbGVtZW50IHdpdGhpbiB0aGUg4oCYbWFya2Vy4oCZIHRoYXQg
aXMgJ2Rpc3BsYXk6IG5vbmUnLCBoYXMgYSBmYWlsaW5nIGNvbmRpdGlvbmFsIHByb2Nlc3Npbmcg
YXR0cmlidXRlLAorICAgIC8vICAgICBvciBpcyBub3QgYW4g4oCYYeKAmSwg4oCYZ+KAmSwg4oCY
c3Zn4oCZIG9yIOKAmHN3aXRjaOKAmSBlbGVtZW50LCB0aGVuIGNvbnRpbnVlIHRvIHRoZSBuZXh0
IGRlc2NlbmRhbnQgZ3JhcGhpY3MgZWxlbWVudC4KKyAgICAvLyAgIC0gT3RoZXJ3aXNlLCBzZXQg
Ym94IHRvIGJlIHRoZSB1bmlvbiBvZiBib3ggYW5kIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgdGhl
IGFsZ29yaXRobSB0byBjb21wdXRlIGEgYm91bmRpbmcgYm94IHdpdGggY2hpbGQgYXMKKyAgICAv
LyAgICAgdGhlIGVsZW1lbnQsIHNwYWNlIGFzIHRoZSB0YXJnZXQgY29vcmRpbmF0ZSBzcGFjZSwg
dHJ1ZSBmb3IgZmlsbCwgc3Ryb2tlIGFuZCBtYXJrZXJzLCBhbmQgY2xpcHBlZCBmb3IgY2xpcHBl
ZC4KKyAgICBpZiAob3B0aW9ucy5jb250YWlucyhEZWNvcmF0aW9uT3B0aW9uOjpJbmNsdWRlTWFy
a2VycykgJiYgaXM8UmVuZGVyU1ZHU2hhcGU+KG1fcmVuZGVyZXIpKSB7CisgICAgICAgIERlY29y
YXRpb25PcHRpb25zIG9wdGlvbnNGb3JNYXJrZXIgPSB7IERlY29yYXRpb25PcHRpb246OkluY2x1
ZGVGaWxsU2hhcGUsIERlY29yYXRpb25PcHRpb246OkluY2x1ZGVTdHJva2VTaGFwZSwgRGVjb3Jh
dGlvbk9wdGlvbjo6SW5jbHVkZU1hcmtlcnMgfTsKKyAgICAgICAgaWYgKG9wdGlvbnMuY29udGFp
bnMoRGVjb3JhdGlvbk9wdGlvbjo6SW5jbHVkZUNsaXBwZXJzKSkKKyAgICAgICAgICAgIG9wdGlv
bnNGb3JNYXJrZXIuYWRkKERlY29yYXRpb25PcHRpb246OkluY2x1ZGVDbGlwcGVycyk7CisgICAg
ICAgIGJveC51bml0ZShkb3duY2FzdDxSZW5kZXJTVkdTaGFwZT4obV9yZW5kZXJlcikuY29tcHV0
ZU1hcmtlckJvdW5kaW5nQm94KG9wdGlvbnMpKTsKKyAgICB9CisKKyAgICAvLyA2LiBJZiBjbGlw
cGVkIGlzIHRydWUgYW5kIHRoZSB2YWx1ZSBvZiBjbGlwLXBhdGggb24gZWxlbWVudCBpcyBub3Qg
bm9uZSwgdGhlbiBzZXQgYm94IHRvIGJlIHRoZSB0aWdodGVzdCByZWN0YW5nbGUKKyAgICAvLyAg
ICBpbiBjb29yZGluYXRlIHN5c3RlbSBzcGFjZSB0aGF0IGNvbnRhaW5zIHRoZSBpbnRlcnNlY3Rp
b24gb2YgYm94IGFuZCB0aGUgY2xpcHBpbmcgcGF0aC4KKyAgICBhZGp1c3RCb3hGb3JDbGlwcGlu
Z0FuZEVmZmVjdHMob3B0aW9ucywgYm94KTsKKworICAgIC8vIDcuIFJldHVybiBib3guCisgICAg
aWYgKGJvdW5kaW5nQm94VmFsaWQpCisgICAgICAgICpib3VuZGluZ0JveFZhbGlkID0gdHJ1ZTsK
KyAgICByZXR1cm4gYm94OworfQorCitGbG9hdFJlY3QgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlv
bjo6aGFuZGxlUm9vdE9yQ29udGFpbmVyKGNvbnN0IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246
OkRlY29yYXRpb25PcHRpb25zJiBvcHRpb25zLCBib29sKiBib3VuZGluZ0JveFZhbGlkKSBjb25z
dAoreworICAgIGF1dG8gdHJhbnNmb3JtYXRpb25NYXRyaXhGcm9tQ2hpbGQgPSBbXShjb25zdCBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0JiBjaGlsZCkgLT4gc3RkOjpvcHRpb25hbDxUcmFuc2Zvcm1h
dGlvbk1hdHJpeD4geworICAgICAgICBpZiAoIWNoaWxkLmhhc1RyYW5zZm9ybSgpKQorICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBhdXRvKiBjb250YWluZXIgPSBj
aGlsZC5wYXJlbnQoKTsKKyAgICAgICAgQVNTRVJUKGNvbnRhaW5lcik7CisKKyAgICAgICAgYm9v
bCBjb250YWluZXJTa2lwcGVkID0gZmFsc2U7CisgICAgICAgIEFTU0VSVChjb250YWluZXIgPT0g
Y2hpbGQuY29udGFpbmVyKG51bGxwdHIsIGNvbnRhaW5lclNraXBwZWQpKTsKKyAgICAgICAgQVNT
RVJUX1VOVVNFRChjb250YWluZXJTa2lwcGVkLCAhY29udGFpbmVyU2tpcHBlZCk7CisKKyAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm07CisgICAgICAgIGNoaWxkLmdl
dFRyYW5zZm9ybUZyb21Db250YWluZXIoY29udGFpbmVyLCBMYXlvdXRTaXplKCksIGxheWVyVHJh
bnNmb3JtKTsKKyAgICAgICAgcmV0dXJuIGxheWVyVHJhbnNmb3JtLmlzSWRlbnRpdHkoKSA/IHN0
ZDo6bnVsbG9wdCA6IHN0ZDo6bWFrZV9vcHRpb25hbChXVEZNb3ZlKGxheWVyVHJhbnNmb3JtKSk7
CisgICAgfTsKKworICAgIGF1dG8gdW5pdGVCb3VuZGluZ0JveFJlc3BlY3RpbmdWYWxpZGl0eSA9
IFtdKGJvb2wmIGJveFZhbGlkLCBGbG9hdFJlY3QmIGJveCwgY29uc3QgUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdCYgLyogY2hpbGQgKi8sIGNvbnN0IEZsb2F0UmVjdCYgY2hpbGRCb3VuZGluZ0JveCkg
eworICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIG5ldyBSZW5kZXJTVkdDb250YWlu
ZXIgaW1wbGVtZW50YXRpb24KKyAgICAgICAgLy8gYm9vbCBpc0JvdW5kaW5nQm94VmFsaWQgPSBp
czxSZW5kZXJTVkdDb250YWluZXI+KGNoaWxkKSA/IGRvd25jYXN0PFJlbmRlclNWR0NvbnRhaW5l
cj4oY2hpbGQpLmlzT2JqZWN0Qm91bmRpbmdCb3hWYWxpZCgpIDogdHJ1ZTsKKyAgICAgICAgYm9v
bCBpc0JvdW5kaW5nQm94VmFsaWQgPSB0cnVlOworICAgICAgICBpZiAoIWlzQm91bmRpbmdCb3hW
YWxpZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoYm94VmFsaWQpIHsKKyAg
ICAgICAgICAgIGJveC51bml0ZUV2ZW5JZkVtcHR5KGNoaWxkQm91bmRpbmdCb3gpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYm94ID0gY2hpbGRCb3VuZGluZ0Jv
eDsKKyAgICAgICAgYm94VmFsaWQgPSB0cnVlOworICAgIH07CisKKyAgICAvLyAxLiBMZXQgYm94
IGJlIGEgcmVjdGFuZ2xlIGluaXRpYWxpemVkIHRvICgwLCAwLCAwLCAwKS4KKyAgICBGbG9hdFJl
Y3QgYm94OworICAgIGJvb2wgYm94VmFsaWQgPSBmYWxzZTsKKworICAgIC8vIDIuIExldCBwYXJl
bnQgYmUgdGhlIGNvbnRhaW5lciBlbGVtZW50IGlmIGl0IGlzIG9uZSwgb3IgdGhlIHJvb3Qgb2Yg
dGhlIOKAmHVzZeKAmSBlbGVtZW50J3Mgc2hhZG93IHRyZWUgb3RoZXJ3aXNlLgorCisgICAgLy8g
My4gRm9yIGVhY2ggZGVzY2VuZGFudCBncmFwaGljcyBlbGVtZW50IGNoaWxkIG9mIHBhcmVudDoK
KyAgICAvLyAgICAtIElmIGNoaWxkIGlzIG5vdCByZW5kZXJlZCB0aGVuIGNvbnRpbnVlIHRvIHRo
ZSBuZXh0IGRlc2NlbmRhbnQgZ3JhcGhpY3MgZWxlbWVudC4KKyAgICAvLyAgICAtIE90aGVyd2lz
ZSwgc2V0IGJveCB0byBiZSB0aGUgdW5pb24gb2YgYm94IGFuZCB0aGUgcmVzdWx0IG9mIGludm9r
aW5nIHRoZSBhbGdvcml0aG0gdG8gY29tcHV0ZSBhIGJvdW5kaW5nIGJveCB3aXRoIGNoaWxkCisg
ICAgLy8gICAgICBhcyB0aGUgZWxlbWVudCBhbmQgdGhlIHNhbWUgdmFsdWVzIGZvciBzcGFjZSwg
ZmlsbCwgc3Ryb2tlLCBtYXJrZXJzIGFuZCBjbGlwcGVkIGFzIHRoZSBjb3JyZXNwb25kaW5nIGFs
Z29yaXRobSBpbnB1dCB2YWx1ZXMuCisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZU
eXBlPFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KG1fcmVuZGVyZXIpKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBbTEJTRV0gVXBzdHJlYW0gbmV3IFJlbmRlclNWR0NvbnRhaW5lciBpbXBsZW1lbnRhdGlv
bgorICAgICAgICAvLyBpZiAoaXM8UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyPihjaGlsZCkgfHwg
KGlzPFJlbmRlclNWR1NoYXBlPihjaGlsZCkgJiYgZG93bmNhc3Q8UmVuZGVyU1ZHU2hhcGU+KGNo
aWxkKS5pc1JlbmRlcmluZ0Rpc2FibGVkKCkpKQorICAgICAgICBpZiAoaXM8UmVuZGVyU1ZHU2hh
cGU+KGNoaWxkKSAmJiBkb3duY2FzdDxSZW5kZXJTVkdTaGFwZT4oY2hpbGQpLmlzUmVuZGVyaW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFNWR0JvdW5kaW5n
Qm94Q29tcHV0YXRpb24gY2hpbGRCb3VuZGluZ0JveENvbXB1dGF0aW9uKGNoaWxkKTsKKyAgICAg
ICAgYXV0byBjaGlsZEJveCA9IGNoaWxkQm91bmRpbmdCb3hDb21wdXRhdGlvbi5jb21wdXRlRGVj
b3JhdGVkQm91bmRpbmdCb3gob3B0aW9ucyk7CisgICAgICAgIC8vIEZJWE1FOiBVcHN0cmVhbSBu
ZXcgUmVuZGVyU1ZHQ29udGFpbmVyIGltcGxlbWVudGF0aW9uCisgICAgICAgIC8vIGlmIChvcHRp
b25zLmNvbnRhaW5zKERlY29yYXRpb25PcHRpb246Ok92ZXJyaWRlQm94V2l0aEZpbHRlckJveEZv
ckNoaWxkcmVuKSAmJiBpczxSZW5kZXJTVkdDb250YWluZXI+KGNoaWxkKSkKKyAgICAgICAgLy8g
ICAgY2hpbGRCb3VuZGluZ0JveENvbXB1dGF0aW9uLmFkanVzdEJveEZvckNsaXBwaW5nQW5kRWZm
ZWN0cyh7IERlY29yYXRpb25PcHRpb246Ok92ZXJyaWRlQm94V2l0aEZpbHRlckJveCB9LCBjaGls
ZEJveCk7CisKKyAgICAgICAgaWYgKGF1dG8gbGF5ZXJUcmFuc2Zvcm0gPSB0cmFuc2Zvcm1hdGlv
bk1hdHJpeEZyb21DaGlsZChjaGlsZCkpCisgICAgICAgICAgICBjaGlsZEJveCA9IGxheWVyVHJh
bnNmb3JtLT5tYXBSZWN0KGNoaWxkQm94KTsKKworICAgICAgICBpZiAob3B0aW9ucyA9PSBvYmpl
Y3RCb3VuZGluZ0JveERlY29yYXRpb24pCisgICAgICAgICAgICB1bml0ZUJvdW5kaW5nQm94UmVz
cGVjdGluZ1ZhbGlkaXR5KGJveFZhbGlkLCBib3gsIGNoaWxkLCBjaGlsZEJveCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGJveC51bml0ZShjaGlsZEJveCk7CisgICAgfQorCisgICAgLy8g
NC4gSWYgY2xpcHBlZCBpcyB0cnVlOgorICAgIC8vICAgIC0gSWYgdGhlIHZhbHVlIG9mIGNsaXAt
cGF0aCBvbiBlbGVtZW50IGlzIG5vdCBub25lLCB0aGVuIHNldCBib3ggdG8gYmUgdGhlIHRpZ2h0
ZXN0IHJlY3RhbmdsZSBpbiBjb29yZGluYXRlIHN5c3RlbSBzcGFjZSB0aGF0CisgICAgLy8gICAg
ICBjb250YWlucyB0aGUgaW50ZXJzZWN0aW9uIG9mIGJveCBhbmQgdGhlIGNsaXBwaW5nIHBhdGgu
CisgICAgLy8gICAgLSBJZiB0aGUgb3ZlcmZsb3cgcHJvcGVydHkgYXBwbGllcyB0byB0aGUgZWxl
bWVudCBhbmQgZG9lcyBub3QgaGF2ZSBhIHZhbHVlIG9mIHZpc2libGUsIHRoZW4gc2V0IGJveCB0
byBiZSB0aGUgdGlnaHRlc3QgcmVjdGFuZ2xlCisgICAgLy8gICAgICBpbiBjb29yZGluYXRlIHN5
c3RlbSBzcGFjZSB0aGF0IGNvbnRhaW5zIHRoZSBpbnRlcnNlY3Rpb24gb2YgYm94IGFuZCB0aGUg
ZWxlbWVudCdzIG92ZXJmbG93IGJvdW5kcy4KKyAgICAvLyAgICAtIElmIHRoZSBjbGlwIHByb3Bl
cnR5IGFwcGxpZXMgdG8gdGhlIGVsZW1lbnQgYW5kIGRvZXMgbm90IGhhdmUgYSB2YWx1ZSBvZiBh
dXRvLCB0aGVuIHNldCBib3ggdG8gYmUgdGhlIHRpZ2h0ZXN0IHJlY3RhbmdsZSBpbiBjb29yZGlu
YXRlCisgICAgLy8gICAgICBzeXN0ZW0gc3BhY2UgdGhhdCBjb250YWlucyB0aGUgaW50ZXJzZWN0
aW9uIG9mIGJveCBhbmQgdGhlIHJlY3RhbmdsZSBzcGVjaWZpZWQgYnkgY2xpcC4gKFRPRE8hKQor
ICAgIGFkanVzdEJveEZvckNsaXBwaW5nQW5kRWZmZWN0cyhvcHRpb25zLCBib3gsIHsgRGVjb3Jh
dGlvbk9wdGlvbjo6T3ZlcnJpZGVCb3hXaXRoRmlsdGVyQm94IH0pOworCisgICAgaWYgKG9wdGlv
bnMuY29udGFpbnMoRGVjb3JhdGlvbk9wdGlvbjo6SW5jbHVkZUNsaXBwZXJzKSAmJiBtX3JlbmRl
cmVyLmhhc05vblZpc2libGVPdmVyZmxvdygpKSB7CisgICAgICAgIEFTU0VSVChtX3JlbmRlcmVy
Lmhhc0xheWVyKCkpOworCisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gbmV3IFJl
bmRlclNWR0NvbnRhaW5lciAvIFJlbmRlclNWR1Jlc291cmNlTWFya2VyIGltcGxlbWVudGF0aW9u
CisgICAgICAgIC8vIEFTU0VSVChpczxSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcj4obV9yZW5k
ZXJlcikgfHwgaXM8UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI+KG1fcmVuZGVyZXIpIHx8IGlzPFJl
bmRlclNWR1Jvb3Q+KG1fcmVuZGVyZXIpKTsKKyAgICAgICAgQVNTRVJUKGlzPFJlbmRlclNWR1Jv
b3Q+KG1fcmVuZGVyZXIpKTsKKworICAgICAgICBMYXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJlY3Q7
CisgICAgICAgIGlmIChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4obV9yZW5kZXJlcikpCisgICAg
ICAgICAgICBvdmVyZmxvd0NsaXBSZWN0ID0gZG93bmNhc3Q8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+
KG1fcmVuZGVyZXIpLm92ZXJmbG93Q2xpcFJlY3QoTGF5b3V0UG9pbnQoKSk7CisgICAgICAgIGVs
c2UgaWYgKGlzPFJlbmRlckJveD4obV9yZW5kZXJlcikpCisgICAgICAgICAgICBvdmVyZmxvd0Ns
aXBSZWN0ID0gZG93bmNhc3Q8UmVuZGVyQm94PihtX3JlbmRlcmVyKS5vdmVyZmxvd0NsaXBSZWN0
KExheW91dFBvaW50KCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICB9CisK
KyAgICAgICAgYm94LmludGVyc2VjdChGbG9hdFJlY3Qob3ZlcmZsb3dDbGlwUmVjdCkpOworICAg
IH0KKworICAgIC8vIDUuIFJldHVybiBib3guCisgICAgaWYgKGJvdW5kaW5nQm94VmFsaWQpCisg
ICAgICAgICpib3VuZGluZ0JveFZhbGlkID0gYm94VmFsaWQ7CisgICAgcmV0dXJuIGJveDsKK30K
KworRmxvYXRSZWN0IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmhhbmRsZUZvcmVpZ25PYmpl
Y3RPckltYWdlKGNvbnN0IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OkRlY29yYXRpb25PcHRp
b25zJiBvcHRpb25zLCBib29sKiBib3VuZGluZ0JveFZhbGlkKSBjb25zdAoreworICAgIC8vIDEu
IExldCBib3ggYmUgdGhlIHRpZ2h0ZXN0IHJlY3RhbmdsZSBpbiBjb29yZGluYXRlIHNwYWNlIHNw
YWNlIHRoYXQgY29udGFpbnMgdGhlIHBvc2l0aW9uaW5nIHJlY3RhbmdsZQorICAgIC8vICAgIGRl
ZmluZWQgYnkgdGhlIOKAmHjigJksIOKAmHnigJksIOKAmHdpZHRo4oCZIGFuZCDigJhoZWlnaHTi
gJkgZ2VvbWV0cmljIHByb3BlcnRpZXMgb2YgdGhlIGVsZW1lbnQuCisgICAgLy8KKyAgICAvLyBO
b3RlOiBUaGUgZmlsbCwgc3Ryb2tlIGFuZCBtYXJrZXJzIGlucHV0IGFyZ3VtZW50cyB0byB0aGlz
IGFsZ29yaXRobSBkbyBub3QgYWZmZWN0IHRoZSBib3VuZGluZyBib3ggcmV0dXJuZWQgZm9yIHRo
ZXNlIGVsZW1lbnRzLgorICAgIGF1dG8gYm94ID0gbV9yZW5kZXJlci5vYmplY3RCb3VuZGluZ0Jv
eCgpOworCisgICAgLy8gMi4gSWYgY2xpcHBlZCBpcyB0cnVlIGFuZCB0aGUgdmFsdWUgb2YgY2xp
cC1wYXRoIG9uIGVsZW1lbnQgaXMgbm90IG5vbmUsIHRoZW4gc2V0IGJveCB0byBiZSB0aGUgdGln
aHRlc3QgcmVjdGFuZ2xlCisgICAgLy8gICAgaW4gY29vcmRpbmF0ZSBzeXN0ZW0gc3BhY2UgdGhh
dCBjb250YWlucyB0aGUgaW50ZXJzZWN0aW9uIG9mIGJveCBhbmQgdGhlIGNsaXBwaW5nIHBhdGgu
CisgICAgYWRqdXN0Qm94Rm9yQ2xpcHBpbmdBbmRFZmZlY3RzKG9wdGlvbnMsIGJveCk7CisKKyAg
ICAvLyAzLiBSZXR1cm4gYm94LgorICAgIGlmIChib3VuZGluZ0JveFZhbGlkKQorICAgICAgICAq
Ym91bmRpbmdCb3hWYWxpZCA9IHRydWU7CisgICAgcmV0dXJuIGJveDsKK30KKwordm9pZCBTVkdC
b3VuZGluZ0JveENvbXB1dGF0aW9uOjphZGp1c3RCb3hGb3JDbGlwcGluZ0FuZEVmZmVjdHMoY29u
c3QgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6RGVjb3JhdGlvbk9wdGlvbnMmIG9wdGlvbnMs
IEZsb2F0UmVjdCYgYm94LCBjb25zdCBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpEZWNvcmF0
aW9uT3B0aW9ucyYgb3B0aW9uc1RvQ2hlY2tGb3JGaWx0ZXJzKSBjb25zdAoreworICAgIGJvb2wg
aW5jbHVkZUZpbHRlciA9IGZhbHNlOworICAgIGZvciAoYXV0byBmaWx0ZXJPcHRpb24gOiBvcHRp
b25zVG9DaGVja0ZvckZpbHRlcnMpIHsKKyAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoZmls
dGVyT3B0aW9uKSkgeworICAgICAgICAgICAgaW5jbHVkZUZpbHRlciA9IHRydWU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaW5jbHVkZUNsaXBwZXIg
PSBvcHRpb25zLmNvbnRhaW5zKERlY29yYXRpb25PcHRpb246OkluY2x1ZGVDbGlwcGVycyk7Cisg
ICAgYm9vbCBpbmNsdWRlTWFza2VyID0gb3B0aW9ucy5jb250YWlucyhEZWNvcmF0aW9uT3B0aW9u
OjpJbmNsdWRlTWFza2Vycyk7CisKKyAgICBpZiAoaW5jbHVkZUZpbHRlciB8fCBpbmNsdWRlQ2xp
cHBlciB8fCBpbmNsdWRlTWFza2VyKSB7CisgICAgICAgIGlmIChhdXRvKiByZXNvdXJjZXMgPSBT
VkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyZXIobV9yZW5kZXJlcikp
IHsKKyAgICAgICAgICAgIGlmIChpbmNsdWRlRmlsdGVyKSB7CisgICAgICAgICAgICAgICAgaWYg
KGF1dG8qIGZpbHRlciA9IHJlc291cmNlcy0+ZmlsdGVyKCkpCisgICAgICAgICAgICAgICAgICAg
IGJveCA9IGZpbHRlci0+cmVzb3VyY2VCb3VuZGluZ0JveChtX3JlbmRlcmVyKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKGluY2x1ZGVDbGlwcGVyKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGF1dG8qIGNsaXBwZXIgPSByZXNvdXJjZXMtPmNsaXBwZXIoKSkKKyAgICAgICAgICAg
ICAgICAgICAgYm94LmludGVyc2VjdChjbGlwcGVyLT5yZXNvdXJjZUJvdW5kaW5nQm94KG1fcmVu
ZGVyZXIpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluY2x1ZGVNYXNrZXIp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogbWFza2VyID0gcmVzb3VyY2VzLT5tYXNrZXIo
KSkKKyAgICAgICAgICAgICAgICAgICAgYm94LmludGVyc2VjdChtYXNrZXItPnJlc291cmNlQm91
bmRpbmdCb3gobV9yZW5kZXJlcikpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoRGVjb3JhdGlvbk9wdGlvbjo6SW5jbHVkZU91dGxp
bmUpKQorICAgICAgICBib3guaW5mbGF0ZShtX3JlbmRlcmVyLm91dGxpbmVTdHlsZUZvclJlcGFp
bnQoKS5vdXRsaW5lU2l6ZSgpKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYTI0ZGZiMTcxMjQ5NWQyNWMxZjVkNzM2NWZiNTIwZjA5ZmI2MGRkNAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbi5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19F
TkdJTkUpCisKKyNpbmNsdWRlICJSZW5kZXJMYXllck1vZGVsT2JqZWN0LmgiCisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0UmVjdDsKKworY2xhc3MgU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1ZHQm91bmRpbmdCb3hDb21w
dXRhdGlvbik7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlv
bihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Jik7CisgICAgflNWR0JvdW5kaW5nQm94Q29t
cHV0YXRpb24oKTsKKworICAgIGVudW0gY2xhc3MgRGVjb3JhdGlvbk9wdGlvbiA6IHVpbnQ4X3Qg
eworICAgICAgICBJbmNsdWRlRmlsbFNoYXBlICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwg
LyogY29ycmVzcG9uZHMgdG8gJ2Jvb2wgZmlsbCcgICAgICovCisgICAgICAgIEluY2x1ZGVTdHJv
a2VTaGFwZSAgICAgICAgICAgICAgICAgID0gMSA8PCAxLCAvKiBjb3JyZXNwb25kcyB0byAnYm9v
bCBzdHJva2UnICAgKi8KKyAgICAgICAgSW5jbHVkZU1hcmtlcnMgICAgICAgICAgICAgICAgICAg
ICAgPSAxIDw8IDIsIC8qIGNvcnJlc3BvbmRzIHRvICdib29sIG1hcmtlcnMnICAqLworICAgICAg
ICBJbmNsdWRlQ2xpcHBlcnMgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMywgLyogY29ycmVz
cG9uZHMgdG8gJ2Jvb2wgY2xpcHBlcnMnICovCisgICAgICAgIEluY2x1ZGVNYXNrZXJzICAgICAg
ICAgICAgICAgICAgICAgID0gMSA8PCA0LCAvKiBXZWJLaXQgZXh0ZW5zaW9uIC0gaW50ZXJhbCAg
ICAgKi8KKyAgICAgICAgSW5jbHVkZU91dGxpbmUgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8
IDUsIC8qIFdlYktpdCBleHRlbnNpb24gLSBpbnRlcmFsICAgICAqLworICAgICAgICBPdmVycmlk
ZUJveFdpdGhGaWx0ZXJCb3ggICAgICAgICAgICA9IDEgPDwgNiwgLyogV2ViS2l0IGV4dGVuc2lv
biAtIGludGVyYWwgICAgICovCisgICAgICAgIE92ZXJyaWRlQm94V2l0aEZpbHRlckJveEZvckNo
aWxkcmVuID0gMSA8PCA3ICAvKiBXZWJLaXQgZXh0ZW5zaW9uIC0gaW50ZXJhbCAgICAgKi8KKyAg
ICB9OworCisgICAgdXNpbmcgRGVjb3JhdGlvbk9wdGlvbnMgPSBPcHRpb25TZXQ8RGVjb3JhdGlv
bk9wdGlvbj47CisKKyAgICBzdGF0aWMgY29uc3RleHByIERlY29yYXRpb25PcHRpb25zIG9iamVj
dEJvdW5kaW5nQm94RGVjb3JhdGlvbiA9IHsgRGVjb3JhdGlvbk9wdGlvbjo6SW5jbHVkZUZpbGxT
aGFwZSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgRGVjb3JhdGlvbk9wdGlvbnMgc3Ryb2tlQm91
bmRpbmdCb3hEZWNvcmF0aW9uID0geyBEZWNvcmF0aW9uT3B0aW9uOjpJbmNsdWRlRmlsbFNoYXBl
LCBEZWNvcmF0aW9uT3B0aW9uOjpJbmNsdWRlU3Ryb2tlU2hhcGUgfTsKKyAgICBzdGF0aWMgY29u
c3RleHByIERlY29yYXRpb25PcHRpb25zIGZpbHRlckJvdW5kaW5nQm94RGVjb3JhdGlvbiA9IHsg
RGVjb3JhdGlvbk9wdGlvbjo6T3ZlcnJpZGVCb3hXaXRoRmlsdGVyQm94LCBEZWNvcmF0aW9uT3B0
aW9uOjpPdmVycmlkZUJveFdpdGhGaWx0ZXJCb3hGb3JDaGlsZHJlbiB9OworICAgIHN0YXRpYyBj
b25zdGV4cHIgRGVjb3JhdGlvbk9wdGlvbnMgcmVwYWludEJvdW5kaW5nQm94RGVjb3JhdGlvbiA9
IHsgRGVjb3JhdGlvbk9wdGlvbjo6SW5jbHVkZUZpbGxTaGFwZSwgRGVjb3JhdGlvbk9wdGlvbjo6
SW5jbHVkZVN0cm9rZVNoYXBlLCBEZWNvcmF0aW9uT3B0aW9uOjpJbmNsdWRlTWFya2VycywgRGVj
b3JhdGlvbk9wdGlvbjo6SW5jbHVkZUNsaXBwZXJzLCBEZWNvcmF0aW9uT3B0aW9uOjpJbmNsdWRl
TWFza2VycywgRGVjb3JhdGlvbk9wdGlvbjo6T3ZlcnJpZGVCb3hXaXRoRmlsdGVyQm94IH07CisK
KyAgICBGbG9hdFJlY3QgY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KGNvbnN0IERlY29yYXRp
b25PcHRpb25zJiwgYm9vbCogYm91bmRpbmdCb3hWYWxpZCA9IG51bGxwdHIpIGNvbnN0OworCisg
ICAgc3RhdGljIEZsb2F0UmVjdCBjb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3goY29uc3QgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IERlY29yYXRpb25PcHRpb25zJiBv
cHRpb25zKQorICAgIHsKKyAgICAgICAgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbiBib3VuZGlu
Z0JveENvbXB1dGF0aW9uKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIGJvdW5kaW5nQm94Q29t
cHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KG9wdGlvbnMpOworICAgIH0KKwor
ICAgIHN0YXRpYyBGbG9hdFJlY3QgY29tcHV0ZVJlcGFpbnRCb3VuZGluZ0JveChjb25zdCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBjb21w
dXRlRGVjb3JhdGVkQm91bmRpbmdCb3gocmVuZGVyZXIsIHJlcGFpbnRCb3VuZGluZ0JveERlY29y
YXRpb24pOworICAgIH0KKworICAgIHN0YXRpYyBMYXlvdXRSZWN0IGNvbXB1dGVWaXN1YWxPdmVy
Zmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCisgICAgewor
ICAgICAgICBhdXRvIHJlcGFpbnRCb3VuZGluZ0JveCA9IGNvbXB1dGVEZWNvcmF0ZWRCb3VuZGlu
Z0JveChyZW5kZXJlciwgcmVwYWludEJvdW5kaW5nQm94RGVjb3JhdGlvbiB8IERlY29yYXRpb25P
cHRpb246OkluY2x1ZGVPdXRsaW5lKTsKKyAgICAgICAgaWYgKHJlcGFpbnRCb3VuZGluZ0JveC5p
c0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworCisgICAgICAgIGF1
dG8gdmlzdWFsT3ZlcmZsb3dSZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChyZXBhaW50Qm91bmRp
bmdCb3gpOworICAgICAgICB2aXN1YWxPdmVyZmxvd1JlY3QubW92ZUJ5KC1mbG9vcmVkTGF5b3V0
UG9pbnQocmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKSk7Cisg
ICAgICAgIHJldHVybiB2aXN1YWxPdmVyZmxvd1JlY3Q7CisgICAgfQorCitwcml2YXRlOgorICAg
IEZsb2F0UmVjdCBoYW5kbGVTaGFwZU9yVGV4dE9ySW5saW5lKGNvbnN0IERlY29yYXRpb25PcHRp
b25zJiwgYm9vbCogYm91bmRpbmdCb3hWYWxpZCA9IG51bGxwdHIpIGNvbnN0OworICAgIEZsb2F0
UmVjdCBoYW5kbGVSb290T3JDb250YWluZXIoY29uc3QgRGVjb3JhdGlvbk9wdGlvbnMmLCBib29s
KiBib3VuZGluZ0JveFZhbGlkID0gbnVsbHB0cikgY29uc3Q7CisgICAgRmxvYXRSZWN0IGhhbmRs
ZUZvcmVpZ25PYmplY3RPckltYWdlKGNvbnN0IERlY29yYXRpb25PcHRpb25zJiwgYm9vbCogYm91
bmRpbmdCb3hWYWxpZCA9IG51bGxwdHIpIGNvbnN0OworCisgICAgdm9pZCBhZGp1c3RCb3hGb3JD
bGlwcGluZ0FuZEVmZmVjdHMoY29uc3QgRGVjb3JhdGlvbk9wdGlvbnMmLCBGbG9hdFJlY3QmIGJv
eCwgY29uc3QgRGVjb3JhdGlvbk9wdGlvbnMmIG9wdGlvbnNUb0NoZWNrRm9yRmlsdGVycyA9IGZp
bHRlckJvdW5kaW5nQm94RGVjb3JhdGlvbikgY29uc3Q7CisKKyAgICBjb25zdCBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0JiBtX3JlbmRlcmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448644</attachid>
            <date>2022-01-07 16:12:55 -0800</date>
            <delta_ts>2022-01-10 01:58:41 -0800</delta_ts>
            <desc>Patch, v1</desc>
            <filename>bug-234632-20220107161253.patch</filename>
            <type>text/plain</type>
            <size>35178</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3Nzk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzBhMGUzMGRjYTIyYTJh
MDY3YTBkNWQzMDIzOTY3MDU0MTY2MGJmZC4uNWQ5NDAwMDBhZWJjMGIxZWMyMmFhY2MwMGMwNGZl
YjJmMTNhN2QzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDIyLTAxLTA3ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtMQlNF
XSBJbnRyb2R1Y2UgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0NjMyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS84NzAwMTMzND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBVcHN0cmVhbSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLCBhIHV0aWxpdHkgY2xh
c3MKKyAgICAgICAgaW1wbGVtZW50aW5nIHRoZSBTVkcyICJib3VuZGluZyBib3ggY29tcHV0YXRp
b24iIGFsZ29yaXRobSwKKyAgICAgICAgYXMgc3BlYydlZCBpbiBodHRwczovL3N2Z3dnLm9yZy9z
dmcyLWRyYWZ0L2Nvb3Jkcy5odG1sI0JvdW5kaW5nQm94ZXMuCisKKyAgICAgICAgU1ZHMiBhbHNv
IHNwZWNpZmllcyBhIG5ldyBvcHRpb25hbCBhcmd1bWVudCBmb3IgZ2V0QkJveCgpICYgZnJpZW5k
czoKKyAgICAgICAgRE9NUmVjdCBnZXRCQm94KG9wdGlvbmFsIFNWR0JvdW5kaW5nQm94T3B0aW9u
cyBvcHRpb25zID0ge30pOworCisgICAgICAgIFNWR0JvdW5kaW5nQm94T3B0aW9ucyBjYW4gYmUg
aW1wbGVtZW50ZWQgdXNpbmcgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjoKKyAgICAgICAgZXhw
b3NpbmcgdGhpcyB0byB0aGUgV2ViIGlzIGxlZnQgZm9yIHRoZSBmdXR1cmUsIG9uY2UgbW9yZSBv
ZiBMQlNFIGlzIHJlYWR5LgorCisgICAgICAgIExCU0UgdXRpbGl6ZXMgU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbiB3aGVuZXZlciBhbnkga2luZCBvZiBib3VuZGluZyBib3gKKyAgICAgICAgbmVl
ZHMgdG8gYmUgY29tcHV0ZWQgKG9iamVjdCAvIHN0cm9rZSAvIGRlY29yYXRlZCAoZS5nLiBpbmNs
dWRpbmcgbWFya2VycykuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cywgbm8g
Y2hhbmdlIGluIGJlaGF2aW91ci4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL0xlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpMZWdh
Y3lSZW5kZXJTVkdNb2RlbE9iamVjdDo6dmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVj
dC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnZpc3VhbE92ZXJm
bG93UmVjdEVxdWl2YWxlbnQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpsYXlvdXQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6U1ZHQm91bmRpbmdCb3hDb21wdXRh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjp+U1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdCb3VuZGluZ0Jv
eENvbXB1dGF0aW9uOjpjb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3ggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6aGFuZGxlU2hhcGVPclRleHRP
cklubGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdCb3VuZGluZ0JveENvbXB1dGF0
aW9uOjpoYW5kbGVSb290T3JDb250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbjo6aGFuZGxlRm9yZWlnbk9iamVjdE9ySW1hZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6YWRqdXN0Qm94
Rm9yQ2xpcHBpbmdBbmRFZmZlY3RzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NW
R0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdC
b3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3gpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVJlcGFpbnRC
b3VuZGluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9u
Ojpjb21wdXRlVmlzdWFsT3ZlcmZsb3dSZWN0KToKKwogMjAyMi0wMS0wNyAgTmlrb2xhcyBaaW1t
ZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KIAogICAgICAgICBbTEJTRV0gQmVnaW4g
bGF5ZXItYXdhcmUgUmVuZGVyU1ZHUmVjdCBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRl
eCAxM2VmZTRmZjMzNWEzNGI0MWM0NTE5ODQxNzRkYmY0MjdmOGQ2NjNkLi4wOWJhZDA4NjZlNjA3
MTgxZGFmOGZjOTFlNGRkNTdiNjE5YmZhZDNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjUwMSw2ICsy
NTAxLDcgQEAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0UGF0aC5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJs
ZUNvbnRhaW5lci5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIu
Y3BwCityZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uY3BwCiByZW5kZXJp
bmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRC
b3guY3BwCiByZW5kZXJpbmcvc3ZnL1NWR1BhdGhEYXRhLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDhmN2JjYmRhNDY3YTIx
YWY2MmFiYjE5NTY2NmU1ODliNDc2MmJjN2EuLmQyOGIzODMxZDRmNjkxOTJjYTU2MjAyYzgwMDRl
MTc4M2RjM2M1YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTI0NCw2ICsyNDQsNyBAQAogCQkwODU0QjAxOTEyNTVFNEU2MDBC
OUNERDAgLyogUmVuZGVyU1ZHVGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDg1NEIwMDcxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RleHQu
aCAqLzsgfTsKIAkJMDg1NEIwMUIxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RleHRQYXRo
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU0QjAw
OTEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVGV4dFBhdGguaCAqLzsgfTsKIAkJMDg1NEIw
MUQxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RTcGFuLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU0QjAwQjEyNTVFNEU2MDBCOUNERDAgLyog
UmVuZGVyU1ZHVFNwYW4uaCAqLzsgfTsKKwkJMDg0NEIwMUQxMjU1QjRFNjAwQjlDREQwIC8qIFNW
R0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4NDRCMDFEMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdCb3VuZGluZ0Jv
eENvbXB1dGF0aW9uLmggKi87IH07CiAJCTA4NTRCMDFGMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJ
bmxpbmVGbG93Qm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwODU0QjAwRDEyNTVFNEU2MDBCOUNERDAgLyogU1ZHSW5saW5lRmxvd0JveC5oICovOyB9
OwogCQkwODU0QjAyMTEyNTVFNEU2MDBCOUNERDAgLyogU1ZHSW5saW5lVGV4dEJveC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1NEIwMEYxMjU1RTRF
NjAwQjlDREQwIC8qIFNWR0lubGluZVRleHRCb3guaCAqLzsgfTsKIAkJMDg1NEIwMjMxMjU1RTRF
NjAwQjlDREQwIC8qIFNWR1Jvb3RJbmxpbmVCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTRCMDExMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdSb290
SW5saW5lQm94LmggKi87IH07CkBAIC02MTg1LDYgKzYxODYsOCBAQAogCQkwODU0QjAwODEyNTVF
NEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVGV4dFBhdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHVGV4dFBhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwODU0QjAwOTEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVGV4dFBh
dGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHVGV4dFBhdGgu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1NEIwMEIxMjU1RTRFNjAwQjlDREQw
IC8qIFJlbmRlclNWR1RTcGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlclNWR1RTcGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4MzRCMDBDMTI0
NEU0RTYwMEI5Q0REMCAvKiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwODQ0QjAxRDEyNTVFNEU2MDBCOUNERDAg
LyogU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA4NTRCMDBDMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJbmxpbmVGbG93Qm94LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0lubGluZUZsb3dCb3gu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODU0QjAwRDEyNTVFNEU2MDBCOUNE
RDAgLyogU1ZHSW5saW5lRmxvd0JveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTVkdJbmxpbmVGbG93Qm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NTRC
MDBFMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJbmxpbmVUZXh0Qm94LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0lubGluZVRleHRCb3guY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTg5OTQsNiArMTg5OTcsOCBAQAogCQkJCTA4NTRCMDBCMTI1
NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUU3Bhbi5oICovLAogCQkJCTQzNjcwOEFCMTJEOUNB
NEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAgKi8sCiAJCQkJNDM2
NzA4QUMxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmggKi8s
CisJCQkJMDgzNEIwMEMxMjQ0RTRFNjAwQjlDREQwIC8qIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRp
b24uY3BwICovLAorCQkJCTA4NDRCMDFEMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdCb3VuZGluZ0Jv
eENvbXB1dGF0aW9uLmggKi8sCiAJCQkJMDg1NEIwMEMxMjU1RTRFNjAwQjlDREQwIC8qIFNWR0lu
bGluZUZsb3dCb3guY3BwICovLAogCQkJCTA4NTRCMDBEMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJ
bmxpbmVGbG93Qm94LmggKi8sCiAJCQkJMDg1NEIwMEUxMjU1RTRFNjAwQjlDREQwIC8qIFNWR0lu
bGluZVRleHRCb3guY3BwICovLApAQCAtMzczMTUsNiArMzczMjAsNyBAQAogCQkJCUIyMjI3OTkz
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdBbmltYXRlTW90aW9uRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjIyMjc5OTUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5ODBEMDBCRjIyMDA3MUI3ODIgLyog
U1ZHQW5pbWF0aW9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDg0NEIwMUQxMjU1QjRF
NjAwQjlDREQwIC8qIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCUIyMjI3OTlDMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDaXJjbGVFbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMjIyNzk5RjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQ2xpcFBhdGhFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlBNTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9MZWdhY3lSZW5kZXJTVkdNb2RlbE9i
amVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9MZWdhY3lSZW5kZXJTVkdNb2Rl
bE9iamVjdC5oCmluZGV4IDcxOWQ4YmQyZDg0MDYxMDg5YWU5OTA3ZjkzOTYxNTA5Njc3ZGMwZmUu
LmI2ZjBlMzE3ZTY0MzkzYTI1YWRhODRhYTMwNjUwM2RhZjBiN2YyYTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL0xlZ2FjeVJlbmRlclNWR01vZGVsT2Jq
ZWN0LmgKQEAgLTYyLDEwICs2Miw2IEBAIHB1YmxpYzoKIAogICAgIFNWR0VsZW1lbnQmIGVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxTVkdFbGVtZW50Pihub2RlRm9yTm9uQW5vbnlt
b3VzKCkpOyB9CiAKLSAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb24KLSAgICAvLyBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxl
bnQoKSBjb25zdCB7IHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlVmlz
dWFsT3ZlcmZsb3dSZWN0KCp0aGlzKTsgfQotICAgIExheW91dFJlY3QgdmlzdWFsT3ZlcmZsb3dS
ZWN0RXF1aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFJlY3QoKTsgfQotCiBwcm90ZWN0
ZWQ6CiAgICAgTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QoU1ZHRWxlbWVudCYsIFJlbmRlclN0
eWxlJiYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR01vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmgKaW5kZXggZGJkYmUyMWNlNTZmMmYzMDJhZWM3YzU5OGE1OWY0NDUxZjM2
OGMwYS4uNzkyNGNmOGRjNWYxNjE3ODc3M2U3YTdhYmQzYzVkYmY0YTFiYTdhNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaApA
QCAtMzQsOCArMzQsNyBAQAogI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5o
IgotLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uCi0v
LyAjaW5jbHVkZSAiU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5oIgorI2luY2x1ZGUgIlNWR0Jv
dW5kaW5nQm94Q29tcHV0YXRpb24uaCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogCkBAIC02OSwxMiArNjgsNyBAQCBwdWJsaWM6CiAgICAg
TGF5b3V0UmVjdCBjb250ZW50Qm94UmVjdEVxdWl2YWxlbnQoKSBjb25zdCB7IHJldHVybiBib3Jk
ZXJCb3hSZWN0RXF1aXZhbGVudCgpOyB9CiAgICAgTGF5b3V0UmVjdCBmcmFtZVJlY3RFcXVpdmFs
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0OyB9CiAKLSAgICBMYXlvdXRSZWN0IHZp
c3VhbE92ZXJmbG93UmVjdEVxdWl2YWxlbnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uCi0gICAgICAgIC8v
IHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlVmlzdWFsT3ZlcmZsb3dS
ZWN0KCp0aGlzKTsKLSAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKLSAgICB9CisgICAgTGF5
b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4gU1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVZpc3VhbE92ZXJmbG93UmVjdCgqdGhpcyk7
IH0KIAogICAgIHZvaWQgYXBwbHlUb3BMZWZ0TG9jYXRpb25PZmZzZXRFcXVpdmFsZW50KExheW91
dFBvaW50JiBwb2ludCkgY29uc3QgeyBwb2ludC5tb3ZlQnkobGF5b3V0TG9jYXRpb24oKSk7IH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKaW5k
ZXggMTE0YWUxNTNlZDBiZGNlMjRmNDdmZDljY2RmNTc4ZGE1ZWM1NDQ0Mi4uMTIxYzYzNzY0OTA0
MWRlY2NlYmE1Nzk5NDlmNWNlNmRjM2ZmNDZkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCkBAIC0xOTMsMTYgKzE5MywxNiBAQCB2b2lkIFJl
bmRlclNWR1Jvb3Q6OmxheW91dCgpCiAgICAgLy8gU1ZHTGF5ZXJUcmFuc2Zvcm1VcGRhdGVyIHRy
YW5zZm9ybVVwZGF0ZXIoKnRoaXMpOwogICAgIHVwZGF0ZUxheWVySW5mb3JtYXRpb24oKTsKIAot
ICAgIC8qIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQ29udGFpbmVyTGF5b3V0IC8gU1ZHQm91
bmRpbmdCb3hDb21wdXRhdGlvbgogICAgIHsKKyAgICAgICAgLyogRklYTUU6IFtMQlNFXSBVcHN0
cmVhbSBTVkdDb250YWluZXJMYXlvdXQKICAgICAgICAgU1ZHQ29udGFpbmVyTGF5b3V0IGNvbnRh
aW5lckxheW91dCgqdGhpcyk7CiAgICAgICAgIGNvbnRhaW5lckxheW91dC5sYXlvdXRDaGlsZHJl
bihuZWVkc0xheW91dCB8fCBTVkdSZW5kZXJTdXBwb3J0OjpmaWx0ZXJzRm9yY2VDb250YWluZXJM
YXlvdXQoKnRoaXMpKTsKKyAgICAgICAgKi8KIAogICAgICAgICBTVkdCb3VuZGluZ0JveENvbXB1
dGF0aW9uIGJvdW5kaW5nQm94Q29tcHV0YXRpb24oKnRoaXMpOwogICAgICAgICBtX29iamVjdEJv
dW5kaW5nQm94ID0gYm91bmRpbmdCb3hDb21wdXRhdGlvbi5jb21wdXRlRGVjb3JhdGVkQm91bmRp
bmdCb3goU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6b2JqZWN0Qm91bmRpbmdCb3hEZWNvcmF0
aW9uKTsKICAgICAgICAgbV9zdHJva2VCb3VuZGluZ0JveCA9IGJvdW5kaW5nQm94Q29tcHV0YXRp
b24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246
OnN0cm9rZUJvdW5kaW5nQm94RGVjb3JhdGlvbik7CiAgICAgfQotICAgICovCiAKICAgICAvLyBG
SVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0NvbnRhaW5lckxheW91dCAtLSByZW1vdmUgU1ZHUmVu
ZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4uCiAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6bGF5b3V0
Q2hpbGRyZW4oKnRoaXMsIG5lZWRzTGF5b3V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290LmgKaW5kZXggNDM3MzEzZDA3OWJkZWQ0ZWM2ZmUwNWRiMDM1MWNj
ZDY5Y2M4Njc5OC4uNjZiYWIwODgxYTM3ZmU1ZjExMGI0NjVmZTBkODNiMWZhYzc4NjhjNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgKQEAgLTI2LDgg
KzI2LDcgQEAKICNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKICNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJSZXBsYWNlZC5oIgotLy8gRklYTUU6IFtMQlNF
XSBVcHN0cmVhbSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uCi0vLyAjaW5jbHVkZSAiU1ZHQm91
bmRpbmdCb3hDb21wdXRhdGlvbi5oIgorI2luY2x1ZGUgIlNWR0JvdW5kaW5nQm94Q29tcHV0YXRp
b24uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03MiwyMSArNzEsOSBAQCBwdWJsaWM6
CiAKICAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX29iamVjdEJvdW5kaW5nQm94OyB9CiAgICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsgfQorICAgIEZsb2F0
UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmNvbXB1dGVSZXBhaW50Qm91bmRpbmdCb3goKnRo
aXMpOyB9CiAKLSAgICAvLyBGSVhNRTogW0xCU0VdIE1hcmsgZmluYWwsIGFkZCByZXBhaW50Qm91
bmRpbmdCb3goKSB0byBSZW5kZXJPYmplY3QKLSAgICBGbG9hdFJlY3QgcmVwYWludEJvdW5kaW5n
Qm94KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbgotICAgICAgICAvLyByZXR1cm4gU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbjo6Y29tcHV0ZVJlcGFpbnRCb3VuZGluZ0JveCgqdGhpcyk7Ci0gICAgICAgIHJl
dHVybiBtX3N0cm9rZUJvdW5kaW5nQm94OwotICAgIH0KLQotICAgIExheW91dFJlY3QgdmlzdWFs
T3ZlcmZsb3dSZWN0RXF1aXZhbGVudCgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBGSVhNRTog
W0xCU0VdIFVwc3RyZWFtIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24KLSAgICAgICAgLy8gcmV0
dXJuIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmNvbXB1dGVWaXN1YWxPdmVyZmxvd1JlY3Qo
KnRoaXMpOwotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwotICAgIH0KKyAgICBMYXlvdXRS
ZWN0IHZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxlbnQoKSBjb25zdCB7IHJldHVybiBTVkdCb3Vu
ZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlVmlzdWFsT3ZlcmZsb3dSZWN0KCp0aGlzKTsgfQog
CiBwcml2YXRlOgogICAgIHZvaWQgZWxlbWVudCgpIGNvbnN0ID0gZGVsZXRlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAppbmRleCA5YTk1ZmEy
NTQ4ZDBmNDc0MTQ5NjI0MjhlMzhjMTQ1ODUxMGE3NzYzLi41YWJlZDIwZmM4ODAxMjE4N2MwNzQ0
ZjRhNDk2MjE5NDg4YWRjYzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1NoYXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1NoYXBlLmNwcApAQCAtNDAwLDcgKzQwMCw3IEBAIHN0YXRpYyBpbmxpbmUgUmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckZvclR5cGUoU1ZHTWFya2VyVHlwZSB0eXBlLCBS
ZW5kZXJTCiAgICAgcmV0dXJuIDA7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6Y29t
cHV0ZU1hcmtlckJvdW5kaW5nQm94KCkgY29uc3QKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6
Y29tcHV0ZU1hcmtlckJvdW5kaW5nQm94KGNvbnN0IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246
OkRlY29yYXRpb25PcHRpb25zJikgY29uc3QKIHsKICAgICBpZiAobV9tYXJrZXJQb3NpdGlvbnMu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CkBAIC00MTcsOCArNDE3LDEx
IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6Y29tcHV0ZU1hcmtlckJvdW5kaW5nQm94KCkg
Y29uc3QKICAgICBGbG9hdFJlY3QgYm91bmRhcmllczsKICAgICB1bnNpZ25lZCBzaXplID0gbV9t
YXJrZXJQb3NpdGlvbnMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKLSAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXIgPSBt
YXJrZXJGb3JUeXBlKG1fbWFya2VyUG9zaXRpb25zW2ldLnR5cGUsIG1hcmtlclN0YXJ0LCBtYXJr
ZXJNaWQsIG1hcmtlckVuZCkpCisgICAgICAgIGlmIChhdXRvKiBtYXJrZXIgPSBtYXJrZXJGb3JU
eXBlKG1fbWFya2VyUG9zaXRpb25zW2ldLnR5cGUsIG1hcmtlclN0YXJ0LCBtYXJrZXJNaWQsIG1h
cmtlckVuZCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIgY2hhbmdlcworICAgICAgICAgICAgLy8gYm91bmRhcmllcy51bml0
ZShtYXJrZXItPmNvbXB1dGVNYXJrZXJCb3VuZGluZ0JveChvcHRpb25zLCBtYXJrZXItPm1hcmtl
clRyYW5zZm9ybWF0aW9uKG1fbWFya2VyUG9zaXRpb25zW2ldLm9yaWdpbiwgbV9tYXJrZXJQb3Np
dGlvbnNbaV0uYW5nbGUsIHN0cm9rZVdpZHRoKCkpKSk7CiAgICAgICAgICAgICBib3VuZGFyaWVz
LnVuaXRlKG1hcmtlci0+bWFya2VyQm91bmRhcmllcyhtYXJrZXItPm1hcmtlclRyYW5zZm9ybWF0
aW9uKG1fbWFya2VyUG9zaXRpb25zW2ldLm9yaWdpbiwgbV9tYXJrZXJQb3NpdGlvbnNbaV0uYW5n
bGUsIHN0cm9rZVdpZHRoKCkpKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGJvdW5k
YXJpZXM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1NoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBl
LmgKaW5kZXggMWZhNGQ4YzM2MjU3NWMwNjlmYThiMjkwZjdhZWE3ZjZlODMzMDQ3MC4uNjkxZmI4
NmY5ZWZjMDkzYzU4NGIyMDBkOTVkYjNiZGU3YmM5ZWVkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaApAQCAtMzAsOCArMzAsNyBAQAogI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUg
IlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCi0vLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0Jv
dW5kaW5nQm94Q29tcHV0YXRpb24KLS8vICNpbmNsdWRlICJTVkdCb3VuZGluZ0JveENvbXB1dGF0
aW9uLmgiCisjaW5jbHVkZSAiU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5oIgogI2luY2x1ZGUg
IlNWR0dyYXBoaWNzRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR01hcmtlckRhdGEuaCIKICNpbmNs
dWRlIDxtZW1vcnk+CkBAIC04MCwxNSArNzksOSBAQCBwdWJsaWM6CiAKICAgICBGbG9hdFJlY3Qg
b2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbGxCb3VuZGluZ0Jv
eDsgfQogICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KKyAgICBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1
dGF0aW9uOjpjb21wdXRlUmVwYWludEJvdW5kaW5nQm94KCp0aGlzKTsgfQogCi0gICAgRmxvYXRS
ZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgZmluYWwKLSAgICB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlv
bgotICAgICAgICAvLyByZXR1cm4gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVJl
cGFpbnRCb3VuZGluZ0JveCgqdGhpcyk7IH0KLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwot
ICAgIH0KLQotICAgIEZsb2F0UmVjdCBjb21wdXRlTWFya2VyQm91bmRpbmdCb3goKSBjb25zdDsK
KyAgICBGbG9hdFJlY3QgY29tcHV0ZU1hcmtlckJvdW5kaW5nQm94KGNvbnN0IFNWR0JvdW5kaW5n
Qm94Q29tcHV0YXRpb246OkRlY29yYXRpb25PcHRpb25zJikgY29uc3Q7CiAKIHByb3RlY3RlZDoK
ICAgICB2b2lkIGVsZW1lbnQoKSBjb25zdCA9IGRlbGV0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjA2NzNmNjZhZWVjOWRmNWUxZjFkYWIxNTkwNGU2MWM2Mzc1Y2VmNjQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb24uY3BwCkBAIC0wLDAgKzEsMjkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxLCAyMDIyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdC
b3VuZGluZ0JveENvbXB1dGF0aW9uLmgiCisKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VO
R0lORSkKKyNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVy
U1ZHRm9yZWlnbk9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0ltYWdlLmgiCisjaW5jbHVk
ZSAiUmVuZGVyU1ZHSW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFza2Vy
LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBl
LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5o
IgorI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbihj
b25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKKyAgICA6IG1fcmVuZGVyZXIo
cmVuZGVyZXIpCit7Cit9CisKK1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246On5TVkdCb3VuZGlu
Z0JveENvbXB1dGF0aW9uKCkKK3sKK30KKworRmxvYXRSZWN0IFNWR0JvdW5kaW5nQm94Q29tcHV0
YXRpb246OmNvbXB1dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChjb25zdCBTVkdCb3VuZGluZ0JveENv
bXB1dGF0aW9uOjpEZWNvcmF0aW9uT3B0aW9ucyYgb3B0aW9ucywgYm9vbCogYm91bmRpbmdCb3hW
YWxpZCkgY29uc3QKK3sKKyAgICAvLyBTVkcyOiBCb3VuZGluZyBib3hlcyBhbGdvcml0aG0gKGh0
dHBzOi8vc3Znd2cub3JnL3N2ZzItZHJhZnQvY29vcmRzLmh0bWwjQm91bmRpbmdCb3hlcykKKwor
ICAgIC8vIFRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtIGRlZmluZXMgaG93IHRvIGNvbXB1dGUgYSBi
b3VuZGluZyBib3ggZm9yIGEgZ2l2ZW4gZWxlbWVudC4gVGhlIGlucHV0cyB0byB0aGUgYWxnb3Jp
dGhtIGFyZToKKyAgICAvLyAtIGVsZW1lbnQsIHRoZSBlbGVtZW50IHdlIGFyZSBjb21wdXRpbmcg
YSBib3VuZGluZyBib3ggZm9yOworICAgIC8vIC0gc3BhY2UsIGEgY29vcmRpbmF0ZSBzcGFjZSBp
biB3aGljaCB0aGUgYm91bmRpbmcgYm94IHdpbGwgYmUgY29tcHV0ZWQ7CisgICAgLy8gLSBmaWxs
LCBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBib3VuZGluZyBib3ggaW5jbHVkZXMg
dGhlIGdlb21ldHJ5IG9mIHRoZSBlbGVtZW50IGFuZCBpdHMgZGVzY2VuZGFudHM7CisgICAgLy8g
LSBzdHJva2UsIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGJvdW5kaW5nIGJveCBp
bmNsdWRlcyB0aGUgc3Ryb2tlIG9mIHRoZSBlbGVtZW50IGFuZCBpdHMgZGVzY2VuZGFudHM7Cisg
ICAgLy8gLSBtYXJrZXJzLCBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBib3VuZGlu
ZyBib3ggaW5jbHVkZXMgdGhlIG1hcmtlcnMgb2YgdGhlIGVsZW1lbnQgYW5kIGl0cyBkZXNjZW5k
YW50czsgYW5kCisgICAgLy8gLSBjbGlwcGVkLCBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVy
IHRoZSBib3VuZGluZyBib3ggaXMgYWZmZWN0ZWQgYnkgYW55IGNsaXBwaW5nIHBhdGhzIGFwcGxp
ZWQgdG8gdGhlIGVsZW1lbnQgYW5kIGl0cyBkZXNjZW5kYW50cy4KKworICAgIC8vIFRoZSBhbGdv
cml0aG0gdG8gY29tcHV0ZSB0aGUgYm91bmRpbmcgYm94IGlzIGFzIGZvbGxvd3MsIGRlcGVuZGlu
ZyBvbiB0aGUgdHlwZSBvZiBlbGVtZW50OgorICAgIC8vIC0gYSBzaGFwZSAoUmVuZGVyU1ZHU2hh
cGUpCisgICAgLy8gLSBhIHRleHQgY29udGVudCBlbGVtZW50IChSZW5kZXJTVkdUZXh0IG9yIFJl
bmRlclNWR0lubGluZSkKKyAgICAvLyAtIGFuIOKAmGHigJkgZWxlbWVudCB3aXRoaW4gYSB0ZXh0
IGNvbnRlbnQgZWxlbWVudCAoLT4gY3JlYXRlcyBSZW5kZXJTVkdJbmxpbmUpCisgICAgaWYgKGlz
PFJlbmRlclNWR1NoYXBlPihtX3JlbmRlcmVyKSB8fCBpczxSZW5kZXJTVkdUZXh0PihtX3JlbmRl
cmVyKSB8fCBpczxSZW5kZXJTVkdJbmxpbmU+KG1fcmVuZGVyZXIpKQorICAgICAgICByZXR1cm4g
aGFuZGxlU2hhcGVPclRleHRPcklubGluZShvcHRpb25zLCBib3VuZGluZ0JveFZhbGlkKTsKKwor
ICAgIC8vIC0gYSBjb250YWluZXIgZWxlbWVudCAoUmVuZGVyU1ZHUm9vdCAvIFJlbmRlclNWR0Nv
bnRhaW5lcikKKyAgICAvLyAtIOKAmHVzZeKAmSAoUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRh
aW5lcikKKyAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIG5ldyBSZW5kZXJTVkdDb250YWlu
ZXIgaW1wbGVtZW50YXRpb24KKyAgICAvLyBpZiAoaXM8UmVuZGVyU1ZHUm9vdD4obV9yZW5kZXJl
cikgfHwgaXM8UmVuZGVyU1ZHQ29udGFpbmVyPihtX3JlbmRlcmVyKSkKKyAgICBpZiAoaXM8UmVu
ZGVyU1ZHUm9vdD4obV9yZW5kZXJlcikpCisgICAgICAgIHJldHVybiBoYW5kbGVSb290T3JDb250
YWluZXIob3B0aW9ucywgYm91bmRpbmdCb3hWYWxpZCk7CisKKyAgICAvLyAtIOKAmGZvcmVpZ25P
YmplY3TigJkKKyAgICAvLyAtIOKAmGltYWdl4oCZCisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0
cmVhbSBuZXcgUmVuZGVyU1ZHSW1hZ2UgaW1wbGVtZW50YXRpb24KKyAgICAvLyBpZiAoaXM8UmVu
ZGVyU1ZHRm9yZWlnbk9iamVjdD4obV9yZW5kZXJlcikgfHwgaXM8UmVuZGVyU1ZHSW1hZ2U+KG1f
cmVuZGVyZXIpKQorICAgIGlmIChpczxSZW5kZXJTVkdGb3JlaWduT2JqZWN0PihtX3JlbmRlcmVy
KSkKKyAgICAgICAgcmV0dXJuIGhhbmRsZUZvcmVpZ25PYmplY3RPckltYWdlKG9wdGlvbnMsIGJv
dW5kaW5nQm94VmFsaWQpOworCisjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQorICAgIHNob3dS
ZW5kZXJUcmVlKCZtX3JlbmRlcmVyKTsKKyNlbmRpZgorCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworfQorCitGbG9hdFJlY3QgU1ZHQm91bmRpbmdC
b3hDb21wdXRhdGlvbjo6aGFuZGxlU2hhcGVPclRleHRPcklubGluZShjb25zdCBTVkdCb3VuZGlu
Z0JveENvbXB1dGF0aW9uOjpEZWNvcmF0aW9uT3B0aW9ucyYgb3B0aW9ucywgYm9vbCogYm91bmRp
bmdCb3hWYWxpZCkgY29uc3QKK3sKKyAgICAvLyAxLiBMZXQgYm94IGJlIGEgcmVjdGFuZ2xlIGlu
aXRpYWxpemVkIHRvICgwLCAwLCAwLCAwKS4KKyAgICBGbG9hdFJlY3QgYm94OworCisgICAgLy8g
Mi4gTGV0IGZpbGwtc2hhcGUgYmUgdGhlIGVxdWl2YWxlbnQgcGF0aCBvZiBlbGVtZW50IGlmIGl0
IGlzIGEgc2hhcGUsIG9yIGEgc2hhcGUgdGhhdCBpbmNsdWRlcyBlYWNoIG9mIHRoZQorICAgIC8v
ICAgIGdseXBoIGNlbGxzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHRleHQgd2l0aGluIHRoZSBlbGVt
ZW50cyBvdGhlcndpc2UuCisgICAgLy8gMy4gSWYgZmlsbCBpcyB0cnVlLCB0aGVuIHNldCBib3gg
dG8gdGhlIHRpZ2h0ZXN0IHJlY3RhbmdsZSBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gc3BhY2Ug
dGhhdCBjb250YWlucyBmaWxsLXNoYXBlLgorICAgIC8vCisgICAgLy8gTm90ZTogVGhlIHZhbHVl
cyBvZiB0aGUgZmlsbCwgZmlsbC1vcGFjaXR5IGFuZCBmaWxsLXJ1bGUgcHJvcGVydGllcyBkbyBu
b3QgYWZmZWN0IGZpbGwtc2hhcGUuCisgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoRGVjb3JhdGlv
bk9wdGlvbjo6SW5jbHVkZUZpbGxTaGFwZSkpCisgICAgICAgIGJveCA9IG1fcmVuZGVyZXIub2Jq
ZWN0Qm91bmRpbmdCb3goKTsKKworICAgIC8vIDQuIElmIHN0cm9rZSBpcyB0cnVlIGFuZCB0aGUg
ZWxlbWVudCdzIHN0cm9rZSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIG5vbmUsIHRoZW4gc2V0IGJv
eCB0byBiZSB0aGUgdW5pb24gb2YgYm94CisgICAgLy8gICAgYW5kIHRoZSB0aWdodGVzdCByZWN0
YW5nbGUgaW4gY29vcmRpbmF0ZSBzeXN0ZW0gc3BhY2UgdGhhdCBjb250YWlucyB0aGUgc3Ryb2tl
IHNoYXBlIG9mIHRoZSBlbGVtZW50LCB3aXRoIHRoZQorICAgIC8vICAgIGFzc3VtcHRpb24gdGhh
dCB0aGUgZWxlbWVudCBoYXMgbm8gZGFzaCBwYXR0ZXJuLgorICAgIC8vCisgICAgLy8gTm90ZTog
VGhlIHZhbHVlcyBvZiB0aGUgc3Ryb2tlLW9wYWNpdHksIHN0cm9rZS1kYXNoYXJyYXkgYW5kIHN0
cm9rZS1kYXNob2Zmc2V0IGRvIG5vdCBhZmZlY3QgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBzdHJv
a2Ugc2hhcGUuCisgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoRGVjb3JhdGlvbk9wdGlvbjo6SW5j
bHVkZVN0cm9rZVNoYXBlKSkKKyAgICAgICAgYm94LnVuaXRlKG1fcmVuZGVyZXIuc3Ryb2tlQm91
bmRpbmdCb3goKSk7CisKKyAgICAvLyA1LiBJZiBtYXJrZXJzIGlzIHRydWUsIHRoZW4gZm9yIGVh
Y2ggbWFya2VyIG1hcmtlciByZW5kZXJlZCBvbiB0aGUgZWxlbWVudDoKKyAgICAvLyAtIEZvciBl
YWNoIGRlc2NlbmRhbnQgZ3JhcGhpY3MgZWxlbWVudCBjaGlsZCBvZiB0aGUg4oCYbWFya2Vy4oCZ
IGVsZW1lbnQgdGhhdCBkZWZpbmVzIG1hcmtlcidzIGNvbnRlbnQ6CisgICAgLy8gICAtIElmIGNo
aWxkIGhhcyBhbiBhbmNlc3RvciBlbGVtZW50IHdpdGhpbiB0aGUg4oCYbWFya2Vy4oCZIHRoYXQg
aXMgJ2Rpc3BsYXk6IG5vbmUnLCBoYXMgYSBmYWlsaW5nIGNvbmRpdGlvbmFsIHByb2Nlc3Npbmcg
YXR0cmlidXRlLAorICAgIC8vICAgICBvciBpcyBub3QgYW4g4oCYYeKAmSwg4oCYZ+KAmSwg4oCY
c3Zn4oCZIG9yIOKAmHN3aXRjaOKAmSBlbGVtZW50LCB0aGVuIGNvbnRpbnVlIHRvIHRoZSBuZXh0
IGRlc2NlbmRhbnQgZ3JhcGhpY3MgZWxlbWVudC4KKyAgICAvLyAgIC0gT3RoZXJ3aXNlLCBzZXQg
Ym94IHRvIGJlIHRoZSB1bmlvbiBvZiBib3ggYW5kIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgdGhl
IGFsZ29yaXRobSB0byBjb21wdXRlIGEgYm91bmRpbmcgYm94IHdpdGggY2hpbGQgYXMKKyAgICAv
LyAgICAgdGhlIGVsZW1lbnQsIHNwYWNlIGFzIHRoZSB0YXJnZXQgY29vcmRpbmF0ZSBzcGFjZSwg
dHJ1ZSBmb3IgZmlsbCwgc3Ryb2tlIGFuZCBtYXJrZXJzLCBhbmQgY2xpcHBlZCBmb3IgY2xpcHBl
ZC4KKyAgICBpZiAob3B0aW9ucy5jb250YWlucyhEZWNvcmF0aW9uT3B0aW9uOjpJbmNsdWRlTWFy
a2VycykgJiYgaXM8UmVuZGVyU1ZHU2hhcGU+KG1fcmVuZGVyZXIpKSB7CisgICAgICAgIERlY29y
YXRpb25PcHRpb25zIG9wdGlvbnNGb3JNYXJrZXIgPSB7IERlY29yYXRpb25PcHRpb246OkluY2x1
ZGVGaWxsU2hhcGUsIERlY29yYXRpb25PcHRpb246OkluY2x1ZGVTdHJva2VTaGFwZSwgRGVjb3Jh
dGlvbk9wdGlvbjo6SW5jbHVkZU1hcmtlcnMgfTsKKyAgICAgICAgaWYgKG9wdGlvbnMuY29udGFp
bnMoRGVjb3JhdGlvbk9wdGlvbjo6SW5jbHVkZUNsaXBwZXJzKSkKKyAgICAgICAgICAgIG9wdGlv
bnNGb3JNYXJrZXIuYWRkKERlY29yYXRpb25PcHRpb246OkluY2x1ZGVDbGlwcGVycyk7CisgICAg
ICAgIGJveC51bml0ZShkb3duY2FzdDxSZW5kZXJTVkdTaGFwZT4obV9yZW5kZXJlcikuY29tcHV0
ZU1hcmtlckJvdW5kaW5nQm94KG9wdGlvbnMpKTsKKyAgICB9CisKKyAgICAvLyA2LiBJZiBjbGlw
cGVkIGlzIHRydWUgYW5kIHRoZSB2YWx1ZSBvZiBjbGlwLXBhdGggb24gZWxlbWVudCBpcyBub3Qg
bm9uZSwgdGhlbiBzZXQgYm94IHRvIGJlIHRoZSB0aWdodGVzdCByZWN0YW5nbGUKKyAgICAvLyAg
ICBpbiBjb29yZGluYXRlIHN5c3RlbSBzcGFjZSB0aGF0IGNvbnRhaW5zIHRoZSBpbnRlcnNlY3Rp
b24gb2YgYm94IGFuZCB0aGUgY2xpcHBpbmcgcGF0aC4KKyAgICBhZGp1c3RCb3hGb3JDbGlwcGlu
Z0FuZEVmZmVjdHMob3B0aW9ucywgYm94KTsKKworICAgIC8vIDcuIFJldHVybiBib3guCisgICAg
aWYgKGJvdW5kaW5nQm94VmFsaWQpCisgICAgICAgICpib3VuZGluZ0JveFZhbGlkID0gdHJ1ZTsK
KyAgICByZXR1cm4gYm94OworfQorCitGbG9hdFJlY3QgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlv
bjo6aGFuZGxlUm9vdE9yQ29udGFpbmVyKGNvbnN0IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246
OkRlY29yYXRpb25PcHRpb25zJiBvcHRpb25zLCBib29sKiBib3VuZGluZ0JveFZhbGlkKSBjb25z
dAoreworICAgIGF1dG8gdHJhbnNmb3JtYXRpb25NYXRyaXhGcm9tQ2hpbGQgPSBbXShjb25zdCBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0JiBjaGlsZCkgLT4gc3RkOjpvcHRpb25hbDxUcmFuc2Zvcm1h
dGlvbk1hdHJpeD4geworICAgICAgICBpZiAoIWNoaWxkLmhhc1RyYW5zZm9ybSgpKQorICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBhdXRvKiBjb250YWluZXIgPSBj
aGlsZC5wYXJlbnQoKTsKKyAgICAgICAgQVNTRVJUKGNvbnRhaW5lcik7CisKKyAgICAgICAgYm9v
bCBjb250YWluZXJTa2lwcGVkID0gZmFsc2U7CisgICAgICAgIEFTU0VSVChjb250YWluZXIgPT0g
Y2hpbGQuY29udGFpbmVyKG51bGxwdHIsIGNvbnRhaW5lclNraXBwZWQpKTsKKyAgICAgICAgQVNT
RVJUX1VOVVNFRChjb250YWluZXJTa2lwcGVkLCAhY29udGFpbmVyU2tpcHBlZCk7CisKKyAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm07CisgICAgICAgIGNoaWxkLmdl
dFRyYW5zZm9ybUZyb21Db250YWluZXIoY29udGFpbmVyLCBMYXlvdXRTaXplKCksIGxheWVyVHJh
bnNmb3JtKTsKKyAgICAgICAgcmV0dXJuIGxheWVyVHJhbnNmb3JtLmlzSWRlbnRpdHkoKSA/IHN0
ZDo6bnVsbG9wdCA6IHN0ZDo6bWFrZV9vcHRpb25hbChXVEZNb3ZlKGxheWVyVHJhbnNmb3JtKSk7
CisgICAgfTsKKworICAgIGF1dG8gdW5pdGVCb3VuZGluZ0JveFJlc3BlY3RpbmdWYWxpZGl0eSA9
IFtdKGJvb2wmIGJveFZhbGlkLCBGbG9hdFJlY3QmIGJveCwgY29uc3QgUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdCYgLyogY2hpbGQgKi8sIGNvbnN0IEZsb2F0UmVjdCYgY2hpbGRCb3VuZGluZ0JveCkg
eworICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIG5ldyBSZW5kZXJTVkdDb250YWlu
ZXIgaW1wbGVtZW50YXRpb24KKyAgICAgICAgLy8gYm9vbCBpc0JvdW5kaW5nQm94VmFsaWQgPSBp
czxSZW5kZXJTVkdDb250YWluZXI+KGNoaWxkKSA/IGRvd25jYXN0PFJlbmRlclNWR0NvbnRhaW5l
cj4oY2hpbGQpLmlzT2JqZWN0Qm91bmRpbmdCb3hWYWxpZCgpIDogdHJ1ZTsKKyAgICAgICAgYm9v
bCBpc0JvdW5kaW5nQm94VmFsaWQgPSB0cnVlOworICAgICAgICBpZiAoIWlzQm91bmRpbmdCb3hW
YWxpZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoYm94VmFsaWQpIHsKKyAg
ICAgICAgICAgIGJveC51bml0ZUV2ZW5JZkVtcHR5KGNoaWxkQm91bmRpbmdCb3gpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYm94ID0gY2hpbGRCb3VuZGluZ0Jv
eDsKKyAgICAgICAgYm94VmFsaWQgPSB0cnVlOworICAgIH07CisKKyAgICAvLyAxLiBMZXQgYm94
IGJlIGEgcmVjdGFuZ2xlIGluaXRpYWxpemVkIHRvICgwLCAwLCAwLCAwKS4KKyAgICBGbG9hdFJl
Y3QgYm94OworICAgIGJvb2wgYm94VmFsaWQgPSBmYWxzZTsKKworICAgIC8vIDIuIExldCBwYXJl
bnQgYmUgdGhlIGNvbnRhaW5lciBlbGVtZW50IGlmIGl0IGlzIG9uZSwgb3IgdGhlIHJvb3Qgb2Yg
dGhlIOKAmHVzZeKAmSBlbGVtZW50J3Mgc2hhZG93IHRyZWUgb3RoZXJ3aXNlLgorCisgICAgLy8g
My4gRm9yIGVhY2ggZGVzY2VuZGFudCBncmFwaGljcyBlbGVtZW50IGNoaWxkIG9mIHBhcmVudDoK
KyAgICAvLyAgICAtIElmIGNoaWxkIGlzIG5vdCByZW5kZXJlZCB0aGVuIGNvbnRpbnVlIHRvIHRo
ZSBuZXh0IGRlc2NlbmRhbnQgZ3JhcGhpY3MgZWxlbWVudC4KKyAgICAvLyAgICAtIE90aGVyd2lz
ZSwgc2V0IGJveCB0byBiZSB0aGUgdW5pb24gb2YgYm94IGFuZCB0aGUgcmVzdWx0IG9mIGludm9r
aW5nIHRoZSBhbGdvcml0aG0gdG8gY29tcHV0ZSBhIGJvdW5kaW5nIGJveCB3aXRoIGNoaWxkCisg
ICAgLy8gICAgICBhcyB0aGUgZWxlbWVudCBhbmQgdGhlIHNhbWUgdmFsdWVzIGZvciBzcGFjZSwg
ZmlsbCwgc3Ryb2tlLCBtYXJrZXJzIGFuZCBjbGlwcGVkIGFzIHRoZSBjb3JyZXNwb25kaW5nIGFs
Z29yaXRobSBpbnB1dCB2YWx1ZXMuCisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZU
eXBlPFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KG1fcmVuZGVyZXIpKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBbTEJTRV0gVXBzdHJlYW0gbmV3IFJlbmRlclNWR0NvbnRhaW5lciBpbXBsZW1lbnRhdGlv
bgorICAgICAgICAvLyBpZiAoaXM8UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyPihjaGlsZCkgfHwg
KGlzPFJlbmRlclNWR1NoYXBlPihjaGlsZCkgJiYgZG93bmNhc3Q8UmVuZGVyU1ZHU2hhcGU+KGNo
aWxkKS5pc1JlbmRlcmluZ0Rpc2FibGVkKCkpKQorICAgICAgICBpZiAoaXM8UmVuZGVyU1ZHU2hh
cGU+KGNoaWxkKSAmJiBkb3duY2FzdDxSZW5kZXJTVkdTaGFwZT4oY2hpbGQpLmlzUmVuZGVyaW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFNWR0JvdW5kaW5n
Qm94Q29tcHV0YXRpb24gY2hpbGRCb3VuZGluZ0JveENvbXB1dGF0aW9uKGNoaWxkKTsKKyAgICAg
ICAgYXV0byBjaGlsZEJveCA9IGNoaWxkQm91bmRpbmdCb3hDb21wdXRhdGlvbi5jb21wdXRlRGVj
b3JhdGVkQm91bmRpbmdCb3gob3B0aW9ucyk7CisgICAgICAgIC8vIEZJWE1FOiBVcHN0cmVhbSBu
ZXcgUmVuZGVyU1ZHQ29udGFpbmVyIGltcGxlbWVudGF0aW9uCisgICAgICAgIC8vIGlmIChvcHRp
b25zLmNvbnRhaW5zKERlY29yYXRpb25PcHRpb246Ok92ZXJyaWRlQm94V2l0aEZpbHRlckJveEZv
ckNoaWxkcmVuKSAmJiBpczxSZW5kZXJTVkdDb250YWluZXI+KGNoaWxkKSkKKyAgICAgICAgLy8g
ICAgY2hpbGRCb3VuZGluZ0JveENvbXB1dGF0aW9uLmFkanVzdEJveEZvckNsaXBwaW5nQW5kRWZm
ZWN0cyh7IERlY29yYXRpb25PcHRpb246Ok92ZXJyaWRlQm94V2l0aEZpbHRlckJveCB9LCBjaGls
ZEJveCk7CisKKyAgICAgICAgaWYgKGF1dG8gbGF5ZXJUcmFuc2Zvcm0gPSB0cmFuc2Zvcm1hdGlv
bk1hdHJpeEZyb21DaGlsZChjaGlsZCkpCisgICAgICAgICAgICBjaGlsZEJveCA9IGxheWVyVHJh
bnNmb3JtLT5tYXBSZWN0KGNoaWxkQm94KTsKKworICAgICAgICBpZiAob3B0aW9ucyA9PSBvYmpl
Y3RCb3VuZGluZ0JveERlY29yYXRpb24pCisgICAgICAgICAgICB1bml0ZUJvdW5kaW5nQm94UmVz
cGVjdGluZ1ZhbGlkaXR5KGJveFZhbGlkLCBib3gsIGNoaWxkLCBjaGlsZEJveCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGJveC51bml0ZShjaGlsZEJveCk7CisgICAgfQorCisgICAgLy8g
NC4gSWYgY2xpcHBlZCBpcyB0cnVlOgorICAgIC8vICAgIC0gSWYgdGhlIHZhbHVlIG9mIGNsaXAt
cGF0aCBvbiBlbGVtZW50IGlzIG5vdCBub25lLCB0aGVuIHNldCBib3ggdG8gYmUgdGhlIHRpZ2h0
ZXN0IHJlY3RhbmdsZSBpbiBjb29yZGluYXRlIHN5c3RlbSBzcGFjZSB0aGF0CisgICAgLy8gICAg
ICBjb250YWlucyB0aGUgaW50ZXJzZWN0aW9uIG9mIGJveCBhbmQgdGhlIGNsaXBwaW5nIHBhdGgu
CisgICAgLy8gICAgLSBJZiB0aGUgb3ZlcmZsb3cgcHJvcGVydHkgYXBwbGllcyB0byB0aGUgZWxl
bWVudCBhbmQgZG9lcyBub3QgaGF2ZSBhIHZhbHVlIG9mIHZpc2libGUsIHRoZW4gc2V0IGJveCB0
byBiZSB0aGUgdGlnaHRlc3QgcmVjdGFuZ2xlCisgICAgLy8gICAgICBpbiBjb29yZGluYXRlIHN5
c3RlbSBzcGFjZSB0aGF0IGNvbnRhaW5zIHRoZSBpbnRlcnNlY3Rpb24gb2YgYm94IGFuZCB0aGUg
ZWxlbWVudCdzIG92ZXJmbG93IGJvdW5kcy4KKyAgICAvLyAgICAtIElmIHRoZSBjbGlwIHByb3Bl
cnR5IGFwcGxpZXMgdG8gdGhlIGVsZW1lbnQgYW5kIGRvZXMgbm90IGhhdmUgYSB2YWx1ZSBvZiBh
dXRvLCB0aGVuIHNldCBib3ggdG8gYmUgdGhlIHRpZ2h0ZXN0IHJlY3RhbmdsZSBpbiBjb29yZGlu
YXRlCisgICAgLy8gICAgICBzeXN0ZW0gc3BhY2UgdGhhdCBjb250YWlucyB0aGUgaW50ZXJzZWN0
aW9uIG9mIGJveCBhbmQgdGhlIHJlY3RhbmdsZSBzcGVjaWZpZWQgYnkgY2xpcC4gKFRPRE8hKQor
ICAgIGFkanVzdEJveEZvckNsaXBwaW5nQW5kRWZmZWN0cyhvcHRpb25zLCBib3gsIHsgRGVjb3Jh
dGlvbk9wdGlvbjo6T3ZlcnJpZGVCb3hXaXRoRmlsdGVyQm94IH0pOworCisgICAgaWYgKG9wdGlv
bnMuY29udGFpbnMoRGVjb3JhdGlvbk9wdGlvbjo6SW5jbHVkZUNsaXBwZXJzKSAmJiBtX3JlbmRl
cmVyLmhhc05vblZpc2libGVPdmVyZmxvdygpKSB7CisgICAgICAgIEFTU0VSVChtX3JlbmRlcmVy
Lmhhc0xheWVyKCkpOworCisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gbmV3IFJl
bmRlclNWR0NvbnRhaW5lciAvIFJlbmRlclNWR1Jlc291cmNlTWFya2VyIGltcGxlbWVudGF0aW9u
CisgICAgICAgIC8vIEFTU0VSVChpczxSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcj4obV9yZW5k
ZXJlcikgfHwgaXM8UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI+KG1fcmVuZGVyZXIpIHx8IGlzPFJl
bmRlclNWR1Jvb3Q+KG1fcmVuZGVyZXIpKTsKKyAgICAgICAgQVNTRVJUKGlzPFJlbmRlclNWR1Jv
b3Q+KG1fcmVuZGVyZXIpKTsKKworICAgICAgICBMYXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJlY3Q7
CisgICAgICAgIGlmIChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4obV9yZW5kZXJlcikpCisgICAg
ICAgICAgICBvdmVyZmxvd0NsaXBSZWN0ID0gZG93bmNhc3Q8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+
KG1fcmVuZGVyZXIpLm92ZXJmbG93Q2xpcFJlY3QoTGF5b3V0UG9pbnQoKSk7CisgICAgICAgIGVs
c2UgaWYgKGlzPFJlbmRlckJveD4obV9yZW5kZXJlcikpCisgICAgICAgICAgICBvdmVyZmxvd0Ns
aXBSZWN0ID0gZG93bmNhc3Q8UmVuZGVyQm94PihtX3JlbmRlcmVyKS5vdmVyZmxvd0NsaXBSZWN0
KExheW91dFBvaW50KCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICB9CisK
KyAgICAgICAgYm94LmludGVyc2VjdChGbG9hdFJlY3Qob3ZlcmZsb3dDbGlwUmVjdCkpOworICAg
IH0KKworICAgIC8vIDUuIFJldHVybiBib3guCisgICAgaWYgKGJvdW5kaW5nQm94VmFsaWQpCisg
ICAgICAgICpib3VuZGluZ0JveFZhbGlkID0gYm94VmFsaWQ7CisgICAgcmV0dXJuIGJveDsKK30K
KworRmxvYXRSZWN0IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmhhbmRsZUZvcmVpZ25PYmpl
Y3RPckltYWdlKGNvbnN0IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OkRlY29yYXRpb25PcHRp
b25zJiBvcHRpb25zLCBib29sKiBib3VuZGluZ0JveFZhbGlkKSBjb25zdAoreworICAgIC8vIDEu
IExldCBib3ggYmUgdGhlIHRpZ2h0ZXN0IHJlY3RhbmdsZSBpbiBjb29yZGluYXRlIHNwYWNlIHNw
YWNlIHRoYXQgY29udGFpbnMgdGhlIHBvc2l0aW9uaW5nIHJlY3RhbmdsZQorICAgIC8vICAgIGRl
ZmluZWQgYnkgdGhlIOKAmHjigJksIOKAmHnigJksIOKAmHdpZHRo4oCZIGFuZCDigJhoZWlnaHTi
gJkgZ2VvbWV0cmljIHByb3BlcnRpZXMgb2YgdGhlIGVsZW1lbnQuCisgICAgLy8KKyAgICAvLyBO
b3RlOiBUaGUgZmlsbCwgc3Ryb2tlIGFuZCBtYXJrZXJzIGlucHV0IGFyZ3VtZW50cyB0byB0aGlz
IGFsZ29yaXRobSBkbyBub3QgYWZmZWN0IHRoZSBib3VuZGluZyBib3ggcmV0dXJuZWQgZm9yIHRo
ZXNlIGVsZW1lbnRzLgorICAgIGF1dG8gYm94ID0gbV9yZW5kZXJlci5vYmplY3RCb3VuZGluZ0Jv
eCgpOworCisgICAgLy8gMi4gSWYgY2xpcHBlZCBpcyB0cnVlIGFuZCB0aGUgdmFsdWUgb2YgY2xp
cC1wYXRoIG9uIGVsZW1lbnQgaXMgbm90IG5vbmUsIHRoZW4gc2V0IGJveCB0byBiZSB0aGUgdGln
aHRlc3QgcmVjdGFuZ2xlCisgICAgLy8gICAgaW4gY29vcmRpbmF0ZSBzeXN0ZW0gc3BhY2UgdGhh
dCBjb250YWlucyB0aGUgaW50ZXJzZWN0aW9uIG9mIGJveCBhbmQgdGhlIGNsaXBwaW5nIHBhdGgu
CisgICAgYWRqdXN0Qm94Rm9yQ2xpcHBpbmdBbmRFZmZlY3RzKG9wdGlvbnMsIGJveCk7CisKKyAg
ICAvLyAzLiBSZXR1cm4gYm94LgorICAgIGlmIChib3VuZGluZ0JveFZhbGlkKQorICAgICAgICAq
Ym91bmRpbmdCb3hWYWxpZCA9IHRydWU7CisgICAgcmV0dXJuIGJveDsKK30KKwordm9pZCBTVkdC
b3VuZGluZ0JveENvbXB1dGF0aW9uOjphZGp1c3RCb3hGb3JDbGlwcGluZ0FuZEVmZmVjdHMoY29u
c3QgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6RGVjb3JhdGlvbk9wdGlvbnMmIG9wdGlvbnMs
IEZsb2F0UmVjdCYgYm94LCBjb25zdCBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpEZWNvcmF0
aW9uT3B0aW9ucyYgb3B0aW9uc1RvQ2hlY2tGb3JGaWx0ZXJzKSBjb25zdAoreworICAgIGJvb2wg
aW5jbHVkZUZpbHRlciA9IGZhbHNlOworICAgIGZvciAoYXV0byBmaWx0ZXJPcHRpb24gOiBvcHRp
b25zVG9DaGVja0ZvckZpbHRlcnMpIHsKKyAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoZmls
dGVyT3B0aW9uKSkgeworICAgICAgICAgICAgaW5jbHVkZUZpbHRlciA9IHRydWU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaW5jbHVkZUNsaXBwZXIg
PSBvcHRpb25zLmNvbnRhaW5zKERlY29yYXRpb25PcHRpb246OkluY2x1ZGVDbGlwcGVycyk7Cisg
ICAgYm9vbCBpbmNsdWRlTWFza2VyID0gb3B0aW9ucy5jb250YWlucyhEZWNvcmF0aW9uT3B0aW9u
OjpJbmNsdWRlTWFza2Vycyk7CisKKyAgICBpZiAoaW5jbHVkZUZpbHRlciB8fCBpbmNsdWRlQ2xp
cHBlciB8fCBpbmNsdWRlTWFza2VyKSB7CisgICAgICAgIGlmIChhdXRvKiByZXNvdXJjZXMgPSBT
VkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyZXIobV9yZW5kZXJlcikp
IHsKKyAgICAgICAgICAgIGlmIChpbmNsdWRlRmlsdGVyKSB7CisgICAgICAgICAgICAgICAgaWYg
KGF1dG8qIGZpbHRlciA9IHJlc291cmNlcy0+ZmlsdGVyKCkpCisgICAgICAgICAgICAgICAgICAg
IGJveCA9IGZpbHRlci0+cmVzb3VyY2VCb3VuZGluZ0JveChtX3JlbmRlcmVyKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKGluY2x1ZGVDbGlwcGVyKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGF1dG8qIGNsaXBwZXIgPSByZXNvdXJjZXMtPmNsaXBwZXIoKSkKKyAgICAgICAgICAg
ICAgICAgICAgYm94LmludGVyc2VjdChjbGlwcGVyLT5yZXNvdXJjZUJvdW5kaW5nQm94KG1fcmVu
ZGVyZXIpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluY2x1ZGVNYXNrZXIp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogbWFza2VyID0gcmVzb3VyY2VzLT5tYXNrZXIo
KSkKKyAgICAgICAgICAgICAgICAgICAgYm94LmludGVyc2VjdChtYXNrZXItPnJlc291cmNlQm91
bmRpbmdCb3gobV9yZW5kZXJlcikpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoRGVjb3JhdGlvbk9wdGlvbjo6SW5jbHVkZU91dGxp
bmUpKQorICAgICAgICBib3guaW5mbGF0ZShtX3JlbmRlcmVyLm91dGxpbmVTdHlsZUZvclJlcGFp
bnQoKS5vdXRsaW5lU2l6ZSgpKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYTI0ZGZiMTcxMjQ5NWQyNWMxZjVkNzM2NWZiNTIwZjA5ZmI2MGRkNAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbi5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19F
TkdJTkUpCisKKyNpbmNsdWRlICJSZW5kZXJMYXllck1vZGVsT2JqZWN0LmgiCisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0UmVjdDsKKworY2xhc3MgU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1ZHQm91bmRpbmdCb3hDb21w
dXRhdGlvbik7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlv
bihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Jik7CisgICAgflNWR0JvdW5kaW5nQm94Q29t
cHV0YXRpb24oKTsKKworICAgIGVudW0gY2xhc3MgRGVjb3JhdGlvbk9wdGlvbiA6IHVpbnQ4X3Qg
eworICAgICAgICBJbmNsdWRlRmlsbFNoYXBlICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwg
LyogY29ycmVzcG9uZHMgdG8gJ2Jvb2wgZmlsbCcgICAgICovCisgICAgICAgIEluY2x1ZGVTdHJv
a2VTaGFwZSAgICAgICAgICAgICAgICAgID0gMSA8PCAxLCAvKiBjb3JyZXNwb25kcyB0byAnYm9v
bCBzdHJva2UnICAgKi8KKyAgICAgICAgSW5jbHVkZU1hcmtlcnMgICAgICAgICAgICAgICAgICAg
ICAgPSAxIDw8IDIsIC8qIGNvcnJlc3BvbmRzIHRvICdib29sIG1hcmtlcnMnICAqLworICAgICAg
ICBJbmNsdWRlQ2xpcHBlcnMgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMywgLyogY29ycmVz
cG9uZHMgdG8gJ2Jvb2wgY2xpcHBlcnMnICovCisgICAgICAgIEluY2x1ZGVNYXNrZXJzICAgICAg
ICAgICAgICAgICAgICAgID0gMSA8PCA0LCAvKiBXZWJLaXQgZXh0ZW5zaW9uIC0gaW50ZXJhbCAg
ICAgKi8KKyAgICAgICAgSW5jbHVkZU91dGxpbmUgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8
IDUsIC8qIFdlYktpdCBleHRlbnNpb24gLSBpbnRlcmFsICAgICAqLworICAgICAgICBPdmVycmlk
ZUJveFdpdGhGaWx0ZXJCb3ggICAgICAgICAgICA9IDEgPDwgNiwgLyogV2ViS2l0IGV4dGVuc2lv
biAtIGludGVyYWwgICAgICovCisgICAgICAgIE92ZXJyaWRlQm94V2l0aEZpbHRlckJveEZvckNo
aWxkcmVuID0gMSA8PCA3ICAvKiBXZWJLaXQgZXh0ZW5zaW9uIC0gaW50ZXJhbCAgICAgKi8KKyAg
ICB9OworCisgICAgdXNpbmcgRGVjb3JhdGlvbk9wdGlvbnMgPSBPcHRpb25TZXQ8RGVjb3JhdGlv
bk9wdGlvbj47CisKKyAgICBzdGF0aWMgY29uc3RleHByIERlY29yYXRpb25PcHRpb25zIG9iamVj
dEJvdW5kaW5nQm94RGVjb3JhdGlvbiA9IHsgRGVjb3JhdGlvbk9wdGlvbjo6SW5jbHVkZUZpbGxT
aGFwZSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgRGVjb3JhdGlvbk9wdGlvbnMgc3Ryb2tlQm91
bmRpbmdCb3hEZWNvcmF0aW9uID0geyBEZWNvcmF0aW9uT3B0aW9uOjpJbmNsdWRlRmlsbFNoYXBl
LCBEZWNvcmF0aW9uT3B0aW9uOjpJbmNsdWRlU3Ryb2tlU2hhcGUgfTsKKyAgICBzdGF0aWMgY29u
c3RleHByIERlY29yYXRpb25PcHRpb25zIGZpbHRlckJvdW5kaW5nQm94RGVjb3JhdGlvbiA9IHsg
RGVjb3JhdGlvbk9wdGlvbjo6T3ZlcnJpZGVCb3hXaXRoRmlsdGVyQm94LCBEZWNvcmF0aW9uT3B0
aW9uOjpPdmVycmlkZUJveFdpdGhGaWx0ZXJCb3hGb3JDaGlsZHJlbiB9OworICAgIHN0YXRpYyBj
b25zdGV4cHIgRGVjb3JhdGlvbk9wdGlvbnMgcmVwYWludEJvdW5kaW5nQm94RGVjb3JhdGlvbiA9
IHsgRGVjb3JhdGlvbk9wdGlvbjo6SW5jbHVkZUZpbGxTaGFwZSwgRGVjb3JhdGlvbk9wdGlvbjo6
SW5jbHVkZVN0cm9rZVNoYXBlLCBEZWNvcmF0aW9uT3B0aW9uOjpJbmNsdWRlTWFya2VycywgRGVj
b3JhdGlvbk9wdGlvbjo6SW5jbHVkZUNsaXBwZXJzLCBEZWNvcmF0aW9uT3B0aW9uOjpJbmNsdWRl
TWFza2VycywgRGVjb3JhdGlvbk9wdGlvbjo6T3ZlcnJpZGVCb3hXaXRoRmlsdGVyQm94IH07CisK
KyAgICBGbG9hdFJlY3QgY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KGNvbnN0IERlY29yYXRp
b25PcHRpb25zJiwgYm9vbCogYm91bmRpbmdCb3hWYWxpZCA9IG51bGxwdHIpIGNvbnN0OworCisg
ICAgc3RhdGljIEZsb2F0UmVjdCBjb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3goY29uc3QgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IERlY29yYXRpb25PcHRpb25zJiBv
cHRpb25zKQorICAgIHsKKyAgICAgICAgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbiBib3VuZGlu
Z0JveENvbXB1dGF0aW9uKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIGJvdW5kaW5nQm94Q29t
cHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KG9wdGlvbnMpOworICAgIH0KKwor
ICAgIHN0YXRpYyBGbG9hdFJlY3QgY29tcHV0ZVJlcGFpbnRCb3VuZGluZ0JveChjb25zdCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBjb21w
dXRlRGVjb3JhdGVkQm91bmRpbmdCb3gocmVuZGVyZXIsIHJlcGFpbnRCb3VuZGluZ0JveERlY29y
YXRpb24pOworICAgIH0KKworICAgIHN0YXRpYyBMYXlvdXRSZWN0IGNvbXB1dGVWaXN1YWxPdmVy
Zmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCisgICAgewor
ICAgICAgICBhdXRvIHJlcGFpbnRCb3VuZGluZ0JveCA9IGNvbXB1dGVEZWNvcmF0ZWRCb3VuZGlu
Z0JveChyZW5kZXJlciwgcmVwYWludEJvdW5kaW5nQm94RGVjb3JhdGlvbiB8IERlY29yYXRpb25P
cHRpb246OkluY2x1ZGVPdXRsaW5lKTsKKyAgICAgICAgaWYgKHJlcGFpbnRCb3VuZGluZ0JveC5p
c0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworCisgICAgICAgIGF1
dG8gdmlzdWFsT3ZlcmZsb3dSZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChyZXBhaW50Qm91bmRp
bmdCb3gpOworICAgICAgICB2aXN1YWxPdmVyZmxvd1JlY3QubW92ZUJ5KC1mbG9vcmVkTGF5b3V0
UG9pbnQocmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKSk7Cisg
ICAgICAgIHJldHVybiB2aXN1YWxPdmVyZmxvd1JlY3Q7CisgICAgfQorCitwcml2YXRlOgorICAg
IEZsb2F0UmVjdCBoYW5kbGVTaGFwZU9yVGV4dE9ySW5saW5lKGNvbnN0IERlY29yYXRpb25PcHRp
b25zJiwgYm9vbCogYm91bmRpbmdCb3hWYWxpZCA9IG51bGxwdHIpIGNvbnN0OworICAgIEZsb2F0
UmVjdCBoYW5kbGVSb290T3JDb250YWluZXIoY29uc3QgRGVjb3JhdGlvbk9wdGlvbnMmLCBib29s
KiBib3VuZGluZ0JveFZhbGlkID0gbnVsbHB0cikgY29uc3Q7CisgICAgRmxvYXRSZWN0IGhhbmRs
ZUZvcmVpZ25PYmplY3RPckltYWdlKGNvbnN0IERlY29yYXRpb25PcHRpb25zJiwgYm9vbCogYm91
bmRpbmdCb3hWYWxpZCA9IG51bGxwdHIpIGNvbnN0OworCisgICAgdm9pZCBhZGp1c3RCb3hGb3JD
bGlwcGluZ0FuZEVmZmVjdHMoY29uc3QgRGVjb3JhdGlvbk9wdGlvbnMmLCBGbG9hdFJlY3QmIGJv
eCwgY29uc3QgRGVjb3JhdGlvbk9wdGlvbnMmIG9wdGlvbnNUb0NoZWNrRm9yRmlsdGVycyA9IGZp
bHRlckJvdW5kaW5nQm94RGVjb3JhdGlvbikgY29uc3Q7CisKKyAgICBjb25zdCBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0JiBtX3JlbmRlcmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448727</attachid>
            <date>2022-01-10 01:58:46 -0800</date>
            <delta_ts>2022-01-10 05:15:57 -0800</delta_ts>
            <desc>Patch, v2</desc>
            <filename>bug-234632-20220110015845.patch</filename>
            <type>text/plain</type>
            <size>35064</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3ODMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTE3MzczNTJjMWRlNDVm
ZTYzMWZlMzFjZTRiYzJjODlhNzNjODYzYi4uMDkyOTkxNmI2ZTAyOTYyZjA2OWJlZWM1ZDY1NjE4
Njk0M2M0OTU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDIyLTAxLTEwICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtMQlNF
XSBJbnRyb2R1Y2UgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0NjMyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS84NzAwMTMzND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBVcHN0cmVhbSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLCBhIHV0aWxpdHkgY2xh
c3MKKyAgICAgICAgaW1wbGVtZW50aW5nIHRoZSBTVkcyICJib3VuZGluZyBib3ggY29tcHV0YXRp
b24iIGFsZ29yaXRobSwKKyAgICAgICAgYXMgc3BlYydlZCBpbiBodHRwczovL3N2Z3dnLm9yZy9z
dmcyLWRyYWZ0L2Nvb3Jkcy5odG1sI0JvdW5kaW5nQm94ZXMuCisKKyAgICAgICAgU1ZHMiBhbHNv
IHNwZWNpZmllcyBhIG5ldyBvcHRpb25hbCBhcmd1bWVudCBmb3IgZ2V0QkJveCgpICYgZnJpZW5k
czoKKyAgICAgICAgRE9NUmVjdCBnZXRCQm94KG9wdGlvbmFsIFNWR0JvdW5kaW5nQm94T3B0aW9u
cyBvcHRpb25zID0ge30pOworCisgICAgICAgIFNWR0JvdW5kaW5nQm94T3B0aW9ucyBjYW4gYmUg
aW1wbGVtZW50ZWQgdXNpbmcgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjoKKyAgICAgICAgZXhw
b3NpbmcgdGhpcyB0byB0aGUgV2ViIGlzIGxlZnQgZm9yIHRoZSBmdXR1cmUsIG9uY2UgbW9yZSBv
ZiBMQlNFIGlzIHJlYWR5LgorCisgICAgICAgIExCU0UgdXRpbGl6ZXMgU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbiB3aGVuZXZlciBhbnkga2luZCBvZiBib3VuZGluZyBib3gKKyAgICAgICAgbmVl
ZHMgdG8gYmUgY29tcHV0ZWQgKG9iamVjdCAvIHN0cm9rZSAvIGRlY29yYXRlZCAoZS5nLiBpbmNs
dWRpbmcgbWFya2VycykuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cywgbm8g
Y2hhbmdlIGluIGJlaGF2aW91ci4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL0xlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpMZWdh
Y3lSZW5kZXJTVkdNb2RlbE9iamVjdDo6dmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVj
dC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnZpc3VhbE92ZXJm
bG93UmVjdEVxdWl2YWxlbnQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpsYXlvdXQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6U1ZHQm91bmRpbmdCb3hDb21wdXRh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjp+U1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdCb3VuZGluZ0Jv
eENvbXB1dGF0aW9uOjpjb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3ggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6aGFuZGxlU2hhcGVPclRleHRP
cklubGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdCb3VuZGluZ0JveENvbXB1dGF0
aW9uOjpoYW5kbGVSb290T3JDb250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbjo6aGFuZGxlRm9yZWlnbk9iamVjdE9ySW1hZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6YWRqdXN0Qm94
Rm9yQ2xpcHBpbmdBbmRFZmZlY3RzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NW
R0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdC
b3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3gpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVJlcGFpbnRC
b3VuZGluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9u
Ojpjb21wdXRlVmlzdWFsT3ZlcmZsb3dSZWN0KToKKwogMjAyMi0wMS0xMCAgTmlrb2xhcyBaaW1t
ZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KIAogICAgICAgICBbTEJTRV0gQmVnaW4g
bGF5ZXItYXdhcmUgUmVuZGVyU1ZHU2hhcGUgaW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5k
ZXggNThmNDcwOTBkNmY2Y2NkNjJhNjRiMzUxMzU0NzM3NDhkMjU5NWZkNS4uMWIwYjg2OWQ2MjBj
YzgwNzczZTBmNjgyZTRjZDhmYmM5NjI4MzkyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTI1MDAsNiAr
MjUwMCw3IEBAIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVGV4dFBhdGguY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFi
bGVDb250YWluZXIuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVy
LmNwcAorcmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmNwcAogcmVuZGVy
aW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcAogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0
Qm94LmNwcAogcmVuZGVyaW5nL3N2Zy9TVkdQYXRoRGF0YS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhY2JkZDQ3MzRkMTE4
ZWZjZjMxZGE4OThiZjI2YjIzNjk2MDI0NWQxLi4xNWJhNjAyYzZhNGQ3ZDZiMWUxYzQ5NThkZDA4
Y2M3MDk4MDk2Mzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0yNDQsNiArMjQ0LDcgQEAKIAkJMDg1NEIwMTkxMjU1RTRFNjAw
QjlDREQwIC8qIFJlbmRlclNWR1RleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4NTRCMDA3MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUZXh0
LmggKi87IH07CiAJCTA4NTRCMDFCMTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUZXh0UGF0
aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1NEIw
MDkxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RleHRQYXRoLmggKi87IH07CiAJCTA4NTRC
MDFEMTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUU3Bhbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1NEIwMEIxMjU1RTRFNjAwQjlDREQwIC8q
IFJlbmRlclNWR1RTcGFuLmggKi87IH07CisJCTA4NDRCMDFEMTI1NUI0RTYwMEI5Q0REMCAvKiBT
VkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwODQ0QjAxRDEyNTVFNEU2MDBCOUNERDAgLyogU1ZHQm91bmRpbmdC
b3hDb21wdXRhdGlvbi5oICovOyB9OwogCQkwODU0QjAxRjEyNTVFNEU2MDBCOUNERDAgLyogU1ZH
SW5saW5lRmxvd0JveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDg1NEIwMEQxMjU1RTRFNjAwQjlDREQwIC8qIFNWR0lubGluZUZsb3dCb3guaCAqLzsg
fTsKIAkJMDg1NEIwMjExMjU1RTRFNjAwQjlDREQwIC8qIFNWR0lubGluZVRleHRCb3guaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTRCMDBGMTI1NUU0
RTYwMEI5Q0REMCAvKiBTVkdJbmxpbmVUZXh0Qm94LmggKi87IH07CiAJCTA4NTRCMDIzMTI1NUU0
RTYwMEI5Q0REMCAvKiBTVkdSb290SW5saW5lQm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU0QjAxMTEyNTVFNEU2MDBCOUNERDAgLyogU1ZHUm9v
dElubGluZUJveC5oICovOyB9OwpAQCAtNjE4NCw2ICs2MTg1LDggQEAKIAkJMDg1NEIwMDgxMjU1
RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RleHRQYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1RleHRQYXRoLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDg1NEIwMDkxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RleHRQ
YXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1RleHRQYXRo
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NTRCMDBCMTI1NUU0RTYwMEI5Q0RE
MCAvKiBSZW5kZXJTVkdUU3Bhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJTVkdUU3Bhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwODM0QjAwQzEy
NDRFNEU2MDBCOUNERDAgLyogU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDg0NEIwMUQxMjU1RTRFNjAwQjlDREQw
IC8qIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwODU0QjAwQzEyNTVFNEU2MDBCOUNERDAgLyogU1ZHSW5saW5lRmxvd0JveC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdJbmxpbmVGbG93Qm94
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1NEIwMEQxMjU1RTRFNjAwQjlD
REQwIC8qIFNWR0lubGluZUZsb3dCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHSW5saW5lRmxvd0JveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODU0
QjAwRTEyNTVFNEU2MDBCOUNERDAgLyogU1ZHSW5saW5lVGV4dEJveC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdJbmxpbmVUZXh0Qm94LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4OTg5LDYgKzE4OTkyLDggQEAKIAkJCQkwODU0QjAwQjEy
NTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVFNwYW4uaCAqLywKIAkJCQk0MzY3MDhBQjEyRDlD
QTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwICovLAogCQkJCTQz
NjcwOEFDMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oICov
LAorCQkJCTA4MzRCMDBDMTI0NEU0RTYwMEI5Q0REMCAvKiBTVkdCb3VuZGluZ0JveENvbXB1dGF0
aW9uLmNwcCAqLywKKwkJCQkwODQ0QjAxRDEyNTVFNEU2MDBCOUNERDAgLyogU1ZHQm91bmRpbmdC
b3hDb21wdXRhdGlvbi5oICovLAogCQkJCTA4NTRCMDBDMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJ
bmxpbmVGbG93Qm94LmNwcCAqLywKIAkJCQkwODU0QjAwRDEyNTVFNEU2MDBCOUNERDAgLyogU1ZH
SW5saW5lRmxvd0JveC5oICovLAogCQkJCTA4NTRCMDBFMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJ
bmxpbmVUZXh0Qm94LmNwcCAqLywKQEAgLTM3MzA5LDYgKzM3MzE0LDcgQEAKIAkJCQlCMjIyNzk5
MzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUIyMjI3OTk1MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdBbmltYXRlVHJhbnNmb3Jt
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5OTgwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR0FuaW1hdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTA4NDRCMDFEMTI1NUI0
RTYwMEI5Q0REMCAvKiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCMjIyNzk5QzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQ2lyY2xlRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjIyMjc5OUYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0NsaXBQYXRoRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5QTUwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvTGVnYWN5UmVuZGVyU1ZHTW9kZWxP
YmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvTGVnYWN5UmVuZGVyU1ZHTW9k
ZWxPYmplY3QuaAppbmRleCA3MTlkOGJkMmQ4NDA2MTA4OWFlOTkwN2Y5Mzk2MTUwOTY3N2RjMGZl
Li5iNmYwZTMxN2U2NDM5M2EyNWFkYTg0YWEzMDY1MDNkYWYwYjdmMmEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL0xlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9MZWdhY3lSZW5kZXJTVkdNb2RlbE9i
amVjdC5oCkBAIC02MiwxMCArNjIsNiBAQCBwdWJsaWM6CiAKICAgICBTVkdFbGVtZW50JiBlbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8U1ZHRWxlbWVudD4obm9kZUZvck5vbkFub255
bW91cygpKTsgfQogCi0gICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdCb3VuZGluZ0Jv
eENvbXB1dGF0aW9uCi0gICAgLy8gTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFs
ZW50KCkgY29uc3QgeyByZXR1cm4gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVZp
c3VhbE92ZXJmbG93UmVjdCgqdGhpcyk7IH0KLSAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93
UmVjdEVxdWl2YWxlbnQoKSBjb25zdCB7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0KLQogcHJvdGVj
dGVkOgogICAgIExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0KFNWR0VsZW1lbnQmLCBSZW5kZXJT
dHlsZSYmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdNb2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdNb2RlbE9iamVjdC5oCmluZGV4IGRiZGJlMjFjZTU2ZjJmMzAyYWVjN2M1OThhNTlmNDQ1MWYz
NjhjMGEuLjc5MjRjZjhkYzVmMTYxNzg3NzNlN2E3YWJkM2M1ZGJmNGExYmE3YTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgK
QEAgLTM0LDggKzM0LDcgQEAKICNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKICNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyTW9kZWxPYmplY3Qu
aCIKLS8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbgot
Ly8gI2luY2x1ZGUgIlNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaCIKKyNpbmNsdWRlICJTVkdC
b3VuZGluZ0JveENvbXB1dGF0aW9uLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1
ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKIApAQCAtNjksMTIgKzY4LDcgQEAgcHVibGljOgogICAg
IExheW91dFJlY3QgY29udGVudEJveFJlY3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4gYm9y
ZGVyQm94UmVjdEVxdWl2YWxlbnQoKTsgfQogICAgIExheW91dFJlY3QgZnJhbWVSZWN0RXF1aXZh
bGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0UmVjdDsgfQogCi0gICAgTGF5b3V0UmVjdCB2
aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbgotICAgICAgICAv
LyByZXR1cm4gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVZpc3VhbE92ZXJmbG93
UmVjdCgqdGhpcyk7Ci0gICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7Ci0gICAgfQorICAgIExh
eW91dFJlY3QgdmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJuIFNW
R0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmNvbXB1dGVWaXN1YWxPdmVyZmxvd1JlY3QoKnRoaXMp
OyB9CiAKICAgICB2b2lkIGFwcGx5VG9wTGVmdExvY2F0aW9uT2Zmc2V0RXF1aXZhbGVudChMYXlv
dXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcG9pbnQubW92ZUJ5KGxheW91dExvY2F0aW9uKCkpOyB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9v
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCmlu
ZGV4IDExNGFlMTUzZWQwYmRjZTI0ZjQ3ZmQ5Y2NkZjU3OGRhNWVjNTQ0NDIuLjEyMWM2Mzc2NDkw
NDFkZWNjZWJhNTc5OTQ5ZjVjZTZkYzNmZjQ2ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcApAQCAtMTkzLDE2ICsxOTMsMTYgQEAgdm9pZCBS
ZW5kZXJTVkdSb290OjpsYXlvdXQoKQogICAgIC8vIFNWR0xheWVyVHJhbnNmb3JtVXBkYXRlciB0
cmFuc2Zvcm1VcGRhdGVyKCp0aGlzKTsKICAgICB1cGRhdGVMYXllckluZm9ybWF0aW9uKCk7CiAK
LSAgICAvKiBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0NvbnRhaW5lckxheW91dCAvIFNWR0Jv
dW5kaW5nQm94Q29tcHV0YXRpb24KICAgICB7CisgICAgICAgIC8qIEZJWE1FOiBbTEJTRV0gVXBz
dHJlYW0gU1ZHQ29udGFpbmVyTGF5b3V0CiAgICAgICAgIFNWR0NvbnRhaW5lckxheW91dCBjb250
YWluZXJMYXlvdXQoKnRoaXMpOwogICAgICAgICBjb250YWluZXJMYXlvdXQubGF5b3V0Q2hpbGRy
ZW4obmVlZHNMYXlvdXQgfHwgU1ZHUmVuZGVyU3VwcG9ydDo6ZmlsdGVyc0ZvcmNlQ29udGFpbmVy
TGF5b3V0KCp0aGlzKSk7CisgICAgICAgICovCiAKICAgICAgICAgU1ZHQm91bmRpbmdCb3hDb21w
dXRhdGlvbiBib3VuZGluZ0JveENvbXB1dGF0aW9uKCp0aGlzKTsKICAgICAgICAgbV9vYmplY3RC
b3VuZGluZ0JveCA9IGJvdW5kaW5nQm94Q29tcHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5k
aW5nQm94KFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246Om9iamVjdEJvdW5kaW5nQm94RGVjb3Jh
dGlvbik7CiAgICAgICAgIG1fc3Ryb2tlQm91bmRpbmdCb3ggPSBib3VuZGluZ0JveENvbXB1dGF0
aW9uLmNvbXB1dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9u
OjpzdHJva2VCb3VuZGluZ0JveERlY29yYXRpb24pOwogICAgIH0KLSAgICAqLwogCiAgICAgLy8g
RklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdDb250YWluZXJMYXlvdXQgLS0gcmVtb3ZlIFNWR1Jl
bmRlclN1cHBvcnQ6OmxheW91dENoaWxkcmVuLgogICAgIFNWR1JlbmRlclN1cHBvcnQ6OmxheW91
dENoaWxkcmVuKCp0aGlzLCBuZWVkc0xheW91dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUm9vdC5oCmluZGV4IDQzNzMxM2QwNzliZGVkNGVjNmZlMDVkYjAzNTFj
Y2Q2OWNjODY3OTguLjY2YmFiMDg4MWEzN2ZlNWYxMTBiNDY1ZmUwZDgzYjFmYWM3ODY4YzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCkBAIC0yNiw4
ICsyNiw3IEBACiAjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVwbGFjZWQuaCIKLS8vIEZJWE1FOiBbTEJT
RV0gVXBzdHJlYW0gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbgotLy8gI2luY2x1ZGUgIlNWR0Jv
dW5kaW5nQm94Q29tcHV0YXRpb24uaCIKKyNpbmNsdWRlICJTVkdCb3VuZGluZ0JveENvbXB1dGF0
aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzIsMjEgKzcxLDkgQEAgcHVibGlj
OgogCiAgICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQogICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0Jv
eCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KKyAgICBGbG9h
dFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlUmVwYWludEJvdW5kaW5nQm94KCp0
aGlzKTsgfQogCi0gICAgLy8gRklYTUU6IFtMQlNFXSBNYXJrIGZpbmFsLCBhZGQgcmVwYWludEJv
dW5kaW5nQm94KCkgdG8gUmVuZGVyT2JqZWN0Ci0gICAgRmxvYXRSZWN0IHJlcGFpbnRCb3VuZGlu
Z0JveCgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNW
R0JvdW5kaW5nQm94Q29tcHV0YXRpb24KLSAgICAgICAgLy8gcmV0dXJuIFNWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb246OmNvbXB1dGVSZXBhaW50Qm91bmRpbmdCb3goKnRoaXMpOwotICAgICAgICBy
ZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsKLSAgICB9Ci0KLSAgICBMYXlvdXRSZWN0IHZpc3Vh
bE92ZXJmbG93UmVjdEVxdWl2YWxlbnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gRklYTUU6
IFtMQlNFXSBVcHN0cmVhbSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uCi0gICAgICAgIC8vIHJl
dHVybiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlVmlzdWFsT3ZlcmZsb3dSZWN0
KCp0aGlzKTsKLSAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKLSAgICB9CisgICAgTGF5b3V0
UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4gU1ZHQm91
bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVZpc3VhbE92ZXJmbG93UmVjdCgqdGhpcyk7IH0K
IAogcHJpdmF0ZToKICAgICB2b2lkIGVsZW1lbnQoKSBjb25zdCA9IGRlbGV0ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAKaW5kZXggOWE5NWZh
MjU0OGQwZjQ3NDE0OTYyNDI4ZTM4YzE0NTg1MTBhNzc2My4uNWFiZWQyMGZjODgwMTIxODdjMDc0
NGY0YTQ5NjIxOTQ4OGFkY2MwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdTaGFwZS5jcHAKQEAgLTQwMCw3ICs0MDAsNyBAQCBzdGF0aWMgaW5saW5lIFJl
bmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJGb3JUeXBlKFNWR01hcmtlclR5cGUgdHlwZSwg
UmVuZGVyUwogICAgIHJldHVybiAwOwogfQogCi1GbG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6OmNv
bXB1dGVNYXJrZXJCb3VuZGluZ0JveCgpIGNvbnN0CitGbG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6
OmNvbXB1dGVNYXJrZXJCb3VuZGluZ0JveChjb25zdCBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9u
OjpEZWNvcmF0aW9uT3B0aW9ucyYpIGNvbnN0CiB7CiAgICAgaWYgKG1fbWFya2VyUG9zaXRpb25z
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwpAQCAtNDE3LDggKzQxNywx
MSBAQCBGbG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6OmNvbXB1dGVNYXJrZXJCb3VuZGluZ0JveCgp
IGNvbnN0CiAgICAgRmxvYXRSZWN0IGJvdW5kYXJpZXM7CiAgICAgdW5zaWduZWQgc2l6ZSA9IG1f
bWFya2VyUG9zaXRpb25zLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7Ci0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyID0g
bWFya2VyRm9yVHlwZShtX21hcmtlclBvc2l0aW9uc1tpXS50eXBlLCBtYXJrZXJTdGFydCwgbWFy
a2VyTWlkLCBtYXJrZXJFbmQpKQorICAgICAgICBpZiAoYXV0byogbWFya2VyID0gbWFya2VyRm9y
VHlwZShtX21hcmtlclBvc2l0aW9uc1tpXS50eXBlLCBtYXJrZXJTdGFydCwgbWFya2VyTWlkLCBt
YXJrZXJFbmQpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFJlbmRl
clNWR1Jlc291cmNlTWFya2VyIGNoYW5nZXMKKyAgICAgICAgICAgIC8vIGJvdW5kYXJpZXMudW5p
dGUobWFya2VyLT5jb21wdXRlTWFya2VyQm91bmRpbmdCb3gob3B0aW9ucywgbWFya2VyLT5tYXJr
ZXJUcmFuc2Zvcm1hdGlvbihtX21hcmtlclBvc2l0aW9uc1tpXS5vcmlnaW4sIG1fbWFya2VyUG9z
aXRpb25zW2ldLmFuZ2xlLCBzdHJva2VXaWR0aCgpKSkpOwogICAgICAgICAgICAgYm91bmRhcmll
cy51bml0ZShtYXJrZXItPm1hcmtlckJvdW5kYXJpZXMobWFya2VyLT5tYXJrZXJUcmFuc2Zvcm1h
dGlvbihtX21hcmtlclBvc2l0aW9uc1tpXS5vcmlnaW4sIG1fbWFya2VyUG9zaXRpb25zW2ldLmFu
Z2xlLCBzdHJva2VXaWR0aCgpKSkpOworICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBib3Vu
ZGFyaWVzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdTaGFwZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFw
ZS5oCmluZGV4IDFmYTRkOGMzNjI1NzVjMDY5ZmE4YjI5MGY3YWVhN2Y2ZTgzMzA0NzAuLjY5MWZi
ODZmOWVmYzA5M2M1ODRiMjAwZDk1ZGIzYmRlN2JjOWVlZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgKQEAgLTMwLDggKzMwLDcgQEAKICNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgotLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdC
b3VuZGluZ0JveENvbXB1dGF0aW9uCi0vLyAjaW5jbHVkZSAiU1ZHQm91bmRpbmdCb3hDb21wdXRh
dGlvbi5oIgorI2luY2x1ZGUgIlNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaCIKICNpbmNsdWRl
ICJTVkdHcmFwaGljc0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdNYXJrZXJEYXRhLmgiCiAjaW5j
bHVkZSA8bWVtb3J5PgpAQCAtODAsMTUgKzc5LDkgQEAgcHVibGljOgogCiAgICAgRmxvYXRSZWN0
IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWxsQm91bmRpbmdC
b3g7IH0KICAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX3N0cm9rZUJvdW5kaW5nQm94OyB9CisgICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5M
b2NhbENvb3JkaW5hdGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU1ZHQm91bmRpbmdCb3hDb21w
dXRhdGlvbjo6Y29tcHV0ZVJlcGFpbnRCb3VuZGluZ0JveCgqdGhpcyk7IH0KIAotICAgIEZsb2F0
UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IGZpbmFsCi0gICAgewot
ICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRp
b24KLSAgICAgICAgLy8gcmV0dXJuIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmNvbXB1dGVS
ZXBhaW50Qm91bmRpbmdCb3goKnRoaXMpOyB9Ci0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsK
LSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgY29tcHV0ZU1hcmtlckJvdW5kaW5nQm94KCkgY29uc3Q7
CisgICAgRmxvYXRSZWN0IGNvbXB1dGVNYXJrZXJCb3VuZGluZ0JveChjb25zdCBTVkdCb3VuZGlu
Z0JveENvbXB1dGF0aW9uOjpEZWNvcmF0aW9uT3B0aW9ucyYpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBlbGVtZW50KCkgY29uc3QgPSBkZWxldGU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mNTg1MTI4MTMwZTFlNTQ4NmI1ZmVhMmY5ZTI5MGUzZDcyM2FjZWVmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGluZ0Jv
eENvbXB1dGF0aW9uLmNwcApAQCAtMCwwICsxLDI4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSwgMjAyMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbi5oIgorCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19F
TkdJTkUpCisjaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgorI2luY2x1ZGUgIlJlbmRl
clNWR0ZvcmVpZ25PYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdJbWFnZS5oIgorI2luY2x1
ZGUgIlJlbmRlclNWR0lubGluZS5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBl
ci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCisjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hc2tl
ci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFw
ZS5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZXMu
aCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OlNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24o
Y29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCisgICAgOiBtX3JlbmRlcmVy
KHJlbmRlcmVyKQoreworfQorCitGbG9hdFJlY3QgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6
Y29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KGNvbnN0IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRp
b246OkRlY29yYXRpb25PcHRpb25zJiBvcHRpb25zLCBib29sKiBib3VuZGluZ0JveFZhbGlkKSBj
b25zdAoreworICAgIC8vIFNWRzI6IEJvdW5kaW5nIGJveGVzIGFsZ29yaXRobSAoaHR0cHM6Ly9z
dmd3Zy5vcmcvc3ZnMi1kcmFmdC9jb29yZHMuaHRtbCNCb3VuZGluZ0JveGVzKQorCisgICAgLy8g
VGhlIGZvbGxvd2luZyBhbGdvcml0aG0gZGVmaW5lcyBob3cgdG8gY29tcHV0ZSBhIGJvdW5kaW5n
IGJveCBmb3IgYSBnaXZlbiBlbGVtZW50LiBUaGUgaW5wdXRzIHRvIHRoZSBhbGdvcml0aG0gYXJl
OgorICAgIC8vIC0gZWxlbWVudCwgdGhlIGVsZW1lbnQgd2UgYXJlIGNvbXB1dGluZyBhIGJvdW5k
aW5nIGJveCBmb3I7CisgICAgLy8gLSBzcGFjZSwgYSBjb29yZGluYXRlIHNwYWNlIGluIHdoaWNo
IHRoZSBib3VuZGluZyBib3ggd2lsbCBiZSBjb21wdXRlZDsKKyAgICAvLyAtIGZpbGwsIGEgYm9v
bGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGJvdW5kaW5nIGJveCBpbmNsdWRlcyB0aGUgZ2Vv
bWV0cnkgb2YgdGhlIGVsZW1lbnQgYW5kIGl0cyBkZXNjZW5kYW50czsKKyAgICAvLyAtIHN0cm9r
ZSwgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYm91bmRpbmcgYm94IGluY2x1ZGVz
IHRoZSBzdHJva2Ugb2YgdGhlIGVsZW1lbnQgYW5kIGl0cyBkZXNjZW5kYW50czsKKyAgICAvLyAt
IG1hcmtlcnMsIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGJvdW5kaW5nIGJveCBp
bmNsdWRlcyB0aGUgbWFya2VycyBvZiB0aGUgZWxlbWVudCBhbmQgaXRzIGRlc2NlbmRhbnRzOyBh
bmQKKyAgICAvLyAtIGNsaXBwZWQsIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGJv
dW5kaW5nIGJveCBpcyBhZmZlY3RlZCBieSBhbnkgY2xpcHBpbmcgcGF0aHMgYXBwbGllZCB0byB0
aGUgZWxlbWVudCBhbmQgaXRzIGRlc2NlbmRhbnRzLgorCisgICAgLy8gVGhlIGFsZ29yaXRobSB0
byBjb21wdXRlIHRoZSBib3VuZGluZyBib3ggaXMgYXMgZm9sbG93cywgZGVwZW5kaW5nIG9uIHRo
ZSB0eXBlIG9mIGVsZW1lbnQ6CisgICAgLy8gLSBhIHNoYXBlIChSZW5kZXJTVkdTaGFwZSkKKyAg
ICAvLyAtIGEgdGV4dCBjb250ZW50IGVsZW1lbnQgKFJlbmRlclNWR1RleHQgb3IgUmVuZGVyU1ZH
SW5saW5lKQorICAgIC8vIC0gYW4gImEiIGVsZW1lbnQgd2l0aGluIGEgdGV4dCBjb250ZW50IGVs
ZW1lbnQgKC0+IGNyZWF0ZXMgUmVuZGVyU1ZHSW5saW5lKQorICAgIGlmIChpczxSZW5kZXJTVkdT
aGFwZT4obV9yZW5kZXJlcikgfHwgaXM8UmVuZGVyU1ZHVGV4dD4obV9yZW5kZXJlcikgfHwgaXM8
UmVuZGVyU1ZHSW5saW5lPihtX3JlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGhhbmRsZVNoYXBl
T3JUZXh0T3JJbmxpbmUob3B0aW9ucywgYm91bmRpbmdCb3hWYWxpZCk7CisKKyAgICAvLyAtIGEg
Y29udGFpbmVyIGVsZW1lbnQgKFJlbmRlclNWR1Jvb3QgLyBSZW5kZXJTVkdDb250YWluZXIpCisg
ICAgLy8gLSAidXNlIiAoUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcikKKyAgICAvLyBG
SVhNRTogW0xCU0VdIFVwc3RyZWFtIG5ldyBSZW5kZXJTVkdDb250YWluZXIgaW1wbGVtZW50YXRp
b24KKyAgICAvLyBpZiAoaXM8UmVuZGVyU1ZHUm9vdD4obV9yZW5kZXJlcikgfHwgaXM8UmVuZGVy
U1ZHQ29udGFpbmVyPihtX3JlbmRlcmVyKSkKKyAgICBpZiAoaXM8UmVuZGVyU1ZHUm9vdD4obV9y
ZW5kZXJlcikpCisgICAgICAgIHJldHVybiBoYW5kbGVSb290T3JDb250YWluZXIob3B0aW9ucywg
Ym91bmRpbmdCb3hWYWxpZCk7CisKKyAgICAvLyAtICJmb3JlaWduT2JqZWN0IgorICAgIC8vIC0g
ImltYWdlIgorICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gbmV3IFJlbmRlclNWR0ltYWdl
IGltcGxlbWVudGF0aW9uCisgICAgLy8gaWYgKGlzPFJlbmRlclNWR0ZvcmVpZ25PYmplY3Q+KG1f
cmVuZGVyZXIpIHx8IGlzPFJlbmRlclNWR0ltYWdlPihtX3JlbmRlcmVyKSkKKyAgICBpZiAoaXM8
UmVuZGVyU1ZHRm9yZWlnbk9iamVjdD4obV9yZW5kZXJlcikpCisgICAgICAgIHJldHVybiBoYW5k
bGVGb3JlaWduT2JqZWN0T3JJbWFnZShvcHRpb25zLCBib3VuZGluZ0JveFZhbGlkKTsKKworI2lm
IEVOQUJMRShUUkVFX0RFQlVHR0lORykKKyAgICBzaG93UmVuZGVyVHJlZSgmbV9yZW5kZXJlcik7
CisjZW5kaWYKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBGbG9hdFJl
Y3QoKTsKK30KKworRmxvYXRSZWN0IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmhhbmRsZVNo
YXBlT3JUZXh0T3JJbmxpbmUoY29uc3QgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6RGVjb3Jh
dGlvbk9wdGlvbnMmIG9wdGlvbnMsIGJvb2wqIGJvdW5kaW5nQm94VmFsaWQpIGNvbnN0Cit7Cisg
ICAgLy8gMS4gTGV0IGJveCBiZSBhIHJlY3RhbmdsZSBpbml0aWFsaXplZCB0byAoMCwgMCwgMCwg
MCkuCisgICAgRmxvYXRSZWN0IGJveDsKKworICAgIC8vIDIuIExldCBmaWxsLXNoYXBlIGJlIHRo
ZSBlcXVpdmFsZW50IHBhdGggb2YgZWxlbWVudCBpZiBpdCBpcyBhIHNoYXBlLCBvciBhIHNoYXBl
IHRoYXQgaW5jbHVkZXMgZWFjaCBvZiB0aGUKKyAgICAvLyAgICBnbHlwaCBjZWxscyBjb3JyZXNw
b25kaW5nIHRvIHRoZSB0ZXh0IHdpdGhpbiB0aGUgZWxlbWVudHMgb3RoZXJ3aXNlLgorICAgIC8v
IDMuIElmIGZpbGwgaXMgdHJ1ZSwgdGhlbiBzZXQgYm94IHRvIHRoZSB0aWdodGVzdCByZWN0YW5n
bGUgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIHNwYWNlIHRoYXQgY29udGFpbnMgZmlsbC1zaGFw
ZS4KKyAgICAvLworICAgIC8vIE5vdGU6IFRoZSB2YWx1ZXMgb2YgdGhlIGZpbGwsIGZpbGwtb3Bh
Y2l0eSBhbmQgZmlsbC1ydWxlIHByb3BlcnRpZXMgZG8gbm90IGFmZmVjdCBmaWxsLXNoYXBlLgor
ICAgIGlmIChvcHRpb25zLmNvbnRhaW5zKERlY29yYXRpb25PcHRpb246OkluY2x1ZGVGaWxsU2hh
cGUpKQorICAgICAgICBib3ggPSBtX3JlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCk7CisKKyAg
ICAvLyA0LiBJZiBzdHJva2UgaXMgdHJ1ZSBhbmQgdGhlIGVsZW1lbnQncyBzdHJva2UgaXMgYW55
dGhpbmcgb3RoZXIgdGhhbiBub25lLCB0aGVuIHNldCBib3ggdG8gYmUgdGhlIHVuaW9uIG9mIGJv
eAorICAgIC8vICAgIGFuZCB0aGUgdGlnaHRlc3QgcmVjdGFuZ2xlIGluIGNvb3JkaW5hdGUgc3lz
dGVtIHNwYWNlIHRoYXQgY29udGFpbnMgdGhlIHN0cm9rZSBzaGFwZSBvZiB0aGUgZWxlbWVudCwg
d2l0aCB0aGUKKyAgICAvLyAgICBhc3N1bXB0aW9uIHRoYXQgdGhlIGVsZW1lbnQgaGFzIG5vIGRh
c2ggcGF0dGVybi4KKyAgICAvLworICAgIC8vIE5vdGU6IFRoZSB2YWx1ZXMgb2YgdGhlIHN0cm9r
ZS1vcGFjaXR5LCBzdHJva2UtZGFzaGFycmF5IGFuZCBzdHJva2UtZGFzaG9mZnNldCBkbyBub3Qg
YWZmZWN0IHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgc3Ryb2tlIHNoYXBlLgorICAgIGlmIChvcHRp
b25zLmNvbnRhaW5zKERlY29yYXRpb25PcHRpb246OkluY2x1ZGVTdHJva2VTaGFwZSkpCisgICAg
ICAgIGJveC51bml0ZShtX3JlbmRlcmVyLnN0cm9rZUJvdW5kaW5nQm94KCkpOworCisgICAgLy8g
NS4gSWYgbWFya2VycyBpcyB0cnVlLCB0aGVuIGZvciBlYWNoIG1hcmtlciBtYXJrZXIgcmVuZGVy
ZWQgb24gdGhlIGVsZW1lbnQ6CisgICAgLy8gLSBGb3IgZWFjaCBkZXNjZW5kYW50IGdyYXBoaWNz
IGVsZW1lbnQgY2hpbGQgb2YgdGhlICJtYXJrZXIiIGVsZW1lbnQgdGhhdCBkZWZpbmVzIG1hcmtl
cidzIGNvbnRlbnQ6CisgICAgLy8gICAtIElmIGNoaWxkIGhhcyBhbiBhbmNlc3RvciBlbGVtZW50
IHdpdGhpbiB0aGUgIm1hcmtlciIgdGhhdCBpcyAnZGlzcGxheTogbm9uZScsIGhhcyBhIGZhaWxp
bmcgY29uZGl0aW9uYWwgcHJvY2Vzc2luZyBhdHRyaWJ1dGUsCisgICAgLy8gICAgIG9yIGlzIG5v
dCBhbiAiYSIsICJnIiwgInN2ZyIgb3IgInN3aXRjaCIgZWxlbWVudCwgdGhlbiBjb250aW51ZSB0
byB0aGUgbmV4dCBkZXNjZW5kYW50IGdyYXBoaWNzIGVsZW1lbnQuCisgICAgLy8gICAtIE90aGVy
d2lzZSwgc2V0IGJveCB0byBiZSB0aGUgdW5pb24gb2YgYm94IGFuZCB0aGUgcmVzdWx0IG9mIGlu
dm9raW5nIHRoZSBhbGdvcml0aG0gdG8gY29tcHV0ZSBhIGJvdW5kaW5nIGJveCB3aXRoIGNoaWxk
IGFzCisgICAgLy8gICAgIHRoZSBlbGVtZW50LCBzcGFjZSBhcyB0aGUgdGFyZ2V0IGNvb3JkaW5h
dGUgc3BhY2UsIHRydWUgZm9yIGZpbGwsIHN0cm9rZSBhbmQgbWFya2VycywgYW5kIGNsaXBwZWQg
Zm9yIGNsaXBwZWQuCisgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoRGVjb3JhdGlvbk9wdGlvbjo6
SW5jbHVkZU1hcmtlcnMpICYmIGlzPFJlbmRlclNWR1NoYXBlPihtX3JlbmRlcmVyKSkgeworICAg
ICAgICBEZWNvcmF0aW9uT3B0aW9ucyBvcHRpb25zRm9yTWFya2VyID0geyBEZWNvcmF0aW9uT3B0
aW9uOjpJbmNsdWRlRmlsbFNoYXBlLCBEZWNvcmF0aW9uT3B0aW9uOjpJbmNsdWRlU3Ryb2tlU2hh
cGUsIERlY29yYXRpb25PcHRpb246OkluY2x1ZGVNYXJrZXJzIH07CisgICAgICAgIGlmIChvcHRp
b25zLmNvbnRhaW5zKERlY29yYXRpb25PcHRpb246OkluY2x1ZGVDbGlwcGVycykpCisgICAgICAg
ICAgICBvcHRpb25zRm9yTWFya2VyLmFkZChEZWNvcmF0aW9uT3B0aW9uOjpJbmNsdWRlQ2xpcHBl
cnMpOworICAgICAgICBib3gudW5pdGUoZG93bmNhc3Q8UmVuZGVyU1ZHU2hhcGU+KG1fcmVuZGVy
ZXIpLmNvbXB1dGVNYXJrZXJCb3VuZGluZ0JveChvcHRpb25zKSk7CisgICAgfQorCisgICAgLy8g
Ni4gSWYgY2xpcHBlZCBpcyB0cnVlIGFuZCB0aGUgdmFsdWUgb2YgY2xpcC1wYXRoIG9uIGVsZW1l
bnQgaXMgbm90IG5vbmUsIHRoZW4gc2V0IGJveCB0byBiZSB0aGUgdGlnaHRlc3QgcmVjdGFuZ2xl
CisgICAgLy8gICAgaW4gY29vcmRpbmF0ZSBzeXN0ZW0gc3BhY2UgdGhhdCBjb250YWlucyB0aGUg
aW50ZXJzZWN0aW9uIG9mIGJveCBhbmQgdGhlIGNsaXBwaW5nIHBhdGguCisgICAgYWRqdXN0Qm94
Rm9yQ2xpcHBpbmdBbmRFZmZlY3RzKG9wdGlvbnMsIGJveCk7CisKKyAgICAvLyA3LiBSZXR1cm4g
Ym94LgorICAgIGlmIChib3VuZGluZ0JveFZhbGlkKQorICAgICAgICAqYm91bmRpbmdCb3hWYWxp
ZCA9IHRydWU7CisgICAgcmV0dXJuIGJveDsKK30KKworRmxvYXRSZWN0IFNWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb246OmhhbmRsZVJvb3RPckNvbnRhaW5lcihjb25zdCBTVkdCb3VuZGluZ0JveENv
bXB1dGF0aW9uOjpEZWNvcmF0aW9uT3B0aW9ucyYgb3B0aW9ucywgYm9vbCogYm91bmRpbmdCb3hW
YWxpZCkgY29uc3QKK3sKKyAgICBhdXRvIHRyYW5zZm9ybWF0aW9uTWF0cml4RnJvbUNoaWxkID0g
W10oY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgY2hpbGQpIC0+IHN0ZDo6b3B0aW9uYWw8
VHJhbnNmb3JtYXRpb25NYXRyaXg+IHsKKyAgICAgICAgaWYgKCFjaGlsZC5oYXNUcmFuc2Zvcm0o
KSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byogY29u
dGFpbmVyID0gY2hpbGQucGFyZW50KCk7CisgICAgICAgIEFTU0VSVChjb250YWluZXIpOworCisg
ICAgICAgIGJvb2wgY29udGFpbmVyU2tpcHBlZCA9IGZhbHNlOworICAgICAgICBBU1NFUlQoY29u
dGFpbmVyID09IGNoaWxkLmNvbnRhaW5lcihudWxscHRyLCBjb250YWluZXJTa2lwcGVkKSk7Cisg
ICAgICAgIEFTU0VSVF9VTlVTRUQoY29udGFpbmVyU2tpcHBlZCwgIWNvbnRhaW5lclNraXBwZWQp
OworCisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyVHJhbnNmb3JtOworICAgICAg
ICBjaGlsZC5nZXRUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgTGF5b3V0U2l6ZSgp
LCBsYXllclRyYW5zZm9ybSk7CisgICAgICAgIHJldHVybiBsYXllclRyYW5zZm9ybS5pc0lkZW50
aXR5KCkgPyBzdGQ6Om51bGxvcHQgOiBzdGQ6Om1ha2Vfb3B0aW9uYWwoV1RGTW92ZShsYXllclRy
YW5zZm9ybSkpOworICAgIH07CisKKyAgICBhdXRvIHVuaXRlQm91bmRpbmdCb3hSZXNwZWN0aW5n
VmFsaWRpdHkgPSBbXShib29sJiBib3hWYWxpZCwgRmxvYXRSZWN0JiBib3gsIGNvbnN0IFJlbmRl
ckxheWVyTW9kZWxPYmplY3QmIC8qIGNoaWxkICovLCBjb25zdCBGbG9hdFJlY3QmIGNoaWxkQm91
bmRpbmdCb3gpIHsKKyAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBuZXcgUmVuZGVy
U1ZHQ29udGFpbmVyIGltcGxlbWVudGF0aW9uCisgICAgICAgIC8vIGJvb2wgaXNCb3VuZGluZ0Jv
eFZhbGlkID0gaXM8UmVuZGVyU1ZHQ29udGFpbmVyPihjaGlsZCkgPyBkb3duY2FzdDxSZW5kZXJT
VkdDb250YWluZXI+KGNoaWxkKS5pc09iamVjdEJvdW5kaW5nQm94VmFsaWQoKSA6IHRydWU7Cisg
ICAgICAgIGJvb2wgaXNCb3VuZGluZ0JveFZhbGlkID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFpc0Jv
dW5kaW5nQm94VmFsaWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKGJveFZh
bGlkKSB7CisgICAgICAgICAgICBib3gudW5pdGVFdmVuSWZFbXB0eShjaGlsZEJvdW5kaW5nQm94
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGJveCA9IGNoaWxk
Qm91bmRpbmdCb3g7CisgICAgICAgIGJveFZhbGlkID0gdHJ1ZTsKKyAgICB9OworCisgICAgLy8g
MS4gTGV0IGJveCBiZSBhIHJlY3RhbmdsZSBpbml0aWFsaXplZCB0byAoMCwgMCwgMCwgMCkuCisg
ICAgRmxvYXRSZWN0IGJveDsKKyAgICBib29sIGJveFZhbGlkID0gZmFsc2U7CisKKyAgICAvLyAy
LiBMZXQgcGFyZW50IGJlIHRoZSBjb250YWluZXIgZWxlbWVudCBpZiBpdCBpcyBvbmUsIG9yIHRo
ZSByb290IG9mIHRoZSAidXNlIiBlbGVtZW50J3Mgc2hhZG93IHRyZWUgb3RoZXJ3aXNlLgorCisg
ICAgLy8gMy4gRm9yIGVhY2ggZGVzY2VuZGFudCBncmFwaGljcyBlbGVtZW50IGNoaWxkIG9mIHBh
cmVudDoKKyAgICAvLyAgICAtIElmIGNoaWxkIGlzIG5vdCByZW5kZXJlZCB0aGVuIGNvbnRpbnVl
IHRvIHRoZSBuZXh0IGRlc2NlbmRhbnQgZ3JhcGhpY3MgZWxlbWVudC4KKyAgICAvLyAgICAtIE90
aGVyd2lzZSwgc2V0IGJveCB0byBiZSB0aGUgdW5pb24gb2YgYm94IGFuZCB0aGUgcmVzdWx0IG9m
IGludm9raW5nIHRoZSBhbGdvcml0aG0gdG8gY29tcHV0ZSBhIGJvdW5kaW5nIGJveCB3aXRoIGNo
aWxkCisgICAgLy8gICAgICBhcyB0aGUgZWxlbWVudCBhbmQgdGhlIHNhbWUgdmFsdWVzIGZvciBz
cGFjZSwgZmlsbCwgc3Ryb2tlLCBtYXJrZXJzIGFuZCBjbGlwcGVkIGFzIHRoZSBjb3JyZXNwb25k
aW5nIGFsZ29yaXRobSBpbnB1dCB2YWx1ZXMuCisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxk
cmVuT2ZUeXBlPFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KG1fcmVuZGVyZXIpKSB7CisgICAgICAg
IC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gbmV3IFJlbmRlclNWR0NvbnRhaW5lciBpbXBsZW1l
bnRhdGlvbgorICAgICAgICAvLyBpZiAoaXM8UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyPihjaGls
ZCkgfHwgKGlzPFJlbmRlclNWR1NoYXBlPihjaGlsZCkgJiYgZG93bmNhc3Q8UmVuZGVyU1ZHU2hh
cGU+KGNoaWxkKS5pc1JlbmRlcmluZ0Rpc2FibGVkKCkpKQorICAgICAgICBpZiAoaXM8UmVuZGVy
U1ZHU2hhcGU+KGNoaWxkKSAmJiBkb3duY2FzdDxSZW5kZXJTVkdTaGFwZT4oY2hpbGQpLmlzUmVu
ZGVyaW5nRGlzYWJsZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFNWR0Jv
dW5kaW5nQm94Q29tcHV0YXRpb24gY2hpbGRCb3VuZGluZ0JveENvbXB1dGF0aW9uKGNoaWxkKTsK
KyAgICAgICAgYXV0byBjaGlsZEJveCA9IGNoaWxkQm91bmRpbmdCb3hDb21wdXRhdGlvbi5jb21w
dXRlRGVjb3JhdGVkQm91bmRpbmdCb3gob3B0aW9ucyk7CisgICAgICAgIC8vIEZJWE1FOiBVcHN0
cmVhbSBuZXcgUmVuZGVyU1ZHQ29udGFpbmVyIGltcGxlbWVudGF0aW9uCisgICAgICAgIC8vIGlm
IChvcHRpb25zLmNvbnRhaW5zKERlY29yYXRpb25PcHRpb246Ok92ZXJyaWRlQm94V2l0aEZpbHRl
ckJveEZvckNoaWxkcmVuKSAmJiBpczxSZW5kZXJTVkdDb250YWluZXI+KGNoaWxkKSkKKyAgICAg
ICAgLy8gICAgY2hpbGRCb3VuZGluZ0JveENvbXB1dGF0aW9uLmFkanVzdEJveEZvckNsaXBwaW5n
QW5kRWZmZWN0cyh7IERlY29yYXRpb25PcHRpb246Ok92ZXJyaWRlQm94V2l0aEZpbHRlckJveCB9
LCBjaGlsZEJveCk7CisKKyAgICAgICAgaWYgKGF1dG8gbGF5ZXJUcmFuc2Zvcm0gPSB0cmFuc2Zv
cm1hdGlvbk1hdHJpeEZyb21DaGlsZChjaGlsZCkpCisgICAgICAgICAgICBjaGlsZEJveCA9IGxh
eWVyVHJhbnNmb3JtLT5tYXBSZWN0KGNoaWxkQm94KTsKKworICAgICAgICBpZiAob3B0aW9ucyA9
PSBvYmplY3RCb3VuZGluZ0JveERlY29yYXRpb24pCisgICAgICAgICAgICB1bml0ZUJvdW5kaW5n
Qm94UmVzcGVjdGluZ1ZhbGlkaXR5KGJveFZhbGlkLCBib3gsIGNoaWxkLCBjaGlsZEJveCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJveC51bml0ZShjaGlsZEJveCk7CisgICAgfQorCisg
ICAgLy8gNC4gSWYgY2xpcHBlZCBpcyB0cnVlOgorICAgIC8vICAgIC0gSWYgdGhlIHZhbHVlIG9m
IGNsaXAtcGF0aCBvbiBlbGVtZW50IGlzIG5vdCBub25lLCB0aGVuIHNldCBib3ggdG8gYmUgdGhl
IHRpZ2h0ZXN0IHJlY3RhbmdsZSBpbiBjb29yZGluYXRlIHN5c3RlbSBzcGFjZSB0aGF0CisgICAg
Ly8gICAgICBjb250YWlucyB0aGUgaW50ZXJzZWN0aW9uIG9mIGJveCBhbmQgdGhlIGNsaXBwaW5n
IHBhdGguCisgICAgLy8gICAgLSBJZiB0aGUgb3ZlcmZsb3cgcHJvcGVydHkgYXBwbGllcyB0byB0
aGUgZWxlbWVudCBhbmQgZG9lcyBub3QgaGF2ZSBhIHZhbHVlIG9mIHZpc2libGUsIHRoZW4gc2V0
IGJveCB0byBiZSB0aGUgdGlnaHRlc3QgcmVjdGFuZ2xlCisgICAgLy8gICAgICBpbiBjb29yZGlu
YXRlIHN5c3RlbSBzcGFjZSB0aGF0IGNvbnRhaW5zIHRoZSBpbnRlcnNlY3Rpb24gb2YgYm94IGFu
ZCB0aGUgZWxlbWVudCdzIG92ZXJmbG93IGJvdW5kcy4KKyAgICAvLyAgICAtIElmIHRoZSBjbGlw
IHByb3BlcnR5IGFwcGxpZXMgdG8gdGhlIGVsZW1lbnQgYW5kIGRvZXMgbm90IGhhdmUgYSB2YWx1
ZSBvZiBhdXRvLCB0aGVuIHNldCBib3ggdG8gYmUgdGhlIHRpZ2h0ZXN0IHJlY3RhbmdsZSBpbiBj
b29yZGluYXRlCisgICAgLy8gICAgICBzeXN0ZW0gc3BhY2UgdGhhdCBjb250YWlucyB0aGUgaW50
ZXJzZWN0aW9uIG9mIGJveCBhbmQgdGhlIHJlY3RhbmdsZSBzcGVjaWZpZWQgYnkgY2xpcC4gKFRP
RE8hKQorICAgIGFkanVzdEJveEZvckNsaXBwaW5nQW5kRWZmZWN0cyhvcHRpb25zLCBib3gsIHsg
RGVjb3JhdGlvbk9wdGlvbjo6T3ZlcnJpZGVCb3hXaXRoRmlsdGVyQm94IH0pOworCisgICAgaWYg
KG9wdGlvbnMuY29udGFpbnMoRGVjb3JhdGlvbk9wdGlvbjo6SW5jbHVkZUNsaXBwZXJzKSAmJiBt
X3JlbmRlcmVyLmhhc05vblZpc2libGVPdmVyZmxvdygpKSB7CisgICAgICAgIEFTU0VSVChtX3Jl
bmRlcmVyLmhhc0xheWVyKCkpOworCisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0g
bmV3IFJlbmRlclNWR0NvbnRhaW5lciAvIFJlbmRlclNWR1Jlc291cmNlTWFya2VyIGltcGxlbWVu
dGF0aW9uCisgICAgICAgIC8vIEFTU0VSVChpczxSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcj4o
bV9yZW5kZXJlcikgfHwgaXM8UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI+KG1fcmVuZGVyZXIpIHx8
IGlzPFJlbmRlclNWR1Jvb3Q+KG1fcmVuZGVyZXIpKTsKKyAgICAgICAgQVNTRVJUKGlzPFJlbmRl
clNWR1Jvb3Q+KG1fcmVuZGVyZXIpKTsKKworICAgICAgICBMYXlvdXRSZWN0IG92ZXJmbG93Q2xp
cFJlY3Q7CisgICAgICAgIGlmIChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4obV9yZW5kZXJlcikp
CisgICAgICAgICAgICBvdmVyZmxvd0NsaXBSZWN0ID0gZG93bmNhc3Q8UmVuZGVyU1ZHTW9kZWxP
YmplY3Q+KG1fcmVuZGVyZXIpLm92ZXJmbG93Q2xpcFJlY3QoTGF5b3V0UG9pbnQoKSk7CisgICAg
ICAgIGVsc2UgaWYgKGlzPFJlbmRlckJveD4obV9yZW5kZXJlcikpCisgICAgICAgICAgICBvdmVy
Zmxvd0NsaXBSZWN0ID0gZG93bmNhc3Q8UmVuZGVyQm94PihtX3JlbmRlcmVyKS5vdmVyZmxvd0Ns
aXBSZWN0KExheW91dFBvaW50KCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAg
ICB9CisKKyAgICAgICAgYm94LmludGVyc2VjdChGbG9hdFJlY3Qob3ZlcmZsb3dDbGlwUmVjdCkp
OworICAgIH0KKworICAgIC8vIDUuIFJldHVybiBib3guCisgICAgaWYgKGJvdW5kaW5nQm94VmFs
aWQpCisgICAgICAgICpib3VuZGluZ0JveFZhbGlkID0gYm94VmFsaWQ7CisgICAgcmV0dXJuIGJv
eDsKK30KKworRmxvYXRSZWN0IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmhhbmRsZUZvcmVp
Z25PYmplY3RPckltYWdlKGNvbnN0IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OkRlY29yYXRp
b25PcHRpb25zJiBvcHRpb25zLCBib29sKiBib3VuZGluZ0JveFZhbGlkKSBjb25zdAoreworICAg
IC8vIDEuIExldCBib3ggYmUgdGhlIHRpZ2h0ZXN0IHJlY3RhbmdsZSBpbiBjb29yZGluYXRlIHNw
YWNlIHNwYWNlIHRoYXQgY29udGFpbnMgdGhlIHBvc2l0aW9uaW5nIHJlY3RhbmdsZQorICAgIC8v
ICAgIGRlZmluZWQgYnkgdGhlICJ4IiwgInkiLCAid2lkdGgiIGFuZCAiaGVpZ2h0IiBnZW9tZXRy
aWMgcHJvcGVydGllcyBvZiB0aGUgZWxlbWVudC4KKyAgICAvLworICAgIC8vIE5vdGU6IFRoZSBm
aWxsLCBzdHJva2UgYW5kIG1hcmtlcnMgaW5wdXQgYXJndW1lbnRzIHRvIHRoaXMgYWxnb3JpdGht
IGRvIG5vdCBhZmZlY3QgdGhlIGJvdW5kaW5nIGJveCByZXR1cm5lZCBmb3IgdGhlc2UgZWxlbWVu
dHMuCisgICAgYXV0byBib3ggPSBtX3JlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCk7CisKKyAg
ICAvLyAyLiBJZiBjbGlwcGVkIGlzIHRydWUgYW5kIHRoZSB2YWx1ZSBvZiBjbGlwLXBhdGggb24g
ZWxlbWVudCBpcyBub3Qgbm9uZSwgdGhlbiBzZXQgYm94IHRvIGJlIHRoZSB0aWdodGVzdCByZWN0
YW5nbGUKKyAgICAvLyAgICBpbiBjb29yZGluYXRlIHN5c3RlbSBzcGFjZSB0aGF0IGNvbnRhaW5z
IHRoZSBpbnRlcnNlY3Rpb24gb2YgYm94IGFuZCB0aGUgY2xpcHBpbmcgcGF0aC4KKyAgICBhZGp1
c3RCb3hGb3JDbGlwcGluZ0FuZEVmZmVjdHMob3B0aW9ucywgYm94KTsKKworICAgIC8vIDMuIFJl
dHVybiBib3guCisgICAgaWYgKGJvdW5kaW5nQm94VmFsaWQpCisgICAgICAgICpib3VuZGluZ0Jv
eFZhbGlkID0gdHJ1ZTsKKyAgICByZXR1cm4gYm94OworfQorCit2b2lkIFNWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb246OmFkanVzdEJveEZvckNsaXBwaW5nQW5kRWZmZWN0cyhjb25zdCBTVkdCb3Vu
ZGluZ0JveENvbXB1dGF0aW9uOjpEZWNvcmF0aW9uT3B0aW9ucyYgb3B0aW9ucywgRmxvYXRSZWN0
JiBib3gsIGNvbnN0IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OkRlY29yYXRpb25PcHRpb25z
JiBvcHRpb25zVG9DaGVja0ZvckZpbHRlcnMpIGNvbnN0Cit7CisgICAgYm9vbCBpbmNsdWRlRmls
dGVyID0gZmFsc2U7CisgICAgZm9yIChhdXRvIGZpbHRlck9wdGlvbiA6IG9wdGlvbnNUb0NoZWNr
Rm9yRmlsdGVycykgeworICAgICAgICBpZiAob3B0aW9ucy5jb250YWlucyhmaWx0ZXJPcHRpb24p
KSB7CisgICAgICAgICAgICBpbmNsdWRlRmlsdGVyID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBpbmNsdWRlQ2xpcHBlciA9IG9wdGlvbnMu
Y29udGFpbnMoRGVjb3JhdGlvbk9wdGlvbjo6SW5jbHVkZUNsaXBwZXJzKTsKKyAgICBib29sIGlu
Y2x1ZGVNYXNrZXIgPSBvcHRpb25zLmNvbnRhaW5zKERlY29yYXRpb25PcHRpb246OkluY2x1ZGVN
YXNrZXJzKTsKKworICAgIGlmIChpbmNsdWRlRmlsdGVyIHx8IGluY2x1ZGVDbGlwcGVyIHx8IGlu
Y2x1ZGVNYXNrZXIpIHsKKyAgICAgICAgaWYgKGF1dG8qIHJlc291cmNlcyA9IFNWR1Jlc291cmNl
c0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJlcihtX3JlbmRlcmVyKSkgeworICAgICAg
ICAgICAgaWYgKGluY2x1ZGVGaWx0ZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogZmls
dGVyID0gcmVzb3VyY2VzLT5maWx0ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgYm94ID0gZmls
dGVyLT5yZXNvdXJjZUJvdW5kaW5nQm94KG1fcmVuZGVyZXIpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoaW5jbHVkZUNsaXBwZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0
byogY2xpcHBlciA9IHJlc291cmNlcy0+Y2xpcHBlcigpKQorICAgICAgICAgICAgICAgICAgICBi
b3guaW50ZXJzZWN0KGNsaXBwZXItPnJlc291cmNlQm91bmRpbmdCb3gobV9yZW5kZXJlcikpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5jbHVkZU1hc2tlcikgeworICAgICAg
ICAgICAgICAgIGlmIChhdXRvKiBtYXNrZXIgPSByZXNvdXJjZXMtPm1hc2tlcigpKQorICAgICAg
ICAgICAgICAgICAgICBib3guaW50ZXJzZWN0KG1hc2tlci0+cmVzb3VyY2VCb3VuZGluZ0JveCht
X3JlbmRlcmVyKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
b3B0aW9ucy5jb250YWlucyhEZWNvcmF0aW9uT3B0aW9uOjpJbmNsdWRlT3V0bGluZSkpCisgICAg
ICAgIGJveC5pbmZsYXRlKG1fcmVuZGVyZXIub3V0bGluZVN0eWxlRm9yUmVwYWludCgpLm91dGxp
bmVTaXplKCkpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
M2RhNjNiZDZmMDk4MmVjNjdmYTViM2JjOTQ2YmQ4ODJkMjU5ZDQ0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdCb3VuZGluZ0JveENvbXB1dGF0aW9u
LmgKQEAgLTAsMCArMSw5MiBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKwor
I2luY2x1ZGUgIlJlbmRlckxheWVyTW9kZWxPYmplY3QuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgRmxvYXRSZWN0OworCitjbGFzcyBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9u
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uKTsK
K3B1YmxpYzoKKyAgICBleHBsaWNpdCBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uKGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPYmplY3QmKTsKKyAgICB+U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbigp
ID0gZGVmYXVsdDsKKworICAgIGVudW0gY2xhc3MgRGVjb3JhdGlvbk9wdGlvbiA6IHVpbnQ4X3Qg
eworICAgICAgICBJbmNsdWRlRmlsbFNoYXBlICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwg
LyogY29ycmVzcG9uZHMgdG8gJ2Jvb2wgZmlsbCcgICAgICovCisgICAgICAgIEluY2x1ZGVTdHJv
a2VTaGFwZSAgICAgICAgICAgICAgICAgID0gMSA8PCAxLCAvKiBjb3JyZXNwb25kcyB0byAnYm9v
bCBzdHJva2UnICAgKi8KKyAgICAgICAgSW5jbHVkZU1hcmtlcnMgICAgICAgICAgICAgICAgICAg
ICAgPSAxIDw8IDIsIC8qIGNvcnJlc3BvbmRzIHRvICdib29sIG1hcmtlcnMnICAqLworICAgICAg
ICBJbmNsdWRlQ2xpcHBlcnMgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMywgLyogY29ycmVz
cG9uZHMgdG8gJ2Jvb2wgY2xpcHBlcnMnICovCisgICAgICAgIEluY2x1ZGVNYXNrZXJzICAgICAg
ICAgICAgICAgICAgICAgID0gMSA8PCA0LCAvKiBXZWJLaXQgZXh0ZW5zaW9uIC0gaW50ZXJuYWwg
ICAgKi8KKyAgICAgICAgSW5jbHVkZU91dGxpbmUgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8
IDUsIC8qIFdlYktpdCBleHRlbnNpb24gLSBpbnRlcm5hbCAgICAqLworICAgICAgICBPdmVycmlk
ZUJveFdpdGhGaWx0ZXJCb3ggICAgICAgICAgICA9IDEgPDwgNiwgLyogV2ViS2l0IGV4dGVuc2lv
biAtIGludGVybmFsICAgICovCisgICAgICAgIE92ZXJyaWRlQm94V2l0aEZpbHRlckJveEZvckNo
aWxkcmVuID0gMSA8PCA3ICAvKiBXZWJLaXQgZXh0ZW5zaW9uIC0gaW50ZXJuYWwgICAgKi8KKyAg
ICB9OworCisgICAgdXNpbmcgRGVjb3JhdGlvbk9wdGlvbnMgPSBPcHRpb25TZXQ8RGVjb3JhdGlv
bk9wdGlvbj47CisKKyAgICBzdGF0aWMgY29uc3RleHByIERlY29yYXRpb25PcHRpb25zIG9iamVj
dEJvdW5kaW5nQm94RGVjb3JhdGlvbiA9IHsgRGVjb3JhdGlvbk9wdGlvbjo6SW5jbHVkZUZpbGxT
aGFwZSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgRGVjb3JhdGlvbk9wdGlvbnMgc3Ryb2tlQm91
bmRpbmdCb3hEZWNvcmF0aW9uID0geyBEZWNvcmF0aW9uT3B0aW9uOjpJbmNsdWRlRmlsbFNoYXBl
LCBEZWNvcmF0aW9uT3B0aW9uOjpJbmNsdWRlU3Ryb2tlU2hhcGUgfTsKKyAgICBzdGF0aWMgY29u
c3RleHByIERlY29yYXRpb25PcHRpb25zIGZpbHRlckJvdW5kaW5nQm94RGVjb3JhdGlvbiA9IHsg
RGVjb3JhdGlvbk9wdGlvbjo6T3ZlcnJpZGVCb3hXaXRoRmlsdGVyQm94LCBEZWNvcmF0aW9uT3B0
aW9uOjpPdmVycmlkZUJveFdpdGhGaWx0ZXJCb3hGb3JDaGlsZHJlbiB9OworICAgIHN0YXRpYyBj
b25zdGV4cHIgRGVjb3JhdGlvbk9wdGlvbnMgcmVwYWludEJvdW5kaW5nQm94RGVjb3JhdGlvbiA9
IHsgRGVjb3JhdGlvbk9wdGlvbjo6SW5jbHVkZUZpbGxTaGFwZSwgRGVjb3JhdGlvbk9wdGlvbjo6
SW5jbHVkZVN0cm9rZVNoYXBlLCBEZWNvcmF0aW9uT3B0aW9uOjpJbmNsdWRlTWFya2VycywgRGVj
b3JhdGlvbk9wdGlvbjo6SW5jbHVkZUNsaXBwZXJzLCBEZWNvcmF0aW9uT3B0aW9uOjpJbmNsdWRl
TWFza2VycywgRGVjb3JhdGlvbk9wdGlvbjo6T3ZlcnJpZGVCb3hXaXRoRmlsdGVyQm94IH07CisK
KyAgICBGbG9hdFJlY3QgY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KGNvbnN0IERlY29yYXRp
b25PcHRpb25zJiwgYm9vbCogYm91bmRpbmdCb3hWYWxpZCA9IG51bGxwdHIpIGNvbnN0OworCisg
ICAgc3RhdGljIEZsb2F0UmVjdCBjb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3goY29uc3QgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IERlY29yYXRpb25PcHRpb25zJiBv
cHRpb25zKQorICAgIHsKKyAgICAgICAgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbiBib3VuZGlu
Z0JveENvbXB1dGF0aW9uKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIGJvdW5kaW5nQm94Q29t
cHV0YXRpb24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KG9wdGlvbnMpOworICAgIH0KKwor
ICAgIHN0YXRpYyBGbG9hdFJlY3QgY29tcHV0ZVJlcGFpbnRCb3VuZGluZ0JveChjb25zdCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBjb21w
dXRlRGVjb3JhdGVkQm91bmRpbmdCb3gocmVuZGVyZXIsIHJlcGFpbnRCb3VuZGluZ0JveERlY29y
YXRpb24pOworICAgIH0KKworICAgIHN0YXRpYyBMYXlvdXRSZWN0IGNvbXB1dGVWaXN1YWxPdmVy
Zmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCisgICAgewor
ICAgICAgICBhdXRvIHJlcGFpbnRCb3VuZGluZ0JveCA9IGNvbXB1dGVEZWNvcmF0ZWRCb3VuZGlu
Z0JveChyZW5kZXJlciwgcmVwYWludEJvdW5kaW5nQm94RGVjb3JhdGlvbiB8IERlY29yYXRpb25P
cHRpb246OkluY2x1ZGVPdXRsaW5lKTsKKyAgICAgICAgaWYgKHJlcGFpbnRCb3VuZGluZ0JveC5p
c0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworCisgICAgICAgIGF1
dG8gdmlzdWFsT3ZlcmZsb3dSZWN0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChyZXBhaW50Qm91bmRp
bmdCb3gpOworICAgICAgICB2aXN1YWxPdmVyZmxvd1JlY3QubW92ZUJ5KC1mbG9vcmVkTGF5b3V0
UG9pbnQocmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKSk7Cisg
ICAgICAgIHJldHVybiB2aXN1YWxPdmVyZmxvd1JlY3Q7CisgICAgfQorCitwcml2YXRlOgorICAg
IEZsb2F0UmVjdCBoYW5kbGVTaGFwZU9yVGV4dE9ySW5saW5lKGNvbnN0IERlY29yYXRpb25PcHRp
b25zJiwgYm9vbCogYm91bmRpbmdCb3hWYWxpZCA9IG51bGxwdHIpIGNvbnN0OworICAgIEZsb2F0
UmVjdCBoYW5kbGVSb290T3JDb250YWluZXIoY29uc3QgRGVjb3JhdGlvbk9wdGlvbnMmLCBib29s
KiBib3VuZGluZ0JveFZhbGlkID0gbnVsbHB0cikgY29uc3Q7CisgICAgRmxvYXRSZWN0IGhhbmRs
ZUZvcmVpZ25PYmplY3RPckltYWdlKGNvbnN0IERlY29yYXRpb25PcHRpb25zJiwgYm9vbCogYm91
bmRpbmdCb3hWYWxpZCA9IG51bGxwdHIpIGNvbnN0OworCisgICAgdm9pZCBhZGp1c3RCb3hGb3JD
bGlwcGluZ0FuZEVmZmVjdHMoY29uc3QgRGVjb3JhdGlvbk9wdGlvbnMmLCBGbG9hdFJlY3QmIGJv
eCwgY29uc3QgRGVjb3JhdGlvbk9wdGlvbnMmIG9wdGlvbnNUb0NoZWNrRm9yRmlsdGVycyA9IGZp
bHRlckJvdW5kaW5nQm94RGVjb3JhdGlvbikgY29uc3Q7CisKKyAgICBjb25zdCBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0JiBtX3JlbmRlcmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448736</attachid>
            <date>2022-01-10 05:16:02 -0800</date>
            <delta_ts>2022-01-10 06:38:33 -0800</delta_ts>
            <desc>Patch, v3</desc>
            <filename>bug-234632-20220110051601.patch</filename>
            <type>text/plain</type>
            <size>35063</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3ODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjRiODM1ZmE2ZDI1MDVh
ODIyNjlhMDNkNjlkMzgyMTlmZTJmOTNlNC4uMjBiMTgzY2IxNWNjZjJjMzA4MmRmMzRiM2I1MDRl
Njk4ZWI2N2VlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDIyLTAxLTEwICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtMQlNF
XSBJbnRyb2R1Y2UgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0NjMyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS84NzAwMTMzND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBVcHN0cmVhbSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLCBhIHV0aWxpdHkgY2xh
c3MKKyAgICAgICAgaW1wbGVtZW50aW5nIHRoZSBTVkcyICJib3VuZGluZyBib3ggY29tcHV0YXRp
b24iIGFsZ29yaXRobSwKKyAgICAgICAgYXMgc3BlYydlZCBpbiBodHRwczovL3N2Z3dnLm9yZy9z
dmcyLWRyYWZ0L2Nvb3Jkcy5odG1sI0JvdW5kaW5nQm94ZXMuCisKKyAgICAgICAgU1ZHMiBhbHNv
IHNwZWNpZmllcyBhIG5ldyBvcHRpb25hbCBhcmd1bWVudCBmb3IgZ2V0QkJveCgpICYgZnJpZW5k
czoKKyAgICAgICAgRE9NUmVjdCBnZXRCQm94KG9wdGlvbmFsIFNWR0JvdW5kaW5nQm94T3B0aW9u
cyBvcHRpb25zID0ge30pOworCisgICAgICAgIFNWR0JvdW5kaW5nQm94T3B0aW9ucyBjYW4gYmUg
aW1wbGVtZW50ZWQgdXNpbmcgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjoKKyAgICAgICAgZXhw
b3NpbmcgdGhpcyB0byB0aGUgV2ViIGlzIGxlZnQgZm9yIHRoZSBmdXR1cmUsIG9uY2UgbW9yZSBv
ZiBMQlNFIGlzIHJlYWR5LgorCisgICAgICAgIExCU0UgdXRpbGl6ZXMgU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbiB3aGVuZXZlciBhbnkga2luZCBvZiBib3VuZGluZyBib3gKKyAgICAgICAgbmVl
ZHMgdG8gYmUgY29tcHV0ZWQgKG9iamVjdCAvIHN0cm9rZSAvIGRlY29yYXRlZCAoZS5nLiBpbmNs
dWRpbmcgbWFya2VycykuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cywgbm8g
Y2hhbmdlIGluIGJlaGF2aW91ci4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL0xlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpMZWdh
Y3lSZW5kZXJTVkdNb2RlbE9iamVjdDo6dmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVj
dC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnZpc3VhbE92ZXJm
bG93UmVjdEVxdWl2YWxlbnQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpsYXlvdXQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6U1ZHQm91bmRpbmdCb3hDb21wdXRh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjp+U1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdCb3VuZGluZ0Jv
eENvbXB1dGF0aW9uOjpjb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3ggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6aGFuZGxlU2hhcGVPclRleHRP
cklubGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdCb3VuZGluZ0JveENvbXB1dGF0
aW9uOjpoYW5kbGVSb290T3JDb250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbjo6aGFuZGxlRm9yZWlnbk9iamVjdE9ySW1hZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6YWRqdXN0Qm94
Rm9yQ2xpcHBpbmdBbmRFZmZlY3RzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NW
R0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdC
b3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3gpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVJlcGFpbnRC
b3VuZGluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9u
Ojpjb21wdXRlVmlzdWFsT3ZlcmZsb3dSZWN0KToKKwogMjAyMi0wMS0xMCAgTmlrb2xhcyBaaW1t
ZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KIAogICAgICAgICBbTEJTRV0gQmVnaW4g
bGF5ZXItYXdhcmUgUmVuZGVyU1ZHUmVjdCBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRl
eCAxM2VmZTRmZjMzNWEzNGI0MWM0NTE5ODQxNzRkYmY0MjdmOGQ2NjNkLi4wOWJhZDA4NjZlNjA3
MTgxZGFmOGZjOTFlNGRkNTdiNjE5YmZhZDNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjUwMSw2ICsy
NTAxLDcgQEAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0UGF0aC5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJs
ZUNvbnRhaW5lci5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIu
Y3BwCityZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uY3BwCiByZW5kZXJp
bmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRC
b3guY3BwCiByZW5kZXJpbmcvc3ZnL1NWR1BhdGhEYXRhLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDhmN2JjYmRhNDY3YTIx
YWY2MmFiYjE5NTY2NmU1ODliNDc2MmJjN2EuLmQyOGIzODMxZDRmNjkxOTJjYTU2MjAyYzgwMDRl
MTc4M2RjM2M1YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTI0NCw2ICsyNDQsNyBAQAogCQkwODU0QjAxOTEyNTVFNEU2MDBC
OUNERDAgLyogUmVuZGVyU1ZHVGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDg1NEIwMDcxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RleHQu
aCAqLzsgfTsKIAkJMDg1NEIwMUIxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RleHRQYXRo
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU0QjAw
OTEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVGV4dFBhdGguaCAqLzsgfTsKIAkJMDg1NEIw
MUQxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RTcGFuLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU0QjAwQjEyNTVFNEU2MDBCOUNERDAgLyog
UmVuZGVyU1ZHVFNwYW4uaCAqLzsgfTsKKwkJMDg0NEIwMUQxMjU1QjRFNjAwQjlDREQwIC8qIFNW
R0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4NDRCMDFEMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdCb3VuZGluZ0Jv
eENvbXB1dGF0aW9uLmggKi87IH07CiAJCTA4NTRCMDFGMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJ
bmxpbmVGbG93Qm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwODU0QjAwRDEyNTVFNEU2MDBCOUNERDAgLyogU1ZHSW5saW5lRmxvd0JveC5oICovOyB9
OwogCQkwODU0QjAyMTEyNTVFNEU2MDBCOUNERDAgLyogU1ZHSW5saW5lVGV4dEJveC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1NEIwMEYxMjU1RTRF
NjAwQjlDREQwIC8qIFNWR0lubGluZVRleHRCb3guaCAqLzsgfTsKIAkJMDg1NEIwMjMxMjU1RTRF
NjAwQjlDREQwIC8qIFNWR1Jvb3RJbmxpbmVCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTRCMDExMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdSb290
SW5saW5lQm94LmggKi87IH07CkBAIC02MTg1LDYgKzYxODYsOCBAQAogCQkwODU0QjAwODEyNTVF
NEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVGV4dFBhdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHVGV4dFBhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwODU0QjAwOTEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVGV4dFBh
dGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHVGV4dFBhdGgu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1NEIwMEIxMjU1RTRFNjAwQjlDREQw
IC8qIFJlbmRlclNWR1RTcGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlclNWR1RTcGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4MzRCMDBDMTI0
NEU0RTYwMEI5Q0REMCAvKiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwODQ0QjAxRDEyNTVFNEU2MDBCOUNERDAg
LyogU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA4NTRCMDBDMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJbmxpbmVGbG93Qm94LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0lubGluZUZsb3dCb3gu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODU0QjAwRDEyNTVFNEU2MDBCOUNE
RDAgLyogU1ZHSW5saW5lRmxvd0JveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTVkdJbmxpbmVGbG93Qm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NTRC
MDBFMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJbmxpbmVUZXh0Qm94LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0lubGluZVRleHRCb3guY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTg5OTQsNiArMTg5OTcsOCBAQAogCQkJCTA4NTRCMDBCMTI1
NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUU3Bhbi5oICovLAogCQkJCTQzNjcwOEFCMTJEOUNB
NEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAgKi8sCiAJCQkJNDM2
NzA4QUMxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmggKi8s
CisJCQkJMDgzNEIwMEMxMjQ0RTRFNjAwQjlDREQwIC8qIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRp
b24uY3BwICovLAorCQkJCTA4NDRCMDFEMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdCb3VuZGluZ0Jv
eENvbXB1dGF0aW9uLmggKi8sCiAJCQkJMDg1NEIwMEMxMjU1RTRFNjAwQjlDREQwIC8qIFNWR0lu
bGluZUZsb3dCb3guY3BwICovLAogCQkJCTA4NTRCMDBEMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJ
bmxpbmVGbG93Qm94LmggKi8sCiAJCQkJMDg1NEIwMEUxMjU1RTRFNjAwQjlDREQwIC8qIFNWR0lu
bGluZVRleHRCb3guY3BwICovLApAQCAtMzczMTUsNiArMzczMjAsNyBAQAogCQkJCUIyMjI3OTkz
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdBbmltYXRlTW90aW9uRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjIyMjc5OTUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5ODBEMDBCRjIyMDA3MUI3ODIgLyog
U1ZHQW5pbWF0aW9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDg0NEIwMUQxMjU1QjRF
NjAwQjlDREQwIC8qIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCUIyMjI3OTlDMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDaXJjbGVFbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMjIyNzk5RjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQ2xpcFBhdGhFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlBNTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9MZWdhY3lSZW5kZXJTVkdNb2RlbE9i
amVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9MZWdhY3lSZW5kZXJTVkdNb2Rl
bE9iamVjdC5oCmluZGV4IDcxOWQ4YmQyZDg0MDYxMDg5YWU5OTA3ZjkzOTYxNTA5Njc3ZGMwZmUu
LmI2ZjBlMzE3ZTY0MzkzYTI1YWRhODRhYTMwNjUwM2RhZjBiN2YyYTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL0xlZ2FjeVJlbmRlclNWR01vZGVsT2Jq
ZWN0LmgKQEAgLTYyLDEwICs2Miw2IEBAIHB1YmxpYzoKIAogICAgIFNWR0VsZW1lbnQmIGVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxTVkdFbGVtZW50Pihub2RlRm9yTm9uQW5vbnlt
b3VzKCkpOyB9CiAKLSAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb24KLSAgICAvLyBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxl
bnQoKSBjb25zdCB7IHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlVmlz
dWFsT3ZlcmZsb3dSZWN0KCp0aGlzKTsgfQotICAgIExheW91dFJlY3QgdmlzdWFsT3ZlcmZsb3dS
ZWN0RXF1aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFJlY3QoKTsgfQotCiBwcm90ZWN0
ZWQ6CiAgICAgTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QoU1ZHRWxlbWVudCYsIFJlbmRlclN0
eWxlJiYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR01vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmgKaW5kZXggZGJkYmUyMWNlNTZmMmYzMDJhZWM3YzU5OGE1OWY0NDUxZjM2
OGMwYS4uNzkyNGNmOGRjNWYxNjE3ODc3M2U3YTdhYmQzYzVkYmY0YTFiYTdhNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaApA
QCAtMzQsOCArMzQsNyBAQAogI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5o
IgotLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uCi0v
LyAjaW5jbHVkZSAiU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5oIgorI2luY2x1ZGUgIlNWR0Jv
dW5kaW5nQm94Q29tcHV0YXRpb24uaCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogCkBAIC02OSwxMiArNjgsNyBAQCBwdWJsaWM6CiAgICAg
TGF5b3V0UmVjdCBjb250ZW50Qm94UmVjdEVxdWl2YWxlbnQoKSBjb25zdCB7IHJldHVybiBib3Jk
ZXJCb3hSZWN0RXF1aXZhbGVudCgpOyB9CiAgICAgTGF5b3V0UmVjdCBmcmFtZVJlY3RFcXVpdmFs
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0OyB9CiAKLSAgICBMYXlvdXRSZWN0IHZp
c3VhbE92ZXJmbG93UmVjdEVxdWl2YWxlbnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uCi0gICAgICAgIC8v
IHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlVmlzdWFsT3ZlcmZsb3dS
ZWN0KCp0aGlzKTsKLSAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKLSAgICB9CisgICAgTGF5
b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4gU1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVZpc3VhbE92ZXJmbG93UmVjdCgqdGhpcyk7
IH0KIAogICAgIHZvaWQgYXBwbHlUb3BMZWZ0TG9jYXRpb25PZmZzZXRFcXVpdmFsZW50KExheW91
dFBvaW50JiBwb2ludCkgY29uc3QgeyBwb2ludC5tb3ZlQnkobGF5b3V0TG9jYXRpb24oKSk7IH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKaW5k
ZXggMTE0YWUxNTNlZDBiZGNlMjRmNDdmZDljY2RmNTc4ZGE1ZWM1NDQ0Mi4uMTIxYzYzNzY0OTA0
MWRlY2NlYmE1Nzk5NDlmNWNlNmRjM2ZmNDZkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCkBAIC0xOTMsMTYgKzE5MywxNiBAQCB2b2lkIFJl
bmRlclNWR1Jvb3Q6OmxheW91dCgpCiAgICAgLy8gU1ZHTGF5ZXJUcmFuc2Zvcm1VcGRhdGVyIHRy
YW5zZm9ybVVwZGF0ZXIoKnRoaXMpOwogICAgIHVwZGF0ZUxheWVySW5mb3JtYXRpb24oKTsKIAot
ICAgIC8qIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQ29udGFpbmVyTGF5b3V0IC8gU1ZHQm91
bmRpbmdCb3hDb21wdXRhdGlvbgogICAgIHsKKyAgICAgICAgLyogRklYTUU6IFtMQlNFXSBVcHN0
cmVhbSBTVkdDb250YWluZXJMYXlvdXQKICAgICAgICAgU1ZHQ29udGFpbmVyTGF5b3V0IGNvbnRh
aW5lckxheW91dCgqdGhpcyk7CiAgICAgICAgIGNvbnRhaW5lckxheW91dC5sYXlvdXRDaGlsZHJl
bihuZWVkc0xheW91dCB8fCBTVkdSZW5kZXJTdXBwb3J0OjpmaWx0ZXJzRm9yY2VDb250YWluZXJM
YXlvdXQoKnRoaXMpKTsKKyAgICAgICAgKi8KIAogICAgICAgICBTVkdCb3VuZGluZ0JveENvbXB1
dGF0aW9uIGJvdW5kaW5nQm94Q29tcHV0YXRpb24oKnRoaXMpOwogICAgICAgICBtX29iamVjdEJv
dW5kaW5nQm94ID0gYm91bmRpbmdCb3hDb21wdXRhdGlvbi5jb21wdXRlRGVjb3JhdGVkQm91bmRp
bmdCb3goU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6b2JqZWN0Qm91bmRpbmdCb3hEZWNvcmF0
aW9uKTsKICAgICAgICAgbV9zdHJva2VCb3VuZGluZ0JveCA9IGJvdW5kaW5nQm94Q29tcHV0YXRp
b24uY29tcHV0ZURlY29yYXRlZEJvdW5kaW5nQm94KFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246
OnN0cm9rZUJvdW5kaW5nQm94RGVjb3JhdGlvbik7CiAgICAgfQotICAgICovCiAKICAgICAvLyBG
SVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0NvbnRhaW5lckxheW91dCAtLSByZW1vdmUgU1ZHUmVu
ZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4uCiAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6bGF5b3V0
Q2hpbGRyZW4oKnRoaXMsIG5lZWRzTGF5b3V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290LmgKaW5kZXggNDM3MzEzZDA3OWJkZWQ0ZWM2ZmUwNWRiMDM1MWNj
ZDY5Y2M4Njc5OC4uNjZiYWIwODgxYTM3ZmU1ZjExMGI0NjVmZTBkODNiMWZhYzc4NjhjNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgKQEAgLTI2LDgg
KzI2LDcgQEAKICNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKICNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJSZXBsYWNlZC5oIgotLy8gRklYTUU6IFtMQlNF
XSBVcHN0cmVhbSBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uCi0vLyAjaW5jbHVkZSAiU1ZHQm91
bmRpbmdCb3hDb21wdXRhdGlvbi5oIgorI2luY2x1ZGUgIlNWR0JvdW5kaW5nQm94Q29tcHV0YXRp
b24uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03MiwyMSArNzEsOSBAQCBwdWJsaWM6
CiAKICAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX29iamVjdEJvdW5kaW5nQm94OyB9CiAgICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsgfQorICAgIEZsb2F0
UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmNvbXB1dGVSZXBhaW50Qm91bmRpbmdCb3goKnRo
aXMpOyB9CiAKLSAgICAvLyBGSVhNRTogW0xCU0VdIE1hcmsgZmluYWwsIGFkZCByZXBhaW50Qm91
bmRpbmdCb3goKSB0byBSZW5kZXJPYmplY3QKLSAgICBGbG9hdFJlY3QgcmVwYWludEJvdW5kaW5n
Qm94KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbgotICAgICAgICAvLyByZXR1cm4gU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbjo6Y29tcHV0ZVJlcGFpbnRCb3VuZGluZ0JveCgqdGhpcyk7Ci0gICAgICAgIHJl
dHVybiBtX3N0cm9rZUJvdW5kaW5nQm94OwotICAgIH0KLQotICAgIExheW91dFJlY3QgdmlzdWFs
T3ZlcmZsb3dSZWN0RXF1aXZhbGVudCgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBGSVhNRTog
W0xCU0VdIFVwc3RyZWFtIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24KLSAgICAgICAgLy8gcmV0
dXJuIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmNvbXB1dGVWaXN1YWxPdmVyZmxvd1JlY3Qo
KnRoaXMpOwotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwotICAgIH0KKyAgICBMYXlvdXRS
ZWN0IHZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxlbnQoKSBjb25zdCB7IHJldHVybiBTVkdCb3Vu
ZGluZ0JveENvbXB1dGF0aW9uOjpjb21wdXRlVmlzdWFsT3ZlcmZsb3dSZWN0KCp0aGlzKTsgfQog
CiBwcml2YXRlOgogICAgIHZvaWQgZWxlbWVudCgpIGNvbnN0ID0gZGVsZXRlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAppbmRleCA5YTk1ZmEy
NTQ4ZDBmNDc0MTQ5NjI0MjhlMzhjMTQ1ODUxMGE3NzYzLi41YWJlZDIwZmM4ODAxMjE4N2MwNzQ0
ZjRhNDk2MjE5NDg4YWRjYzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1NoYXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1NoYXBlLmNwcApAQCAtNDAwLDcgKzQwMCw3IEBAIHN0YXRpYyBpbmxpbmUgUmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckZvclR5cGUoU1ZHTWFya2VyVHlwZSB0eXBlLCBS
ZW5kZXJTCiAgICAgcmV0dXJuIDA7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6Y29t
cHV0ZU1hcmtlckJvdW5kaW5nQm94KCkgY29uc3QKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6
Y29tcHV0ZU1hcmtlckJvdW5kaW5nQm94KGNvbnN0IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246
OkRlY29yYXRpb25PcHRpb25zJikgY29uc3QKIHsKICAgICBpZiAobV9tYXJrZXJQb3NpdGlvbnMu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CkBAIC00MTcsOCArNDE3LDEx
IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6Y29tcHV0ZU1hcmtlckJvdW5kaW5nQm94KCkg
Y29uc3QKICAgICBGbG9hdFJlY3QgYm91bmRhcmllczsKICAgICB1bnNpZ25lZCBzaXplID0gbV9t
YXJrZXJQb3NpdGlvbnMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKLSAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXIgPSBt
YXJrZXJGb3JUeXBlKG1fbWFya2VyUG9zaXRpb25zW2ldLnR5cGUsIG1hcmtlclN0YXJ0LCBtYXJr
ZXJNaWQsIG1hcmtlckVuZCkpCisgICAgICAgIGlmIChhdXRvKiBtYXJrZXIgPSBtYXJrZXJGb3JU
eXBlKG1fbWFya2VyUG9zaXRpb25zW2ldLnR5cGUsIG1hcmtlclN0YXJ0LCBtYXJrZXJNaWQsIG1h
cmtlckVuZCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIgY2hhbmdlcworICAgICAgICAgICAgLy8gYm91bmRhcmllcy51bml0
ZShtYXJrZXItPmNvbXB1dGVNYXJrZXJCb3VuZGluZ0JveChvcHRpb25zLCBtYXJrZXItPm1hcmtl
clRyYW5zZm9ybWF0aW9uKG1fbWFya2VyUG9zaXRpb25zW2ldLm9yaWdpbiwgbV9tYXJrZXJQb3Np
dGlvbnNbaV0uYW5nbGUsIHN0cm9rZVdpZHRoKCkpKSk7CiAgICAgICAgICAgICBib3VuZGFyaWVz
LnVuaXRlKG1hcmtlci0+bWFya2VyQm91bmRhcmllcyhtYXJrZXItPm1hcmtlclRyYW5zZm9ybWF0
aW9uKG1fbWFya2VyUG9zaXRpb25zW2ldLm9yaWdpbiwgbV9tYXJrZXJQb3NpdGlvbnNbaV0uYW5n
bGUsIHN0cm9rZVdpZHRoKCkpKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGJvdW5k
YXJpZXM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1NoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBl
LmgKaW5kZXggMWZhNGQ4YzM2MjU3NWMwNjlmYThiMjkwZjdhZWE3ZjZlODMzMDQ3MC4uNjkxZmI4
NmY5ZWZjMDkzYzU4NGIyMDBkOTVkYjNiZGU3YmM5ZWVkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaApAQCAtMzAsOCArMzAsNyBAQAogI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUg
IlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCi0vLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0Jv
dW5kaW5nQm94Q29tcHV0YXRpb24KLS8vICNpbmNsdWRlICJTVkdCb3VuZGluZ0JveENvbXB1dGF0
aW9uLmgiCisjaW5jbHVkZSAiU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5oIgogI2luY2x1ZGUg
IlNWR0dyYXBoaWNzRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR01hcmtlckRhdGEuaCIKICNpbmNs
dWRlIDxtZW1vcnk+CkBAIC04MCwxNSArNzksOSBAQCBwdWJsaWM6CiAKICAgICBGbG9hdFJlY3Qg
b2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbGxCb3VuZGluZ0Jv
eDsgfQogICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KKyAgICBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1
dGF0aW9uOjpjb21wdXRlUmVwYWludEJvdW5kaW5nQm94KCp0aGlzKTsgfQogCi0gICAgRmxvYXRS
ZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgZmluYWwKLSAgICB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlv
bgotICAgICAgICAvLyByZXR1cm4gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVJl
cGFpbnRCb3VuZGluZ0JveCgqdGhpcyk7IH0KLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwot
ICAgIH0KLQotICAgIEZsb2F0UmVjdCBjb21wdXRlTWFya2VyQm91bmRpbmdCb3goKSBjb25zdDsK
KyAgICBGbG9hdFJlY3QgY29tcHV0ZU1hcmtlckJvdW5kaW5nQm94KGNvbnN0IFNWR0JvdW5kaW5n
Qm94Q29tcHV0YXRpb246OkRlY29yYXRpb25PcHRpb25zJikgY29uc3Q7CiAKIHByb3RlY3RlZDoK
ICAgICB2b2lkIGVsZW1lbnQoKSBjb25zdCA9IGRlbGV0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmY1ODUxMjgxMzBlMWU1NDg2YjVmZWEyZjllMjkwZTNkNzIzYWNlZWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb24uY3BwCkBAIC0wLDAgKzEsMjg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxLCAyMDIyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdC
b3VuZGluZ0JveENvbXB1dGF0aW9uLmgiCisKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VO
R0lORSkKKyNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVy
U1ZHRm9yZWlnbk9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0ltYWdlLmgiCisjaW5jbHVk
ZSAiUmVuZGVyU1ZHSW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFza2Vy
LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBl
LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5o
IgorI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbihj
b25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKKyAgICA6IG1fcmVuZGVyZXIo
cmVuZGVyZXIpCit7Cit9CisKK0Zsb2F0UmVjdCBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpj
b21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3goY29uc3QgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlv
bjo6RGVjb3JhdGlvbk9wdGlvbnMmIG9wdGlvbnMsIGJvb2wqIGJvdW5kaW5nQm94VmFsaWQpIGNv
bnN0Cit7CisgICAgLy8gU1ZHMjogQm91bmRpbmcgYm94ZXMgYWxnb3JpdGhtIChodHRwczovL3N2
Z3dnLm9yZy9zdmcyLWRyYWZ0L2Nvb3Jkcy5odG1sI0JvdW5kaW5nQm94ZXMpCisKKyAgICAvLyBU
aGUgZm9sbG93aW5nIGFsZ29yaXRobSBkZWZpbmVzIGhvdyB0byBjb21wdXRlIGEgYm91bmRpbmcg
Ym94IGZvciBhIGdpdmVuIGVsZW1lbnQuIFRoZSBpbnB1dHMgdG8gdGhlIGFsZ29yaXRobSBhcmU6
CisgICAgLy8gLSBlbGVtZW50LCB0aGUgZWxlbWVudCB3ZSBhcmUgY29tcHV0aW5nIGEgYm91bmRp
bmcgYm94IGZvcjsKKyAgICAvLyAtIHNwYWNlLCBhIGNvb3JkaW5hdGUgc3BhY2UgaW4gd2hpY2gg
dGhlIGJvdW5kaW5nIGJveCB3aWxsIGJlIGNvbXB1dGVkOworICAgIC8vIC0gZmlsbCwgYSBib29s
ZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYm91bmRpbmcgYm94IGluY2x1ZGVzIHRoZSBnZW9t
ZXRyeSBvZiB0aGUgZWxlbWVudCBhbmQgaXRzIGRlc2NlbmRhbnRzOworICAgIC8vIC0gc3Ryb2tl
LCBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBib3VuZGluZyBib3ggaW5jbHVkZXMg
dGhlIHN0cm9rZSBvZiB0aGUgZWxlbWVudCBhbmQgaXRzIGRlc2NlbmRhbnRzOworICAgIC8vIC0g
bWFya2VycywgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYm91bmRpbmcgYm94IGlu
Y2x1ZGVzIHRoZSBtYXJrZXJzIG9mIHRoZSBlbGVtZW50IGFuZCBpdHMgZGVzY2VuZGFudHM7IGFu
ZAorICAgIC8vIC0gY2xpcHBlZCwgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYm91
bmRpbmcgYm94IGlzIGFmZmVjdGVkIGJ5IGFueSBjbGlwcGluZyBwYXRocyBhcHBsaWVkIHRvIHRo
ZSBlbGVtZW50IGFuZCBpdHMgZGVzY2VuZGFudHMuCisKKyAgICAvLyBUaGUgYWxnb3JpdGhtIHRv
IGNvbXB1dGUgdGhlIGJvdW5kaW5nIGJveCBpcyBhcyBmb2xsb3dzLCBkZXBlbmRpbmcgb24gdGhl
IHR5cGUgb2YgZWxlbWVudDoKKyAgICAvLyAtIGEgc2hhcGUgKFJlbmRlclNWR1NoYXBlKQorICAg
IC8vIC0gYSB0ZXh0IGNvbnRlbnQgZWxlbWVudCAoUmVuZGVyU1ZHVGV4dCBvciBSZW5kZXJTVkdJ
bmxpbmUpCisgICAgLy8gLSBhbiAiYSIgZWxlbWVudCB3aXRoaW4gYSB0ZXh0IGNvbnRlbnQgZWxl
bWVudCAoLT4gY3JlYXRlcyBSZW5kZXJTVkdJbmxpbmUpCisgICAgaWYgKGlzPFJlbmRlclNWR1No
YXBlPihtX3JlbmRlcmVyKSB8fCBpczxSZW5kZXJTVkdUZXh0PihtX3JlbmRlcmVyKSB8fCBpczxS
ZW5kZXJTVkdJbmxpbmU+KG1fcmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gaGFuZGxlU2hhcGVP
clRleHRPcklubGluZShvcHRpb25zLCBib3VuZGluZ0JveFZhbGlkKTsKKworICAgIC8vIC0gYSBj
b250YWluZXIgZWxlbWVudCAoUmVuZGVyU1ZHUm9vdCAvIFJlbmRlclNWR0NvbnRhaW5lcikKKyAg
ICAvLyAtICJ1c2UiIChSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyKQorICAgIC8vIEZJ
WE1FOiBbTEJTRV0gVXBzdHJlYW0gbmV3IFJlbmRlclNWR0NvbnRhaW5lciBpbXBsZW1lbnRhdGlv
bgorICAgIC8vIGlmIChpczxSZW5kZXJTVkdSb290PihtX3JlbmRlcmVyKSB8fCBpczxSZW5kZXJT
VkdDb250YWluZXI+KG1fcmVuZGVyZXIpKQorICAgIGlmIChpczxSZW5kZXJTVkdSb290PihtX3Jl
bmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGhhbmRsZVJvb3RPckNvbnRhaW5lcihvcHRpb25zLCBi
b3VuZGluZ0JveFZhbGlkKTsKKworICAgIC8vIC0gImZvcmVpZ25PYmplY3QiCisgICAgLy8gLSAi
aW1hZ2UiCisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBuZXcgUmVuZGVyU1ZHSW1hZ2Ug
aW1wbGVtZW50YXRpb24KKyAgICAvLyBpZiAoaXM8UmVuZGVyU1ZHRm9yZWlnbk9iamVjdD4obV9y
ZW5kZXJlcikgfHwgaXM8UmVuZGVyU1ZHSW1hZ2U+KG1fcmVuZGVyZXIpKQorICAgIGlmIChpczxS
ZW5kZXJTVkdGb3JlaWduT2JqZWN0PihtX3JlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGhhbmRs
ZUZvcmVpZ25PYmplY3RPckltYWdlKG9wdGlvbnMsIGJvdW5kaW5nQm94VmFsaWQpOworCisjaWYg
RU5BQkxFKFRSRUVfREVCVUdHSU5HKQorICAgIHNob3dSZW5kZXJUcmVlKCZtX3JlbmRlcmVyKTsK
KyNlbmRpZgorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEZsb2F0UmVj
dCgpOworfQorCitGbG9hdFJlY3QgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6aGFuZGxlU2hh
cGVPclRleHRPcklubGluZShjb25zdCBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpEZWNvcmF0
aW9uT3B0aW9ucyYgb3B0aW9ucywgYm9vbCogYm91bmRpbmdCb3hWYWxpZCkgY29uc3QKK3sKKyAg
ICAvLyAxLiBMZXQgYm94IGJlIGEgcmVjdGFuZ2xlIGluaXRpYWxpemVkIHRvICgwLCAwLCAwLCAw
KS4KKyAgICBGbG9hdFJlY3QgYm94OworCisgICAgLy8gMi4gTGV0IGZpbGwtc2hhcGUgYmUgdGhl
IGVxdWl2YWxlbnQgcGF0aCBvZiBlbGVtZW50IGlmIGl0IGlzIGEgc2hhcGUsIG9yIGEgc2hhcGUg
dGhhdCBpbmNsdWRlcyBlYWNoIG9mIHRoZQorICAgIC8vICAgIGdseXBoIGNlbGxzIGNvcnJlc3Bv
bmRpbmcgdG8gdGhlIHRleHQgd2l0aGluIHRoZSBlbGVtZW50cyBvdGhlcndpc2UuCisgICAgLy8g
My4gSWYgZmlsbCBpcyB0cnVlLCB0aGVuIHNldCBib3ggdG8gdGhlIHRpZ2h0ZXN0IHJlY3Rhbmds
ZSBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gc3BhY2UgdGhhdCBjb250YWlucyBmaWxsLXNoYXBl
LgorICAgIC8vCisgICAgLy8gTm90ZTogVGhlIHZhbHVlcyBvZiB0aGUgZmlsbCwgZmlsbC1vcGFj
aXR5IGFuZCBmaWxsLXJ1bGUgcHJvcGVydGllcyBkbyBub3QgYWZmZWN0IGZpbGwtc2hhcGUuCisg
ICAgaWYgKG9wdGlvbnMuY29udGFpbnMoRGVjb3JhdGlvbk9wdGlvbjo6SW5jbHVkZUZpbGxTaGFw
ZSkpCisgICAgICAgIGJveCA9IG1fcmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKTsKKworICAg
IC8vIDQuIElmIHN0cm9rZSBpcyB0cnVlIGFuZCB0aGUgZWxlbWVudCdzIHN0cm9rZSBpcyBhbnl0
aGluZyBvdGhlciB0aGFuIG5vbmUsIHRoZW4gc2V0IGJveCB0byBiZSB0aGUgdW5pb24gb2YgYm94
CisgICAgLy8gICAgYW5kIHRoZSB0aWdodGVzdCByZWN0YW5nbGUgaW4gY29vcmRpbmF0ZSBzeXN0
ZW0gc3BhY2UgdGhhdCBjb250YWlucyB0aGUgc3Ryb2tlIHNoYXBlIG9mIHRoZSBlbGVtZW50LCB3
aXRoIHRoZQorICAgIC8vICAgIGFzc3VtcHRpb24gdGhhdCB0aGUgZWxlbWVudCBoYXMgbm8gZGFz
aCBwYXR0ZXJuLgorICAgIC8vCisgICAgLy8gTm90ZTogVGhlIHZhbHVlcyBvZiB0aGUgc3Ryb2tl
LW9wYWNpdHksIHN0cm9rZS1kYXNoYXJyYXkgYW5kIHN0cm9rZS1kYXNob2Zmc2V0IGRvIG5vdCBh
ZmZlY3QgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBzdHJva2Ugc2hhcGUuCisgICAgaWYgKG9wdGlv
bnMuY29udGFpbnMoRGVjb3JhdGlvbk9wdGlvbjo6SW5jbHVkZVN0cm9rZVNoYXBlKSkKKyAgICAg
ICAgYm94LnVuaXRlKG1fcmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdCb3goKSk7CisKKyAgICAvLyA1
LiBJZiBtYXJrZXJzIGlzIHRydWUsIHRoZW4gZm9yIGVhY2ggbWFya2VyIG1hcmtlciByZW5kZXJl
ZCBvbiB0aGUgZWxlbWVudDoKKyAgICAvLyAtIEZvciBlYWNoIGRlc2NlbmRhbnQgZ3JhcGhpY3Mg
ZWxlbWVudCBjaGlsZCBvZiB0aGUgIm1hcmtlciIgZWxlbWVudCB0aGF0IGRlZmluZXMgbWFya2Vy
J3MgY29udGVudDoKKyAgICAvLyAgIC0gSWYgY2hpbGQgaGFzIGFuIGFuY2VzdG9yIGVsZW1lbnQg
d2l0aGluIHRoZSAibWFya2VyIiB0aGF0IGlzICdkaXNwbGF5OiBub25lJywgaGFzIGEgZmFpbGlu
ZyBjb25kaXRpb25hbCBwcm9jZXNzaW5nIGF0dHJpYnV0ZSwKKyAgICAvLyAgICAgb3IgaXMgbm90
IGFuICJhIiwgImciLCAic3ZnIiBvciAic3dpdGNoIiBlbGVtZW50LCB0aGVuIGNvbnRpbnVlIHRv
IHRoZSBuZXh0IGRlc2NlbmRhbnQgZ3JhcGhpY3MgZWxlbWVudC4KKyAgICAvLyAgIC0gT3RoZXJ3
aXNlLCBzZXQgYm94IHRvIGJlIHRoZSB1bmlvbiBvZiBib3ggYW5kIHRoZSByZXN1bHQgb2YgaW52
b2tpbmcgdGhlIGFsZ29yaXRobSB0byBjb21wdXRlIGEgYm91bmRpbmcgYm94IHdpdGggY2hpbGQg
YXMKKyAgICAvLyAgICAgdGhlIGVsZW1lbnQsIHNwYWNlIGFzIHRoZSB0YXJnZXQgY29vcmRpbmF0
ZSBzcGFjZSwgdHJ1ZSBmb3IgZmlsbCwgc3Ryb2tlIGFuZCBtYXJrZXJzLCBhbmQgY2xpcHBlZCBm
b3IgY2xpcHBlZC4KKyAgICBpZiAob3B0aW9ucy5jb250YWlucyhEZWNvcmF0aW9uT3B0aW9uOjpJ
bmNsdWRlTWFya2VycykgJiYgaXM8UmVuZGVyU1ZHU2hhcGU+KG1fcmVuZGVyZXIpKSB7CisgICAg
ICAgIERlY29yYXRpb25PcHRpb25zIG9wdGlvbnNGb3JNYXJrZXIgPSB7IERlY29yYXRpb25PcHRp
b246OkluY2x1ZGVGaWxsU2hhcGUsIERlY29yYXRpb25PcHRpb246OkluY2x1ZGVTdHJva2VTaGFw
ZSwgRGVjb3JhdGlvbk9wdGlvbjo6SW5jbHVkZU1hcmtlcnMgfTsKKyAgICAgICAgaWYgKG9wdGlv
bnMuY29udGFpbnMoRGVjb3JhdGlvbk9wdGlvbjo6SW5jbHVkZUNsaXBwZXJzKSkKKyAgICAgICAg
ICAgIG9wdGlvbnNGb3JNYXJrZXIuYWRkKERlY29yYXRpb25PcHRpb246OkluY2x1ZGVDbGlwcGVy
cyk7CisgICAgICAgIGJveC51bml0ZShkb3duY2FzdDxSZW5kZXJTVkdTaGFwZT4obV9yZW5kZXJl
cikuY29tcHV0ZU1hcmtlckJvdW5kaW5nQm94KG9wdGlvbnMpKTsKKyAgICB9CisKKyAgICAvLyA2
LiBJZiBjbGlwcGVkIGlzIHRydWUgYW5kIHRoZSB2YWx1ZSBvZiBjbGlwLXBhdGggb24gZWxlbWVu
dCBpcyBub3Qgbm9uZSwgdGhlbiBzZXQgYm94IHRvIGJlIHRoZSB0aWdodGVzdCByZWN0YW5nbGUK
KyAgICAvLyAgICBpbiBjb29yZGluYXRlIHN5c3RlbSBzcGFjZSB0aGF0IGNvbnRhaW5zIHRoZSBp
bnRlcnNlY3Rpb24gb2YgYm94IGFuZCB0aGUgY2xpcHBpbmcgcGF0aC4KKyAgICBhZGp1c3RCb3hG
b3JDbGlwcGluZ0FuZEVmZmVjdHMob3B0aW9ucywgYm94KTsKKworICAgIC8vIDcuIFJldHVybiBi
b3guCisgICAgaWYgKGJvdW5kaW5nQm94VmFsaWQpCisgICAgICAgICpib3VuZGluZ0JveFZhbGlk
ID0gdHJ1ZTsKKyAgICByZXR1cm4gYm94OworfQorCitGbG9hdFJlY3QgU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbjo6aGFuZGxlUm9vdE9yQ29udGFpbmVyKGNvbnN0IFNWR0JvdW5kaW5nQm94Q29t
cHV0YXRpb246OkRlY29yYXRpb25PcHRpb25zJiBvcHRpb25zLCBib29sKiBib3VuZGluZ0JveFZh
bGlkKSBjb25zdAoreworICAgIGF1dG8gdHJhbnNmb3JtYXRpb25NYXRyaXhGcm9tQ2hpbGQgPSBb
XShjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiBjaGlsZCkgLT4gc3RkOjpvcHRpb25hbDxU
cmFuc2Zvcm1hdGlvbk1hdHJpeD4geworICAgICAgICBpZiAoIWNoaWxkLmhhc1RyYW5zZm9ybSgp
KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBhdXRvKiBjb250
YWluZXIgPSBjaGlsZC5wYXJlbnQoKTsKKyAgICAgICAgQVNTRVJUKGNvbnRhaW5lcik7CisKKyAg
ICAgICAgYm9vbCBjb250YWluZXJTa2lwcGVkID0gZmFsc2U7CisgICAgICAgIEFTU0VSVChjb250
YWluZXIgPT0gY2hpbGQuY29udGFpbmVyKG51bGxwdHIsIGNvbnRhaW5lclNraXBwZWQpKTsKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRChjb250YWluZXJTa2lwcGVkLCAhY29udGFpbmVyU2tpcHBlZCk7
CisKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm07CisgICAgICAg
IGNoaWxkLmdldFRyYW5zZm9ybUZyb21Db250YWluZXIoY29udGFpbmVyLCBMYXlvdXRTaXplKCks
IGxheWVyVHJhbnNmb3JtKTsKKyAgICAgICAgcmV0dXJuIGxheWVyVHJhbnNmb3JtLmlzSWRlbnRp
dHkoKSA/IHN0ZDo6bnVsbG9wdCA6IHN0ZDo6bWFrZV9vcHRpb25hbChXVEZNb3ZlKGxheWVyVHJh
bnNmb3JtKSk7CisgICAgfTsKKworICAgIGF1dG8gdW5pdGVCb3VuZGluZ0JveFJlc3BlY3RpbmdW
YWxpZGl0eSA9IFtdKGJvb2wmIGJveFZhbGlkLCBGbG9hdFJlY3QmIGJveCwgY29uc3QgUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCYgLyogY2hpbGQgKi8sIGNvbnN0IEZsb2F0UmVjdCYgY2hpbGRCb3Vu
ZGluZ0JveCkgeworICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIG5ldyBSZW5kZXJT
VkdDb250YWluZXIgaW1wbGVtZW50YXRpb24KKyAgICAgICAgLy8gYm9vbCBpc0JvdW5kaW5nQm94
VmFsaWQgPSBpczxSZW5kZXJTVkdDb250YWluZXI+KGNoaWxkKSA/IGRvd25jYXN0PFJlbmRlclNW
R0NvbnRhaW5lcj4oY2hpbGQpLmlzT2JqZWN0Qm91bmRpbmdCb3hWYWxpZCgpIDogdHJ1ZTsKKyAg
ICAgICAgYm9vbCBpc0JvdW5kaW5nQm94VmFsaWQgPSB0cnVlOworICAgICAgICBpZiAoIWlzQm91
bmRpbmdCb3hWYWxpZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoYm94VmFs
aWQpIHsKKyAgICAgICAgICAgIGJveC51bml0ZUV2ZW5JZkVtcHR5KGNoaWxkQm91bmRpbmdCb3gp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYm94ID0gY2hpbGRC
b3VuZGluZ0JveDsKKyAgICAgICAgYm94VmFsaWQgPSB0cnVlOworICAgIH07CisKKyAgICAvLyAx
LiBMZXQgYm94IGJlIGEgcmVjdGFuZ2xlIGluaXRpYWxpemVkIHRvICgwLCAwLCAwLCAwKS4KKyAg
ICBGbG9hdFJlY3QgYm94OworICAgIGJvb2wgYm94VmFsaWQgPSBmYWxzZTsKKworICAgIC8vIDIu
IExldCBwYXJlbnQgYmUgdGhlIGNvbnRhaW5lciBlbGVtZW50IGlmIGl0IGlzIG9uZSwgb3IgdGhl
IHJvb3Qgb2YgdGhlICJ1c2UiIGVsZW1lbnQncyBzaGFkb3cgdHJlZSBvdGhlcndpc2UuCisKKyAg
ICAvLyAzLiBGb3IgZWFjaCBkZXNjZW5kYW50IGdyYXBoaWNzIGVsZW1lbnQgY2hpbGQgb2YgcGFy
ZW50OgorICAgIC8vICAgIC0gSWYgY2hpbGQgaXMgbm90IHJlbmRlcmVkIHRoZW4gY29udGludWUg
dG8gdGhlIG5leHQgZGVzY2VuZGFudCBncmFwaGljcyBlbGVtZW50LgorICAgIC8vICAgIC0gT3Ro
ZXJ3aXNlLCBzZXQgYm94IHRvIGJlIHRoZSB1bmlvbiBvZiBib3ggYW5kIHRoZSByZXN1bHQgb2Yg
aW52b2tpbmcgdGhlIGFsZ29yaXRobSB0byBjb21wdXRlIGEgYm91bmRpbmcgYm94IHdpdGggY2hp
bGQKKyAgICAvLyAgICAgIGFzIHRoZSBlbGVtZW50IGFuZCB0aGUgc2FtZSB2YWx1ZXMgZm9yIHNw
YWNlLCBmaWxsLCBzdHJva2UsIG1hcmtlcnMgYW5kIGNsaXBwZWQgYXMgdGhlIGNvcnJlc3BvbmRp
bmcgYWxnb3JpdGhtIGlucHV0IHZhbHVlcy4KKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRy
ZW5PZlR5cGU8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4obV9yZW5kZXJlcikpIHsKKyAgICAgICAg
Ly8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBuZXcgUmVuZGVyU1ZHQ29udGFpbmVyIGltcGxlbWVu
dGF0aW9uCisgICAgICAgIC8vIGlmIChpczxSZW5kZXJTVkdIaWRkZW5Db250YWluZXI+KGNoaWxk
KSB8fCAoaXM8UmVuZGVyU1ZHU2hhcGU+KGNoaWxkKSAmJiBkb3duY2FzdDxSZW5kZXJTVkdTaGFw
ZT4oY2hpbGQpLmlzUmVuZGVyaW5nRGlzYWJsZWQoKSkpCisgICAgICAgIGlmIChpczxSZW5kZXJT
VkdTaGFwZT4oY2hpbGQpICYmIGRvd25jYXN0PFJlbmRlclNWR1NoYXBlPihjaGlsZCkuaXNSZW5k
ZXJpbmdEaXNhYmxlZCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgU1ZHQm91
bmRpbmdCb3hDb21wdXRhdGlvbiBjaGlsZEJvdW5kaW5nQm94Q29tcHV0YXRpb24oY2hpbGQpOwor
ICAgICAgICBhdXRvIGNoaWxkQm94ID0gY2hpbGRCb3VuZGluZ0JveENvbXB1dGF0aW9uLmNvbXB1
dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChvcHRpb25zKTsKKyAgICAgICAgLy8gRklYTUU6IFVwc3Ry
ZWFtIG5ldyBSZW5kZXJTVkdDb250YWluZXIgaW1wbGVtZW50YXRpb24KKyAgICAgICAgLy8gaWYg
KG9wdGlvbnMuY29udGFpbnMoRGVjb3JhdGlvbk9wdGlvbjo6T3ZlcnJpZGVCb3hXaXRoRmlsdGVy
Qm94Rm9yQ2hpbGRyZW4pICYmIGlzPFJlbmRlclNWR0NvbnRhaW5lcj4oY2hpbGQpKQorICAgICAg
ICAvLyAgICBjaGlsZEJvdW5kaW5nQm94Q29tcHV0YXRpb24uYWRqdXN0Qm94Rm9yQ2xpcHBpbmdB
bmRFZmZlY3RzKHsgRGVjb3JhdGlvbk9wdGlvbjo6T3ZlcnJpZGVCb3hXaXRoRmlsdGVyQm94IH0s
IGNoaWxkQm94KTsKKworICAgICAgICBpZiAoYXV0byBsYXllclRyYW5zZm9ybSA9IHRyYW5zZm9y
bWF0aW9uTWF0cml4RnJvbUNoaWxkKGNoaWxkKSkKKyAgICAgICAgICAgIGNoaWxkQm94ID0gbGF5
ZXJUcmFuc2Zvcm0tPm1hcFJlY3QoY2hpbGRCb3gpOworCisgICAgICAgIGlmIChvcHRpb25zID09
IG9iamVjdEJvdW5kaW5nQm94RGVjb3JhdGlvbikKKyAgICAgICAgICAgIHVuaXRlQm91bmRpbmdC
b3hSZXNwZWN0aW5nVmFsaWRpdHkoYm94VmFsaWQsIGJveCwgY2hpbGQsIGNoaWxkQm94KTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgYm94LnVuaXRlKGNoaWxkQm94KTsKKyAgICB9CisKKyAg
ICAvLyA0LiBJZiBjbGlwcGVkIGlzIHRydWU6CisgICAgLy8gICAgLSBJZiB0aGUgdmFsdWUgb2Yg
Y2xpcC1wYXRoIG9uIGVsZW1lbnQgaXMgbm90IG5vbmUsIHRoZW4gc2V0IGJveCB0byBiZSB0aGUg
dGlnaHRlc3QgcmVjdGFuZ2xlIGluIGNvb3JkaW5hdGUgc3lzdGVtIHNwYWNlIHRoYXQKKyAgICAv
LyAgICAgIGNvbnRhaW5zIHRoZSBpbnRlcnNlY3Rpb24gb2YgYm94IGFuZCB0aGUgY2xpcHBpbmcg
cGF0aC4KKyAgICAvLyAgICAtIElmIHRoZSBvdmVyZmxvdyBwcm9wZXJ0eSBhcHBsaWVzIHRvIHRo
ZSBlbGVtZW50IGFuZCBkb2VzIG5vdCBoYXZlIGEgdmFsdWUgb2YgdmlzaWJsZSwgdGhlbiBzZXQg
Ym94IHRvIGJlIHRoZSB0aWdodGVzdCByZWN0YW5nbGUKKyAgICAvLyAgICAgIGluIGNvb3JkaW5h
dGUgc3lzdGVtIHNwYWNlIHRoYXQgY29udGFpbnMgdGhlIGludGVyc2VjdGlvbiBvZiBib3ggYW5k
IHRoZSBlbGVtZW50J3Mgb3ZlcmZsb3cgYm91bmRzLgorICAgIC8vICAgIC0gSWYgdGhlIGNsaXAg
cHJvcGVydHkgYXBwbGllcyB0byB0aGUgZWxlbWVudCBhbmQgZG9lcyBub3QgaGF2ZSBhIHZhbHVl
IG9mIGF1dG8sIHRoZW4gc2V0IGJveCB0byBiZSB0aGUgdGlnaHRlc3QgcmVjdGFuZ2xlIGluIGNv
b3JkaW5hdGUKKyAgICAvLyAgICAgIHN5c3RlbSBzcGFjZSB0aGF0IGNvbnRhaW5zIHRoZSBpbnRl
cnNlY3Rpb24gb2YgYm94IGFuZCB0aGUgcmVjdGFuZ2xlIHNwZWNpZmllZCBieSBjbGlwLiAoVE9E
TyEpCisgICAgYWRqdXN0Qm94Rm9yQ2xpcHBpbmdBbmRFZmZlY3RzKG9wdGlvbnMsIGJveCwgeyBE
ZWNvcmF0aW9uT3B0aW9uOjpPdmVycmlkZUJveFdpdGhGaWx0ZXJCb3ggfSk7CisKKyAgICBpZiAo
b3B0aW9ucy5jb250YWlucyhEZWNvcmF0aW9uT3B0aW9uOjpJbmNsdWRlQ2xpcHBlcnMpICYmIG1f
cmVuZGVyZXIuaGFzTm9uVmlzaWJsZU92ZXJmbG93KCkpIHsKKyAgICAgICAgQVNTRVJUKG1fcmVu
ZGVyZXIuaGFzTGF5ZXIoKSk7CisKKyAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBu
ZXcgUmVuZGVyU1ZHQ29udGFpbmVyIC8gUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIgaW1wbGVtZW50
YXRpb24KKyAgICAgICAgLy8gQVNTRVJUKGlzPFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyPiht
X3JlbmRlcmVyKSB8fCBpczxSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcj4obV9yZW5kZXJlcikgfHwg
aXM8UmVuZGVyU1ZHUm9vdD4obV9yZW5kZXJlcikpOworICAgICAgICBBU1NFUlQoaXM8UmVuZGVy
U1ZHUm9vdD4obV9yZW5kZXJlcikpOworCisgICAgICAgIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlw
UmVjdDsKKyAgICAgICAgaWYgKGlzPFJlbmRlclNWR01vZGVsT2JqZWN0PihtX3JlbmRlcmVyKSkK
KyAgICAgICAgICAgIG92ZXJmbG93Q2xpcFJlY3QgPSBkb3duY2FzdDxSZW5kZXJTVkdNb2RlbE9i
amVjdD4obV9yZW5kZXJlcikub3ZlcmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgpKTsKKyAgICAg
ICAgZWxzZSBpZiAoaXM8UmVuZGVyQm94PihtX3JlbmRlcmVyKSkKKyAgICAgICAgICAgIG92ZXJm
bG93Q2xpcFJlY3QgPSBkb3duY2FzdDxSZW5kZXJCb3g+KG1fcmVuZGVyZXIpLm92ZXJmbG93Q2xp
cFJlY3QoTGF5b3V0UG9pbnQoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAg
IH0KKworICAgICAgICBib3guaW50ZXJzZWN0KEZsb2F0UmVjdChvdmVyZmxvd0NsaXBSZWN0KSk7
CisgICAgfQorCisgICAgLy8gNS4gUmV0dXJuIGJveC4KKyAgICBpZiAoYm91bmRpbmdCb3hWYWxp
ZCkKKyAgICAgICAgKmJvdW5kaW5nQm94VmFsaWQgPSBib3hWYWxpZDsKKyAgICByZXR1cm4gYm94
OworfQorCitGbG9hdFJlY3QgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6aGFuZGxlRm9yZWln
bk9iamVjdE9ySW1hZ2UoY29uc3QgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6RGVjb3JhdGlv
bk9wdGlvbnMmIG9wdGlvbnMsIGJvb2wqIGJvdW5kaW5nQm94VmFsaWQpIGNvbnN0Cit7CisgICAg
Ly8gMS4gTGV0IGJveCBiZSB0aGUgdGlnaHRlc3QgcmVjdGFuZ2xlIGluIGNvb3JkaW5hdGUgc3Bh
Y2Ugc3BhY2UgdGhhdCBjb250YWlucyB0aGUgcG9zaXRpb25pbmcgcmVjdGFuZ2xlCisgICAgLy8g
ICAgZGVmaW5lZCBieSB0aGUgIngiLCAieSIsICJ3aWR0aCIgYW5kICJoZWlnaHQiIGdlb21ldHJp
YyBwcm9wZXJ0aWVzIG9mIHRoZSBlbGVtZW50LgorICAgIC8vCisgICAgLy8gTm90ZTogVGhlIGZp
bGwsIHN0cm9rZSBhbmQgbWFya2VycyBpbnB1dCBhcmd1bWVudHMgdG8gdGhpcyBhbGdvcml0aG0g
ZG8gbm90IGFmZmVjdCB0aGUgYm91bmRpbmcgYm94IHJldHVybmVkIGZvciB0aGVzZSBlbGVtZW50
cy4KKyAgICBhdXRvIGJveCA9IG1fcmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKTsKKworICAg
IC8vIDIuIElmIGNsaXBwZWQgaXMgdHJ1ZSBhbmQgdGhlIHZhbHVlIG9mIGNsaXAtcGF0aCBvbiBl
bGVtZW50IGlzIG5vdCBub25lLCB0aGVuIHNldCBib3ggdG8gYmUgdGhlIHRpZ2h0ZXN0IHJlY3Rh
bmdsZQorICAgIC8vICAgIGluIGNvb3JkaW5hdGUgc3lzdGVtIHNwYWNlIHRoYXQgY29udGFpbnMg
dGhlIGludGVyc2VjdGlvbiBvZiBib3ggYW5kIHRoZSBjbGlwcGluZyBwYXRoLgorICAgIGFkanVz
dEJveEZvckNsaXBwaW5nQW5kRWZmZWN0cyhvcHRpb25zLCBib3gpOworCisgICAgLy8gMy4gUmV0
dXJuIGJveC4KKyAgICBpZiAoYm91bmRpbmdCb3hWYWxpZCkKKyAgICAgICAgKmJvdW5kaW5nQm94
VmFsaWQgPSB0cnVlOworICAgIHJldHVybiBib3g7Cit9CisKK3ZvaWQgU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbjo6YWRqdXN0Qm94Rm9yQ2xpcHBpbmdBbmRFZmZlY3RzKGNvbnN0IFNWR0JvdW5k
aW5nQm94Q29tcHV0YXRpb246OkRlY29yYXRpb25PcHRpb25zJiBvcHRpb25zLCBGbG9hdFJlY3Qm
IGJveCwgY29uc3QgU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6RGVjb3JhdGlvbk9wdGlvbnMm
IG9wdGlvbnNUb0NoZWNrRm9yRmlsdGVycykgY29uc3QKK3sKKyAgICBib29sIGluY2x1ZGVGaWx0
ZXIgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8gZmlsdGVyT3B0aW9uIDogb3B0aW9uc1RvQ2hlY2tG
b3JGaWx0ZXJzKSB7CisgICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5zKGZpbHRlck9wdGlvbikp
IHsKKyAgICAgICAgICAgIGluY2x1ZGVGaWx0ZXIgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGluY2x1ZGVDbGlwcGVyID0gb3B0aW9ucy5j
b250YWlucyhEZWNvcmF0aW9uT3B0aW9uOjpJbmNsdWRlQ2xpcHBlcnMpOworICAgIGJvb2wgaW5j
bHVkZU1hc2tlciA9IG9wdGlvbnMuY29udGFpbnMoRGVjb3JhdGlvbk9wdGlvbjo6SW5jbHVkZU1h
c2tlcnMpOworCisgICAgaWYgKGluY2x1ZGVGaWx0ZXIgfHwgaW5jbHVkZUNsaXBwZXIgfHwgaW5j
bHVkZU1hc2tlcikgeworICAgICAgICBpZiAoYXV0byogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2Vz
Q2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlcmVyKG1fcmVuZGVyZXIpKSB7CisgICAgICAg
ICAgICBpZiAoaW5jbHVkZUZpbHRlcikgeworICAgICAgICAgICAgICAgIGlmIChhdXRvKiBmaWx0
ZXIgPSByZXNvdXJjZXMtPmZpbHRlcigpKQorICAgICAgICAgICAgICAgICAgICBib3ggPSBmaWx0
ZXItPnJlc291cmNlQm91bmRpbmdCb3gobV9yZW5kZXJlcik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChpbmNsdWRlQ2xpcHBlcikgeworICAgICAgICAgICAgICAgIGlmIChhdXRv
KiBjbGlwcGVyID0gcmVzb3VyY2VzLT5jbGlwcGVyKCkpCisgICAgICAgICAgICAgICAgICAgIGJv
eC5pbnRlcnNlY3QoY2xpcHBlci0+cmVzb3VyY2VCb3VuZGluZ0JveChtX3JlbmRlcmVyKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbmNsdWRlTWFza2VyKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGF1dG8qIG1hc2tlciA9IHJlc291cmNlcy0+bWFza2VyKCkpCisgICAgICAg
ICAgICAgICAgICAgIGJveC5pbnRlcnNlY3QobWFza2VyLT5yZXNvdXJjZUJvdW5kaW5nQm94KG1f
cmVuZGVyZXIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChv
cHRpb25zLmNvbnRhaW5zKERlY29yYXRpb25PcHRpb246OkluY2x1ZGVPdXRsaW5lKSkKKyAgICAg
ICAgYm94LmluZmxhdGUobV9yZW5kZXJlci5vdXRsaW5lU3R5bGVGb3JSZXBhaW50KCkub3V0bGlu
ZVNpemUoKSk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgz
ZGE2M2JkNmYwOTgyZWM2N2ZhNWIzYmM5NDZiZDg4MmQyNTlkNDQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24u
aApAQCAtMCwwICsxLDkyIEBACisvKioKKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBGbG9hdFJlY3Q7CisKK2NsYXNzIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24g
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24pOwor
cHVibGljOgorICAgIGV4cGxpY2l0IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24oY29uc3QgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCYpOworICAgIH5TVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uKCkg
PSBkZWZhdWx0OworCisgICAgZW51bSBjbGFzcyBEZWNvcmF0aW9uT3B0aW9uIDogdWludDhfdCB7
CisgICAgICAgIEluY2x1ZGVGaWxsU2hhcGUgICAgICAgICAgICAgICAgICAgID0gMSA8PCAwLCAv
KiBjb3JyZXNwb25kcyB0byAnYm9vbCBmaWxsJyAgICAgKi8KKyAgICAgICAgSW5jbHVkZVN0cm9r
ZVNoYXBlICAgICAgICAgICAgICAgICAgPSAxIDw8IDEsIC8qIGNvcnJlc3BvbmRzIHRvICdib29s
IHN0cm9rZScgICAqLworICAgICAgICBJbmNsdWRlTWFya2VycyAgICAgICAgICAgICAgICAgICAg
ICA9IDEgPDwgMiwgLyogY29ycmVzcG9uZHMgdG8gJ2Jvb2wgbWFya2VycycgICovCisgICAgICAg
IEluY2x1ZGVDbGlwcGVycyAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAzLCAvKiBjb3JyZXNw
b25kcyB0byAnYm9vbCBjbGlwcGVycycgKi8KKyAgICAgICAgSW5jbHVkZU1hc2tlcnMgICAgICAg
ICAgICAgICAgICAgICAgPSAxIDw8IDQsIC8qIFdlYktpdCBleHRlbnNpb24gLSBpbnRlcm5hbCAg
ICAqLworICAgICAgICBJbmNsdWRlT3V0bGluZSAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwg
NSwgLyogV2ViS2l0IGV4dGVuc2lvbiAtIGludGVybmFsICAgICovCisgICAgICAgIE92ZXJyaWRl
Qm94V2l0aEZpbHRlckJveCAgICAgICAgICAgID0gMSA8PCA2LCAvKiBXZWJLaXQgZXh0ZW5zaW9u
IC0gaW50ZXJuYWwgICAgKi8KKyAgICAgICAgT3ZlcnJpZGVCb3hXaXRoRmlsdGVyQm94Rm9yQ2hp
bGRyZW4gPSAxIDw8IDcgIC8qIFdlYktpdCBleHRlbnNpb24gLSBpbnRlcm5hbCAgICAqLworICAg
IH07CisKKyAgICB1c2luZyBEZWNvcmF0aW9uT3B0aW9ucyA9IE9wdGlvblNldDxEZWNvcmF0aW9u
T3B0aW9uPjsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgRGVjb3JhdGlvbk9wdGlvbnMgb2JqZWN0
Qm91bmRpbmdCb3hEZWNvcmF0aW9uID0geyBEZWNvcmF0aW9uT3B0aW9uOjpJbmNsdWRlRmlsbFNo
YXBlIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBEZWNvcmF0aW9uT3B0aW9ucyBzdHJva2VCb3Vu
ZGluZ0JveERlY29yYXRpb24gPSB7IERlY29yYXRpb25PcHRpb246OkluY2x1ZGVGaWxsU2hhcGUs
IERlY29yYXRpb25PcHRpb246OkluY2x1ZGVTdHJva2VTaGFwZSB9OworICAgIHN0YXRpYyBjb25z
dGV4cHIgRGVjb3JhdGlvbk9wdGlvbnMgZmlsdGVyQm91bmRpbmdCb3hEZWNvcmF0aW9uID0geyBE
ZWNvcmF0aW9uT3B0aW9uOjpPdmVycmlkZUJveFdpdGhGaWx0ZXJCb3gsIERlY29yYXRpb25PcHRp
b246Ok92ZXJyaWRlQm94V2l0aEZpbHRlckJveEZvckNoaWxkcmVuIH07CisgICAgc3RhdGljIGNv
bnN0ZXhwciBEZWNvcmF0aW9uT3B0aW9ucyByZXBhaW50Qm91bmRpbmdCb3hEZWNvcmF0aW9uID0g
eyBEZWNvcmF0aW9uT3B0aW9uOjpJbmNsdWRlRmlsbFNoYXBlLCBEZWNvcmF0aW9uT3B0aW9uOjpJ
bmNsdWRlU3Ryb2tlU2hhcGUsIERlY29yYXRpb25PcHRpb246OkluY2x1ZGVNYXJrZXJzLCBEZWNv
cmF0aW9uT3B0aW9uOjpJbmNsdWRlQ2xpcHBlcnMsIERlY29yYXRpb25PcHRpb246OkluY2x1ZGVN
YXNrZXJzLCBEZWNvcmF0aW9uT3B0aW9uOjpPdmVycmlkZUJveFdpdGhGaWx0ZXJCb3ggfTsKKwor
ICAgIEZsb2F0UmVjdCBjb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3goY29uc3QgRGVjb3JhdGlv
bk9wdGlvbnMmLCBib29sKiBib3VuZGluZ0JveFZhbGlkID0gbnVsbHB0cikgY29uc3Q7CisKKyAg
ICBzdGF0aWMgRmxvYXRSZWN0IGNvbXB1dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChjb25zdCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlciwgY29uc3QgRGVjb3JhdGlvbk9wdGlvbnMmIG9w
dGlvbnMpCisgICAgeworICAgICAgICBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uIGJvdW5kaW5n
Qm94Q29tcHV0YXRpb24ocmVuZGVyZXIpOworICAgICAgICByZXR1cm4gYm91bmRpbmdCb3hDb21w
dXRhdGlvbi5jb21wdXRlRGVjb3JhdGVkQm91bmRpbmdCb3gob3B0aW9ucyk7CisgICAgfQorCisg
ICAgc3RhdGljIEZsb2F0UmVjdCBjb21wdXRlUmVwYWludEJvdW5kaW5nQm94KGNvbnN0IFJlbmRl
ckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbXB1
dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChyZW5kZXJlciwgcmVwYWludEJvdW5kaW5nQm94RGVjb3Jh
dGlvbik7CisgICAgfQorCisgICAgc3RhdGljIExheW91dFJlY3QgY29tcHV0ZVZpc3VhbE92ZXJm
bG93UmVjdChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKKyAgICB7Cisg
ICAgICAgIGF1dG8gcmVwYWludEJvdW5kaW5nQm94ID0gY29tcHV0ZURlY29yYXRlZEJvdW5kaW5n
Qm94KHJlbmRlcmVyLCByZXBhaW50Qm91bmRpbmdCb3hEZWNvcmF0aW9uIHwgRGVjb3JhdGlvbk9w
dGlvbjo6SW5jbHVkZU91dGxpbmUpOworICAgICAgICBpZiAocmVwYWludEJvdW5kaW5nQm94Lmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CisKKyAgICAgICAgYXV0
byB2aXN1YWxPdmVyZmxvd1JlY3QgPSBlbmNsb3NpbmdMYXlvdXRSZWN0KHJlcGFpbnRCb3VuZGlu
Z0JveCk7CisgICAgICAgIHZpc3VhbE92ZXJmbG93UmVjdC5tb3ZlQnkoLWZsb29yZWRMYXlvdXRQ
b2ludChyZW5kZXJlci5vYmplY3RCb3VuZGluZ0JveCgpLm1pblhNaW5ZQ29ybmVyKCkpKTsKKyAg
ICAgICAgcmV0dXJuIHZpc3VhbE92ZXJmbG93UmVjdDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
RmxvYXRSZWN0IGhhbmRsZVNoYXBlT3JUZXh0T3JJbmxpbmUoY29uc3QgRGVjb3JhdGlvbk9wdGlv
bnMmLCBib29sKiBib3VuZGluZ0JveFZhbGlkID0gbnVsbHB0cikgY29uc3Q7CisgICAgRmxvYXRS
ZWN0IGhhbmRsZVJvb3RPckNvbnRhaW5lcihjb25zdCBEZWNvcmF0aW9uT3B0aW9ucyYsIGJvb2wq
IGJvdW5kaW5nQm94VmFsaWQgPSBudWxscHRyKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgaGFuZGxl
Rm9yZWlnbk9iamVjdE9ySW1hZ2UoY29uc3QgRGVjb3JhdGlvbk9wdGlvbnMmLCBib29sKiBib3Vu
ZGluZ0JveFZhbGlkID0gbnVsbHB0cikgY29uc3Q7CisKKyAgICB2b2lkIGFkanVzdEJveEZvckNs
aXBwaW5nQW5kRWZmZWN0cyhjb25zdCBEZWNvcmF0aW9uT3B0aW9ucyYsIEZsb2F0UmVjdCYgYm94
LCBjb25zdCBEZWNvcmF0aW9uT3B0aW9ucyYgb3B0aW9uc1RvQ2hlY2tGb3JGaWx0ZXJzID0gZmls
dGVyQm91bmRpbmdCb3hEZWNvcmF0aW9uKSBjb25zdDsKKworICAgIGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QmIG1fcmVuZGVyZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgo=
</data>
<flag name="review"
          id="474676"
          type_id="1"
          status="+"
          setter="rbuis"
    />
          </attachment>
      

    </bug>

</bugzilla>