<?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>212871</bug_id>
          
          <creation_ts>2020-06-06 11:24:02 -0700</creation_ts>
          <short_desc>Extended Color: Unify rounding / clamping conversions between 0-1 float components and 0-255 byte components</short_desc>
          <delta_ts>2020-06-08 13:12:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>cdumez</cc>
    
    <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>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1660001</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-06 11:24:02 -0700</bug_when>
    <thetext>Extended Color: Unify rounding / clamping conversions between 0-1 float components and 0-255 byte components</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660002</commentid>
    <comment_count>1</comment_count>
      <attachid>401269</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-06 11:28:28 -0700</bug_when>
    <thetext>Created attachment 401269
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660007</commentid>
    <comment_count>2</comment_count>
      <attachid>401271</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-06 11:48:33 -0700</bug_when>
    <thetext>Created attachment 401271
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660008</commentid>
    <comment_count>3</comment_count>
      <attachid>401272</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-06 11:55:56 -0700</bug_when>
    <thetext>Created attachment 401272
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660010</commentid>
    <comment_count>4</comment_count>
      <attachid>401274</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-06 12:03:12 -0700</bug_when>
    <thetext>Created attachment 401274
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660011</commentid>
    <comment_count>5</comment_count>
      <attachid>401275</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-06 13:20:16 -0700</bug_when>
    <thetext>Created attachment 401275
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660012</commentid>
    <comment_count>6</comment_count>
      <attachid>401276</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-06 13:30:21 -0700</bug_when>
    <thetext>Created attachment 401276
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660013</commentid>
    <comment_count>7</comment_count>
      <attachid>401277</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-06 13:40:25 -0700</bug_when>
    <thetext>Created attachment 401277
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660015</commentid>
    <comment_count>8</comment_count>
      <attachid>401279</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-06 14:23:10 -0700</bug_when>
    <thetext>Created attachment 401279
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660016</commentid>
    <comment_count>9</comment_count>
      <attachid>401280</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-06 14:51:22 -0700</bug_when>
    <thetext>Created attachment 401280
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660018</commentid>
    <comment_count>10</comment_count>
      <attachid>401281</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-06 16:09:18 -0700</bug_when>
    <thetext>Created attachment 401281
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660284</commentid>
    <comment_count>11</comment_count>
      <attachid>401281</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-06-08 11:44:59 -0700</bug_when>
    <thetext>Comment on attachment 401281
Patch

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

&gt; Source/WebCore/platform/graphics/ColorUtilities.h:54
&gt; +inline uint8_t convertPrescaledToComponentByte(float f)

Not really a fan of &quot;prescaled&quot;. Does it mean &quot;in the range 0-1&quot;? Can&apos;t think of a better word though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660300</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-08 12:25:33 -0700</bug_when>
    <thetext>Probably obvious to both of you but: We do need terminology for 0-1 and 0-255 for floating point components. Sadly it seems we need code that deals with both. And when overloading a function so it can take either integers or floating point, it seems really bad to have a floating point overload that takes 0-1 and an integer ones that takes 0-255, so we’ll want to avoid that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660309</commentid>
    <comment_count>13</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-08 12:37:25 -0700</bug_when>
    <thetext>Committed r262733: &lt;https://trac.webkit.org/changeset/262733&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 401281.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660311</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-08 12:38:35 -0700</bug_when>
    <thetext>&lt;rdar://problem/64130839&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660325</commentid>
    <comment_count>15</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-06-08 13:00:45 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #12)
&gt; Probably obvious to both of you but: We do need terminology for 0-1 and
&gt; 0-255 for floating point components. Sadly it seems we need code that deals
&gt; with both. And when overloading a function so it can take either integers or
&gt; floating point, it seems really bad to have a floating point overload that
&gt; takes 0-1 and an integer ones that takes 0-255, so we’ll want to avoid that.

Yes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660338</commentid>
    <comment_count>16</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-08 13:08:20 -0700</bug_when>
    <thetext>We need the one taking 0-255 float values in exactly one place right now, in the CSS parser. Everywhere else is 0-1 float or 0-255 int.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660341</commentid>
    <comment_count>17</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-08 13:12:08 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #15)
&gt; (In reply to Darin Adler from comment #12)
&gt; &gt; Probably obvious to both of you but: We do need terminology for 0-1 and
&gt; &gt; 0-255 for floating point components. Sadly it seems we need code that deals
&gt; &gt; with both. And when overloading a function so it can take either integers or
&gt; &gt; floating point, it seems really bad to have a floating point overload that
&gt; &gt; takes 0-1 and an integer ones that takes 0-255, so we’ll want to avoid that.
&gt; 
&gt; Yes!

The naming I was thinking about was:

makeSimpleColorFromSRGBABytes
makeSimpleColorFromSRGBAFloats

(in the patch for https://bugs.webkit.org/show_bug.cgi?id=180620, Darin used makeSimpleColorFromRGBABytes for 0-255 ints and makeSimpleColorFromSRGBA for 0-1 floats).

Not wed to this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401269</attachid>
            <date>2020-06-06 11:28:28 -0700</date>
            <delta_ts>2020-06-06 11:48:31 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-212871-20200606112827.patch</filename>
            <type>text/plain</type>
            <size>21122</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDIwLTA2LTA2ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvcjogVW5pZnkg
cm91bmRpbmcgLyBjbGFtcGluZyBjb252ZXJzaW9ucyBiZXR3ZWVuIDAtMSBmbG9hdCBjb21wb25l
bnRzIGFuZCAwLTI1NSBieXRlIGNvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjg3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdJUC4KKworICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmlsbFN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
U3R5bGU6OmNyZWF0ZUZyb21TdHJpbmdXaXRoT3ZlcnJpZGVBbHBoYSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkYXJrIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRp
bmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFs
cGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFscGhh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6YXJlRXNzZW50aWFsbHlFcXVhbCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnRUb0NvbXBvbmVudEJ5dGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRv
Q29tcG9uZW50RmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6cm91bmRBbmRDbGFtcENvbG9yQ2hh
bm5lbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzY2FsZVJvdW5kQW5kQ2xhbXBDb2xv
ckNoYW5uZWwpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNv
bG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEpOgorICAgICAgICAoV2Vi
Q29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVDb2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmFscGhh
Q29tcG9uZW50QXNGbG9hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6
YXNTUkdCRmxvYXRDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1w
bGVDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xvcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NvbG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9y
RnJvbU5TQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9Db2xvcklPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbG9yRnJvbVVJQ29sb3IpOgorICAgICAgICAqIHN2Zy9TVkdTdG9wRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5j
bHVkaW5nT3BhY2l0eSBjb25zdCk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0aW9uQ29sb3JGdW5jdGlvbjo6cm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbCk6CisKIDIwMjAt
MDYtMDYgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXSBB
ZGQgc3VwcG9ydCBmb3Igd2lkdGg6IG1pbi9tYXgtY29udGVudApJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZS5jcHAJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzUs
NyArMzc1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTdAogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoc3R5bGUuaXNDdXJyZW50Q29sb3IoKSkKLSAgICAgICAg
c3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50Q29sb3IoY2FudmFzQmFzZSgpKS5jb2xvcldpdGhB
bHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhzdHlsZS5vdmVycmlkZUFscGhhKCkpKTsKKyAg
ICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50Q29sb3IoY2FudmFzQmFzZSgpKS5jb2xv
cldpdGhBbHBoYShzdHlsZS5vdmVycmlkZUFscGhhKCkpKTsKICAgICBlbHNlCiAgICAgICAgIGNo
ZWNrT3JpZ2luKHN0eWxlLmNhbnZhc1BhdHRlcm4oKS5nZXQoKSk7CiAKQEAgLTM5OCw3ICszOTgs
NyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEZpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChzdHlsZS5pc0N1cnJlbnRDb2xvcigpKQotICAgICAgICBzdHlsZSA9
IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpLmNvbG9yV2l0aEFscGhhVXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nKHN0eWxlLm92ZXJyaWRlQWxwaGEoKSkpOworICAgICAgICBz
dHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpLmNvbG9yV2l0aEFs
cGhhKHN0eWxlLm92ZXJyaWRlQWxwaGEoKSkpOwogICAgIGVsc2UKICAgICAgICAgY2hlY2tPcmln
aW4oc3R5bGUuY2FudmFzUGF0dGVybigpLmdldCgpKTsKIApAQCAtMTMwMiw3ICsxMzAyLDcgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaAogICAgICAgICBpZiAoIWNv
bG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgc2V0U2hhZG93
KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgY29sb3IuY29sb3JXaXRoQWxwaGFVc2lu
Z0FsdGVybmF0aXZlUm91bmRpbmcoYWxwaGEpKTsKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdp
ZHRoLCBoZWlnaHQpLCBibHVyLCBjb2xvci5jb2xvcldpdGhBbHBoYShhbHBoYSkpOwogfQogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwg
ZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9hdCBncmF5TGV2ZWwsIGZsb2F0IGFscGhhKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkocmV2aXNp
b24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNyArMTQzLDcgQEAgQ2FudmFzU3R5bGUgQ2FudmFzU3R5
bGU6OmNyZWF0ZUZyb21TdHJpbgogICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIGNvbG9yLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5h
dGl2ZVJvdW5kaW5nKGFscGhhKTsKKyAgICByZXR1cm4gY29sb3IuY29sb3JXaXRoQWxwaGEoYWxw
aGEpOwogfQogCiBib29sIENhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDb2xvcihjb25zdCBDYW52
YXNTdHlsZSYgb3RoZXIpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSwxMSArMTIxLDgg
QEAgQ29sb3IgQ29sb3I6OmxpZ2h0KCkgY29uc3QKICAgICAvLyBIYXJkY29kZSB0aGlzIGNvbW1v
biBjYXNlIGZvciBzcGVlZC4KICAgICBpZiAoIWlzRXh0ZW5kZWQoKSAmJiBhc1NpbXBsZSgpID09
IGJsYWNrKQogICAgICAgICByZXR1cm4gbGlnaHRlbmVkQmxhY2s7Ci0gICAgCi0gICAgY29uc3Qg
ZmxvYXQgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CiAKICAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKLQogICAgIGZsb2F0IHYg
PSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAKICAgICBpZiAodiA9PSAwLjBmKQpAQCAtMTMzLDEy
ICsxMzAsNyBAQCBDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAogCiAgICAgZmxvYXQgbXVsdGlw
bGllciA9IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikgLyB2OwogCi0gICAgcmV0dXJuIG1ha2VT
aW1wbGVDb2xvcigKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogciAqIHNj
YWxlRmFjdG9yKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNj
YWxlRmFjdG9yKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNj
YWxlRmFjdG9yKSwKLSAgICAgICAgYWxwaGEoKQotICAgICk7CisgICAgcmV0dXJuIG1ha2VTaW1w
bGVDb2xvckZyb21GbG9hdHMobXVsdGlwbGllciAqIHIsIG11bHRpcGxpZXIgKiBnLCBtdWx0aXBs
aWVyICogYiwgYSk7CiB9CiAKIENvbG9yIENvbG9yOjpkYXJrKCkgY29uc3QKQEAgLTE0NywxOSAr
MTM5LDEyIEBAIENvbG9yIENvbG9yOjpkYXJrKCkgY29uc3QKICAgICBpZiAoIWlzRXh0ZW5kZWQo
KSAmJiBhc1NpbXBsZSgpID09IHdoaXRlKQogICAgICAgICByZXR1cm4gZGFya2VuZWRXaGl0ZTsK
ICAgICAKLSAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IG5leHRhZnRlcmYoMjU2LjBmLCAw
LjBmKTsKLQogICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
OwogCiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBtdWx0
aXBsaWVyID0gc3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2KTsKIAotICAgIHJldHVybiBt
YWtlU2ltcGxlQ29sb3IoCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIHIg
KiBzY2FsZUZhY3RvciksCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGcg
KiBzY2FsZUZhY3RvciksCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGIg
KiBzY2FsZUZhY3RvciksCi0gICAgICAgIGFscGhhKCkKLSAgICApOworICAgIHJldHVybiBtYWtl
U2ltcGxlQ29sb3JGcm9tRmxvYXRzKG11bHRpcGxpZXIgKiByLCBtdWx0aXBsaWVyICogZywgbXVs
dGlwbGllciAqIGIsIGEpOwogfQogCiBib29sIENvbG9yOjppc0RhcmsoKSBjb25zdApAQCAtMjM1
LDQxICsyMjAsMTIgQEAgQ29sb3IgQ29sb3I6OmJsZW5kV2l0aFdoaXRlKCkgY29uc3QKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1Db2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVk
QnkoZmxvYXQgYW1vdW50KSBjb25zdAotewotICAgIGZsb2F0IG5ld0FscGhhID0gYW1vdW50ICog
YWxwaGFBc0Zsb2F0KCk7Ci0gICAgcmV0dXJuIGNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsKLX0K
LQotQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2
ZVJvdW5kaW5nKGZsb2F0IGFtb3VudCkgY29uc3QKLXsKLSAgICBmbG9hdCBuZXdBbHBoYSA9IGFt
b3VudCAqIGFscGhhQXNGbG9hdCgpOwotICAgIHJldHVybiBjb2xvcldpdGhBbHBoYVVzaW5nQWx0
ZXJuYXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7Ci19Ci0KIENvbG9yIENvbG9yOjpjb2xvcldpdGhB
bHBoYShmbG9hdCBhbHBoYSkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAg
ICByZXR1cm4gYXNFeHRlbmRlZCgpLmNvbG9yV2l0aEFscGhhKGFscGhhKTsKIAotICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIHdoZXJlIHRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIGNvbG9yV2l0aEFs
cGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nLgotICAgIHVpbnQ4X3QgbmV3QWxwaGEgPSBhbHBo
YSAqIDB4RkY7Ci0KLSAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhh
KG5ld0FscGhhKTsKLSAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAgICByZXN1bHQudGFnQXNT
ZW1hbnRpYygpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUNvbG9yIENvbG9yOjpjb2xvcldp
dGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhmbG9hdCBhbHBoYSkgY29uc3QKLXsKLSAg
ICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmNvbG9yV2l0
aEFscGhhKGFscGhhKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdoZXJlIHRoaXMgZnVuY3Rp
b24gZGlmZmVycyBmcm9tIGNvbG9yV2l0aEFscGhhVXNpbmcuCi0gICAgdWludDhfdCBuZXdBbHBo
YSA9IHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChhbHBoYSk7Ci0KLSAgICBDb2xvciBy
ZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsKKyAgICBDb2xvciBy
ZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUo
YWxwaGEpKTsKICAgICBpZiAoaXNTZW1hbnRpYygpKQogICAgICAgICByZXN1bHQudGFnQXNTZW1h
bnRpYygpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0yNzksNyArMjM1LDcgQEAgQ29sb3IgQ29s
b3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYQogewogICAgIGlmIChpc0V4dGVuZGVkKCkp
CiAgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShhbHBo
YSk7Ci0gICAgcmV0dXJuIGFzU2ltcGxlKCkuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShzY2FsZVJv
dW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoYWxwaGEpKTsKKyAgICByZXR1cm4gYXNTaW1wbGUoKS5p
bnZlcnRlZENvbG9yV2l0aEFscGhhKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEpKTsKIH0K
IAogQ29sb3IgQ29sb3I6OnNlbWFudGljQ29sb3IoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIs
NyArMTIyLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBp
c0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA9PSAxLjAgOiBhc1NpbXBsZSgpLmlz
T3BhcXVlKCk7IH0KICAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5k
ZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID4gMC4wIDogYXNTaW1wbGUoKS5pc1Zpc2libGUo
KTsgfQogCi0gICAgaW50IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNF
eHRlbmRlZCgpLmFscGhhKCkgKiAyNTUgOiBhc1NpbXBsZSgpLmFscGhhQ29tcG9uZW50KCk7IH0K
KyAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBjb252ZXJ0VG9D
b21wb25lbnRCeXRlKGFzRXh0ZW5kZWQoKS5hbHBoYSgpKSA6IGFzU2ltcGxlKCkuYWxwaGFDb21w
b25lbnQoKTsgfQogICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0
ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpIDogYXNTaW1wbGUoKS5hbHBoYUNvbXBvbmVu
dEFzRmxvYXQoKTsgfQogCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwpAQCAtMTQ2LDE3ICsx
NDYsMTYgQEAgcHVibGljOgogICAgIENvbG9yIGJsZW5kV2l0aFdoaXRlKCkgY29uc3Q7CiAKICAg
ICBDb2xvciBpbnZlcnRlZENvbG9yV2l0aEFscGhhKGZsb2F0IGFscGhhKSBjb25zdDsKKyAgICBD
b2xvciBpbnZlcnRlZENvbG9yV2l0aEFscGhhKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3Q7
CiAKICAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9hdCkgY29uc3Q7Ci0g
ICAgQ29sb3IgY29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OworICAgIENvbG9yIGNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5KE9wdGlvbmFsPGZsb2F0PikgY29uc3Q7CiAKLSAgICAvLyBGSVhN
RTogUmVtb3ZlIHRoZSBuZWVkIGZvciBBbHRlcm5hdGl2ZVJvdW5kaW5nIHZhcmlhbnRzIGJ5IHNl
dHRsaW5nIG9uIGEgcm91bmRpbmcgYmVoYXZpb3IuCi0gICAgQ29sb3IgY29sb3JXaXRoQWxwaGFN
dWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+KSBjb25z
dDsKLSAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVS
b3VuZGluZyhmbG9hdCkgY29uc3Q7Ci0gICAgQ29sb3IgY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVy
bmF0aXZlUm91bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9S
VCBDb2xvciBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhmbG9hdCkgY29u
c3Q7CisgICAgQ29sb3IgY29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OworICAgIENvbG9yIGNv
bG9yV2l0aEFscGhhKE9wdGlvbmFsPGZsb2F0PikgY29uc3Q7CiAKICAgICBDb2xvciBvcGFxdWVD
b2xvcigpIGNvbnN0IHsgcmV0dXJuIGNvbG9yV2l0aEFscGhhKDEuMGYpOyB9CisKICAgICBDb2xv
ciBzZW1hbnRpY0NvbG9yKCkgY29uc3Q7CiAKICAgICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmln
aW5hdGVkIGZyb20gYSBDU1Mgc2VtYW50aWMgY29sb3IgbmFtZS4KQEAgLTI4OSwxNCArMjg4LDI0
IEBAIGlubGluZSB1bnNpZ25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiAgICAgcmV0dXJuIFdURjo6
aW50SGFzaChtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzKTsKIH0KIAotaW5saW5lIENv
bG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3Vu
ZGluZyhPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0CitpbmxpbmUgQ29sb3IgQ29sb3I6Omlu
dmVydGVkQ29sb3JXaXRoQWxwaGEoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdAoreworICAg
IHJldHVybiBhbHBoYSA/IGludmVydGVkQ29sb3JXaXRoQWxwaGEoYWxwaGEudmFsdWUoKSkgOiAq
dGhpczsKK30KKworaW5saW5lIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRC
eShmbG9hdCBhbW91bnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbG9yV2l0aEFscGhhKGFtb3Vu
dCAqIGFscGhhQXNGbG9hdCgpKTsKK30KKworaW5saW5lIENvbG9yIENvbG9yOjpjb2xvcldpdGhB
bHBoYU11bHRpcGxpZWRCeShPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGFscGhhID8gY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91
bmRpbmcoYWxwaGEudmFsdWUoKSkgOiAqdGhpczsKKyAgICByZXR1cm4gYWxwaGEgPyBjb2xvcldp
dGhBbHBoYU11bHRpcGxpZWRCeShhbHBoYS52YWx1ZSgpKSA6ICp0aGlzOwogfQogCi1pbmxpbmUg
Q29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKE9wdGlv
bmFsPGZsb2F0PiBhbHBoYSkgY29uc3QKK2lubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxw
aGEoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdAogewotICAgIHJldHVybiBhbHBoYSA/IGNv
bG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGFscGhhLnZhbHVlKCkpIDogKnRo
aXM7CisgICAgcmV0dXJuIGFscGhhID8gY29sb3JXaXRoQWxwaGEoYWxwaGEudmFsdWUoKSkgOiAq
dGhpczsKIH0KIAogaW5saW5lIGNvbnN0IEV4dGVuZGVkQ29sb3ImIENvbG9yOjphc0V4dGVuZGVk
KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRp
bGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsMTQgKzMxLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIGFyZUVzc2VudGlh
bGx5RXF1YWwoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgYSwgY29uc3QgQ29sb3JDb21w
b25lbnRzPGZsb2F0PiYgYikKLXsKLSAgICByZXR1cm4gV1RGOjphcmVFc3NlbnRpYWxseUVxdWFs
KGFbMF0sIGJbMF0pCi0gICAgICAgICYmIFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhWzFdLCBi
WzFdKQotICAgICAgICAmJiBXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYVsyXSwgYlsyXSkKLSAg
ICAgICAgJiYgV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFbM10sIGJbM10pOwotfQotCiAvLyBU
aGVzZSBhcmUgdGhlIHN0YW5kYXJkIHNSR0IgPC0+IGxpbmVhclJHQiBjb252ZXJzaW9uIGZ1bmN0
aW9ucyAoaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQikuCiBmbG9hdCBsaW5lYXJU
b1JHQkNvbG9yQ29tcG9uZW50KGZsb2F0IGMpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MjY1OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDIxICs1MSwxNCBAQCBmbG9hdCBjb250cmFzdFJhdGlvKGNvbnN0
IENvbG9yQ29tcG9uZW50CiAKIENvbG9yQ29tcG9uZW50czxmbG9hdD4gcHJlbXVsdGlwbGllZChj
b25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9udGVudHMpOwogCi1ib29sIGFy
ZUVzc2VudGlhbGx5RXF1YWwoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYsIGNvbnN0IENv
bG9yQ29tcG9uZW50czxmbG9hdD4mKTsKLQotaW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENv
bG9yQ2hhbm5lbChpbnQgdmFsdWUpCitpbmxpbmUgdWludDhfdCBjb252ZXJ0VG9Db21wb25lbnRC
eXRlKGZsb2F0IGYpCiB7Ci0gICAgcmV0dXJuIHN0ZDo6Y2xhbXAodmFsdWUsIDAsIDI1NSk7Cisg
ICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RhdGljX2Nhc3Q8aW50PihzdGQ6Omxyb3VuZGYoZiAqIDI1
NS4wZikpLCAwLCAyNTUpOwogfQogCi1pbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JD
aGFubmVsKGZsb2F0IHZhbHVlKQorY29uc3RleHByIGZsb2F0IGNvbnZlcnRUb0NvbXBvbmVudEZs
b2F0KHVpbnQ4X3QgYnl0ZSkKIHsKLSAgICByZXR1cm4gc3RkOjpjbGFtcChzdGQ6OnJvdW5kKHZh
bHVlKSwgMC5mLCAyNTUuZik7Ci19Ci0KLWlubGluZSB1aW50OF90IHNjYWxlUm91bmRBbmRDbGFt
cENvbG9yQ2hhbm5lbChmbG9hdCBmKQotewotICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0YXRpY19j
YXN0PGludD4obHJvdW5kZigyNTUuMGYgKiBmKSksIDAsIDI1NSk7CisgICAgcmV0dXJuIGJ5dGUg
LyAyNTUuMGY7CiB9CiAKIGNvbnN0ZXhwciB1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50
MTZfdCB2YWx1ZSkKQEAgLTgyLDUgKzc1LDQgQEAgY29uc3RleHByIHVpbnQxNl90IGZhc3REaXZp
ZGVCeTI1NSh1aW50MQogICAgIHJldHVybiBhcHByb3hpbWF0aW9uICsgKHJlbWFpbmRlciA+PiA4
KTsKIH0KIAotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCShyZXZpc2lvbiAyNjI2NTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDMyICs2OSwyMiBAQCBTaW1wbGVDb2xvciBtYWtlVW5wcmVtdWx0
aXBsaWVkU2ltcGxlQ29sCiAKIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMo
ZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKIHsKLSAgICByZXR1cm4gbWFrZVNp
bXBsZUNvbG9yKAotICAgICAgICBzY2FsZVJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwociksCi0g
ICAgICAgIHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChnKSwKLSAgICAgICAgc2NhbGVS
b3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGIpLAotICAgICAgICBzY2FsZVJvdW5kQW5kQ2xhbXBD
b2xvckNoYW5uZWwoYSkKLSAgICApOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoY29udmVy
dFRvQ29tcG9uZW50Qnl0ZShyKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShnKSwgY29udmVydFRv
Q29tcG9uZW50Qnl0ZShiKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShhKSk7CiB9CiAKIFNpbXBs
ZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21IU0xBKGZsb2F0IGh1ZSwgZmxvYXQgc2F0dXJhdGlv
biwgZmxvYXQgbGlnaHRuZXNzLCBmbG9hdCBhbHBoYSkKIHsKICAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KTsKLSAg
ICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKAotICAgICAgICByb3VuZChyICogMjU1LjBmKSwKLSAg
ICAgICAgcm91bmQoZyAqIDI1NS4wZiksCi0gICAgICAgIHJvdW5kKGIgKiAyNTUuMGYpLAotICAg
ICAgICByb3VuZChhICogMjU1LjBmKQotICAgICk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xv
ckZyb21GbG9hdHMociwgZywgYiwgYSk7CiB9CiAKIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xv
ckZyb21DTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQog
ewotICAgIGRvdWJsZSBjb2xvcnMgPSAxIC0gazsKLSAgICBpbnQgciA9IHN0YXRpY19jYXN0PGlu
dD4obmV4dGFmdGVyKDI1NiwgMCkgKiAoY29sb3JzICogKDEgLSBjKSkpOwotICAgIGludCBnID0g
c3RhdGljX2Nhc3Q8aW50PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIChjb2xvcnMgKiAoMSAtIG0pKSk7
Ci0gICAgaW50IGIgPSBzdGF0aWNfY2FzdDxpbnQ+KG5leHRhZnRlcigyNTYsIDApICogKGNvbG9y
cyAqICgxIC0geSkpKTsKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIHN0YXRp
Y19jYXN0PGZsb2F0PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIGEpKTsKKyAgICBmbG9hdCBjb2xvcnMg
PSAxIC0gazsKKyAgICBmbG9hdCByID0gY29sb3JzICogKDEuMGYgLSBjKTsKKyAgICBmbG9hdCBn
ID0gY29sb3JzICogKDEuMGYgLSBtKTsKKyAgICBmbG9hdCBiID0gY29sb3JzICogKDEuMGYgLSB5
KTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKTsKIH0K
IAogU3RyaW5nIFNpbXBsZUNvbG9yOjpzZXJpYWxpemF0aW9uRm9ySFRNTCgpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgJKHJl
dmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBs
ZUNvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIGNv
bnN0ZXhwciB1aW50OF90IGJsdWVDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9
CiAgICAgY29uc3RleHByIHVpbnQ4X3QgYWxwaGFDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlID4+IDI0OyB9CiAKLSAgICBjb25zdGV4cHIgZmxvYXQgYWxwaGFDb21wb25lbnRBc0Zs
b2F0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhQ29tcG9uZW50KCkp
IC8gMHhGRjsgfQorICAgIGNvbnN0ZXhwciBmbG9hdCBhbHBoYUNvbXBvbmVudEFzRmxvYXQoKSBj
b25zdCB7IHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChhbHBoYUNvbXBvbmVudCgpKTsg
fQogCiAgICAgY29uc3RleHByIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBhbHBoYUNv
bXBvbmVudCgpID09IDB4RkY7IH0KICAgICBjb25zdGV4cHIgYm9vbCBpc1Zpc2libGUoKSBjb25z
dCB7IHJldHVybiBhbHBoYUNvbXBvbmVudCgpOyB9CkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoK
IAogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGFzU1JHQkZsb2F0Q29tcG9u
ZW50cygpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4geyByZWRDb21wb25lbnQoKSAvIDI1
NS4wZiwgZ3JlZW5Db21wb25lbnQoKSAvIDI1NS4wZiwgYmx1ZUNvbXBvbmVudCgpIC8gMjU1LjBm
LCAgYWxwaGFDb21wb25lbnQoKSAvIDI1NS4wZiB9OworICAgICAgICByZXR1cm4geyBjb252ZXJ0
VG9Db21wb25lbnRGbG9hdChyZWRDb21wb25lbnQoKSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0
KGdyZWVuQ29tcG9uZW50KCkpLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChibHVlQ29tcG9uZW50
KCkpLCAgY29udmVydFRvQ29tcG9uZW50RmxvYXQoYWxwaGFDb21wb25lbnQoKSkgfTsKICAgICB9
CiAKICAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgpAQCAtMTI4LDEyICsxMjgsNyBAQCBjb25z
dGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGluCiBpbmxpbmUgU2ltcGxlQ29sb3Ig
bWFrZVNpbXBsZUNvbG9yKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb25l
bnRzKQogewogICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc1JHQkNvbXBvbmVudHM7Ci0gICAgcmV0
dXJuIG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAgc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFu
bmVsKHIpLAotICAgICAgICBzY2FsZVJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZyksCi0gICAg
ICAgIHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChiKSwKLSAgICAgICAgc2NhbGVSb3Vu
ZEFuZENsYW1wQ29sb3JDaGFubmVsKGEpCi0gICAgKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNv
bG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5j
cHAJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0NvbG9yQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw4ICs3OCw3IEBAIHN0YXRpYyBT
aW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tQ0cKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBzY2FsZUZhY3RvciA9IG5l
eHRhZnRlcigyNTYuMCwgMC4wKTsKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHIgKiBzY2Fs
ZUZhY3RvciwgZyAqIHNjYWxlRmFjdG9yLCBiICogc2NhbGVGYWN0b3IsIGEgKiBzY2FsZUZhY3Rv
cik7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMociwgZywgYiwgYSk7CiB9
CiAKIENvbG9yOjpDb2xvcihDR0NvbG9yUmVmIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCShyZXZpc2lv
biAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Rmxvb2QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgRkVGbG9vZDo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBhdXRvIGNvbG9yID0gZmxvb2RDb2xvcigpLmNvbG9yV2l0aEFscGhhTXVs
dGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb29kT3BhY2l0eSgpKTsKKyAgICBh
dXRvIGNvbG9yID0gZmxvb2RDb2xvcigpLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZsb29k
T3BhY2l0eSgpKTsKICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVj
dChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgY29sb3IpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9y
TWFjLm1tCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvQ29sb3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTg4LDggKzg4LDcgQEAgc3Rh
dGljIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21OUwogICAgIFtyZ2JDb2xvciBnZXRS
ZWQ6JnJlZENvbXBvbmVudCBncmVlbjomZ3JlZW5Db21wb25lbnQgYmx1ZTomYmx1ZUNvbXBvbmVu
dCBhbHBoYTomYWxwaGFdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBz
dGF0aWMgY29uc3QgZG91YmxlIHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyKDI1Ni4wLCAwLjApOwot
ICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3Ioc2NhbGVGYWN0b3IgKiByZWRDb21wb25lbnQsIHNj
YWxlRmFjdG9yICogZ3JlZW5Db21wb25lbnQsIHNjYWxlRmFjdG9yICogYmx1ZUNvbXBvbmVudCwg
c2NhbGVGYWN0b3IgKiBhbHBoYSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9h
dHMocmVkQ29tcG9uZW50LCBncmVlbkNvbXBvbmVudCwgYmx1ZUNvbXBvbmVudCwgYWxwaGEpOwog
fQogCiBDb2xvciBjb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xvcklPUy5tbQkocmV2aXNpb24gMjYyNjU5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw4ICs0Nyw3IEBAIENvbG9yIGNvbG9yRnJvbVVJQ29sb3IoVUlDb2xvciAqY29sb3IpCiAKICAg
ICBbY29sb3IgZ2V0UmVkOiZyZWRDb21wb25lbnQgZ3JlZW46JmdyZWVuQ29tcG9uZW50IGJsdWU6
JmJsdWVDb21wb25lbnQgYWxwaGE6JmFscGhhXTsKIAotICAgIHN0YXRpYyBjb25zdCBkb3VibGUg
c2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXIoMjU2LjAsIDAuMCk7Ci0gICAgcmV0dXJuIG1ha2VTaW1w
bGVDb2xvcihzY2FsZUZhY3RvciAqIHJlZENvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBncmVlbkNv
bXBvbmVudCwgc2NhbGVGYWN0b3IgKiBibHVlQ29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGFscGhh
KTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyZWRDb21wb25lbnQsIGdy
ZWVuQ29tcG9uZW50LCBibHVlQ29tcG9uZW50LCBhbHBoYSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAkocmV2aXNp
b24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBDb2xvciBTVkdTdG9wRWxlbWVudDo6c3RvcENv
bG9ySW5jbHVkaW5nCiAgICAgYXV0byYgc3ZnU3R5bGUgPSBzdHlsZS5zdmdTdHlsZSgpOwogICAg
IGF1dG8gc3RvcENvbG9yID0gc3R5bGUuY29sb3JSZXNvbHZpbmdDdXJyZW50Q29sb3Ioc3ZnU3R5
bGUuc3RvcENvbG9yKCkpOwogCi0gICAgcmV0dXJuIHN0b3BDb2xvci5jb2xvcldpdGhBbHBoYU11
bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhzdmdTdHlsZS5zdG9wT3BhY2l0eSgp
KTsKKyAgICByZXR1cm4gc3RvcENvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KHN2Z1N0
eWxlLnN0b3BPcGFjaXR5KCkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJv
cGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVW
YWx1ZUZ1bmN0aW9uSW1wbC5oCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsMTYgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0
ZToKKyAgICBpbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGludCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6OmNsYW1wKHZhbHVlLCAwLCAyNTUpOworICAg
IH0KKworICAgIGlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZmxvYXQg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjpjbGFtcChzdGQ6OnJvdW5kKHZhbHVl
KSwgMC4wZiwgMjU1LjBmKTsKKyAgICB9CisKICAgICB2b2lkIGFkZEZyb21BbmRUb1ZhbHVlcyhT
VkdFbGVtZW50Kikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1f
ZnJvbS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401271</attachid>
            <date>2020-06-06 11:48:33 -0700</date>
            <delta_ts>2020-06-06 11:55:54 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-212871-20200606114832.patch</filename>
            <type>text/plain</type>
            <size>23564</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDIwLTA2LTA2ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvcjogVW5pZnkg
cm91bmRpbmcgLyBjbGFtcGluZyBjb252ZXJzaW9ucyBiZXR3ZWVuIDAtMSBmbG9hdCBjb21wb25l
bnRzIGFuZCAwLTI1NSBieXRlIGNvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjg3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdJUC4KKworICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmlsbFN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
U3R5bGU6OmNyZWF0ZUZyb21TdHJpbmdXaXRoT3ZlcnJpZGVBbHBoYSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkYXJrIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRp
bmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFs
cGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFscGhh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6YXJlRXNzZW50aWFsbHlFcXVhbCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnRUb0NvbXBvbmVudEJ5dGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRv
Q29tcG9uZW50RmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6cm91bmRBbmRDbGFtcENvbG9yQ2hh
bm5lbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzY2FsZVJvdW5kQW5kQ2xhbXBDb2xv
ckNoYW5uZWwpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNv
bG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEpOgorICAgICAgICAoV2Vi
Q29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVDb2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmFscGhh
Q29tcG9uZW50QXNGbG9hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6
YXNTUkdCRmxvYXRDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1w
bGVDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xvcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NvbG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9y
RnJvbU5TQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9Db2xvcklPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbG9yRnJvbVVJQ29sb3IpOgorICAgICAgICAqIHN2Zy9TVkdTdG9wRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5j
bHVkaW5nT3BhY2l0eSBjb25zdCk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0aW9uQ29sb3JGdW5jdGlvbjo6cm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbCk6CisKIDIwMjAt
MDYtMDYgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXSBB
ZGQgc3VwcG9ydCBmb3Igd2lkdGg6IG1pbi9tYXgtY29udGVudApJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZS5jcHAJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzUs
NyArMzc1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTdAogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoc3R5bGUuaXNDdXJyZW50Q29sb3IoKSkKLSAgICAgICAg
c3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50Q29sb3IoY2FudmFzQmFzZSgpKS5jb2xvcldpdGhB
bHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhzdHlsZS5vdmVycmlkZUFscGhhKCkpKTsKKyAg
ICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50Q29sb3IoY2FudmFzQmFzZSgpKS5jb2xv
cldpdGhBbHBoYShzdHlsZS5vdmVycmlkZUFscGhhKCkpKTsKICAgICBlbHNlCiAgICAgICAgIGNo
ZWNrT3JpZ2luKHN0eWxlLmNhbnZhc1BhdHRlcm4oKS5nZXQoKSk7CiAKQEAgLTM5OCw3ICszOTgs
NyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEZpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChzdHlsZS5pc0N1cnJlbnRDb2xvcigpKQotICAgICAgICBzdHlsZSA9
IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpLmNvbG9yV2l0aEFscGhhVXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nKHN0eWxlLm92ZXJyaWRlQWxwaGEoKSkpOworICAgICAgICBz
dHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpLmNvbG9yV2l0aEFs
cGhhKHN0eWxlLm92ZXJyaWRlQWxwaGEoKSkpOwogICAgIGVsc2UKICAgICAgICAgY2hlY2tPcmln
aW4oc3R5bGUuY2FudmFzUGF0dGVybigpLmdldCgpKTsKIApAQCAtMTMwMiw3ICsxMzAyLDcgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaAogICAgICAgICBpZiAoIWNv
bG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgc2V0U2hhZG93
KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgY29sb3IuY29sb3JXaXRoQWxwaGFVc2lu
Z0FsdGVybmF0aXZlUm91bmRpbmcoYWxwaGEpKTsKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdp
ZHRoLCBoZWlnaHQpLCBibHVyLCBjb2xvci5jb2xvcldpdGhBbHBoYShhbHBoYSkpOwogfQogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwg
ZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9hdCBncmF5TGV2ZWwsIGZsb2F0IGFscGhhKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkocmV2aXNp
b24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNyArMTQzLDcgQEAgQ2FudmFzU3R5bGUgQ2FudmFzU3R5
bGU6OmNyZWF0ZUZyb21TdHJpbgogICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIGNvbG9yLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5h
dGl2ZVJvdW5kaW5nKGFscGhhKTsKKyAgICByZXR1cm4gY29sb3IuY29sb3JXaXRoQWxwaGEoYWxw
aGEpOwogfQogCiBib29sIENhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDb2xvcihjb25zdCBDYW52
YXNTdHlsZSYgb3RoZXIpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gMjYyNjU5KQor
KysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xv
cihjb25zdCBKU09OOjpPYmplCiAgICAgZWxzZSBpZiAoYSA+IDEpCiAgICAgICAgIGEgPSAxOwog
Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyLCBnLCBiLCBzdGF0aWNfY2FzdDxpbnQ+KGEg
KiAyNTUpKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGNvbnZlcnRUb0Nv
bXBvbmVudEJ5dGUoYSkpOwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VDb25maWdDb2xvcihjb25z
dCBTdHJpbmcmIGZpZWxkTmFtZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb25maWdPYmplY3QpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lv
biAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMSwxMSArMTIxLDggQEAgQ29sb3IgQ29sb3I6OmxpZ2h0KCkg
Y29uc3QKICAgICAvLyBIYXJkY29kZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KICAgICBp
ZiAoIWlzRXh0ZW5kZWQoKSAmJiBhc1NpbXBsZSgpID09IGJsYWNrKQogICAgICAgICByZXR1cm4g
bGlnaHRlbmVkQmxhY2s7Ci0gICAgCi0gICAgY29uc3QgZmxvYXQgc2NhbGVGYWN0b3IgPSBuZXh0
YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CiAKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFD
b21wb25lbnRzTG9zc3koKTsKLQogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7
CiAKICAgICBpZiAodiA9PSAwLjBmKQpAQCAtMTMzLDEyICsxMzAsNyBAQCBDb2xvciBDb2xvcjo6
bGlnaHQoKSBjb25zdAogCiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWluKDEuMGYsIHYg
KyAwLjMzZikgLyB2OwogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgYWxw
aGEoKQotICAgICk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMobXVsdGlw
bGllciAqIHIsIG11bHRpcGxpZXIgKiBnLCBtdWx0aXBsaWVyICogYiwgYSk7CiB9CiAKIENvbG9y
IENvbG9yOjpkYXJrKCkgY29uc3QKQEAgLTE0NywxOSArMTM5LDEyIEBAIENvbG9yIENvbG9yOjpk
YXJrKCkgY29uc3QKICAgICBpZiAoIWlzRXh0ZW5kZWQoKSAmJiBhc1NpbXBsZSgpID09IHdoaXRl
KQogICAgICAgICByZXR1cm4gZGFya2VuZWRXaGl0ZTsKICAgICAKLSAgICBjb25zdCBmbG9hdCBz
Y2FsZUZhY3RvciA9IG5leHRhZnRlcmYoMjU2LjBmLCAwLjBmKTsKLQogICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwogCiAgICAgZmxvYXQgdiA9IHN0ZDo6
bWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBtdWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwg
KHYgLSAwLjMzZikgLyB2KTsKIAotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoCi0gICAgICAg
IHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIHIgKiBzY2FsZUZhY3RvciksCi0gICAgICAg
IHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGcgKiBzY2FsZUZhY3RvciksCi0gICAgICAg
IHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGIgKiBzY2FsZUZhY3RvciksCi0gICAgICAg
IGFscGhhKCkKLSAgICApOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKG11
bHRpcGxpZXIgKiByLCBtdWx0aXBsaWVyICogZywgbXVsdGlwbGllciAqIGIsIGEpOwogfQogCiBi
b29sIENvbG9yOjppc0RhcmsoKSBjb25zdApAQCAtMjM1LDQxICsyMjAsMTIgQEAgQ29sb3IgQ29s
b3I6OmJsZW5kV2l0aFdoaXRlKCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1Db2xv
ciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxvYXQgYW1vdW50KSBjb25zdAot
ewotICAgIGZsb2F0IG5ld0FscGhhID0gYW1vdW50ICogYWxwaGFBc0Zsb2F0KCk7Ci0gICAgcmV0
dXJuIGNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsKLX0KLQotQ29sb3IgQ29sb3I6OmNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0IGFtb3VudCkg
Y29uc3QKLXsKLSAgICBmbG9hdCBuZXdBbHBoYSA9IGFtb3VudCAqIGFscGhhQXNGbG9hdCgpOwot
ICAgIHJldHVybiBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhuZXdBbHBo
YSk7Ci19Ci0KIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QK
IHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmNv
bG9yV2l0aEFscGhhKGFscGhhKTsKIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdoZXJlIHRoaXMg
ZnVuY3Rpb24gZGlmZmVycyBmcm9tIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5k
aW5nLgotICAgIHVpbnQ4X3QgbmV3QWxwaGEgPSBhbHBoYSAqIDB4RkY7Ci0KLSAgICBDb2xvciBy
ZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsKLSAgICBpZiAoaXNT
ZW1hbnRpYygpKQotICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLUNvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVS
b3VuZGluZyhmbG9hdCBhbHBoYSkgY29uc3QKLXsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAg
ICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmNvbG9yV2l0aEFscGhhKGFscGhhKTsKLQotICAgIC8v
IEZJWE1FOiBUaGlzIGlzIHdoZXJlIHRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIGNvbG9yV2l0
aEFscGhhVXNpbmcuCi0gICAgdWludDhfdCBuZXdBbHBoYSA9IHNjYWxlUm91bmRBbmRDbGFtcENv
bG9yQ2hhbm5lbChhbHBoYSk7Ci0KLSAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9y
V2l0aEFscGhhKG5ld0FscGhhKTsKKyAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9y
V2l0aEFscGhhKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEpKTsKICAgICBpZiAoaXNTZW1h
bnRpYygpKQogICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygpOwogICAgIHJldHVybiByZXN1
bHQ7CkBAIC0yNzksNyArMjM1LDcgQEAgQ29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxw
aGEoZmxvYQogewogICAgIGlmIChpc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBhc0V4dGVu
ZGVkKCkuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShhbHBoYSk7Ci0gICAgcmV0dXJuIGFzU2ltcGxl
KCkuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShzY2FsZVJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwo
YWxwaGEpKTsKKyAgICByZXR1cm4gYXNTaW1wbGUoKS5pbnZlcnRlZENvbG9yV2l0aEFscGhhKGNv
bnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEpKTsKIH0KIAogQ29sb3IgQ29sb3I6OnNlbWFudGlj
Q29sb3IoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5oCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyArMTIyLDcgQEAgcHVibGljOgogICAg
IGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVk
KCkuYWxwaGEoKSA9PSAxLjAgOiBhc1NpbXBsZSgpLmlzT3BhcXVlKCk7IH0KICAgICBib29sIGlz
VmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBo
YSgpID4gMC4wIDogYXNTaW1wbGUoKS5pc1Zpc2libGUoKTsgfQogCi0gICAgaW50IGFscGhhKCkg
Y29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgKiAyNTUg
OiBhc1NpbXBsZSgpLmFscGhhQ29tcG9uZW50KCk7IH0KKyAgICB1aW50OF90IGFscGhhKCkgY29u
c3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gY29udmVydFRvQ29tcG9uZW50Qnl0ZShhc0V4dGVu
ZGVkKCkuYWxwaGEoKSkgOiBhc1NpbXBsZSgpLmFscGhhQ29tcG9uZW50KCk7IH0KICAgICBmbG9h
dCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVk
KCkuYWxwaGEoKSA6IGFzU2ltcGxlKCkuYWxwaGFDb21wb25lbnRBc0Zsb2F0KCk7IH0KIAogICAg
IHVuc2lnbmVkIGhhc2goKSBjb25zdDsKQEAgLTE0NiwxNyArMTQ2LDE2IEBAIHB1YmxpYzoKICAg
ICBDb2xvciBibGVuZFdpdGhXaGl0ZSgpIGNvbnN0OwogCiAgICAgQ29sb3IgaW52ZXJ0ZWRDb2xv
cldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3Q7CisgICAgQ29sb3IgaW52ZXJ0ZWRDb2xvcldp
dGhBbHBoYShPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0OwogCiAgICAgQ29sb3IgY29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxvYXQpIGNvbnN0OwotICAgIENvbG9yIGNvbG9yV2l0aEFs
cGhhKGZsb2F0KSBjb25zdDsKKyAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShP
cHRpb25hbDxmbG9hdD4pIGNvbnN0OwogCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgbmVlZCBm
b3IgQWx0ZXJuYXRpdmVSb3VuZGluZyB2YXJpYW50cyBieSBzZXR0bGluZyBvbiBhIHJvdW5kaW5n
IGJlaGF2aW9yLgotICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRl
cm5hdGl2ZVJvdW5kaW5nKE9wdGlvbmFsPGZsb2F0PikgY29uc3Q7Ci0gICAgQ29sb3IgY29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQpIGNvbnN0
OwotICAgIENvbG9yIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKE9wdGlv
bmFsPGZsb2F0PikgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IgY29sb3JXaXRoQWxw
aGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQpIGNvbnN0OworICAgIENvbG9yIGNvbG9y
V2l0aEFscGhhKGZsb2F0KSBjb25zdDsKKyAgICBDb2xvciBjb2xvcldpdGhBbHBoYShPcHRpb25h
bDxmbG9hdD4pIGNvbnN0OwogCiAgICAgQ29sb3Igb3BhcXVlQ29sb3IoKSBjb25zdCB7IHJldHVy
biBjb2xvcldpdGhBbHBoYSgxLjBmKTsgfQorCiAgICAgQ29sb3Igc2VtYW50aWNDb2xvcigpIGNv
bnN0OwogCiAgICAgLy8gVHJ1ZSBpZiB0aGUgY29sb3Igb3JpZ2luYXRlZCBmcm9tIGEgQ1NTIHNl
bWFudGljIGNvbG9yIG5hbWUuCkBAIC0yODksMTQgKzI4OCwyNCBAQCBpbmxpbmUgdW5zaWduZWQg
Q29sb3I6Omhhc2goKSBjb25zdAogICAgIHJldHVybiBXVEY6OmludEhhc2gobV9jb2xvckRhdGEu
c2ltcGxlQ29sb3JBbmRGbGFncyk7CiB9CiAKLWlubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRo
QWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+
IGFscGhhKSBjb25zdAoraW5saW5lIENvbG9yIENvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFscGhh
KE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QKK3sKKyAgICByZXR1cm4gYWxwaGEgPyBpbnZl
cnRlZENvbG9yV2l0aEFscGhhKGFscGhhLnZhbHVlKCkpIDogKnRoaXM7Cit9CisKK2lubGluZSBD
b2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxvYXQgYW1vdW50KSBjb25z
dAoreworICAgIHJldHVybiBjb2xvcldpdGhBbHBoYShhbW91bnQgKiBhbHBoYUFzRmxvYXQoKSk7
Cit9CisKK2lubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoT3B0
aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdAogewotICAgIHJldHVybiBhbHBoYSA/IGNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGFscGhhLnZhbHVlKCkp
IDogKnRoaXM7CisgICAgcmV0dXJuIGFscGhhID8gY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnko
YWxwaGEudmFsdWUoKSkgOiAqdGhpczsKIH0KIAotaW5saW5lIENvbG9yIENvbG9yOjpjb2xvcldp
dGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNv
bnN0CitpbmxpbmUgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhKE9wdGlvbmFsPGZsb2F0PiBh
bHBoYSkgY29uc3QKIHsKLSAgICByZXR1cm4gYWxwaGEgPyBjb2xvcldpdGhBbHBoYVVzaW5nQWx0
ZXJuYXRpdmVSb3VuZGluZyhhbHBoYS52YWx1ZSgpKSA6ICp0aGlzOworICAgIHJldHVybiBhbHBo
YSA/IGNvbG9yV2l0aEFscGhhKGFscGhhLnZhbHVlKCkpIDogKnRoaXM7CiB9CiAKIGlubGluZSBj
b25zdCBFeHRlbmRlZENvbG9yJiBDb2xvcjo6YXNFeHRlbmRlZCgpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3Bw
CShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvclV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSw2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBhcmVFc3NlbnRpYWxseUVxdWFsKGNvbnN0IENvbG9y
Q29tcG9uZW50czxmbG9hdD4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGIpCi17
Ci0gICAgcmV0dXJuIFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhWzBdLCBiWzBdKQotICAgICAg
ICAmJiBXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYVsxXSwgYlsxXSkKLSAgICAgICAgJiYgV1RG
OjphcmVFc3NlbnRpYWxseUVxdWFsKGFbMl0sIGJbMl0pCi0gICAgICAgICYmIFdURjo6YXJlRXNz
ZW50aWFsbHlFcXVhbChhWzNdLCBiWzNdKTsKLX0KLQogLy8gVGhlc2UgYXJlIHRoZSBzdGFuZGFy
ZCBzUkdCIDwtPiBsaW5lYXJSR0IgY29udmVyc2lvbiBmdW5jdGlvbnMgKGh0dHBzOi8vZW4ud2lr
aXBlZGlhLm9yZy93aWtpL1NSR0IpLgogZmxvYXQgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChm
bG9hdCBjKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JV
dGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclV0aWxpdGllcy5oCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwy
MSArNTEsMTQgQEAgZmxvYXQgY29udHJhc3RSYXRpbyhjb25zdCBDb2xvckNvbXBvbmVudAogCiBD
b2xvckNvbXBvbmVudHM8ZmxvYXQ+IHByZW11bHRpcGxpZWQoY29uc3QgQ29sb3JDb21wb25lbnRz
PGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRzKTsKIAotYm9vbCBhcmVFc3NlbnRpYWxseUVxdWFsKGNv
bnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mLCBjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+
Jik7Ci0KLWlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoaW50IHZhbHVl
KQoraW5saW5lIHVpbnQ4X3QgY29udmVydFRvQ29tcG9uZW50Qnl0ZShmbG9hdCBmKQogewotICAg
IHJldHVybiBzdGQ6OmNsYW1wKHZhbHVlLCAwLCAyNTUpOworICAgIHJldHVybiBzdGQ6OmNsYW1w
KHN0YXRpY19jYXN0PGludD4oc3RkOjpscm91bmRmKGYgKiAyNTUuMGYpKSwgMCwgMjU1KTsKIH0K
IAotaW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChmbG9hdCB2YWx1ZSkK
K2NvbnN0ZXhwciBmbG9hdCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCh1aW50OF90IGJ5dGUpCiB7
Ci0gICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpyb3VuZCh2YWx1ZSksIDAuZiwgMjU1LmYpOwot
fQotCi1pbmxpbmUgdWludDhfdCBzY2FsZVJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZmxvYXQg
ZikKLXsKLSAgICByZXR1cm4gc3RkOjpjbGFtcChzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoMjU1
LjBmICogZikpLCAwLCAyNTUpOworICAgIHJldHVybiBieXRlIC8gMjU1LjBmOwogfQogCiBjb25z
dGV4cHIgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2X3QgdmFsdWUpCkBAIC04Miw1
ICs3NSw0IEBAIGNvbnN0ZXhwciB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDEKICAgICBy
ZXR1cm4gYXBwcm94aW1hdGlvbiArIChyZW1haW5kZXIgPj4gOCk7CiB9CiAKLQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2lt
cGxlQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmNwcAkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nywz
NCArNjcsMTkgQEAgU2ltcGxlQ29sb3IgbWFrZVVucHJlbXVsdGlwbGllZFNpbXBsZUNvbAogICAg
IHJldHVybiBwaXhlbENvbG9yOwogfQogCi1TaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9t
RmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCi17Ci0gICAgcmV0dXJu
IG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAgc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVs
KHIpLAotICAgICAgICBzY2FsZVJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZyksCi0gICAgICAg
IHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChiKSwKLSAgICAgICAgc2NhbGVSb3VuZEFu
ZENsYW1wQ29sb3JDaGFubmVsKGEpCi0gICAgKTsKLX0KLQogU2ltcGxlQ29sb3IgbWFrZVNpbXBs
ZUNvbG9yRnJvbUhTTEEoZmxvYXQgaHVlLCBmbG9hdCBzYXR1cmF0aW9uLCBmbG9hdCBsaWdodG5l
c3MsIGZsb2F0IGFscGhhKQogewogICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gaHNsVG9TUkdCKHsg
aHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pOwotICAgIHJldHVybiBtYWtlU2lt
cGxlQ29sb3IoCi0gICAgICAgIHJvdW5kKHIgKiAyNTUuMGYpLAotICAgICAgICByb3VuZChnICog
MjU1LjBmKSwKLSAgICAgICAgcm91bmQoYiAqIDI1NS4wZiksCi0gICAgICAgIHJvdW5kKGEgKiAy
NTUuMGYpCi0gICAgKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBn
LCBiLCBhKTsKIH0KIAogU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKGZsb2F0
IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCiB7Ci0gICAgZG91YmxlIGNv
bG9ycyA9IDEgLSBrOwotICAgIGludCByID0gc3RhdGljX2Nhc3Q8aW50PihuZXh0YWZ0ZXIoMjU2
LCAwKSAqIChjb2xvcnMgKiAoMSAtIGMpKSk7Ci0gICAgaW50IGcgPSBzdGF0aWNfY2FzdDxpbnQ+
KG5leHRhZnRlcigyNTYsIDApICogKGNvbG9ycyAqICgxIC0gbSkpKTsKLSAgICBpbnQgYiA9IHN0
YXRpY19jYXN0PGludD4obmV4dGFmdGVyKDI1NiwgMCkgKiAoY29sb3JzICogKDEgLSB5KSkpOwot
ICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5l
eHRhZnRlcigyNTYsIDApICogYSkpOworICAgIGZsb2F0IGNvbG9ycyA9IDEgLSBrOworICAgIGZs
b2F0IHIgPSBjb2xvcnMgKiAoMS4wZiAtIGMpOworICAgIGZsb2F0IGcgPSBjb2xvcnMgKiAoMS4w
ZiAtIG0pOworICAgIGZsb2F0IGIgPSBjb2xvcnMgKiAoMS4wZiAtIHkpOworICAgIHJldHVybiBt
YWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKHIsIGcsIGIsIGEpOwogfQogCiBTdHJpbmcgU2ltcGxl
Q29sb3I6OnNlcmlhbGl6YXRpb25Gb3JIVE1MKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkocmV2aXNpb24gMjYyNjU5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgY29uc3RleHByIHVpbnQ4X3Qg
Ymx1ZUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KICAgICBjb25zdGV4cHIg
dWludDhfdCBhbHBoYUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPj4gMjQ7IH0K
IAotICAgIGNvbnN0ZXhwciBmbG9hdCBhbHBoYUNvbXBvbmVudEFzRmxvYXQoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGFDb21wb25lbnQoKSkgLyAweEZGOyB9CisgICAg
Y29uc3RleHByIGZsb2F0IGFscGhhQ29tcG9uZW50QXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGNv
bnZlcnRUb0NvbXBvbmVudEZsb2F0KGFscGhhQ29tcG9uZW50KCkpOyB9CiAKICAgICBjb25zdGV4
cHIgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGFscGhhQ29tcG9uZW50KCkgPT0gMHhG
RjsgfQogICAgIGNvbnN0ZXhwciBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGFscGhh
Q29tcG9uZW50KCk7IH0KQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogCiAgICAgY29uc3RleHBy
IENvbG9yQ29tcG9uZW50czxmbG9hdD4gYXNTUkdCRmxvYXRDb21wb25lbnRzKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiB7IHJlZENvbXBvbmVudCgpIC8gMjU1LjBmLCBncmVlbkNvbXBv
bmVudCgpIC8gMjU1LjBmLCBibHVlQ29tcG9uZW50KCkgLyAyNTUuMGYsICBhbHBoYUNvbXBvbmVu
dCgpIC8gMjU1LjBmIH07CisgICAgICAgIHJldHVybiB7IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0
KHJlZENvbXBvbmVudCgpKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoZ3JlZW5Db21wb25lbnQo
KSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGJsdWVDb21wb25lbnQoKSksICBjb252ZXJ0VG9D
b21wb25lbnRGbG9hdChhbHBoYUNvbXBvbmVudCgpKSB9OwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHN0ZDo6c2l6ZV90IE4+CkBAIC0xMTcsNyArMTE3LDcgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShTaW1wbGVDb2xvciBhLCBTaQogCiBjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNv
bG9yKGludCByLCBpbnQgZywgaW50IGIpCiB7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihy
LCBnLCBiLCAweEZGKTsKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50OF90PihzdGQ6OmNs
YW1wKHIsIDAsIDB4RkYpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RkOjpjbGFtcChnLCAwLCAw
eEZGKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xhbXAoYiwgMCwgMHhGRikpLCAweEZG
IH07CiB9CiAKIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoaW50IHIsIGlu
dCBnLCBpbnQgYiwgaW50IGEpCkBAIC0xMjgsMTIgKzEyOCwxMiBAQCBjb25zdGV4cHIgU2ltcGxl
Q29sb3IgbWFrZVNpbXBsZUNvbG9yKGluCiBpbmxpbmUgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNv
bG9yKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb25lbnRzKQogewogICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gc1JHQkNvbXBvbmVudHM7Ci0gICAgcmV0dXJuIG1ha2VTaW1w
bGVDb2xvcigKLSAgICAgICAgc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHIpLAotICAg
ICAgICBzY2FsZVJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZyksCi0gICAgICAgIHNjYWxlUm91
bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChiKSwKLSAgICAgICAgc2NhbGVSb3VuZEFuZENsYW1wQ29s
b3JDaGFubmVsKGEpCi0gICAgKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0
cyhyLCBnLCBiLCBhKTsKK30KKworaW5saW5lIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZy
b21GbG9hdHMoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKK3sKKyAgICByZXR1
cm4geyBjb252ZXJ0VG9Db21wb25lbnRCeXRlKHIpLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGcp
LCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGIpLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGEpIH07
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAko
cmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBz
dGF0aWMgdm9pZCBwcmVwYXJlQ2Fpcm9Db250ZXh0U291cmNlKGNhCiAgICAgfSBlbHNlIHsKICAg
ICAgICAgLy8gU29saWQgY29sb3Igc291cmNlCiAgICAgICAgIGlmIChnbG9iYWxBbHBoYSA8IDEp
Ci0gICAgICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBjb2xvci5jb2xvcldpdGhB
bHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhnbG9iYWxBbHBoYSkpOwor
ICAgICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgY29sb3IuY29sb3JXaXRoQWxw
aGFNdWx0aXBsaWVkQnkoZ2xvYmFsQWxwaGEpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
c2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgY29sb3IpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAy
NjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzgsOCArNzgsNyBAQCBzdGF0aWMgU2ltcGxlQ29sb3IgbWFr
ZVNpbXBsZUNvbG9yRnJvbUNHCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0K
IAotICAgIHN0YXRpYyBjb25zdCBkb3VibGUgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXIoMjU2LjAs
IDAuMCk7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyICogc2NhbGVGYWN0b3IsIGcgKiBz
Y2FsZUZhY3RvciwgYiAqIHNjYWxlRmFjdG9yLCBhICogc2NhbGVGYWN0b3IpOworICAgIHJldHVy
biBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKHIsIGcsIGIsIGEpOwogfQogCiBDb2xvcjo6Q29s
b3IoQ0dDb2xvclJlZiBjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAkocmV2aXNpb24gMjYyNjU5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
YXV0byBjb2xvciA9IGZsb29kQ29sb3IoKS5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5n
QWx0ZXJuYXRpdmVSb3VuZGluZyhmbG9vZE9wYWNpdHkoKSk7CisgICAgYXV0byBjb2xvciA9IGZs
b29kQ29sb3IoKS5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9vZE9wYWNpdHkoKSk7CiAg
ICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgp
LCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIGNvbG9yKTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQkocmV2aXNp
b24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9y
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04OCw4ICs4OCw3IEBAIHN0YXRpYyBTaW1wbGVDb2xv
ciBtYWtlU2ltcGxlQ29sb3JGcm9tTlMKICAgICBbcmdiQ29sb3IgZ2V0UmVkOiZyZWRDb21wb25l
bnQgZ3JlZW46JmdyZWVuQ29tcG9uZW50IGJsdWU6JmJsdWVDb21wb25lbnQgYWxwaGE6JmFscGhh
XTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgc3RhdGljIGNvbnN0IGRv
dWJsZSBzY2FsZUZhY3RvciA9IG5leHRhZnRlcigyNTYuMCwgMC4wKTsKLSAgICByZXR1cm4gbWFr
ZVNpbXBsZUNvbG9yKHNjYWxlRmFjdG9yICogcmVkQ29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGdy
ZWVuQ29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGJsdWVDb21wb25lbnQsIHNjYWxlRmFjdG9yICog
YWxwaGEpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKHJlZENvbXBvbmVu
dCwgZ3JlZW5Db21wb25lbnQsIGJsdWVDb21wb25lbnQsIGFscGhhKTsKIH0KIAogQ29sb3IgY29s
b3JGcm9tTlNDb2xvcihOU0NvbG9yICpjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9Db2xvcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvQ29sb3JJT1MubW0JKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9Db2xvcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsNyBAQCBD
b2xvciBjb2xvckZyb21VSUNvbG9yKFVJQ29sb3IgKmNvbG9yKQogCiAgICAgW2NvbG9yIGdldFJl
ZDomcmVkQ29tcG9uZW50IGdyZWVuOiZncmVlbkNvbXBvbmVudCBibHVlOiZibHVlQ29tcG9uZW50
IGFscGhhOiZhbHBoYV07CiAKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNjYWxlRmFjdG9yID0g
bmV4dGFmdGVyKDI1Ni4wLCAwLjApOwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3Ioc2NhbGVG
YWN0b3IgKiByZWRDb21wb25lbnQsIHNjYWxlRmFjdG9yICogZ3JlZW5Db21wb25lbnQsIHNjYWxl
RmFjdG9yICogYmx1ZUNvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBhbHBoYSk7CisgICAgcmV0dXJu
IG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMocmVkQ29tcG9uZW50LCBncmVlbkNvbXBvbmVudCwg
Ymx1ZUNvbXBvbmVudCwgYWxwaGEpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MjY1OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk0LDcgKzk0LDcgQEAgQ29sb3IgU1ZHU3RvcEVsZW1lbnQ6OnN0b3BDb2xvckluY2x1ZGluZwog
ICAgIGF1dG8mIHN2Z1N0eWxlID0gc3R5bGUuc3ZnU3R5bGUoKTsKICAgICBhdXRvIHN0b3BDb2xv
ciA9IHN0eWxlLmNvbG9yUmVzb2x2aW5nQ3VycmVudENvbG9yKHN2Z1N0eWxlLnN0b3BDb2xvcigp
KTsKIAotICAgIHJldHVybiBzdG9wQ29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2lu
Z0FsdGVybmF0aXZlUm91bmRpbmcoc3ZnU3R5bGUuc3RvcE9wYWNpdHkoKSk7CisgICAgcmV0dXJu
IHN0b3BDb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShzdmdTdHlsZS5zdG9wT3BhY2l0
eSgpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5p
bWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbklt
cGwuaAkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTQsNiArMTE0LDE2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgaW5saW5l
IHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChpbnQgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gc3RkOjpjbGFtcCh2YWx1ZSwgMCwgMjU1KTsKKyAgICB9CisKKyAgICBpbmxp
bmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGZsb2F0IHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpyb3VuZCh2YWx1ZSksIDAuMGYsIDI1NS4w
Zik7CisgICAgfQorCiAgICAgdm9pZCBhZGRGcm9tQW5kVG9WYWx1ZXMoU1ZHRWxlbWVudCopIG92
ZXJyaWRlCiAgICAgewogICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2Zyb20udG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3Mv
V0tXZWJWaWV3SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9pb3MvV0tXZWJWaWV3SU9TLm1tCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTEz
LDcgKzUxMyw3IEBAIHN0YXRpYyBXZWJDb3JlOjpDb2xvciBzY3JvbGxWaWV3QmFja2dyb3UKICAg
ICBpZiAoem9vbVNjYWxlIDwgbWluaW11bVpvb21TY2FsZSkgewogICAgICAgICBDR0Zsb2F0IHNs
b3BlID0gMTI7CiAgICAgICAgIENHRmxvYXQgb3BhY2l0eSA9IHN0ZDo6bWF4PENHRmxvYXQ+KDEg
LSBzbG9wZSAqIChtaW5pbXVtWm9vbVNjYWxlIC0gem9vbVNjYWxlKSwgMCk7Ci0gICAgICAgIGNv
bG9yID0gY29sb3IuY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcob3BhY2l0
eSk7CisgICAgICAgIGNvbG9yID0gY29sb3IuY29sb3JXaXRoQWxwaGEob3BhY2l0eSk7CiAgICAg
fQogCiAgICAgcmV0dXJuIGNvbG9yOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401272</attachid>
            <date>2020-06-06 11:55:56 -0700</date>
            <delta_ts>2020-06-06 12:03:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212871-20200606115555.patch</filename>
            <type>text/plain</type>
            <size>24100</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDIwLTA2LTA2ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvcjogVW5pZnkg
cm91bmRpbmcgLyBjbGFtcGluZyBjb252ZXJzaW9ucyBiZXR3ZWVuIDAtMSBmbG9hdCBjb21wb25l
bnRzIGFuZCAwLTI1NSBieXRlIGNvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjg3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdJUC4KKworICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmlsbFN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
U3R5bGU6OmNyZWF0ZUZyb21TdHJpbmdXaXRoT3ZlcnJpZGVBbHBoYSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkYXJrIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRp
bmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFs
cGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFscGhh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6YXJlRXNzZW50aWFsbHlFcXVhbCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnRUb0NvbXBvbmVudEJ5dGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRv
Q29tcG9uZW50RmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6cm91bmRBbmRDbGFtcENvbG9yQ2hh
bm5lbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzY2FsZVJvdW5kQW5kQ2xhbXBDb2xv
ckNoYW5uZWwpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNv
bG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEpOgorICAgICAgICAoV2Vi
Q29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVDb2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmFscGhh
Q29tcG9uZW50QXNGbG9hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6
YXNTUkdCRmxvYXRDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1w
bGVDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xvcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NvbG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9y
RnJvbU5TQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9Db2xvcklPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbG9yRnJvbVVJQ29sb3IpOgorICAgICAgICAqIHN2Zy9TVkdTdG9wRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5j
bHVkaW5nT3BhY2l0eSBjb25zdCk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0aW9uQ29sb3JGdW5jdGlvbjo6cm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbCk6CisKIDIwMjAt
MDYtMDYgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXSBB
ZGQgc3VwcG9ydCBmb3Igd2lkdGg6IG1pbi9tYXgtY29udGVudApJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZS5jcHAJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzUs
NyArMzc1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTdAogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoc3R5bGUuaXNDdXJyZW50Q29sb3IoKSkKLSAgICAgICAg
c3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50Q29sb3IoY2FudmFzQmFzZSgpKS5jb2xvcldpdGhB
bHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhzdHlsZS5vdmVycmlkZUFscGhhKCkpKTsKKyAg
ICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50Q29sb3IoY2FudmFzQmFzZSgpKS5jb2xv
cldpdGhBbHBoYShzdHlsZS5vdmVycmlkZUFscGhhKCkpKTsKICAgICBlbHNlCiAgICAgICAgIGNo
ZWNrT3JpZ2luKHN0eWxlLmNhbnZhc1BhdHRlcm4oKS5nZXQoKSk7CiAKQEAgLTM5OCw3ICszOTgs
NyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEZpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChzdHlsZS5pc0N1cnJlbnRDb2xvcigpKQotICAgICAgICBzdHlsZSA9
IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpLmNvbG9yV2l0aEFscGhhVXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nKHN0eWxlLm92ZXJyaWRlQWxwaGEoKSkpOworICAgICAgICBz
dHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpLmNvbG9yV2l0aEFs
cGhhKHN0eWxlLm92ZXJyaWRlQWxwaGEoKSkpOwogICAgIGVsc2UKICAgICAgICAgY2hlY2tPcmln
aW4oc3R5bGUuY2FudmFzUGF0dGVybigpLmdldCgpKTsKIApAQCAtMTMwMiw3ICsxMzAyLDcgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaAogICAgICAgICBpZiAoIWNv
bG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgc2V0U2hhZG93
KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgY29sb3IuY29sb3JXaXRoQWxwaGFVc2lu
Z0FsdGVybmF0aXZlUm91bmRpbmcoYWxwaGEpKTsKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdp
ZHRoLCBoZWlnaHQpLCBibHVyLCBjb2xvci5jb2xvcldpdGhBbHBoYShhbHBoYSkpOwogfQogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwg
ZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9hdCBncmF5TGV2ZWwsIGZsb2F0IGFscGhhKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkocmV2aXNp
b24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNyArMTQzLDcgQEAgQ2FudmFzU3R5bGUgQ2FudmFzU3R5
bGU6OmNyZWF0ZUZyb21TdHJpbgogICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIGNvbG9yLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5h
dGl2ZVJvdW5kaW5nKGFscGhhKTsKKyAgICByZXR1cm4gY29sb3IuY29sb3JXaXRoQWxwaGEoYWxw
aGEpOwogfQogCiBib29sIENhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDb2xvcihjb25zdCBDYW52
YXNTdHlsZSYgb3RoZXIpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gMjYyNjU5KQor
KysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xv
cihjb25zdCBKU09OOjpPYmplCiAgICAgZWxzZSBpZiAoYSA+IDEpCiAgICAgICAgIGEgPSAxOwog
Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyLCBnLCBiLCBzdGF0aWNfY2FzdDxpbnQ+KGEg
KiAyNTUpKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGNvbnZlcnRUb0Nv
bXBvbmVudEJ5dGUoYSkpOwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VDb25maWdDb2xvcihjb25z
dCBTdHJpbmcmIGZpZWxkTmFtZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb25maWdPYmplY3QpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lv
biAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMSwxMSArMTIxLDggQEAgQ29sb3IgQ29sb3I6OmxpZ2h0KCkg
Y29uc3QKICAgICAvLyBIYXJkY29kZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KICAgICBp
ZiAoIWlzRXh0ZW5kZWQoKSAmJiBhc1NpbXBsZSgpID09IGJsYWNrKQogICAgICAgICByZXR1cm4g
bGlnaHRlbmVkQmxhY2s7Ci0gICAgCi0gICAgY29uc3QgZmxvYXQgc2NhbGVGYWN0b3IgPSBuZXh0
YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CiAKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFD
b21wb25lbnRzTG9zc3koKTsKLQogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7
CiAKICAgICBpZiAodiA9PSAwLjBmKQpAQCAtMTMzLDEyICsxMzAsNyBAQCBDb2xvciBDb2xvcjo6
bGlnaHQoKSBjb25zdAogCiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWluKDEuMGYsIHYg
KyAwLjMzZikgLyB2OwogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgYWxw
aGEoKQotICAgICk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMobXVsdGlw
bGllciAqIHIsIG11bHRpcGxpZXIgKiBnLCBtdWx0aXBsaWVyICogYiwgYSk7CiB9CiAKIENvbG9y
IENvbG9yOjpkYXJrKCkgY29uc3QKQEAgLTE0NywxOSArMTM5LDEyIEBAIENvbG9yIENvbG9yOjpk
YXJrKCkgY29uc3QKICAgICBpZiAoIWlzRXh0ZW5kZWQoKSAmJiBhc1NpbXBsZSgpID09IHdoaXRl
KQogICAgICAgICByZXR1cm4gZGFya2VuZWRXaGl0ZTsKICAgICAKLSAgICBjb25zdCBmbG9hdCBz
Y2FsZUZhY3RvciA9IG5leHRhZnRlcmYoMjU2LjBmLCAwLjBmKTsKLQogICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwogCiAgICAgZmxvYXQgdiA9IHN0ZDo6
bWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBtdWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwg
KHYgLSAwLjMzZikgLyB2KTsKIAotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoCi0gICAgICAg
IHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIHIgKiBzY2FsZUZhY3RvciksCi0gICAgICAg
IHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGcgKiBzY2FsZUZhY3RvciksCi0gICAgICAg
IHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGIgKiBzY2FsZUZhY3RvciksCi0gICAgICAg
IGFscGhhKCkKLSAgICApOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKG11
bHRpcGxpZXIgKiByLCBtdWx0aXBsaWVyICogZywgbXVsdGlwbGllciAqIGIsIGEpOwogfQogCiBi
b29sIENvbG9yOjppc0RhcmsoKSBjb25zdApAQCAtMjM1LDQxICsyMjAsMTIgQEAgQ29sb3IgQ29s
b3I6OmJsZW5kV2l0aFdoaXRlKCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1Db2xv
ciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxvYXQgYW1vdW50KSBjb25zdAot
ewotICAgIGZsb2F0IG5ld0FscGhhID0gYW1vdW50ICogYWxwaGFBc0Zsb2F0KCk7Ci0gICAgcmV0
dXJuIGNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsKLX0KLQotQ29sb3IgQ29sb3I6OmNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0IGFtb3VudCkg
Y29uc3QKLXsKLSAgICBmbG9hdCBuZXdBbHBoYSA9IGFtb3VudCAqIGFscGhhQXNGbG9hdCgpOwot
ICAgIHJldHVybiBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhuZXdBbHBo
YSk7Ci19Ci0KIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QK
IHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmNv
bG9yV2l0aEFscGhhKGFscGhhKTsKIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdoZXJlIHRoaXMg
ZnVuY3Rpb24gZGlmZmVycyBmcm9tIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5k
aW5nLgotICAgIHVpbnQ4X3QgbmV3QWxwaGEgPSBhbHBoYSAqIDB4RkY7Ci0KLSAgICBDb2xvciBy
ZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsKLSAgICBpZiAoaXNT
ZW1hbnRpYygpKQotICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLUNvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVS
b3VuZGluZyhmbG9hdCBhbHBoYSkgY29uc3QKLXsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAg
ICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmNvbG9yV2l0aEFscGhhKGFscGhhKTsKLQotICAgIC8v
IEZJWE1FOiBUaGlzIGlzIHdoZXJlIHRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIGNvbG9yV2l0
aEFscGhhVXNpbmcuCi0gICAgdWludDhfdCBuZXdBbHBoYSA9IHNjYWxlUm91bmRBbmRDbGFtcENv
bG9yQ2hhbm5lbChhbHBoYSk7Ci0KLSAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9y
V2l0aEFscGhhKG5ld0FscGhhKTsKKyAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9y
V2l0aEFscGhhKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEpKTsKICAgICBpZiAoaXNTZW1h
bnRpYygpKQogICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygpOwogICAgIHJldHVybiByZXN1
bHQ7CkBAIC0yNzksNyArMjM1LDcgQEAgQ29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxw
aGEoZmxvYQogewogICAgIGlmIChpc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBhc0V4dGVu
ZGVkKCkuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShhbHBoYSk7Ci0gICAgcmV0dXJuIGFzU2ltcGxl
KCkuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShzY2FsZVJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwo
YWxwaGEpKTsKKyAgICByZXR1cm4gYXNTaW1wbGUoKS5pbnZlcnRlZENvbG9yV2l0aEFscGhhKGNv
bnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEpKTsKIH0KIAogQ29sb3IgQ29sb3I6OnNlbWFudGlj
Q29sb3IoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5oCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyArMTIyLDcgQEAgcHVibGljOgogICAg
IGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVk
KCkuYWxwaGEoKSA9PSAxLjAgOiBhc1NpbXBsZSgpLmlzT3BhcXVlKCk7IH0KICAgICBib29sIGlz
VmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBo
YSgpID4gMC4wIDogYXNTaW1wbGUoKS5pc1Zpc2libGUoKTsgfQogCi0gICAgaW50IGFscGhhKCkg
Y29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgKiAyNTUg
OiBhc1NpbXBsZSgpLmFscGhhQ29tcG9uZW50KCk7IH0KKyAgICB1aW50OF90IGFscGhhKCkgY29u
c3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gY29udmVydFRvQ29tcG9uZW50Qnl0ZShhc0V4dGVu
ZGVkKCkuYWxwaGEoKSkgOiBhc1NpbXBsZSgpLmFscGhhQ29tcG9uZW50KCk7IH0KICAgICBmbG9h
dCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVk
KCkuYWxwaGEoKSA6IGFzU2ltcGxlKCkuYWxwaGFDb21wb25lbnRBc0Zsb2F0KCk7IH0KIAogICAg
IHVuc2lnbmVkIGhhc2goKSBjb25zdDsKQEAgLTE0NiwxNyArMTQ2LDE2IEBAIHB1YmxpYzoKICAg
ICBDb2xvciBibGVuZFdpdGhXaGl0ZSgpIGNvbnN0OwogCiAgICAgQ29sb3IgaW52ZXJ0ZWRDb2xv
cldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3Q7CisgICAgQ29sb3IgaW52ZXJ0ZWRDb2xvcldp
dGhBbHBoYShPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0OwogCiAgICAgQ29sb3IgY29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxvYXQpIGNvbnN0OwotICAgIENvbG9yIGNvbG9yV2l0aEFs
cGhhKGZsb2F0KSBjb25zdDsKKyAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShP
cHRpb25hbDxmbG9hdD4pIGNvbnN0OwogCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgbmVlZCBm
b3IgQWx0ZXJuYXRpdmVSb3VuZGluZyB2YXJpYW50cyBieSBzZXR0bGluZyBvbiBhIHJvdW5kaW5n
IGJlaGF2aW9yLgotICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRl
cm5hdGl2ZVJvdW5kaW5nKE9wdGlvbmFsPGZsb2F0PikgY29uc3Q7Ci0gICAgQ29sb3IgY29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQpIGNvbnN0
OwotICAgIENvbG9yIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKE9wdGlv
bmFsPGZsb2F0PikgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IgY29sb3JXaXRoQWxw
aGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQpIGNvbnN0OworICAgIENvbG9yIGNvbG9y
V2l0aEFscGhhKGZsb2F0KSBjb25zdDsKKyAgICBDb2xvciBjb2xvcldpdGhBbHBoYShPcHRpb25h
bDxmbG9hdD4pIGNvbnN0OwogCiAgICAgQ29sb3Igb3BhcXVlQ29sb3IoKSBjb25zdCB7IHJldHVy
biBjb2xvcldpdGhBbHBoYSgxLjBmKTsgfQorCiAgICAgQ29sb3Igc2VtYW50aWNDb2xvcigpIGNv
bnN0OwogCiAgICAgLy8gVHJ1ZSBpZiB0aGUgY29sb3Igb3JpZ2luYXRlZCBmcm9tIGEgQ1NTIHNl
bWFudGljIGNvbG9yIG5hbWUuCkBAIC0yODksMTQgKzI4OCwyNCBAQCBpbmxpbmUgdW5zaWduZWQg
Q29sb3I6Omhhc2goKSBjb25zdAogICAgIHJldHVybiBXVEY6OmludEhhc2gobV9jb2xvckRhdGEu
c2ltcGxlQ29sb3JBbmRGbGFncyk7CiB9CiAKLWlubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRo
QWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+
IGFscGhhKSBjb25zdAoraW5saW5lIENvbG9yIENvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFscGhh
KE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QKK3sKKyAgICByZXR1cm4gYWxwaGEgPyBpbnZl
cnRlZENvbG9yV2l0aEFscGhhKGFscGhhLnZhbHVlKCkpIDogKnRoaXM7Cit9CisKK2lubGluZSBD
b2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxvYXQgYW1vdW50KSBjb25z
dAoreworICAgIHJldHVybiBjb2xvcldpdGhBbHBoYShhbW91bnQgKiBhbHBoYUFzRmxvYXQoKSk7
Cit9CisKK2lubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoT3B0
aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdAogewotICAgIHJldHVybiBhbHBoYSA/IGNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGFscGhhLnZhbHVlKCkp
IDogKnRoaXM7CisgICAgcmV0dXJuIGFscGhhID8gY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnko
YWxwaGEudmFsdWUoKSkgOiAqdGhpczsKIH0KIAotaW5saW5lIENvbG9yIENvbG9yOjpjb2xvcldp
dGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNv
bnN0CitpbmxpbmUgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhKE9wdGlvbmFsPGZsb2F0PiBh
bHBoYSkgY29uc3QKIHsKLSAgICByZXR1cm4gYWxwaGEgPyBjb2xvcldpdGhBbHBoYVVzaW5nQWx0
ZXJuYXRpdmVSb3VuZGluZyhhbHBoYS52YWx1ZSgpKSA6ICp0aGlzOworICAgIHJldHVybiBhbHBo
YSA/IGNvbG9yV2l0aEFscGhhKGFscGhhLnZhbHVlKCkpIDogKnRoaXM7CiB9CiAKIGlubGluZSBj
b25zdCBFeHRlbmRlZENvbG9yJiBDb2xvcjo6YXNFeHRlbmRlZCgpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3Bw
CShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvclV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSw2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBhcmVFc3NlbnRpYWxseUVxdWFsKGNvbnN0IENvbG9y
Q29tcG9uZW50czxmbG9hdD4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGIpCi17
Ci0gICAgcmV0dXJuIFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhWzBdLCBiWzBdKQotICAgICAg
ICAmJiBXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYVsxXSwgYlsxXSkKLSAgICAgICAgJiYgV1RG
OjphcmVFc3NlbnRpYWxseUVxdWFsKGFbMl0sIGJbMl0pCi0gICAgICAgICYmIFdURjo6YXJlRXNz
ZW50aWFsbHlFcXVhbChhWzNdLCBiWzNdKTsKLX0KLQogLy8gVGhlc2UgYXJlIHRoZSBzdGFuZGFy
ZCBzUkdCIDwtPiBsaW5lYXJSR0IgY29udmVyc2lvbiBmdW5jdGlvbnMgKGh0dHBzOi8vZW4ud2lr
aXBlZGlhLm9yZy93aWtpL1NSR0IpLgogZmxvYXQgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChm
bG9hdCBjKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JV
dGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclV0aWxpdGllcy5oCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwy
MSArNTEsMTQgQEAgZmxvYXQgY29udHJhc3RSYXRpbyhjb25zdCBDb2xvckNvbXBvbmVudAogCiBD
b2xvckNvbXBvbmVudHM8ZmxvYXQ+IHByZW11bHRpcGxpZWQoY29uc3QgQ29sb3JDb21wb25lbnRz
PGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRzKTsKIAotYm9vbCBhcmVFc3NlbnRpYWxseUVxdWFsKGNv
bnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mLCBjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+
Jik7Ci0KLWlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoaW50IHZhbHVl
KQoraW5saW5lIHVpbnQ4X3QgY29udmVydFRvQ29tcG9uZW50Qnl0ZShmbG9hdCBmKQogewotICAg
IHJldHVybiBzdGQ6OmNsYW1wKHZhbHVlLCAwLCAyNTUpOworICAgIHJldHVybiBzdGQ6OmNsYW1w
KHN0YXRpY19jYXN0PGludD4oc3RkOjpscm91bmRmKGYgKiAyNTUuMGYpKSwgMCwgMjU1KTsKIH0K
IAotaW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChmbG9hdCB2YWx1ZSkK
K2NvbnN0ZXhwciBmbG9hdCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCh1aW50OF90IGJ5dGUpCiB7
Ci0gICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpyb3VuZCh2YWx1ZSksIDAuZiwgMjU1LmYpOwot
fQotCi1pbmxpbmUgdWludDhfdCBzY2FsZVJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZmxvYXQg
ZikKLXsKLSAgICByZXR1cm4gc3RkOjpjbGFtcChzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoMjU1
LjBmICogZikpLCAwLCAyNTUpOworICAgIHJldHVybiBieXRlIC8gMjU1LjBmOwogfQogCiBjb25z
dGV4cHIgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2X3QgdmFsdWUpCkBAIC04Miw1
ICs3NSw0IEBAIGNvbnN0ZXhwciB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDEKICAgICBy
ZXR1cm4gYXBwcm94aW1hdGlvbiArIChyZW1haW5kZXIgPj4gOCk7CiB9CiAKLQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2lt
cGxlQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmNwcAkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nywz
NCArNjcsMTkgQEAgU2ltcGxlQ29sb3IgbWFrZVVucHJlbXVsdGlwbGllZFNpbXBsZUNvbAogICAg
IHJldHVybiBwaXhlbENvbG9yOwogfQogCi1TaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9t
RmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCi17Ci0gICAgcmV0dXJu
IG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAgc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVs
KHIpLAotICAgICAgICBzY2FsZVJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZyksCi0gICAgICAg
IHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChiKSwKLSAgICAgICAgc2NhbGVSb3VuZEFu
ZENsYW1wQ29sb3JDaGFubmVsKGEpCi0gICAgKTsKLX0KLQogU2ltcGxlQ29sb3IgbWFrZVNpbXBs
ZUNvbG9yRnJvbUhTTEEoZmxvYXQgaHVlLCBmbG9hdCBzYXR1cmF0aW9uLCBmbG9hdCBsaWdodG5l
c3MsIGZsb2F0IGFscGhhKQogewogICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gaHNsVG9TUkdCKHsg
aHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pOwotICAgIHJldHVybiBtYWtlU2lt
cGxlQ29sb3IoCi0gICAgICAgIHJvdW5kKHIgKiAyNTUuMGYpLAotICAgICAgICByb3VuZChnICog
MjU1LjBmKSwKLSAgICAgICAgcm91bmQoYiAqIDI1NS4wZiksCi0gICAgICAgIHJvdW5kKGEgKiAy
NTUuMGYpCi0gICAgKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBn
LCBiLCBhKTsKIH0KIAogU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKGZsb2F0
IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCiB7Ci0gICAgZG91YmxlIGNv
bG9ycyA9IDEgLSBrOwotICAgIGludCByID0gc3RhdGljX2Nhc3Q8aW50PihuZXh0YWZ0ZXIoMjU2
LCAwKSAqIChjb2xvcnMgKiAoMSAtIGMpKSk7Ci0gICAgaW50IGcgPSBzdGF0aWNfY2FzdDxpbnQ+
KG5leHRhZnRlcigyNTYsIDApICogKGNvbG9ycyAqICgxIC0gbSkpKTsKLSAgICBpbnQgYiA9IHN0
YXRpY19jYXN0PGludD4obmV4dGFmdGVyKDI1NiwgMCkgKiAoY29sb3JzICogKDEgLSB5KSkpOwot
ICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5l
eHRhZnRlcigyNTYsIDApICogYSkpOworICAgIGZsb2F0IGNvbG9ycyA9IDEgLSBrOworICAgIGZs
b2F0IHIgPSBjb2xvcnMgKiAoMS4wZiAtIGMpOworICAgIGZsb2F0IGcgPSBjb2xvcnMgKiAoMS4w
ZiAtIG0pOworICAgIGZsb2F0IGIgPSBjb2xvcnMgKiAoMS4wZiAtIHkpOworICAgIHJldHVybiBt
YWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKHIsIGcsIGIsIGEpOwogfQogCiBTdHJpbmcgU2ltcGxl
Q29sb3I6OnNlcmlhbGl6YXRpb25Gb3JIVE1MKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkocmV2aXNpb24gMjYyNjU5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgY29uc3RleHByIHVpbnQ4X3Qg
Ymx1ZUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KICAgICBjb25zdGV4cHIg
dWludDhfdCBhbHBoYUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPj4gMjQ7IH0K
IAotICAgIGNvbnN0ZXhwciBmbG9hdCBhbHBoYUNvbXBvbmVudEFzRmxvYXQoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGFDb21wb25lbnQoKSkgLyAweEZGOyB9CisgICAg
Y29uc3RleHByIGZsb2F0IGFscGhhQ29tcG9uZW50QXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGNv
bnZlcnRUb0NvbXBvbmVudEZsb2F0KGFscGhhQ29tcG9uZW50KCkpOyB9CiAKICAgICBjb25zdGV4
cHIgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGFscGhhQ29tcG9uZW50KCkgPT0gMHhG
RjsgfQogICAgIGNvbnN0ZXhwciBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGFscGhh
Q29tcG9uZW50KCk7IH0KQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogCiAgICAgY29uc3RleHBy
IENvbG9yQ29tcG9uZW50czxmbG9hdD4gYXNTUkdCRmxvYXRDb21wb25lbnRzKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiB7IHJlZENvbXBvbmVudCgpIC8gMjU1LjBmLCBncmVlbkNvbXBv
bmVudCgpIC8gMjU1LjBmLCBibHVlQ29tcG9uZW50KCkgLyAyNTUuMGYsICBhbHBoYUNvbXBvbmVu
dCgpIC8gMjU1LjBmIH07CisgICAgICAgIHJldHVybiB7IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0
KHJlZENvbXBvbmVudCgpKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoZ3JlZW5Db21wb25lbnQo
KSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGJsdWVDb21wb25lbnQoKSksICBjb252ZXJ0VG9D
b21wb25lbnRGbG9hdChhbHBoYUNvbXBvbmVudCgpKSB9OwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHN0ZDo6c2l6ZV90IE4+CkBAIC0xMDEsNyArMTAxLDcgQEAgU2ltcGxlQ29sb3IgbWFrZVByZW11
bHRpcGxpZWRTaW1wbGVDb2xvcgogU2ltcGxlQ29sb3IgbWFrZVVucHJlbXVsdGlwbGllZFNpbXBs
ZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKIFNpbXBsZUNvbG9yIG1ha2VVbnBy
ZW11bHRpcGxpZWRTaW1wbGVDb2xvcihTaW1wbGVDb2xvcik7CiAKLVdFQkNPUkVfRVhQT1JUIFNp
bXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoZmxvYXQgciwgZmxvYXQgZywgZmxv
YXQgYiwgZmxvYXQgYSk7CitTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGZs
b2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpOwogV0VCQ09SRV9FWFBPUlQgU2ltcGxl
Q29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoZmxvYXQgaCwgZmxvYXQgcywgZmxvYXQgbCwg
ZmxvYXQgYSk7CiBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EoZmxvYXQgYywg
ZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSk7CiAKQEAgLTExNyw3ICsxMTcsNyBA
QCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFNpbXBsZUNvbG9yIGEsIFNpCiAKIGNvbnN0ZXhwciBT
aW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYikKIHsKLSAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIDB4RkYpOworICAgIHJldHVybiB7IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xhbXAociwgMCwgMHhGRikpLCBzdGF0aWNfY2FzdDx1aW50
OF90PihzdGQ6OmNsYW1wKGcsIDAsIDB4RkYpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RkOjpj
bGFtcChiLCAwLCAweEZGKSksIDB4RkYgfTsKIH0KIAogY29uc3RleHByIFNpbXBsZUNvbG9yIG1h
a2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKQEAgLTEyOCwxMiArMTI4
LDEyIEBAIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoaW4KIGlubGluZSBT
aW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYg
c1JHQkNvbXBvbmVudHMpCiB7CiAgICAgYXV0byBbciwgZywgYiwgYV0gPSBzUkdCQ29tcG9uZW50
czsKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKAotICAgICAgICBzY2FsZVJvdW5kQW5kQ2xh
bXBDb2xvckNoYW5uZWwociksCi0gICAgICAgIHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5l
bChnKSwKLSAgICAgICAgc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGIpLAotICAgICAg
ICBzY2FsZVJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoYSkKLSAgICApOworICAgIHJldHVybiBt
YWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKHIsIGcsIGIsIGEpOworfQorCitpbmxpbmUgU2ltcGxl
Q29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBi
LCBmbG9hdCBhKQoreworICAgIHJldHVybiB7IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUociksIGNv
bnZlcnRUb0NvbXBvbmVudEJ5dGUoZyksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYiksIGNvbnZl
cnRUb0NvbXBvbmVudEJ5dGUoYSkgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9DYWlyb09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OCw3ICs3OCw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVDYWlyb0NvbnRleHRTb3Vy
Y2UoY2EKICAgICB9IGVsc2UgewogICAgICAgICAvLyBTb2xpZCBjb2xvciBzb3VyY2UKICAgICAg
ICAgaWYgKGdsb2JhbEFscGhhIDwgMSkKLSAgICAgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29s
b3IoY3IsIGNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJv
dW5kaW5nKGdsb2JhbEFscGhhKSk7CisgICAgICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9y
KGNyLCBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShnbG9iYWxBbHBoYSkpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBjb2xvcik7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JD
Ry5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Q29sb3JDRy5jcHAJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw4ICs3OCw3IEBA
IHN0YXRpYyBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tQ0cKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBzY2FsZUZh
Y3RvciA9IG5leHRhZnRlcigyNTYuMCwgMC4wKTsKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9y
KHIgKiBzY2FsZUZhY3RvciwgZyAqIHNjYWxlRmFjdG9yLCBiICogc2NhbGVGYWN0b3IsIGEgKiBz
Y2FsZUZhY3Rvcik7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMociwgZywg
YiwgYSk7CiB9CiAKIENvbG9yOjpDb2xvcihDR0NvbG9yUmVmIGNvbG9yKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3Bw
CShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRmxvb2QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQg
RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBpZiAoIXJlc3VsdEltYWdlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGNvbG9yID0gZmxvb2RDb2xvcigpLmNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb29kT3BhY2l0eSgp
KTsKKyAgICBhdXRvIGNvbG9yID0gZmxvb2RDb2xvcigpLmNvbG9yV2l0aEFscGhhTXVsdGlwbGll
ZEJ5KGZsb29kT3BhY2l0eSgpKTsKICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0
KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgY29s
b3IpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29s
b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbG9yTWFjLm1tCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTg4LDggKzg4
LDcgQEAgc3RhdGljIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21OUwogICAgIFtyZ2JD
b2xvciBnZXRSZWQ6JnJlZENvbXBvbmVudCBncmVlbjomZ3JlZW5Db21wb25lbnQgYmx1ZTomYmx1
ZUNvbXBvbmVudCBhbHBoYTomYWxwaGFdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CiAKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyKDI1Ni4w
LCAwLjApOwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3Ioc2NhbGVGYWN0b3IgKiByZWRDb21w
b25lbnQsIHNjYWxlRmFjdG9yICogZ3JlZW5Db21wb25lbnQsIHNjYWxlRmFjdG9yICogYmx1ZUNv
bXBvbmVudCwgc2NhbGVGYWN0b3IgKiBhbHBoYSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xv
ckZyb21GbG9hdHMocmVkQ29tcG9uZW50LCBncmVlbkNvbXBvbmVudCwgYmx1ZUNvbXBvbmVudCwg
YWxwaGEpOwogfQogCiBDb2xvciBjb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xvcklPUy5tbQkocmV2aXNpb24gMjYyNjU5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw4ICs0Nyw3IEBAIENvbG9yIGNvbG9yRnJvbVVJQ29sb3IoVUlDb2xvciAqY29s
b3IpCiAKICAgICBbY29sb3IgZ2V0UmVkOiZyZWRDb21wb25lbnQgZ3JlZW46JmdyZWVuQ29tcG9u
ZW50IGJsdWU6JmJsdWVDb21wb25lbnQgYWxwaGE6JmFscGhhXTsKIAotICAgIHN0YXRpYyBjb25z
dCBkb3VibGUgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXIoMjU2LjAsIDAuMCk7Ci0gICAgcmV0dXJu
IG1ha2VTaW1wbGVDb2xvcihzY2FsZUZhY3RvciAqIHJlZENvbXBvbmVudCwgc2NhbGVGYWN0b3Ig
KiBncmVlbkNvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBibHVlQ29tcG9uZW50LCBzY2FsZUZhY3Rv
ciAqIGFscGhhKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyZWRDb21w
b25lbnQsIGdyZWVuQ29tcG9uZW50LCBibHVlQ29tcG9uZW50LCBhbHBoYSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNw
cAkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBDb2xvciBTVkdTdG9wRWxlbWVu
dDo6c3RvcENvbG9ySW5jbHVkaW5nCiAgICAgYXV0byYgc3ZnU3R5bGUgPSBzdHlsZS5zdmdTdHls
ZSgpOwogICAgIGF1dG8gc3RvcENvbG9yID0gc3R5bGUuY29sb3JSZXNvbHZpbmdDdXJyZW50Q29s
b3Ioc3ZnU3R5bGUuc3RvcENvbG9yKCkpOwogCi0gICAgcmV0dXJuIHN0b3BDb2xvci5jb2xvcldp
dGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhzdmdTdHlsZS5zdG9w
T3BhY2l0eSgpKTsKKyAgICByZXR1cm4gc3RvcENvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGll
ZEJ5KHN2Z1N0eWxlLnN0b3BPcGFjaXR5KCkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9u
QWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25J
bXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsMTYgQEAgcHVibGljOgogICAgIH0K
IAogcHJpdmF0ZToKKyAgICBpbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVs
KGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6OmNsYW1wKHZhbHVlLCAwLCAy
NTUpOworICAgIH0KKworICAgIGlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5u
ZWwoZmxvYXQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjpjbGFtcChzdGQ6OnJv
dW5kKHZhbHVlKSwgMC4wZiwgMjU1LjBmKTsKKyAgICB9CisKICAgICB2b2lkIGFkZEZyb21BbmRU
b1ZhbHVlcyhTVkdFbGVtZW50Kikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGF1dG8gc2ltcGxl
RnJvbSA9IG1fZnJvbS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MubW0JKHJldmlzaW9uIDI2
MjY1OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC01MTMsNyArNTEzLDcgQEAgc3RhdGljIFdlYkNvcmU6OkNvbG9y
IHNjcm9sbFZpZXdCYWNrZ3JvdQogICAgIGlmICh6b29tU2NhbGUgPCBtaW5pbXVtWm9vbVNjYWxl
KSB7CiAgICAgICAgIENHRmxvYXQgc2xvcGUgPSAxMjsKICAgICAgICAgQ0dGbG9hdCBvcGFjaXR5
ID0gc3RkOjptYXg8Q0dGbG9hdD4oMSAtIHNsb3BlICogKG1pbmltdW1ab29tU2NhbGUgLSB6b29t
U2NhbGUpLCAwKTsKLSAgICAgICAgY29sb3IgPSBjb2xvci5jb2xvcldpdGhBbHBoYVVzaW5nQWx0
ZXJuYXRpdmVSb3VuZGluZyhvcGFjaXR5KTsKKyAgICAgICAgY29sb3IgPSBjb2xvci5jb2xvcldp
dGhBbHBoYShvcGFjaXR5KTsKICAgICB9CiAKICAgICByZXR1cm4gY29sb3I7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401274</attachid>
            <date>2020-06-06 12:03:12 -0700</date>
            <delta_ts>2020-06-06 13:20:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212871-20200606120311.patch</filename>
            <type>text/plain</type>
            <size>26424</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDIwLTA2LTA2ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvcjogVW5pZnkg
cm91bmRpbmcgLyBjbGFtcGluZyBjb252ZXJzaW9ucyBiZXR3ZWVuIDAtMSBmbG9hdCBjb21wb25l
bnRzIGFuZCAwLTI1NSBieXRlIGNvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjg3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdJUC4KKworICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmlsbFN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
U3R5bGU6OmNyZWF0ZUZyb21TdHJpbmdXaXRoT3ZlcnJpZGVBbHBoYSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkYXJrIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRp
bmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFs
cGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFscGhh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6YXJlRXNzZW50aWFsbHlFcXVhbCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnRUb0NvbXBvbmVudEJ5dGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRv
Q29tcG9uZW50RmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6cm91bmRBbmRDbGFtcENvbG9yQ2hh
bm5lbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzY2FsZVJvdW5kQW5kQ2xhbXBDb2xv
ckNoYW5uZWwpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNv
bG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEpOgorICAgICAgICAoV2Vi
Q29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVDb2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmFscGhh
Q29tcG9uZW50QXNGbG9hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6
YXNTUkdCRmxvYXRDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1w
bGVDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xvcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NvbG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9y
RnJvbU5TQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9Db2xvcklPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbG9yRnJvbVVJQ29sb3IpOgorICAgICAgICAqIHN2Zy9TVkdTdG9wRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5j
bHVkaW5nT3BhY2l0eSBjb25zdCk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0aW9uQ29sb3JGdW5jdGlvbjo6cm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbCk6CisKIDIwMjAt
MDYtMDYgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXSBB
ZGQgc3VwcG9ydCBmb3Igd2lkdGg6IG1pbi9tYXgtY29udGVudApJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAko
cmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDIsNyArNjQyLDcgQEAgc3Rh
dGljIENvbG9yIHBhcnNlSFNMUGFyYW1ldGVycyhDU1NQYXJzZQogICAgIGlmICghYXJncy5hdEVu
ZCgpKQogICAgICAgICByZXR1cm4gQ29sb3IoKTsKIAotICAgIHJldHVybiBtYWtlU2ltcGxlQ29s
b3JGcm9tSFNMQShzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVswXSksIHN0YXRpY19jYXN0
PGZsb2F0Pihjb2xvckFycmF5WzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMl0p
LCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9y
KGhzbFRvU1JHQih7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzBdKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMV0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsy
XSksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkgfSkpOwogfQogCiBzdGF0aWMgQ29sb3IgcGFy
c2VDb2xvckZ1bmN0aW9uUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJl
dmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVj
dGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNjI1LDcgKzYyNSw3IEBAIE5TQXJyYXkgKkRhdGFE
ZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblIKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNv
IHRoZSBjb2xvciB3aWxsIGFwcGVhciBvbiBsaWdodCBhbmQgZGFyayBiYWNrZ3JvdW5kcywgc2lu
Y2Ugb25seSBvbmUgY29sb3IgY2FuIGJlIHNwZWNpZmllZC4KICAgICAgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSBvdmVycmlkZUxpZ2h0bmVzcyA9IDAuNTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSBvdmVycmlkZUFscGhhTXVsdGlwbGllciA9IDAuMzg7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBhdXRvIHVuZGVybGluZUNvbG9yID0gbWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEo
aHVlLCBzYXR1cmF0aW9uLCBvdmVycmlkZUxpZ2h0bmVzcywgb3ZlcnJpZGVBbHBoYU11bHRpcGxp
ZXIgKiBhbHBoYSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVuZGVybGluZUNvbG9y
ID0gbWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgb3ZlcnJpZGVM
aWdodG5lc3MsIG92ZXJyaWRlQWxwaGFNdWx0aXBsaWVyICogYWxwaGEgfSkpOwogCiAgICAgICAg
ICAgICAgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5Q29sb3IsIENTU1ZhbHVlQ3VycmVudGNvbG9yKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGFuY2hvckVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlU
ZXh0RGVjb3JhdGlvbkNvbG9yLCB1bmRlcmxpbmVDb2xvci5zZXJpYWxpemF0aW9uRm9yQ1NTKCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNzUsNyArMzc1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpzZXRTdAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc3R5bGUuaXNDdXJy
ZW50Q29sb3IoKSkKLSAgICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50Q29sb3IoY2Fu
dmFzQmFzZSgpKS5jb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhzdHlsZS5v
dmVycmlkZUFscGhhKCkpKTsKKyAgICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50Q29s
b3IoY2FudmFzQmFzZSgpKS5jb2xvcldpdGhBbHBoYShzdHlsZS5vdmVycmlkZUFscGhhKCkpKTsK
ICAgICBlbHNlCiAgICAgICAgIGNoZWNrT3JpZ2luKHN0eWxlLmNhbnZhc1BhdHRlcm4oKS5nZXQo
KSk7CiAKQEAgLTM5OCw3ICszOTgsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OnNldEZpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzdHlsZS5pc0N1cnJlbnRDb2xv
cigpKQotICAgICAgICBzdHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52YXNCYXNl
KCkpLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKHN0eWxlLm92ZXJyaWRl
QWxwaGEoKSkpOworICAgICAgICBzdHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52
YXNCYXNlKCkpLmNvbG9yV2l0aEFscGhhKHN0eWxlLm92ZXJyaWRlQWxwaGEoKSkpOwogICAgIGVs
c2UKICAgICAgICAgY2hlY2tPcmlnaW4oc3R5bGUuY2FudmFzUGF0dGVybigpLmdldCgpKTsKIApA
QCAtMTMwMiw3ICsxMzAyLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpz
ZXRTaAogICAgICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgY29s
b3IuY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoYWxwaGEpKTsKKyAgICBz
ZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb2xvci5jb2xvcldpdGhB
bHBoYShhbHBoYSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNl
dFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9hdCBncmF5
TGV2ZWwsIGZsb2F0IGFscGhhKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1N0eWxlLmNwcAkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNyArMTQzLDcgQEAg
Q2FudmFzU3R5bGUgQ2FudmFzU3R5bGU6OmNyZWF0ZUZyb21TdHJpbgogICAgIGlmICghY29sb3Iu
aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIGNvbG9yLmNvbG9y
V2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGFscGhhKTsKKyAgICByZXR1cm4gY29s
b3IuY29sb3JXaXRoQWxwaGEoYWxwaGEpOwogfQogCiBib29sIENhbnZhc1N0eWxlOjppc0VxdWl2
YWxlbnRDb2xvcihjb25zdCBDYW52YXNTdHlsZSYgb3RoZXIpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNw
cAkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksNyBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBKU09OOjpPYmplCiAgICAgZWxzZSBpZiAoYSA+
IDEpCiAgICAgICAgIGEgPSAxOwogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyLCBnLCBi
LCBzdGF0aWNfY2FzdDxpbnQ+KGEgKiAyNTUpKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9y
KHIsIGcsIGIsIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYSkpOwogfQogCiBzdGF0aWMgQ29sb3Ig
cGFyc2VDb25maWdDb2xvcihjb25zdCBTdHJpbmcmIGZpZWxkTmFtZSwgY29uc3QgSlNPTjo6T2Jq
ZWN0KiBjb25maWdPYmplY3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSwxMSArMTIxLDggQEAg
Q29sb3IgQ29sb3I6OmxpZ2h0KCkgY29uc3QKICAgICAvLyBIYXJkY29kZSB0aGlzIGNvbW1vbiBj
YXNlIGZvciBzcGVlZC4KICAgICBpZiAoIWlzRXh0ZW5kZWQoKSAmJiBhc1NpbXBsZSgpID09IGJs
YWNrKQogICAgICAgICByZXR1cm4gbGlnaHRlbmVkQmxhY2s7Ci0gICAgCi0gICAgY29uc3QgZmxv
YXQgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CiAKICAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKLQogICAgIGZsb2F0IHYgPSBz
dGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAKICAgICBpZiAodiA9PSAwLjBmKQpAQCAtMTMzLDEyICsx
MzAsNyBAQCBDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAogCiAgICAgZmxvYXQgbXVsdGlwbGll
ciA9IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikgLyB2OwogCi0gICAgcmV0dXJuIG1ha2VTaW1w
bGVDb2xvcigKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxl
RmFjdG9yKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxl
RmFjdG9yKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxl
RmFjdG9yKSwKLSAgICAgICAgYWxwaGEoKQotICAgICk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvckZyb21GbG9hdHMobXVsdGlwbGllciAqIHIsIG11bHRpcGxpZXIgKiBnLCBtdWx0aXBsaWVy
ICogYiwgYSk7CiB9CiAKIENvbG9yIENvbG9yOjpkYXJrKCkgY29uc3QKQEAgLTE0NywxOSArMTM5
LDEyIEBAIENvbG9yIENvbG9yOjpkYXJrKCkgY29uc3QKICAgICBpZiAoIWlzRXh0ZW5kZWQoKSAm
JiBhc1NpbXBsZSgpID09IHdoaXRlKQogICAgICAgICByZXR1cm4gZGFya2VuZWRXaGl0ZTsKICAg
ICAKLSAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IG5leHRhZnRlcmYoMjU2LjBmLCAwLjBm
KTsKLQogICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwog
CiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBtdWx0aXBs
aWVyID0gc3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2KTsKIAotICAgIHJldHVybiBtYWtl
U2ltcGxlQ29sb3IoCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIHIgKiBz
Y2FsZUZhY3RvciksCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGcgKiBz
Y2FsZUZhY3RvciksCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGIgKiBz
Y2FsZUZhY3RvciksCi0gICAgICAgIGFscGhhKCkKLSAgICApOworICAgIHJldHVybiBtYWtlU2lt
cGxlQ29sb3JGcm9tRmxvYXRzKG11bHRpcGxpZXIgKiByLCBtdWx0aXBsaWVyICogZywgbXVsdGlw
bGllciAqIGIsIGEpOwogfQogCiBib29sIENvbG9yOjppc0RhcmsoKSBjb25zdApAQCAtMjM1LDQx
ICsyMjAsMTIgQEAgQ29sb3IgQ29sb3I6OmJsZW5kV2l0aFdoaXRlKCkgY29uc3QKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1Db2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnko
ZmxvYXQgYW1vdW50KSBjb25zdAotewotICAgIGZsb2F0IG5ld0FscGhhID0gYW1vdW50ICogYWxw
aGFBc0Zsb2F0KCk7Ci0gICAgcmV0dXJuIGNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsKLX0KLQot
Q29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJv
dW5kaW5nKGZsb2F0IGFtb3VudCkgY29uc3QKLXsKLSAgICBmbG9hdCBuZXdBbHBoYSA9IGFtb3Vu
dCAqIGFscGhhQXNGbG9hdCgpOwotICAgIHJldHVybiBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJu
YXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7Ci19Ci0KIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBo
YShmbG9hdCBhbHBoYSkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICBy
ZXR1cm4gYXNFeHRlbmRlZCgpLmNvbG9yV2l0aEFscGhhKGFscGhhKTsKIAotICAgIC8vIEZJWE1F
OiBUaGlzIGlzIHdoZXJlIHRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIGNvbG9yV2l0aEFscGhh
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nLgotICAgIHVpbnQ4X3QgbmV3QWxwaGEgPSBhbHBoYSAq
IDB4RkY7Ci0KLSAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKG5l
d0FscGhhKTsKLSAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAgICByZXN1bHQudGFnQXNTZW1h
bnRpYygpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUNvbG9yIENvbG9yOjpjb2xvcldpdGhB
bHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhmbG9hdCBhbHBoYSkgY29uc3QKLXsKLSAgICBp
ZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmNvbG9yV2l0aEFs
cGhhKGFscGhhKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdoZXJlIHRoaXMgZnVuY3Rpb24g
ZGlmZmVycyBmcm9tIGNvbG9yV2l0aEFscGhhVXNpbmcuCi0gICAgdWludDhfdCBuZXdBbHBoYSA9
IHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChhbHBoYSk7Ci0KLSAgICBDb2xvciByZXN1
bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsKKyAgICBDb2xvciByZXN1
bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxw
aGEpKTsKICAgICBpZiAoaXNTZW1hbnRpYygpKQogICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRp
YygpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0yNzksNyArMjM1LDcgQEAgQ29sb3IgQ29sb3I6
OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYQogewogICAgIGlmIChpc0V4dGVuZGVkKCkpCiAg
ICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShhbHBoYSk7
Ci0gICAgcmV0dXJuIGFzU2ltcGxlKCkuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShzY2FsZVJvdW5k
QW5kQ2xhbXBDb2xvckNoYW5uZWwoYWxwaGEpKTsKKyAgICByZXR1cm4gYXNTaW1wbGUoKS5pbnZl
cnRlZENvbG9yV2l0aEFscGhhKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEpKTsKIH0KIAog
Q29sb3IgQ29sb3I6OnNlbWFudGljQ29sb3IoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyAr
MTIyLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBpc0V4
dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA9PSAxLjAgOiBhc1NpbXBsZSgpLmlzT3Bh
cXVlKCk7IH0KICAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQo
KSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID4gMC4wIDogYXNTaW1wbGUoKS5pc1Zpc2libGUoKTsg
fQogCi0gICAgaW50IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRl
bmRlZCgpLmFscGhhKCkgKiAyNTUgOiBhc1NpbXBsZSgpLmFscGhhQ29tcG9uZW50KCk7IH0KKyAg
ICB1aW50OF90IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gY29udmVydFRv
Q29tcG9uZW50Qnl0ZShhc0V4dGVuZGVkKCkuYWxwaGEoKSkgOiBhc1NpbXBsZSgpLmFscGhhQ29t
cG9uZW50KCk7IH0KICAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4
dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IGFzU2ltcGxlKCkuYWxwaGFDb21wb25l
bnRBc0Zsb2F0KCk7IH0KIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKQEAgLTE0NiwxNyAr
MTQ2LDE2IEBAIHB1YmxpYzoKICAgICBDb2xvciBibGVuZFdpdGhXaGl0ZSgpIGNvbnN0OwogCiAg
ICAgQ29sb3IgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3Q7CisgICAg
Q29sb3IgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0
OwogCiAgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxvYXQpIGNvbnN0Owot
ICAgIENvbG9yIGNvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKKyAgICBDb2xvciBjb2xvcldp
dGhBbHBoYU11bHRpcGxpZWRCeShPcHRpb25hbDxmbG9hdD4pIGNvbnN0OwogCi0gICAgLy8gRklY
TUU6IFJlbW92ZSB0aGUgbmVlZCBmb3IgQWx0ZXJuYXRpdmVSb3VuZGluZyB2YXJpYW50cyBieSBz
ZXR0bGluZyBvbiBhIHJvdW5kaW5nIGJlaGF2aW9yLgotICAgIENvbG9yIGNvbG9yV2l0aEFscGhh
TXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKE9wdGlvbmFsPGZsb2F0PikgY29u
c3Q7Ci0gICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZl
Um91bmRpbmcoZmxvYXQpIGNvbnN0OwotICAgIENvbG9yIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRl
cm5hdGl2ZVJvdW5kaW5nKE9wdGlvbmFsPGZsb2F0PikgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgQ29sb3IgY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQpIGNv
bnN0OworICAgIENvbG9yIGNvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKKyAgICBDb2xvciBj
b2xvcldpdGhBbHBoYShPcHRpb25hbDxmbG9hdD4pIGNvbnN0OwogCiAgICAgQ29sb3Igb3BhcXVl
Q29sb3IoKSBjb25zdCB7IHJldHVybiBjb2xvcldpdGhBbHBoYSgxLjBmKTsgfQorCiAgICAgQ29s
b3Igc2VtYW50aWNDb2xvcigpIGNvbnN0OwogCiAgICAgLy8gVHJ1ZSBpZiB0aGUgY29sb3Igb3Jp
Z2luYXRlZCBmcm9tIGEgQ1NTIHNlbWFudGljIGNvbG9yIG5hbWUuCkBAIC0yODksMTQgKzI4OCwy
NCBAQCBpbmxpbmUgdW5zaWduZWQgQ29sb3I6Omhhc2goKSBjb25zdAogICAgIHJldHVybiBXVEY6
OmludEhhc2gobV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyk7CiB9CiAKLWlubGluZSBD
b2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91
bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdAoraW5saW5lIENvbG9yIENvbG9yOjpp
bnZlcnRlZENvbG9yV2l0aEFscGhhKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gYWxwaGEgPyBpbnZlcnRlZENvbG9yV2l0aEFscGhhKGFscGhhLnZhbHVlKCkpIDog
KnRoaXM7Cit9CisKK2lubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVk
QnkoZmxvYXQgYW1vdW50KSBjb25zdAoreworICAgIHJldHVybiBjb2xvcldpdGhBbHBoYShhbW91
bnQgKiBhbHBoYUFzRmxvYXQoKSk7Cit9CisKK2lubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRo
QWxwaGFNdWx0aXBsaWVkQnkoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdAogewotICAgIHJl
dHVybiBhbHBoYSA/IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJv
dW5kaW5nKGFscGhhLnZhbHVlKCkpIDogKnRoaXM7CisgICAgcmV0dXJuIGFscGhhID8gY29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnkoYWxwaGEudmFsdWUoKSkgOiAqdGhpczsKIH0KIAotaW5saW5l
IENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRp
b25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0CitpbmxpbmUgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFs
cGhhKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QKIHsKLSAgICByZXR1cm4gYWxwaGEgPyBj
b2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhhbHBoYS52YWx1ZSgpKSA6ICp0
aGlzOworICAgIHJldHVybiBhbHBoYSA/IGNvbG9yV2l0aEFscGhhKGFscGhhLnZhbHVlKCkpIDog
KnRoaXM7CiB9CiAKIGlubGluZSBjb25zdCBFeHRlbmRlZENvbG9yJiBDb2xvcjo6YXNFeHRlbmRl
ZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0
aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDE0ICszMSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBhcmVFc3NlbnRp
YWxseUVxdWFsKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGEsIGNvbnN0IENvbG9yQ29t
cG9uZW50czxmbG9hdD4mIGIpCi17Ci0gICAgcmV0dXJuIFdURjo6YXJlRXNzZW50aWFsbHlFcXVh
bChhWzBdLCBiWzBdKQotICAgICAgICAmJiBXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYVsxXSwg
YlsxXSkKLSAgICAgICAgJiYgV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFbMl0sIGJbMl0pCi0g
ICAgICAgICYmIFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhWzNdLCBiWzNdKTsKLX0KLQogLy8g
VGhlc2UgYXJlIHRoZSBzdGFuZGFyZCBzUkdCIDwtPiBsaW5lYXJSR0IgY29udmVyc2lvbiBmdW5j
dGlvbnMgKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IpLgogZmxvYXQgbGluZWFy
VG9SR0JDb2xvckNvbXBvbmVudChmbG9hdCBjKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCShyZXZpc2lvbiAyNjI2NTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MSwyMSArNTEsMTQgQEAgZmxvYXQgY29udHJhc3RSYXRpbyhjb25z
dCBDb2xvckNvbXBvbmVudAogCiBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IHByZW11bHRpcGxpZWQo
Y29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRzKTsKIAotYm9vbCBh
cmVFc3NlbnRpYWxseUVxdWFsKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mLCBjb25zdCBD
b2xvckNvbXBvbmVudHM8ZmxvYXQ+Jik7Ci0KLWlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBD
b2xvckNoYW5uZWwoaW50IHZhbHVlKQoraW5saW5lIHVpbnQ4X3QgY29udmVydFRvQ29tcG9uZW50
Qnl0ZShmbG9hdCBmKQogewotICAgIHJldHVybiBzdGQ6OmNsYW1wKHZhbHVlLCAwLCAyNTUpOwor
ICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0YXRpY19jYXN0PGludD4oc3RkOjpscm91bmRmKGYgKiAy
NTUuMGYpKSwgMCwgMjU1KTsKIH0KIAotaW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9y
Q2hhbm5lbChmbG9hdCB2YWx1ZSkKK2NvbnN0ZXhwciBmbG9hdCBjb252ZXJ0VG9Db21wb25lbnRG
bG9hdCh1aW50OF90IGJ5dGUpCiB7Ci0gICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpyb3VuZCh2
YWx1ZSksIDAuZiwgMjU1LmYpOwotfQotCi1pbmxpbmUgdWludDhfdCBzY2FsZVJvdW5kQW5kQ2xh
bXBDb2xvckNoYW5uZWwoZmxvYXQgZikKLXsKLSAgICByZXR1cm4gc3RkOjpjbGFtcChzdGF0aWNf
Y2FzdDxpbnQ+KGxyb3VuZGYoMjU1LjBmICogZikpLCAwLCAyNTUpOworICAgIHJldHVybiBieXRl
IC8gMjU1LjBmOwogfQogCiBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWlu
dDE2X3QgdmFsdWUpCkBAIC04Miw1ICs3NSw0IEBAIGNvbnN0ZXhwciB1aW50MTZfdCBmYXN0RGl2
aWRlQnkyNTUodWludDEKICAgICByZXR1cm4gYXBwcm94aW1hdGlvbiArIChyZW1haW5kZXIgPj4g
OCk7CiB9CiAKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAkocmV2aXNpb24gMjYyNjU5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NywzNCArNjcsMTMgQEAgU2ltcGxlQ29sb3IgbWFrZVVucHJlbXVs
dGlwbGllZFNpbXBsZUNvbAogICAgIHJldHVybiBwaXhlbENvbG9yOwogfQogCi1TaW1wbGVDb2xv
ciBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZs
b2F0IGEpCi17Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAgc2NhbGVSb3Vu
ZEFuZENsYW1wQ29sb3JDaGFubmVsKHIpLAotICAgICAgICBzY2FsZVJvdW5kQW5kQ2xhbXBDb2xv
ckNoYW5uZWwoZyksCi0gICAgICAgIHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChiKSwK
LSAgICAgICAgc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGEpCi0gICAgKTsKLX0KLQot
U2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoZmxvYXQgaHVlLCBmbG9hdCBzYXR1
cmF0aW9uLCBmbG9hdCBsaWdodG5lc3MsIGZsb2F0IGFscGhhKQotewotICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0p
OwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoCi0gICAgICAgIHJvdW5kKHIgKiAyNTUuMGYp
LAotICAgICAgICByb3VuZChnICogMjU1LjBmKSwKLSAgICAgICAgcm91bmQoYiAqIDI1NS4wZiks
Ci0gICAgICAgIHJvdW5kKGEgKiAyNTUuMGYpCi0gICAgKTsKLX0KLQogU2ltcGxlQ29sb3IgbWFr
ZVNpbXBsZUNvbG9yRnJvbUNNWUtBKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGss
IGZsb2F0IGEpCiB7Ci0gICAgZG91YmxlIGNvbG9ycyA9IDEgLSBrOwotICAgIGludCByID0gc3Rh
dGljX2Nhc3Q8aW50PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIChjb2xvcnMgKiAoMSAtIGMpKSk7Ci0g
ICAgaW50IGcgPSBzdGF0aWNfY2FzdDxpbnQ+KG5leHRhZnRlcigyNTYsIDApICogKGNvbG9ycyAq
ICgxIC0gbSkpKTsKLSAgICBpbnQgYiA9IHN0YXRpY19jYXN0PGludD4obmV4dGFmdGVyKDI1Niwg
MCkgKiAoY29sb3JzICogKDEgLSB5KSkpOwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3Iociwg
ZywgYiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5leHRhZnRlcigyNTYsIDApICogYSkpOworICAgIGZs
b2F0IGNvbG9ycyA9IDEgLSBrOworICAgIGZsb2F0IHIgPSBjb2xvcnMgKiAoMS4wZiAtIGMpOwor
ICAgIGZsb2F0IGcgPSBjb2xvcnMgKiAoMS4wZiAtIG0pOworICAgIGZsb2F0IGIgPSBjb2xvcnMg
KiAoMS4wZiAtIHkpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKHIsIGcs
IGIsIGEpOwogfQogCiBTdHJpbmcgU2ltcGxlQ29sb3I6OnNlcmlhbGl6YXRpb25Gb3JIVE1MKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxl
Q29sb3IuaAkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2ltcGxlQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJs
aWM6CiAgICAgY29uc3RleHByIHVpbnQ4X3QgYmx1ZUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWU7IH0KICAgICBjb25zdGV4cHIgdWludDhfdCBhbHBoYUNvbXBvbmVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWUgPj4gMjQ7IH0KIAotICAgIGNvbnN0ZXhwciBmbG9hdCBhbHBoYUNv
bXBvbmVudEFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGFD
b21wb25lbnQoKSkgLyAweEZGOyB9CisgICAgY29uc3RleHByIGZsb2F0IGFscGhhQ29tcG9uZW50
QXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGFscGhhQ29t
cG9uZW50KCkpOyB9CiAKICAgICBjb25zdGV4cHIgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0
dXJuIGFscGhhQ29tcG9uZW50KCkgPT0gMHhGRjsgfQogICAgIGNvbnN0ZXhwciBib29sIGlzVmlz
aWJsZSgpIGNvbnN0IHsgcmV0dXJuIGFscGhhQ29tcG9uZW50KCk7IH0KQEAgLTY3LDcgKzY3LDcg
QEAgcHVibGljOgogCiAgICAgY29uc3RleHByIENvbG9yQ29tcG9uZW50czxmbG9hdD4gYXNTUkdC
RmxvYXRDb21wb25lbnRzKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiB7IHJlZENvbXBv
bmVudCgpIC8gMjU1LjBmLCBncmVlbkNvbXBvbmVudCgpIC8gMjU1LjBmLCBibHVlQ29tcG9uZW50
KCkgLyAyNTUuMGYsICBhbHBoYUNvbXBvbmVudCgpIC8gMjU1LjBmIH07CisgICAgICAgIHJldHVy
biB7IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KHJlZENvbXBvbmVudCgpKSwgY29udmVydFRvQ29t
cG9uZW50RmxvYXQoZ3JlZW5Db21wb25lbnQoKSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGJs
dWVDb21wb25lbnQoKSksICBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChhbHBoYUNvbXBvbmVudCgp
KSB9OwogICAgIH0KIAogICAgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+CkBAIC05NSwxNiArOTUs
MTQgQEAgY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbgogY29uc3RleHBy
IFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7
CiAKIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihjb25zdCBDb2xvckNvbXBvbmVudHM8Zmxv
YXQ+JiBzUkdCQ29tcG9uZW50cyk7CitTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tRmxv
YXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpOworU2ltcGxlQ29sb3IgbWFr
ZVNpbXBsZUNvbG9yRnJvbUNNWUtBKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGss
IGZsb2F0IGEpOwogCiBTaW1wbGVDb2xvciBtYWtlUHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKGlu
dCByLCBpbnQgZywgaW50IGIsIGludCBhLCBib29sIGNlaWxpbmcgPSB0cnVlKTsKIFNpbXBsZUNv
bG9yIG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoU2ltcGxlQ29sb3IpOwogU2ltcGxlQ29s
b3IgbWFrZVVucHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGlu
dCBhKTsKIFNpbXBsZUNvbG9yIG1ha2VVbnByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihTaW1wbGVD
b2xvcik7CiAKLVdFQkNPUkVfRVhQT1JUIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21G
bG9hdHMoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7Ci1XRUJDT1JFX0VYUE9S
VCBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShmbG9hdCBoLCBmbG9hdCBzLCBm
bG9hdCBsLCBmbG9hdCBhKTsKLVNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21DTVlLQShm
bG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKTsKLQogaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQogewogICAgIHJldHVy
biBhLnZhbHVlKCkgPT0gYi52YWx1ZSgpOwpAQCAtMTE3LDcgKzExNSw3IEBAIGlubGluZSBib29s
IG9wZXJhdG9yIT0oU2ltcGxlQ29sb3IgYSwgU2kKIAogY29uc3RleHByIFNpbXBsZUNvbG9yIG1h
a2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiKQogewotICAgIHJldHVybiBtYWtlU2lt
cGxlQ29sb3IociwgZywgYiwgMHhGRik7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhf
dD4oc3RkOjpjbGFtcChyLCAwLCAweEZGKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xh
bXAoZywgMCwgMHhGRikpLCBzdGF0aWNfY2FzdDx1aW50OF90PihzdGQ6OmNsYW1wKGIsIDAsIDB4
RkYpKSwgMHhGRiB9OwogfQogCiBjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9y
KGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQpAQCAtMTI4LDEyICsxMjYsMTIgQEAgY29uc3Rl
eHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbgogaW5saW5lIFNpbXBsZUNvbG9yIG1h
a2VTaW1wbGVDb2xvcihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9uZW50
cykKIHsKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHNSR0JDb21wb25lbnRzOwotICAgIHJldHVy
biBtYWtlU2ltcGxlQ29sb3IoCi0gICAgICAgIHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5l
bChyKSwKLSAgICAgICAgc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGcpLAotICAgICAg
ICBzY2FsZVJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoYiksCi0gICAgICAgIHNjYWxlUm91bmRB
bmRDbGFtcENvbG9yQ2hhbm5lbChhKQotICAgICk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xv
ckZyb21GbG9hdHMociwgZywgYiwgYSk7Cit9CisKK2lubGluZSBTaW1wbGVDb2xvciBtYWtlU2lt
cGxlQ29sb3JGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCit7
CisgICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50Qnl0ZShyKSwgY29udmVydFRvQ29tcG9u
ZW50Qnl0ZShnKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShiKSwgY29udmVydFRvQ29tcG9uZW50
Qnl0ZShhKSB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0
aW9ucy5jcHAJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcg
Kzc4LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZUNhaXJvQ29udGV4dFNvdXJjZShjYQogICAgIH0g
ZWxzZSB7CiAgICAgICAgIC8vIFNvbGlkIGNvbG9yIHNvdXJjZQogICAgICAgICBpZiAoZ2xvYmFs
QWxwaGEgPCAxKQotICAgICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgY29sb3Iu
Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZ2xvYmFs
QWxwaGEpKTsKKyAgICAgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIGNvbG9yLmNv
bG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGdsb2JhbEFscGhhKSk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIGNvbG9yKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAko
cmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Q29sb3JDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDggKzc4LDcgQEAgc3RhdGljIFNpbXBs
ZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21DRwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNjYWxlRmFjdG9yID0gbmV4dGFm
dGVyKDI1Ni4wLCAwLjApOwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IociAqIHNjYWxlRmFj
dG9yLCBnICogc2NhbGVGYWN0b3IsIGIgKiBzY2FsZUZhY3RvciwgYSAqIHNjYWxlRmFjdG9yKTsK
KyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKTsKIH0KIAog
Q29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAJKHJldmlzaW9uIDI2
MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9v
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBGRUZsb29kOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gY29sb3IgPSBmbG9vZENvbG9yKCkuY29sb3JXaXRoQWxwaGFNdWx0aXBs
aWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvb2RPcGFjaXR5KCkpOworICAgIGF1dG8g
Y29sb3IgPSBmbG9vZENvbG9yKCkuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxvb2RPcGFj
aXR5KCkpOwogICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBjb2xvcik7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMu
bW0JKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db2xvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtODgsOCArODgsNyBAQCBzdGF0aWMg
U2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbU5TCiAgICAgW3JnYkNvbG9yIGdldFJlZDom
cmVkQ29tcG9uZW50IGdyZWVuOiZncmVlbkNvbXBvbmVudCBibHVlOiZibHVlQ29tcG9uZW50IGFs
cGhhOiZhbHBoYV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXIoMjU2LjAsIDAuMCk7Ci0gICAg
cmV0dXJuIG1ha2VTaW1wbGVDb2xvcihzY2FsZUZhY3RvciAqIHJlZENvbXBvbmVudCwgc2NhbGVG
YWN0b3IgKiBncmVlbkNvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBibHVlQ29tcG9uZW50LCBzY2Fs
ZUZhY3RvciAqIGFscGhhKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhy
ZWRDb21wb25lbnQsIGdyZWVuQ29tcG9uZW50LCBibHVlQ29tcG9uZW50LCBhbHBoYSk7CiB9CiAK
IENvbG9yIGNvbG9yRnJvbU5TQ29sb3IoTlNDb2xvciAqY29sb3IpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvQ29sb3JJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvQ29sb3JJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3LDgg
KzQ3LDcgQEAgQ29sb3IgY29sb3JGcm9tVUlDb2xvcihVSUNvbG9yICpjb2xvcikKIAogICAgIFtj
b2xvciBnZXRSZWQ6JnJlZENvbXBvbmVudCBncmVlbjomZ3JlZW5Db21wb25lbnQgYmx1ZTomYmx1
ZUNvbXBvbmVudCBhbHBoYTomYWxwaGFdOwogCi0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBzY2Fs
ZUZhY3RvciA9IG5leHRhZnRlcigyNTYuMCwgMC4wKTsKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNv
bG9yKHNjYWxlRmFjdG9yICogcmVkQ29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGdyZWVuQ29tcG9u
ZW50LCBzY2FsZUZhY3RvciAqIGJsdWVDb21wb25lbnQsIHNjYWxlRmFjdG9yICogYWxwaGEpOwor
ICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKHJlZENvbXBvbmVudCwgZ3JlZW5D
b21wb25lbnQsIGJsdWVDb21wb25lbnQsIGFscGhhKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
NjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIENvbG9yIFNWR1N0b3BFbGVtZW50OjpzdG9wQ29sb3JJ
bmNsdWRpbmcKICAgICBhdXRvJiBzdmdTdHlsZSA9IHN0eWxlLnN2Z1N0eWxlKCk7CiAgICAgYXV0
byBzdG9wQ29sb3IgPSBzdHlsZS5jb2xvclJlc29sdmluZ0N1cnJlbnRDb2xvcihzdmdTdHlsZS5z
dG9wQ29sb3IoKSk7CiAKLSAgICByZXR1cm4gc3RvcENvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlw
bGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKHN2Z1N0eWxlLnN0b3BPcGFjaXR5KCkpOwor
ICAgIHJldHVybiBzdG9wQ29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoc3ZnU3R5bGUu
c3RvcE9wYWNpdHkoKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0
aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVl
RnVuY3Rpb25JbXBsLmgJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9w
cm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE0LDYgKzExNCwxNiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgor
ICAgIGlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoaW50IHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Y2xhbXAodmFsdWUsIDAsIDI1NSk7CisgICAgfQor
CisgICAgaW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChmbG9hdCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6cm91bmQodmFsdWUpLCAw
LjBmLCAyNTUuMGYpOworICAgIH0KKwogICAgIHZvaWQgYWRkRnJvbUFuZFRvVmFsdWVzKFNWR0Vs
ZW1lbnQqKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9mcm9t
LnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbQkocmV2aXNpb24gMjYyNjU5KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTUxMyw3ICs1MTMsNyBAQCBzdGF0aWMgV2ViQ29yZTo6Q29sb3Igc2Nyb2xsVmlld0Jh
Y2tncm91CiAgICAgaWYgKHpvb21TY2FsZSA8IG1pbmltdW1ab29tU2NhbGUpIHsKICAgICAgICAg
Q0dGbG9hdCBzbG9wZSA9IDEyOwogICAgICAgICBDR0Zsb2F0IG9wYWNpdHkgPSBzdGQ6Om1heDxD
R0Zsb2F0PigxIC0gc2xvcGUgKiAobWluaW11bVpvb21TY2FsZSAtIHpvb21TY2FsZSksIDApOwot
ICAgICAgICBjb2xvciA9IGNvbG9yLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5k
aW5nKG9wYWNpdHkpOworICAgICAgICBjb2xvciA9IGNvbG9yLmNvbG9yV2l0aEFscGhhKG9wYWNp
dHkpOwogICAgIH0KIAogICAgIHJldHVybiBjb2xvcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401275</attachid>
            <date>2020-06-06 13:20:16 -0700</date>
            <delta_ts>2020-06-06 13:30:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212871-20200606132015.patch</filename>
            <type>text/plain</type>
            <size>29502</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDIwLTA2LTA2ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvcjogVW5pZnkg
cm91bmRpbmcgLyBjbGFtcGluZyBjb252ZXJzaW9ucyBiZXR3ZWVuIDAtMSBmbG9hdCBjb21wb25l
bnRzIGFuZCAwLTI1NSBieXRlIGNvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjg3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdJUC4KKworICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmlsbFN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
U3R5bGU6OmNyZWF0ZUZyb21TdHJpbmdXaXRoT3ZlcnJpZGVBbHBoYSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkYXJrIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRp
bmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFs
cGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFscGhh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6YXJlRXNzZW50aWFsbHlFcXVhbCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnRUb0NvbXBvbmVudEJ5dGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRv
Q29tcG9uZW50RmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6cm91bmRBbmRDbGFtcENvbG9yQ2hh
bm5lbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzY2FsZVJvdW5kQW5kQ2xhbXBDb2xv
ckNoYW5uZWwpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNv
bG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEpOgorICAgICAgICAoV2Vi
Q29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVDb2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmFscGhh
Q29tcG9uZW50QXNGbG9hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6
YXNTUkdCRmxvYXRDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1w
bGVDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xvcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NvbG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9y
RnJvbU5TQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9Db2xvcklPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbG9yRnJvbVVJQ29sb3IpOgorICAgICAgICAqIHN2Zy9TVkdTdG9wRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5j
bHVkaW5nT3BhY2l0eSBjb25zdCk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0aW9uQ29sb3JGdW5jdGlvbjo6cm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbCk6CisKIDIwMjAt
MDYtMDYgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXSBB
ZGQgc3VwcG9ydCBmb3Igd2lkdGg6IG1pbi9tYXgtY29udGVudApJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAko
cmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDIsNyArNjQyLDcgQEAgc3Rh
dGljIENvbG9yIHBhcnNlSFNMUGFyYW1ldGVycyhDU1NQYXJzZQogICAgIGlmICghYXJncy5hdEVu
ZCgpKQogICAgICAgICByZXR1cm4gQ29sb3IoKTsKIAotICAgIHJldHVybiBtYWtlU2ltcGxlQ29s
b3JGcm9tSFNMQShzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVswXSksIHN0YXRpY19jYXN0
PGZsb2F0Pihjb2xvckFycmF5WzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMl0p
LCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9y
KGhzbFRvU1JHQih7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzBdKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMV0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsy
XSksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkgfSkpOwogfQogCiBzdGF0aWMgQ29sb3IgcGFy
c2VDb2xvckZ1bmN0aW9uUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJl
dmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVj
dGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNjI1LDcgKzYyNSw3IEBAIE5TQXJyYXkgKkRhdGFE
ZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblIKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNv
IHRoZSBjb2xvciB3aWxsIGFwcGVhciBvbiBsaWdodCBhbmQgZGFyayBiYWNrZ3JvdW5kcywgc2lu
Y2Ugb25seSBvbmUgY29sb3IgY2FuIGJlIHNwZWNpZmllZC4KICAgICAgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSBvdmVycmlkZUxpZ2h0bmVzcyA9IDAuNTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSBvdmVycmlkZUFscGhhTXVsdGlwbGllciA9IDAuMzg7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBhdXRvIHVuZGVybGluZUNvbG9yID0gbWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEo
aHVlLCBzYXR1cmF0aW9uLCBvdmVycmlkZUxpZ2h0bmVzcywgb3ZlcnJpZGVBbHBoYU11bHRpcGxp
ZXIgKiBhbHBoYSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVuZGVybGluZUNvbG9y
ID0gbWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgb3ZlcnJpZGVM
aWdodG5lc3MsIG92ZXJyaWRlQWxwaGFNdWx0aXBsaWVyICogYWxwaGEgfSkpOwogCiAgICAgICAg
ICAgICAgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5Q29sb3IsIENTU1ZhbHVlQ3VycmVudGNvbG9yKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGFuY2hvckVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlU
ZXh0RGVjb3JhdGlvbkNvbG9yLCB1bmRlcmxpbmVDb2xvci5zZXJpYWxpemF0aW9uRm9yQ1NTKCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNzUsNyArMzc1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpzZXRTdAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc3R5bGUuaXNDdXJy
ZW50Q29sb3IoKSkKLSAgICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50Q29sb3IoY2Fu
dmFzQmFzZSgpKS5jb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhzdHlsZS5v
dmVycmlkZUFscGhhKCkpKTsKKyAgICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50Q29s
b3IoY2FudmFzQmFzZSgpKS5jb2xvcldpdGhBbHBoYShzdHlsZS5vdmVycmlkZUFscGhhKCkpKTsK
ICAgICBlbHNlCiAgICAgICAgIGNoZWNrT3JpZ2luKHN0eWxlLmNhbnZhc1BhdHRlcm4oKS5nZXQo
KSk7CiAKQEAgLTM5OCw3ICszOTgsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OnNldEZpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzdHlsZS5pc0N1cnJlbnRDb2xv
cigpKQotICAgICAgICBzdHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52YXNCYXNl
KCkpLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKHN0eWxlLm92ZXJyaWRl
QWxwaGEoKSkpOworICAgICAgICBzdHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52
YXNCYXNlKCkpLmNvbG9yV2l0aEFscGhhKHN0eWxlLm92ZXJyaWRlQWxwaGEoKSkpOwogICAgIGVs
c2UKICAgICAgICAgY2hlY2tPcmlnaW4oc3R5bGUuY2FudmFzUGF0dGVybigpLmdldCgpKTsKIApA
QCAtMTMwMiw3ICsxMzAyLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpz
ZXRTaAogICAgICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgY29s
b3IuY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoYWxwaGEpKTsKKyAgICBz
ZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb2xvci5jb2xvcldpdGhB
bHBoYShhbHBoYSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNl
dFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9hdCBncmF5
TGV2ZWwsIGZsb2F0IGFscGhhKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1N0eWxlLmNwcAkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNyArMTQzLDcgQEAg
Q2FudmFzU3R5bGUgQ2FudmFzU3R5bGU6OmNyZWF0ZUZyb21TdHJpbgogICAgIGlmICghY29sb3Iu
aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIGNvbG9yLmNvbG9y
V2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGFscGhhKTsKKyAgICByZXR1cm4gY29s
b3IuY29sb3JXaXRoQWxwaGEoYWxwaGEpOwogfQogCiBib29sIENhbnZhc1N0eWxlOjppc0VxdWl2
YWxlbnRDb2xvcihjb25zdCBDYW52YXNTdHlsZSYgb3RoZXIpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNw
cAkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksNyBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBKU09OOjpPYmplCiAgICAgZWxzZSBpZiAoYSA+
IDEpCiAgICAgICAgIGEgPSAxOwogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyLCBnLCBi
LCBzdGF0aWNfY2FzdDxpbnQ+KGEgKiAyNTUpKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9y
KHIsIGcsIGIsIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYSkpOwogfQogCiBzdGF0aWMgQ29sb3Ig
cGFyc2VDb25maWdDb2xvcihjb25zdCBTdHJpbmcmIGZpZWxkTmFtZSwgY29uc3QgSlNPTjo6T2Jq
ZWN0KiBjb25maWdPYmplY3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSwxMSArMTIxLDggQEAg
Q29sb3IgQ29sb3I6OmxpZ2h0KCkgY29uc3QKICAgICAvLyBIYXJkY29kZSB0aGlzIGNvbW1vbiBj
YXNlIGZvciBzcGVlZC4KICAgICBpZiAoIWlzRXh0ZW5kZWQoKSAmJiBhc1NpbXBsZSgpID09IGJs
YWNrKQogICAgICAgICByZXR1cm4gbGlnaHRlbmVkQmxhY2s7Ci0gICAgCi0gICAgY29uc3QgZmxv
YXQgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CiAKICAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKLQogICAgIGZsb2F0IHYgPSBz
dGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAKICAgICBpZiAodiA9PSAwLjBmKQpAQCAtMTMzLDEyICsx
MzAsNyBAQCBDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAogCiAgICAgZmxvYXQgbXVsdGlwbGll
ciA9IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikgLyB2OwogCi0gICAgcmV0dXJuIG1ha2VTaW1w
bGVDb2xvcigKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxl
RmFjdG9yKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxl
RmFjdG9yKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxl
RmFjdG9yKSwKLSAgICAgICAgYWxwaGEoKQotICAgICk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvckZyb21GbG9hdHMobXVsdGlwbGllciAqIHIsIG11bHRpcGxpZXIgKiBnLCBtdWx0aXBsaWVy
ICogYiwgYSk7CiB9CiAKIENvbG9yIENvbG9yOjpkYXJrKCkgY29uc3QKQEAgLTE0NywxOSArMTM5
LDEyIEBAIENvbG9yIENvbG9yOjpkYXJrKCkgY29uc3QKICAgICBpZiAoIWlzRXh0ZW5kZWQoKSAm
JiBhc1NpbXBsZSgpID09IHdoaXRlKQogICAgICAgICByZXR1cm4gZGFya2VuZWRXaGl0ZTsKICAg
ICAKLSAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IG5leHRhZnRlcmYoMjU2LjBmLCAwLjBm
KTsKLQogICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwog
CiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBtdWx0aXBs
aWVyID0gc3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2KTsKIAotICAgIHJldHVybiBtYWtl
U2ltcGxlQ29sb3IoCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIHIgKiBz
Y2FsZUZhY3RvciksCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGcgKiBz
Y2FsZUZhY3RvciksCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGIgKiBz
Y2FsZUZhY3RvciksCi0gICAgICAgIGFscGhhKCkKLSAgICApOworICAgIHJldHVybiBtYWtlU2lt
cGxlQ29sb3JGcm9tRmxvYXRzKG11bHRpcGxpZXIgKiByLCBtdWx0aXBsaWVyICogZywgbXVsdGlw
bGllciAqIGIsIGEpOwogfQogCiBib29sIENvbG9yOjppc0RhcmsoKSBjb25zdApAQCAtMjM1LDQx
ICsyMjAsMTIgQEAgQ29sb3IgQ29sb3I6OmJsZW5kV2l0aFdoaXRlKCkgY29uc3QKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1Db2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnko
ZmxvYXQgYW1vdW50KSBjb25zdAotewotICAgIGZsb2F0IG5ld0FscGhhID0gYW1vdW50ICogYWxw
aGFBc0Zsb2F0KCk7Ci0gICAgcmV0dXJuIGNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsKLX0KLQot
Q29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJv
dW5kaW5nKGZsb2F0IGFtb3VudCkgY29uc3QKLXsKLSAgICBmbG9hdCBuZXdBbHBoYSA9IGFtb3Vu
dCAqIGFscGhhQXNGbG9hdCgpOwotICAgIHJldHVybiBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJu
YXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7Ci19Ci0KIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBo
YShmbG9hdCBhbHBoYSkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICBy
ZXR1cm4gYXNFeHRlbmRlZCgpLmNvbG9yV2l0aEFscGhhKGFscGhhKTsKIAotICAgIC8vIEZJWE1F
OiBUaGlzIGlzIHdoZXJlIHRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIGNvbG9yV2l0aEFscGhh
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nLgotICAgIHVpbnQ4X3QgbmV3QWxwaGEgPSBhbHBoYSAq
IDB4RkY7Ci0KLSAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKG5l
d0FscGhhKTsKLSAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAgICByZXN1bHQudGFnQXNTZW1h
bnRpYygpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUNvbG9yIENvbG9yOjpjb2xvcldpdGhB
bHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhmbG9hdCBhbHBoYSkgY29uc3QKLXsKLSAgICBp
ZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmNvbG9yV2l0aEFs
cGhhKGFscGhhKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdoZXJlIHRoaXMgZnVuY3Rpb24g
ZGlmZmVycyBmcm9tIGNvbG9yV2l0aEFscGhhVXNpbmcuCi0gICAgdWludDhfdCBuZXdBbHBoYSA9
IHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChhbHBoYSk7Ci0KLSAgICBDb2xvciByZXN1
bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsKKyAgICBDb2xvciByZXN1
bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxw
aGEpKTsKICAgICBpZiAoaXNTZW1hbnRpYygpKQogICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRp
YygpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0yNzksNyArMjM1LDcgQEAgQ29sb3IgQ29sb3I6
OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYQogewogICAgIGlmIChpc0V4dGVuZGVkKCkpCiAg
ICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShhbHBoYSk7
Ci0gICAgcmV0dXJuIGFzU2ltcGxlKCkuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShzY2FsZVJvdW5k
QW5kQ2xhbXBDb2xvckNoYW5uZWwoYWxwaGEpKTsKKyAgICByZXR1cm4gYXNTaW1wbGUoKS5pbnZl
cnRlZENvbG9yV2l0aEFscGhhKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEpKTsKIH0KIAog
Q29sb3IgQ29sb3I6OnNlbWFudGljQ29sb3IoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyAr
MTIyLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBpc0V4
dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA9PSAxLjAgOiBhc1NpbXBsZSgpLmlzT3Bh
cXVlKCk7IH0KICAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQo
KSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID4gMC4wIDogYXNTaW1wbGUoKS5pc1Zpc2libGUoKTsg
fQogCi0gICAgaW50IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRl
bmRlZCgpLmFscGhhKCkgKiAyNTUgOiBhc1NpbXBsZSgpLmFscGhhQ29tcG9uZW50KCk7IH0KKyAg
ICB1aW50OF90IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gY29udmVydFRv
Q29tcG9uZW50Qnl0ZShhc0V4dGVuZGVkKCkuYWxwaGEoKSkgOiBhc1NpbXBsZSgpLmFscGhhQ29t
cG9uZW50KCk7IH0KICAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4
dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IGFzU2ltcGxlKCkuYWxwaGFDb21wb25l
bnRBc0Zsb2F0KCk7IH0KIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKQEAgLTE0NiwxNyAr
MTQ2LDE2IEBAIHB1YmxpYzoKICAgICBDb2xvciBibGVuZFdpdGhXaGl0ZSgpIGNvbnN0OwogCiAg
ICAgQ29sb3IgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3Q7CisgICAg
Q29sb3IgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0
OwogCiAgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxvYXQpIGNvbnN0Owot
ICAgIENvbG9yIGNvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKKyAgICBDb2xvciBjb2xvcldp
dGhBbHBoYU11bHRpcGxpZWRCeShPcHRpb25hbDxmbG9hdD4pIGNvbnN0OwogCi0gICAgLy8gRklY
TUU6IFJlbW92ZSB0aGUgbmVlZCBmb3IgQWx0ZXJuYXRpdmVSb3VuZGluZyB2YXJpYW50cyBieSBz
ZXR0bGluZyBvbiBhIHJvdW5kaW5nIGJlaGF2aW9yLgotICAgIENvbG9yIGNvbG9yV2l0aEFscGhh
TXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKE9wdGlvbmFsPGZsb2F0PikgY29u
c3Q7Ci0gICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZl
Um91bmRpbmcoZmxvYXQpIGNvbnN0OwotICAgIENvbG9yIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRl
cm5hdGl2ZVJvdW5kaW5nKE9wdGlvbmFsPGZsb2F0PikgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgQ29sb3IgY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQpIGNv
bnN0OworICAgIENvbG9yIGNvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKKyAgICBDb2xvciBj
b2xvcldpdGhBbHBoYShPcHRpb25hbDxmbG9hdD4pIGNvbnN0OwogCiAgICAgQ29sb3Igb3BhcXVl
Q29sb3IoKSBjb25zdCB7IHJldHVybiBjb2xvcldpdGhBbHBoYSgxLjBmKTsgfQorCiAgICAgQ29s
b3Igc2VtYW50aWNDb2xvcigpIGNvbnN0OwogCiAgICAgLy8gVHJ1ZSBpZiB0aGUgY29sb3Igb3Jp
Z2luYXRlZCBmcm9tIGEgQ1NTIHNlbWFudGljIGNvbG9yIG5hbWUuCkBAIC0yODksMTQgKzI4OCwy
NCBAQCBpbmxpbmUgdW5zaWduZWQgQ29sb3I6Omhhc2goKSBjb25zdAogICAgIHJldHVybiBXVEY6
OmludEhhc2gobV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyk7CiB9CiAKLWlubGluZSBD
b2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91
bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdAoraW5saW5lIENvbG9yIENvbG9yOjpp
bnZlcnRlZENvbG9yV2l0aEFscGhhKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gYWxwaGEgPyBpbnZlcnRlZENvbG9yV2l0aEFscGhhKGFscGhhLnZhbHVlKCkpIDog
KnRoaXM7Cit9CisKK2lubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVk
QnkoZmxvYXQgYW1vdW50KSBjb25zdAoreworICAgIHJldHVybiBjb2xvcldpdGhBbHBoYShhbW91
bnQgKiBhbHBoYUFzRmxvYXQoKSk7Cit9CisKK2lubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRo
QWxwaGFNdWx0aXBsaWVkQnkoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdAogewotICAgIHJl
dHVybiBhbHBoYSA/IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJv
dW5kaW5nKGFscGhhLnZhbHVlKCkpIDogKnRoaXM7CisgICAgcmV0dXJuIGFscGhhID8gY29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnkoYWxwaGEudmFsdWUoKSkgOiAqdGhpczsKIH0KIAotaW5saW5l
IENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRp
b25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0CitpbmxpbmUgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFs
cGhhKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QKIHsKLSAgICByZXR1cm4gYWxwaGEgPyBj
b2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhhbHBoYS52YWx1ZSgpKSA6ICp0
aGlzOworICAgIHJldHVybiBhbHBoYSA/IGNvbG9yV2l0aEFscGhhKGFscGhhLnZhbHVlKCkpIDog
KnRoaXM7CiB9CiAKIGlubGluZSBjb25zdCBFeHRlbmRlZENvbG9yJiBDb2xvcjo6YXNFeHRlbmRl
ZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0
aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDE0ICszMSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBhcmVFc3NlbnRp
YWxseUVxdWFsKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGEsIGNvbnN0IENvbG9yQ29t
cG9uZW50czxmbG9hdD4mIGIpCi17Ci0gICAgcmV0dXJuIFdURjo6YXJlRXNzZW50aWFsbHlFcXVh
bChhWzBdLCBiWzBdKQotICAgICAgICAmJiBXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYVsxXSwg
YlsxXSkKLSAgICAgICAgJiYgV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFbMl0sIGJbMl0pCi0g
ICAgICAgICYmIFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhWzNdLCBiWzNdKTsKLX0KLQogLy8g
VGhlc2UgYXJlIHRoZSBzdGFuZGFyZCBzUkdCIDwtPiBsaW5lYXJSR0IgY29udmVyc2lvbiBmdW5j
dGlvbnMgKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IpLgogZmxvYXQgbGluZWFy
VG9SR0JDb2xvckNvbXBvbmVudChmbG9hdCBjKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCShyZXZpc2lvbiAyNjI2NTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MSwyMSArNTEsMTQgQEAgZmxvYXQgY29udHJhc3RSYXRpbyhjb25z
dCBDb2xvckNvbXBvbmVudAogCiBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IHByZW11bHRpcGxpZWQo
Y29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRzKTsKIAotYm9vbCBh
cmVFc3NlbnRpYWxseUVxdWFsKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mLCBjb25zdCBD
b2xvckNvbXBvbmVudHM8ZmxvYXQ+Jik7Ci0KLWlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBD
b2xvckNoYW5uZWwoaW50IHZhbHVlKQoraW5saW5lIHVpbnQ4X3QgY29udmVydFRvQ29tcG9uZW50
Qnl0ZShmbG9hdCBmKQogewotICAgIHJldHVybiBzdGQ6OmNsYW1wKHZhbHVlLCAwLCAyNTUpOwor
ICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0YXRpY19jYXN0PGludD4oc3RkOjpscm91bmRmKGYgKiAy
NTUuMGYpKSwgMCwgMjU1KTsKIH0KIAotaW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9y
Q2hhbm5lbChmbG9hdCB2YWx1ZSkKK2NvbnN0ZXhwciBmbG9hdCBjb252ZXJ0VG9Db21wb25lbnRG
bG9hdCh1aW50OF90IGJ5dGUpCiB7Ci0gICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpyb3VuZCh2
YWx1ZSksIDAuZiwgMjU1LmYpOwotfQotCi1pbmxpbmUgdWludDhfdCBzY2FsZVJvdW5kQW5kQ2xh
bXBDb2xvckNoYW5uZWwoZmxvYXQgZikKLXsKLSAgICByZXR1cm4gc3RkOjpjbGFtcChzdGF0aWNf
Y2FzdDxpbnQ+KGxyb3VuZGYoMjU1LjBmICogZikpLCAwLCAyNTUpOworICAgIHJldHVybiBieXRl
IC8gMjU1LjBmOwogfQogCiBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWlu
dDE2X3QgdmFsdWUpCkBAIC04Miw1ICs3NSw0IEBAIGNvbnN0ZXhwciB1aW50MTZfdCBmYXN0RGl2
aWRlQnkyNTUodWludDEKICAgICByZXR1cm4gYXBwcm94aW1hdGlvbiArIChyZW1haW5kZXIgPj4g
OCk7CiB9CiAKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAkocmV2aXNpb24gMjYyNjU5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NywzNCArNjcsMTMgQEAgU2ltcGxlQ29sb3IgbWFrZVVucHJlbXVs
dGlwbGllZFNpbXBsZUNvbAogICAgIHJldHVybiBwaXhlbENvbG9yOwogfQogCi1TaW1wbGVDb2xv
ciBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZs
b2F0IGEpCi17Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAgc2NhbGVSb3Vu
ZEFuZENsYW1wQ29sb3JDaGFubmVsKHIpLAotICAgICAgICBzY2FsZVJvdW5kQW5kQ2xhbXBDb2xv
ckNoYW5uZWwoZyksCi0gICAgICAgIHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChiKSwK
LSAgICAgICAgc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGEpCi0gICAgKTsKLX0KLQot
U2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoZmxvYXQgaHVlLCBmbG9hdCBzYXR1
cmF0aW9uLCBmbG9hdCBsaWdodG5lc3MsIGZsb2F0IGFscGhhKQotewotICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0p
OwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoCi0gICAgICAgIHJvdW5kKHIgKiAyNTUuMGYp
LAotICAgICAgICByb3VuZChnICogMjU1LjBmKSwKLSAgICAgICAgcm91bmQoYiAqIDI1NS4wZiks
Ci0gICAgICAgIHJvdW5kKGEgKiAyNTUuMGYpCi0gICAgKTsKLX0KLQogU2ltcGxlQ29sb3IgbWFr
ZVNpbXBsZUNvbG9yRnJvbUNNWUtBKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGss
IGZsb2F0IGEpCiB7Ci0gICAgZG91YmxlIGNvbG9ycyA9IDEgLSBrOwotICAgIGludCByID0gc3Rh
dGljX2Nhc3Q8aW50PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIChjb2xvcnMgKiAoMSAtIGMpKSk7Ci0g
ICAgaW50IGcgPSBzdGF0aWNfY2FzdDxpbnQ+KG5leHRhZnRlcigyNTYsIDApICogKGNvbG9ycyAq
ICgxIC0gbSkpKTsKLSAgICBpbnQgYiA9IHN0YXRpY19jYXN0PGludD4obmV4dGFmdGVyKDI1Niwg
MCkgKiAoY29sb3JzICogKDEgLSB5KSkpOwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3Iociwg
ZywgYiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5leHRhZnRlcigyNTYsIDApICogYSkpOworICAgIGZs
b2F0IGNvbG9ycyA9IDEgLSBrOworICAgIGZsb2F0IHIgPSBjb2xvcnMgKiAoMS4wZiAtIGMpOwor
ICAgIGZsb2F0IGcgPSBjb2xvcnMgKiAoMS4wZiAtIG0pOworICAgIGZsb2F0IGIgPSBjb2xvcnMg
KiAoMS4wZiAtIHkpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKHIsIGcs
IGIsIGEpOwogfQogCiBTdHJpbmcgU2ltcGxlQ29sb3I6OnNlcmlhbGl6YXRpb25Gb3JIVE1MKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxl
Q29sb3IuaAkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2ltcGxlQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJs
aWM6CiAgICAgY29uc3RleHByIHVpbnQ4X3QgYmx1ZUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWU7IH0KICAgICBjb25zdGV4cHIgdWludDhfdCBhbHBoYUNvbXBvbmVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWUgPj4gMjQ7IH0KIAotICAgIGNvbnN0ZXhwciBmbG9hdCBhbHBoYUNv
bXBvbmVudEFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGFD
b21wb25lbnQoKSkgLyAweEZGOyB9CisgICAgY29uc3RleHByIGZsb2F0IGFscGhhQ29tcG9uZW50
QXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGFscGhhQ29t
cG9uZW50KCkpOyB9CiAKICAgICBjb25zdGV4cHIgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0
dXJuIGFscGhhQ29tcG9uZW50KCkgPT0gMHhGRjsgfQogICAgIGNvbnN0ZXhwciBib29sIGlzVmlz
aWJsZSgpIGNvbnN0IHsgcmV0dXJuIGFscGhhQ29tcG9uZW50KCk7IH0KQEAgLTY3LDcgKzY3LDcg
QEAgcHVibGljOgogCiAgICAgY29uc3RleHByIENvbG9yQ29tcG9uZW50czxmbG9hdD4gYXNTUkdC
RmxvYXRDb21wb25lbnRzKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiB7IHJlZENvbXBv
bmVudCgpIC8gMjU1LjBmLCBncmVlbkNvbXBvbmVudCgpIC8gMjU1LjBmLCBibHVlQ29tcG9uZW50
KCkgLyAyNTUuMGYsICBhbHBoYUNvbXBvbmVudCgpIC8gMjU1LjBmIH07CisgICAgICAgIHJldHVy
biB7IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KHJlZENvbXBvbmVudCgpKSwgY29udmVydFRvQ29t
cG9uZW50RmxvYXQoZ3JlZW5Db21wb25lbnQoKSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGJs
dWVDb21wb25lbnQoKSksICBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChhbHBoYUNvbXBvbmVudCgp
KSB9OwogICAgIH0KIAogICAgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+CkBAIC05NSwxNiArOTUs
MTQgQEAgY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbgogY29uc3RleHBy
IFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7
CiAKIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihjb25zdCBDb2xvckNvbXBvbmVudHM8Zmxv
YXQ+JiBzUkdCQ29tcG9uZW50cyk7CitTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tRmxv
YXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpOworU2ltcGxlQ29sb3IgbWFr
ZVNpbXBsZUNvbG9yRnJvbUNNWUtBKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGss
IGZsb2F0IGEpOwogCiBTaW1wbGVDb2xvciBtYWtlUHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKGlu
dCByLCBpbnQgZywgaW50IGIsIGludCBhLCBib29sIGNlaWxpbmcgPSB0cnVlKTsKIFNpbXBsZUNv
bG9yIG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoU2ltcGxlQ29sb3IpOwogU2ltcGxlQ29s
b3IgbWFrZVVucHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGlu
dCBhKTsKIFNpbXBsZUNvbG9yIG1ha2VVbnByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihTaW1wbGVD
b2xvcik7CiAKLVdFQkNPUkVfRVhQT1JUIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21G
bG9hdHMoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7Ci1XRUJDT1JFX0VYUE9S
VCBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShmbG9hdCBoLCBmbG9hdCBzLCBm
bG9hdCBsLCBmbG9hdCBhKTsKLVNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21DTVlLQShm
bG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKTsKLQogaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQogewogICAgIHJldHVy
biBhLnZhbHVlKCkgPT0gYi52YWx1ZSgpOwpAQCAtMTE3LDcgKzExNSw3IEBAIGlubGluZSBib29s
IG9wZXJhdG9yIT0oU2ltcGxlQ29sb3IgYSwgU2kKIAogY29uc3RleHByIFNpbXBsZUNvbG9yIG1h
a2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiKQogewotICAgIHJldHVybiBtYWtlU2lt
cGxlQ29sb3IociwgZywgYiwgMHhGRik7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhf
dD4oc3RkOjpjbGFtcChyLCAwLCAweEZGKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xh
bXAoZywgMCwgMHhGRikpLCBzdGF0aWNfY2FzdDx1aW50OF90PihzdGQ6OmNsYW1wKGIsIDAsIDB4
RkYpKSwgMHhGRiB9OwogfQogCiBjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9y
KGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQpAQCAtMTI4LDEyICsxMjYsMTIgQEAgY29uc3Rl
eHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbgogaW5saW5lIFNpbXBsZUNvbG9yIG1h
a2VTaW1wbGVDb2xvcihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9uZW50
cykKIHsKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHNSR0JDb21wb25lbnRzOwotICAgIHJldHVy
biBtYWtlU2ltcGxlQ29sb3IoCi0gICAgICAgIHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5l
bChyKSwKLSAgICAgICAgc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGcpLAotICAgICAg
ICBzY2FsZVJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoYiksCi0gICAgICAgIHNjYWxlUm91bmRB
bmRDbGFtcENvbG9yQ2hhbm5lbChhKQotICAgICk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xv
ckZyb21GbG9hdHMociwgZywgYiwgYSk7Cit9CisKK2lubGluZSBTaW1wbGVDb2xvciBtYWtlU2lt
cGxlQ29sb3JGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCit7
CisgICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50Qnl0ZShyKSwgY29udmVydFRvQ29tcG9u
ZW50Qnl0ZShnKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShiKSwgY29udmVydFRvQ29tcG9uZW50
Qnl0ZShhKSB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0
aW9ucy5jcHAJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcg
Kzc4LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZUNhaXJvQ29udGV4dFNvdXJjZShjYQogICAgIH0g
ZWxzZSB7CiAgICAgICAgIC8vIFNvbGlkIGNvbG9yIHNvdXJjZQogICAgICAgICBpZiAoZ2xvYmFs
QWxwaGEgPCAxKQotICAgICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgY29sb3Iu
Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZ2xvYmFs
QWxwaGEpKTsKKyAgICAgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIGNvbG9yLmNv
bG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGdsb2JhbEFscGhhKSk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIGNvbG9yKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAko
cmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Q29sb3JDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDggKzc4LDcgQEAgc3RhdGljIFNpbXBs
ZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21DRwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNjYWxlRmFjdG9yID0gbmV4dGFm
dGVyKDI1Ni4wLCAwLjApOwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IociAqIHNjYWxlRmFj
dG9yLCBnICogc2NhbGVGYWN0b3IsIGIgKiBzY2FsZUZhY3RvciwgYSAqIHNjYWxlRmFjdG9yKTsK
KyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKTsKIH0KIAog
Q29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAJKHJldmlzaW9uIDI2
MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9v
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBGRUZsb29kOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gY29sb3IgPSBmbG9vZENvbG9yKCkuY29sb3JXaXRoQWxwaGFNdWx0aXBs
aWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvb2RPcGFjaXR5KCkpOworICAgIGF1dG8g
Y29sb3IgPSBmbG9vZENvbG9yKCkuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxvb2RPcGFj
aXR5KCkpOwogICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBjb2xvcik7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMu
bW0JKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db2xvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtODgsOCArODgsNyBAQCBzdGF0aWMg
U2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbU5TCiAgICAgW3JnYkNvbG9yIGdldFJlZDom
cmVkQ29tcG9uZW50IGdyZWVuOiZncmVlbkNvbXBvbmVudCBibHVlOiZibHVlQ29tcG9uZW50IGFs
cGhhOiZhbHBoYV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXIoMjU2LjAsIDAuMCk7Ci0gICAg
cmV0dXJuIG1ha2VTaW1wbGVDb2xvcihzY2FsZUZhY3RvciAqIHJlZENvbXBvbmVudCwgc2NhbGVG
YWN0b3IgKiBncmVlbkNvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBibHVlQ29tcG9uZW50LCBzY2Fs
ZUZhY3RvciAqIGFscGhhKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhy
ZWRDb21wb25lbnQsIGdyZWVuQ29tcG9uZW50LCBibHVlQ29tcG9uZW50LCBhbHBoYSk7CiB9CiAK
IENvbG9yIGNvbG9yRnJvbU5TQ29sb3IoTlNDb2xvciAqY29sb3IpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvQ29sb3JJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvQ29sb3JJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3LDgg
KzQ3LDcgQEAgQ29sb3IgY29sb3JGcm9tVUlDb2xvcihVSUNvbG9yICpjb2xvcikKIAogICAgIFtj
b2xvciBnZXRSZWQ6JnJlZENvbXBvbmVudCBncmVlbjomZ3JlZW5Db21wb25lbnQgYmx1ZTomYmx1
ZUNvbXBvbmVudCBhbHBoYTomYWxwaGFdOwogCi0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBzY2Fs
ZUZhY3RvciA9IG5leHRhZnRlcigyNTYuMCwgMC4wKTsKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNv
bG9yKHNjYWxlRmFjdG9yICogcmVkQ29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGdyZWVuQ29tcG9u
ZW50LCBzY2FsZUZhY3RvciAqIGJsdWVDb21wb25lbnQsIHNjYWxlRmFjdG9yICogYWxwaGEpOwor
ICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKHJlZENvbXBvbmVudCwgZ3JlZW5D
b21wb25lbnQsIGJsdWVDb21wb25lbnQsIGFscGhhKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
NjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIENvbG9yIFNWR1N0b3BFbGVtZW50OjpzdG9wQ29sb3JJ
bmNsdWRpbmcKICAgICBhdXRvJiBzdmdTdHlsZSA9IHN0eWxlLnN2Z1N0eWxlKCk7CiAgICAgYXV0
byBzdG9wQ29sb3IgPSBzdHlsZS5jb2xvclJlc29sdmluZ0N1cnJlbnRDb2xvcihzdmdTdHlsZS5z
dG9wQ29sb3IoKSk7CiAKLSAgICByZXR1cm4gc3RvcENvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlw
bGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKHN2Z1N0eWxlLnN0b3BPcGFjaXR5KCkpOwor
ICAgIHJldHVybiBzdG9wQ29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoc3ZnU3R5bGUu
c3RvcE9wYWNpdHkoKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0
aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVl
RnVuY3Rpb25JbXBsLmgJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9w
cm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE0LDYgKzExNCwxNiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgor
ICAgIGlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoaW50IHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Y2xhbXAodmFsdWUsIDAsIDI1NSk7CisgICAgfQor
CisgICAgaW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChmbG9hdCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6cm91bmQodmFsdWUpLCAw
LjBmLCAyNTUuMGYpOworICAgIH0KKwogICAgIHZvaWQgYWRkRnJvbUFuZFRvVmFsdWVzKFNWR0Vs
ZW1lbnQqKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9mcm9t
LnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbQkocmV2aXNpb24gMjYyNjU5KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTUxMyw3ICs1MTMsNyBAQCBzdGF0aWMgV2ViQ29yZTo6Q29sb3Igc2Nyb2xsVmlld0Jh
Y2tncm91CiAgICAgaWYgKHpvb21TY2FsZSA8IG1pbmltdW1ab29tU2NhbGUpIHsKICAgICAgICAg
Q0dGbG9hdCBzbG9wZSA9IDEyOwogICAgICAgICBDR0Zsb2F0IG9wYWNpdHkgPSBzdGQ6Om1heDxD
R0Zsb2F0PigxIC0gc2xvcGUgKiAobWluaW11bVpvb21TY2FsZSAtIHpvb21TY2FsZSksIDApOwot
ICAgICAgICBjb2xvciA9IGNvbG9yLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5k
aW5nKG9wYWNpdHkpOworICAgICAgICBjb2xvciA9IGNvbG9yLmNvbG9yV2l0aEFscGhhKG9wYWNp
dHkpOwogICAgIH0KIAogICAgIHJldHVybiBjb2xvcjsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2MjY1OSkK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9XaGl0ZSkK
ICAgICAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7
CiAgICAgCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xv
ckZyb21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOworICAgIGF1dG8g
cm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVl
LCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pKTsKICAgICBFWFBFQ1RfRVEoY29sb3Is
IHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtNjEsNyArNjEsNyBAQCBURVNUKENvbG9yLCBS
R0JUb0hTTF9CbGFjaykKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwg
bGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2lt
cGxlQ29sb3JGcm9tSFNMQShodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKKyAg
ICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JH
Qih7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KSk7CiAgICAgRVhQRUNUX0VR
KGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTc3LDcgKzc3LDcgQEAgVEVTVChD
b2xvciwgUkdCVG9IU0xfUmVkKQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVz
cygpLCBsaWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1h
a2VTaW1wbGVDb2xvckZyb21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkp
OworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNs
VG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pKTsKICAgICBFWFBF
Q1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtOTMsNyArOTMsNyBAQCBU
RVNUKENvbG9yLCBSR0JUb0hTTF9HcmVlbikKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5s
aWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBD
b2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywg
YWxwaGEpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNv
bG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KSk7CiAg
ICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTEwOSw3ICsx
MDksNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbHVlKQogCiAgICAgRVhQRUNUX0ZMT0FUX0VR
KGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRD
b2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGln
aHRuZXNzLCBhbHBoYSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtl
U2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhh
IH0pKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAt
MTI1LDcgKzEyNSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0RhcmtHcmF5KQogICAgIAogICAg
IEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKIAotICAgIGF1
dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShodWUs
IHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENv
bG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwg
bGlnaHRuZXNzLCBhbHBoYSB9KSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRD
b2xvcik7CiB9CiAKQEAgLTE0MSw3ICsxNDEsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9HcmF5
KQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOwog
Ci0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21I
U0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOworICAgIGF1dG8gcm91bmRU
cmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1
cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5k
VHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTU3LDcgKzE1Nyw3IEBAIFRFU1QoQ29sb3IsIFJHQlRv
SFNMX0xpZ2h0R3JheSkKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwg
bGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2lt
cGxlQ29sb3JGcm9tSFNMQShodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKKyAg
ICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JH
Qih7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KSk7CiAgICAgRVhQRUNUX0VR
KGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401276</attachid>
            <date>2020-06-06 13:30:21 -0700</date>
            <delta_ts>2020-06-06 13:40:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212871-20200606133020.patch</filename>
            <type>text/plain</type>
            <size>32330</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDIwLTA2LTA2ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvcjogVW5pZnkg
cm91bmRpbmcgLyBjbGFtcGluZyBjb252ZXJzaW9ucyBiZXR3ZWVuIDAtMSBmbG9hdCBjb21wb25l
bnRzIGFuZCAwLTI1NSBieXRlIGNvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjg3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdJUC4KKworICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmlsbFN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
U3R5bGU6OmNyZWF0ZUZyb21TdHJpbmdXaXRoT3ZlcnJpZGVBbHBoYSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkYXJrIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRp
bmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFs
cGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFscGhh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6YXJlRXNzZW50aWFsbHlFcXVhbCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnRUb0NvbXBvbmVudEJ5dGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRv
Q29tcG9uZW50RmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6cm91bmRBbmRDbGFtcENvbG9yQ2hh
bm5lbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzY2FsZVJvdW5kQW5kQ2xhbXBDb2xv
ckNoYW5uZWwpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNv
bG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEpOgorICAgICAgICAoV2Vi
Q29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVDb2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmFscGhh
Q29tcG9uZW50QXNGbG9hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6
YXNTUkdCRmxvYXRDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1w
bGVDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xvcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NvbG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9y
RnJvbU5TQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9Db2xvcklPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbG9yRnJvbVVJQ29sb3IpOgorICAgICAgICAqIHN2Zy9TVkdTdG9wRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5j
bHVkaW5nT3BhY2l0eSBjb25zdCk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0aW9uQ29sb3JGdW5jdGlvbjo6cm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbCk6CisKIDIwMjAt
MDYtMDYgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXSBB
ZGQgc3VwcG9ydCBmb3Igd2lkdGg6IG1pbi9tYXgtY29udGVudApJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAko
cmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTcsMTMgKzUxNywxMyBAQCBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVVcmwoQ1NTCiAgICAgcmV0dXJuIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUodXJsLnRvU3RyaW5nKCksIENTU1VuaXRU
eXBlOjpDU1NfVVJJKTsKIH0KIAotc3RhdGljIGludCBjbGFtcFJHQkNvbXBvbmVudChjb25zdCBD
U1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUpCitzdGF0aWMgdWludDhfdCBjbGFtcFJHQkNvbXBvbmVu
dChjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUpCiB7CiAgICAgZG91YmxlIHJlc3VsdCA9
IHZhbHVlLmRvdWJsZVZhbHVlKCk7CiAgICAgaWYgKHZhbHVlLmlzUGVyY2VudGFnZSgpKQogICAg
ICAgICByZXN1bHQgPSByZXN1bHQgLyAxMDAuMCAqIDI1NS4wOwogCi0gICAgcmV0dXJuIGNsYW1w
VG88aW50Pihyb3VuZChyZXN1bHQpLCAwLCAyNTUpOworICAgIHJldHVybiBjbGFtcFRvPHVpbnQ4
X3Q+KHJvdW5kKHJlc3VsdCksIDAsIDI1NSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZVJHQlBh
cmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkBAIC01NTEsNyArNTUxLDcgQEAg
c3RhdGljIENvbG9yIHBhcnNlUkdCUGFyYW1ldGVycyhDU1NQYXJzZQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9OwogCi0gICAgaW50IGNvbG9yQXJyYXlbM107CisgICAgdWludDhfdCBjb2xv
ckFycmF5WzNdOwogICAgIGNvbG9yQXJyYXlbMF0gPSBjbGFtcFJHQkNvbXBvbmVudCgqY29sb3JQ
YXJhbWV0ZXIpOwogICAgIGZvciAoaW50IGkgPSAxOyBpIDwgMzsgaSsrKSB7CiAgICAgICAgIGlm
IChpID09IDEpCkBAIC01NzMsNyArNTczLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUkdCUGFyYW1l
dGVycyhDU1NQYXJzZQogICAgICAgICByZXR1cm4gY29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVz
cGFjZShhcmdzKTsKICAgICB9OwogCi0gICAgaW50IGFscGhhQ29tcG9uZW50ID0gMjU1OworICAg
IHVpbnQ4X3QgYWxwaGFDb21wb25lbnQgPSAyNTU7CiAgICAgaWYgKGNvbnN1bWVBbHBoYVNlcGFy
YXRvcigpKSB7CiAgICAgICAgIGRvdWJsZSBhbHBoYTsKICAgICAgICAgaWYgKCFjb25zdW1lTnVt
YmVyUmF3KGFyZ3MsIGFscGhhKSkgewpAQCAtNTgyLDkgKzU4Miw3IEBAIHN0YXRpYyBDb2xvciBw
YXJzZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2UKICAgICAgICAgICAgICAgICByZXR1cm4gQ29sb3Io
KTsKICAgICAgICAgICAgIGFscGhhID0gYWxwaGFQZXJjZW50LT5kb3VibGVWYWx1ZSgpIC8gMTAw
LjA7CiAgICAgICAgIH0KLQotICAgICAgICAvLyBXMyBzdGFuZGFyZCBzdGlwdWxhdGVzIGEgMi41
NSBhbHBoYSB2YWx1ZSBtdWx0aXBsaWNhdGlvbiBmYWN0b3IuCi0gICAgICAgIGFscGhhQ29tcG9u
ZW50ID0gc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKGNsYW1wVG88ZG91YmxlPihhbHBoYSwgMC4w
LCAxLjApICogMjU1LjBmKSk7CisgICAgICAgIGFscGhhQ29tcG9uZW50ID0gY29udmVydFRvQ29t
cG9uZW50Qnl0ZShhbHBoYSk7CiAgICAgfTsKIAogICAgIGlmICghYXJncy5hdEVuZCgpKQpAQCAt
NjQyLDcgKzY0MCw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2UK
ICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAKLSAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJy
YXlbMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsxXSksIHN0YXRpY19jYXN0PGZs
b2F0Pihjb2xvckFycmF5WzJdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKSk7CisgICAgcmV0
dXJuIG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JB
cnJheVswXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzFdKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGNvbG9yQXJyYXlbMl0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pKTsKIH0K
IAogc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFE
ZXRlY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9E
YXRhRGV0ZWN0aW9uLm1tCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTYyMyw5ICs2MjMs
OSBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SCiAKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBsaWdodG5lc3Mgb2YgdGhlIHVuZGVybGluZSBj
b2xvciB0byB0aGUgbWlkZGxlLCBhbmQgbXVsdGlwbHkgdGhlIGFscGhhIGJ5IDM4JSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoZSBjb2xvciB3aWxsIGFwcGVhciBvbiBsaWdodCBh
bmQgZGFyayBiYWNrZ3JvdW5kcywgc2luY2Ugb25seSBvbmUgY29sb3IgY2FuIGJlIHNwZWNpZmll
ZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBvdmVycmlkZUxpZ2h0bmVzcyA9IDAu
NTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBvdmVycmlkZUFscGhhTXVsdGlwbGll
ciA9IDAuMzg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVuZGVybGluZUNvbG9yID0g
bWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBvdmVycmlkZUxpZ2h0bmVz
cywgb3ZlcnJpZGVBbHBoYU11bHRpcGxpZXIgKiBhbHBoYSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmbG9hdCBvdmVycmlkZUxpZ2h0bmVzcyA9IDAuNWY7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmbG9hdCBvdmVycmlkZUFscGhhTXVsdGlwbGllciA9IDAuMzhmOworICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byB1bmRlcmxpbmVDb2xvciA9IG1ha2VTaW1wbGVDb2xvcihoc2xUb1NS
R0IoeyBodWUsIHNhdHVyYXRpb24sIG92ZXJyaWRlTGlnaHRuZXNzLCBvdmVycmlkZUFscGhhTXVs
dGlwbGllciAqIGFscGhhIH0pKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yRWxl
bWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBDU1NWYWx1ZUN1
cnJlbnRjb2xvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb25Db2xvciwgdW5kZXJs
aW5lQ29sb3Iuc2VyaWFsaXphdGlvbkZvckNTUygpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3Myw5ICsxMDczLDkgQEAgc3RhdGlj
IE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZUxlZ2FjeQogICAgIEFTU0VSVChibHVlSW5kZXgg
Pj0gY29tcG9uZW50TGVuZ3RoICogMik7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oYmx1ZUluZGV4ICsgMSA8IGRpZ2l0QnVmZmVyLnNpemUoKSk7CiAKLSAgICBpbnQgcmVk
VmFsdWUgPSB0b0FTQ0lJSGV4VmFsdWUoZGlnaXRCdWZmZXJbcmVkSW5kZXhdLCBkaWdpdEJ1ZmZl
cltyZWRJbmRleCArIDFdKTsKLSAgICBpbnQgZ3JlZW5WYWx1ZSA9IHRvQVNDSUlIZXhWYWx1ZShk
aWdpdEJ1ZmZlcltncmVlbkluZGV4XSwgZGlnaXRCdWZmZXJbZ3JlZW5JbmRleCArIDFdKTsKLSAg
ICBpbnQgYmx1ZVZhbHVlID0gdG9BU0NJSUhleFZhbHVlKGRpZ2l0QnVmZmVyW2JsdWVJbmRleF0s
IGRpZ2l0QnVmZmVyW2JsdWVJbmRleCArIDFdKTsKKyAgICB1aW50OF90IHJlZFZhbHVlID0gdG9B
U0NJSUhleFZhbHVlKGRpZ2l0QnVmZmVyW3JlZEluZGV4XSwgZGlnaXRCdWZmZXJbcmVkSW5kZXgg
KyAxXSk7CisgICAgdWludDhfdCBncmVlblZhbHVlID0gdG9BU0NJSUhleFZhbHVlKGRpZ2l0QnVm
ZmVyW2dyZWVuSW5kZXhdLCBkaWdpdEJ1ZmZlcltncmVlbkluZGV4ICsgMV0pOworICAgIHVpbnQ4
X3QgYmx1ZVZhbHVlID0gdG9BU0NJSUhleFZhbHVlKGRpZ2l0QnVmZmVyW2JsdWVJbmRleF0sIGRp
Z2l0QnVmZmVyW2JsdWVJbmRleCArIDFdKTsKICAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHJl
ZFZhbHVlLCBncmVlblZhbHVlLCBibHVlVmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlLmNwcAkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NSw3
ICszNzUsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFN0CiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmIChzdHlsZS5pc0N1cnJlbnRDb2xvcigpKQotICAgICAgICBz
dHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpLmNvbG9yV2l0aEFs
cGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKHN0eWxlLm92ZXJyaWRlQWxwaGEoKSkpOworICAg
ICAgICBzdHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpLmNvbG9y
V2l0aEFscGhhKHN0eWxlLm92ZXJyaWRlQWxwaGEoKSkpOwogICAgIGVsc2UKICAgICAgICAgY2hl
Y2tPcmlnaW4oc3R5bGUuY2FudmFzUGF0dGVybigpLmdldCgpKTsKIApAQCAtMzk4LDcgKzM5OCw3
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKHN0eWxlLmlzQ3VycmVudENvbG9yKCkpCi0gICAgICAgIHN0eWxlID0g
Q2FudmFzU3R5bGUoY3VycmVudENvbG9yKGNhbnZhc0Jhc2UoKSkuY29sb3JXaXRoQWxwaGFVc2lu
Z0FsdGVybmF0aXZlUm91bmRpbmcoc3R5bGUub3ZlcnJpZGVBbHBoYSgpKSk7CisgICAgICAgIHN0
eWxlID0gQ2FudmFzU3R5bGUoY3VycmVudENvbG9yKGNhbnZhc0Jhc2UoKSkuY29sb3JXaXRoQWxw
aGEoc3R5bGUub3ZlcnJpZGVBbHBoYSgpKSk7CiAgICAgZWxzZQogICAgICAgICBjaGVja09yaWdp
bihzdHlsZS5jYW52YXNQYXR0ZXJuKCkuZ2V0KCkpOwogCkBAIC0xMzAyLDcgKzEzMDIsNyBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoCiAgICAgICAgIGlmICghY29s
b3IuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBzZXRTaGFkb3co
RmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb2xvci5jb2xvcldpdGhBbHBoYVVzaW5n
QWx0ZXJuYXRpdmVSb3VuZGluZyhhbHBoYSkpOworICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lk
dGgsIGhlaWdodCksIGJsdXIsIGNvbG9yLmNvbG9yV2l0aEFscGhhKGFscGhhKSk7CiB9CiAKIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBm
bG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCShyZXZpc2lv
biAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0Myw3ICsxNDMsNyBAQCBDYW52YXNTdHlsZSBDYW52YXNTdHls
ZTo6Y3JlYXRlRnJvbVN0cmluCiAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICByZXR1cm4gY29sb3IuY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0
aXZlUm91bmRpbmcoYWxwaGEpOworICAgIHJldHVybiBjb2xvci5jb2xvcldpdGhBbHBoYShhbHBo
YSk7CiB9CiAKIGJvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudENvbG9yKGNvbnN0IENhbnZh
c1N0eWxlJiBvdGhlcikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiAyNjI2NTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9y
KGNvbnN0IEpTT046Ok9iamUKICAgICBlbHNlIGlmIChhID4gMSkKICAgICAgICAgYSA9IDE7CiAK
LSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIHN0YXRpY19jYXN0PGludD4oYSAq
IDI1NSkpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgY29udmVydFRvQ29t
cG9uZW50Qnl0ZShhKSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbmZpZ0NvbG9yKGNvbnN0
IFN0cmluZyYgZmllbGROYW1lLCBjb25zdCBKU09OOjpPYmplY3QqIGNvbmZpZ09iamVjdCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlzaW9u
IDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIxLDExICsxMjEsOCBAQCBDb2xvciBDb2xvcjo6bGlnaHQoKSBj
b25zdAogICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNhc2UgZm9yIHNwZWVkLgogICAgIGlm
ICghaXNFeHRlbmRlZCgpICYmIGFzU2ltcGxlKCkgPT0gYmxhY2spCiAgICAgICAgIHJldHVybiBs
aWdodGVuZWRCbGFjazsKLSAgICAKLSAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IG5leHRh
ZnRlcmYoMjU2LjBmLCAwLjBmKTsKIAogICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNv
bXBvbmVudHNMb3NzeSgpOwotCiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsK
IAogICAgIGlmICh2ID09IDAuMGYpCkBAIC0xMzMsMTIgKzEzMCw3IEBAIENvbG9yIENvbG9yOjps
aWdodCgpIGNvbnN0CiAKICAgICBmbG9hdCBtdWx0aXBsaWVyID0gc3RkOjptaW4oMS4wZiwgdiAr
IDAuMzNmKSAvIHY7CiAKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKAotICAgICAgICBzdGF0
aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAotICAgICAgICBzdGF0
aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0b3IpLAotICAgICAgICBzdGF0
aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBiICogc2NhbGVGYWN0b3IpLAotICAgICAgICBhbHBo
YSgpCi0gICAgKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhtdWx0aXBs
aWVyICogciwgbXVsdGlwbGllciAqIGcsIG11bHRpcGxpZXIgKiBiLCBhKTsKIH0KIAogQ29sb3Ig
Q29sb3I6OmRhcmsoKSBjb25zdApAQCAtMTQ3LDE5ICsxMzksMTIgQEAgQ29sb3IgQ29sb3I6OmRh
cmsoKSBjb25zdAogICAgIGlmICghaXNFeHRlbmRlZCgpICYmIGFzU2ltcGxlKCkgPT0gd2hpdGUp
CiAgICAgICAgIHJldHVybiBkYXJrZW5lZFdoaXRlOwogICAgIAotICAgIGNvbnN0IGZsb2F0IHNj
YWxlRmFjdG9yID0gbmV4dGFmdGVyZigyNTYuMGYsIDAuMGYpOwotCiAgICAgYXV0byBbciwgZywg
YiwgYV0gPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAKICAgICBmbG9hdCB2ID0gc3RkOjpt
YXgoeyByLCBnLCBiIH0pOwogICAgIGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6Om1heCgwLjBmLCAo
diAtIDAuMzNmKSAvIHYpOwogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAg
YWxwaGEoKQotICAgICk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMobXVs
dGlwbGllciAqIHIsIG11bHRpcGxpZXIgKiBnLCBtdWx0aXBsaWVyICogYiwgYSk7CiB9CiAKIGJv
b2wgQ29sb3I6OmlzRGFyaygpIGNvbnN0CkBAIC0yMzUsNDEgKzIyMCwxMiBAQCBDb2xvciBDb2xv
cjo6YmxlbmRXaXRoV2hpdGUoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUNvbG9y
IENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9hdCBhbW91bnQpIGNvbnN0Ci17
Ci0gICAgZmxvYXQgbmV3QWxwaGEgPSBhbW91bnQgKiBhbHBoYUFzRmxvYXQoKTsKLSAgICByZXR1
cm4gY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwotfQotCi1Db2xvciBDb2xvcjo6Y29sb3JXaXRo
QWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQgYW1vdW50KSBj
b25zdAotewotICAgIGZsb2F0IG5ld0FscGhhID0gYW1vdW50ICogYWxwaGFBc0Zsb2F0KCk7Ci0g
ICAgcmV0dXJuIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKG5ld0FscGhh
KTsKLX0KLQogQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhKGZsb2F0IGFscGhhKSBjb25zdAog
ewogICAgIGlmIChpc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY29s
b3JXaXRoQWxwaGEoYWxwaGEpOwogCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgd2hlcmUgdGhpcyBm
dW5jdGlvbiBkaWZmZXJzIGZyb20gY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRp
bmcuCi0gICAgdWludDhfdCBuZXdBbHBoYSA9IGFscGhhICogMHhGRjsKLQotICAgIENvbG9yIHJl
c3VsdCA9IGFzU2ltcGxlKCkuY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwotICAgIGlmIChpc1Nl
bWFudGljKCkpCi0gICAgICAgIHJlc3VsdC50YWdBc1NlbWFudGljKCk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJv
dW5kaW5nKGZsb2F0IGFscGhhKSBjb25zdAotewotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAg
ICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY29sb3JXaXRoQWxwaGEoYWxwaGEpOwotCi0gICAgLy8g
RklYTUU6IFRoaXMgaXMgd2hlcmUgdGhpcyBmdW5jdGlvbiBkaWZmZXJzIGZyb20gY29sb3JXaXRo
QWxwaGFVc2luZy4KLSAgICB1aW50OF90IG5ld0FscGhhID0gc2NhbGVSb3VuZEFuZENsYW1wQ29s
b3JDaGFubmVsKGFscGhhKTsKLQotICAgIENvbG9yIHJlc3VsdCA9IGFzU2ltcGxlKCkuY29sb3JX
aXRoQWxwaGEobmV3QWxwaGEpOworICAgIENvbG9yIHJlc3VsdCA9IGFzU2ltcGxlKCkuY29sb3JX
aXRoQWxwaGEoY29udmVydFRvQ29tcG9uZW50Qnl0ZShhbHBoYSkpOwogICAgIGlmIChpc1NlbWFu
dGljKCkpCiAgICAgICAgIHJlc3VsdC50YWdBc1NlbWFudGljKCk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKQEAgLTI3OSw3ICsyMzUsNyBAQCBDb2xvciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBo
YShmbG9hCiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGFzRXh0ZW5k
ZWQoKS5pbnZlcnRlZENvbG9yV2l0aEFscGhhKGFscGhhKTsKLSAgICByZXR1cm4gYXNTaW1wbGUo
KS5pbnZlcnRlZENvbG9yV2l0aEFscGhhKHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChh
bHBoYSkpOworICAgIHJldHVybiBhc1NpbXBsZSgpLmludmVydGVkQ29sb3JXaXRoQWxwaGEoY29u
dmVydFRvQ29tcG9uZW50Qnl0ZShhbHBoYSkpOwogfQogCiBDb2xvciBDb2xvcjo6c2VtYW50aWND
b2xvcigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmgJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQo
KS5hbHBoYSgpID09IDEuMCA6IGFzU2ltcGxlKCkuaXNPcGFxdWUoKTsgfQogICAgIGJvb2wgaXNW
aXNpYmxlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhh
KCkgPiAwLjAgOiBhc1NpbXBsZSgpLmlzVmlzaWJsZSgpOyB9CiAKLSAgICBpbnQgYWxwaGEoKSBj
b25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSAqIDI1NSA6
IGFzU2ltcGxlKCkuYWxwaGFDb21wb25lbnQoKTsgfQorICAgIHVpbnQ4X3QgYWxwaGEoKSBjb25z
dCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGFzRXh0ZW5k
ZWQoKS5hbHBoYSgpKSA6IGFzU2ltcGxlKCkuYWxwaGFDb21wb25lbnQoKTsgfQogICAgIGZsb2F0
IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQo
KS5hbHBoYSgpIDogYXNTaW1wbGUoKS5hbHBoYUNvbXBvbmVudEFzRmxvYXQoKTsgfQogCiAgICAg
dW5zaWduZWQgaGFzaCgpIGNvbnN0OwpAQCAtMTQ2LDE3ICsxNDYsMTYgQEAgcHVibGljOgogICAg
IENvbG9yIGJsZW5kV2l0aFdoaXRlKCkgY29uc3Q7CiAKICAgICBDb2xvciBpbnZlcnRlZENvbG9y
V2l0aEFscGhhKGZsb2F0IGFscGhhKSBjb25zdDsKKyAgICBDb2xvciBpbnZlcnRlZENvbG9yV2l0
aEFscGhhKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3Q7CiAKICAgICBDb2xvciBjb2xvcldp
dGhBbHBoYU11bHRpcGxpZWRCeShmbG9hdCkgY29uc3Q7Ci0gICAgQ29sb3IgY29sb3JXaXRoQWxw
aGEoZmxvYXQpIGNvbnN0OworICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KE9w
dGlvbmFsPGZsb2F0PikgY29uc3Q7CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBuZWVkIGZv
ciBBbHRlcm5hdGl2ZVJvdW5kaW5nIHZhcmlhbnRzIGJ5IHNldHRsaW5nIG9uIGEgcm91bmRpbmcg
YmVoYXZpb3IuCi0gICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVy
bmF0aXZlUm91bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+KSBjb25zdDsKLSAgICBDb2xvciBjb2xvcldp
dGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhmbG9hdCkgY29uc3Q7
Ci0gICAgQ29sb3IgY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoT3B0aW9u
YWw8ZmxvYXQ+KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBjb2xvcldpdGhBbHBo
YVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhmbG9hdCkgY29uc3Q7CisgICAgQ29sb3IgY29sb3JX
aXRoQWxwaGEoZmxvYXQpIGNvbnN0OworICAgIENvbG9yIGNvbG9yV2l0aEFscGhhKE9wdGlvbmFs
PGZsb2F0PikgY29uc3Q7CiAKICAgICBDb2xvciBvcGFxdWVDb2xvcigpIGNvbnN0IHsgcmV0dXJu
IGNvbG9yV2l0aEFscGhhKDEuMGYpOyB9CisKICAgICBDb2xvciBzZW1hbnRpY0NvbG9yKCkgY29u
c3Q7CiAKICAgICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5hdGVkIGZyb20gYSBDU1Mgc2Vt
YW50aWMgY29sb3IgbmFtZS4KQEAgLTI4OSwxNCArMjg4LDI0IEBAIGlubGluZSB1bnNpZ25lZCBD
b2xvcjo6aGFzaCgpIGNvbnN0CiAgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2NvbG9yRGF0YS5z
aW1wbGVDb2xvckFuZEZsYWdzKTsKIH0KIAotaW5saW5lIENvbG9yIENvbG9yOjpjb2xvcldpdGhB
bHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxmbG9hdD4g
YWxwaGEpIGNvbnN0CitpbmxpbmUgQ29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEo
T3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdAoreworICAgIHJldHVybiBhbHBoYSA/IGludmVy
dGVkQ29sb3JXaXRoQWxwaGEoYWxwaGEudmFsdWUoKSkgOiAqdGhpczsKK30KKworaW5saW5lIENv
bG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9hdCBhbW91bnQpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbG9yV2l0aEFscGhhKGFtb3VudCAqIGFscGhhQXNGbG9hdCgpKTsK
K30KKworaW5saW5lIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShPcHRp
b25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFscGhhID8gY29sb3JXaXRo
QWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoYWxwaGEudmFsdWUoKSkg
OiAqdGhpczsKKyAgICByZXR1cm4gYWxwaGEgPyBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShh
bHBoYS52YWx1ZSgpKSA6ICp0aGlzOwogfQogCi1pbmxpbmUgQ29sb3IgQ29sb3I6OmNvbG9yV2l0
aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29u
c3QKK2lubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoT3B0aW9uYWw8ZmxvYXQ+IGFs
cGhhKSBjb25zdAogewotICAgIHJldHVybiBhbHBoYSA/IGNvbG9yV2l0aEFscGhhVXNpbmdBbHRl
cm5hdGl2ZVJvdW5kaW5nKGFscGhhLnZhbHVlKCkpIDogKnRoaXM7CisgICAgcmV0dXJuIGFscGhh
ID8gY29sb3JXaXRoQWxwaGEoYWxwaGEudmFsdWUoKSkgOiAqdGhpczsKIH0KIAogaW5saW5lIGNv
bnN0IEV4dGVuZGVkQ29sb3ImIENvbG9yOjphc0V4dGVuZGVkKCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAJ
KHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTQgKzMxLDYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIGFyZUVzc2VudGlhbGx5RXF1YWwoY29uc3QgQ29sb3JD
b21wb25lbnRzPGZsb2F0PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgYikKLXsK
LSAgICByZXR1cm4gV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFbMF0sIGJbMF0pCi0gICAgICAg
ICYmIFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhWzFdLCBiWzFdKQotICAgICAgICAmJiBXVEY6
OmFyZUVzc2VudGlhbGx5RXF1YWwoYVsyXSwgYlsyXSkKLSAgICAgICAgJiYgV1RGOjphcmVFc3Nl
bnRpYWxseUVxdWFsKGFbM10sIGJbM10pOwotfQotCiAvLyBUaGVzZSBhcmUgdGhlIHN0YW5kYXJk
IHNSR0IgPC0+IGxpbmVhclJHQiBjb252ZXJzaW9uIGZ1bmN0aW9ucyAoaHR0cHM6Ly9lbi53aWtp
cGVkaWEub3JnL3dpa2kvU1JHQikuCiBmbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGZs
b2F0IGMpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0
aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDIx
ICs1MSwxNCBAQCBmbG9hdCBjb250cmFzdFJhdGlvKGNvbnN0IENvbG9yQ29tcG9uZW50CiAKIENv
bG9yQ29tcG9uZW50czxmbG9hdD4gcHJlbXVsdGlwbGllZChjb25zdCBDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+JiBzUkdCQ29tcG9udGVudHMpOwogCi1ib29sIGFyZUVzc2VudGlhbGx5RXF1YWwoY29u
c3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYsIGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4m
KTsKLQotaW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChpbnQgdmFsdWUp
CitpbmxpbmUgdWludDhfdCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGZsb2F0IGYpCiB7Ci0gICAg
cmV0dXJuIHN0ZDo6Y2xhbXAodmFsdWUsIDAsIDI1NSk7CisgICAgcmV0dXJuIHN0ZDo6Y2xhbXAo
c3RhdGljX2Nhc3Q8aW50PihzdGQ6Omxyb3VuZGYoZiAqIDI1NS4wZikpLCAwLCAyNTUpOwogfQog
Ci1pbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGZsb2F0IHZhbHVlKQor
Y29uc3RleHByIGZsb2F0IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KHVpbnQ4X3QgYnl0ZSkKIHsK
LSAgICByZXR1cm4gc3RkOjpjbGFtcChzdGQ6OnJvdW5kKHZhbHVlKSwgMC5mLCAyNTUuZik7Ci19
Ci0KLWlubGluZSB1aW50OF90IHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChmbG9hdCBm
KQotewotICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0YXRpY19jYXN0PGludD4obHJvdW5kZigyNTUu
MGYgKiBmKSksIDAsIDI1NSk7CisgICAgcmV0dXJuIGJ5dGUgLyAyNTUuMGY7CiB9CiAKIGNvbnN0
ZXhwciB1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2YWx1ZSkKQEAgLTgyLDUg
Kzc1LDQgQEAgY29uc3RleHByIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MQogICAgIHJl
dHVybiBhcHByb3hpbWF0aW9uICsgKHJlbWFpbmRlciA+PiA4KTsKIH0KIAotCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1w
bGVDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2ltcGxlQ29sb3IuY3BwCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDM0
ICs2NywxMyBAQCBTaW1wbGVDb2xvciBtYWtlVW5wcmVtdWx0aXBsaWVkU2ltcGxlQ29sCiAgICAg
cmV0dXJuIHBpeGVsQ29sb3I7CiB9CiAKLVNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21G
bG9hdHMoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKLXsKLSAgICByZXR1cm4g
bWFrZVNpbXBsZUNvbG9yKAotICAgICAgICBzY2FsZVJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwo
ciksCi0gICAgICAgIHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChnKSwKLSAgICAgICAg
c2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGIpLAotICAgICAgICBzY2FsZVJvdW5kQW5k
Q2xhbXBDb2xvckNoYW5uZWwoYSkKLSAgICApOwotfQotCi1TaW1wbGVDb2xvciBtYWtlU2ltcGxl
Q29sb3JGcm9tSFNMQShmbG9hdCBodWUsIGZsb2F0IHNhdHVyYXRpb24sIGZsb2F0IGxpZ2h0bmVz
cywgZmxvYXQgYWxwaGEpCi17Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBoc2xUb1NSR0IoeyBo
dWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSk7Ci0gICAgcmV0dXJuIG1ha2VTaW1w
bGVDb2xvcigKLSAgICAgICAgcm91bmQociAqIDI1NS4wZiksCi0gICAgICAgIHJvdW5kKGcgKiAy
NTUuMGYpLAotICAgICAgICByb3VuZChiICogMjU1LjBmKSwKLSAgICAgICAgcm91bmQoYSAqIDI1
NS4wZikKLSAgICApOwotfQotCiBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0Eo
ZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKIHsKLSAgICBkb3Vi
bGUgY29sb3JzID0gMSAtIGs7Ci0gICAgaW50IHIgPSBzdGF0aWNfY2FzdDxpbnQ+KG5leHRhZnRl
cigyNTYsIDApICogKGNvbG9ycyAqICgxIC0gYykpKTsKLSAgICBpbnQgZyA9IHN0YXRpY19jYXN0
PGludD4obmV4dGFmdGVyKDI1NiwgMCkgKiAoY29sb3JzICogKDEgLSBtKSkpOwotICAgIGludCBi
ID0gc3RhdGljX2Nhc3Q8aW50PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIChjb2xvcnMgKiAoMSAtIHkp
KSk7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyLCBnLCBiLCBzdGF0aWNfY2FzdDxmbG9h
dD4obmV4dGFmdGVyKDI1NiwgMCkgKiBhKSk7CisgICAgZmxvYXQgY29sb3JzID0gMSAtIGs7Cisg
ICAgZmxvYXQgciA9IGNvbG9ycyAqICgxLjBmIC0gYyk7CisgICAgZmxvYXQgZyA9IGNvbG9ycyAq
ICgxLjBmIC0gbSk7CisgICAgZmxvYXQgYiA9IGNvbG9ycyAqICgxLjBmIC0geSk7CisgICAgcmV0
dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMociwgZywgYiwgYSk7CiB9CiAKIFN0cmluZyBT
aW1wbGVDb2xvcjo6c2VyaWFsaXphdGlvbkZvckhUTUwoKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCShyZXZpc2lvbiAyNjI2
NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBjb25zdGV4cHIgdWlu
dDhfdCBibHVlQ29tcG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogICAgIGNvbnN0
ZXhwciB1aW50OF90IGFscGhhQ29tcG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA+PiAy
NDsgfQogCi0gICAgY29uc3RleHByIGZsb2F0IGFscGhhQ29tcG9uZW50QXNGbG9hdCgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYUNvbXBvbmVudCgpKSAvIDB4RkY7IH0K
KyAgICBjb25zdGV4cHIgZmxvYXQgYWxwaGFDb21wb25lbnRBc0Zsb2F0KCkgY29uc3QgeyByZXR1
cm4gY29udmVydFRvQ29tcG9uZW50RmxvYXQoYWxwaGFDb21wb25lbnQoKSk7IH0KIAogICAgIGNv
bnN0ZXhwciBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQoKSA9
PSAweEZGOyB9CiAgICAgY29uc3RleHByIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4g
YWxwaGFDb21wb25lbnQoKTsgfQpAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAKICAgICBjb25z
dGV4cHIgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBhc1NSR0JGbG9hdENvbXBvbmVudHMoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIHsgcmVkQ29tcG9uZW50KCkgLyAyNTUuMGYsIGdyZWVu
Q29tcG9uZW50KCkgLyAyNTUuMGYsIGJsdWVDb21wb25lbnQoKSAvIDI1NS4wZiwgIGFscGhhQ29t
cG9uZW50KCkgLyAyNTUuMGYgfTsKKyAgICAgICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50
RmxvYXQocmVkQ29tcG9uZW50KCkpLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChncmVlbkNvbXBv
bmVudCgpKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoYmx1ZUNvbXBvbmVudCgpKSwgIGNvbnZl
cnRUb0NvbXBvbmVudEZsb2F0KGFscGhhQ29tcG9uZW50KCkpIH07CiAgICAgfQogCiAgICAgdGVt
cGxhdGU8c3RkOjpzaXplX3QgTj4KQEAgLTk1LDE2ICs5NSwxNCBAQCBjb25zdGV4cHIgU2ltcGxl
Q29sb3IgbWFrZVNpbXBsZUNvbG9yKGluCiBjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBs
ZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKIAogU2ltcGxlQ29sb3IgbWFrZVNp
bXBsZUNvbG9yKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb25lbnRzKTsK
K1NpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoZmxvYXQgciwgZmxvYXQgZywg
ZmxvYXQgYiwgZmxvYXQgYSk7CitTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0Eo
ZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSk7CiAKIFNpbXBsZUNv
bG9yIG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50
IGEsIGJvb2wgY2VpbGluZyA9IHRydWUpOwogU2ltcGxlQ29sb3IgbWFrZVByZW11bHRpcGxpZWRT
aW1wbGVDb2xvcihTaW1wbGVDb2xvcik7CiBTaW1wbGVDb2xvciBtYWtlVW5wcmVtdWx0aXBsaWVk
U2ltcGxlQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpOwogU2ltcGxlQ29sb3IgbWFr
ZVVucHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKFNpbXBsZUNvbG9yKTsKIAotV0VCQ09SRV9FWFBP
UlQgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhmbG9hdCByLCBmbG9hdCBn
LCBmbG9hdCBiLCBmbG9hdCBhKTsKLVdFQkNPUkVfRVhQT1JUIFNpbXBsZUNvbG9yIG1ha2VTaW1w
bGVDb2xvckZyb21IU0xBKGZsb2F0IGgsIGZsb2F0IHMsIGZsb2F0IGwsIGZsb2F0IGEpOwotU2lt
cGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0
IHksIGZsb2F0IGssIGZsb2F0IGEpOwotCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFNpbXBsZUNv
bG9yIGEsIFNpbXBsZUNvbG9yIGIpCiB7CiAgICAgcmV0dXJuIGEudmFsdWUoKSA9PSBiLnZhbHVl
KCk7CkBAIC0xMTcsNyArMTE1LDcgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShTaW1wbGVDb2xv
ciBhLCBTaQogCiBjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGludCByLCBp
bnQgZywgaW50IGIpCiB7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyLCBnLCBiLCAweEZG
KTsKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50OF90PihzdGQ6OmNsYW1wKHIsIDAsIDB4
RkYpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RkOjpjbGFtcChnLCAwLCAweEZGKSksIHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xhbXAoYiwgMCwgMHhGRikpLCAweEZGIH07CiB9CiAKIGNv
bnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwg
aW50IGEpCkBAIC0xMjgsMTIgKzEyNiwxMiBAQCBjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNp
bXBsZUNvbG9yKGluCiBpbmxpbmUgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGNvbnN0IENv
bG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb25lbnRzKQogewogICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gc1JHQkNvbXBvbmVudHM7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKLSAg
ICAgICAgc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHIpLAotICAgICAgICBzY2FsZVJv
dW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZyksCi0gICAgICAgIHNjYWxlUm91bmRBbmRDbGFtcENv
bG9yQ2hhbm5lbChiKSwKLSAgICAgICAgc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGEp
Ci0gICAgKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBh
KTsKK30KKworaW5saW5lIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoZmxv
YXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKK3sKKyAgICByZXR1cm4geyBjb252ZXJ0
VG9Db21wb25lbnRCeXRlKHIpLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGcpLCBjb252ZXJ0VG9D
b21wb25lbnRCeXRlKGIpLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGEpIH07CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjYy
NjU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBzdGF0aWMgdm9pZCBw
cmVwYXJlQ2Fpcm9Db250ZXh0U291cmNlKGNhCiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gU29s
aWQgY29sb3Igc291cmNlCiAgICAgICAgIGlmIChnbG9iYWxBbHBoYSA8IDEpCi0gICAgICAgICAg
ICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhnbG9iYWxBbHBoYSkpOworICAgICAgICAgICAg
c2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVk
QnkoZ2xvYmFsQWxwaGEpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0U291cmNlUkdC
QUZyb21Db2xvcihjciwgY29sb3IpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyNjI2NTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzgsOCArNzgsNyBAQCBzdGF0aWMgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9y
RnJvbUNHCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXIoMjU2LjAsIDAuMCk7Ci0gICAg
cmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyICogc2NhbGVGYWN0b3IsIGcgKiBzY2FsZUZhY3Rvciwg
YiAqIHNjYWxlRmFjdG9yLCBhICogc2NhbGVGYWN0b3IpOworICAgIHJldHVybiBtYWtlU2ltcGxl
Q29sb3JGcm9tRmxvYXRzKHIsIGcsIGIsIGEpOwogfQogCiBDb2xvcjo6Q29sb3IoQ0dDb2xvclJl
ZiBjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVGbG9vZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmNwcAkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjMsNyArNjMsNyBAQCB2b2lkIEZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAg
ICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBjb2xvciA9
IGZsb29kQ29sb3IoKS5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVS
b3VuZGluZyhmbG9vZE9wYWNpdHkoKSk7CisgICAgYXV0byBjb2xvciA9IGZsb29kQ29sb3IoKS5j
b2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9vZE9wYWNpdHkoKSk7CiAgICAgcmVzdWx0SW1h
Z2UtPmNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBh
aW50UmVjdCgpLnNpemUoKSksIGNvbG9yKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQkocmV2aXNpb24gMjYyNjU5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OCw4ICs4OCw3IEBAIHN0YXRpYyBTaW1wbGVDb2xvciBtYWtlU2ltcGxl
Q29sb3JGcm9tTlMKICAgICBbcmdiQ29sb3IgZ2V0UmVkOiZyZWRDb21wb25lbnQgZ3JlZW46Jmdy
ZWVuQ29tcG9uZW50IGJsdWU6JmJsdWVDb21wb25lbnQgYWxwaGE6JmFscGhhXTsKICAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBzY2FsZUZh
Y3RvciA9IG5leHRhZnRlcigyNTYuMCwgMC4wKTsKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9y
KHNjYWxlRmFjdG9yICogcmVkQ29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGdyZWVuQ29tcG9uZW50
LCBzY2FsZUZhY3RvciAqIGJsdWVDb21wb25lbnQsIHNjYWxlRmFjdG9yICogYWxwaGEpOworICAg
IHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKHJlZENvbXBvbmVudCwgZ3JlZW5Db21w
b25lbnQsIGJsdWVDb21wb25lbnQsIGFscGhhKTsKIH0KIAogQ29sb3IgY29sb3JGcm9tTlNDb2xv
cihOU0NvbG9yICpjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xv
cklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvQ29sb3JJ
T1MubW0JKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9D
b2xvcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsNyBAQCBDb2xvciBjb2xvckZy
b21VSUNvbG9yKFVJQ29sb3IgKmNvbG9yKQogCiAgICAgW2NvbG9yIGdldFJlZDomcmVkQ29tcG9u
ZW50IGdyZWVuOiZncmVlbkNvbXBvbmVudCBibHVlOiZibHVlQ29tcG9uZW50IGFscGhhOiZhbHBo
YV07CiAKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyKDI1
Ni4wLCAwLjApOwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3Ioc2NhbGVGYWN0b3IgKiByZWRD
b21wb25lbnQsIHNjYWxlRmFjdG9yICogZ3JlZW5Db21wb25lbnQsIHNjYWxlRmFjdG9yICogYmx1
ZUNvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBhbHBoYSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvckZyb21GbG9hdHMocmVkQ29tcG9uZW50LCBncmVlbkNvbXBvbmVudCwgYmx1ZUNvbXBvbmVu
dCwgYWxwaGEpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcg
QEAgQ29sb3IgU1ZHU3RvcEVsZW1lbnQ6OnN0b3BDb2xvckluY2x1ZGluZwogICAgIGF1dG8mIHN2
Z1N0eWxlID0gc3R5bGUuc3ZnU3R5bGUoKTsKICAgICBhdXRvIHN0b3BDb2xvciA9IHN0eWxlLmNv
bG9yUmVzb2x2aW5nQ3VycmVudENvbG9yKHN2Z1N0eWxlLnN0b3BDb2xvcigpKTsKIAotICAgIHJl
dHVybiBzdG9wQ29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZl
Um91bmRpbmcoc3ZnU3R5bGUuc3RvcE9wYWNpdHkoKSk7CisgICAgcmV0dXJuIHN0b3BDb2xvci5j
b2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShzdmdTdHlsZS5zdG9wT3BhY2l0eSgpKTsKIH0KIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRp
dmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9w
cm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkocmV2aXNp
b24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9u
QWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0
LDE2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgaW5saW5lIHVpbnQ4X3Qgcm91
bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
c3RkOjpjbGFtcCh2YWx1ZSwgMCwgMjU1KTsKKyAgICB9CisKKyAgICBpbmxpbmUgdWludDhfdCBy
b3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGZsb2F0IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6Y2xhbXAoc3RkOjpyb3VuZCh2YWx1ZSksIDAuMGYsIDI1NS4wZik7CisgICAgfQor
CiAgICAgdm9pZCBhZGRGcm9tQW5kVG9WYWx1ZXMoU1ZHRWxlbWVudCopIG92ZXJyaWRlCiAgICAg
ewogICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2Zyb20udG9TUkdCQVNpbXBsZUNvbG9yTG9z
c3koKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9T
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJW
aWV3SU9TLm1tCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvaW9zL1dLV2ViVmlld0lPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTEzLDcgKzUxMyw3IEBA
IHN0YXRpYyBXZWJDb3JlOjpDb2xvciBzY3JvbGxWaWV3QmFja2dyb3UKICAgICBpZiAoem9vbVNj
YWxlIDwgbWluaW11bVpvb21TY2FsZSkgewogICAgICAgICBDR0Zsb2F0IHNsb3BlID0gMTI7CiAg
ICAgICAgIENHRmxvYXQgb3BhY2l0eSA9IHN0ZDo6bWF4PENHRmxvYXQ+KDEgLSBzbG9wZSAqICht
aW5pbXVtWm9vbVNjYWxlIC0gem9vbVNjYWxlKSwgMCk7Ci0gICAgICAgIGNvbG9yID0gY29sb3Iu
Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcob3BhY2l0eSk7CisgICAgICAg
IGNvbG9yID0gY29sb3IuY29sb3JXaXRoQWxwaGEob3BhY2l0eSk7CiAgICAgfQogCiAgICAgcmV0
dXJuIGNvbG9yOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9y
VGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9Db2xvclRlc3RzLmNwcAkocmV2aXNpb24gMjYyNjU5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0
NSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1doaXRlKQogICAgIAogICAgIEVYUEVDVF9GTE9B
VF9FUShjb2xvci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKICAgICAKLSAgICBhdXRvIHJvdW5k
VHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoaHVlLCBzYXR1cmF0
aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENv
bG9yKG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVz
cywgYWxwaGEgfSkpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwog
fQogCkBAIC02MSw3ICs2MSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsYWNrKQogCiAgICAg
RVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOwogCi0gICAgYXV0
byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21IU0xBKGh1ZSwg
c2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29s
b3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBs
aWdodG5lc3MsIGFscGhhIH0pKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENv
bG9yKTsKIH0KIApAQCAtNzcsNyArNzcsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9SZWQpCiAK
ICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CiAKLSAg
ICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEo
aHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7CisgICAgYXV0byByb3VuZFRyaXBw
ZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRp
b24sIGxpZ2h0bmVzcywgYWxwaGEgfSkpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlw
cGVkQ29sb3IpOwogfQogCkBAIC05Myw3ICs5Myw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dy
ZWVuKQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3Mp
OwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvckZy
b21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOworICAgIGF1dG8gcm91
bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBz
YXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJv
dW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTA5LDcgKzEwOSw3IEBAIFRFU1QoQ29sb3IsIFJH
QlRvSFNMX0JsdWUpCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxp
Z2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBs
ZUNvbG9yRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7CisgICAg
YXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0Io
eyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSkpOwogICAgIEVYUEVDVF9FUShj
b2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC0xMjUsNyArMTI1LDcgQEAgVEVTVChD
b2xvciwgUkdCVG9IU0xfRGFya0dyYXkpCiAgICAgCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9y
LmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9
IENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNz
LCBhbHBoYSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxl
Q29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pKTsK
ICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTQxLDcg
KzE0MSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyYXkpCiAKICAgICBFWFBFQ1RfRkxPQVRf
RVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBl
ZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBs
aWdodG5lc3MsIGFscGhhKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1h
a2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxw
aGEgfSkpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBA
IC0xNTcsNyArMTU3LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfTGlnaHRHcmF5KQogCiAgICAg
RVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOwogCi0gICAgYXV0
byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21IU0xBKGh1ZSwg
c2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29s
b3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBs
aWdodG5lc3MsIGFscGhhIH0pKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENv
bG9yKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401277</attachid>
            <date>2020-06-06 13:40:25 -0700</date>
            <delta_ts>2020-06-06 14:23:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212871-20200606134024.patch</filename>
            <type>text/plain</type>
            <size>32339</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDIwLTA2LTA2ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvcjogVW5pZnkg
cm91bmRpbmcgLyBjbGFtcGluZyBjb252ZXJzaW9ucyBiZXR3ZWVuIDAtMSBmbG9hdCBjb21wb25l
bnRzIGFuZCAwLTI1NSBieXRlIGNvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjg3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdJUC4KKworICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmlsbFN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
U3R5bGU6OmNyZWF0ZUZyb21TdHJpbmdXaXRoT3ZlcnJpZGVBbHBoYSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkYXJrIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRp
bmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFs
cGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFscGhh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6YXJlRXNzZW50aWFsbHlFcXVhbCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnRUb0NvbXBvbmVudEJ5dGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRv
Q29tcG9uZW50RmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6cm91bmRBbmRDbGFtcENvbG9yQ2hh
bm5lbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzY2FsZVJvdW5kQW5kQ2xhbXBDb2xv
ckNoYW5uZWwpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNv
bG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEpOgorICAgICAgICAoV2Vi
Q29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVDb2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmFscGhh
Q29tcG9uZW50QXNGbG9hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6
YXNTUkdCRmxvYXRDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1w
bGVDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xvcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NvbG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9y
RnJvbU5TQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9Db2xvcklPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbG9yRnJvbVVJQ29sb3IpOgorICAgICAgICAqIHN2Zy9TVkdTdG9wRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5j
bHVkaW5nT3BhY2l0eSBjb25zdCk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0aW9uQ29sb3JGdW5jdGlvbjo6cm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbCk6CisKIDIwMjAt
MDYtMDYgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXSBB
ZGQgc3VwcG9ydCBmb3Igd2lkdGg6IG1pbi9tYXgtY29udGVudApJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAko
cmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTcsMTMgKzUxNywxMyBAQCBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVVcmwoQ1NTCiAgICAgcmV0dXJuIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUodXJsLnRvU3RyaW5nKCksIENTU1VuaXRU
eXBlOjpDU1NfVVJJKTsKIH0KIAotc3RhdGljIGludCBjbGFtcFJHQkNvbXBvbmVudChjb25zdCBD
U1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUpCitzdGF0aWMgdWludDhfdCBjbGFtcFJHQkNvbXBvbmVu
dChjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUpCiB7CiAgICAgZG91YmxlIHJlc3VsdCA9
IHZhbHVlLmRvdWJsZVZhbHVlKCk7CiAgICAgaWYgKHZhbHVlLmlzUGVyY2VudGFnZSgpKQogICAg
ICAgICByZXN1bHQgPSByZXN1bHQgLyAxMDAuMCAqIDI1NS4wOwogCi0gICAgcmV0dXJuIGNsYW1w
VG88aW50Pihyb3VuZChyZXN1bHQpLCAwLCAyNTUpOworICAgIHJldHVybiBjbGFtcFRvPHVpbnQ4
X3Q+KHJvdW5kKHJlc3VsdCksIDAsIDI1NSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZVJHQlBh
cmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkBAIC01NTEsNyArNTUxLDcgQEAg
c3RhdGljIENvbG9yIHBhcnNlUkdCUGFyYW1ldGVycyhDU1NQYXJzZQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9OwogCi0gICAgaW50IGNvbG9yQXJyYXlbM107CisgICAgdWludDhfdCBjb2xv
ckFycmF5WzNdOwogICAgIGNvbG9yQXJyYXlbMF0gPSBjbGFtcFJHQkNvbXBvbmVudCgqY29sb3JQ
YXJhbWV0ZXIpOwogICAgIGZvciAoaW50IGkgPSAxOyBpIDwgMzsgaSsrKSB7CiAgICAgICAgIGlm
IChpID09IDEpCkBAIC01NzMsNyArNTczLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUkdCUGFyYW1l
dGVycyhDU1NQYXJzZQogICAgICAgICByZXR1cm4gY29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVz
cGFjZShhcmdzKTsKICAgICB9OwogCi0gICAgaW50IGFscGhhQ29tcG9uZW50ID0gMjU1OworICAg
IHVpbnQ4X3QgYWxwaGFDb21wb25lbnQgPSAyNTU7CiAgICAgaWYgKGNvbnN1bWVBbHBoYVNlcGFy
YXRvcigpKSB7CiAgICAgICAgIGRvdWJsZSBhbHBoYTsKICAgICAgICAgaWYgKCFjb25zdW1lTnVt
YmVyUmF3KGFyZ3MsIGFscGhhKSkgewpAQCAtNTgyLDkgKzU4Miw3IEBAIHN0YXRpYyBDb2xvciBw
YXJzZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2UKICAgICAgICAgICAgICAgICByZXR1cm4gQ29sb3Io
KTsKICAgICAgICAgICAgIGFscGhhID0gYWxwaGFQZXJjZW50LT5kb3VibGVWYWx1ZSgpIC8gMTAw
LjA7CiAgICAgICAgIH0KLQotICAgICAgICAvLyBXMyBzdGFuZGFyZCBzdGlwdWxhdGVzIGEgMi41
NSBhbHBoYSB2YWx1ZSBtdWx0aXBsaWNhdGlvbiBmYWN0b3IuCi0gICAgICAgIGFscGhhQ29tcG9u
ZW50ID0gc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKGNsYW1wVG88ZG91YmxlPihhbHBoYSwgMC4w
LCAxLjApICogMjU1LjBmKSk7CisgICAgICAgIGFscGhhQ29tcG9uZW50ID0gY29udmVydFRvQ29t
cG9uZW50Qnl0ZShhbHBoYSk7CiAgICAgfTsKIAogICAgIGlmICghYXJncy5hdEVuZCgpKQpAQCAt
NjQyLDcgKzY0MCw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2UK
ICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAKLSAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJy
YXlbMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsxXSksIHN0YXRpY19jYXN0PGZs
b2F0Pihjb2xvckFycmF5WzJdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKSk7CisgICAgcmV0
dXJuIG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JB
cnJheVswXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzFdKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGNvbG9yQXJyYXlbMl0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pKTsKIH0K
IAogc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFE
ZXRlY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9E
YXRhRGV0ZWN0aW9uLm1tCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTYyMyw5ICs2MjMs
OSBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SCiAKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBsaWdodG5lc3Mgb2YgdGhlIHVuZGVybGluZSBj
b2xvciB0byB0aGUgbWlkZGxlLCBhbmQgbXVsdGlwbHkgdGhlIGFscGhhIGJ5IDM4JSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoZSBjb2xvciB3aWxsIGFwcGVhciBvbiBsaWdodCBh
bmQgZGFyayBiYWNrZ3JvdW5kcywgc2luY2Ugb25seSBvbmUgY29sb3IgY2FuIGJlIHNwZWNpZmll
ZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBvdmVycmlkZUxpZ2h0bmVzcyA9IDAu
NTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBvdmVycmlkZUFscGhhTXVsdGlwbGll
ciA9IDAuMzg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVuZGVybGluZUNvbG9yID0g
bWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBvdmVycmlkZUxpZ2h0bmVz
cywgb3ZlcnJpZGVBbHBoYU11bHRpcGxpZXIgKiBhbHBoYSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmbG9hdCBvdmVycmlkZUxpZ2h0bmVzcyA9IDAuNWY7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmbG9hdCBvdmVycmlkZUFscGhhTXVsdGlwbGllciA9IDAuMzhmOworICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byB1bmRlcmxpbmVDb2xvciA9IG1ha2VTaW1wbGVDb2xvcihoc2xUb1NS
R0IoeyBodWUsIHNhdHVyYXRpb24sIG92ZXJyaWRlTGlnaHRuZXNzLCBvdmVycmlkZUFscGhhTXVs
dGlwbGllciAqIGFscGhhIH0pKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yRWxl
bWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBDU1NWYWx1ZUN1
cnJlbnRjb2xvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb25Db2xvciwgdW5kZXJs
aW5lQ29sb3Iuc2VyaWFsaXphdGlvbkZvckNTUygpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3Myw5ICsxMDczLDkgQEAgc3RhdGlj
IE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZUxlZ2FjeQogICAgIEFTU0VSVChibHVlSW5kZXgg
Pj0gY29tcG9uZW50TGVuZ3RoICogMik7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oYmx1ZUluZGV4ICsgMSA8IGRpZ2l0QnVmZmVyLnNpemUoKSk7CiAKLSAgICBpbnQgcmVk
VmFsdWUgPSB0b0FTQ0lJSGV4VmFsdWUoZGlnaXRCdWZmZXJbcmVkSW5kZXhdLCBkaWdpdEJ1ZmZl
cltyZWRJbmRleCArIDFdKTsKLSAgICBpbnQgZ3JlZW5WYWx1ZSA9IHRvQVNDSUlIZXhWYWx1ZShk
aWdpdEJ1ZmZlcltncmVlbkluZGV4XSwgZGlnaXRCdWZmZXJbZ3JlZW5JbmRleCArIDFdKTsKLSAg
ICBpbnQgYmx1ZVZhbHVlID0gdG9BU0NJSUhleFZhbHVlKGRpZ2l0QnVmZmVyW2JsdWVJbmRleF0s
IGRpZ2l0QnVmZmVyW2JsdWVJbmRleCArIDFdKTsKKyAgICB1aW50OF90IHJlZFZhbHVlID0gdG9B
U0NJSUhleFZhbHVlKGRpZ2l0QnVmZmVyW3JlZEluZGV4XSwgZGlnaXRCdWZmZXJbcmVkSW5kZXgg
KyAxXSk7CisgICAgdWludDhfdCBncmVlblZhbHVlID0gdG9BU0NJSUhleFZhbHVlKGRpZ2l0QnVm
ZmVyW2dyZWVuSW5kZXhdLCBkaWdpdEJ1ZmZlcltncmVlbkluZGV4ICsgMV0pOworICAgIHVpbnQ4
X3QgYmx1ZVZhbHVlID0gdG9BU0NJSUhleFZhbHVlKGRpZ2l0QnVmZmVyW2JsdWVJbmRleF0sIGRp
Z2l0QnVmZmVyW2JsdWVJbmRleCArIDFdKTsKICAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHJl
ZFZhbHVlLCBncmVlblZhbHVlLCBibHVlVmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlLmNwcAkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NSw3
ICszNzUsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFN0CiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmIChzdHlsZS5pc0N1cnJlbnRDb2xvcigpKQotICAgICAgICBz
dHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpLmNvbG9yV2l0aEFs
cGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKHN0eWxlLm92ZXJyaWRlQWxwaGEoKSkpOworICAg
ICAgICBzdHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpLmNvbG9y
V2l0aEFscGhhKHN0eWxlLm92ZXJyaWRlQWxwaGEoKSkpOwogICAgIGVsc2UKICAgICAgICAgY2hl
Y2tPcmlnaW4oc3R5bGUuY2FudmFzUGF0dGVybigpLmdldCgpKTsKIApAQCAtMzk4LDcgKzM5OCw3
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKHN0eWxlLmlzQ3VycmVudENvbG9yKCkpCi0gICAgICAgIHN0eWxlID0g
Q2FudmFzU3R5bGUoY3VycmVudENvbG9yKGNhbnZhc0Jhc2UoKSkuY29sb3JXaXRoQWxwaGFVc2lu
Z0FsdGVybmF0aXZlUm91bmRpbmcoc3R5bGUub3ZlcnJpZGVBbHBoYSgpKSk7CisgICAgICAgIHN0
eWxlID0gQ2FudmFzU3R5bGUoY3VycmVudENvbG9yKGNhbnZhc0Jhc2UoKSkuY29sb3JXaXRoQWxw
aGEoc3R5bGUub3ZlcnJpZGVBbHBoYSgpKSk7CiAgICAgZWxzZQogICAgICAgICBjaGVja09yaWdp
bihzdHlsZS5jYW52YXNQYXR0ZXJuKCkuZ2V0KCkpOwogCkBAIC0xMzAyLDcgKzEzMDIsNyBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoCiAgICAgICAgIGlmICghY29s
b3IuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBzZXRTaGFkb3co
RmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb2xvci5jb2xvcldpdGhBbHBoYVVzaW5n
QWx0ZXJuYXRpdmVSb3VuZGluZyhhbHBoYSkpOworICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lk
dGgsIGhlaWdodCksIGJsdXIsIGNvbG9yLmNvbG9yV2l0aEFscGhhKGFscGhhKSk7CiB9CiAKIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBm
bG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCShyZXZpc2lv
biAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0Myw3ICsxNDMsNyBAQCBDYW52YXNTdHlsZSBDYW52YXNTdHls
ZTo6Y3JlYXRlRnJvbVN0cmluCiAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICByZXR1cm4gY29sb3IuY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0
aXZlUm91bmRpbmcoYWxwaGEpOworICAgIHJldHVybiBjb2xvci5jb2xvcldpdGhBbHBoYShhbHBo
YSk7CiB9CiAKIGJvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudENvbG9yKGNvbnN0IENhbnZh
c1N0eWxlJiBvdGhlcikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiAyNjI2NTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9y
KGNvbnN0IEpTT046Ok9iamUKICAgICBlbHNlIGlmIChhID4gMSkKICAgICAgICAgYSA9IDE7CiAK
LSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIHN0YXRpY19jYXN0PGludD4oYSAq
IDI1NSkpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgY29udmVydFRvQ29t
cG9uZW50Qnl0ZShhKSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbmZpZ0NvbG9yKGNvbnN0
IFN0cmluZyYgZmllbGROYW1lLCBjb25zdCBKU09OOjpPYmplY3QqIGNvbmZpZ09iamVjdCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlzaW9u
IDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIxLDExICsxMjEsOCBAQCBDb2xvciBDb2xvcjo6bGlnaHQoKSBj
b25zdAogICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNhc2UgZm9yIHNwZWVkLgogICAgIGlm
ICghaXNFeHRlbmRlZCgpICYmIGFzU2ltcGxlKCkgPT0gYmxhY2spCiAgICAgICAgIHJldHVybiBs
aWdodGVuZWRCbGFjazsKLSAgICAKLSAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IG5leHRh
ZnRlcmYoMjU2LjBmLCAwLjBmKTsKIAogICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNv
bXBvbmVudHNMb3NzeSgpOwotCiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsK
IAogICAgIGlmICh2ID09IDAuMGYpCkBAIC0xMzMsMTIgKzEzMCw3IEBAIENvbG9yIENvbG9yOjps
aWdodCgpIGNvbnN0CiAKICAgICBmbG9hdCBtdWx0aXBsaWVyID0gc3RkOjptaW4oMS4wZiwgdiAr
IDAuMzNmKSAvIHY7CiAKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKAotICAgICAgICBzdGF0
aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAotICAgICAgICBzdGF0
aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0b3IpLAotICAgICAgICBzdGF0
aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBiICogc2NhbGVGYWN0b3IpLAotICAgICAgICBhbHBo
YSgpCi0gICAgKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhtdWx0aXBs
aWVyICogciwgbXVsdGlwbGllciAqIGcsIG11bHRpcGxpZXIgKiBiLCBhKTsKIH0KIAogQ29sb3Ig
Q29sb3I6OmRhcmsoKSBjb25zdApAQCAtMTQ3LDE5ICsxMzksMTIgQEAgQ29sb3IgQ29sb3I6OmRh
cmsoKSBjb25zdAogICAgIGlmICghaXNFeHRlbmRlZCgpICYmIGFzU2ltcGxlKCkgPT0gd2hpdGUp
CiAgICAgICAgIHJldHVybiBkYXJrZW5lZFdoaXRlOwogICAgIAotICAgIGNvbnN0IGZsb2F0IHNj
YWxlRmFjdG9yID0gbmV4dGFmdGVyZigyNTYuMGYsIDAuMGYpOwotCiAgICAgYXV0byBbciwgZywg
YiwgYV0gPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAKICAgICBmbG9hdCB2ID0gc3RkOjpt
YXgoeyByLCBnLCBiIH0pOwogICAgIGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6Om1heCgwLjBmLCAo
diAtIDAuMzNmKSAvIHYpOwogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAg
YWxwaGEoKQotICAgICk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMobXVs
dGlwbGllciAqIHIsIG11bHRpcGxpZXIgKiBnLCBtdWx0aXBsaWVyICogYiwgYSk7CiB9CiAKIGJv
b2wgQ29sb3I6OmlzRGFyaygpIGNvbnN0CkBAIC0yMzUsNDEgKzIyMCwxMiBAQCBDb2xvciBDb2xv
cjo6YmxlbmRXaXRoV2hpdGUoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUNvbG9y
IENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9hdCBhbW91bnQpIGNvbnN0Ci17
Ci0gICAgZmxvYXQgbmV3QWxwaGEgPSBhbW91bnQgKiBhbHBoYUFzRmxvYXQoKTsKLSAgICByZXR1
cm4gY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwotfQotCi1Db2xvciBDb2xvcjo6Y29sb3JXaXRo
QWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQgYW1vdW50KSBj
b25zdAotewotICAgIGZsb2F0IG5ld0FscGhhID0gYW1vdW50ICogYWxwaGFBc0Zsb2F0KCk7Ci0g
ICAgcmV0dXJuIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKG5ld0FscGhh
KTsKLX0KLQogQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhKGZsb2F0IGFscGhhKSBjb25zdAog
ewogICAgIGlmIChpc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY29s
b3JXaXRoQWxwaGEoYWxwaGEpOwogCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgd2hlcmUgdGhpcyBm
dW5jdGlvbiBkaWZmZXJzIGZyb20gY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRp
bmcuCi0gICAgdWludDhfdCBuZXdBbHBoYSA9IGFscGhhICogMHhGRjsKLQotICAgIENvbG9yIHJl
c3VsdCA9IGFzU2ltcGxlKCkuY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwotICAgIGlmIChpc1Nl
bWFudGljKCkpCi0gICAgICAgIHJlc3VsdC50YWdBc1NlbWFudGljKCk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJv
dW5kaW5nKGZsb2F0IGFscGhhKSBjb25zdAotewotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAg
ICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY29sb3JXaXRoQWxwaGEoYWxwaGEpOwotCi0gICAgLy8g
RklYTUU6IFRoaXMgaXMgd2hlcmUgdGhpcyBmdW5jdGlvbiBkaWZmZXJzIGZyb20gY29sb3JXaXRo
QWxwaGFVc2luZy4KLSAgICB1aW50OF90IG5ld0FscGhhID0gc2NhbGVSb3VuZEFuZENsYW1wQ29s
b3JDaGFubmVsKGFscGhhKTsKLQotICAgIENvbG9yIHJlc3VsdCA9IGFzU2ltcGxlKCkuY29sb3JX
aXRoQWxwaGEobmV3QWxwaGEpOworICAgIENvbG9yIHJlc3VsdCA9IGFzU2ltcGxlKCkuY29sb3JX
aXRoQWxwaGEoY29udmVydFRvQ29tcG9uZW50Qnl0ZShhbHBoYSkpOwogICAgIGlmIChpc1NlbWFu
dGljKCkpCiAgICAgICAgIHJlc3VsdC50YWdBc1NlbWFudGljKCk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKQEAgLTI3OSw3ICsyMzUsNyBAQCBDb2xvciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBo
YShmbG9hCiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGFzRXh0ZW5k
ZWQoKS5pbnZlcnRlZENvbG9yV2l0aEFscGhhKGFscGhhKTsKLSAgICByZXR1cm4gYXNTaW1wbGUo
KS5pbnZlcnRlZENvbG9yV2l0aEFscGhhKHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChh
bHBoYSkpOworICAgIHJldHVybiBhc1NpbXBsZSgpLmludmVydGVkQ29sb3JXaXRoQWxwaGEoY29u
dmVydFRvQ29tcG9uZW50Qnl0ZShhbHBoYSkpOwogfQogCiBDb2xvciBDb2xvcjo6c2VtYW50aWND
b2xvcigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmgJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQo
KS5hbHBoYSgpID09IDEuMCA6IGFzU2ltcGxlKCkuaXNPcGFxdWUoKTsgfQogICAgIGJvb2wgaXNW
aXNpYmxlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhh
KCkgPiAwLjAgOiBhc1NpbXBsZSgpLmlzVmlzaWJsZSgpOyB9CiAKLSAgICBpbnQgYWxwaGEoKSBj
b25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSAqIDI1NSA6
IGFzU2ltcGxlKCkuYWxwaGFDb21wb25lbnQoKTsgfQorICAgIHVpbnQ4X3QgYWxwaGEoKSBjb25z
dCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGFzRXh0ZW5k
ZWQoKS5hbHBoYSgpKSA6IGFzU2ltcGxlKCkuYWxwaGFDb21wb25lbnQoKTsgfQogICAgIGZsb2F0
IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQo
KS5hbHBoYSgpIDogYXNTaW1wbGUoKS5hbHBoYUNvbXBvbmVudEFzRmxvYXQoKTsgfQogCiAgICAg
dW5zaWduZWQgaGFzaCgpIGNvbnN0OwpAQCAtMTQ2LDE3ICsxNDYsMTYgQEAgcHVibGljOgogICAg
IENvbG9yIGJsZW5kV2l0aFdoaXRlKCkgY29uc3Q7CiAKICAgICBDb2xvciBpbnZlcnRlZENvbG9y
V2l0aEFscGhhKGZsb2F0IGFscGhhKSBjb25zdDsKKyAgICBDb2xvciBpbnZlcnRlZENvbG9yV2l0
aEFscGhhKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3Q7CiAKICAgICBDb2xvciBjb2xvcldp
dGhBbHBoYU11bHRpcGxpZWRCeShmbG9hdCkgY29uc3Q7Ci0gICAgQ29sb3IgY29sb3JXaXRoQWxw
aGEoZmxvYXQpIGNvbnN0OworICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KE9w
dGlvbmFsPGZsb2F0PikgY29uc3Q7CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBuZWVkIGZv
ciBBbHRlcm5hdGl2ZVJvdW5kaW5nIHZhcmlhbnRzIGJ5IHNldHRsaW5nIG9uIGEgcm91bmRpbmcg
YmVoYXZpb3IuCi0gICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVy
bmF0aXZlUm91bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+KSBjb25zdDsKLSAgICBDb2xvciBjb2xvcldp
dGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhmbG9hdCkgY29uc3Q7
Ci0gICAgQ29sb3IgY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoT3B0aW9u
YWw8ZmxvYXQ+KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBjb2xvcldpdGhBbHBo
YVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhmbG9hdCkgY29uc3Q7CisgICAgQ29sb3IgY29sb3JX
aXRoQWxwaGEoZmxvYXQpIGNvbnN0OworICAgIENvbG9yIGNvbG9yV2l0aEFscGhhKE9wdGlvbmFs
PGZsb2F0PikgY29uc3Q7CiAKICAgICBDb2xvciBvcGFxdWVDb2xvcigpIGNvbnN0IHsgcmV0dXJu
IGNvbG9yV2l0aEFscGhhKDEuMGYpOyB9CisKICAgICBDb2xvciBzZW1hbnRpY0NvbG9yKCkgY29u
c3Q7CiAKICAgICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5hdGVkIGZyb20gYSBDU1Mgc2Vt
YW50aWMgY29sb3IgbmFtZS4KQEAgLTI4OSwxNCArMjg4LDI0IEBAIGlubGluZSB1bnNpZ25lZCBD
b2xvcjo6aGFzaCgpIGNvbnN0CiAgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2NvbG9yRGF0YS5z
aW1wbGVDb2xvckFuZEZsYWdzKTsKIH0KIAotaW5saW5lIENvbG9yIENvbG9yOjpjb2xvcldpdGhB
bHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxmbG9hdD4g
YWxwaGEpIGNvbnN0CitpbmxpbmUgQ29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEo
T3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdAoreworICAgIHJldHVybiBhbHBoYSA/IGludmVy
dGVkQ29sb3JXaXRoQWxwaGEoYWxwaGEudmFsdWUoKSkgOiAqdGhpczsKK30KKworaW5saW5lIENv
bG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9hdCBhbW91bnQpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbG9yV2l0aEFscGhhKGFtb3VudCAqIGFscGhhQXNGbG9hdCgpKTsK
K30KKworaW5saW5lIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShPcHRp
b25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFscGhhID8gY29sb3JXaXRo
QWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoYWxwaGEudmFsdWUoKSkg
OiAqdGhpczsKKyAgICByZXR1cm4gYWxwaGEgPyBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShh
bHBoYS52YWx1ZSgpKSA6ICp0aGlzOwogfQogCi1pbmxpbmUgQ29sb3IgQ29sb3I6OmNvbG9yV2l0
aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29u
c3QKK2lubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoT3B0aW9uYWw8ZmxvYXQ+IGFs
cGhhKSBjb25zdAogewotICAgIHJldHVybiBhbHBoYSA/IGNvbG9yV2l0aEFscGhhVXNpbmdBbHRl
cm5hdGl2ZVJvdW5kaW5nKGFscGhhLnZhbHVlKCkpIDogKnRoaXM7CisgICAgcmV0dXJuIGFscGhh
ID8gY29sb3JXaXRoQWxwaGEoYWxwaGEudmFsdWUoKSkgOiAqdGhpczsKIH0KIAogaW5saW5lIGNv
bnN0IEV4dGVuZGVkQ29sb3ImIENvbG9yOjphc0V4dGVuZGVkKCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAJ
KHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTQgKzMxLDYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIGFyZUVzc2VudGlhbGx5RXF1YWwoY29uc3QgQ29sb3JD
b21wb25lbnRzPGZsb2F0PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgYikKLXsK
LSAgICByZXR1cm4gV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFbMF0sIGJbMF0pCi0gICAgICAg
ICYmIFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhWzFdLCBiWzFdKQotICAgICAgICAmJiBXVEY6
OmFyZUVzc2VudGlhbGx5RXF1YWwoYVsyXSwgYlsyXSkKLSAgICAgICAgJiYgV1RGOjphcmVFc3Nl
bnRpYWxseUVxdWFsKGFbM10sIGJbM10pOwotfQotCiAvLyBUaGVzZSBhcmUgdGhlIHN0YW5kYXJk
IHNSR0IgPC0+IGxpbmVhclJHQiBjb252ZXJzaW9uIGZ1bmN0aW9ucyAoaHR0cHM6Ly9lbi53aWtp
cGVkaWEub3JnL3dpa2kvU1JHQikuCiBmbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGZs
b2F0IGMpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0
aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDIx
ICs1MSwxNCBAQCBmbG9hdCBjb250cmFzdFJhdGlvKGNvbnN0IENvbG9yQ29tcG9uZW50CiAKIENv
bG9yQ29tcG9uZW50czxmbG9hdD4gcHJlbXVsdGlwbGllZChjb25zdCBDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+JiBzUkdCQ29tcG9udGVudHMpOwogCi1ib29sIGFyZUVzc2VudGlhbGx5RXF1YWwoY29u
c3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYsIGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4m
KTsKLQotaW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChpbnQgdmFsdWUp
CitpbmxpbmUgdWludDhfdCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGZsb2F0IGYpCiB7Ci0gICAg
cmV0dXJuIHN0ZDo6Y2xhbXAodmFsdWUsIDAsIDI1NSk7CisgICAgcmV0dXJuIHN0ZDo6Y2xhbXAo
c3RhdGljX2Nhc3Q8aW50PihzdGQ6Omxyb3VuZGYoZiAqIDI1NS4wZikpLCAwLCAyNTUpOwogfQog
Ci1pbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGZsb2F0IHZhbHVlKQor
Y29uc3RleHByIGZsb2F0IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KHVpbnQ4X3QgYnl0ZSkKIHsK
LSAgICByZXR1cm4gc3RkOjpjbGFtcChzdGQ6OnJvdW5kKHZhbHVlKSwgMC5mLCAyNTUuZik7Ci19
Ci0KLWlubGluZSB1aW50OF90IHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChmbG9hdCBm
KQotewotICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0YXRpY19jYXN0PGludD4obHJvdW5kZigyNTUu
MGYgKiBmKSksIDAsIDI1NSk7CisgICAgcmV0dXJuIGJ5dGUgLyAyNTUuMGY7CiB9CiAKIGNvbnN0
ZXhwciB1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2YWx1ZSkKQEAgLTgyLDUg
Kzc1LDQgQEAgY29uc3RleHByIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MQogICAgIHJl
dHVybiBhcHByb3hpbWF0aW9uICsgKHJlbWFpbmRlciA+PiA4KTsKIH0KIAotCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1w
bGVDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2ltcGxlQ29sb3IuY3BwCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDM0
ICs2NywxMyBAQCBTaW1wbGVDb2xvciBtYWtlVW5wcmVtdWx0aXBsaWVkU2ltcGxlQ29sCiAgICAg
cmV0dXJuIHBpeGVsQ29sb3I7CiB9CiAKLVNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21G
bG9hdHMoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKLXsKLSAgICByZXR1cm4g
bWFrZVNpbXBsZUNvbG9yKAotICAgICAgICBzY2FsZVJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwo
ciksCi0gICAgICAgIHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChnKSwKLSAgICAgICAg
c2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGIpLAotICAgICAgICBzY2FsZVJvdW5kQW5k
Q2xhbXBDb2xvckNoYW5uZWwoYSkKLSAgICApOwotfQotCi1TaW1wbGVDb2xvciBtYWtlU2ltcGxl
Q29sb3JGcm9tSFNMQShmbG9hdCBodWUsIGZsb2F0IHNhdHVyYXRpb24sIGZsb2F0IGxpZ2h0bmVz
cywgZmxvYXQgYWxwaGEpCi17Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBoc2xUb1NSR0IoeyBo
dWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSk7Ci0gICAgcmV0dXJuIG1ha2VTaW1w
bGVDb2xvcigKLSAgICAgICAgcm91bmQociAqIDI1NS4wZiksCi0gICAgICAgIHJvdW5kKGcgKiAy
NTUuMGYpLAotICAgICAgICByb3VuZChiICogMjU1LjBmKSwKLSAgICAgICAgcm91bmQoYSAqIDI1
NS4wZikKLSAgICApOwotfQotCiBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0Eo
ZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKIHsKLSAgICBkb3Vi
bGUgY29sb3JzID0gMSAtIGs7Ci0gICAgaW50IHIgPSBzdGF0aWNfY2FzdDxpbnQ+KG5leHRhZnRl
cigyNTYsIDApICogKGNvbG9ycyAqICgxIC0gYykpKTsKLSAgICBpbnQgZyA9IHN0YXRpY19jYXN0
PGludD4obmV4dGFmdGVyKDI1NiwgMCkgKiAoY29sb3JzICogKDEgLSBtKSkpOwotICAgIGludCBi
ID0gc3RhdGljX2Nhc3Q8aW50PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIChjb2xvcnMgKiAoMSAtIHkp
KSk7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyLCBnLCBiLCBzdGF0aWNfY2FzdDxmbG9h
dD4obmV4dGFmdGVyKDI1NiwgMCkgKiBhKSk7CisgICAgZmxvYXQgY29sb3JzID0gMSAtIGs7Cisg
ICAgZmxvYXQgciA9IGNvbG9ycyAqICgxLjBmIC0gYyk7CisgICAgZmxvYXQgZyA9IGNvbG9ycyAq
ICgxLjBmIC0gbSk7CisgICAgZmxvYXQgYiA9IGNvbG9ycyAqICgxLjBmIC0geSk7CisgICAgcmV0
dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMociwgZywgYiwgYSk7CiB9CiAKIFN0cmluZyBT
aW1wbGVDb2xvcjo6c2VyaWFsaXphdGlvbkZvckhUTUwoKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCShyZXZpc2lvbiAyNjI2
NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBjb25zdGV4cHIgdWlu
dDhfdCBibHVlQ29tcG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogICAgIGNvbnN0
ZXhwciB1aW50OF90IGFscGhhQ29tcG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA+PiAy
NDsgfQogCi0gICAgY29uc3RleHByIGZsb2F0IGFscGhhQ29tcG9uZW50QXNGbG9hdCgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYUNvbXBvbmVudCgpKSAvIDB4RkY7IH0K
KyAgICBjb25zdGV4cHIgZmxvYXQgYWxwaGFDb21wb25lbnRBc0Zsb2F0KCkgY29uc3QgeyByZXR1
cm4gY29udmVydFRvQ29tcG9uZW50RmxvYXQoYWxwaGFDb21wb25lbnQoKSk7IH0KIAogICAgIGNv
bnN0ZXhwciBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQoKSA9
PSAweEZGOyB9CiAgICAgY29uc3RleHByIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4g
YWxwaGFDb21wb25lbnQoKTsgfQpAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAKICAgICBjb25z
dGV4cHIgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBhc1NSR0JGbG9hdENvbXBvbmVudHMoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIHsgcmVkQ29tcG9uZW50KCkgLyAyNTUuMGYsIGdyZWVu
Q29tcG9uZW50KCkgLyAyNTUuMGYsIGJsdWVDb21wb25lbnQoKSAvIDI1NS4wZiwgIGFscGhhQ29t
cG9uZW50KCkgLyAyNTUuMGYgfTsKKyAgICAgICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50
RmxvYXQocmVkQ29tcG9uZW50KCkpLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChncmVlbkNvbXBv
bmVudCgpKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoYmx1ZUNvbXBvbmVudCgpKSwgIGNvbnZl
cnRUb0NvbXBvbmVudEZsb2F0KGFscGhhQ29tcG9uZW50KCkpIH07CiAgICAgfQogCiAgICAgdGVt
cGxhdGU8c3RkOjpzaXplX3QgTj4KQEAgLTk1LDE2ICs5NSwxNCBAQCBjb25zdGV4cHIgU2ltcGxl
Q29sb3IgbWFrZVNpbXBsZUNvbG9yKGluCiBjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBs
ZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKIAogU2ltcGxlQ29sb3IgbWFrZVNp
bXBsZUNvbG9yKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb25lbnRzKTsK
K1NpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoZmxvYXQgciwgZmxvYXQgZywg
ZmxvYXQgYiwgZmxvYXQgYSk7CitTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0Eo
ZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSk7CiAKIFNpbXBsZUNv
bG9yIG1ha2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50
IGEsIGJvb2wgY2VpbGluZyA9IHRydWUpOwogU2ltcGxlQ29sb3IgbWFrZVByZW11bHRpcGxpZWRT
aW1wbGVDb2xvcihTaW1wbGVDb2xvcik7CiBTaW1wbGVDb2xvciBtYWtlVW5wcmVtdWx0aXBsaWVk
U2ltcGxlQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpOwogU2ltcGxlQ29sb3IgbWFr
ZVVucHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKFNpbXBsZUNvbG9yKTsKIAotV0VCQ09SRV9FWFBP
UlQgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhmbG9hdCByLCBmbG9hdCBn
LCBmbG9hdCBiLCBmbG9hdCBhKTsKLVdFQkNPUkVfRVhQT1JUIFNpbXBsZUNvbG9yIG1ha2VTaW1w
bGVDb2xvckZyb21IU0xBKGZsb2F0IGgsIGZsb2F0IHMsIGZsb2F0IGwsIGZsb2F0IGEpOwotU2lt
cGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0
IHksIGZsb2F0IGssIGZsb2F0IGEpOwotCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFNpbXBsZUNv
bG9yIGEsIFNpbXBsZUNvbG9yIGIpCiB7CiAgICAgcmV0dXJuIGEudmFsdWUoKSA9PSBiLnZhbHVl
KCk7CkBAIC0xMTcsNyArMTE1LDcgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShTaW1wbGVDb2xv
ciBhLCBTaQogCiBjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGludCByLCBp
bnQgZywgaW50IGIpCiB7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyLCBnLCBiLCAweEZG
KTsKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50OF90PihzdGQ6OmNsYW1wKHIsIDAsIDB4
RkYpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RkOjpjbGFtcChnLCAwLCAweEZGKSksIHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xhbXAoYiwgMCwgMHhGRikpLCAweEZGIH07CiB9CiAKIGNv
bnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwg
aW50IGEpCkBAIC0xMjgsMTIgKzEyNiwxMiBAQCBjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNp
bXBsZUNvbG9yKGluCiBpbmxpbmUgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGNvbnN0IENv
bG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb25lbnRzKQogewogICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gc1JHQkNvbXBvbmVudHM7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKLSAg
ICAgICAgc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHIpLAotICAgICAgICBzY2FsZVJv
dW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZyksCi0gICAgICAgIHNjYWxlUm91bmRBbmRDbGFtcENv
bG9yQ2hhbm5lbChiKSwKLSAgICAgICAgc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGEp
Ci0gICAgKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBh
KTsKK30KKworaW5saW5lIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoZmxv
YXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKK3sKKyAgICByZXR1cm4geyBjb252ZXJ0
VG9Db21wb25lbnRCeXRlKHIpLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGcpLCBjb252ZXJ0VG9D
b21wb25lbnRCeXRlKGIpLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGEpIH07CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjYy
NjU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBzdGF0aWMgdm9pZCBw
cmVwYXJlQ2Fpcm9Db250ZXh0U291cmNlKGNhCiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gU29s
aWQgY29sb3Igc291cmNlCiAgICAgICAgIGlmIChnbG9iYWxBbHBoYSA8IDEpCi0gICAgICAgICAg
ICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhnbG9iYWxBbHBoYSkpOworICAgICAgICAgICAg
c2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVk
QnkoZ2xvYmFsQWxwaGEpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0U291cmNlUkdC
QUZyb21Db2xvcihjciwgY29sb3IpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyNjI2NTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzgsOCArNzgsNyBAQCBzdGF0aWMgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9y
RnJvbUNHCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXIoMjU2LjAsIDAuMCk7Ci0gICAg
cmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyICogc2NhbGVGYWN0b3IsIGcgKiBzY2FsZUZhY3Rvciwg
YiAqIHNjYWxlRmFjdG9yLCBhICogc2NhbGVGYWN0b3IpOworICAgIHJldHVybiBtYWtlU2ltcGxl
Q29sb3JGcm9tRmxvYXRzKHIsIGcsIGIsIGEpOwogfQogCiBDb2xvcjo6Q29sb3IoQ0dDb2xvclJl
ZiBjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVGbG9vZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmNwcAkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjMsNyArNjMsNyBAQCB2b2lkIEZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAg
ICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBjb2xvciA9
IGZsb29kQ29sb3IoKS5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVS
b3VuZGluZyhmbG9vZE9wYWNpdHkoKSk7CisgICAgYXV0byBjb2xvciA9IGZsb29kQ29sb3IoKS5j
b2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9vZE9wYWNpdHkoKSk7CiAgICAgcmVzdWx0SW1h
Z2UtPmNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBh
aW50UmVjdCgpLnNpemUoKSksIGNvbG9yKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQkocmV2aXNpb24gMjYyNjU5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OCw4ICs4OCw3IEBAIHN0YXRpYyBTaW1wbGVDb2xvciBtYWtlU2ltcGxl
Q29sb3JGcm9tTlMKICAgICBbcmdiQ29sb3IgZ2V0UmVkOiZyZWRDb21wb25lbnQgZ3JlZW46Jmdy
ZWVuQ29tcG9uZW50IGJsdWU6JmJsdWVDb21wb25lbnQgYWxwaGE6JmFscGhhXTsKICAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBzY2FsZUZh
Y3RvciA9IG5leHRhZnRlcigyNTYuMCwgMC4wKTsKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9y
KHNjYWxlRmFjdG9yICogcmVkQ29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGdyZWVuQ29tcG9uZW50
LCBzY2FsZUZhY3RvciAqIGJsdWVDb21wb25lbnQsIHNjYWxlRmFjdG9yICogYWxwaGEpOworICAg
IHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKHJlZENvbXBvbmVudCwgZ3JlZW5Db21w
b25lbnQsIGJsdWVDb21wb25lbnQsIGFscGhhKTsKIH0KIAogQ29sb3IgY29sb3JGcm9tTlNDb2xv
cihOU0NvbG9yICpjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xv
cklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvQ29sb3JJ
T1MubW0JKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9D
b2xvcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsNyBAQCBDb2xvciBjb2xvckZy
b21VSUNvbG9yKFVJQ29sb3IgKmNvbG9yKQogCiAgICAgW2NvbG9yIGdldFJlZDomcmVkQ29tcG9u
ZW50IGdyZWVuOiZncmVlbkNvbXBvbmVudCBibHVlOiZibHVlQ29tcG9uZW50IGFscGhhOiZhbHBo
YV07CiAKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyKDI1
Ni4wLCAwLjApOwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3Ioc2NhbGVGYWN0b3IgKiByZWRD
b21wb25lbnQsIHNjYWxlRmFjdG9yICogZ3JlZW5Db21wb25lbnQsIHNjYWxlRmFjdG9yICogYmx1
ZUNvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBhbHBoYSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvckZyb21GbG9hdHMocmVkQ29tcG9uZW50LCBncmVlbkNvbXBvbmVudCwgYmx1ZUNvbXBvbmVu
dCwgYWxwaGEpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcg
QEAgQ29sb3IgU1ZHU3RvcEVsZW1lbnQ6OnN0b3BDb2xvckluY2x1ZGluZwogICAgIGF1dG8mIHN2
Z1N0eWxlID0gc3R5bGUuc3ZnU3R5bGUoKTsKICAgICBhdXRvIHN0b3BDb2xvciA9IHN0eWxlLmNv
bG9yUmVzb2x2aW5nQ3VycmVudENvbG9yKHN2Z1N0eWxlLnN0b3BDb2xvcigpKTsKIAotICAgIHJl
dHVybiBzdG9wQ29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZl
Um91bmRpbmcoc3ZnU3R5bGUuc3RvcE9wYWNpdHkoKSk7CisgICAgcmV0dXJuIHN0b3BDb2xvci5j
b2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShzdmdTdHlsZS5zdG9wT3BhY2l0eSgpKTsKIH0KIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRp
dmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9w
cm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkocmV2aXNp
b24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9u
QWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0
LDE2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgaW5saW5lIHVpbnQ4X3Qgcm91
bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
c3RkOjpjbGFtcCh2YWx1ZSwgMCwgMjU1KTsKKyAgICB9CisKKyAgICBpbmxpbmUgdWludDhfdCBy
b3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGZsb2F0IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6Y2xhbXAoc3RkOjpyb3VuZGYodmFsdWUpLCAwLjBmLCAyNTUuMGYpOworICAgIH0K
KwogICAgIHZvaWQgYWRkRnJvbUFuZFRvVmFsdWVzKFNWR0VsZW1lbnQqKSBvdmVycmlkZQogICAg
IHsKICAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9mcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxv
c3N5KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lP
Uy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2Vi
Vmlld0lPUy5tbQkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2lvcy9XS1dlYlZpZXdJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTUxMyw3ICs1MTMsNyBA
QCBzdGF0aWMgV2ViQ29yZTo6Q29sb3Igc2Nyb2xsVmlld0JhY2tncm91CiAgICAgaWYgKHpvb21T
Y2FsZSA8IG1pbmltdW1ab29tU2NhbGUpIHsKICAgICAgICAgQ0dGbG9hdCBzbG9wZSA9IDEyOwog
ICAgICAgICBDR0Zsb2F0IG9wYWNpdHkgPSBzdGQ6Om1heDxDR0Zsb2F0PigxIC0gc2xvcGUgKiAo
bWluaW11bVpvb21TY2FsZSAtIHpvb21TY2FsZSksIDApOwotICAgICAgICBjb2xvciA9IGNvbG9y
LmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKG9wYWNpdHkpOworICAgICAg
ICBjb2xvciA9IGNvbG9yLmNvbG9yV2l0aEFscGhhKG9wYWNpdHkpOwogICAgIH0KIAogICAgIHJl
dHVybiBjb2xvcjsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xv
clRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2MjY1OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyAr
NDUsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9XaGl0ZSkKICAgICAKICAgICBFWFBFQ1RfRkxP
QVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CiAgICAgCi0gICAgYXV0byByb3Vu
ZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21IU0xBKGh1ZSwgc2F0dXJh
dGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBD
b2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5l
c3MsIGFscGhhIH0pKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7
CiB9CiAKQEAgLTYxLDcgKzYxLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmxhY2spCiAKICAg
ICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CiAKLSAgICBh
dXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoaHVl
LCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRD
b2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24s
IGxpZ2h0bmVzcywgYWxwaGEgfSkpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBl
ZENvbG9yKTsKIH0KIApAQCAtNzcsNyArNzcsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9SZWQp
CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CiAK
LSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUhT
TEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7CisgICAgYXV0byByb3VuZFRy
aXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVy
YXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSkpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5k
VHJpcHBlZENvbG9yKTsKIH0KIApAQCAtOTMsNyArOTMsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hT
TF9HcmVlbikKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgbGlnaHRu
ZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29s
b3JGcm9tSFNMQShodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKKyAgICBhdXRv
IHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1
ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KSkpOwogICAgIEVYUEVDVF9FUShjb2xv
ciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC0xMDksNyArMTA5LDcgQEAgVEVTVChDb2xv
ciwgUkdCVG9IU0xfQmx1ZSkKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3Mo
KSwgbGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtl
U2ltcGxlQ29sb3JGcm9tSFNMQShodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsK
KyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yKGhzbFRv
U1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KSkpOwogICAgIEVYUEVD
VF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC0xMjUsNyArMTI1LDcgQEAg
VEVTVChDb2xvciwgUkdCVG9IU0xfRGFya0dyYXkpCiAgICAgCiAgICAgRVhQRUNUX0ZMT0FUX0VR
KGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRD
b2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGln
aHRuZXNzLCBhbHBoYSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtl
U2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhh
IH0pKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAg
LTE0MSw3ICsxNDEsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9HcmF5KQogCiAgICAgRVhQRUNU
X0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOwogCi0gICAgYXV0byByb3Vu
ZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21IU0xBKGh1ZSwgc2F0dXJh
dGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBD
b2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5l
c3MsIGFscGhhIH0pKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7
CiB9CiAKQEAgLTE1Nyw3ICsxNTcsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9MaWdodEdyYXkp
CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CiAK
LSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUhT
TEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7CisgICAgYXV0byByb3VuZFRy
aXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVy
YXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSkpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5k
VHJpcHBlZENvbG9yKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401279</attachid>
            <date>2020-06-06 14:23:10 -0700</date>
            <delta_ts>2020-06-06 14:51:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212871-20200606142309.patch</filename>
            <type>text/plain</type>
            <size>32770</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDIwLTA2LTA2ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvcjogVW5pZnkg
cm91bmRpbmcgLyBjbGFtcGluZyBjb252ZXJzaW9ucyBiZXR3ZWVuIDAtMSBmbG9hdCBjb21wb25l
bnRzIGFuZCAwLTI1NSBieXRlIGNvbXBvbmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjg3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdJUC4KKworICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmlsbFN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
U3R5bGU6OmNyZWF0ZUZyb21TdHJpbmdXaXRoT3ZlcnJpZGVBbHBoYSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkYXJrIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRp
bmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFs
cGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFscGhh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6YXJlRXNzZW50aWFsbHlFcXVhbCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnRUb0NvbXBvbmVudEJ5dGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRv
Q29tcG9uZW50RmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6cm91bmRBbmRDbGFtcENvbG9yQ2hh
bm5lbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzY2FsZVJvdW5kQW5kQ2xhbXBDb2xv
ckNoYW5uZWwpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNv
bG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEpOgorICAgICAgICAoV2Vi
Q29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVDb2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmFscGhh
Q29tcG9uZW50QXNGbG9hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6
YXNTUkdCRmxvYXRDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1w
bGVDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xvcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NvbG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9y
RnJvbU5TQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9Db2xvcklPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbG9yRnJvbVVJQ29sb3IpOgorICAgICAgICAqIHN2Zy9TVkdTdG9wRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5j
bHVkaW5nT3BhY2l0eSBjb25zdCk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0aW9uQ29sb3JGdW5jdGlvbjo6cm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbCk6CisKIDIwMjAt
MDYtMDYgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXSBB
ZGQgc3VwcG9ydCBmb3Igd2lkdGg6IG1pbi9tYXgtY29udGVudApJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAko
cmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTcsMTMgKzUxNywxMyBAQCBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVVcmwoQ1NTCiAgICAgcmV0dXJuIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUodXJsLnRvU3RyaW5nKCksIENTU1VuaXRU
eXBlOjpDU1NfVVJJKTsKIH0KIAotc3RhdGljIGludCBjbGFtcFJHQkNvbXBvbmVudChjb25zdCBD
U1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUpCitzdGF0aWMgdWludDhfdCBjbGFtcFJHQkNvbXBvbmVu
dChjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUpCiB7CiAgICAgZG91YmxlIHJlc3VsdCA9
IHZhbHVlLmRvdWJsZVZhbHVlKCk7CiAgICAgaWYgKHZhbHVlLmlzUGVyY2VudGFnZSgpKQogICAg
ICAgICByZXN1bHQgPSByZXN1bHQgLyAxMDAuMCAqIDI1NS4wOwogCi0gICAgcmV0dXJuIGNsYW1w
VG88aW50Pihyb3VuZChyZXN1bHQpLCAwLCAyNTUpOworICAgIHJldHVybiBjbGFtcFRvPHVpbnQ4
X3Q+KHJvdW5kKHJlc3VsdCksIDAsIDI1NSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZVJHQlBh
cmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkBAIC01NTEsNyArNTUxLDcgQEAg
c3RhdGljIENvbG9yIHBhcnNlUkdCUGFyYW1ldGVycyhDU1NQYXJzZQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9OwogCi0gICAgaW50IGNvbG9yQXJyYXlbM107CisgICAgdWludDhfdCBjb2xv
ckFycmF5WzNdOwogICAgIGNvbG9yQXJyYXlbMF0gPSBjbGFtcFJHQkNvbXBvbmVudCgqY29sb3JQ
YXJhbWV0ZXIpOwogICAgIGZvciAoaW50IGkgPSAxOyBpIDwgMzsgaSsrKSB7CiAgICAgICAgIGlm
IChpID09IDEpCkBAIC01NzMsNyArNTczLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUkdCUGFyYW1l
dGVycyhDU1NQYXJzZQogICAgICAgICByZXR1cm4gY29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVz
cGFjZShhcmdzKTsKICAgICB9OwogCi0gICAgaW50IGFscGhhQ29tcG9uZW50ID0gMjU1OworICAg
IHVpbnQ4X3QgYWxwaGFDb21wb25lbnQgPSAyNTU7CiAgICAgaWYgKGNvbnN1bWVBbHBoYVNlcGFy
YXRvcigpKSB7CiAgICAgICAgIGRvdWJsZSBhbHBoYTsKICAgICAgICAgaWYgKCFjb25zdW1lTnVt
YmVyUmF3KGFyZ3MsIGFscGhhKSkgewpAQCAtNTgyLDkgKzU4Miw3IEBAIHN0YXRpYyBDb2xvciBw
YXJzZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2UKICAgICAgICAgICAgICAgICByZXR1cm4gQ29sb3Io
KTsKICAgICAgICAgICAgIGFscGhhID0gYWxwaGFQZXJjZW50LT5kb3VibGVWYWx1ZSgpIC8gMTAw
LjA7CiAgICAgICAgIH0KLQotICAgICAgICAvLyBXMyBzdGFuZGFyZCBzdGlwdWxhdGVzIGEgMi41
NSBhbHBoYSB2YWx1ZSBtdWx0aXBsaWNhdGlvbiBmYWN0b3IuCi0gICAgICAgIGFscGhhQ29tcG9u
ZW50ID0gc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKGNsYW1wVG88ZG91YmxlPihhbHBoYSwgMC4w
LCAxLjApICogMjU1LjBmKSk7CisgICAgICAgIGFscGhhQ29tcG9uZW50ID0gY29udmVydFRvQ29t
cG9uZW50Qnl0ZShhbHBoYSk7CiAgICAgfTsKIAogICAgIGlmICghYXJncy5hdEVuZCgpKQpAQCAt
NjQyLDcgKzY0MCw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2UK
ICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAKLSAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJy
YXlbMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsxXSksIHN0YXRpY19jYXN0PGZs
b2F0Pihjb2xvckFycmF5WzJdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKSk7CisgICAgcmV0
dXJuIG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JB
cnJheVswXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzFdKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGNvbG9yQXJyYXlbMl0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pKTsKIH0K
IAogc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFE
ZXRlY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9E
YXRhRGV0ZWN0aW9uLm1tCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTYyMyw5ICs2MjMs
OSBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SCiAKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBsaWdodG5lc3Mgb2YgdGhlIHVuZGVybGluZSBj
b2xvciB0byB0aGUgbWlkZGxlLCBhbmQgbXVsdGlwbHkgdGhlIGFscGhhIGJ5IDM4JSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoZSBjb2xvciB3aWxsIGFwcGVhciBvbiBsaWdodCBh
bmQgZGFyayBiYWNrZ3JvdW5kcywgc2luY2Ugb25seSBvbmUgY29sb3IgY2FuIGJlIHNwZWNpZmll
ZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBvdmVycmlkZUxpZ2h0bmVzcyA9IDAu
NTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBvdmVycmlkZUFscGhhTXVsdGlwbGll
ciA9IDAuMzg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVuZGVybGluZUNvbG9yID0g
bWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBvdmVycmlkZUxpZ2h0bmVz
cywgb3ZlcnJpZGVBbHBoYU11bHRpcGxpZXIgKiBhbHBoYSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmbG9hdCBvdmVycmlkZUxpZ2h0bmVzcyA9IDAuNWY7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmbG9hdCBvdmVycmlkZUFscGhhTXVsdGlwbGllciA9IDAuMzhmOworICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byB1bmRlcmxpbmVDb2xvciA9IG1ha2VTaW1wbGVDb2xvcihoc2xUb1NS
R0IoeyBodWUsIHNhdHVyYXRpb24sIG92ZXJyaWRlTGlnaHRuZXNzLCBvdmVycmlkZUFscGhhTXVs
dGlwbGllciAqIGFscGhhIH0pKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yRWxl
bWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBDU1NWYWx1ZUN1
cnJlbnRjb2xvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb25Db2xvciwgdW5kZXJs
aW5lQ29sb3Iuc2VyaWFsaXphdGlvbkZvckNTUygpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3Myw5ICsxMDczLDkgQEAgc3RhdGlj
IE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZUxlZ2FjeQogICAgIEFTU0VSVChibHVlSW5kZXgg
Pj0gY29tcG9uZW50TGVuZ3RoICogMik7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oYmx1ZUluZGV4ICsgMSA8IGRpZ2l0QnVmZmVyLnNpemUoKSk7CiAKLSAgICBpbnQgcmVk
VmFsdWUgPSB0b0FTQ0lJSGV4VmFsdWUoZGlnaXRCdWZmZXJbcmVkSW5kZXhdLCBkaWdpdEJ1ZmZl
cltyZWRJbmRleCArIDFdKTsKLSAgICBpbnQgZ3JlZW5WYWx1ZSA9IHRvQVNDSUlIZXhWYWx1ZShk
aWdpdEJ1ZmZlcltncmVlbkluZGV4XSwgZGlnaXRCdWZmZXJbZ3JlZW5JbmRleCArIDFdKTsKLSAg
ICBpbnQgYmx1ZVZhbHVlID0gdG9BU0NJSUhleFZhbHVlKGRpZ2l0QnVmZmVyW2JsdWVJbmRleF0s
IGRpZ2l0QnVmZmVyW2JsdWVJbmRleCArIDFdKTsKKyAgICB1aW50OF90IHJlZFZhbHVlID0gdG9B
U0NJSUhleFZhbHVlKGRpZ2l0QnVmZmVyW3JlZEluZGV4XSwgZGlnaXRCdWZmZXJbcmVkSW5kZXgg
KyAxXSk7CisgICAgdWludDhfdCBncmVlblZhbHVlID0gdG9BU0NJSUhleFZhbHVlKGRpZ2l0QnVm
ZmVyW2dyZWVuSW5kZXhdLCBkaWdpdEJ1ZmZlcltncmVlbkluZGV4ICsgMV0pOworICAgIHVpbnQ4
X3QgYmx1ZVZhbHVlID0gdG9BU0NJSUhleFZhbHVlKGRpZ2l0QnVmZmVyW2JsdWVJbmRleF0sIGRp
Z2l0QnVmZmVyW2JsdWVJbmRleCArIDFdKTsKICAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHJl
ZFZhbHVlLCBncmVlblZhbHVlLCBibHVlVmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlLmNwcAkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NSw3
ICszNzUsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFN0CiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmIChzdHlsZS5pc0N1cnJlbnRDb2xvcigpKQotICAgICAgICBz
dHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpLmNvbG9yV2l0aEFs
cGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKHN0eWxlLm92ZXJyaWRlQWxwaGEoKSkpOworICAg
ICAgICBzdHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihjYW52YXNCYXNlKCkpLmNvbG9y
V2l0aEFscGhhKHN0eWxlLm92ZXJyaWRlQWxwaGEoKSkpOwogICAgIGVsc2UKICAgICAgICAgY2hl
Y2tPcmlnaW4oc3R5bGUuY2FudmFzUGF0dGVybigpLmdldCgpKTsKIApAQCAtMzk4LDcgKzM5OCw3
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKHN0eWxlLmlzQ3VycmVudENvbG9yKCkpCi0gICAgICAgIHN0eWxlID0g
Q2FudmFzU3R5bGUoY3VycmVudENvbG9yKGNhbnZhc0Jhc2UoKSkuY29sb3JXaXRoQWxwaGFVc2lu
Z0FsdGVybmF0aXZlUm91bmRpbmcoc3R5bGUub3ZlcnJpZGVBbHBoYSgpKSk7CisgICAgICAgIHN0
eWxlID0gQ2FudmFzU3R5bGUoY3VycmVudENvbG9yKGNhbnZhc0Jhc2UoKSkuY29sb3JXaXRoQWxw
aGEoc3R5bGUub3ZlcnJpZGVBbHBoYSgpKSk7CiAgICAgZWxzZQogICAgICAgICBjaGVja09yaWdp
bihzdHlsZS5jYW52YXNQYXR0ZXJuKCkuZ2V0KCkpOwogCkBAIC0xMzAyLDcgKzEzMDIsNyBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoCiAgICAgICAgIGlmICghY29s
b3IuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBzZXRTaGFkb3co
RmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb2xvci5jb2xvcldpdGhBbHBoYVVzaW5n
QWx0ZXJuYXRpdmVSb3VuZGluZyhhbHBoYSkpOworICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lk
dGgsIGhlaWdodCksIGJsdXIsIGNvbG9yLmNvbG9yV2l0aEFscGhhKGFscGhhKSk7CiB9CiAKIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBm
bG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCShyZXZpc2lv
biAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0Myw3ICsxNDMsNyBAQCBDYW52YXNTdHlsZSBDYW52YXNTdHls
ZTo6Y3JlYXRlRnJvbVN0cmluCiAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICByZXR1cm4gY29sb3IuY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0
aXZlUm91bmRpbmcoYWxwaGEpOworICAgIHJldHVybiBjb2xvci5jb2xvcldpdGhBbHBoYShhbHBo
YSk7CiB9CiAKIGJvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudENvbG9yKGNvbnN0IENhbnZh
c1N0eWxlJiBvdGhlcikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiAyNjI2NTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9y
KGNvbnN0IEpTT046Ok9iamUKICAgICBlbHNlIGlmIChhID4gMSkKICAgICAgICAgYSA9IDE7CiAK
LSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIHN0YXRpY19jYXN0PGludD4oYSAq
IDI1NSkpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgY29udmVydFRvQ29t
cG9uZW50Qnl0ZShhKSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbmZpZ0NvbG9yKGNvbnN0
IFN0cmluZyYgZmllbGROYW1lLCBjb25zdCBKU09OOjpPYmplY3QqIGNvbmZpZ09iamVjdCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlzaW9u
IDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIxLDExICsxMjEsOCBAQCBDb2xvciBDb2xvcjo6bGlnaHQoKSBj
b25zdAogICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNhc2UgZm9yIHNwZWVkLgogICAgIGlm
ICghaXNFeHRlbmRlZCgpICYmIGFzU2ltcGxlKCkgPT0gYmxhY2spCiAgICAgICAgIHJldHVybiBs
aWdodGVuZWRCbGFjazsKLSAgICAKLSAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IG5leHRh
ZnRlcmYoMjU2LjBmLCAwLjBmKTsKIAogICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNv
bXBvbmVudHNMb3NzeSgpOwotCiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsK
IAogICAgIGlmICh2ID09IDAuMGYpCkBAIC0xMzMsMTIgKzEzMCw3IEBAIENvbG9yIENvbG9yOjps
aWdodCgpIGNvbnN0CiAKICAgICBmbG9hdCBtdWx0aXBsaWVyID0gc3RkOjptaW4oMS4wZiwgdiAr
IDAuMzNmKSAvIHY7CiAKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKAotICAgICAgICBzdGF0
aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAotICAgICAgICBzdGF0
aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0b3IpLAotICAgICAgICBzdGF0
aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBiICogc2NhbGVGYWN0b3IpLAotICAgICAgICBhbHBo
YSgpCi0gICAgKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhtdWx0aXBs
aWVyICogciwgbXVsdGlwbGllciAqIGcsIG11bHRpcGxpZXIgKiBiLCBhKTsKIH0KIAogQ29sb3Ig
Q29sb3I6OmRhcmsoKSBjb25zdApAQCAtMTQ3LDE5ICsxMzksMTIgQEAgQ29sb3IgQ29sb3I6OmRh
cmsoKSBjb25zdAogICAgIGlmICghaXNFeHRlbmRlZCgpICYmIGFzU2ltcGxlKCkgPT0gd2hpdGUp
CiAgICAgICAgIHJldHVybiBkYXJrZW5lZFdoaXRlOwogICAgIAotICAgIGNvbnN0IGZsb2F0IHNj
YWxlRmFjdG9yID0gbmV4dGFmdGVyZigyNTYuMGYsIDAuMGYpOwotCiAgICAgYXV0byBbciwgZywg
YiwgYV0gPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAKICAgICBmbG9hdCB2ID0gc3RkOjpt
YXgoeyByLCBnLCBiIH0pOwogICAgIGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6Om1heCgwLjBmLCAo
diAtIDAuMzNmKSAvIHYpOwogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAg
YWxwaGEoKQotICAgICk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMobXVs
dGlwbGllciAqIHIsIG11bHRpcGxpZXIgKiBnLCBtdWx0aXBsaWVyICogYiwgYSk7CiB9CiAKIGJv
b2wgQ29sb3I6OmlzRGFyaygpIGNvbnN0CkBAIC0yMzUsNDEgKzIyMCwxNCBAQCBDb2xvciBDb2xv
cjo6YmxlbmRXaXRoV2hpdGUoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUNvbG9y
IENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9hdCBhbW91bnQpIGNvbnN0Ci17
Ci0gICAgZmxvYXQgbmV3QWxwaGEgPSBhbW91bnQgKiBhbHBoYUFzRmxvYXQoKTsKLSAgICByZXR1
cm4gY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwotfQotCi1Db2xvciBDb2xvcjo6Y29sb3JXaXRo
QWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQgYW1vdW50KSBj
b25zdAotewotICAgIGZsb2F0IG5ld0FscGhhID0gYW1vdW50ICogYWxwaGFBc0Zsb2F0KCk7Ci0g
ICAgcmV0dXJuIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKG5ld0FscGhh
KTsKLX0KLQogQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhKGZsb2F0IGFscGhhKSBjb25zdAog
ewogICAgIGlmIChpc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY29s
b3JXaXRoQWxwaGEoYWxwaGEpOwogCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgd2hlcmUgdGhpcyBm
dW5jdGlvbiBkaWZmZXJzIGZyb20gY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRp
bmcuCi0gICAgdWludDhfdCBuZXdBbHBoYSA9IGFscGhhICogMHhGRjsKKyAgICBDb2xvciByZXN1
bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxw
aGEpKTsKIAotICAgIENvbG9yIHJlc3VsdCA9IGFzU2ltcGxlKCkuY29sb3JXaXRoQWxwaGEobmV3
QWxwaGEpOwotICAgIGlmIChpc1NlbWFudGljKCkpCi0gICAgICAgIHJlc3VsdC50YWdBc1NlbWFu
dGljKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFs
cGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0IGFscGhhKSBjb25zdAotewotICAgIGlm
IChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY29sb3JXaXRoQWxw
aGEoYWxwaGEpOwotCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgd2hlcmUgdGhpcyBmdW5jdGlvbiBk
aWZmZXJzIGZyb20gY29sb3JXaXRoQWxwaGFVc2luZy4KLSAgICB1aW50OF90IG5ld0FscGhhID0g
c2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGFscGhhKTsKLQotICAgIENvbG9yIHJlc3Vs
dCA9IGFzU2ltcGxlKCkuY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOworICAgIC8vIEZJWE1FOiBX
aHkgaXMgcHJlc2VydmluZyB0aGUgc2VtYW50aWMgYml0IGRlc2lyZWQgYW5kL29yIGNvcnJlY3Qg
aGVyZT8KICAgICBpZiAoaXNTZW1hbnRpYygpKQogICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRp
YygpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0yNzksNyArMjM3LDcgQEAgQ29sb3IgQ29sb3I6
OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYQogewogICAgIGlmIChpc0V4dGVuZGVkKCkpCiAg
ICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShhbHBoYSk7
Ci0gICAgcmV0dXJuIGFzU2ltcGxlKCkuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShzY2FsZVJvdW5k
QW5kQ2xhbXBDb2xvckNoYW5uZWwoYWxwaGEpKTsKKyAgICByZXR1cm4gYXNTaW1wbGUoKS5pbnZl
cnRlZENvbG9yV2l0aEFscGhhKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEpKTsKIH0KIAog
Q29sb3IgQ29sb3I6OnNlbWFudGljQ29sb3IoKSBjb25zdApAQCAtMzAwLDcgKzI1OCw3IEBAIHN0
ZDo6cGFpcjxDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmwKIFNpbXBsZUNvbG9yIENvbG9y
Ojp0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQo
KSkKLSAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBQ29tcG9uZW50c0xvc3N5
KCkpOworICAgICAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKGFzRXh0ZW5kZWQoKS50b1NSR0JB
Q29tcG9uZW50c0xvc3N5KCkpOwogICAgIHJldHVybiBhc1NpbXBsZSgpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHJldmlzaW9uIDI2MjY1OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0
IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID09IDEuMCA6IGFz
U2ltcGxlKCkuaXNPcGFxdWUoKTsgfQogICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1
cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPiAwLjAgOiBhc1NpbXBsZSgp
LmlzVmlzaWJsZSgpOyB9CiAKLSAgICBpbnQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBpc0V4dGVu
ZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSAqIDI1NSA6IGFzU2ltcGxlKCkuYWxwaGFDb21w
b25lbnQoKTsgfQorICAgIHVpbnQ4X3QgYWxwaGEoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVk
KCkgPyBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGFzRXh0ZW5kZWQoKS5hbHBoYSgpKSA6IGFzU2lt
cGxlKCkuYWxwaGFDb21wb25lbnQoKTsgfQogICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0
IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpIDogYXNTaW1wbGUo
KS5hbHBoYUNvbXBvbmVudEFzRmxvYXQoKTsgfQogCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0
OwpAQCAtMTQ1LDE4ICsxNDUsMTcgQEAgcHVibGljOgogICAgIENvbG9yIGJsZW5kKGNvbnN0IENv
bG9yJikgY29uc3Q7CiAgICAgQ29sb3IgYmxlbmRXaXRoV2hpdGUoKSBjb25zdDsKIAorICAgIENv
bG9yIGludmVydGVkQ29sb3JXaXRoQWxwaGEoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdDsK
ICAgICBDb2xvciBpbnZlcnRlZENvbG9yV2l0aEFscGhhKGZsb2F0IGFscGhhKSBjb25zdDsKIAor
ICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KE9wdGlvbmFsPGZsb2F0PikgY29u
c3Q7CiAgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxvYXQpIGNvbnN0Owot
ICAgIENvbG9yIGNvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKIAotICAgIC8vIEZJWE1FOiBS
ZW1vdmUgdGhlIG5lZWQgZm9yIEFsdGVybmF0aXZlUm91bmRpbmcgdmFyaWFudHMgYnkgc2V0dGxp
bmcgb24gYSByb3VuZGluZyBiZWhhdmlvci4KLSAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRp
cGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxmbG9hdD4pIGNvbnN0Owot
ICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5k
aW5nKGZsb2F0KSBjb25zdDsKLSAgICBDb2xvciBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRp
dmVSb3VuZGluZyhPcHRpb25hbDxmbG9hdD4pIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIENv
bG9yIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0KSBjb25zdDsK
KyAgICBDb2xvciBjb2xvcldpdGhBbHBoYShPcHRpb25hbDxmbG9hdD4pIGNvbnN0OworICAgIFdF
QkNPUkVfRVhQT1JUIENvbG9yIGNvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKIAogICAgIENv
bG9yIG9wYXF1ZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gY29sb3JXaXRoQWxwaGEoMS4wZik7IH0K
KwogICAgIENvbG9yIHNlbWFudGljQ29sb3IoKSBjb25zdDsKIAogICAgIC8vIFRydWUgaWYgdGhl
IGNvbG9yIG9yaWdpbmF0ZWQgZnJvbSBhIENTUyBzZW1hbnRpYyBjb2xvciBuYW1lLgpAQCAtMjg5
LDE0ICsyODgsMjQgQEAgaW5saW5lIHVuc2lnbmVkIENvbG9yOjpoYXNoKCkgY29uc3QKICAgICBy
ZXR1cm4gV1RGOjppbnRIYXNoKG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MpOwogfQog
Ci1pbmxpbmUgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRl
cm5hdGl2ZVJvdW5kaW5nKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QKK2lubGluZSBDb2xv
ciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGFscGhhID8gaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShhbHBoYS52
YWx1ZSgpKSA6ICp0aGlzOworfQorCitpbmxpbmUgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhh
TXVsdGlwbGllZEJ5KGZsb2F0IGFtb3VudCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29sb3JXaXRo
QWxwaGEoYW1vdW50ICogYWxwaGFBc0Zsb2F0KCkpOworfQorCitpbmxpbmUgQ29sb3IgQ29sb3I6
OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QK
IHsKLSAgICByZXR1cm4gYWxwaGEgPyBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0
ZXJuYXRpdmVSb3VuZGluZyhhbHBoYS52YWx1ZSgpKSA6ICp0aGlzOworICAgIHJldHVybiBhbHBo
YSA/IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGFscGhhLnZhbHVlKCkpIDogKnRoaXM7CiB9
CiAKLWlubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91
bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdAoraW5saW5lIENvbG9yIENvbG9yOjpj
b2xvcldpdGhBbHBoYShPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGFscGhhID8gY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoYWxwaGEudmFs
dWUoKSkgOiAqdGhpczsKKyAgICByZXR1cm4gYWxwaGEgPyBjb2xvcldpdGhBbHBoYShhbHBoYS52
YWx1ZSgpKSA6ICp0aGlzOwogfQogCiBpbmxpbmUgY29uc3QgRXh0ZW5kZWRDb2xvciYgQ29sb3I6
OmFzRXh0ZW5kZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjYyNjU5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSwxNCArMzEsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wg
YXJlRXNzZW50aWFsbHlFcXVhbChjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBhLCBjb25z
dCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBiKQotewotICAgIHJldHVybiBXVEY6OmFyZUVzc2Vu
dGlhbGx5RXF1YWwoYVswXSwgYlswXSkKLSAgICAgICAgJiYgV1RGOjphcmVFc3NlbnRpYWxseUVx
dWFsKGFbMV0sIGJbMV0pCi0gICAgICAgICYmIFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhWzJd
LCBiWzJdKQotICAgICAgICAmJiBXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYVszXSwgYlszXSk7
Ci19Ci0KIC8vIFRoZXNlIGFyZSB0aGUgc3RhbmRhcmQgc1JHQiA8LT4gbGluZWFyUkdCIGNvbnZl
cnNpb24gZnVuY3Rpb25zIChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUkdCKS4KIGZs
b2F0IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoZmxvYXQgYykKIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkocmV2aXNp
b24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGls
aXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMjEgKzUxLDE0IEBAIGZsb2F0IGNvbnRyYXN0
UmF0aW8oY29uc3QgQ29sb3JDb21wb25lbnQKIAogQ29sb3JDb21wb25lbnRzPGZsb2F0PiBwcmVt
dWx0aXBsaWVkKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb250ZW50cyk7
CiAKLWJvb2wgYXJlRXNzZW50aWFsbHlFcXVhbChjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+
JiwgY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYpOwotCi1pbmxpbmUgdWludDhfdCByb3Vu
ZEFuZENsYW1wQ29sb3JDaGFubmVsKGludCB2YWx1ZSkKK2lubGluZSB1aW50OF90IGNvbnZlcnRU
b0NvbXBvbmVudEJ5dGUoZmxvYXQgZikKIHsKLSAgICByZXR1cm4gc3RkOjpjbGFtcCh2YWx1ZSwg
MCwgMjU1KTsKKyAgICByZXR1cm4gc3RkOjpjbGFtcChzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6bHJv
dW5kZihmICogMjU1LjBmKSksIDAsIDI1NSk7CiB9CiAKLWlubGluZSB1aW50OF90IHJvdW5kQW5k
Q2xhbXBDb2xvckNoYW5uZWwoZmxvYXQgdmFsdWUpCitjb25zdGV4cHIgZmxvYXQgY29udmVydFRv
Q29tcG9uZW50RmxvYXQodWludDhfdCBieXRlKQogewotICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0
ZDo6cm91bmQodmFsdWUpLCAwLmYsIDI1NS5mKTsKLX0KLQotaW5saW5lIHVpbnQ4X3Qgc2NhbGVS
b3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGZsb2F0IGYpCi17Ci0gICAgcmV0dXJuIHN0ZDo6Y2xh
bXAoc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKDI1NS4wZiAqIGYpKSwgMCwgMjU1KTsKKyAgICBy
ZXR1cm4gYnl0ZSAvIDI1NS4wZjsKIH0KIAogY29uc3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBs
eUJ5MjU1KHVpbnQxNl90IHZhbHVlKQpAQCAtODIsNSArNzUsNCBAQCBjb25zdGV4cHIgdWludDE2
X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxCiAgICAgcmV0dXJuIGFwcHJveGltYXRpb24gKyAocmVt
YWluZGVyID4+IDgpOwogfQogCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHJldmlz
aW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNv
bG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMzQgKzY3LDEzIEBAIFNpbXBsZUNvbG9yIG1h
a2VVbnByZW11bHRpcGxpZWRTaW1wbGVDb2wKICAgICByZXR1cm4gcGl4ZWxDb2xvcjsKIH0KIAot
U2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhmbG9hdCByLCBmbG9hdCBnLCBm
bG9hdCBiLCBmbG9hdCBhKQotewotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoCi0gICAgICAg
IHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChyKSwKLSAgICAgICAgc2NhbGVSb3VuZEFu
ZENsYW1wQ29sb3JDaGFubmVsKGcpLAotICAgICAgICBzY2FsZVJvdW5kQW5kQ2xhbXBDb2xvckNo
YW5uZWwoYiksCi0gICAgICAgIHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChhKQotICAg
ICk7Ci19Ci0KLVNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21IU0xBKGZsb2F0IGh1ZSwg
ZmxvYXQgc2F0dXJhdGlvbiwgZmxvYXQgbGlnaHRuZXNzLCBmbG9hdCBhbHBoYSkKLXsKLSAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNz
LCBhbHBoYSB9KTsKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKAotICAgICAgICByb3VuZChy
ICogMjU1LjBmKSwKLSAgICAgICAgcm91bmQoZyAqIDI1NS4wZiksCi0gICAgICAgIHJvdW5kKGIg
KiAyNTUuMGYpLAotICAgICAgICByb3VuZChhICogMjU1LjBmKQotICAgICk7Ci19Ci0KIFNpbXBs
ZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21DTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5
LCBmbG9hdCBrLCBmbG9hdCBhKQogewotICAgIGRvdWJsZSBjb2xvcnMgPSAxIC0gazsKLSAgICBp
bnQgciA9IHN0YXRpY19jYXN0PGludD4obmV4dGFmdGVyKDI1NiwgMCkgKiAoY29sb3JzICogKDEg
LSBjKSkpOwotICAgIGludCBnID0gc3RhdGljX2Nhc3Q8aW50PihuZXh0YWZ0ZXIoMjU2LCAwKSAq
IChjb2xvcnMgKiAoMSAtIG0pKSk7Ci0gICAgaW50IGIgPSBzdGF0aWNfY2FzdDxpbnQ+KG5leHRh
ZnRlcigyNTYsIDApICogKGNvbG9ycyAqICgxIC0geSkpKTsKLSAgICByZXR1cm4gbWFrZVNpbXBs
ZUNvbG9yKHIsIGcsIGIsIHN0YXRpY19jYXN0PGZsb2F0PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIGEp
KTsKKyAgICBmbG9hdCBjb2xvcnMgPSAxIC0gazsKKyAgICBmbG9hdCByID0gY29sb3JzICogKDEu
MGYgLSBjKTsKKyAgICBmbG9hdCBnID0gY29sb3JzICogKDEuMGYgLSBtKTsKKyAgICBmbG9hdCBi
ID0gY29sb3JzICogKDEuMGYgLSB5KTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZs
b2F0cyhyLCBnLCBiLCBhKTsKIH0KIAogU3RyaW5nIFNpbXBsZUNvbG9yOjpzZXJpYWxpemF0aW9u
Rm9ySFRNTCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aW1wbGVDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmgJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2
LDcgQEAgcHVibGljOgogICAgIGNvbnN0ZXhwciB1aW50OF90IGJsdWVDb21wb25lbnQoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlOyB9CiAgICAgY29uc3RleHByIHVpbnQ4X3QgYWxwaGFDb21wb25l
bnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDI0OyB9CiAKLSAgICBjb25zdGV4cHIgZmxv
YXQgYWxwaGFDb21wb25lbnRBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGFscGhhQ29tcG9uZW50KCkpIC8gMHhGRjsgfQorICAgIGNvbnN0ZXhwciBmbG9hdCBhbHBo
YUNvbXBvbmVudEFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRGbG9h
dChhbHBoYUNvbXBvbmVudCgpKTsgfQogCiAgICAgY29uc3RleHByIGJvb2wgaXNPcGFxdWUoKSBj
b25zdCB7IHJldHVybiBhbHBoYUNvbXBvbmVudCgpID09IDB4RkY7IH0KICAgICBjb25zdGV4cHIg
Ym9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBhbHBoYUNvbXBvbmVudCgpOyB9CkBAIC02
Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8Zmxv
YXQ+IGFzU1JHQkZsb2F0Q29tcG9uZW50cygpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
eyByZWRDb21wb25lbnQoKSAvIDI1NS4wZiwgZ3JlZW5Db21wb25lbnQoKSAvIDI1NS4wZiwgYmx1
ZUNvbXBvbmVudCgpIC8gMjU1LjBmLCAgYWxwaGFDb21wb25lbnQoKSAvIDI1NS4wZiB9OworICAg
ICAgICByZXR1cm4geyBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChyZWRDb21wb25lbnQoKSksIGNv
bnZlcnRUb0NvbXBvbmVudEZsb2F0KGdyZWVuQ29tcG9uZW50KCkpLCBjb252ZXJ0VG9Db21wb25l
bnRGbG9hdChibHVlQ29tcG9uZW50KCkpLCAgY29udmVydFRvQ29tcG9uZW50RmxvYXQoYWxwaGFD
b21wb25lbnQoKSkgfTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgpAQCAt
OTUsMTYgKzk1LDE0IEBAIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoaW4K
IGNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoaW50IHIsIGludCBnLCBpbnQg
YiwgaW50IGEpOwogCiBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoY29uc3QgQ29sb3JDb21w
b25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbmVudHMpOworU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNv
bG9yRnJvbUZsb2F0cyhmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKTsKK1NpbXBs
ZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21DTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5
LCBmbG9hdCBrLCBmbG9hdCBhKTsKIAogU2ltcGxlQ29sb3IgbWFrZVByZW11bHRpcGxpZWRTaW1w
bGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSwgYm9vbCBjZWlsaW5nID0gdHJ1ZSk7
CiBTaW1wbGVDb2xvciBtYWtlUHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKFNpbXBsZUNvbG9yKTsK
IFNpbXBsZUNvbG9yIG1ha2VVbnByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihpbnQgciwgaW50IGcs
IGludCBiLCBpbnQgYSk7CiBTaW1wbGVDb2xvciBtYWtlVW5wcmVtdWx0aXBsaWVkU2ltcGxlQ29s
b3IoU2ltcGxlQ29sb3IpOwogCi1XRUJDT1JFX0VYUE9SVCBTaW1wbGVDb2xvciBtYWtlU2ltcGxl
Q29sb3JGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpOwotV0VC
Q09SRV9FWFBPUlQgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoZmxvYXQgaCwg
ZmxvYXQgcywgZmxvYXQgbCwgZmxvYXQgYSk7Ci1TaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JG
cm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSk7Ci0K
IGlubGluZSBib29sIG9wZXJhdG9yPT0oU2ltcGxlQ29sb3IgYSwgU2ltcGxlQ29sb3IgYikKIHsK
ICAgICByZXR1cm4gYS52YWx1ZSgpID09IGIudmFsdWUoKTsKQEAgLTExNyw3ICsxMTUsNyBAQCBp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KFNpbXBsZUNvbG9yIGEsIFNpCiAKIGNvbnN0ZXhwciBTaW1w
bGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYikKIHsKLSAgICByZXR1
cm4gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIDB4RkYpOworICAgIHJldHVybiB7IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xhbXAociwgMCwgMHhGRikpLCBzdGF0aWNfY2FzdDx1aW50OF90
PihzdGQ6OmNsYW1wKGcsIDAsIDB4RkYpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RkOjpjbGFt
cChiLCAwLCAweEZGKSksIDB4RkYgfTsKIH0KIAogY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VT
aW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKQEAgLTEyOCwxMiArMTI2LDEy
IEBAIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoaW4KIGlubGluZSBTaW1w
bGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JH
QkNvbXBvbmVudHMpCiB7CiAgICAgYXV0byBbciwgZywgYiwgYV0gPSBzUkdCQ29tcG9uZW50czsK
LSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKAotICAgICAgICBzY2FsZVJvdW5kQW5kQ2xhbXBD
b2xvckNoYW5uZWwociksCi0gICAgICAgIHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChn
KSwKLSAgICAgICAgc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGIpLAotICAgICAgICBz
Y2FsZVJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoYSkKLSAgICApOworICAgIHJldHVybiBtYWtl
U2ltcGxlQ29sb3JGcm9tRmxvYXRzKHIsIGcsIGIsIGEpOworfQorCitpbmxpbmUgU2ltcGxlQ29s
b3IgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBm
bG9hdCBhKQoreworICAgIHJldHVybiB7IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUociksIGNvbnZl
cnRUb0NvbXBvbmVudEJ5dGUoZyksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYiksIGNvbnZlcnRU
b0NvbXBvbmVudEJ5dGUoYSkgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9D
YWlyb09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03OCw3ICs3OCw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVDYWlyb0NvbnRleHRTb3VyY2Uo
Y2EKICAgICB9IGVsc2UgewogICAgICAgICAvLyBTb2xpZCBjb2xvciBzb3VyY2UKICAgICAgICAg
aWYgKGdsb2JhbEFscGhhIDwgMSkKLSAgICAgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3Io
Y3IsIGNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5k
aW5nKGdsb2JhbEFscGhhKSk7CisgICAgICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNy
LCBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShnbG9iYWxBbHBoYSkpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBjb2xvcik7CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29s
b3JDRy5jcHAJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0NvbG9yQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw4ICs3OCw3IEBAIHN0
YXRpYyBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tQ0cKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBzY2FsZUZhY3Rv
ciA9IG5leHRhZnRlcigyNTYuMCwgMC4wKTsKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHIg
KiBzY2FsZUZhY3RvciwgZyAqIHNjYWxlRmFjdG9yLCBiICogc2NhbGVGYWN0b3IsIGEgKiBzY2Fs
ZUZhY3Rvcik7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMociwgZywgYiwg
YSk7CiB9CiAKIENvbG9yOjpDb2xvcihDR0NvbG9yUmVmIGNvbG9yKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCShy
ZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRmxvb2QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgRkVG
bG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhdXRvIGNvbG9yID0gZmxvb2RDb2xvcigpLmNvbG9yV2l0aEFs
cGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb29kT3BhY2l0eSgpKTsK
KyAgICBhdXRvIGNvbG9yID0gZmxvb2RDb2xvcigpLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
KGZsb29kT3BhY2l0eSgpKTsKICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0KEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgY29sb3Ip
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbG9yTWFjLm1tCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTg4LDggKzg4LDcg
QEAgc3RhdGljIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21OUwogICAgIFtyZ2JDb2xv
ciBnZXRSZWQ6JnJlZENvbXBvbmVudCBncmVlbjomZ3JlZW5Db21wb25lbnQgYmx1ZTomYmx1ZUNv
bXBvbmVudCBhbHBoYTomYWxwaGFdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAK
LSAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyKDI1Ni4wLCAw
LjApOwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3Ioc2NhbGVGYWN0b3IgKiByZWRDb21wb25l
bnQsIHNjYWxlRmFjdG9yICogZ3JlZW5Db21wb25lbnQsIHNjYWxlRmFjdG9yICogYmx1ZUNvbXBv
bmVudCwgc2NhbGVGYWN0b3IgKiBhbHBoYSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZy
b21GbG9hdHMocmVkQ29tcG9uZW50LCBncmVlbkNvbXBvbmVudCwgYmx1ZUNvbXBvbmVudCwgYWxw
aGEpOwogfQogCiBDb2xvciBjb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xvcklPUy5tbQkocmV2aXNpb24gMjYyNjU5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw4ICs0Nyw3IEBAIENvbG9yIGNvbG9yRnJvbVVJQ29sb3IoVUlDb2xvciAqY29sb3Ip
CiAKICAgICBbY29sb3IgZ2V0UmVkOiZyZWRDb21wb25lbnQgZ3JlZW46JmdyZWVuQ29tcG9uZW50
IGJsdWU6JmJsdWVDb21wb25lbnQgYWxwaGE6JmFscGhhXTsKIAotICAgIHN0YXRpYyBjb25zdCBk
b3VibGUgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXIoMjU2LjAsIDAuMCk7Ci0gICAgcmV0dXJuIG1h
a2VTaW1wbGVDb2xvcihzY2FsZUZhY3RvciAqIHJlZENvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBn
cmVlbkNvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBibHVlQ29tcG9uZW50LCBzY2FsZUZhY3RvciAq
IGFscGhhKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyZWRDb21wb25l
bnQsIGdyZWVuQ29tcG9uZW50LCBibHVlQ29tcG9uZW50LCBhbHBoYSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAko
cmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBDb2xvciBTVkdTdG9wRWxlbWVudDo6
c3RvcENvbG9ySW5jbHVkaW5nCiAgICAgYXV0byYgc3ZnU3R5bGUgPSBzdHlsZS5zdmdTdHlsZSgp
OwogICAgIGF1dG8gc3RvcENvbG9yID0gc3R5bGUuY29sb3JSZXNvbHZpbmdDdXJyZW50Q29sb3Io
c3ZnU3R5bGUuc3RvcENvbG9yKCkpOwogCi0gICAgcmV0dXJuIHN0b3BDb2xvci5jb2xvcldpdGhB
bHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhzdmdTdHlsZS5zdG9wT3Bh
Y2l0eSgpKTsKKyAgICByZXR1cm4gc3RvcENvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
KHN2Z1N0eWxlLnN0b3BPcGFjaXR5KCkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRk
aXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsMTYgQEAgcHVibGljOgogICAgIH0KIAog
cHJpdmF0ZToKKyAgICBpbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGlu
dCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6OmNsYW1wKHZhbHVlLCAwLCAyNTUp
OworICAgIH0KKworICAgIGlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwo
ZmxvYXQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjpjbGFtcChzdGQ6OnJvdW5k
Zih2YWx1ZSksIDAuMGYsIDI1NS4wZik7CisgICAgfQorCiAgICAgdm9pZCBhZGRGcm9tQW5kVG9W
YWx1ZXMoU1ZHRWxlbWVudCopIG92ZXJyaWRlCiAgICAgewogICAgICAgICBhdXRvIHNpbXBsZUZy
b20gPSBtX2Zyb20udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1tCShyZXZpc2lvbiAyNjI2
NTkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbQko
d29ya2luZyBjb3B5KQpAQCAtNTEzLDcgKzUxMyw3IEBAIHN0YXRpYyBXZWJDb3JlOjpDb2xvciBz
Y3JvbGxWaWV3QmFja2dyb3UKICAgICBpZiAoem9vbVNjYWxlIDwgbWluaW11bVpvb21TY2FsZSkg
ewogICAgICAgICBDR0Zsb2F0IHNsb3BlID0gMTI7CiAgICAgICAgIENHRmxvYXQgb3BhY2l0eSA9
IHN0ZDo6bWF4PENHRmxvYXQ+KDEgLSBzbG9wZSAqIChtaW5pbXVtWm9vbVNjYWxlIC0gem9vbVNj
YWxlKSwgMCk7Ci0gICAgICAgIGNvbG9yID0gY29sb3IuY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVy
bmF0aXZlUm91bmRpbmcob3BhY2l0eSk7CisgICAgICAgIGNvbG9yID0gY29sb3IuY29sb3JXaXRo
QWxwaGEob3BhY2l0eSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNvbG9yOwpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkocmV2aXNp
b24gMjYyNjU5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVz
dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRv
SFNMX1doaXRlKQogICAgIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwg
bGlnaHRuZXNzKTsKICAgICAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFr
ZVNpbXBsZUNvbG9yRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7
CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvcihoc2xU
b1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSkpKTsKICAgICBFWFBF
Q1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtNjEsNyArNjEsNyBAQCBU
RVNUKENvbG9yLCBSR0JUb0hTTF9CbGFjaykKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5s
aWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBD
b2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywg
YWxwaGEpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNv
bG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KSkpOwog
ICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC03Nyw3ICs3
Nyw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1JlZCkKIAogICAgIEVYUEVDVF9GTE9BVF9FUShj
b2xvci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29s
b3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShodWUsIHNhdHVyYXRpb24sIGxpZ2h0
bmVzcywgYWxwaGEpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNp
bXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9
KSkpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC05
Myw3ICs5Myw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyZWVuKQogCiAgICAgRVhQRUNUX0ZM
T0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRy
aXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21IU0xBKGh1ZSwgc2F0dXJhdGlv
biwgbGlnaHRuZXNzLCBhbHBoYSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBDb2xv
cihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3Ms
IGFscGhhIH0pKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9
CiAKQEAgLTEwOSw3ICsxMDksNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbHVlKQogCiAgICAg
RVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOwogCi0gICAgYXV0
byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21IU0xBKGh1ZSwg
c2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29s
b3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBs
aWdodG5lc3MsIGFscGhhIH0pKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRD
b2xvcik7CiB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9EYXJr
R3JheSkKICAgICAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGxpZ2h0
bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNpbXBsZUNv
bG9yRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7CisgICAgYXV0
byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvcihoc2xUb1NSR0IoeyBo
dWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSkpKTsKICAgICBFWFBFQ1RfRVEoY29s
b3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTQxLDcgKzE0MSw3IEBAIFRFU1QoQ29s
b3IsIFJHQlRvSFNMX0dyYXkpCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNz
KCksIGxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFr
ZVNpbXBsZUNvbG9yRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhKSk7
CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvcihoc2xU
b1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSkpKTsKICAgICBFWFBF
Q1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTU3LDcgKzE1Nyw3IEBA
IFRFU1QoQ29sb3IsIFJHQlRvSFNMX0xpZ2h0R3JheSkKIAogICAgIEVYUEVDVF9GTE9BVF9FUShj
b2xvci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29s
b3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShodWUsIHNhdHVyYXRpb24sIGxpZ2h0
bmVzcywgYWxwaGEpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29sb3IobWFrZVNp
bXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9
KSkpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401280</attachid>
            <date>2020-06-06 14:51:22 -0700</date>
            <delta_ts>2020-06-06 16:09:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212871-20200606145122.patch</filename>
            <type>text/plain</type>
            <size>38770</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0OSBAQAorMjAyMC0wNi0wNiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IFVuaWZ5
IHJvdW5kaW5nIC8gY2xhbXBpbmcgY29udmVyc2lvbnMgYmV0d2VlbiAwLTEgZmxvYXQgY29tcG9u
ZW50cyBhbmQgMC0yNTUgYnl0ZSBjb21wb25lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI4NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFVuaWZ5IGFsbCBjb252ZXJzaW9ucyBvZiAw
LjBmIC0gMS4wZiBmbG9hdCBiYXNlZCBjb2xvciBjb21wb25lbnRzIHRvIDAtMjU1IGludCBiYXNl
ZCBjb2xvciBjb21wb25lbnRzCisgICAgICAgIHRvIHVzZSB0aGUgbmV3IGNvbnZlcnRUb0NvbXBv
bmVudEJ5dGUoKSBmdW5jdGlvbiB3aGljaCBzY2FsZXMsIHJvdW5kcyAodXNpbmcgbHJvdW5kZikg
YW5kIGNsYW1wcyB0aGUKKyAgICAgICAgdmFsdWUuIEZvciBjb25zaXN0ZW5jeSwgYSBjb252ZXJ0
VG9Db21wb25lbnRGbG9hdCgpIGZ1bmN0aW9uLCB3aGljaCBqdXN0IHNjYWxlcyBkb3duIGFuIGlu
dCBiYXNlZCB2YWx1ZQorICAgICAgICB0byBhIGZsb2F0IGJhc2VkIHZhbHVlLCBpcyBhbHNvIGFk
ZGVkLgorICAgICAgICAKKyAgICAgICAgLSBSZW1vdmVzICpVc2luZ0FsdGVybmF0aXZlUm91bmRp
bmcgdmFyaWFudHMgKGFjdHVhbGx5LCB3ZSBub3cgb25seSBoYXZlIHRoaXMgdmFyaWFudCkgZm9y
IGNvbG9yIGZ1bmN0aW9ucworICAgICAgICAgIHdoaWNoIGFsbG93ZWQgY2FsbGVycyB0byBwaWNr
IGZyb20gdHJ1bmNhdGlvbiB2cy4gcm91bmRpbmcgd2hlbiBvdmVycmlkaW5nIGFscGhhLgorICAg
ICAgICAtIFJlcGxhY2VzIGFsbCB1c2VzIG9mIHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5l
bCgpIHdpdGggY29udmVydFRvQ29tcG9uZW50Qnl0ZSgpIChyZWFsbHkganVzdCBhIHJlbmFtZSku
CisgICAgICAgIC0gUmVwbGFjZXMgdXNlcyBvZiBuZXh0YWZ0ZXIoMjU2LCAwKSBiYXNlZCBjb252
ZXJzaW9ucyB3aXRoIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoKS4KKyAgICAgICAgCisgICAgICAg
IEFsc286CisgICAgICAgIC0gTW92ZXMgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbCgpIGZ1bmN0
aW9ucyB0byBTVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgsIHdoaWNoIHdh
cworICAgICAgICAgIHRoZSBvbmx5IHBsYWNlcyB0aGV5IHdlcmUgdXNlZC4KKyAgICAgICAgLSBS
ZW1vdmVzIGFyZUVzc2VudGlhbGx5RXF1YWwoKSBvdmVybG9hZCB0YWtpbmcgQ29sb3JDb21wb25l
bnRzPGZsb2F0Pi4gSXQgd2FzIHVudW5zZWQuCisgICAgICAgIC0gUmVtb3ZlcyBtYWtlU2ltcGxl
Q29sb3JGcm9tSFNMQSguLi4pIGFuZCBqdXN0IGlubGluZXMgbWFrZVNpbXBsZUNvbG9yKGhzbFRv
U1JHQiguLi4pKSB3aGljaCBub3cKKyAgICAgICAgICBkb2VzIHRoZSBzYW1lIHRoaW5nLgorCisg
ICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjbGFtcFJHQkNvbXBvbmVudCk6
CisgICAgICAgIFVzZSBjb252ZXJ0UHJlc2NhbGVkVG9Db21wb25lbnRCeXRlKCkgdG8gcm91bmQg
YW5kIGNsYW1wIHRoZSBjb21wb25lbnRzLgorCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OnBhcnNlUkdCUGFyYW1ldGVycyk6CisgICAgICAgIFVzZSB1aW50OF90
IG1vcmUgY29uc2lzdGVudGx5IG5vdyB0aGF0IGhlbHBlcnMgZW5zdXJlIHRoYXQgaXMgdGhlIHJl
dHVybiB0eXBlCisgICAgICAgIG9mIGNvbnZlcnNpb24gZnVuY3Rpb25zLgorCisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlSFNMUGFyYW1ldGVycyk6Cisg
ICAgICAgIFN3aXRjaCB0byB1c2luZyBtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKC4uLikpIGRp
cmVjdGx5LgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UpOgorICAg
ICAgICBTd2l0Y2ggdG8gdXNpbmcgbWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQiguLi4pKSBkaXJl
Y3RseS4KKworICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VMZWdhY3lDb2xvclZhbHVlKToKKyAgICAgICAgVXNlIHVpbnQ4X3Qgc2luY2UgdGhh
dCBpcyB3aGF0IHRvQVNDSUlIZXhWYWx1ZSgpIHJldHVybnMuCisKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFN0cm9rZVN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEZpbGxTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3cp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1N0eWxlOjpjcmVhdGVGcm9tU3RyaW5nV2l0aE92ZXJyaWRlQWxwaGEpOgorICAg
ICAgICBSZXBsYWNlcyB1c2VzIG9mIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5k
aW5nKCkgd2l0aCBjb2xvcldpdGhBbHBoYSgpLgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNvbG9yKToK
KyAgICAgICAgVXNlIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoKSByYXRoZXIgdGhhbiBhIHNpbXBs
ZSB0cnVuY2F0aW5nIGNhc3QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6bGlnaHQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6OmRhcmsgY29uc3QpOgorICAgICAgICBVc2UgbWFrZVNpbXBsZUNvbG9yRnJv
bUZsb2F0cygpIHJhdGhlciB0aGFuIG5leHRhZnRlcmYoMjU2LjBmLCAwLjBmKSBjb252ZXJzaW9u
LgorCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEgY29uc3QpOgorICAg
ICAgICBVc2UgY29udmVydFRvQ29tcG9uZW50Qnl0ZSgpIGZvciBhbHBoYSBjb252ZXJzaW9uLgor
ICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSBjb25zdCk6CisgICAgICAgIENhbGwgYXNFeHRlbmRlZCgpLnRvU1JHQkFDb21wb25lbnRzTG9z
c3koKSBkaXJlY3RseSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBicmFuY2guCisgICAgICAgIAorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICBSZW1vdmUgVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIHZh
cmlhbnRzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjphbHBoYSBjb25zdCk6CisgICAgICAgIFVzZSBjb252ZXJ0VG9Db21w
b25lbnRCeXRlKCkgZm9yIGFscGhhIGNvbnZlcnNpb24uCisKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjppbnZlcnRlZENvbG9yV2l0aEFscGhhIGNvbnN0KToKKyAgICAgICAgQWRkIGFuIG92ZXJs
b2FkIHRha2luZyBhbiBPcHRpb25hbDxmbG9hdD4gZm9yIGNvbnNpc3RlbmN5LgorCisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhIGNvbnN0KToKKyAgICAgICAgU2lt
cGxpZnkgYnkgaW5saW5pbmcgYWxsIHZhcmlhbnRzIGV4Y2VwdCB0aGUgbWFpbiBjb2xvcldpdGhB
bHBoYSgpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6YXJlRXNzZW50aWFsbHlFcXVhbCk6IERlbGV0ZWQuCisgICAg
ICAgIFJlbW92ZSB1bnVzZWQgZnVuY3Rpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFByZXNjYWxlZFRv
Q29tcG9uZW50Qnl0ZSk6CisgICAgICAgIEFkZGVkLiBVc2VmdWwgZm9yIGNhbGxlcnMgd2hvIGFs
cmVhZHkgaGF2ZSBwcmVzY2FsZWQgdmFsdWVzIGJ1dCBuZWVkIHJvdW5kaW5nL2NsYW1waW5nLgor
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9Db21wb25lbnRCeXRlKToKKyAgICAgICAgQWRk
ZWQuIEJvdHRsZW5lY2sgZm9yIGZsb2F0IHRvIGJ5dGUgYmFzZWQgY29sb3IgY29tcG9uZW50IGNv
bnZlcnNpb25zLgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ29tcG9uZW50RmxvYXQpOgor
ICAgICAgICBBZGRlZC4gQm90dGxlbmVjayBmb3IgYnl0ZSB0byBmbG9hdCBiYXNlZCBjb2xvciBj
b21wb25lbnQgY29udmVyc2lvbnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1w
bGVDb2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0Ep
OgorICAgICAgICBVc2UgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygpIHJhdGhlciB0aGFuIG5l
eHRhZnRlcmYoMjU2LjBmLCAwLjBmKSBjb252ZXJzaW9uLiBFdmVudHVhbGx5LAorICAgICAgICB3
aGVuIHdlIHByb2JhYmx5IHdhbnQgdGhpcyB0byBnbyBhd2F5IGFuZCBzdG9yZSBDTVlLQSBjb2xv
cnMgYXMgRXh0ZW5kZWRDb2xvcnMgd2l0aCB0aGVpciBvd24KKyAgICAgICAgY29sb3Igc3BhY2Uu
IAorCisgICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKTogCisgICAg
ICAgIE1vdmVkIHRvIGhlYWRlci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBs
ZUNvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6YWxwaGFDb21wb25lbnRB
c0Zsb2F0IGNvbnN0KToKKyAgICAgICAgVXNlIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KCkuCisK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjphc1NSR0JGbG9hdENvbXBvbmVudHMgY29u
c3QpOgorICAgICAgICBVc2UgY29udmVydFRvQ29tcG9uZW50RmxvYXQoKS4KKworICAgICAgICAo
V2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKToKKyAgICAgICAgQXZvaWQgdW5uY2Vzc2FyeSBjbGFt
cGluZyBvZiB0aGUgYWxwaGEgY29tcG9uZW50IGJ5IGNhbGxpbmcgY29uc3RydWN0b3IgZGlyZWN0
bHkuCisKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMpOgorICAg
ICAgICBJbmxpbmVkLiBDYWxscyBjb252ZXJ0VG9Db21wb25lbnRCeXRlIG5vdyByYXRoZXIgdGhh
biB0aGUgb2xkZXIgKGlkZW50aWNhbCkgc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKCku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OnByZXBhcmVDYWlyb0NvbnRleHRTb3VyY2UpOgor
ICAgICAgICBSZXBsYWNlcyB1c2Ugb2YgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0Fs
dGVybmF0aXZlUm91bmRpbmcgd2l0aCBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSgpLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xvcik6CisgICAgICAgIFVzZSBtYWtlU2ltcGxl
Q29sb3JGcm9tRmxvYXRzKCkgcmF0aGVyIHRoYW4gbmV4dGFmdGVyKDI1Ni4wLCAwLjApIGNvbnZl
cnNpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgUmVwbGFjZXMgdXNlIG9mIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRl
cm5hdGl2ZVJvdW5kaW5nIHdpdGggY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoKS4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VTaW1wbGVDb2xvckZyb21OU0NvbG9yKToKKyAgICAgICAgVXNlIG1ha2VTaW1wbGVD
b2xvckZyb21GbG9hdHMoKSByYXRoZXIgdGhhbiBuZXh0YWZ0ZXIoMjU2LjAsIDAuMCkgY29udmVy
c2lvbi4KKworICAgICAgICAqIHBsYXRmb3JtL2lvcy9Db2xvcklPUy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbG9yRnJvbVVJQ29sb3IpOgorICAgICAgICBVc2UgbWFrZVNpbXBsZUNvbG9yRnJv
bUZsb2F0cygpIHJhdGhlciB0aGFuIG5leHRhZnRlcigyNTYuMCwgMC4wKSBjb252ZXJzaW9uLgor
CisgICAgICAgICogc3ZnL1NWR1N0b3BFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1N0b3BFbGVtZW50OjpzdG9wQ29sb3JJbmNsdWRpbmdPcGFjaXR5IGNvbnN0KToKKyAgICAgICAg
UmVwbGFjZXMgdXNlIG9mIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2
ZVJvdW5kaW5nIHdpdGggY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoKS4KKworICAgICAgICAq
IHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkNvbG9yRnVuY3Rpb246OnJvdW5kQW5kQ2xh
bXBDb2xvckNoYW5uZWwpOgorICAgICAgICBNb3ZlZCBmcm9tIENvbG9yVXRpbGl0aWVzLmggYXMg
dGhpcyB3YXMgdGhlIG9ubHkgdXNlLgorCiAyMDIwLTA2LTA2ICBaYWxhbiBCdWp0YXMgIDx6YWxh
bkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10gQWRkIHN1cHBvcnQgZm9yIHdpZHRoOiBtaW4v
bWF4LWNvbnRlbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTE3LDEzICs1MTcsMTMgQEAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lVXJsKENTUwogICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZVZhbHVlKHVybC50b1N0cmluZygpLCBDU1NVbml0VHlwZTo6Q1NTX1VSSSk7CiB9CiAKLXN0YXRp
YyBpbnQgY2xhbXBSR0JDb21wb25lbnQoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQor
c3RhdGljIHVpbnQ4X3QgY2xhbXBSR0JDb21wb25lbnQoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUm
IHZhbHVlKQogewogICAgIGRvdWJsZSByZXN1bHQgPSB2YWx1ZS5kb3VibGVWYWx1ZSgpOwogICAg
IGlmICh2YWx1ZS5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0IC8gMTAw
LjAgKiAyNTUuMDsKIAotICAgIHJldHVybiBjbGFtcFRvPGludD4ocm91bmQocmVzdWx0KSwgMCwg
MjU1KTsKKyAgICByZXR1cm4gY29udmVydFByZXNjYWxlZFRvQ29tcG9uZW50Qnl0ZShyZXN1bHQp
OwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlKQpAQCAtNTUxLDcgKzU1MSw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJHQlBhcmFt
ZXRlcnMoQ1NTUGFyc2UKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfTsKIAotICAgIGludCBj
b2xvckFycmF5WzNdOworICAgIHVpbnQ4X3QgY29sb3JBcnJheVszXTsKICAgICBjb2xvckFycmF5
WzBdID0gY2xhbXBSR0JDb21wb25lbnQoKmNvbG9yUGFyYW1ldGVyKTsKICAgICBmb3IgKGludCBp
ID0gMTsgaSA8IDM7IGkrKykgewogICAgICAgICBpZiAoaSA9PSAxKQpAQCAtNTczLDcgKzU3Myw3
IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2UKICAgICAgICAgcmV0
dXJuIGNvbnN1bWVTbGFzaEluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7CiAgICAgfTsKIAotICAg
IGludCBhbHBoYUNvbXBvbmVudCA9IDI1NTsKKyAgICB1aW50OF90IGFscGhhQ29tcG9uZW50ID0g
MjU1OwogICAgIGlmIChjb25zdW1lQWxwaGFTZXBhcmF0b3IoKSkgewogICAgICAgICBkb3VibGUg
YWxwaGE7CiAgICAgICAgIGlmICghY29uc3VtZU51bWJlclJhdyhhcmdzLCBhbHBoYSkpIHsKQEAg
LTU4Miw5ICs1ODIsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNl
CiAgICAgICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAgICAgICAgICAgICBhbHBoYSA9IGFs
cGhhUGVyY2VudC0+ZG91YmxlVmFsdWUoKSAvIDEwMC4wOwogICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gVzMgc3RhbmRhcmQgc3RpcHVsYXRlcyBhIDIuNTUgYWxwaGEgdmFsdWUgbXVsdGlwbGljYXRp
b24gZmFjdG9yLgotICAgICAgICBhbHBoYUNvbXBvbmVudCA9IHN0YXRpY19jYXN0PGludD4obHJv
dW5kZihjbGFtcFRvPGRvdWJsZT4oYWxwaGEsIDAuMCwgMS4wKSAqIDI1NS4wZikpOworICAgICAg
ICBhbHBoYUNvbXBvbmVudCA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEpOwogICAgIH07
CiAKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKQEAgLTY0Miw3ICs2NDAsNyBAQCBzdGF0aWMgQ29s
b3IgcGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAg
ICAgICAgIHJldHVybiBDb2xvcigpOwogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21I
U0xBKHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGNvbG9yQXJyYXlbMV0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRp
Y19jYXN0PGZsb2F0PihhbHBoYSkpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoaHNsVG9T
UkdCKHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMF0pLCBzdGF0aWNfY2FzdDxmbG9h
dD4oY29sb3JBcnJheVsxXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzJdKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKSB9KSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9y
RnVuY3Rpb25QYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkocmV2aXNpb24g
MjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC02MjMsOSArNjIzLDkgQEAgTlNBcnJheSAqRGF0YURldGVjdGlv
bjo6ZGV0ZWN0Q29udGVudEluUgogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSB0
aGUgbGlnaHRuZXNzIG9mIHRoZSB1bmRlcmxpbmUgY29sb3IgdG8gdGhlIG1pZGRsZSwgYW5kIG11
bHRpcGx5IHRoZSBhbHBoYSBieSAzOCUsCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0
aGUgY29sb3Igd2lsbCBhcHBlYXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3VuZHMsIHNpbmNl
IG9ubHkgb25lIGNvbG9yIGNhbiBiZSBzcGVjaWZpZWQuCi0gICAgICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgb3ZlcnJpZGVMaWdodG5lc3MgPSAwLjU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgb3ZlcnJpZGVBbHBoYU11bHRpcGxpZXIgPSAwLjM4OwotICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0byB1bmRlcmxpbmVDb2xvciA9IG1ha2VTaW1wbGVDb2xvckZyb21IU0xBKGh1
ZSwgc2F0dXJhdGlvbiwgb3ZlcnJpZGVMaWdodG5lc3MsIG92ZXJyaWRlQWxwaGFNdWx0aXBsaWVy
ICogYWxwaGEpOworICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgb3ZlcnJpZGVMaWdodG5l
c3MgPSAwLjVmOworICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgb3ZlcnJpZGVBbHBoYU11
bHRpcGxpZXIgPSAwLjM4ZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdW5kZXJsaW5l
Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBvdmVy
cmlkZUxpZ2h0bmVzcywgb3ZlcnJpZGVBbHBoYU11bHRpcGxpZXIgKiBhbHBoYSB9KSk7CiAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlDb2xvciwgQ1NTVmFsdWVDdXJyZW50Y29sb3IpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVRleHREZWNvcmF0aW9uQ29sb3IsIHVuZGVybGluZUNvbG9yLnNlcmlhbGl6YXRpb25Gb3JD
U1MoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gMjYy
NjU5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNzMsOSArMTA3Myw5IEBAIHN0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gcGFy
c2VMZWdhY3kKICAgICBBU1NFUlQoYmx1ZUluZGV4ID49IGNvbXBvbmVudExlbmd0aCAqIDIpOwog
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGJsdWVJbmRleCArIDEgPCBkaWdp
dEJ1ZmZlci5zaXplKCkpOwogCi0gICAgaW50IHJlZFZhbHVlID0gdG9BU0NJSUhleFZhbHVlKGRp
Z2l0QnVmZmVyW3JlZEluZGV4XSwgZGlnaXRCdWZmZXJbcmVkSW5kZXggKyAxXSk7Ci0gICAgaW50
IGdyZWVuVmFsdWUgPSB0b0FTQ0lJSGV4VmFsdWUoZGlnaXRCdWZmZXJbZ3JlZW5JbmRleF0sIGRp
Z2l0QnVmZmVyW2dyZWVuSW5kZXggKyAxXSk7Ci0gICAgaW50IGJsdWVWYWx1ZSA9IHRvQVNDSUlI
ZXhWYWx1ZShkaWdpdEJ1ZmZlcltibHVlSW5kZXhdLCBkaWdpdEJ1ZmZlcltibHVlSW5kZXggKyAx
XSk7CisgICAgdWludDhfdCByZWRWYWx1ZSA9IHRvQVNDSUlIZXhWYWx1ZShkaWdpdEJ1ZmZlclty
ZWRJbmRleF0sIGRpZ2l0QnVmZmVyW3JlZEluZGV4ICsgMV0pOworICAgIHVpbnQ4X3QgZ3JlZW5W
YWx1ZSA9IHRvQVNDSUlIZXhWYWx1ZShkaWdpdEJ1ZmZlcltncmVlbkluZGV4XSwgZGlnaXRCdWZm
ZXJbZ3JlZW5JbmRleCArIDFdKTsKKyAgICB1aW50OF90IGJsdWVWYWx1ZSA9IHRvQVNDSUlIZXhW
YWx1ZShkaWdpdEJ1ZmZlcltibHVlSW5kZXhdLCBkaWdpdEJ1ZmZlcltibHVlSW5kZXggKyAxXSk7
CiAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyZWRWYWx1ZSwgZ3JlZW5WYWx1ZSwgYmx1ZVZh
bHVlKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDI2MjY1OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzUsNyArMzc1LDcgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTdAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc3R5
bGUuaXNDdXJyZW50Q29sb3IoKSkKLSAgICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50
Q29sb3IoY2FudmFzQmFzZSgpKS5jb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGlu
ZyhzdHlsZS5vdmVycmlkZUFscGhhKCkpKTsKKyAgICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShj
dXJyZW50Q29sb3IoY2FudmFzQmFzZSgpKS5jb2xvcldpdGhBbHBoYShzdHlsZS5vdmVycmlkZUFs
cGhhKCkpKTsKICAgICBlbHNlCiAgICAgICAgIGNoZWNrT3JpZ2luKHN0eWxlLmNhbnZhc1BhdHRl
cm4oKS5nZXQoKSk7CiAKQEAgLTM5OCw3ICszOTgsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnNldEZpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzdHlsZS5pc0N1
cnJlbnRDb2xvcigpKQotICAgICAgICBzdHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihj
YW52YXNCYXNlKCkpLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKHN0eWxl
Lm92ZXJyaWRlQWxwaGEoKSkpOworICAgICAgICBzdHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRD
b2xvcihjYW52YXNCYXNlKCkpLmNvbG9yV2l0aEFscGhhKHN0eWxlLm92ZXJyaWRlQWxwaGEoKSkp
OwogICAgIGVsc2UKICAgICAgICAgY2hlY2tPcmlnaW4oc3R5bGUuY2FudmFzUGF0dGVybigpLmdl
dCgpKTsKIApAQCAtMTMwMiw3ICsxMzAyLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpzZXRTaAogICAgICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwg
Ymx1ciwgY29sb3IuY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoYWxwaGEp
KTsKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb2xvci5j
b2xvcldpdGhBbHBoYShhbHBoYSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBm
bG9hdCBncmF5TGV2ZWwsIGZsb2F0IGFscGhhKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1N0eWxlLmNwcAkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNyAr
MTQzLDcgQEAgQ2FudmFzU3R5bGUgQ2FudmFzU3R5bGU6OmNyZWF0ZUZyb21TdHJpbgogICAgIGlm
ICghY29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIGNv
bG9yLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGFscGhhKTsKKyAgICBy
ZXR1cm4gY29sb3IuY29sb3JXaXRoQWxwaGEoYWxwaGEpOwogfQogCiBib29sIENhbnZhc1N0eWxl
Ojppc0VxdWl2YWxlbnRDb2xvcihjb25zdCBDYW52YXNTdHlsZSYgb3RoZXIpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRP
TUFnZW50LmNwcAkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsx
NDksNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBKU09OOjpPYmplCiAgICAgZWxz
ZSBpZiAoYSA+IDEpCiAgICAgICAgIGEgPSAxOwogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xv
cihyLCBnLCBiLCBzdGF0aWNfY2FzdDxpbnQ+KGEgKiAyNTUpKTsKKyAgICByZXR1cm4gbWFrZVNp
bXBsZUNvbG9yKHIsIGcsIGIsIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYSkpOwogfQogCiBzdGF0
aWMgQ29sb3IgcGFyc2VDb25maWdDb2xvcihjb25zdCBTdHJpbmcmIGZpZWxkTmFtZSwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBjb25maWdPYmplY3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSwxMSAr
MTIxLDggQEAgQ29sb3IgQ29sb3I6OmxpZ2h0KCkgY29uc3QKICAgICAvLyBIYXJkY29kZSB0aGlz
IGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KICAgICBpZiAoIWlzRXh0ZW5kZWQoKSAmJiBhc1NpbXBs
ZSgpID09IGJsYWNrKQogICAgICAgICByZXR1cm4gbGlnaHRlbmVkQmxhY2s7Ci0gICAgCi0gICAg
Y29uc3QgZmxvYXQgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CiAKICAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKLQogICAgIGZs
b2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAKICAgICBpZiAodiA9PSAwLjBmKQpAQCAt
MTMzLDEyICsxMzAsNyBAQCBDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAogCiAgICAgZmxvYXQg
bXVsdGlwbGllciA9IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikgLyB2OwogCi0gICAgcmV0dXJu
IG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICog
ciAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICog
ZyAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICog
YiAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgYWxwaGEoKQotICAgICk7CisgICAgcmV0dXJuIG1h
a2VTaW1wbGVDb2xvckZyb21GbG9hdHMobXVsdGlwbGllciAqIHIsIG11bHRpcGxpZXIgKiBnLCBt
dWx0aXBsaWVyICogYiwgYSk7CiB9CiAKIENvbG9yIENvbG9yOjpkYXJrKCkgY29uc3QKQEAgLTE0
NywxOSArMTM5LDEyIEBAIENvbG9yIENvbG9yOjpkYXJrKCkgY29uc3QKICAgICBpZiAoIWlzRXh0
ZW5kZWQoKSAmJiBhc1NpbXBsZSgpID09IHdoaXRlKQogICAgICAgICByZXR1cm4gZGFya2VuZWRX
aGl0ZTsKICAgICAKLSAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IG5leHRhZnRlcmYoMjU2
LjBmLCAwLjBmKTsKLQogICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpOwogCiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9h
dCBtdWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2KTsKIAotICAgIHJl
dHVybiBtYWtlU2ltcGxlQ29sb3IoCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGll
ciAqIHIgKiBzY2FsZUZhY3RvciksCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGll
ciAqIGcgKiBzY2FsZUZhY3RvciksCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGll
ciAqIGIgKiBzY2FsZUZhY3RvciksCi0gICAgICAgIGFscGhhKCkKLSAgICApOworICAgIHJldHVy
biBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKG11bHRpcGxpZXIgKiByLCBtdWx0aXBsaWVyICog
ZywgbXVsdGlwbGllciAqIGIsIGEpOwogfQogCiBib29sIENvbG9yOjppc0RhcmsoKSBjb25zdApA
QCAtMjM1LDQxICsyMjAsMTQgQEAgQ29sb3IgQ29sb3I6OmJsZW5kV2l0aFdoaXRlKCkgY29uc3QK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1Db2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnkoZmxvYXQgYW1vdW50KSBjb25zdAotewotICAgIGZsb2F0IG5ld0FscGhhID0gYW1v
dW50ICogYWxwaGFBc0Zsb2F0KCk7Ci0gICAgcmV0dXJuIGNvbG9yV2l0aEFscGhhKG5ld0FscGhh
KTsKLX0KLQotQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRl
cm5hdGl2ZVJvdW5kaW5nKGZsb2F0IGFtb3VudCkgY29uc3QKLXsKLSAgICBmbG9hdCBuZXdBbHBo
YSA9IGFtb3VudCAqIGFscGhhQXNGbG9hdCgpOwotICAgIHJldHVybiBjb2xvcldpdGhBbHBoYVVz
aW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7Ci19Ci0KIENvbG9yIENvbG9yOjpjb2xv
cldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQog
ICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmNvbG9yV2l0aEFscGhhKGFscGhhKTsKIAotICAg
IC8vIEZJWE1FOiBUaGlzIGlzIHdoZXJlIHRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIGNvbG9y
V2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nLgotICAgIHVpbnQ4X3QgbmV3QWxwaGEg
PSBhbHBoYSAqIDB4RkY7CisgICAgQ29sb3IgcmVzdWx0ID0gYXNTaW1wbGUoKS5jb2xvcldpdGhB
bHBoYShjb252ZXJ0VG9Db21wb25lbnRCeXRlKGFscGhhKSk7CiAKLSAgICBDb2xvciByZXN1bHQg
PSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsKLSAgICBpZiAoaXNTZW1hbnRp
YygpKQotICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLUNvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGlu
ZyhmbG9hdCBhbHBoYSkgY29uc3QKLXsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICBy
ZXR1cm4gYXNFeHRlbmRlZCgpLmNvbG9yV2l0aEFscGhhKGFscGhhKTsKLQotICAgIC8vIEZJWE1F
OiBUaGlzIGlzIHdoZXJlIHRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIGNvbG9yV2l0aEFscGhh
VXNpbmcuCi0gICAgdWludDhfdCBuZXdBbHBoYSA9IHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hh
bm5lbChhbHBoYSk7Ci0KLSAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFs
cGhhKG5ld0FscGhhKTsKKyAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZpbmcgdGhlIHNlbWFu
dGljIGJpdCBkZXNpcmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/CiAgICAgaWYgKGlzU2VtYW50aWMo
KSkKICAgICAgICAgcmVzdWx0LnRhZ0FzU2VtYW50aWMoKTsKICAgICByZXR1cm4gcmVzdWx0OwpA
QCAtMjc5LDcgKzIzNyw3IEBAIENvbG9yIENvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFscGhhKGZs
b2EKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgp
LmludmVydGVkQ29sb3JXaXRoQWxwaGEoYWxwaGEpOwotICAgIHJldHVybiBhc1NpbXBsZSgpLmlu
dmVydGVkQ29sb3JXaXRoQWxwaGEoc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGFscGhh
KSk7CisgICAgcmV0dXJuIGFzU2ltcGxlKCkuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShjb252ZXJ0
VG9Db21wb25lbnRCeXRlKGFscGhhKSk7CiB9CiAKIENvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9y
KCkgY29uc3QKQEAgLTMwMCw3ICsyNTgsNyBAQCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JD
b21wb25lbnRzPGZsCiBTaW1wbGVDb2xvciBDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3ko
KSBjb25zdAogewogICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBtYWtlU2lt
cGxlQ29sb3IodG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VT
aW1wbGVDb2xvcihhc0V4dGVuZGVkKCkudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKICAgICBy
ZXR1cm4gYXNTaW1wbGUoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyArMTIyLDcgQEAgcHVi
bGljOgogICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBh
c0V4dGVuZGVkKCkuYWxwaGEoKSA9PSAxLjAgOiBhc1NpbXBsZSgpLmlzT3BhcXVlKCk7IH0KICAg
ICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5k
ZWQoKS5hbHBoYSgpID4gMC4wIDogYXNTaW1wbGUoKS5pc1Zpc2libGUoKTsgfQogCi0gICAgaW50
IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhh
KCkgKiAyNTUgOiBhc1NpbXBsZSgpLmFscGhhQ29tcG9uZW50KCk7IH0KKyAgICB1aW50OF90IGFs
cGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gY29udmVydFRvQ29tcG9uZW50Qnl0
ZShhc0V4dGVuZGVkKCkuYWxwaGEoKSkgOiBhc1NpbXBsZSgpLmFscGhhQ29tcG9uZW50KCk7IH0K
ICAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBh
c0V4dGVuZGVkKCkuYWxwaGEoKSA6IGFzU2ltcGxlKCkuYWxwaGFDb21wb25lbnRBc0Zsb2F0KCk7
IH0KIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKQEAgLTE0NSwxOCArMTQ1LDE3IEBAIHB1
YmxpYzoKICAgICBDb2xvciBibGVuZChjb25zdCBDb2xvciYpIGNvbnN0OwogICAgIENvbG9yIGJs
ZW5kV2l0aFdoaXRlKCkgY29uc3Q7CiAKKyAgICBDb2xvciBpbnZlcnRlZENvbG9yV2l0aEFscGhh
KE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3Q7CiAgICAgQ29sb3IgaW52ZXJ0ZWRDb2xvcldp
dGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3Q7CiAKKyAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11
bHRpcGxpZWRCeShPcHRpb25hbDxmbG9hdD4pIGNvbnN0OwogICAgIENvbG9yIGNvbG9yV2l0aEFs
cGhhTXVsdGlwbGllZEJ5KGZsb2F0KSBjb25zdDsKLSAgICBDb2xvciBjb2xvcldpdGhBbHBoYShm
bG9hdCkgY29uc3Q7CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBuZWVkIGZvciBBbHRlcm5h
dGl2ZVJvdW5kaW5nIHZhcmlhbnRzIGJ5IHNldHRsaW5nIG9uIGEgcm91bmRpbmcgYmVoYXZpb3Iu
Ci0gICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91
bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+KSBjb25zdDsKLSAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11
bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhmbG9hdCkgY29uc3Q7Ci0gICAgQ29s
b3IgY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+
KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBjb2xvcldpdGhBbHBoYVVzaW5nQWx0
ZXJuYXRpdmVSb3VuZGluZyhmbG9hdCkgY29uc3Q7CisgICAgQ29sb3IgY29sb3JXaXRoQWxwaGEo
T3B0aW9uYWw8ZmxvYXQ+KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBjb2xvcldp
dGhBbHBoYShmbG9hdCkgY29uc3Q7CiAKICAgICBDb2xvciBvcGFxdWVDb2xvcigpIGNvbnN0IHsg
cmV0dXJuIGNvbG9yV2l0aEFscGhhKDEuMGYpOyB9CisKICAgICBDb2xvciBzZW1hbnRpY0NvbG9y
KCkgY29uc3Q7CiAKICAgICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5hdGVkIGZyb20gYSBD
U1Mgc2VtYW50aWMgY29sb3IgbmFtZS4KQEAgLTI4OSwxNCArMjg4LDI0IEBAIGlubGluZSB1bnNp
Z25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiAgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2NvbG9y
RGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzKTsKIH0KIAotaW5saW5lIENvbG9yIENvbG9yOjpjb2xv
cldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxm
bG9hdD4gYWxwaGEpIGNvbnN0CitpbmxpbmUgQ29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRo
QWxwaGEoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdAoreworICAgIHJldHVybiBhbHBoYSA/
IGludmVydGVkQ29sb3JXaXRoQWxwaGEoYWxwaGEudmFsdWUoKSkgOiAqdGhpczsKK30KKworaW5s
aW5lIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9hdCBhbW91bnQp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbG9yV2l0aEFscGhhKGFtb3VudCAqIGFscGhhQXNGbG9h
dCgpKTsKK30KKworaW5saW5lIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRC
eShPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFscGhhID8gY29s
b3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoYWxwaGEudmFs
dWUoKSkgOiAqdGhpczsKKyAgICByZXR1cm4gYWxwaGEgPyBjb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeShhbHBoYS52YWx1ZSgpKSA6ICp0aGlzOwogfQogCi1pbmxpbmUgQ29sb3IgQ29sb3I6OmNv
bG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKE9wdGlvbmFsPGZsb2F0PiBhbHBo
YSkgY29uc3QKK2lubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoT3B0aW9uYWw8Zmxv
YXQ+IGFscGhhKSBjb25zdAogewotICAgIHJldHVybiBhbHBoYSA/IGNvbG9yV2l0aEFscGhhVXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGFscGhhLnZhbHVlKCkpIDogKnRoaXM7CisgICAgcmV0dXJu
IGFscGhhID8gY29sb3JXaXRoQWxwaGEoYWxwaGEudmFsdWUoKSkgOiAqdGhpczsKIH0KIAogaW5s
aW5lIGNvbnN0IEV4dGVuZGVkQ29sb3ImIENvbG9yOjphc0V4dGVuZGVkKCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGll
cy5jcHAJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTQgKzMxLDYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIGFyZUVzc2VudGlhbGx5RXF1YWwoY29uc3Qg
Q29sb3JDb21wb25lbnRzPGZsb2F0PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYg
YikKLXsKLSAgICByZXR1cm4gV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFbMF0sIGJbMF0pCi0g
ICAgICAgICYmIFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhWzFdLCBiWzFdKQotICAgICAgICAm
JiBXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYVsyXSwgYlsyXSkKLSAgICAgICAgJiYgV1RGOjph
cmVFc3NlbnRpYWxseUVxdWFsKGFbM10sIGJbM10pOwotfQotCiAvLyBUaGVzZSBhcmUgdGhlIHN0
YW5kYXJkIHNSR0IgPC0+IGxpbmVhclJHQiBjb252ZXJzaW9uIGZ1bmN0aW9ucyAoaHR0cHM6Ly9l
bi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQikuCiBmbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9u
ZW50KGZsb2F0IGMpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvclV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDIxICs1MSwxOSBAQCBmbG9hdCBjb250cmFzdFJhdGlvKGNvbnN0IENvbG9yQ29tcG9uZW50
CiAKIENvbG9yQ29tcG9uZW50czxmbG9hdD4gcHJlbXVsdGlwbGllZChjb25zdCBDb2xvckNvbXBv
bmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9udGVudHMpOwogCi1ib29sIGFyZUVzc2VudGlhbGx5RXF1
YWwoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYsIGNvbnN0IENvbG9yQ29tcG9uZW50czxm
bG9hdD4mKTsKLQotaW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChpbnQg
dmFsdWUpCitpbmxpbmUgdWludDhfdCBjb252ZXJ0UHJlc2NhbGVkVG9Db21wb25lbnRCeXRlKGZs
b2F0IGYpCiB7Ci0gICAgcmV0dXJuIHN0ZDo6Y2xhbXAodmFsdWUsIDAsIDI1NSk7CisgICAgcmV0
dXJuIHN0ZDo6Y2xhbXAoc3RhdGljX2Nhc3Q8aW50PihzdGQ6Omxyb3VuZGYoZikpLCAwLCAyNTUp
OwogfQogCi1pbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGZsb2F0IHZh
bHVlKQoraW5saW5lIHVpbnQ4X3QgY29udmVydFRvQ29tcG9uZW50Qnl0ZShmbG9hdCBmKQogewot
ICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6cm91bmQodmFsdWUpLCAwLmYsIDI1NS5mKTsKKyAg
ICByZXR1cm4gc3RkOjpjbGFtcChzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6bHJvdW5kZihmICogMjU1
LjBmKSksIDAsIDI1NSk7CiB9CiAKLWlubGluZSB1aW50OF90IHNjYWxlUm91bmRBbmRDbGFtcENv
bG9yQ2hhbm5lbChmbG9hdCBmKQorY29uc3RleHByIGZsb2F0IGNvbnZlcnRUb0NvbXBvbmVudEZs
b2F0KHVpbnQ4X3QgYnl0ZSkKIHsKLSAgICByZXR1cm4gc3RkOjpjbGFtcChzdGF0aWNfY2FzdDxp
bnQ+KGxyb3VuZGYoMjU1LjBmICogZikpLCAwLCAyNTUpOworICAgIHJldHVybiBieXRlIC8gMjU1
LjBmOwogfQogCiBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2X3Qg
dmFsdWUpCkBAIC04Miw1ICs4MCw0IEBAIGNvbnN0ZXhwciB1aW50MTZfdCBmYXN0RGl2aWRlQnky
NTUodWludDEKICAgICByZXR1cm4gYXBwcm94aW1hdGlvbiArIChyZW1haW5kZXIgPj4gOCk7CiB9
CiAKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAkocmV2aXNpb24gMjYyNjU5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NywzNCArNjcsMTMgQEAgU2ltcGxlQ29sb3IgbWFrZVVucHJlbXVsdGlwbGll
ZFNpbXBsZUNvbAogICAgIHJldHVybiBwaXhlbENvbG9yOwogfQogCi1TaW1wbGVDb2xvciBtYWtl
U2ltcGxlQ29sb3JGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEp
Ci17Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAgc2NhbGVSb3VuZEFuZENs
YW1wQ29sb3JDaGFubmVsKHIpLAotICAgICAgICBzY2FsZVJvdW5kQW5kQ2xhbXBDb2xvckNoYW5u
ZWwoZyksCi0gICAgICAgIHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChiKSwKLSAgICAg
ICAgc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGEpCi0gICAgKTsKLX0KLQotU2ltcGxl
Q29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoZmxvYXQgaHVlLCBmbG9hdCBzYXR1cmF0aW9u
LCBmbG9hdCBsaWdodG5lc3MsIGZsb2F0IGFscGhhKQotewotICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pOwotICAg
IHJldHVybiBtYWtlU2ltcGxlQ29sb3IoCi0gICAgICAgIHJvdW5kKHIgKiAyNTUuMGYpLAotICAg
ICAgICByb3VuZChnICogMjU1LjBmKSwKLSAgICAgICAgcm91bmQoYiAqIDI1NS4wZiksCi0gICAg
ICAgIHJvdW5kKGEgKiAyNTUuMGYpCi0gICAgKTsKLX0KLQogU2ltcGxlQ29sb3IgbWFrZVNpbXBs
ZUNvbG9yRnJvbUNNWUtBKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0
IGEpCiB7Ci0gICAgZG91YmxlIGNvbG9ycyA9IDEgLSBrOwotICAgIGludCByID0gc3RhdGljX2Nh
c3Q8aW50PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIChjb2xvcnMgKiAoMSAtIGMpKSk7Ci0gICAgaW50
IGcgPSBzdGF0aWNfY2FzdDxpbnQ+KG5leHRhZnRlcigyNTYsIDApICogKGNvbG9ycyAqICgxIC0g
bSkpKTsKLSAgICBpbnQgYiA9IHN0YXRpY19jYXN0PGludD4obmV4dGFmdGVyKDI1NiwgMCkgKiAo
Y29sb3JzICogKDEgLSB5KSkpOwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG5leHRhZnRlcigyNTYsIDApICogYSkpOworICAgIGZsb2F0IGNv
bG9ycyA9IDEgLSBrOworICAgIGZsb2F0IHIgPSBjb2xvcnMgKiAoMS4wZiAtIGMpOworICAgIGZs
b2F0IGcgPSBjb2xvcnMgKiAoMS4wZiAtIG0pOworICAgIGZsb2F0IGIgPSBjb2xvcnMgKiAoMS4w
ZiAtIHkpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKHIsIGcsIGIsIGEp
OwogfQogCiBTdHJpbmcgU2ltcGxlQ29sb3I6OnNlcmlhbGl6YXRpb25Gb3JIVE1MKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3Iu
aAkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2ltcGxlQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAg
ICAgY29uc3RleHByIHVpbnQ4X3QgYmx1ZUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWU7IH0KICAgICBjb25zdGV4cHIgdWludDhfdCBhbHBoYUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWUgPj4gMjQ7IH0KIAotICAgIGNvbnN0ZXhwciBmbG9hdCBhbHBoYUNvbXBvbmVu
dEFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGFDb21wb25l
bnQoKSkgLyAweEZGOyB9CisgICAgY29uc3RleHByIGZsb2F0IGFscGhhQ29tcG9uZW50QXNGbG9h
dCgpIGNvbnN0IHsgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGFscGhhQ29tcG9uZW50
KCkpOyB9CiAKICAgICBjb25zdGV4cHIgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGFs
cGhhQ29tcG9uZW50KCkgPT0gMHhGRjsgfQogICAgIGNvbnN0ZXhwciBib29sIGlzVmlzaWJsZSgp
IGNvbnN0IHsgcmV0dXJuIGFscGhhQ29tcG9uZW50KCk7IH0KQEAgLTY3LDcgKzY3LDcgQEAgcHVi
bGljOgogCiAgICAgY29uc3RleHByIENvbG9yQ29tcG9uZW50czxmbG9hdD4gYXNTUkdCRmxvYXRD
b21wb25lbnRzKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiB7IHJlZENvbXBvbmVudCgp
IC8gMjU1LjBmLCBncmVlbkNvbXBvbmVudCgpIC8gMjU1LjBmLCBibHVlQ29tcG9uZW50KCkgLyAy
NTUuMGYsICBhbHBoYUNvbXBvbmVudCgpIC8gMjU1LjBmIH07CisgICAgICAgIHJldHVybiB7IGNv
bnZlcnRUb0NvbXBvbmVudEZsb2F0KHJlZENvbXBvbmVudCgpKSwgY29udmVydFRvQ29tcG9uZW50
RmxvYXQoZ3JlZW5Db21wb25lbnQoKSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGJsdWVDb21w
b25lbnQoKSksICBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChhbHBoYUNvbXBvbmVudCgpKSB9Owog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+CkBAIC05NSwxNiArOTUsMTQgQEAg
Y29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbgogY29uc3RleHByIFNpbXBs
ZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CiAKIFNp
bXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBz
UkdCQ29tcG9uZW50cyk7CitTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGZs
b2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpOworU2ltcGxlQ29sb3IgbWFrZVNpbXBs
ZUNvbG9yRnJvbUNNWUtBKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0
IGEpOwogCiBTaW1wbGVDb2xvciBtYWtlUHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKGludCByLCBp
bnQgZywgaW50IGIsIGludCBhLCBib29sIGNlaWxpbmcgPSB0cnVlKTsKIFNpbXBsZUNvbG9yIG1h
a2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoU2ltcGxlQ29sb3IpOwogU2ltcGxlQ29sb3IgbWFr
ZVVucHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsK
IFNpbXBsZUNvbG9yIG1ha2VVbnByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihTaW1wbGVDb2xvcik7
CiAKLVdFQkNPUkVfRVhQT1JUIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMo
ZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7Ci1XRUJDT1JFX0VYUE9SVCBTaW1w
bGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShmbG9hdCBoLCBmbG9hdCBzLCBmbG9hdCBs
LCBmbG9hdCBhKTsKLVNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21DTVlLQShmbG9hdCBj
LCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKTsKLQogaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQogewogICAgIHJldHVybiBhLnZh
bHVlKCkgPT0gYi52YWx1ZSgpOwpAQCAtMTE3LDcgKzExNSw3IEBAIGlubGluZSBib29sIG9wZXJh
dG9yIT0oU2ltcGxlQ29sb3IgYSwgU2kKIAogY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1w
bGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiKQogewotICAgIHJldHVybiBtYWtlU2ltcGxlQ29s
b3IociwgZywgYiwgMHhGRik7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhfdD4oc3Rk
OjpjbGFtcChyLCAwLCAweEZGKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xhbXAoZywg
MCwgMHhGRikpLCBzdGF0aWNfY2FzdDx1aW50OF90PihzdGQ6OmNsYW1wKGIsIDAsIDB4RkYpKSwg
MHhGRiB9OwogfQogCiBjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGludCBy
LCBpbnQgZywgaW50IGIsIGludCBhKQpAQCAtMTI4LDEyICsxMjYsMTIgQEAgY29uc3RleHByIFNp
bXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbgogaW5saW5lIFNpbXBsZUNvbG9yIG1ha2VTaW1w
bGVDb2xvcihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9uZW50cykKIHsK
ICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHNSR0JDb21wb25lbnRzOwotICAgIHJldHVybiBtYWtl
U2ltcGxlQ29sb3IoCi0gICAgICAgIHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChyKSwK
LSAgICAgICAgc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGcpLAotICAgICAgICBzY2Fs
ZVJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoYiksCi0gICAgICAgIHNjYWxlUm91bmRBbmRDbGFt
cENvbG9yQ2hhbm5lbChhKQotICAgICk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21G
bG9hdHMociwgZywgYiwgYSk7Cit9CisKK2lubGluZSBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29s
b3JGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCit7CisgICAg
cmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50Qnl0ZShyKSwgY29udmVydFRvQ29tcG9uZW50Qnl0
ZShnKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShiKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShh
KSB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcg
QEAgc3RhdGljIHZvaWQgcHJlcGFyZUNhaXJvQ29udGV4dFNvdXJjZShjYQogICAgIH0gZWxzZSB7
CiAgICAgICAgIC8vIFNvbGlkIGNvbG9yIHNvdXJjZQogICAgICAgICBpZiAoZ2xvYmFsQWxwaGEg
PCAxKQotICAgICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgY29sb3IuY29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZ2xvYmFsQWxwaGEp
KTsKKyAgICAgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIGNvbG9yLmNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5KGdsb2JhbEFscGhhKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIGNvbG9yKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkocmV2aXNp
b24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JD
Ry5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDggKzc4LDcgQEAgc3RhdGljIFNpbXBsZUNvbG9y
IG1ha2VTaW1wbGVDb2xvckZyb21DRwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyKDI1
Ni4wLCAwLjApOwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IociAqIHNjYWxlRmFjdG9yLCBn
ICogc2NhbGVGYWN0b3IsIGIgKiBzY2FsZUZhY3RvciwgYSAqIHNjYWxlRmFjdG9yKTsKKyAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKTsKIH0KIAogQ29sb3I6
OkNvbG9yKENHQ29sb3JSZWYgY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAJKHJldmlzaW9uIDI2MjY1OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBGRUZsb29kOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGF1dG8gY29sb3IgPSBmbG9vZENvbG9yKCkuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlV
c2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvb2RPcGFjaXR5KCkpOworICAgIGF1dG8gY29sb3Ig
PSBmbG9vZENvbG9yKCkuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxvb2RPcGFjaXR5KCkp
OwogICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBjb2xvcik7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0JKHJl
dmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9D
b2xvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtODgsOCArODgsNyBAQCBzdGF0aWMgU2ltcGxl
Q29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbU5TCiAgICAgW3JnYkNvbG9yIGdldFJlZDomcmVkQ29t
cG9uZW50IGdyZWVuOiZncmVlbkNvbXBvbmVudCBibHVlOiZibHVlQ29tcG9uZW50IGFscGhhOiZh
bHBoYV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIHN0YXRpYyBjb25z
dCBkb3VibGUgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXIoMjU2LjAsIDAuMCk7Ci0gICAgcmV0dXJu
IG1ha2VTaW1wbGVDb2xvcihzY2FsZUZhY3RvciAqIHJlZENvbXBvbmVudCwgc2NhbGVGYWN0b3Ig
KiBncmVlbkNvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBibHVlQ29tcG9uZW50LCBzY2FsZUZhY3Rv
ciAqIGFscGhhKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyZWRDb21w
b25lbnQsIGdyZWVuQ29tcG9uZW50LCBibHVlQ29tcG9uZW50LCBhbHBoYSk7CiB9CiAKIENvbG9y
IGNvbG9yRnJvbU5TQ29sb3IoTlNDb2xvciAqY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvQ29sb3JJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL0NvbG9ySU9TLm1tCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvQ29sb3JJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDcg
QEAgQ29sb3IgY29sb3JGcm9tVUlDb2xvcihVSUNvbG9yICpjb2xvcikKIAogICAgIFtjb2xvciBn
ZXRSZWQ6JnJlZENvbXBvbmVudCBncmVlbjomZ3JlZW5Db21wb25lbnQgYmx1ZTomYmx1ZUNvbXBv
bmVudCBhbHBoYTomYWxwaGFdOwogCi0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBzY2FsZUZhY3Rv
ciA9IG5leHRhZnRlcigyNTYuMCwgMC4wKTsKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHNj
YWxlRmFjdG9yICogcmVkQ29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGdyZWVuQ29tcG9uZW50LCBz
Y2FsZUZhY3RvciAqIGJsdWVDb21wb25lbnQsIHNjYWxlRmFjdG9yICogYWxwaGEpOworICAgIHJl
dHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKHJlZENvbXBvbmVudCwgZ3JlZW5Db21wb25l
bnQsIGJsdWVDb21wb25lbnQsIGFscGhhKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjI2NTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05NCw3ICs5NCw3IEBAIENvbG9yIFNWR1N0b3BFbGVtZW50OjpzdG9wQ29sb3JJbmNsdWRp
bmcKICAgICBhdXRvJiBzdmdTdHlsZSA9IHN0eWxlLnN2Z1N0eWxlKCk7CiAgICAgYXV0byBzdG9w
Q29sb3IgPSBzdHlsZS5jb2xvclJlc29sdmluZ0N1cnJlbnRDb2xvcihzdmdTdHlsZS5zdG9wQ29s
b3IoKSk7CiAKLSAgICByZXR1cm4gc3RvcENvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKHN2Z1N0eWxlLnN0b3BPcGFjaXR5KCkpOworICAgIHJl
dHVybiBzdG9wQ29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoc3ZnU3R5bGUuc3RvcE9w
YWNpdHkoKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NW
R0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rp
b25JbXBsLmgJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0
aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE0LDYgKzExNCwxNiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgorICAgIGlu
bGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoaW50IHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6Y2xhbXAodmFsdWUsIDAsIDI1NSk7CisgICAgfQorCisgICAg
aW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChmbG9hdCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6cm91bmRmKHZhbHVlKSwgMC4wZiwg
MjU1LjBmKTsKKyAgICB9CisKICAgICB2b2lkIGFkZEZyb21BbmRUb1ZhbHVlcyhTVkdFbGVtZW50
Kikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1fZnJvbS50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpOwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjY5MCkKKysr
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMjAtMDYtMDYgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEV4
dGVuZGVkIENvbG9yOiBVbmlmeSByb3VuZGluZyAvIGNsYW1waW5nIGNvbnZlcnNpb25zIGJldHdl
ZW4gMC0xIGZsb2F0IGNvbXBvbmVudHMgYW5kIDAtMjU1IGJ5dGUgY29tcG9uZW50cworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyODcxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2lvcy9XS1dlYlZpZXdJT1MubW06CisgICAgICAgIChzY3JvbGxWaWV3QmFja2dyb3VuZENvbG9y
KToKKyAgICAgICAgUmVwbGFjZXMgdXNlcyBvZiBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRp
dmVSb3VuZGluZygpIHdpdGggY29sb3JXaXRoQWxwaGEoKS4KKwogMjAyMC0wNi0wNiAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVhciBXZWJQYWdl
UHJveHkgZXZlbnQgc3RhdGUgYmV0d2VlbiB0ZXN0cwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MubW0JKHJldmlzaW9uIDI2MjY1OSkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC01MTMsNyArNTEzLDcgQEAgc3RhdGljIFdlYkNvcmU6OkNvbG9yIHNjcm9sbFZp
ZXdCYWNrZ3JvdQogICAgIGlmICh6b29tU2NhbGUgPCBtaW5pbXVtWm9vbVNjYWxlKSB7CiAgICAg
ICAgIENHRmxvYXQgc2xvcGUgPSAxMjsKICAgICAgICAgQ0dGbG9hdCBvcGFjaXR5ID0gc3RkOjpt
YXg8Q0dGbG9hdD4oMSAtIHNsb3BlICogKG1pbmltdW1ab29tU2NhbGUgLSB6b29tU2NhbGUpLCAw
KTsKLSAgICAgICAgY29sb3IgPSBjb2xvci5jb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVS
b3VuZGluZyhvcGFjaXR5KTsKKyAgICAgICAgY29sb3IgPSBjb2xvci5jb2xvcldpdGhBbHBoYShv
cGFjaXR5KTsKICAgICB9CiAKICAgICByZXR1cm4gY29sb3I7CkluZGV4OiBUb29scy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjI2OTApCisrKyBU
b29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAyMC0wNi0w
NiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29s
b3I6IFVuaWZ5IHJvdW5kaW5nIC8gY2xhbXBpbmcgY29udmVyc2lvbnMgYmV0d2VlbiAwLTEgZmxv
YXQgY29tcG9uZW50cyBhbmQgMC0yNTUgYnl0ZSBjb21wb25lbnRzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI4NzEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9Db2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAg
ICAgICBTd2l0Y2ggdG8gdXNpbmcgbWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQiguLi4pKSBkaXJl
Y3RseS4KKwogMjAyMC0wNi0wNiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNv
bT4KIAogICAgICAgICBDbGVhciBXZWJQYWdlUHJveHkgZXZlbnQgc3RhdGUgYmV0d2VlbiB0ZXN0
cwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRl
c3RzLmNwcAkocmV2aXNpb24gMjYyNjU5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0NvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIFRF
U1QoQ29sb3IsIFJHQlRvSFNMX1doaXRlKQogICAgIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xv
ci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKICAgICAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENv
bG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdo
dG5lc3MsIGFscGhhKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VT
aW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEg
fSkpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAt
NjEsNyArNjEsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbGFjaykKIAogICAgIEVYUEVDVF9G
TE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRU
cmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShodWUsIHNhdHVyYXRp
b24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29s
b3IobWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNz
LCBhbHBoYSB9KSkpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwog
fQogCkBAIC03Nyw3ICs3Nyw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1JlZCkKIAogICAgIEVY
UEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKIAotICAgIGF1dG8g
cm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShodWUsIHNh
dHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9y
ID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGln
aHRuZXNzLCBhbHBoYSB9KSkpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29s
b3IpOwogfQogCkBAIC05Myw3ICs5Myw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyZWVuKQog
CiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOwogCi0g
ICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21IU0xB
KGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOworICAgIGF1dG8gcm91bmRUcmlw
cGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0
aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRy
aXBwZWRDb2xvcik7CiB9CiAKQEAgLTEwOSw3ICsxMDksNyBAQCBURVNUKENvbG9yLCBSR0JUb0hT
TF9CbHVlKQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5l
c3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xv
ckZyb21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOworICAgIGF1dG8g
cm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVl
LCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9y
LCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQCBURVNUKENvbG9y
LCBSR0JUb0hTTF9EYXJrR3JheSkKICAgICAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGln
aHRuZXNzKCksIGxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29s
b3IobWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFs
cGhhKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xv
cihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSkpKTsKICAg
ICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTQxLDcgKzE0
MSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyYXkpCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEo
Y29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENv
bG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdo
dG5lc3MsIGFscGhhKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VT
aW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEg
fSkpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAt
MTU3LDcgKzE1Nyw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0xpZ2h0R3JheSkKIAogICAgIEVY
UEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKIAotICAgIGF1dG8g
cm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShodWUsIHNh
dHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9y
ID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGln
aHRuZXNzLCBhbHBoYSB9KSkpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29s
b3IpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401281</attachid>
            <date>2020-06-06 16:09:18 -0700</date>
            <delta_ts>2020-06-08 12:37:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212871-20200606160918.patch</filename>
            <type>text/plain</type>
            <size>42797</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0OSBAQAorMjAyMC0wNi0wNiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IFVuaWZ5
IHJvdW5kaW5nIC8gY2xhbXBpbmcgY29udmVyc2lvbnMgYmV0d2VlbiAwLTEgZmxvYXQgY29tcG9u
ZW50cyBhbmQgMC0yNTUgYnl0ZSBjb21wb25lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI4NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFVuaWZ5IGFsbCBjb252ZXJzaW9ucyBvZiAw
LjBmIC0gMS4wZiBmbG9hdCBiYXNlZCBjb2xvciBjb21wb25lbnRzIHRvIDAtMjU1IGludCBiYXNl
ZCBjb2xvciBjb21wb25lbnRzCisgICAgICAgIHRvIHVzZSB0aGUgbmV3IGNvbnZlcnRUb0NvbXBv
bmVudEJ5dGUoKSBmdW5jdGlvbiB3aGljaCBzY2FsZXMsIHJvdW5kcyAodXNpbmcgbHJvdW5kZikg
YW5kIGNsYW1wcyB0aGUKKyAgICAgICAgdmFsdWUuIEZvciBjb25zaXN0ZW5jeSwgYSBjb252ZXJ0
VG9Db21wb25lbnRGbG9hdCgpIGZ1bmN0aW9uLCB3aGljaCBqdXN0IHNjYWxlcyBkb3duIGFuIGlu
dCBiYXNlZCB2YWx1ZQorICAgICAgICB0byBhIGZsb2F0IGJhc2VkIHZhbHVlLCBpcyBhbHNvIGFk
ZGVkLgorICAgICAgICAKKyAgICAgICAgLSBSZW1vdmVzICpVc2luZ0FsdGVybmF0aXZlUm91bmRp
bmcgdmFyaWFudHMgKGFjdHVhbGx5LCB3ZSBub3cgb25seSBoYXZlIHRoaXMgdmFyaWFudCkgZm9y
IGNvbG9yIGZ1bmN0aW9ucworICAgICAgICAgIHdoaWNoIGFsbG93ZWQgY2FsbGVycyB0byBwaWNr
IGZyb20gdHJ1bmNhdGlvbiB2cy4gcm91bmRpbmcgd2hlbiBvdmVycmlkaW5nIGFscGhhLgorICAg
ICAgICAtIFJlcGxhY2VzIGFsbCB1c2VzIG9mIHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5l
bCgpIHdpdGggY29udmVydFRvQ29tcG9uZW50Qnl0ZSgpIChyZWFsbHkganVzdCBhIHJlbmFtZSku
CisgICAgICAgIC0gUmVwbGFjZXMgdXNlcyBvZiBuZXh0YWZ0ZXIoMjU2LCAwKSBiYXNlZCBjb252
ZXJzaW9ucyB3aXRoIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoKS4KKyAgICAgICAgCisgICAgICAg
IEFsc286CisgICAgICAgIC0gTW92ZXMgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbCgpIGZ1bmN0
aW9ucyB0byBTVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgsIHdoaWNoIHdh
cworICAgICAgICAgIHRoZSBvbmx5IHBsYWNlcyB0aGV5IHdlcmUgdXNlZC4KKyAgICAgICAgLSBS
ZW1vdmVzIGFyZUVzc2VudGlhbGx5RXF1YWwoKSBvdmVybG9hZCB0YWtpbmcgQ29sb3JDb21wb25l
bnRzPGZsb2F0Pi4gSXQgd2FzIHVudW5zZWQuCisgICAgICAgIC0gUmVtb3ZlcyBtYWtlU2ltcGxl
Q29sb3JGcm9tSFNMQSguLi4pIGFuZCBqdXN0IGlubGluZXMgbWFrZVNpbXBsZUNvbG9yKGhzbFRv
U1JHQiguLi4pKSB3aGljaCBub3cKKyAgICAgICAgICBkb2VzIHRoZSBzYW1lIHRoaW5nLgorCisg
ICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjbGFtcFJHQkNvbXBvbmVudCk6
CisgICAgICAgIFVzZSBjb252ZXJ0UHJlc2NhbGVkVG9Db21wb25lbnRCeXRlKCkgdG8gcm91bmQg
YW5kIGNsYW1wIHRoZSBjb21wb25lbnRzLgorCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OnBhcnNlUkdCUGFyYW1ldGVycyk6CisgICAgICAgIFVzZSB1aW50OF90
IG1vcmUgY29uc2lzdGVudGx5IG5vdyB0aGF0IGhlbHBlcnMgZW5zdXJlIHRoYXQgaXMgdGhlIHJl
dHVybiB0eXBlCisgICAgICAgIG9mIGNvbnZlcnNpb24gZnVuY3Rpb25zLgorCisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlSFNMUGFyYW1ldGVycyk6Cisg
ICAgICAgIFN3aXRjaCB0byB1c2luZyBtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKC4uLikpIGRp
cmVjdGx5LgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UpOgorICAg
ICAgICBTd2l0Y2ggdG8gdXNpbmcgbWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQiguLi4pKSBkaXJl
Y3RseS4KKworICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VMZWdhY3lDb2xvclZhbHVlKToKKyAgICAgICAgVXNlIHVpbnQ4X3Qgc2luY2UgdGhh
dCBpcyB3aGF0IHRvQVNDSUlIZXhWYWx1ZSgpIHJldHVybnMuCisKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFN0cm9rZVN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEZpbGxTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3cp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1N0eWxlOjpjcmVhdGVGcm9tU3RyaW5nV2l0aE92ZXJyaWRlQWxwaGEpOgorICAg
ICAgICBSZXBsYWNlcyB1c2VzIG9mIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5k
aW5nKCkgd2l0aCBjb2xvcldpdGhBbHBoYSgpLgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNvbG9yKToK
KyAgICAgICAgVXNlIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoKSByYXRoZXIgdGhhbiBhIHNpbXBs
ZSB0cnVuY2F0aW5nIGNhc3QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6bGlnaHQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6OmRhcmsgY29uc3QpOgorICAgICAgICBVc2UgbWFrZVNpbXBsZUNvbG9yRnJv
bUZsb2F0cygpIHJhdGhlciB0aGFuIG5leHRhZnRlcmYoMjU2LjBmLCAwLjBmKSBjb252ZXJzaW9u
LgorCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEgY29uc3QpOgorICAg
ICAgICBVc2UgY29udmVydFRvQ29tcG9uZW50Qnl0ZSgpIGZvciBhbHBoYSBjb252ZXJzaW9uLgor
ICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSBjb25zdCk6CisgICAgICAgIENhbGwgYXNFeHRlbmRlZCgpLnRvU1JHQkFDb21wb25lbnRzTG9z
c3koKSBkaXJlY3RseSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBicmFuY2guCisgICAgICAgIAorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICBSZW1vdmUgVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIHZh
cmlhbnRzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjphbHBoYSBjb25zdCk6CisgICAgICAgIFVzZSBjb252ZXJ0VG9Db21w
b25lbnRCeXRlKCkgZm9yIGFscGhhIGNvbnZlcnNpb24uCisKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjppbnZlcnRlZENvbG9yV2l0aEFscGhhIGNvbnN0KToKKyAgICAgICAgQWRkIGFuIG92ZXJs
b2FkIHRha2luZyBhbiBPcHRpb25hbDxmbG9hdD4gZm9yIGNvbnNpc3RlbmN5LgorCisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhIGNvbnN0KToKKyAgICAgICAgU2lt
cGxpZnkgYnkgaW5saW5pbmcgYWxsIHZhcmlhbnRzIGV4Y2VwdCB0aGUgbWFpbiBjb2xvcldpdGhB
bHBoYSgpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6YXJlRXNzZW50aWFsbHlFcXVhbCk6IERlbGV0ZWQuCisgICAg
ICAgIFJlbW92ZSB1bnVzZWQgZnVuY3Rpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFByZXNjYWxlZFRv
Q29tcG9uZW50Qnl0ZSk6CisgICAgICAgIEFkZGVkLiBVc2VmdWwgZm9yIGNhbGxlcnMgd2hvIGFs
cmVhZHkgaGF2ZSBwcmVzY2FsZWQgdmFsdWVzIGJ1dCBuZWVkIHJvdW5kaW5nL2NsYW1waW5nLgor
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9Db21wb25lbnRCeXRlKToKKyAgICAgICAgQWRk
ZWQuIEJvdHRsZW5lY2sgZm9yIGZsb2F0IHRvIGJ5dGUgYmFzZWQgY29sb3IgY29tcG9uZW50IGNv
bnZlcnNpb25zLgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ29tcG9uZW50RmxvYXQpOgor
ICAgICAgICBBZGRlZC4gQm90dGxlbmVjayBmb3IgYnl0ZSB0byBmbG9hdCBiYXNlZCBjb2xvciBj
b21wb25lbnQgY29udmVyc2lvbnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1w
bGVDb2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0Ep
OgorICAgICAgICBVc2UgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygpIHJhdGhlciB0aGFuIG5l
eHRhZnRlcmYoMjU2LjBmLCAwLjBmKSBjb252ZXJzaW9uLiBFdmVudHVhbGx5LAorICAgICAgICB3
aGVuIHdlIHByb2JhYmx5IHdhbnQgdGhpcyB0byBnbyBhd2F5IGFuZCBzdG9yZSBDTVlLQSBjb2xv
cnMgYXMgRXh0ZW5kZWRDb2xvcnMgd2l0aCB0aGVpciBvd24KKyAgICAgICAgY29sb3Igc3BhY2Uu
IAorCisgICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKTogCisgICAg
ICAgIE1vdmVkIHRvIGhlYWRlci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBs
ZUNvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6YWxwaGFDb21wb25lbnRB
c0Zsb2F0IGNvbnN0KToKKyAgICAgICAgVXNlIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KCkuCisK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjphc1NSR0JGbG9hdENvbXBvbmVudHMgY29u
c3QpOgorICAgICAgICBVc2UgY29udmVydFRvQ29tcG9uZW50RmxvYXQoKS4KKworICAgICAgICAo
V2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKToKKyAgICAgICAgQXZvaWQgdW5uY2Vzc2FyeSBjbGFt
cGluZyBvZiB0aGUgYWxwaGEgY29tcG9uZW50IGJ5IGNhbGxpbmcgY29uc3RydWN0b3IgZGlyZWN0
bHkuCisKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMpOgorICAg
ICAgICBJbmxpbmVkLiBDYWxscyBjb252ZXJ0VG9Db21wb25lbnRCeXRlIG5vdyByYXRoZXIgdGhh
biB0aGUgb2xkZXIgKGlkZW50aWNhbCkgc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKCku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OnByZXBhcmVDYWlyb0NvbnRleHRTb3VyY2UpOgor
ICAgICAgICBSZXBsYWNlcyB1c2Ugb2YgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0Fs
dGVybmF0aXZlUm91bmRpbmcgd2l0aCBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSgpLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xvcik6CisgICAgICAgIFVzZSBtYWtlU2ltcGxl
Q29sb3JGcm9tRmxvYXRzKCkgcmF0aGVyIHRoYW4gbmV4dGFmdGVyKDI1Ni4wLCAwLjApIGNvbnZl
cnNpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgUmVwbGFjZXMgdXNlIG9mIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRl
cm5hdGl2ZVJvdW5kaW5nIHdpdGggY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoKS4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VTaW1wbGVDb2xvckZyb21OU0NvbG9yKToKKyAgICAgICAgVXNlIG1ha2VTaW1wbGVD
b2xvckZyb21GbG9hdHMoKSByYXRoZXIgdGhhbiBuZXh0YWZ0ZXIoMjU2LjAsIDAuMCkgY29udmVy
c2lvbi4KKworICAgICAgICAqIHBsYXRmb3JtL2lvcy9Db2xvcklPUy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbG9yRnJvbVVJQ29sb3IpOgorICAgICAgICBVc2UgbWFrZVNpbXBsZUNvbG9yRnJv
bUZsb2F0cygpIHJhdGhlciB0aGFuIG5leHRhZnRlcigyNTYuMCwgMC4wKSBjb252ZXJzaW9uLgor
CisgICAgICAgICogc3ZnL1NWR1N0b3BFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1N0b3BFbGVtZW50OjpzdG9wQ29sb3JJbmNsdWRpbmdPcGFjaXR5IGNvbnN0KToKKyAgICAgICAg
UmVwbGFjZXMgdXNlIG9mIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2
ZVJvdW5kaW5nIHdpdGggY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoKS4KKworICAgICAgICAq
IHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkNvbG9yRnVuY3Rpb246OnJvdW5kQW5kQ2xh
bXBDb2xvckNoYW5uZWwpOgorICAgICAgICBNb3ZlZCBmcm9tIENvbG9yVXRpbGl0aWVzLmggYXMg
dGhpcyB3YXMgdGhlIG9ubHkgdXNlLgorCiAyMDIwLTA2LTA2ICBaYWxhbiBCdWp0YXMgIDx6YWxh
bkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10gQWRkIHN1cHBvcnQgZm9yIHdpZHRoOiBtaW4v
bWF4LWNvbnRlbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTE3LDEzICs1MTcsMTMgQEAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lVXJsKENTUwogICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZVZhbHVlKHVybC50b1N0cmluZygpLCBDU1NVbml0VHlwZTo6Q1NTX1VSSSk7CiB9CiAKLXN0YXRp
YyBpbnQgY2xhbXBSR0JDb21wb25lbnQoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQor
c3RhdGljIHVpbnQ4X3QgY2xhbXBSR0JDb21wb25lbnQoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUm
IHZhbHVlKQogewogICAgIGRvdWJsZSByZXN1bHQgPSB2YWx1ZS5kb3VibGVWYWx1ZSgpOwogICAg
IGlmICh2YWx1ZS5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0IC8gMTAw
LjAgKiAyNTUuMDsKIAotICAgIHJldHVybiBjbGFtcFRvPGludD4ocm91bmQocmVzdWx0KSwgMCwg
MjU1KTsKKyAgICByZXR1cm4gY29udmVydFByZXNjYWxlZFRvQ29tcG9uZW50Qnl0ZShyZXN1bHQp
OwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlKQpAQCAtNTUxLDcgKzU1MSw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJHQlBhcmFt
ZXRlcnMoQ1NTUGFyc2UKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfTsKIAotICAgIGludCBj
b2xvckFycmF5WzNdOworICAgIHVpbnQ4X3QgY29sb3JBcnJheVszXTsKICAgICBjb2xvckFycmF5
WzBdID0gY2xhbXBSR0JDb21wb25lbnQoKmNvbG9yUGFyYW1ldGVyKTsKICAgICBmb3IgKGludCBp
ID0gMTsgaSA8IDM7IGkrKykgewogICAgICAgICBpZiAoaSA9PSAxKQpAQCAtNTczLDcgKzU3Myw3
IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2UKICAgICAgICAgcmV0
dXJuIGNvbnN1bWVTbGFzaEluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7CiAgICAgfTsKIAotICAg
IGludCBhbHBoYUNvbXBvbmVudCA9IDI1NTsKKyAgICB1aW50OF90IGFscGhhQ29tcG9uZW50ID0g
MjU1OwogICAgIGlmIChjb25zdW1lQWxwaGFTZXBhcmF0b3IoKSkgewogICAgICAgICBkb3VibGUg
YWxwaGE7CiAgICAgICAgIGlmICghY29uc3VtZU51bWJlclJhdyhhcmdzLCBhbHBoYSkpIHsKQEAg
LTU4Miw5ICs1ODIsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNl
CiAgICAgICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAgICAgICAgICAgICBhbHBoYSA9IGFs
cGhhUGVyY2VudC0+ZG91YmxlVmFsdWUoKSAvIDEwMC4wOwogICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gVzMgc3RhbmRhcmQgc3RpcHVsYXRlcyBhIDIuNTUgYWxwaGEgdmFsdWUgbXVsdGlwbGljYXRp
b24gZmFjdG9yLgotICAgICAgICBhbHBoYUNvbXBvbmVudCA9IHN0YXRpY19jYXN0PGludD4obHJv
dW5kZihjbGFtcFRvPGRvdWJsZT4oYWxwaGEsIDAuMCwgMS4wKSAqIDI1NS4wZikpOworICAgICAg
ICBhbHBoYUNvbXBvbmVudCA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEpOwogICAgIH07
CiAKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKQEAgLTY0Miw3ICs2NDAsNyBAQCBzdGF0aWMgQ29s
b3IgcGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAg
ICAgICAgIHJldHVybiBDb2xvcigpOwogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21I
U0xBKHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGNvbG9yQXJyYXlbMV0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRp
Y19jYXN0PGZsb2F0PihhbHBoYSkpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoaHNsVG9T
UkdCKHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMF0pLCBzdGF0aWNfY2FzdDxmbG9h
dD4oY29sb3JBcnJheVsxXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzJdKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKSB9KSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9y
RnVuY3Rpb25QYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkocmV2aXNpb24g
MjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC02MjMsOSArNjIzLDkgQEAgTlNBcnJheSAqRGF0YURldGVjdGlv
bjo6ZGV0ZWN0Q29udGVudEluUgogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSB0
aGUgbGlnaHRuZXNzIG9mIHRoZSB1bmRlcmxpbmUgY29sb3IgdG8gdGhlIG1pZGRsZSwgYW5kIG11
bHRpcGx5IHRoZSBhbHBoYSBieSAzOCUsCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0
aGUgY29sb3Igd2lsbCBhcHBlYXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3VuZHMsIHNpbmNl
IG9ubHkgb25lIGNvbG9yIGNhbiBiZSBzcGVjaWZpZWQuCi0gICAgICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgb3ZlcnJpZGVMaWdodG5lc3MgPSAwLjU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgb3ZlcnJpZGVBbHBoYU11bHRpcGxpZXIgPSAwLjM4OwotICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0byB1bmRlcmxpbmVDb2xvciA9IG1ha2VTaW1wbGVDb2xvckZyb21IU0xBKGh1
ZSwgc2F0dXJhdGlvbiwgb3ZlcnJpZGVMaWdodG5lc3MsIG92ZXJyaWRlQWxwaGFNdWx0aXBsaWVy
ICogYWxwaGEpOworICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgb3ZlcnJpZGVMaWdodG5l
c3MgPSAwLjVmOworICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgb3ZlcnJpZGVBbHBoYU11
bHRpcGxpZXIgPSAwLjM4ZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdW5kZXJsaW5l
Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBvdmVy
cmlkZUxpZ2h0bmVzcywgb3ZlcnJpZGVBbHBoYU11bHRpcGxpZXIgKiBhbHBoYSB9KSk7CiAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlDb2xvciwgQ1NTVmFsdWVDdXJyZW50Y29sb3IpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVRleHREZWNvcmF0aW9uQ29sb3IsIHVuZGVybGluZUNvbG9yLnNlcmlhbGl6YXRpb25Gb3JD
U1MoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gMjYy
NjU5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNzMsOSArMTA3Myw5IEBAIHN0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gcGFy
c2VMZWdhY3kKICAgICBBU1NFUlQoYmx1ZUluZGV4ID49IGNvbXBvbmVudExlbmd0aCAqIDIpOwog
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGJsdWVJbmRleCArIDEgPCBkaWdp
dEJ1ZmZlci5zaXplKCkpOwogCi0gICAgaW50IHJlZFZhbHVlID0gdG9BU0NJSUhleFZhbHVlKGRp
Z2l0QnVmZmVyW3JlZEluZGV4XSwgZGlnaXRCdWZmZXJbcmVkSW5kZXggKyAxXSk7Ci0gICAgaW50
IGdyZWVuVmFsdWUgPSB0b0FTQ0lJSGV4VmFsdWUoZGlnaXRCdWZmZXJbZ3JlZW5JbmRleF0sIGRp
Z2l0QnVmZmVyW2dyZWVuSW5kZXggKyAxXSk7Ci0gICAgaW50IGJsdWVWYWx1ZSA9IHRvQVNDSUlI
ZXhWYWx1ZShkaWdpdEJ1ZmZlcltibHVlSW5kZXhdLCBkaWdpdEJ1ZmZlcltibHVlSW5kZXggKyAx
XSk7CisgICAgdWludDhfdCByZWRWYWx1ZSA9IHRvQVNDSUlIZXhWYWx1ZShkaWdpdEJ1ZmZlclty
ZWRJbmRleF0sIGRpZ2l0QnVmZmVyW3JlZEluZGV4ICsgMV0pOworICAgIHVpbnQ4X3QgZ3JlZW5W
YWx1ZSA9IHRvQVNDSUlIZXhWYWx1ZShkaWdpdEJ1ZmZlcltncmVlbkluZGV4XSwgZGlnaXRCdWZm
ZXJbZ3JlZW5JbmRleCArIDFdKTsKKyAgICB1aW50OF90IGJsdWVWYWx1ZSA9IHRvQVNDSUlIZXhW
YWx1ZShkaWdpdEJ1ZmZlcltibHVlSW5kZXhdLCBkaWdpdEJ1ZmZlcltibHVlSW5kZXggKyAxXSk7
CiAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyZWRWYWx1ZSwgZ3JlZW5WYWx1ZSwgYmx1ZVZh
bHVlKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDI2MjY1OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzUsNyArMzc1LDcgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTdAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc3R5
bGUuaXNDdXJyZW50Q29sb3IoKSkKLSAgICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShjdXJyZW50
Q29sb3IoY2FudmFzQmFzZSgpKS5jb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGlu
ZyhzdHlsZS5vdmVycmlkZUFscGhhKCkpKTsKKyAgICAgICAgc3R5bGUgPSBDYW52YXNTdHlsZShj
dXJyZW50Q29sb3IoY2FudmFzQmFzZSgpKS5jb2xvcldpdGhBbHBoYShzdHlsZS5vdmVycmlkZUFs
cGhhKCkpKTsKICAgICBlbHNlCiAgICAgICAgIGNoZWNrT3JpZ2luKHN0eWxlLmNhbnZhc1BhdHRl
cm4oKS5nZXQoKSk7CiAKQEAgLTM5OCw3ICszOTgsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnNldEZpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzdHlsZS5pc0N1
cnJlbnRDb2xvcigpKQotICAgICAgICBzdHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRDb2xvcihj
YW52YXNCYXNlKCkpLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKHN0eWxl
Lm92ZXJyaWRlQWxwaGEoKSkpOworICAgICAgICBzdHlsZSA9IENhbnZhc1N0eWxlKGN1cnJlbnRD
b2xvcihjYW52YXNCYXNlKCkpLmNvbG9yV2l0aEFscGhhKHN0eWxlLm92ZXJyaWRlQWxwaGEoKSkp
OwogICAgIGVsc2UKICAgICAgICAgY2hlY2tPcmlnaW4oc3R5bGUuY2FudmFzUGF0dGVybigpLmdl
dCgpKTsKIApAQCAtMTMwMiw3ICsxMzAyLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpzZXRTaAogICAgICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwg
Ymx1ciwgY29sb3IuY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoYWxwaGEp
KTsKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb2xvci5j
b2xvcldpdGhBbHBoYShhbHBoYSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBm
bG9hdCBncmF5TGV2ZWwsIGZsb2F0IGFscGhhKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1N0eWxlLmNwcAkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNyAr
MTQzLDcgQEAgQ2FudmFzU3R5bGUgQ2FudmFzU3R5bGU6OmNyZWF0ZUZyb21TdHJpbgogICAgIGlm
ICghY29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIGNv
bG9yLmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGFscGhhKTsKKyAgICBy
ZXR1cm4gY29sb3IuY29sb3JXaXRoQWxwaGEoYWxwaGEpOwogfQogCiBib29sIENhbnZhc1N0eWxl
Ojppc0VxdWl2YWxlbnRDb2xvcihjb25zdCBDYW52YXNTdHlsZSYgb3RoZXIpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRP
TUFnZW50LmNwcAkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsx
NDksNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBKU09OOjpPYmplCiAgICAgZWxz
ZSBpZiAoYSA+IDEpCiAgICAgICAgIGEgPSAxOwogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xv
cihyLCBnLCBiLCBzdGF0aWNfY2FzdDxpbnQ+KGEgKiAyNTUpKTsKKyAgICByZXR1cm4gbWFrZVNp
bXBsZUNvbG9yKHIsIGcsIGIsIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYSkpOwogfQogCiBzdGF0
aWMgQ29sb3IgcGFyc2VDb25maWdDb2xvcihjb25zdCBTdHJpbmcmIGZpZWxkTmFtZSwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBjb25maWdPYmplY3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSwxMSAr
MTIxLDggQEAgQ29sb3IgQ29sb3I6OmxpZ2h0KCkgY29uc3QKICAgICAvLyBIYXJkY29kZSB0aGlz
IGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KICAgICBpZiAoIWlzRXh0ZW5kZWQoKSAmJiBhc1NpbXBs
ZSgpID09IGJsYWNrKQogICAgICAgICByZXR1cm4gbGlnaHRlbmVkQmxhY2s7Ci0gICAgCi0gICAg
Y29uc3QgZmxvYXQgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CiAKICAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKLQogICAgIGZs
b2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAKICAgICBpZiAodiA9PSAwLjBmKQpAQCAt
MTMzLDEyICsxMzAsNyBAQCBDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAogCiAgICAgZmxvYXQg
bXVsdGlwbGllciA9IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikgLyB2OwogCi0gICAgcmV0dXJu
IG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICog
ciAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICog
ZyAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICog
YiAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgYWxwaGEoKQotICAgICk7CisgICAgcmV0dXJuIG1h
a2VTaW1wbGVDb2xvckZyb21GbG9hdHMobXVsdGlwbGllciAqIHIsIG11bHRpcGxpZXIgKiBnLCBt
dWx0aXBsaWVyICogYiwgYSk7CiB9CiAKIENvbG9yIENvbG9yOjpkYXJrKCkgY29uc3QKQEAgLTE0
NywxOSArMTM5LDEyIEBAIENvbG9yIENvbG9yOjpkYXJrKCkgY29uc3QKICAgICBpZiAoIWlzRXh0
ZW5kZWQoKSAmJiBhc1NpbXBsZSgpID09IHdoaXRlKQogICAgICAgICByZXR1cm4gZGFya2VuZWRX
aGl0ZTsKICAgICAKLSAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IG5leHRhZnRlcmYoMjU2
LjBmLCAwLjBmKTsKLQogICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpOwogCiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9h
dCBtdWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2KTsKIAotICAgIHJl
dHVybiBtYWtlU2ltcGxlQ29sb3IoCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGll
ciAqIHIgKiBzY2FsZUZhY3RvciksCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGll
ciAqIGcgKiBzY2FsZUZhY3RvciksCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGll
ciAqIGIgKiBzY2FsZUZhY3RvciksCi0gICAgICAgIGFscGhhKCkKLSAgICApOworICAgIHJldHVy
biBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKG11bHRpcGxpZXIgKiByLCBtdWx0aXBsaWVyICog
ZywgbXVsdGlwbGllciAqIGIsIGEpOwogfQogCiBib29sIENvbG9yOjppc0RhcmsoKSBjb25zdApA
QCAtMjM1LDQxICsyMjAsMTQgQEAgQ29sb3IgQ29sb3I6OmJsZW5kV2l0aFdoaXRlKCkgY29uc3QK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1Db2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnkoZmxvYXQgYW1vdW50KSBjb25zdAotewotICAgIGZsb2F0IG5ld0FscGhhID0gYW1v
dW50ICogYWxwaGFBc0Zsb2F0KCk7Ci0gICAgcmV0dXJuIGNvbG9yV2l0aEFscGhhKG5ld0FscGhh
KTsKLX0KLQotQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRl
cm5hdGl2ZVJvdW5kaW5nKGZsb2F0IGFtb3VudCkgY29uc3QKLXsKLSAgICBmbG9hdCBuZXdBbHBo
YSA9IGFtb3VudCAqIGFscGhhQXNGbG9hdCgpOwotICAgIHJldHVybiBjb2xvcldpdGhBbHBoYVVz
aW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7Ci19Ci0KIENvbG9yIENvbG9yOjpjb2xv
cldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQog
ICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmNvbG9yV2l0aEFscGhhKGFscGhhKTsKIAotICAg
IC8vIEZJWE1FOiBUaGlzIGlzIHdoZXJlIHRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIGNvbG9y
V2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nLgotICAgIHVpbnQ4X3QgbmV3QWxwaGEg
PSBhbHBoYSAqIDB4RkY7CisgICAgQ29sb3IgcmVzdWx0ID0gYXNTaW1wbGUoKS5jb2xvcldpdGhB
bHBoYShjb252ZXJ0VG9Db21wb25lbnRCeXRlKGFscGhhKSk7CiAKLSAgICBDb2xvciByZXN1bHQg
PSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsKLSAgICBpZiAoaXNTZW1hbnRp
YygpKQotICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLUNvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGlu
ZyhmbG9hdCBhbHBoYSkgY29uc3QKLXsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICBy
ZXR1cm4gYXNFeHRlbmRlZCgpLmNvbG9yV2l0aEFscGhhKGFscGhhKTsKLQotICAgIC8vIEZJWE1F
OiBUaGlzIGlzIHdoZXJlIHRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIGNvbG9yV2l0aEFscGhh
VXNpbmcuCi0gICAgdWludDhfdCBuZXdBbHBoYSA9IHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hh
bm5lbChhbHBoYSk7Ci0KLSAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFs
cGhhKG5ld0FscGhhKTsKKyAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZpbmcgdGhlIHNlbWFu
dGljIGJpdCBkZXNpcmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/CiAgICAgaWYgKGlzU2VtYW50aWMo
KSkKICAgICAgICAgcmVzdWx0LnRhZ0FzU2VtYW50aWMoKTsKICAgICByZXR1cm4gcmVzdWx0OwpA
QCAtMjc5LDcgKzIzNyw3IEBAIENvbG9yIENvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFscGhhKGZs
b2EKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgp
LmludmVydGVkQ29sb3JXaXRoQWxwaGEoYWxwaGEpOwotICAgIHJldHVybiBhc1NpbXBsZSgpLmlu
dmVydGVkQ29sb3JXaXRoQWxwaGEoc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGFscGhh
KSk7CisgICAgcmV0dXJuIGFzU2ltcGxlKCkuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShjb252ZXJ0
VG9Db21wb25lbnRCeXRlKGFscGhhKSk7CiB9CiAKIENvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9y
KCkgY29uc3QKQEAgLTMwMCw3ICsyNTgsNyBAQCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JD
b21wb25lbnRzPGZsCiBTaW1wbGVDb2xvciBDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3ko
KSBjb25zdAogewogICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBtYWtlU2lt
cGxlQ29sb3IodG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VT
aW1wbGVDb2xvcihhc0V4dGVuZGVkKCkudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKICAgICBy
ZXR1cm4gYXNTaW1wbGUoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyArMTIyLDcgQEAgcHVi
bGljOgogICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBh
c0V4dGVuZGVkKCkuYWxwaGEoKSA9PSAxLjAgOiBhc1NpbXBsZSgpLmlzT3BhcXVlKCk7IH0KICAg
ICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5k
ZWQoKS5hbHBoYSgpID4gMC4wIDogYXNTaW1wbGUoKS5pc1Zpc2libGUoKTsgfQogCi0gICAgaW50
IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhh
KCkgKiAyNTUgOiBhc1NpbXBsZSgpLmFscGhhQ29tcG9uZW50KCk7IH0KKyAgICB1aW50OF90IGFs
cGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gY29udmVydFRvQ29tcG9uZW50Qnl0
ZShhc0V4dGVuZGVkKCkuYWxwaGEoKSkgOiBhc1NpbXBsZSgpLmFscGhhQ29tcG9uZW50KCk7IH0K
ICAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBh
c0V4dGVuZGVkKCkuYWxwaGEoKSA6IGFzU2ltcGxlKCkuYWxwaGFDb21wb25lbnRBc0Zsb2F0KCk7
IH0KIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKQEAgLTE0NSwxOCArMTQ1LDE3IEBAIHB1
YmxpYzoKICAgICBDb2xvciBibGVuZChjb25zdCBDb2xvciYpIGNvbnN0OwogICAgIENvbG9yIGJs
ZW5kV2l0aFdoaXRlKCkgY29uc3Q7CiAKKyAgICBDb2xvciBpbnZlcnRlZENvbG9yV2l0aEFscGhh
KE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3Q7CiAgICAgQ29sb3IgaW52ZXJ0ZWRDb2xvcldp
dGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3Q7CiAKKyAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11
bHRpcGxpZWRCeShPcHRpb25hbDxmbG9hdD4pIGNvbnN0OwogICAgIENvbG9yIGNvbG9yV2l0aEFs
cGhhTXVsdGlwbGllZEJ5KGZsb2F0KSBjb25zdDsKLSAgICBDb2xvciBjb2xvcldpdGhBbHBoYShm
bG9hdCkgY29uc3Q7CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBuZWVkIGZvciBBbHRlcm5h
dGl2ZVJvdW5kaW5nIHZhcmlhbnRzIGJ5IHNldHRsaW5nIG9uIGEgcm91bmRpbmcgYmVoYXZpb3Iu
Ci0gICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91
bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+KSBjb25zdDsKLSAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11
bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhmbG9hdCkgY29uc3Q7Ci0gICAgQ29s
b3IgY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+
KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBjb2xvcldpdGhBbHBoYVVzaW5nQWx0
ZXJuYXRpdmVSb3VuZGluZyhmbG9hdCkgY29uc3Q7CisgICAgQ29sb3IgY29sb3JXaXRoQWxwaGEo
T3B0aW9uYWw8ZmxvYXQ+KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBjb2xvcldp
dGhBbHBoYShmbG9hdCkgY29uc3Q7CiAKICAgICBDb2xvciBvcGFxdWVDb2xvcigpIGNvbnN0IHsg
cmV0dXJuIGNvbG9yV2l0aEFscGhhKDEuMGYpOyB9CisKICAgICBDb2xvciBzZW1hbnRpY0NvbG9y
KCkgY29uc3Q7CiAKICAgICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5hdGVkIGZyb20gYSBD
U1Mgc2VtYW50aWMgY29sb3IgbmFtZS4KQEAgLTI4OSwxNCArMjg4LDI0IEBAIGlubGluZSB1bnNp
Z25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0CiAgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2NvbG9y
RGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzKTsKIH0KIAotaW5saW5lIENvbG9yIENvbG9yOjpjb2xv
cldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxm
bG9hdD4gYWxwaGEpIGNvbnN0CitpbmxpbmUgQ29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRo
QWxwaGEoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdAoreworICAgIHJldHVybiBhbHBoYSA/
IGludmVydGVkQ29sb3JXaXRoQWxwaGEoYWxwaGEudmFsdWUoKSkgOiAqdGhpczsKK30KKworaW5s
aW5lIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9hdCBhbW91bnQp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbG9yV2l0aEFscGhhKGFtb3VudCAqIGFscGhhQXNGbG9h
dCgpKTsKK30KKworaW5saW5lIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRC
eShPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFscGhhID8gY29s
b3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoYWxwaGEudmFs
dWUoKSkgOiAqdGhpczsKKyAgICByZXR1cm4gYWxwaGEgPyBjb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeShhbHBoYS52YWx1ZSgpKSA6ICp0aGlzOwogfQogCi1pbmxpbmUgQ29sb3IgQ29sb3I6OmNv
bG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKE9wdGlvbmFsPGZsb2F0PiBhbHBo
YSkgY29uc3QKK2lubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoT3B0aW9uYWw8Zmxv
YXQ+IGFscGhhKSBjb25zdAogewotICAgIHJldHVybiBhbHBoYSA/IGNvbG9yV2l0aEFscGhhVXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGFscGhhLnZhbHVlKCkpIDogKnRoaXM7CisgICAgcmV0dXJu
IGFscGhhID8gY29sb3JXaXRoQWxwaGEoYWxwaGEudmFsdWUoKSkgOiAqdGhpczsKIH0KIAogaW5s
aW5lIGNvbnN0IEV4dGVuZGVkQ29sb3ImIENvbG9yOjphc0V4dGVuZGVkKCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGll
cy5jcHAJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTQgKzMxLDYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIGFyZUVzc2VudGlhbGx5RXF1YWwoY29uc3Qg
Q29sb3JDb21wb25lbnRzPGZsb2F0PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYg
YikKLXsKLSAgICByZXR1cm4gV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFbMF0sIGJbMF0pCi0g
ICAgICAgICYmIFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhWzFdLCBiWzFdKQotICAgICAgICAm
JiBXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYVsyXSwgYlsyXSkKLSAgICAgICAgJiYgV1RGOjph
cmVFc3NlbnRpYWxseUVxdWFsKGFbM10sIGJbM10pOwotfQotCiAvLyBUaGVzZSBhcmUgdGhlIHN0
YW5kYXJkIHNSR0IgPC0+IGxpbmVhclJHQiBjb252ZXJzaW9uIGZ1bmN0aW9ucyAoaHR0cHM6Ly9l
bi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQikuCiBmbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9u
ZW50KGZsb2F0IGMpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvclV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDIxICs1MSwxOSBAQCBmbG9hdCBjb250cmFzdFJhdGlvKGNvbnN0IENvbG9yQ29tcG9uZW50
CiAKIENvbG9yQ29tcG9uZW50czxmbG9hdD4gcHJlbXVsdGlwbGllZChjb25zdCBDb2xvckNvbXBv
bmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9udGVudHMpOwogCi1ib29sIGFyZUVzc2VudGlhbGx5RXF1
YWwoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYsIGNvbnN0IENvbG9yQ29tcG9uZW50czxm
bG9hdD4mKTsKLQotaW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChpbnQg
dmFsdWUpCitpbmxpbmUgdWludDhfdCBjb252ZXJ0UHJlc2NhbGVkVG9Db21wb25lbnRCeXRlKGZs
b2F0IGYpCiB7Ci0gICAgcmV0dXJuIHN0ZDo6Y2xhbXAodmFsdWUsIDAsIDI1NSk7CisgICAgcmV0
dXJuIHN0ZDo6Y2xhbXAoc3RhdGljX2Nhc3Q8aW50PihzdGQ6Omxyb3VuZGYoZikpLCAwLCAyNTUp
OwogfQogCi1pbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGZsb2F0IHZh
bHVlKQoraW5saW5lIHVpbnQ4X3QgY29udmVydFRvQ29tcG9uZW50Qnl0ZShmbG9hdCBmKQogewot
ICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6cm91bmQodmFsdWUpLCAwLmYsIDI1NS5mKTsKKyAg
ICByZXR1cm4gc3RkOjpjbGFtcChzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6bHJvdW5kZihmICogMjU1
LjBmKSksIDAsIDI1NSk7CiB9CiAKLWlubGluZSB1aW50OF90IHNjYWxlUm91bmRBbmRDbGFtcENv
bG9yQ2hhbm5lbChmbG9hdCBmKQorY29uc3RleHByIGZsb2F0IGNvbnZlcnRUb0NvbXBvbmVudEZs
b2F0KHVpbnQ4X3QgYnl0ZSkKIHsKLSAgICByZXR1cm4gc3RkOjpjbGFtcChzdGF0aWNfY2FzdDxp
bnQ+KGxyb3VuZGYoMjU1LjBmICogZikpLCAwLCAyNTUpOworICAgIHJldHVybiBieXRlIC8gMjU1
LjBmOwogfQogCiBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2X3Qg
dmFsdWUpCkBAIC04Miw1ICs4MCw0IEBAIGNvbnN0ZXhwciB1aW50MTZfdCBmYXN0RGl2aWRlQnky
NTUodWludDEKICAgICByZXR1cm4gYXBwcm94aW1hdGlvbiArIChyZW1haW5kZXIgPj4gOCk7CiB9
CiAKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAkocmV2aXNpb24gMjYyNjU5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NywzNCArNjcsMTMgQEAgU2ltcGxlQ29sb3IgbWFrZVVucHJlbXVsdGlwbGll
ZFNpbXBsZUNvbAogICAgIHJldHVybiBwaXhlbENvbG9yOwogfQogCi1TaW1wbGVDb2xvciBtYWtl
U2ltcGxlQ29sb3JGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEp
Ci17Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAgc2NhbGVSb3VuZEFuZENs
YW1wQ29sb3JDaGFubmVsKHIpLAotICAgICAgICBzY2FsZVJvdW5kQW5kQ2xhbXBDb2xvckNoYW5u
ZWwoZyksCi0gICAgICAgIHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChiKSwKLSAgICAg
ICAgc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGEpCi0gICAgKTsKLX0KLQotU2ltcGxl
Q29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoZmxvYXQgaHVlLCBmbG9hdCBzYXR1cmF0aW9u
LCBmbG9hdCBsaWdodG5lc3MsIGZsb2F0IGFscGhhKQotewotICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pOwotICAg
IHJldHVybiBtYWtlU2ltcGxlQ29sb3IoCi0gICAgICAgIHJvdW5kKHIgKiAyNTUuMGYpLAotICAg
ICAgICByb3VuZChnICogMjU1LjBmKSwKLSAgICAgICAgcm91bmQoYiAqIDI1NS4wZiksCi0gICAg
ICAgIHJvdW5kKGEgKiAyNTUuMGYpCi0gICAgKTsKLX0KLQogU2ltcGxlQ29sb3IgbWFrZVNpbXBs
ZUNvbG9yRnJvbUNNWUtBKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0
IGEpCiB7Ci0gICAgZG91YmxlIGNvbG9ycyA9IDEgLSBrOwotICAgIGludCByID0gc3RhdGljX2Nh
c3Q8aW50PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIChjb2xvcnMgKiAoMSAtIGMpKSk7Ci0gICAgaW50
IGcgPSBzdGF0aWNfY2FzdDxpbnQ+KG5leHRhZnRlcigyNTYsIDApICogKGNvbG9ycyAqICgxIC0g
bSkpKTsKLSAgICBpbnQgYiA9IHN0YXRpY19jYXN0PGludD4obmV4dGFmdGVyKDI1NiwgMCkgKiAo
Y29sb3JzICogKDEgLSB5KSkpOwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG5leHRhZnRlcigyNTYsIDApICogYSkpOworICAgIGZsb2F0IGNv
bG9ycyA9IDEgLSBrOworICAgIGZsb2F0IHIgPSBjb2xvcnMgKiAoMS4wZiAtIGMpOworICAgIGZs
b2F0IGcgPSBjb2xvcnMgKiAoMS4wZiAtIG0pOworICAgIGZsb2F0IGIgPSBjb2xvcnMgKiAoMS4w
ZiAtIHkpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKHIsIGcsIGIsIGEp
OwogfQogCiBTdHJpbmcgU2ltcGxlQ29sb3I6OnNlcmlhbGl6YXRpb25Gb3JIVE1MKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3Iu
aAkocmV2aXNpb24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2ltcGxlQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAg
ICAgY29uc3RleHByIHVpbnQ4X3QgYmx1ZUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWU7IH0KICAgICBjb25zdGV4cHIgdWludDhfdCBhbHBoYUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWUgPj4gMjQ7IH0KIAotICAgIGNvbnN0ZXhwciBmbG9hdCBhbHBoYUNvbXBvbmVu
dEFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGFDb21wb25l
bnQoKSkgLyAweEZGOyB9CisgICAgY29uc3RleHByIGZsb2F0IGFscGhhQ29tcG9uZW50QXNGbG9h
dCgpIGNvbnN0IHsgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGFscGhhQ29tcG9uZW50
KCkpOyB9CiAKICAgICBjb25zdGV4cHIgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGFs
cGhhQ29tcG9uZW50KCkgPT0gMHhGRjsgfQogICAgIGNvbnN0ZXhwciBib29sIGlzVmlzaWJsZSgp
IGNvbnN0IHsgcmV0dXJuIGFscGhhQ29tcG9uZW50KCk7IH0KQEAgLTY3LDcgKzY3LDcgQEAgcHVi
bGljOgogCiAgICAgY29uc3RleHByIENvbG9yQ29tcG9uZW50czxmbG9hdD4gYXNTUkdCRmxvYXRD
b21wb25lbnRzKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiB7IHJlZENvbXBvbmVudCgp
IC8gMjU1LjBmLCBncmVlbkNvbXBvbmVudCgpIC8gMjU1LjBmLCBibHVlQ29tcG9uZW50KCkgLyAy
NTUuMGYsICBhbHBoYUNvbXBvbmVudCgpIC8gMjU1LjBmIH07CisgICAgICAgIHJldHVybiB7IGNv
bnZlcnRUb0NvbXBvbmVudEZsb2F0KHJlZENvbXBvbmVudCgpKSwgY29udmVydFRvQ29tcG9uZW50
RmxvYXQoZ3JlZW5Db21wb25lbnQoKSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGJsdWVDb21w
b25lbnQoKSksICBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChhbHBoYUNvbXBvbmVudCgpKSB9Owog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+CkBAIC05NSwxNiArOTUsMTQgQEAg
Y29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbgogY29uc3RleHByIFNpbXBs
ZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CiAKIFNp
bXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBz
UkdCQ29tcG9uZW50cyk7CitTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGZs
b2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpOworU2ltcGxlQ29sb3IgbWFrZVNpbXBs
ZUNvbG9yRnJvbUNNWUtBKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0
IGEpOwogCiBTaW1wbGVDb2xvciBtYWtlUHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKGludCByLCBp
bnQgZywgaW50IGIsIGludCBhLCBib29sIGNlaWxpbmcgPSB0cnVlKTsKIFNpbXBsZUNvbG9yIG1h
a2VQcmVtdWx0aXBsaWVkU2ltcGxlQ29sb3IoU2ltcGxlQ29sb3IpOwogU2ltcGxlQ29sb3IgbWFr
ZVVucHJlbXVsdGlwbGllZFNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsK
IFNpbXBsZUNvbG9yIG1ha2VVbnByZW11bHRpcGxpZWRTaW1wbGVDb2xvcihTaW1wbGVDb2xvcik7
CiAKLVdFQkNPUkVfRVhQT1JUIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMo
ZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7Ci1XRUJDT1JFX0VYUE9SVCBTaW1w
bGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShmbG9hdCBoLCBmbG9hdCBzLCBmbG9hdCBs
LCBmbG9hdCBhKTsKLVNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21DTVlLQShmbG9hdCBj
LCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKTsKLQogaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQogewogICAgIHJldHVybiBhLnZh
bHVlKCkgPT0gYi52YWx1ZSgpOwpAQCAtMTE3LDcgKzExNSw3IEBAIGlubGluZSBib29sIG9wZXJh
dG9yIT0oU2ltcGxlQ29sb3IgYSwgU2kKIAogY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1w
bGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiKQogewotICAgIHJldHVybiBtYWtlU2ltcGxlQ29s
b3IociwgZywgYiwgMHhGRik7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhfdD4oc3Rk
OjpjbGFtcChyLCAwLCAweEZGKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xhbXAoZywg
MCwgMHhGRikpLCBzdGF0aWNfY2FzdDx1aW50OF90PihzdGQ6OmNsYW1wKGIsIDAsIDB4RkYpKSwg
MHhGRiB9OwogfQogCiBjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGludCBy
LCBpbnQgZywgaW50IGIsIGludCBhKQpAQCAtMTI4LDEyICsxMjYsMTIgQEAgY29uc3RleHByIFNp
bXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbgogaW5saW5lIFNpbXBsZUNvbG9yIG1ha2VTaW1w
bGVDb2xvcihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9uZW50cykKIHsK
ICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHNSR0JDb21wb25lbnRzOwotICAgIHJldHVybiBtYWtl
U2ltcGxlQ29sb3IoCi0gICAgICAgIHNjYWxlUm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChyKSwK
LSAgICAgICAgc2NhbGVSb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGcpLAotICAgICAgICBzY2Fs
ZVJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoYiksCi0gICAgICAgIHNjYWxlUm91bmRBbmRDbGFt
cENvbG9yQ2hhbm5lbChhKQotICAgICk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21G
bG9hdHMociwgZywgYiwgYSk7Cit9CisKK2lubGluZSBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29s
b3JGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCit7CisgICAg
cmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50Qnl0ZShyKSwgY29udmVydFRvQ29tcG9uZW50Qnl0
ZShnKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShiKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShh
KSB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcg
QEAgc3RhdGljIHZvaWQgcHJlcGFyZUNhaXJvQ29udGV4dFNvdXJjZShjYQogICAgIH0gZWxzZSB7
CiAgICAgICAgIC8vIFNvbGlkIGNvbG9yIHNvdXJjZQogICAgICAgICBpZiAoZ2xvYmFsQWxwaGEg
PCAxKQotICAgICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgY29sb3IuY29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZ2xvYmFsQWxwaGEp
KTsKKyAgICAgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIGNvbG9yLmNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5KGdsb2JhbEFscGhhKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIGNvbG9yKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkocmV2aXNp
b24gMjYyNjU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JD
Ry5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDggKzc4LDcgQEAgc3RhdGljIFNpbXBsZUNvbG9y
IG1ha2VTaW1wbGVDb2xvckZyb21DRwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyKDI1
Ni4wLCAwLjApOwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IociAqIHNjYWxlRmFjdG9yLCBn
ICogc2NhbGVGYWN0b3IsIGIgKiBzY2FsZUZhY3RvciwgYSAqIHNjYWxlRmFjdG9yKTsKKyAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKTsKIH0KIAogQ29sb3I6
OkNvbG9yKENHQ29sb3JSZWYgY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAJKHJldmlzaW9uIDI2MjY1OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBGRUZsb29kOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGF1dG8gY29sb3IgPSBmbG9vZENvbG9yKCkuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlV
c2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvb2RPcGFjaXR5KCkpOworICAgIGF1dG8gY29sb3Ig
PSBmbG9vZENvbG9yKCkuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxvb2RPcGFjaXR5KCkp
OwogICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBjb2xvcik7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0JKHJl
dmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9D
b2xvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtODgsOCArODgsNyBAQCBzdGF0aWMgU2ltcGxl
Q29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbU5TCiAgICAgW3JnYkNvbG9yIGdldFJlZDomcmVkQ29t
cG9uZW50IGdyZWVuOiZncmVlbkNvbXBvbmVudCBibHVlOiZibHVlQ29tcG9uZW50IGFscGhhOiZh
bHBoYV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIHN0YXRpYyBjb25z
dCBkb3VibGUgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXIoMjU2LjAsIDAuMCk7Ci0gICAgcmV0dXJu
IG1ha2VTaW1wbGVDb2xvcihzY2FsZUZhY3RvciAqIHJlZENvbXBvbmVudCwgc2NhbGVGYWN0b3Ig
KiBncmVlbkNvbXBvbmVudCwgc2NhbGVGYWN0b3IgKiBibHVlQ29tcG9uZW50LCBzY2FsZUZhY3Rv
ciAqIGFscGhhKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyZWRDb21w
b25lbnQsIGdyZWVuQ29tcG9uZW50LCBibHVlQ29tcG9uZW50LCBhbHBoYSk7CiB9CiAKIENvbG9y
IGNvbG9yRnJvbU5TQ29sb3IoTlNDb2xvciAqY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvQ29sb3JJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL0NvbG9ySU9TLm1tCShyZXZpc2lvbiAyNjI2NTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvQ29sb3JJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDcg
QEAgQ29sb3IgY29sb3JGcm9tVUlDb2xvcihVSUNvbG9yICpjb2xvcikKIAogICAgIFtjb2xvciBn
ZXRSZWQ6JnJlZENvbXBvbmVudCBncmVlbjomZ3JlZW5Db21wb25lbnQgYmx1ZTomYmx1ZUNvbXBv
bmVudCBhbHBoYTomYWxwaGFdOwogCi0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBzY2FsZUZhY3Rv
ciA9IG5leHRhZnRlcigyNTYuMCwgMC4wKTsKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHNj
YWxlRmFjdG9yICogcmVkQ29tcG9uZW50LCBzY2FsZUZhY3RvciAqIGdyZWVuQ29tcG9uZW50LCBz
Y2FsZUZhY3RvciAqIGJsdWVDb21wb25lbnQsIHNjYWxlRmFjdG9yICogYWxwaGEpOworICAgIHJl
dHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKHJlZENvbXBvbmVudCwgZ3JlZW5Db21wb25l
bnQsIGJsdWVDb21wb25lbnQsIGFscGhhKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjI2NTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05NCw3ICs5NCw3IEBAIENvbG9yIFNWR1N0b3BFbGVtZW50OjpzdG9wQ29sb3JJbmNsdWRp
bmcKICAgICBhdXRvJiBzdmdTdHlsZSA9IHN0eWxlLnN2Z1N0eWxlKCk7CiAgICAgYXV0byBzdG9w
Q29sb3IgPSBzdHlsZS5jb2xvclJlc29sdmluZ0N1cnJlbnRDb2xvcihzdmdTdHlsZS5zdG9wQ29s
b3IoKSk7CiAKLSAgICByZXR1cm4gc3RvcENvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKHN2Z1N0eWxlLnN0b3BPcGFjaXR5KCkpOworICAgIHJl
dHVybiBzdG9wQ29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoc3ZnU3R5bGUuc3RvcE9w
YWNpdHkoKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NW
R0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rp
b25JbXBsLmgJKHJldmlzaW9uIDI2MjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0
aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE0LDYgKzExNCwxNiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgorICAgIGlu
bGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoaW50IHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6Y2xhbXAodmFsdWUsIDAsIDI1NSk7CisgICAgfQorCisgICAg
aW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChmbG9hdCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6cm91bmRmKHZhbHVlKSwgMC4wZiwg
MjU1LjBmKTsKKyAgICB9CisKICAgICB2b2lkIGFkZEZyb21BbmRUb1ZhbHVlcyhTVkdFbGVtZW50
Kikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1fZnJvbS50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpOwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjY5MCkKKysr
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMjAtMDYtMDYgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEV4
dGVuZGVkIENvbG9yOiBVbmlmeSByb3VuZGluZyAvIGNsYW1waW5nIGNvbnZlcnNpb25zIGJldHdl
ZW4gMC0xIGZsb2F0IGNvbXBvbmVudHMgYW5kIDAtMjU1IGJ5dGUgY29tcG9uZW50cworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyODcxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2lvcy9XS1dlYlZpZXdJT1MubW06CisgICAgICAgIChzY3JvbGxWaWV3QmFja2dyb3VuZENvbG9y
KToKKyAgICAgICAgUmVwbGFjZXMgdXNlcyBvZiBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRp
dmVSb3VuZGluZygpIHdpdGggY29sb3JXaXRoQWxwaGEoKS4KKwogMjAyMC0wNi0wNiAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVhciBXZWJQYWdl
UHJveHkgZXZlbnQgc3RhdGUgYmV0d2VlbiB0ZXN0cwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MubW0JKHJldmlzaW9uIDI2MjY1OSkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC01MTMsNyArNTEzLDcgQEAgc3RhdGljIFdlYkNvcmU6OkNvbG9yIHNjcm9sbFZp
ZXdCYWNrZ3JvdQogICAgIGlmICh6b29tU2NhbGUgPCBtaW5pbXVtWm9vbVNjYWxlKSB7CiAgICAg
ICAgIENHRmxvYXQgc2xvcGUgPSAxMjsKICAgICAgICAgQ0dGbG9hdCBvcGFjaXR5ID0gc3RkOjpt
YXg8Q0dGbG9hdD4oMSAtIHNsb3BlICogKG1pbmltdW1ab29tU2NhbGUgLSB6b29tU2NhbGUpLCAw
KTsKLSAgICAgICAgY29sb3IgPSBjb2xvci5jb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVS
b3VuZGluZyhvcGFjaXR5KTsKKyAgICAgICAgY29sb3IgPSBjb2xvci5jb2xvcldpdGhBbHBoYShv
cGFjaXR5KTsKICAgICB9CiAKICAgICByZXR1cm4gY29sb3I7CkluZGV4OiBUb29scy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjI2OTApCisrKyBU
b29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAyMC0wNi0w
NiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29s
b3I6IFVuaWZ5IHJvdW5kaW5nIC8gY2xhbXBpbmcgY29udmVyc2lvbnMgYmV0d2VlbiAwLTEgZmxv
YXQgY29tcG9uZW50cyBhbmQgMC0yNTUgYnl0ZSBjb21wb25lbnRzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI4NzEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9Db2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAg
ICAgICBTd2l0Y2ggdG8gdXNpbmcgbWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQiguLi4pKSBkaXJl
Y3RseS4KKwogMjAyMC0wNi0wNiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNv
bT4KIAogICAgICAgICBDbGVhciBXZWJQYWdlUHJveHkgZXZlbnQgc3RhdGUgYmV0d2VlbiB0ZXN0
cwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRl
c3RzLmNwcAkocmV2aXNpb24gMjYyNjU5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0NvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIFRF
U1QoQ29sb3IsIFJHQlRvSFNMX1doaXRlKQogICAgIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xv
ci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKICAgICAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENv
bG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdo
dG5lc3MsIGFscGhhKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VT
aW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEg
fSkpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAt
NjEsNyArNjEsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbGFjaykKIAogICAgIEVYUEVDVF9G
TE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRU
cmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShodWUsIHNhdHVyYXRp
b24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29s
b3IobWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNz
LCBhbHBoYSB9KSkpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwog
fQogCkBAIC03Nyw3ICs3Nyw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1JlZCkKIAogICAgIEVY
UEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKIAotICAgIGF1dG8g
cm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShodWUsIHNh
dHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9y
ID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGln
aHRuZXNzLCBhbHBoYSB9KSkpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29s
b3IpOwogfQogCkBAIC05Myw3ICs5Myw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyZWVuKQog
CiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5lc3MpOwogCi0g
ICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21IU0xB
KGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOworICAgIGF1dG8gcm91bmRUcmlw
cGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0
aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRy
aXBwZWRDb2xvcik7CiB9CiAKQEAgLTEwOSw3ICsxMDksNyBAQCBURVNUKENvbG9yLCBSR0JUb0hT
TF9CbHVlKQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBsaWdodG5l
c3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xv
ckZyb21IU0xBKGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkpOworICAgIGF1dG8g
cm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3IoaHNsVG9TUkdCKHsgaHVl
LCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9y
LCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQCBURVNUKENvbG9y
LCBSR0JUb0hTTF9EYXJrR3JheSkKICAgICAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGln
aHRuZXNzKCksIGxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gQ29s
b3IobWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFs
cGhhKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VTaW1wbGVDb2xv
cihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSkpKTsKICAg
ICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTQxLDcgKzE0
MSw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyYXkpCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEo
Y29sb3IubGlnaHRuZXNzKCksIGxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENv
bG9yID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoaHVlLCBzYXR1cmF0aW9uLCBsaWdo
dG5lc3MsIGFscGhhKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IENvbG9yKG1ha2VT
aW1wbGVDb2xvcihoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEg
fSkpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAt
MTU3LDcgKzE1Nyw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0xpZ2h0R3JheSkKIAogICAgIEVY
UEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgbGlnaHRuZXNzKTsKIAotICAgIGF1dG8g
cm91bmRUcmlwcGVkQ29sb3IgPSBDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShodWUsIHNh
dHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9y
ID0gQ29sb3IobWFrZVNpbXBsZUNvbG9yKGhzbFRvU1JHQih7IGh1ZSwgc2F0dXJhdGlvbiwgbGln
aHRuZXNzLCBhbHBoYSB9KSkpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29s
b3IpOwogfQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjI2OTApCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAyMC0wNi0wNiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IFVuaWZ5
IHJvdW5kaW5nIC8gY2xhbXBpbmcgY29udmVyc2lvbnMgYmV0d2VlbiAwLTEgZmxvYXQgY29tcG9u
ZW50cyBhbmQgMC0yNTUgYnl0ZSBjb21wb25lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI4NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvY3NzL2lvcy9zeXN0ZW0tY29sb3ItZm9yLWNz
cy12YWx1ZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jc3MvaW9zL3N5c3RlbS1jb2xv
ci1mb3ItY3NzLXZhbHVlLmh0bWw6CisgICAgICAgIFVwZGF0ZSB0ZXN0IHRvIGFjY291bnQgZm9y
IHNsaWdodGx5IGRpZmZlcm50IHJvdW5kaW5nIChhbHBoYSBnb2VzIGZyb20gMC4yOTggdG8gMC4z
KS4KKwogMjAyMC0wNi0wNiAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFtMRkNdIEFkZCBzdXBwb3J0IGZvciB3aWR0aDogbWluL21heC1jb250ZW50CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2Nzcy9pb3Mvc3lzdGVtLWNvbG9yLWZvci1jc3MtdmFsdWUtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL2lvcy9zeXN0ZW0tY29s
b3ItZm9yLWNzcy12YWx1ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI2MjY1OSkKKysrIExheW91
dFRlc3RzL2Zhc3QvY3NzL2lvcy9zeXN0ZW0tY29sb3ItZm9yLWNzcy12YWx1ZS1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTYsOSArNiw5IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEEKIFBBU1MgaW50ZXJuYWxzLnN5c3RlbUNvbG9yRm9yQ1NTVmFsdWUo
Jy1hcHBsZS1zeXN0ZW0tbGFiZWwnLCB0cnVlLCBmYWxzZSkgaXMgJ3JnYigyNTUsIDI1NSwgMjU1
KScKIFBBU1MgaW50ZXJuYWxzLnN5c3RlbUNvbG9yRm9yQ1NTVmFsdWUoJy1hcHBsZS1zeXN0ZW0t
aGVhZGVyLXRleHQnLCB0cnVlLCBmYWxzZSkgaXMgJ3JnYigyNTUsIDI1NSwgMjU1KScKIFBBU1Mg
aW50ZXJuYWxzLnN5c3RlbUNvbG9yRm9yQ1NTVmFsdWUoJy1hcHBsZS1zeXN0ZW0tc2Vjb25kYXJ5
LWxhYmVsJywgdHJ1ZSwgZmFsc2UpIGlzICdyZ2JhKDIzNSwgMjM1LCAyNDUsIDAuNiknCi1QQVNT
IGludGVybmFscy5zeXN0ZW1Db2xvckZvckNTU1ZhbHVlKCctYXBwbGUtc3lzdGVtLXRlcnRpYXJ5
LWxhYmVsJywgdHJ1ZSwgZmFsc2UpIGlzICdyZ2JhKDIzNSwgMjM1LCAyNDUsIDAuMjk4KScKK1BB
U1MgaW50ZXJuYWxzLnN5c3RlbUNvbG9yRm9yQ1NTVmFsdWUoJy1hcHBsZS1zeXN0ZW0tdGVydGlh
cnktbGFiZWwnLCB0cnVlLCBmYWxzZSkgaXMgJ3JnYmEoMjM1LCAyMzUsIDI0NSwgMC4zKScKIFBB
U1MgaW50ZXJuYWxzLnN5c3RlbUNvbG9yRm9yQ1NTVmFsdWUoJy1hcHBsZS1zeXN0ZW0tcXVhdGVy
bmFyeS1sYWJlbCcsIHRydWUsIGZhbHNlKSBpcyAncmdiYSgyMzUsIDIzNSwgMjQ1LCAwLjE4KScK
LVBBU1MgaW50ZXJuYWxzLnN5c3RlbUNvbG9yRm9yQ1NTVmFsdWUoJy1hcHBsZS1zeXN0ZW0tcGxh
Y2Vob2xkZXItdGV4dCcsIHRydWUsIGZhbHNlKSBpcyAncmdiYSgyMzUsIDIzNSwgMjQ1LCAwLjI5
OCknCitQQVNTIGludGVybmFscy5zeXN0ZW1Db2xvckZvckNTU1ZhbHVlKCctYXBwbGUtc3lzdGVt
LXBsYWNlaG9sZGVyLXRleHQnLCB0cnVlLCBmYWxzZSkgaXMgJ3JnYmEoMjM1LCAyMzUsIDI0NSwg
MC4zKScKIFBBU1MgaW50ZXJuYWxzLnN5c3RlbUNvbG9yRm9yQ1NTVmFsdWUoJy13ZWJraXQtY29u
dHJvbC1iYWNrZ3JvdW5kJywgdHJ1ZSwgZmFsc2UpIGlzICdyZ2IoMCwgMCwgMCknCiBQQVNTIGlu
dGVybmFscy5zeXN0ZW1Db2xvckZvckNTU1ZhbHVlKCctYXBwbGUtc3lzdGVtLWNvbnRyb2wtYmFj
a2dyb3VuZCcsIHRydWUsIGZhbHNlKSBpcyAncmdiKDAsIDAsIDApJwogUEFTUyBpbnRlcm5hbHMu
c3lzdGVtQ29sb3JGb3JDU1NWYWx1ZSgnLWFwcGxlLXN5c3RlbS10ZXh0LWJhY2tncm91bmQnLCB0
cnVlLCBmYWxzZSkgaXMgJ3JnYigwLCAwLCAwKScKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY3Nz
L2lvcy9zeXN0ZW0tY29sb3ItZm9yLWNzcy12YWx1ZS5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvY3NzL2lvcy9zeXN0ZW0tY29sb3ItZm9yLWNzcy12YWx1ZS5odG1sCShyZXZp
c2lvbiAyNjI2NTkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9pb3Mvc3lzdGVtLWNvbG9yLWZv
ci1jc3MtdmFsdWUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTEsOSArMTEsOSBAQCBpZiAod2lu
ZG93LmludGVybmFscykgewogICAgIHNob3VsZEJlKCJpbnRlcm5hbHMuc3lzdGVtQ29sb3JGb3JD
U1NWYWx1ZSgnLWFwcGxlLXN5c3RlbS1sYWJlbCcsIHRydWUsIGZhbHNlKSIsICIncmdiKDI1NSwg
MjU1LCAyNTUpJyIpOwogICAgIHNob3VsZEJlKCJpbnRlcm5hbHMuc3lzdGVtQ29sb3JGb3JDU1NW
YWx1ZSgnLWFwcGxlLXN5c3RlbS1oZWFkZXItdGV4dCcsIHRydWUsIGZhbHNlKSIsICIncmdiKDI1
NSwgMjU1LCAyNTUpJyIpOwogICAgIHNob3VsZEJlKCJpbnRlcm5hbHMuc3lzdGVtQ29sb3JGb3JD
U1NWYWx1ZSgnLWFwcGxlLXN5c3RlbS1zZWNvbmRhcnktbGFiZWwnLCB0cnVlLCBmYWxzZSkiLCAi
J3JnYmEoMjM1LCAyMzUsIDI0NSwgMC42KSciKTsKLSAgICBzaG91bGRCZSgiaW50ZXJuYWxzLnN5
c3RlbUNvbG9yRm9yQ1NTVmFsdWUoJy1hcHBsZS1zeXN0ZW0tdGVydGlhcnktbGFiZWwnLCB0cnVl
LCBmYWxzZSkiLCAiJ3JnYmEoMjM1LCAyMzUsIDI0NSwgMC4yOTgpJyIpOworICAgIHNob3VsZEJl
KCJpbnRlcm5hbHMuc3lzdGVtQ29sb3JGb3JDU1NWYWx1ZSgnLWFwcGxlLXN5c3RlbS10ZXJ0aWFy
eS1sYWJlbCcsIHRydWUsIGZhbHNlKSIsICIncmdiYSgyMzUsIDIzNSwgMjQ1LCAwLjMpJyIpOwog
ICAgIHNob3VsZEJlKCJpbnRlcm5hbHMuc3lzdGVtQ29sb3JGb3JDU1NWYWx1ZSgnLWFwcGxlLXN5
c3RlbS1xdWF0ZXJuYXJ5LWxhYmVsJywgdHJ1ZSwgZmFsc2UpIiwgIidyZ2JhKDIzNSwgMjM1LCAy
NDUsIDAuMTgpJyIpOwotICAgIHNob3VsZEJlKCJpbnRlcm5hbHMuc3lzdGVtQ29sb3JGb3JDU1NW
YWx1ZSgnLWFwcGxlLXN5c3RlbS1wbGFjZWhvbGRlci10ZXh0JywgdHJ1ZSwgZmFsc2UpIiwgIidy
Z2JhKDIzNSwgMjM1LCAyNDUsIDAuMjk4KSciKTsKKyAgICBzaG91bGRCZSgiaW50ZXJuYWxzLnN5
c3RlbUNvbG9yRm9yQ1NTVmFsdWUoJy1hcHBsZS1zeXN0ZW0tcGxhY2Vob2xkZXItdGV4dCcsIHRy
dWUsIGZhbHNlKSIsICIncmdiYSgyMzUsIDIzNSwgMjQ1LCAwLjMpJyIpOwogICAgIHNob3VsZEJl
KCJpbnRlcm5hbHMuc3lzdGVtQ29sb3JGb3JDU1NWYWx1ZSgnLXdlYmtpdC1jb250cm9sLWJhY2tn
cm91bmQnLCB0cnVlLCBmYWxzZSkiLCAiJ3JnYigwLCAwLCAwKSciKTsKICAgICBzaG91bGRCZSgi
aW50ZXJuYWxzLnN5c3RlbUNvbG9yRm9yQ1NTVmFsdWUoJy1hcHBsZS1zeXN0ZW0tY29udHJvbC1i
YWNrZ3JvdW5kJywgdHJ1ZSwgZmFsc2UpIiwgIidyZ2IoMCwgMCwgMCknIik7CiAgICAgc2hvdWxk
QmUoImludGVybmFscy5zeXN0ZW1Db2xvckZvckNTU1ZhbHVlKCctYXBwbGUtc3lzdGVtLXRleHQt
YmFja2dyb3VuZCcsIHRydWUsIGZhbHNlKSIsICIncmdiKDAsIDAsIDApJyIpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>