<?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>162007</bug_id>
          
          <creation_ts>2016-09-14 22:16:03 -0700</creation_ts>
          <short_desc>Use efficient iterators in URLParser</short_desc>
          <delta_ts>2016-09-15 11:14:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1229902</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-14 22:16:03 -0700</bug_when>
    <thetext>Use efficient iterators in URLParser</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229905</commentid>
    <comment_count>1</comment_count>
      <attachid>288928</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-14 22:24:55 -0700</bug_when>
    <thetext>Created attachment 288928
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229908</commentid>
    <comment_count>2</comment_count>
      <attachid>288930</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-14 23:26:43 -0700</bug_when>
    <thetext>Created attachment 288930
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230019</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-15 09:02:32 -0700</bug_when>
    <thetext>Before this patch, URLParser is about 2.05x as slow as URL::parse.
After this patch, URLParser is about 1.55x as slow as URL::parse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230062</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-15 10:14:28 -0700</bug_when>
    <thetext>On my computer this increases the binary size of a release build of WebCore (which is about 44MB) by about 15KB.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230103</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-15 11:14:28 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/205986</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288928</attachid>
            <date>2016-09-14 22:24:55 -0700</date>
            <delta_ts>2016-09-14 23:26:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162007-20160914222218.patch</filename>
            <type>text/plain</type>
            <size>35488</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTkzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE2LTA5LTE0ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIGVmZmlj
