<?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>233694</bug_id>
          
          <creation_ts>2021-12-01 04:25:49 -0800</creation_ts>
          <short_desc>[GTK][a11y] Add implementation of table and table cell interfaces when building with ATSPI</short_desc>
          <delta_ts>2021-12-02 00:16:25 -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>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>230253</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>aperez</cc>
    
    <cc>apinheiro</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>samuel_white</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1819175</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-12-01 04:25:49 -0800</bug_when>
    <thetext>Implement table and table cell</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819182</commentid>
    <comment_count>1</comment_count>
      <attachid>445554</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-12-01 04:29:13 -0800</bug_when>
    <thetext>Created attachment 445554
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819206</commentid>
    <comment_count>2</comment_count>
      <attachid>445554</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2021-12-01 05:45:44 -0800</bug_when>
    <thetext>Comment on attachment 445554
Patch

Other than changing a few pointer literals to “nulptr” before landing, patch LGTM.


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

&gt; Tools/WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:1069
&gt; +        return JSStringCreateWithCharacters(0, 0);

While changing this you could replace the first zero with nullptr:

    return JSStringCreateWithCharacters(nullptr, 0);

=]

&gt; Tools/WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:1078
&gt; +        return JSStringCreateWithCharacters(0, 0);

Same here: s/0/nullptr

&gt; Tools/WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:1092
&gt; +        return JSStringCreateWithCharacters(0, 0);

...and here...

&gt; Tools/WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:1101
&gt; +        return JSStringCreateWithCharacters(0, 0);

...one more...

&gt; Tools/WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:1146
&gt; +        return JSStringCreateWithCharacters(0, 0);

...and another...

(okay, I will stop commenting now on each of those)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819604</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-12-02 00:16:25 -0800</bug_when>
    <thetext>Committed r286416 (244762@main): &lt;https://commits.webkit.org/244762@main&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445554</attachid>
            <date>2021-12-01 04:29:13 -0800</date>
            <delta_ts>2021-12-01 05:45:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-atspi-tables.diff</filename>
            <type>text/plain</type>
            <size>77422</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzMjI3OGUwMzdhY2UuLjBhODk5ZmY0YzU4OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ4IEBACisyMDIxLTEyLTAxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVthMTF5XSBBZGQgaW1wbGVtZW50YXRpb24gb2Yg
