<?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>151633</bug_id>
          
          <creation_ts>2015-11-27 02:45:22 -0800</creation_ts>
          <short_desc>[GLIB] Remove GMainLoopSource and GThreadSafeMainLoopSource</short_desc>
          <delta_ts>2015-11-30 00:06:29 -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>Web Template Framework</component>
          <version>WebKit Local 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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>151632</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ossy</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1144569</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-27 02:45:22 -0800</bug_when>
    <thetext>Once bug #151632 is fixed nobody will be using those, so we can just remove them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144596</commentid>
    <comment_count>1</comment_count>
      <attachid>266201</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-27 09:03:37 -0800</bug_when>
    <thetext>Created attachment 266201
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144605</commentid>
    <comment_count>2</comment_count>
      <attachid>266201</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-11-27 11:06:08 -0800</bug_when>
    <thetext>Comment on attachment 266201
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144737</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-30 00:06:29 -0800</bug_when>
    <thetext>Committed r192791: &lt;http://trac.webkit.org/changeset/192791&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266201</attachid>
            <date>2015-11-27 09:03:37 -0800</date>
            <delta_ts>2015-11-27 11:06:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wtf-kill-main-loop-source.diff</filename>
            <type>text/plain</type>
            <size>52741</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggZjA2OGNiNC4uNjVmYjBjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxNS0xMS0yNyAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dM
