<?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>79141</bug_id>
          
          <creation_ts>2012-02-21 12:31:52 -0800</creation_ts>
          <short_desc>[Texmap] Move all TextureMapper related files to graphics/texmap</short_desc>
          <delta_ts>2012-02-21 20:02:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Yael">yael</assigned_to>
          <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>561134</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-21 12:31:52 -0800</bug_when>
    <thetext>Right now TextureMapperGL and TextureMapperShaderManager are in the graphics/opengl directory, which is not the right place for them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561483</commentid>
    <comment_count>1</comment_count>
      <attachid>128108</attachid>
    <who name="Yael">yael</who>
    <bug_when>2012-02-21 19:06:16 -0800</bug_when>
    <thetext>Created attachment 128108
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561533</commentid>
    <comment_count>2</comment_count>
      <attachid>128108</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-21 20:02:13 -0800</bug_when>
    <thetext>Comment on attachment 128108
Patch.

Clearing flags on attachment: 128108

Committed r108438: &lt;http://trac.webkit.org/changeset/108438&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561534</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-21 20:02:18 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128108</attachid>
            <date>2012-02-21 19:06:16 -0800</date>
            <delta_ts>2012-02-21 20:02:13 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>79141.patch</filename>
            <type>text/plain</type>
            <size>94749</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEyLTAyLTIxICBZYWVsIEFo
YXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBbVGV4bWFwXSBNb3ZlIGFs
bCBUZXh0dXJlTWFwcGVyIHJlbGF0ZWQgZmlsZXMgdG8gZ3JhcGhpY3MvdGV4bWFwCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTE0MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgVGV4dHVyZU1hb29l
ckdMIGFuZCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlciBmaWxlcyB0byBncmFwaGljcy90ZXht
YXAuCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0
LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVy
R0wuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L1RleHR1cmVNYXBwZXJHTC5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oLgorCiAyMDEyLTAyLTIxICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRnJhbWUgYW5kIE5hdmlnYXRvciBz
aG91bGRuJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBHZW9sb2NhdGlvbgpJbmRleDogU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMDg0MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC01NzgzLDEwICs1NzgzLDEwIEBA
IGVuZGlmICAjIEVORCBVU0VfVEVYVFVSRV9NQVBQRVJfQ0FJUk8KIAogaWYgVVNFX1RFWFRVUkVf
TUFQUEVSX0dMCiB3ZWJjb3JlX3NvdXJjZXMgKz0gXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmggXAotCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmggXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5jcHAgXApJbmRleDog
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpCShyZXZpc2lvbiAxMDg0MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CSh3b3JraW5nIGNvcHkpCkBAIC0zOTc0LDEyICszOTc0LDEyIEBAIGNvbnRhaW5zKENPTkZJRywg
dGV4bWFwKSB7CiAKICAgICAhd2luMzItKjpjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbCkgewog
ICAgICAgICBIRUFERVJTICs9IFwKLSAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9UZXh0dXJlTWFwcGVyR0wuaCBcCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaAorICAgICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oIFwKKyAgICAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCiAKICAgICAgICAgU09V
UkNFUyArPSBcCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1h
cHBlckdMLmNwcCBcCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBcCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCiAKICAgICAgICAgQ09ORklH
ICs9IG9wZW5nbC1zaGltcwogICAgICAgICBERUZJTkVTICs9IFdURl9VU0VfVEVYVFVSRV9NQVBQ
RVJfR0wKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDEwODQyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzQ5MSwxMCArMzQ5MSw2IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0wuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcCcsCi0gICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oJywKLSAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwJywK
LSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3Bl
blR5cGVTYW5pdGl6ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
dHlwZS9PcGVuVHlwZVNhbml0aXplci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAnLApAQCAtMzU5OSwxMSArMzU5NSwxNSBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5p
bWF0aW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyQmFja2luZ1N0b3JlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VC
dWZmZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJMYXllci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyTGF5ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRy
YW5zZm9ybS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
SWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5jcHAnLApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L1RleHR1cmVNYXBwZXJHTC5jcHAJKHJldmlzaW9uIDEwODQyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDczMiArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgot
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0j
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUGFzc093bkFycmF5UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi0jaWYgUExBVEZPUk0oUVQpCi0jaWYg
UVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDUsIDAsIDApCi0jaW5jbHVkZSA8UVBsYXRm
b3JtUGl4bWFwPgotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoVEVYTUFQX09QRU5HTF9F
U18yKQotI2luY2x1ZGUgPEVHTC9lZ2wuaD4KLSNlbGlmIE9TKFdJTkRPV1MpCi0jaW5jbHVkZSA8
d2luZG93cy5oPgotI2VsaWYgT1MoTUFDX09TX1gpCi0jaW5jbHVkZSA8QUdML2FnbC5oPgotI2Vs
aWYgZGVmaW5lZChYUF9VTklYKQotI2luY2x1ZGUgPEdML2dseC5oPgotI2VuZGlmCi0KLSNpZiBV
U0UoQ0FJUk8pCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJSZWZQdHJD
YWlyby5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8d3RmL0J5dGVBcnJheS5oPgot
I2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotaW5saW5lIHN0YXRpYyB2b2lkIGRlYnVn
R0xDb21tYW5kKGNvbnN0IGNoYXIqIGNvbW1hbmQsIGludCBsaW5lKQotewotICAgIGNvbnN0IEdM
ZW51bSBlcnIgPSBnbEdldEVycm9yKCk7Ci0gICAgaWYgKCFlcnIpCi0gICAgICAgIHJldHVybjsK
LSAgICBXVEZSZXBvcnRFcnJvcihfX0ZJTEVfXywgbGluZSwgV1RGX1BSRVRUWV9GVU5DVElPTiwg
IltUZXh0dXJlTWFwcGVyIEdMXSBDb21tYW5kIGZhaWxlZDogJXMgKCV4KVxuIiwgY29tbWFuZCwg
ZXJyKTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotI2lmbmRlZiBOREVCVUcKLSNk
ZWZpbmUgR0xfQ01EKHgpIHt4LCBkZWJ1Z0dMQ29tbWFuZCgjeCwgX19MSU5FX18pOyB9Ci0jZWxz
ZQotI2RlZmluZSBHTF9DTUQoeCkgeDsKLSNlbmRpZgotCi1zdHJ1Y3QgVGV4dHVyZU1hcHBlckdM
RGF0YSB7Ci0gICAgc3RydWN0IFNoYXJlZEdMRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJl
ZEdMRGF0YT4gewotI2lmIGRlZmluZWQoVEVYTUFQX09QRU5HTF9FU18yKQotICAgICAgICB0eXBl
ZGVmIEVHTENvbnRleHQgR0xDb250ZXh0OwotICAgICAgICBzdGF0aWMgR0xDb250ZXh0IGdldEN1
cnJlbnRHTENvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZWdsR2V0Q3Vy
cmVudENvbnRleHQoKTsKLSAgICAgICAgfQotI2VsaWYgT1MoV0lORE9XUykKLSAgICAgICAgdHlw
ZWRlZiBIR0xSQyBHTENvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVu
dEdMQ29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB3Z2xHZXRDdXJyZW50
Q29udGV4dCgpOwotICAgICAgICB9Ci0jZWxpZiBPUyhNQUNfT1NfWCkKLSAgICAgICAgdHlwZWRl
ZiBBR0xDb250ZXh0IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJy
ZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFnbEdldEN1cnJl
bnRDb250ZXh0KCk7Ci0gICAgICAgIH0KLSNlbGlmIGRlZmluZWQoWFBfVU5JWCkKLSAgICAgICAg
dHlwZWRlZiBHTFhDb250ZXh0IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBn
ZXRDdXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsWEdl
dEN1cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIC8vIERlZmF1bHQg
aW1wbGVtZW50YXRpb24gZm9yIHVua25vd24gb3BlbmdsLgotICAgICAgICAvLyBSZXR1cm5zIGFs
d2F5cyBpbmNyZWFzaW5nIG51bWJlciBhbmQgZGlzYWJsZXMgR0wgY29udGV4dCBkYXRhIHNoYXJp
bmcuCi0gICAgICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IEdMQ29udGV4dDsKLSAgICAgICAgc3Rh
dGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAg
ICAgc3RhdGljIEdMQ29udGV4dCBkdW1teUNvbnRleHRDb3VudGVyID0gMDsKLSAgICAgICAgICAg
IHJldHVybiArK2R1bW15Q29udGV4dENvdW50ZXI7Ci0gICAgICAgIH0KLQotI2VuZGlmCi0KLSAg
ICAgICAgdHlwZWRlZiBIYXNoTWFwPEdMQ29udGV4dCwgU2hhcmVkR0xEYXRhKj4gR0xDb250ZXh0
RGF0YU1hcDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dERhdGFNYXAmIGdsQ29udGV4dERhdGFN
YXAoKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0aWMgR0xDb250ZXh0RGF0YU1hcCBtYXA7
Ci0gICAgICAgICAgICByZXR1cm4gbWFwOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U2hhcmVkR0xEYXRhPiBjdXJyZW50U2hhcmVkR0xEYXRhKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgR0xDb250ZXh0IGN1cnJlbnRHTENvbmV4dCA9IGdldEN1cnJlbnRHTENvbnRl
eHQoKTsKLSAgICAgICAgICAgIEdMQ29udGV4dERhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gZ2xDb250
ZXh0RGF0YU1hcCgpLmZpbmQoY3VycmVudEdMQ29uZXh0KTsKLSAgICAgICAgICAgIGlmIChpdCAh
PSBnbENvbnRleHREYXRhTWFwKCkuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5z
ZWNvbmQ7Ci0KLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkR0xEYXRhKGdl
dEN1cnJlbnRHTENvbnRleHQoKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHN0ZW5jaWxJ
bmRleDsKLSAgICAgICAgVmVjdG9yPEludFJlY3Q+IGNsaXBTdGFjazsKLSAgICAgICAgVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIgdGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI7Ci0KLSAgICAg
ICAgU2hhcmVkR0xEYXRhKEdMQ29udGV4dCBnbENvbnRleHQpCi0gICAgICAgICAgICA6IHN0ZW5j
aWxJbmRleCgxKQotICAgICAgICB7Ci0gICAgICAgICAgICBnbENvbnRleHREYXRhTWFwKCkuYWRk
KGdsQ29udGV4dCwgdGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICB+U2hhcmVkR0xEYXRhKCkK
LSAgICAgICAgewotICAgICAgICAgICAgR0xDb250ZXh0RGF0YU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gZ2xDb250ZXh0RGF0YU1hcCgpLmVuZCgpOwotICAgICAgICAgICAgR0xDb250ZXh0RGF0
YU1hcDo6aXRlcmF0b3IgaXQ7Ci0gICAgICAgICAgICBmb3IgKGl0ID0gZ2xDb250ZXh0RGF0YU1h
cCgpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIGlmIChpdC0+
c2Vjb25kID09IHRoaXMpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBBU1NFUlQoaXQgIT0gZW5kKTsKLSAgICAgICAgICAgIGdsQ29udGV4
dERhdGFNYXAoKS5yZW1vdmUoaXQpOwotICAgICAgICB9Ci0KLSAgICB9OwotCi0gICAgU2hhcmVk
R0xEYXRhJiBzaGFyZWRHTERhdGEoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICoobV9z
aGFyZWRHTERhdGEuZ2V0KCkpOwotICAgIH0KLQotICAgIHZvaWQgaW5pdFN0ZW5jaWwoKQotICAg
IHsKLSAgICAgICAgaWYgKGRpZE1vZGlmeVN0ZW5jaWwpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGdsQ2xlYXJTdGVuY2lsKDApOwotICAgICAgICBnbENsZWFyKEdMX1NURU5DSUxfQlVG
RkVSX0JJVCk7Ci0gICAgICAgIGRpZE1vZGlmeVN0ZW5jaWwgPSB0cnVlOwotICAgIH0KLQotICAg
IFRleHR1cmVNYXBwZXJHTERhdGEoKQotICAgICAgICA6IHByZXZpb3VzUHJvZ3JhbSgwKQotICAg
ICAgICAsIGRpZE1vZGlmeVN0ZW5jaWwoZmFsc2UpCi0gICAgICAgICwgcHJldmlvdXNTY2lzc29y
U3RhdGUoMCkKLSAgICAgICAgLCBwcmV2aW91c0RlcHRoU3RhdGUoMCkKLSAgICAgICAgLCBtX3No
YXJlZEdMRGF0YShUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OmN1cnJlbnRTaGFy
ZWRHTERhdGEoKSkKLSAgICB7IH0KLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHByb2plY3Rp
b25NYXRyaXg7Ci0gICAgR0xpbnQgcHJldmlvdXNQcm9ncmFtOwotICAgIGJvb2wgZGlkTW9kaWZ5
U3RlbmNpbDsKLSAgICBHTGludCBwcmV2aW91c1NjaXNzb3JTdGF0ZTsKLSAgICBHTGludCBwcmV2
aW91c0RlcHRoU3RhdGU7Ci0gICAgR0xpbnQgdmlld3BvcnRbNF07Ci0gICAgUmVmUHRyPFNoYXJl
ZEdMRGF0YT4gbV9zaGFyZWRHTERhdGE7Ci19OwotCi1jbGFzcyBCaXRtYXBUZXh0dXJlR0wgOiBw
dWJsaWMgQml0bWFwVGV4dHVyZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3ko
KTsKLSAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBp
c1ZhbGlkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlc2V0KCk7Ci0gICAgdm9pZCBi
aW5kKCk7Ci0gICAgfkJpdG1hcFRleHR1cmVHTCgpIHsgZGVzdHJveSgpOyB9Ci0gICAgdmlydHVh
bCB1aW50MzJfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLSAgICBpbmxpbmUgRmxvYXRT
aXplIHJlbGF0aXZlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRpdmVTaXplOyB9Ci0gICAg
dm9pZCBzZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXJHTCogdGV4bWFwKSB7IG1fdGV4dHVy
ZU1hcHBlciA9IHRleG1hcDsgfQotICAgIHZvaWQgdXBkYXRlQ29udGVudHMoSW1hZ2UqLCBjb25z
dCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYsIFBpeGVsRm9ybWF0KTsKLSAgICB2b2lkIHVwZGF0
ZUNvbnRlbnRzKGNvbnN0IHZvaWQqLCBjb25zdCBJbnRSZWN0Jik7Ci0KLXByaXZhdGU6Ci0gICAg
R0x1aW50IG1faWQ7Ci0gICAgRmxvYXRTaXplIG1fcmVsYXRpdmVTaXplOwotICAgIEludFNpemUg
bV90ZXh0dXJlU2l6ZTsKLSAgICBJbnRSZWN0IG1fZGlydHlSZWN0OwotICAgIEdMdWludCBtX2Zi
bzsKLSAgICBHTHVpbnQgbV9yYm87Ci0gICAgYm9vbCBtX3N1cmZhY2VOZWVkc1Jlc2V0OwotICAg
IFRleHR1cmVNYXBwZXJHTCogbV90ZXh0dXJlTWFwcGVyOwotICAgIEJpdG1hcFRleHR1cmVHTCgp
Ci0gICAgICAgIDogbV9pZCgwKQotICAgICAgICAsIG1fZmJvKDApCi0gICAgICAgICwgbV9yYm8o
MCkKLSAgICAgICAgLCBtX3N1cmZhY2VOZWVkc1Jlc2V0KHRydWUpCi0gICAgICAgICwgbV90ZXh0
dXJlTWFwcGVyKDApCi0gICAgewotICAgIH0KLQotICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFw
cGVyR0w7Ci19OwotCi1UZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCgpCi0gICAgOiBt
X2RhdGEobmV3IFRleHR1cmVNYXBwZXJHTERhdGEpCi0gICAgLCBtX2NvbnRleHQoMCkKLXsKLX0K
LQotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRpbmcoKQotewotICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IG5vIEdMIGVycm9yIGNvZGUgc3RheXMgZnJvbSBwcmV2aW91cyBvcGVyYXRpb25z
LgotICAgIGdsR2V0RXJyb3IoKTsKLQotICAgIGlmICghaW5pdGlhbGl6ZU9wZW5HTFNoaW1zKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGdsR2V0SW50ZWdlcnYoR0xfQ1VSUkVOVF9QUk9HUkFN
LCAmZGF0YSgpLnByZXZpb3VzUHJvZ3JhbSk7Ci0gICAgZGF0YSgpLnByZXZpb3VzU2Npc3NvclN0
YXRlID0gZ2xJc0VuYWJsZWQoR0xfU0NJU1NPUl9URVNUKTsKLSAgICBkYXRhKCkucHJldmlvdXNE
ZXB0aFN0YXRlID0gZ2xJc0VuYWJsZWQoR0xfREVQVEhfVEVTVCk7Ci0gICAgZ2xEaXNhYmxlKEdM
X0RFUFRIX1RFU1QpOwotICAgIGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7Ci0jaWYgUExBVEZP
Uk0oUVQpCi0gICAgaWYgKG1fY29udGV4dCkgewotICAgICAgICBRUGFpbnRlciogcGFpbnRlciA9
IG1fY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgICAgIHBhaW50ZXItPnNhdmUoKTsK
LSAgICAgICAgcGFpbnRlci0+YmVnaW5OYXRpdmVQYWludGluZygpOwotICAgIH0KLSNlbmRpZgot
ICAgIGRhdGEoKS5kaWRNb2RpZnlTdGVuY2lsID0gZmFsc2U7Ci0gICAgZ2xEZXB0aE1hc2soMCk7
Ci0gICAgZ2xHZXRJbnRlZ2VydihHTF9WSUVXUE9SVCwgZGF0YSgpLnZpZXdwb3J0KTsKLSAgICBi
aW5kU3VyZmFjZSgwKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50aW5nKCkK
LXsKLSAgICBpZiAoZGF0YSgpLmRpZE1vZGlmeVN0ZW5jaWwpIHsKLSAgICAgICAgZ2xDbGVhclN0
ZW5jaWwoMSk7Ci0gICAgICAgIGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJfQklUKTsKLSAgICB9
Ci0KLSAgICBnbFVzZVByb2dyYW0oZGF0YSgpLnByZXZpb3VzUHJvZ3JhbSk7Ci0gICAgaWYgKGRh
dGEoKS5wcmV2aW91c1NjaXNzb3JTdGF0ZSkKLSAgICAgICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9U
RVNUKTsKLSAgICBlbHNlCi0gICAgICAgIGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwotCi0g
ICAgaWYgKGRhdGEoKS5wcmV2aW91c0RlcHRoU3RhdGUpCi0gICAgICAgIGdsRW5hYmxlKEdMX0RF
UFRIX1RFU1QpOwotICAgIGVsc2UKLSAgICAgICAgZ2xEaXNhYmxlKEdMX0RFUFRIX1RFU1QpOwot
Ci0jaWYgUExBVEZPUk0oUVQpCi0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgIHJldHVybjsK
LSAgICBRUGFpbnRlciogcGFpbnRlciA9IG1fY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0g
ICAgcGFpbnRlci0+ZW5kTmF0aXZlUGFpbnRpbmcoKTsKLSAgICBwYWludGVyLT5yZXN0b3JlKCk7
Ci0jZW5kaWYKLX0KLQotCi12b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3Qg
Qml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRt
YXBUZXh0dXJlKiBtYXNrKQotewotICAgIGlmICghdGV4dHVyZS5pc1ZhbGlkKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wmIHRleHR1cmVHTCA9IHN0YXRpY19j
YXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHRleHR1cmUpOwotICAgIGRyYXdUZXh0dXJlKHRl
eHR1cmVHTC5pZCgpLCB0ZXh0dXJlR0wuaXNPcGFxdWUoKSA/IDAgOiBTdXBwb3J0c0JsZW5kaW5n
LCB0ZXh0dXJlR0wucmVsYXRpdmVTaXplKCksIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSwg
bWFzayk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50MzJfdCB0
ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgRmxvYXRTaXplJiByZWxhdGl2ZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVs
Vmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1
cmUpCi17Ci0gICAgaWYgKG1hc2tUZXh0dXJlKQotICAgICAgICBkcmF3VGV4dHVyZVdpdGhNYXNr
QW5kT3BhY2l0eSh0ZXh0dXJlLCBmbGFncywgcmVsYXRpdmVTaXplLCB0YXJnZXRSZWN0LCBtb2Rl
bFZpZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0dXJlKTsKLSAgICBlbHNlCi0gICAgICAgIGRy
YXdUZXh0dXJlU2ltcGxlKHRleHR1cmUsIGZsYWdzLCByZWxhdGl2ZVNpemUsIHRhcmdldFJlY3Qs
IG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgbWFza1RleHR1cmUpOwotfQotCi12b2lkIFRleHR1
cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRoTWFza0FuZE9wYWNpdHkodWludDMyX3QgdGV4dHVy
ZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEZsb2F0U2l6ZSYgcmVsYXRpdmVTaXplLCBjb25zdCBGbG9h
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdN
YXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKQot
ewotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrPiBz
aGFkZXJJbmZvID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmdldFNoYWRlclByb2dyYW08VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5k
TWFzaz4oKTsKLQotICAgIEdMX0NNRChnbFVzZVByb2dyYW0oc2hhZGVySW5mby0+aWQoKSkpCi0g
ICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVySW5mby0+dmVydGV4QXR0
cmliKCkpKQotICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKQotICAgIEdM
X0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmUpKQotICAgIEdMX0NNRChn
bEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAwKSkKLSAgICBjb25zdCBHTGZsb2F0IHVuaXRS
ZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07Ci0gICAgR0xfQ01EKGdsVmVydGV4QXR0
cmliUG9pbnRlcihzaGFkZXJJbmZvLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR0xfRkxPQVQsIEdMX0ZB
TFNFLCAwLCB1bml0UmVjdCkpCi0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBU
cmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCkucHJvamVjdGlvbk1hdHJpeCkubXVsdGlwbHkobW9k
ZWxWaWV3TWF0cml4KS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgKLSAgICAgICAgICAg
IHRhcmdldFJlY3Qud2lkdGgoKSwgMCwgMCwgMCwKLSAgICAgICAgICAgIDAsIHRhcmdldFJlY3Qu
aGVpZ2h0KCksIDAsIDAsCi0gICAgICAgICAgICAwLCAwLCAxLCAwLAotICAgICAgICAgICAgdGFy
Z2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCAwLCAxKSk7Ci0KLSAgICBjb25zdCBHTGZsb2F0
IG00W10gPSB7Ci0gICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigpLCBtYXRyaXgubTEz
KCksIG1hdHJpeC5tMTQoKSwKLSAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIG1h
dHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAotICAgICAgICBtYXRyaXgubTMxKCksIG1hdHJpeC5t
MzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCi0gICAgICAgIG1hdHJpeC5tNDEoKSwg
bWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQotICAgIH07Ci0gICAgY29u
c3QgR0xmbG9hdCBtNHNyY1tdID0ge3JlbGF0aXZlU2l6ZS53aWR0aCgpLCAwLCAwLCAwLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHJlbGF0aXZlU2l6ZS5oZWlnaHQo
KSAqICgoZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVyZSkgPyAtMSA6IDEpLCAwLCAwLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgKGZsYWdzICYgU2hvdWxkRmxpcFRleHR1cmUpID8g
cmVsYXRpdmVTaXplLmhlaWdodCgpIDogMCwgMCwgMX07Ci0KLSAgICBHTF9DTUQoZ2xVbmlmb3Jt
TWF0cml4NGZ2KHNoYWRlckluZm8tPm1hdHJpeFZhcmlhYmxlKCksIDEsIEdMX0ZBTFNFLCBtNCkp
Ci0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihzaGFkZXJJbmZvLT5zb3VyY2VNYXRyaXhW
YXJpYWJsZSgpLCAxLCBHTF9GQUxTRSwgbTRzcmMpKQotICAgIEdMX0NNRChnbFVuaWZvcm0xaShz
aGFkZXJJbmZvLT5zb3VyY2VUZXh0dXJlVmFyaWFibGUoKSwgMCkpCi0gICAgR0xfQ01EKGdsVW5p
Zm9ybTFmKHNoYWRlckluZm8tPm9wYWNpdHlWYXJpYWJsZSgpLCBvcGFjaXR5KSkKLQotICAgIGlm
IChtYXNrVGV4dHVyZS0+aXNWYWxpZCgpKSB7Ci0gICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmVH
TCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KG1h
c2tUZXh0dXJlKTsKLSAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSkp
Ci0gICAgICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1hc2tUZXh0dXJl
R0wtPmlkKCkpKQotICAgICAgICBjb25zdCBHTGZsb2F0IG00bWFza1tdID0ge21hc2tUZXh0dXJl
R0wtPnJlbGF0aXZlU2l6ZSgpLndpZHRoKCksIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIG1hc2tUZXh0dXJlR0wtPnJlbGF0aXZlU2l6ZSgpLmhl
aWdodCgpLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCAwLCAxLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAw
LCAwLCAxfTsKLSAgICAgICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihzaGFkZXJJbmZvLT5t
YXNrTWF0cml4VmFyaWFibGUoKSwgMSwgR0xfRkFMU0UsIG00bWFzaykpOwotICAgICAgICBHTF9D
TUQoZ2xVbmlmb3JtMWkoc2hhZGVySW5mby0+bWFza1RleHR1cmVWYXJpYWJsZSgpLCAxKSkKLSAg
ICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpCi0gICAgfQotCi0gICAg
R0xfQ01EKGdsQmxlbmRGdW5jKEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSkpCi0gICAg
R0xfQ01EKGdsRW5hYmxlKEdMX0JMRU5EKSkKLQotICAgIEdMX0NNRChnbERyYXdBcnJheXMoR0xf
VFJJQU5HTEVfRkFOLCAwLCA0KSkKLSAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkoc2hhZGVySW5mby0+dmVydGV4QXR0cmliKCkpKQotfQotCi12b2lkIFRleHR1cmVNYXBwZXJH
TDo6ZHJhd1RleHR1cmVTaW1wbGUodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0
IEZsb2F0U2l6ZSYgcmVsYXRpdmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHks
IGNvbnN0IEJpdG1hcFRleHR1cmUqKQotewotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNpbXBsZT4gc2hhZGVySW5mbyA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU2ltcGxlPigpOwotCi0gICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShzaGFkZXJJbmZvLT5p
ZCgpKSkKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJJbmZvLT52
ZXJ0ZXhBdHRyaWIoKSkpCi0gICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkp
Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZSkpCi0gICAg
R0xfQ01EKGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApKQotICAgIGNvbnN0IEdMZmxv
YXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKLSAgICBHTF9DTUQoZ2xW
ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlckluZm8tPnZlcnRleEF0dHJpYigpLCAyLCBHTF9GTE9B
VCwgR0xfRkFMU0UsIDAsIHVuaXRSZWN0KSkKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1h
dHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KS5tdWx0
aXBseShtb2RlbFZpZXdNYXRyaXgpLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KAotICAg
ICAgICAgICAgdGFyZ2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLAotICAgICAgICAgICAgMCwgdGFy
Z2V0UmVjdC5oZWlnaHQoKSwgMCwgMCwKLSAgICAgICAgICAgIDAsIDAsIDEsIDAsCi0gICAgICAg
ICAgICB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIDAsIDEpKTsKLQotICAgIGNvbnN0
IEdMZmxvYXQgbTRbXSA9IHsKLSAgICAgICAgbWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIG1h
dHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAotICAgICAgICBtYXRyaXgubTIxKCksIG1hdHJpeC5t
MjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCi0gICAgICAgIG1hdHJpeC5tMzEoKSwg
bWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwKLSAgICAgICAgbWF0cml4
Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgpCi0gICAgfTsK
LSAgICBjb25zdCBHTGZsb2F0IG00c3JjW10gPSB7cmVsYXRpdmVTaXplLndpZHRoKCksIDAsIDAs
IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgcmVsYXRpdmVTaXpl
LmhlaWdodCgpICogKChmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSA/IC0xIDogMSksIDAsIDAs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAoZmxhZ3MgJiBTaG91bGRGbGlwVGV4
dHVyZSkgPyByZWxhdGl2ZVNpemUuaGVpZ2h0KCkgOiAwLCAwLCAxfTsKLQotICAgIEdMX0NNRChn
bFVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVySW5mby0+bWF0cml4VmFyaWFibGUoKSwgMSwgR0xfRkFM
U0UsIG00KSkKLSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRlckluZm8tPnNvdXJj
ZU1hdHJpeFZhcmlhYmxlKCksIDEsIEdMX0ZBTFNFLCBtNHNyYykpCi0gICAgR0xfQ01EKGdsVW5p
Zm9ybTFpKHNoYWRlckluZm8tPnNvdXJjZVRleHR1cmVWYXJpYWJsZSgpLCAwKSkKLSAgICBHTF9D
TUQoZ2xVbmlmb3JtMWYoc2hhZGVySW5mby0+b3BhY2l0eVZhcmlhYmxlKCksIG9wYWNpdHkpKQot
Ci0gICAgYm9vbCBuZWVkc0JsZW5kaW5nID0gKGZsYWdzICYgU3VwcG9ydHNCbGVuZGluZykgfHwg
b3BhY2l0eSA8IDAuOTk7Ci0KLSAgICBpZiAobmVlZHNCbGVuZGluZykgewotICAgICAgICBHTF9D
TUQoZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKSkKLSAgICAgICAg
R0xfQ01EKGdsRW5hYmxlKEdMX0JMRU5EKSkKLSAgICB9IGVsc2UKLSAgICAgICAgR0xfQ01EKGds
RGlzYWJsZShHTF9CTEVORCkpCi0KLSAgICBHTF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xF
X0ZBTiwgMCwgNCkpCi0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRl
ckluZm8tPnZlcnRleEF0dHJpYigpKSkKLX0KLQotY29uc3QgY2hhciogVGV4dHVyZU1hcHBlckdM
Ojp0eXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIk9wZW5HTCI7Ci19Ci0KLXZvaWQgQml0bWFw
VGV4dHVyZUdMOjpkaWRSZXNldCgpCi17Ci0gICAgSW50U2l6ZSBuZXdUZXh0dXJlU2l6ZSA9IG5l
eHRQb3dlck9mVHdvKGNvbnRlbnRTaXplKCkpOwotICAgIGJvb2wganVzdENyZWF0ZWQgPSBmYWxz
ZTsKLSAgICBpZiAoIW1faWQpIHsKLSAgICAgICAgR0xfQ01EKGdsR2VuVGV4dHVyZXMoMSwgJm1f
aWQpKQotICAgICAgICBqdXN0Q3JlYXRlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGp1c3RD
cmVhdGVkIHx8IG5ld1RleHR1cmVTaXplLndpZHRoKCkgPiBtX3RleHR1cmVTaXplLndpZHRoKCkg
fHwgbmV3VGV4dHVyZVNpemUuaGVpZ2h0KCkgPiBtX3RleHR1cmVTaXplLmhlaWdodCgpKSB7Ci0g
ICAgICAgIG1fdGV4dHVyZVNpemUgPSBuZXdUZXh0dXJlU2l6ZTsKLSAgICAgICAgR0xfQ01EKGds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpCi0gICAgICAgIEdMX0NNRChnbFRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIp
KQotICAgICAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKSkKLSAgICAgICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVy
aShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSkpCi0g
ICAgICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9X
UkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpKQotICAgICAgICBHTF9DTUQoZ2xUZXhJbWFnZTJEKEdM
X1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJl
U2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCkpCi0gICAgfQot
Ci0gICAgLy8gV2UgZGVjcmVhc2UgdGhlIHNpemUgYnkgb25lLCBzaW5jZSB0aGlzIGlzIHVzZWQg
YXMgcmVjdGFuZ2xlIGNvb3JkaW5hdGVzIGFuZCBub3QgYXMgc2l6ZS4KLSAgICBtX3JlbGF0aXZl
U2l6ZSA9IEZsb2F0U2l6ZShmbG9hdChjb250ZW50U2l6ZSgpLndpZHRoKCkgLSAxKSAvIG1fdGV4
dHVyZVNpemUud2lkdGgoKSwgZmxvYXQoY29udGVudFNpemUoKS5oZWlnaHQoKSAtIDEpIC8gbV90
ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgbV9zdXJmYWNlTmVlZHNSZXNldCA9IHRydWU7Ci19
Ci0KLXN0YXRpYyB2b2lkIHN3aXp6bGVCR1JBVG9SR0JBKHVpbnQzMl90KiBkYXRhLCBjb25zdCBJ
bnRTaXplJiBzaXplKQotewotICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBpbnQg
aGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsg
Kyt5KSB7Ci0gICAgICAgIHVpbnQzMl90KiBwID0gZGF0YSArIHkgKiB3aWR0aDsKLSAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4KQotICAgICAgICAgICAgcFt4XSA9ICgocFt4
XSA8PCAxNikgJiAweGZmMDAwMCkgfCAoKHBbeF0gPj4gMTYpICYgMHhmZikgfCAocFt4XSAmIDB4
ZmYwMGZmMDApOwotICAgIH0KLX0KLQotLy8gRklYTUU6IE1vdmUgdGhpcyB0byBFeHRlbnNpb25z
M0Qgd2hlbiB3ZSBtb3ZlIFRleHR1cmVNYXBwZXIgdG8gdXNlIEdDM0QuCi1zdGF0aWMgYm9vbCBo
YXNFeHRlbnNpb24oY29uc3QgY2hhciogZXh0ZW5zaW9uKQotewotICAgIHN0YXRpYyBWZWN0b3I8
U3RyaW5nPiBhdmFpbGFibGVFeHRlbnNpb25zOwotICAgIGlmICghYXZhaWxhYmxlRXh0ZW5zaW9u
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBhdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5z
KGV4dGVuc2lvbik7Ci0gICAgU3RyaW5nIGV4dGVuc2lvbnNTdHJpbmcocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oZ2xHZXRTdHJpbmcoR0xfRVhURU5TSU9OUykpKTsKLSAgICBleHRlbnNp
b25zU3RyaW5nLnNwbGl0KCIgIiwgYXZhaWxhYmxlRXh0ZW5zaW9ucyk7Ci0gICAgcmV0dXJuIGF2
YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoZXh0ZW5zaW9uKTsKLX0KLXN0YXRpYyBib29sIGhh
c0JHUkFFeHRlbnNpb24oKQotewotI2lmICFkZWZpbmVkKFRFWE1BUF9PUEVOR0xfRVNfMikKLSAg
ICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotICAgIHN0YXRpYyBib29sIGhhc0JHUkEgPSBoYXNFeHRl
bnNpb24oIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIpOwotICAgIHJldHVybiBoYXNC
R1JBOwotfQotCi12b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoY29uc3Qgdm9p
ZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKLXsKLSAgICBHTHVpbnQgZ2xGb3Jt
YXQgPSBHTF9SR0JBOwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1f
aWQpKQotICAgIGlmIChoYXNCR1JBRXh0ZW5zaW9uKCkpCi0gICAgICAgIGdsRm9ybWF0ID0gR0xf
QkdSQTsKLSAgICBlbHNlIHsKLSAgICAgICAgc3dpenpsZUJHUkFUb1JHQkEoc3RhdGljX2Nhc3Q8
dWludDMyX3QqPihjb25zdF9jYXN0PHZvaWQqPihkYXRhKSksIHRhcmdldFJlY3Quc2l6ZSgpKTsK
LSAgICAgICAgZ2xGb3JtYXQgPSBHTF9SR0JBOwotICAgIH0KLQotICAgIEdMX0NNRChnbFRleFN1
YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgp
LCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBHTF9V
TlNJR05FRF9CWVRFLCBkYXRhKSkKLX0KLQotdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNv
bnRlbnRzKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgQml0bWFwVGV4dHVyZTo6UGl4ZWxGb3JtYXQgZm9ybWF0KQotewot
ICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCBtX2lkKSkKLSAgICBHTHVpbnQgZ2xGb3JtYXQgPSBpc09wYXF1ZSgp
ID8gR0xfUkdCIDogR0xfUkdCQTsKLSAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlID0gaW1h
Z2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZUltYWdlKQot
ICAgICAgICByZXR1cm47Ci0KLSNpZiBQTEFURk9STShRVCkKLSAgICBRSW1hZ2UgcXRJbWFnZTsK
LQotI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg1LCAwLCAwKQotICAgIC8vIFdp
dGggUVBBLCB3ZSBjYW4gYXZvaWQgYSBkZWVwIGNvcHkuCi0gICAgcXRJbWFnZSA9ICpmcmFtZUlt
YWdlLT5oYW5kbGUoKS0+YnVmZmVyKCk7Ci0jZWxzZQotICAgIC8vIFRoaXMgbWlnaHQgYmUgYSBk
ZWVwIGNvcHksIGRlcGVuZGluZyBvbiBvdGhlciByZWZlcmVuY2VzIHRvIHRoZSBwaXhtYXAuCi0g
ICAgcXRJbWFnZSA9IGZyYW1lSW1hZ2UtPnRvSW1hZ2UoKTsKLSNlbmRpZgotCi0gICAgaWYgKElu
dFNpemUocXRJbWFnZS5zaXplKCkpICE9IHNvdXJjZVJlY3Quc2l6ZSgpKQotICAgICAgICBxdElt
YWdlID0gcXRJbWFnZS5jb3B5KHNvdXJjZVJlY3QpOwotICAgIGlmIChmb3JtYXQgPT0gQkdSQUZv
cm1hdCB8fCBmb3JtYXQgPT0gQkdSRm9ybWF0KSB7Ci0gICAgICAgIGlmIChoYXNCR1JBRXh0ZW5z
aW9uKCkpCi0gICAgICAgICAgICBnbEZvcm1hdCA9IGlzT3BhcXVlKCkgPyBHTF9CR1IgOiBHTF9C
R1JBOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzd2l6emxlQkdSQVRvUkdCQShyZWludGVy
cHJldF9jYXN0PHVpbnQzMl90Kj4ocXRJbWFnZS5iaXRzKCkpLCBxdEltYWdlLnNpemUoKSk7Ci0g
ICAgfQotICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0
UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3Qu
aGVpZ2h0KCksIGdsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBxdEltYWdlLmNvbnN0Qml0cygp
KSkKLQotI2VsaWYgVVNFKENBSVJPKQotCi0jaWYgIUNQVShCSUdfRU5ESUFOKQotI2lmIGRlZmlu
ZWQoVEVYTUFQX09QRU5HTF9FU18yKQotICAgIHN3aXp6bGVCR1JBVG9SR0JBKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3QqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGZyYW1lSW1hZ2Up
KSwKLSAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUo
ZnJhbWVJbWFnZSkgKiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoZnJhbWVJbWFnZSkp
OwotI2Vsc2UKLSAgICBnbEZvcm1hdCA9IGlzT3BhcXVlKCkgPyBHTF9CR1IgOiBHTF9CR1JBOwot
I2VuZGlmCi0jZW5kaWYKLQotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgs
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShmcmFtZUltYWdlKSAvIDQpOwotICAgIGds
UGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgc291cmNlUmVjdC55KCkpOwotICAgIGds
UGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUElYRUxTLCBzb3VyY2VSZWN0LngoKSk7Ci0gICAg
R0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGZy
YW1lSW1hZ2UpKSk7Ci0gICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgMCk7
Ci0gICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCAwKTsKLSAgICBnbFBpeGVs
U3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJWEVMUywgMCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlu
bGluZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KGNvbnN0IElu
dFNpemUmIHNpemUsIGJvb2wgZmxpcCkKLXsKLSAgICBjb25zdCBmbG9hdCBuZWFyID0gOTk5OTk5
OTsKLSAgICBjb25zdCBmbG9hdCBmYXIgPSAtOTk5OTk7Ci0KLSAgICByZXR1cm4gVHJhbnNmb3Jt
YXRpb25NYXRyaXgoMi4wIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwgMCwgMCwgMCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgKGZsaXAgPyAtMi4wIDogMi4wKSAvIGZsb2F0KHNp
emUuaGVpZ2h0KCkpLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAw
LCAtMi5mIC8gKGZhciAtIG5lYXIpLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtMSwgZmxpcCA/IDEgOiAtMSwgLShmYXIgKyBuZWFyKSAvIChmYXIgLSBuZWFyKSwgMSk7Ci19
Ci0KLXZvaWQgQml0bWFwVGV4dHVyZUdMOjpiaW5kKCkKLXsKLSAgICBpbnQmIHN0ZW5jaWxJbmRl
eCA9IG1fdGV4dHVyZU1hcHBlci0+ZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnN0ZW5jaWxJbmRleDsK
LSAgICBpZiAobV9zdXJmYWNlTmVlZHNSZXNldCB8fCAhbV9mYm8pIHsKLSAgICAgICAgaWYgKCFt
X2ZibykKLSAgICAgICAgICAgIEdMX0NNRChnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pKQot
ICAgICAgICBpZiAoIW1fcmJvKQotICAgICAgICAgICAgR0xfQ01EKGdsR2VuUmVuZGVyYnVmZmVy
cygxLCAmbV9yYm8pKTsKLSAgICAgICAgR0xfQ01EKGdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5E
RVJCVUZGRVIsIG1fcmJvKSkKLSNpZmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSAgICAgICAgR0xf
Q01EKGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTF9SRU5ERVJCVUZGRVIsIEdMX1NURU5DSUxfSU5E
RVg4LCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKQotI2Vs
c2UKLSAgICAgICAgR0xfQ01EKGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTF9SRU5ERVJCVUZGRVIs
IEdMX0RFUFRIX1NURU5DSUwsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5o
ZWlnaHQoKSkpCi0jZW5kaWYKLSAgICAgICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZS
QU1FQlVGRkVSLCBtX2ZibykpCi0gICAgICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIDApKQotICAgICAgICBHTF9DTUQoZ2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJV
RkZFUiwgMCkpCi0gICAgICAgIEdMX0NNRChnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1F
QlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgaWQoKSwgMCkpCi0g
ICAgICAgIEdMX0NNRChnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBH
TF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9yYm8pKQotICAgICAgICBH
TF9DTUQoZ2xDbGVhckNvbG9yKDAsIDAsIDAsIDApKQotICAgICAgICBHTF9DTUQoZ2xDbGVhclN0
ZW5jaWwoc3RlbmNpbEluZGV4IC0gMSkpCi0gICAgICAgIEdMX0NNRChnbENsZWFyKEdMX1NURU5D
SUxfQlVGRkVSX0JJVCB8IEdMX0NPTE9SX0JVRkZFUl9CSVQpKQotICAgICAgICBtX3N1cmZhY2VO
ZWVkc1Jlc2V0ID0gZmFsc2U7Ci0gICAgfSBlbHNlCi0gICAgICAgIEdMX0NNRChnbEJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pKQotCi0gICAgZ2xTdGVuY2lsT3AoR0xfS0VF
UCwgR0xfS0VFUCwgR0xfS0VFUCk7Ci0gICAgZ2xTdGVuY2lsRnVuYyhzdGVuY2lsSW5kZXggPiAx
ID8gR0xfR0VRVUFMIDogR0xfQUxXQVlTLCBzdGVuY2lsSW5kZXggLSAxLCBzdGVuY2lsSW5kZXgg
LSAxKTsKLSAgICBHTF9DTUQoZ2xWaWV3cG9ydCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgp
LmhlaWdodCgpKSkKLSAgICBtX3RleHR1cmVNYXBwZXItPmRhdGEoKS5wcm9qZWN0aW9uTWF0cml4
ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeChzaXplKCksIGZhbHNlKTsKLX0KLQotdm9pZCBCaXRt
YXBUZXh0dXJlR0w6OmRlc3Ryb3koKQotewotICAgIGlmIChtX2lkKQotICAgICAgICBHTF9DTUQo
Z2xEZWxldGVUZXh0dXJlcygxLCAmbV9pZCkpCi0KLSAgICBpZiAobV9mYm8pCi0gICAgICAgIEdM
X0NNRChnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pKQotCi0gICAgaWYgKG1fcmJvKQot
ICAgICAgICBHTF9DTUQoZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX3JibykpCi0KLSAgICBt
X2ZibyA9IDA7Ci0gICAgbV9pZCA9IDA7Ci0gICAgbV90ZXh0dXJlU2l6ZSA9IEludFNpemUoKTsK
LSAgICBtX3JlbGF0aXZlU2l6ZSA9IEZsb2F0U2l6ZSgxLCAxKTsKLX0KLQotYm9vbCBCaXRtYXBU
ZXh0dXJlR0w6OmlzVmFsaWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2lkOwotfQotCi1JbnRT
aXplIEJpdG1hcFRleHR1cmVHTDo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdGV4dHVy
ZVNpemU7Ci19Ci0KLVRleHR1cmVNYXBwZXJHTDo6flRleHR1cmVNYXBwZXJHTCgpCi17Ci0gICAg
ZGVsZXRlIG1fZGF0YTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJpbmRTdXJmYWNlKEJp
dG1hcFRleHR1cmUgKnN1cmZhY2VQb2ludGVyKQotewotICAgIEJpdG1hcFRleHR1cmVHTCogc3Vy
ZmFjZSA9IHN0YXRpY19jYXN0PEJpdG1hcFRleHR1cmVHTCo+KHN1cmZhY2VQb2ludGVyKTsKLQot
ICAgIGlmICghc3VyZmFjZSkgewotICAgICAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZShkYXRhKCku
dmlld3BvcnRbMl0sIGRhdGEoKS52aWV3cG9ydFszXSk7Ci0gICAgICAgIEdMX0NNRChnbEJpbmRG
cmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCkpCi0gICAgICAgIGRhdGEoKS5wcm9qZWN0aW9u
TWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeCh2aWV3cG9ydFNpemUsIHRydWUpOwotICAg
ICAgICBHTF9DTUQoZ2xTdGVuY2lsRnVuYyhkYXRhKCkuc2hhcmVkR0xEYXRhKCkuc3RlbmNpbElu
ZGV4ID4gMSA/IEdMX0VRVUFMIDogR0xfQUxXQVlTLCBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuc3Rl
bmNpbEluZGV4IC0gMSwgZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnN0ZW5jaWxJbmRleCAtIDEpKQot
ICAgICAgICBHTF9DTUQoZ2xTdGVuY2lsT3AoR0xfS0VFUCwgR0xfS0VFUCwgR0xfS0VFUCkpCi0g
ICAgICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCB2aWV3
cG9ydFNpemUuaGVpZ2h0KCkpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3VyZmFj
ZS0+YmluZCgpOwotfQotCi1zdGF0aWMgdm9pZCBzY2lzc29yQ2xpcChjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIEdMaW50IHZpZXdwb3J0WzRdOwotICAgIGdsR2V0SW50ZWdlcnYoR0xfVklF
V1BPUlQsIHZpZXdwb3J0KTsKLSAgICBnbFNjaXNzb3IocmVjdC54KCksIHZpZXdwb3J0WzNdIC0g
cmVjdC5tYXhZKCkgKyAxLCByZWN0LndpZHRoKCkgLSAxLCByZWN0LmhlaWdodCgpIC0gMSk7Ci19
Ci0KLWJvb2wgVGV4dHVyZU1hcHBlckdMOjpiZWdpblNjaXNzb3JDbGlwKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVj
dCkKLXsKLSAgICBGbG9hdFF1YWQgcXVhZCA9IG1vZGVsVmlld01hdHJpeC5wcm9qZWN0UXVhZCh0
YXJnZXRSZWN0KTsKLSAgICBJbnRSZWN0IHJlY3QgPSBxdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94
KCk7Ci0KLSAgICAvLyBPbmx5IHVzZSBzY2lzc29ycyBvbiByZWN0aWxpbmVhciBjbGlwcy4KLSAg
ICBpZiAoIXF1YWQuaXNSZWN0aWxpbmVhcigpIHx8IHJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IGRhdGEoKS5zaGFyZWRHTERhdGEoKS5jbGlwU3RhY2suYXBwZW5kKEludFJlY3QoKSk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBJbnRlcnNlY3Qgd2l0aCBwcmV2aW91
cyBjbGlwLgotICAgIGZvciAoaW50IGkgPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuY2xpcFN0YWNr
LnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGNvbnN0IEludFJlY3QmIHByZXZS
ZWN0ID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLmNsaXBTdGFja1tpXTsKLSAgICAgICAgaWYgKHBy
ZXZSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIFdl
IG9ubHkgbmVlZCB0aGUgbGFzdCB2YWxpZCBjbGlwLgotICAgICAgICByZWN0LmludGVyc2VjdChw
cmV2UmVjdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHNjaXNzb3JDbGlwKHJlY3Qp
OwotICAgIGRhdGEoKS5zaGFyZWRHTERhdGEoKS5jbGlwU3RhY2suYXBwZW5kKHJlY3QpOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVGV4dHVyZU1hcHBlckdMOjplbmRTY2lzc29yQ2xp
cCgpCi17Ci0gICAgZGF0YSgpLnNoYXJlZEdMRGF0YSgpLmNsaXBTdGFjay5yZW1vdmVMYXN0KCk7
Ci0gICAgQVNTRVJUKCFkYXRhKCkuc2hhcmVkR0xEYXRhKCkuY2xpcFN0YWNrLmlzRW1wdHkoKSk7
Ci0KLSAgICBJbnRSZWN0IHJlY3QgPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuY2xpcFN0YWNrLmxh
c3QoKTsKLSAgICBpZiAocmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHNjaXNzb3JDbGlwKHJlY3QpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFRleHR1
cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZp
ZXdNYXRyaXgsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCkKLXsKLSAgICBpZiAoYmVnaW5T
Y2lzc29yQ2xpcChtb2RlbFZpZXdNYXRyaXgsIHRhcmdldFJlY3QpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBkYXRhKCkuaW5pdFN0ZW5jaWwoKTsKLQotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbUNsaXA+IHNoYWRlckluZm8gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbTxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbUNsaXA+KCk7Ci0KLSAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHNoYWRlckluZm8t
PmlkKCkpKQotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlckluZm8t
PnZlcnRleEF0dHJpYigpKSkKLSAgICBjb25zdCBHTGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwg
MSwgMCwgMSwgMSwgMCwgMX07Ci0gICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihzaGFk
ZXJJbmZvLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB1bml0UmVj
dCkpCi0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1h
dHJpeChkYXRhKCkucHJvamVjdGlvbk1hdHJpeCkKLSAgICAgICAgICAgIC5tdWx0aXBseShtb2Rl
bFZpZXdNYXRyaXgpCi0gICAgICAgICAgICAubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgo
dGFyZ2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLAotICAgICAgICAgICAgICAgIDAsIHRhcmdldFJl
Y3QuaGVpZ2h0KCksIDAsIDAsCi0gICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAg
ICAgICAgICB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIDAsIDEpKTsKLQotICAgIGNv
bnN0IEdMZmxvYXQgbTRbXSA9IHsKLSAgICAgICAgbWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCks
IG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAotICAgICAgICBtYXRyaXgubTIxKCksIG1hdHJp
eC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCi0gICAgICAgIG1hdHJpeC5tMzEo
KSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwKLSAgICAgICAgbWF0
cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgpCi0gICAg
fTsKLQotICAgIGludCYgc3RlbmNpbEluZGV4ID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnN0ZW5j
aWxJbmRleDsKLQotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVySW5mby0+bWF0
cml4VmFyaWFibGUoKSwgMSwgR0xfRkFMU0UsIG00KSkKLSAgICBHTF9DTUQoZ2xFbmFibGUoR0xf
U1RFTkNJTF9URVNUKSkKLSAgICBHTF9DTUQoZ2xTdGVuY2lsRnVuYyhHTF9ORVZFUiwgc3RlbmNp
bEluZGV4LCBzdGVuY2lsSW5kZXgpKQotICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9SRVBMQUNF
LCBHTF9SRVBMQUNFLCBHTF9SRVBMQUNFKSkKLSAgICBHTF9DTUQoZ2xTdGVuY2lsTWFzaygweGZm
ICYgfihzdGVuY2lsSW5kZXggLSAxKSkpCi0gICAgR0xfQ01EKGdsRHJhd0FycmF5cyhHTF9UUklB
TkdMRV9GQU4sIDAsIDQpKQotICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9LRUVQLCBHTF9LRUVQ
LCBHTF9LRUVQKSkKLSAgICBzdGVuY2lsSW5kZXggPDw9IDE7Ci0gICAgZ2xTdGVuY2lsRnVuYyhz
dGVuY2lsSW5kZXggPiAxID8gR0xfRVFVQUwgOiBHTF9BTFdBWVMsIHN0ZW5jaWxJbmRleCAtIDEs
IHN0ZW5jaWxJbmRleCAtIDEpOwotICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShzaGFkZXJJbmZvLT52ZXJ0ZXhBdHRyaWIoKSkpCi19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlckdM
OjplbmRDbGlwKCkKLXsKLSAgICBpZiAoZW5kU2Npc3NvckNsaXAoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnN0ZW5jaWxJbmRleCA+Pj0gMTsKLSAgICBn
bFN0ZW5jaWxGdW5jKGRhdGEoKS5zaGFyZWRHTERhdGEoKS5zdGVuY2lsSW5kZXggPiAxID8gR0xf
RVFVQUwgOiBHTF9BTFdBWVMsIGRhdGEoKS5zaGFyZWRHTERhdGEoKS5zdGVuY2lsSW5kZXggLSAx
LCBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuc3RlbmNpbEluZGV4IC0gMSk7ICAgIAotCi0gICAgLy8g
QWZ0ZXIgd2UndmUgY2xlYXJlZCB0aGUgbGFzdCBub24tcmVjdGFsaW5lYXIgY2xpcCwgd2UgZGlz
YWJsZSB0aGUgc3RlbmNpbCB0ZXN0LgotICAgIGlmIChkYXRhKCkuc2hhcmVkR0xEYXRhKCkuc3Rl
bmNpbEluZGV4ID09IDEpCi0gICAgICAgIEdMX0NNRChnbERpc2FibGUoR0xfU1RFTkNJTF9URVNU
KSkKLQotfQotCi1QYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJHTDo6Y3Jl
YXRlVGV4dHVyZSgpCi17Ci0gICAgQml0bWFwVGV4dHVyZUdMKiB0ZXh0dXJlID0gbmV3IEJpdG1h
cFRleHR1cmVHTCgpOwotICAgIHRleHR1cmUtPnNldFRleHR1cmVNYXBwZXIodGhpcyk7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKHRleHR1cmUpOwotfQotCi1QYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+
IFRleHR1cmVNYXBwZXI6OnBsYXRmb3JtQ3JlYXRlQWNjZWxlcmF0ZWQoKQotewotICAgIHJldHVy
biBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpOwotfQotCi19OwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVy
R0wuaAkocmV2aXNpb24gMTA4NDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMSArMCww
IEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBUZXh0
dXJlTWFwcGVyR0xfaAotI2RlZmluZSBUZXh0dXJlTWFwcGVyR0xfaAotCi0jaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAi
SW50U2l6ZS5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFRleHR1cmVN
YXBwZXJHTERhdGE7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0KLS8vIEFuIE9wZW5HTC1FUzIg
aW1wbGVtZW50YXRpb24gb2YgVGV4dHVyZU1hcHBlci4KLWNsYXNzIFRleHR1cmVNYXBwZXJHTCA6
IHB1YmxpYyBUZXh0dXJlTWFwcGVyIHsKLXB1YmxpYzoKLSAgICBUZXh0dXJlTWFwcGVyR0woKTsK
LSAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyR0woKTsKLQotICAgIGVudW0gRmxhZyB7Ci0gICAg
ICAgIFN1cHBvcnRzQmxlbmRpbmcgPSAweDAxLAotICAgICAgICBTaG91bGRGbGlwVGV4dHVyZSA9
IDB4MDIKLSAgICB9OwotCi0gICAgdHlwZWRlZiBpbnQgRmxhZ3M7Ci0KLSAgICAvLyByZWltcHMg
ZnJvbSBUZXh0dXJlTWFwcGVyCi0gICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJp
dG1hcFRleHR1cmUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MsIGNvbnN0
IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpOwotICAg
IHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZVdpdGhNYXNrQW5kT3BhY2l0eSh1aW50MzJfdCB0ZXh0
dXJlLCBGbGFncywgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBt
YXNrVGV4dHVyZSk7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlU2ltcGxlKHVpbnQzMl90
IHRleHR1cmUsIEZsYWdzLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1
cmUqIG1hc2tUZXh0dXJlKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFwVGV4
dHVyZSogc3VyZmFjZSk7Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBiZWdp
blBhaW50aW5nKCk7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFBhaW50aW5nKCk7Ci0gICAgdmlydHVh
bCB2b2lkIGVuZENsaXAoKTsKLSAgICB2aXJ0dWFsIEludFNpemUgbWF4VGV4dHVyZVNpemUoKSB7
IHJldHVybiBJbnRTaXplKDIwMDAsIDIwMDApOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEJp
dG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHR5
cGUoKSBjb25zdDsKLSAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyR0w+IGNyZWF0
ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyR0wpOyB9Ci0gICAgdm9pZCBz
ZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KSB7IG1fY29udGV4dCA9
IGNvbnRleHQ7IH0KLSAgICBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCgpIHsgcmV0
dXJuIG1fY29udGV4dDsgfQotICAgIHZpcnR1YWwgYm9vbCBpc09wZW5HTEJhY2tlZCgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2b2lkIHBsYXRmb3JtVXBkYXRlQ29udGVudHMoTmF0aXZl
SW1hZ2VQdHIsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JiwgQml0bWFwVGV4dHVyZTo6
UGl4ZWxGb3JtYXQpOwotICAgIHZpcnR1YWwgQWNjZWxlcmF0aW9uTW9kZSBhY2NlbGVyYXRpb25N
b2RlKCkgY29uc3QgeyByZXR1cm4gT3BlbkdMTW9kZTsgfQotCi1wcml2YXRlOgotICAgIGJvb2wg
YmVnaW5TY2lzc29yQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0
UmVjdCYpOwotICAgIGJvb2wgZW5kU2Npc3NvckNsaXAoKTsKLSAgICBpbmxpbmUgVGV4dHVyZU1h
cHBlckdMRGF0YSYgZGF0YSgpIHsgcmV0dXJuICptX2RhdGE7IH0KLSAgICBUZXh0dXJlTWFwcGVy
R0xEYXRhKiBtX2RhdGE7Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBtX2NvbnRleHQ7Ci0gICAgZnJp
ZW5kIGNsYXNzIEJpdG1hcFRleHR1cmVHTDsKLX07Ci0KLS8vIEFuIG9mZnNjcmVlbiBidWZmZXIg
dG8gYmUgcmVuZGVyZWQgYnkgc29mdHdhcmUuCi1zdGF0aWMgaW5saW5lIGludCBuZXh0UG93ZXJP
ZlR3byhpbnQgbnVtKQotewotICAgIGZvciAoaW50IGkgPSAweDEwMDAwMDAwOyBpID4gMDsgaSA+
Pj0gMSkgewotICAgICAgICBpZiAobnVtID09IGkpCi0gICAgICAgICAgICByZXR1cm4gbnVtOwot
ICAgICAgICBpZiAobnVtICYgaSkKLSAgICAgICAgICAgIHJldHVybiAoaSA8PCAxKTsKLSAgICB9
Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSW50U2l6ZSBuZXh0UG93ZXJPZlR3
byhjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIHJldHVybiBJbnRTaXplKG5leHRQb3dlck9m
VHdvKHNpemUud2lkdGgoKSksIG5leHRQb3dlck9mVHdvKHNpemUuaGVpZ2h0KCkpKTsKLX0KLQot
dHlwZWRlZiB1aW50NjRfdCBJbWFnZVVJRDsKLUltYWdlVUlEIHVpZEZvckltYWdlKEltYWdlKik7
Ci0KLX07Ci0KLSNlbmRpZgotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTA4NDI4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwyMzMgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAm
JiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmbmRlZiBU
RVhNQVBfT1BFTkdMX0VTXzIKLSNkZWZpbmUgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlMgXAot
ICAgICIjZGVmaW5lIGxvd3BcbiNkZWZpbmUgaGlnaHBcbiIKLSNkZWZpbmUgT0VTMl9GUkFHTUVO
VF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT04KLSNlbHNlCi0jZGVmaW5lIE9FUzJfUFJFQ0lTSU9O
X0RFRklOSVRJT05TCi0jZGVmaW5lIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFVTFRfUFJFQ0lT
SU9OIFwKLSAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IFxuIgotI2VuZGlmCi0KLSNkZWZp
bmUgVkVSVEVYX1NIQURFUihzcmMuLi4pIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TI3NyYwot
I2RlZmluZSBGUkFHTUVOVF9TSEFERVIoc3JjLi4uKSBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9O
U1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0VTMl9GUkFHTUVOVF9TSEFERVJf
REVGQVVMVF9QUkVDSVNJT05cCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNzcmMK
LQotc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sg
PQotICAgIEZSQUdNRU5UX1NIQURFUigKLSAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgU291cmNl
VGV4dHVyZSwgTWFza1RleHR1cmU7Ci0gICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCBPcGFjaXR5
OwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0VGV4Q29vcmRTb3VyY2UsIE91dFRleENv
b3JkTWFzazsKLSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChTb3VyY2VUZXh0dXJlLCBPdXRUZXhDb29yZFNv
dXJjZSk7Ci0gICAgICAgICAgICBsb3dwIHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJEKE1hc2tU
ZXh0dXJlLCBPdXRUZXhDb29yZE1hc2spOwotICAgICAgICAgICAgbG93cCBmbG9hdCBmcmFnbWVu
dEFscGhhID0gT3BhY2l0eSAqIG1hc2tDb2xvci5hOwotICAgICAgICAgICAgZ2xfRnJhZ0NvbG9y
ID0gdmVjNChjb2xvci5yZ2IgKiBmcmFnbWVudEFscGhhLCBjb2xvci5hICogZnJhZ21lbnRBbHBo
YSk7Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVy
U291cmNlT3BhY2l0eUFuZE1hc2sgPQotICAgIFZFUlRFWF9TSEFERVIoCi0gICAgICAgIHVuaWZv
cm0gbWF0NCBJbk1hdHJpeCwgSW5Tb3VyY2VNYXRyaXgsIEluTWFza01hdHJpeDsKLSAgICAgICAg
YXR0cmlidXRlIHZlYzQgSW5WZXJ0ZXg7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiBPdXRU
ZXhDb29yZFNvdXJjZSwgT3V0VGV4Q29vcmRNYXNrOwotICAgICAgICB2b2lkIG1haW4odm9pZCkK
LSAgICAgICAgewotICAgICAgICAgICAgT3V0VGV4Q29vcmRTb3VyY2UgPSB2ZWMyKEluU291cmNl
TWF0cml4ICogSW5WZXJ0ZXgpOwotICAgICAgICAgICAgT3V0VGV4Q29vcmRNYXNrID0gdmVjMihJ
bk1hc2tNYXRyaXggKiBJblZlcnRleCk7Ci0gICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IEluTWF0
cml4ICogSW5WZXJ0ZXg7Ci0gICAgICAgIH0KLSAgICApOwotCi1zdGF0aWMgY29uc3QgY2hhciog
ZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUgPQotICAgIEZSQUdNRU5UX1NIQURFUigKLSAgICAg
ICAgdW5pZm9ybSBzYW1wbGVyMkQgU291cmNlVGV4dHVyZTsKLSAgICAgICAgdW5pZm9ybSBsb3dw
IGZsb2F0IE9wYWNpdHk7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiBPdXRUZXhDb29yZFNv
dXJjZTsKLSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxv
d3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChTb3VyY2VUZXh0dXJlLCBPdXRUZXhDb29yZFNvdXJj
ZSk7Ci0gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIE9wYWNpdHks
IGNvbG9yLmEgKiBPcGFjaXR5KTsKLSAgICAgICAgfQotICAgICk7Ci0KLXN0YXRpYyBjb25zdCBj
aGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUgPQotICAgIFZFUlRFWF9TSEFERVIoCi0gICAg
ICAgIHVuaWZvcm0gbWF0NCBJbk1hdHJpeCwgSW5Tb3VyY2VNYXRyaXg7Ci0gICAgICAgIGF0dHJp
YnV0ZSB2ZWM0IEluVmVydGV4OwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0VGV4Q29v
cmRTb3VyY2U7Ci0gICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBPdXRUZXhDb29yZFNvdXJjZSA9IHZlYzIoSW5Tb3VyY2VNYXRyaXggKiBJblZlcnRleCk7Ci0g
ICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IEluTWF0cml4ICogSW5WZXJ0ZXg7Ci0gICAgICAgIH0K
LSAgICApOwotc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlQ2xpcCA9Ci0g
ICAgRlJBR01FTlRfU0hBREVSKAotICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApOwotICAg
ICAgICB9Ci0gICAgKTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZUNs
aXAgPQotICAgIFZFUlRFWF9TSEFERVIoCi0gICAgICAgIHVuaWZvcm0gbWF0NCBJbk1hdHJpeDsK
LSAgICAgICAgYXR0cmlidXRlIHZlYzQgSW5WZXJ0ZXg7Ci0gICAgICAgIHZvaWQgbWFpbih2b2lk
KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IEluTWF0cml4ICogSW5WZXJ0
ZXg7Ci0gICAgICAgIH0KLSAgICApOwotCi12b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
Ojppbml0aWFsaXplUHJvZ3JhbSgpCi17Ci0gICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291
cmNlUHJvZ3JhbSA9IHZlcnRleFNoYWRlclNvdXJjZSgpOwotICAgIGNvbnN0IGNoYXIqIGZyYWdt
ZW50U2hhZGVyU291cmNlUHJvZ3JhbSA9IGZyYWdtZW50U2hhZGVyU291cmNlKCk7Ci0gICAgR0x1
aW50IHZlcnRleFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOwotICAg
IEdMdWludCBmcmFnbWVudFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURF
Uik7Ci0gICAgZ2xTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAmdmVydGV4U2hhZGVyU291
cmNlUHJvZ3JhbSwgMCk7Ci0gICAgZ2xTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIDEsICZm
cmFnbWVudFNoYWRlclNvdXJjZVByb2dyYW0sIDApOwotICAgIEdMdWludCBwcm9ncmFtSUQgPSBn
bENyZWF0ZVByb2dyYW0oKTsKLSAgICBnbENvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAg
ICBnbENvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsQXR0YWNoU2hhZGVyKHBy
b2dyYW1JRCwgdmVydGV4U2hhZGVyKTsKLSAgICBnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZy
YWdtZW50U2hhZGVyKTsKLSAgICBnbExpbmtQcm9ncmFtKHByb2dyYW1JRCk7Ci0KLSAgICBtX3Zl
cnRleEF0dHJpYiA9IGdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiSW5WZXJ0ZXgiKTsK
LSAgICBtX2lkID0gcHJvZ3JhbUlEOwotICAgIG1fdmVydGV4U2hhZGVyID0gdmVydGV4U2hhZGVy
OwotICAgIG1fZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNoYWRlcjsKLX0KLQotdm9pZCBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKEdMaW50ICZ2YXJpYWJs
ZSwgY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICB2YXJpYWJsZSA9IGdsR2V0VW5pZm9ybUxvY2F0
aW9uKG1faWQsIG5hbWUpOwotICAgIEFTU0VSVCh2YXJpYWJsZSA+PSAwKTsKLX0KLQotVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpCi17Ci0g
ICAgR0x1aW50IHByb2dyYW1JRCA9IG1faWQ7Ci0gICAgaWYgKCFwcm9ncmFtSUQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGdsRGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV92ZXJ0ZXhTaGFkZXIp
OwotICAgIGdsRGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKLSAgICBnbERldGFjaFNoYWRl
cihwcm9ncmFtSUQsIG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsRGVsZXRlU2hhZGVyKG1fZnJh
Z21lbnRTaGFkZXIpOwotICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwotfQotCi1QYXNz
UmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlPiBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNpbXBsZTo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCkpOwotfQotCi1UZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKQotewot
ICAgIGluaXRpYWxpemVQcm9ncmFtKCk7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNl
TWF0cml4VmFyaWFibGUsICJJblNvdXJjZU1hdHJpeCIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlv
bihtX21hdHJpeFZhcmlhYmxlLCAiSW5NYXRyaXgiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24o
bV9zb3VyY2VUZXh0dXJlVmFyaWFibGUsICJTb3VyY2VUZXh0dXJlIik7Ci0gICAgZ2V0VW5pZm9y
bUxvY2F0aW9uKG1fb3BhY2l0eVZhcmlhYmxlLCAiT3BhY2l0eSIpOwotfQotCi1jb25zdCBjaGFy
KiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6dmVydGV4U2hhZGVyU291cmNlKCkK
LXsKLSAgICByZXR1cm4gdmVydGV4U2hhZGVyU291cmNlU2ltcGxlOwotfQotCi1jb25zdCBjaGFy
KiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6ZnJhZ21lbnRTaGFkZXJTb3VyY2Uo
KQotewotICAgIHJldHVybiBmcmFnbWVudFNoYWRlclNvdXJjZVNpbXBsZTsKLX0KLQotUGFzc1Jl
ZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrPiBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpjcmVhdGUoKQotewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpKTsK
LX0KLQotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpCi17Ci0gICAgaW5pdGlhbGl6ZVByb2dy
YW0oKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhWYXJpYWJsZSwgIkluTWF0cml4
Iik7Ci0gICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlTWF0cml4VmFyaWFibGUsICJJblNv
dXJjZU1hdHJpeCIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hc2tNYXRyaXhWYXJpYWJs
ZSwgIkluTWFza01hdHJpeCIpOwotICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX3NvdXJjZVRleHR1
cmVWYXJpYWJsZSwgIlNvdXJjZVRleHR1cmUiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9t
YXNrVGV4dHVyZVZhcmlhYmxlLCAiTWFza1RleHR1cmUiKTsKLSAgICBnZXRVbmlmb3JtTG9jYXRp
b24obV9vcGFjaXR5VmFyaWFibGUsICJPcGFjaXR5Iik7Ci19Ci0KLWNvbnN0IGNoYXIqIFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OnZlcnRleFNoYWRlclNvdXJjZSgp
Ci17Ci0gICAgcmV0dXJuIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrOwotfQotCi1j
b25zdCBjaGFyKiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpmcmFn
bWVudFNoYWRlclNvdXJjZSgpCi17Ci0gICAgcmV0dXJuIGZyYWdtZW50U2hhZGVyU291cmNlT3Bh
Y2l0eUFuZE1hc2s7Ci19Ci0KLVBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1D
bGlwPiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUNsaXA6OmNyZWF0ZSgpCi17Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUNsaXAoKSk7Ci19Ci0K
LVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQ2xpcDo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1DbGlwKCkKLXsKLSAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwotICAgIGdldFVuaWZvcm1Mb2Nh
dGlvbihtX21hdHJpeFZhcmlhYmxlLCAiSW5NYXRyaXgiKTsKLX0KLQotY29uc3QgY2hhciogVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1DbGlwOjp2ZXJ0ZXhTaGFkZXJTb3VyY2UoKQotewotICAg
IHJldHVybiB2ZXJ0ZXhTaGFkZXJTb3VyY2VDbGlwOwotfQotCi1jb25zdCBjaGFyKiBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbUNsaXA6OmZyYWdtZW50U2hhZGVyU291cmNlKCkKLXsKLSAgICBy
ZXR1cm4gZnJhZ21lbnRTaGFkZXJTb3VyY2VDbGlwOwotfQotCi1UZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKQotewotICAgIEFTU0VSVChpbml0
aWFsaXplT3BlbkdMU2hpbXMoKSk7Ci19Ci0KLVRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjp+
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKQotewotICAgIG1fdGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1NYXAuY2xlYXIoKTsKLX0KLQotfTsKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaAkocmV2aXNpb24gMTA4NDI4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQ2ICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChD
KSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0g
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
X2gKLSNkZWZpbmUgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXJfaAotCi0jaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0KLSNpbmNsdWRlICJG
bG9hdFF1YWQuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMu
aCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LXR5cGVkZWYgdm9pZCogU2hhZGVyVHlwZTsKLQotY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI7Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIDogcHVibGljIFJlZkNv
dW50ZWQ8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHsKLXB1YmxpYzoKLSAgICBHTHVpbnQg
aWQoKSB7IHJldHVybiBtX2lkOyB9Ci0gICAgR0x1aW50IHZlcnRleEF0dHJpYigpIHsgcmV0dXJu
IG1fdmVydGV4QXR0cmliOyB9Ci0KLSAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbSgpOwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgVD4KLSAgICBzdGF0aWMgU2hhZGVyVHlwZSBz
aGFkZXJUeXBlKCkKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBpbnQgdHlwZSA9IDA7Ci0gICAgICAg
IHJldHVybiAmdHlwZTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIGdldFVuaWZvcm1M
b2NhdGlvbihHTGludCYgdmFyLCBjb25zdCBjaGFyKiBuYW1lKTsKLSAgICB2b2lkIGluaXRpYWxp
emVQcm9ncmFtKCk7Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2Uo
KSA9IDA7Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSgpID0g
MDsKLQotICAgIEdMdWludCBtX2lkOwotICAgIEdMdWludCBtX3ZlcnRleEF0dHJpYjsKLSAgICBH
THVpbnQgbV92ZXJ0ZXhTaGFkZXI7Ci0gICAgR0x1aW50IG1fZnJhZ21lbnRTaGFkZXI7Ci19Owot
Ci1jbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSA6IHB1YmxpYyBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU+IGNyZWF0ZSgpOwotICAgIEdMaW50IG1hdHJp
eFZhcmlhYmxlKCkgeyByZXR1cm4gbV9tYXRyaXhWYXJpYWJsZTsgfQotICAgIEdMaW50IHNvdXJj
ZU1hdHJpeFZhcmlhYmxlKCkgeyByZXR1cm4gbV9zb3VyY2VNYXRyaXhWYXJpYWJsZTsgfQotICAg
IEdMaW50IHNvdXJjZVRleHR1cmVWYXJpYWJsZSgpIHsgcmV0dXJuIG1fc291cmNlVGV4dHVyZVZh
cmlhYmxlOyB9Ci0gICAgR0xpbnQgb3BhY2l0eVZhcmlhYmxlKCkgeyByZXR1cm4gbV9vcGFjaXR5
VmFyaWFibGU7IH0KLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHZlcnRleFNo
YWRlclNvdXJjZSgpOwotICAgIHZpcnR1YWwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UoKTsKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpOwotICAgIEdMaW50
IG1fbWF0cml4VmFyaWFibGU7Ci0gICAgR0xpbnQgbV9zb3VyY2VNYXRyaXhWYXJpYWJsZTsKLSAg
ICBHTGludCBtX3NvdXJjZVRleHR1cmVWYXJpYWJsZTsKLSAgICBHTGludCBtX29wYWNpdHlWYXJp
YWJsZTsKLX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1h
c2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s+
IGNyZWF0ZSgpOwotICAgIEdMaW50IHNvdXJjZU1hdHJpeFZhcmlhYmxlKCkgeyByZXR1cm4gbV9z
b3VyY2VNYXRyaXhWYXJpYWJsZTsgfQotICAgIEdMaW50IG1hdHJpeFZhcmlhYmxlKCkgeyByZXR1
cm4gbV9tYXRyaXhWYXJpYWJsZTsgfQotICAgIEdMaW50IG1hc2tNYXRyaXhWYXJpYWJsZSgpIHsg
cmV0dXJuIG1fbWFza01hdHJpeFZhcmlhYmxlOyB9Ci0gICAgR0xpbnQgc291cmNlVGV4dHVyZVZh
cmlhYmxlKCkgeyByZXR1cm4gbV9zb3VyY2VUZXh0dXJlVmFyaWFibGU7IH0KLSAgICBHTGludCBt
YXNrVGV4dHVyZVZhcmlhYmxlKCkgeyByZXR1cm4gbV9tYXNrVGV4dHVyZVZhcmlhYmxlOyB9Ci0g
ICAgR0xpbnQgb3BhY2l0eVZhcmlhYmxlKCkgeyByZXR1cm4gbV9vcGFjaXR5VmFyaWFibGU7IH0K
LQotcHJpdmF0ZToKLSAgICBzdGF0aWMgaW50IG1fY2xhc3NJRDsKLSAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSgpOwotICAgIHZpcnR1YWwgY29uc3QgY2hhciogZnJh
Z21lbnRTaGFkZXJTb3VyY2UoKTsKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNp
dHlBbmRNYXNrKCk7Ci0gICAgR0xpbnQgbV9zb3VyY2VNYXRyaXhWYXJpYWJsZTsKLSAgICBHTGlu
dCBtX21hdHJpeFZhcmlhYmxlOwotICAgIEdMaW50IG1fbWFza01hdHJpeFZhcmlhYmxlOwotICAg
IEdMaW50IG1fc291cmNlVGV4dHVyZVZhcmlhYmxlOwotICAgIEdMaW50IG1fbWFza1RleHR1cmVW
YXJpYWJsZTsKLSAgICBHTGludCBtX29wYWNpdHlWYXJpYWJsZTsKLX07Ci0KLWNsYXNzIFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtQ2xpcCA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1DbGlwPiBjcmVhdGUoKTsKLSAgICBHTGludCBtYXRyaXhWYXJpYWJsZSgpIHsgcmV0
dXJuIG1fbWF0cml4VmFyaWFibGU7IH0KLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIHZlcnRleFNoYWRlclNvdXJjZSgpOwotICAgIHZpcnR1YWwgY29uc3QgY2hhciogZnJhZ21l
bnRTaGFkZXJTb3VyY2UoKTsKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUNsaXAoKTsK
LSAgICBHTGludCBtX21hdHJpeFZhcmlhYmxlOwotfTsKLQotY2xhc3MgVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIgewotcHVibGljOgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCk7
Ci0gICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKTsKLQotICAgIHRlbXBs
YXRlPGNsYXNzIFQ+Ci0gICAgUGFzc1JlZlB0cjxUPiBnZXRTaGFkZXJQcm9ncmFtKCkKLSAgICB7
Ci0gICAgICAgIFNoYWRlclR5cGUgc2hhZGVyVHlwZSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtOjpzaGFkZXJUeXBlPFQ+KCk7Ci0gICAgICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
TWFwOjppdGVyYXRvciBpdCA9IG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAuZmluZChz
aGFkZXJUeXBlKTsKLSAgICAgICAgaWYgKGl0ICE9IG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1NYXAuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KGl0LT5zZWNv
bmQuZ2V0KCkpOwotCi0gICAgICAgIFJlZlB0cjxUPiB0ID0gVDo6Y3JlYXRlKCk7Ci0gICAgICAg
IG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAuYWRkKHNoYWRlclR5cGUsIHQpOwotICAg
ICAgICByZXR1cm4gdDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFNo
YWRlclR5cGUsIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gPiBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbU1hcDsKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcCBt
X3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOwotfTsKLQotfQotCi0jZW5kaWYKLQotI2Vu
ZGlmIC8vIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNE
UXQuY3BwCShyZXZpc2lvbiAxMDg0MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyAr
NDAsNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBVU0UoVEVYVFVSRV9N
QVBQRVJfR0wpCi0jaW5jbHVkZSA8b3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oPgorI2luY2x1ZGUg
PHRleG1hcC9UZXh0dXJlTWFwcGVyR0wuaD4KICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQkdMKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHJldmlzaW9uIDEwODQyOCkJKGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHA6MTA4
NDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MzIgQEAKKy8qCisgQ29weXJp
Z2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlckdMLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgi
CisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9Pd25BcnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisK
KyNpZiBQTEFURk9STShRVCkKKyNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNSwg
MCwgMCkKKyNpbmNsdWRlIDxRUGxhdGZvcm1QaXhtYXA+CisjZW5kaWYKKyNlbmRpZgorCisjaWYg
ZGVmaW5lZChURVhNQVBfT1BFTkdMX0VTXzIpCisjaW5jbHVkZSA8RUdML2VnbC5oPgorI2VsaWYg
T1MoV0lORE9XUykKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxpZiBPUyhNQUNfT1NfWCkKKyNp
bmNsdWRlIDxBR0wvYWdsLmg+CisjZWxpZiBkZWZpbmVkKFhQX1VOSVgpCisjaW5jbHVkZSA8R0wv
Z2x4Lmg+CisjZW5kaWYKKworI2lmIFVTRShDQUlSTykKKyNpbmNsdWRlICJDYWlyb1V0aWxpdGll
cy5oIgorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNs
dWRlIDx3dGYvQnl0ZUFycmF5Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitp
bmxpbmUgc3RhdGljIHZvaWQgZGVidWdHTENvbW1hbmQoY29uc3QgY2hhciogY29tbWFuZCwgaW50
IGxpbmUpCit7CisgICAgY29uc3QgR0xlbnVtIGVyciA9IGdsR2V0RXJyb3IoKTsKKyAgICBpZiAo
IWVycikKKyAgICAgICAgcmV0dXJuOworICAgIFdURlJlcG9ydEVycm9yKF9fRklMRV9fLCBsaW5l
LCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAiW1RleHR1cmVNYXBwZXIgR0xdIENvbW1hbmQgZmFpbGVk
OiAlcyAoJXgpXG4iLCBjb21tYW5kLCBlcnIpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCisjaWZuZGVmIE5ERUJVRworI2RlZmluZSBHTF9DTUQoeCkge3gsIGRlYnVnR0xDb21tYW5k
KCN4LCBfX0xJTkVfXyk7IH0KKyNlbHNlCisjZGVmaW5lIEdMX0NNRCh4KSB4OworI2VuZGlmCisK
K3N0cnVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsKKyAgICBzdHJ1Y3QgU2hhcmVkR0xEYXRhIDog
cHVibGljIFJlZkNvdW50ZWQ8U2hhcmVkR0xEYXRhPiB7CisjaWYgZGVmaW5lZChURVhNQVBfT1BF
TkdMX0VTXzIpCisgICAgICAgIHR5cGVkZWYgRUdMQ29udGV4dCBHTENvbnRleHQ7CisgICAgICAg
IHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdMQ29udGV4dCgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlZ2xHZXRDdXJyZW50Q29udGV4dCgpOworICAgICAgICB9CisjZWxpZiBP
UyhXSU5ET1dTKQorICAgICAgICB0eXBlZGVmIEhHTFJDIEdMQ29udGV4dDsKKyAgICAgICAgc3Rh
dGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIHdnbEdldEN1cnJlbnRDb250ZXh0KCk7CisgICAgICAgIH0KKyNlbGlmIE9TKE1B
Q19PU19YKQorICAgICAgICB0eXBlZGVmIEFHTENvbnRleHQgR0xDb250ZXh0OworICAgICAgICBz
dGF0aWMgR0xDb250ZXh0IGdldEN1cnJlbnRHTENvbnRleHQoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gYWdsR2V0Q3VycmVudENvbnRleHQoKTsKKyAgICAgICAgfQorI2VsaWYgZGVm
aW5lZChYUF9VTklYKQorICAgICAgICB0eXBlZGVmIEdMWENvbnRleHQgR0xDb250ZXh0OworICAg
ICAgICBzdGF0aWMgR0xDb250ZXh0IGdldEN1cnJlbnRHTENvbnRleHQoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZ2xYR2V0Q3VycmVudENvbnRleHQoKTsKKyAgICAgICAgfQorI2Vs
c2UKKyAgICAgICAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgdW5rbm93biBvcGVuZ2wu
CisgICAgICAgIC8vIFJldHVybnMgYWx3YXlzIGluY3JlYXNpbmcgbnVtYmVyIGFuZCBkaXNhYmxl
cyBHTCBjb250ZXh0IGRhdGEgc2hhcmluZy4KKyAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQg
R0xDb250ZXh0OworICAgICAgICBzdGF0aWMgR0xDb250ZXh0IGdldEN1cnJlbnRHTENvbnRleHQo
KQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0aWMgR0xDb250ZXh0IGR1bW15Q29udGV4dENv
dW50ZXIgPSAwOworICAgICAgICAgICAgcmV0dXJuICsrZHVtbXlDb250ZXh0Q291bnRlcjsKKyAg
ICAgICAgfQorCisjZW5kaWYKKworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8R0xDb250ZXh0LCBT
aGFyZWRHTERhdGEqPiBHTENvbnRleHREYXRhTWFwOworICAgICAgICBzdGF0aWMgR0xDb250ZXh0
RGF0YU1hcCYgZ2xDb250ZXh0RGF0YU1hcCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRp
YyBHTENvbnRleHREYXRhTWFwIG1hcDsKKyAgICAgICAgICAgIHJldHVybiBtYXA7CisgICAgICAg
IH0KKworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRHTERhdGE+IGN1cnJlbnRTaGFy
ZWRHTERhdGEoKQorICAgICAgICB7CisgICAgICAgICAgICBHTENvbnRleHQgY3VycmVudEdMQ29u
ZXh0ID0gZ2V0Q3VycmVudEdMQ29udGV4dCgpOworICAgICAgICAgICAgR0xDb250ZXh0RGF0YU1h
cDo6aXRlcmF0b3IgaXQgPSBnbENvbnRleHREYXRhTWFwKCkuZmluZChjdXJyZW50R0xDb25leHQp
OworICAgICAgICAgICAgaWYgKGl0ICE9IGdsQ29udGV4dERhdGFNYXAoKS5lbmQoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKworICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTaGFyZWRHTERhdGEoZ2V0Q3VycmVudEdMQ29udGV4dCgpKSk7CisgICAgICAgIH0K
KworICAgICAgICBpbnQgc3RlbmNpbEluZGV4OworICAgICAgICBWZWN0b3I8SW50UmVjdD4gY2xp
cFN0YWNrOworICAgICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlciB0ZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjsKKworICAgICAgICBTaGFyZWRHTERhdGEoR0xDb250ZXh0IGdsQ29udGV4
dCkKKyAgICAgICAgICAgIDogc3RlbmNpbEluZGV4KDEpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGdsQ29udGV4dERhdGFNYXAoKS5hZGQoZ2xDb250ZXh0LCB0aGlzKTsKKyAgICAgICAgfQorCisg
ICAgICAgIH5TaGFyZWRHTERhdGEoKQorICAgICAgICB7CisgICAgICAgICAgICBHTENvbnRleHRE
YXRhTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBnbENvbnRleHREYXRhTWFwKCkuZW5kKCk7Cisg
ICAgICAgICAgICBHTENvbnRleHREYXRhTWFwOjppdGVyYXRvciBpdDsKKyAgICAgICAgICAgIGZv
ciAoaXQgPSBnbENvbnRleHREYXRhTWFwKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQgPT0gdGhpcykKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVChpdCAhPSBlbmQp
OworICAgICAgICAgICAgZ2xDb250ZXh0RGF0YU1hcCgpLnJlbW92ZShpdCk7CisgICAgICAgIH0K
KworICAgIH07CisKKyAgICBTaGFyZWRHTERhdGEmIHNoYXJlZEdMRGF0YSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gKihtX3NoYXJlZEdMRGF0YS5nZXQoKSk7CisgICAgfQorCisgICAg
dm9pZCBpbml0U3RlbmNpbCgpCisgICAgeworICAgICAgICBpZiAoZGlkTW9kaWZ5U3RlbmNpbCkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZ2xDbGVhclN0ZW5jaWwoMCk7CisgICAgICAg
IGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJfQklUKTsKKyAgICAgICAgZGlkTW9kaWZ5U3RlbmNp
bCA9IHRydWU7CisgICAgfQorCisgICAgVGV4dHVyZU1hcHBlckdMRGF0YSgpCisgICAgICAgIDog
cHJldmlvdXNQcm9ncmFtKDApCisgICAgICAgICwgZGlkTW9kaWZ5U3RlbmNpbChmYWxzZSkKKyAg
ICAgICAgLCBwcmV2aW91c1NjaXNzb3JTdGF0ZSgwKQorICAgICAgICAsIHByZXZpb3VzRGVwdGhT
dGF0ZSgwKQorICAgICAgICAsIG1fc2hhcmVkR0xEYXRhKFRleHR1cmVNYXBwZXJHTERhdGE6OlNo
YXJlZEdMRGF0YTo6Y3VycmVudFNoYXJlZEdMRGF0YSgpKQorICAgIHsgfQorCisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggcHJvamVjdGlvbk1hdHJpeDsKKyAgICBHTGludCBwcmV2aW91c1Byb2dy
YW07CisgICAgYm9vbCBkaWRNb2RpZnlTdGVuY2lsOworICAgIEdMaW50IHByZXZpb3VzU2Npc3Nv
clN0YXRlOworICAgIEdMaW50IHByZXZpb3VzRGVwdGhTdGF0ZTsKKyAgICBHTGludCB2aWV3cG9y
dFs0XTsKKyAgICBSZWZQdHI8U2hhcmVkR0xEYXRhPiBtX3NoYXJlZEdMRGF0YTsKK307CisKK2Ns
YXNzIEJpdG1hcFRleHR1cmVHTCA6IHB1YmxpYyBCaXRtYXBUZXh0dXJlIHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVzZXQoKTsKKyAgICB2b2lkIGJpbmQoKTsKKyAgICB+Qml0bWFwVGV4dHVyZUdMKCkgeyBk
ZXN0cm95KCk7IH0KKyAgICB2aXJ0dWFsIHVpbnQzMl90IGlkKCkgY29uc3QgeyByZXR1cm4gbV9p
ZDsgfQorICAgIGlubGluZSBGbG9hdFNpemUgcmVsYXRpdmVTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9yZWxhdGl2ZVNpemU7IH0KKyAgICB2b2lkIHNldFRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBl
ckdMKiB0ZXhtYXApIHsgbV90ZXh0dXJlTWFwcGVyID0gdGV4bWFwOyB9CisgICAgdm9pZCB1cGRh
dGVDb250ZW50cyhJbWFnZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JiwgUGl4ZWxG
b3JtYXQpOworICAgIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCosIGNvbnN0IEludFJl
Y3QmKTsKKworcHJpdmF0ZToKKyAgICBHTHVpbnQgbV9pZDsKKyAgICBGbG9hdFNpemUgbV9yZWxh
dGl2ZVNpemU7CisgICAgSW50U2l6ZSBtX3RleHR1cmVTaXplOworICAgIEludFJlY3QgbV9kaXJ0
eVJlY3Q7CisgICAgR0x1aW50IG1fZmJvOworICAgIEdMdWludCBtX3JibzsKKyAgICBib29sIG1f
c3VyZmFjZU5lZWRzUmVzZXQ7CisgICAgVGV4dHVyZU1hcHBlckdMKiBtX3RleHR1cmVNYXBwZXI7
CisgICAgQml0bWFwVGV4dHVyZUdMKCkKKyAgICAgICAgOiBtX2lkKDApCisgICAgICAgICwgbV9m
Ym8oMCkKKyAgICAgICAgLCBtX3JibygwKQorICAgICAgICAsIG1fc3VyZmFjZU5lZWRzUmVzZXQo
dHJ1ZSkKKyAgICAgICAgLCBtX3RleHR1cmVNYXBwZXIoMCkKKyAgICB7CisgICAgfQorCisgICAg
ZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJHTDsKK307CisKK1RleHR1cmVNYXBwZXJHTDo6VGV4
dHVyZU1hcHBlckdMKCkKKyAgICA6IG1fZGF0YShuZXcgVGV4dHVyZU1hcHBlckdMRGF0YSkKKyAg
ICAsIG1fY29udGV4dCgwKQoreworfQorCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5QYWlu
dGluZygpCit7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgbm8gR0wgZXJyb3IgY29kZSBzdGF5cyBm
cm9tIHByZXZpb3VzIG9wZXJhdGlvbnMuCisgICAgZ2xHZXRFcnJvcigpOworCisgICAgaWYgKCFp
bml0aWFsaXplT3BlbkdMU2hpbXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2xHZXRJbnRl
Z2VydihHTF9DVVJSRU5UX1BST0dSQU0sICZkYXRhKCkucHJldmlvdXNQcm9ncmFtKTsKKyAgICBk
YXRhKCkucHJldmlvdXNTY2lzc29yU3RhdGUgPSBnbElzRW5hYmxlZChHTF9TQ0lTU09SX1RFU1Qp
OworICAgIGRhdGEoKS5wcmV2aW91c0RlcHRoU3RhdGUgPSBnbElzRW5hYmxlZChHTF9ERVBUSF9U
RVNUKTsKKyAgICBnbERpc2FibGUoR0xfREVQVEhfVEVTVCk7CisgICAgZ2xFbmFibGUoR0xfU0NJ
U1NPUl9URVNUKTsKKyNpZiBQTEFURk9STShRVCkKKyAgICBpZiAobV9jb250ZXh0KSB7CisgICAg
ICAgIFFQYWludGVyKiBwYWludGVyID0gbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAg
ICAgICAgcGFpbnRlci0+c2F2ZSgpOworICAgICAgICBwYWludGVyLT5iZWdpbk5hdGl2ZVBhaW50
aW5nKCk7CisgICAgfQorI2VuZGlmCisgICAgZGF0YSgpLmRpZE1vZGlmeVN0ZW5jaWwgPSBmYWxz
ZTsKKyAgICBnbERlcHRoTWFzaygwKTsKKyAgICBnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCBk
YXRhKCkudmlld3BvcnQpOworICAgIGJpbmRTdXJmYWNlKDApOworfQorCit2b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZW5kUGFpbnRpbmcoKQoreworICAgIGlmIChkYXRhKCkuZGlkTW9kaWZ5U3RlbmNp
bCkgeworICAgICAgICBnbENsZWFyU3RlbmNpbCgxKTsKKyAgICAgICAgZ2xDbGVhcihHTF9TVEVO
Q0lMX0JVRkZFUl9CSVQpOworICAgIH0KKworICAgIGdsVXNlUHJvZ3JhbShkYXRhKCkucHJldmlv
dXNQcm9ncmFtKTsKKyAgICBpZiAoZGF0YSgpLnByZXZpb3VzU2Npc3NvclN0YXRlKQorICAgICAg
ICBnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIGVsc2UKKyAgICAgICAgZ2xEaXNhYmxl
KEdMX1NDSVNTT1JfVEVTVCk7CisKKyAgICBpZiAoZGF0YSgpLnByZXZpb3VzRGVwdGhTdGF0ZSkK
KyAgICAgICAgZ2xFbmFibGUoR0xfREVQVEhfVEVTVCk7CisgICAgZWxzZQorICAgICAgICBnbERp
c2FibGUoR0xfREVQVEhfVEVTVCk7CisKKyNpZiBQTEFURk9STShRVCkKKyAgICBpZiAoIW1fY29u
dGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgIFFQYWludGVyKiBwYWludGVyID0gbV9jb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBwYWludGVyLT5lbmROYXRpdmVQYWludGluZygpOwor
ICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKKyNlbmRpZgorfQorCisKK3ZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBGbG9h
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZs
b2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2spCit7CisgICAgaWYgKCF0ZXh0
dXJlLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNvbnN0IEJpdG1hcFRleHR1cmVH
TCYgdGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4odGV4dHVy
ZSk7CisgICAgZHJhd1RleHR1cmUodGV4dHVyZUdMLmlkKCksIHRleHR1cmVHTC5pc09wYXF1ZSgp
ID8gMCA6IFN1cHBvcnRzQmxlbmRpbmcsIHRleHR1cmVHTC5yZWxhdGl2ZVNpemUoKSwgdGFyZ2V0
UmVjdCwgbWF0cml4LCBvcGFjaXR5LCBtYXNrKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBGbG9hdFNp
emUmIHJlbGF0aXZlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBC
aXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKK3sKKyAgICBpZiAobWFza1RleHR1cmUpCisgICAg
ICAgIGRyYXdUZXh0dXJlV2l0aE1hc2tBbmRPcGFjaXR5KHRleHR1cmUsIGZsYWdzLCByZWxhdGl2
ZVNpemUsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgbWFza1RleHR1cmUp
OworICAgIGVsc2UKKyAgICAgICAgZHJhd1RleHR1cmVTaW1wbGUodGV4dHVyZSwgZmxhZ3MsIHJl
bGF0aXZlU2l6ZSwgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5LCBtYXNrVGV4
dHVyZSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhNYXNrQW5k
T3BhY2l0eSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgRmxvYXRTaXplJiBy
ZWxhdGl2ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFw
VGV4dHVyZSogbWFza1RleHR1cmUpCit7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtT3BhY2l0eUFuZE1hc2s+IHNoYWRlckluZm8gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCku
dGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbTxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrPigpOworCisgICAgR0xfQ01EKGdsVXNlUHJvZ3Jh
bShzaGFkZXJJbmZvLT5pZCgpKSkKKyAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eShzaGFkZXJJbmZvLT52ZXJ0ZXhBdHRyaWIoKSkpCisgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVy
ZShHTF9URVhUVVJFMCkpCisgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
dGV4dHVyZSkpCisgICAgR0xfQ01EKGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApKQor
ICAgIGNvbnN0IEdMZmxvYXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsK
KyAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlckluZm8tPnZlcnRleEF0dHJp
YigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHVuaXRSZWN0KSkKKworICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0
aW9uTWF0cml4KS5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgpLm11bHRpcGx5KFRyYW5zZm9ybWF0
aW9uTWF0cml4KAorICAgICAgICAgICAgdGFyZ2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLAorICAg
ICAgICAgICAgMCwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgMCwgMCwKKyAgICAgICAgICAgIDAsIDAs
IDEsIDAsCisgICAgICAgICAgICB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIDAsIDEp
KTsKKworICAgIGNvbnN0IEdMZmxvYXQgbTRbXSA9IHsKKyAgICAgICAgbWF0cml4Lm0xMSgpLCBt
YXRyaXgubTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAorICAgICAgICBtYXRyaXgu
bTIxKCksIG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCisgICAgICAg
IG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwK
KyAgICAgICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4
Lm00NCgpCisgICAgfTsKKyAgICBjb25zdCBHTGZsb2F0IG00c3JjW10gPSB7cmVsYXRpdmVTaXpl
LndpZHRoKCksIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwgcmVsYXRpdmVTaXplLmhlaWdodCgpICogKChmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSA/
IC0xIDogMSksIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwg
MCwgMSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAoZmxhZ3Mg
JiBTaG91bGRGbGlwVGV4dHVyZSkgPyByZWxhdGl2ZVNpemUuaGVpZ2h0KCkgOiAwLCAwLCAxfTsK
KworICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVySW5mby0+bWF0cml4VmFyaWFi
bGUoKSwgMSwgR0xfRkFMU0UsIG00KSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHNo
YWRlckluZm8tPnNvdXJjZU1hdHJpeFZhcmlhYmxlKCksIDEsIEdMX0ZBTFNFLCBtNHNyYykpCisg
ICAgR0xfQ01EKGdsVW5pZm9ybTFpKHNoYWRlckluZm8tPnNvdXJjZVRleHR1cmVWYXJpYWJsZSgp
LCAwKSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWYoc2hhZGVySW5mby0+b3BhY2l0eVZhcmlhYmxl
KCksIG9wYWNpdHkpKQorCisgICAgaWYgKG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkpIHsKKyAgICAg
ICAgY29uc3QgQml0bWFwVGV4dHVyZUdMKiBtYXNrVGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQml0bWFwVGV4dHVyZUdMKj4obWFza1RleHR1cmUpOworICAgICAgICBHTF9DTUQoZ2xBY3Rp
dmVUZXh0dXJlKEdMX1RFWFRVUkUxKSkKKyAgICAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgbWFza1RleHR1cmVHTC0+aWQoKSkpCisgICAgICAgIGNvbnN0IEdMZmxvYXQg
bTRtYXNrW10gPSB7bWFza1RleHR1cmVHTC0+cmVsYXRpdmVTaXplKCkud2lkdGgoKSwgMCwgMCwg
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgbWFza1RleHR1
cmVHTC0+cmVsYXRpdmVTaXplKCkuaGVpZ2h0KCksIDAsIDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDF9OworICAgICAgICBHTF9DTUQoZ2xVbmlmb3Jt
TWF0cml4NGZ2KHNoYWRlckluZm8tPm1hc2tNYXRyaXhWYXJpYWJsZSgpLCAxLCBHTF9GQUxTRSwg
bTRtYXNrKSk7CisgICAgICAgIEdMX0NNRChnbFVuaWZvcm0xaShzaGFkZXJJbmZvLT5tYXNrVGV4
dHVyZVZhcmlhYmxlKCksIDEpKQorICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RF
WFRVUkUwKSkKKyAgICB9CisKKyAgICBHTF9DTUQoZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVf
TUlOVVNfU1JDX0FMUEhBKSkKKyAgICBHTF9DTUQoZ2xFbmFibGUoR0xfQkxFTkQpKQorCisgICAg
R0xfQ01EKGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpKQorICAgIEdMX0NNRChn
bERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJJbmZvLT52ZXJ0ZXhBdHRyaWIoKSkpCit9
CisKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVNpbXBsZSh1aW50MzJfdCB0ZXh0
dXJlLCBGbGFncyBmbGFncywgY29uc3QgRmxvYXRTaXplJiByZWxhdGl2ZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmll
d01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSopCit7CisgICAgUmVm
UHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlPiBzaGFkZXJJbmZvID0gZGF0YSgp
LnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dy
YW08VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU+KCk7CisKKyAgICBHTF9DTUQoZ2xV
c2VQcm9ncmFtKHNoYWRlckluZm8tPmlkKCkpKQorICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KHNoYWRlckluZm8tPnZlcnRleEF0dHJpYigpKSkKKyAgICBHTF9DTUQoZ2xBY3Rp
dmVUZXh0dXJlKEdMX1RFWFRVUkUwKSkKKyAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCB0ZXh0dXJlKSkKKyAgICBHTF9DTUQoZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZF
UiwgMCkpCisgICAgY29uc3QgR0xmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEs
IDAsIDF9OworICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVySW5mby0+dmVy
dGV4QXR0cmliKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5pdFJlY3QpKQorCisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgp
LnByb2plY3Rpb25NYXRyaXgpLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkubXVsdGlwbHkoVHJh
bnNmb3JtYXRpb25NYXRyaXgoCisgICAgICAgICAgICB0YXJnZXRSZWN0LndpZHRoKCksIDAsIDAs
IDAsCisgICAgICAgICAgICAwLCB0YXJnZXRSZWN0LmhlaWdodCgpLCAwLCAwLAorICAgICAgICAg
ICAgMCwgMCwgMSwgMCwKKyAgICAgICAgICAgIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0Lnko
KSwgMCwgMSkpOworCisgICAgY29uc3QgR0xmbG9hdCBtNFtdID0geworICAgICAgICBtYXRyaXgu
bTExKCksIG1hdHJpeC5tMTIoKSwgbWF0cml4Lm0xMygpLCBtYXRyaXgubTE0KCksCisgICAgICAg
IG1hdHJpeC5tMjEoKSwgbWF0cml4Lm0yMigpLCBtYXRyaXgubTIzKCksIG1hdHJpeC5tMjQoKSwK
KyAgICAgICAgbWF0cml4Lm0zMSgpLCBtYXRyaXgubTMyKCksIG1hdHJpeC5tMzMoKSwgbWF0cml4
Lm0zNCgpLAorICAgICAgICBtYXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwgbWF0cml4Lm00Mygp
LCBtYXRyaXgubTQ0KCkKKyAgICB9OworICAgIGNvbnN0IEdMZmxvYXQgbTRzcmNbXSA9IHtyZWxh
dGl2ZVNpemUud2lkdGgoKSwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCByZWxhdGl2ZVNpemUuaGVpZ2h0KCkgKiAoKGZsYWdzICYgU2hvdWxkRmxpcFRl
eHR1cmUpID8gLTEgOiAxKSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCAwLCAxLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IChmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSA/IHJlbGF0aXZlU2l6ZS5oZWlnaHQoKSA6IDAs
IDAsIDF9OworCisgICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihzaGFkZXJJbmZvLT5tYXRy
aXhWYXJpYWJsZSgpLCAxLCBHTF9GQUxTRSwgbTQpKQorICAgIEdMX0NNRChnbFVuaWZvcm1NYXRy
aXg0ZnYoc2hhZGVySW5mby0+c291cmNlTWF0cml4VmFyaWFibGUoKSwgMSwgR0xfRkFMU0UsIG00
c3JjKSkKKyAgICBHTF9DTUQoZ2xVbmlmb3JtMWkoc2hhZGVySW5mby0+c291cmNlVGV4dHVyZVZh
cmlhYmxlKCksIDApKQorICAgIEdMX0NNRChnbFVuaWZvcm0xZihzaGFkZXJJbmZvLT5vcGFjaXR5
VmFyaWFibGUoKSwgb3BhY2l0eSkpCisKKyAgICBib29sIG5lZWRzQmxlbmRpbmcgPSAoZmxhZ3Mg
JiBTdXBwb3J0c0JsZW5kaW5nKSB8fCBvcGFjaXR5IDwgMC45OTsKKworICAgIGlmIChuZWVkc0Js
ZW5kaW5nKSB7CisgICAgICAgIEdMX0NNRChnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5V
U19TUkNfQUxQSEEpKQorICAgICAgICBHTF9DTUQoZ2xFbmFibGUoR0xfQkxFTkQpKQorICAgIH0g
ZWxzZQorICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdMX0JMRU5EKSkKKworICAgIEdMX0NNRChn
bERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSkKKyAgICBHTF9DTUQoZ2xEaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkoc2hhZGVySW5mby0+dmVydGV4QXR0cmliKCkpKQorfQorCitjb25z
dCBjaGFyKiBUZXh0dXJlTWFwcGVyR0w6OnR5cGUoKSBjb25zdAoreworICAgIHJldHVybiAiT3Bl
bkdMIjsKK30KKwordm9pZCBCaXRtYXBUZXh0dXJlR0w6OmRpZFJlc2V0KCkKK3sKKyAgICBJbnRT
aXplIG5ld1RleHR1cmVTaXplID0gbmV4dFBvd2VyT2ZUd28oY29udGVudFNpemUoKSk7CisgICAg
Ym9vbCBqdXN0Q3JlYXRlZCA9IGZhbHNlOworICAgIGlmICghbV9pZCkgeworICAgICAgICBHTF9D
TUQoZ2xHZW5UZXh0dXJlcygxLCAmbV9pZCkpCisgICAgICAgIGp1c3RDcmVhdGVkID0gdHJ1ZTsK
KyAgICB9CisKKyAgICBpZiAoanVzdENyZWF0ZWQgfHwgbmV3VGV4dHVyZVNpemUud2lkdGgoKSA+
IG1fdGV4dHVyZVNpemUud2lkdGgoKSB8fCBuZXdUZXh0dXJlU2l6ZS5oZWlnaHQoKSA+IG1fdGV4
dHVyZVNpemUuaGVpZ2h0KCkpIHsKKyAgICAgICAgbV90ZXh0dXJlU2l6ZSA9IG5ld1RleHR1cmVT
aXplOworICAgICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKSkK
KyAgICAgICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUikpCisgICAgICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmko
R0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpKQorICAgICAg
ICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9T
LCBHTF9DTEFNUF9UT19FREdFKSkKKyAgICAgICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSkpCisgICAgICAg
IEdMX0NNRChnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgbV90ZXh0dXJl
U2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJ
R05FRF9CWVRFLCAwKSkKKyAgICB9CisKKyAgICAvLyBXZSBkZWNyZWFzZSB0aGUgc2l6ZSBieSBv
bmUsIHNpbmNlIHRoaXMgaXMgdXNlZCBhcyByZWN0YW5nbGUgY29vcmRpbmF0ZXMgYW5kIG5vdCBh
cyBzaXplLgorICAgIG1fcmVsYXRpdmVTaXplID0gRmxvYXRTaXplKGZsb2F0KGNvbnRlbnRTaXpl
KCkud2lkdGgoKSAtIDEpIC8gbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBmbG9hdChjb250ZW50U2l6
ZSgpLmhlaWdodCgpIC0gMSkgLyBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsKKyAgICBtX3N1cmZh
Y2VOZWVkc1Jlc2V0ID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgc3dpenpsZUJHUkFUb1JHQkEo
dWludDMyX3QqIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgaW50IHdpZHRoID0g
c2l6ZS53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBzaXplLmhlaWdodCgpOworICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpIHsKKyAgICAgICAgdWludDMyX3QqIHAgPSBkYXRh
ICsgeSAqIHdpZHRoOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpCisg
ICAgICAgICAgICBwW3hdID0gKChwW3hdIDw8IDE2KSAmIDB4ZmYwMDAwKSB8ICgocFt4XSA+PiAx
NikgJiAweGZmKSB8IChwW3hdICYgMHhmZjAwZmYwMCk7CisgICAgfQorfQorCisvLyBGSVhNRTog
TW92ZSB0aGlzIHRvIEV4dGVuc2lvbnMzRCB3aGVuIHdlIG1vdmUgVGV4dHVyZU1hcHBlciB0byB1
c2UgR0MzRC4KK3N0YXRpYyBib29sIGhhc0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHRlbnNpb24p
Cit7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGF2YWlsYWJsZUV4dGVuc2lvbnM7CisgICAg
aWYgKCFhdmFpbGFibGVFeHRlbnNpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGF2YWls
YWJsZUV4dGVuc2lvbnMuY29udGFpbnMoZXh0ZW5zaW9uKTsKKyAgICBTdHJpbmcgZXh0ZW5zaW9u
c1N0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihnbEdldFN0cmluZyhHTF9FWFRF
TlNJT05TKSkpOworICAgIGV4dGVuc2lvbnNTdHJpbmcuc3BsaXQoIiAiLCBhdmFpbGFibGVFeHRl
bnNpb25zKTsKKyAgICByZXR1cm4gYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhleHRlbnNp
b24pOworfQorc3RhdGljIGJvb2wgaGFzQkdSQUV4dGVuc2lvbigpCit7CisjaWYgIWRlZmluZWQo
VEVYTUFQX09QRU5HTF9FU18yKQorICAgIHJldHVybiB0cnVlOworI2VuZGlmCisgICAgc3RhdGlj
IGJvb2wgaGFzQkdSQSA9IGhhc0V4dGVuc2lvbigiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4
ODg4Iik7CisgICAgcmV0dXJuIGhhc0JHUkE7Cit9CisKK3ZvaWQgQml0bWFwVGV4dHVyZUdMOjp1
cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0
KQoreworICAgIEdMdWludCBnbEZvcm1hdCA9IEdMX1JHQkE7CisgICAgR0xfQ01EKGdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpCisgICAgaWYgKGhhc0JHUkFFeHRlbnNpb24oKSkK
KyAgICAgICAgZ2xGb3JtYXQgPSBHTF9CR1JBOworICAgIGVsc2UgeworICAgICAgICBzd2l6emxl
QkdSQVRvUkdCQShzdGF0aWNfY2FzdDx1aW50MzJfdCo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEp
KSwgdGFyZ2V0UmVjdC5zaXplKCkpOworICAgICAgICBnbEZvcm1hdCA9IEdMX1JHQkE7CisgICAg
fQorCisgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRS
ZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5o
ZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGRhdGEpKQorfQorCit2b2lkIEJp
dG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0
JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBCaXRtYXBUZXh0dXJlOjpQ
aXhlbEZvcm1hdCBmb3JtYXQpCit7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKQorICAgIEdMdWlu
dCBnbEZvcm1hdCA9IGlzT3BhcXVlKCkgPyBHTF9SR0IgOiBHTF9SR0JBOworICAgIE5hdGl2ZUlt
YWdlUHRyIGZyYW1lSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsK
KyAgICBpZiAoIWZyYW1lSW1hZ2UpCisgICAgICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKFFU
KQorICAgIFFJbWFnZSBxdEltYWdlOworCisjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NI
RUNLKDUsIDAsIDApCisgICAgLy8gV2l0aCBRUEEsIHdlIGNhbiBhdm9pZCBhIGRlZXAgY29weS4K
KyAgICBxdEltYWdlID0gKmZyYW1lSW1hZ2UtPmhhbmRsZSgpLT5idWZmZXIoKTsKKyNlbHNlCisg
ICAgLy8gVGhpcyBtaWdodCBiZSBhIGRlZXAgY29weSwgZGVwZW5kaW5nIG9uIG90aGVyIHJlZmVy
ZW5jZXMgdG8gdGhlIHBpeG1hcC4KKyAgICBxdEltYWdlID0gZnJhbWVJbWFnZS0+dG9JbWFnZSgp
OworI2VuZGlmCisKKyAgICBpZiAoSW50U2l6ZShxdEltYWdlLnNpemUoKSkgIT0gc291cmNlUmVj
dC5zaXplKCkpCisgICAgICAgIHF0SW1hZ2UgPSBxdEltYWdlLmNvcHkoc291cmNlUmVjdCk7Cisg
ICAgaWYgKGZvcm1hdCA9PSBCR1JBRm9ybWF0IHx8IGZvcm1hdCA9PSBCR1JGb3JtYXQpIHsKKyAg
ICAgICAgaWYgKGhhc0JHUkFFeHRlbnNpb24oKSkKKyAgICAgICAgICAgIGdsRm9ybWF0ID0gaXNP
cGFxdWUoKSA/IEdMX0JHUiA6IEdMX0JHUkE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN3
aXp6bGVCR1JBVG9SR0JBKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihxdEltYWdlLmJpdHMo
KSksIHF0SW1hZ2Uuc2l6ZSgpKTsKKyAgICB9CisgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJl
Y3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIEdMX1VOU0lHTkVEX0JZ
VEUsIHF0SW1hZ2UuY29uc3RCaXRzKCkpKQorCisjZWxpZiBVU0UoQ0FJUk8pCisKKyNpZiAhQ1BV
KEJJR19FTkRJQU4pCisjaWYgZGVmaW5lZChURVhNQVBfT1BFTkdMX0VTXzIpCisgICAgc3dpenps
ZUJHUkFUb1JHQkEocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2RhdGEoZnJhbWVJbWFnZSkpLAorICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShmcmFtZUltYWdlKSAqIGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2hlaWdodChmcmFtZUltYWdlKSk7CisjZWxzZQorICAgIGdsRm9ybWF0ID0gaXNPcGFxdWUo
KSA/IEdMX0JHUiA6IEdMX0JHUkE7CisjZW5kaWYKKyNlbmRpZgorCisgICAgZ2xQaXhlbFN0b3Jl
aShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGZy
YW1lSW1hZ2UpIC8gNCk7CisgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCBz
b3VyY2VSZWN0LnkoKSk7CisgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMs
IHNvdXJjZVJlY3QueCgpKTsKKyAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVf
MkQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0
UmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LndpZHRoKCks
IHRhcmdldFJlY3QuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBnbEZvcm1h
dCwgR0xfVU5TSUdORURfQllURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X2RhdGEoZnJhbWVJbWFnZSkpKTsKKyAgICBnbFBpeGVsU3RvcmVpKEdM
X1VOUEFDS19ST1dfTEVOR1RILCAwKTsKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQ
X1JPV1MsIDApOworICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUElYRUxTLCAwKTsK
KyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNyZWF0ZVBy
b2plY3Rpb25NYXRyaXgoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBmbGlwKQoreworICAgIGNv
bnN0IGZsb2F0IG5lYXIgPSA5OTk5OTk5OworICAgIGNvbnN0IGZsb2F0IGZhciA9IC05OTk5OTsK
KworICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgyLjAgLyBmbG9hdChzaXplLndpZHRo
KCkpLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAoZmxpcCA/
IC0yLjAgOiAyLjApIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSksIDAsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsIDAsIC0yLmYgLyAoZmFyIC0gbmVhciksIDAsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBmbGlwID8gMSA6IC0xLCAtKGZhciArIG5lYXIp
IC8gKGZhciAtIG5lYXIpLCAxKTsKK30KKwordm9pZCBCaXRtYXBUZXh0dXJlR0w6OmJpbmQoKQor
eworICAgIGludCYgc3RlbmNpbEluZGV4ID0gbV90ZXh0dXJlTWFwcGVyLT5kYXRhKCkuc2hhcmVk
R0xEYXRhKCkuc3RlbmNpbEluZGV4OworICAgIGlmIChtX3N1cmZhY2VOZWVkc1Jlc2V0IHx8ICFt
X2ZibykgeworICAgICAgICBpZiAoIW1fZmJvKQorICAgICAgICAgICAgR0xfQ01EKGdsR2VuRnJh
bWVidWZmZXJzKDEsICZtX2ZibykpCisgICAgICAgIGlmICghbV9yYm8pCisgICAgICAgICAgICBH
TF9DTUQoZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX3JibykpOworICAgICAgICBHTF9DTUQoZ2xC
aW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9yYm8pKQorI2lmZGVmIFRFWE1BUF9P
UEVOR0xfRVNfMgorICAgICAgICBHTF9DTUQoZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRF
UkJVRkZFUiwgR0xfU1RFTkNJTF9JTkRFWDgsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0
dXJlU2l6ZS5oZWlnaHQoKSkpCisjZWxzZQorICAgICAgICBHTF9DTUQoZ2xSZW5kZXJidWZmZXJT
dG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgR0xfREVQVEhfU1RFTkNJTCwgbV90ZXh0dXJlU2l6ZS53
aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKSkKKyNlbmRpZgorICAgICAgICBHTF9DTUQo
Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKSkKKyAgICAgICAgR0xfQ01E
KGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCkpCisgICAgICAgIEdMX0NNRChnbEJpbmRS
ZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCAwKSkKKyAgICAgICAgR0xfQ01EKGdsRnJhbWVi
dWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9U
RVhUVVJFXzJELCBpZCgpLCAwKSkKKyAgICAgICAgR0xfQ01EKGdsRnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVG
RkVSLCBtX3JibykpCisgICAgICAgIEdMX0NNRChnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCkpCisg
ICAgICAgIEdMX0NNRChnbENsZWFyU3RlbmNpbChzdGVuY2lsSW5kZXggLSAxKSkKKyAgICAgICAg
R0xfQ01EKGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJfQklUIHwgR0xfQ09MT1JfQlVGRkVSX0JJ
VCkpCisgICAgICAgIG1fc3VyZmFjZU5lZWRzUmVzZXQgPSBmYWxzZTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2ZibykpCisK
KyAgICBnbFN0ZW5jaWxPcChHTF9LRUVQLCBHTF9LRUVQLCBHTF9LRUVQKTsKKyAgICBnbFN0ZW5j
aWxGdW5jKHN0ZW5jaWxJbmRleCA+IDEgPyBHTF9HRVFVQUwgOiBHTF9BTFdBWVMsIHN0ZW5jaWxJ
bmRleCAtIDEsIHN0ZW5jaWxJbmRleCAtIDEpOworICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAs
IHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKQorICAgIG1fdGV4dHVyZU1hcHBlci0+
ZGF0YSgpLnByb2plY3Rpb25NYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KHNpemUoKSwg
ZmFsc2UpOworfQorCit2b2lkIEJpdG1hcFRleHR1cmVHTDo6ZGVzdHJveSgpCit7CisgICAgaWYg
KG1faWQpCisgICAgICAgIEdMX0NNRChnbERlbGV0ZVRleHR1cmVzKDEsICZtX2lkKSkKKworICAg
IGlmIChtX2ZibykKKyAgICAgICAgR0xfQ01EKGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zi
bykpCisKKyAgICBpZiAobV9yYm8pCisgICAgICAgIEdMX0NNRChnbERlbGV0ZVJlbmRlcmJ1ZmZl
cnMoMSwgJm1fcmJvKSkKKworICAgIG1fZmJvID0gMDsKKyAgICBtX2lkID0gMDsKKyAgICBtX3Rl
eHR1cmVTaXplID0gSW50U2l6ZSgpOworICAgIG1fcmVsYXRpdmVTaXplID0gRmxvYXRTaXplKDEs
IDEpOworfQorCitib29sIEJpdG1hcFRleHR1cmVHTDo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1faWQ7Cit9CisKK0ludFNpemUgQml0bWFwVGV4dHVyZUdMOjpzaXplKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV90ZXh0dXJlU2l6ZTsKK30KKworVGV4dHVyZU1hcHBlckdMOjp+VGV4
dHVyZU1hcHBlckdMKCkKK3sKKyAgICBkZWxldGUgbV9kYXRhOworfQorCit2b2lkIFRleHR1cmVN
YXBwZXJHTDo6YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSAqc3VyZmFjZVBvaW50ZXIpCit7Cisg
ICAgQml0bWFwVGV4dHVyZUdMKiBzdXJmYWNlID0gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZUdM
Kj4oc3VyZmFjZVBvaW50ZXIpOworCisgICAgaWYgKCFzdXJmYWNlKSB7CisgICAgICAgIEludFNp
emUgdmlld3BvcnRTaXplKGRhdGEoKS52aWV3cG9ydFsyXSwgZGF0YSgpLnZpZXdwb3J0WzNdKTsK
KyAgICAgICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKSkKKyAg
ICAgICAgZGF0YSgpLnByb2plY3Rpb25NYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KHZp
ZXdwb3J0U2l6ZSwgdHJ1ZSk7CisgICAgICAgIEdMX0NNRChnbFN0ZW5jaWxGdW5jKGRhdGEoKS5z
aGFyZWRHTERhdGEoKS5zdGVuY2lsSW5kZXggPiAxID8gR0xfRVFVQUwgOiBHTF9BTFdBWVMsIGRh
dGEoKS5zaGFyZWRHTERhdGEoKS5zdGVuY2lsSW5kZXggLSAxLCBkYXRhKCkuc2hhcmVkR0xEYXRh
KCkuc3RlbmNpbEluZGV4IC0gMSkpCisgICAgICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9LRUVQ
LCBHTF9LRUVQLCBHTF9LRUVQKSkKKyAgICAgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgdmll
d3BvcnRTaXplLndpZHRoKCksIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSkpCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBzdXJmYWNlLT5iaW5kKCk7Cit9CisKK3N0YXRpYyB2b2lkIHNjaXNz
b3JDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgR0xpbnQgdmlld3BvcnRbNF07Cisg
ICAgZ2xHZXRJbnRlZ2VydihHTF9WSUVXUE9SVCwgdmlld3BvcnQpOworICAgIGdsU2Npc3Nvcihy
ZWN0LngoKSwgdmlld3BvcnRbM10gLSByZWN0Lm1heFkoKSArIDEsIHJlY3Qud2lkdGgoKSAtIDEs
IHJlY3QuaGVpZ2h0KCkgLSAxKTsKK30KKworYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luU2Np
c3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29u
c3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0KQoreworICAgIEZsb2F0UXVhZCBxdWFkID0gbW9kZWxW
aWV3TWF0cml4LnByb2plY3RRdWFkKHRhcmdldFJlY3QpOworICAgIEludFJlY3QgcmVjdCA9IHF1
YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKworICAgIC8vIE9ubHkgdXNlIHNjaXNzb3JzIG9u
IHJlY3RpbGluZWFyIGNsaXBzLgorICAgIGlmICghcXVhZC5pc1JlY3RpbGluZWFyKCkgfHwgcmVj
dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGF0YSgpLnNoYXJlZEdMRGF0YSgpLmNsaXBTdGFjay5h
cHBlbmQoSW50UmVjdCgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8v
IEludGVyc2VjdCB3aXRoIHByZXZpb3VzIGNsaXAuCisgICAgZm9yIChpbnQgaSA9IGRhdGEoKS5z
aGFyZWRHTERhdGEoKS5jbGlwU3RhY2suc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAg
ICAgY29uc3QgSW50UmVjdCYgcHJldlJlY3QgPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuY2xpcFN0
YWNrW2ldOworICAgICAgICBpZiAocHJldlJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSBsYXN0IHZhbGlkIGNsaXAuCisg
ICAgICAgIHJlY3QuaW50ZXJzZWN0KHByZXZSZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgc2Npc3NvckNsaXAocmVjdCk7CisgICAgZGF0YSgpLnNoYXJlZEdMRGF0YSgpLmNsaXBT
dGFjay5hcHBlbmQocmVjdCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUZXh0dXJl
TWFwcGVyR0w6OmVuZFNjaXNzb3JDbGlwKCkKK3sKKyAgICBkYXRhKCkuc2hhcmVkR0xEYXRhKCku
Y2xpcFN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICBBU1NFUlQoIWRhdGEoKS5zaGFyZWRHTERhdGEo
KS5jbGlwU3RhY2suaXNFbXB0eSgpKTsKKworICAgIEludFJlY3QgcmVjdCA9IGRhdGEoKS5zaGFy
ZWRHTERhdGEoKS5jbGlwU3RhY2subGFzdCgpOworICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc2Npc3NvckNsaXAocmVjdCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRS
ZWN0KQoreworICAgIGlmIChiZWdpblNjaXNzb3JDbGlwKG1vZGVsVmlld01hdHJpeCwgdGFyZ2V0
UmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGRhdGEoKS5pbml0U3RlbmNpbCgpOworCisg
ICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQ2xpcD4gc2hhZGVySW5mbyA9IGRh
dGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQ
cm9ncmFtPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQ2xpcD4oKTsKKworICAgIEdMX0NNRChn
bFVzZVByb2dyYW0oc2hhZGVySW5mby0+aWQoKSkpCisgICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4
QXR0cmliQXJyYXkoc2hhZGVySW5mby0+dmVydGV4QXR0cmliKCkpKQorICAgIGNvbnN0IEdMZmxv
YXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKKyAgICBHTF9DTUQoZ2xW
ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlckluZm8tPnZlcnRleEF0dHJpYigpLCAyLCBHTF9GTE9B
VCwgR0xfRkFMU0UsIDAsIHVuaXRSZWN0KSkKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1h
dHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KQorICAg
ICAgICAgICAgLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkKKyAgICAgICAgICAgIC5tdWx0aXBs
eShUcmFuc2Zvcm1hdGlvbk1hdHJpeCh0YXJnZXRSZWN0LndpZHRoKCksIDAsIDAsIDAsCisgICAg
ICAgICAgICAgICAgMCwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgMCwgMCwKKyAgICAgICAgICAgICAg
ICAwLCAwLCAxLCAwLAorICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0
LnkoKSwgMCwgMSkpOworCisgICAgY29uc3QgR0xmbG9hdCBtNFtdID0geworICAgICAgICBtYXRy
aXgubTExKCksIG1hdHJpeC5tMTIoKSwgbWF0cml4Lm0xMygpLCBtYXRyaXgubTE0KCksCisgICAg
ICAgIG1hdHJpeC5tMjEoKSwgbWF0cml4Lm0yMigpLCBtYXRyaXgubTIzKCksIG1hdHJpeC5tMjQo
KSwKKyAgICAgICAgbWF0cml4Lm0zMSgpLCBtYXRyaXgubTMyKCksIG1hdHJpeC5tMzMoKSwgbWF0
cml4Lm0zNCgpLAorICAgICAgICBtYXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwgbWF0cml4Lm00
MygpLCBtYXRyaXgubTQ0KCkKKyAgICB9OworCisgICAgaW50JiBzdGVuY2lsSW5kZXggPSBkYXRh
KCkuc2hhcmVkR0xEYXRhKCkuc3RlbmNpbEluZGV4OworCisgICAgR0xfQ01EKGdsVW5pZm9ybU1h
dHJpeDRmdihzaGFkZXJJbmZvLT5tYXRyaXhWYXJpYWJsZSgpLCAxLCBHTF9GQUxTRSwgbTQpKQor
ICAgIEdMX0NNRChnbEVuYWJsZShHTF9TVEVOQ0lMX1RFU1QpKQorICAgIEdMX0NNRChnbFN0ZW5j
aWxGdW5jKEdMX05FVkVSLCBzdGVuY2lsSW5kZXgsIHN0ZW5jaWxJbmRleCkpCisgICAgR0xfQ01E
KGdsU3RlbmNpbE9wKEdMX1JFUExBQ0UsIEdMX1JFUExBQ0UsIEdMX1JFUExBQ0UpKQorICAgIEdM
X0NNRChnbFN0ZW5jaWxNYXNrKDB4ZmYgJiB+KHN0ZW5jaWxJbmRleCAtIDEpKSkKKyAgICBHTF9D
TUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpCisgICAgR0xfQ01EKGdsU3Rl
bmNpbE9wKEdMX0tFRVAsIEdMX0tFRVAsIEdMX0tFRVApKQorICAgIHN0ZW5jaWxJbmRleCA8PD0g
MTsKKyAgICBnbFN0ZW5jaWxGdW5jKHN0ZW5jaWxJbmRleCA+IDEgPyBHTF9FUVVBTCA6IEdMX0FM
V0FZUywgc3RlbmNpbEluZGV4IC0gMSwgc3RlbmNpbEluZGV4IC0gMSk7CisgICAgR0xfQ01EKGds
RGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlckluZm8tPnZlcnRleEF0dHJpYigpKSkKK30K
Kwordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZENsaXAoKQoreworICAgIGlmIChlbmRTY2lzc29y
Q2xpcCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuc3Rl
bmNpbEluZGV4ID4+PSAxOworICAgIGdsU3RlbmNpbEZ1bmMoZGF0YSgpLnNoYXJlZEdMRGF0YSgp
LnN0ZW5jaWxJbmRleCA+IDEgPyBHTF9FUVVBTCA6IEdMX0FMV0FZUywgZGF0YSgpLnNoYXJlZEdM
RGF0YSgpLnN0ZW5jaWxJbmRleCAtIDEsIGRhdGEoKS5zaGFyZWRHTERhdGEoKS5zdGVuY2lsSW5k
ZXggLSAxKTsgICAgCisKKyAgICAvLyBBZnRlciB3ZSd2ZSBjbGVhcmVkIHRoZSBsYXN0IG5vbi1y
ZWN0YWxpbmVhciBjbGlwLCB3ZSBkaXNhYmxlIHRoZSBzdGVuY2lsIHRlc3QuCisgICAgaWYgKGRh
dGEoKS5zaGFyZWRHTERhdGEoKS5zdGVuY2lsSW5kZXggPT0gMSkKKyAgICAgICAgR0xfQ01EKGds
RGlzYWJsZShHTF9TVEVOQ0lMX1RFU1QpKQorCit9CisKK1Bhc3NSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICBCaXRtYXBUZXh0dXJl
R0wqIHRleHR1cmUgPSBuZXcgQml0bWFwVGV4dHVyZUdMKCk7CisgICAgdGV4dHVyZS0+c2V0VGV4
dHVyZU1hcHBlcih0aGlzKTsKKyAgICByZXR1cm4gYWRvcHRSZWYodGV4dHVyZSk7Cit9CisKK1Bh
c3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1DcmVhdGVBY2Nl
bGVyYXRlZCgpCit7CisgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCk7Cit9CisK
K307CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCShyZXZpc2lvbiAxMDg0MjgpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaDoxMDg0
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdMLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
CisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFRleHR1cmVNYXBwZXJHTF9oCisjZGVm
aW5lIFRleHR1cmVNYXBwZXJHTF9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGV4dHVyZU1hcHBlckdMRGF0YTsKK2NsYXNz
IEdyYXBoaWNzQ29udGV4dDsKKworLy8gQW4gT3BlbkdMLUVTMiBpbXBsZW1lbnRhdGlvbiBvZiBU
ZXh0dXJlTWFwcGVyLgorY2xhc3MgVGV4dHVyZU1hcHBlckdMIDogcHVibGljIFRleHR1cmVNYXBw
ZXIgeworcHVibGljOgorICAgIFRleHR1cmVNYXBwZXJHTCgpOworICAgIHZpcnR1YWwgflRleHR1
cmVNYXBwZXJHTCgpOworCisgICAgZW51bSBGbGFnIHsKKyAgICAgICAgU3VwcG9ydHNCbGVuZGlu
ZyA9IDB4MDEsCisgICAgICAgIFNob3VsZEZsaXBUZXh0dXJlID0gMHgwMgorICAgIH07CisKKyAg
ICB0eXBlZGVmIGludCBGbGFnczsKKworICAgIC8vIHJlaW1wcyBmcm9tIFRleHR1cmVNYXBwZXIK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwg
Y29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3
VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncywgY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBj
b25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdU
ZXh0dXJlV2l0aE1hc2tBbmRPcGFjaXR5KHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBG
bG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYs
IGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmVTaW1wbGUodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MsIGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpOwor
ICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29u
c3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luUGFpbnRpbmcoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZW5kUGFpbnRpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kQ2xpcCgpOwor
ICAgIHZpcnR1YWwgSW50U2l6ZSBtYXhUZXh0dXJlU2l6ZSgpIHsgcmV0dXJuIEludFNpemUoMjAw
MCwgMjAwMCk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRl
VGV4dHVyZSgpOworICAgIHZpcnR1YWwgY29uc3QgY2hhciogdHlwZSgpIGNvbnN0OworICAgIHN0
YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXJHTD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQ
dHIobmV3IFRleHR1cmVNYXBwZXJHTCk7IH0KKyAgICB2b2lkIHNldEdyYXBoaWNzQ29udGV4dChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQpIHsgbV9jb250ZXh0ID0gY29udGV4dDsgfQorICAgIEdy
YXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9Cisg
ICAgdmlydHVhbCBib29sIGlzT3BlbkdMQmFja2VkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZvaWQgcGxhdGZvcm1VcGRhdGVDb250ZW50cyhOYXRpdmVJbWFnZVB0ciwgY29uc3QgSW50
UmVjdCYsIGNvbnN0IEludFJlY3QmLCBCaXRtYXBUZXh0dXJlOjpQaXhlbEZvcm1hdCk7CisgICAg
dmlydHVhbCBBY2NlbGVyYXRpb25Nb2RlIGFjY2VsZXJhdGlvbk1vZGUoKSBjb25zdCB7IHJldHVy
biBPcGVuR0xNb2RlOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBiZWdpblNjaXNzb3JDbGlwKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgYm9vbCBl
bmRTY2lzc29yQ2xpcCgpOworICAgIGlubGluZSBUZXh0dXJlTWFwcGVyR0xEYXRhJiBkYXRhKCkg
eyByZXR1cm4gKm1fZGF0YTsgfQorICAgIFRleHR1cmVNYXBwZXJHTERhdGEqIG1fZGF0YTsKKyAg
ICBHcmFwaGljc0NvbnRleHQqIG1fY29udGV4dDsKKyAgICBmcmllbmQgY2xhc3MgQml0bWFwVGV4
dHVyZUdMOworfTsKKworLy8gQW4gb2Zmc2NyZWVuIGJ1ZmZlciB0byBiZSByZW5kZXJlZCBieSBz
b2Z0d2FyZS4KK3N0YXRpYyBpbmxpbmUgaW50IG5leHRQb3dlck9mVHdvKGludCBudW0pCit7Cisg
ICAgZm9yIChpbnQgaSA9IDB4MTAwMDAwMDA7IGkgPiAwOyBpID4+PSAxKSB7CisgICAgICAgIGlm
IChudW0gPT0gaSkKKyAgICAgICAgICAgIHJldHVybiBudW07CisgICAgICAgIGlmIChudW0gJiBp
KQorICAgICAgICAgICAgcmV0dXJuIChpIDw8IDEpOworICAgIH0KKyAgICByZXR1cm4gMTsKK30K
Kworc3RhdGljIGlubGluZSBJbnRTaXplIG5leHRQb3dlck9mVHdvKGNvbnN0IEludFNpemUmIHNp
emUpCit7CisgICAgcmV0dXJuIEludFNpemUobmV4dFBvd2VyT2ZUd28oc2l6ZS53aWR0aCgpKSwg
bmV4dFBvd2VyT2ZUd28oc2l6ZS5oZWlnaHQoKSkpOworfQorCit0eXBlZGVmIHVpbnQ2NF90IElt
YWdlVUlEOworSW1hZ2VVSUQgdWlkRm9ySW1hZ2UoSW1hZ2UqKTsKKworfTsKKworI2VuZGlmCisK
KyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3Bw
CShyZXZpc2lvbiAxMDg0MjgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHA6MTA4NDI4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzMyBAQAorLyoKKyBDb3B5cmlnaHQg
KEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisK
KyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
I2lmbmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKKyNkZWZpbmUgT0VTMl9QUkVDSVNJT05fREVGSU5J
VElPTlMgXAorICAgICIjZGVmaW5lIGxvd3BcbiNkZWZpbmUgaGlnaHBcbiIKKyNkZWZpbmUgT0VT
Ml9GUkFHTUVOVF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT04KKyNlbHNlCisjZGVmaW5lIE9FUzJf
UFJFQ0lTSU9OX0RFRklOSVRJT05TCisjZGVmaW5lIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFV
TFRfUFJFQ0lTSU9OIFwKKyAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IFxuIgorI2VuZGlm
CisKKyNkZWZpbmUgVkVSVEVYX1NIQURFUihzcmMuLi4pIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJ
T05TI3NyYworI2RlZmluZSBGUkFHTUVOVF9TSEFERVIoc3JjLi4uKSBPRVMyX1BSRUNJU0lPTl9E
RUZJTklUSU9OU1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0VTMl9GUkFHTUVO
VF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT05cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICNzcmMKKworc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0
eUFuZE1hc2sgPQorICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICAgICAgdW5pZm9ybSBzYW1wbGVy
MkQgU291cmNlVGV4dHVyZSwgTWFza1RleHR1cmU7CisgICAgICAgIHVuaWZvcm0gbG93cCBmbG9h
dCBPcGFjaXR5OworICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgT3V0VGV4Q29vcmRTb3VyY2Us
IE91dFRleENvb3JkTWFzazsKKyAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChTb3VyY2VUZXh0dXJlLCBPdXRU
ZXhDb29yZFNvdXJjZSk7CisgICAgICAgICAgICBsb3dwIHZlYzQgbWFza0NvbG9yID0gdGV4dHVy
ZTJEKE1hc2tUZXh0dXJlLCBPdXRUZXhDb29yZE1hc2spOworICAgICAgICAgICAgbG93cCBmbG9h
dCBmcmFnbWVudEFscGhhID0gT3BhY2l0eSAqIG1hc2tDb2xvci5hOworICAgICAgICAgICAgZ2xf
RnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBmcmFnbWVudEFscGhhLCBjb2xvci5hICogZnJh
Z21lbnRBbHBoYSk7CisgICAgICAgIH0KKyAgICApOworCitzdGF0aWMgY29uc3QgY2hhciogdmVy
dGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sgPQorICAgIFZFUlRFWF9TSEFERVIoCisgICAg
ICAgIHVuaWZvcm0gbWF0NCBJbk1hdHJpeCwgSW5Tb3VyY2VNYXRyaXgsIEluTWFza01hdHJpeDsK
KyAgICAgICAgYXR0cmlidXRlIHZlYzQgSW5WZXJ0ZXg7CisgICAgICAgIHZhcnlpbmcgaGlnaHAg
dmVjMiBPdXRUZXhDb29yZFNvdXJjZSwgT3V0VGV4Q29vcmRNYXNrOworICAgICAgICB2b2lkIG1h
aW4odm9pZCkKKyAgICAgICAgeworICAgICAgICAgICAgT3V0VGV4Q29vcmRTb3VyY2UgPSB2ZWMy
KEluU291cmNlTWF0cml4ICogSW5WZXJ0ZXgpOworICAgICAgICAgICAgT3V0VGV4Q29vcmRNYXNr
ID0gdmVjMihJbk1hc2tNYXRyaXggKiBJblZlcnRleCk7CisgICAgICAgICAgICBnbF9Qb3NpdGlv
biA9IEluTWF0cml4ICogSW5WZXJ0ZXg7CisgICAgICAgIH0KKyAgICApOworCitzdGF0aWMgY29u
c3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUgPQorICAgIEZSQUdNRU5UX1NIQURF
UigKKyAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgU291cmNlVGV4dHVyZTsKKyAgICAgICAgdW5p
Zm9ybSBsb3dwIGZsb2F0IE9wYWNpdHk7CisgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiBPdXRU
ZXhDb29yZFNvdXJjZTsKKyAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChTb3VyY2VUZXh0dXJlLCBPdXRUZXhD
b29yZFNvdXJjZSk7CisgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAq
IE9wYWNpdHksIGNvbG9yLmEgKiBPcGFjaXR5KTsKKyAgICAgICAgfQorICAgICk7CisKK3N0YXRp
YyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUgPQorICAgIFZFUlRFWF9TSEFE
RVIoCisgICAgICAgIHVuaWZvcm0gbWF0NCBJbk1hdHJpeCwgSW5Tb3VyY2VNYXRyaXg7CisgICAg
ICAgIGF0dHJpYnV0ZSB2ZWM0IEluVmVydGV4OworICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIg
T3V0VGV4Q29vcmRTb3VyY2U7CisgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICB7Cisg
ICAgICAgICAgICBPdXRUZXhDb29yZFNvdXJjZSA9IHZlYzIoSW5Tb3VyY2VNYXRyaXggKiBJblZl
cnRleCk7CisgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IEluTWF0cml4ICogSW5WZXJ0ZXg7Cisg
ICAgICAgIH0KKyAgICApOworc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNl
Q2xpcCA9CisgICAgRlJBR01FTlRfU0hBREVSKAorICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAw
LjApOworICAgICAgICB9CisgICAgKTsKKworc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRl
clNvdXJjZUNsaXAgPQorICAgIFZFUlRFWF9TSEFERVIoCisgICAgICAgIHVuaWZvcm0gbWF0NCBJ
bk1hdHJpeDsKKyAgICAgICAgYXR0cmlidXRlIHZlYzQgSW5WZXJ0ZXg7CisgICAgICAgIHZvaWQg
bWFpbih2b2lkKQorICAgICAgICB7CisgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IEluTWF0cml4
ICogSW5WZXJ0ZXg7CisgICAgICAgIH0KKyAgICApOworCit2b2lkIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjppbml0aWFsaXplUHJvZ3JhbSgpCit7CisgICAgY29uc3QgY2hhciogdmVydGV4
U2hhZGVyU291cmNlUHJvZ3JhbSA9IHZlcnRleFNoYWRlclNvdXJjZSgpOworICAgIGNvbnN0IGNo
YXIqIGZyYWdtZW50U2hhZGVyU291cmNlUHJvZ3JhbSA9IGZyYWdtZW50U2hhZGVyU291cmNlKCk7
CisgICAgR0x1aW50IHZlcnRleFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFE
RVIpOworICAgIEdMdWludCBmcmFnbWVudFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX0ZSQUdN
RU5UX1NIQURFUik7CisgICAgZ2xTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAmdmVydGV4
U2hhZGVyU291cmNlUHJvZ3JhbSwgMCk7CisgICAgZ2xTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFk
ZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJjZVByb2dyYW0sIDApOworICAgIEdMdWludCBwcm9n
cmFtSUQgPSBnbENyZWF0ZVByb2dyYW0oKTsKKyAgICBnbENvbXBpbGVTaGFkZXIodmVydGV4U2hh
ZGVyKTsKKyAgICBnbENvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgIGdsQXR0YWNo
U2hhZGVyKHByb2dyYW1JRCwgdmVydGV4U2hhZGVyKTsKKyAgICBnbEF0dGFjaFNoYWRlcihwcm9n
cmFtSUQsIGZyYWdtZW50U2hhZGVyKTsKKyAgICBnbExpbmtQcm9ncmFtKHByb2dyYW1JRCk7CisK
KyAgICBtX3ZlcnRleEF0dHJpYiA9IGdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiSW5W
ZXJ0ZXgiKTsKKyAgICBtX2lkID0gcHJvZ3JhbUlEOworICAgIG1fdmVydGV4U2hhZGVyID0gdmVy
dGV4U2hhZGVyOworICAgIG1fZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNoYWRlcjsKK30KKwor
dm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKEdMaW50
ICZ2YXJpYWJsZSwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICB2YXJpYWJsZSA9IGdsR2V0VW5p
Zm9ybUxvY2F0aW9uKG1faWQsIG5hbWUpOworICAgIEFTU0VSVCh2YXJpYWJsZSA+PSAwKTsKK30K
KworVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSgpCit7CisgICAgR0x1aW50IHByb2dyYW1JRCA9IG1faWQ7CisgICAgaWYgKCFwcm9ncmFtSUQp
CisgICAgICAgIHJldHVybjsKKworICAgIGdsRGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV92ZXJ0
ZXhTaGFkZXIpOworICAgIGdsRGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKKyAgICBnbERl
dGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fZnJhZ21lbnRTaGFkZXIpOworICAgIGdsRGVsZXRlU2hh
ZGVyKG1fZnJhZ21lbnRTaGFkZXIpOworICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwor
fQorCitQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlPiBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCkpOworfQorCitUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1w
bGUoKQoreworICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9u
KG1fc291cmNlTWF0cml4VmFyaWFibGUsICJJblNvdXJjZU1hdHJpeCIpOworICAgIGdldFVuaWZv
cm1Mb2NhdGlvbihtX21hdHJpeFZhcmlhYmxlLCAiSW5NYXRyaXgiKTsKKyAgICBnZXRVbmlmb3Jt
TG9jYXRpb24obV9zb3VyY2VUZXh0dXJlVmFyaWFibGUsICJTb3VyY2VUZXh0dXJlIik7CisgICAg
Z2V0VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eVZhcmlhYmxlLCAiT3BhY2l0eSIpOworfQorCitj
b25zdCBjaGFyKiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6dmVydGV4U2hhZGVy
U291cmNlKCkKK3sKKyAgICByZXR1cm4gdmVydGV4U2hhZGVyU291cmNlU2ltcGxlOworfQorCitj
b25zdCBjaGFyKiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6ZnJhZ21lbnRTaGFk
ZXJTb3VyY2UoKQoreworICAgIHJldHVybiBmcmFnbWVudFNoYWRlclNvdXJjZVNpbXBsZTsKK30K
KworUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrPiBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpjcmVhdGUoKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5k
TWFzaygpKTsKK30KKworVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpCit7CisgICAgaW5pdGlh
bGl6ZVByb2dyYW0oKTsKKyAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhWYXJpYWJsZSwg
IkluTWF0cml4Iik7CisgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fc291cmNlTWF0cml4VmFyaWFi
bGUsICJJblNvdXJjZU1hdHJpeCIpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hc2tNYXRy
aXhWYXJpYWJsZSwgIkluTWFza01hdHJpeCIpOworICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX3Nv
dXJjZVRleHR1cmVWYXJpYWJsZSwgIlNvdXJjZVRleHR1cmUiKTsKKyAgICBnZXRVbmlmb3JtTG9j
YXRpb24obV9tYXNrVGV4dHVyZVZhcmlhYmxlLCAiTWFza1RleHR1cmUiKTsKKyAgICBnZXRVbmlm
b3JtTG9jYXRpb24obV9vcGFjaXR5VmFyaWFibGUsICJPcGFjaXR5Iik7Cit9CisKK2NvbnN0IGNo
YXIqIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OnZlcnRleFNoYWRl
clNvdXJjZSgpCit7CisgICAgcmV0dXJuIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNr
OworfQorCitjb25zdCBjaGFyKiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRN
YXNrOjpmcmFnbWVudFNoYWRlclNvdXJjZSgpCit7CisgICAgcmV0dXJuIGZyYWdtZW50U2hhZGVy
U291cmNlT3BhY2l0eUFuZE1hc2s7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1DbGlwPiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUNsaXA6OmNyZWF0ZSgpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUNsaXAo
KSk7Cit9CisKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQ2xpcDo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1DbGlwKCkKK3sKKyAgICBpbml0aWFsaXplUHJvZ3JhbSgpOworICAgIGdldFVu
aWZvcm1Mb2NhdGlvbihtX21hdHJpeFZhcmlhYmxlLCAiSW5NYXRyaXgiKTsKK30KKworY29uc3Qg
Y2hhciogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1DbGlwOjp2ZXJ0ZXhTaGFkZXJTb3VyY2Uo
KQoreworICAgIHJldHVybiB2ZXJ0ZXhTaGFkZXJTb3VyY2VDbGlwOworfQorCitjb25zdCBjaGFy
KiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUNsaXA6OmZyYWdtZW50U2hhZGVyU291cmNlKCkK
K3sKKyAgICByZXR1cm4gZnJhZ21lbnRTaGFkZXJTb3VyY2VDbGlwOworfQorCitUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKQoreworICAgIEFT
U0VSVChpbml0aWFsaXplT3BlbkdMU2hpbXMoKSk7Cit9CisKK1RleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKQoreworICAgIG1fdGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1NYXAuY2xlYXIoKTsKK30KKworfTsKKworI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaAkocmV2aXNpb24gMTA4NDI4KQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuaDoxMDg0MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE0NiBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXJfaAorI2RlZmluZSBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcl9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYm
IFVTRShURVhUVVJFX01BUFBFUikKKworI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUg
IkludFNpemUuaCIKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiB2b2lkKiBTaGFkZXJU
eXBlOworCitjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjsKKworY2xhc3MgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbT4geworcHVibGljOgorICAgIEdMdWludCBpZCgpIHsgcmV0dXJuIG1faWQ7IH0K
KyAgICBHTHVpbnQgdmVydGV4QXR0cmliKCkgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWI7IH0KKwor
ICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCk7CisKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBUPgorICAgIHN0YXRpYyBTaGFkZXJUeXBlIHNoYWRlclR5cGUoKQorICAgIHsKKyAg
ICAgICAgc3RhdGljIGludCB0eXBlID0gMDsKKyAgICAgICAgcmV0dXJuICZ0eXBlOworICAgIH0K
KworcHJvdGVjdGVkOgorICAgIHZvaWQgZ2V0VW5pZm9ybUxvY2F0aW9uKEdMaW50JiB2YXIsIGNv
bnN0IGNoYXIqIG5hbWUpOworICAgIHZvaWQgaW5pdGlhbGl6ZVByb2dyYW0oKTsKKyAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSgpID0gMDsKKyAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKCkgPSAwOworCisgICAgR0x1aW50IG1faWQ7
CisgICAgR0x1aW50IG1fdmVydGV4QXR0cmliOworICAgIEdMdWludCBtX3ZlcnRleFNoYWRlcjsK
KyAgICBHTHVpbnQgbV9mcmFnbWVudFNoYWRlcjsKK307CisKK2NsYXNzIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU2ltcGxlIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVNpbXBsZT4gY3JlYXRlKCk7CisgICAgR0xpbnQgbWF0cml4VmFyaWFibGUoKSB7IHJldHVybiBt
X21hdHJpeFZhcmlhYmxlOyB9CisgICAgR0xpbnQgc291cmNlTWF0cml4VmFyaWFibGUoKSB7IHJl
dHVybiBtX3NvdXJjZU1hdHJpeFZhcmlhYmxlOyB9CisgICAgR0xpbnQgc291cmNlVGV4dHVyZVZh
cmlhYmxlKCkgeyByZXR1cm4gbV9zb3VyY2VUZXh0dXJlVmFyaWFibGU7IH0KKyAgICBHTGludCBv
cGFjaXR5VmFyaWFibGUoKSB7IHJldHVybiBtX29wYWNpdHlWYXJpYWJsZTsgfQorCitwcml2YXRl
OgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlKCk7CisgICAgdmly
dHVhbCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSgpOworICAgIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCk7CisgICAgR0xpbnQgbV9tYXRyaXhWYXJpYWJsZTsKKyAg
ICBHTGludCBtX3NvdXJjZU1hdHJpeFZhcmlhYmxlOworICAgIEdMaW50IG1fc291cmNlVGV4dHVy
ZVZhcmlhYmxlOworICAgIEdMaW50IG1fb3BhY2l0eVZhcmlhYmxlOworfTsKKworY2xhc3MgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayA6IHB1YmxpYyBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gY3JlYXRlKCk7CisgICAgR0xpbnQg
c291cmNlTWF0cml4VmFyaWFibGUoKSB7IHJldHVybiBtX3NvdXJjZU1hdHJpeFZhcmlhYmxlOyB9
CisgICAgR0xpbnQgbWF0cml4VmFyaWFibGUoKSB7IHJldHVybiBtX21hdHJpeFZhcmlhYmxlOyB9
CisgICAgR0xpbnQgbWFza01hdHJpeFZhcmlhYmxlKCkgeyByZXR1cm4gbV9tYXNrTWF0cml4VmFy
aWFibGU7IH0KKyAgICBHTGludCBzb3VyY2VUZXh0dXJlVmFyaWFibGUoKSB7IHJldHVybiBtX3Nv
dXJjZVRleHR1cmVWYXJpYWJsZTsgfQorICAgIEdMaW50IG1hc2tUZXh0dXJlVmFyaWFibGUoKSB7
IHJldHVybiBtX21hc2tUZXh0dXJlVmFyaWFibGU7IH0KKyAgICBHTGludCBvcGFjaXR5VmFyaWFi
bGUoKSB7IHJldHVybiBtX29wYWNpdHlWYXJpYWJsZTsgfQorCitwcml2YXRlOgorICAgIHN0YXRp
YyBpbnQgbV9jbGFzc0lEOworICAgIHZpcnR1YWwgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291
cmNlKCk7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSgpOwor
ICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKTsKKyAgICBHTGlu
dCBtX3NvdXJjZU1hdHJpeFZhcmlhYmxlOworICAgIEdMaW50IG1fbWF0cml4VmFyaWFibGU7Cisg
ICAgR0xpbnQgbV9tYXNrTWF0cml4VmFyaWFibGU7CisgICAgR0xpbnQgbV9zb3VyY2VUZXh0dXJl
VmFyaWFibGU7CisgICAgR0xpbnQgbV9tYXNrVGV4dHVyZVZhcmlhYmxlOworICAgIEdMaW50IG1f
b3BhY2l0eVZhcmlhYmxlOworfTsKKworY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1D
bGlwIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUNsaXA+IGNyZWF0ZSgp
OworICAgIEdMaW50IG1hdHJpeFZhcmlhYmxlKCkgeyByZXR1cm4gbV9tYXRyaXhWYXJpYWJsZTsg
fQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNl
KCk7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSgpOworICAg
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQ2xpcCgpOworICAgIEdMaW50IG1fbWF0cml4VmFy
aWFibGU7Cit9OworCitjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlciB7CitwdWJsaWM6
CisgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcigpOworCisgICAgdGVtcGxhdGU8Y2xhc3MgVD4KKyAgICBQYXNz
UmVmUHRyPFQ+IGdldFNoYWRlclByb2dyYW0oKQorICAgIHsKKyAgICAgICAgU2hhZGVyVHlwZSBz
aGFkZXJUeXBlID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OnNoYWRlclR5cGU8VD4oKTsK
KyAgICAgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA6Oml0ZXJhdG9yIGl0ID0gbV90
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcC5maW5kKHNoYWRlclR5cGUpOworICAgICAgICBp
ZiAoaXQgIT0gbV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcC5lbmQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4oaXQtPnNlY29uZC5nZXQoKSk7CisKKyAgICAgICAg
UmVmUHRyPFQ+IHQgPSBUOjpjcmVhdGUoKTsKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbU1hcC5hZGQoc2hhZGVyVHlwZSwgdCk7CisgICAgICAgIHJldHVybiB0OworICAgIH0K
KworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8U2hhZGVyVHlwZSwgUmVmUHRyPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiA+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOwor
ICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwIG1fdGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1NYXA7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYgLy8gVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXJfaAoK
</data>

          </attachment>
      

    </bug>

</bugzilla>