dGFibGUgYW5kIHRhYmxlIGNlbGwgaW50ZXJmYWNlcyB3aGVuIGJ1aWxkaW5nIHdpdGggQVRTUEkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzY5NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291cmNl
c0dUSy50eHQ6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1
bW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uOjpjb21w
dXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCBjb25zdCk6IERvIG5vdCBleHBvc2UgY29sdW1uIGZv
ciBBVFNQSS4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUhlYWRl
ckNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVIZWFk
ZXJDb250YWluZXI6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkIGNvbnN0KTogRG8gbm90
IGV4cG9zZSBoZWFkZXIgY29udGFpbmVyIGVpdGhlci4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmludGVyZmFjZXNGb3JPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpwYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6d3JhcHBlclZlY3RvciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNoaWxkcmVuIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YnVpbGRJbnRlcmZh
Y2VzIGNvbnN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaS5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0
eU9iamVjdFRhYmxlQXRzcGkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6cm93Q291bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpjb2x1bW5Db3VudCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNlbGwgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjp0YWJsZUNhcHRpb24gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpjZWxsSW5kZXggY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpyb3dBdEluZGV4
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y29s
dW1uQXRJbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0
QXRzcGk6OnJvd0hlYWRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGk6OmNvbHVtbkhlYWRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGk6OnJvd0Rlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y29sdW1uRGVzY3JpcHRpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpyb3dFeHRlbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpjb2x1
bW5FeHRlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpOjpjZWxscyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0
QXRzcGk6OnJvd3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpOjpyb3dIZWFkZXJzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaTo6Y29sdW1uSGVhZGVycyBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGFibGVDZWxsQXRzcGkuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y2VsbFJvd0hlYWRl
cnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpj
ZWxsQ29sdW1uSGVhZGVycyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGk6OnJvd1NwYW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpOjpjb2x1bW5TcGFuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y2VsbFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L2F0c3BpL3htbC9UYWJsZUNlbGwueG1sOgorCiAyMDIxLTExLTI3ICBDYXJs
b3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVth
MTF5XSBTaWduYWwgc3RhdGUtY2hhbmdlZDpzZWxlY3RlZCBpcyBub3QgZW1pdHRlZCBmb3IgbGlz
dGJveCBlbGVtZW50cyB3aGVuIGJ1aWxkaW5nIHdpdGggQVRTUEkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQK
aW5kZXggYzM3NTFlMmQ4OGY4Li40OTE3ODZiNTFkM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CkBA
IC00OCw2ICs0OCw4IEBAIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEh5
cGVybGlua0F0c3BpLmNwcAogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0
SHlwZXJ0ZXh0QXRzcGkuY3BwCiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmpl
Y3RJbWFnZUF0c3BpLmNwcAogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0
U2VsZWN0aW9uQXRzcGkuY3BwCithY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmpl
Y3RUYWJsZUF0c3BpLmNwcAorYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0
VGFibGVDZWxsQXRzcGkuY3BwCiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmpl
Y3RUZXh0QXRzcGkuY3BwCiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RW
YWx1ZUF0c3BpLmNwcAogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3Bp
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5VGFibGVDb2x1bW4uY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5VGFibGVDb2x1bW4uY3BwCmluZGV4IDkwNDYzZjY4MjQ0Ny4uNGM5MzcxMjMzYTgzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJs
ZUNvbHVtbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5VGFibGVDb2x1bW4uY3BwCkBAIC0xNzIsNyArMTcyLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5
VGFibGVDb2x1bW46OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKICAgICBp
ZiAoIW1fcGFyZW50KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKSB8fCBVU0UoQVRLKQorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IFVTRShB
VEspIHx8IFVTRShBVFNQSSkKICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogICAgIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVIZWFk
ZXJDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5VGFibGVIZWFkZXJDb250YWluZXIuY3BwCmluZGV4IDNhZGJmY2FiNDE5Yi4uMDc0MjI4ZTIw
MWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlUYWJsZUhlYWRlckNvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuY3BwCkBAIC01NCw3ICs1NCw3
IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyOjpjb21wdXRlQWNjZXNz
aWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0CiAgICAgaWYgKCFtX3BhcmVudCkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgfHwgVVNFKEFUSykKKyNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBVU0UoQVRLKSB8fCBVU0UoQVRTUEkpCiAgICAgcmV0
dXJuIHRydWU7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuY3BwCmluZGV4IGE1
YzU2YjNkZDkzMS4uN2Q1MTdlZmU3YzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuY3Bw
CkBAIC0xMDAsNiArMTAwLDE1IEBAIE9wdGlvblNldDxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6
OkludGVyZmFjZT4gQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjppbnRlcmZhCiAgICAgaWYgKGNv
cmVPYmplY3QuY2FuSGF2ZVNlbGVjdGVkQ2hpbGRyZW4oKSkKICAgICAgICAgaW50ZXJmYWNlcy5h
ZGQoSW50ZXJmYWNlOjpTZWxlY3Rpb24pOwogCisgICAgaWYgKGNvcmVPYmplY3QuaXNUYWJsZSgp
KQorICAgICAgICBpbnRlcmZhY2VzLmFkZChJbnRlcmZhY2U6OlRhYmxlKTsKKworICAgIGlmIChj
b3JlT2JqZWN0LnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpDZWxsCisgICAgICAg
IHx8IGNvcmVPYmplY3Qucm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OkdyaWRDZWxs
CisgICAgICAgIHx8IGNvcmVPYmplY3Qucm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6
OkNvbHVtbkhlYWRlcgorICAgICAgICB8fCBjb3JlT2JqZWN0LnJvbGVWYWx1ZSgpID09IEFjY2Vz
c2liaWxpdHlSb2xlOjpSb3dIZWFkZXIpCisgICAgICAgIGludGVyZmFjZXMuYWRkKEludGVyZmFj
ZTo6VGFibGVDZWxsKTsKKwogICAgIHJldHVybiBpbnRlcmZhY2VzOwogfQogCkBAIC01MDAsNiAr
NTA5LDEwIEBAIGNvbnN0IFN0cmluZyYgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpwYXRoKCkK
ICAgICAgICAgICAgIGludGVyZmFjZXMuYXBwZW5kKHsgY29uc3RfY2FzdDxHREJ1c0ludGVyZmFj
ZUluZm8qPigmd2Via2l0X2ltYWdlX2ludGVyZmFjZSksICZzX2ltYWdlRnVuY3Rpb25zIH0pOwog
ICAgICAgICBpZiAobV9pbnRlcmZhY2VzLmNvbnRhaW5zKEludGVyZmFjZTo6U2VsZWN0aW9uKSkK
ICAgICAgICAgICAgIGludGVyZmFjZXMuYXBwZW5kKHsgY29uc3RfY2FzdDxHREJ1c0ludGVyZmFj
ZUluZm8qPigmd2Via2l0X3NlbGVjdGlvbl9pbnRlcmZhY2UpLCAmc19zZWxlY3Rpb25GdW5jdGlv
bnMgfSk7CisgICAgICAgIGlmIChtX2ludGVyZmFjZXMuY29udGFpbnMoSW50ZXJmYWNlOjpUYWJs
ZSkpCisgICAgICAgICAgICBpbnRlcmZhY2VzLmFwcGVuZCh7IGNvbnN0X2Nhc3Q8R0RCdXNJbnRl
cmZhY2VJbmZvKj4oJndlYmtpdF90YWJsZV9pbnRlcmZhY2UpLCAmc190YWJsZUZ1bmN0aW9ucyB9
KTsKKyAgICAgICAgaWYgKG1faW50ZXJmYWNlcy5jb250YWlucyhJbnRlcmZhY2U6OlRhYmxlQ2Vs
bCkpCisgICAgICAgICAgICBpbnRlcmZhY2VzLmFwcGVuZCh7IGNvbnN0X2Nhc3Q8R0RCdXNJbnRl
cmZhY2VJbmZvKj4oJndlYmtpdF90YWJsZV9jZWxsX2ludGVyZmFjZSksICZzX3RhYmxlQ2VsbEZ1
bmN0aW9ucyB9KTsKICAgICAgICAgbV9wYXRoID0gYXRzcGlSb290LT5hdHNwaSgpLnJlZ2lzdGVy
T2JqZWN0KCp0aGlzLCBXVEZNb3ZlKGludGVyZmFjZXMpKTsKICAgICB9CiAKQEAgLTU1Niw4ICs1
NjksMTAgQEAgc3RkOjpvcHRpb25hbDxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqPiBBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGk6OnBhcmVudCgpIGNvbnMKICAgICBpZiAoIWF4UGFyZW50KQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChhdXRvKiBhdHNwaVBhcmVudCA9IGF4UGFy
ZW50LT53cmFwcGVyKCkpCisgICAgaWYgKGF1dG8qIGF0c3BpUGFyZW50ID0gYXhQYXJlbnQtPndy
YXBwZXIoKSkgeworICAgICAgICBhdHNwaVBhcmVudC0+c2V0Um9vdChyb290KCkpOwogICAgICAg
ICByZXR1cm4gYXRzcGlQYXJlbnQ7CisgICAgfQogCiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
IH0KQEAgLTU5OCwxOCArNjEzLDEzIEBAIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSogQWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpOjpjaGlsZEF0KHVuc2lnbmVkIGluZGV4KSBjb25zCiAgICAgcmV0
dXJuIHdyYXBwZXI7CiB9CiAKLVZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3Bp
Pj4gQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpjaGlsZHJlbigpIGNvbnN0CitWZWN0b3I8UmVm
UHRyPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4+IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6
d3JhcHBlclZlY3Rvcihjb25zdCBWZWN0b3I8UmVmUHRyPEFYQ29yZU9iamVjdD4+JiBlbGVtZW50
cykgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAgIGlm
ICghbV9heE9iamVjdCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGNvbnN0IGF1dG8mIGNo
aWxkcmVuID0gbV9heE9iamVjdC0+Y2hpbGRyZW4oKTsKICAgICBWZWN0b3I8UmVmUHRyPEFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaT4+IHdyYXBwZXJzOwotICAgIHdyYXBwZXJzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoY2hpbGRyZW4uc2l6ZSgpKTsKKyAgICB3cmFwcGVycy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGVsZW1lbnRzLnNpemUoKSk7CiAgICAgYXV0byogcm9vdCA9IHRoaXMtPnJvb3Qo
KTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pIHsKLSAgICAgICAgaWYg
KGF1dG8qIHdyYXBwZXIgPSBjaGlsZC0+d3JhcHBlcigpKSB7CisgICAgZm9yIChjb25zdCBhdXRv
JiBlbGVtZW50IDogZWxlbWVudHMpIHsKKyAgICAgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBlbGVt
ZW50LT53cmFwcGVyKCkpIHsKICAgICAgICAgICAgIHdyYXBwZXItPnNldFJvb3Qocm9vdCk7CiAg
ICAgICAgICAgICB3cmFwcGVycy51bmNoZWNrZWRBcHBlbmQod3JhcHBlcik7CiAgICAgICAgIH0K
QEAgLTYxNyw2ICs2MjcsMTUgQEAgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGk+PiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNoaWxkcmVuKCkgY28KICAgICByZXR1cm4g
d3JhcHBlcnM7CiB9CiAKK1ZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpPj4g
QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpjaGlsZHJlbigpIGNvbnN0Cit7CisgICAgUkVMRUFT
RV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fYXhPYmplY3QpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICByZXR1cm4gd3JhcHBlclZlY3RvcihtX2F4T2JqZWN0LT5jaGls
ZHJlbigpKTsKK30KKwogaW50IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6aW5kZXhJblBhcmVu
dCgpIGNvbnN0CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKQEAgLTEx
NTIsNiArMTE3MSwxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YnVpbGRJbnRl
cmZhY2VzKEdWYXJpYW50QnVpbGRlciogYnVpbGRlcikgY29uc3QKICAgICAgICAgZ192YXJpYW50
X2J1aWxkZXJfYWRkKGJ1aWxkZXIsICJzIiwgd2Via2l0X2ltYWdlX2ludGVyZmFjZS5uYW1lKTsK
ICAgICBpZiAobV9pbnRlcmZhY2VzLmNvbnRhaW5zKEludGVyZmFjZTo6U2VsZWN0aW9uKSkKICAg
ICAgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKGJ1aWxkZXIsICJzIiwgd2Via2l0X3NlbGVjdGlv
bl9pbnRlcmZhY2UubmFtZSk7CisgICAgaWYgKG1faW50ZXJmYWNlcy5jb250YWlucyhJbnRlcmZh
Y2U6OlRhYmxlKSkKKyAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKGJ1aWxkZXIsICJzIiwg
d2Via2l0X3RhYmxlX2ludGVyZmFjZS5uYW1lKTsKKyAgICBpZiAobV9pbnRlcmZhY2VzLmNvbnRh
aW5zKEludGVyZmFjZTo6VGFibGVDZWxsKSkKKyAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfYWRk
KGJ1aWxkZXIsICJzIiwgd2Via2l0X3RhYmxlX2NlbGxfaW50ZXJmYWNlLm5hbWUpOwogfQogCiB2
b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2VyaWFsaXplKEdWYXJpYW50QnVpbGRlciog
YnVpbGRlcikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
YXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oCmluZGV4IGZhZmI0YjJiZGFk
OC4uODgzOWVkNzNiNTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmgKQEAgLTUyLDcgKzUy
LDkgQEAgcHVibGljOgogICAgICAgICBBY3Rpb24gPSAxIDw8IDYsCiAgICAgICAgIERvY3VtZW50
ID0gMSA8PCA3LAogICAgICAgICBJbWFnZSA9IDEgPDwgOCwKLSAgICAgICAgU2VsZWN0aW9uID0g
MSA8PCA5CisgICAgICAgIFNlbGVjdGlvbiA9IDEgPDwgOSwKKyAgICAgICAgVGFibGUgPSAxIDw8
IDEwLAorICAgICAgICBUYWJsZUNlbGwgPSAxIDw8IDExCiAgICAgfTsKICAgICBjb25zdCBPcHRp
b25TZXQ8SW50ZXJmYWNlPiYgaW50ZXJmYWNlcygpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJmYWNl
czsgfQogCkBAIC0xMzgsOSArMTQwLDI0IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIGNsZWFyU2VsZWN0aW9uKCkgY29uc3Q7CiAgICAgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKCk7
CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqIGNlbGwodW5z
aWduZWQgcm93LCB1bnNpZ25lZCBjb2x1bW4pIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHVu
c2lnbmVkIHJvd0NvdW50KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgY29s
dW1uQ291bnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVmUHRyPEFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaT4+IGNlbGxzKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
VmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+PiByb3dzKCkgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+
PiByb3dIZWFkZXJzKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlZlB0cjxB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+PiBjb2x1bW5IZWFkZXJzKCkgY29uc3Q7CisKKyAgICBX
RUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4+IGNl
bGxSb3dIZWFkZXJzKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlZlB0cjxB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+PiBjZWxsQ29sdW1uSGVhZGVycygpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIHJvd1NwYW4oKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB1bnNpZ25lZCBjb2x1bW5TcGFuKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rk
OjpwYWlyPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4g
Y2VsbFBvc2l0aW9uKCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpKEFYQ29yZU9iamVjdCopOwogCisgICAgVmVjdG9yPFJlZlB0cjxBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGk+PiB3cmFwcGVyVmVjdG9yKGNvbnN0IFZlY3RvcjxSZWZQdHI8
QVhDb3JlT2JqZWN0Pj4mKSBjb25zdDsKICAgICBpbnQgaW5kZXhJblBhcmVudCgpIGNvbnN0Owog
ICAgIEdWYXJpYW50KiBwYXJlbnRSZWZlcmVuY2UoKSBjb25zdDsKICAgICB2b2lkIGNoaWxkQWRk
ZWQoQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpJik7CkBAIC0xODksNiArMjA2LDE4IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBpc0NoaWxkU2VsZWN0ZWQodW5zaWduZWQpIGNvbnN0OwogICAgIGJvb2wg
c2VsZWN0QWxsKCkgY29uc3Q7CiAKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqIHJvd0hl
YWRlcih1bnNpZ25lZCkgY29uc3Q7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKiBjb2x1
bW5IZWFkZXIodW5zaWduZWQpIGNvbnN0OworICAgIHVuc2lnbmVkIHJvd0V4dGVudCh1bnNpZ25l
ZCByb3csIHVuc2lnbmVkIGNvbHVtbikgY29uc3Q7CisgICAgdW5zaWduZWQgY29sdW1uRXh0ZW50
KHVuc2lnbmVkIHJvdywgdW5zaWduZWQgY29sdW1uKSBjb25zdDsKKworICAgIEFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaSogdGFibGVDYXB0aW9uKCkgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gY2VsbEluZGV4KHVuc2lnbmVkIHJvdywgdW5zaWduZWQgY29sdW1uKSBjb25zdDsK
KyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiByb3dBdEluZGV4KHVuc2lnbmVkKSBjb25zdDsK
KyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjb2x1bW5BdEluZGV4KHVuc2lnbmVkKSBjb25z
dDsKKyAgICBTdHJpbmcgcm93RGVzY3JpcHRpb24odW5zaWduZWQpIGNvbnN0OworICAgIFN0cmlu
ZyBjb2x1bW5EZXNjcmlwdGlvbih1bnNpZ25lZCkgY29uc3Q7CisKICAgICBzdGF0aWMgT3B0aW9u
U2V0PEludGVyZmFjZT4gaW50ZXJmYWNlc0Zvck9iamVjdChBWENvcmVPYmplY3QmKTsKIAogICAg
IHN0YXRpYyBHREJ1c0ludGVyZmFjZVZUYWJsZSBzX2FjY2Vzc2libGVGdW5jdGlvbnM7CkBAIC0y
MDEsNiArMjMwLDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgR0RCdXNJbnRlcmZhY2VWVGFibGUg
c19kb2N1bWVudEZ1bmN0aW9uczsKICAgICBzdGF0aWMgR0RCdXNJbnRlcmZhY2VWVGFibGUgc19p
bWFnZUZ1bmN0aW9uczsKICAgICBzdGF0aWMgR0RCdXNJbnRlcmZhY2VWVGFibGUgc19zZWxlY3Rp
b25GdW5jdGlvbnM7CisgICAgc3RhdGljIEdEQnVzSW50ZXJmYWNlVlRhYmxlIHNfdGFibGVGdW5j
dGlvbnM7CisgICAgc3RhdGljIEdEQnVzSW50ZXJmYWNlVlRhYmxlIHNfdGFibGVDZWxsRnVuY3Rp
b25zOwogCiAgICAgQVhDb3JlT2JqZWN0KiBtX2F4T2JqZWN0IHsgbnVsbHB0ciB9OwogICAgIEFY
Q29yZU9iamVjdCogbV9jb3JlT2JqZWN0IHsgbnVsbHB0ciB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGFibGVBdHNw
aS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlP
YmplY3RUYWJsZUF0c3BpLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLjlhYTU5NTBiNGUzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdFRhYmxlQXRzcGkuY3BwCkBAIC0wLDAg
KzEsNDA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuaCIKKworI2lm
IEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRTUEkpCisKKyNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5Um9vdEF0c3BpLmgiCisjaW5jbHVkZSAiSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaCIK
KyNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5o
IgorI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR0RCdXNJbnRlcmZhY2VWVGFibGUgQWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpOjpzX3RhYmxlRnVuY3Rpb25zID0geworICAgIC8vIG1ldGhvZF9j
YWxsCisgICAgW10oR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhcios
IGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqIG1ldGhvZE5hbWUsIEdWYXJpYW50KiBwYXJhbWV0
ZXJzLCBHREJ1c01ldGhvZEludm9jYXRpb24qIGludm9jYXRpb24sIGdwb2ludGVyIHVzZXJEYXRh
KSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgICAgIGF1
dG8gYXRzcGlPYmplY3QgPSBSZWYgeyAqc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpKj4odXNlckRhdGEpIH07CisgICAgICAgIGF0c3BpT2JqZWN0LT51cGRhdGVCYWNraW5nU3Rv
cmUoKTsKKworICAgICAgICBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0QWNjZXNzaWJs
ZUF0IikpIHsKKyAgICAgICAgICAgIGludCByb3csIGNvbHVtbjsKKyAgICAgICAgICAgIGdfdmFy
aWFudF9nZXQocGFyYW1ldGVycywgIihpaSkiLCAmcm93LCAmY29sdW1uKTsKKyAgICAgICAgICAg
IGF1dG8qIGNlbGwgPSByb3cgPj0gMCAmJiBjb2x1bW4gPj0gMCA/IGF0c3BpT2JqZWN0LT5jZWxs
KHJvdywgY29sdW1uKSA6IG51bGxwdHI7CisgICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9j
YXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihAKHNvKSkiLCBj
ZWxsID8gY2VsbC0+cmVmZXJlbmNlKCkgOiBhdHNwaU9iamVjdC0+cm9vdCgpLT5hdHNwaSgpLm51
bGxSZWZlcmVuY2UoKSkpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFt
ZSwgIkdldEluZGV4QXQiKSkgeworICAgICAgICAgICAgaW50IHJvdywgY29sdW1uOworICAgICAg
ICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKGlpKSIsICZyb3csICZjb2x1bW4pOwor
ICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0
aW9uLCBnX3ZhcmlhbnRfbmV3KCIoaSkiLCByb3cgPj0gMCAmJiBjb2x1bW4gPj0gMCA/IGF0c3Bp
T2JqZWN0LT5jZWxsSW5kZXgocm93LCBjb2x1bW4pLnZhbHVlX29yKC0xKSA6IC0xKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0Um93QXRJbmRleCIpKSB7
CisgICAgICAgICAgICBpbnQgaW5kZXg7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFt
ZXRlcnMsICIoaSkiLCAmaW5kZXgpOworICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0
aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoaSkiLCBpbmRleCA+
PSAwID8gYXRzcGlPYmplY3QtPnJvd0F0SW5kZXgoaW5kZXgpLnZhbHVlX29yKC0xKSA6IC0xKSk7
CisgICAgICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0Q29sdW1uQXRJ
bmRleCIpKSB7CisgICAgICAgICAgICBpbnQgaW5kZXg7CisgICAgICAgICAgICBnX3ZhcmlhbnRf
Z2V0KHBhcmFtZXRlcnMsICIoaSkiLCAmaW5kZXgpOworICAgICAgICAgICAgZ19kYnVzX21ldGhv
ZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoaSki
LCBpbmRleCA+PSAwID8gYXRzcGlPYmplY3QtPmNvbHVtbkF0SW5kZXgoaW5kZXgpLnZhbHVlX29y
KC0xKSA6IC0xKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAi
R2V0Um93RGVzY3JpcHRpb24iKSkgeworICAgICAgICAgICAgaW50IGluZGV4OworICAgICAgICAg
ICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKGkpIiwgJmluZGV4KTsKKyAgICAgICAgICAg
IGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJp
YW50X25ldygiKHMpIiwgaW5kZXggPj0gMCA/IGF0c3BpT2JqZWN0LT5yb3dEZXNjcmlwdGlvbihp
bmRleCkudXRmOCgpLmRhdGEoKSA6ICIiKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWdfc3RyY21w
MChtZXRob2ROYW1lLCAiR2V0Q29sdW1uRGVzY3JpcHRpb24iKSkgeworICAgICAgICAgICAgaW50
IGluZGV4OworICAgICAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKGkpIiwgJmlu
ZGV4KTsKKyAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUo
aW52b2NhdGlvbiwgZ192YXJpYW50X25ldygiKHMpIiwgaW5kZXggPj0gMCA/IGF0c3BpT2JqZWN0
LT5jb2x1bW5EZXNjcmlwdGlvbihpbmRleCkudXRmOCgpLmRhdGEoKSA6ICIiKSk7CisgICAgICAg
IH0gZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0Um93RXh0ZW50QXQiKSkgewor
ICAgICAgICAgICAgaW50IHJvdywgY29sdW1uOworICAgICAgICAgICAgZ192YXJpYW50X2dldChw
YXJhbWV0ZXJzLCAiKGlpKSIsICZyb3csICZjb2x1bW4pOworICAgICAgICAgICAgZ19kYnVzX21l
dGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIo
aSkiLCByb3cgPj0gMCAmJiBjb2x1bW4gPj0gMCA/IGF0c3BpT2JqZWN0LT5yb3dFeHRlbnQocm93
LCBjb2x1bW4pIDogLTEpKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5h
bWUsICJHZXRDb2x1bW5FeHRlbnRBdCIpKSB7CisgICAgICAgICAgICBpbnQgcm93LCBjb2x1bW47
CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIoaWkpIiwgJnJvdywgJmNv
bHVtbik7CisgICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVl
KGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihpKSIsIHJvdyA+PSAwICYmIGNvbHVtbiA+PSAw
ID8gYXRzcGlPYmplY3QtPmNvbHVtbkV4dGVudChyb3csIGNvbHVtbikgOiAtMSkpOworICAgICAg
ICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdldFJvd0hlYWRlciIpKSB7Cisg
ICAgICAgICAgICBpbnQgcm93OworICAgICAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJz
LCAiKGkpIiwgJnJvdyk7CisgICAgICAgICAgICBhdXRvKiBoZWFkZXIgPSByb3cgPj0gMCA/IGF0
c3BpT2JqZWN0LT5yb3dIZWFkZXIocm93KSA6IG51bGxwdHI7CisgICAgICAgICAgICBnX2RidXNf
bWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXco
IihAKHNvKSkiLCBoZWFkZXIgPyBoZWFkZXItPnJlZmVyZW5jZSgpIDogYXRzcGlPYmplY3QtPnJv
b3QoKS0+YXRzcGkoKS5udWxsUmVmZXJlbmNlKCkpKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19z
dHJjbXAwKG1ldGhvZE5hbWUsICJHZXRDb2x1bW5IZWFkZXIiKSkgeworICAgICAgICAgICAgaW50
IGNvbHVtbjsKKyAgICAgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIihpKSIsICZj
b2x1bW4pOworICAgICAgICAgICAgYXV0byogaGVhZGVyID0gY29sdW1uID49IDAgPyBhdHNwaU9i
amVjdC0+Y29sdW1uSGVhZGVyKGNvbHVtbikgOiBudWxscHRyOworICAgICAgICAgICAgZ19kYnVz
X21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3
KCIoQChzbykpIiwgaGVhZGVyID8gaGVhZGVyLT5yZWZlcmVuY2UoKSA6IGF0c3BpT2JqZWN0LT5y
b290KCktPmF0c3BpKCkubnVsbFJlZmVyZW5jZSgpKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWdf
c3RyY21wMChtZXRob2ROYW1lLCAiR2V0Um93Q29sdW1uRXh0ZW50c0F0SW5kZXgiKSkgeworICAg
ICAgICAgICAgaW50IGluZGV4OworICAgICAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJz
LCAiKGkpIiwgJmluZGV4KTsKKyAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHsKKyAgICAgICAg
ICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24s
IGdfdmFyaWFudF9uZXcoIihiaWlpaWIpIiwgRkFMU0UsIC0xLCAtMSwgLTEsIC0xLCBGQUxTRSkp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
YXV0byByb3cgPSBhdHNwaU9iamVjdC0+cm93QXRJbmRleChpbmRleCk7CisgICAgICAgICAgICBh
dXRvIGNvbHVtbiA9IGF0c3BpT2JqZWN0LT5jb2x1bW5BdEluZGV4KGluZGV4KTsKKyAgICAgICAg
ICAgIGF1dG8qIGNlbGwgPSBhdHNwaU9iamVjdC0+bV9heE9iamVjdCA/IGF0c3BpT2JqZWN0LT5t
X2F4T2JqZWN0LT5jZWxsRm9yQ29sdW1uQW5kUm93KCpjb2x1bW4sICpyb3cpIDogbnVsbHB0cjsK
KyAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2Nh
dGlvbiwgZ192YXJpYW50X25ldygiKGJpaWlpYikiLCBjZWxsICYmIGNlbGwtPmlzVGFibGVDZWxs
KCkgPyBUUlVFIDogRkFMU0UsCisgICAgICAgICAgICAgICAgcm93LnZhbHVlX29yKC0xKSwgY29s
dW1uLnZhbHVlX29yKC0xKSwgcm93ICYmIGNvbHVtbiA/IGF0c3BpT2JqZWN0LT5yb3dFeHRlbnQo
KnJvdywgKmNvbHVtbikgOiAtMSwKKyAgICAgICAgICAgICAgICByb3cgJiYgY29sdW1uID8gYXRz
cGlPYmplY3QtPmNvbHVtbkV4dGVudCgqcm93LCAqY29sdW1uKSA6IC0xLCBGQUxTRSkpOworICAg
ICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdldFNlbGVjdGVkUm93cyIp
CisgICAgICAgICAgICB8fCAhZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRTZWxlY3RlZENvbHVt
bnMiKQorICAgICAgICAgICAgfHwgIWdfc3RyY21wMChtZXRob2ROYW1lLCAiSXNSb3dTZWxlY3Rl
ZCIpCisgICAgICAgICAgICB8fCAhZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJJc0NvbHVtblNlbGVj
dGVkIikKKyAgICAgICAgICAgIHx8ICFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIklzU2VsZWN0ZWQi
KQorICAgICAgICAgICAgfHwgIWdfc3RyY21wMChtZXRob2ROYW1lLCAiQWRkUm93U2VsZWN0aW9u
IikKKyAgICAgICAgICAgIHx8ICFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkFkZENvbHVtblNlbGVj
dGlvbiIpCisgICAgICAgICAgICB8fCAhZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJSZW1vdmVSb3dT
ZWxlY3Rpb24iKQorICAgICAgICAgICAgfHwgIWdfc3RyY21wMChtZXRob2ROYW1lLCAiUmVtb3Zl
Q29sdW1uU2VsZWN0aW9uIikpCisgICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25f
cmV0dXJuX2Vycm9yX2xpdGVyYWwoaW52b2NhdGlvbiwgR19EQlVTX0VSUk9SLCBHX0RCVVNfRVJS
T1JfTk9UX1NVUFBPUlRFRCwgIiIpOworICAgIH0sCisgICAgLy8gZ2V0X3Byb3BlcnR5CisgICAg
W10oR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciosIGNvbnN0IGdj
aGFyKiwgY29uc3QgZ2NoYXIqIHByb3BlcnR5TmFtZSwgR0Vycm9yKiogZXJyb3IsIGdwb2ludGVy
IHVzZXJEYXRhKSAtPiBHVmFyaWFudCogeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOworICAgICAgICBhdXRvIGF0c3BpT2JqZWN0ID0gUmVmIHsgKnN0YXRpY19jYXN0
PEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSo+KHVzZXJEYXRhKSB9OworICAgICAgICBhdHNwaU9i
amVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAocHJv
cGVydHlOYW1lLCAiTlJvd3MiKSkKKyAgICAgICAgICAgIHJldHVybiBnX3ZhcmlhbnRfbmV3X2lu
dDMyKGF0c3BpT2JqZWN0LT5yb3dDb3VudCgpKTsKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAocHJv
cGVydHlOYW1lLCAiTkNvbHVtbnMiKSkKKyAgICAgICAgICAgIHJldHVybiBnX3ZhcmlhbnRfbmV3
X2ludDMyKGF0c3BpT2JqZWN0LT5jb2x1bW5Db3VudCgpKTsKKyAgICAgICAgaWYgKCFnX3N0cmNt
cDAocHJvcGVydHlOYW1lLCAiQ2FwdGlvbiIpKSB7CisgICAgICAgICAgICBhdXRvKiBjYXB0aW9u
ID0gYXRzcGlPYmplY3QtPnRhYmxlQ2FwdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIGNhcHRp
b24gPyBjYXB0aW9uLT5yZWZlcmVuY2UoKSA6IGF0c3BpT2JqZWN0LT5yb290KCktPmF0c3BpKCku
bnVsbFJlZmVyZW5jZSgpOworICAgICAgICB9CisgICAgICAgIGlmICghZ19zdHJjbXAwKHByb3Bl
cnR5TmFtZSwgIlN1bW1hcnkiKSkKKyAgICAgICAgICAgIHJldHVybiBhdHNwaU9iamVjdC0+cm9v
dCgpLT5hdHNwaSgpLm51bGxSZWZlcmVuY2UoKTsKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAocHJv
cGVydHlOYW1lLCAiTlNlbGVjdGVkUm93cyIpKQorICAgICAgICAgICAgcmV0dXJuIGdfdmFyaWFu
dF9uZXdfaW50MzIoMCk7CisgICAgICAgIGlmICghZ19zdHJjbXAwKHByb3BlcnR5TmFtZSwgIk5T
ZWxlY3RlZENvbHVtbnMiKSkKKyAgICAgICAgICAgIHJldHVybiBnX3ZhcmlhbnRfbmV3X2ludDMy
KDApOworCisgICAgICAgIGdfc2V0X2Vycm9yKGVycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9S
X05PVF9TVVBQT1JURUQsICJVbmtub3duIHByb3BlcnR5ICclcyciLCBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9LAorICAgIC8vIHNldF9wcm9wZXJ0eSwKKyAg
ICBudWxscHRyLAorICAgIC8vIHBhZGRpbmcKKyAgICBudWxscHRyCit9OworCit1bnNpZ25lZCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnJvd0NvdW50KCkgY29uc3QKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghbV9heE9iamVjdCkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9heE9iamVjdC0+cm93Q291bnQoKTsKK30KKwordW5z
aWduZWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpjb2x1bW5Db3VudCgpIGNvbnN0Cit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fYXhPYmplY3Qp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fYXhPYmplY3QtPmNvbHVtbkNvdW50
KCk7Cit9CisKK0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSogQWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpOjpjZWxsKHVuc2lnbmVkIHJvdywgdW5zaWduZWQgY29sdW1uKSBjb25zdAoreworICAgIFJF
TEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2F4T2JqZWN0KQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChhdXRvKiB0YWJsZUNlbGwgPSBtX2F4T2Jq
ZWN0LT5jZWxsRm9yQ29sdW1uQW5kUm93KGNvbHVtbiwgcm93KSkgeworICAgICAgICBpZiAoYXV0
byogd3JhcHBlciA9IHRhYmxlQ2VsbC0+d3JhcHBlcigpKSB7CisgICAgICAgICAgICB3cmFwcGVy
LT5zZXRSb290KHJvb3QoKSk7CisgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0
QXRzcGkqIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6dGFibGVDYXB0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPEFj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaSo+KFt0aGlzXSgpIC0+IEFjY2Vzc2liaWxpdHlPYmplY3RB
dHNwaSogeworICAgICAgICBpZiAobV9jb3JlT2JqZWN0KQorICAgICAgICAgICAgbV9jb3JlT2Jq
ZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKworICAgICAgICBpZiAoIW1fY29yZU9iamVjdCkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlmIChhdXRvKiBub2RlID0g
bV9jb3JlT2JqZWN0LT5ub2RlKCkpIHsKKyAgICAgICAgICAgIGlmICghaXM8SFRNTFRhYmxlRWxl
bWVudD4obm9kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAg
ICAgIGlmIChhdXRvIGNhcHRpb24gPSBkb3duY2FzdDxIVE1MVGFibGVFbGVtZW50Pigqbm9kZSku
Y2FwdGlvbigpKSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gY2FwdGlv
bi0+cmVuZGVyZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpcnN0QWNjZXNzaWJsZU9iamVjdEZyb21Ob2RlKHJlbmRl
cmVyLT5lbGVtZW50KCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogd3Jh
cHBlciA9IGVsZW1lbnQtPndyYXBwZXIoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyYXBwZXItPnNldFJvb3Qocm9vdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gd3JhcHBlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0pOworfQorCitzdGQ6Om9wdGlvbmFsPHVuc2ln
bmVkPiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNlbGxJbmRleCh1bnNpZ25lZCByb3csIHVu
c2lnbmVkIGNvbHVtbikgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFk
KCkpOworICAgIGlmICghbV9heE9iamVjdCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIGF1dG8qIGNlbGwgPSBtX2F4T2JqZWN0LT5jZWxsRm9yQ29sdW1uQW5kUm93KGNvbHVt
biwgcm93KTsKKyAgICBpZiAoIWNlbGwpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBhdXRvIGNlbGxzID0gbV9heE9iamVjdC0+Y2VsbHMoKTsKKyAgICBBWENvcmVPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rvcjo6aXRlcmF0b3IgcG9zaXRpb247CisgICAgcG9z
aXRpb24gPSBzdGQ6OmZpbmQoY2VsbHMuYmVnaW4oKSwgY2VsbHMuZW5kKCksIGNlbGwpOworICAg
IGlmIChwb3NpdGlvbiA9PSBjZWxscy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICByZXR1cm4gcG9zaXRpb24gLSBjZWxscy5iZWdpbigpOworfQorCitzdGQ6Om9wdGlv
bmFsPHVuc2lnbmVkPiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnJvd0F0SW5kZXgodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
KyAgICBpZiAoIW1fYXhPYmplY3QpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAg
ICBhdXRvIGNlbGxzID0gbV9heE9iamVjdC0+Y2VsbHMoKTsKKyAgICBpZiAoaW5kZXggPj0gY2Vs
bHMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIGNl
bGxzW2luZGV4XS0+cm93SW5kZXhSYW5nZSgpLmZpcnN0OworfQorCitzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNvbHVtbkF0SW5kZXgodW5zaWduZWQg
aW5kZXgpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAg
ICBpZiAoIW1fYXhPYmplY3QpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBh
dXRvIGNlbGxzID0gbV9heE9iamVjdC0+Y2VsbHMoKTsKKyAgICBpZiAoaW5kZXggPj0gY2VsbHMu
c2l6ZSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIGNlbGxz
W2luZGV4XS0+Y29sdW1uSW5kZXhSYW5nZSgpLmZpcnN0OworfQorCitBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGkqIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6cm93SGVhZGVyKHVuc2lnbmVkIHJv
dykgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIGlm
ICghbV9heE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGhlYWRl
cnMgPSBtX2F4T2JqZWN0LT5yb3dIZWFkZXJzKCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBoZWFk
ZXIgOiBoZWFkZXJzKSB7CisgICAgICAgIGF1dG8gcmFuZ2UgPSBoZWFkZXItPnJvd0luZGV4UmFu
Z2UoKTsKKyAgICAgICAgaWYgKHJhbmdlLmZpcnN0IDw9IHJvdyAmJiByb3cgPCByYW5nZS5maXJz
dCArIHJhbmdlLnNlY29uZCkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBoZWFk
ZXItPndyYXBwZXIoKSkgeworICAgICAgICAgICAgICAgIHdyYXBwZXItPnNldFJvb3Qocm9vdCgp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGkqIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y29sdW1uSGVhZGVyKHVuc2lnbmVk
IGNvbHVtbikgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwor
ICAgIGlmICghbV9heE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRv
IGhlYWRlcnMgPSBtX2F4T2JqZWN0LT5jb2x1bW5IZWFkZXJzKCk7CisgICAgZm9yIChjb25zdCBh
dXRvJiBoZWFkZXIgOiBoZWFkZXJzKSB7CisgICAgICAgIGF1dG8gcmFuZ2UgPSBoZWFkZXItPmNv
bHVtbkluZGV4UmFuZ2UoKTsKKyAgICAgICAgaWYgKHJhbmdlLmZpcnN0IDw9IGNvbHVtbiAmJiBj
b2x1bW4gPCByYW5nZS5maXJzdCArIHJhbmdlLnNlY29uZCkgeworICAgICAgICAgICAgaWYgKGF1
dG8qIHdyYXBwZXIgPSBoZWFkZXItPndyYXBwZXIoKSkgeworICAgICAgICAgICAgICAgIHdyYXBw
ZXItPnNldFJvb3Qocm9vdCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQor
CitTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpyb3dEZXNjcmlwdGlvbih1bnNpZ25l
ZCByb3cpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAg
ICBpZiAoIW1fYXhPYmplY3QpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7CisgICAgYm9vbCBpc0ZpcnN0ID0gdHJ1ZTsKKyAgICBhdXRvIGhlYWRlcnMg
PSBtX2F4T2JqZWN0LT5yb3dIZWFkZXJzKCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIg
OiBoZWFkZXJzKSB7CisgICAgICAgIGF1dG8qIHdyYXBwZXIgPSBoZWFkZXItPndyYXBwZXIoKTsK
KyAgICAgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
YXV0byByYW5nZSA9IGhlYWRlci0+cm93SW5kZXhSYW5nZSgpOworICAgICAgICBpZiAocmFuZ2Uu
Zmlyc3QgPD0gcm93ICYmIHJvdyA8IHJhbmdlLmZpcnN0ICsgcmFuZ2Uuc2Vjb25kKSB7CisgICAg
ICAgICAgICB3cmFwcGVyLT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICAgICAgICAgIGF1dG8g
dGV4dCA9IHdyYXBwZXItPnRleHQoKTsKKyAgICAgICAgICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKCFpc0ZpcnN0KQor
ICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgaXNGaXJzdCA9IGZhbHNlOworICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQodGV4dCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmco
KTsKK30KKworU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y29sdW1uRGVzY3JpcHRp
b24odW5zaWduZWQgY29sdW1uKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7CisgICAgaWYgKCFtX2F4T2JqZWN0KQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJvb2wgaXNGaXJzdCA9IHRydWU7CisgICAg
YXV0byBoZWFkZXJzID0gbV9heE9iamVjdC0+Y29sdW1uSGVhZGVycygpOworICAgIGZvciAoY29u
c3QgYXV0byYgaGVhZGVyIDogaGVhZGVycykgeworICAgICAgICBhdXRvKiB3cmFwcGVyID0gaGVh
ZGVyLT53cmFwcGVyKCk7CisgICAgICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGF1dG8gcmFuZ2UgPSBoZWFkZXItPmNvbHVtbkluZGV4UmFuZ2UoKTsK
KyAgICAgICAgaWYgKHJhbmdlLmZpcnN0IDw9IGNvbHVtbiAmJiBjb2x1bW4gPCByYW5nZS5maXJz
dCArIHJhbmdlLnNlY29uZCkgeworICAgICAgICAgICAgd3JhcHBlci0+dXBkYXRlQmFja2luZ1N0
b3JlKCk7CisgICAgICAgICAgICBhdXRvIHRleHQgPSB3cmFwcGVyLT50ZXh0KCk7CisgICAgICAg
ICAgICBpZiAodGV4dC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgIGlmICghaXNGaXJzdCkKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgn
ICcpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlzRmlyc3QgPSBmYWxzZTsK
KyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHRleHQpOworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK3Vuc2lnbmVkIEFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaTo6cm93RXh0ZW50KHVuc2lnbmVkIHJvdywgdW5zaWduZWQgY29sdW1uKSBjb25z
dAoreworICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2F4
T2JqZWN0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGF1dG8qIGNlbGwgPSBtX2F4T2JqZWN0
LT5jZWxsRm9yQ29sdW1uQW5kUm93KGNvbHVtbiwgcm93KTsKKyAgICByZXR1cm4gY2VsbCA/IGNl
bGwtPnJvd0luZGV4UmFuZ2UoKS5zZWNvbmQgOiAwOworfQorCit1bnNpZ25lZCBBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGk6OmNvbHVtbkV4dGVudCh1bnNpZ25lZCByb3csIHVuc2lnbmVkIGNvbHVt
bikgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIGlm
ICghbV9heE9iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBhdXRvKiBjZWxsID0gbV9h
eE9iamVjdC0+Y2VsbEZvckNvbHVtbkFuZFJvdyhjb2x1bW4sIHJvdyk7CisgICAgcmV0dXJuIGNl
bGwgPyBjZWxsLT5jb2x1bW5JbmRleFJhbmdlKCkuc2Vjb25kIDogMDsKK30KKworVmVjdG9yPFJl
ZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+PiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6
OmNlbGxzKCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgaWYgKCFtX2NvcmVPYmplY3QpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4g
d3JhcHBlclZlY3RvcihtX2NvcmVPYmplY3QtPmNlbGxzKCkpOworfQorCitWZWN0b3I8UmVmUHRy
PEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4+IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6cm93
cygpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlm
ICghbV9jb3JlT2JqZWN0KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHdyYXBw
ZXJWZWN0b3IobV9jb3JlT2JqZWN0LT5yb3dzKCkpOworfQorCitWZWN0b3I8UmVmUHRyPEFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaT4+IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6cm93SGVhZGVy
cygpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlm
ICghbV9jb3JlT2JqZWN0KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHdyYXBw
ZXJWZWN0b3IobV9jb3JlT2JqZWN0LT5yb3dIZWFkZXJzKCkpOworfQorCitWZWN0b3I8UmVmUHRy
PEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4+IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y29s
dW1uSGVhZGVycygpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIGlmICghbV9jb3JlT2JqZWN0KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0
dXJuIHdyYXBwZXJWZWN0b3IobV9jb3JlT2JqZWN0LT5jb2x1bW5IZWFkZXJzKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQUNDRVNTSUJJTElUWSkg
JiYgVVNFKEFUU1BJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGFibGVDZWxsQXRzcGkuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGFibGVDZWxsQXRzcGku
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTEyNDc1M2IzMDA3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0VGFibGVDZWxsQXRzcGkuY3BwCkBAIC0wLDAgKzEsMTc0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuaCIKKworI2lmIEVOQUJMRShBQ0NF
U1NJQklMSVRZKSAmJiBVU0UoQVRTUEkpCisKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5QXRzcGlF
bnVtcy5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlSb290QXRzcGkuaCIKKyNpbmNsdWRlIDxn
aW8vZ2lvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR0RCdXNJbnRlcmZhY2VWVGFibGUg
QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzX3RhYmxlQ2VsbEZ1bmN0aW9ucyA9IHsKKyAgICAv
LyBtZXRob2RfY2FsbAorICAgIFtdKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGdjaGFyKiwgY29u
c3QgZ2NoYXIqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiBtZXRob2ROYW1lLCBHVmFyaWFu
dCosIEdEQnVzTWV0aG9kSW52b2NhdGlvbiogaW52b2NhdGlvbiwgZ3BvaW50ZXIgdXNlckRhdGEp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgYXV0
byBhdHNwaU9iamVjdCA9IFJlZiB7ICpzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGkqPih1c2VyRGF0YSkgfTsKKyAgICAgICAgYXRzcGlPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9y
ZSgpOworCisgICAgICAgIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRSb3dIZWFkZXJD
ZWxscyIpKSB7CisgICAgICAgICAgICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlciA9IEdfVkFSSUFO
VF9CVUlMREVSX0lOSVQoR19WQVJJQU5UX1RZUEUoImEoc28pIikpOworICAgICAgICAgICAgZm9y
IChjb25zdCBhdXRvJiB3cmFwcGVyIDogYXRzcGlPYmplY3QtPmNlbGxSb3dIZWFkZXJzKCkpCisg
ICAgICAgICAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAiQChzbykiLCB3
cmFwcGVyLT5yZWZlcmVuY2UoKSk7CisgICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRp
b25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihhKHNvKSkiLCAmYnVp
bGRlcikpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdldENv
bHVtbkhlYWRlckNlbGxzIikpIHsKKyAgICAgICAgICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVy
ID0gR19WQVJJQU5UX0JVSUxERVJfSU5JVChHX1ZBUklBTlRfVFlQRSgiYShzbykiKSk7CisgICAg
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHdyYXBwZXIgOiBhdHNwaU9iamVjdC0+Y2VsbENvbHVt
bkhlYWRlcnMoKSkKKyAgICAgICAgICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxk
ZXIsICJAKHNvKSIsIHdyYXBwZXItPnJlZmVyZW5jZSgpKTsKKyAgICAgICAgICAgIGdfZGJ1c19t
ZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50X25ldygi
KGEoc28pKSIsICZidWlsZGVyKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChtZXRo
b2ROYW1lLCAiR2V0Um93Q29sdW1uU3BhbiIpKSB7CisgICAgICAgICAgICBhdXRvIHBvc2l0aW9u
ID0gYXRzcGlPYmplY3QtPmNlbGxQb3NpdGlvbigpOworICAgICAgICAgICAgZ19kYnVzX21ldGhv
ZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoaWlp
aSkiLCBwb3NpdGlvbi5maXJzdC52YWx1ZV9vcigtMSksIHBvc2l0aW9uLnNlY29uZC52YWx1ZV9v
cigtMSksIGF0c3BpT2JqZWN0LT5yb3dTcGFuKCksIGF0c3BpT2JqZWN0LT5jb2x1bW5TcGFuKCkp
KTsKKyAgICAgICAgfQorICAgIH0sCisgICAgLy8gZ2V0X3Byb3BlcnR5CisgICAgW10oR0RCdXND
b25uZWN0aW9uKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29u
c3QgZ2NoYXIqIHByb3BlcnR5TmFtZSwgR0Vycm9yKiogZXJyb3IsIGdwb2ludGVyIHVzZXJEYXRh
KSAtPiBHVmFyaWFudCogeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkp
OworICAgICAgICBhdXRvIGF0c3BpT2JqZWN0ID0gUmVmIHsgKnN0YXRpY19jYXN0PEFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaSo+KHVzZXJEYXRhKSB9OworICAgICAgICBhdHNwaU9iamVjdC0+dXBk
YXRlQmFja2luZ1N0b3JlKCk7CisKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAocHJvcGVydHlOYW1l
LCAiQ29sdW1uU3BhbiIpKQorICAgICAgICAgICAgcmV0dXJuIGdfdmFyaWFudF9uZXdfaW50MzIo
YXRzcGlPYmplY3QtPmNvbHVtblNwYW4oKSk7CisgICAgICAgIGlmICghZ19zdHJjbXAwKHByb3Bl
cnR5TmFtZSwgIlBvc2l0aW9uIikpIHsKKyAgICAgICAgICAgIGF1dG8gcG9zaXRpb24gPSBhdHNw
aU9iamVjdC0+Y2VsbFBvc2l0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gZ192YXJpYW50X25l
dygiKGlpKSIsIHBvc2l0aW9uLmZpcnN0LnZhbHVlX29yKC0xKSwgcG9zaXRpb24uc2Vjb25kLnZh
bHVlX29yKC0xKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFnX3N0cmNtcDAocHJvcGVydHlO
YW1lLCAiUm93U3BhbiIpKQorICAgICAgICAgICAgcmV0dXJuIGdfdmFyaWFudF9uZXdfaW50MzIo
YXRzcGlPYmplY3QtPnJvd1NwYW4oKSk7CisgICAgICAgIGlmICghZ19zdHJjbXAwKHByb3BlcnR5
TmFtZSwgIlRhYmxlIikpIHsKKyAgICAgICAgICAgIGF1dG8qIGF4T2JqZWN0ID0gYXRzcGlPYmpl
Y3QtPm1fYXhPYmplY3Q7CisgICAgICAgICAgICBpZiAoIWF4T2JqZWN0IHx8ICFheE9iamVjdC0+
aXNUYWJsZUNlbGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYXRzcGlPYmplY3QtPnJvb3Qo
KS0+YXRzcGkoKS5udWxsUmVmZXJlbmNlKCk7CisKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaSogd3JhcHBlciA9IGF0c3BpT2JqZWN0LnB0cigpOworICAgICAgICAgICAgd2hp
bGUgKGF1dG8gcGFyZW50ID0gd3JhcHBlci0+cGFyZW50KCkpIHsKKyAgICAgICAgICAgICAgICB3
cmFwcGVyID0gcGFyZW50LnZhbHVlKCk7CisgICAgICAgICAgICAgICAgaWYgKCF3cmFwcGVyKQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIHdyYXBwZXItPnVw
ZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgICAgICAgICAgICAgIGF4T2JqZWN0ID0gd3JhcHBlci0+
bV9heE9iamVjdDsKKyAgICAgICAgICAgICAgICBpZiAoYXhPYmplY3QgJiYgYXhPYmplY3QtPmlz
VGFibGUoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gd3JhcHBlciA/IHdyYXBwZXItPnJlZmVyZW5jZSgpIDogYXRzcGlPYmpl
Y3QtPnJvb3QoKS0+YXRzcGkoKS5udWxsUmVmZXJlbmNlKCk7CisgICAgICAgIH0KKworICAgICAg
ICBnX3NldF9lcnJvcihlcnJvciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9OT1RfU1VQUE9SVEVE
LCAiVW5rbm93biBwcm9wZXJ0eSAnJXMnIiwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfSwKKyAgICAvLyBzZXRfcHJvcGVydHksCisgICAgbnVsbHB0ciwKKyAg
ICAvLyBwYWRkaW5nCisgICAgbnVsbHB0cgorfTsKKworVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGk+PiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNlbGxSb3dIZWFkZXJz
KCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIGlm
ICghbV9heE9iamVjdCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIC8vIE9ubHkgcmV0dXJu
IGhlYWRlcnMgZm9yIGNlbGxzIHRoYXQgYXJlIG5vdCBoZWFkZXJzLgorICAgIGlmIChyb2xlKCkg
IT0gQXRzcGk6OlJvbGU6OlRhYmxlQ2VsbCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1
dG8gaGVhZGVycyA9IG1fYXhPYmplY3QtPnJvd0hlYWRlcnMoKTsKKyAgICBWZWN0b3I8UmVmUHRy
PEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4+IHdyYXBwZXJzOworICAgIHdyYXBwZXJzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoaGVhZGVycy5zaXplKCkpOworICAgIGF1dG8qIHJvb3QgPSB0aGlz
LT5yb290KCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBoZWFkZXJzKSB7CisgICAg
ICAgIGlmIChhdXRvKiB3cmFwcGVyID0gaGVhZGVyLT53cmFwcGVyKCkpIHsKKyAgICAgICAgICAg
IHdyYXBwZXItPnNldFJvb3Qocm9vdCk7CisgICAgICAgICAgICB3cmFwcGVycy51bmNoZWNrZWRB
cHBlbmQod3JhcHBlcik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHdyYXBwZXJzOwor
fQorCitWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4+IEFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaTo6Y2VsbENvbHVtbkhlYWRlcnMoKSBjb25zdAoreworICAgIFJFTEVBU0Vf
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2F4T2JqZWN0KQorICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgLy8gT25seSByZXR1cm4gaGVhZGVycyBmb3IgY2VsbHMgdGhhdCBh
cmUgbm90IGhlYWRlcnMuCisgICAgaWYgKHJvbGUoKSAhPSBBdHNwaTo6Um9sZTo6VGFibGVDZWxs
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBoZWFkZXJzID0gbV9heE9iamVjdC0+
Y29sdW1uSGVhZGVycygpOworICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpPj4gd3JhcHBlcnM7CisgICAgd3JhcHBlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShoZWFk
ZXJzLnNpemUoKSk7CisgICAgYXV0byogcm9vdCA9IHRoaXMtPnJvb3QoKTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGhlYWRlciA6IGhlYWRlcnMpIHsKKyAgICAgICAgaWYgKGF1dG8qIHdyYXBwZXIg
PSBoZWFkZXItPndyYXBwZXIoKSkgeworICAgICAgICAgICAgd3JhcHBlci0+c2V0Um9vdChyb290
KTsKKyAgICAgICAgICAgIHdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZCh3cmFwcGVyKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gd3JhcHBlcnM7Cit9CisKK3Vuc2lnbmVkIEFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6cm93U3BhbigpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fYXhPYmplY3QpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIG1fYXhPYmplY3QtPnJvd0luZGV4UmFuZ2UoKS5zZWNvbmQ7Cit9CisK
K3Vuc2lnbmVkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y29sdW1uU3BhbigpIGNvbnN0Cit7
CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fYXhPYmpl
Y3QpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fYXhPYmplY3QtPmNvbHVtbklu
ZGV4UmFuZ2UoKS5zZWNvbmQ7Cit9CisKK3N0ZDo6cGFpcjxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
Piwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y2Vs
bFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkp
OworICAgIHN0ZDo6cGFpcjxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiwgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4+IHBvc2l0aW9uOworICAgIGlmICghbV9heE9iamVjdCkKKyAgICAgICAgcmV0dXJu
IHBvc2l0aW9uOworCisgICAgcG9zaXRpb24uZmlyc3QgPSBtX2F4T2JqZWN0LT5yb3dJbmRleFJh
bmdlKCkuZmlyc3Q7CisgICAgcG9zaXRpb24uc2Vjb25kID0gbV9heE9iamVjdC0+Y29sdW1uSW5k
ZXhSYW5nZSgpLmZpcnN0OworCisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFU
U1BJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS94bWwv
VGFibGVDZWxsLnhtbCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkveG1sL1Rh
YmxlQ2VsbC54bWwKaW5kZXggMmI2NDdhNmQyY2ZkLi5iNWUwZDgzYTVmMmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkveG1sL1RhYmxlQ2VsbC54bWwKKysr
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS94bWwvVGFibGVDZWxsLnhtbApA
QCAtMTQsOCArMTQsMTcgQEAKICAgICA8YW5ub3RhdGlvbiBuYW1lPSJvcmcucXRwcm9qZWN0LlF0
REJ1cy5RdFR5cGVOYW1lIiB2YWx1ZT0iUVNwaU9iamVjdFJlZmVyZW5jZSIvPgogICA8L3Byb3Bl
cnR5PgogCisgIDxtZXRob2QgbmFtZT0iR2V0Um93SGVhZGVyQ2VsbHMiPgorICAgIDxhcmcgZGly
ZWN0aW9uPSJvdXQiIHR5cGU9ImEoc28pIi8+CisgICAgPGFubm90YXRpb24gbmFtZT0ib3JnLnF0
cHJvamVjdC5RdERCdXMuUXRUeXBlTmFtZS5PdXQwIiB2YWx1ZT0iUVNwaU9iamVjdFJlZmVyZW5j
ZUFycmF5Ii8+CisgIDwvbWV0aG9kPgorCisgIDxtZXRob2QgbmFtZT0iR2V0Q29sdW1uSGVhZGVy
Q2VsbHMiPgorICAgIDxhcmcgZGlyZWN0aW9uPSJvdXQiIHR5cGU9ImEoc28pIi8+CisgICAgPGFu
bm90YXRpb24gbmFtZT0ib3JnLnF0cHJvamVjdC5RdERCdXMuUXRUeXBlTmFtZS5PdXQwIiB2YWx1
ZT0iUVNwaU9iamVjdFJlZmVyZW5jZUFycmF5Ii8+CisgIDwvbWV0aG9kPgorCiAgIDxtZXRob2Qg
bmFtZT0iR2V0Um93Q29sdW1uU3BhbiI+Ci0gICAgPGFyZyBkaXJlY3Rpb249Im91dCIgdHlwZT0i
YiIgLz4KICAgICA8YXJnIGRpcmVjdGlvbj0ib3V0IiBuYW1lPSJyb3ciIHR5cGU9ImkiIC8+CiAg
ICAgPGFyZyBkaXJlY3Rpb249Im91dCIgbmFtZT0iY29sIiB0eXBlPSJpIiAvPgogICAgIDxhcmcg
ZGlyZWN0aW9uPSJvdXQiIG5hbWU9InJvd19leHRlbnRzIiB0eXBlPSJpIiAvPgpkaWZmIC0tZ2l0
IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGU2NGFmMjQ5OWJiYi4u
NDJlN2YzMjZmYzgxIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMjEtMTItMDEgIENhcmxvcyBHYXJjaWEgQ2FtcG9z
ICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW2ExMXldIEFkZCBpbXBsZW1l
bnRhdGlvbiBvZiB0YWJsZSBhbmQgdGFibGUgY2VsbCBpbnRlcmZhY2VzIHdoZW4gYnVpbGRpbmcg
d2l0aCBBVFNQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjMzNjk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHVuaXQgdGVzdHMgYW5kIFdUUiBpbXBsZW1lbnRhdGlvbiBmb3IgdGFibGVzLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktpdEFjY2Vzc2li
aWxpdHkuY3BwOgorICAgICAgICAodGVzdFRhYmxlQmFzaWMpOgorICAgICAgICAoYmVmb3JlQWxs
KToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0c3BpL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRBdHNwaS5jcHA6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnJvd0F0SW5kZXgpOgorICAgICAgICAoV1RSOjplbGVtZW50c1ZlY3Rvcik6Cisg
ICAgICAgIChXVFI6OmF0dHJpYnV0ZXNPZkVsZW1lbnRzKToKKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4pOgorICAgICAgICAoV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpudW1iZXJBdHRyaWJ1dGVWYWx1ZSk6CisgICAgICAgIChX
VFI6Om1ha2VKU0FycmF5KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
cm93SGVhZGVycyBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmNvbHVtbkhlYWRlcnMgY29uc3QpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycyk6CisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd3MpOgorICAgICAgICAoV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHMpOgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dDb3VudCk6CisgICAgICAgIChXVFI6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkNvdW50KToKKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93SW5kZXhSYW5nZSk6CisgICAgICAgIChXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkluZGV4UmFuZ2UpOgorICAgICAgICAoV1RSOjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93KToKKwogMjAyMS0xMS0yNyAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dU
S11bYTExeV0gU2lnbmFsIHN0YXRlLWNoYW5nZWQ6c2VsZWN0ZWQgaXMgbm90IGVtaXR0ZWQgZm9y
IGxpc3Rib3ggZWxlbWVudHMgd2hlbiBidWlsZGluZyB3aXRoIEFUU1BJCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0
eS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0V2ViS2l0QWNj
ZXNzaWJpbGl0eS5jcHAKaW5kZXggMjQ2NzFhZWEwMmQ1Li45OTNlZmMzMjM1NWMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL1Rlc3RXZWJLaXRBY2Nlc3Np
YmlsaXR5LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0
V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHAKQEAgLTIzMzIsNiArMjMzMiw0MTQgQEAgc3RhdGljIHZv
aWQgdGVzdFNlbGVjdGlvbk1lbnVMaXN0KEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQogI2VuZGlmCiB9CiAKK3N0YXRpYyB2b2lkIHRlc3RUYWJsZUJhc2ljKEFjY2Vzc2li
aWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRv
dyg4MDAsIDYwMCk7CisgICAgdGVzdC0+bG9hZEh0bWwoCisgICAgICAgICI8aHRtbD4iCisgICAg
ICAgICIgIDxib2R5PiIKKyAgICAgICAgIiAgICA8dGFibGU+IgorICAgICAgICAiICAgICAgPGNh
cHRpb24+VGFibGUgQ2FwdGlvbjwvY2FwdGlvbj4iCisgICAgICAgICIgICAgICA8dHI+PHRoPkNv
bHVtbiAxPC90aD48dGg+Q29sdW1uIDI8L3RoPjx0aD5Db2x1bW4gMzwvdGg+PC90cj4iCisgICAg
ICAgICIgICAgICA8dHI+PHRoIHJvd3NwYW49JzInPlJvdyAxIENlbGwgMTwvdGg+PHRkPlJvdyAx
IENlbGwgMjwvdGQ+PHRkPlJvdyAxIENlbGwgMzwvdGQ+PC90cj4iCisgICAgICAgICIgICAgICA8
dHI+PHRkPlJvdyAyIENlbGwgMjwvdGQ+PHRkPlJvdyAyIENlbGwgMzwvdGQ+PC90cj4iCisgICAg
ICAgICIgICAgICA8dHI+PHRkIGNvbHNwYW49JzMnPlJvdyAzIENlbGwgMTwvdGQ+PC90cj4iCisg
ICAgICAgICIgICAgPC90YWJsZT4iCisgICAgICAgICIgIDwvYm9keT4iCisgICAgICAgICI8L2h0
bWw+IiwKKyAgICAgICAgbnVsbHB0cik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CisKKyAgICBhdXRvIHRlc3RBcHAgPSB0ZXN0LT5maW5kVGVzdEFwcGxpY2F0aW9uKCk7Cisg
ICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKHRlc3RBcHAuZ2V0KCkpKTsKKwor
ICAgIGF1dG8gZG9jdW1lbnRXZWIgPSB0ZXN0LT5maW5kRG9jdW1lbnRXZWIodGVzdEFwcC5nZXQo
KSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKGRvY3VtZW50V2ViLmdl
dCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2Nv
dW50KGRvY3VtZW50V2ViLmdldCgpLCBudWxscHRyKSwgPT0sIDEpOworCisgICAgYXV0byB0YWJs
ZSA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkb2N1bWVu
dFdlYi5nZXQoKSwgMCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfVEFC
TEUodGFibGUuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfYWNjZXNzaWJsZV9n
ZXRfcm9sZSh0YWJsZS5nZXQoKSwgbnVsbHB0ciksID09LCBBVFNQSV9ST0xFX1RBQkxFKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfY291bnQodGFibGUu
Z2V0KCksIG51bGxwdHIpLCA9PSwgNSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX3RhYmxl
X2dldF9uX3Jvd3MoQVRTUElfVEFCTEUodGFibGUuZ2V0KCkpLCBudWxscHRyKSwgPT0sIDQpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV90YWJsZV9nZXRfbl9jb2x1bW5zKEFUU1BJX1RBQkxF
KHRhYmxlLmdldCgpKSwgbnVsbHB0ciksID09LCAzKTsKKworICAgIGF1dG8gY2FwdGlvbiA9IGFk
b3B0R1JlZihhdHNwaV90YWJsZV9nZXRfY2FwdGlvbihBVFNQSV9UQUJMRSh0YWJsZS5nZXQoKSks
IG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoY2FwdGlv
bi5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9hY2Nlc3NpYmxlX2dldF9yb2xl
KGNhcHRpb24uZ2V0KCksIG51bGxwdHIpLCA9PSwgQVRTUElfUk9MRV9DQVBUSU9OKTsKKyAgICBn
X2Fzc2VydF90cnVlKEFUU1BJX0lTX1RFWFQoY2FwdGlvbi5nZXQoKSkpOworICAgIEdVbmlxdWVQ
dHI8Y2hhcj4gdGV4dChhdHNwaV90ZXh0X2dldF90ZXh0KEFUU1BJX1RFWFQoY2FwdGlvbi5nZXQo
KSksIDAsIC0xLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQuZ2V0KCksID09
LCAiVGFibGUgQ2FwdGlvbiIpOworCisgICAgdGV4dC5yZXNldChhdHNwaV90YWJsZV9nZXRfcm93
X2Rlc2NyaXB0aW9uKEFUU1BJX1RBQkxFKHRhYmxlLmdldCgpKSwgMCwgbnVsbHB0cikpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih0ZXh0LmdldCgpLCA9PSwgIiIpOworICAgIGdfYXNzZXJ0X251bGwo
YXRzcGlfdGFibGVfZ2V0X3Jvd19oZWFkZXIoQVRTUElfVEFCTEUodGFibGUuZ2V0KCkpLCAwLCBu
dWxscHRyKSk7CisgICAgdGV4dC5yZXNldChhdHNwaV90YWJsZV9nZXRfcm93X2Rlc2NyaXB0aW9u
KEFUU1BJX1RBQkxFKHRhYmxlLmdldCgpKSwgMSwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih0ZXh0LmdldCgpLCA9PSwgIlJvdyAxIENlbGwgMSIpOworICAgIGF1dG8gcm93SGVhZGVy
ID0gYWRvcHRHUmVmKGF0c3BpX3RhYmxlX2dldF9yb3dfaGVhZGVyKEFUU1BJX1RBQkxFKHRhYmxl
LmdldCgpKSwgMSwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNT
SUJMRShyb3dIZWFkZXIuZ2V0KCkpKTsKKyAgICB0ZXh0LnJlc2V0KGF0c3BpX3RhYmxlX2dldF9y
b3dfZGVzY3JpcHRpb24oQVRTUElfVEFCTEUodGFibGUuZ2V0KCkpLCAyLCBudWxscHRyKSk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHRleHQuZ2V0KCksID09LCAiUm93IDEgQ2VsbCAxIik7CisgICAg
YXV0byBoZWFkZXIgPSBhZG9wdEdSZWYoYXRzcGlfdGFibGVfZ2V0X3Jvd19oZWFkZXIoQVRTUElf
VEFCTEUodGFibGUuZ2V0KCkpLCAyLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShyb3dI
ZWFkZXIuZ2V0KCkgPT0gaGVhZGVyLmdldCgpKTsKKyAgICB0ZXh0LnJlc2V0KGF0c3BpX3RhYmxl
X2dldF9yb3dfZGVzY3JpcHRpb24oQVRTUElfVEFCTEUodGFibGUuZ2V0KCkpLCAzLCBudWxscHRy
KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQuZ2V0KCksID09LCAiIik7CisgICAgZ19hc3Nl
cnRfbnVsbChhdHNwaV90YWJsZV9nZXRfcm93X2hlYWRlcihBVFNQSV9UQUJMRSh0YWJsZS5nZXQo
KSksIDMsIG51bGxwdHIpKTsKKworICAgIHRleHQucmVzZXQoYXRzcGlfdGFibGVfZ2V0X2NvbHVt
bl9kZXNjcmlwdGlvbihBVFNQSV9UQUJMRSh0YWJsZS5nZXQoKSksIDAsIG51bGxwdHIpKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIodGV4dC5nZXQoKSwgPT0sICJDb2x1bW4gMSIpOworICAgIGF1dG8g
Y29sdW1uSGVhZGVyMCA9IGFkb3B0R1JlZihhdHNwaV90YWJsZV9nZXRfY29sdW1uX2hlYWRlcihB
VFNQSV9UQUJMRSh0YWJsZS5nZXQoKSksIDAsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVl
KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY29sdW1uSGVhZGVyMC5nZXQoKSkpOworICAgIHRleHQucmVz
ZXQoYXRzcGlfdGFibGVfZ2V0X2NvbHVtbl9kZXNjcmlwdGlvbihBVFNQSV9UQUJMRSh0YWJsZS5n
ZXQoKSksIDEsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dC5nZXQoKSwgPT0s
ICJDb2x1bW4gMiIpOworICAgIGF1dG8gY29sdW1uSGVhZGVyMSA9IGFkb3B0R1JlZihhdHNwaV90
YWJsZV9nZXRfY29sdW1uX2hlYWRlcihBVFNQSV9UQUJMRSh0YWJsZS5nZXQoKSksIDEsIG51bGxw
dHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoY29sdW1uSGVhZGVy
MS5nZXQoKSkpOworICAgIHRleHQucmVzZXQoYXRzcGlfdGFibGVfZ2V0X2NvbHVtbl9kZXNjcmlw
dGlvbihBVFNQSV9UQUJMRSh0YWJsZS5nZXQoKSksIDIsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIodGV4dC5nZXQoKSwgPT0sICJDb2x1bW4gMyIpOworICAgIGF1dG8gY29sdW1uSGVh
ZGVyMiA9IGFkb3B0R1JlZihhdHNwaV90YWJsZV9nZXRfY29sdW1uX2hlYWRlcihBVFNQSV9UQUJM
RSh0YWJsZS5nZXQoKSksIDIsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lT
X0FDQ0VTU0lCTEUoY29sdW1uSGVhZGVyMi5nZXQoKSkpOworCisgICAgZ19hc3NlcnRfY21waW50
KGF0c3BpX3RhYmxlX2dldF9pbmRleF9hdChBVFNQSV9UQUJMRSh0YWJsZS5nZXQoKSksIDAsIDAs
IG51bGxwdHIpLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX3RhYmxlX2dldF9y
b3dfYXRfaW5kZXgoQVRTUElfVEFCTEUodGFibGUuZ2V0KCkpLCAwLCBudWxscHRyKSwgPT0sIDAp
OworICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV90YWJsZV9nZXRfY29sdW1uX2F0X2luZGV4KEFU
U1BJX1RBQkxFKHRhYmxlLmdldCgpKSwgMCwgbnVsbHB0ciksID09LCAwKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoYXRzcGlfdGFibGVfZ2V0X3Jvd19leHRlbnRfYXQoQVRTUElfVEFCTEUodGFibGUu
Z2V0KCkpLCAwLCAwLCBudWxscHRyKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChhdHNw
aV90YWJsZV9nZXRfY29sdW1uX2V4dGVudF9hdChBVFNQSV9UQUJMRSh0YWJsZS5nZXQoKSksIDAs
IDAsIG51bGxwdHIpLCA9PSwgMSk7CisgICAgaW50IHJvdywgY29sdW1uLCByb3dTcGFuLCBjb2x1
bW5TcGFuOworICAgIGdib29sZWFuIGlzU2VsZWN0ZWQ7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNw
aV90YWJsZV9nZXRfcm93X2NvbHVtbl9leHRlbnRzX2F0X2luZGV4KEFUU1BJX1RBQkxFKHRhYmxl
LmdldCgpKSwgMCwgJnJvdywgJmNvbHVtbiwgJnJvd1NwYW4sICZjb2x1bW5TcGFuLCAmaXNTZWxl
Y3RlZCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcGludChyb3csID09LCAwKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoY29sdW1uLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KHJvd1Nw
YW4sID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoY29sdW1uU3BhbiwgPT0sIDEpOworICAg
IGdfYXNzZXJ0X2ZhbHNlKGlzU2VsZWN0ZWQpOworICAgIGF1dG8gY2VsbDAgPSBhZG9wdEdSZWYo
YXRzcGlfdGFibGVfZ2V0X2FjY2Vzc2libGVfYXQoQVRTUElfVEFCTEUodGFibGUuZ2V0KCkpLCAw
LCAwLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19UQUJMRV9DRUxMKGNl
bGwwLmdldCgpKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShjZWxsMC5nZXQoKSA9PSBjb2x1bW5IZWFk
ZXIwLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfdGFibGVfY2VsbF9nZXRfcm93
X3NwYW4oQVRTUElfVEFCTEVfQ0VMTChjZWxsMC5nZXQoKSksIG51bGxwdHIpLCA9PSwgMSk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGF0c3BpX3RhYmxlX2NlbGxfZ2V0X2NvbHVtbl9zcGFuKEFUU1BJ
X1RBQkxFX0NFTEwoY2VsbDAuZ2V0KCkpLCBudWxscHRyKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0
X3RydWUoYXRzcGlfdGFibGVfY2VsbF9nZXRfcG9zaXRpb24oQVRTUElfVEFCTEVfQ0VMTChjZWxs
MC5nZXQoKSksICZyb3csICZjb2x1bW4sIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
cm93LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGNvbHVtbiwgPT0sIDApOworICAgIGF0
c3BpX3RhYmxlX2NlbGxfZ2V0X3Jvd19jb2x1bW5fc3BhbihBVFNQSV9UQUJMRV9DRUxMKGNlbGww
LmdldCgpKSwgJnJvdywgJmNvbHVtbiwgJnJvd1NwYW4sICZjb2x1bW5TcGFuLCBudWxscHRyKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQocm93LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGNv
bHVtbiwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChyb3dTcGFuLCA9PSwgMSk7CisgICAg
Z19hc3NlcnRfY21waW50KGNvbHVtblNwYW4sID09LCAxKTsKKyAgICBhdXRvIGNlbGxUYWJsZSA9
IGFkb3B0R1JlZihhdHNwaV90YWJsZV9jZWxsX2dldF90YWJsZShBVFNQSV9UQUJMRV9DRUxMKGNl
bGwwLmdldCgpKSwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUodGFibGUuZ2V0KCkgPT0g
Y2VsbFRhYmxlLmdldCgpKTsKKyAgICBHUmVmUHRyPEdQdHJBcnJheT4gcm93SGVhZGVycyA9IGFk
b3B0R1JlZihhdHNwaV90YWJsZV9jZWxsX2dldF9yb3dfaGVhZGVyX2NlbGxzKEFUU1BJX1RBQkxF
X0NFTEwoY2VsbDAuZ2V0KCkpLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21waW50KHJvd0hl
YWRlcnMtPmxlbiwgPT0sIDApOworICAgIEdSZWZQdHI8R1B0ckFycmF5PiBjb2x1bW5IZWFkZXJz
ID0gYWRvcHRHUmVmKGF0c3BpX3RhYmxlX2NlbGxfZ2V0X2NvbHVtbl9oZWFkZXJfY2VsbHMoQVRT
UElfVEFCTEVfQ0VMTChjZWxsMC5nZXQoKSksIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoY29sdW1uSGVhZGVycy0+bGVuLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9J
U19URVhUKGNlbGwwLmdldCgpKSk7CisgICAgdGV4dC5yZXNldChhdHNwaV90ZXh0X2dldF90ZXh0
KEFUU1BJX1RFWFQoY2VsbDAuZ2V0KCkpLCAwLCAtMSwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih0ZXh0LmdldCgpLCA9PSwgIkNvbHVtbiAxIik7CisKKyAgICBnX2Fzc2VydF9jbXBp
bnQoYXRzcGlfdGFibGVfZ2V0X2luZGV4X2F0KEFUU1BJX1RBQkxFKHRhYmxlLmdldCgpKSwgMCwg
MSwgbnVsbHB0ciksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfdGFibGVfZ2V0
X3Jvd19hdF9pbmRleChBVFNQSV9UQUJMRSh0YWJsZS5nZXQoKSksIDEsIG51bGxwdHIpLCA9PSwg
MCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX3RhYmxlX2dldF9jb2x1bW5fYXRfaW5kZXgo
QVRTUElfVEFCTEUodGFibGUuZ2V0KCkpLCAxLCBudWxscHRyKSwgPT0sIDEpOworICAgIGdfYXNz
ZXJ0X2NtcGludChhdHNwaV90YWJsZV9nZXRfcm93X2V4dGVudF9hdChBVFNQSV9UQUJMRSh0YWJs
ZS5nZXQoKSksIDAsIDEsIG51bGxwdHIpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0
c3BpX3RhYmxlX2dldF9jb2x1bW5fZXh0ZW50X2F0KEFUU1BJX1RBQkxFKHRhYmxlLmdldCgpKSwg
MCwgMSwgbnVsbHB0ciksID09LCAxKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3RhYmxlX2dl
dF9yb3dfY29sdW1uX2V4dGVudHNfYXRfaW5kZXgoQVRTUElfVEFCTEUodGFibGUuZ2V0KCkpLCAx
LCAmcm93LCAmY29sdW1uLCAmcm93U3BhbiwgJmNvbHVtblNwYW4sICZpc1NlbGVjdGVkLCBudWxs
cHRyKSk7CisgICAgZ19hc3NlcnRfY21waW50KHJvdywgPT0sIDApOworICAgIGdfYXNzZXJ0X2Nt
cGludChjb2x1bW4sID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocm93U3BhbiwgPT0sIDEp
OworICAgIGdfYXNzZXJ0X2NtcGludChjb2x1bW5TcGFuLCA9PSwgMSk7CisgICAgZ19hc3NlcnRf
ZmFsc2UoaXNTZWxlY3RlZCk7CisgICAgYXV0byBjZWxsMSA9IGFkb3B0R1JlZihhdHNwaV90YWJs
ZV9nZXRfYWNjZXNzaWJsZV9hdChBVFNQSV9UQUJMRSh0YWJsZS5nZXQoKSksIDAsIDEsIG51bGxw
dHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX1RBQkxFX0NFTEwoY2VsbDEuZ2V0KCkp
KTsKKyAgICBnX2Fzc2VydF90cnVlKGNlbGwxLmdldCgpID09IGNvbHVtbkhlYWRlcjEuZ2V0KCkp
OworICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV90YWJsZV9jZWxsX2dldF9yb3dfc3BhbihBVFNQ
SV9UQUJMRV9DRUxMKGNlbGwxLmdldCgpKSwgbnVsbHB0ciksID09LCAxKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoYXRzcGlfdGFibGVfY2VsbF9nZXRfY29sdW1uX3NwYW4oQVRTUElfVEFCTEVfQ0VM
TChjZWxsMS5nZXQoKSksIG51bGxwdHIpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNw
aV90YWJsZV9jZWxsX2dldF9wb3NpdGlvbihBVFNQSV9UQUJMRV9DRUxMKGNlbGwxLmdldCgpKSwg
JnJvdywgJmNvbHVtbiwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcGludChyb3csID09LCAw
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoY29sdW1uLCA9PSwgMSk7CisgICAgYXRzcGlfdGFibGVf
Y2VsbF9nZXRfcm93X2NvbHVtbl9zcGFuKEFUU1BJX1RBQkxFX0NFTEwoY2VsbDEuZ2V0KCkpLCAm
cm93LCAmY29sdW1uLCAmcm93U3BhbiwgJmNvbHVtblNwYW4sIG51bGxwdHIpOworICAgIGdfYXNz
ZXJ0X2NtcGludChyb3csID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoY29sdW1uLCA9PSwg
MSk7CisgICAgZ19hc3NlcnRfY21waW50KHJvd1NwYW4sID09LCAxKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoY29sdW1uU3BhbiwgPT0sIDEpOworICAgIGNlbGxUYWJsZSA9IGFkb3B0R1JlZihhdHNw
aV90YWJsZV9jZWxsX2dldF90YWJsZShBVFNQSV9UQUJMRV9DRUxMKGNlbGwxLmdldCgpKSwgbnVs
bHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUodGFibGUuZ2V0KCkgPT0gY2VsbFRhYmxlLmdldCgp
KTsKKyAgICByb3dIZWFkZXJzID0gYWRvcHRHUmVmKGF0c3BpX3RhYmxlX2NlbGxfZ2V0X3Jvd19o
ZWFkZXJfY2VsbHMoQVRTUElfVEFCTEVfQ0VMTChjZWxsMS5nZXQoKSksIG51bGxwdHIpKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQocm93SGVhZGVycy0+bGVuLCA9PSwgMCk7CisgICAgY29sdW1uSGVh
ZGVycyA9IGFkb3B0R1JlZihhdHNwaV90YWJsZV9jZWxsX2dldF9jb2x1bW5faGVhZGVyX2NlbGxz
KEFUU1BJX1RBQkxFX0NFTEwoY2VsbDEuZ2V0KCkpLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRf
Y21waW50KGNvbHVtbkhlYWRlcnMtPmxlbiwgPT0sIDApOworICAgIGdfYXNzZXJ0X3RydWUoQVRT
UElfSVNfVEVYVChjZWxsMS5nZXQoKSkpOworICAgIHRleHQucmVzZXQoYXRzcGlfdGV4dF9nZXRf
dGV4dChBVFNQSV9URVhUKGNlbGwxLmdldCgpKSwgMCwgLTEsIG51bGxwdHIpKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIodGV4dC5nZXQoKSwgPT0sICJDb2x1bW4gMiIpOworCisgICAgZ19hc3NlcnRf
Y21waW50KGF0c3BpX3RhYmxlX2dldF9pbmRleF9hdChBVFNQSV9UQUJMRSh0YWJsZS5nZXQoKSks
IDAsIDIsIG51bGxwdHIpLCA9PSwgMik7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX3RhYmxl
X2dldF9yb3dfYXRfaW5kZXgoQVRTUElfVEFCTEUodGFibGUuZ2V0KCkpLCAyLCBudWxscHRyKSwg
PT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV90YWJsZV9nZXRfY29sdW1uX2F0X2lu
ZGV4KEFUU1BJX1RBQkxFKHRhYmxlLmdldCgpKSwgMiwgbnVsbHB0ciksID09LCAyKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoYXRzcGlfdGFibGVfZ2V0X3Jvd19leHRlbnRfYXQoQVRTUElfVEFCTEUo
dGFibGUuZ2V0KCkpLCAwLCAyLCBudWxscHRyKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChhdHNwaV90YWJsZV9nZXRfY29sdW1uX2V4dGVudF9hdChBVFNQSV9UQUJMRSh0YWJsZS5nZXQo
KSksIDAsIDIsIG51bGxwdHIpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV90YWJs
ZV9nZXRfcm93X2NvbHVtbl9leHRlbnRzX2F0X2luZGV4KEFUU1BJX1RBQkxFKHRhYmxlLmdldCgp
KSwgMiwgJnJvdywgJmNvbHVtbiwgJnJvd1NwYW4sICZjb2x1bW5TcGFuLCAmaXNTZWxlY3RlZCwg
bnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcGludChyb3csID09LCAwKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoY29sdW1uLCA9PSwgMik7CisgICAgZ19hc3NlcnRfY21waW50KHJvd1NwYW4sID09
LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoY29sdW1uU3BhbiwgPT0sIDEpOworICAgIGdfYXNz
ZXJ0X2ZhbHNlKGlzU2VsZWN0ZWQpOworICAgIGF1dG8gY2VsbDIgPSBhZG9wdEdSZWYoYXRzcGlf
dGFibGVfZ2V0X2FjY2Vzc2libGVfYXQoQVRTUElfVEFCTEUodGFibGUuZ2V0KCkpLCAwLCAyLCBu
dWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19UQUJMRV9DRUxMKGNlbGwyLmdl
dCgpKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShjZWxsMi5nZXQoKSA9PSBjb2x1bW5IZWFkZXIyLmdl
dCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfdGFibGVfY2VsbF9nZXRfcm93X3NwYW4o
QVRTUElfVEFCTEVfQ0VMTChjZWxsMi5nZXQoKSksIG51bGxwdHIpLCA9PSwgMSk7CisgICAgZ19h
c3NlcnRfY21waW50KGF0c3BpX3RhYmxlX2NlbGxfZ2V0X2NvbHVtbl9zcGFuKEFUU1BJX1RBQkxF
X0NFTEwoY2VsbDIuZ2V0KCkpLCBudWxscHRyKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X3RydWUo
YXRzcGlfdGFibGVfY2VsbF9nZXRfcG9zaXRpb24oQVRTUElfVEFCTEVfQ0VMTChjZWxsMi5nZXQo
KSksICZyb3csICZjb2x1bW4sIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocm93LCA9
PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGNvbHVtbiwgPT0sIDIpOworICAgIGF0c3BpX3Rh
YmxlX2NlbGxfZ2V0X3Jvd19jb2x1bW5fc3BhbihBVFNQSV9UQUJMRV9DRUxMKGNlbGwyLmdldCgp
KSwgJnJvdywgJmNvbHVtbiwgJnJvd1NwYW4sICZjb2x1bW5TcGFuLCBudWxscHRyKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQocm93LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGNvbHVtbiwg
PT0sIDIpOworICAgIGdfYXNzZXJ0X2NtcGludChyb3dTcGFuLCA9PSwgMSk7CisgICAgZ19hc3Nl
cnRfY21waW50KGNvbHVtblNwYW4sID09LCAxKTsKKyAgICBjZWxsVGFibGUgPSBhZG9wdEdSZWYo
YXRzcGlfdGFibGVfY2VsbF9nZXRfdGFibGUoQVRTUElfVEFCTEVfQ0VMTChjZWxsMi5nZXQoKSks
IG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKHRhYmxlLmdldCgpID09IGNlbGxUYWJsZS5n
ZXQoKSk7CisgICAgcm93SGVhZGVycyA9IGFkb3B0R1JlZihhdHNwaV90YWJsZV9jZWxsX2dldF9y
b3dfaGVhZGVyX2NlbGxzKEFUU1BJX1RBQkxFX0NFTEwoY2VsbDIuZ2V0KCkpLCBudWxscHRyKSk7
CisgICAgZ19hc3NlcnRfY21waW50KHJvd0hlYWRlcnMtPmxlbiwgPT0sIDApOworICAgIGNvbHVt
bkhlYWRlcnMgPSBhZG9wdEdSZWYoYXRzcGlfdGFibGVfY2VsbF9nZXRfY29sdW1uX2hlYWRlcl9j
ZWxscyhBVFNQSV9UQUJMRV9DRUxMKGNlbGwyLmdldCgpKSwgbnVsbHB0cikpOworICAgIGdfYXNz
ZXJ0X2NtcGludChjb2x1bW5IZWFkZXJzLT5sZW4sID09LCAwKTsKKyAgICBnX2Fzc2VydF90cnVl
KEFUU1BJX0lTX1RFWFQoY2VsbDIuZ2V0KCkpKTsKKyAgICB0ZXh0LnJlc2V0KGF0c3BpX3RleHRf
Z2V0X3RleHQoQVRTUElfVEVYVChjZWxsMi5nZXQoKSksIDAsIC0xLCBudWxscHRyKSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHRleHQuZ2V0KCksID09LCAiQ29sdW1uIDMiKTsKKworICAgIGdfYXNz
ZXJ0X2NtcGludChhdHNwaV90YWJsZV9nZXRfaW5kZXhfYXQoQVRTUElfVEFCTEUodGFibGUuZ2V0
KCkpLCAxLCAwLCBudWxscHRyKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV90
YWJsZV9nZXRfcm93X2F0X2luZGV4KEFUU1BJX1RBQkxFKHRhYmxlLmdldCgpKSwgMywgbnVsbHB0
ciksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfdGFibGVfZ2V0X2NvbHVtbl9h
dF9pbmRleChBVFNQSV9UQUJMRSh0YWJsZS5nZXQoKSksIDMsIG51bGxwdHIpLCA9PSwgMCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGF0c3BpX3RhYmxlX2dldF9yb3dfZXh0ZW50X2F0KEFUU1BJX1RB
QkxFKHRhYmxlLmdldCgpKSwgMSwgMCwgbnVsbHB0ciksID09LCAyKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoYXRzcGlfdGFibGVfZ2V0X2NvbHVtbl9leHRlbnRfYXQoQVRTUElfVEFCTEUodGFibGUu
Z2V0KCkpLCAxLCAwLCBudWxscHRyKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlf
dGFibGVfZ2V0X3Jvd19jb2x1bW5fZXh0ZW50c19hdF9pbmRleChBVFNQSV9UQUJMRSh0YWJsZS5n
ZXQoKSksIDMsICZyb3csICZjb2x1bW4sICZyb3dTcGFuLCAmY29sdW1uU3BhbiwgJmlzU2VsZWN0
ZWQsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocm93LCA9PSwgMSk7CisgICAgZ19h
c3NlcnRfY21waW50KGNvbHVtbiwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChyb3dTcGFu
LCA9PSwgMik7CisgICAgZ19hc3NlcnRfY21waW50KGNvbHVtblNwYW4sID09LCAxKTsKKyAgICBn
X2Fzc2VydF9mYWxzZShpc1NlbGVjdGVkKTsKKyAgICBhdXRvIGNlbGwzID0gYWRvcHRHUmVmKGF0
c3BpX3RhYmxlX2dldF9hY2Nlc3NpYmxlX2F0KEFUU1BJX1RBQkxFKHRhYmxlLmdldCgpKSwgMSwg
MCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfVEFCTEVfQ0VMTChjZWxs
My5nZXQoKSkpOworICAgIGdfYXNzZXJ0X3RydWUoY2VsbDMuZ2V0KCkgPT0gcm93SGVhZGVyLmdl
dCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfdGFibGVfY2VsbF9nZXRfcm93X3NwYW4o
QVRTUElfVEFCTEVfQ0VMTChjZWxsMy5nZXQoKSksIG51bGxwdHIpLCA9PSwgMik7CisgICAgZ19h
c3NlcnRfY21waW50KGF0c3BpX3RhYmxlX2NlbGxfZ2V0X2NvbHVtbl9zcGFuKEFUU1BJX1RBQkxF
X0NFTEwoY2VsbDMuZ2V0KCkpLCBudWxscHRyKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X3RydWUo
YXRzcGlfdGFibGVfY2VsbF9nZXRfcG9zaXRpb24oQVRTUElfVEFCTEVfQ0VMTChjZWxsMy5nZXQo
KSksICZyb3csICZjb2x1bW4sIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocm93LCA9
PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGNvbHVtbiwgPT0sIDApOworICAgIGF0c3BpX3Rh
YmxlX2NlbGxfZ2V0X3Jvd19jb2x1bW5fc3BhbihBVFNQSV9UQUJMRV9DRUxMKGNlbGwzLmdldCgp
KSwgJnJvdywgJmNvbHVtbiwgJnJvd1NwYW4sICZjb2x1bW5TcGFuLCBudWxscHRyKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQocm93LCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGNvbHVtbiwg
PT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChyb3dTcGFuLCA9PSwgMik7CisgICAgZ19hc3Nl
cnRfY21waW50KGNvbHVtblNwYW4sID09LCAxKTsKKyAgICBjZWxsVGFibGUgPSBhZG9wdEdSZWYo
YXRzcGlfdGFibGVfY2VsbF9nZXRfdGFibGUoQVRTUElfVEFCTEVfQ0VMTChjZWxsMy5nZXQoKSks
IG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKHRhYmxlLmdldCgpID09IGNlbGxUYWJsZS5n
ZXQoKSk7CisgICAgcm93SGVhZGVycyA9IGFkb3B0R1JlZihhdHNwaV90YWJsZV9jZWxsX2dldF9y
b3dfaGVhZGVyX2NlbGxzKEFUU1BJX1RBQkxFX0NFTEwoY2VsbDMuZ2V0KCkpLCBudWxscHRyKSk7
CisgICAgZ19hc3NlcnRfY21waW50KHJvd0hlYWRlcnMtPmxlbiwgPT0sIDApOworICAgIGNvbHVt
bkhlYWRlcnMgPSBhZG9wdEdSZWYoYXRzcGlfdGFibGVfY2VsbF9nZXRfY29sdW1uX2hlYWRlcl9j
ZWxscyhBVFNQSV9UQUJMRV9DRUxMKGNlbGwzLmdldCgpKSwgbnVsbHB0cikpOworICAgIGdfYXNz
ZXJ0X2NtcGludChjb2x1bW5IZWFkZXJzLT5sZW4sID09LCAwKTsKKyAgICBnX2Fzc2VydF90cnVl
KEFUU1BJX0lTX1RFWFQoY2VsbDMuZ2V0KCkpKTsKKyAgICB0ZXh0LnJlc2V0KGF0c3BpX3RleHRf
Z2V0X3RleHQoQVRTUElfVEVYVChjZWxsMy5nZXQoKSksIDAsIC0xLCBudWxscHRyKSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHRleHQuZ2V0KCksID09LCAiUm93IDEgQ2VsbCAxIik7CisKKyAgICBn
X2Fzc2VydF9jbXBpbnQoYXRzcGlfdGFibGVfZ2V0X2luZGV4X2F0KEFUU1BJX1RBQkxFKHRhYmxl
LmdldCgpKSwgMSwgMSwgbnVsbHB0ciksID09LCA0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRz
cGlfdGFibGVfZ2V0X3Jvd19hdF9pbmRleChBVFNQSV9UQUJMRSh0YWJsZS5nZXQoKSksIDQsIG51
bGxwdHIpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX3RhYmxlX2dldF9jb2x1
bW5fYXRfaW5kZXgoQVRTUElfVEFCTEUodGFibGUuZ2V0KCkpLCA0LCBudWxscHRyKSwgPT0sIDEp
OworICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV90YWJsZV9nZXRfcm93X2V4dGVudF9hdChBVFNQ
SV9UQUJMRSh0YWJsZS5nZXQoKSksIDEsIDEsIG51bGxwdHIpLCA9PSwgMSk7CisgICAgZ19hc3Nl
cnRfY21waW50KGF0c3BpX3RhYmxlX2dldF9jb2x1bW5fZXh0ZW50X2F0KEFUU1BJX1RBQkxFKHRh
YmxlLmdldCgpKSwgMSwgMSwgbnVsbHB0ciksID09LCAxKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0
c3BpX3RhYmxlX2dldF9yb3dfY29sdW1uX2V4dGVudHNfYXRfaW5kZXgoQVRTUElfVEFCTEUodGFi
bGUuZ2V0KCkpLCA0LCAmcm93LCAmY29sdW1uLCAmcm93U3BhbiwgJmNvbHVtblNwYW4sICZpc1Nl
bGVjdGVkLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21waW50KHJvdywgPT0sIDEpOworICAg
IGdfYXNzZXJ0X2NtcGludChjb2x1bW4sID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocm93
U3BhbiwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChjb2x1bW5TcGFuLCA9PSwgMSk7Cisg
ICAgZ19hc3NlcnRfZmFsc2UoaXNTZWxlY3RlZCk7CisgICAgYXV0byBjZWxsNCA9IGFkb3B0R1Jl
ZihhdHNwaV90YWJsZV9nZXRfYWNjZXNzaWJsZV9hdChBVFNQSV9UQUJMRSh0YWJsZS5nZXQoKSks
IDEsIDEsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX1RBQkxFX0NFTEwo
Y2VsbDQuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfdGFibGVfY2VsbF9nZXRf
cm93X3NwYW4oQVRTUElfVEFCTEVfQ0VMTChjZWxsNC5nZXQoKSksIG51bGxwdHIpLCA9PSwgMSk7
CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX3RhYmxlX2NlbGxfZ2V0X2NvbHVtbl9zcGFuKEFU
U1BJX1RBQkxFX0NFTEwoY2VsbDQuZ2V0KCkpLCBudWxscHRyKSwgPT0sIDEpOworICAgIGdfYXNz
ZXJ0X3RydWUoYXRzcGlfdGFibGVfY2VsbF9nZXRfcG9zaXRpb24oQVRTUElfVEFCTEVfQ0VMTChj
ZWxsNC5nZXQoKSksICZyb3csICZjb2x1bW4sIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQocm93LCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGNvbHVtbiwgPT0sIDEpOworICAg
IGF0c3BpX3RhYmxlX2NlbGxfZ2V0X3Jvd19jb2x1bW5fc3BhbihBVFNQSV9UQUJMRV9DRUxMKGNl
bGw0LmdldCgpKSwgJnJvdywgJmNvbHVtbiwgJnJvd1NwYW4sICZjb2x1bW5TcGFuLCBudWxscHRy
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocm93LCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50
KGNvbHVtbiwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChyb3dTcGFuLCA9PSwgMSk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGNvbHVtblNwYW4sID09LCAxKTsKKyAgICBjZWxsVGFibGUgPSBh
ZG9wdEdSZWYoYXRzcGlfdGFibGVfY2VsbF9nZXRfdGFibGUoQVRTUElfVEFCTEVfQ0VMTChjZWxs
NC5nZXQoKSksIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKHRhYmxlLmdldCgpID09IGNl
bGxUYWJsZS5nZXQoKSk7CisgICAgcm93SGVhZGVycyA9IGFkb3B0R1JlZihhdHNwaV90YWJsZV9j
ZWxsX2dldF9yb3dfaGVhZGVyX2NlbGxzKEFUU1BJX1RBQkxFX0NFTEwoY2VsbDQuZ2V0KCkpLCBu
dWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21waW50KHJvd0hlYWRlcnMtPmxlbiwgPT0sIDEpOwor
ICAgIGdfYXNzZXJ0X3RydWUocm93SGVhZGVycy0+cGRhdGFbMF0gPT0gcm93SGVhZGVyLmdldCgp
KTsKKyAgICBnX3B0cl9hcnJheV9mb3JlYWNoKHJvd0hlYWRlcnMuZ2V0KCksIHJlaW50ZXJwcmV0
X2Nhc3Q8R0Z1bmM+KHJlaW50ZXJwcmV0X2Nhc3Q8R0NhbGxiYWNrPihnX29iamVjdF91bnJlZikp
LCBudWxscHRyKTsKKyAgICBjb2x1bW5IZWFkZXJzID0gYWRvcHRHUmVmKGF0c3BpX3RhYmxlX2Nl
bGxfZ2V0X2NvbHVtbl9oZWFkZXJfY2VsbHMoQVRTUElfVEFCTEVfQ0VMTChjZWxsNC5nZXQoKSks
IG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoY29sdW1uSGVhZGVycy0+bGVuLCA9PSwg
MSk7CisgICAgZ19hc3NlcnRfdHJ1ZShjb2x1bW5IZWFkZXJzLT5wZGF0YVswXSA9PSBjb2x1bW5I
ZWFkZXIxLmdldCgpKTsKKyAgICBnX3B0cl9hcnJheV9mb3JlYWNoKGNvbHVtbkhlYWRlcnMuZ2V0
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R0Z1bmM+KHJlaW50ZXJwcmV0X2Nhc3Q8R0NhbGxiYWNrPihn
X29iamVjdF91bnJlZikpLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX1RF
WFQoY2VsbDQuZ2V0KCkpKTsKKyAgICB0ZXh0LnJlc2V0KGF0c3BpX3RleHRfZ2V0X3RleHQoQVRT
UElfVEVYVChjZWxsNC5nZXQoKSksIDAsIC0xLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHRleHQuZ2V0KCksID09LCAiUm93IDEgQ2VsbCAyIik7CisKKyAgICBnX2Fzc2VydF9jbXBp
bnQoYXRzcGlfdGFibGVfZ2V0X2luZGV4X2F0KEFUU1BJX1RBQkxFKHRhYmxlLmdldCgpKSwgMSwg
MiwgbnVsbHB0ciksID09LCA1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfdGFibGVfZ2V0
X3Jvd19hdF9pbmRleChBVFNQSV9UQUJMRSh0YWJsZS5nZXQoKSksIDUsIG51bGxwdHIpLCA9PSwg
MSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX3RhYmxlX2dldF9jb2x1bW5fYXRfaW5kZXgo
QVRTUElfVEFCTEUodGFibGUuZ2V0KCkpLCA1LCBudWxscHRyKSwgPT0sIDIpOworICAgIGdfYXNz
ZXJ0X2NtcGludChhdHNwaV90YWJsZV9nZXRfcm93X2V4dGVudF9hdChBVFNQSV9UQUJMRSh0YWJs
ZS5nZXQoKSksIDEsIDIsIG51bGxwdHIpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0
c3BpX3RhYmxlX2dldF9jb2x1bW5fZXh0ZW50X2F0KEFUU1BJX1RBQkxFKHRhYmxlLmdldCgpKSwg
MSwgMiwgbnVsbHB0ciksID09LCAxKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3RhYmxlX2dl
dF9yb3dfY29sdW1uX2V4dGVudHNfYXRfaW5kZXgoQVRTUElfVEFCTEUodGFibGUuZ2V0KCkpLCA1
LCAmcm93LCAmY29sdW1uLCAmcm93U3BhbiwgJmNvbHVtblNwYW4sICZpc1NlbGVjdGVkLCBudWxs
cHRyKSk7CisgICAgZ19hc3NlcnRfY21waW50KHJvdywgPT0sIDEpOworICAgIGdfYXNzZXJ0X2Nt
cGludChjb2x1bW4sID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocm93U3BhbiwgPT0sIDEp
OworICAgIGdfYXNzZXJ0X2NtcGludChjb2x1bW5TcGFuLCA9PSwgMSk7CisgICAgZ19hc3NlcnRf
ZmFsc2UoaXNTZWxlY3RlZCk7CisgICAgYXV0byBjZWxsNSA9IGFkb3B0R1JlZihhdHNwaV90YWJs
ZV9nZXRfYWNjZXNzaWJsZV9hdChBVFNQSV9UQUJMRSh0YWJsZS5nZXQoKSksIDEsIDIsIG51bGxw
dHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX1RBQkxFX0NFTEwoY2VsbDUuZ2V0KCkp
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfdGFibGVfY2VsbF9nZXRfcm93X3NwYW4oQVRT
UElfVEFCTEVfQ0VMTChjZWxsNS5nZXQoKSksIG51bGxwdHIpLCA9PSwgMSk7CisgICAgZ19hc3Nl
cnRfY21waW50KGF0c3BpX3RhYmxlX2NlbGxfZ2V0X2NvbHVtbl9zcGFuKEFUU1BJX1RBQkxFX0NF
TEwoY2VsbDUuZ2V0KCkpLCBudWxscHRyKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X3RydWUoYXRz
cGlfdGFibGVfY2VsbF9nZXRfcG9zaXRpb24oQVRTUElfVEFCTEVfQ0VMTChjZWxsNS5nZXQoKSks
ICZyb3csICZjb2x1bW4sIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocm93LCA9PSwg
MSk7CisgICAgZ19hc3NlcnRfY21waW50KGNvbHVtbiwgPT0sIDIpOworICAgIGF0c3BpX3RhYmxl
X2NlbGxfZ2V0X3Jvd19jb2x1bW5fc3BhbihBVFNQSV9UQUJMRV9DRUxMKGNlbGw1LmdldCgpKSwg
JnJvdywgJmNvbHVtbiwgJnJvd1NwYW4sICZjb2x1bW5TcGFuLCBudWxscHRyKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQocm93LCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGNvbHVtbiwgPT0s
IDIpOworICAgIGdfYXNzZXJ0X2NtcGludChyb3dTcGFuLCA9PSwgMSk7CisgICAgZ19hc3NlcnRf
Y21waW50KGNvbHVtblNwYW4sID09LCAxKTsKKyAgICBjZWxsVGFibGUgPSBhZG9wdEdSZWYoYXRz
cGlfdGFibGVfY2VsbF9nZXRfdGFibGUoQVRTUElfVEFCTEVfQ0VMTChjZWxsNS5nZXQoKSksIG51
bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKHRhYmxlLmdldCgpID09IGNlbGxUYWJsZS5nZXQo
KSk7CisgICAgcm93SGVhZGVycyA9IGFkb3B0R1JlZihhdHNwaV90YWJsZV9jZWxsX2dldF9yb3df
aGVhZGVyX2NlbGxzKEFUU1BJX1RBQkxFX0NFTEwoY2VsbDUuZ2V0KCkpLCBudWxscHRyKSk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHJvd0hlYWRlcnMtPmxlbiwgPT0sIDEpOworICAgIGdfYXNzZXJ0
X3RydWUocm93SGVhZGVycy0+cGRhdGFbMF0gPT0gcm93SGVhZGVyLmdldCgpKTsKKyAgICBnX3B0
cl9hcnJheV9mb3JlYWNoKHJvd0hlYWRlcnMuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R0Z1bmM+
KHJlaW50ZXJwcmV0X2Nhc3Q8R0NhbGxiYWNrPihnX29iamVjdF91bnJlZikpLCBudWxscHRyKTsK
KyAgICBjb2x1bW5IZWFkZXJzID0gYWRvcHRHUmVmKGF0c3BpX3RhYmxlX2NlbGxfZ2V0X2NvbHVt
bl9oZWFkZXJfY2VsbHMoQVRTUElfVEFCTEVfQ0VMTChjZWxsNS5nZXQoKSksIG51bGxwdHIpKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoY29sdW1uSGVhZGVycy0+bGVuLCA9PSwgMSk7CisgICAgZ19h
c3NlcnRfdHJ1ZShjb2x1bW5IZWFkZXJzLT5wZGF0YVswXSA9PSBjb2x1bW5IZWFkZXIyLmdldCgp
KTsKKyAgICBnX3B0cl9hcnJheV9mb3JlYWNoKGNvbHVtbkhlYWRlcnMuZ2V0KCksIHJlaW50ZXJw
cmV0X2Nhc3Q8R0Z1bmM+KHJlaW50ZXJwcmV0X2Nhc3Q8R0NhbGxiYWNrPihnX29iamVjdF91bnJl
ZikpLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX1RFWFQoY2VsbDUuZ2V0
KCkpKTsKKyAgICB0ZXh0LnJlc2V0KGF0c3BpX3RleHRfZ2V0X3RleHQoQVRTUElfVEVYVChjZWxs
NS5nZXQoKSksIDAsIC0xLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQuZ2V0
KCksID09LCAiUm93IDEgQ2VsbCAzIik7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfdGFi
bGVfZ2V0X2luZGV4X2F0KEFUU1BJX1RBQkxFKHRhYmxlLmdldCgpKSwgMiwgMCwgbnVsbHB0ciks
ID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfdGFibGVfZ2V0X3Jvd19leHRlbnRf
YXQoQVRTUElfVEFCTEUodGFibGUuZ2V0KCkpLCAyLCAwLCBudWxscHRyKSwgPT0sIDIpOworICAg
IGdfYXNzZXJ0X2NtcGludChhdHNwaV90YWJsZV9nZXRfY29sdW1uX2V4dGVudF9hdChBVFNQSV9U
QUJMRSh0YWJsZS5nZXQoKSksIDIsIDAsIG51bGxwdHIpLCA9PSwgMSk7CisgICAgYXV0byBjZWxs
ID0gYWRvcHRHUmVmKGF0c3BpX3RhYmxlX2dldF9hY2Nlc3NpYmxlX2F0KEFUU1BJX1RBQkxFKHRh
YmxlLmdldCgpKSwgMiwgMCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoY2VsbDMuZ2V0
KCkgPT0gY2VsbC5nZXQoKSk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfdGFibGVfZ2V0
X2luZGV4X2F0KEFUU1BJX1RBQkxFKHRhYmxlLmdldCgpKSwgMiwgMSwgbnVsbHB0ciksID09LCA2
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfdGFibGVfZ2V0X3Jvd19hdF9pbmRleChBVFNQ
SV9UQUJMRSh0YWJsZS5nZXQoKSksIDYsIG51bGxwdHIpLCA9PSwgMik7CisgICAgZ19hc3NlcnRf
Y21waW50KGF0c3BpX3RhYmxlX2dldF9jb2x1bW5fYXRfaW5kZXgoQVRTUElfVEFCTEUodGFibGUu
Z2V0KCkpLCA2LCBudWxscHRyKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV90
YWJsZV9nZXRfcm93X2V4dGVudF9hdChBVFNQSV9UQUJMRSh0YWJsZS5nZXQoKSksIDIsIDEsIG51
bGxwdHIpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX3RhYmxlX2dldF9jb2x1
bW5fZXh0ZW50X2F0KEFUU1BJX1RBQkxFKHRhYmxlLmdldCgpKSwgMiwgMSwgbnVsbHB0ciksID09
LCAxKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3RhYmxlX2dldF9yb3dfY29sdW1uX2V4dGVu
dHNfYXRfaW5kZXgoQVRTUElfVEFCTEUodGFibGUuZ2V0KCkpLCA2LCAmcm93LCAmY29sdW1uLCAm
cm93U3BhbiwgJmNvbHVtblNwYW4sICZpc1NlbGVjdGVkLCBudWxscHRyKSk7CisgICAgZ19hc3Nl
cnRfY21waW50KHJvdywgPT0sIDIpOworICAgIGdfYXNzZXJ0X2NtcGludChjb2x1bW4sID09LCAx
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocm93U3BhbiwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2Nt
cGludChjb2x1bW5TcGFuLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfZmFsc2UoaXNTZWxlY3RlZCk7
CisgICAgYXV0byBjZWxsNiA9IGFkb3B0R1JlZihhdHNwaV90YWJsZV9nZXRfYWNjZXNzaWJsZV9h
dChBVFNQSV9UQUJMRSh0YWJsZS5nZXQoKSksIDIsIDEsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2Vy
dF90cnVlKEFUU1BJX0lTX1RBQkxFX0NFTEwoY2VsbDYuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoYXRzcGlfdGFibGVfY2VsbF9nZXRfcm93X3NwYW4oQVRTUElfVEFCTEVfQ0VMTChjZWxs
Ni5nZXQoKSksIG51bGxwdHIpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX3Rh
YmxlX2NlbGxfZ2V0X2NvbHVtbl9zcGFuKEFUU1BJX1RBQkxFX0NFTEwoY2VsbDYuZ2V0KCkpLCBu
dWxscHRyKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfdGFibGVfY2VsbF9nZXRf
cG9zaXRpb24oQVRTUElfVEFCTEVfQ0VMTChjZWxsNi5nZXQoKSksICZyb3csICZjb2x1bW4sIG51
bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocm93LCA9PSwgMik7CisgICAgZ19hc3NlcnRf
Y21waW50KGNvbHVtbiwgPT0sIDEpOworICAgIGF0c3BpX3RhYmxlX2NlbGxfZ2V0X3Jvd19jb2x1
bW5fc3BhbihBVFNQSV9UQUJMRV9DRUxMKGNlbGw2LmdldCgpKSwgJnJvdywgJmNvbHVtbiwgJnJv
d1NwYW4sICZjb2x1bW5TcGFuLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocm93LCA9
PSwgMik7CisgICAgZ19hc3NlcnRfY21waW50KGNvbHVtbiwgPT0sIDEpOworICAgIGdfYXNzZXJ0
X2NtcGludChyb3dTcGFuLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGNvbHVtblNwYW4s
ID09LCAxKTsKKyAgICBjZWxsVGFibGUgPSBhZG9wdEdSZWYoYXRzcGlfdGFibGVfY2VsbF9nZXRf
dGFibGUoQVRTUElfVEFCTEVfQ0VMTChjZWxsNi5nZXQoKSksIG51bGxwdHIpKTsKKyAgICBnX2Fz
c2VydF90cnVlKHRhYmxlLmdldCgpID09IGNlbGxUYWJsZS5nZXQoKSk7CisgICAgcm93SGVhZGVy
cyA9IGFkb3B0R1JlZihhdHNwaV90YWJsZV9jZWxsX2dldF9yb3dfaGVhZGVyX2NlbGxzKEFUU1BJ
X1RBQkxFX0NFTEwoY2VsbDYuZ2V0KCkpLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21waW50
KHJvd0hlYWRlcnMtPmxlbiwgPT0sIDEpOworICAgIGdfYXNzZXJ0X3RydWUocm93SGVhZGVycy0+
cGRhdGFbMF0gPT0gcm93SGVhZGVyLmdldCgpKTsKKyAgICBnX3B0cl9hcnJheV9mb3JlYWNoKHJv
d0hlYWRlcnMuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R0Z1bmM+KHJlaW50ZXJwcmV0X2Nhc3Q8
R0NhbGxiYWNrPihnX29iamVjdF91bnJlZikpLCBudWxscHRyKTsKKyAgICBjb2x1bW5IZWFkZXJz
ID0gYWRvcHRHUmVmKGF0c3BpX3RhYmxlX2NlbGxfZ2V0X2NvbHVtbl9oZWFkZXJfY2VsbHMoQVRT
UElfVEFCTEVfQ0VMTChjZWxsNi5nZXQoKSksIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoY29sdW1uSGVhZGVycy0+bGVuLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfdHJ1ZShjb2x1bW5I
ZWFkZXJzLT5wZGF0YVswXSA9PSBjb2x1bW5IZWFkZXIxLmdldCgpKTsKKyAgICBnX3B0cl9hcnJh
eV9mb3JlYWNoKGNvbHVtbkhlYWRlcnMuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R0Z1bmM+KHJl
aW50ZXJwcmV0X2Nhc3Q8R0NhbGxiYWNrPihnX29iamVjdF91bnJlZikpLCBudWxscHRyKTsKKyAg
ICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX1RFWFQoY2VsbDYuZ2V0KCkpKTsKKyAgICB0ZXh0LnJl
c2V0KGF0c3BpX3RleHRfZ2V0X3RleHQoQVRTUElfVEVYVChjZWxsNi5nZXQoKSksIDAsIC0xLCBu
dWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQuZ2V0KCksID09LCAiUm93IDIgQ2Vs
bCAyIik7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfdGFibGVfZ2V0X2luZGV4X2F0KEFU
U1BJX1RBQkxFKHRhYmxlLmdldCgpKSwgMiwgMiwgbnVsbHB0ciksID09LCA3KTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoYXRzcGlfdGFibGVfZ2V0X3Jvd19hdF9pbmRleChBVFNQSV9UQUJMRSh0YWJs
ZS5nZXQoKSksIDcsIG51bGxwdHIpLCA9PSwgMik7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3Bp
X3RhYmxlX2dldF9jb2x1bW5fYXRfaW5kZXgoQVRTUElfVEFCTEUodGFibGUuZ2V0KCkpLCA3LCBu
dWxscHRyKSwgPT0sIDIpOworICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV90YWJsZV9nZXRfcm93
X2V4dGVudF9hdChBVFNQSV9UQUJMRSh0YWJsZS5nZXQoKSksIDIsIDIsIG51bGxwdHIpLCA9PSwg
MSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX3RhYmxlX2dldF9jb2x1bW5fZXh0ZW50X2F0
KEFUU1BJX1RBQkxFKHRhYmxlLmdldCgpKSwgMiwgMiwgbnVsbHB0ciksID09LCAxKTsKKyAgICBn
X2Fzc2VydF90cnVlKGF0c3BpX3RhYmxlX2dldF9yb3dfY29sdW1uX2V4dGVudHNfYXRfaW5kZXgo
QVRTUElfVEFCTEUodGFibGUuZ2V0KCkpLCA3LCAmcm93LCAmY29sdW1uLCAmcm93U3BhbiwgJmNv
bHVtblNwYW4sICZpc1NlbGVjdGVkLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21waW50KHJv
dywgPT0sIDIpOworICAgIGdfYXNzZXJ0X2NtcGludChjb2x1bW4sID09LCAyKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQocm93U3BhbiwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChjb2x1bW5T
cGFuLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfZmFsc2UoaXNTZWxlY3RlZCk7CisgICAgYXV0byBj
ZWxsNyA9IGFkb3B0R1JlZihhdHNwaV90YWJsZV9nZXRfYWNjZXNzaWJsZV9hdChBVFNQSV9UQUJM
RSh0YWJsZS5nZXQoKSksIDIsIDIsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJ
X0lTX1RBQkxFX0NFTEwoY2VsbDcuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlf
dGFibGVfY2VsbF9nZXRfcm93X3NwYW4oQVRTUElfVEFCTEVfQ0VMTChjZWxsNy5nZXQoKSksIG51
bGxwdHIpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX3RhYmxlX2NlbGxfZ2V0
X2NvbHVtbl9zcGFuKEFUU1BJX1RBQkxFX0NFTEwoY2VsbDcuZ2V0KCkpLCBudWxscHRyKSwgPT0s
IDEpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfdGFibGVfY2VsbF9nZXRfcG9zaXRpb24oQVRT
UElfVEFCTEVfQ0VMTChjZWxsNy5nZXQoKSksICZyb3csICZjb2x1bW4sIG51bGxwdHIpKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQocm93LCA9PSwgMik7CisgICAgZ19hc3NlcnRfY21waW50KGNvbHVt
biwgPT0sIDIpOworICAgIGF0c3BpX3RhYmxlX2NlbGxfZ2V0X3Jvd19jb2x1bW5fc3BhbihBVFNQ
SV9UQUJMRV9DRUxMKGNlbGw3LmdldCgpKSwgJnJvdywgJmNvbHVtbiwgJnJvd1NwYW4sICZjb2x1
bW5TcGFuLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocm93LCA9PSwgMik7CisgICAg
Z19hc3NlcnRfY21waW50KGNvbHVtbiwgPT0sIDIpOworICAgIGdfYXNzZXJ0X2NtcGludChyb3dT
cGFuLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGNvbHVtblNwYW4sID09LCAxKTsKKyAg
ICBjZWxsVGFibGUgPSBhZG9wdEdSZWYoYXRzcGlfdGFibGVfY2VsbF9nZXRfdGFibGUoQVRTUElf
VEFCTEVfQ0VMTChjZWxsNy5nZXQoKSksIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKHRh
YmxlLmdldCgpID09IGNlbGxUYWJsZS5nZXQoKSk7CisgICAgcm93SGVhZGVycyA9IGFkb3B0R1Jl
ZihhdHNwaV90YWJsZV9jZWxsX2dldF9yb3dfaGVhZGVyX2NlbGxzKEFUU1BJX1RBQkxFX0NFTEwo
Y2VsbDcuZ2V0KCkpLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21waW50KHJvd0hlYWRlcnMt
PmxlbiwgPT0sIDEpOworICAgIGdfYXNzZXJ0X3RydWUocm93SGVhZGVycy0+cGRhdGFbMF0gPT0g
cm93SGVhZGVyLmdldCgpKTsKKyAgICBnX3B0cl9hcnJheV9mb3JlYWNoKHJvd0hlYWRlcnMuZ2V0
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R0Z1bmM+KHJlaW50ZXJwcmV0X2Nhc3Q8R0NhbGxiYWNrPihn
X29iamVjdF91bnJlZikpLCBudWxscHRyKTsKKyAgICBjb2x1bW5IZWFkZXJzID0gYWRvcHRHUmVm
KGF0c3BpX3RhYmxlX2NlbGxfZ2V0X2NvbHVtbl9oZWFkZXJfY2VsbHMoQVRTUElfVEFCTEVfQ0VM
TChjZWxsNy5nZXQoKSksIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoY29sdW1uSGVh
ZGVycy0+bGVuLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfdHJ1ZShjb2x1bW5IZWFkZXJzLT5wZGF0
YVswXSA9PSBjb2x1bW5IZWFkZXIyLmdldCgpKTsKKyAgICBnX3B0cl9hcnJheV9mb3JlYWNoKGNv
bHVtbkhlYWRlcnMuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R0Z1bmM+KHJlaW50ZXJwcmV0X2Nh
c3Q8R0NhbGxiYWNrPihnX29iamVjdF91bnJlZikpLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF90
cnVlKEFUU1BJX0lTX1RFWFQoY2VsbDcuZ2V0KCkpKTsKKyAgICB0ZXh0LnJlc2V0KGF0c3BpX3Rl
eHRfZ2V0X3RleHQoQVRTUElfVEVYVChjZWxsNy5nZXQoKSksIDAsIC0xLCBudWxscHRyKSk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHRleHQuZ2V0KCksID09LCAiUm93IDIgQ2VsbCAzIik7CisKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfdGFibGVfZ2V0X2luZGV4X2F0KEFUU1BJX1RBQkxFKHRh
YmxlLmdldCgpKSwgMywgMCwgbnVsbHB0ciksID09LCA4KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
YXRzcGlfdGFibGVfZ2V0X3Jvd19hdF9pbmRleChBVFNQSV9UQUJMRSh0YWJsZS5nZXQoKSksIDgs
IG51bGxwdHIpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX3RhYmxlX2dldF9j
b2x1bW5fYXRfaW5kZXgoQVRTUElfVEFCTEUodGFibGUuZ2V0KCkpLCA4LCBudWxscHRyKSwgPT0s
IDApOworICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV90YWJsZV9nZXRfcm93X2V4dGVudF9hdChB
VFNQSV9UQUJMRSh0YWJsZS5nZXQoKSksIDMsIDAsIG51bGxwdHIpLCA9PSwgMSk7CisgICAgZ19h
c3NlcnRfY21waW50KGF0c3BpX3RhYmxlX2dldF9jb2x1bW5fZXh0ZW50X2F0KEFUU1BJX1RBQkxF
KHRhYmxlLmdldCgpKSwgMywgMCwgbnVsbHB0ciksID09LCAzKTsKKyAgICBnX2Fzc2VydF90cnVl
KGF0c3BpX3RhYmxlX2dldF9yb3dfY29sdW1uX2V4dGVudHNfYXRfaW5kZXgoQVRTUElfVEFCTEUo
dGFibGUuZ2V0KCkpLCA4LCAmcm93LCAmY29sdW1uLCAmcm93U3BhbiwgJmNvbHVtblNwYW4sICZp
c1NlbGVjdGVkLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21waW50KHJvdywgPT0sIDMpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChjb2x1bW4sID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
cm93U3BhbiwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChjb2x1bW5TcGFuLCA9PSwgMyk7
CisgICAgZ19hc3NlcnRfZmFsc2UoaXNTZWxlY3RlZCk7CisgICAgYXV0byBjZWxsOCA9IGFkb3B0
R1JlZihhdHNwaV90YWJsZV9nZXRfYWNjZXNzaWJsZV9hdChBVFNQSV9UQUJMRSh0YWJsZS5nZXQo
KSksIDMsIDAsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX1RBQkxFX0NF
TEwoY2VsbDguZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfdGFibGVfY2VsbF9n
ZXRfcm93X3NwYW4oQVRTUElfVEFCTEVfQ0VMTChjZWxsOC5nZXQoKSksIG51bGxwdHIpLCA9PSwg
MSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX3RhYmxlX2NlbGxfZ2V0X2NvbHVtbl9zcGFu
KEFUU1BJX1RBQkxFX0NFTEwoY2VsbDguZ2V0KCkpLCBudWxscHRyKSwgPT0sIDMpOworICAgIGdf
YXNzZXJ0X3RydWUoYXRzcGlfdGFibGVfY2VsbF9nZXRfcG9zaXRpb24oQVRTUElfVEFCTEVfQ0VM
TChjZWxsOC5nZXQoKSksICZyb3csICZjb2x1bW4sIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQocm93LCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KGNvbHVtbiwgPT0sIDApOwor
ICAgIGF0c3BpX3RhYmxlX2NlbGxfZ2V0X3Jvd19jb2x1bW5fc3BhbihBVFNQSV9UQUJMRV9DRUxM
KGNlbGw4LmdldCgpKSwgJnJvdywgJmNvbHVtbiwgJnJvd1NwYW4sICZjb2x1bW5TcGFuLCBudWxs
cHRyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocm93LCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21w
aW50KGNvbHVtbiwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChyb3dTcGFuLCA9PSwgMSk7
CisgICAgZ19hc3NlcnRfY21waW50KGNvbHVtblNwYW4sID09LCAzKTsKKyAgICBjZWxsVGFibGUg
PSBhZG9wdEdSZWYoYXRzcGlfdGFibGVfY2VsbF9nZXRfdGFibGUoQVRTUElfVEFCTEVfQ0VMTChj
ZWxsOC5nZXQoKSksIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKHRhYmxlLmdldCgpID09
IGNlbGxUYWJsZS5nZXQoKSk7CisgICAgcm93SGVhZGVycyA9IGFkb3B0R1JlZihhdHNwaV90YWJs
ZV9jZWxsX2dldF9yb3dfaGVhZGVyX2NlbGxzKEFUU1BJX1RBQkxFX0NFTEwoY2VsbDguZ2V0KCkp
LCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21waW50KHJvd0hlYWRlcnMtPmxlbiwgPT0sIDAp
OworICAgIGdfcHRyX2FycmF5X2ZvcmVhY2gocm93SGVhZGVycy5nZXQoKSwgcmVpbnRlcnByZXRf
Y2FzdDxHRnVuYz4ocmVpbnRlcnByZXRfY2FzdDxHQ2FsbGJhY2s+KGdfb2JqZWN0X3VucmVmKSks
IG51bGxwdHIpOworICAgIGNvbHVtbkhlYWRlcnMgPSBhZG9wdEdSZWYoYXRzcGlfdGFibGVfY2Vs
bF9nZXRfY29sdW1uX2hlYWRlcl9jZWxscyhBVFNQSV9UQUJMRV9DRUxMKGNlbGw4LmdldCgpKSwg
bnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcGludChjb2x1bW5IZWFkZXJzLT5sZW4sID09LCAx
KTsKKyAgICBnX2Fzc2VydF90cnVlKGNvbHVtbkhlYWRlcnMtPnBkYXRhWzBdID09IGNvbHVtbkhl
YWRlcjAuZ2V0KCkpOworICAgIGdfcHRyX2FycmF5X2ZvcmVhY2goY29sdW1uSGVhZGVycy5nZXQo
KSwgcmVpbnRlcnByZXRfY2FzdDxHRnVuYz4ocmVpbnRlcnByZXRfY2FzdDxHQ2FsbGJhY2s+KGdf
b2JqZWN0X3VucmVmKSksIG51bGxwdHIpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfVEVY
VChjZWxsOC5nZXQoKSkpOworICAgIHRleHQucmVzZXQoYXRzcGlfdGV4dF9nZXRfdGV4dChBVFNQ
SV9URVhUKGNlbGw4LmdldCgpKSwgMCwgLTEsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIodGV4dC5nZXQoKSwgPT0sICJSb3cgMyBDZWxsIDEiKTsKKworICAgIGdfYXNzZXJ0X2NtcGlu
dChhdHNwaV90YWJsZV9nZXRfaW5kZXhfYXQoQVRTUElfVEFCTEUodGFibGUuZ2V0KCkpLCAzLCAx
LCBudWxscHRyKSwgPT0sIDgpOworICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV90YWJsZV9nZXRf
cm93X2V4dGVudF9hdChBVFNQSV9UQUJMRSh0YWJsZS5nZXQoKSksIDMsIDEsIG51bGxwdHIpLCA9
PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX3RhYmxlX2dldF9jb2x1bW5fZXh0ZW50
X2F0KEFUU1BJX1RBQkxFKHRhYmxlLmdldCgpKSwgMywgMSwgbnVsbHB0ciksID09LCAzKTsKKyAg
ICBjZWxsID0gYWRvcHRHUmVmKGF0c3BpX3RhYmxlX2dldF9hY2Nlc3NpYmxlX2F0KEFUU1BJX1RB
QkxFKHRhYmxlLmdldCgpKSwgMywgMSwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoY2Vs
bDguZ2V0KCkgPT0gY2VsbC5nZXQoKSk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfdGFi
bGVfZ2V0X2luZGV4X2F0KEFUU1BJX1RBQkxFKHRhYmxlLmdldCgpKSwgMywgMiwgbnVsbHB0ciks
ID09LCA4KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfdGFibGVfZ2V0X3Jvd19leHRlbnRf
YXQoQVRTUElfVEFCTEUodGFibGUuZ2V0KCkpLCAzLCAyLCBudWxscHRyKSwgPT0sIDEpOworICAg
IGdfYXNzZXJ0X2NtcGludChhdHNwaV90YWJsZV9nZXRfY29sdW1uX2V4dGVudF9hdChBVFNQSV9U
QUJMRSh0YWJsZS5nZXQoKSksIDMsIDIsIG51bGxwdHIpLCA9PSwgMyk7CisgICAgY2VsbCA9IGFk
b3B0R1JlZihhdHNwaV90YWJsZV9nZXRfYWNjZXNzaWJsZV9hdChBVFNQSV9UQUJMRSh0YWJsZS5n
ZXQoKSksIDMsIDIsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKGNlbGw4LmdldCgpID09
IGNlbGwuZ2V0KCkpOworfQorCiB2b2lkIGJlZm9yZUFsbCgpCiB7CiAgICAgQWNjZXNzaWJpbGl0
eVRlc3Q6OmFkZCgiV2ViS2l0QWNjZXNzaWJpbGl0eSIsICJhY2Nlc3NpYmxlL2Jhc2ljLWhpZXJh
cmNoeSIsIHRlc3RBY2Nlc3NpYmxlQmFzaWNIaWVyYXJjaHkpOwpAQCAtMjM2MCw2ICsyNzY4LDcg
QEAgdm9pZCBiZWZvcmVBbGwoKQogICAgIEFjY2Vzc2liaWxpdHlUZXN0OjphZGQoIldlYktpdEFj
Y2Vzc2liaWxpdHkiLCAiaW1hZ2UvYmFzaWMiLCB0ZXN0SW1hZ2VCYXNpYyk7CiAgICAgQWNjZXNz
aWJpbGl0eVRlc3Q6OmFkZCgiV2ViS2l0QWNjZXNzaWJpbGl0eSIsICJzZWxlY3Rpb24vbGlzdGJv
eCIsIHRlc3RTZWxlY3Rpb25MaXN0Qm94KTsKICAgICBBY2Nlc3NpYmlsaXR5VGVzdDo6YWRkKCJX
ZWJLaXRBY2Nlc3NpYmlsaXR5IiwgInNlbGVjdGlvbi9tZW51bGlzdCIsIHRlc3RTZWxlY3Rpb25N
ZW51TGlzdCk7CisgICAgQWNjZXNzaWJpbGl0eVRlc3Q6OmFkZCgiV2ViS2l0QWNjZXNzaWJpbGl0
eSIsICJ0YWJsZS9iYXNpYyIsIHRlc3RUYWJsZUJhc2ljKTsKIH0KIAogdm9pZCBhZnRlckFsbCgp
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0c3Bp
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdHNwaS5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL2F0c3BpL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdHNwaS5jcHAKaW5k
ZXggZmVmNjM0MjYwOTQ2Li5iYzFhNjM2ZDFhNzIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRzcGkvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0c3Bp
LmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0c3BpL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRBdHNwaS5jcHAKQEAgLTE1Niw3ICsxNTYsMTUgQEAgUmVmUHRy
PEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRpc2Nsb3Nl
ZFJvd0F0SW5kZXgodW5zaWcKIAogUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnJvd0F0SW5kZXgodW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgcmV0
dXJuIG51bGxwdHI7CisgICAgaWYgKCFtX2VsZW1lbnQtPmludGVyZmFjZXMoKS5jb250YWlucyhX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OkludGVyZmFjZTo6VGFibGUpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3Jl
KCk7CisgICAgYXV0byByb3dzID0gbV9lbGVtZW50LT5yb3dzKCk7CisgICAgaWYgKGluZGV4ID49
IHJvd3Muc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUocm93c1tpbmRleF0uZ2V0KCkpOwogfQogCiBSZWZQ
dHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0
ZWRDaGlsZEF0SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CkBAIC0yOTYsNiArMzA0LDIxIEBA
IHN0YXRpYyBTdHJpbmcgYXR0cmlidXRlc09mRWxlbWVudHMoVmVjdG9yPFJlZlB0cjxBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Pj4mIGVsZW1lCiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsK
IH0KIAorc3RhdGljIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+IGVsZW1l
bnRzVmVjdG9yKGNvbnN0IFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpPj4mIHdyYXBwZXJzKQoreworICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudD4+IGVsZW1lbnRzOworICAgIGVsZW1lbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
d3JhcHBlcnMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIHdyYXBwZXIgOiB3cmFwcGVycykKKyAg
ICAgICAgZWxlbWVudHMudW5jaGVja2VkQXBwZW5kKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNy
ZWF0ZSh3cmFwcGVyLmdldCgpKSk7CisgICAgcmV0dXJuIGVsZW1lbnRzOworfQorCitzdGF0aWMg
U3RyaW5nIGF0dHJpYnV0ZXNPZkVsZW1lbnRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpPj4mIHdyYXBwZXJzKQoreworICAgIGF1dG8gZWxlbWVu
dHMgPSBlbGVtZW50c1ZlY3Rvcih3cmFwcGVycyk7CisgICAgcmV0dXJuIGF0dHJpYnV0ZXNPZkVs
ZW1lbnRzKGVsZW1lbnRzKTsKK30KKwogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKCkKIHsKICAgICBtX2VsZW1lbnQt
PnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwpAQCAtMzA2LDEyICszMjksNyBAQCBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4o
KQogICAgICAgICBjaGlsZHJlbiA9IG1fZWxlbWVudC0+Y2hpbGRyZW4oKTsKICAgICB9KTsKIAot
ICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+IGVsZW1lbnRzOwotICAg
IGVsZW1lbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2hpbGRyZW4uc2l6ZSgpKTsKLSAgICBm
b3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pCi0gICAgICAgIGVsZW1lbnRzLnVuY2hlY2tlZEFw
cGVuZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoY2hpbGQuZ2V0KCkpKTsKLQotICAg
IHJldHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKGF0dHJpYnV0ZXNPZkVsZW1lbnRzKGVs
ZW1lbnRzKSkubGVha1JlZigpOworICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRl
KGF0dHJpYnV0ZXNPZkVsZW1lbnRzKGNoaWxkcmVuKSkubGVha1JlZigpOwogfQogCiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcygp
CkBAIC0zNTIsNiArMzcwLDE4IEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpudW1i
ZXJBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiAgICAgICAgIHJldHVybiBh
dHRyaWJ1dGVzLmdldCgic2V0c2l6ZSIpLnRvRG91YmxlKCk7CiAgICAgaWYgKGF0dHJpYnV0ZU5h
bWUgPT0gIkFYQVJJQVBvc0luU2V0IikKICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMuZ2V0KCJw
b3NpbnNldCIpLnRvRG91YmxlKCk7CisgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gIkFYQVJJQUNv
bHVtbkNvdW50IikKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMuZ2V0KCJjb2xjb3VudCIpLnRv
RG91YmxlKCk7CisgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gIkFYQVJJQVJvd0NvdW50IikKKyAg
ICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMuZ2V0KCJyb3djb3VudCIpLnRvRG91YmxlKCk7CisgICAg
aWYgKGF0dHJpYnV0ZU5hbWUgPT0gIkFYQVJJQUNvbHVtbkluZGV4IikKKyAgICAgICAgcmV0dXJu
IGF0dHJpYnV0ZXMuZ2V0KCJjb2xpbmRleCIpLnRvRG91YmxlKCk7CisgICAgaWYgKGF0dHJpYnV0
ZU5hbWUgPT0gIkFYQVJJQVJvd0luZGV4IikKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMuZ2V0
KCJyb3dpbmRleCIpLnRvRG91YmxlKCk7CisgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gIkFYQVJJ
QUNvbHVtblNwYW4iKQorICAgICAgICByZXR1cm4gYXR0cmlidXRlcy5nZXQoImNvbHNwYW4iKS50
b0RvdWJsZSgpOworICAgIGlmIChhdHRyaWJ1dGVOYW1lID09ICJBWEFSSUFSb3dTcGFuIikKKyAg
ICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMuZ2V0KCJyb3dzcGFuIikudG9Eb3VibGUoKTsKIAogICAg
IHJldHVybiAwOwogfQpAQCAtMzYxLDE0ICszOTEsNTEgQEAgSlNWYWx1ZVJlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBcnJheUF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0
dHIKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorc3RhdGljIEpTVmFsdWVSZWYgbWFrZUpTQXJy
YXkoY29uc3QgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Pj4mIGVsZW1lbnRz
KQoreworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CisgICAg
SlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQo
bWFpbkZyYW1lKTsKKworICAgIHNpemVfdCBlbGVtZW50Q291bnQgPSBlbGVtZW50cy5zaXplKCk7
CisgICAgYXV0byB2YWx1ZUVsZW1lbnRzID0gbWFrZVVuaXF1ZUFycmF5PEpTVmFsdWVSZWY+KGVs
ZW1lbnRDb3VudCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbGVtZW50Q291bnQ7IGkr
KykKKyAgICAgICAgdmFsdWVFbGVtZW50c1tpXSA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCBlbGVt
ZW50c1tpXS0+d3JhcHBlckNsYXNzKCksIGVsZW1lbnRzW2ldLmdldCgpKTsKKworICAgIHJldHVy
biBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCBlbGVtZW50Q291bnQsIHZhbHVlRWxlbWVudHMu
Z2V0KCksIG51bGxwdHIpOworfQorCiBKU1ZhbHVlUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnJvd0hlYWRlcnMoKSBjb25zdAogewotICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChtX2Vs
ZW1lbnQtPmludGVyZmFjZXMoKS5jb250YWlucyhXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0
QXRzcGk6OkludGVyZmFjZTo6VGFibGUpKQorICAgICAgICByZXR1cm4gbWFrZUpTQXJyYXkoZWxl
bWVudHNWZWN0b3IobV9lbGVtZW50LT5yb3dIZWFkZXJzKCkpKTsKKworICAgIGlmIChtX2VsZW1l
bnQtPmludGVyZmFjZXMoKS5jb250YWlucyhXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGk6OkludGVyZmFjZTo6VGFibGVDZWxsKSkgeworICAgICAgICBWZWN0b3I8UmVmUHRyPFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4+IGhlYWRlcnM7CisgICAgICAgIHNfY29udHJv
bGxlci0+ZXhlY3V0ZU9uQVhUaHJlYWRBbmRXYWl0KFt0aGlzLCAmaGVhZGVyc10geworICAgICAg
ICAgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICAgICAgICAgIGhlYWRl
cnMgPSBtX2VsZW1lbnQtPmNlbGxSb3dIZWFkZXJzKCk7CisgICAgICAgIH0pOworICAgICAgICBy
ZXR1cm4gbWFrZUpTQXJyYXkoZWxlbWVudHNWZWN0b3IoaGVhZGVycykpOworICAgIH0KKworICAg
IHJldHVybiBtYWtlSlNBcnJheSh7IH0pOwogfQogCiBKU1ZhbHVlUmVmIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmNvbHVtbkhlYWRlcnMoKSBjb25zdAogewotICAgIHJldHVybiBudWxscHRyOwor
ICAgIGlmIChtX2VsZW1lbnQtPmludGVyZmFjZXMoKS5jb250YWlucyhXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGk6OkludGVyZmFjZTo6VGFibGUpKQorICAgICAgICByZXR1cm4gbWFr
ZUpTQXJyYXkoZWxlbWVudHNWZWN0b3IobV9lbGVtZW50LT5jb2x1bW5IZWFkZXJzKCkpKTsKKwor
ICAgIGlmIChtX2VsZW1lbnQtPmludGVyZmFjZXMoKS5jb250YWlucyhXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGk6OkludGVyZmFjZTo6VGFibGVDZWxsKSkgeworICAgICAgICBWZWN0
b3I8UmVmUHRyPFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4+IGhlYWRlcnM7Cisg
ICAgICAgIHNfY29udHJvbGxlci0+ZXhlY3V0ZU9uQVhUaHJlYWRBbmRXYWl0KFt0aGlzLCAmaGVh
ZGVyc10geworICAgICAgICAgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAg
ICAgICAgICAgIGhlYWRlcnMgPSBtX2VsZW1lbnQtPmNlbGxDb2x1bW5IZWFkZXJzKCk7CisgICAg
ICAgIH0pOworICAgICAgICByZXR1cm4gbWFrZUpTQXJyYXkoZWxlbWVudHNWZWN0b3IoaGVhZGVy
cykpOworICAgIH0KKworICAgIHJldHVybiBtYWtlSlNBcnJheSh7IH0pOwogfQogCiBSZWZQdHI8
QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50
QXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKSBjb25zdApAQCAtOTk4LDEyICsx
MDY1LDIwIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzZWxlY3RUZXh0V2l0aENyaXRlcmlhKEpTQ29udGV4CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKCkK
IHsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBp
ZiAoIW1fZWxlbWVudC0+aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaTo6SW50ZXJmYWNlOjpUYWJsZSkpCisgICAgICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgbV9lbGVtZW50LT51cGRhdGVCYWNr
aW5nU3RvcmUoKTsKKyAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShhdHRyaWJ1
dGVzT2ZFbGVtZW50cyhtX2VsZW1lbnQtPmNvbHVtbkhlYWRlcnMoKSkpLmxlYWtSZWYoKTsKIH0K
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJp
YnV0ZXNPZlJvd0hlYWRlcnMoKQogewotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKDAsIDApOworICAgIGlmICghbV9lbGVtZW50LT5pbnRlcmZhY2VzKCkuY29udGFpbnMo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJbnRlcmZhY2U6OlRhYmxlKSkKKyAg
ICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBt
X2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgIHJldHVybiBPcGFxdWVKU1N0cmlu
Zzo6dHJ5Q3JlYXRlKGF0dHJpYnV0ZXNPZkVsZW1lbnRzKG1fZWxlbWVudC0+cm93SGVhZGVycygp
KSkubGVha1JlZigpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucygpCkBAIC0xMDEzLDEyICsxMDg4LDIwIEBA
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1
dGVzT2ZDb2x1bW5zKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd3MoKQogewotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworICAgIGlmICghbV9lbGVtZW50LT5pbnRlcmZhY2VzKCku
Y29udGFpbnMoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJbnRlcmZhY2U6OlRh
YmxlKSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
CisKKyAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgIHJldHVybiBPcGFx
dWVKU1N0cmluZzo6dHJ5Q3JlYXRlKGF0dHJpYnV0ZXNPZkVsZW1lbnRzKG1fZWxlbWVudC0+cm93
cygpKSkubGVha1JlZigpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzKCkKIHsKLSAgICByZXR1cm4g
SlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBpZiAoIW1fZWxlbWVudC0+
aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6
SW50ZXJmYWNlOjpUYWJsZSkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKDAsIDApOworCisgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAg
ICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShhdHRyaWJ1dGVzT2ZFbGVtZW50cyht
X2VsZW1lbnQtPmNlbGxzKCkpKS5sZWFrUmVmKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIoKQpAQCAtMTAy
OCwxMiArMTExMSwyOCBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YXR0cmlidXRlc09mSGVhZGVyKCkKIAogaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnJvd0NvdW50KCkKIHsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1fZWxlbWVudC0+aW50
ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6SW50
ZXJmYWNlOjpUYWJsZSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaW50IGNvdW50OworICAg
IHNfY29udHJvbGxlci0+ZXhlY3V0ZU9uQVhUaHJlYWRBbmRXYWl0KFt0aGlzLCAmY291bnRdIHsK
KyAgICAgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICAgICAgY291bnQg
PSBtX2VsZW1lbnQtPnJvd0NvdW50KCk7CisgICAgfSk7CisgICAgcmV0dXJuIGNvdW50OwogfQog
CiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uQ291bnQoKQogewotICAgIHJldHVy
biAwOworICAgIGlmICghbV9lbGVtZW50LT5pbnRlcmZhY2VzKCkuY29udGFpbnMoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJbnRlcmZhY2U6OlRhYmxlKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBpbnQgY291bnQ7CisgICAgc19jb250cm9sbGVyLT5leGVjdXRlT25BWFRo
cmVhZEFuZFdhaXQoW3RoaXMsICZjb3VudF0geworICAgICAgICBtX2VsZW1lbnQtPnVwZGF0ZUJh
Y2tpbmdTdG9yZSgpOworICAgICAgICBjb3VudCA9IG1fZWxlbWVudC0+Y29sdW1uQ291bnQoKTsK
KyAgICB9KTsKKyAgICByZXR1cm4gY291bnQ7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjppbmRleEluVGFibGUoKQpAQCAtMTA0MywxNyArMTE0Miw1NCBAQCBpbnQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aW5kZXhJblRhYmxlKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0luZGV4UmFuZ2UoKQogewotICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworICAgIGlmICghbV9lbGVtZW50LT5p
bnRlcmZhY2VzKCkuY29udGFpbnMoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJ
bnRlcmZhY2U6OlRhYmxlQ2VsbCkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKDAsIDApOworCisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gcG9zaXRpb24s
IHNwYW47CisgICAgc19jb250cm9sbGVyLT5leGVjdXRlT25BWFRocmVhZEFuZFdhaXQoW3RoaXMs
ICZwb3NpdGlvbiwgJnNwYW5dIHsKKyAgICAgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3Rv
cmUoKTsKKyAgICAgICAgcG9zaXRpb24gPSBtX2VsZW1lbnQtPmNlbGxQb3NpdGlvbigpLmZpcnN0
OworICAgICAgICBzcGFuID0gbV9lbGVtZW50LT5yb3dTcGFuKCk7CisgICAgfSk7CisKKyAgICBp
ZiAoIXBvc2l0aW9uIHx8ICFzcGFuKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycygwLCAwKTsKKworICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRl
KG1ha2VTdHJpbmcoJ3snLCAqcG9zaXRpb24sICIsICIsICpzcGFuLCAnfScpKS5sZWFrUmVmKCk7
CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpj
b2x1bW5JbmRleFJhbmdlKCkKIHsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKKyAgICBpZiAoIW1fZWxlbWVudC0+aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6SW50ZXJmYWNlOjpUYWJsZUNlbGwpKQor
ICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAg
IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHBvc2l0aW9uLCBzcGFuOworICAgIHNfY29udHJvbGxl
ci0+ZXhlY3V0ZU9uQVhUaHJlYWRBbmRXYWl0KFt0aGlzLCAmcG9zaXRpb24sICZzcGFuXSB7Cisg
ICAgICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgICAgIHBvc2l0aW9u
ID0gbV9lbGVtZW50LT5jZWxsUG9zaXRpb24oKS5zZWNvbmQ7CisgICAgICAgIHNwYW4gPSBtX2Vs
ZW1lbnQtPmNvbHVtblNwYW4oKTsKKyAgICB9KTsKKworICAgIGlmICghcG9zaXRpb24gfHwgIXNw
YW4pCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwor
CisgICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUobWFrZVN0cmluZygneycsICpw
b3NpdGlvbiwgIiwgIiwgKnNwYW4sICd9JykpLmxlYWtSZWYoKTsKIH0KIAotUmVmUHRyPEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5B
bmRSb3codW5zaWduZWQgY29sLCB1bnNpZ25lZCByb3cpCitSZWZQdHI8QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2VsbEZvckNvbHVtbkFuZFJvdyh1bnNp
Z25lZCBjb2x1bW4sIHVuc2lnbmVkIHJvdykKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBp
ZiAoIW1fZWxlbWVudC0+aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaTo6SW50ZXJmYWNlOjpUYWJsZSkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgUmVmUHRyPFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4gY2VsbDsK
KyAgICBzX2NvbnRyb2xsZXItPmV4ZWN1dGVPbkFYVGhyZWFkQW5kV2FpdChbdGhpcywgJmNlbGws
IGNvbHVtbiwgcm93XSB7CisgICAgICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7
CisgICAgICAgIGNlbGwgPSBtX2VsZW1lbnQtPmNlbGwocm93LCBjb2x1bW4pOworICAgIH0pOwor
ICAgIGlmICghY2VsbCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKGNlbGwuZ2V0KCkpOwogfQogCiBSZWZQdHI8QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aG9yaXpvbnRhbFNj
cm9sbGJhcigpIGNvbnN0Cg==
</data>
<flag name="review"
          id="470770"
          type_id="1"
          status="+"
          setter="aperez"
    />
          </attachment>
      

    </bug>

</bugzilla>