aWVudCBpdGVyYXRvcnMgaW4gVVJMUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIwMDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBVUkxQYXJzZXIgdXNlZCB0byB1c2UgU3RyaW5nVmlldzo6Q29k
ZVBvaW50czo6SXRlcmF0b3IsIHdoaWNoIG5lZWRzIHRvIGNoZWNrIGlmCisgICAgICAgIHRoZSBT
dHJpbmdWaWV3IGlzIDgtYml0IG9yIDE2LWJpdCBldmVyeSB0aW1lIGl0IGRvZXMgYW55dGhpbmcu
CisgICAgICAgIEkgd3JvdGUgYSBuZXcgQ29kZVBvaW50SXRlcmF0b3IgdGVtcGxhdGUgd2hpY2gg
YWxyZWFkeSBrbm93cyB3aGV0aGVyIGl0IGlzIGl0ZXJhdGluZworICAgICAgICA4LWJpdCBvciAx
Ni1iaXQgY2hhcmFjdGVycywgc28gaXQgZG9lcyBub3QgbmVlZCB0byBkbyB0aGUgY2hlY2tzIGVh
Y2ggdGltZSBpdCBnZXRzIGEKKyAgICAgICAgY29kZSBwb2ludCBvciBhZHZhbmNlcyB0byB0aGUg
bmV4dCBjb2RlIHBvaW50LgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBiZWhhdmlvciBleGNlcHQg
YSBwZXJmb3JtYW5jZSBpbmNyZWFzZS4KKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0
cy4KKworICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb2RlUG9pbnRJdGVyYXRvcjo6Q29kZVBvaW50SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29kZVBvaW50SXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6Q29k
ZVBvaW50SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6Q29kZVBvaW50
SXRlcmF0b3I6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpDb2RlUG9pbnRJdGVyYXRv
cjo6YXRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q29kZVBvaW50SXRlcmF0b3I8TENoYXI+Ojpv
cGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2RlUG9pbnRJdGVyYXRvcjxVQ2hhcj46Om9w
ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmlzV2luZG93c0RyaXZlTGV0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNob3VsZENvcHlGaWxlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmlzUGVy
Y2VudEVuY29kZWREb3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNTaW5nbGVEb3RQYXRoU2VnbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjppc0RvdWJsZURvdFBhdGhTZWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnN1bWVTaW5nbGVEb3RQYXRoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb25zdW1lRG91YmxlRG90UGF0aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VVJMUGFy
c2VyOjpmYWlsdXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6cGFyc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpwYXJzZUF1dGhvcml0eSk6CisgICAgICAgIChXZWJD
b3JlOjpwYXJzZUlQdjROdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VJUHY0SG9zdCk6
CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUlQdjZIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OlVS
TFBhcnNlcjo6cGFyc2VQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6cGFyc2VI
b3N0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9VUkxQYXJzZXIuaDoKKwogMjAxNi0wOS0xNCAgRXJp
YyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWVkaWFTdHJl
YW1dIE1pbm9yIGNsZWFudXAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNw
cAkocmV2aXNpb24gMjA1OTIyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx1bmljb2RlL3VpZG5hLmg+CisjaW5jbHVk
ZSA8dW5pY29kZS91dHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KQEAgLTM2LDYgKzM3LDg1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2NsYXNzIENvZGVQb2ludEl0ZXJhdG9yIHsKK3B1Ymxp
YzoKKyAgICBDb2RlUG9pbnRJdGVyYXRvcigpIHsgfQorICAgIENvZGVQb2ludEl0ZXJhdG9yKGNv
bnN0IENoYXJhY3RlclR5cGUqIGJlZ2luLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgZW5kSW5k
ZXgpCisgICAgICAgIDogbV9iZWdpbihiZWdpbikKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQor
ICAgICAgICAsIG1fZW5kSW5kZXgoZW5kSW5kZXgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBD
b2RlUG9pbnRJdGVyYXRvcihjb25zdCBDb2RlUG9pbnRJdGVyYXRvciYgYmVnaW4sIGNvbnN0IENv
ZGVQb2ludEl0ZXJhdG9yJiBlbmQpCisgICAgICAgIDogQ29kZVBvaW50SXRlcmF0b3IoYmVnaW4u
bV9iZWdpbiwgYmVnaW4ubV9pbmRleCwgZW5kLm1faW5kZXgpCisgICAgeworICAgICAgICBBU1NF
UlQoYmVnaW4ubV9iZWdpbiA9PSBlbmQubV9iZWdpbik7CisgICAgICAgIEFTU0VSVChlbmQubV9p
bmRleCA+PSBiZWdpbi5tX2luZGV4KTsKKyAgICB9CisgICAgCisgICAgVUNoYXIzMiBvcGVyYXRv
ciooKSBjb25zdDsKKyAgICBDb2RlUG9pbnRJdGVyYXRvciYgb3BlcmF0b3IrKygpOworICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBDb2RlUG9pbnRJdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9iZWdpbiA9PSBvdGhlci5tX2JlZ2luCisgICAgICAgICAgICAm
JiBtX2luZGV4ID09IG90aGVyLm1faW5kZXgKKyAgICAgICAgICAgICYmIG1fZW5kSW5kZXggPT0g
b3RoZXIubV9lbmRJbmRleDsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvZGVQ
b2ludEl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0K
KyAgICAKKyAgICBDb2RlUG9pbnRJdGVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IENvZGVQb2ludEl0
ZXJhdG9yJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fYmVnaW4gPSBvdGhlci5tX2JlZ2luOwor
ICAgICAgICBtX2luZGV4ID0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgbV9lbmRJbmRleCA9IG90
aGVyLm1fZW5kSW5kZXg7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgYm9vbCBh
dEVuZCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9pbmRleCA8PSBtX2VuZEluZGV4
KTsKKyAgICAgICAgcmV0dXJuIG1faW5kZXggPj0gbV9lbmRJbmRleDsKKyAgICB9CisgICAgCitw
cml2YXRlOgorICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIG1fYmVnaW4geyBudWxscHRyIH07Cisg
ICAgdW5zaWduZWQgbV9pbmRleCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2VuZEluZGV4IHsgMCB9
OworfTsKKwordGVtcGxhdGU8PgorVUNoYXIzMiBDb2RlUG9pbnRJdGVyYXRvcjxMQ2hhcj46Om9w
ZXJhdG9yKigpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFhdEVuZCgpKTsKKyAgICByZXR1cm4gbV9i
ZWdpblttX2luZGV4XTsKK30KKwordGVtcGxhdGU8PgorYXV0byBDb2RlUG9pbnRJdGVyYXRvcjxM
Q2hhcj46Om9wZXJhdG9yKysoKSAtPiBDb2RlUG9pbnRJdGVyYXRvciYKK3sKKyAgICBBU1NFUlQo
IWF0RW5kKCkpOworICAgIG1faW5kZXgrKzsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3RlbXBs
YXRlPD4KK1VDaGFyMzIgQ29kZVBvaW50SXRlcmF0b3I8VUNoYXI+OjpvcGVyYXRvciooKSBjb25z
dAoreworICAgIEFTU0VSVCghYXRFbmQoKSk7CisgICAgVUNoYXIzMiBjOworICAgIFUxNl9HRVQo
bV9iZWdpbiwgMCwgbV9pbmRleCwgbV9lbmRJbmRleCwgYyk7CisgICAgcmV0dXJuIGM7Cit9CisK
K3RlbXBsYXRlPD4KK2F1dG8gQ29kZVBvaW50SXRlcmF0b3I8VUNoYXI+OjpvcGVyYXRvcisrKCkg
LT4gQ29kZVBvaW50SXRlcmF0b3ImCit7CisgICAgQVNTRVJUKCFhdEVuZCgpKTsKKyAgICBVMTZf
RldEXzEobV9iZWdpbiwgbV9pbmRleCwgbV9lbmRJbmRleCk7CisgICAgcmV0dXJuICp0aGlzOwor
fQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc0MwQ29u
dHJvbChDaGFyYWN0ZXJUeXBlIGNoYXJhY3RlcikgeyByZXR1cm4gY2hhcmFjdGVyIDw9IDB4MDAw
MUY7IH0KIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlzQzBD
b250cm9sT3JTcGFjZShDaGFyYWN0ZXJUeXBlIGNoYXJhY3RlcikgeyByZXR1cm4gaXNDMENvbnRy
b2woY2hhcmFjdGVyKSB8fCBjaGFyYWN0ZXIgPT0gMHgwMDIwOyB9CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc1RhYk9yTmV3bGluZShDaGFyYWN0ZXJUeXBl
IGNoYXJhY3RlcikgeyByZXR1cm4gY2hhcmFjdGVyID09IDB4MDAwOSB8fCBjaGFyYWN0ZXIgPT0g
MHgwMDBBIHx8IGNoYXJhY3RlciA9PSAweDAwMEQ7IH0KQEAgLTQ1LDEyICsxMjUsMTMgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIAogdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgaXNJbnZhbGlkRG9tYWluQ2hhcmFjdGVyKENoYXJh
Y3RlclR5cGUgY2hhcmFjdGVyKSB7IHJldHVybiBjaGFyYWN0ZXIgPT0gMHgwMDAwIHx8IGNoYXJh
Y3RlciA9PSAweDAwMDkgfHwgY2hhcmFjdGVyID09IDB4MDAwQSB8fCBjaGFyYWN0ZXIgPT0gMHgw
MDBEIHx8IGNoYXJhY3RlciA9PSAweDAwMjAgfHwgY2hhcmFjdGVyID09ICcjJyB8fCBjaGFyYWN0
ZXIgPT0gJyUnIHx8IGNoYXJhY3RlciA9PSAnLycgfHwgY2hhcmFjdGVyID09ICc6JyB8fCBjaGFy
YWN0ZXIgPT0gJz8nIHx8IGNoYXJhY3RlciA9PSAnQCcgfHwgY2hhcmFjdGVyID09ICdbJyB8fCBj
aGFyYWN0ZXIgPT0gJ1xcJyB8fCBjaGFyYWN0ZXIgPT0gJ10nOyB9CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc1BlcmNlbnRPck5vbkFTQ0lJKENoYXJhY3Rl
clR5cGUgY2hhcmFjdGVyKSB7IHJldHVybiAhaXNBU0NJSShjaGFyYWN0ZXIpIHx8IGNoYXJhY3Rl
ciA9PSAnJSc7IH0KICAgICAKLXN0YXRpYyBib29sIGlzV2luZG93c0RyaXZlTGV0dGVyKFN0cmlu
Z1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yIGl0ZXJhdG9yLCBjb25zdCBTdHJpbmdWaWV3OjpD
b2RlUG9pbnRzOjpJdGVyYXRvciYgZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4KK3N0YXRpYyBib29sIGlzV2luZG93c0RyaXZlTGV0dGVyKENvZGVQb2ludEl0ZXJhdG9yPENo
YXJhY3RlclR5cGU+IGl0ZXJhdG9yKQogewotICAgIGlmIChpdGVyYXRvciA9PSBlbmQgfHwgIWlz
QVNDSUlBbHBoYSgqaXRlcmF0b3IpKQorICAgIGlmIChpdGVyYXRvci5hdEVuZCgpIHx8ICFpc0FT
Q0lJQWxwaGEoKml0ZXJhdG9yKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICsraXRlcmF0
b3I7Ci0gICAgaWYgKGl0ZXJhdG9yID09IGVuZCkKKyAgICBpZiAoaXRlcmF0b3IuYXRFbmQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiAqaXRlcmF0b3IgPT0gJzonIHx8ICpp
dGVyYXRvciA9PSAnfCc7CiB9CkBAIC02MiwxNyArMTQzLDE4IEBAIHN0YXRpYyBib29sIGlzV2lu
ZG93c0RyaXZlTGV0dGVyKGNvbnN0IFMKICAgICByZXR1cm4gaXNBU0NJSUFscGhhKGJ1aWxkZXJb
aW5kZXhdKSAmJiAoYnVpbGRlcltpbmRleCArIDFdID09ICc6JyB8fCBidWlsZGVyW2luZGV4ICsg
MV0gPT0gJ3wnKTsKIH0KIAotc3RhdGljIGJvb2wgc2hvdWxkQ29weUZpbGVVUkwoU3RyaW5nVmll
dzo6Q29kZVBvaW50czo6SXRlcmF0b3IgaXRlcmF0b3IsIGNvbnN0IFN0cmluZ1ZpZXc6OkNvZGVQ
b2ludHM6Okl0ZXJhdG9yIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Citz
dGF0aWMgYm9vbCBzaG91bGRDb3B5RmlsZVVSTChDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJU
eXBlPiBpdGVyYXRvcikKIHsKLSAgICBpZiAoaXNXaW5kb3dzRHJpdmVMZXR0ZXIoaXRlcmF0b3Is
IGVuZCkpCisgICAgaWYgKGlzV2luZG93c0RyaXZlTGV0dGVyKGl0ZXJhdG9yKSkKICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgaWYgKGl0ZXJhdG9yID09IGVuZCkKKyAgICBpZiAoaXRlcmF0b3Iu
YXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICsraXRlcmF0b3I7Ci0gICAgaWYg
KGl0ZXJhdG9yID09IGVuZCkKKyAgICBpZiAoaXRlcmF0b3IuYXRFbmQoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgKytpdGVyYXRvcjsKLSAgICBpZiAoaXRlcmF0b3IgPT0gZW5kKQorICAg
IGlmIChpdGVyYXRvci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4g
Kml0ZXJhdG9yICE9ICcvJyAmJiAqaXRlcmF0b3IgIT0gJ1xcJyAmJiAqaXRlcmF0b3IgIT0gJz8n
ICYmICppdGVyYXRvciAhPSAnIyc7CiB9CkBAIC0zNTEsNzUgKzQzMyw3OSBAQCB2b2lkIFVSTFBh
cnNlcjo6Y29weVVSTFBhcnRzVW50aWwoY29uc3QgCiAKIHN0YXRpYyBjb25zdCBjaGFyKiBkb3RB
U0NJSUNvZGUgPSAiMmUiOwogCi1zdGF0aWMgYm9vbCBpc1BlcmNlbnRFbmNvZGVkRG90KFN0cmlu
Z1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yIGMsIGNvbnN0IFN0cmluZ1ZpZXc6OkNvZGVQb2lu
dHM6Okl0ZXJhdG9yJiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3Rh
dGljIGJvb2wgaXNQZXJjZW50RW5jb2RlZERvdChDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJU
eXBlPiBjKQogewotICAgIGlmIChjID09IGVuZCkKKyAgICBpZiAoYy5hdEVuZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCpjICE9ICclJykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICsrYzsKLSAgICBpZiAoYyA9PSBlbmQpCisgICAgaWYgKGMuYXRFbmQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICgqYyAhPSBkb3RBU0NJSUNvZGVbMF0pCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICArK2M7Ci0gICAgaWYgKGMgPT0gZW5kKQorICAgIGlmIChjLmF0
RW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdG9BU0NJSUxvd2VyKCpj
KSA9PSBkb3RBU0NJSUNvZGVbMV07CiB9CiAKLXN0YXRpYyBib29sIGlzU2luZ2xlRG90UGF0aFNl
Z21lbnQoU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3IgYywgY29uc3QgU3RyaW5nVmll
dzo6Q29kZVBvaW50czo6SXRlcmF0b3ImIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+CitzdGF0aWMgYm9vbCBpc1NpbmdsZURvdFBhdGhTZWdtZW50KENvZGVQb2ludEl0ZXJh
dG9yPENoYXJhY3RlclR5cGU+IGMpCiB7Ci0gICAgaWYgKGMgPT0gZW5kKQorICAgIGlmIChjLmF0
RW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoKmMgPT0gJy4nKSB7CiAgICAg
ICAgICsrYzsKLSAgICAgICAgcmV0dXJuIGMgPT0gZW5kIHx8ICpjID09ICcvJyB8fCAqYyA9PSAn
XFwnIHx8ICpjID09ICc/JyB8fCAqYyA9PSAnIyc7CisgICAgICAgIHJldHVybiBjLmF0RW5kKCkg
fHwgKmMgPT0gJy8nIHx8ICpjID09ICdcXCcgfHwgKmMgPT0gJz8nIHx8ICpjID09ICcjJzsKICAg
ICB9CiAgICAgaWYgKCpjICE9ICclJykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICsrYzsK
LSAgICBpZiAoYyA9PSBlbmQgfHwgKmMgIT0gZG90QVNDSUlDb2RlWzBdKQorICAgIGlmIChjLmF0
RW5kKCkgfHwgKmMgIT0gZG90QVNDSUlDb2RlWzBdKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgKytjOwotICAgIGlmIChjID09IGVuZCkKKyAgICBpZiAoYy5hdEVuZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaWYgKHRvQVNDSUlMb3dlcigqYykgPT0gZG90QVNDSUlDb2RlWzFd
KSB7CiAgICAgICAgICsrYzsKLSAgICAgICAgcmV0dXJuIGMgPT0gZW5kIHx8ICpjID09ICcvJyB8
fCAqYyA9PSAnXFwnIHx8ICpjID09ICc/JyB8fCAqYyA9PSAnIyc7CisgICAgICAgIHJldHVybiBj
LmF0RW5kKCkgfHwgKmMgPT0gJy8nIHx8ICpjID09ICdcXCcgfHwgKmMgPT0gJz8nIHx8ICpjID09
ICcjJzsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQotICAgIAotc3RhdGljIGJvb2wgaXNE
b3VibGVEb3RQYXRoU2VnbWVudChTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciBjLCBj
b25zdCBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciYgZW5kKQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIGJvb2wgaXNEb3VibGVEb3RQYXRoU2VnbWVu
dChDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiBjKQogewotICAgIGlmIChjID09IGVu
ZCkKKyAgICBpZiAoYy5hdEVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCpj
ID09ICcuJykgewogICAgICAgICArK2M7Ci0gICAgICAgIHJldHVybiBpc1NpbmdsZURvdFBhdGhT
ZWdtZW50KGMsIGVuZCk7CisgICAgICAgIHJldHVybiBpc1NpbmdsZURvdFBhdGhTZWdtZW50KGMp
OwogICAgIH0KICAgICBpZiAoKmMgIT0gJyUnKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
KytjOwotICAgIGlmIChjID09IGVuZCB8fCAqYyAhPSBkb3RBU0NJSUNvZGVbMF0pCisgICAgaWYg
KGMuYXRFbmQoKSB8fCAqYyAhPSBkb3RBU0NJSUNvZGVbMF0pCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICArK2M7Ci0gICAgaWYgKGMgPT0gZW5kKQorICAgIGlmIChjLmF0RW5kKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAodG9BU0NJSUxvd2VyKCpjKSA9PSBkb3RBU0NJSUNv
ZGVbMV0pIHsKICAgICAgICAgKytjOwotICAgICAgICByZXR1cm4gaXNTaW5nbGVEb3RQYXRoU2Vn
bWVudChjLCBlbmQpOworICAgICAgICByZXR1cm4gaXNTaW5nbGVEb3RQYXRoU2VnbWVudChjKTsK
ICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgdm9pZCBjb25zdW1lU2luZ2xl
RG90UGF0aFNlZ21lbnQoU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3ImIGMsIGNvbnN0
IFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+CitzdGF0aWMgdm9pZCBjb25zdW1lU2luZ2xlRG90UGF0aFNlZ21lbnQo
Q29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4mIGMpCiB7Ci0gICAgQVNTRVJUKGlzU2lu
Z2xlRG90UGF0aFNlZ21lbnQoYywgZW5kKSk7CisgICAgQVNTRVJUKGlzU2luZ2xlRG90UGF0aFNl
Z21lbnQoYykpOwogICAgIGlmICgqYyA9PSAnLicpIHsKICAgICAgICAgKytjOwotICAgICAgICBp
ZiAoYyAhPSBlbmQpIHsKKyAgICAgICAgaWYgKCFjLmF0RW5kKCkpIHsKICAgICAgICAgICAgIGlm
ICgqYyA9PSAnLycgfHwgKmMgPT0gJ1xcJykKICAgICAgICAgICAgICAgICArK2M7CiAgICAgICAg
ICAgICBlbHNlCkBAIC00MzIsNyArNTE4LDcgQEAgc3RhdGljIHZvaWQgY29uc3VtZVNpbmdsZURv
dFBhdGhTZWdtZW50KAogICAgICAgICArK2M7CiAgICAgICAgIEFTU0VSVCh0b0FTQ0lJTG93ZXIo
KmMpID09IGRvdEFTQ0lJQ29kZVsxXSk7CiAgICAgICAgICsrYzsKLSAgICAgICAgaWYgKGMgIT0g
ZW5kKSB7CisgICAgICAgIGlmICghYy5hdEVuZCgpKSB7CiAgICAgICAgICAgICBpZiAoKmMgPT0g
Jy8nIHx8ICpjID09ICdcXCcpCiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgZWxz
ZQpAQCAtNDQxLDkgKzUyNywxMCBAQCBzdGF0aWMgdm9pZCBjb25zdW1lU2luZ2xlRG90UGF0aFNl
Z21lbnQoCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBjb25zdW1lRG91YmxlRG90UGF0aFNlZ21l
bnQoU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3ImIGMsIGNvbnN0IFN0cmluZ1ZpZXc6
OkNvZGVQb2ludHM6Okl0ZXJhdG9yIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+CitzdGF0aWMgdm9pZCBjb25zdW1lRG91YmxlRG90UGF0aFNlZ21lbnQoQ29kZVBvaW50SXRl
cmF0b3I8Q2hhcmFjdGVyVHlwZT4mIGMpCiB7Ci0gICAgQVNTRVJUKGlzRG91YmxlRG90UGF0aFNl
Z21lbnQoYywgZW5kKSk7CisgICAgQVNTRVJUKGlzRG91YmxlRG90UGF0aFNlZ21lbnQoYykpOwog
ICAgIGlmICgqYyA9PSAnLicpCiAgICAgICAgICsrYzsKICAgICBlbHNlIHsKQEAgLTQ1NCw3ICs1
NDEsNyBAQCBzdGF0aWMgdm9pZCBjb25zdW1lRG91YmxlRG90UGF0aFNlZ21lbnQoCiAgICAgICAg
IEFTU0VSVCh0b0FTQ0lJTG93ZXIoKmMpID09IGRvdEFTQ0lJQ29kZVsxXSk7CiAgICAgICAgICsr
YzsKICAgICB9Ci0gICAgY29uc3VtZVNpbmdsZURvdFBhdGhTZWdtZW50KGMsIGVuZCk7CisgICAg
Y29uc3VtZVNpbmdsZURvdFBhdGhTZWdtZW50KGMpOwogfQogCiB2b2lkIFVSTFBhcnNlcjo6cG9w
UGF0aCgpCkBAIC00NzAsMTEgKzU1NywxMyBAQCB2b2lkIFVSTFBhcnNlcjo6cG9wUGF0aCgpCiAg
ICAgbV9idWZmZXIucmVzaXplKG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoKTsKIH0KIAotVVJM
IFVSTFBhcnNlcjo6ZmFpbHVyZShjb25zdCBTdHJpbmcmIGlucHV0KQordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KK1VSTCBVUkxQYXJzZXI6OmZhaWx1cmUoY29uc3QgQ2hhcmFjdGVy
VHlwZSogaW5wdXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBVUkwgdXJsOwogICAgIHVybC5t
X2lzVmFsaWQgPSBmYWxzZTsKICAgICB1cmwubV9wcm90b2NvbElzSW5IVFRQRmFtaWx5ID0gZmFs
c2U7CisgICAgdXJsLm1fY2Fubm90QmVBQmFzZVVSTCA9IGZhbHNlOwogICAgIHVybC5tX3NjaGVt
ZUVuZCA9IDA7CiAgICAgdXJsLm1fdXNlclN0YXJ0ID0gMDsKICAgICB1cmwubV91c2VyRW5kID0g
MDsKQEAgLTQ4NSwyOCArNTc0LDM0IEBAIFVSTCBVUkxQYXJzZXI6OmZhaWx1cmUoY29uc3QgU3Ry
aW5nJiBpbnAKICAgICB1cmwubV9wYXRoRW5kID0gMDsKICAgICB1cmwubV9xdWVyeUVuZCA9IDA7
CiAgICAgdXJsLm1fZnJhZ21lbnRFbmQgPSAwOwotICAgIHVybC5tX3N0cmluZyA9IGlucHV0Owor
ICAgIHVybC5tX3N0cmluZyA9IFN0cmluZyhpbnB1dCwgbGVuZ3RoKTsKICAgICByZXR1cm4gdXJs
OwogfQogCiBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBTdHJpbmcmIGlucHV0LCBjb25zdCBV
UkwmIGJhc2UsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiB7Ci0gICAgTE9HKFVSTFBh
cnNlciwgIlBhcnNpbmcgVVJMIDwlcz4gYmFzZSA8JXM+IiwgaW5wdXQudXRmOCgpLmRhdGEoKSwg
YmFzZS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAoaW5wdXQuaXM4Qml0KCkpCisg
ICAgICAgIHJldHVybiBwYXJzZShpbnB1dC5jaGFyYWN0ZXJzOCgpLCBpbnB1dC5sZW5ndGgoKSwg
YmFzZSwgZW5jb2RpbmcpOworICAgIHJldHVybiBwYXJzZShpbnB1dC5jaGFyYWN0ZXJzMTYoKSwg
aW5wdXQubGVuZ3RoKCksIGJhc2UsIGVuY29kaW5nKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4KK1VSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUq
IGlucHV0LCBjb25zdCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFVSTCYgYmFzZSwgY29uc3QgVGV4
dEVuY29kaW5nJiBlbmNvZGluZykKK3sKKyAgICBMT0coVVJMUGFyc2VyLCAiUGFyc2luZyBVUkwg
PCVzPiBiYXNlIDwlcz4iLCBTdHJpbmcoaW5wdXQsIGxlbmd0aCkudXRmOCgpLmRhdGEoKSwgYmFz
ZS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICBtX3VybCA9IHsgfTsKICAgICBtX2J1ZmZl
ci5jbGVhcigpOwotICAgIG1fYnVmZmVyLnJlc2VydmVDYXBhY2l0eShpbnB1dC5sZW5ndGgoKSk7
CisgICAgbV9idWZmZXIucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CiAgICAgCiAgICAgYm9vbCBp
c1VURjhFbmNvZGluZyA9IGVuY29kaW5nID09IFVURjhFbmNvZGluZygpOwogICAgIFN0cmluZ0J1
aWxkZXIgcXVlcnlCdWZmZXI7CiAKLSAgICB1bnNpZ25lZCBlbmRJbmRleCA9IGlucHV0Lmxlbmd0
aCgpOworICAgIHVuc2lnbmVkIGVuZEluZGV4ID0gbGVuZ3RoOwogICAgIHdoaWxlIChlbmRJbmRl
eCAmJiBpc0MwQ29udHJvbE9yU3BhY2UoaW5wdXRbZW5kSW5kZXggLSAxXSkpCiAgICAgICAgIGVu
ZEluZGV4LS07Ci0gICAgYXV0byBjb2RlUG9pbnRzID0gYnVmZmVyVmlldyhpbnB1dCwgMCwgZW5k
SW5kZXgpLmNvZGVQb2ludHMoKTsKLSAgICBhdXRvIGMgPSBjb2RlUG9pbnRzLmJlZ2luKCk7Ci0g
ICAgYXV0byBlbmQgPSBjb2RlUG9pbnRzLmVuZCgpOwotICAgIGF1dG8gYXV0aG9yaXR5T3JIb3N0
QmVnaW4gPSBjb2RlUG9pbnRzLmJlZ2luKCk7Ci0gICAgd2hpbGUgKGMgIT0gZW5kICYmIGlzQzBD
b250cm9sT3JTcGFjZSgqYykpCisgICAgQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4g
YyhpbnB1dCwgMCwgZW5kSW5kZXgpOworICAgIENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5
cGU+IGF1dGhvcml0eU9ySG9zdEJlZ2luOworICAgIHdoaWxlICghYy5hdEVuZCgpICYmIGlzQzBD
b250cm9sT3JTcGFjZSgqYykpCiAgICAgICAgICsrYzsKICAgICBhdXRvIGJlZ2luQWZ0ZXJDb250
cm9sQW5kU3BhY2UgPSBjOwogICAgIApAQCAtNTM2LDcgKzYzMSw3IEBAIFVSTCBVUkxQYXJzZXI6
OnBhcnNlKGNvbnN0IFN0cmluZyYgaW5wdXQKICNkZWZpbmUgTE9HX0ZJTkFMX1NUQVRFKHgpIExP
RyhVUkxQYXJzZXIsICJGaW5hbCBTdGF0ZTogJXMiLCB4KQogCiAgICAgU3RhdGUgc3RhdGUgPSBT
dGF0ZTo6U2NoZW1lU3RhcnQ7Ci0gICAgd2hpbGUgKGMgIT0gZW5kKSB7CisgICAgd2hpbGUgKCFj
LmF0RW5kKCkpIHsKICAgICAgICAgaWYgKGlzVGFiT3JOZXdsaW5lKCpjKSkgewogICAgICAgICAg
ICAgKytjOwogICAgICAgICAgICAgY29udGludWU7CkBAIC01ODIsOSArNjc3LDkgQEAgVVJMIFVS
TFBhcnNlcjo6cGFyc2UoY29uc3QgU3RyaW5nJiBpbnB1dAogICAgICAgICAgICAgICAgICAgICBt
X3VybC5tX3BvcnRFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgICAgICAgICAgICAg
YXV0byBtYXliZVNsYXNoID0gYzsKICAgICAgICAgICAgICAgICAgICAgKyttYXliZVNsYXNoOwot
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAobWF5YmVTbGFzaCAhPSBlbmQgJiYgaXNUYWJPck5l
d2xpbmUoKm1heWJlU2xhc2gpKQorICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIW1heWJlU2xh
c2guYXRFbmQoKSAmJiBpc1RhYk9yTmV3bGluZSgqbWF5YmVTbGFzaCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICArK21heWJlU2xhc2g7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYXliZVNs
YXNoICE9IGVuZCAmJiAqbWF5YmVTbGFzaCA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFtYXliZVNsYXNoLmF0RW5kKCkgJiYgKm1heWJlU2xhc2ggPT0gJy8nKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoID0gbV91cmwubV91c2VyU3RhcnQgKyAx
OwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6UGF0aE9yQXV0aG9yaXR5
OwpAQCAtNjA1LDkgKzcwMCw5IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IFN0cmluZyYg
aW5wdXQKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICsrYzsKLSAgICAgICAgICAgIHdoaWxlIChjICE9IGVuZCAmJiBpc1RhYk9yTmV3bGluZSgqYykp
CisgICAgICAgICAgICB3aGlsZSAoIWMuYXRFbmQoKSAmJiBpc1RhYk9yTmV3bGluZSgqYykpCiAg
ICAgICAgICAgICAgICAgKytjOwotICAgICAgICAgICAgaWYgKGMgPT0gZW5kKSB7CisgICAgICAg
ICAgICBpZiAoYy5hdEVuZCgpKSB7CiAgICAgICAgICAgICAgICAgbV9idWZmZXIuY2xlYXIoKTsK
ICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpOb1NjaGVtZTsKICAgICAgICAgICAgICAg
ICBjID0gYmVnaW5BZnRlckNvbnRyb2xBbmRTcGFjZTsKQEAgLTYxNiw3ICs3MTEsNyBAQCBVUkwg
VVJMUGFyc2VyOjpwYXJzZShjb25zdCBTdHJpbmcmIGlucHV0CiAgICAgICAgIGNhc2UgU3RhdGU6
Ok5vU2NoZW1lOgogICAgICAgICAgICAgTE9HX1NUQVRFKCJOb1NjaGVtZSIpOwogICAgICAgICAg
ICAgaWYgKGJhc2UuaXNOdWxsKCkgfHwgKGJhc2UubV9jYW5ub3RCZUFCYXNlVVJMICYmICpjICE9
ICcjJykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXQpOworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0LCBsZW5ndGgpOwogICAgICAgICAgICAgaWYgKGJh
c2UubV9jYW5ub3RCZUFCYXNlVVJMICYmICpjID09ICcjJykgewogICAgICAgICAgICAgICAgIGNv
cHlVUkxQYXJ0c1VudGlsKGJhc2UsIFVSTFBhcnQ6OlF1ZXJ5RW5kKTsKICAgICAgICAgICAgICAg
ICBzdGF0ZSA9IFN0YXRlOjpGcmFnbWVudDsKQEAgLTYzNywxMCArNzMyLDEwIEBAIFVSTCBVUkxQ
YXJzZXI6OnBhcnNlKGNvbnN0IFN0cmluZyYgaW5wdXQKICAgICAgICAgICAgIGlmICgqYyA9PSAn
LycpIHsKICAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAgICAgICAg
ICAgICArK2M7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGMgIT0gZW5kICYmIGlzVGFiT3JOZXds
aW5lKCpjKSkKKyAgICAgICAgICAgICAgICB3aGlsZSAoIWMuYXRFbmQoKSAmJiBpc1RhYk9yTmV3
bGluZSgqYykpCiAgICAgICAgICAgICAgICAgICAgICsrYzsKLSAgICAgICAgICAgICAgICBpZiAo
YyA9PSBlbmQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0KTsKKyAg
ICAgICAgICAgICAgICBpZiAoYy5hdEVuZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKICAgICAgICAgICAgICAgICBpZiAoKmMgPT0gJy8nKSB7
CiAgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnLycpOwogICAgICAgICAgICAg
ICAgICAgICBzdGF0ZSA9IFN0YXRlOjpTcGVjaWFsQXV0aG9yaXR5SWdub3JlU2xhc2hlczsKQEAg
LTcwNSwxMCArODAwLDEwIEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IFN0cmluZyYgaW5w
dXQKICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgiLy8iKTsKICAgICAgICAgICAgIGlmICgq
YyA9PSAnLycgfHwgKmMgPT0gJ1xcJykgewogICAgICAgICAgICAgICAgICsrYzsKLSAgICAgICAg
ICAgICAgICB3aGlsZSAoYyAhPSBlbmQgJiYgaXNUYWJPck5ld2xpbmUoKmMpKQorICAgICAgICAg
ICAgICAgIHdoaWxlICghYy5hdEVuZCgpICYmIGlzVGFiT3JOZXdsaW5lKCpjKSkKICAgICAgICAg
ICAgICAgICAgICAgKytjOwotICAgICAgICAgICAgICAgIGlmIChjID09IGVuZCkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXQpOworICAgICAgICAgICAgICAgIGlmIChj
LmF0RW5kKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0LCBsZW5n
dGgpOwogICAgICAgICAgICAgICAgIGlmICgqYyA9PSAnLycgfHwgKmMgPT0gJ1xcJykKICAgICAg
ICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgfQpAQCAtNzI4LDkgKzgyMyw5IEBAIFVS
TCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IFN0cmluZyYgaW5wdXQKICAgICAgICAgICAgIExPR19T
VEFURSgiQXV0aG9yaXR5T3JIb3N0Iik7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
aWYgKCpjID09ICdAJykgewotICAgICAgICAgICAgICAgICAgICBwYXJzZUF1dGhvcml0eShhdXRo
b3JpdHlPckhvc3RCZWdpbiwgYyk7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQXV0aG9yaXR5
KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+KGF1dGhvcml0eU9ySG9zdEJlZ2luLCBj
KSk7CiAgICAgICAgICAgICAgICAgICAgICsrYzsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KGMgIT0gZW5kICYmIGlzVGFiT3JOZXdsaW5lKCpjKSkKKyAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKCFjLmF0RW5kKCkgJiYgaXNUYWJPck5ld2xpbmUoKmMpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgKytjOwogICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlPckhvc3RCZWdpbiA9IGM7
CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6Okhvc3Q7CkBAIC03NDEsOCArODM2
LDggQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgU3RyaW5nJiBpbnB1dAogICAgICAgICAg
ICAgICAgIGlmIChpc1NsYXNoIHx8ICpjID09ICc/JyB8fCAqYyA9PSAnIycpIHsKICAgICAgICAg
ICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CiAgICAgICAg
ICAgICAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3VzZXJFbmQ7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghcGFyc2VIb3N0KGF1dGhvcml0eU9ySG9zdEJlZ2luLCBjKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0KTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFwYXJzZUhvc3QoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlw
ZT4oYXV0aG9yaXR5T3JIb3N0QmVnaW4sIGMpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWlsdXJlKGlucHV0LCBsZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWlz
U2xhc2gpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnLycpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBtX2J1
ZmZlci5sZW5ndGgoKTsKQEAgLTc1OCw4ICs4NTMsOCBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShj
b25zdCBTdHJpbmcmIGlucHV0CiAgICAgICAgIGNhc2UgU3RhdGU6Okhvc3Q6CiAgICAgICAgICAg
ICBMT0dfU1RBVEUoIkhvc3QiKTsKICAgICAgICAgICAgIGlmICgqYyA9PSAnLycgfHwgKmMgPT0g
Jz8nIHx8ICpjID09ICcjJykgewotICAgICAgICAgICAgICAgIGlmICghcGFyc2VIb3N0KGF1dGhv
cml0eU9ySG9zdEJlZ2luLCBjKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUo
aW5wdXQpOworICAgICAgICAgICAgICAgIGlmICghcGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhdG9y
PENoYXJhY3RlclR5cGU+KGF1dGhvcml0eU9ySG9zdEJlZ2luLCBjKSkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0LCBsZW5ndGgpOwogICAgICAgICAgICAgICAgIHN0
YXRlID0gU3RhdGU6OlBhdGg7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CkBAIC04MDYsNyArOTAxLDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgU3RyaW5nJiBp
bnB1dAogICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFiYXNlLmlzTnVsbCgpICYmIGJh
c2UucHJvdG9jb2xJcygiZmlsZSIpICYmIHNob3VsZENvcHlGaWxlVVJMKGMsIGVuZCkpCisgICAg
ICAgICAgICAgICAgaWYgKCFiYXNlLmlzTnVsbCgpICYmIGJhc2UucHJvdG9jb2xJcygiZmlsZSIp
ICYmIHNob3VsZENvcHlGaWxlVVJMKGMpKQogICAgICAgICAgICAgICAgICAgICBjb3B5VVJMUGFy
dHNVbnRpbChiYXNlLCBVUkxQYXJ0OjpQYXRoQWZ0ZXJMYXN0U2xhc2gpOwogICAgICAgICAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoIi8vLyIpOwpA
QCAtODM1LDEyICs5MzAsMTcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgU3RyaW5nJiBp
bnB1dAogICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OkZpbGVIb3N0OwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFiYXNlLmlzTnVs
bCgpICYmIGJhc2UucHJvdG9jb2woKSA9PSAiZmlsZSIpIHsKKyAgICAgICAgICAgIGlmICghYmFz
ZS5pc051bGwoKSAmJiBiYXNlLnByb3RvY29sSXMoImZpbGUiKSkgeworICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBUaGlzIFN0cmluZyBjb3B5IGlzIHVubmVjZXNzYXJ5LgogICAgICAgICAgICAg
ICAgIFN0cmluZyBiYXNlUGF0aCA9IGJhc2UucGF0aCgpOwotICAgICAgICAgICAgICAgIGF1dG8g
YmFzZVBhdGhDb2RlUG9pbnRzID0gU3RyaW5nVmlldyhiYXNlUGF0aCkuY29kZVBvaW50cygpOwot
ICAgICAgICAgICAgICAgIGlmIChiYXNlUGF0aC5sZW5ndGgoKSA+PSAyICYmIGlzV2luZG93c0Ry
aXZlTGV0dGVyKGJhc2VQYXRoQ29kZVBvaW50cy5iZWdpbigpLCBiYXNlUGF0aENvZGVQb2ludHMu
ZW5kKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZChiYXNlUGF0aFsw
XSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZChiYXNlUGF0aFsxXSk7Cisg
ICAgICAgICAgICAgICAgaWYgKGJhc2VQYXRoLmxlbmd0aCgpID49IDIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYm9vbCB3aW5kb3dzUXVpcmsgPSBiYXNlUGF0aC5pczhCaXQoKQorICAgICAgICAg
ICAgICAgICAgICAgICAgPyBpc1dpbmRvd3NEcml2ZUxldHRlcihDb2RlUG9pbnRJdGVyYXRvcjxM
Q2hhcj4oYmFzZVBhdGguY2hhcmFjdGVyczgoKSwgMCwgYmFzZVBhdGgubGVuZ3RoKCkpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgOiBpc1dpbmRvd3NEcml2ZUxldHRlcihDb2RlUG9pbnRJdGVy
YXRvcjxVQ2hhcj4oYmFzZVBhdGguY2hhcmFjdGVyczE2KCksIDAsIGJhc2VQYXRoLmxlbmd0aCgp
KSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3dzUXVpcmspIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZChiYXNlUGF0aFswXSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoYmFzZVBhdGhbMV0pOworICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6
OlBhdGg7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC04ODMsOCArOTgzLDggQEAgVVJMIFVS
TFBhcnNlcjo6cGFyc2UoY29uc3QgU3RyaW5nJiBpbnB1dAogICAgICAgICAgICAgICAgICAgICBz
dGF0ZSA9IFN0YXRlOjpQYXRoOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXJzZUhvc3QoYXV0aG9yaXR5T3JIb3N0
QmVnaW4sIGMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFwYXJzZUhvc3QoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVy
VHlwZT4oYXV0aG9yaXR5T3JIb3N0QmVnaW4sIGMpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhaWx1cmUoaW5wdXQsIGxlbmd0aCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgaWYgKGJ1ZmZlclZpZXcobV9idWZmZXIsIG1fdXJsLm1fcGFzc3dvcmRFbmQsIG1fYnVm
ZmVyLmxlbmd0aCgpIC0gbV91cmwubV9wYXNzd29yZEVuZCkgPT0gImxvY2FsaG9zdCIpICB7CiAg
ICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLnJlc2l6ZShtX3VybC5tX3Bhc3N3b3JkRW5kKTsK
QEAgLTkxNCwxMyArMTAxNCwxMyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBTdHJpbmcm
IGlucHV0CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAobV9idWZmZXIubGVuZ3RoKCkgJiYgbV9idWZmZXJbbV9idWZmZXIubGVuZ3RoKCkgLSAx
XSA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNEb3VibGVEb3RQYXRoU2VnbWVudChj
LCBlbmQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN1bWVEb3VibGVEb3RQYXRoU2VnbWVu
dChjLCBlbmQpOworICAgICAgICAgICAgICAgIGlmIChpc0RvdWJsZURvdFBhdGhTZWdtZW50KGMp
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVEb3VibGVEb3RQYXRoU2VnbWVudChjKTsK
ICAgICAgICAgICAgICAgICAgICAgcG9wUGF0aCgpOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG1fYnVmZmVyW21fYnVm
ZmVyLmxlbmd0aCgpIC0gMV0gPT0gJy8nICYmIGlzU2luZ2xlRG90UGF0aFNlZ21lbnQoYywgZW5k
KSkgewotICAgICAgICAgICAgICAgICAgICBjb25zdW1lU2luZ2xlRG90UGF0aFNlZ21lbnQoYywg
ZW5kKTsKKyAgICAgICAgICAgICAgICBpZiAobV9idWZmZXJbbV9idWZmZXIubGVuZ3RoKCkgLSAx
XSA9PSAnLycgJiYgaXNTaW5nbGVEb3RQYXRoU2VnbWVudChjKSkgeworICAgICAgICAgICAgICAg
ICAgICBjb25zdW1lU2luZ2xlRG90UGF0aFNlZ21lbnQoYyk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTkzNSw3ICsxMDM1
LDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgU3RyaW5nJiBpbnB1dAogICAgICAgICAg
ICAgICAgIHN0YXRlID0gU3RhdGU6OkZyYWdtZW50OwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlzUGVyY2VudEVuY29kZWREb3QoYywgZW5k
KSkgeworICAgICAgICAgICAgaWYgKGlzUGVyY2VudEVuY29kZWREb3QoYykpIHsKICAgICAgICAg
ICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJy4nKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoKmMg
PT0gJyUnKTsKICAgICAgICAgICAgICAgICArK2M7CkBAIC05OTAsNyArMTA5MCw3IEBAIFVSTCBV
UkxQYXJzZXI6OnBhcnNlKGNvbnN0IFN0cmluZyYgaW5wdXQKICAgICAgICAgTE9HX0ZJTkFMX1NU
QVRFKCJTY2hlbWVTdGFydCIpOwogICAgICAgICBpZiAoIW1fYnVmZmVyLmxlbmd0aCgpICYmICFi
YXNlLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIGJhc2U7Ci0gICAgICAgIHJldHVybiBm
YWlsdXJlKGlucHV0KTsKKyAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXQsIGxlbmd0aCk7CiAg
ICAgY2FzZSBTdGF0ZTo6U2NoZW1lOgogICAgICAgICBMT0dfRklOQUxfU1RBVEUoIlNjaGVtZSIp
OwogICAgICAgICBicmVhazsKQEAgLTEwMzIsNyArMTEzMiw3IEBAIFVSTCBVUkxQYXJzZXI6OnBh
cnNlKGNvbnN0IFN0cmluZyYgaW5wdXQKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTdGF0ZTo6
U3BlY2lhbEF1dGhvcml0eUlnbm9yZVNsYXNoZXM6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgi
U3BlY2lhbEF1dGhvcml0eUlnbm9yZVNsYXNoZXMiKTsKLSAgICAgICAgcmV0dXJuIGZhaWx1cmUo
aW5wdXQpOworICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKICAgICBjYXNl
IFN0YXRlOjpBdXRob3JpdHlPckhvc3Q6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgiQXV0aG9y
aXR5T3JIb3N0Iik7CiAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fYnVmZmVyLmxlbmd0aCgp
OwpAQCAtMTA0MSw4ICsxMTQxLDggQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgU3RyaW5n
JiBpbnB1dAogICAgIGNhc2UgU3RhdGU6Okhvc3Q6CiAgICAgICAgIGlmIChzdGF0ZSA9PSBTdGF0
ZTo6SG9zdCkKICAgICAgICAgICAgIExPR19GSU5BTF9TVEFURSgiSG9zdCIpOwotICAgICAgICBp
ZiAoIXBhcnNlSG9zdChhdXRob3JpdHlPckhvc3RCZWdpbiwgZW5kKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWlsdXJlKGlucHV0KTsKKyAgICAgICAgaWYgKCFwYXJzZUhvc3QoYXV0aG9yaXR5T3JI
b3N0QmVnaW4pKQorICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXQsIGxlbmd0aCk7CiAg
ICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnLycpOwogICAgICAgICBtX3VybC5tX3BhdGhFbmQgPSBt
X3VybC5tX3BvcnRFbmQgKyAxOwogICAgICAgICBtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaCA9
IG1fdXJsLm1fcGF0aEVuZDsKQEAgLTEwOTUsOCArMTE5NSw4IEBAIFVSTCBVUkxQYXJzZXI6OnBh
cnNlKGNvbnN0IFN0cmluZyYgaW5wdXQKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKCFwYXJzZUhvc3QoYXV0aG9yaXR5T3JIb3N0QmVnaW4sIGMpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXQpOworICAgICAgICBpZiAoIXBhcnNlSG9zdChDb2Rl
UG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPihhdXRob3JpdHlPckhvc3RCZWdpbiwgYykpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXQsIGxlbmd0aCk7CiAgICAgICAgIAogICAg
ICAgICBpZiAoYnVmZmVyVmlldyhtX2J1ZmZlciwgbV91cmwubV9wYXNzd29yZEVuZCwgbV9idWZm
ZXIubGVuZ3RoKCkgLSBtX3VybC5tX3Bhc3N3b3JkRW5kKSA9PSAibG9jYWxob3N0IikgIHsKICAg
ICAgICAgICAgIG1fYnVmZmVyLnJlc2l6ZShtX3VybC5tX3Bhc3N3b3JkRW5kKTsKQEAgLTExNDMs
MTggKzEyNDMsMTkgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgU3RyaW5nJiBpbnB1dAog
ICAgIHJldHVybiBtX3VybDsKIH0KIAotdm9pZCBVUkxQYXJzZXI6OnBhcnNlQXV0aG9yaXR5KFN0
cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yJiBpdGVyYXRvciwgY29uc3QgU3RyaW5nVmll
dzo6Q29kZVBvaW50czo6SXRlcmF0b3ImIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Cit2b2lkIFVSTFBhcnNlcjo6cGFyc2VBdXRob3JpdHkoQ29kZVBvaW50SXRlcmF0b3I8
Q2hhcmFjdGVyVHlwZT4gaXRlcmF0b3IpCiB7Ci0gICAgaWYgKGl0ZXJhdG9yID09IGVuZCkgewor
ICAgIGlmIChpdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1f
YnVmZmVyLmxlbmd0aCgpOwogICAgICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91
c2VyRW5kOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGZvciAoOyBpdGVyYXRvciAhPSBl
bmQ7ICsraXRlcmF0b3IpIHsKKyAgICBmb3IgKDsgIWl0ZXJhdG9yLmF0RW5kKCk7ICsraXRlcmF0
b3IpIHsKICAgICAgICAgaWYgKCppdGVyYXRvciA9PSAnOicpIHsKICAgICAgICAgICAgICsraXRl
cmF0b3I7CiAgICAgICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsK
LSAgICAgICAgICAgIGlmIChpdGVyYXRvciA9PSBlbmQpIHsKKyAgICAgICAgICAgIGlmIChpdGVy
YXRvci5hdEVuZCgpKSB7CiAgICAgICAgICAgICAgICAgbV91cmwubV9wYXNzd29yZEVuZCA9IG1f
dXJsLm1fdXNlckVuZDsKICAgICAgICAgICAgICAgICBpZiAobV91cmwubV91c2VyRW5kID4gbV91
cmwubV91c2VyU3RhcnQpCiAgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnQCcp
OwpAQCAtMTE2NSw3ICsxMjY2LDcgQEAgdm9pZCBVUkxQYXJzZXI6OnBhcnNlQXV0aG9yaXR5KFN0
cmluZ1ZpZQogICAgICAgICB9CiAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgqaXRlcmF0b3IpOwog
ICAgIH0KLSAgICBmb3IgKDsgaXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJhdG9yKQorICAgIGZvciAo
OyAhaXRlcmF0b3IuYXRFbmQoKTsgKytpdGVyYXRvcikKICAgICAgICAgbV9idWZmZXIuYXBwZW5k
KCppdGVyYXRvcik7CiAgICAgbV91cmwubV9wYXNzd29yZEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgp
OwogICAgIGlmICghbV91cmwubV91c2VyRW5kKQpAQCAtMTI1Miw3ICsxMzUzLDggQEAgc3RhdGlj
IHZvaWQgc2VyaWFsaXplSVB2NihzdGQ6OmFycmF5PHVpbgogICAgIGJ1ZmZlci5hcHBlbmQoJ10n
KTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPHVpbnQzMl90PiBwYXJzZUlQdjROdW1iZXIoU3RyaW5n
Vmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3ImIGl0ZXJhdG9yLCBjb25zdCBTdHJpbmdWaWV3OjpD
b2RlUG9pbnRzOjpJdGVyYXRvciYgZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4KK3N0YXRpYyBPcHRpb25hbDx1aW50MzJfdD4gcGFyc2VJUHY0TnVtYmVyKENvZGVQb2ludEl0
ZXJhdG9yPENoYXJhY3RlclR5cGU+JiBpdGVyYXRvcikKIHsKICAgICAvLyBGSVhNRTogQ2hlY2sg
Zm9yIG92ZXJmbG93LgogICAgIGVudW0gY2xhc3MgU3RhdGUgOiB1aW50OF90IHsKQEAgLTEyNjQs
NyArMTM2Niw3IEBAIHN0YXRpYyBPcHRpb25hbDx1aW50MzJfdD4gcGFyc2VJUHY0TnVtYmUKICAg
ICB9OwogICAgIFN0YXRlIHN0YXRlID0gU3RhdGU6OlVua25vd25CYXNlOwogICAgIHVpbnQzMl90
IHZhbHVlID0gMDsKLSAgICB3aGlsZSAoaXRlcmF0b3IgIT0gZW5kKSB7CisgICAgd2hpbGUgKCFp
dGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgIGlmICgqaXRlcmF0b3IgPT0gJy4nKSB7CiAgICAg
ICAgICAgICArK2l0ZXJhdG9yOwogICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwpAQCAtMTMxOSwx
NCArMTQyMSwxNSBAQCBzdGF0aWMgdWludDY0X3QgcG93MjU2KHNpemVfdCBleHBvbmVudCkKICAg
ICByZXR1cm4gdmFsdWVzW2V4cG9uZW50XTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPHVpbnQzMl90
PiBwYXJzZUlQdjRIb3N0KFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yIGl0ZXJhdG9y
LCBjb25zdCBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciYgZW5kKQordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBPcHRpb25hbDx1aW50MzJfdD4gcGFyc2VJ
UHY0SG9zdChDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiBpdGVyYXRvcikKIHsKICAg
ICBWZWN0b3I8dWludDMyX3QsIDQ+IGl0ZW1zOwogICAgIGl0ZW1zLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoNCk7Ci0gICAgd2hpbGUgKGl0ZXJhdG9yICE9IGVuZCkgeworICAgIHdoaWxlICghaXRl
cmF0b3IuYXRFbmQoKSkgewogICAgICAgICBpZiAoaXRlbXMuc2l6ZSgpID49IDQpCiAgICAgICAg
ICAgICByZXR1cm4gTnVsbG9wdDsKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IHBhcnNlSVB2NE51
bWJlcihpdGVyYXRvciwgZW5kKSkKKyAgICAgICAgaWYgKGF1dG8gaXRlbSA9IHBhcnNlSVB2NE51
bWJlcihpdGVyYXRvcikpCiAgICAgICAgICAgICBpdGVtcy5hcHBlbmQoaXRlbS52YWx1ZSgpKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CkBAIC0xMzQ4LDEwICsx
NDUxLDExIEBAIHN0YXRpYyBPcHRpb25hbDx1aW50MzJfdD4gcGFyc2VJUHY0SG9zdCgKICAgICAg
ICAgaXB2NCArPSBpdGVtc1tjb3VudGVyXSAqIHBvdzI1NigzIC0gY291bnRlcik7CiAgICAgcmV0
dXJuIGlwdjQ7CiB9Ci0KLXN0YXRpYyBPcHRpb25hbDxzdGQ6OmFycmF5PHVpbnQxNl90LCA4Pj4g
cGFyc2VJUHY2SG9zdChTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciBjLCBTdHJpbmdW
aWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciBlbmQpCisgICAgCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPgorc3RhdGljIE9wdGlvbmFsPHN0ZDo6YXJyYXk8dWludDE2X3QsIDg+PiBw
YXJzZUlQdjZIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+IGMpCiB7Ci0gICAg
aWYgKGMgPT0gZW5kKQorICAgIGlmIChjLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0
OwogCiAgICAgc3RkOjphcnJheTx1aW50MTZfdCwgOD4gYWRkcmVzcyA9IHt7MCwgMCwgMCwgMCwg
MCwgMCwgMCwgMH19OwpAQCAtMTM2MCw3ICsxNDY0LDcgQEAgc3RhdGljIE9wdGlvbmFsPHN0ZDo6
YXJyYXk8dWludDE2X3QsIDg+PgogCiAgICAgaWYgKCpjID09ICc6JykgewogICAgICAgICArK2M7
Ci0gICAgICAgIGlmIChjID09IGVuZCkKKyAgICAgICAgaWYgKGMuYXRFbmQoKSkKICAgICAgICAg
ICAgIHJldHVybiBOdWxsb3B0OwogICAgICAgICBpZiAoKmMgIT0gJzonKQogICAgICAgICAgICAg
cmV0dXJuIE51bGxvcHQ7CkBAIC0xMzY5LDcgKzE0NzMsNyBAQCBzdGF0aWMgT3B0aW9uYWw8c3Rk
OjphcnJheTx1aW50MTZfdCwgOD4+CiAgICAgICAgIGNvbXByZXNzUG9pbnRlciA9IHBpZWNlUG9p
bnRlcjsKICAgICB9CiAgICAgCi0gICAgd2hpbGUgKGMgIT0gZW5kKSB7CisgICAgd2hpbGUgKCFj
LmF0RW5kKCkpIHsKICAgICAgICAgaWYgKHBpZWNlUG9pbnRlciA9PSA4KQogICAgICAgICAgICAg
cmV0dXJuIE51bGxvcHQ7CiAgICAgICAgIGlmICgqYyA9PSAnOicpIHsKQEAgLTEzODIsNyArMTQ4
Niw3IEBAIHN0YXRpYyBPcHRpb25hbDxzdGQ6OmFycmF5PHVpbnQxNl90LCA4Pj4KICAgICAgICAg
fQogICAgICAgICB1aW50MTZfdCB2YWx1ZSA9IDA7CiAgICAgICAgIGZvciAoc2l6ZV90IGxlbmd0
aCA9IDA7IGxlbmd0aCA8IDQ7IGxlbmd0aCsrKSB7Ci0gICAgICAgICAgICBpZiAoYyA9PSBlbmQp
CisgICAgICAgICAgICBpZiAoYy5hdEVuZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQoKmMpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMTM5MCwxOCArMTQ5NCwxOCBAQCBzdGF0aWMgT3B0aW9uYWw8c3RkOjphcnJheTx1aW50
MTZfdCwgOD4+CiAgICAgICAgICAgICArK2M7CiAgICAgICAgIH0KICAgICAgICAgYWRkcmVzc1tw
aWVjZVBvaW50ZXIrK10gPSB2YWx1ZTsKLSAgICAgICAgaWYgKGMgPT0gZW5kKQorICAgICAgICBp
ZiAoYy5hdEVuZCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmICgqYyAhPSAnOicp
CiAgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICAgICAgKytjOwogICAgIH0KICAgICAK
LSAgICBpZiAoYyAhPSBlbmQpIHsKKyAgICBpZiAoIWMuYXRFbmQoKSkgewogICAgICAgICBpZiAo
cGllY2VQb2ludGVyID4gNikKICAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgICAgICBz
aXplX3QgZG90c1NlZW4gPSAwOwotICAgICAgICB3aGlsZSAoYyAhPSBlbmQpIHsKKyAgICAgICAg
d2hpbGUgKCFjLmF0RW5kKCkpIHsKICAgICAgICAgICAgIE9wdGlvbmFsPHVpbnQxNl90PiB2YWx1
ZTsKICAgICAgICAgICAgIGlmICghaXNBU0NJSURpZ2l0KCpjKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gTnVsbG9wdDsKQEAgLTE0MTQsNyArMTUxOCw3IEBAIHN0YXRpYyBPcHRpb25hbDxzdGQ6
OmFycmF5PHVpbnQxNl90LCA4Pj4KICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlID0gdmFsdWUudmFsdWUoKSAqIDEwICsgbnVtYmVyOwogICAgICAgICAgICAg
ICAgICsrYzsKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSBlbmQpCisgICAgICAgICAgICAgICAg
aWYgKGMuYXRFbmQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkgPiAyNTUpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBOdWxsb3B0OwpAQCAtMTQyNCw5ICsxNTI4LDkgQEAgc3RhdGljIE9wdGlvbmFsPHN0
ZDo6YXJyYXk8dWludDE2X3QsIDg+PgogICAgICAgICAgICAgYWRkcmVzc1twaWVjZVBvaW50ZXJd
ID0gYWRkcmVzc1twaWVjZVBvaW50ZXJdICogMHgxMDAgKyB2YWx1ZS52YWx1ZU9yKDApOwogICAg
ICAgICAgICAgaWYgKGRvdHNTZWVuID09IDEgfHwgZG90c1NlZW4gPT0gMykKICAgICAgICAgICAg
ICAgICBwaWVjZVBvaW50ZXIrKzsKLSAgICAgICAgICAgIGlmIChjICE9IGVuZCkKKyAgICAgICAg
ICAgIGlmICghYy5hdEVuZCgpKQogICAgICAgICAgICAgICAgICsrYzsKLSAgICAgICAgICAgIGlm
IChkb3RzU2VlbiA9PSAzICYmIGMgIT0gZW5kKQorICAgICAgICAgICAgaWYgKGRvdHNTZWVuID09
IDMgJiYgIWMuYXRFbmQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICAg
ICAgICAgIGRvdHNTZWVuKys7CiAgICAgICAgIH0KQEAgLTE1MTMsMTUgKzE2MTcsMTYgQEAgc3Rh
dGljIGJvb2wgaGFzSW52YWxpZERvbWFpbkNoYXJhY3RlcihjbwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotYm9vbCBVUkxQYXJzZXI6OnBhcnNlUG9ydChTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJ
dGVyYXRvciYgaXRlcmF0b3IsIGNvbnN0IFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9y
JiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorYm9vbCBVUkxQYXJzZXI6
OnBhcnNlUG9ydChDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiYgaXRlcmF0b3IpCiB7
CiAgICAgdWludDMyX3QgcG9ydCA9IDA7Ci0gICAgaWYgKGl0ZXJhdG9yID09IGVuZCkgeworICAg
IGlmIChpdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgIG1fdXJsLm1fcG9ydEVuZCA9IG1fYnVm
ZmVyLmxlbmd0aCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgbV9idWZmZXIu
YXBwZW5kKCc6Jyk7Ci0gICAgZm9yICg7IGl0ZXJhdG9yICE9IGVuZDsgKytpdGVyYXRvcikgewor
ICAgIGZvciAoOyAhaXRlcmF0b3IuYXRFbmQoKTsgKytpdGVyYXRvcikgewogICAgICAgICBpZiAo
aXNUYWJPck5ld2xpbmUoKml0ZXJhdG9yKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBpZiAoaXNBU0NJSURpZ2l0KCppdGVyYXRvcikpIHsKQEAgLTE1NDIsMjMgKzE2NDcsMjQgQEAg
Ym9vbCBVUkxQYXJzZXI6OnBhcnNlUG9ydChTdHJpbmdWaWV3OjpDbwogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIFVSTFBhcnNlcjo6cGFyc2VIb3N0KFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6
Okl0ZXJhdG9yJiBpdGVyYXRvciwgY29uc3QgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0
b3ImIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Citib29sIFVSTFBhcnNl
cjo6cGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+IGl0ZXJhdG9yKQog
ewotICAgIGlmIChpdGVyYXRvciA9PSBlbmQpCisgICAgaWYgKGl0ZXJhdG9yLmF0RW5kKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoKml0ZXJhdG9yID09ICdbJykgewogICAgICAg
ICArK2l0ZXJhdG9yOwogICAgICAgICBhdXRvIGlwdjZFbmQgPSBpdGVyYXRvcjsKLSAgICAgICAg
d2hpbGUgKGlwdjZFbmQgIT0gZW5kICYmICppcHY2RW5kICE9ICddJykKKyAgICAgICAgd2hpbGUg
KCFpcHY2RW5kLmF0RW5kKCkgJiYgKmlwdjZFbmQgIT0gJ10nKQogICAgICAgICAgICAgKytpcHY2
RW5kOwotICAgICAgICBpZiAoYXV0byBhZGRyZXNzID0gcGFyc2VJUHY2SG9zdChpdGVyYXRvciwg
aXB2NkVuZCkpIHsKKyAgICAgICAgaWYgKGF1dG8gYWRkcmVzcyA9IHBhcnNlSVB2Nkhvc3QoQ29k
ZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4oaXRlcmF0b3IsIGlwdjZFbmQpKSkgewogICAg
ICAgICAgICAgc2VyaWFsaXplSVB2NihhZGRyZXNzLnZhbHVlKCksIG1fYnVmZmVyKTsKICAgICAg
ICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOwotICAgICAgICAgICAg
aWYgKGlwdjZFbmQgIT0gZW5kKSB7CisgICAgICAgICAgICBpZiAoIWlwdjZFbmQuYXRFbmQoKSkg
ewogICAgICAgICAgICAgICAgICsraXB2NkVuZDsKLSAgICAgICAgICAgICAgICBpZiAoaXB2NkVu
ZCAhPSBlbmQgJiYgKmlwdjZFbmQgPT0gJzonKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpcHY2
RW5kLmF0RW5kKCkgJiYgKmlwdjZFbmQgPT0gJzonKSB7CiAgICAgICAgICAgICAgICAgICAgICsr
aXB2NkVuZDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlUG9ydChpcHY2RW5kLCBl
bmQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VQb3J0KGlwdjZFbmQpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2J1ZmZl
ci5sZW5ndGgoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE1NjksMzMgKzE2
NzUsMzMgQEAgYm9vbCBVUkxQYXJzZXI6OnBhcnNlSG9zdChTdHJpbmdWaWV3OjpDbwogICAgIAog
ICAgIGlmICghbV9ob3N0SGFzUGVyY2VudE9yTm9uQVNDSUkpIHsKICAgICAgICAgYXV0byBob3N0
SXRlcmF0b3IgPSBpdGVyYXRvcjsKLSAgICAgICAgZm9yICg7IGl0ZXJhdG9yICE9IGVuZDsgKytp
dGVyYXRvcikgeworICAgICAgICBmb3IgKDsgIWl0ZXJhdG9yLmF0RW5kKCk7ICsraXRlcmF0b3Ip
IHsKICAgICAgICAgICAgIGlmIChpc1RhYk9yTmV3bGluZSgqaXRlcmF0b3IpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCppdGVyYXRvciA9PSAnOicpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGF1dG8gYWRkcmVzcyA9
IHBhcnNlSVB2NEhvc3QoaG9zdEl0ZXJhdG9yLCBpdGVyYXRvcikpIHsKKyAgICAgICAgaWYgKGF1
dG8gYWRkcmVzcyA9IHBhcnNlSVB2NEhvc3QoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlw
ZT4oaG9zdEl0ZXJhdG9yLCBpdGVyYXRvcikpKSB7CiAgICAgICAgICAgICBzZXJpYWxpemVJUHY0
KGFkZHJlc3MudmFsdWUoKSwgbV9idWZmZXIpOwogICAgICAgICAgICAgbV91cmwubV9ob3N0RW5k
ID0gbV9idWZmZXIubGVuZ3RoKCk7Ci0gICAgICAgICAgICBpZiAoaXRlcmF0b3IgPT0gZW5kKSB7
CisgICAgICAgICAgICBpZiAoaXRlcmF0b3IuYXRFbmQoKSkgewogICAgICAgICAgICAgICAgIG1f
dXJsLm1fcG9ydEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOwogICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgKytpdGVyYXRvcjsKLSAgICAgICAg
ICAgIHJldHVybiBwYXJzZVBvcnQoaXRlcmF0b3IsIGVuZCk7CisgICAgICAgICAgICByZXR1cm4g
cGFyc2VQb3J0KGl0ZXJhdG9yKTsKICAgICAgICAgfQogICAgICAgICBmb3IgKDsgaG9zdEl0ZXJh
dG9yICE9IGl0ZXJhdG9yOyArK2hvc3RJdGVyYXRvcikgewogICAgICAgICAgICAgaWYgKCFpc1Rh
Yk9yTmV3bGluZSgqaG9zdEl0ZXJhdG9yKSkKICAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBl
bmQodG9BU0NJSUxvd2VyKCpob3N0SXRlcmF0b3IpKTsKICAgICAgICAgfQogICAgICAgICBtX3Vy
bC5tX2hvc3RFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKLSAgICAgICAgaWYgKGhvc3RJdGVyYXRv
ciAhPSBlbmQpIHsKKyAgICAgICAgaWYgKCFob3N0SXRlcmF0b3IuYXRFbmQoKSkgewogICAgICAg
ICAgICAgQVNTRVJUKCpob3N0SXRlcmF0b3IgPT0gJzonKTsKICAgICAgICAgICAgICsraG9zdEl0
ZXJhdG9yOwotICAgICAgICAgICAgd2hpbGUgKGhvc3RJdGVyYXRvciAhPSBlbmQgJiYgaXNUYWJP
ck5ld2xpbmUoKmhvc3RJdGVyYXRvcikpCisgICAgICAgICAgICB3aGlsZSAoIWhvc3RJdGVyYXRv
ci5hdEVuZCgpICYmIGlzVGFiT3JOZXdsaW5lKCpob3N0SXRlcmF0b3IpKQogICAgICAgICAgICAg
ICAgICsraG9zdEl0ZXJhdG9yOwotICAgICAgICAgICAgcmV0dXJuIHBhcnNlUG9ydChob3N0SXRl
cmF0b3IsIGVuZCk7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VQb3J0KGhvc3RJdGVyYXRvcik7
CiAgICAgICAgIH0KICAgICAgICAgbV91cmwubV9wb3J0RW5kID0gbV9idWZmZXIubGVuZ3RoKCk7
CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTYwMyw3ICsxNzA5LDcgQEAgYm9vbCBVUkxQYXJz
ZXI6OnBhcnNlSG9zdChTdHJpbmdWaWV3OjpDbwogCiAgICAgLy8gRklYTUU6IFdlIHByb2JhYmx5
IGRvbid0IG5lZWQgdG8gbWFrZSBzbyBtYW55IGJ1ZmZlcnMgYW5kIFN0cmluZyBjb3BpZXMuCiAg
ICAgU3RyaW5nQnVpbGRlciB1dGY4RW5jb2RlZDsKLSAgICBmb3IgKDsgaXRlcmF0b3IgIT0gZW5k
OyArK2l0ZXJhdG9yKSB7CisgICAgZm9yICg7ICFpdGVyYXRvci5hdEVuZCgpOyArK2l0ZXJhdG9y
KSB7CiAgICAgICAgIGlmIChpc1RhYk9yTmV3bGluZSgqaXRlcmF0b3IpKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIGlmICgqaXRlcmF0b3IgPT0gJzonKQpAQCAtMTYyMywyNyArMTcy
OSwyNyBAQCBib29sIFVSTFBhcnNlcjo6cGFyc2VIb3N0KFN0cmluZ1ZpZXc6OkNvCiAgICAgYXV0
byBhc2NpaURvbWFpbiA9IGRvbWFpblRvQVNDSUkoZG9tYWluKTsKICAgICBpZiAoIWFzY2lpRG9t
YWluIHx8IGhhc0ludmFsaWREb21haW5DaGFyYWN0ZXIoYXNjaWlEb21haW4udmFsdWUoKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSRUxFQVNFX0FTU0VSVChhc2NpaURvbWFpbi52YWx1
ZSgpLmlzOEJpdCgpKTsKICAgICAKLSAgICBhdXRvIGFzY2lpRG9tYWluQ29kZVBvaW50cyA9IFN0
cmluZ1ZpZXcoYXNjaWlEb21haW4udmFsdWUoKSkuY29kZVBvaW50cygpOwotICAgIGlmIChhdXRv
IGFkZHJlc3MgPSBwYXJzZUlQdjRIb3N0KGFzY2lpRG9tYWluQ29kZVBvaW50cy5iZWdpbigpLCBh
c2NpaURvbWFpbkNvZGVQb2ludHMuZW5kKCkpKSB7CisgICAgaWYgKGF1dG8gYWRkcmVzcyA9IHBh
cnNlSVB2NEhvc3QoQ29kZVBvaW50SXRlcmF0b3I8TENoYXI+KGFzY2lpRG9tYWluLnZhbHVlKCku
Y2hhcmFjdGVyczgoKSwgMCwgYXNjaWlEb21haW4udmFsdWUoKS5sZW5ndGgoKSkpKSB7CiAgICAg
ICAgIHNlcmlhbGl6ZUlQdjQoYWRkcmVzcy52YWx1ZSgpLCBtX2J1ZmZlcik7CiAgICAgICAgIG1f
dXJsLm1faG9zdEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOwotICAgICAgICBpZiAoaXRlcmF0b3Ig
PT0gZW5kKSB7CisgICAgICAgIGlmIChpdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgICAgICBt
X3VybC5tX3BvcnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAgICAgICAgICsraXRlcmF0b3I7Ci0gICAgICAgIHJldHVybiBwYXJz
ZVBvcnQoaXRlcmF0b3IsIGVuZCk7CisgICAgICAgIHJldHVybiBwYXJzZVBvcnQoaXRlcmF0b3Ip
OwogICAgIH0KICAgICAKICAgICBtX2J1ZmZlci5hcHBlbmQoYXNjaWlEb21haW4udmFsdWUoKSk7
CiAgICAgbV91cmwubV9ob3N0RW5kID0gbV9idWZmZXIubGVuZ3RoKCk7Ci0gICAgaWYgKGl0ZXJh
dG9yICE9IGVuZCkgeworICAgIGlmICghaXRlcmF0b3IuYXRFbmQoKSkgewogICAgICAgICBBU1NF
UlQoKml0ZXJhdG9yID09ICc6Jyk7CiAgICAgICAgICsraXRlcmF0b3I7Ci0gICAgICAgIHdoaWxl
IChpdGVyYXRvciAhPSBlbmQgJiYgaXNUYWJPck5ld2xpbmUoKml0ZXJhdG9yKSkKKyAgICAgICAg
d2hpbGUgKCFpdGVyYXRvci5hdEVuZCgpICYmIGlzVGFiT3JOZXdsaW5lKCppdGVyYXRvcikpCiAg
ICAgICAgICAgICArK2l0ZXJhdG9yOwotICAgICAgICByZXR1cm4gcGFyc2VQb3J0KGl0ZXJhdG9y
LCBlbmQpOworICAgICAgICByZXR1cm4gcGFyc2VQb3J0KGl0ZXJhdG9yKTsKICAgICB9CiAgICAg
bV91cmwubV9wb3J0RW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CiAgICAgcmV0dXJuIHRydWU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAkocmV2aXNpb24gMjA1OTIyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBjbGFzcyBDb2RlUG9pbnRJdGVyYXRvcjsKKwogY2xhc3MgVVJMUGFyc2Vy
IHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBVUkwgcGFyc2UoY29uc3QgU3RyaW5nJiwg
Y29uc3QgVVJMJiA9IHsgfSwgY29uc3QgVGV4dEVuY29kaW5nJiA9IFVURjhFbmNvZGluZygpKTsK
QEAgLTQ5LDEwICs1MSwxMiBAQCBwcml2YXRlOgogICAgIFN0cmluZ0J1aWxkZXIgbV9idWZmZXI7
CiAgICAgYm9vbCBtX3VybElzU3BlY2lhbCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hvc3RIYXNQ
ZXJjZW50T3JOb25BU0NJSSB7IGZhbHNlIH07Ci0gICAgdm9pZCBwYXJzZUF1dGhvcml0eShTdHJp
bmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciYsIGNvbnN0IFN0cmluZ1ZpZXc6OkNvZGVQb2lu
dHM6Okl0ZXJhdG9yJiBlbmQpOwotICAgIGJvb2wgcGFyc2VIb3N0KFN0cmluZ1ZpZXc6OkNvZGVQ
b2ludHM6Okl0ZXJhdG9yJiwgY29uc3QgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3Im
IGVuZCk7Ci0gICAgYm9vbCBwYXJzZVBvcnQoU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0
b3ImLCBjb25zdCBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciYgZW5kKTsKLSAgICBV
UkwgZmFpbHVyZShjb25zdCBTdHJpbmcmIGlucHV0KTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IFVSTCBwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlKiwgY29uc3QgdW5z
aWduZWQgbGVuZ3RoLCBjb25zdCBVUkwmLCBjb25zdCBUZXh0RW5jb2RpbmcmKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHBhcnNlQXV0aG9yaXR5KENvZGVQb2lu
dEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBib29sIHBhcnNlSG9zdChDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZVBvcnQoQ29k
ZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4mKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBVUkwgZmFpbHVyZShjb25zdCBDaGFyYWN0ZXJUeXBlKiwgdW5zaWduZWQg
bGVuZ3RoKTsKIAogICAgIGVudW0gY2xhc3MgVVJMUGFydDsKICAgICB2b2lkIGNvcHlVUkxQYXJ0
c1VudGlsKGNvbnN0IFVSTCYgYmFzZSwgVVJMUGFydCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288930</attachid>
            <date>2016-09-14 23:26:43 -0700</date>
            <delta_ts>2016-09-15 11:10:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162007-20160914232404.patch</filename>
            <type>text/plain</type>
            <size>35598</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTkzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE2LTA5LTE0ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIGVmZmlj
aWVudCBpdGVyYXRvcnMgaW4gVVJMUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIwMDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBVUkxQYXJzZXIgdXNlZCB0byB1c2UgU3RyaW5nVmlldzo6Q29k
ZVBvaW50czo6SXRlcmF0b3IsIHdoaWNoIG5lZWRzIHRvIGNoZWNrIGlmCisgICAgICAgIHRoZSBT
dHJpbmdWaWV3IGlzIDgtYml0IG9yIDE2LWJpdCBldmVyeSB0aW1lIGl0IGRvZXMgYW55dGhpbmcu
CisgICAgICAgIEkgd3JvdGUgYSBuZXcgQ29kZVBvaW50SXRlcmF0b3IgdGVtcGxhdGUgd2hpY2gg
YWxyZWFkeSBrbm93cyB3aGV0aGVyIGl0IGlzIGl0ZXJhdGluZworICAgICAgICA4LWJpdCBvciAx
Ni1iaXQgY2hhcmFjdGVycywgc28gaXQgZG9lcyBub3QgbmVlZCB0byBkbyB0aGUgY2hlY2tzIGVh
Y2ggdGltZSBpdCBnZXRzIGEKKyAgICAgICAgY29kZSBwb2ludCBvciBhZHZhbmNlcyB0byB0aGUg
bmV4dCBjb2RlIHBvaW50LgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBiZWhhdmlvciBleGNlcHQg
YSBwZXJmb3JtYW5jZSBpbmNyZWFzZS4KKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0
cy4KKworICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb2RlUG9pbnRJdGVyYXRvcjo6Q29kZVBvaW50SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29kZVBvaW50SXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6Q29k
ZVBvaW50SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6Q29kZVBvaW50
SXRlcmF0b3I6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpDb2RlUG9pbnRJdGVyYXRv
cjo6YXRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q29kZVBvaW50SXRlcmF0b3I8TENoYXI+Ojpv
cGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2RlUG9pbnRJdGVyYXRvcjxVQ2hhcj46Om9w
ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmlzV2luZG93c0RyaXZlTGV0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNob3VsZENvcHlGaWxlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmlzUGVy
Y2VudEVuY29kZWREb3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNTaW5nbGVEb3RQYXRoU2VnbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjppc0RvdWJsZURvdFBhdGhTZWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnN1bWVTaW5nbGVEb3RQYXRoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb25zdW1lRG91YmxlRG90UGF0aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VVJMUGFy
c2VyOjpmYWlsdXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6cGFyc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpwYXJzZUF1dGhvcml0eSk6CisgICAgICAgIChXZWJD
b3JlOjpwYXJzZUlQdjROdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VJUHY0SG9zdCk6
CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUlQdjZIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OlVS
TFBhcnNlcjo6cGFyc2VQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6cGFyc2VI
b3N0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9VUkxQYXJzZXIuaDoKKwogMjAxNi0wOS0xNCAgRXJp
YyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWVkaWFTdHJl
YW1dIE1pbm9yIGNsZWFudXAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNw
cAkocmV2aXNpb24gMjA1OTIyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx1bmljb2RlL3VpZG5hLmg+CisjaW5jbHVk
ZSA8dW5pY29kZS91dHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KQEAgLTM2LDYgKzM3LDg1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2NsYXNzIENvZGVQb2ludEl0ZXJhdG9yIHsKK3B1Ymxp
YzoKKyAgICBDb2RlUG9pbnRJdGVyYXRvcigpIHsgfQorICAgIENvZGVQb2ludEl0ZXJhdG9yKGNv
bnN0IENoYXJhY3RlclR5cGUqIGJlZ2luLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCisgICAg
ICAgIDogbV9iZWdpbihiZWdpbikKKyAgICAgICAgLCBtX2VuZChlbmQpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBDb2RlUG9pbnRJdGVyYXRvcihjb25zdCBDb2RlUG9pbnRJdGVyYXRvciYgYmVn
aW4sIGNvbnN0IENvZGVQb2ludEl0ZXJhdG9yJiBlbmQpCisgICAgICAgIDogQ29kZVBvaW50SXRl
cmF0b3IoYmVnaW4ubV9iZWdpbiwgZW5kLm1fYmVnaW4pCisgICAgeworICAgICAgICBBU1NFUlQo
ZW5kLm1fYmVnaW4gPj0gYmVnaW4ubV9iZWdpbik7CisgICAgfQorICAgIAorICAgIFVDaGFyMzIg
b3BlcmF0b3IqKCkgY29uc3Q7CisgICAgQ29kZVBvaW50SXRlcmF0b3ImIG9wZXJhdG9yKysoKTsK
KworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2RlUG9pbnRJdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9iZWdpbiA9PSBvdGhlci5tX2JlZ2luCisgICAg
ICAgICAgICAmJiBtX2VuZCA9PSBvdGhlci5tX2VuZDsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IENvZGVQb2ludEl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7IH0KKyAgICAKKyAgICBDb2RlUG9pbnRJdGVyYXRvciYgb3BlcmF0b3I9KGNv
bnN0IENvZGVQb2ludEl0ZXJhdG9yJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fYmVnaW4gPSBv
dGhlci5tX2JlZ2luOworICAgICAgICBtX2VuZCA9IG90aGVyLm1fZW5kOworICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgfQorCisgICAgYm9vbCBhdEVuZCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQobV9iZWdpbiA8PSBtX2VuZCk7CisgICAgICAgIHJldHVybiBtX2JlZ2luID49IG1f
ZW5kOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogbV9i
ZWdpbiB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBtX2VuZCB7IG51bGxw
dHIgfTsKK307CisKK3RlbXBsYXRlPD4KK1VDaGFyMzIgQ29kZVBvaW50SXRlcmF0b3I8TENoYXI+
OjpvcGVyYXRvciooKSBjb25zdAoreworICAgIEFTU0VSVCghYXRFbmQoKSk7CisgICAgcmV0dXJu
ICptX2JlZ2luOworfQorCit0ZW1wbGF0ZTw+CithdXRvIENvZGVQb2ludEl0ZXJhdG9yPExDaGFy
Pjo6b3BlcmF0b3IrKygpIC0+IENvZGVQb2ludEl0ZXJhdG9yJgoreworICAgIEFTU0VSVCghYXRF
bmQoKSk7CisgICAgbV9iZWdpbisrOworICAgIHJldHVybiAqdGhpczsKK30KKwordGVtcGxhdGU8
PgorVUNoYXIzMiBDb2RlUG9pbnRJdGVyYXRvcjxVQ2hhcj46Om9wZXJhdG9yKigpIGNvbnN0Cit7
CisgICAgQVNTRVJUKCFhdEVuZCgpKTsKKyAgICBVQ2hhcjMyIGM7CisgICAgVTE2X0dFVChtX2Jl
Z2luLCAwLCAwLCBtX2VuZCAtIG1fYmVnaW4sIGMpOworICAgIHJldHVybiBjOworfQorCit0ZW1w
bGF0ZTw+CithdXRvIENvZGVQb2ludEl0ZXJhdG9yPFVDaGFyPjo6b3BlcmF0b3IrKygpIC0+IENv
ZGVQb2ludEl0ZXJhdG9yJgoreworICAgIEFTU0VSVCghYXRFbmQoKSk7CisgICAgaWYgKFUxNl9J
U19MRUFEKG1fYmVnaW5bMF0pICYmIG1fYmVnaW4gPCBtX2VuZCAmJiBVMTZfSVNfVFJBSUwobV9i
ZWdpblsxXSkpCisgICAgICAgIG1fYmVnaW4gKz0gMjsKKyAgICBlbHNlCisgICAgICAgIG1fYmVn
aW4rKzsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHN0YXRpYyBib29sIGlzQzBDb250cm9sKENoYXJhY3RlclR5cGUgY2hhcmFjdGVyKSB7
IHJldHVybiBjaGFyYWN0ZXIgPD0gMHgwMDAxRjsgfQogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gc3RhdGljIGJvb2wgaXNDMENvbnRyb2xPclNwYWNlKENoYXJhY3RlclR5cGUgY2hh
cmFjdGVyKSB7IHJldHVybiBpc0MwQ29udHJvbChjaGFyYWN0ZXIpIHx8IGNoYXJhY3RlciA9PSAw
eDAwMjA7IH0KIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlz
VGFiT3JOZXdsaW5lKENoYXJhY3RlclR5cGUgY2hhcmFjdGVyKSB7IHJldHVybiBjaGFyYWN0ZXIg
PT0gMHgwMDA5IHx8IGNoYXJhY3RlciA9PSAweDAwMEEgfHwgY2hhcmFjdGVyID09IDB4MDAwRDsg
fQpAQCAtNDUsMTIgKzEyNSwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBz
dGF0aWMgCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBpc0lu
dmFsaWREb21haW5DaGFyYWN0ZXIoQ2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIpIHsgcmV0dXJuIGNo
YXJhY3RlciA9PSAweDAwMDAgfHwgY2hhcmFjdGVyID09IDB4MDAwOSB8fCBjaGFyYWN0ZXIgPT0g
MHgwMDBBIHx8IGNoYXJhY3RlciA9PSAweDAwMEQgfHwgY2hhcmFjdGVyID09IDB4MDAyMCB8fCBj
aGFyYWN0ZXIgPT0gJyMnIHx8IGNoYXJhY3RlciA9PSAnJScgfHwgY2hhcmFjdGVyID09ICcvJyB8
fCBjaGFyYWN0ZXIgPT0gJzonIHx8IGNoYXJhY3RlciA9PSAnPycgfHwgY2hhcmFjdGVyID09ICdA
JyB8fCBjaGFyYWN0ZXIgPT0gJ1snIHx8IGNoYXJhY3RlciA9PSAnXFwnIHx8IGNoYXJhY3RlciA9
PSAnXSc7IH0KIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGlz
UGVyY2VudE9yTm9uQVNDSUkoQ2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIpIHsgcmV0dXJuICFpc0FT
Q0lJKGNoYXJhY3RlcikgfHwgY2hhcmFjdGVyID09ICclJzsgfQogICAgIAotc3RhdGljIGJvb2wg
aXNXaW5kb3dzRHJpdmVMZXR0ZXIoU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3IgaXRl
cmF0b3IsIGNvbnN0IFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yJiBlbmQpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIGJvb2wgaXNXaW5kb3dzRHJpdmVM
ZXR0ZXIoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4gaXRlcmF0b3IpCiB7Ci0gICAg
aWYgKGl0ZXJhdG9yID09IGVuZCB8fCAhaXNBU0NJSUFscGhhKCppdGVyYXRvcikpCisgICAgaWYg
KGl0ZXJhdG9yLmF0RW5kKCkgfHwgIWlzQVNDSUlBbHBoYSgqaXRlcmF0b3IpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgKytpdGVyYXRvcjsKLSAgICBpZiAoaXRlcmF0b3IgPT0gZW5kKQor
ICAgIGlmIChpdGVyYXRvci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0
dXJuICppdGVyYXRvciA9PSAnOicgfHwgKml0ZXJhdG9yID09ICd8JzsKIH0KQEAgLTYyLDE3ICsx
NDMsMTggQEAgc3RhdGljIGJvb2wgaXNXaW5kb3dzRHJpdmVMZXR0ZXIoY29uc3QgUwogICAgIHJl
dHVybiBpc0FTQ0lJQWxwaGEoYnVpbGRlcltpbmRleF0pICYmIChidWlsZGVyW2luZGV4ICsgMV0g
PT0gJzonIHx8IGJ1aWxkZXJbaW5kZXggKyAxXSA9PSAnfCcpOwogfQogCi1zdGF0aWMgYm9vbCBz
aG91bGRDb3B5RmlsZVVSTChTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciBpdGVyYXRv
ciwgY29uc3QgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3IgZW5kKQordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBib29sIHNob3VsZENvcHlGaWxlVVJMKENv
ZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+IGl0ZXJhdG9yKQogewotICAgIGlmIChpc1dp
bmRvd3NEcml2ZUxldHRlcihpdGVyYXRvciwgZW5kKSkKKyAgICBpZiAoaXNXaW5kb3dzRHJpdmVM
ZXR0ZXIoaXRlcmF0b3IpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoaXRlcmF0b3Ig
PT0gZW5kKQorICAgIGlmIChpdGVyYXRvci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgKytpdGVyYXRvcjsKLSAgICBpZiAoaXRlcmF0b3IgPT0gZW5kKQorICAgIGlmIChpdGVy
YXRvci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICArK2l0ZXJhdG9yOwotICAg
IGlmIChpdGVyYXRvciA9PSBlbmQpCisgICAgaWYgKGl0ZXJhdG9yLmF0RW5kKCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIHJldHVybiAqaXRlcmF0b3IgIT0gJy8nICYmICppdGVyYXRvciAh
PSAnXFwnICYmICppdGVyYXRvciAhPSAnPycgJiYgKml0ZXJhdG9yICE9ICcjJzsKIH0KQEAgLTM1
MSw3NSArNDMzLDc5IEBAIHZvaWQgVVJMUGFyc2VyOjpjb3B5VVJMUGFydHNVbnRpbChjb25zdCAK
IAogc3RhdGljIGNvbnN0IGNoYXIqIGRvdEFTQ0lJQ29kZSA9ICIyZSI7CiAKLXN0YXRpYyBib29s
IGlzUGVyY2VudEVuY29kZWREb3QoU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3IgYywg
Y29uc3QgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3ImIGVuZCkKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgYm9vbCBpc1BlcmNlbnRFbmNvZGVkRG90KENv
ZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+IGMpCiB7Ci0gICAgaWYgKGMgPT0gZW5kKQor
ICAgIGlmIChjLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoKmMgIT0g
JyUnKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgKytjOwotICAgIGlmIChjID09IGVuZCkK
KyAgICBpZiAoYy5hdEVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCpjICE9
IGRvdEFTQ0lJQ29kZVswXSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICsrYzsKLSAgICBp
ZiAoYyA9PSBlbmQpCisgICAgaWYgKGMuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiB0b0FTQ0lJTG93ZXIoKmMpID09IGRvdEFTQ0lJQ29kZVsxXTsKIH0KIAotc3Rh
dGljIGJvb2wgaXNTaW5nbGVEb3RQYXRoU2VnbWVudChTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJ
dGVyYXRvciBjLCBjb25zdCBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciYgZW5kKQor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBib29sIGlzU2luZ2xlRG90
UGF0aFNlZ21lbnQoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4gYykKIHsKLSAgICBp
ZiAoYyA9PSBlbmQpCisgICAgaWYgKGMuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGlmICgqYyA9PSAnLicpIHsKICAgICAgICAgKytjOwotICAgICAgICByZXR1cm4gYyA9PSBl
bmQgfHwgKmMgPT0gJy8nIHx8ICpjID09ICdcXCcgfHwgKmMgPT0gJz8nIHx8ICpjID09ICcjJzsK
KyAgICAgICAgcmV0dXJuIGMuYXRFbmQoKSB8fCAqYyA9PSAnLycgfHwgKmMgPT0gJ1xcJyB8fCAq
YyA9PSAnPycgfHwgKmMgPT0gJyMnOwogICAgIH0KICAgICBpZiAoKmMgIT0gJyUnKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgKytjOwotICAgIGlmIChjID09IGVuZCB8fCAqYyAhPSBkb3RB
U0NJSUNvZGVbMF0pCisgICAgaWYgKGMuYXRFbmQoKSB8fCAqYyAhPSBkb3RBU0NJSUNvZGVbMF0p
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICArK2M7Ci0gICAgaWYgKGMgPT0gZW5kKQorICAg
IGlmIChjLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAodG9BU0NJSUxv
d2VyKCpjKSA9PSBkb3RBU0NJSUNvZGVbMV0pIHsKICAgICAgICAgKytjOwotICAgICAgICByZXR1
cm4gYyA9PSBlbmQgfHwgKmMgPT0gJy8nIHx8ICpjID09ICdcXCcgfHwgKmMgPT0gJz8nIHx8ICpj
ID09ICcjJzsKKyAgICAgICAgcmV0dXJuIGMuYXRFbmQoKSB8fCAqYyA9PSAnLycgfHwgKmMgPT0g
J1xcJyB8fCAqYyA9PSAnPycgfHwgKmMgPT0gJyMnOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7
CiB9Ci0gICAgCi1zdGF0aWMgYm9vbCBpc0RvdWJsZURvdFBhdGhTZWdtZW50KFN0cmluZ1ZpZXc6
OkNvZGVQb2ludHM6Okl0ZXJhdG9yIGMsIGNvbnN0IFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0
ZXJhdG9yJiBlbmQpCisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMg
Ym9vbCBpc0RvdWJsZURvdFBhdGhTZWdtZW50KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5
cGU+IGMpCiB7Ci0gICAgaWYgKGMgPT0gZW5kKQorICAgIGlmIChjLmF0RW5kKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpZiAoKmMgPT0gJy4nKSB7CiAgICAgICAgICsrYzsKLSAgICAg
ICAgcmV0dXJuIGlzU2luZ2xlRG90UGF0aFNlZ21lbnQoYywgZW5kKTsKKyAgICAgICAgcmV0dXJu
IGlzU2luZ2xlRG90UGF0aFNlZ21lbnQoYyk7CiAgICAgfQogICAgIGlmICgqYyAhPSAnJScpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICArK2M7Ci0gICAgaWYgKGMgPT0gZW5kIHx8ICpjICE9
IGRvdEFTQ0lJQ29kZVswXSkKKyAgICBpZiAoYy5hdEVuZCgpIHx8ICpjICE9IGRvdEFTQ0lJQ29k
ZVswXSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICsrYzsKLSAgICBpZiAoYyA9PSBlbmQp
CisgICAgaWYgKGMuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICh0b0FT
Q0lJTG93ZXIoKmMpID09IGRvdEFTQ0lJQ29kZVsxXSkgewogICAgICAgICArK2M7Ci0gICAgICAg
IHJldHVybiBpc1NpbmdsZURvdFBhdGhTZWdtZW50KGMsIGVuZCk7CisgICAgICAgIHJldHVybiBp
c1NpbmdsZURvdFBhdGhTZWdtZW50KGMpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXN0YXRpYyB2b2lkIGNvbnN1bWVTaW5nbGVEb3RQYXRoU2VnbWVudChTdHJpbmdWaWV3OjpDb2Rl
UG9pbnRzOjpJdGVyYXRvciYgYywgY29uc3QgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0
b3IgZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyB2b2lkIGNv
bnN1bWVTaW5nbGVEb3RQYXRoU2VnbWVudChDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBl
PiYgYykKIHsKLSAgICBBU1NFUlQoaXNTaW5nbGVEb3RQYXRoU2VnbWVudChjLCBlbmQpKTsKKyAg
ICBBU1NFUlQoaXNTaW5nbGVEb3RQYXRoU2VnbWVudChjKSk7CiAgICAgaWYgKCpjID09ICcuJykg
ewogICAgICAgICArK2M7Ci0gICAgICAgIGlmIChjICE9IGVuZCkgeworICAgICAgICBpZiAoIWMu
YXRFbmQoKSkgewogICAgICAgICAgICAgaWYgKCpjID09ICcvJyB8fCAqYyA9PSAnXFwnKQogICAg
ICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgIGVsc2UKQEAgLTQzMiw3ICs1MTgsNyBAQCBz
dGF0aWMgdm9pZCBjb25zdW1lU2luZ2xlRG90UGF0aFNlZ21lbnQoCiAgICAgICAgICsrYzsKICAg
ICAgICAgQVNTRVJUKHRvQVNDSUlMb3dlcigqYykgPT0gZG90QVNDSUlDb2RlWzFdKTsKICAgICAg
ICAgKytjOwotICAgICAgICBpZiAoYyAhPSBlbmQpIHsKKyAgICAgICAgaWYgKCFjLmF0RW5kKCkp
IHsKICAgICAgICAgICAgIGlmICgqYyA9PSAnLycgfHwgKmMgPT0gJ1xcJykKICAgICAgICAgICAg
ICAgICArK2M7CiAgICAgICAgICAgICBlbHNlCkBAIC00NDEsOSArNTI3LDEwIEBAIHN0YXRpYyB2
b2lkIGNvbnN1bWVTaW5nbGVEb3RQYXRoU2VnbWVudCgKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lk
IGNvbnN1bWVEb3VibGVEb3RQYXRoU2VnbWVudChTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVy
YXRvciYgYywgY29uc3QgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3IgZW5kKQordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyB2b2lkIGNvbnN1bWVEb3VibGVE
b3RQYXRoU2VnbWVudChDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiYgYykKIHsKLSAg
ICBBU1NFUlQoaXNEb3VibGVEb3RQYXRoU2VnbWVudChjLCBlbmQpKTsKKyAgICBBU1NFUlQoaXNE
b3VibGVEb3RQYXRoU2VnbWVudChjKSk7CiAgICAgaWYgKCpjID09ICcuJykKICAgICAgICAgKytj
OwogICAgIGVsc2UgewpAQCAtNDU0LDcgKzU0MSw3IEBAIHN0YXRpYyB2b2lkIGNvbnN1bWVEb3Vi
bGVEb3RQYXRoU2VnbWVudCgKICAgICAgICAgQVNTRVJUKHRvQVNDSUlMb3dlcigqYykgPT0gZG90
QVNDSUlDb2RlWzFdKTsKICAgICAgICAgKytjOwogICAgIH0KLSAgICBjb25zdW1lU2luZ2xlRG90
UGF0aFNlZ21lbnQoYywgZW5kKTsKKyAgICBjb25zdW1lU2luZ2xlRG90UGF0aFNlZ21lbnQoYyk7
CiB9CiAKIHZvaWQgVVJMUGFyc2VyOjpwb3BQYXRoKCkKQEAgLTQ3MCwxMSArNTU3LDEzIEBAIHZv
aWQgVVJMUGFyc2VyOjpwb3BQYXRoKCkKICAgICBtX2J1ZmZlci5yZXNpemUobV91cmwubV9wYXRo
QWZ0ZXJMYXN0U2xhc2gpOwogfQogCi1VUkwgVVJMUGFyc2VyOjpmYWlsdXJlKGNvbnN0IFN0cmlu
ZyYgaW5wdXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorVVJMIFVSTFBhcnNl
cjo6ZmFpbHVyZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBpbnB1dCwgdW5zaWduZWQgbGVuZ3RoKQog
ewogICAgIFVSTCB1cmw7CiAgICAgdXJsLm1faXNWYWxpZCA9IGZhbHNlOwogICAgIHVybC5tX3By
b3RvY29sSXNJbkhUVFBGYW1pbHkgPSBmYWxzZTsKKyAgICB1cmwubV9jYW5ub3RCZUFCYXNlVVJM
ID0gZmFsc2U7CiAgICAgdXJsLm1fc2NoZW1lRW5kID0gMDsKICAgICB1cmwubV91c2VyU3RhcnQg
PSAwOwogICAgIHVybC5tX3VzZXJFbmQgPSAwOwpAQCAtNDg1LDMxICs1NzQsMzcgQEAgVVJMIFVS
TFBhcnNlcjo6ZmFpbHVyZShjb25zdCBTdHJpbmcmIGlucAogICAgIHVybC5tX3BhdGhFbmQgPSAw
OwogICAgIHVybC5tX3F1ZXJ5RW5kID0gMDsKICAgICB1cmwubV9mcmFnbWVudEVuZCA9IDA7Ci0g
ICAgdXJsLm1fc3RyaW5nID0gaW5wdXQ7CisgICAgdXJsLm1fc3RyaW5nID0gU3RyaW5nKGlucHV0
LCBsZW5ndGgpOwogICAgIHJldHVybiB1cmw7CiB9CiAKIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNv
bnN0IFN0cmluZyYgaW5wdXQsIGNvbnN0IFVSTCYgYmFzZSwgY29uc3QgVGV4dEVuY29kaW5nJiBl
bmNvZGluZykKIHsKLSAgICBMT0coVVJMUGFyc2VyLCAiUGFyc2luZyBVUkwgPCVzPiBiYXNlIDwl
cz4iLCBpbnB1dC51dGY4KCkuZGF0YSgpLCBiYXNlLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIGlmIChpbnB1dC5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIHBhcnNlKGlucHV0LmNoYXJh
Y3RlcnM4KCksIGlucHV0Lmxlbmd0aCgpLCBiYXNlLCBlbmNvZGluZyk7CisgICAgcmV0dXJuIHBh
cnNlKGlucHV0LmNoYXJhY3RlcnMxNigpLCBpbnB1dC5sZW5ndGgoKSwgYmFzZSwgZW5jb2Rpbmcp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorVVJMIFVSTFBhcnNlcjo6
cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZSogaW5wdXQsIGNvbnN0IHVuc2lnbmVkIGxlbmd0aCwg
Y29uc3QgVVJMJiBiYXNlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQoreworICAgIExP
RyhVUkxQYXJzZXIsICJQYXJzaW5nIFVSTCA8JXM+IGJhc2UgPCVzPiIsIFN0cmluZyhpbnB1dCwg
bGVuZ3RoKS51dGY4KCkuZGF0YSgpLCBiYXNlLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAg
IG1fdXJsID0geyB9OwogICAgIG1fYnVmZmVyLmNsZWFyKCk7Ci0gICAgbV9idWZmZXIucmVzZXJ2
ZUNhcGFjaXR5KGlucHV0Lmxlbmd0aCgpKTsKKyAgICBtX2J1ZmZlci5yZXNlcnZlQ2FwYWNpdHko
bGVuZ3RoKTsKICAgICAKICAgICBib29sIGlzVVRGOEVuY29kaW5nID0gZW5jb2RpbmcgPT0gVVRG
OEVuY29kaW5nKCk7CiAgICAgU3RyaW5nQnVpbGRlciBxdWVyeUJ1ZmZlcjsKIAotICAgIHVuc2ln
bmVkIGVuZEluZGV4ID0gaW5wdXQubGVuZ3RoKCk7CisgICAgdW5zaWduZWQgZW5kSW5kZXggPSBs
ZW5ndGg7CiAgICAgd2hpbGUgKGVuZEluZGV4ICYmIGlzQzBDb250cm9sT3JTcGFjZShpbnB1dFtl
bmRJbmRleCAtIDFdKSkKICAgICAgICAgZW5kSW5kZXgtLTsKLSAgICBhdXRvIGNvZGVQb2ludHMg
PSBidWZmZXJWaWV3KGlucHV0LCAwLCBlbmRJbmRleCkuY29kZVBvaW50cygpOwotICAgIGF1dG8g
YyA9IGNvZGVQb2ludHMuYmVnaW4oKTsKLSAgICBhdXRvIGVuZCA9IGNvZGVQb2ludHMuZW5kKCk7
Ci0gICAgYXV0byBhdXRob3JpdHlPckhvc3RCZWdpbiA9IGNvZGVQb2ludHMuYmVnaW4oKTsKLSAg
ICB3aGlsZSAoYyAhPSBlbmQgJiYgaXNDMENvbnRyb2xPclNwYWNlKCpjKSkKKyAgICBDb2RlUG9p
bnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiBjKGlucHV0LCBpbnB1dCArIGVuZEluZGV4KTsKKyAg
ICBDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiBhdXRob3JpdHlPckhvc3RCZWdpbjsK
KyAgICB3aGlsZSAoIWMuYXRFbmQoKSAmJiBpc0MwQ29udHJvbE9yU3BhY2UoKmMpKQogICAgICAg
ICArK2M7CiAgICAgYXV0byBiZWdpbkFmdGVyQ29udHJvbEFuZFNwYWNlID0gYzsKLSAgICAKKwog
ICAgIGVudW0gY2xhc3MgU3RhdGUgOiB1aW50OF90IHsKICAgICAgICAgU2NoZW1lU3RhcnQsCiAg
ICAgICAgIFNjaGVtZSwKQEAgLTUzNiw3ICs2MzEsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShj
b25zdCBTdHJpbmcmIGlucHV0CiAjZGVmaW5lIExPR19GSU5BTF9TVEFURSh4KSBMT0coVVJMUGFy
c2VyLCAiRmluYWwgU3RhdGU6ICVzIiwgeCkKIAogICAgIFN0YXRlIHN0YXRlID0gU3RhdGU6OlNj
aGVtZVN0YXJ0OwotICAgIHdoaWxlIChjICE9IGVuZCkgeworICAgIHdoaWxlICghYy5hdEVuZCgp
KSB7CiAgICAgICAgIGlmIChpc1RhYk9yTmV3bGluZSgqYykpIHsKICAgICAgICAgICAgICsrYzsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNTgyLDkgKzY3Nyw5IEBAIFVSTCBVUkxQYXJzZXI6
OnBhcnNlKGNvbnN0IFN0cmluZyYgaW5wdXQKICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9w
b3J0RW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gbWF5
YmVTbGFzaCA9IGM7CiAgICAgICAgICAgICAgICAgICAgICsrbWF5YmVTbGFzaDsKLSAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKG1heWJlU2xhc2ggIT0gZW5kICYmIGlzVGFiT3JOZXdsaW5lKCpt
YXliZVNsYXNoKSkKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCFtYXliZVNsYXNoLmF0RW5k
KCkgJiYgaXNUYWJPck5ld2xpbmUoKm1heWJlU2xhc2gpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgKyttYXliZVNsYXNoOwotICAgICAgICAgICAgICAgICAgICBpZiAobWF5YmVTbGFzaCAhPSBl
bmQgJiYgKm1heWJlU2xhc2ggPT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbWF5
YmVTbGFzaC5hdEVuZCgpICYmICptYXliZVNsYXNoID09ICcvJykgewogICAgICAgICAgICAgICAg
ICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBt
X3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaCA9IG1fdXJsLm1fdXNlclN0YXJ0ICsgMTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlBhdGhPckF1dGhvcml0eTsKQEAgLTYw
NSw5ICs3MDAsOSBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBTdHJpbmcmIGlucHV0CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICArK2M7Ci0g
ICAgICAgICAgICB3aGlsZSAoYyAhPSBlbmQgJiYgaXNUYWJPck5ld2xpbmUoKmMpKQorICAgICAg
ICAgICAgd2hpbGUgKCFjLmF0RW5kKCkgJiYgaXNUYWJPck5ld2xpbmUoKmMpKQogICAgICAgICAg
ICAgICAgICsrYzsKLSAgICAgICAgICAgIGlmIChjID09IGVuZCkgeworICAgICAgICAgICAgaWYg
KGMuYXRFbmQoKSkgewogICAgICAgICAgICAgICAgIG1fYnVmZmVyLmNsZWFyKCk7CiAgICAgICAg
ICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6Tm9TY2hlbWU7CiAgICAgICAgICAgICAgICAgYyA9IGJl
Z2luQWZ0ZXJDb250cm9sQW5kU3BhY2U7CkBAIC02MTYsNyArNzExLDcgQEAgVVJMIFVSTFBhcnNl
cjo6cGFyc2UoY29uc3QgU3RyaW5nJiBpbnB1dAogICAgICAgICBjYXNlIFN0YXRlOjpOb1NjaGVt
ZToKICAgICAgICAgICAgIExPR19TVEFURSgiTm9TY2hlbWUiKTsKICAgICAgICAgICAgIGlmIChi
YXNlLmlzTnVsbCgpIHx8IChiYXNlLm1fY2Fubm90QmVBQmFzZVVSTCAmJiAqYyAhPSAnIycpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKICAgICAgICAgICAgIGlmIChiYXNlLm1fY2Fu
bm90QmVBQmFzZVVSTCAmJiAqYyA9PSAnIycpIHsKICAgICAgICAgICAgICAgICBjb3B5VVJMUGFy
dHNVbnRpbChiYXNlLCBVUkxQYXJ0OjpRdWVyeUVuZCk7CiAgICAgICAgICAgICAgICAgc3RhdGUg
PSBTdGF0ZTo6RnJhZ21lbnQ7CkBAIC02MzcsMTAgKzczMiwxMCBAQCBVUkwgVVJMUGFyc2VyOjpw
YXJzZShjb25zdCBTdHJpbmcmIGlucHV0CiAgICAgICAgICAgICBpZiAoKmMgPT0gJy8nKSB7CiAg
ICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7CiAgICAgICAgICAgICAgICAgKytj
OwotICAgICAgICAgICAgICAgIHdoaWxlIChjICE9IGVuZCAmJiBpc1RhYk9yTmV3bGluZSgqYykp
CisgICAgICAgICAgICAgICAgd2hpbGUgKCFjLmF0RW5kKCkgJiYgaXNUYWJPck5ld2xpbmUoKmMp
KQogICAgICAgICAgICAgICAgICAgICArK2M7Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0gZW5k
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCk7CisgICAgICAgICAg
ICAgICAgaWYgKGMuYXRFbmQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUo
aW5wdXQsIGxlbmd0aCk7CiAgICAgICAgICAgICAgICAgaWYgKCpjID09ICcvJykgewogICAgICAg
ICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAgICAgICAgICAgICAgICAg
c3RhdGUgPSBTdGF0ZTo6U3BlY2lhbEF1dGhvcml0eUlnbm9yZVNsYXNoZXM7CkBAIC03MDUsMTAg
KzgwMCwxMCBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBTdHJpbmcmIGlucHV0CiAgICAg
ICAgICAgICBtX2J1ZmZlci5hcHBlbmQoIi8vIik7CiAgICAgICAgICAgICBpZiAoKmMgPT0gJy8n
IHx8ICpjID09ICdcXCcpIHsKICAgICAgICAgICAgICAgICArK2M7Ci0gICAgICAgICAgICAgICAg
d2hpbGUgKGMgIT0gZW5kICYmIGlzVGFiT3JOZXdsaW5lKCpjKSkKKyAgICAgICAgICAgICAgICB3
aGlsZSAoIWMuYXRFbmQoKSAmJiBpc1RhYk9yTmV3bGluZSgqYykpCiAgICAgICAgICAgICAgICAg
ICAgICsrYzsKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSBlbmQpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWlsdXJlKGlucHV0KTsKKyAgICAgICAgICAgICAgICBpZiAoYy5hdEVuZCgp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKICAg
ICAgICAgICAgICAgICBpZiAoKmMgPT0gJy8nIHx8ICpjID09ICdcXCcpCiAgICAgICAgICAgICAg
ICAgICAgICsrYzsKICAgICAgICAgICAgIH0KQEAgLTcyOCw5ICs4MjMsOSBAQCBVUkwgVVJMUGFy
c2VyOjpwYXJzZShjb25zdCBTdHJpbmcmIGlucHV0CiAgICAgICAgICAgICBMT0dfU1RBVEUoIkF1
dGhvcml0eU9ySG9zdCIpOwogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmICgqYyA9
PSAnQCcpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VBdXRob3JpdHkoYXV0aG9yaXR5T3JI
b3N0QmVnaW4sIGMpOworICAgICAgICAgICAgICAgICAgICBwYXJzZUF1dGhvcml0eShDb2RlUG9p
bnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPihhdXRob3JpdHlPckhvc3RCZWdpbiwgYykpOwogICAg
ICAgICAgICAgICAgICAgICArK2M7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjICE9IGVu
ZCAmJiBpc1RhYk9yTmV3bGluZSgqYykpCisgICAgICAgICAgICAgICAgICAgIHdoaWxlICghYy5h
dEVuZCgpICYmIGlzVGFiT3JOZXdsaW5lKCpjKSkKICAgICAgICAgICAgICAgICAgICAgICAgICsr
YzsKICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5T3JIb3N0QmVnaW4gPSBjOwogICAgICAg
ICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpIb3N0OwpAQCAtNzQxLDggKzgzNiw4IEBAIFVS
TCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IFN0cmluZyYgaW5wdXQKICAgICAgICAgICAgICAgICBp
ZiAoaXNTbGFzaCB8fCAqYyA9PSAnPycgfHwgKmMgPT0gJyMnKSB7CiAgICAgICAgICAgICAgICAg
ICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOwogICAgICAgICAgICAgICAg
ICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2VyRW5kOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoIXBhcnNlSG9zdChhdXRob3JpdHlPckhvc3RCZWdpbiwgYykpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghcGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+KGF1dGhv
cml0eU9ySG9zdEJlZ2luLCBjKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFp
bHVyZShpbnB1dCwgbGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NsYXNoKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoID0gbV9idWZmZXIubGVu
Z3RoKCk7CkBAIC03NTgsOCArODUzLDggQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgU3Ry
aW5nJiBpbnB1dAogICAgICAgICBjYXNlIFN0YXRlOjpIb3N0OgogICAgICAgICAgICAgTE9HX1NU
QVRFKCJIb3N0Iik7CiAgICAgICAgICAgICBpZiAoKmMgPT0gJy8nIHx8ICpjID09ICc/JyB8fCAq
YyA9PSAnIycpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXBhcnNlSG9zdChhdXRob3JpdHlPckhv
c3RCZWdpbiwgYykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0KTsK
KyAgICAgICAgICAgICAgICBpZiAoIXBhcnNlSG9zdChDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0
ZXJUeXBlPihhdXRob3JpdHlPckhvc3RCZWdpbiwgYykpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0
YXRlOjpQYXRoOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtODA2
LDcgKzkwMSw3IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IFN0cmluZyYgaW5wdXQKICAg
ICAgICAgICAgICAgICArK2M7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmICghYmFzZS5pc051bGwoKSAmJiBiYXNlLnByb3Rv
Y29sSXMoImZpbGUiKSAmJiBzaG91bGRDb3B5RmlsZVVSTChjLCBlbmQpKQorICAgICAgICAgICAg
ICAgIGlmICghYmFzZS5pc051bGwoKSAmJiBiYXNlLnByb3RvY29sSXMoImZpbGUiKSAmJiBzaG91
bGRDb3B5RmlsZVVSTChjKSkKICAgICAgICAgICAgICAgICAgICAgY29weVVSTFBhcnRzVW50aWwo
YmFzZSwgVVJMUGFydDo6UGF0aEFmdGVyTGFzdFNsYXNoKTsKICAgICAgICAgICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCIvLy8iKTsKQEAgLTgzNSwx
MiArOTMwLDE3IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IFN0cmluZyYgaW5wdXQKICAg
ICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpGaWxlSG9zdDsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghYmFzZS5pc051bGwoKSAmJiBi
YXNlLnByb3RvY29sKCkgPT0gImZpbGUiKSB7CisgICAgICAgICAgICBpZiAoIWJhc2UuaXNOdWxs
KCkgJiYgYmFzZS5wcm90b2NvbElzKCJmaWxlIikpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBTdHJpbmcgY29weSBpcyB1bm5lY2Vzc2FyeS4KICAgICAgICAgICAgICAgICBTdHJp
bmcgYmFzZVBhdGggPSBiYXNlLnBhdGgoKTsKLSAgICAgICAgICAgICAgICBhdXRvIGJhc2VQYXRo
Q29kZVBvaW50cyA9IFN0cmluZ1ZpZXcoYmFzZVBhdGgpLmNvZGVQb2ludHMoKTsKLSAgICAgICAg
ICAgICAgICBpZiAoYmFzZVBhdGgubGVuZ3RoKCkgPj0gMiAmJiBpc1dpbmRvd3NEcml2ZUxldHRl
cihiYXNlUGF0aENvZGVQb2ludHMuYmVnaW4oKSwgYmFzZVBhdGhDb2RlUG9pbnRzLmVuZCgpKSkg
ewotICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoYmFzZVBhdGhbMF0pOwotICAg
ICAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoYmFzZVBhdGhbMV0pOworICAgICAgICAg
ICAgICAgIGlmIChiYXNlUGF0aC5sZW5ndGgoKSA+PSAyKSB7CisgICAgICAgICAgICAgICAgICAg
IGJvb2wgd2luZG93c1F1aXJrID0gYmFzZVBhdGguaXM4Qml0KCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgID8gaXNXaW5kb3dzRHJpdmVMZXR0ZXIoQ29kZVBvaW50SXRlcmF0b3I8TENoYXI+KGJh
c2VQYXRoLmNoYXJhY3RlcnM4KCksIGJhc2VQYXRoLmNoYXJhY3RlcnM4KCkgKyBiYXNlUGF0aC5s
ZW5ndGgoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICA6IGlzV2luZG93c0RyaXZlTGV0dGVy
KENvZGVQb2ludEl0ZXJhdG9yPFVDaGFyPihiYXNlUGF0aC5jaGFyYWN0ZXJzMTYoKSwgYmFzZVBh
dGguY2hhcmFjdGVyczE2KCkgKyBiYXNlUGF0aC5sZW5ndGgoKSkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAod2luZG93c1F1aXJrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2J1ZmZl
ci5hcHBlbmQoYmFzZVBhdGhbMF0pOworICAgICAgICAgICAgICAgICAgICAgICAgbV9idWZmZXIu
YXBwZW5kKGJhc2VQYXRoWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpQYXRoOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtODgzLDggKzk4Myw4IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0
IFN0cmluZyYgaW5wdXQKICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6UGF0aDsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGlmICghcGFyc2VIb3N0KGF1dGhvcml0eU9ySG9zdEJlZ2luLCBjKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXQpOworICAgICAgICAgICAgICAgIGlmICgh
cGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+KGF1dGhvcml0eU9ySG9z
dEJlZ2luLCBjKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0LCBs
ZW5ndGgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChidWZmZXJWaWV3
KG1fYnVmZmVyLCBtX3VybC5tX3Bhc3N3b3JkRW5kLCBtX2J1ZmZlci5sZW5ndGgoKSAtIG1fdXJs
Lm1fcGFzc3dvcmRFbmQpID09ICJsb2NhbGhvc3QiKSAgewogICAgICAgICAgICAgICAgICAgICBt
X2J1ZmZlci5yZXNpemUobV91cmwubV9wYXNzd29yZEVuZCk7CkBAIC05MTQsMTMgKzEwMTQsMTMg
QEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgU3RyaW5nJiBpbnB1dAogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1fYnVmZmVyLmxlbmd0
aCgpICYmIG1fYnVmZmVyW21fYnVmZmVyLmxlbmd0aCgpIC0gMV0gPT0gJy8nKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzRG91YmxlRG90UGF0aFNlZ21lbnQoYywgZW5kKSkgewotICAgICAgICAg
ICAgICAgICAgICBjb25zdW1lRG91YmxlRG90UGF0aFNlZ21lbnQoYywgZW5kKTsKKyAgICAgICAg
ICAgICAgICBpZiAoaXNEb3VibGVEb3RQYXRoU2VnbWVudChjKSkgeworICAgICAgICAgICAgICAg
ICAgICBjb25zdW1lRG91YmxlRG90UGF0aFNlZ21lbnQoYyk7CiAgICAgICAgICAgICAgICAgICAg
IHBvcFBhdGgoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGlmIChtX2J1ZmZlclttX2J1ZmZlci5sZW5ndGgoKSAtIDFdID09
ICcvJyAmJiBpc1NpbmdsZURvdFBhdGhTZWdtZW50KGMsIGVuZCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3VtZVNpbmdsZURvdFBhdGhTZWdtZW50KGMsIGVuZCk7CisgICAgICAgICAgICAg
ICAgaWYgKG1fYnVmZmVyW21fYnVmZmVyLmxlbmd0aCgpIC0gMV0gPT0gJy8nICYmIGlzU2luZ2xl
RG90UGF0aFNlZ21lbnQoYykpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3VtZVNpbmdsZURv
dFBhdGhTZWdtZW50KGMpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CkBAIC05MzUsNyArMTAzNSw3IEBAIFVSTCBVUkxQYXJzZXI6
OnBhcnNlKGNvbnN0IFN0cmluZyYgaW5wdXQKICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRl
OjpGcmFnbWVudDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChpc1BlcmNlbnRFbmNvZGVkRG90KGMsIGVuZCkpIHsKKyAgICAgICAgICAgIGlm
IChpc1BlcmNlbnRFbmNvZGVkRG90KGMpKSB7CiAgICAgICAgICAgICAgICAgbV9idWZmZXIuYXBw
ZW5kKCcuJyk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCpjID09ICclJyk7CiAgICAgICAgICAg
ICAgICAgKytjOwpAQCAtOTkwLDcgKzEwOTAsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25z
dCBTdHJpbmcmIGlucHV0CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgiU2NoZW1lU3RhcnQiKTsK
ICAgICAgICAgaWYgKCFtX2J1ZmZlci5sZW5ndGgoKSAmJiAhYmFzZS5pc051bGwoKSkKICAgICAg
ICAgICAgIHJldHVybiBiYXNlOwotICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCk7CisgICAg
ICAgIHJldHVybiBmYWlsdXJlKGlucHV0LCBsZW5ndGgpOwogICAgIGNhc2UgU3RhdGU6OlNjaGVt
ZToKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRFKCJTY2hlbWUiKTsKICAgICAgICAgYnJlYWs7CkBA
IC0xMDMyLDcgKzExMzIsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBTdHJpbmcmIGlu
cHV0CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU3RhdGU6OlNwZWNpYWxBdXRob3JpdHlJZ25v
cmVTbGFzaGVzOgogICAgICAgICBMT0dfRklOQUxfU1RBVEUoIlNwZWNpYWxBdXRob3JpdHlJZ25v
cmVTbGFzaGVzIik7Ci0gICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0KTsKKyAgICAgICAgcmV0
dXJuIGZhaWx1cmUoaW5wdXQsIGxlbmd0aCk7CiAgICAgY2FzZSBTdGF0ZTo6QXV0aG9yaXR5T3JI
b3N0OgogICAgICAgICBMT0dfRklOQUxfU1RBVEUoIkF1dGhvcml0eU9ySG9zdCIpOwogICAgICAg
ICBtX3VybC5tX3VzZXJFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKQEAgLTEwNDEsOCArMTE0MSw4
IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IFN0cmluZyYgaW5wdXQKICAgICBjYXNlIFN0
YXRlOjpIb3N0OgogICAgICAgICBpZiAoc3RhdGUgPT0gU3RhdGU6Okhvc3QpCiAgICAgICAgICAg
ICBMT0dfRklOQUxfU1RBVEUoIkhvc3QiKTsKLSAgICAgICAgaWYgKCFwYXJzZUhvc3QoYXV0aG9y
aXR5T3JIb3N0QmVnaW4sIGVuZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCk7
CisgICAgICAgIGlmICghcGFyc2VIb3N0KGF1dGhvcml0eU9ySG9zdEJlZ2luKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWlsdXJlKGlucHV0LCBsZW5ndGgpOwogICAgICAgICBtX2J1ZmZlci5hcHBl
bmQoJy8nKTsKICAgICAgICAgbV91cmwubV9wYXRoRW5kID0gbV91cmwubV9wb3J0RW5kICsgMTsK
ICAgICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBtX3VybC5tX3BhdGhFbmQ7CkBA
IC0xMDk1LDggKzExOTUsOCBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBTdHJpbmcmIGlu
cHV0CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghcGFyc2VI
b3N0KGF1dGhvcml0eU9ySG9zdEJlZ2luLCBjKSkKLSAgICAgICAgICAgIHJldHVybiBmYWlsdXJl
KGlucHV0KTsKKyAgICAgICAgaWYgKCFwYXJzZUhvc3QoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFj
dGVyVHlwZT4oYXV0aG9yaXR5T3JIb3N0QmVnaW4sIGMpKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWlsdXJlKGlucHV0LCBsZW5ndGgpOwogICAgICAgICAKICAgICAgICAgaWYgKGJ1ZmZlclZpZXco
bV9idWZmZXIsIG1fdXJsLm1fcGFzc3dvcmRFbmQsIG1fYnVmZmVyLmxlbmd0aCgpIC0gbV91cmwu
bV9wYXNzd29yZEVuZCkgPT0gImxvY2FsaG9zdCIpICB7CiAgICAgICAgICAgICBtX2J1ZmZlci5y
ZXNpemUobV91cmwubV9wYXNzd29yZEVuZCk7CkBAIC0xMTQzLDE4ICsxMjQzLDE5IEBAIFVSTCBV
UkxQYXJzZXI6OnBhcnNlKGNvbnN0IFN0cmluZyYgaW5wdXQKICAgICByZXR1cm4gbV91cmw7CiB9
CiAKLXZvaWQgVVJMUGFyc2VyOjpwYXJzZUF1dGhvcml0eShTdHJpbmdWaWV3OjpDb2RlUG9pbnRz
OjpJdGVyYXRvciYgaXRlcmF0b3IsIGNvbnN0IFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJh
dG9yJiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgordm9pZCBVUkxQYXJz
ZXI6OnBhcnNlQXV0aG9yaXR5KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+IGl0ZXJh
dG9yKQogewotICAgIGlmIChpdGVyYXRvciA9PSBlbmQpIHsKKyAgICBpZiAoaXRlcmF0b3IuYXRF
bmQoKSkgewogICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKICAg
ICAgICAgbV91cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlckVuZDsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBmb3IgKDsgaXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJhdG9yKSB7Cisg
ICAgZm9yICg7ICFpdGVyYXRvci5hdEVuZCgpOyArK2l0ZXJhdG9yKSB7CiAgICAgICAgIGlmICgq
aXRlcmF0b3IgPT0gJzonKSB7CiAgICAgICAgICAgICArK2l0ZXJhdG9yOwogICAgICAgICAgICAg
bV91cmwubV91c2VyRW5kID0gbV9idWZmZXIubGVuZ3RoKCk7Ci0gICAgICAgICAgICBpZiAoaXRl
cmF0b3IgPT0gZW5kKSB7CisgICAgICAgICAgICBpZiAoaXRlcmF0b3IuYXRFbmQoKSkgewogICAg
ICAgICAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3VzZXJFbmQ7CiAgICAg
ICAgICAgICAgICAgaWYgKG1fdXJsLm1fdXNlckVuZCA+IG1fdXJsLm1fdXNlclN0YXJ0KQogICAg
ICAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJ0AnKTsKQEAgLTExNjUsNyArMTI2Niw3
IEBAIHZvaWQgVVJMUGFyc2VyOjpwYXJzZUF1dGhvcml0eShTdHJpbmdWaWUKICAgICAgICAgfQog
ICAgICAgICBtX2J1ZmZlci5hcHBlbmQoKml0ZXJhdG9yKTsKICAgICB9Ci0gICAgZm9yICg7IGl0
ZXJhdG9yICE9IGVuZDsgKytpdGVyYXRvcikKKyAgICBmb3IgKDsgIWl0ZXJhdG9yLmF0RW5kKCk7
ICsraXRlcmF0b3IpCiAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgqaXRlcmF0b3IpOwogICAgIG1f
dXJsLm1fcGFzc3dvcmRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKICAgICBpZiAoIW1fdXJsLm1f
dXNlckVuZCkKQEAgLTEyNTIsNyArMTM1Myw4IEBAIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZUlQdjYo
c3RkOjphcnJheTx1aW4KICAgICBidWZmZXIuYXBwZW5kKCddJyk7CiB9CiAKLXN0YXRpYyBPcHRp
b25hbDx1aW50MzJfdD4gcGFyc2VJUHY0TnVtYmVyKFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0
ZXJhdG9yJiBpdGVyYXRvciwgY29uc3QgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3Im
IGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgT3B0aW9uYWw8
dWludDMyX3Q+IHBhcnNlSVB2NE51bWJlcihDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBl
PiYgaXRlcmF0b3IpCiB7CiAgICAgLy8gRklYTUU6IENoZWNrIGZvciBvdmVyZmxvdy4KICAgICBl
bnVtIGNsYXNzIFN0YXRlIDogdWludDhfdCB7CkBAIC0xMjY0LDcgKzEzNjYsNyBAQCBzdGF0aWMg
T3B0aW9uYWw8dWludDMyX3Q+IHBhcnNlSVB2NE51bWJlCiAgICAgfTsKICAgICBTdGF0ZSBzdGF0
ZSA9IFN0YXRlOjpVbmtub3duQmFzZTsKICAgICB1aW50MzJfdCB2YWx1ZSA9IDA7Ci0gICAgd2hp
bGUgKGl0ZXJhdG9yICE9IGVuZCkgeworICAgIHdoaWxlICghaXRlcmF0b3IuYXRFbmQoKSkgewog
ICAgICAgICBpZiAoKml0ZXJhdG9yID09ICcuJykgewogICAgICAgICAgICAgKytpdGVyYXRvcjsK
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKQEAgLTEzMTksMTQgKzE0MjEsMTUgQEAgc3RhdGlj
IHVpbnQ2NF90IHBvdzI1NihzaXplX3QgZXhwb25lbnQpCiAgICAgcmV0dXJuIHZhbHVlc1tleHBv
bmVudF07CiB9CiAKLXN0YXRpYyBPcHRpb25hbDx1aW50MzJfdD4gcGFyc2VJUHY0SG9zdChTdHJp
bmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciBpdGVyYXRvciwgY29uc3QgU3RyaW5nVmlldzo6
Q29kZVBvaW50czo6SXRlcmF0b3ImIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+CitzdGF0aWMgT3B0aW9uYWw8dWludDMyX3Q+IHBhcnNlSVB2NEhvc3QoQ29kZVBvaW50SXRl
cmF0b3I8Q2hhcmFjdGVyVHlwZT4gaXRlcmF0b3IpCiB7CiAgICAgVmVjdG9yPHVpbnQzMl90LCA0
PiBpdGVtczsKICAgICBpdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDQpOwotICAgIHdoaWxl
IChpdGVyYXRvciAhPSBlbmQpIHsKKyAgICB3aGlsZSAoIWl0ZXJhdG9yLmF0RW5kKCkpIHsKICAg
ICAgICAgaWYgKGl0ZW1zLnNpemUoKSA+PSA0KQogICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7
Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBwYXJzZUlQdjROdW1iZXIoaXRlcmF0b3IsIGVuZCkp
CisgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBwYXJzZUlQdjROdW1iZXIoaXRlcmF0b3IpKQogICAg
ICAgICAgICAgaXRlbXMuYXBwZW5kKGl0ZW0udmFsdWUoKSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHJldHVybiBOdWxsb3B0OwpAQCAtMTM0OCwxMCArMTQ1MSwxMSBAQCBzdGF0aWMgT3B0
aW9uYWw8dWludDMyX3Q+IHBhcnNlSVB2NEhvc3QoCiAgICAgICAgIGlwdjQgKz0gaXRlbXNbY291
bnRlcl0gKiBwb3cyNTYoMyAtIGNvdW50ZXIpOwogICAgIHJldHVybiBpcHY0OwogfQotCi1zdGF0
aWMgT3B0aW9uYWw8c3RkOjphcnJheTx1aW50MTZfdCwgOD4+IHBhcnNlSVB2Nkhvc3QoU3RyaW5n
Vmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3IgYywgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRl
cmF0b3IgZW5kKQorICAgIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRp
YyBPcHRpb25hbDxzdGQ6OmFycmF5PHVpbnQxNl90LCA4Pj4gcGFyc2VJUHY2SG9zdChDb2RlUG9p
bnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiBjKQogewotICAgIGlmIChjID09IGVuZCkKKyAgICBp
ZiAoYy5hdEVuZCgpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKIAogICAgIHN0ZDo6YXJyYXk8
dWludDE2X3QsIDg+IGFkZHJlc3MgPSB7ezAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9fTsKQEAgLTEz
NjAsNyArMTQ2NCw3IEBAIHN0YXRpYyBPcHRpb25hbDxzdGQ6OmFycmF5PHVpbnQxNl90LCA4Pj4K
IAogICAgIGlmICgqYyA9PSAnOicpIHsKICAgICAgICAgKytjOwotICAgICAgICBpZiAoYyA9PSBl
bmQpCisgICAgICAgIGlmIChjLmF0RW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsK
ICAgICAgICAgaWYgKCpjICE9ICc6JykKICAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OwpAQCAt
MTM2OSw3ICsxNDczLDcgQEAgc3RhdGljIE9wdGlvbmFsPHN0ZDo6YXJyYXk8dWludDE2X3QsIDg+
PgogICAgICAgICBjb21wcmVzc1BvaW50ZXIgPSBwaWVjZVBvaW50ZXI7CiAgICAgfQogICAgIAot
ICAgIHdoaWxlIChjICE9IGVuZCkgeworICAgIHdoaWxlICghYy5hdEVuZCgpKSB7CiAgICAgICAg
IGlmIChwaWVjZVBvaW50ZXIgPT0gOCkKICAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAg
ICAgICBpZiAoKmMgPT0gJzonKSB7CkBAIC0xMzgyLDcgKzE0ODYsNyBAQCBzdGF0aWMgT3B0aW9u
YWw8c3RkOjphcnJheTx1aW50MTZfdCwgOD4+CiAgICAgICAgIH0KICAgICAgICAgdWludDE2X3Qg
dmFsdWUgPSAwOwogICAgICAgICBmb3IgKHNpemVfdCBsZW5ndGggPSAwOyBsZW5ndGggPCA0OyBs
ZW5ndGgrKykgewotICAgICAgICAgICAgaWYgKGMgPT0gZW5kKQorICAgICAgICAgICAgaWYgKGMu
YXRFbmQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmICghaXNBU0NJ
SUhleERpZ2l0KCpjKSkKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEzOTAsMTggKzE0OTQs
MTggQEAgc3RhdGljIE9wdGlvbmFsPHN0ZDo6YXJyYXk8dWludDE2X3QsIDg+PgogICAgICAgICAg
ICAgKytjOwogICAgICAgICB9CiAgICAgICAgIGFkZHJlc3NbcGllY2VQb2ludGVyKytdID0gdmFs
dWU7Ci0gICAgICAgIGlmIChjID09IGVuZCkKKyAgICAgICAgaWYgKGMuYXRFbmQoKSkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBpZiAoKmMgIT0gJzonKQogICAgICAgICAgICAgcmV0dXJu
IE51bGxvcHQ7CiAgICAgICAgICsrYzsKICAgICB9CiAgICAgCi0gICAgaWYgKGMgIT0gZW5kKSB7
CisgICAgaWYgKCFjLmF0RW5kKCkpIHsKICAgICAgICAgaWYgKHBpZWNlUG9pbnRlciA+IDYpCiAg
ICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICAgICAgc2l6ZV90IGRvdHNTZWVuID0gMDsK
LSAgICAgICAgd2hpbGUgKGMgIT0gZW5kKSB7CisgICAgICAgIHdoaWxlICghYy5hdEVuZCgpKSB7
CiAgICAgICAgICAgICBPcHRpb25hbDx1aW50MTZfdD4gdmFsdWU7CiAgICAgICAgICAgICBpZiAo
IWlzQVNDSUlEaWdpdCgqYykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CkBAIC0x
NDE0LDcgKzE1MTgsNyBAQCBzdGF0aWMgT3B0aW9uYWw8c3RkOjphcnJheTx1aW50MTZfdCwgOD4+
CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVl
LnZhbHVlKCkgKiAxMCArIG51bWJlcjsKICAgICAgICAgICAgICAgICArK2M7Ci0gICAgICAgICAg
ICAgICAgaWYgKGMgPT0gZW5kKQorICAgICAgICAgICAgICAgIGlmIChjLmF0RW5kKCkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgICAgICAgICAgICAgIGlmICh2YWx1
ZS52YWx1ZSgpID4gMjU1KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKQEAg
LTE0MjQsOSArMTUyOCw5IEBAIHN0YXRpYyBPcHRpb25hbDxzdGQ6OmFycmF5PHVpbnQxNl90LCA4
Pj4KICAgICAgICAgICAgIGFkZHJlc3NbcGllY2VQb2ludGVyXSA9IGFkZHJlc3NbcGllY2VQb2lu
dGVyXSAqIDB4MTAwICsgdmFsdWUudmFsdWVPcigwKTsKICAgICAgICAgICAgIGlmIChkb3RzU2Vl
biA9PSAxIHx8IGRvdHNTZWVuID09IDMpCiAgICAgICAgICAgICAgICAgcGllY2VQb2ludGVyKys7
Ci0gICAgICAgICAgICBpZiAoYyAhPSBlbmQpCisgICAgICAgICAgICBpZiAoIWMuYXRFbmQoKSkK
ICAgICAgICAgICAgICAgICArK2M7Ci0gICAgICAgICAgICBpZiAoZG90c1NlZW4gPT0gMyAmJiBj
ICE9IGVuZCkKKyAgICAgICAgICAgIGlmIChkb3RzU2VlbiA9PSAzICYmICFjLmF0RW5kKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgICAgICAgICBkb3RzU2VlbisrOwog
ICAgICAgICB9CkBAIC0xNTEzLDE1ICsxNjE3LDE2IEBAIHN0YXRpYyBib29sIGhhc0ludmFsaWRE
b21haW5DaGFyYWN0ZXIoY28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgVVJMUGFyc2Vy
OjpwYXJzZVBvcnQoU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3ImIGl0ZXJhdG9yLCBj
b25zdCBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciYgZW5kKQordGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2Jvb2wgVVJMUGFyc2VyOjpwYXJzZVBvcnQoQ29kZVBvaW50
SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4mIGl0ZXJhdG9yKQogewogICAgIHVpbnQzMl90IHBvcnQg
PSAwOwotICAgIGlmIChpdGVyYXRvciA9PSBlbmQpIHsKKyAgICBpZiAoaXRlcmF0b3IuYXRFbmQo
KSkgewogICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIG1fYnVmZmVyLmFwcGVuZCgnOicpOwotICAgIGZv
ciAoOyBpdGVyYXRvciAhPSBlbmQ7ICsraXRlcmF0b3IpIHsKKyAgICBmb3IgKDsgIWl0ZXJhdG9y
LmF0RW5kKCk7ICsraXRlcmF0b3IpIHsKICAgICAgICAgaWYgKGlzVGFiT3JOZXdsaW5lKCppdGVy
YXRvcikpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGlzQVNDSUlEaWdpdCgq
aXRlcmF0b3IpKSB7CkBAIC0xNTQyLDIzICsxNjQ3LDI0IEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJz
ZVBvcnQoU3RyaW5nVmlldzo6Q28KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBVUkxQYXJz
ZXI6OnBhcnNlSG9zdChTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciYgaXRlcmF0b3Is
IGNvbnN0IFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yJiBlbmQpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorYm9vbCBVUkxQYXJzZXI6OnBhcnNlSG9zdChDb2RlUG9p
bnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiBpdGVyYXRvcikKIHsKLSAgICBpZiAoaXRlcmF0b3Ig
PT0gZW5kKQorICAgIGlmIChpdGVyYXRvci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCppdGVyYXRvciA9PSAnWycpIHsKICAgICAgICAgKytpdGVyYXRvcjsKICAgICAg
ICAgYXV0byBpcHY2RW5kID0gaXRlcmF0b3I7Ci0gICAgICAgIHdoaWxlIChpcHY2RW5kICE9IGVu
ZCAmJiAqaXB2NkVuZCAhPSAnXScpCisgICAgICAgIHdoaWxlICghaXB2NkVuZC5hdEVuZCgpICYm
ICppcHY2RW5kICE9ICddJykKICAgICAgICAgICAgICsraXB2NkVuZDsKLSAgICAgICAgaWYgKGF1
dG8gYWRkcmVzcyA9IHBhcnNlSVB2Nkhvc3QoaXRlcmF0b3IsIGlwdjZFbmQpKSB7CisgICAgICAg
IGlmIChhdXRvIGFkZHJlc3MgPSBwYXJzZUlQdjZIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJh
Y3RlclR5cGU+KGl0ZXJhdG9yLCBpcHY2RW5kKSkpIHsKICAgICAgICAgICAgIHNlcmlhbGl6ZUlQ
djYoYWRkcmVzcy52YWx1ZSgpLCBtX2J1ZmZlcik7CiAgICAgICAgICAgICBtX3VybC5tX2hvc3RF
bmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChpcHY2RW5kICE9IGVuZCkg
eworICAgICAgICAgICAgaWYgKCFpcHY2RW5kLmF0RW5kKCkpIHsKICAgICAgICAgICAgICAgICAr
K2lwdjZFbmQ7Ci0gICAgICAgICAgICAgICAgaWYgKGlwdjZFbmQgIT0gZW5kICYmICppcHY2RW5k
ID09ICc6JykgeworICAgICAgICAgICAgICAgIGlmICghaXB2NkVuZC5hdEVuZCgpICYmICppcHY2
RW5kID09ICc6JykgewogICAgICAgICAgICAgICAgICAgICArK2lwdjZFbmQ7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBwYXJzZVBvcnQoaXB2NkVuZCwgZW5kKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlUG9ydChpcHY2RW5kKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgbV91cmwubV9wb3J0RW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNTY5LDMzICsxNjc1LDMzIEBAIGJvb2wgVVJMUGFy
c2VyOjpwYXJzZUhvc3QoU3RyaW5nVmlldzo6Q28KICAgICAKICAgICBpZiAoIW1faG9zdEhhc1Bl
cmNlbnRPck5vbkFTQ0lJKSB7CiAgICAgICAgIGF1dG8gaG9zdEl0ZXJhdG9yID0gaXRlcmF0b3I7
Ci0gICAgICAgIGZvciAoOyBpdGVyYXRvciAhPSBlbmQ7ICsraXRlcmF0b3IpIHsKKyAgICAgICAg
Zm9yICg7ICFpdGVyYXRvci5hdEVuZCgpOyArK2l0ZXJhdG9yKSB7CiAgICAgICAgICAgICBpZiAo
aXNUYWJPck5ld2xpbmUoKml0ZXJhdG9yKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIGlmICgqaXRlcmF0b3IgPT0gJzonKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGlmIChhdXRvIGFkZHJlc3MgPSBwYXJzZUlQdjRIb3N0KGhvc3RJ
dGVyYXRvciwgaXRlcmF0b3IpKSB7CisgICAgICAgIGlmIChhdXRvIGFkZHJlc3MgPSBwYXJzZUlQ
djRIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+KGhvc3RJdGVyYXRvciwgaXRl
cmF0b3IpKSkgewogICAgICAgICAgICAgc2VyaWFsaXplSVB2NChhZGRyZXNzLnZhbHVlKCksIG1f
YnVmZmVyKTsKICAgICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgp
OwotICAgICAgICAgICAgaWYgKGl0ZXJhdG9yID09IGVuZCkgeworICAgICAgICAgICAgaWYgKGl0
ZXJhdG9yLmF0RW5kKCkpIHsKICAgICAgICAgICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2J1
ZmZlci5sZW5ndGgoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICsraXRlcmF0b3I7Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VQb3J0
KGl0ZXJhdG9yLCBlbmQpOworICAgICAgICAgICAgcmV0dXJuIHBhcnNlUG9ydChpdGVyYXRvcik7
CiAgICAgICAgIH0KICAgICAgICAgZm9yICg7IGhvc3RJdGVyYXRvciAhPSBpdGVyYXRvcjsgKyto
b3N0SXRlcmF0b3IpIHsKICAgICAgICAgICAgIGlmICghaXNUYWJPck5ld2xpbmUoKmhvc3RJdGVy
YXRvcikpCiAgICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKHRvQVNDSUlMb3dlcigqaG9z
dEl0ZXJhdG9yKSk7CiAgICAgICAgIH0KICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9idWZm
ZXIubGVuZ3RoKCk7Ci0gICAgICAgIGlmIChob3N0SXRlcmF0b3IgIT0gZW5kKSB7CisgICAgICAg
IGlmICghaG9zdEl0ZXJhdG9yLmF0RW5kKCkpIHsKICAgICAgICAgICAgIEFTU0VSVCgqaG9zdEl0
ZXJhdG9yID09ICc6Jyk7CiAgICAgICAgICAgICArK2hvc3RJdGVyYXRvcjsKLSAgICAgICAgICAg
IHdoaWxlIChob3N0SXRlcmF0b3IgIT0gZW5kICYmIGlzVGFiT3JOZXdsaW5lKCpob3N0SXRlcmF0
b3IpKQorICAgICAgICAgICAgd2hpbGUgKCFob3N0SXRlcmF0b3IuYXRFbmQoKSAmJiBpc1RhYk9y
TmV3bGluZSgqaG9zdEl0ZXJhdG9yKSkKICAgICAgICAgICAgICAgICArK2hvc3RJdGVyYXRvcjsK
LSAgICAgICAgICAgIHJldHVybiBwYXJzZVBvcnQoaG9zdEl0ZXJhdG9yLCBlbmQpOworICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlUG9ydChob3N0SXRlcmF0b3IpOwogICAgICAgICB9CiAgICAgICAg
IG1fdXJsLm1fcG9ydEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTE2MDMsNyArMTcwOSw3IEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJzZUhvc3QoU3RyaW5n
Vmlldzo6Q28KIAogICAgIC8vIEZJWE1FOiBXZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIG1ha2Ug
c28gbWFueSBidWZmZXJzIGFuZCBTdHJpbmcgY29waWVzLgogICAgIFN0cmluZ0J1aWxkZXIgdXRm
OEVuY29kZWQ7Ci0gICAgZm9yICg7IGl0ZXJhdG9yICE9IGVuZDsgKytpdGVyYXRvcikgeworICAg
IGZvciAoOyAhaXRlcmF0b3IuYXRFbmQoKTsgKytpdGVyYXRvcikgewogICAgICAgICBpZiAoaXNU
YWJPck5ld2xpbmUoKml0ZXJhdG9yKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBp
ZiAoKml0ZXJhdG9yID09ICc6JykKQEAgLTE2MjMsMjcgKzE3MjksMjkgQEAgYm9vbCBVUkxQYXJz
ZXI6OnBhcnNlSG9zdChTdHJpbmdWaWV3OjpDbwogICAgIGF1dG8gYXNjaWlEb21haW4gPSBkb21h
aW5Ub0FTQ0lJKGRvbWFpbik7CiAgICAgaWYgKCFhc2NpaURvbWFpbiB8fCBoYXNJbnZhbGlkRG9t
YWluQ2hhcmFjdGVyKGFzY2lpRG9tYWluLnZhbHVlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgU3RyaW5nJiBhc2NpaURvbWFpblZhbHVlID0gYXNjaWlEb21haW4udmFsdWUoKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChhc2NpaURvbWFpblZhbHVlLmlzOEJpdCgpKTsKKyAgICBjb25zdCBM
Q2hhciogYXNjaWlEb21haW5DaGFyYWN0ZXJzID0gYXNjaWlEb21haW5WYWx1ZS5jaGFyYWN0ZXJz
OCgpOwogICAgIAotICAgIGF1dG8gYXNjaWlEb21haW5Db2RlUG9pbnRzID0gU3RyaW5nVmlldyhh
c2NpaURvbWFpbi52YWx1ZSgpKS5jb2RlUG9pbnRzKCk7Ci0gICAgaWYgKGF1dG8gYWRkcmVzcyA9
IHBhcnNlSVB2NEhvc3QoYXNjaWlEb21haW5Db2RlUG9pbnRzLmJlZ2luKCksIGFzY2lpRG9tYWlu
Q29kZVBvaW50cy5lbmQoKSkpIHsKKyAgICBpZiAoYXV0byBhZGRyZXNzID0gcGFyc2VJUHY0SG9z
dChDb2RlUG9pbnRJdGVyYXRvcjxMQ2hhcj4oYXNjaWlEb21haW5DaGFyYWN0ZXJzLCBhc2NpaURv
bWFpbkNoYXJhY3RlcnMgKyBhc2NpaURvbWFpblZhbHVlLmxlbmd0aCgpKSkpIHsKICAgICAgICAg
c2VyaWFsaXplSVB2NChhZGRyZXNzLnZhbHVlKCksIG1fYnVmZmVyKTsKICAgICAgICAgbV91cmwu
bV9ob3N0RW5kID0gbV9idWZmZXIubGVuZ3RoKCk7Ci0gICAgICAgIGlmIChpdGVyYXRvciA9PSBl
bmQpIHsKKyAgICAgICAgaWYgKGl0ZXJhdG9yLmF0RW5kKCkpIHsKICAgICAgICAgICAgIG1fdXJs
Lm1fcG9ydEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICAgICAgKytpdGVyYXRvcjsKLSAgICAgICAgcmV0dXJuIHBhcnNlUG9y
dChpdGVyYXRvciwgZW5kKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlUG9ydChpdGVyYXRvcik7CiAg
ICAgfQogICAgIAogICAgIG1fYnVmZmVyLmFwcGVuZChhc2NpaURvbWFpbi52YWx1ZSgpKTsKICAg
ICBtX3VybC5tX2hvc3RFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKLSAgICBpZiAoaXRlcmF0b3Ig
IT0gZW5kKSB7CisgICAgaWYgKCFpdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgIEFTU0VSVCgq
aXRlcmF0b3IgPT0gJzonKTsKICAgICAgICAgKytpdGVyYXRvcjsKLSAgICAgICAgd2hpbGUgKGl0
ZXJhdG9yICE9IGVuZCAmJiBpc1RhYk9yTmV3bGluZSgqaXRlcmF0b3IpKQorICAgICAgICB3aGls
ZSAoIWl0ZXJhdG9yLmF0RW5kKCkgJiYgaXNUYWJPck5ld2xpbmUoKml0ZXJhdG9yKSkKICAgICAg
ICAgICAgICsraXRlcmF0b3I7Ci0gICAgICAgIHJldHVybiBwYXJzZVBvcnQoaXRlcmF0b3IsIGVu
ZCk7CisgICAgICAgIHJldHVybiBwYXJzZVBvcnQoaXRlcmF0b3IpOwogICAgIH0KICAgICBtX3Vy
bC5tX3BvcnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCShyZXZpc2lvbiAyMDU5MjIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IGNsYXNzIENvZGVQb2ludEl0ZXJhdG9yOworCiBjbGFzcyBVUkxQYXJzZXIgewog
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFVSTCBwYXJzZShjb25zdCBTdHJpbmcmLCBjb25z
dCBVUkwmID0geyB9LCBjb25zdCBUZXh0RW5jb2RpbmcmID0gVVRGOEVuY29kaW5nKCkpOwpAQCAt
NDksMTAgKzUxLDEyIEBAIHByaXZhdGU6CiAgICAgU3RyaW5nQnVpbGRlciBtX2J1ZmZlcjsKICAg
ICBib29sIG1fdXJsSXNTcGVjaWFsIHsgZmFsc2UgfTsKICAgICBib29sIG1faG9zdEhhc1BlcmNl
bnRPck5vbkFTQ0lJIHsgZmFsc2UgfTsKLSAgICB2b2lkIHBhcnNlQXV0aG9yaXR5KFN0cmluZ1Zp
ZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yJiwgY29uc3QgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6
SXRlcmF0b3ImIGVuZCk7Ci0gICAgYm9vbCBwYXJzZUhvc3QoU3RyaW5nVmlldzo6Q29kZVBvaW50
czo6SXRlcmF0b3ImLCBjb25zdCBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciYgZW5k
KTsKLSAgICBib29sIHBhcnNlUG9ydChTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciYs
IGNvbnN0IFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yJiBlbmQpOwotICAgIFVSTCBm
YWlsdXJlKGNvbnN0IFN0cmluZyYgaW5wdXQpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gVVJMIHBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUqLCBjb25zdCB1bnNpZ25l
ZCBsZW5ndGgsIGNvbnN0IFVSTCYsIGNvbnN0IFRleHRFbmNvZGluZyYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgcGFyc2VBdXRob3JpdHkoQ29kZVBvaW50SXRl
cmF0b3I8Q2hhcmFjdGVyVHlwZT4pOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IGJvb2wgcGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+KTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlUG9ydChDb2RlUG9p
bnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IFVSTCBmYWlsdXJlKGNvbnN0IENoYXJhY3RlclR5cGUqLCB1bnNpZ25lZCBsZW5n
dGgpOwogCiAgICAgZW51bSBjbGFzcyBVUkxQYXJ0OwogICAgIHZvaWQgY29weVVSTFBhcnRzVW50
aWwoY29uc3QgVVJMJiBiYXNlLCBVUkxQYXJ0KTsK
</data>
<flag name="review"
          id="312196"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>