<?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>152587</bug_id>
          
          <creation_ts>2015-12-29 11:51:42 -0800</creation_ts>
          <short_desc>Move InlineTextBox&apos;s text decoration painting to its own class.</short_desc>
          <delta_ts>2017-10-04 10:34:29 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=177883</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1151554</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-12-29 11:51:42 -0800</bug_when>
    <thetext>So that simple line layout could use it too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151555</commentid>
    <comment_count>1</comment_count>
      <attachid>267986</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-12-29 11:59:14 -0800</bug_when>
    <thetext>Created attachment 267986
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151609</commentid>
    <comment_count>2</comment_count>
      <attachid>267986</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-30 09:19:25 -0800</bug_when>
    <thetext>Comment on attachment 267986
Patch

Clearing flags on attachment: 267986

Committed r194447: &lt;http://trac.webkit.org/changeset/194447&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151610</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-30 09:19:30 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267986</attachid>
            <date>2015-12-29 11:59:14 -0800</date>
            <delta_ts>2015-12-30 09:19:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152587-20151229115839.patch</filename>
            <type>text/plain</type>
            <size>50667</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0NDI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjVlNmVmNDA0NDQ5ODBj
NzgzYzhmNDc0N2JjZGQ5ZmYwYzFmOTJjZC4uYTIyODQwMDVkMWE2MWEyNWEyYzcxNmI3MjU5YTFj
MzNlNDdjMGE5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE1LTEyLTI5ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBJbmxpbmVUZXh0Qm94
J3MgdGV4dCBkZWNvcmF0aW9uIHBhaW50aW5nIHRvIGl0cyBvd24gY2xhc3MuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI1ODcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGluIHByZXBhcmF0
aW9uIGZvciBhZGRpbmcgdGV4dCBkZWNvcmF0aW9uIHN1cHBvcnQgZm9yIHNpbXBsZSBsaW5lIGxh
eW91dC4KKworICAgICAgICBObyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHBy
b2o6CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzOgor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0
Qm94OjpwYWludERlY29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGFyZVR1cGxlcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp0cmFuc2xhdGVJbnRlcnNlY3Rpb25Qb2ludHNU
b1NraXBJbmtCb3VuZGFyaWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRyYXdTa2lw
SW5rVW5kZXJsaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRleHREZWNvcmF0aW9u
U3R5bGVUb1N0cm9rZVN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdFN0
ZXBUb0RlY29yYXRpb25MZW5ndGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c3Ryb2tl
V2F2eVRleHREZWNvcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Z2V0VGV4dERlY29y
YXRpb25Db2xvcnNBbmRTdHlsZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwOgorICAgICAgICAq
IHJlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmFkanVzdFN0ZXBUb0RlY29yYXRpb25MZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6
c3Ryb2tlV2F2eVRleHREZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVUdXBs
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNsYXRlSW50ZXJzZWN0aW9uUG9pbnRzVG9Ta2lw
SW5rQm91bmRhcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3U2tpcElua1VuZGVybGluZSk6
CisgICAgICAgIChXZWJDb3JlOjp0ZXh0RGVjb3JhdGlvblN0eWxlVG9TdHJva2VTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0RGVjb3JhdGlvblBhaW50ZXI6OlRleHREZWNvcmF0aW9uUGFp
bnRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50VGV4
dERlY29yYXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnNldElu
bGluZVRleHRCb3gpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dERlY29yYXRpb25QYWludGVyOjpz
ZXRGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHREZWNvcmF0aW9uUGFpbnRlcjo6c2V0SXNI
b3Jpem9udGFsKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHREZWNvcmF0aW9uUGFpbnRlcjo6c2V0
V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dERlY29yYXRpb25QYWludGVyOjpzZXRCYXNl
bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RGVjb3JhdGlvblBhaW50ZXI6OmFkZFRleHRT
aGFkb3cpOgorICAgICAgICAqIHN0eWxlL0lubGluZVRleHRCb3hTdHlsZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlVW5kZXJsaW5lT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OnZp
c3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMpOgorICAgICAgICAqIHN0eWxlL0lubGluZVRleHRC
b3hTdHlsZS5oOgorCiAyMDE1LTEyLTI3ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+
CiAKICAgICAgICAgU2hvdWxkIG5ldmVyIGJlIHJlYWNoZWQgZmFpbHVyZSBpbiBXZWJDb3JlOjpS
ZW5kZXJFbGVtZW50OjpjbGVhckxheW91dFJvb3RJZk5lZWRlZApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApp
bmRleCBkZTI1NTZhMmFjNmQ5ZmM1MWJhMzFkNjFiNDIyYzBlODdlYTk0OGQ5Li5mNGI0ZjQ2NTNk
MTkxYTZlNmY2OTY5Yjc1NjM1M2NmYjFmZGM0NDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAt
MjQ3Nyw2ICsyNDc3LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwCiAgICAgcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRU
ZXh0RnJhZ21lbnRJdGVyYXRvci5jcHAKICAgICByZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAK
KyAgICByZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmNwcAogICAgIHJlbmRlcmluZy9U
ZXh0UGFpbnRTdHlsZS5jcHAKICAgICByZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwCiAgICAgcmVu
ZGVyaW5nL2JyZWFrX2xpbmVzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2oKaW5kZXggYjU5YWI4NmFkODg2ODIzZTlkOGY1NzNjNzE2MzFmZDNk
ZTg5MTc0NS4uOWM1ZTlhMTg5ZTgzZjYzNGVjOGJjYjI3MGE3MjQzMDVjM2NmMTU0NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC0xMzQ4
MCw2ICsxMzQ4MCwyMCBAQAogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4
Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJlbmRlcmluZ1xUZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwIj4KKyAgICAgIDxFeGNsdWRl
ZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0Rl
YnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9t
QnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4
NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJv
fFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVp
bGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5D
YWlyb3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21C
dWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3Vm
Zml4fFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9t
QnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1
ZmZpeHx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21C
dWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8
V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWls
ZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0
JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJv
fFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVp
bGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dp
bkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJv
bUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVj
dGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJv
bUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVj
dGlvbnx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICA8L0NsQ29tcGlsZT4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xUZXh0UGFpbnRlci5jcHAiPgogICAg
ICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICAgIDxF
eGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J0RlYnVnfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgpAQCAtMjE4NDEsNiArMjE4
NTUsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN2Z1xTVkdSZXNv
dXJjZXNDYWNoZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN2
Z1xTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccmVuZGVyaW5nXFRhYmxlTGF5b3V0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcVGV4dERlY29yYXRpb25QYWludGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcVGV4dFBhaW50U3R5bGUuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xUZXh0UGFpbnRlci5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oIiAvPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
ai5maWx0ZXJzIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
ai5maWx0ZXJzCmluZGV4IDBmZTVjNGY0OWM4NDlhNWQxYWZhNjliODNkNmUzMmMzMjI2ZjdmNDAu
LjgxYmFmZDI3NTdlMjBjMDM0MzVmYWJjNmQ0NDdjNzNhNGI5YTRiNjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMK
QEAgLTI5MDAsNiArMjkwMCw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJp
bmdcc3ZnXFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcCI+CiAgICAgICA8RmlsdGVyPnJl
bmRlcmluZ1xzdmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJlbmRlcmluZ1xUZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwIj4KKyAgICAgIDxG
aWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcVGV4dFBhaW50ZXIuY3BwIj4KICAgICAgIDxGaWx0ZXI+
cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC05NjgyLDYgKzk2ODUsOSBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFRhYmxlTGF5b3V0LmgiPgog
ICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCI+
CisgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFRleHRQYWludGVyLmgiPgogICAgICAg
PEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0YTI2YmY5
MzU0MmRiZDZmNzQ1YjdkOGRiYTE2NWM4ZjgxMzBlMDE5Li42MjVhNjViN2I1MDBlMDc4OWZiOGQ0
ZjVkYTE3MjNjYmY5N2ZlOWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjg4LDYgKzIyODgsOCBAQAogCQk1ODI0QUJBQjFB
RTg0OUM4MDA5MDc0QjcgLyogUmVuZGVyVHJlZVBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODI0QUJBOTFBRTg0OUM4MDA5MDc0QjcgLyog
UmVuZGVyVHJlZVBvc2l0aW9uLmggKi87IH07CiAJCTU4MkNCMDUzMUE3OEExNEIwMEFGRkNDNCAv
KiBTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4MkNCMDUyMUE3OEExNEIwMEFGRkNDNCAv
KiBTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaCAqLzsgfTsKIAkJNTgyQ0Iw
NTUxQTc4QTJCMjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODJD
QjA1NDFBNzhBMkIyMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJh
dG9yLmNwcCAqLzsgfTsKKwkJNTgyREUzMjQxQzMwQzg1NDAwQkUwMkE4IC8qIFRleHREZWNvcmF0
aW9uUGFpbnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1ODJERTMyMjFDMzBDODU0MDBCRTAyQTggLyogVGV4dERlY29yYXRpb25QYWludGVyLmNw
cCAqLzsgfTsKKwkJNTgyREUzMjUxQzMwQzg1NDAwQkUwMkE4IC8qIFRleHREZWNvcmF0aW9uUGFp
bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTgy
REUzMjMxQzMwQzg1NDAwQkUwMkE4IC8qIFRleHREZWNvcmF0aW9uUGFpbnRlci5oICovOyB9Owog
CQk1ODVENkRGQzFBMTUzNTU2MDBGQTRGMTIgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4NUQ2REZC
MUExNTM1NTYwMEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwICovOyB9Owog
CQk1ODVENkUwMzFBMUE3OTJFMDBGQTRGMTIgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODVE
NkUwMTFBMUE3OTJFMDBGQTRGMTIgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHAg
Ki87IH07CiAJCTU4NUQ2RTA0MUExQTc5MkUwMEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxv
d0NvbnRlbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1ODVENkUwMjFBMUE3OTJFMDBGQTRGMTIgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50
cy5oICovOyB9OwpAQCAtOTczMSw2ICs5NzMzLDggQEAKIAkJNTgyNEFCQTkxQUU4NDlDODAwOTA3
NEI3IC8qIFJlbmRlclRyZWVQb3NpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW5kZXJUcmVlUG9zaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTgyQ0IwNTIxQTc4QTE0QjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJ
dGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVMaW5lTGF5
b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTgyQ0IwNTQxQTc4QTJCMjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJ
dGVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVM
aW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1ODJERTMyMjFDMzBDODU0MDBCRTAyQTggLyogVGV4dERlY29yYXRpb25QYWludGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHREZWNvcmF0aW9u
UGFpbnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU4MkRFMzIzMUMzMEM4
NTQwMEJFMDJBOCAvKiBUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGV4dERlY29yYXRpb25QYWludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTU4NUQ2REZCMUExNTM1NTYwMEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0
UmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxl
TGluZUxheW91dFJlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTg1
RDZFMDExQTFBNzkyRTAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlTGluZUxheW91dEZs
b3dDb250ZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU4NUQ2RTAyMUEx
QTc5MkUwMEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzNjk2LDYgKzIzNzAwLDggQEAKIAkJCQlB
OENGRjA0QzBBMTU0RjA5MDAwQTQyMzQgLyogVGFibGVMYXlvdXQuaCAqLywKIAkJCQkwRjU0RENF
MzE4ODEwNTFEMDAzRUVEQkIgLyogVGV4dEF1dG9TaXppbmcuY3BwICovLAogCQkJCTBGNTREQ0U0
MTg4MTA1MUQwMDNFRURCQiAvKiBUZXh0QXV0b1NpemluZy5oICovLAorCQkJCTU4MkRFMzIyMUMz
MEM4NTQwMEJFMDJBOCAvKiBUZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwICovLAorCQkJCTU4MkRF
MzIzMUMzMEM4NTQwMEJFMDJBOCAvKiBUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCAqLywKIAkJCQkx
QzE4REE1NjE4MUFGNkE1MDBDNEVGMjIgLyogVGV4dFBhaW50ZXIuY3BwICovLAogCQkJCTFDMThE
QTU3MTgxQUY2QTUwMEM0RUYyMiAvKiBUZXh0UGFpbnRlci5oICovLAogCQkJCUU0QzkxQTBGMTgw
MjM0MzkwMEExN0Y2RCAvKiBUZXh0UGFpbnRTdHlsZS5jcHAgKi8sCkBAIC0yNTc0OSw2ICsyNTc1
NSw3IEBACiAJCQkJQTg3MUQ0NTYwQTEyN0NCQzAwQjEyQTY4IC8qIEhUTUxQbHVnSW5FbGVtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0NDE1MjkyRTBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBs
dWdJbkltYWdlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThFQTdDQjAwQTE5MkI5QzAw
QThFRjVGIC8qIEhUTUxQcmVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1ODJERTMyNTFD
MzBDODU0MDBCRTAyQTggLyogVGV4dERlY29yYXRpb25QYWludGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NzdCMzg3MzEyMjg4M0U5MDBCODFGRjggLyogSFRNTFByZWxvYWRTY2FubmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNDNCRjU5OTExNDkyOTBBMDBDNjQzQ0EgLyogSFRNTFByb2dyZXNz
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkY3QTMwQTE1Njk3ODAwMEE0MjM0IC8q
IEhUTUxRdW90ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzA1NDMsNiArMzA1NTAsNyBA
QAogCQkJCTM3MUU2NUNFMTM2NjFFRUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNzE5N0YyNjE3NTY4QUU1MDA3Qjk0NDIgLyogUGFnZVRocm90dGxl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTI4NEFFQTEwNDQ3REVFMDBFQUVCNTIgLyogUGFn
ZVRyYW5zaXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1ODJERTMyNDFDMzBDODU0
MDBCRTAyQTggLyogVGV4dERlY29yYXRpb25QYWludGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTUxRTFFQ0MyMEM5MUM5MDQwMERDMjU1QiAvKiBQYWdlVVJMUmVjb3JkLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZGRDVCOTdBMTM1Q0M5NzgwMEQ1RTkyQSAvKiBQYWdlVmlzaWJpbGl0eVN0YXRl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MEEyMTJCMDI2RjcwMEMxQTM1OSAvKiBQYW5u
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5jcHAKaW5kZXggNWQyNmNiNzQ3NWM3ODE3MTdkNmU3ZWU0NTExYTNiNGI1OTE3NWVkMi4u
OTFiYjlkMTYwNTRlMWEzNmE0MDY4MjUzMTYxMGMzNGM3ZTUxZGU1MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaCIK
ICNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dERlY29yYXRpb25QYWludGVyLmgiCiAj
aW5jbHVkZSAiVGV4dFBhaW50U3R5bGUuaCIKICNpbmNsdWRlICJUZXh0UGFpbnRlci5oIgogI2lu
Y2x1ZGUgImJyZWFrX2xpbmVzLmgiCkBAIC02Nyw3MSArNjgsNiBAQCBDT01QSUxFX0FTU0VSVChz
aXplb2YoSW5saW5lVGV4dEJveCkgPT0gc2l6ZW9mKFNhbWVTaXplQXNJbmxpbmVUZXh0Qm94KSwg
SW5saW5lVAogdHlwZWRlZiBXVEY6Okhhc2hNYXA8Y29uc3QgSW5saW5lVGV4dEJveCosIExheW91
dFJlY3Q+IElubGluZVRleHRCb3hPdmVyZmxvd01hcDsKIHN0YXRpYyBJbmxpbmVUZXh0Qm94T3Zl
cmZsb3dNYXAqIGdUZXh0Qm94ZXNXaXRoT3ZlcmZsb3c7CiAKLSNpZiBFTkFCTEUoQ1NTM19URVhU
X0RFQ09SQVRJT05fU0tJUF9JTkspCi1zdGF0aWMgYm9vbCBjb21wYXJlVHVwbGVzKHN0ZDo6cGFp
cjxmbG9hdCwgZmxvYXQ+IGwsIHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IHIpCi17Ci0gICAgcmV0
dXJuIGwuZmlyc3QgPCByLmZpcnN0OwotfQotCi1zdGF0aWMgRGFzaEFycmF5IHRyYW5zbGF0ZUlu
dGVyc2VjdGlvblBvaW50c1RvU2tpcElua0JvdW5kYXJpZXMoY29uc3QgRGFzaEFycmF5JiBpbnRl
cnNlY3Rpb25zLCBmbG9hdCBkaWxhdGlvbkFtb3VudCwgZmxvYXQgdG90YWxXaWR0aCkKLXsKLSAg
ICBBU1NFUlQoIShpbnRlcnNlY3Rpb25zLnNpemUoKSAlIDIpKTsKLSAgICAKLSAgICAvLyBTdGVw
IDE6IE1ha2UgcGFpcnMgc28gd2UgY2FuIHNvcnQgYmFzZWQgb24gcmFuZ2Ugc3RhcnRpbmctcG9p
bnQuIFdlIGRpbGF0ZSB0aGUgcmFuZ2VzIGluIHRoaXMgc3RlcCBhcyB3ZWxsLgotICAgIFZlY3Rv
cjxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0Pj4gdHVwbGVzOwotICAgIGZvciAoYXV0byBpID0gaW50
ZXJzZWN0aW9ucy5iZWdpbigpOyBpICE9IGludGVyc2VjdGlvbnMuZW5kKCk7IGkrKywgaSsrKQot
ICAgICAgICB0dXBsZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKCppIC0gZGlsYXRpb25BbW91bnQs
ICooaSArIDEpICsgZGlsYXRpb25BbW91bnQpKTsKLSAgICBzdGQ6OnNvcnQodHVwbGVzLmJlZ2lu
KCksIHR1cGxlcy5lbmQoKSwgJmNvbXBhcmVUdXBsZXMpOwotCi0gICAgLy8gU3RlcCAyOiBEZWFs
IHdpdGggaW50ZXJzZWN0aW5nIHJhbmdlcy4KLSAgICBWZWN0b3I8c3RkOjpwYWlyPGZsb2F0LCBm
bG9hdD4+IGludGVybWVkaWF0ZVR1cGxlczsKLSAgICBpZiAodHVwbGVzLnNpemUoKSA+PSAyKSB7
Ci0gICAgICAgIGludGVybWVkaWF0ZVR1cGxlcy5hcHBlbmQoKnR1cGxlcy5iZWdpbigpKTsKLSAg
ICAgICAgZm9yIChhdXRvIGkgPSB0dXBsZXMuYmVnaW4oKSArIDE7IGkgIT0gdHVwbGVzLmVuZCgp
OyBpKyspIHsKLSAgICAgICAgICAgIGZsb2F0JiBmaXJzdEVuZCA9IGludGVybWVkaWF0ZVR1cGxl
cy5sYXN0KCkuc2Vjb25kOwotICAgICAgICAgICAgZmxvYXQgc2Vjb25kU3RhcnQgPSBpLT5maXJz
dDsKLSAgICAgICAgICAgIGZsb2F0IHNlY29uZEVuZCA9IGktPnNlY29uZDsKLSAgICAgICAgICAg
IGlmIChzZWNvbmRTdGFydCA8PSBmaXJzdEVuZCAmJiBzZWNvbmRFbmQgPD0gZmlyc3RFbmQpIHsK
LSAgICAgICAgICAgICAgICAvLyBJZ25vcmUgdGhpcyByYW5nZSBjb21wbGV0ZWx5Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKHNlY29uZFN0YXJ0IDw9IGZpcnN0RW5kKQotICAgICAgICAgICAgICAg
IGZpcnN0RW5kID0gc2Vjb25kRW5kOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGludGVybWVkaWF0ZVR1cGxlcy5hcHBlbmQoKmkpOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0g
ICAgICAgIGludGVybWVkaWF0ZVR1cGxlcyA9IHR1cGxlczsKLQotICAgIC8vIFN0ZXAgMzogT3V0
cHV0IHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSByYW5nZXMsIGJ1dCBvbmx5IGlmIHRoZSBzcGFjZSB3
YXJyYW50cyBhbiB1bmRlcmxpbmUuCi0gICAgZmxvYXQgcHJldmlvdXMgPSAwOwotICAgIERhc2hB
cnJheSByZXN1bHQ7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB0dXBsZSA6IGludGVybWVkaWF0ZVR1
cGxlcykgewotICAgICAgICBpZiAodHVwbGUuZmlyc3QgLSBwcmV2aW91cyA+IGRpbGF0aW9uQW1v
dW50KSB7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHByZXZpb3VzKTsKLSAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQodHVwbGUuZmlyc3QpOwotICAgICAgICB9Ci0gICAgICAgIHByZXZpb3Vz
ID0gdHVwbGUuc2Vjb25kOwotICAgIH0KLSAgICBpZiAodG90YWxXaWR0aCAtIHByZXZpb3VzID4g
ZGlsYXRpb25BbW91bnQpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChwcmV2aW91cyk7Ci0gICAg
ICAgIHJlc3VsdC5hcHBlbmQodG90YWxXaWR0aCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGRyYXdTa2lwSW5rVW5kZXJsaW5lKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHRl
eHRSdW4sIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UG9pbnQmIGxv
Y2FsT3JpZ2luLAotICAgIGZsb2F0IHVuZGVybGluZU9mZnNldCwgZmxvYXQgd2lkdGgsIGJvb2wg
aXNQcmludGluZywgYm9vbCBkb3VibGVMaW5lcykKLXsKLSAgICBGbG9hdFBvaW50IGFkanVzdGVk
TG9jYWxPcmlnaW4gPSBsb2NhbE9yaWdpbjsKLSAgICBhZGp1c3RlZExvY2FsT3JpZ2luLm1vdmUo
MCwgdW5kZXJsaW5lT2Zmc2V0KTsKLSAgICBGbG9hdFJlY3QgdW5kZXJsaW5lQm91bmRpbmdCb3gg
PSBjb250ZXh0LmNvbXB1dGVMaW5lQm91bmRzRm9yVGV4dChhZGp1c3RlZExvY2FsT3JpZ2luLCB3
aWR0aCwgaXNQcmludGluZyk7Ci0gICAgRGFzaEFycmF5IGludGVyc2VjdGlvbnMgPSBmb250LmRh
c2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdCh0ZXh0UnVuLCB0ZXh0T3JpZ2luLCB1bmRlcmxp
bmVCb3VuZGluZ0JveCk7Ci0gICAgRGFzaEFycmF5IGEgPSB0cmFuc2xhdGVJbnRlcnNlY3Rpb25Q
b2ludHNUb1NraXBJbmtCb3VuZGFyaWVzKGludGVyc2VjdGlvbnMsIHVuZGVybGluZUJvdW5kaW5n
Qm94LmhlaWdodCgpLCB3aWR0aCk7Ci0gICAgQVNTRVJUKCEoYS5zaXplKCkgJSAyKSk7Ci0gICAg
Y29udGV4dC5kcmF3TGluZXNGb3JUZXh0KGFkanVzdGVkTG9jYWxPcmlnaW4sIGEsIGlzUHJpbnRp
bmcsIGRvdWJsZUxpbmVzKTsKLX0KLSNlbmRpZgotCiBJbmxpbmVUZXh0Qm94Ojp+SW5saW5lVGV4
dEJveCgpCiB7CiAgICAgaWYgKCFrbm93blRvSGF2ZU5vT3ZlcmZsb3coKSAmJiBnVGV4dEJveGVz
V2l0aE92ZXJmbG93KQpAQCAtNzYzLDE0NCArNjk5LDYgQEAgdm9pZCBJbmxpbmVUZXh0Qm94Ojpw
YWludENvbXBvc2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEYKICAgICBjb250ZXh0LmZpbGxSZWN0KHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNXaXRoV3JpdGlu
Z0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2Nh
bGVGYWN0b3IoKSwgdGV4dFJ1bi5sdHIoKSksIGNvbXBvc2l0aW9uQ29sb3IpOwogfQogCi1zdGF0
aWMgU3Ryb2tlU3R5bGUgdGV4dERlY29yYXRpb25TdHlsZVRvU3Ryb2tlU3R5bGUoVGV4dERlY29y
YXRpb25TdHlsZSBkZWNvcmF0aW9uU3R5bGUpCi17Ci0gICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5
bGUgPSBTb2xpZFN0cm9rZTsKLSAgICBzd2l0Y2ggKGRlY29yYXRpb25TdHlsZSkgewotICAgIGNh
c2UgVGV4dERlY29yYXRpb25TdHlsZVNvbGlkOgotICAgICAgICBzdHJva2VTdHlsZSA9IFNvbGlk
U3Ryb2tlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRleHREZWNvcmF0aW9uU3R5bGVEb3Vi
bGU6Ci0gICAgICAgIHN0cm9rZVN0eWxlID0gRG91YmxlU3Ryb2tlOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFRleHREZWNvcmF0aW9uU3R5bGVEb3R0ZWQ6Ci0gICAgICAgIHN0cm9rZVN0eWxl
ID0gRG90dGVkU3Ryb2tlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRleHREZWNvcmF0aW9u
U3R5bGVEYXNoZWQ6Ci0gICAgICAgIHN0cm9rZVN0eWxlID0gRGFzaGVkU3Ryb2tlOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFRleHREZWNvcmF0aW9uU3R5bGVXYXZ5OgotICAgICAgICBzdHJv
a2VTdHlsZSA9IFdhdnlTdHJva2U7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVy
biBzdHJva2VTdHlsZTsKLX0KLQotc3RhdGljIHZvaWQgYWRqdXN0U3RlcFRvRGVjb3JhdGlvbkxl
bmd0aChmbG9hdCYgc3RlcCwgZmxvYXQmIGNvbnRyb2xQb2ludERpc3RhbmNlLCBmbG9hdCBsZW5n
dGgpCi17Ci0gICAgQVNTRVJUKHN0ZXAgPiAwKTsKLQotICAgIGlmIChsZW5ndGggPD0gMCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgc3RlcENvdW50ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGxlbmd0aCAvIHN0ZXApOwotCi0gICAgLy8gRWFjaCBCZXppZXIgY3VydmUgc3RhcnRz
IGF0IHRoZSBzYW1lIHBpeGVsIHRoYXQgdGhlIHByZXZpb3VzIG9uZQotICAgIC8vIGVuZGVkLiBX
ZSBuZWVkIHRvIHN1YnRyYWN0IChzdGVwQ291bnQgLSAxKSBwaXhlbHMgd2hlbiBjYWxjdWxhdGlu
ZyB0aGUKLSAgICAvLyBsZW5ndGggY292ZXJlZCB0byBhY2NvdW50IGZvciB0aGF0LgotICAgIGZs
b2F0IHVuY292ZXJlZExlbmd0aCA9IGxlbmd0aCAtIChzdGVwQ291bnQgKiBzdGVwIC0gKHN0ZXBD
b3VudCAtIDEpKTsKLSAgICBmbG9hdCBhZGp1c3RtZW50ID0gdW5jb3ZlcmVkTGVuZ3RoIC8gc3Rl
cENvdW50OwotICAgIHN0ZXAgKz0gYWRqdXN0bWVudDsKLSAgICBjb250cm9sUG9pbnREaXN0YW5j
ZSArPSBhZGp1c3RtZW50OwotfQotCi0vKgotICogRHJhdyBvbmUgY3ViaWMgQmV6aWVyIGN1cnZl
IGFuZCByZXBlYXQgdGhlIHNhbWUgcGF0dGVybiBsb25nIHRoZSB0aGUgZGVjb3JhdGlvbidzIGF4
aXMuCi0gKiBUaGUgc3RhcnQgcG9pbnQgKHAxKSwgY29udHJvbFBvaW50MSwgY29udHJvbFBvaW50
MiBhbmQgZW5kIHBvaW50IChwMikgb2YgdGhlIEJlemllciBjdXJ2ZQotICogZm9ybSBhIGRpYW1v
bmQgc2hhcGU6Ci0gKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwCi0gKiAg
ICAgICAgICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS18Ci0gKgotICogICAgICAgICAgICAg
ICAgICAgY29udHJvbFBvaW50MQotICogICAgICAgICAgICAgICAgICAgICAgICAgKwotICoKLSAq
Ci0gKiAgICAgICAgICAgICAgICAgIC4gLgotICogICAgICAgICAgICAgICAgLiAgICAgLgotICog
ICAgICAgICAgICAgIC4gICAgICAgICAuCi0gKiAoeDEsIHkxKSBwMSArICAgICAgICAgICAuICAg
ICAgICAgICAgKyBwMiAoeDIsIHkyKSAtIDwtLS0gRGVjb3JhdGlvbidzIGF4aXMKLSAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAuICAgICAgICAgLiAgICAgICAgICAgICAgIHwKLSAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC4gICAgIC4gICAgICAgICAgICAgICAgIHwKLSAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLiAuICAgICAgICAgICAgICAgICAgIHwgY29udHJvbFBv
aW50RGlzdGFuY2UKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICsgICAgICAgICAgICAgICAg
ICAgICAgICAgIC0KLSAqICAgICAgICAgICAgICAgICAgIGNvbnRyb2xQb2ludDIKLSAqCi0gKiAg
ICAgICAgICAgICB8LS0tLS0tLS0tLS18Ci0gKiAgICAgICAgICAgICAgICAgc3RlcAotICovCi1z
dGF0aWMgdm9pZCBzdHJva2VXYXZ5VGV4dERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVRoaWNrbmVz
cykKLXsKLSAgICBjb250ZXh0LmFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhwMSwgcDIsIHN0
cm9rZVRoaWNrbmVzcywgY29udGV4dC5zdHJva2VTdHlsZSgpKTsKLQotICAgIFBhdGggcGF0aDsK
LSAgICBwYXRoLm1vdmVUbyhwMSk7Ci0KLSAgICBmbG9hdCBjb250cm9sUG9pbnREaXN0YW5jZTsK
LSAgICBmbG9hdCBzdGVwOwotICAgIGdldFdhdnlTdHJva2VQYXJhbWV0ZXJzKHN0cm9rZVRoaWNr
bmVzcywgY29udHJvbFBvaW50RGlzdGFuY2UsIHN0ZXApOwotCi0gICAgYm9vbCBpc1ZlcnRpY2Fs
TGluZSA9IChwMS54KCkgPT0gcDIueCgpKTsKLQotICAgIGlmIChpc1ZlcnRpY2FsTGluZSkgewot
ICAgICAgICBBU1NFUlQocDEueCgpID09IHAyLngoKSk7Ci0KLSAgICAgICAgZmxvYXQgeEF4aXMg
PSBwMS54KCk7Ci0gICAgICAgIGZsb2F0IHkxOwotICAgICAgICBmbG9hdCB5MjsKLQotICAgICAg
ICBpZiAocDEueSgpIDwgcDIueSgpKSB7Ci0gICAgICAgICAgICB5MSA9IHAxLnkoKTsKLSAgICAg
ICAgICAgIHkyID0gcDIueSgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgeTEgPSBw
Mi55KCk7Ci0gICAgICAgICAgICB5MiA9IHAxLnkoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGFk
anVzdFN0ZXBUb0RlY29yYXRpb25MZW5ndGgoc3RlcCwgY29udHJvbFBvaW50RGlzdGFuY2UsIHky
IC0geTEpOwotICAgICAgICBGbG9hdFBvaW50IGNvbnRyb2xQb2ludDEoeEF4aXMgKyBjb250cm9s
UG9pbnREaXN0YW5jZSwgMCk7Ci0gICAgICAgIEZsb2F0UG9pbnQgY29udHJvbFBvaW50Mih4QXhp
cyAtIGNvbnRyb2xQb2ludERpc3RhbmNlLCAwKTsKLQotICAgICAgICBmb3IgKGZsb2F0IHkgPSB5
MTsgeSArIDIgKiBzdGVwIDw9IHkyOykgewotICAgICAgICAgICAgY29udHJvbFBvaW50MS5zZXRZ
KHkgKyBzdGVwKTsKLSAgICAgICAgICAgIGNvbnRyb2xQb2ludDIuc2V0WSh5ICsgc3RlcCk7Ci0g
ICAgICAgICAgICB5ICs9IDIgKiBzdGVwOwotICAgICAgICAgICAgcGF0aC5hZGRCZXppZXJDdXJ2
ZVRvKGNvbnRyb2xQb2ludDEsIGNvbnRyb2xQb2ludDIsIEZsb2F0UG9pbnQoeEF4aXMsIHkpKTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChwMS55KCkgPT0gcDIueSgp
KTsKLQotICAgICAgICBmbG9hdCB5QXhpcyA9IHAxLnkoKTsKLSAgICAgICAgZmxvYXQgeDE7Ci0g
ICAgICAgIGZsb2F0IHgyOwotCi0gICAgICAgIGlmIChwMS54KCkgPCBwMi54KCkpIHsKLSAgICAg
ICAgICAgIHgxID0gcDEueCgpOwotICAgICAgICAgICAgeDIgPSBwMi54KCk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICB4MSA9IHAyLngoKTsKLSAgICAgICAgICAgIHgyID0gcDEueCgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgYWRqdXN0U3RlcFRvRGVjb3JhdGlvbkxlbmd0aChzdGVw
LCBjb250cm9sUG9pbnREaXN0YW5jZSwgeDIgLSB4MSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgY29u
dHJvbFBvaW50MSgwLCB5QXhpcyArIGNvbnRyb2xQb2ludERpc3RhbmNlKTsKLSAgICAgICAgRmxv
YXRQb2ludCBjb250cm9sUG9pbnQyKDAsIHlBeGlzIC0gY29udHJvbFBvaW50RGlzdGFuY2UpOwot
Ci0gICAgICAgIGZvciAoZmxvYXQgeCA9IHgxOyB4ICsgMiAqIHN0ZXAgPD0geDI7KSB7Ci0gICAg
ICAgICAgICBjb250cm9sUG9pbnQxLnNldFgoeCArIHN0ZXApOwotICAgICAgICAgICAgY29udHJv
bFBvaW50Mi5zZXRYKHggKyBzdGVwKTsKLSAgICAgICAgICAgIHggKz0gMiAqIHN0ZXA7Ci0gICAg
ICAgICAgICBwYXRoLmFkZEJlemllckN1cnZlVG8oY29udHJvbFBvaW50MSwgY29udHJvbFBvaW50
MiwgRmxvYXRQb2ludCh4LCB5QXhpcykpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29udGV4
dC5zZXRTaG91bGRBbnRpYWxpYXModHJ1ZSk7Ci0gICAgY29udGV4dC5zdHJva2VQYXRoKHBhdGgp
OwotfQotCiB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiB0ZXh0
UnVuLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFBvaW50JiBib3hP
cmlnaW4sCiAgICAgVGV4dERlY29yYXRpb24gZGVjb3JhdGlvbiwgY29uc3QgU2hhZG93RGF0YSog
c2hhZG93KQogewpAQCAtOTIxLDEyOCArNzE5LDE2IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFp
bnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUm
CiAgICAgICAgICAgICBsb2NhbE9yaWdpbi5tb3ZlKG1fbG9naWNhbFdpZHRoIC0gd2lkdGgsIDAp
OwogICAgIH0KICAgICAKLSAgICAvLyBHZXQgdGhlIHRleHQgZGVjb3JhdGlvbiBjb2xvcnMuCi0g
ICAgQ29sb3IgdW5kZXJsaW5lQ29sb3IsIG92ZXJsaW5lQ29sb3IsIGxpbmV0aHJvdWdoQ29sb3I7
Ci0gICAgVGV4dERlY29yYXRpb25TdHlsZSB1bmRlcmxpbmVTdHlsZSwgb3ZlcmxpbmVTdHlsZSwg
bGluZXRocm91Z2hTdHlsZTsKLSAgICByZW5kZXJlcigpLmdldFRleHREZWNvcmF0aW9uQ29sb3Jz
QW5kU3R5bGVzKGRlY29yYXRpb24sIHVuZGVybGluZUNvbG9yLCBvdmVybGluZUNvbG9yLCBsaW5l
dGhyb3VnaENvbG9yLCB1bmRlcmxpbmVTdHlsZSwgb3ZlcmxpbmVTdHlsZSwgbGluZXRocm91Z2hT
dHlsZSk7Ci0gICAgaWYgKGlzRmlyc3RMaW5lKCkpCi0gICAgICAgIHJlbmRlcmVyKCkuZ2V0VGV4
dERlY29yYXRpb25Db2xvcnNBbmRTdHlsZXMoZGVjb3JhdGlvbiwgdW5kZXJsaW5lQ29sb3IsIG92
ZXJsaW5lQ29sb3IsIGxpbmV0aHJvdWdoQ29sb3IsIHVuZGVybGluZVN0eWxlLCBvdmVybGluZVN0
eWxlLCBsaW5ldGhyb3VnaFN0eWxlLCB0cnVlKTsKLSAgICAKLSAgICAvLyBVc2UgYSBzcGVjaWFs
IGZ1bmN0aW9uIGZvciB1bmRlcmxpbmVzIHRvIGdldCB0aGUgcG9zaXRpb25pbmcgZXhhY3RseSBy
aWdodC4KLSAgICBib29sIGlzUHJpbnRpbmcgPSByZW5kZXJlcigpLmRvY3VtZW50KCkucHJpbnRp
bmcoKTsKLQotICAgIGZsb2F0IHRleHREZWNvcmF0aW9uVGhpY2tuZXNzID0gdGV4dERlY29yYXRp
b25TdHJva2VUaGlja25lc3MocmVuZGVyZXIoKS5zdHlsZSgpLmZvbnRTaXplKCkpOwotICAgIGNv
bnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKHRleHREZWNvcmF0aW9uVGhpY2tuZXNzKTsKLQotICAg
IGJvb2wgbGluZXNBcmVPcGFxdWUgPSAhaXNQcmludGluZyAmJiAoIShkZWNvcmF0aW9uICYgVGV4
dERlY29yYXRpb25VbmRlcmxpbmUpIHx8IHVuZGVybGluZUNvbG9yLmFscGhhKCkgPT0gMjU1KSAm
JiAoIShkZWNvcmF0aW9uICYgVGV4dERlY29yYXRpb25PdmVybGluZSkgfHwgb3ZlcmxpbmVDb2xv
ci5hbHBoYSgpID09IDI1NSkgJiYgKCEoZGVjb3JhdGlvbiAmIFRleHREZWNvcmF0aW9uTGluZVRo
cm91Z2gpIHx8IGxpbmV0aHJvdWdoQ29sb3IuYWxwaGEoKSA9PSAyNTUpOwotCi0gICAgY29uc3Qg
UmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwotICAgIGludCBiYXNl
bGluZSA9IGxpbmVTdHlsZS5mb250TWV0cmljcygpLmFzY2VudCgpOwotCi0gICAgYm9vbCBzZXRD
bGlwID0gZmFsc2U7Ci0gICAgaW50IGV4dHJhT2Zmc2V0ID0gMDsKLSAgICBpZiAoIWxpbmVzQXJl
T3BhcXVlICYmIHNoYWRvdyAmJiBzaGFkb3ctPm5leHQoKSkgewotICAgICAgICBGbG9hdFJlY3Qg
Y2xpcFJlY3QobG9jYWxPcmlnaW4sIEZsb2F0U2l6ZSh3aWR0aCwgYmFzZWxpbmUgKyAyKSk7Ci0g
ICAgICAgIGZvciAoY29uc3QgU2hhZG93RGF0YSogcyA9IHNoYWRvdzsgczsgcyA9IHMtPm5leHQo
KSkgewotICAgICAgICAgICAgaW50IHNoYWRvd0V4dGVudCA9IHMtPnBhaW50aW5nRXh0ZW50KCk7
Ci0gICAgICAgICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdChsb2NhbE9yaWdpbiwgRmxvYXRTaXpl
KHdpZHRoLCBiYXNlbGluZSArIDIpKTsKLSAgICAgICAgICAgIHNoYWRvd1JlY3QuaW5mbGF0ZShz
aGFkb3dFeHRlbnQpOwotICAgICAgICAgICAgaW50IHNoYWRvd1ggPSBpc0hvcml6b250YWwoKSA/
IHMtPngoKSA6IHMtPnkoKTsKLSAgICAgICAgICAgIGludCBzaGFkb3dZID0gaXNIb3Jpem9udGFs
KCkgPyBzLT55KCkgOiAtcy0+eCgpOwotICAgICAgICAgICAgc2hhZG93UmVjdC5tb3ZlKHNoYWRv
d1gsIHNoYWRvd1kpOwotICAgICAgICAgICAgY2xpcFJlY3QudW5pdGUoc2hhZG93UmVjdCk7Ci0g
ICAgICAgICAgICBleHRyYU9mZnNldCA9IHN0ZDo6bWF4KGV4dHJhT2Zmc2V0LCBzdGQ6Om1heCgw
LCBzaGFkb3dZKSArIHNoYWRvd0V4dGVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGV4dC5z
YXZlKCk7Ci0gICAgICAgIGNvbnRleHQuY2xpcChjbGlwUmVjdCk7Ci0gICAgICAgIGV4dHJhT2Zm
c2V0ICs9IGJhc2VsaW5lICsgMjsKLSAgICAgICAgbG9jYWxPcmlnaW4ubW92ZSgwLCBleHRyYU9m
ZnNldCk7Ci0gICAgICAgIHNldENsaXAgPSB0cnVlOwotICAgIH0KLQotICAgIGJvb2wgc2V0U2hh
ZG93ID0gZmFsc2U7Ci0KLSAgICBkbyB7Ci0gICAgICAgIGlmIChzaGFkb3cpIHsKLSAgICAgICAg
ICAgIGlmICghc2hhZG93LT5uZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgbGFzdCBz
ZXQgb2YgbGluZXMgcGFpbnRzIG5vcm1hbGx5IGluc2lkZSB0aGUgY2xpcC4KLSAgICAgICAgICAg
ICAgICBsb2NhbE9yaWdpbi5tb3ZlKDAsIC1leHRyYU9mZnNldCk7Ci0gICAgICAgICAgICAgICAg
ZXh0cmFPZmZzZXQgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IHNoYWRvd1gg
PSBpc0hvcml6b250YWwoKSA/IHNoYWRvdy0+eCgpIDogc2hhZG93LT55KCk7Ci0gICAgICAgICAg
ICBpbnQgc2hhZG93WSA9IGlzSG9yaXpvbnRhbCgpID8gc2hhZG93LT55KCkgOiAtc2hhZG93LT54
KCk7Ci0gICAgICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUoc2hhZG93WCwgc2hh
ZG93WSAtIGV4dHJhT2Zmc2V0KSwgc2hhZG93LT5yYWRpdXMoKSwgc2hhZG93LT5jb2xvcigpKTsK
LSAgICAgICAgICAgIHNldFNoYWRvdyA9IHRydWU7Ci0gICAgICAgICAgICBzaGFkb3cgPSBzaGFk
b3ctPm5leHQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZmxvYXQgd2F2eU9mZnNl
dCA9IHdhdnlPZmZzZXRGcm9tRGVjb3JhdGlvbigpOwotCi0gICAgICAgIC8vIFRoZXNlIGRlY29y
YXRpb25zIHNob3VsZCBtYXRjaCB0aGUgdmlzdWFsIG92ZXJmbG93cyBjb21wdXRlZCBpbiB2aXN1
YWxPdmVyZmxvd0ZvckRlY29yYXRpb25zKCkKLSAgICAgICAgaWYgKGRlY29yYXRpb24gJiBUZXh0
RGVjb3JhdGlvblVuZGVybGluZSkgewotICAgICAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xv
cih1bmRlcmxpbmVDb2xvcik7Ci0gICAgICAgICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKHRl
eHREZWNvcmF0aW9uU3R5bGVUb1N0cm9rZVN0eWxlKHVuZGVybGluZVN0eWxlKSk7Ci0gICAgICAg
ICAgICBjb25zdCBpbnQgdW5kZXJsaW5lT2Zmc2V0ID0gY29tcHV0ZVVuZGVybGluZU9mZnNldChs
aW5lU3R5bGUudGV4dFVuZGVybGluZVBvc2l0aW9uKCksIGxpbmVTdHlsZS5mb250TWV0cmljcygp
LCB0aGlzLCB0ZXh0RGVjb3JhdGlvblRoaWNrbmVzcyk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAo
dW5kZXJsaW5lU3R5bGUpIHsKLSAgICAgICAgICAgIGNhc2UgVGV4dERlY29yYXRpb25TdHlsZVdh
dnk6IHsKLSAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHN0YXJ0KGxvY2FsT3JpZ2luLngoKSwg
bG9jYWxPcmlnaW4ueSgpICsgdW5kZXJsaW5lT2Zmc2V0ICsgd2F2eU9mZnNldCk7Ci0gICAgICAg
ICAgICAgICAgRmxvYXRQb2ludCBlbmQobG9jYWxPcmlnaW4ueCgpICsgd2lkdGgsIGxvY2FsT3Jp
Z2luLnkoKSArIHVuZGVybGluZU9mZnNldCArIHdhdnlPZmZzZXQpOwotICAgICAgICAgICAgICAg
IHN0cm9rZVdhdnlUZXh0RGVjb3JhdGlvbihjb250ZXh0LCBzdGFydCwgZW5kLCB0ZXh0RGVjb3Jh
dGlvblRoaWNrbmVzcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBkZWZhdWx0OgotI2lmIEVOQUJMRShDU1MzX1RFWFRfREVDT1JBVElPTl9TS0lQ
X0lOSykKLSAgICAgICAgICAgICAgICBpZiAoKGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvblNraXAo
KSA9PSBUZXh0RGVjb3JhdGlvblNraXBJbmsgfHwgbGluZVN0eWxlLnRleHREZWNvcmF0aW9uU2tp
cCgpID09IFRleHREZWNvcmF0aW9uU2tpcEF1dG8pICYmIGlzSG9yaXpvbnRhbCgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBkcmF3U2tpcElua1VuZGVybGluZShjb250ZXh0LCBmb250LCB0ZXh0
UnVuLCB0ZXh0T3JpZ2luLCBsb2NhbE9yaWdpbiwgdW5kZXJsaW5lT2Zmc2V0LCB3aWR0aCwgaXNQ
cmludGluZywgdW5kZXJsaW5lU3R5bGUgPT0gVGV4dERlY29yYXRpb25TdHlsZURvdWJsZSk7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBOZWVk
IHRvIHN1cHBvcnQgdGV4dC1kZWNvcmF0aW9uLXNraXA6IG5vbmUuCi0jZW5kaWYgLy8gQ1NTM19U
RVhUX0RFQ09SQVRJT05fU0tJUF9JTksKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kcmF3
TGluZUZvclRleHQoRmxvYXRQb2ludChsb2NhbE9yaWdpbi54KCksIGxvY2FsT3JpZ2luLnkoKSAr
IHVuZGVybGluZU9mZnNldCksIHdpZHRoLCBpc1ByaW50aW5nLCB1bmRlcmxpbmVTdHlsZSA9PSBU
ZXh0RGVjb3JhdGlvblN0eWxlRG91YmxlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBpZiAoZGVjb3JhdGlvbiAmIFRleHREZWNvcmF0aW9uT3ZlcmxpbmUpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Iob3ZlcmxpbmVDb2xvcik7Ci0gICAgICAgICAgICBj
b250ZXh0LnNldFN0cm9rZVN0eWxlKHRleHREZWNvcmF0aW9uU3R5bGVUb1N0cm9rZVN0eWxlKG92
ZXJsaW5lU3R5bGUpKTsKLSAgICAgICAgICAgIHN3aXRjaCAob3ZlcmxpbmVTdHlsZSkgewotICAg
ICAgICAgICAgY2FzZSBUZXh0RGVjb3JhdGlvblN0eWxlV2F2eTogewotICAgICAgICAgICAgICAg
IEZsb2F0UG9pbnQgc3RhcnQobG9jYWxPcmlnaW4ueCgpLCBsb2NhbE9yaWdpbi55KCkgLSB3YXZ5
T2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBGbG9hdFBvaW50IGVuZChsb2NhbE9yaWdpbi54KCkg
KyB3aWR0aCwgbG9jYWxPcmlnaW4ueSgpIC0gd2F2eU9mZnNldCk7Ci0gICAgICAgICAgICAgICAg
c3Ryb2tlV2F2eVRleHREZWNvcmF0aW9uKGNvbnRleHQsIHN0YXJ0LCBlbmQsIHRleHREZWNvcmF0
aW9uVGhpY2tuZXNzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0jaWYgRU5BQkxFKENTUzNfVEVYVF9ERUNPUkFUSU9OX1NLSVBf
SU5LKQotICAgICAgICAgICAgICAgIGlmICgobGluZVN0eWxlLnRleHREZWNvcmF0aW9uU2tpcCgp
ID09IFRleHREZWNvcmF0aW9uU2tpcEluayB8fCBsaW5lU3R5bGUudGV4dERlY29yYXRpb25Ta2lw
KCkgPT0gVGV4dERlY29yYXRpb25Ta2lwQXV0bykgJiYgaXNIb3Jpem9udGFsKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRyYXdTa2lwSW5rVW5kZXJsaW5lKGNvbnRleHQsIGZvbnQsIHRleHRS
dW4sIHRleHRPcmlnaW4sIGxvY2FsT3JpZ2luLCAwLCB3aWR0aCwgaXNQcmludGluZywgb3Zlcmxp
bmVTdHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlRG91YmxlKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gc3VwcG9ydCB0ZXh0
LWRlY29yYXRpb24tc2tpcDogbm9uZS4KLSNlbmRpZiAvLyBDU1MzX1RFWFRfREVDT1JBVElPTl9T
S0lQX0lOSwotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdMaW5lRm9yVGV4dChsb2Nh
bE9yaWdpbiwgd2lkdGgsIGlzUHJpbnRpbmcsIG92ZXJsaW5lU3R5bGUgPT0gVGV4dERlY29yYXRp
b25TdHlsZURvdWJsZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRl
Y29yYXRpb24gJiBUZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LnNldFN0cm9rZUNvbG9yKGxpbmV0aHJvdWdoQ29sb3IpOwotICAgICAgICAgICAgY29udGV4
dC5zZXRTdHJva2VTdHlsZSh0ZXh0RGVjb3JhdGlvblN0eWxlVG9TdHJva2VTdHlsZShsaW5ldGhy
b3VnaFN0eWxlKSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGxpbmV0aHJvdWdoU3R5bGUpIHsKLSAg
ICAgICAgICAgIGNhc2UgVGV4dERlY29yYXRpb25TdHlsZVdhdnk6IHsKLSAgICAgICAgICAgICAg
ICBGbG9hdFBvaW50IHN0YXJ0KGxvY2FsT3JpZ2luLngoKSwgbG9jYWxPcmlnaW4ueSgpICsgMiAq
IGJhc2VsaW5lIC8gMyk7Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCBlbmQobG9jYWxPcmln
aW4ueCgpICsgd2lkdGgsIGxvY2FsT3JpZ2luLnkoKSArIDIgKiBiYXNlbGluZSAvIDMpOwotICAg
ICAgICAgICAgICAgIHN0cm9rZVdhdnlUZXh0RGVjb3JhdGlvbihjb250ZXh0LCBzdGFydCwgZW5k
LCB0ZXh0RGVjb3JhdGlvblRoaWNrbmVzcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGNvbnRleHQu
ZHJhd0xpbmVGb3JUZXh0KEZsb2F0UG9pbnQobG9jYWxPcmlnaW4ueCgpLCBsb2NhbE9yaWdpbi55
KCkgKyAyICogYmFzZWxpbmUgLyAzKSwgd2lkdGgsIGlzUHJpbnRpbmcsIGxpbmV0aHJvdWdoU3R5
bGUgPT0gVGV4dERlY29yYXRpb25TdHlsZURvdWJsZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9IHdoaWxlIChzaGFkb3cpOwotCi0gICAgaWYgKHNldENsaXApCi0gICAgICAgIGNv
bnRleHQucmVzdG9yZSgpOwotICAgIGVsc2UgaWYgKHNldFNoYWRvdykKLSAgICAgICAgY29udGV4
dC5jbGVhclNoYWRvdygpOworICAgIGludCBiYXNlbGluZSA9IGxpbmVTdHlsZSgpLmZvbnRNZXRy
aWNzKCkuYXNjZW50KCk7CisgICAgVGV4dERlY29yYXRpb25QYWludGVyIGRlY29yYXRpb25QYWlu
dGVyKGNvbnRleHQsIGRlY29yYXRpb24sIHJlbmRlcmVyKCksIGlzRmlyc3RMaW5lKCkpOworICAg
IGRlY29yYXRpb25QYWludGVyLnNldElubGluZVRleHRCb3godGhpcyk7CisgICAgZGVjb3JhdGlv
blBhaW50ZXIuc2V0Rm9udChmb250KTsKKyAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRXaWR0aCh3
aWR0aCk7CisgICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0QmFzZWxpbmUoYmFzZWxpbmUpOworICAg
IGRlY29yYXRpb25QYWludGVyLnNldElzSG9yaXpvbnRhbChpc0hvcml6b250YWwoKSk7CisgICAg
ZGVjb3JhdGlvblBhaW50ZXIuYWRkVGV4dFNoYWRvdyhzaGFkb3cpOworCisgICAgZGVjb3JhdGlv
blBhaW50ZXIucGFpbnRUZXh0RGVjb3JhdGlvbih0ZXh0UnVuLCB0ZXh0T3JpZ2luLCBsb2NhbE9y
aWdpbik7CiB9CiAKIHN0YXRpYyBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGluZVN0
eWxlIGxpbmVTdHlsZUZvck1hcmtlclR5cGUoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFy
a2VyVHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXgg
ZGVjMzQ5YjU0ZDY5NGNjNGQ2M2UzNWM1OGZjZTk4OTkwNGRlMDhjNi4uMzk3MWVkZjUzYjk0MWNj
ZDRkOTE1OGMyMjQ1YTc0YTM0ZWE2YzJhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAKQEAgLTE4MDEsOSArMTgwMSw5IEBAIHN0YXRpYyBDb2xvciBkZWNvcmF0
aW9uQ29sb3IoUmVuZGVyU3R5bGUqIHN0eWxlKQogfQogCiB2b2lkIFJlbmRlck9iamVjdDo6Z2V0
VGV4dERlY29yYXRpb25Db2xvcnNBbmRTdHlsZXMoaW50IGRlY29yYXRpb25zLCBDb2xvciYgdW5k
ZXJsaW5lQ29sb3IsIENvbG9yJiBvdmVybGluZUNvbG9yLCBDb2xvciYgbGluZXRocm91Z2hDb2xv
ciwKLSAgICBUZXh0RGVjb3JhdGlvblN0eWxlJiB1bmRlcmxpbmVTdHlsZSwgVGV4dERlY29yYXRp
b25TdHlsZSYgb3ZlcmxpbmVTdHlsZSwgVGV4dERlY29yYXRpb25TdHlsZSYgbGluZXRocm91Z2hT
dHlsZSwgYm9vbCBmaXJzdGxpbmVTdHlsZSkKKyAgICBUZXh0RGVjb3JhdGlvblN0eWxlJiB1bmRl
cmxpbmVTdHlsZSwgVGV4dERlY29yYXRpb25TdHlsZSYgb3ZlcmxpbmVTdHlsZSwgVGV4dERlY29y
YXRpb25TdHlsZSYgbGluZXRocm91Z2hTdHlsZSwgYm9vbCBmaXJzdGxpbmVTdHlsZSkgY29uc3QK
IHsKLSAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSB0aGlzOworICAgIGNvbnN0IFJlbmRlck9i
amVjdCogY3VycmVudCA9IHRoaXM7CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBudWxs
cHRyOwogICAgIFRleHREZWNvcmF0aW9uIGN1cnJEZWNzID0gVGV4dERlY29yYXRpb25Ob25lOwog
ICAgIENvbG9yIHJlc3VsdENvbG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCmluZGV4IGEwMTE5OTI0ODcyMjM3OGVmNDA4YWM2ZGFmYzFmYTBlMTQxNGZjNjIuLjg2NDcz
MTQzMmRiMDczMDI1MmE0NmM3MWI5N2Y1ODI3Nzk2OTQwNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTcwNiw3ICs3MDYsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBDdXJzb3JEaXJlY3RpdmUgZ2V0Q3Vyc29yKGNvbnN0IExheW91dFBvaW50JiwgQ3Vyc29y
JikgY29uc3Q7CiAKICAgICB2b2lkIGdldFRleHREZWNvcmF0aW9uQ29sb3JzQW5kU3R5bGVzKGlu
dCBkZWNvcmF0aW9ucywgQ29sb3ImIHVuZGVybGluZUNvbG9yLCBDb2xvciYgb3ZlcmxpbmVDb2xv
ciwgQ29sb3ImIGxpbmV0aHJvdWdoQ29sb3IsCi0gICAgICAgIFRleHREZWNvcmF0aW9uU3R5bGUm
IHVuZGVybGluZVN0eWxlLCBUZXh0RGVjb3JhdGlvblN0eWxlJiBvdmVybGluZVN0eWxlLCBUZXh0
RGVjb3JhdGlvblN0eWxlJiBsaW5ldGhyb3VnaFN0eWxlLCBib29sIGZpcnN0bGluZVN0eWxlID0g
ZmFsc2UpOworICAgICAgICBUZXh0RGVjb3JhdGlvblN0eWxlJiB1bmRlcmxpbmVTdHlsZSwgVGV4
dERlY29yYXRpb25TdHlsZSYgb3ZlcmxpbmVTdHlsZSwgVGV4dERlY29yYXRpb25TdHlsZSYgbGlu
ZXRocm91Z2hTdHlsZSwgYm9vbCBmaXJzdGxpbmVTdHlsZSA9IGZhbHNlKSBjb25zdDsKIAogICAg
IC8vIFJldHVybiB0aGUgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCBpbiB0aGUgY29udGFpbmVyIGNo
YWluIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyB0aGlzIG9iamVjdCwgb3IgbnVs
bHB0cgogICAgIC8vIGlmIHBhaW50aW5nIGlzIHJvb3QtcmVsYXRpdmUuIFRoaXMgaXMgdGhlIGNv
bnRhaW5lciB0aGF0IHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlICdmb3JSZXBhaW50JwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAKaW5kZXggYjhiYWQ2
NDEzOTMzMzE2MGU5ZmNhNjhiMzg4M2ZmMmJiY2FiNmVjZi4uOGYzYmFlODJiNjdmMmM0NGE0ZGMw
YmY2MzMyODA1OTI4ZDU0MDI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcmluZ0FsbEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyaW5nQWxsSW5PbmUuY3BwCkBAIC0xNDYsNiArMTQ2LDcgQEAKICNpbmNsdWRlICJTaW1wbGVM
aW5lTGF5b3V0UmVzb2x2ZXIuY3BwIgogI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRUZXh0RnJh
Z21lbnRJdGVyYXRvci5jcHAiCiAjaW5jbHVkZSAiVGV4dEF1dG9zaXplci5jcHAiCisjaW5jbHVk
ZSAiVGV4dERlY29yYXRpb25QYWludGVyLmNwcCIKICNpbmNsdWRlICJUZXh0UGFpbnRTdHlsZS5j
cHAiCiAjaW5jbHVkZSAiVGV4dFBhaW50ZXIuY3BwIgogI2luY2x1ZGUgImJyZWFrX2xpbmVzLmNw
cCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBh
aW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGIxZDY1ZTVjOTU3OTA0MmNjYmMwODg2MjgyMjEyYzI3MmIxZDcx
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVjb3Jh
dGlvblBhaW50ZXIuY3BwCkBAIC0wLDAgKzEsMzUwIEBACisvKgorICogKEMpIDE5OTkgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBr
ZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHREZWNvcmF0
aW9uUGFpbnRlci5oIgorCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbmxpbmVUZXh0Qm94U3R5bGUuaCIKKyNpbmNsdWRl
ICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKKyNpbmNsdWRlICJTaGFk
b3dEYXRhLmgiCisjaW5jbHVkZSAiVGV4dFJ1bi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0YXRpYyB2b2lkIGFkanVzdFN0ZXBUb0RlY29yYXRpb25MZW5ndGgoZmxvYXQmIHN0ZXAsIGZs
b2F0JiBjb250cm9sUG9pbnREaXN0YW5jZSwgZmxvYXQgbGVuZ3RoKQoreworICAgIEFTU0VSVChz
dGVwID4gMCk7CisKKyAgICBpZiAobGVuZ3RoIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAg
IHVuc2lnbmVkIHN0ZXBDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGggLyBzdGVw
KTsKKworICAgIC8vIEVhY2ggQmV6aWVyIGN1cnZlIHN0YXJ0cyBhdCB0aGUgc2FtZSBwaXhlbCB0
aGF0IHRoZSBwcmV2aW91cyBvbmUKKyAgICAvLyBlbmRlZC4gV2UgbmVlZCB0byBzdWJ0cmFjdCAo
c3RlcENvdW50IC0gMSkgcGl4ZWxzIHdoZW4gY2FsY3VsYXRpbmcgdGhlCisgICAgLy8gbGVuZ3Ro
IGNvdmVyZWQgdG8gYWNjb3VudCBmb3IgdGhhdC4KKyAgICBmbG9hdCB1bmNvdmVyZWRMZW5ndGgg
PSBsZW5ndGggLSAoc3RlcENvdW50ICogc3RlcCAtIChzdGVwQ291bnQgLSAxKSk7CisgICAgZmxv
YXQgYWRqdXN0bWVudCA9IHVuY292ZXJlZExlbmd0aCAvIHN0ZXBDb3VudDsKKyAgICBzdGVwICs9
IGFkanVzdG1lbnQ7CisgICAgY29udHJvbFBvaW50RGlzdGFuY2UgKz0gYWRqdXN0bWVudDsKK30K
KworLyoKKyAqIERyYXcgb25lIGN1YmljIEJlemllciBjdXJ2ZSBhbmQgcmVwZWF0IHRoZSBzYW1l
IHBhdHRlcm4gbG9uZyB0aGUgdGhlIGRlY29yYXRpb24ncyBheGlzLgorICogVGhlIHN0YXJ0IHBv
aW50IChwMSksIGNvbnRyb2xQb2ludDEsIGNvbnRyb2xQb2ludDIgYW5kIGVuZCBwb2ludCAocDIp
IG9mIHRoZSBCZXppZXIgY3VydmUKKyAqIGZvcm0gYSBkaWFtb25kIHNoYXBlOgorICoKKyAqICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcAorICogICAgICAgICAgICAgICAgICAgICAg
ICAgfC0tLS0tLS0tLS0tfAorICoKKyAqICAgICAgICAgICAgICAgICAgIGNvbnRyb2xQb2ludDEK
KyAqICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAqCisgKgorICogICAgICAgICAgICAgICAg
ICAuIC4KKyAqICAgICAgICAgICAgICAgIC4gICAgIC4KKyAqICAgICAgICAgICAgICAuICAgICAg
ICAgLgorICogKHgxLCB5MSkgcDEgKyAgICAgICAgICAgLiAgICAgICAgICAgICsgcDIgKHgyLCB5
MikgLSA8LS0tIERlY29yYXRpb24ncyBheGlzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAg
LiAgICAgICAgIC4gICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuICAgICAuICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC4gLiAgICAgICAgICAgICAgICAgICB8IGNvbnRyb2xQb2ludERpc3RhbmNlCisgKiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAg
ICAgICAgICAgICAgICAgICAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAtCisgKiAgICAg
ICAgICAgICAgICAgICBjb250cm9sUG9pbnQyCisgKgorICogICAgICAgICAgICAgfC0tLS0tLS0t
LS0tfAorICogICAgICAgICAgICAgICAgIHN0ZXAKKyAqLworc3RhdGljIHZvaWQgc3Ryb2tlV2F2
eVRleHREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2lu
dCYgc3RhcnQsIGNvbnN0IEZsb2F0UG9pbnQmIGVuZCwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQor
eworICAgIEZsb2F0UG9pbnQgcDEgPSBzdGFydDsKKyAgICBGbG9hdFBvaW50IHAyID0gZW5kOwor
ICAgIGNvbnRleHQuYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKHAxLCBwMiwgc3Ryb2tlVGhp
Y2tuZXNzLCBjb250ZXh0LnN0cm9rZVN0eWxlKCkpOworCisgICAgUGF0aCBwYXRoOworICAgIHBh
dGgubW92ZVRvKHAxKTsKKworICAgIGZsb2F0IGNvbnRyb2xQb2ludERpc3RhbmNlOworICAgIGZs
b2F0IHN0ZXA7CisgICAgZ2V0V2F2eVN0cm9rZVBhcmFtZXRlcnMoc3Ryb2tlVGhpY2tuZXNzLCBj
b250cm9sUG9pbnREaXN0YW5jZSwgc3RlcCk7CisKKyAgICBib29sIGlzVmVydGljYWxMaW5lID0g
KHAxLngoKSA9PSBwMi54KCkpOworCisgICAgaWYgKGlzVmVydGljYWxMaW5lKSB7CisgICAgICAg
IEFTU0VSVChwMS54KCkgPT0gcDIueCgpKTsKKworICAgICAgICBmbG9hdCB4QXhpcyA9IHAxLngo
KTsKKyAgICAgICAgZmxvYXQgeTE7CisgICAgICAgIGZsb2F0IHkyOworCisgICAgICAgIGlmIChw
MS55KCkgPCBwMi55KCkpIHsKKyAgICAgICAgICAgIHkxID0gcDEueSgpOworICAgICAgICAgICAg
eTIgPSBwMi55KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB5MSA9IHAyLnkoKTsK
KyAgICAgICAgICAgIHkyID0gcDEueSgpOworICAgICAgICB9CisKKyAgICAgICAgYWRqdXN0U3Rl
cFRvRGVjb3JhdGlvbkxlbmd0aChzdGVwLCBjb250cm9sUG9pbnREaXN0YW5jZSwgeTIgLSB5MSk7
CisgICAgICAgIEZsb2F0UG9pbnQgY29udHJvbFBvaW50MSh4QXhpcyArIGNvbnRyb2xQb2ludERp
c3RhbmNlLCAwKTsKKyAgICAgICAgRmxvYXRQb2ludCBjb250cm9sUG9pbnQyKHhBeGlzIC0gY29u
dHJvbFBvaW50RGlzdGFuY2UsIDApOworCisgICAgICAgIGZvciAoZmxvYXQgeSA9IHkxOyB5ICsg
MiAqIHN0ZXAgPD0geTI7KSB7CisgICAgICAgICAgICBjb250cm9sUG9pbnQxLnNldFkoeSArIHN0
ZXApOworICAgICAgICAgICAgY29udHJvbFBvaW50Mi5zZXRZKHkgKyBzdGVwKTsKKyAgICAgICAg
ICAgIHkgKz0gMiAqIHN0ZXA7CisgICAgICAgICAgICBwYXRoLmFkZEJlemllckN1cnZlVG8oY29u
dHJvbFBvaW50MSwgY29udHJvbFBvaW50MiwgRmxvYXRQb2ludCh4QXhpcywgeSkpOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHAxLnkoKSA9PSBwMi55KCkpOworCisg
ICAgICAgIGZsb2F0IHlBeGlzID0gcDEueSgpOworICAgICAgICBmbG9hdCB4MTsKKyAgICAgICAg
ZmxvYXQgeDI7CisKKyAgICAgICAgaWYgKHAxLngoKSA8IHAyLngoKSkgeworICAgICAgICAgICAg
eDEgPSBwMS54KCk7CisgICAgICAgICAgICB4MiA9IHAyLngoKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHgxID0gcDIueCgpOworICAgICAgICAgICAgeDIgPSBwMS54KCk7CisgICAg
ICAgIH0KKworICAgICAgICBhZGp1c3RTdGVwVG9EZWNvcmF0aW9uTGVuZ3RoKHN0ZXAsIGNvbnRy
b2xQb2ludERpc3RhbmNlLCB4MiAtIHgxKTsKKyAgICAgICAgRmxvYXRQb2ludCBjb250cm9sUG9p
bnQxKDAsIHlBeGlzICsgY29udHJvbFBvaW50RGlzdGFuY2UpOworICAgICAgICBGbG9hdFBvaW50
IGNvbnRyb2xQb2ludDIoMCwgeUF4aXMgLSBjb250cm9sUG9pbnREaXN0YW5jZSk7CisKKyAgICAg
ICAgZm9yIChmbG9hdCB4ID0geDE7IHggKyAyICogc3RlcCA8PSB4MjspIHsKKyAgICAgICAgICAg
IGNvbnRyb2xQb2ludDEuc2V0WCh4ICsgc3RlcCk7CisgICAgICAgICAgICBjb250cm9sUG9pbnQy
LnNldFgoeCArIHN0ZXApOworICAgICAgICAgICAgeCArPSAyICogc3RlcDsKKyAgICAgICAgICAg
IHBhdGguYWRkQmV6aWVyQ3VydmVUbyhjb250cm9sUG9pbnQxLCBjb250cm9sUG9pbnQyLCBGbG9h
dFBvaW50KHgsIHlBeGlzKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb250ZXh0LnNldFNo
b3VsZEFudGlhbGlhcyh0cnVlKTsKKyAgICBjb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7Cit9CisK
KyNpZiBFTkFCTEUoQ1NTM19URVhUX0RFQ09SQVRJT05fU0tJUF9JTkspCitzdGF0aWMgYm9vbCBj
b21wYXJlVHVwbGVzKHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IGwsIHN0ZDo6cGFpcjxmbG9hdCwg
ZmxvYXQ+IHIpCit7CisgICAgcmV0dXJuIGwuZmlyc3QgPCByLmZpcnN0OworfQorCitzdGF0aWMg
RGFzaEFycmF5IHRyYW5zbGF0ZUludGVyc2VjdGlvblBvaW50c1RvU2tpcElua0JvdW5kYXJpZXMo
Y29uc3QgRGFzaEFycmF5JiBpbnRlcnNlY3Rpb25zLCBmbG9hdCBkaWxhdGlvbkFtb3VudCwgZmxv
YXQgdG90YWxXaWR0aCkKK3sKKyAgICBBU1NFUlQoIShpbnRlcnNlY3Rpb25zLnNpemUoKSAlIDIp
KTsKKyAgICAKKyAgICAvLyBTdGVwIDE6IE1ha2UgcGFpcnMgc28gd2UgY2FuIHNvcnQgYmFzZWQg
b24gcmFuZ2Ugc3RhcnRpbmctcG9pbnQuIFdlIGRpbGF0ZSB0aGUgcmFuZ2VzIGluIHRoaXMgc3Rl
cCBhcyB3ZWxsLgorICAgIFZlY3RvcjxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0Pj4gdHVwbGVzOwor
ICAgIGZvciAoYXV0byBpID0gaW50ZXJzZWN0aW9ucy5iZWdpbigpOyBpICE9IGludGVyc2VjdGlv
bnMuZW5kKCk7IGkrKywgaSsrKQorICAgICAgICB0dXBsZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KCppIC0gZGlsYXRpb25BbW91bnQsICooaSArIDEpICsgZGlsYXRpb25BbW91bnQpKTsKKyAgICBz
dGQ6OnNvcnQodHVwbGVzLmJlZ2luKCksIHR1cGxlcy5lbmQoKSwgJmNvbXBhcmVUdXBsZXMpOwor
CisgICAgLy8gU3RlcCAyOiBEZWFsIHdpdGggaW50ZXJzZWN0aW5nIHJhbmdlcy4KKyAgICBWZWN0
b3I8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IGludGVybWVkaWF0ZVR1cGxlczsKKyAgICBpZiAo
dHVwbGVzLnNpemUoKSA+PSAyKSB7CisgICAgICAgIGludGVybWVkaWF0ZVR1cGxlcy5hcHBlbmQo
KnR1cGxlcy5iZWdpbigpKTsKKyAgICAgICAgZm9yIChhdXRvIGkgPSB0dXBsZXMuYmVnaW4oKSAr
IDE7IGkgIT0gdHVwbGVzLmVuZCgpOyBpKyspIHsKKyAgICAgICAgICAgIGZsb2F0JiBmaXJzdEVu
ZCA9IGludGVybWVkaWF0ZVR1cGxlcy5sYXN0KCkuc2Vjb25kOworICAgICAgICAgICAgZmxvYXQg
c2Vjb25kU3RhcnQgPSBpLT5maXJzdDsKKyAgICAgICAgICAgIGZsb2F0IHNlY29uZEVuZCA9IGkt
PnNlY29uZDsKKyAgICAgICAgICAgIGlmIChzZWNvbmRTdGFydCA8PSBmaXJzdEVuZCAmJiBzZWNv
bmRFbmQgPD0gZmlyc3RFbmQpIHsKKyAgICAgICAgICAgICAgICAvLyBJZ25vcmUgdGhpcyByYW5n
ZSBjb21wbGV0ZWx5CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNlY29uZFN0YXJ0IDw9IGZpcnN0
RW5kKQorICAgICAgICAgICAgICAgIGZpcnN0RW5kID0gc2Vjb25kRW5kOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGludGVybWVkaWF0ZVR1cGxlcy5hcHBlbmQoKmkpOworICAg
ICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGludGVybWVkaWF0ZVR1cGxlcyA9IHR1cGxlczsK
KworICAgIC8vIFN0ZXAgMzogT3V0cHV0IHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSByYW5nZXMsIGJ1
dCBvbmx5IGlmIHRoZSBzcGFjZSB3YXJyYW50cyBhbiB1bmRlcmxpbmUuCisgICAgZmxvYXQgcHJl
dmlvdXMgPSAwOworICAgIERhc2hBcnJheSByZXN1bHQ7CisgICAgZm9yIChjb25zdCBhdXRvJiB0
dXBsZSA6IGludGVybWVkaWF0ZVR1cGxlcykgeworICAgICAgICBpZiAodHVwbGUuZmlyc3QgLSBw
cmV2aW91cyA+IGRpbGF0aW9uQW1vdW50KSB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHBy
ZXZpb3VzKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodHVwbGUuZmlyc3QpOworICAgICAg
ICB9CisgICAgICAgIHByZXZpb3VzID0gdHVwbGUuc2Vjb25kOworICAgIH0KKyAgICBpZiAodG90
YWxXaWR0aCAtIHByZXZpb3VzID4gZGlsYXRpb25BbW91bnQpIHsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZChwcmV2aW91cyk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQodG90YWxXaWR0aCk7CisgICAg
fQorICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGRyYXdTa2lwSW5r
VW5kZXJsaW5lKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZv
bnQsIGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4s
IGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsT3JpZ2luLAorICAgIGZsb2F0IHVuZGVybGluZU9mZnNl
dCwgZmxvYXQgd2lkdGgsIGJvb2wgaXNQcmludGluZywgYm9vbCBkb3VibGVMaW5lcykKK3sKKyAg
ICBGbG9hdFBvaW50IGFkanVzdGVkTG9jYWxPcmlnaW4gPSBsb2NhbE9yaWdpbjsKKyAgICBhZGp1
c3RlZExvY2FsT3JpZ2luLm1vdmUoMCwgdW5kZXJsaW5lT2Zmc2V0KTsKKyAgICBGbG9hdFJlY3Qg
dW5kZXJsaW5lQm91bmRpbmdCb3ggPSBjb250ZXh0LmNvbXB1dGVMaW5lQm91bmRzRm9yVGV4dChh
ZGp1c3RlZExvY2FsT3JpZ2luLCB3aWR0aCwgaXNQcmludGluZyk7CisgICAgRGFzaEFycmF5IGlu
dGVyc2VjdGlvbnMgPSBmb250LmRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdCh0ZXh0UnVu
LCB0ZXh0T3JpZ2luLCB1bmRlcmxpbmVCb3VuZGluZ0JveCk7CisgICAgRGFzaEFycmF5IGEgPSB0
cmFuc2xhdGVJbnRlcnNlY3Rpb25Qb2ludHNUb1NraXBJbmtCb3VuZGFyaWVzKGludGVyc2VjdGlv
bnMsIHVuZGVybGluZUJvdW5kaW5nQm94LmhlaWdodCgpLCB3aWR0aCk7CisgICAgQVNTRVJUKCEo
YS5zaXplKCkgJSAyKSk7CisgICAgY29udGV4dC5kcmF3TGluZXNGb3JUZXh0KGFkanVzdGVkTG9j
YWxPcmlnaW4sIGEsIGlzUHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKK30KKyNlbmRpZgorCitzdGF0
aWMgU3Ryb2tlU3R5bGUgdGV4dERlY29yYXRpb25TdHlsZVRvU3Ryb2tlU3R5bGUoVGV4dERlY29y
YXRpb25TdHlsZSBkZWNvcmF0aW9uU3R5bGUpCit7CisgICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5
bGUgPSBTb2xpZFN0cm9rZTsKKyAgICBzd2l0Y2ggKGRlY29yYXRpb25TdHlsZSkgeworICAgIGNh
c2UgVGV4dERlY29yYXRpb25TdHlsZVNvbGlkOgorICAgICAgICBzdHJva2VTdHlsZSA9IFNvbGlk
U3Ryb2tlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHREZWNvcmF0aW9uU3R5bGVEb3Vi
bGU6CisgICAgICAgIHN0cm9rZVN0eWxlID0gRG91YmxlU3Ryb2tlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFRleHREZWNvcmF0aW9uU3R5bGVEb3R0ZWQ6CisgICAgICAgIHN0cm9rZVN0eWxl
ID0gRG90dGVkU3Ryb2tlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHREZWNvcmF0aW9u
U3R5bGVEYXNoZWQ6CisgICAgICAgIHN0cm9rZVN0eWxlID0gRGFzaGVkU3Ryb2tlOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFRleHREZWNvcmF0aW9uU3R5bGVXYXZ5OgorICAgICAgICBzdHJv
a2VTdHlsZSA9IFdhdnlTdHJva2U7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVy
biBzdHJva2VTdHlsZTsKK30KKworVGV4dERlY29yYXRpb25QYWludGVyOjpUZXh0RGVjb3JhdGlv
blBhaW50ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBUZXh0RGVjb3JhdGlvbiBkZWNvcmF0
aW9uLCBjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJlciwgYm9vbCBpc0ZpcnN0TGluZSkKKyAgICA6
IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9kZWNvcmF0aW9uKGRlY29yYXRpb24pCisgICAg
LCBtX3dhdnlPZmZzZXQod2F2eU9mZnNldEZyb21EZWNvcmF0aW9uKCkpCisgICAgLCBtX2lzUHJp
bnRpbmcocmVuZGVyZXIuZG9jdW1lbnQoKS5wcmludGluZygpKQorICAgICwgbV9saW5lU3R5bGUo
aXNGaXJzdExpbmUgPyByZW5kZXJlci5maXJzdExpbmVTdHlsZSgpIDogcmVuZGVyZXIuc3R5bGUo
KSkKK3sKKyAgICByZW5kZXJlci5nZXRUZXh0RGVjb3JhdGlvbkNvbG9yc0FuZFN0eWxlcyhtX2Rl
Y29yYXRpb24sIG1fdW5kZXJsaW5lQ29sb3IsIG1fb3ZlcmxpbmVDb2xvciwgbV9saW5ldGhyb3Vn
aENvbG9yLCBtX3VuZGVybGluZVN0eWxlLCBtX292ZXJsaW5lU3R5bGUsCisgICAgICAgIG1fbGlu
ZXRocm91Z2hTdHlsZSk7CisgICAgaWYgKGlzRmlyc3RMaW5lKSB7CisgICAgICAgIHJlbmRlcmVy
LmdldFRleHREZWNvcmF0aW9uQ29sb3JzQW5kU3R5bGVzKG1fZGVjb3JhdGlvbiwgbV91bmRlcmxp
bmVDb2xvciwgbV9vdmVybGluZUNvbG9yLCBtX2xpbmV0aHJvdWdoQ29sb3IsCisgICAgICAgICAg
ICBtX3VuZGVybGluZVN0eWxlLCBtX292ZXJsaW5lU3R5bGUsIG1fbGluZXRocm91Z2hTdHlsZSwg
dHJ1ZSk7CisgICAgfQorfQorCit2b2lkIFRleHREZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRUZXh0
RGVjb3JhdGlvbihjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0
T3JpZ2luLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4pCit7CisgICAgQVNTRVJUKG1fZm9u
dCk7CisgICAgZmxvYXQgdGV4dERlY29yYXRpb25UaGlja25lc3MgPSB0ZXh0RGVjb3JhdGlvblN0
cm9rZVRoaWNrbmVzcyhtX2xpbmVTdHlsZS5mb250U2l6ZSgpKTsKKyAgICBtX2NvbnRleHQuc2V0
U3Ryb2tlVGhpY2tuZXNzKHRleHREZWNvcmF0aW9uVGhpY2tuZXNzKTsKKyAgICBGbG9hdFBvaW50
IGxvY2FsT3JpZ2luID0gYm94T3JpZ2luOworCisgICAgYXV0byBwYWludERlY29yYXRpb24gPSBb
Jl0oVGV4dERlY29yYXRpb25TdHlsZSBzdHlsZSwgQ29sb3IgY29sb3IsIFN0cm9rZVN0eWxlIHN0
cm9rZVN0eWxlLAorICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBzdGFydCwgY29uc3QgRmxvYXRQ
b2ludCYgZW5kLCBpbnQgb2Zmc2V0KSB7CisgICAgICAgIG1fY29udGV4dC5zZXRTdHJva2VDb2xv
cihjb2xvcik7CisgICAgICAgIG1fY29udGV4dC5zZXRTdHJva2VTdHlsZShzdHJva2VTdHlsZSk7
CisKKyAgICAgICAgaWYgKHN0eWxlID09IFRleHREZWNvcmF0aW9uU3R5bGVXYXZ5KSB7CisgICAg
ICAgICAgICBzdHJva2VXYXZ5VGV4dERlY29yYXRpb24obV9jb250ZXh0LCBzdGFydCwgZW5kLCB0
ZXh0RGVjb3JhdGlvblRoaWNrbmVzcyk7CisgICAgICAgIH0gZWxzZSBpZiAobV9kZWNvcmF0aW9u
ICYgVGV4dERlY29yYXRpb25VbmRlcmxpbmUgfHwgbV9kZWNvcmF0aW9uICYgVGV4dERlY29yYXRp
b25PdmVybGluZSkgeworI2lmIEVOQUJMRShDU1MzX1RFWFRfREVDT1JBVElPTl9TS0lQX0lOSykK
KyAgICAgICAgICAgIGlmICgobV9saW5lU3R5bGUudGV4dERlY29yYXRpb25Ta2lwKCkgPT0gVGV4
dERlY29yYXRpb25Ta2lwSW5rIHx8IG1fbGluZVN0eWxlLnRleHREZWNvcmF0aW9uU2tpcCgpID09
IFRleHREZWNvcmF0aW9uU2tpcEF1dG8pICYmIG1faXNIb3Jpem9udGFsKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFtX2NvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICAgICAgICAg
ICAgICBkcmF3U2tpcElua1VuZGVybGluZShtX2NvbnRleHQsICptX2ZvbnQsIHRleHRSdW4sIHRl
eHRPcmlnaW4sIGxvY2FsT3JpZ2luLCBvZmZzZXQsIG1fd2lkdGgsIG1faXNQcmludGluZywgc3R5
bGUgPT0gVGV4dERlY29yYXRpb25TdHlsZURvdWJsZSk7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBzdXBwb3J0IHRleHQtZGVjb3JhdGlvbi1z
a2lwOiBub25lLgorI2VuZGlmCisgICAgICAgICAgICAgICAgbV9jb250ZXh0LmRyYXdMaW5lRm9y
VGV4dChGbG9hdFBvaW50KGxvY2FsT3JpZ2luLngoKSwgbG9jYWxPcmlnaW4ueSgpICsgb2Zmc2V0
KSwgbV93aWR0aCwgbV9pc1ByaW50aW5nLCBzdHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlRG91
YmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJU
KG1fZGVjb3JhdGlvbiAmIFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gpOworICAgICAgICAgICAg
bV9jb250ZXh0LmRyYXdMaW5lRm9yVGV4dChGbG9hdFBvaW50KGxvY2FsT3JpZ2luLngoKSwgbG9j
YWxPcmlnaW4ueSgpICsgMiAqIG1fYmFzZWxpbmUgLyAzKSwgbV93aWR0aCwgbV9pc1ByaW50aW5n
LCBzdHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlRG91YmxlKTsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICBib29sIGxpbmVzQXJlT3BhcXVlID0gIW1faXNQcmludGluZworICAgICAgICAmJiAo
IShtX2RlY29yYXRpb24gJiBUZXh0RGVjb3JhdGlvblVuZGVybGluZSkgfHwgbV91bmRlcmxpbmVD
b2xvci5hbHBoYSgpID09IDI1NSkKKyAgICAgICAgJiYgKCEobV9kZWNvcmF0aW9uICYgVGV4dERl
Y29yYXRpb25PdmVybGluZSkgfHwgbV9vdmVybGluZUNvbG9yLmFscGhhKCkgPT0gMjU1KQorICAg
ICAgICAmJiAoIShtX2RlY29yYXRpb24gJiBUZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKSB8fCBt
X2xpbmV0aHJvdWdoQ29sb3IuYWxwaGEoKSA9PSAyNTUpOworCisgICAgaW50IGV4dHJhT2Zmc2V0
ID0gMDsKKyAgICBib29sIGNsaXBwaW5nID0gIWxpbmVzQXJlT3BhcXVlICYmIG1fc2hhZG93ICYm
IG1fc2hhZG93LT5uZXh0KCk7CisgICAgaWYgKGNsaXBwaW5nKSB7CisgICAgICAgIEZsb2F0UmVj
dCBjbGlwUmVjdChsb2NhbE9yaWdpbiwgRmxvYXRTaXplKG1fd2lkdGgsIG1fYmFzZWxpbmUgKyAy
KSk7CisgICAgICAgIGZvciAoY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gbV9zaGFkb3c7IHNo
YWRvdzsgc2hhZG93ID0gc2hhZG93LT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGludCBzaGFkb3dF
eHRlbnQgPSBzaGFkb3ctPnBhaW50aW5nRXh0ZW50KCk7CisgICAgICAgICAgICBGbG9hdFJlY3Qg
c2hhZG93UmVjdChsb2NhbE9yaWdpbiwgRmxvYXRTaXplKG1fd2lkdGgsIG1fYmFzZWxpbmUgKyAy
KSk7CisgICAgICAgICAgICBzaGFkb3dSZWN0LmluZmxhdGUoc2hhZG93RXh0ZW50KTsKKyAgICAg
ICAgICAgIGludCBzaGFkb3dYID0gbV9pc0hvcml6b250YWwgPyBzaGFkb3ctPngoKSA6IHNoYWRv
dy0+eSgpOworICAgICAgICAgICAgaW50IHNoYWRvd1kgPSBtX2lzSG9yaXpvbnRhbCA/IHNoYWRv
dy0+eSgpIDogLXNoYWRvdy0+eCgpOworICAgICAgICAgICAgc2hhZG93UmVjdC5tb3ZlKHNoYWRv
d1gsIHNoYWRvd1kpOworICAgICAgICAgICAgY2xpcFJlY3QudW5pdGUoc2hhZG93UmVjdCk7Cisg
ICAgICAgICAgICBleHRyYU9mZnNldCA9IHN0ZDo6bWF4KGV4dHJhT2Zmc2V0LCBzdGQ6Om1heCgw
LCBzaGFkb3dZKSArIHNoYWRvd0V4dGVudCk7CisgICAgICAgIH0KKyAgICAgICAgbV9jb250ZXh0
LnNhdmUoKTsKKyAgICAgICAgbV9jb250ZXh0LmNsaXAoY2xpcFJlY3QpOworICAgICAgICBleHRy
YU9mZnNldCArPSBtX2Jhc2VsaW5lICsgMjsKKyAgICAgICAgbG9jYWxPcmlnaW4ubW92ZSgwLCBl
eHRyYU9mZnNldCk7CisgICAgfQorCisgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gbV9z
aGFkb3c7CisgICAgZG8geworICAgICAgICBpZiAoc2hhZG93KSB7CisgICAgICAgICAgICBpZiAo
IXNoYWRvdy0+bmV4dCgpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGxhc3Qgc2V0IG9mIGxp
bmVzIHBhaW50cyBub3JtYWxseSBpbnNpZGUgdGhlIGNsaXAuCisgICAgICAgICAgICAgICAgbG9j
YWxPcmlnaW4ubW92ZSgwLCAtZXh0cmFPZmZzZXQpOworICAgICAgICAgICAgICAgIGV4dHJhT2Zm
c2V0ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBzaGFkb3dYID0gbV9pc0hv
cml6b250YWwgPyBzaGFkb3ctPngoKSA6IHNoYWRvdy0+eSgpOworICAgICAgICAgICAgaW50IHNo
YWRvd1kgPSBtX2lzSG9yaXpvbnRhbCA/IHNoYWRvdy0+eSgpIDogLXNoYWRvdy0+eCgpOworICAg
ICAgICAgICAgbV9jb250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUoc2hhZG93WCwgc2hhZG93WSAt
IGV4dHJhT2Zmc2V0KSwgc2hhZG93LT5yYWRpdXMoKSwgc2hhZG93LT5jb2xvcigpKTsKKyAgICAg
ICAgICAgIHNoYWRvdyA9IHNoYWRvdy0+bmV4dCgpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBUaGVzZSBkZWNvcmF0aW9ucyBzaG91bGQgbWF0Y2ggdGhlIHZpc3VhbCBvdmVyZmxv
d3MgY29tcHV0ZWQgaW4gdmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucygpCisgICAgICAgIGlm
IChtX2RlY29yYXRpb24gJiBUZXh0RGVjb3JhdGlvblVuZGVybGluZSkgeworICAgICAgICAgICAg
Y29uc3QgaW50IG9mZnNldCA9IGNvbXB1dGVVbmRlcmxpbmVPZmZzZXQobV9saW5lU3R5bGUudGV4
dFVuZGVybGluZVBvc2l0aW9uKCksIG1fbGluZVN0eWxlLmZvbnRNZXRyaWNzKCksIG1faW5saW5l
VGV4dEJveCwgdGV4dERlY29yYXRpb25UaGlja25lc3MpOworICAgICAgICAgICAgRmxvYXRQb2lu
dCBzdGFydChsb2NhbE9yaWdpbi54KCksIGxvY2FsT3JpZ2luLnkoKSArIG9mZnNldCArIG1fd2F2
eU9mZnNldCk7CisgICAgICAgICAgICBGbG9hdFBvaW50IGVuZChsb2NhbE9yaWdpbi54KCkgKyBt
X3dpZHRoLCBsb2NhbE9yaWdpbi55KCkgKyBvZmZzZXQgKyBtX3dhdnlPZmZzZXQpOworICAgICAg
ICAgICAgcGFpbnREZWNvcmF0aW9uKG1fdW5kZXJsaW5lU3R5bGUsIG1fdW5kZXJsaW5lQ29sb3Is
IHRleHREZWNvcmF0aW9uU3R5bGVUb1N0cm9rZVN0eWxlKG1fdW5kZXJsaW5lU3R5bGUpLCBzdGFy
dCwgZW5kLCBvZmZzZXQpOworICAgICAgICB9CisgICAgICAgIGlmIChtX2RlY29yYXRpb24gJiBU
ZXh0RGVjb3JhdGlvbk92ZXJsaW5lKSB7CisgICAgICAgICAgICBGbG9hdFBvaW50IHN0YXJ0KGxv
Y2FsT3JpZ2luLngoKSwgbG9jYWxPcmlnaW4ueSgpIC0gbV93YXZ5T2Zmc2V0KTsKKyAgICAgICAg
ICAgIEZsb2F0UG9pbnQgZW5kKGxvY2FsT3JpZ2luLngoKSArIG1fd2lkdGgsIGxvY2FsT3JpZ2lu
LnkoKSAtIG1fd2F2eU9mZnNldCk7CisgICAgICAgICAgICBwYWludERlY29yYXRpb24obV9vdmVy
bGluZVN0eWxlLCBtX292ZXJsaW5lQ29sb3IsIHRleHREZWNvcmF0aW9uU3R5bGVUb1N0cm9rZVN0
eWxlKG1fb3ZlcmxpbmVTdHlsZSksIHN0YXJ0LCBlbmQsIDApOworICAgICAgICB9CisgICAgICAg
IGlmIChtX2RlY29yYXRpb24gJiBUZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKSB7CisgICAgICAg
ICAgICBGbG9hdFBvaW50IHN0YXJ0KGxvY2FsT3JpZ2luLngoKSwgbG9jYWxPcmlnaW4ueSgpICsg
MiAqIG1fYmFzZWxpbmUgLyAzKTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgZW5kKGxvY2FsT3Jp
Z2luLngoKSArIG1fd2lkdGgsIGxvY2FsT3JpZ2luLnkoKSArIDIgKiBtX2Jhc2VsaW5lIC8gMyk7
CisgICAgICAgICAgICBwYWludERlY29yYXRpb24obV9saW5ldGhyb3VnaFN0eWxlLCBtX2xpbmV0
aHJvdWdoQ29sb3IsIHRleHREZWNvcmF0aW9uU3R5bGVUb1N0cm9rZVN0eWxlKG1fbGluZXRocm91
Z2hTdHlsZSksIHN0YXJ0LCBlbmQsIDApOworICAgICAgICB9CisgICAgfSB3aGlsZSAoc2hhZG93
KTsKKworICAgIGlmIChjbGlwcGluZykKKyAgICAgICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKKyAg
ICBlbHNlIGlmIChtX3NoYWRvdykKKyAgICAgICAgbV9jb250ZXh0LmNsZWFyU2hhZG93KCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMjBhN2U2M2ZkYjkzZGMwYmUx
ZGY3ODFkNDA5NzZkN2ZlYjY0Yjc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisg
KiAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogKEMpIDIwMDAgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFRleHREZWNvcmF0aW9uUGFp
bnRlcl9oCisjZGVmaW5lIFRleHREZWNvcmF0aW9uUGFpbnRlcl9oCisKKyNpbmNsdWRlICJDb2xv
ci5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0
YW50cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnRDYXNjYWRlOworY2xh
c3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW5saW5lVGV4dEJveDsKK2NsYXNzIFJlbmRlclN0
eWxlOworY2xhc3MgUmVuZGVyVGV4dDsKK2NsYXNzIFNoYWRvd0RhdGE7CitjbGFzcyBUZXh0UnVu
OworICAgIAorY2xhc3MgVGV4dERlY29yYXRpb25QYWludGVyIHsKK3B1YmxpYzoKKyAgICBUZXh0
RGVjb3JhdGlvblBhaW50ZXIoR3JhcGhpY3NDb250ZXh0JiwgVGV4dERlY29yYXRpb24sIGNvbnN0
IFJlbmRlclRleHQmLCBib29sIGlzRmlyc3RMaW5lKTsKKyAgICAKKyAgICB2b2lkIHNldElubGlu
ZVRleHRCb3goY29uc3QgSW5saW5lVGV4dEJveCogaW5saW5lVGV4dEJveCkgeyBtX2lubGluZVRl
eHRCb3ggPSBpbmxpbmVUZXh0Qm94OyB9CisgICAgdm9pZCBzZXRGb250KGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250KSB7IG1fZm9udCA9ICZmb250OyB9CisgICAgdm9pZCBzZXRJc0hvcml6b250YWwo
Ym9vbCBpc0hvcml6b250YWwpIHsgbV9pc0hvcml6b250YWwgPSBpc0hvcml6b250YWw7IH0KKyAg
ICB2b2lkIHNldFdpZHRoKGZsb2F0IHdpZHRoKSB7IG1fd2lkdGggPSB3aWR0aDsgfQorICAgIHZv
aWQgc2V0QmFzZWxpbmUoaW50IGJhc2VsaW5lKSB7IG1fYmFzZWxpbmUgPSBiYXNlbGluZTsgfQor
ICAgIHZvaWQgYWRkVGV4dFNoYWRvdyhjb25zdCBTaGFkb3dEYXRhKiB0ZXh0U2hhZG93KSB7IG1f
c2hhZG93ID0gdGV4dFNoYWRvdzsgfQorCisgICAgdm9pZCBwYWludFRleHREZWNvcmF0aW9uKGNv
bnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFBv
aW50JiBib3hPcmlnaW4pOworICAgICAgICAKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0
JiBtX2NvbnRleHQ7CisgICAgVGV4dERlY29yYXRpb24gbV9kZWNvcmF0aW9uOworICAgIGludCBt
X3dhdnlPZmZzZXQgeyAwIH07CisgICAgYm9vbCBtX2lzUHJpbnRpbmcgeyBmYWxzZSB9OworICAg
IGZsb2F0IG1fd2lkdGggeyAwIH07CisgICAgaW50IG1fYmFzZWxpbmUgeyAwIH07CisgICAgRmxv
YXRQb2ludCBtX2JveE9yaWdpbjsKKyAgICBib29sIG1faXNIb3Jpem9udGFsIHsgdHJ1ZSB9Owor
ICAgIGNvbnN0IFNoYWRvd0RhdGEqIG1fc2hhZG93IHsgbnVsbHB0ciB9OworICAgIGNvbnN0IElu
bGluZVRleHRCb3gqIG1faW5saW5lVGV4dEJveCB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBGb250
Q2FzY2FkZSogbV9mb250IHsgbnVsbHB0ciB9OworICAgIAorICAgIENvbG9yIG1fdW5kZXJsaW5l
Q29sb3I7CisgICAgQ29sb3IgbV9vdmVybGluZUNvbG9yOworICAgIENvbG9yIG1fbGluZXRocm91
Z2hDb2xvcjsKKyAgICBUZXh0RGVjb3JhdGlvblN0eWxlIG1fdW5kZXJsaW5lU3R5bGU7CisgICAg
VGV4dERlY29yYXRpb25TdHlsZSBtX292ZXJsaW5lU3R5bGU7CisgICAgVGV4dERlY29yYXRpb25T
dHlsZSBtX2xpbmV0aHJvdWdoU3R5bGU7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIG1fbGluZVN0
eWxlOworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFRleHRE
ZWNvcmF0aW9uUGFpbnRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Jbmxp
bmVUZXh0Qm94U3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0
eWxlLmNwcAppbmRleCBhZDk3MjE4YmM4YmQzZWU4NTQxOGI3MDQ4OTEzMDhmMDE3OGEyNTZmLi4y
ODgyM2VmOTFhMzJmOTkyOWM1MWE3YzU5Y2Y3NjBlMDI3NDA2NmJlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIAotaW50IGNvbXB1dGVVbmRlcmxpbmVPZmZzZXQoVGV4dFVu
ZGVybGluZVBvc2l0aW9uIHVuZGVybGluZVBvc2l0aW9uLCBjb25zdCBGb250TWV0cmljcyYgZm9u
dE1ldHJpY3MsIElubGluZVRleHRCb3gqIGlubGluZVRleHRCb3gsIGludCB0ZXh0RGVjb3JhdGlv
blRoaWNrbmVzcykKK2ludCBjb21wdXRlVW5kZXJsaW5lT2Zmc2V0KFRleHRVbmRlcmxpbmVQb3Np
dGlvbiB1bmRlcmxpbmVQb3NpdGlvbiwgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzLCBj
b25zdCBJbmxpbmVUZXh0Qm94KiBpbmxpbmVUZXh0Qm94LCBpbnQgdGV4dERlY29yYXRpb25UaGlj
a25lc3MpCiB7CiAgICAgLy8gVGhpcyByZXByZXNlbnRzIHRoZSBnYXAgYmV0d2VlbiB0aGUgYmFz
ZWxpbmUgYW5kIHRoZSBjbG9zZXN0IGVkZ2Ugb2YgdGhlIHVuZGVybGluZS4KICAgICBpbnQgZ2Fw
ID0gc3RkOjptYXg8aW50PigxLCBjZWlsZih0ZXh0RGVjb3JhdGlvblRoaWNrbmVzcyAvIDIuMCkp
OwpAQCAtOTcsNyArOTcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZXh0ZW5kSW50VG9GbG9hdChp
bnQmIGV4dGVuZE1lLCBmbG9hdCBleHRlbmRUbykKICAgICBleHRlbmRNZSA9IHN0ZDo6bWF4KGV4
dGVuZE1lLCBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGV4dGVuZFRvKSkpOwogfQogCi1HbHlwaE92
ZXJmbG93IHZpc3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyU3R5bGUmIGxp
bmVTdHlsZSwgSW5saW5lVGV4dEJveCogaW5saW5lVGV4dEJveCkKK0dseXBoT3ZlcmZsb3cgdmlz
dWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlLCBj
b25zdCBJbmxpbmVUZXh0Qm94KiBpbmxpbmVUZXh0Qm94KQogewogICAgIEFTU0VSVCghaW5saW5l
VGV4dEJveCB8fCBpbmxpbmVUZXh0Qm94LT5saW5lU3R5bGUoKSA9PSBsaW5lU3R5bGUpOwogICAg
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuaAppbmRleCA2MzZiNjNj
ZGU5MWViMDMzYWJhZDNlZWIwOTk0ZmIxNDI4ZmRiYjA3Li44MDMwNzA1MDI1ODg1MmZlNWFlYzcw
NTM2M2U0NWZlYTk4NTBjMzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Jbmxp
bmVUZXh0Qm94U3R5bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94
U3R5bGUuaApAQCAtNDQsOSArNDQsOSBAQCBpbmxpbmUgZmxvYXQgd2F2eU9mZnNldEZyb21EZWNv
cmF0aW9uKCkKICAgICByZXR1cm4gMjsKIH0KIAotR2x5cGhPdmVyZmxvdyB2aXN1YWxPdmVyZmxv
d0ZvckRlY29yYXRpb25zKGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUsIElubGluZVRleHRC
b3gqKTsKK0dseXBoT3ZlcmZsb3cgdmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyhjb25zdCBS
ZW5kZXJTdHlsZSYgbGluZVN0eWxlLCBjb25zdCBJbmxpbmVUZXh0Qm94Kik7CiB2b2lkIGdldFdh
dnlTdHJva2VQYXJhbWV0ZXJzKGZsb2F0IHN0cm9rZVRoaWNrbmVzcywgZmxvYXQmIGNvbnRyb2xQ
b2ludERpc3RhbmNlLCBmbG9hdCYgc3RlcCk7Ci1pbnQgY29tcHV0ZVVuZGVybGluZU9mZnNldChU
ZXh0VW5kZXJsaW5lUG9zaXRpb24sIGNvbnN0IEZvbnRNZXRyaWNzJiwgSW5saW5lVGV4dEJveCos
IGludCB0ZXh0RGVjb3JhdGlvblRoaWNrbmVzcyk7CitpbnQgY29tcHV0ZVVuZGVybGluZU9mZnNl
dChUZXh0VW5kZXJsaW5lUG9zaXRpb24sIGNvbnN0IEZvbnRNZXRyaWNzJiwgY29uc3QgSW5saW5l
VGV4dEJveCosIGludCB0ZXh0RGVjb3JhdGlvblRoaWNrbmVzcyk7CiAgICAgCiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>