SUJdIFJlbW92ZSBHTWFpbkxvb3BTb3VyY2UgYW5kIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTYzMwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnZj
eHByb2ovV1RGLnZjeHByb2o6CisgICAgICAgICogV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmls
dGVyczoKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogd3RmL1Bs
YXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIHd0Zi9nbGliL0dNYWluTG9vcFNvdXJjZS5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogd3RmL2dsaWIvR01haW5Mb29wU291cmNlLmg6IFJlbW92ZWQu
CisgICAgICAgICogd3RmL2dsaWIvR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZS5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogd3RmL2dsaWIvR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZS5oOiBSZW1v
dmVkLgorCiAyMDE1LTExLTI3ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+
CiAKICAgICAgICAgRml4IGJ1aWxkIHdhcm5pbmcgaW4gYmlnbnVtLmNjCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qIGIvU291cmNlL1dURi9XVEYudmN4cHJv
ai9XVEYudmN4cHJvagppbmRleCBjMmUzMTFlLi4yZWM5ZWJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ov
V1RGLnZjeHByb2oKQEAgLTgzLDE2ICs4Myw2IEBACiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdp
bjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2
NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cd3RmXGdsaWJcR01haW5Mb29wU291cmNlLmNwcCI+Ci0gICAgICA8
RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1
ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
RGVidWd8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9t
QnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1
ZmZpeHxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJv
bUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdT
dWZmaXh8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9t
QnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNl
fFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVp
bGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2
NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4z
MiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQn
Ij50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHd0ZlxnbGliXEdSZWZQdHIuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZy
b21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVn
fFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVp
bGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQn
Ij50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KQEAgLTEwMyw3ICs5Myw2IEBACiAgICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdQcm9kdWN0aW9ufFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdQcm9kdWN0aW9ufHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwvQ2xDb21w
aWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXGdsaWJcR1RocmVhZFNhZmVNYWlu
TG9vcFNvdXJjZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcR3JlZ29y
aWFuRGF0ZVRpbWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXEhhc2hU
YWJsZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcTG9jay5jcHAiIC8+
CkBAIC0yMDksMTEgKzE5OCw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRnVu
Y3Rpb25hbC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEdldFB0ci5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXGdsaWJcR0xpYlV0aWxpdGllcy5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXGdsaWJcR01haW5Mb29wU291cmNlLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcZ2xpYlxHTXV0ZXhMb2NrZXIuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxnbGliXEdUeXBlZGVmcy5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXGdsaWJcR1JlZlB0ci5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXGdsaWJcR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXGdsaWJcR1VuaXF1ZVB0ci5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEdyZWdvcmlhbkRhdGVUaW1lLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSGFzaENvdW50ZWRTZXQuaCIgLz4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVycyBiL1Nv
dXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVycwppbmRleCBmODg0YWI3Li41
ZmIxODQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZp
bHRlcnMKKysrIGIvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0ZXJzCkBA
IC0yNDAsMTUgKzI0MCw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcd2luXFJ1
bkxvb3BXaW4uY3BwIj4KICAgICAgIDxGaWx0ZXI+d3RmXHdpbjwvRmlsdGVyPgogICAgIDwvQ2xD
b21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXGdsaWJcR01haW5Mb29wU291
cmNlLmNwcCI+Ci0gICAgICA8RmlsdGVyPnd0ZlxnbGliPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBp
bGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcRmFzdEJpdFZlY3Rvci5jcHAiPgog
ICAgICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHd0ZlxnbGliXEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UuY3BwIj4K
LSAgICAgIDxGaWx0ZXI+d3RmXGdsaWI8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxSZWZDb3VudGVyLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHd0Zlx3aW5cV1RGRExMLmNwcCI+CiAgICAgICA8RmlsdGVyPnd0Zlx3
aW48L0ZpbHRlcj4KQEAgLTcwNywxOCArNzAxLDEyIEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlx3dGZcUnVuTG9vcC5oIj4KICAgICAgIDxGaWx0ZXI+d3RmPC9GaWx0ZXI+CiAgICAgPC9D
bEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcZ2xpYlxHTWFpbkxvb3BT
b3VyY2UuaCI+Ci0gICAgICA8RmlsdGVyPnd0ZlxnbGliPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcZ2xpYlxHVW5pcXVlUHRyLmgiPgog
ICAgICAgPEZpbHRlcj53dGZcZ2xpYjwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEhhc2hNZXRob2QuaCI+CiAgICAgICA8RmlsdGVyPnd0
ZjwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
d3RmXGdsaWJcR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZS5oIj4KLSAgICAgIDxGaWx0ZXI+d3Rm
XGdsaWI8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHd0ZlxSZWZDb3VudGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZc
V29ya1F1ZXVlLmgiPgogICAgICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1F
ZmwuY21ha2UKaW5kZXggY2QwYmNmMC4uNjZhMTA3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1FZmwuY21h
a2UKQEAgLTQsOSArNCw3IEBAIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAgZWZsL1J1bkxv
b3BFZmwuY3BwCiAgICAgZWZsL1dvcmtRdWV1ZUVmbC5jcHAKIAotICAgIGdsaWIvR01haW5Mb29w
U291cmNlLmNwcAogICAgIGdsaWIvR1JlZlB0ci5jcHAKLSAgICBnbGliL0dUaHJlYWRTYWZlTWFp
bkxvb3BTb3VyY2UuY3BwCiApCiAKIGxpc3QoQVBQRU5EIFdURl9MSUJSQVJJRVMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm1HVEsuY21ha2UKaW5kZXggODMyMjBkYy4uY2M3ZGY3YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1H
VEsuY21ha2UKQEAgLTMsOSArMyw3IEBAIHNldChXVEZfT1VUUFVUX05BTUUgV1RGR1RLKQogCiBs
aXN0KEFQUEVORCBXVEZfU09VUkNFUwogICAgIGdsaWIvR0xpYlV0aWxpdGllcy5jcHAKLSAgICBn
bGliL0dNYWluTG9vcFNvdXJjZS5jcHAKICAgICBnbGliL0dSZWZQdHIuY3BwCi0gICAgZ2xpYi9H
VGhyZWFkU2FmZU1haW5Mb29wU291cmNlLmNwcAogICAgIGdsaWIvTWFpblRocmVhZEdMaWIuY3Bw
CiAgICAgZ2xpYi9SdW5Mb29wR0xpYi5jcHAKICAgICBnbGliL1dvcmtRdWV1ZUdMaWIuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dNYWluTG9vcFNvdXJjZS5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi9nbGliL0dNYWluTG9vcFNvdXJjZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGI0NzkzMjA1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvR01h
aW5Mb29wU291cmNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzMyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJHTWFpbkxvb3BTb3VyY2UuaCIKLQotI2lmIFVTRShHTElCKQotCi0j
aW5jbHVkZSA8Z2lvL2dpby5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotR01haW5Mb29wU291cmNl
Ojp+R01haW5Mb29wU291cmNlKCkKLXsKLSAgICBjYW5jZWwoKTsKLX0KLQotYm9vbCBHTWFpbkxv
b3BTb3VyY2U6OmlzU2NoZWR1bGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdGF0dXMgPT0g
U2NoZWR1bGVkOwotfQotCi1ib29sIEdNYWluTG9vcFNvdXJjZTo6aXNBY3RpdmUoKSBjb25zdAot
ewotICAgIHJldHVybiBtX3N0YXR1cyAhPSBSZWFkeTsKLX0KLQotdm9pZCBHTWFpbkxvb3BTb3Vy
Y2U6OmNhbmNlbCgpCi17Ci0gICAgLy8gQSB2YWxpZCBjb250ZXh0IHNob3VsZCBvbmx5IGJlIHBy
ZXNlbnQgaWYgR01haW5Mb29wU291cmNlIGlzIGluIHRoZSBTY2hlZHVsZWQgb3IgRGlzcGF0Y2hp
bmcgc3RhdGUuCi0gICAgQVNTRVJUKCFtX2NvbnRleHQuc291cmNlIHx8IG1fc3RhdHVzID09IFNj
aGVkdWxlZCB8fCBtX3N0YXR1cyA9PSBEaXNwYXRjaGluZyk7Ci0KLSAgICBtX3N0YXR1cyA9IFJl
YWR5OwotCi0gICAgaWYgKCFtX2NvbnRleHQuc291cmNlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBDb250ZXh0IGNvbnRleHQ7Ci0gICAgY29udGV4dCA9IFdURjo6bW92ZShtX2NvbnRleHQpOwot
ICAgIGNvbnRleHQuZGVzdHJveVNvdXJjZSgpOwotfQotCi12b2lkIEdNYWluTG9vcFNvdXJjZTo6
c2NoZWR1bGVJZGxlU291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jIHNvdXJjZUZ1
bmN0aW9uLCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBBU1NF
UlQobV9zdGF0dXMgPT0gUmVhZHkpOwotICAgIG1fc3RhdHVzID0gU2NoZWR1bGVkOwotCi0gICAg
Z19zb3VyY2Vfc2V0X25hbWUobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgbmFtZSk7Ci0gICAgaWYg
KHByaW9yaXR5ICE9IEdfUFJJT1JJVFlfREVGQVVMVF9JRExFKQotICAgICAgICBnX3NvdXJjZV9z
ZXRfcHJpb3JpdHkobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgcHJpb3JpdHkpOwotICAgIGdfc291
cmNlX3NldF9jYWxsYmFjayhtX2NvbnRleHQuc291cmNlLmdldCgpLCBzb3VyY2VGdW5jdGlvbiwg
dGhpcywgbnVsbHB0cik7Ci0gICAgZ19zb3VyY2VfYXR0YWNoKG1fY29udGV4dC5zb3VyY2UuZ2V0
KCksIGNvbnRleHQpOwotfQotCi12b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUoY29uc3Qg
Y2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uLCBpbnQgcHJpb3Jp
dHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4
dCogY29udGV4dCkKLXsKLSAgICBjYW5jZWwoKTsKLQotICAgIEFTU0VSVCghbV9jb250ZXh0LnNv
dXJjZSk7Ci0gICAgbV9jb250ZXh0ID0gewotICAgICAgICBhZG9wdEdSZWYoZ19pZGxlX3NvdXJj
ZV9uZXcoKSksCi0gICAgICAgIG51bGxwdHIsIC8vIGNhbmNlbGxhYmxlCi0gICAgICAgIFdURjo6
bW92ZShmdW5jdGlvbiksCi0gICAgICAgIG51bGxwdHIsIC8vIGJvb2xDYWxsYmFjawotICAgICAg
ICBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKQotICAgIH07Ci0gICAgc2NoZWR1bGVJZGxlU291
cmNlKG5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHZvaWRTb3VyY2VDYWxsYmFj
ayksIHByaW9yaXR5LCBjb250ZXh0KTsKLX0KLQotdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVk
dWxlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4mJiBmdW5jdGlvbiwg
aW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+JiYgZGVzdHJveUZ1bmN0aW9uLCBH
TWFpbkNvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgY2FuY2VsKCk7Ci0KLSAgICBBU1NFUlQoIW1f
Y29udGV4dC5zb3VyY2UpOwotICAgIG1fY29udGV4dCA9IHsKLSAgICAgICAgYWRvcHRHUmVmKGdf
aWRsZV9zb3VyY2VfbmV3KCkpLAotICAgICAgICBudWxscHRyLCAvLyBjYW5jZWxsYWJsZQotICAg
ICAgICBudWxscHRyLCAvLyB2b2lkQ2FsbGJhY2sKLSAgICAgICAgV1RGOjptb3ZlKGZ1bmN0aW9u
KSwKLSAgICAgICAgV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbikKLSAgICB9OwotICAgIHNjaGVk
dWxlSWRsZVNvdXJjZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihib29sU291
cmNlQ2FsbGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7Ci19Ci0KLXZvaWQgR01haW5Mb29wU291
cmNlOjpzY2hlZHVsZVRpbWVvdXRTb3VyY2UoY29uc3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMg
c291cmNlRnVuY3Rpb24sIGludCBwcmlvcml0eSwgR01haW5Db250ZXh0KiBjb250ZXh0KQotewot
ICAgIEFTU0VSVChtX3N0YXR1cyA9PSBSZWFkeSk7Ci0gICAgbV9zdGF0dXMgPSBTY2hlZHVsZWQ7
Ci0KLSAgICBnX3NvdXJjZV9zZXRfbmFtZShtX2NvbnRleHQuc291cmNlLmdldCgpLCBuYW1lKTsK
LSAgICBpZiAocHJpb3JpdHkgIT0gR19QUklPUklUWV9ERUZBVUxUKQotICAgICAgICBnX3NvdXJj
ZV9zZXRfcHJpb3JpdHkobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgcHJpb3JpdHkpOwotICAgIGdf
c291cmNlX3NldF9jYWxsYmFjayhtX2NvbnRleHQuc291cmNlLmdldCgpLCBzb3VyY2VGdW5jdGlv
biwgdGhpcywgbnVsbHB0cik7Ci0gICAgZ19zb3VyY2VfYXR0YWNoKG1fY29udGV4dC5zb3VyY2Uu
Z2V0KCksIGNvbnRleHQpOwotfQotCi12b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRl
ckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlv
biwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBkZWxheSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1
bmN0aW9uPHZvaWQgKCk+JiYgZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQp
Ci17Ci0gICAgY2FuY2VsKCk7Ci0KLSAgICBBU1NFUlQoIW1fY29udGV4dC5zb3VyY2UpOwotICAg
IG1fY29udGV4dCA9IHsKLSAgICAgICAgYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3KGRl
bGF5LmNvdW50KCkpKSwKLSAgICAgICAgbnVsbHB0ciwgLy8gY2FuY2VsbGFibGUKLSAgICAgICAg
V1RGOjptb3ZlKGZ1bmN0aW9uKSwKLSAgICAgICAgbnVsbHB0ciwgLy8gYm9vbENhbGxiYWNrCi0g
ICAgICAgIFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pCi0gICAgfTsKLSAgICBzY2hlZHVsZVRp
bWVvdXRTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4odm9pZFNvdXJj
ZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOwotfQotCi12b2lkIEdNYWluTG9vcFNvdXJj
ZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9v
bCAoKT4mJiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBkZWxheSwgaW50IHBy
aW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+JiYgZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNv
bnRleHQqIGNvbnRleHQpCi17Ci0gICAgY2FuY2VsKCk7Ci0KLSAgICBBU1NFUlQoIW1fY29udGV4
dC5zb3VyY2UpOwotICAgIG1fY29udGV4dCA9IHsKLSAgICAgICAgYWRvcHRHUmVmKGdfdGltZW91
dF9zb3VyY2VfbmV3KGRlbGF5LmNvdW50KCkpKSwKLSAgICAgICAgbnVsbHB0ciwgLy8gY2FuY2Vs
bGFibGUKLSAgICAgICAgbnVsbHB0ciwgLy8gdm9pZENhbGxiYWNrCi0gICAgICAgIFdURjo6bW92
ZShmdW5jdGlvbiksCi0gICAgICAgIFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pCi0gICAgfTsK
LSAgICBzY2hlZHVsZVRpbWVvdXRTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNl
RnVuYz4oYm9vbFNvdXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOwotfQotCi12b2lk
IEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86OnNlY29uZHMgZGVs
YXksIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYmIGRlc3Ryb3lGdW5jdGlv
biwgR01haW5Db250ZXh0KiBjb250ZXh0KQotewotICAgIGNhbmNlbCgpOwotCi0gICAgQVNTRVJU
KCFtX2NvbnRleHQuc291cmNlKTsKLSAgICBtX2NvbnRleHQgPSB7Ci0gICAgICAgIGFkb3B0R1Jl
ZihnX3RpbWVvdXRfc291cmNlX25ld19zZWNvbmRzKGRlbGF5LmNvdW50KCkpKSwKLSAgICAgICAg
bnVsbHB0ciwgLy8gY2FuY2VsbGFibGUKLSAgICAgICAgV1RGOjptb3ZlKGZ1bmN0aW9uKSwKLSAg
ICAgICAgbnVsbHB0ciwgLy8gYm9vbENhbGxiYWNrCi0gICAgICAgIFdURjo6bW92ZShkZXN0cm95
RnVuY3Rpb24pCi0gICAgfTsKLSAgICBzY2hlZHVsZVRpbWVvdXRTb3VyY2UobmFtZSwgcmVpbnRl
cnByZXRfY2FzdDxHU291cmNlRnVuYz4odm9pZFNvdXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNv
bnRleHQpOwotfQotCi12b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNv
bnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4mJiBmdW5jdGlvbiwgc3RkOjpj
aHJvbm86OnNlY29uZHMgZGVsYXksIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgp
PiYmIGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQotewotICAgIGNhbmNl
bCgpOwotCi0gICAgQVNTRVJUKCFtX2NvbnRleHQuc291cmNlKTsKLSAgICBtX2NvbnRleHQgPSB7
Ci0gICAgICAgIGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ld19zZWNvbmRzKGRlbGF5LmNv
dW50KCkpKSwKLSAgICAgICAgbnVsbHB0ciwgLy8gY2FuY2VsbGFibGUKLSAgICAgICAgbnVsbHB0
ciwgLy8gdm9pZENhbGxiYWNrCi0gICAgICAgIFdURjo6bW92ZShmdW5jdGlvbiksCi0gICAgICAg
IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pCi0gICAgfTsKLSAgICBzY2hlZHVsZVRpbWVvdXRT
b3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oYm9vbFNvdXJjZUNhbGxi
YWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOwotfQotCi1zdHJ1Y3QgTWljcm9zZWNvbmRzVGltZW91
dFNvdXJjZSB7Ci0gICAgR1NvdXJjZSBzb3VyY2U7Ci0gICAgdWludDY0X3QgZGVsYXk7Ci19Owot
Ci1zdGF0aWMgR1NvdXJjZUZ1bmNzIG1pY3Jvc2Vjb25kc1RpbWVvdXRTb3VyY2VGdW5jdGlvbnMg
PSB7Ci0gICAgbnVsbHB0ciwgLy8gcHJlcGFyZQotICAgIG51bGxwdHIsIC8vIGNoZWNrCi0gICAg
Ly8gZGlzcGF0Y2gKLSAgICBbXShHU291cmNlKiBzb3VyY2UsIEdTb3VyY2VGdW5jIGNhbGxiYWNr
LCBncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4KLSAgICB7Ci0gICAgICAgIGJvb2wgcmVw
ZWF0ID0gY2FsbGJhY2sodXNlckRhdGEpOwotICAgICAgICBpZiAocmVwZWF0KQotICAgICAgICAg
ICAgZ19zb3VyY2Vfc2V0X3JlYWR5X3RpbWUoc291cmNlLCBnX3NvdXJjZV9nZXRfdGltZShzb3Vy
Y2UpICsgcmVpbnRlcnByZXRfY2FzdDxNaWNyb3NlY29uZHNUaW1lb3V0U291cmNlKj4oc291cmNl
KS0+ZGVsYXkpOwotICAgICAgICByZXR1cm4gcmVwZWF0OwotICAgIH0sCi0gICAgbnVsbHB0ciwg
Ly8gZmluYWxpemUKLSAgICBudWxscHRyLCAvLyBjbG9zdXJlX2NhbGxiYWNrCi0gICAgbnVsbHB0
ciAvLyBjbG9zdXJlX21hcnNoYWxsCi19OwotCi1zdGF0aWMgR1NvdXJjZSogY3JlYXRlTWljcm9z
ZWNvbmRzVGltZW91dFNvdXJjZSh1aW50NjRfdCBkZWxheSkKLXsKLSAgICBHU291cmNlKiBzb3Vy
Y2UgPSBnX3NvdXJjZV9uZXcoJm1pY3Jvc2Vjb25kc1RpbWVvdXRTb3VyY2VGdW5jdGlvbnMsIHNp
emVvZihNaWNyb3NlY29uZHNUaW1lb3V0U291cmNlKSk7Ci0gICAgcmVpbnRlcnByZXRfY2FzdDxN
aWNyb3NlY29uZHNUaW1lb3V0U291cmNlKj4oc291cmNlKS0+ZGVsYXkgPSBkZWxheTsKLSAgICBn
X3NvdXJjZV9zZXRfcmVhZHlfdGltZShzb3VyY2UsIGdfZ2V0X21vbm90b25pY190aW1lKCkgKyBk
ZWxheSk7Ci0gICAgcmV0dXJuIHNvdXJjZTsKLX0KLQotdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNj
aGVkdWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+
JiYgZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgZGVsYXksIGludCBwcmlvcml0
eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYmIGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0
KiBjb250ZXh0KQotewotICAgIGNhbmNlbCgpOwotCi0gICAgQVNTRVJUKCFtX2NvbnRleHQuc291
cmNlKTsKLSAgICBtX2NvbnRleHQgPSB7Ci0gICAgICAgIGFkb3B0R1JlZihjcmVhdGVNaWNyb3Nl
Y29uZHNUaW1lb3V0U291cmNlKGRlbGF5LmNvdW50KCkpKSwKLSAgICAgICAgbnVsbHB0ciwgLy8g
Y2FuY2VsbGFibGUKLSAgICAgICAgV1RGOjptb3ZlKGZ1bmN0aW9uKSwKLSAgICAgICAgbnVsbHB0
ciwgLy8gYm9vbENhbGxiYWNrCi0gICAgICAgIFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pCi0g
ICAgfTsKLSAgICBzY2hlZHVsZVRpbWVvdXRTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxH
U291cmNlRnVuYz4odm9pZFNvdXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOwotfQot
Ci12b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5h
bWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4mJiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86Om1pY3Jv
c2Vjb25kcyBkZWxheSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+JiYgZGVz
dHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgY2FuY2VsKCk7Ci0K
LSAgICBBU1NFUlQoIW1fY29udGV4dC5zb3VyY2UpOwotICAgIG1fY29udGV4dCA9IHsKLSAgICAg
ICAgYWRvcHRHUmVmKGNyZWF0ZU1pY3Jvc2Vjb25kc1RpbWVvdXRTb3VyY2UoZGVsYXkuY291bnQo
KSkpLAotICAgICAgICBudWxscHRyLCAvLyBjYW5jZWxsYWJsZQotICAgICAgICBudWxscHRyLCAv
LyB2b2lkQ2FsbGJhY2sKLSAgICAgICAgV1RGOjptb3ZlKGZ1bmN0aW9uKSwKLSAgICAgICAgV1RG
Ojptb3ZlKGRlc3Ryb3lGdW5jdGlvbikKLSAgICB9OwotICAgIHNjaGVkdWxlVGltZW91dFNvdXJj
ZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihib29sU291cmNlQ2FsbGJhY2sp
LCBwcmlvcml0eSwgY29udGV4dCk7Ci19Ci0KLWJvb2wgR01haW5Mb29wU291cmNlOjpwcmVwYXJl
Vm9pZENhbGxiYWNrKENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKCFtX2NvbnRleHQuc291
cmNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb250ZXh0ID0gV1RGOjptb3ZlKG1f
Y29udGV4dCk7Ci0KLSAgICBBU1NFUlQoY29udGV4dC52b2lkQ2FsbGJhY2spOwotICAgIEFTU0VS
VChtX3N0YXR1cyA9PSBTY2hlZHVsZWQpOwotICAgIG1fc3RhdHVzID0gRGlzcGF0Y2hpbmc7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHTWFpbkxvb3BTb3VyY2U6OmZpbmlzaFZvaWRD
YWxsYmFjaygpCi17Ci0gICAgbV9zdGF0dXMgPSBSZWFkeTsKLX0KLQotdm9pZCBHTWFpbkxvb3BT
b3VyY2U6OnZvaWRDYWxsYmFjaygpCi17Ci0gICAgQ29udGV4dCBjb250ZXh0OwotICAgIGlmICgh
cHJlcGFyZVZvaWRDYWxsYmFjayhjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29u
dGV4dC52b2lkQ2FsbGJhY2soKTsKLSAgICBpZiAobV9zdGF0dXMgIT0gUmVhZHkgJiYgIW1fY29u
dGV4dC5zb3VyY2UpIHsKLSAgICAgICAgLy8gU3dpdGNoIHRvIFJlYWR5IGlmIGl0IGhhc24ndCBi
ZWVuIHJlLXNjaGVkdWxlZCBvciBjYW5jZWxsZWQuCi0gICAgICAgIGZpbmlzaFZvaWRDYWxsYmFj
aygpOwotICAgIH0KLQotICAgIGNvbnRleHQuZGVzdHJveVNvdXJjZSgpOwotfQotCi1ib29sIEdN
YWluTG9vcFNvdXJjZTo6cHJlcGFyZUJvb2xDYWxsYmFjayhDb250ZXh0JiBjb250ZXh0KQotewot
ICAgIGlmICghbV9jb250ZXh0LnNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Y29udGV4dCA9IFdURjo6bW92ZShtX2NvbnRleHQpOwotCi0gICAgQVNTRVJUKGNvbnRleHQuYm9v
bENhbGxiYWNrKTsKLSAgICBBU1NFUlQobV9zdGF0dXMgPT0gU2NoZWR1bGVkIHx8IG1fc3RhdHVz
ID09IERpc3BhdGNoaW5nKTsKLSAgICBtX3N0YXR1cyA9IERpc3BhdGNoaW5nOwotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIEdNYWluTG9vcFNvdXJjZTo6ZmluaXNoQm9vbENhbGxiYWNrKGJv
b2wgcmV0dmFsLCBDb250ZXh0JiBjb250ZXh0KQotewotICAgIC8vIG1fc3RhdHVzIHNob3VsZCBy
ZWZsZWN0IHdoZXRoZXIgdGhlIEdNYWluTG9vcFNvdXJjZSBoYXMgYmVlbiByZXNjaGVkdWxlZCBk
dXJpbmcgZGlzcGF0Y2guCi0gICAgQVNTRVJUKCghbV9jb250ZXh0LnNvdXJjZSAmJiBtX3N0YXR1
cyA9PSBEaXNwYXRjaGluZykgfHwgbV9zdGF0dXMgPT0gU2NoZWR1bGVkKTsKLSAgICBpZiAocmV0
dmFsICYmICFtX2NvbnRleHQuc291cmNlKQotICAgICAgICBtX2NvbnRleHQgPSBXVEY6Om1vdmUo
Y29udGV4dCk7Ci0gICAgZWxzZSBpZiAoIXJldHZhbCkKLSAgICAgICAgbV9zdGF0dXMgPSBSZWFk
eTsKLX0KLQotYm9vbCBHTWFpbkxvb3BTb3VyY2U6OmJvb2xDYWxsYmFjaygpCi17Ci0gICAgQ29u
dGV4dCBjb250ZXh0OwotICAgIGlmICghcHJlcGFyZUJvb2xDYWxsYmFjayhjb250ZXh0KSkKLSAg
ICAgICAgcmV0dXJuIFN0b3A7Ci0KLSAgICBib29sIHJldHZhbCA9IGNvbnRleHQuYm9vbENhbGxi
YWNrKCk7Ci0gICAgaWYgKG1fc3RhdHVzICE9IFJlYWR5ICYmICFtX2NvbnRleHQuc291cmNlKSB7
Ci0gICAgICAgIC8vIFByZXBhcmUgZm9yIGEgbmV3IGl0ZXJhdGlvbiBvciBzd2l0Y2ggdG8gUmVh
ZHkgaWYgaXQgaGFzbid0IGJlZW4gcmUtc2NoZWR1bGVkIG9yIGNhbmNlbGxlZC4KLSAgICAgICAg
ZmluaXNoQm9vbENhbGxiYWNrKHJldHZhbCwgY29udGV4dCk7Ci0gICAgfQotCi0gICAgaWYgKGNv
bnRleHQuc291cmNlKQotICAgICAgICBjb250ZXh0LmRlc3Ryb3lTb3VyY2UoKTsKLQotICAgIHJl
dHVybiByZXR2YWw7Ci19Ci0KLWdib29sZWFuIEdNYWluTG9vcFNvdXJjZTo6dm9pZFNvdXJjZUNh
bGxiYWNrKEdNYWluTG9vcFNvdXJjZSogc291cmNlKQotewotICAgIHNvdXJjZS0+dm9pZENhbGxi
YWNrKCk7Ci0gICAgcmV0dXJuIEdfU09VUkNFX1JFTU9WRTsKLX0KLQotZ2Jvb2xlYW4gR01haW5M
b29wU291cmNlOjpib29sU291cmNlQ2FsbGJhY2soR01haW5Mb29wU291cmNlKiBzb3VyY2UpCi17
Ci0gICAgcmV0dXJuIHNvdXJjZS0+Ym9vbENhbGxiYWNrKCkgPT0gQ29udGludWU7Ci19Ci0KLXZv
aWQgR01haW5Mb29wU291cmNlOjpDb250ZXh0OjpkZXN0cm95U291cmNlKCkKLXsKLSAgICBnX3Nv
dXJjZV9kZXN0cm95KHNvdXJjZS5nZXQoKSk7Ci0gICAgaWYgKGRlc3Ryb3lDYWxsYmFjaykKLSAg
ICAgICAgZGVzdHJveUNhbGxiYWNrKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5k
aWYgLy8gVVNFKEdMSUIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dNYWluTG9v
cFNvdXJjZS5oIGIvU291cmNlL1dURi93dGYvZ2xpYi9HTWFpbkxvb3BTb3VyY2UuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM0YjZlOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9nbGliL0dNYWluTG9vcFNvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBHTWFpbkxvb3BTb3VyY2VfaAotI2RlZmluZSBHTWFpbkxvb3BTb3VyY2VfaAotCi0jaWYg
VVNFKEdMSUIpCi0KLSNpbmNsdWRlIDxmdW5jdGlvbmFsPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+
Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBHTWFpbkxvb3BTb3VyY2UgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEdNYWluTG9vcFNvdXJjZSk7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIEdNYWluTG9vcFNvdXJjZSgp
ID0gZGVmYXVsdDsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+R01haW5Mb29wU291
cmNlKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBTdG9wID0gZmFsc2U7Ci0gICAgc3RhdGlj
IGNvbnN0IGJvb2wgQ29udGludWUgPSB0cnVlOwotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgaXNTY2hlZHVsZWQoKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0Fj
dGl2ZSgpIGNvbnN0OwotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBzY2hl
ZHVsZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4mJiwgaW50IHByaW9y
aXR5ID0gR19QUklPUklUWV9ERUZBVUxULCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4mJiBkZXN0cm95
RnVuY3Rpb24gPSBudWxscHRyLCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cik7Ci0gICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBzY2hlZHVsZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6
OmZ1bmN0aW9uPGJvb2woKT4mJiwgaW50IHByaW9yaXR5ID0gR19QUklPUklUWV9ERUZBVUxULCBz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4mJiBkZXN0cm95RnVuY3Rpb24gPSBudWxscHRyLCBHTWFpbkNv
bnRleHQqID0gbnVsbHB0cik7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+
JiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMsIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlf
REVGQVVMVCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+JiYgZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0
ciwgR01haW5Db250ZXh0KiA9IG51bGxwdHIpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0
dWFsIHZvaWQgc2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rp
b248Ym9vbCgpPiYmLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzLCBpbnQgcHJpb3JpdHkgPSBH
X1BSSU9SSVRZX0RFRkFVTFQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmIGRlc3Ryb3lGdW5jdGlv
biA9IG51bGxwdHIsIEdNYWluQ29udGV4dCogPSBudWxscHRyKTsKLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdmlydHVhbCB2b2lkIHNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4mJiwgc3RkOjpjaHJvbm86OnNlY29uZHMsIGludCBwcmlvcml0
eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+JiYgZGVzdHJveUZ1
bmN0aW9uID0gbnVsbHB0ciwgR01haW5Db250ZXh0KiA9IG51bGxwdHIpOwotICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5h
bWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCgpPiYmLCBzdGQ6OmNocm9ubzo6c2Vjb25kcywgaW50IHBy
aW9yaXR5ID0gR19QUklPUklUWV9ERUZBVUxULCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4mJiBkZXN0
cm95RnVuY3Rpb24gPSBudWxscHRyLCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cik7Ci0gICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hh
ciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+JiYsIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29u
ZHMsIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgc3RkOjpmdW5jdGlvbjx2b2lk
KCk+JiYgZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0ciwgR01haW5Db250ZXh0KiA9IG51bGxwdHIp
OwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBZnRlckRlbGF5
KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCgpPiYmLCBzdGQ6OmNocm9ubzo6
bWljcm9zZWNvbmRzLCBpbnQgcHJpb3JpdHkgPSBHX1BSSU9SSVRZX0RFRkFVTFQsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiYmIGRlc3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIsIEdNYWluQ29udGV4dCog
PSBudWxscHRyKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIGNhbmNlbCgp
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgZW51bSBTdGF0dXMgeyBSZWFkeSwgU2NoZWR1bGVkLCBEaXNw
YXRjaGluZyB9OwotCi0gICAgc3RydWN0IENvbnRleHQgewotICAgICAgICBDb250ZXh0KCkgPSBk
ZWZhdWx0OwotICAgICAgICBDb250ZXh0JiBvcGVyYXRvcj0oQ29udGV4dCYmIGMpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHNvdXJjZSA9IFdURjo6bW92ZShjLnNvdXJjZSk7Ci0gICAgICAgICAg
ICBjYW5jZWxsYWJsZSA9IFdURjo6bW92ZShjLmNhbmNlbGxhYmxlKTsKLSAgICAgICAgICAgIHZv
aWRDYWxsYmFjayA9IFdURjo6bW92ZShjLnZvaWRDYWxsYmFjayk7Ci0gICAgICAgICAgICBib29s
Q2FsbGJhY2sgPSBXVEY6Om1vdmUoYy5ib29sQ2FsbGJhY2spOwotICAgICAgICAgICAgZGVzdHJv
eUNhbGxiYWNrID0gV1RGOjptb3ZlKGMuZGVzdHJveUNhbGxiYWNrKTsKLSAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZGVzdHJveVNvdXJjZSgpOwot
Ci0gICAgICAgIEdSZWZQdHI8R1NvdXJjZT4gc291cmNlOwotICAgICAgICBHUmVmUHRyPEdDYW5j
ZWxsYWJsZT4gY2FuY2VsbGFibGU7Ci0gICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gdm9p
ZENhbGxiYWNrOwotICAgICAgICBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IGJvb2xDYWxsYmFjazsK
LSAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95Q2FsbGJhY2s7Ci0gICAgfTsK
LQotICAgIHZpcnR1YWwgdm9pZCB2b2lkQ2FsbGJhY2soKTsKLSAgICB2aXJ0dWFsIGJvb2wgYm9v
bENhbGxiYWNrKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcHJlcGFyZVZvaWRDYWxsYmFjayhDb250
ZXh0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGZpbmlzaFZvaWRDYWxsYmFjaygpOwotICAgIHZpcnR1
YWwgYm9vbCBwcmVwYXJlQm9vbENhbGxiYWNrKENvbnRleHQmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZmluaXNoQm9vbENhbGxiYWNrKGJvb2wgcmV0dmFsLCBDb250ZXh0Jik7Ci0KLXByaXZhdGU6Ci0g
ICAgdm9pZCBzY2hlZHVsZUlkbGVTb3VyY2UoY29uc3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMs
IGludCBwcmlvcml0eSwgR01haW5Db250ZXh0Kik7Ci0gICAgdm9pZCBzY2hlZHVsZVRpbWVvdXRT
b3VyY2UoY29uc3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMsIGludCBwcmlvcml0eSwgR01haW5D
b250ZXh0Kik7Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gdm9pZFNvdXJjZUNhbGxiYWNrKEdNYWlu
TG9vcFNvdXJjZSopOwotICAgIHN0YXRpYyBnYm9vbGVhbiBib29sU291cmNlQ2FsbGJhY2soR01h
aW5Mb29wU291cmNlKik7Ci0KLXByb3RlY3RlZDoKLSAgICBDb250ZXh0IG1fY29udGV4dDsKLSAg
ICBTdGF0dXMgbV9zdGF0dXMgeyBSZWFkeSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0K
LXVzaW5nIFdURjo6R01haW5Mb29wU291cmNlOwotCi0jZW5kaWYgLy8gVVNFKEdMSUIpCi0KLSNl
bmRpZiAvLyBHTWFpbkxvb3BTb3VyY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2xp
Yi9HVGhyZWFkU2FmZU1haW5Mb29wU291cmNlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1Ro
cmVhZFNhZmVNYWluTG9vcFNvdXJjZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDA2YTMzMWMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvZ2xpYi9HVGhyZWFkU2FmZU1h
aW5Mb29wU291cmNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3MyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlLmgiCi0KLSNpZiBVU0Uo
R0xJQikKLQotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HTXV0ZXhM
b2NrZXIuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLUdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2U6
OkdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UoKQotewotICAgIGdfcmVjX211dGV4X2luaXQoJm1f
bXV0ZXgpOwotfQotCi1HVGhyZWFkU2FmZU1haW5Mb29wU291cmNlOjp+R1RocmVhZFNhZmVNYWlu
TG9vcFNvdXJjZSgpCi17Ci0gICAgY2FuY2VsKCk7Ci0gICAgZ19yZWNfbXV0ZXhfY2xlYXIoJm1f
bXV0ZXgpOwotfQotCi12b2lkIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2U6OmNhbmNlbCgpCi17
Ci0gICAgR011dGV4TG9ja2VyPEdSZWNNdXRleD4gbG9ja2VyKG1fbXV0ZXgpOwotCi0gICAgLy8g
VGhlIGdlbmVyYWwgY2FuY2VsbGFibGUgb2JqZWN0IHNob3VsZCBvbmx5IGJlIHByZXNlbnQgaWYg
d2UncmUgY3VycmVudGx5IGRpc3BhdGNoaW5nIHRoaXMgR01haW5Mb29wU291cmNlLgotICAgIEFT
U0VSVCghbV9jYW5jZWxsYWJsZSB8fCBtX3N0YXR1cyA9PSBEaXNwYXRjaGluZyk7Ci0KLSAgICAv
LyBUaGUgc291cmNlIGlzIHBlcmhhcHMgYmVpbmcgY2FuY2VsbGVkIGluIHRoZSBtaWRkbGUgb2Yg
YSBjYWxsYmFjayBkaXNwYXRjaC4KLSAgICAvLyBDYW5jZWxsaW5nIHRoaXMgR0NhbmNlbGxhYmxl
IG9iamVjdCB3aWxsIGNvbnZleSB0aGlzIGluZm9ybWF0aW9uIHRvIHRoZQotICAgIC8vIGN1cnJl
bnQgZXhlY3V0aW9uIGNvbnRleHQgd2hlbiB0aGUgY2FsbGJhY2sgZGlzcGF0Y2ggaXMgZmluaXNo
ZWQuCi0gICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwobV9jYW5jZWxsYWJsZS5nZXQoKSk7Ci0gICAg
bV9jYW5jZWxsYWJsZSA9IG51bGxwdHI7Ci0KLSAgICBHTWFpbkxvb3BTb3VyY2U6OmNhbmNlbCgp
OwotfQotCi12b2lkIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlKGNvbnN0IGNo
YXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbiwgaW50IHByaW9yaXR5
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+JiYgZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQq
IGNvbnRleHQpCi17Ci0gICAgR011dGV4TG9ja2VyPEdSZWNNdXRleD4gbG9ja2VyKG1fbXV0ZXgp
OwotICAgIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUobmFtZSwgV1RGOjptb3ZlKGZ1bmN0aW9u
KSwgcHJpb3JpdHksIFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pLCBjb250ZXh0KTsKLSAgICBt
X2NvbnRleHQuY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Ci19
Ci0KLXZvaWQgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUoY29uc3QgY2hhciog
bmFtZSwgc3RkOjpmdW5jdGlvbjxib29sICgpPiYmIGZ1bmN0aW9uLCBpbnQgcHJpb3JpdHksIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29u
dGV4dCkKLXsKLSAgICBHTXV0ZXhMb2NrZXI8R1JlY011dGV4PiBsb2NrZXIobV9tdXRleCk7Ci0g
ICAgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZShuYW1lLCBXVEY6Om1vdmUoZnVuY3Rpb24pLCBw
cmlvcml0eSwgV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbiksIGNvbnRleHQpOwotICAgIG1fY29u
dGV4dC5jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKLX0KLQot
dm9pZCBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3Qg
Y2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uLCBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzIGRlbGF5LCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4mJiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBHTXV0
ZXhMb2NrZXI8R1JlY011dGV4PiBsb2NrZXIobV9tdXRleCk7Ci0gICAgR01haW5Mb29wU291cmNl
OjpzY2hlZHVsZUFmdGVyRGVsYXkobmFtZSwgV1RGOjptb3ZlKGZ1bmN0aW9uKSwgZGVsYXksIHBy
aW9yaXR5LCBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKSwgY29udGV4dCk7Ci0gICAgbV9jb250
ZXh0LmNhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOwotfQotCi12
b2lkIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBj
aGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+JiYgZnVuY3Rpb24sIHN0ZDo6Y2hyb25v
OjptaWxsaXNlY29uZHMgZGVsYXksIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgp
PiYmIGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQotewotICAgIEdNdXRl
eExvY2tlcjxHUmVjTXV0ZXg+IGxvY2tlcihtX211dGV4KTsKLSAgICBHTWFpbkxvb3BTb3VyY2U6
OnNjaGVkdWxlQWZ0ZXJEZWxheShuYW1lLCBXVEY6Om1vdmUoZnVuY3Rpb24pLCBkZWxheSwgcHJp
b3JpdHksIFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pLCBjb250ZXh0KTsKLSAgICBtX2NvbnRl
eHQuY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Ci19Ci0KLXZv
aWQgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNo
YXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86
OnNlY29uZHMgZGVsYXksIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYmIGRl
c3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQotewotICAgIEdNdXRleExvY2tl
cjxHUmVjTXV0ZXg+IGxvY2tlcihtX211dGV4KTsKLSAgICBHTWFpbkxvb3BTb3VyY2U6OnNjaGVk
dWxlQWZ0ZXJEZWxheShuYW1lLCBXVEY6Om1vdmUoZnVuY3Rpb24pLCBkZWxheSwgcHJpb3JpdHks
IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pLCBjb250ZXh0KTsKLSAgICBtX2NvbnRleHQuY2Fu
Y2VsbGFibGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Ci19Ci0KLXZvaWQgR1Ro
cmVhZFNhZmVNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5h
bWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4mJiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86OnNlY29u
ZHMgZGVsYXksIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYmIGRlc3Ryb3lG
dW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQotewotICAgIEdNdXRleExvY2tlcjxHUmVj
TXV0ZXg+IGxvY2tlcihtX211dGV4KTsKLSAgICBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0
ZXJEZWxheShuYW1lLCBXVEY6Om1vdmUoZnVuY3Rpb24pLCBkZWxheSwgcHJpb3JpdHksIFdURjo6
bW92ZShkZXN0cm95RnVuY3Rpb24pLCBjb250ZXh0KTsKLSAgICBtX2NvbnRleHQuY2FuY2VsbGFi
bGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Ci19Ci0KLWJvb2wgR1RocmVhZFNh
ZmVNYWluTG9vcFNvdXJjZTo6cHJlcGFyZVZvaWRDYWxsYmFjayhDb250ZXh0JiBjb250ZXh0KQot
ewotICAgIEdNdXRleExvY2tlcjxHUmVjTXV0ZXg+IGxvY2tlcihtX211dGV4KTsKLSAgICBib29s
IHJldHZhbCA9IEdNYWluTG9vcFNvdXJjZTo6cHJlcGFyZVZvaWRDYWxsYmFjayhjb250ZXh0KTsK
LSAgICBtX2NhbmNlbGxhYmxlID0gY29udGV4dC5jYW5jZWxsYWJsZTsKLSAgICByZXR1cm4gcmV0
dmFsOwotfQotCi12b2lkIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2U6OmZpbmlzaFZvaWRDYWxs
YmFjaygpCi17Ci0gICAgR011dGV4TG9ja2VyPEdSZWNNdXRleD4gbG9ja2VyKG1fbXV0ZXgpOwot
ICAgIEdNYWluTG9vcFNvdXJjZTo6ZmluaXNoVm9pZENhbGxiYWNrKCk7Ci0gICAgbV9jYW5jZWxs
YWJsZSA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZTo6dm9p
ZENhbGxiYWNrKCkKLXsKLSAgICBDb250ZXh0IGNvbnRleHQ7Ci0gICAgaWYgKCFwcmVwYXJlVm9p
ZENhbGxiYWNrKGNvbnRleHQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb250ZXh0LnZvaWRD
YWxsYmFjaygpOwotCi0gICAgaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGNvbnRleHQu
Y2FuY2VsbGFibGUuZ2V0KCkpKSB7Ci0gICAgICAgIGNvbnRleHQuZGVzdHJveVNvdXJjZSgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZmluaXNoVm9pZENhbGxiYWNrKCk7Ci0gICAg
Y29udGV4dC5kZXN0cm95U291cmNlKCk7Ci19Ci0KLWJvb2wgR1RocmVhZFNhZmVNYWluTG9vcFNv
dXJjZTo6cHJlcGFyZUJvb2xDYWxsYmFjayhDb250ZXh0JiBjb250ZXh0KQotewotICAgIEdNdXRl
eExvY2tlcjxHUmVjTXV0ZXg+IGxvY2tlcihtX211dGV4KTsKLSAgICBib29sIHJldHZhbCA9IEdN
YWluTG9vcFNvdXJjZTo6cHJlcGFyZUJvb2xDYWxsYmFjayhjb250ZXh0KTsKLSAgICBtX2NhbmNl
bGxhYmxlID0gY29udGV4dC5jYW5jZWxsYWJsZTsKLSAgICByZXR1cm4gcmV0dmFsOwotfQotCi12
b2lkIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2U6OmZpbmlzaEJvb2xDYWxsYmFjayhib29sIHJl
dHZhbCwgQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBHTXV0ZXhMb2NrZXI8R1JlY011dGV4PiBs
b2NrZXIobV9tdXRleCk7Ci0gICAgR01haW5Mb29wU291cmNlOjpmaW5pc2hCb29sQ2FsbGJhY2so
cmV0dmFsLCBjb250ZXh0KTsKLSAgICBtX2NhbmNlbGxhYmxlID0gbnVsbHB0cjsKLX0KLQotYm9v
bCBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlOjpib29sQ2FsbGJhY2soKQotewotICAgIENvbnRl
eHQgY29udGV4dDsKLSAgICBpZiAoIXByZXBhcmVCb29sQ2FsbGJhY2soY29udGV4dCkpCi0gICAg
ICAgIHJldHVybiBTdG9wOwotCi0gICAgYm9vbCByZXR2YWwgPSBjb250ZXh0LmJvb2xDYWxsYmFj
aygpOwotCi0gICAgaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGNvbnRleHQuY2FuY2Vs
bGFibGUuZ2V0KCkpKSB7Ci0gICAgICAgIGNvbnRleHQuZGVzdHJveVNvdXJjZSgpOwotICAgICAg
ICByZXR1cm4gU3RvcDsKLSAgICB9Ci0KLSAgICBmaW5pc2hCb29sQ2FsbGJhY2socmV0dmFsLCBj
b250ZXh0KTsKLSAgICBpZiAoY29udGV4dC5zb3VyY2UpCi0gICAgICAgIGNvbnRleHQuZGVzdHJv
eVNvdXJjZSgpOwotICAgIHJldHVybiByZXR2YWw7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgot
Ci0jZW5kaWYgLy8gVVNFKEdMSUIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dU
aHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UuaCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1RocmVhZFNh
ZmVNYWluTG9vcFNvdXJjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmJjMDg3
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1RocmVhZFNhZmVNYWluTG9vcFNv
dXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEdUaHJlYWRTYWZlTWFpbkxv
b3BTb3VyY2VfaAotI2RlZmluZSBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlX2gKLQotI2lmIFVT
RShHTElCKQotCi0jaW5jbHVkZSA8d3RmL2dsaWIvR01haW5Mb29wU291cmNlLmg+Ci0KLXR5cGVk
ZWYgc3RydWN0IF9HUmVjTXV0ZXggR1JlY011dGV4OwotCi1uYW1lc3BhY2UgV1RGIHsKLQotY2xh
c3MgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBmaW5hbCA6IHB1YmxpYyBHTWFpbkxvb3BTb3Vy
Y2UgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2Up
OwotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFdURl9FWFBPUlRf
UFJJVkFURSBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlKCk7Ci0gICAgV1RGX0VYUE9SVF9QUklW
QVRFIHZpcnR1YWwgfkdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UoKTsKLQotICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgc2NoZWR1bGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpm
dW5jdGlvbjx2b2lkKCk+JiYsIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+JiYgZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0ciwgR01haW5Db250
ZXh0KiA9IG51bGxwdHIpIG92ZXJyaWRlOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFs
IHZvaWQgc2NoZWR1bGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sKCk+JiYs
IGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+
JiYgZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0ciwgR01haW5Db250ZXh0KiA9IG51bGxwdHIpIG92
ZXJyaWRlOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBZnRl
ckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmLCBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzLCBpbnQgcHJpb3JpdHkgPSBHX1BSSU9SSVRZX0RFRkFVTFQsIHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiYmIGRlc3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIsIEdNYWluQ29u
dGV4dCogPSBudWxscHRyKSBvdmVycmlkZTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVh
bCB2b2lkIHNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9u
PGJvb2woKT4mJiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcywgaW50IHByaW9yaXR5ID0gR19Q
UklPUklUWV9ERUZBVUxULCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4mJiBkZXN0cm95RnVuY3Rpb24g
PSBudWxscHRyLCBHTWFpbkNvbnRleHQqID0gbnVsbHB0cikgb3ZlcnJpZGU7Ci0gICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hhciog
bmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+JiYsIHN0ZDo6Y2hyb25vOjpzZWNvbmRzLCBpbnQg
cHJpb3JpdHkgPSBHX1BSSU9SSVRZX0RFRkFVTFQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmIGRl
c3Ryb3lGdW5jdGlvbiA9IG51bGxwdHIsIEdNYWluQ29udGV4dCogPSBudWxscHRyKSBvdmVycmlk
ZTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHNjaGVkdWxlQWZ0ZXJEZWxh
eShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4mJiwgc3RkOjpjaHJvbm86
OnNlY29uZHMsIGludCBwcmlvcml0eSA9IEdfUFJJT1JJVFlfREVGQVVMVCwgc3RkOjpmdW5jdGlv
bjx2b2lkKCk+JiYgZGVzdHJveUZ1bmN0aW9uID0gbnVsbHB0ciwgR01haW5Db250ZXh0KiA9IG51
bGxwdHIpIG92ZXJyaWRlOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgY2Fu
Y2VsKCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHZvaWRDYWxsYmFj
aygpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBib29sQ2FsbGJhY2soKSBvdmVycmlkZTsK
LQotICAgIHZpcnR1YWwgYm9vbCBwcmVwYXJlVm9pZENhbGxiYWNrKENvbnRleHQmKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgZmluaXNoVm9pZENhbGxiYWNrKCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBib29sIHByZXBhcmVCb29sQ2FsbGJhY2soQ29udGV4dCYpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBmaW5pc2hCb29sQ2FsbGJhY2soYm9vbCByZXR2YWwsIENvbnRleHQmKSBv
dmVycmlkZTsKLQotICAgIEdSZWNNdXRleCBtX211dGV4OwotICAgIEdSZWZQdHI8R0NhbmNlbGxh
YmxlPiBtX2NhbmNlbGxhYmxlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdU
Rjo6R1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZTsKLQotI2VuZGlmIC8vIFVTRShHTElCKQotCi0j
ZW5kaWYgLy8gR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZV9oCmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzkxMzhlNi4uNGQ4NDNlOCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1
IEBACiAyMDE1LTExLTI3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KIAorICAgICAgICBbR0xJQl0gUmVtb3ZlIEdNYWluTG9vcFNvdXJjZSBhbmQgR1RocmVhZFNh
ZmVNYWluTG9vcFNvdXJjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUxNjMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL2dsaWIvR01haW5Mb29wU291cmNlLmNwcDogUmVtb3ZlZC4K
KworMjAxNS0xMS0yNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+
CisKICAgICAgICAgW0dUS10gUmVtb3ZlIHRoZSByZW1haW5pbmcgdXNlcyBvZiBHTWFpbkxvb3BT
b3VyY2UKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MTYzMgogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtl
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBkMThjNGZjLi4x
YzFjMmUxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtl
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTE2MCw3ICsx
NjAsNiBAQCBzZXRfdGVzdHNfcHJvcGVydGllcyhUZXN0V2ViQ29yZSBQUk9QRVJUSUVTIFRJTUVP
VVQgNjApCiBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoVGVzdFdlYkNvcmUgUFJPUEVSVElFUyBSVU5U
SU1FX09VVFBVVF9ESVJFQ1RPUlkgJHtURVNUV0VCS0lUQVBJX1JVTlRJTUVfT1VUUFVUX0RJUkVD
VE9SWX0vV2ViQ29yZSkKIAogbGlzdChBUFBFTkQgVGVzdFdURl9TT1VSQ0VTCi0gICAgJHtURVNU
V0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL2dsaWIvR01haW5Mb29wU291cmNlLmNwcAogICAgICR7
VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9nbGliL0dVbmlxdWVQdHIuY3BwCiAgICAgJHtU
RVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL2dsaWIvV29ya1F1ZXVlR0xpYi5jcHAKICkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL2dsaWIvR01haW5Mb29wU291
cmNlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL2dsaWIvR01haW5Mb29wU291
cmNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc2NjgzYy4uMDAwMDAwMAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9nbGliL0dNYWluTG9vcFNvdXJjZS5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlIDx3dGYvZ2xp
Yi9HVGhyZWFkU2FmZU1haW5Mb29wU291cmNlLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIEdN
YWluTG9vcFNvdXJjZVRlc3QgewotcHVibGljOgotICAgIEdNYWluTG9vcFNvdXJjZVRlc3QoKQot
ICAgICAgICA6IG1fbWFpbkxvb3AoZ19tYWluX2xvb3BfbmV3KG51bGxwdHIsIFRSVUUpKQotICAg
IHsKLSAgICB9Ci0KLSAgICB+R01haW5Mb29wU291cmNlVGVzdCgpCi0gICAgewotICAgICAgICBn
X21haW5fbG9vcF91bnJlZihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJ1bkxvb3Ao
KQotICAgIHsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQot
ICAgIHZvaWQgZGVsYXllZEZpbmlzaCgpCi0gICAgewotICAgICAgICBnX3RpbWVvdXRfYWRkKDI1
MCwKLSAgICAgICAgICAgIFtdKGdwb2ludGVyIGRhdGEpIHsKLSAgICAgICAgICAgICAgICBHTWFp
bkxvb3BTb3VyY2VUZXN0JiB0ZXN0ID0gKnN0YXRpY19jYXN0PEdNYWluTG9vcFNvdXJjZVRlc3Qq
PihkYXRhKTsKLSAgICAgICAgICAgICAgICB0ZXN0LmZpbmlzaCgpOwotICAgICAgICAgICAgICAg
IHJldHVybiBHX1NPVVJDRV9SRU1PVkU7Ci0gICAgICAgICAgICB9LCB0aGlzKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGZpbmlzaCgpCi0gICAgewotICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFp
bkxvb3ApOwotICAgIH0KLQotICAgIFQmIHNvdXJjZSgpIHsgcmV0dXJuIG1fc291cmNlOyB9Ci0K
LXByaXZhdGU6Ci0gICAgR01haW5Mb29wKiBtX21haW5Mb29wOwotICAgIFQgbV9zb3VyY2U7Ci19
OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyB2b2lkIGJhc2ljUmVzY2hlZHVsaW5n
KFQmIGNvbnRleHQpCi17Ci0gICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5p
c0FjdGl2ZSgpKTsKLQotICAgIGNvbnRleHQudGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgiW1Rlc3Rd
IEZpcnN0VGFzayIsIFsmXSB7Ci0gICAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxl
ZC4gVGhhdCdzIHdoeSB3ZSBhc3NlcnQKLSAgICAgICAgLy8gdGhhdCB0aGUgdmFyaWFibGUgaXMg
ZmFsc2UgYSBmZXcgbGluZXMgbGF0ZXIuCi0gICAgICAgIGNvbnRleHQuZmluaXNoZWRGaXJzdFRh
c2sgPSB0cnVlOwotICAgIH0pOwotICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2Uo
KS5pc1NjaGVkdWxlZCgpKTsKLQotICAgIGNvbnRleHQudGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgi
W1Rlc3RdIFNlY29uZFRhc2siLCBbJl0gewotICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRl
c3Quc291cmNlKCkuaXNBY3RpdmUoKSAmJiAhY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1
bGVkKCkpOwotICAgICAgICBjb250ZXh0LmZpbmlzaGVkU2Vjb25kVGFzayA9IHRydWU7Ci0gICAg
ICAgIGNvbnRleHQudGVzdC5maW5pc2goKTsKLSAgICB9KTsKLSAgICBFWFBFQ1RfVFJVRShjb250
ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7Ci0KLSAgICBjb250ZXh0LnRlc3QucnVu
TG9vcCgpOwotCi0gICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2
ZSgpKTsKLSAgICBFWFBFQ1RfRkFMU0UoY29udGV4dC5maW5pc2hlZEZpcnN0VGFzayk7Ci0gICAg
RVhQRUNUX1RSVUUoY29udGV4dC5maW5pc2hlZFNlY29uZFRhc2spOwotfQotCi1URVNUKFdURl9H
TWFpbkxvb3BTb3VyY2UsIEJhc2ljUmVzY2hlZHVsaW5nKQotewotICAgIHN0cnVjdCBUZXN0aW5n
Q29udGV4dCB7Ci0gICAgICAgIEdNYWluTG9vcFNvdXJjZVRlc3Q8R01haW5Mb29wU291cmNlPiB0
ZXN0OwotICAgICAgICBib29sIGZpbmlzaGVkRmlyc3RUYXNrID0gZmFsc2U7Ci0gICAgICAgIGJv
b2wgZmluaXNoZWRTZWNvbmRUYXNrID0gZmFsc2U7Ci0gICAgfSBjb250ZXh0OwotICAgIGJhc2lj
UmVzY2hlZHVsaW5nPFRlc3RpbmdDb250ZXh0Pihjb250ZXh0KTsKLQotICAgIHN0cnVjdCBUaHJl
YWRTYWZlVGVzdGluZ0NvbnRleHQgewotICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0PEdUaHJl
YWRTYWZlTWFpbkxvb3BTb3VyY2U+IHRlc3Q7Ci0gICAgICAgIGJvb2wgZmluaXNoZWRGaXJzdFRh
c2sgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBmaW5pc2hlZFNlY29uZFRhc2sgPSBmYWxzZTsKLSAg
ICB9IHRocmVhZFNhZmVDb250ZXh0OwotICAgIGJhc2ljUmVzY2hlZHVsaW5nPFRocmVhZFNhZmVU
ZXN0aW5nQ29udGV4dD4odGhyZWFkU2FmZUNvbnRleHQpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KLXN0YXRpYyB2b2lkIHJlZW50cmFudFJlc2NoZWR1bGluZyhUJiBjb250ZXh0KQotewot
ICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7Ci0KLSAg
ICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBGaXJzdFRhc2siLCBbJl0g
ewotICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSAm
JiAhY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOwotCi0gICAgICAgIGNvbnRl
eHQudGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgiW1Rlc3RdIFNlY29uZFRhc2siLCBbJl0gewotICAg
ICAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkgJiYg
IWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKLSAgICAgICAgICAgIEVYUEVD
VF9UUlVFKGNvbnRleHQuZmluaXNoZWRGaXJzdFRhc2spOwotCi0gICAgICAgICAgICBjb250ZXh0
LmZpbmlzaGVkU2Vjb25kVGFzayA9IHRydWU7Ci0gICAgICAgICAgICBjb250ZXh0LnRlc3QuZmlu
aXNoKCk7Ci0gICAgICAgIH0pOwotICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291
cmNlKCkuaXNTY2hlZHVsZWQoKSk7Ci0KLSAgICAgICAgY29udGV4dC5maW5pc2hlZEZpcnN0VGFz
ayA9IHRydWU7Ci0gICAgfSk7Ci0gICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgp
LmlzU2NoZWR1bGVkKCkpOwotCi0gICAgY29udGV4dC50ZXN0LnJ1bkxvb3AoKTsKLQotICAgIEVY
UEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7Ci0gICAgRVhQRUNU
X1RSVUUoY29udGV4dC5maW5pc2hlZEZpcnN0VGFzayk7Ci0gICAgRVhQRUNUX1RSVUUoY29udGV4
dC5maW5pc2hlZFNlY29uZFRhc2spOwotfQotCi1URVNUKFdURl9HTWFpbkxvb3BTb3VyY2UsIFJl
ZW50cmFudFJlc2NoZWR1bGluZykKLXsKLSAgICBzdHJ1Y3QgVGVzdGluZ0NvbnRleHQgewotICAg
ICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0PEdNYWluTG9vcFNvdXJjZT4gdGVzdDsKLSAgICAgICAg
Ym9vbCBmaW5pc2hlZEZpcnN0VGFzayA9IGZhbHNlOwotICAgICAgICBib29sIGZpbmlzaGVkU2Vj
b25kVGFzayA9IGZhbHNlOwotICAgIH0gY29udGV4dDsKLSAgICByZWVudHJhbnRSZXNjaGVkdWxp
bmc8VGVzdGluZ0NvbnRleHQ+KGNvbnRleHQpOwotCi0gICAgc3RydWN0IFRocmVhZFNhZmVUZXN0
aW5nQ29udGV4dCB7Ci0gICAgICAgIEdNYWluTG9vcFNvdXJjZVRlc3Q8R1RocmVhZFNhZmVNYWlu
TG9vcFNvdXJjZT4gdGVzdDsKLSAgICAgICAgYm9vbCBmaW5pc2hlZEZpcnN0VGFzayA9IGZhbHNl
OwotICAgICAgICBib29sIGZpbmlzaGVkU2Vjb25kVGFzayA9IGZhbHNlOwotICAgIH0gdGhyZWFk
U2FmZUNvbnRleHQ7Ci0gICAgcmVlbnRyYW50UmVzY2hlZHVsaW5nPFRocmVhZFNhZmVUZXN0aW5n
Q29udGV4dD4odGhyZWFkU2FmZUNvbnRleHQpOwotfQotCi1URVNUKFdURl9HTWFpbkxvb3BTb3Vy
Y2UsIFJlc2NoZWR1bGluZ0Zyb21EaWZmZXJlbnRUaHJlYWQpCi17Ci0gICAgc3RydWN0IFRlc3Rp
bmdDb250ZXh0IHsKLSAgICAgICAgR01haW5Mb29wU291cmNlVGVzdDxHVGhyZWFkU2FmZU1haW5M
b29wU291cmNlPiB0ZXN0OwotICAgICAgICBib29sIGZpbmlzaGVkRmlyc3RUYXNrOwotICAgICAg
ICBib29sIGZpbmlzaGVkU2Vjb25kVGFzazsKLSAgICB9IGNvbnRleHQ7Ci0KLSAgICBFWFBFQ1Rf
VFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOwotCi0gICAgY29udGV4dC50
ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gRmlyc3RUYXNrIiwgWyZdIHsKLSAgICAgICAg
RVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkgJiYgIWNvbnRleHQu
dGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKLQotICAgICAgICBnX3VzbGVlcCgxICogR19V
U0VDX1BFUl9TRUMpOwotICAgICAgICBjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrID0gdHJ1ZTsK
LSAgICB9KTsKLSAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVs
ZWQoKSk7Ci0KLSAgICBHVGhyZWFkKiBoZWxwZXJUaHJlYWQgPSBnX3RocmVhZF9uZXcobnVsbHB0
ciwgW10oZ3BvaW50ZXIgZGF0YSkgLT4gZ3BvaW50ZXIgewotICAgICAgICBnX3VzbGVlcCgwLjI1
ICogR19VU0VDX1BFUl9TRUMpOwotCi0gICAgICAgIFRlc3RpbmdDb250ZXh0JiBjb250ZXh0ID0g
KnN0YXRpY19jYXN0PFRlc3RpbmdDb250ZXh0Kj4oZGF0YSk7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpICYmICFjb250ZXh0LnRlc3Quc291cmNl
KCkuaXNTY2hlZHVsZWQoKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShjb250ZXh0LmZpbmlzaGVk
Rmlyc3RUYXNrKTsKLQotICAgICAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltU
ZXN0XSBTZWNvbmRUYXNrIiwgWyZdIHsKLSAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQu
ZmluaXNoZWRGaXJzdFRhc2spOwotCi0gICAgICAgICAgICBjb250ZXh0LmZpbmlzaGVkU2Vjb25k
VGFzayA9IHRydWU7Ci0gICAgICAgICAgICBjb250ZXh0LnRlc3QuZmluaXNoKCk7Ci0gICAgICAg
IH0pOwotICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVs
ZWQoKSk7Ci0KLSAgICAgICAgZ190aHJlYWRfZXhpdChudWxscHRyKTsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfSwgJmNvbnRleHQpOwotCi0gICAgY29udGV4dC50ZXN0LnJ1bkxvb3Ao
KTsKLSAgICBnX3RocmVhZF91bnJlZihoZWxwZXJUaHJlYWQpOwotCi0gICAgRVhQRUNUX1RSVUUo
IWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKLSAgICBFWFBFQ1RfVFJVRShjb250
ZXh0LmZpbmlzaGVkRmlyc3RUYXNrKTsKLSAgICBFWFBFQ1RfVFJVRShjb250ZXh0LmZpbmlzaGVk
U2Vjb25kVGFzayk7Ci19Ci0KLVRFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgRGVzdHJ1Y3Rpb25E
dXJpbmdEaXNwYXRjaCkKLXsKLSAgICAvLyBUaGlzIGlzIGp1c3QgYSByYXcgdGVzdCB0aGF0IGVu
c3VyZXMgZGVsZXRpbmcgdGhlIEdNYWluTG9vcFNvdXJjZSBvYmplY3QgZHVyaW5nCi0gICAgLy8g
ZGlzcGF0Y2ggZG9lcyBub3QgY2F1c2UgcHJvYmxlbXMuIFRoaXMgdGVzdCBzdWNjZWVkcyBpZiBp
dCBkb2Vzbid0IGNyYXNoLgotCi0gICAgR01haW5Mb29wU291cmNlKiBzb3VyY2U7Ci0gICAgR01h
aW5Mb29wKiBsb29wID0gZ19tYWluX2xvb3BfbmV3KG51bGxwdHIsIFRSVUUpOwotCi0gICAgc291
cmNlID0gbmV3IEdNYWluTG9vcFNvdXJjZTsKLSAgICBzb3VyY2UtPnNjaGVkdWxlKCJbVGVzdF0g
RGVzdHJveVNvdXJjZVRhc2siLCBbJl0gewotICAgICAgICBkZWxldGUgc291cmNlOwotICAgICAg
ICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgIH0pOwotICAgIGdfbWFpbl9sb29wX3J1bihs
b29wKTsKLQotICAgIHNvdXJjZSA9IG5ldyBHTWFpbkxvb3BTb3VyY2U7Ci0gICAgc291cmNlLT5z
Y2hlZHVsZSgiW1Rlc3RdIERlc3Ryb3lTb3VyY2VUYXNrIiwgc3RkOjpmdW5jdGlvbjxib29sICgp
PihbJl0gewotICAgICAgICBkZWxldGUgc291cmNlOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0
KGxvb3ApOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSkpOwotICAgIGdfbWFpbl9sb29w
X3J1bihsb29wKTsKLQotICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOwotfQotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyB2b2lkIGNhbmNlbFJlcGVhdGluZ1NvdXJjZUR1cmluZ0Rp
c3BhdGNoKFQmIGNvbnRleHQpCi17Ci0gICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3Vy
Y2UoKS5pc0FjdGl2ZSgpKTsKLQotICAgIGNvbnRleHQudGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgi
W1Rlc3RdIFJlcGVhdGluZ1Rhc2siLAotICAgICAgICBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+KFsm
XSB7Ci0gICAgICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3Rp
dmUoKSAmJiAhY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOwotCi0gICAgICAg
ICAgICBjb250ZXh0LmNhbGxDb3VudCsrOwotICAgICAgICAgICAgaWYgKGNvbnRleHQuY2FsbENv
dW50ID09IDMpCi0gICAgICAgICAgICAgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLmNhbmNlbCgp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0pKTsKLSAgICBFWFBFQ1RfVFJV
RShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7Ci0KLSAgICBjb250ZXh0LnRl
c3QuZGVsYXllZEZpbmlzaCgpOwotICAgIGNvbnRleHQudGVzdC5ydW5Mb29wKCk7Ci0KLSAgICBF
WFBFQ1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOwotICAgIEVYUEVD
VF9FUSgzLCBjb250ZXh0LmNhbGxDb3VudCk7Ci19Ci0KLVRFU1QoV1RGX0dNYWluTG9vcFNvdXJj
ZSwgQ2FuY2VsUmVwZWF0aW5nU291cmNlRHVyaW5nRGlzcGF0Y2gpCi17Ci0gICAgc3RydWN0IFRl
c3RpbmdDb250ZXh0IHsKLSAgICAgICAgR01haW5Mb29wU291cmNlVGVzdDxHTWFpbkxvb3BTb3Vy
Y2U+IHRlc3Q7Ci0gICAgICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7Ci0gICAgfSBjb250ZXh0
OwotICAgIGNhbmNlbFJlcGVhdGluZ1NvdXJjZUR1cmluZ0Rpc3BhdGNoPFRlc3RpbmdDb250ZXh0
Pihjb250ZXh0KTsKLQotICAgIHN0cnVjdCBUaHJlYWRTYWZlVGVzdGluZ0NvbnRleHQgewotICAg
ICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0PEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2U+IHRlc3Q7
Ci0gICAgICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7Ci0gICAgfSB0aHJlYWRTYWZlQ29udGV4
dDsKLSAgICBjYW5jZWxSZXBlYXRpbmdTb3VyY2VEdXJpbmdEaXNwYXRjaDxUaHJlYWRTYWZlVGVz
dGluZ0NvbnRleHQ+KHRocmVhZFNhZmVDb250ZXh0KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Ci1zdGF0aWMgdm9pZCBiYXNpY0Rlc3Ryb3lDYWxsYmFja3MoKQotewotICAgIHsKLSAgICAg
ICAgVCBjb250ZXh0OwotICAgICAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgp
LmlzQWN0aXZlKCkpOwotICAgICAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltU
ZXN0XSBEZXN0cm95Q2FsbGJhY2siLAotICAgICAgICAgICAgWyZdIHsKLSAgICAgICAgICAgICAg
ICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSAmJiAhY29udGV4
dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQu
Y2FsbGJhY2tDYWxsZWQgPSB0cnVlOwotICAgICAgICAgICAgfSwgR19QUklPUklUWV9ERUZBVUxU
LAotICAgICAgICAgICAgWyZdIHsKLSAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRSghY29udGV4
dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQuZGVz
dHJveUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnRlc3Qu
ZmluaXNoKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC50
ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOwotCi0gICAgICAgIGNvbnRleHQudGVzdC5ydW5M
b29wKCk7Ci0KLSAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0Fj
dGl2ZSgpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC5jYWxsYmFja0NhbGxlZCk7Ci0g
ICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuZGVzdHJveUNhbGxiYWNrQ2FsbGVkKTsKLSAgICB9
Ci0KLSAgICB7Ci0gICAgICAgIFQgY29udGV4dDsKLSAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRl
eHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKLSAgICAgICAgY29udGV4dC50ZXN0LnNvdXJj
ZSgpLnNjaGVkdWxlKCJbVGVzdF0gRGVzdHJveUNhbGxiYWNrIiwKLSAgICAgICAgICAgIHN0ZDo6
ZnVuY3Rpb248Ym9vbCAoKT4oWyZdIHsKLSAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb250
ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSAmJiAhY29udGV4dC50ZXN0LnNvdXJjZSgpLmlz
U2NoZWR1bGVkKCkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQuY2FsbGJhY2tDYWxsZWQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0pLCBHX1BS
SU9SSVRZX0RFRkFVTFQsCi0gICAgICAgICAgICBbJl0gewotICAgICAgICAgICAgICAgIEVYUEVD
VF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC5kZXN0cm95Q2FsbGJhY2tDYWxsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAg
IGNvbnRleHQudGVzdC5maW5pc2goKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICBFWFBFQ1Rf
VFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7Ci0KLSAgICAgICAgY29u
dGV4dC50ZXN0LnJ1bkxvb3AoKTsKLQotICAgICAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0
LnNvdXJjZSgpLmlzQWN0aXZlKCkpOwotICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LmNhbGxi
YWNrQ2FsbGVkKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC5kZXN0cm95Q2FsbGJhY2tD
YWxsZWQpOwotICAgIH0KLX0KLQotVEVTVChXVEZfR01haW5Mb29wU291cmNlLCBCYXNpY0Rlc3Ry
b3lDYWxsYmFja3MpCi17Ci0gICAgc3RydWN0IFRlc3RpbmdDb250ZXh0IHsKLSAgICAgICAgR01h
aW5Mb29wU291cmNlVGVzdDxHTWFpbkxvb3BTb3VyY2U+IHRlc3Q7Ci0gICAgICAgIGJvb2wgY2Fs
bGJhY2tDYWxsZWQgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBkZXN0cm95Q2FsbGJhY2tDYWxsZWQg
PSBmYWxzZTsKLSAgICB9OwotICAgIGJhc2ljRGVzdHJveUNhbGxiYWNrczxUZXN0aW5nQ29udGV4
dD4oKTsKLQotICAgIHN0cnVjdCBUaHJlYWRTYWZlVGVzdGluZ0NvbnRleHQgewotICAgICAgICBH
TWFpbkxvb3BTb3VyY2VUZXN0PEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2U+IHRlc3Q7Ci0gICAg
ICAgIGJvb2wgY2FsbGJhY2tDYWxsZWQgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBkZXN0cm95Q2Fs
bGJhY2tDYWxsZWQgPSBmYWxzZTsKLSAgICB9OwotICAgIGJhc2ljRGVzdHJveUNhbGxiYWNrczxU
aHJlYWRTYWZlVGVzdGluZ0NvbnRleHQ+KCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgot
c3RhdGljIHZvaWQgZGVzdHJveUNhbGxiYWNrc0FmdGVyQ2FuY2VsbGluZ0R1cmluZ0Rpc3BhdGNo
KCkKLXsKLSAgICB7Ci0gICAgICAgIFQgY29udGV4dDsKLSAgICAgICAgRVhQRUNUX1RSVUUoIWNv
bnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKLSAgICAgICAgY29udGV4dC50ZXN0LnNv
dXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gRGVzdHJveUNhbGxiYWNrIiwKLSAgICAgICAgICAgIFsm
XSB7Ci0gICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlz
QWN0aXZlKCkgJiYgIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LmNhbGxiYWNrQ2FsbENvdW50Kys7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC50ZXN0LnNvdXJjZSgpLmNhbmNlbCgpOwotICAgICAgICAgICAgfSwgR19QUklPUklU
WV9ERUZBVUxULAotICAgICAgICAgICAgWyZdIHsKLSAgICAgICAgICAgICAgICBFWFBFQ1RfVFJV
RSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOwotICAgICAgICAgICAgICAgIGNv
bnRleHQuZGVzdHJveUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb250
ZXh0LnRlc3QuZmluaXNoKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
Y29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOwotCi0gICAgICAgIGNvbnRleHQu
dGVzdC5kZWxheWVkRmluaXNoKCk7Ci0gICAgICAgIGNvbnRleHQudGVzdC5ydW5Mb29wKCk7Ci0K
LSAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsK
LSAgICAgICAgRVhQRUNUX0VRKDEsIGNvbnRleHQuY2FsbGJhY2tDYWxsQ291bnQpOwotICAgICAg
ICBFWFBFQ1RfVFJVRShjb250ZXh0LmRlc3Ryb3lDYWxsYmFja0NhbGxlZCk7Ci0gICAgfQotCi0g
ICAgewotICAgICAgICBUIGNvbnRleHQ7Ci0gICAgICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRl
c3Quc291cmNlKCkuaXNBY3RpdmUoKSk7Ci0gICAgICAgIGNvbnRleHQudGVzdC5zb3VyY2UoKS5z
Y2hlZHVsZSgiW1Rlc3RdIERlc3Ryb3lDYWxsYmFjayIsCi0gICAgICAgICAgICBzdGQ6OmZ1bmN0
aW9uPGJvb2wgKCk+KFsmXSB7Ci0gICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC50
ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkgJiYgIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVk
dWxlZCgpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmNhbGxiYWNrQ2FsbENvdW50Kys7Ci0g
ICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuY2FsbGJhY2tDYWxsQ291bnQgPT0gMykKLSAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLmNhbmNlbCgpOwotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfSksIEdfUFJJT1JJVFlfREVGQVVMVCwK
LSAgICAgICAgICAgIFsmXSB7Ci0gICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQu
dGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmRlc3Ry
b3lDYWxsYmFja0NhbGxlZCA9IHRydWU7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgRVhQRUNU
X1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOwotCi0gICAgICAgIGNv
bnRleHQudGVzdC5kZWxheWVkRmluaXNoKCk7Ci0gICAgICAgIGNvbnRleHQudGVzdC5ydW5Mb29w
KCk7Ci0KLSAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2
ZSgpKTsKLSAgICAgICAgRVhQRUNUX0VRKDMsIGNvbnRleHQuY2FsbGJhY2tDYWxsQ291bnQpOwot
ICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LmRlc3Ryb3lDYWxsYmFja0NhbGxlZCk7Ci0gICAg
fQotfQotCi1URVNUKFdURl9HTWFpbkxvb3BTb3VyY2UsIERlc3Ryb3lDYWxsYmFja3NBZnRlckNh
bmNlbGxpbmdEdXJpbmdEaXNwYXRjaCkKLXsKLSAgICBzdHJ1Y3QgVGVzdGluZ0NvbnRleHQgewot
ICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0PEdNYWluTG9vcFNvdXJjZT4gdGVzdDsKLSAgICAg
ICAgdW5zaWduZWQgY2FsbGJhY2tDYWxsQ291bnQ9IDA7Ci0gICAgICAgIGJvb2wgZGVzdHJveUNh
bGxiYWNrQ2FsbGVkID0gZmFsc2U7Ci0gICAgfTsKLSAgICBkZXN0cm95Q2FsbGJhY2tzQWZ0ZXJD
YW5jZWxsaW5nRHVyaW5nRGlzcGF0Y2g8VGVzdGluZ0NvbnRleHQ+KCk7Ci0KLSAgICBzdHJ1Y3Qg
VGhyZWFkU2FmZVRlc3RpbmdDb250ZXh0IHsKLSAgICAgICAgR01haW5Mb29wU291cmNlVGVzdDxH
VGhyZWFkU2FmZU1haW5Mb29wU291cmNlPiB0ZXN0OwotICAgICAgICB1bnNpZ25lZCBjYWxsYmFj
a0NhbGxDb3VudD0gMDsKLSAgICAgICAgYm9vbCBkZXN0cm95Q2FsbGJhY2tDYWxsZWQgPSBmYWxz
ZTsKLSAgICB9OwotICAgIGRlc3Ryb3lDYWxsYmFja3NBZnRlckNhbmNlbGxpbmdEdXJpbmdEaXNw
YXRjaDxUaHJlYWRTYWZlVGVzdGluZ0NvbnRleHQ+KCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgotc3RhdGljIHZvaWQgZGVzdHJveUNhbGxiYWNrc0FmdGVyUmVzY2hlZHVsaW5nRHVyaW5n
RGlzcGF0Y2goKQotewotICAgIHsKLSAgICAgICAgVCBjb250ZXh0OwotICAgICAgICBFWFBFQ1Rf
VFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOwotICAgICAgICBjb250ZXh0
LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBCYXNlQ2FsbGJhY2siLAotICAgICAgICAg
ICAgWyZdIHsKLSAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNl
KCkuaXNBY3RpdmUoKSAmJiAhY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOwot
ICAgICAgICAgICAgICAgIGNvbnRleHQuZmlyc3RDYWxsYmFja0NhbGxDb3VudCsrOwotICAgICAg
ICAgICAgICAgIGNvbnRleHQudGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgiW1Rlc3RdIFJlc2NoZWR1
bGluZ0NhbGxiYWNrIiwKLSAgICAgICAgICAgICAgICAgICAgWyZdIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpICYm
ICFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LnNlY29uZENhbGxiYWNrQ2FsbENvdW50Kys7Ci0gICAgICAgICAgICAg
ICAgICAgIH0sIEdfUFJJT1JJVFlfREVGQVVMVCwKLSAgICAgICAgICAgICAgICAgICAgWyZdIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNl
KCkuaXNBY3RpdmUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnNlY29uZERl
c3Ryb3lDYWxsYmFja0NhbGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxl
ZCgpKTsKLSAgICAgICAgICAgIH0sIEdfUFJJT1JJVFlfREVGQVVMVCwKLSAgICAgICAgICAgIFsm
XSB7Ci0gICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgR01haW5Mb29wU291cmNl
IGhhcyBiZWVuIHJlc2NoZWR1bGVkLCBlcmdvIHRoZSBTY2hlZHVsZWQgc3RhdHVzLgotICAgICAg
ICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgp
KTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmZpcnN0RGVzdHJveUNhbGxiYWNrQ2FsbGVkID0g
dHJ1ZTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Qu
c291cmNlKCkuaXNTY2hlZHVsZWQoKSk7Ci0KLSAgICAgICAgY29udGV4dC50ZXN0LmRlbGF5ZWRG
aW5pc2goKTsKLSAgICAgICAgY29udGV4dC50ZXN0LnJ1bkxvb3AoKTsKLQotICAgICAgICBFWFBF
Q1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOwotICAgICAgICBFWFBF
Q1RfRVEoMSwgY29udGV4dC5maXJzdENhbGxiYWNrQ2FsbENvdW50KTsKLSAgICAgICAgRVhQRUNU
X1RSVUUoY29udGV4dC5maXJzdERlc3Ryb3lDYWxsYmFja0NhbGxlZCk7Ci0gICAgICAgIEVYUEVD
VF9FUSgxLCBjb250ZXh0LnNlY29uZENhbGxiYWNrQ2FsbENvdW50KTsKLSAgICAgICAgRVhQRUNU
X1RSVUUoY29udGV4dC5zZWNvbmREZXN0cm95Q2FsbGJhY2tDYWxsZWQpOwotICAgIH0KLQotICAg
IHsKLSAgICAgICAgVCBjb250ZXh0OwotICAgICAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0
LnNvdXJjZSgpLmlzQWN0aXZlKCkpOwotICAgICAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2No
ZWR1bGUoIltUZXN0XSBCYXNlQ2FsbGJhY2siLAotICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjxi
b29sICgpPihbJl0gewotICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5z
b3VyY2UoKS5pc0FjdGl2ZSgpICYmICFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQo
KSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5maXJzdENhbGxiYWNrQ2FsbENvdW50Kys7Ci0g
ICAgICAgICAgICAgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gUmVz
Y2hlZHVsaW5nQ2FsbGJhY2siLAotICAgICAgICAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPGJv
b2wgKCk+KFsmXSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0
LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSAmJiAhY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2No
ZWR1bGVkKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZWNvbmRDYWxsYmFj
a0NhbGxDb3VudCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuc2Vj
b25kQ2FsbGJhY2tDYWxsQ291bnQgIT0gMzsKLSAgICAgICAgICAgICAgICAgICAgfSksIEdfUFJJ
T1JJVFlfREVGQVVMVCwKLSAgICAgICAgICAgICAgICAgICAgWyZdIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnNlY29uZERlc3Ryb3lDYWxsYmFja0Nh
bGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIEVY
UEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0pLCBHX1BSSU9SSVRZX0RFRkFVTFQs
Ci0gICAgICAgICAgICBbJl0gewotICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhl
IEdNYWluTG9vcFNvdXJjZSBoYXMgYmVlbiByZXNjaGVkdWxlZCwgZXJnbyB0aGUgU2NoZWR1bGVk
IHN0YXR1cy4KLSAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNl
KCkuaXNTY2hlZHVsZWQoKSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5maXJzdERlc3Ryb3lD
YWxsYmFja0NhbGxlZCA9IHRydWU7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgRVhQRUNUX1RS
VUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOwotCi0gICAgICAgIGNvbnRl
eHQudGVzdC5kZWxheWVkRmluaXNoKCk7Ci0gICAgICAgIGNvbnRleHQudGVzdC5ydW5Mb29wKCk7
Ci0KLSAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgp
KTsKLSAgICAgICAgRVhQRUNUX0VRKDEsIGNvbnRleHQuZmlyc3RDYWxsYmFja0NhbGxDb3VudCk7
Ci0gICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuZmlyc3REZXN0cm95Q2FsbGJhY2tDYWxsZWQp
OwotICAgICAgICBFWFBFQ1RfRVEoMywgY29udGV4dC5zZWNvbmRDYWxsYmFja0NhbGxDb3VudCk7
Ci0gICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuc2Vjb25kRGVzdHJveUNhbGxiYWNrQ2FsbGVk
KTsKLSAgICB9Ci19Ci0KLVRFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgRGVzdHJveUNhbGxiYWNr
c0FmdGVyUmVzY2hlZHVsaW5nRHVyaW5nRGlzcGF0Y2gpCi17Ci0gICAgc3RydWN0IFRlc3RpbmdD
b250ZXh0IHsKLSAgICAgICAgR01haW5Mb29wU291cmNlVGVzdDxHTWFpbkxvb3BTb3VyY2U+IHRl
c3Q7Ci0gICAgICAgIHVuc2lnbmVkIGZpcnN0Q2FsbGJhY2tDYWxsQ291bnQgPSAwOwotICAgICAg
ICBib29sIGZpcnN0RGVzdHJveUNhbGxiYWNrQ2FsbGVkID0gZmFsc2U7Ci0gICAgICAgIHVuc2ln
bmVkIHNlY29uZENhbGxiYWNrQ2FsbENvdW50ID0gMDsKLSAgICAgICAgYm9vbCBzZWNvbmREZXN0
cm95Q2FsbGJhY2tDYWxsZWQgPSBmYWxzZTsKLSAgICB9OwotICAgIGRlc3Ryb3lDYWxsYmFja3NB
ZnRlclJlc2NoZWR1bGluZ0R1cmluZ0Rpc3BhdGNoPFRlc3RpbmdDb250ZXh0PigpOwotCi0gICAg
c3RydWN0IFRocmVhZFNhZmVUZXN0aW5nQ29udGV4dCB7Ci0gICAgICAgIEdNYWluTG9vcFNvdXJj
ZVRlc3Q8R1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZT4gdGVzdDsKLSAgICAgICAgdW5zaWduZWQg
Zmlyc3RDYWxsYmFja0NhbGxDb3VudCA9IDA7Ci0gICAgICAgIGJvb2wgZmlyc3REZXN0cm95Q2Fs
bGJhY2tDYWxsZWQgPSBmYWxzZTsKLSAgICAgICAgdW5zaWduZWQgc2Vjb25kQ2FsbGJhY2tDYWxs
Q291bnQgPSAwOwotICAgICAgICBib29sIHNlY29uZERlc3Ryb3lDYWxsYmFja0NhbGxlZCA9IGZh
bHNlOwotICAgIH07Ci0gICAgZGVzdHJveUNhbGxiYWNrc0FmdGVyUmVzY2hlZHVsaW5nRHVyaW5n
RGlzcGF0Y2g8VGhyZWFkU2FmZVRlc3RpbmdDb250ZXh0PigpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJCg==
</data>
<flag name="review"
          id="291213"
          type_id="1"
          status="+"
          setter="ossy"
    />
          </attachment>
      

    </bug>

</bugzilla>