<?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>15993</bug_id>
          
          <creation_ts>2007-11-14 16:12:48 -0800</creation_ts>
          <short_desc>PCRE needs a bath</short_desc>
          <delta_ts>2007-11-14 17:17:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>61252</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-14 16:12:48 -0800</bug_when>
    <thetext>PCRE needs a bath

Wow.  Talk about hard to read code.

Anyway, in attempting to understand what jsRegExpCompile was doing, I ended up abstracting out the pattern length calculation and giving the entire method a bath.

All I did here was move out the length calculating code (along with associated local variables), move all variable declarations from the start of the block to where they are used (now that this is c++ and we can!), fix a few minor cases where the style disagreed with WebKit style (single line ifs, for example, where { goes, etc.)  I&apos;m *certain* I did not catch all style violations. :)

There are *no* functional changes in this patch.  It passes all the tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61253</commentid>
    <comment_count>1</comment_count>
      <attachid>17284</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-14 16:13:20 -0800</bug_when>
    <thetext>Created attachment 17284
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61254</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-14 16:17:46 -0800</bug_when>
    <thetext>Oh, and the very very first thing I did was to ask Xcode to re-indent the entire jsRegExpCompile function so I had some clue where blocks started and ended. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61255</commentid>
    <comment_count>3</comment_count>
      <attachid>17285</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-14 16:56:24 -0800</bug_when>
    <thetext>Created attachment 17285
Add a couple more minor cleanups to PCRE, -b diff

This now includes some additional cleanup I&apos;d been working on for my next patch.  However using -b to ignore whitespace makes for a smaller patch even with those extra changes.  I can get you the original diff ignoring whitespace if that would be easier.

My additional changes were to add a constructor to compile_data and to break out the debug printf code into its own separate function.  I also added returnError to replace the PCRE_ERROR_RETURN goto.

Yay for more-readable code!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61257</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-14 17:17:53 -0800</bug_when>
    <thetext>r27802</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17284</attachid>
            <date>2007-11-14 16:13:20 -0800</date>
            <delta_ts>2007-11-14 16:56:24 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>bath.patch</filename>
            <type>text/plain</type>
            <size>57236</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfY29tcGls
ZS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfY29tcGlsZS5jcHAKaW5kZXggNTcwMWMw
Mi4uODU0MDIzNiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX2NvbXBpbGUu
Y3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV9jb21waWxlLmNwcApAQCAtMjQyMSw3
ICsyNDIxLDUxOCBAQCB3aGlsZSAoKmNvZGUgPT0gT1BfQUxUKTsKIHJldHVybiBjOwogfQogCi0K
K3N0YXRpYyBpbnQgY2FsY3VsYXRlQ29tcGlsZWRQYXR0ZXJuTGVuZ3RoKGNvbnN0IHBjcmVfY2hh
ciogcGF0dGVybiwgaW50IHBhdHRlcm5MZW5ndGgsIEpTUmVnRXhwSWdub3JlQ2FzZU9wdGlvbiBp
Z25vcmVDYXNlLCBjb21waWxlX2RhdGEmIGNvbXBpbGVfYmxvY2ssIEVycm9yQ29kZSBlcnJvcmNv
ZGUpCit7CisgICAgaW50IGxlbmd0aCA9IDEgKyBMSU5LX1NJWkU7ICAgICAgLyogRm9yIGluaXRp
YWwgQlJBIHBsdXMgbGVuZ3RoICovCisgICAgaW50IGJyYW5jaF9leHRyYSA9IDA7CisgICAgaW50
IGJyYW5jaF9uZXdleHRyYTsKKyAgICBpbnQgbGFzdGl0ZW1sZW5ndGggPSAwOworICAgIEJPT0wg
Y2xhc3NfdXRmODsKKyAgICBCT09MIGNhcHR1cmluZzsKKyAgICB1bnNpZ25lZCBpbnQgYnJhc3Rh
Y2twdHIgPSAwOworICAgIGludCBicmFzdGFja1tCUkFTVEFDS19TSVpFXTsKKyAgICB1c2NoYXIg
YnJhbGVuc3RhY2tbQlJBU1RBQ0tfU0laRV07CisgICAgaW50IGl0ZW1fY291bnQgPSAtMTsKKyAg
ICBpbnQgYnJhY291bnQgPSAwOworICAgIAorICAgIGNvbnN0IHBjcmVfdWNoYXIqIHB0ciA9IChj
b25zdCBwY3JlX3VjaGFyKikocGF0dGVybiAtIDEpOworICAgIGNvbnN0IHBjcmVfdWNoYXIqIHBh
dHRlcm5FbmQgPSAoY29uc3QgcGNyZV91Y2hhciopKHBhdHRlcm4gKyBwYXR0ZXJuTGVuZ3RoKTsK
KyAgICAKKyAgICB3aGlsZSAoKytwdHIgPCBwYXR0ZXJuRW5kKQorICAgIHsKKyAgICAgICAgaW50
IG1pbiA9IDAsIG1heCA9IDA7CisgICAgICAgIGludCBjbGFzc19vcHRjb3VudDsKKyAgICAgICAg
aW50IGJyYWNrZXRfbGVuZ3RoOworICAgICAgICBpbnQgZHVwbGVuZ3RoOworICAgICAgICAKKyAg
ICAgICAgaW50IGMgPSAqcHRyOworICAgICAgICAKKyAgICAgICAgaXRlbV9jb3VudCsrOyAgICAv
KiBJcyB6ZXJvIGZvciB0aGUgZmlyc3Qgbm9uLWNvbW1lbnQgaXRlbSAqLworICAgICAgICAKKyAg
ICAgICAgc3dpdGNoKGMpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBBIGJhY2tzbGFz
aGVkIGl0ZW0gbWF5IGJlIGFuIGVzY2FwZWQgZGF0YSBjaGFyYWN0ZXIgb3IgaXQgbWF5IGJlIGEK
KyAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIHR5cGUuICovCisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBjYXNlICdcXCc6CisgICAgICAgICAgICAgICAgYyA9IGNoZWNrX2VzY2FwZSgm
cHRyLCBwYXR0ZXJuRW5kLCAmZXJyb3Jjb2RlLCBicmFjb3VudCwgZmFsc2UpOworICAgICAgICAg
ICAgICAgIGlmIChlcnJvcmNvZGUgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0x
OzsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBsYXN0aXRlbWxlbmd0aCA9IDE7
ICAgICAvKiBEZWZhdWx0IGxlbmd0aCBvZiBsYXN0IGl0ZW0gZm9yIHJlcGVhdHMgKi8KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoYyA+PSAwKSAgICAgICAgICAgICAvKiBE
YXRhIGNoYXJhY3RlciAqLworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
bGVuZ3RoICs9IDI7ICAgICAgICAgIC8qIEZvciBhIG9uZS1ieXRlIGNoYXJhY3RlciAqLworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGMgPiAxMjcpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IF9wY3JlX3V0ZjhfdGFibGUxX3NpemU7
IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA8PSBfcGNyZV91dGY4X3Rh
YmxlMVtpXSkgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gaTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxhc3RpdGVtbGVuZ3RoICs9IGk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvKiBPdGhlciBlc2NhcGVzIG5lZWQgb25lIGJ5dGUgKi8KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBsZW5ndGgrKzsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvKiBBIGJhY2sgcmVmZXJlbmNlIG5lZWRzIGFuIGFkZGl0aW9uYWwgMiBieXRlcywgcGx1cyBl
aXRoZXIgb25lIG9yIDUKKyAgICAgICAgICAgICAgICAgYnl0ZXMgZm9yIGEgcmVwZWF0LiBXZSBh
bHNvIG5lZWQgdG8ga2VlcCB0aGUgdmFsdWUgb2YgdGhlIGhpZ2hlc3QKKyAgICAgICAgICAgICAg
ICAgYmFjayByZWZlcmVuY2UuICovCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKGMgPD0gLUVTQ19SRUYpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBpbnQgcmVmbnVtID0gLWMgLSBFU0NfUkVGOworICAgICAgICAgICAgICAgICAgICBjb21waWxl
X2Jsb2NrLmJhY2tyZWZfbWFwIHw9IChyZWZudW0gPCAzMik/ICgxIDw8IHJlZm51bSkgOiAxOwor
ICAgICAgICAgICAgICAgICAgICBpZiAocmVmbnVtID4gY29tcGlsZV9ibG9jay50b3BfYmFja3Jl
ZikKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVfYmxvY2sudG9wX2JhY2tyZWYgPSBy
ZWZudW07CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSAyOyAgIC8qIEZvciBzaW5nbGUg
YmFjayByZWZlcmVuY2UgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHB0clsxXSA9PSAneycg
JiYgaXNfY291bnRlZF9yZXBlYXQocHRyKzIsIHBhdHRlcm5FbmQpKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSByZWFkX3JlcGVhdF9jb3VudHMo
cHRyKzIsICZtaW4sICZtYXgsICZlcnJvcmNvZGUpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGVycm9yY29kZSAhPSAwKSByZXR1cm4gLTE7OworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKChtaW4gPT0gMCAmJiAobWF4ID09IDEgfHwgbWF4ID09IC0xKSkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAobWluID09IDEgJiYgbWF4ID09IC0xKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsZW5ndGgrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgbGVu
Z3RoICs9IDU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHRyWzFdID09ICc/JykgcHRy
Kys7CisgICAgICAgICAgICAgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlICdeJzogICAgIC8qIFNpbmdsZS1ieXRlIG1l
dGFjaGFyYWN0ZXJzICovCisgICAgICAgICAgICAgICAgY2FzZSAnLic6CisgICAgICAgICAgICAg
ICAgY2FzZSAnJCc6CisgICAgICAgICAgICAgICAgbGVuZ3RoKys7CisgICAgICAgICAgICAgICAg
bGFzdGl0ZW1sZW5ndGggPSAxOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgJyonOiAgICAgICAgICAgIC8qIFRoZXNlIHJl
cGVhdHMgd29uJ3QgYmUgYWZ0ZXIgYnJhY2tldHM7ICovCisgICAgICAgICAgICAgICAgY2FzZSAn
Kyc6ICAgICAgICAgICAgLyogdGhvc2UgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSAqLworICAgICAg
ICAgICAgICAgIGNhc2UgJz8nOgorICAgICAgICAgICAgICAgIGxlbmd0aCsrOworICAgICAgICAg
ICAgICAgIGdvdG8gUE9TRVNTSVZFOyAgICAgIC8qIEEgZmV3IGxpbmVzIGJlbG93ICovCisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLyogVGhpcyBjb3ZlcnMgdGhlIGNhc2VzIG9m
IGJyYWNlZCByZXBlYXRzIGFmdGVyIGEgc2luZ2xlIGNoYXIsIG1ldGFjaGFyLAorICAgICAgICAg
ICAgICAgICBjbGFzcywgb3IgYmFjayByZWZlcmVuY2UuICovCisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgY2FzZSAneyc6CisgICAgICAgICAgICAgICAgaWYgKCFpc19jb3VudGVk
X3JlcGVhdChwdHIrMSwgcGF0dGVybkVuZCkpIGdvdG8gTk9STUFMX0NIQVI7CisgICAgICAgICAg
ICAgICAgcHRyID0gcmVhZF9yZXBlYXRfY291bnRzKHB0cisxLCAmbWluLCAmbWF4LCAmZXJyb3Jj
b2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyb3Jjb2RlICE9IDApIHJldHVybiAtMTs7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLyogVGhlc2Ugc3BlY2lhbCBjYXNlcyBq
dXN0IGluc2VydCBvbmUgZXh0cmEgb3Bjb2RlICovCisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKChtaW4gPT0gMCAmJiAobWF4ID09IDEgfHwgbWF4ID09IC0xKSkgfHwKKyAg
ICAgICAgICAgICAgICAgICAgKG1pbiA9PSAxICYmIG1heCA9PSAtMSkpCisgICAgICAgICAgICAg
ICAgICAgIGxlbmd0aCsrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8qIFRo
ZXNlIGNhc2VzIG1pZ2h0IGluc2VydCBhZGRpdGlvbmFsIGNvcGllcyBvZiBhIHByZWNlZGluZyBj
aGFyYWN0ZXIuICovCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1pbiAhPSAxKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggLT0gbGFzdGl0
ZW1sZW5ndGg7ICAgLyogVW5jb3VudCB0aGUgb3JpZ2luYWwgY2hhciBvciBtZXRhY2hhciAqLwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pbiA+IDApIGxlbmd0aCArPSAzICsgbGFzdGl0
ZW1sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbGVu
Z3RoICs9IGxhc3RpdGVtbGVuZ3RoICsgKChtYXggPiAwKT8gMyA6IDEpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocHRyWzFdID09ICc/
JykgcHRyKys7ICAgICAgLyogTmVlZHMgbm8gZXh0cmEgbGVuZ3RoICovCisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBQT1NFU1NJVkU6ICAgICAgICAgICAgICAgICAgICAgLyogVGVzdCBm
b3IgcG9zc2Vzc2l2ZSBxdWFudGlmaWVyICovCisgICAgICAgICAgICAgICAgaWYgKHB0clsxXSA9
PSAnKycpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwdHIrKzsKKyAg
ICAgICAgICAgICAgICAgICAgbGVuZ3RoICs9IDIgKyAyKkxJTktfU0laRTsgICAvKiBBbGxvdyBm
b3IgYXRvbWljIGJyYWNrZXRzICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8qIEFuIGFsdGVy
bmF0aW9uIGNvbnRhaW5zIGFuIG9mZnNldCB0byB0aGUgbmV4dCBicmFuY2ggb3Iga2V0LiBJZiBh
bnkgaW1zCisgICAgICAgICAgICAgICAgIG9wdGlvbnMgY2hhbmdlZCBpbiB0aGUgcHJldmlvdXMg
YnJhbmNoKGVzKSwgYW5kL29yIGlmIHdlIGFyZSBpbiBhCisgICAgICAgICAgICAgICAgIGxvb2ti
ZWhpbmQgYXNzZXJ0aW9uLCBleHRyYSBzcGFjZSB3aWxsIGJlIG5lZWRlZCBhdCB0aGUgc3RhcnQg
b2YgdGhlCisgICAgICAgICAgICAgICAgIGJyYW5jaC4gVGhpcyBpcyBoYW5kbGVkIGJ5IGJyYW5j
aF9leHRyYS4gKi8KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlICd8JzoK
KyAgICAgICAgICAgICAgICBsZW5ndGggKz0gMSArIExJTktfU0laRSArIGJyYW5jaF9leHRyYTsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAvKiBBIGNoYXJhY3RlciBjbGFzcyB1c2VzIDMzIGNoYXJhY3RlcnMgcHJvdmlkZWQgdGhh
dCBhbGwgdGhlIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICB2YWx1ZXMgYXJlIGxlc3MgdGhh
biAyNTYuIE90aGVyd2lzZSwgaXQgdXNlcyBhIGJpdCBtYXAgZm9yIGxvdyB2YWx1ZWQKKyAgICAg
ICAgICAgICAgICAgY2hhcmFjdGVycywgYW5kIGluZGl2aWR1YWwgaXRlbXMgZm9yIG90aGVycy4g
RG9uJ3Qgd29ycnkgYWJvdXQgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgIHR5cGVzIHRoYXQg
YXJlbid0IGFsbG93ZWQgaW4gY2xhc3NlcyAtIHRoZXknbGwgZ2V0IHBpY2tlZCB1cCBkdXJpbmcg
dGhlCisgICAgICAgICAgICAgICAgIGNvbXBpbGUuIEEgY2hhcmFjdGVyIGNsYXNzIHRoYXQgY29u
dGFpbnMgb25seSBvbmUgc2luZ2xlLWJ5dGUgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgIHVz
ZXMgMiBvciAzIGJ5dGVzLCBkZXBlbmRpbmcgb24gd2hldGhlciBpdCBpcyBuZWdhdGVkIG9yIG5v
dC4gTm90aWNlIHRoaXMKKyAgICAgICAgICAgICAgICAgd2hlcmUgd2UgY2FuLiAoSW4gVVRGLTgg
bW9kZSB3ZSBjYW4gZG8gdGhpcyBvbmx5IGZvciBjaGFycyA8IDEyOC4pICovCisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSAnWyc6CisgICAgICAgICAgICAgICAgaWYgKCoo
KytwdHIpID09ICdeJykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNs
YXNzX29wdGNvdW50ID0gMTA7ICAvKiBHcmVhdGVyIHRoYW4gb25lICovCisgICAgICAgICAgICAg
ICAgICAgIHB0cisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGNs
YXNzX29wdGNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjbGFz
c191dGY4ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yICg7
IHB0ciA8IHBhdHRlcm5FbmQgJiYgKnB0ciAhPSAnXSc7ICsrcHRyKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIGVzY2FwZXMgKi8KKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICgqcHRyID09ICdcXCcpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBjaGVja19lc2Nh
cGUoJnB0ciwgcGF0dGVybkVuZCwgJmVycm9yY29kZSwgYnJhY291bnQsIHRydWUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGVycm9yY29kZSAhPSAwKSByZXR1cm4gLTE7OworICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBcYiBpcyBiYWNr
c3BhY2UgaW5zaWRlIGEgY2xhc3M7IFxYIGlzIGxpdGVyYWwgKi8KKyAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1jID09IEVTQ19iKSBjID0gJ1xi
JzsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLyog
SGFuZGxlIGVzY2FwZXMgdGhhdCB0dXJuIGludG8gY2hhcmFjdGVycyAqLworICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+PSAwKSBnb3RvIE5P
Tl9TUEVDSUFMX0NIQVJBQ1RFUjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgLyogRXNjYXBlcyB0aGF0IGFyZSBtZXRhLXRoaW5ncy4gVGhlIG5vcm1h
bCBvbmVzIGp1c3QgYWZmZWN0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIGJpdCBtYXAs
IGJ1dCBVbmljb2RlIHByb3BlcnRpZXMgcmVxdWlyZSBhbiBYQ0xBU1MgZXh0ZW5kZWQgaXRlbS4g
Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzX29wdGNvdW50ID0gMTA7ICAgICAgICAgLyogXGQsIFxzIGV0YzsgbWFrZSBzdXJlID4g
MSAqLworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvKiBBbnl0aGluZyBlbHNl
IGluY3JlbWVudHMgdGhlIHBvc3NpYmxlIG9wdGltaXphdGlvbiBjb3VudC4gV2UgaGF2ZSB0bwor
ICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0IHJhbmdlcyBoZXJlIHNvIHRoYXQgd2UgY2FuIGNv
bXB1dGUgdGhlIG51bWJlciBvZiBleHRyYSByYW5nZXMgZm9yCisgICAgICAgICAgICAgICAgICAg
ICBjYXNlbGVzcyB3aWRlIGNoYXJhY3RlcnMgd2hlbiBVQ1Agc3VwcG9ydCBpcyBhdmFpbGFibGUu
IElmIHRoZXJlIGFyZSB3aWRlCisgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzLCB3ZSBh
cmUgZ29pbmcgdG8gaGF2ZSB0byB1c2UgYW4gWENMQVNTLCBldmVuIGZvciBzaW5nbGUKKyAgICAg
ICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMuICovCisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBkOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4dHJhID0g
MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRVRDSEFSTEVORU5EKGMsIHB0ciwgcGF0
dGVybkVuZCwgZXh0cmEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ciArPSBleHRy
YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tZSBoZXJlIGZyb20gaGFuZGxpbmcgXCBhYm92
ZSB3aGVuIGl0IGVzY2FwZXMgdG8gYSBjaGFyIHZhbHVlICovCisgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgTk9OX1NQRUNJQUxfQ0hBUkFDVEVSOgorICAgICAg
ICAgICAgICAgICAgICAgICAgY2xhc3Nfb3B0Y291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgZCA9IC0xOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHB0ciArIDEgPCBwYXR0ZXJuRW5kICYmIHB0clsxXSA9PSAnLScpCisgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNyZV91Y2hh
ciBjb25zdCAqaHlwdHIgPSBwdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cHRyICsgMSA8IHBhdHRlcm5FbmQgJiYgcHRyWzFdID09ICdcXCcpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHIrKzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGNoZWNrX2VzY2FwZSgmcHRyLCBwYXR0
ZXJuRW5kLCAmZXJyb3Jjb2RlLCBicmFjb3VudCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChlcnJvcmNvZGUgIT0gMCkgcmV0dXJuIC0xOzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKC1kID09IEVTQ19iKSBkID0gJ1xiJzsgICAgICAgIC8q
IGJhY2tzcGFjZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChwdHIgKyAxIDwgcGF0dGVybkVuZCAmJiBwdHJbMV0g
IT0gJ10nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHRyKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHRyYSA9IDA7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRVRDSEFSTEVORU5EKGQsIHB0ciwgcGF0
dGVybkVuZCwgZXh0cmEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRy
ICs9IGV4dHJhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkIDwg
MCkgcHRyID0gaHlwdHI7ICAgICAgLyogZ28gYmFjayB0byBoeXBoZW4gYXMgZGF0YSAqLworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICAvKiBJZiBkID49IDAgd2UgaGF2ZSBhIHJhbmdlLiBJbiBVVEYtOCBt
b2RlLCBpZiB0aGUgZW5kIGlzID4gMjU1LCBvciA+CisgICAgICAgICAgICAgICAgICAgICAgICAg
MTI3IGZvciBjYXNlbGVzcyBtYXRjaGluZywgd2Ugd2lsbCBuZWVkIHRvIHVzZSBhbiBYQ0xBU1Mu
ICovCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChkID49IDApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhc3Nfb3B0Y291bnQgPSAxMDsgICAgIC8qIEVuc3VyZSA+IDEgKi8KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoZCA8IGMpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmNvZGUgPSBFUlI4
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGQgPiAyNTUgfHwgKGlnbm9yZUNhc2UgJiYgZCA+
IDEyNykpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXNjaGFyIGJ1ZmZlcls2XTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFjbGFzc191dGY4KSAgICAgICAgIC8qIEFsbG93IGZvciBYQ0xBU1Mgb3Zl
cmhlYWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfdXRmOCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gTElOS19TSVpFICsgMjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgaGF2ZSBVQ1Agc3Vw
cG9ydCwgZmluZCBvdXQgaG93IG1hbnkgZXh0cmEgcmFuZ2VzIGFyZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmVlZGVkIHRvIG1hcCB0aGUgb3RoZXIgY2FzZSBvZiBjaGFyYWN0
ZXJzIHdpdGhpbiB0aGlzIHJhbmdlLiBXZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGF2ZSB0byBtaW1pYyB0aGUgcmFuZ2Ugb3B0aW1pemF0aW9uIGhlcmUsIGJlY2F1c2UgZXh0
ZW5kaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgdXB3YXJk
cyBtaWdodCBwdXNoIGQgb3ZlciBhIGJvdW5kYXJ5IHRoYXQgbWFrZXMgaXMgdXNlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhbm90aGVyIGJ5dGUgaW4gdGhlIFVURi04IHJlcHJl
c2VudGF0aW9uLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlnbm9yZUNhc2UpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBvY2MsIG9jZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYyA9
IGM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3JpZ2QgPSBkOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGdldF9vdGhlcmNhc2Vf
cmFuZ2UoJmNjLCBvcmlnZCwgJm9jYywgJm9jZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG9jYyA+PSBjICYmIG9jZCA8PSBkKSBjb250aW51ZTsgICAvKiBTa2lwIGVtYmVkZGVkICovCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9jYyA8IGMgICYmIG9jZCA+PSBjIC0gMSkgIC8q
IEV4dGVuZCB0aGUgYmFzaWMgcmFuZ2UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlmIHRoZXJlIGlzIG92
ZXJsYXAsICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YyA9IG9jYzsgICAgICAgICAgICAgICAgICAgICAvKiBub3RpbmcgdGhhdCBpZiBvY2MgPCBjICov
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAg
ICAgICAgICAgICAgICAgICAgLyogd2UgY2FuJ3QgaGF2ZSBvY2QgPiBkICAqLworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLyogYmVjYXVzZSBhIHN1YnJhbmdlIGlzICAqLworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChvY2QgPiBkICYmIG9jYyA8PSBkICsgMSkgICAvKiBhbHdheXMg
c2hvcnRlciB0aGFuICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGUgYmFzaWMgcmFuZ2UuICAgICAg
ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBvY2Q7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvKiBBbiBleHRyYSBpdGVtIGlzIG5lZWRlZCAqLworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxlbmd0aCArPSAxICsgX3BjcmVfb3JkMnV0Zjgob2NjLCBidWZmZXIpICsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG9jYyA9PSBvY2QpPyAwIDog
X3BjcmVfb3JkMnV0Zjgob2NkLCBidWZmZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LyogVGhlIGxlbmd0aCBvZiB0aGUgKHBvc3NpYmx5IGV4dGVuZGVkKSByYW5nZSAqLworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGVuZ3RoICs9IDEgKyBfcGNyZV9vcmQydXRmOChjLCBidWZmZXIpICsgX3BjcmVfb3JkMnV0
ZjgoZCwgYnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdlIGhhdmUgYSBzaW5n
bGUgY2hhcmFjdGVyLiBUaGVyZSBpcyBub3RoaW5nIHRvIGJlIGRvbmUgdW5sZXNzIHdlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgYXJlIGluIFVURi04IG1vZGUuIElmIHRoZSBjaGFyIGlzID4g
MjU1LCBvciAxMjcgd2hlbiBjYXNlbGVzcywgd2UgbXVzdAorICAgICAgICAgICAgICAgICAgICAg
ICAgIGFsbG93IGZvciBhbiBYQ0xfU0lOR0xFIGl0ZW0sIGRvdWJsZWQgZm9yIGNhc2VsZXNzbmVz
cyBpZiB0aGVyZSBpcyBVQ1AKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LiAqLwor
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KChjID4gMjU1IHx8IChpZ25vcmVDYXNlICYmIGMgPiAxMjcpKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzY2hhciBidWZm
ZXJbNl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX29wdGNvdW50ID0g
MTA7ICAgICAvKiBFbnN1cmUgPiAxICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghY2xhc3NfdXRmOCkgICAgICAgICAvKiBBbGxvdyBmb3IgWENMQVNTIG92ZXJoZWFkICov
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsYXNzX3V0ZjggPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGVuZ3RoICs9IExJTktfU0laRSArIDI7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3Ro
ICs9IChpZ25vcmVDYXNlID8gMiA6IDEpICogKDEgKyBfcGNyZV9vcmQydXRmOChjLCBidWZmZXIp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHB0ciA+PSBwYXR0ZXJuRW5kKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgLyogTWlzc2luZyB0ZXJtaW5hdGluZyAnXScgKi8KKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVycm9yY29kZSA9IEVSUjY7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAtMTs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIC8qIFdlIGNhbiBvcHRpbWl6ZSB3aGVuIHRoZXJlIHdhcyBvbmx5
IG9uZSBvcHRpbWl6YWJsZSBjaGFyYWN0ZXIuIFJlcGVhdHMKKyAgICAgICAgICAgICAgICAgZm9y
IHBvc2l0aXZlIGFuZCBuZWdhdGVkIHNpbmdsZSBvbmUtYnl0ZSBjaGFycyBhcmUgaGFuZGxlZCBi
eSB0aGUgZ2VuZXJhbAorICAgICAgICAgICAgICAgICBjb2RlLiBIZXJlLCB3ZSBoYW5kbGUgcmVw
ZWF0cyBmb3IgdGhlIGNsYXNzIG9wY29kZXMuICovCisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKGNsYXNzX29wdGNvdW50ID09IDEpIGxlbmd0aCArPSAzOyBlbHNlCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gMzM7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvKiBBIHJlcGVhdCBuZWVkcyBlaXRo
ZXIgMSBvciA1IGJ5dGVzLiBJZiBpdCBpcyBhIHBvc3Nlc3NpdmUgcXVhbnRpZmllciwKKyAgICAg
ICAgICAgICAgICAgICAgIHdlIGFsc28gbmVlZCBleHRyYSBmb3Igd3JhcHBpbmcgdGhlIHdob2xl
IHRoaW5nIGluIGEgc3ViLXBhdHRlcm4uICovCisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBpZiAocHRyICsgMSA8IHBhdHRlcm5FbmQgJiYgcHRyWzFdID09ICd7JyAm
JiBpc19jb3VudGVkX3JlcGVhdChwdHIrMiwgcGF0dGVybkVuZCkpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB0ciA9IHJlYWRfcmVwZWF0X2NvdW50cyhw
dHIrMiwgJm1pbiwgJm1heCwgJmVycm9yY29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoZXJyb3Jjb2RlICE9IDApIHJldHVybiAtMTs7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoKG1pbiA9PSAwICYmIChtYXggPT0gMSB8fCBtYXggPT0gLTEpKSB8fAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChtaW4gPT0gMSAmJiBtYXggPT0gLTEpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxlbmd0aCsrOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBsZW5n
dGggKz0gNTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdHIgKyAxIDwgcGF0dGVybkVu
ZCAmJiBwdHJbMV0gPT0gJysnKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB0cisrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxl
bmd0aCArPSAyICsgMipMSU5LX1NJWkU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwdHIgKyAxIDwgcGF0dGVybkVuZCAmJiBwdHJb
MV0gPT0gJz8nKSBwdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAvKiBCcmFja2V0cyBtYXkgYmUgZ2VudWluZSBncm91cHMgb3Igc3BlY2lhbCB0aGlu
Z3MgKi8KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlICcoJzoKKyAgICAg
ICAgICAgICAgICBicmFuY2hfbmV3ZXh0cmEgPSAwOworICAgICAgICAgICAgICAgIGJyYWNrZXRf
bGVuZ3RoID0gMSArIExJTktfU0laRTsKKyAgICAgICAgICAgICAgICBjYXB0dXJpbmcgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvKiBIYW5kbGUgc3BlY2lhbCBm
b3JtcyBvZiBicmFja2V0LCB3aGljaCBhbGwgc3RhcnQgKD8gKi8KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpZiAocHRyICsgMSA8IHBhdHRlcm5FbmQgJiYgcHRyWzFdID09ICc/
JykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYyA9IChw
dHIgKyAyIDwgcGF0dGVybkVuZCA/IHB0clsyXSA6IDApKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm9uLXJlZmVyZW5jaW5nIGdyb3VwcyBh
bmQgbG9va2FoZWFkcyBqdXN0IG1vdmUgdGhlIHBvaW50ZXIgb24sIGFuZAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGVuIGJlaGF2ZSBsaWtlIGEgbm9uLXNwZWNpYWwgYnJhY2tldCwg
ZXhjZXB0IHRoYXQgdGhleSBkb24ndCBpbmNyZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhlIGNvdW50IG9mIGV4dHJhY3RpbmcgYnJhY2tldHMuIERpdHRvIGZvciB0aGUgIm9u
Y2Ugb25seSIgYnJhY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMg
aW4gUGVybCBmcm9tIHZlcnNpb24gNS4wMDUuICovCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc6JzoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgJz0nOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnISc6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHRyICs9IDI7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLyogRWxzZSBsb29wIGNoZWNraW5nIHZhbGlkIG9wdGlvbnMgdW50aWwg
KSBpcyBtZXQuIEFueXRoaW5nIGVsc2UgaXMgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3IuIElmIHdlIGFyZSB3aXRob3V0IGFueSBicmFja2V0cywgaS5lLiBhdCB0b3AgbGV2
ZWwsIHRoZSBzZXR0aW5ncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3QgYXMgaWYg
c3BlY2lmaWVkIGluIHRoZSBvcHRpb25zLCBzbyBtYXNzYWdlIHRoZSBvcHRpb25zIGltbWVkaWF0
ZWx5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGZvciBiYWNrd2FyZCBj
b21wYXRpYmlsaXR5IHdpdGggUGVybCA1LjAwNC4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXJyb3Jjb2RlID0gRVJSMTI7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIC0xOzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBlbHNlIGNhcHR1cmluZyA9IDE7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLyogQ2FwdHVyaW5nIGJyYWNrZXRzIG11
c3QgYmUgY291bnRlZCBzbyB3ZSBjYW4gcHJvY2VzcyBlc2NhcGVzIGluIGEKKyAgICAgICAgICAg
ICAgICAgUGVybGlzaCB3YXkuIElmIHRoZSBudW1iZXIgZXhjZWVkcyBFWFRSQUNUX0JBU0lDX01B
WCB3ZSBhcmUgZ29pbmcgdG8gbmVlZAorICAgICAgICAgICAgICAgICBhbiBhZGRpdGlvbmFsIDMg
Ynl0ZXMgb2YgbWVtb3J5IHBlciBjYXB0dXJpbmcgYnJhY2tldC4gKi8KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBpZiAoY2FwdHVyaW5nKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgYnJhY291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJy
YWNvdW50ID4gRVhUUkFDVF9CQVNJQ19NQVgpIGJyYWNrZXRfbGVuZ3RoICs9IDM7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8qIFNhdmUgbGVu
Z3RoIGZvciBjb21wdXRpbmcgd2hvbGUgbGVuZ3RoIGF0IGVuZCBpZiB0aGVyZSdzIGEgcmVwZWF0
IHRoYXQKKyAgICAgICAgICAgICAgICAgcmVxdWlyZXMgZHVwbGljYXRpb24gb2YgdGhlIGdyb3Vw
LiBBbHNvIHNhdmUgdGhlIGN1cnJlbnQgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgYnJhbmNo
X2V4dHJhLCBhbmQgc3RhcnQgdGhlIG5ldyBncm91cCB3aXRoIHRoZSBuZXcgdmFsdWUuIElmIG5v
bi16ZXJvLCB0aGlzCisgICAgICAgICAgICAgICAgIHdpbGwgZWl0aGVyIGJlIDIgZm9yIGEgKD9p
bXN4OiBncm91cCwgb3IgMyBmb3IgYSBsb29rYmVoaW5kIGFzc2VydGlvbi4gKi8KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoYnJhc3RhY2twdHIgPj0gc2l6ZW9mKGJyYXN0
YWNrKS9zaXplb2YoaW50KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGVycm9yY29kZSA9IEVSUjE3OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBicmFsZW5z
dGFja1ticmFzdGFja3B0cl0gPSBicmFuY2hfZXh0cmE7CisgICAgICAgICAgICAgICAgYnJhbmNo
X2V4dHJhID0gYnJhbmNoX25ld2V4dHJhOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGJyYXN0YWNrW2JyYXN0YWNrcHRyKytdID0gbGVuZ3RoOworICAgICAgICAgICAgICAgIGxl
bmd0aCArPSBicmFja2V0X2xlbmd0aDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvKiBIYW5kbGUga2V0LiBMb29rIGZvciBzdWJz
ZXF1ZW50IG1heC9taW47IGZvciBjZXJ0YWluIHNldHMgb2YgdmFsdWVzIHdlCisgICAgICAgICAg
ICAgICAgIGhhdmUgdG8gcmVwbGljYXRlIHRoaXMgYnJhY2tldCB1cCB0byB0aGF0IG1hbnkgdGlt
ZXMuIElmIGJyYXN0YWNrcHRyIGlzCisgICAgICAgICAgICAgICAgIDAgdGhpcyBpcyBhbiB1bm1h
dGNoZWQgYnJhY2tldCB3aGljaCB3aWxsIGdlbmVyYXRlIGFuIGVycm9yLCBidXQgdGFrZSBjYXJl
CisgICAgICAgICAgICAgICAgIG5vdCB0byB0cnkgdG8gYWNjZXNzIGJyYXN0YWNrWy0xXSB3aGVu
IGNvbXB1dGluZyB0aGUgbGVuZ3RoIGFuZCByZXN0b3JpbmcKKyAgICAgICAgICAgICAgICAgdGhl
IGJyYW5jaF9leHRyYSB2YWx1ZS4gKi8KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBjYXNlICcpJzoKKyAgICAgICAgICAgICAgICBsZW5ndGggKz0gMSArIExJTktfU0laRTsKKyAg
ICAgICAgICAgICAgICBpZiAoYnJhc3RhY2twdHIgPiAwKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgZHVwbGVuZ3RoID0gbGVuZ3RoIC0gYnJhc3RhY2tbLS1icmFzdGFj
a3B0cl07CisgICAgICAgICAgICAgICAgICAgIGJyYW5jaF9leHRyYSA9IGJyYWxlbnN0YWNrW2Jy
YXN0YWNrcHRyXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBkdXBs
ZW5ndGggPSAwOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8qIExlYXZlIHB0
ciBhdCB0aGUgZmluYWwgY2hhcjsgZm9yIHJlYWRfcmVwZWF0X2NvdW50cyB0aGlzIGhhcHBlbnMK
KyAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseTsgZm9yIHRoZSBvdGhlcnMgd2UgbmVlZCBh
biBpbmNyZW1lbnQuICovCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHB0
ciArIDEgPCBwYXR0ZXJuRW5kICYmIChjID0gcHRyWzFdKSA9PSAneycgJiYgaXNfY291bnRlZF9y
ZXBlYXQocHRyKzIsIHBhdHRlcm5FbmQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcHRyID0gcmVhZF9yZXBlYXRfY291bnRzKHB0cisyLCAmbWluLCAmbWF4LCAmZXJy
b3Jjb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yY29kZSAhPSAwKSByZXR1cm4g
LTE7OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjID09ICcq
JykgeyBtaW4gPSAwOyBtYXggPSAtMTsgcHRyKys7IH0KKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChjID09ICcrJykgeyBtaW4gPSAxOyBtYXggPSAtMTsgcHRyKys7IH0KKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChjID09ICc/JykgeyBtaW4gPSAwOyBtYXggPSAxOyAgcHRyKys7IH0KKyAgICAg
ICAgICAgICAgICBlbHNlIHsgbWluID0gMTsgbWF4ID0gMTsgfQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIC8qIElmIHRoZSBtaW5pbXVtIGlzIHplcm8sIHdlIGhhdmUgdG8gYWxs
b3cgZm9yIGFuIE9QX0JSQVpFUk8gYmVmb3JlIHRoZQorICAgICAgICAgICAgICAgICBncm91cCwg
YW5kIGlmIHRoZSBtYXhpbXVtIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLCB3ZSBoYXZlIHRvIHJlcGxp
Y2F0ZQorICAgICAgICAgICAgICAgICBtYXh2YWwtMSB0aW1lczsgZWFjaCByZXBsaWNhdGlvbiBh
Y3F1aXJlcyBhbiBPUF9CUkFaRVJPIHBsdXMgYSBuZXN0aW5nCisgICAgICAgICAgICAgICAgIGJy
YWNrZXQgc2V0LiAqLworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChtaW4g
PT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCsrOwor
ICAgICAgICAgICAgICAgICAgICBpZiAobWF4ID4gMCkgbGVuZ3RoICs9IChtYXggLSAxKSAqIChk
dXBsZW5ndGggKyAzICsgMipMSU5LX1NJWkUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAvKiBXaGVuIHRoZSBtaW5pbXVtIGlzIGdyZWF0ZXIg
dGhhbiB6ZXJvLCB3ZSBoYXZlIHRvIHJlcGxpY2F0ZSB1cCB0bworICAgICAgICAgICAgICAgICBt
aW52YWwtMSB0aW1lcywgd2l0aCBubyBhZGRpdGlvbnMgcmVxdWlyZWQgaW4gdGhlIGNvcGllcy4g
VGhlbiwgaWYgdGhlcmUKKyAgICAgICAgICAgICAgICAgaXMgYSBsaW1pdGVkIG1heGltdW0gd2Ug
aGF2ZSB0byByZXBsaWNhdGUgdXAgdG8gbWF4dmFsLTEgdGltZXMgYWxsb3dpbmcKKyAgICAgICAg
ICAgICAgICAgZm9yIGEgQlJBWkVSTyBpdGVtIGJlZm9yZSBlYWNoIG9wdGlvbmFsIGNvcHkgYW5k
IG5lc3RpbmcgYnJhY2tldHMgZm9yIGFsbAorICAgICAgICAgICAgICAgICBidXQgb25lIG9mIHRo
ZSBvcHRpb25hbCBjb3BpZXMuICovCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICs9ICht
aW4gLSAxKSAqIGR1cGxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1heCA+IG1pbikg
ICAvKiBOZWVkIHRoaXMgdGVzdCBhcyBtYXg9LTEgbWVhbnMgbm8gbGltaXQgKi8KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxlbmd0aCArPSAobWF4IC0gbWluKSAqIChkdXBsZW5ndGggKyAzICsg
MipMSU5LX1NJWkUpCisgICAgICAgICAgICAgICAgICAgICAgICAtICgyICsgMipMSU5LX1NJWkUp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAv
KiBBbGxvdyBzcGFjZSBmb3Igb25jZSBicmFja2V0cyBmb3IgInBvc3Nlc3NpdmUgcXVhbnRpZmll
ciIgKi8KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocHRyICsgMSA8IHBh
dHRlcm5FbmQgJiYgcHRyWzFdID09ICcrJykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHB0cisrOworICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gMiArIDIqTElO
S19TSVpFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvKiBOb24tc3BlY2lhbCBjaGFyYWN0ZXIu
IEl0IHdvbid0IGJlIHNwYWNlIG9yICMgaW4gZXh0ZW5kZWQgbW9kZSwgc28gaXQgaXMKKyAgICAg
ICAgICAgICAgICAgYWx3YXlzIGEgZ2VudWluZSBjaGFyYWN0ZXIuIElmIHdlIGFyZSBpbiBhIFxR
Li4uXEUgc2VxdWVuY2UsIGNoZWNrIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgZW5kOyBpZiBu
b3QsIHdlIGhhdmUgYSBsaXRlcmFsLiAqLworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBOT1JNQUxfQ0hBUjoKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBsZW5ndGggKz0gMjsgICAgICAgICAgLyogRm9yIGEgb25lLWJ5dGUg
Y2hhcmFjdGVyICovCisgICAgICAgICAgICAgICAgbGFzdGl0ZW1sZW5ndGggPSAxOyAgIC8qIERl
ZmF1bHQgbGVuZ3RoIG9mIGxhc3QgaXRlbSBmb3IgcmVwZWF0cyAqLworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIC8qIEluIFVURi04IG1vZGUsIGNoZWNrIGZvciBhZGRpdGlvbmFs
IGJ5dGVzLiAqLworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChjID4gMTI3
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKElTX0xFQURJTkdf
U1VSUk9HQVRFKGMpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjID0gREVDT0RFX1NVUlJPR0FURV9QQUlSKGMsIHB0ciA8IHBhdHRlcm5FbmQgPyAqcHRy
IDogMCk7CisgICAgICAgICAgICAgICAgICAgICAgICArK3B0cjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgX3BjcmVfdXRmOF90YWJsZTFfc2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChjIDw9IF9wY3JlX3V0ZjhfdGFibGUxW2ldKSBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxlbmd0aCArPSBpOworICAgICAgICAgICAgICAgICAgICAgICAgbGFz
dGl0ZW1sZW5ndGggKz0gaTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBsZW5ndGggKz0gMiArIExJTktfU0laRTsgICAgLyogRm9yIGZp
bmFsIEtFVCBhbmQgRU5EICovCisgICAgcmV0dXJuIGxlbmd0aDsKK30KIAogLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgIENvbXBpbGUg
YSBSZWd1bGFyIEV4cHJlc3Npb24gICAgICAgICAgICAqCkBAIC0yNDQ3LDczOSArMjk1OCwyMTkg
QEAgUmV0dXJuczogICAgICAgIHBvaW50ZXIgdG8gY29tcGlsZWQgZGF0YSBibG9jaywgb3IgTlVM
TCBvbiBlcnJvciwKIAogcGNyZSAqCiBqc1JlZ0V4cENvbXBpbGUoY29uc3QgcGNyZV9jaGFyKiBw
YXR0ZXJuLCBpbnQgcGF0dGVybkxlbmd0aCwKLSAgICBKU1JlZ0V4cElnbm9yZUNhc2VPcHRpb24g
aWdub3JlQ2FzZSwgSlNSZWdFeHBNdWx0aWxpbmVPcHRpb24gbXVsdGlsaW5lLAotICAgIHVuc2ln
bmVkKiBudW1TdWJwYXR0ZXJucywgY29uc3QgY2hhcioqIGVycm9ycHRyKQorICAgICAgICAgICAg
ICAgIEpTUmVnRXhwSWdub3JlQ2FzZU9wdGlvbiBpZ25vcmVDYXNlLCBKU1JlZ0V4cE11bHRpbGlu
ZU9wdGlvbiBtdWx0aWxpbmUsCisgICAgICAgICAgICAgICAgdW5zaWduZWQqIG51bVN1YnBhdHRl
cm5zLCBjb25zdCBjaGFyKiogZXJyb3JwdHIpCiB7Ci1yZWFsX3BjcmUgKnJlOwotaW50IGxlbmd0
aCA9IDEgKyBMSU5LX1NJWkU7ICAgICAgLyogRm9yIGluaXRpYWwgQlJBIHBsdXMgbGVuZ3RoICov
Ci1pbnQgYywgZmlyc3RieXRlLCByZXFieXRlOwotaW50IGJyYWNvdW50ID0gMDsKLWludCBicmFu
Y2hfZXh0cmEgPSAwOwotaW50IGJyYW5jaF9uZXdleHRyYTsKLWludCBpdGVtX2NvdW50ID0gLTE7
Ci1pbnQgbmFtZV9jb3VudCA9IDA7Ci1pbnQgbWF4X25hbWVfc2l6ZSA9IDA7Ci1pbnQgbGFzdGl0
ZW1sZW5ndGggPSAwOwotRXJyb3JDb2RlIGVycm9yY29kZSA9IEVSUjA7Ci1CT09MIGNsYXNzX3V0
Zjg7Ci1CT09MIGNhcHR1cmluZzsKLXVuc2lnbmVkIGludCBicmFzdGFja3B0ciA9IDA7Ci1zaXpl
X3Qgc2l6ZTsKLXVzY2hhciAqY29kZTsKLWNvbnN0IHVzY2hhciAqY29kZXN0YXJ0OwotY29uc3Qg
cGNyZV91Y2hhciAqcHRyOwotY29uc3QgcGNyZV91Y2hhciAqcGF0dGVybkVuZDsKLWNvbXBpbGVf
ZGF0YSBjb21waWxlX2Jsb2NrOwotaW50IGJyYXN0YWNrW0JSQVNUQUNLX1NJWkVdOwotdXNjaGFy
IGJyYWxlbnN0YWNrW0JSQVNUQUNLX1NJWkVdOwotCi0vKiBXZSBjYW4ndCBwYXNzIGJhY2sgYW4g
ZXJyb3IgbWVzc2FnZSBpZiBlcnJvcnB0ciBpcyBOVUxMOyBJIGd1ZXNzIHRoZSBiZXN0IHdlCi1j
YW4gZG8gaXMganVzdCByZXR1cm4gTlVMTCwgYnV0IHdlIGNhbiBzZXQgYSBjb2RlIHZhbHVlIGlm
IHRoZXJlIGlzIGEgY29kZQotcG9pbnRlci4gKi8KLQotaWYgKGVycm9ycHRyID09IE5VTEwpCi0g
IHsKLSAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotKmVycm9ycHRyID0gTlVMTDsKLQotLyogU2V0IHVw
IHBvaW50ZXJzIHRvIHRoZSBpbmRpdmlkdWFsIGNoYXJhY3RlciB0YWJsZXMgKi8KLQotY29tcGls
ZV9ibG9jay5sY2MgPSBfcGNyZV9kZWZhdWx0X3RhYmxlcyArIGxjY19vZmZzZXQ7Ci1jb21waWxl
X2Jsb2NrLmZjYyA9IF9wY3JlX2RlZmF1bHRfdGFibGVzICsgZmNjX29mZnNldDsKLWNvbXBpbGVf
YmxvY2suY2JpdHMgPSBfcGNyZV9kZWZhdWx0X3RhYmxlcyArIGNiaXRzX29mZnNldDsKLWNvbXBp
bGVfYmxvY2suY3R5cGVzID0gX3BjcmVfZGVmYXVsdF90YWJsZXMgKyBjdHlwZXNfb2Zmc2V0Owot
Ci0vKiBNYXhpbXVtIGJhY2sgcmVmZXJlbmNlIGFuZCBiYWNrcmVmIGJpdG1hcC4gVGhpcyBpcyB1
cGRhdGVkIGZvciBudW1lcmljCi1yZWZlcmVuY2VzIGR1cmluZyB0aGUgZmlyc3QgcGFzcywgYnV0
IGZvciBuYW1lZCByZWZlcmVuY2VzIGR1cmluZyB0aGUgYWN0dWFsCi1jb21waWxlIHBhc3MuIFRo
ZSBiaXRtYXAgcmVjb3JkcyB1cCB0byAzMSBiYWNrIHJlZmVyZW5jZXMgdG8gaGVscCBpbiBkZWNp
ZGluZwotd2hldGhlciAoLiopIGNhbiBiZSB0cmVhdGVkIGFzIGFuY2hvcmVkIG9yIG5vdC4gKi8K
LQotY29tcGlsZV9ibG9jay50b3BfYmFja3JlZiA9IDA7Ci1jb21waWxlX2Jsb2NrLmJhY2tyZWZf
bWFwID0gMDsKLQotLyogUmVmbGVjdCBwYXR0ZXJuIGZvciBkZWJ1Z2dpbmcgb3V0cHV0ICovCi0K
LURQUklOVEYoKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpKTsKLQotLyogVGhlIGZpcnN0IHRoaW5nIHRvIGRvIGlz
IHRvIG1ha2UgYSBwYXNzIG92ZXIgdGhlIHBhdHRlcm4gdG8gY29tcHV0ZSB0aGUKLWFtb3VudCBv
ZiBzdG9yZSByZXF1aXJlZCB0byBob2xkIHRoZSBjb21waWxlZCBjb2RlLiBUaGlzIGRvZXMgbm90
IGhhdmUgdG8gYmUKLXBlcmZlY3QgYXMgbG9uZyBhcyBlcnJvcnMgYXJlIG92ZXJlc3RpbWF0ZXMu
IEF0IHRoZSBzYW1lIHRpbWUgd2UgY2FuIGRldGVjdCBhbnkKLWZsYWcgc2V0dGluZ3MgcmlnaHQg
YXQgdGhlIHN0YXJ0LCBhbmQgZXh0cmFjdCB0aGVtLiBNYWtlIGFuIGF0dGVtcHQgdG8gY29ycmVj
dAotZm9yIGFueSBjb3VudGVkIHdoaXRlIHNwYWNlIGlmIGFuICJleHRlbmRlZCIgZmxhZyBzZXR0
aW5nIGFwcGVhcnMgbGF0ZSBpbiB0aGUKLXBhdHRlcm4uIFdlIGNhbid0IGJlIHNvIGNsZXZlciBm
b3IgIy1jb21tZW50cy4gKi8KLQotcHRyID0gKGNvbnN0IHBjcmVfdWNoYXIgKikocGF0dGVybiAt
IDEpOwotcGF0dGVybkVuZCA9IChjb25zdCBwY3JlX3VjaGFyICopKHBhdHRlcm4gKyBwYXR0ZXJu
TGVuZ3RoKTsKLQotd2hpbGUgKCsrcHRyIDwgcGF0dGVybkVuZCkKLSAgewotICBpbnQgbWluID0g
MCwgbWF4ID0gMDsKLSAgaW50IGNsYXNzX29wdGNvdW50OwotICBpbnQgYnJhY2tldF9sZW5ndGg7
Ci0gIGludCBkdXBsZW5ndGg7Ci0KLSAgYyA9ICpwdHI7Ci0gIAotICBpdGVtX2NvdW50Kys7ICAg
IC8qIElzIHplcm8gZm9yIHRoZSBmaXJzdCBub24tY29tbWVudCBpdGVtICovCi0KLSAgc3dpdGNo
KGMpCisgICAgLyogV2UgY2FuJ3QgcGFzcyBiYWNrIGFuIGVycm9yIG1lc3NhZ2UgaWYgZXJyb3Jw
dHIgaXMgTlVMTDsgSSBndWVzcyB0aGUgYmVzdCB3ZQorICAgICBjYW4gZG8gaXMganVzdCByZXR1
cm4gTlVMTCwgYnV0IHdlIGNhbiBzZXQgYSBjb2RlIHZhbHVlIGlmIHRoZXJlIGlzIGEgY29kZQor
ICAgICBwb2ludGVyLiAqLworICAgIGlmICghZXJyb3JwdHIpCisgICAgICAgIHJldHVybiAwOwor
ICAgIAorICAgICplcnJvcnB0ciA9IE5VTEw7CisgICAgCisgICAgLyogU2V0IHVwIHBvaW50ZXJz
IHRvIHRoZSBpbmRpdmlkdWFsIGNoYXJhY3RlciB0YWJsZXMgKi8KKyAgICAKKyAgICBjb21waWxl
X2RhdGEgY29tcGlsZV9ibG9jazsKKyAgICBjb21waWxlX2Jsb2NrLmxjYyA9IF9wY3JlX2RlZmF1
bHRfdGFibGVzICsgbGNjX29mZnNldDsKKyAgICBjb21waWxlX2Jsb2NrLmZjYyA9IF9wY3JlX2Rl
ZmF1bHRfdGFibGVzICsgZmNjX29mZnNldDsKKyAgICBjb21waWxlX2Jsb2NrLmNiaXRzID0gX3Bj
cmVfZGVmYXVsdF90YWJsZXMgKyBjYml0c19vZmZzZXQ7CisgICAgY29tcGlsZV9ibG9jay5jdHlw
ZXMgPSBfcGNyZV9kZWZhdWx0X3RhYmxlcyArIGN0eXBlc19vZmZzZXQ7CisgICAgCisgICAgLyog
TWF4aW11bSBiYWNrIHJlZmVyZW5jZSBhbmQgYmFja3JlZiBiaXRtYXAuIFRoaXMgaXMgdXBkYXRl
ZCBmb3IgbnVtZXJpYworICAgICByZWZlcmVuY2VzIGR1cmluZyB0aGUgZmlyc3QgcGFzcywgYnV0
IGZvciBuYW1lZCByZWZlcmVuY2VzIGR1cmluZyB0aGUgYWN0dWFsCisgICAgIGNvbXBpbGUgcGFz
cy4gVGhlIGJpdG1hcCByZWNvcmRzIHVwIHRvIDMxIGJhY2sgcmVmZXJlbmNlcyB0byBoZWxwIGlu
IGRlY2lkaW5nCisgICAgIHdoZXRoZXIgKC4qKSBjYW4gYmUgdHJlYXRlZCBhcyBhbmNob3JlZCBv
ciBub3QuICovCisgICAgCisgICAgY29tcGlsZV9ibG9jay50b3BfYmFja3JlZiA9IDA7CisgICAg
Y29tcGlsZV9ibG9jay5iYWNrcmVmX21hcCA9IDA7CisgICAgCisgICAgLyogUmVmbGVjdCBwYXR0
ZXJuIGZvciBkZWJ1Z2dpbmcgb3V0cHV0ICovCisgICAgCisgICAgRFBSSU5URigoIi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LVxuIikpOworICAgIAorICAgIC8qIFRoZSBmaXJzdCB0aGluZyB0byBkbyBpcyB0byBtYWtlIGEg
cGFzcyBvdmVyIHRoZSBwYXR0ZXJuIHRvIGNvbXB1dGUgdGhlCisgICAgIGFtb3VudCBvZiBzdG9y
ZSByZXF1aXJlZCB0byBob2xkIHRoZSBjb21waWxlZCBjb2RlLiBUaGlzIGRvZXMgbm90IGhhdmUg
dG8gYmUKKyAgICAgcGVyZmVjdCBhcyBsb25nIGFzIGVycm9ycyBhcmUgb3ZlcmVzdGltYXRlcy4g
QXQgdGhlIHNhbWUgdGltZSB3ZSBjYW4gZGV0ZWN0IGFueQorICAgICBmbGFnIHNldHRpbmdzIHJp
Z2h0IGF0IHRoZSBzdGFydCwgYW5kIGV4dHJhY3QgdGhlbS4gTWFrZSBhbiBhdHRlbXB0IHRvIGNv
cnJlY3QKKyAgICAgZm9yIGFueSBjb3VudGVkIHdoaXRlIHNwYWNlIGlmIGFuICJleHRlbmRlZCIg
ZmxhZyBzZXR0aW5nIGFwcGVhcnMgbGF0ZSBpbiB0aGUKKyAgICAgcGF0dGVybi4gV2UgY2FuJ3Qg
YmUgc28gY2xldmVyIGZvciAjLWNvbW1lbnRzLiAqLworICAgIAorICAgIAorICAgIEVycm9yQ29k
ZSBlcnJvcmNvZGUgPSBFUlIwOworICAgIGludCBsZW5ndGggPSBjYWxjdWxhdGVDb21waWxlZFBh
dHRlcm5MZW5ndGgocGF0dGVybiwgcGF0dGVybkxlbmd0aCwgaWdub3JlQ2FzZSwgY29tcGlsZV9i
bG9jaywgZXJyb3Jjb2RlKTsKKyAgICBpZiAoZXJyb3Jjb2RlKQorICAgICAgICBnb3RvIFBDUkVf
RVJST1JfUkVUVVJOOworICAgIAorICAgIGlmIChsZW5ndGggPiBNQVhfUEFUVEVSTl9TSVpFKSB7
CisgICAgICAgIGVycm9yY29kZSA9IEVSUjE2OworICAgICAgICBnb3RvIFBDUkVfRVJST1JfUkVU
VVJOOworICAgIH0KKyAgICAKKyAgICAvKiBDb21wdXRlIHRoZSBzaXplIG9mIGRhdGEgYmxvY2sg
bmVlZGVkIGFuZCBnZXQgaXQuICovCisgICAgCisgICAgc2l6ZV90IHNpemUgPSBsZW5ndGggKyBz
aXplb2YocmVhbF9wY3JlKTsKKyAgICByZWFsX3BjcmUqIHJlID0gcmVpbnRlcnByZXRfY2FzdDxy
ZWFsX3BjcmUqPihuZXcgY2hhcltzaXplXSk7CisgICAgCisgICAgaWYgKCFyZSkgeworICAgICAg
ICBlcnJvcmNvZGUgPSBFUlIxMzsKKyAgICAgICAgZ290byBQQ1JFX0VSUk9SX1JFVFVSTjsKKyAg
ICB9CisgICAgCisgICAgLyogUHV0IGluIHRoZSBtYWdpYyBudW1iZXIsIGFuZCBzYXZlIHRoZSBz
aXplcywgb3B0aW9ucywgYW5kIGNoYXJhY3RlciB0YWJsZQorICAgICBwb2ludGVyLiBOVUxMIGlz
IHVzZWQgZm9yIHRoZSBkZWZhdWx0IGNoYXJhY3RlciB0YWJsZXMuIFRoZSBudWxscGFkIGZpZWxk
IGlzIGF0CisgICAgIHRoZSBlbmQ7IGl0J3MgdGhlcmUgdG8gaGVscCBpbiB0aGUgY2FzZSB3aGVu
IGEgcmVnZXggY29tcGlsZWQgb24gYSBzeXN0ZW0gd2l0aAorICAgICA0LWJ5dGUgcG9pbnRlcnMg
aXMgcnVuIG9uIGFub3RoZXIgd2l0aCA4LWJ5dGUgcG9pbnRlcnMuICovCisgICAgCisgICAgcmUt
PnNpemUgPSAocGNyZV91aW50MzIpc2l6ZTsKKyAgICByZS0+b3B0aW9ucyA9IChpZ25vcmVDYXNl
ID8gUENSRV9DQVNFTEVTUyA6IDApIHwgKG11bHRpbGluZSA/IFBDUkVfTVVMVElMSU5FIDogMCk7
CisgICAgCisgICAgLyogVGhlIHN0YXJ0aW5nIHBvaW50cyBvZiB0aGUgbmFtZS9udW1iZXIgdHJh
bnNsYXRpb24gdGFibGUgYW5kIG9mIHRoZSBjb2RlIGFyZQorICAgICBwYXNzZWQgYXJvdW5kIGlu
IHRoZSBjb21waWxlIGRhdGEgYmxvY2suICovCisgICAgCisgICAgY29uc3QgdXNjaGFyKiBjb2Rl
c3RhcnQgPSAoY29uc3QgdXNjaGFyKikocmUgKyAxKTsKKyAgICBjb21waWxlX2Jsb2NrLnN0YXJ0
X2NvZGUgPSBjb2Rlc3RhcnQ7CisgICAgY29tcGlsZV9ibG9jay5zdGFydF9wYXR0ZXJuID0gKGNv
bnN0IHBjcmVfdWNoYXIqKXBhdHRlcm47CisgICAgY29tcGlsZV9ibG9jay5yZXFfdmFyeW9wdCA9
IDA7CisgICAgCisgICAgLyogU2V0IHVwIGEgc3RhcnRpbmcsIG5vbi1leHRyYWN0aW5nIGJyYWNr
ZXQsIHRoZW4gY29tcGlsZSB0aGUgZXhwcmVzc2lvbi4gT24KKyAgICAgZXJyb3IsIGVycm9yY29k
ZSB3aWxsIGJlIHNldCBub24temVybywgc28gd2UgZG9uJ3QgbmVlZCB0byBsb29rIGF0IHRoZSBy
ZXN1bHQKKyAgICAgb2YgdGhlIGZ1bmN0aW9uIGhlcmUuICovCisgICAgCisgICAgY29uc3QgcGNy
ZV91Y2hhciogcHRyID0gKGNvbnN0IHBjcmVfdWNoYXIqKXBhdHRlcm47CisgICAgY29uc3QgcGNy
ZV91Y2hhciogcGF0dGVybkVuZCA9IHBhdHRlcm4gKyBwYXR0ZXJuTGVuZ3RoOworICAgIHVzY2hh
ciogY29kZSA9ICh1c2NoYXIqKWNvZGVzdGFydDsKKyAgICAqY29kZSA9IE9QX0JSQTsKKyAgICBp
bnQgZmlyc3RieXRlLCByZXFieXRlOwogICAgIHsKLSAgICAvKiBBIGJhY2tzbGFzaGVkIGl0ZW0g
bWF5IGJlIGFuIGVzY2FwZWQgZGF0YSBjaGFyYWN0ZXIgb3IgaXQgbWF5IGJlIGEKLSAgICBjaGFy
YWN0ZXIgdHlwZS4gKi8KLQotICAgIGNhc2UgJ1xcJzoKLSAgICBjID0gY2hlY2tfZXNjYXBlKCZw
dHIsIHBhdHRlcm5FbmQsICZlcnJvcmNvZGUsIGJyYWNvdW50LCBmYWxzZSk7Ci0gICAgaWYgKGVy
cm9yY29kZSAhPSAwKSBnb3RvIFBDUkVfRVJST1JfUkVUVVJOOwotCi0gICAgbGFzdGl0ZW1sZW5n
dGggPSAxOyAgICAgLyogRGVmYXVsdCBsZW5ndGggb2YgbGFzdCBpdGVtIGZvciByZXBlYXRzICov
Ci0KLSAgICBpZiAoYyA+PSAwKSAgICAgICAgICAgICAvKiBEYXRhIGNoYXJhY3RlciAqLwotICAg
ICAgewotICAgICAgbGVuZ3RoICs9IDI7ICAgICAgICAgIC8qIEZvciBhIG9uZS1ieXRlIGNoYXJh
Y3RlciAqLwotCi0gICAgICBpZiAoYyA+IDEyNykKLSAgICAgICAgewotICAgICAgICBpbnQgaTsK
LSAgICAgICAgZm9yIChpID0gMDsgaSA8IF9wY3JlX3V0ZjhfdGFibGUxX3NpemU7IGkrKykKLSAg
ICAgICAgICBpZiAoYyA8PSBfcGNyZV91dGY4X3RhYmxlMVtpXSkgYnJlYWs7Ci0gICAgICAgIGxl
bmd0aCArPSBpOwotICAgICAgICBsYXN0aXRlbWxlbmd0aCArPSBpOwotICAgICAgICB9Ci0KLSAg
ICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgLyogT3RoZXIgZXNjYXBlcyBuZWVkIG9uZSBi
eXRlICovCi0KLSAgICBsZW5ndGgrKzsKLQotICAgIC8qIEEgYmFjayByZWZlcmVuY2UgbmVlZHMg
YW4gYWRkaXRpb25hbCAyIGJ5dGVzLCBwbHVzIGVpdGhlciBvbmUgb3IgNQotICAgIGJ5dGVzIGZv
ciBhIHJlcGVhdC4gV2UgYWxzbyBuZWVkIHRvIGtlZXAgdGhlIHZhbHVlIG9mIHRoZSBoaWdoZXN0
Ci0gICAgYmFjayByZWZlcmVuY2UuICovCi0KLSAgICBpZiAoYyA8PSAtRVNDX1JFRikKLSAgICAg
IHsKLSAgICAgIGludCByZWZudW0gPSAtYyAtIEVTQ19SRUY7Ci0gICAgICBjb21waWxlX2Jsb2Nr
LmJhY2tyZWZfbWFwIHw9IChyZWZudW0gPCAzMik/ICgxIDw8IHJlZm51bSkgOiAxOwotICAgICAg
aWYgKHJlZm51bSA+IGNvbXBpbGVfYmxvY2sudG9wX2JhY2tyZWYpCi0gICAgICAgIGNvbXBpbGVf
YmxvY2sudG9wX2JhY2tyZWYgPSByZWZudW07Ci0gICAgICBsZW5ndGggKz0gMjsgICAvKiBGb3Ig
c2luZ2xlIGJhY2sgcmVmZXJlbmNlICovCi0gICAgICBpZiAocHRyWzFdID09ICd7JyAmJiBpc19j
b3VudGVkX3JlcGVhdChwdHIrMiwgcGF0dGVybkVuZCkpCi0gICAgICAgIHsKLSAgICAgICAgcHRy
ID0gcmVhZF9yZXBlYXRfY291bnRzKHB0cisyLCAmbWluLCAmbWF4LCAmZXJyb3Jjb2RlKTsKLSAg
ICAgICAgaWYgKGVycm9yY29kZSAhPSAwKSBnb3RvIFBDUkVfRVJST1JfUkVUVVJOOwotICAgICAg
ICBpZiAoKG1pbiA9PSAwICYmIChtYXggPT0gMSB8fCBtYXggPT0gLTEpKSB8fAotICAgICAgICAg
IChtaW4gPT0gMSAmJiBtYXggPT0gLTEpKQotICAgICAgICAgICAgbGVuZ3RoKys7Ci0gICAgICAg
IGVsc2UgbGVuZ3RoICs9IDU7Ci0gICAgICAgIGlmIChwdHJbMV0gPT0gJz8nKSBwdHIrKzsKLSAg
ICAgICAgICAgIHB0cisrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgY29udGludWU7Ci0KLSAg
ICBjYXNlICdeJzogICAgIC8qIFNpbmdsZS1ieXRlIG1ldGFjaGFyYWN0ZXJzICovCi0gICAgY2Fz
ZSAnLic6Ci0gICAgY2FzZSAnJCc6Ci0gICAgbGVuZ3RoKys7Ci0gICAgbGFzdGl0ZW1sZW5ndGgg
PSAxOwotICAgIGNvbnRpbnVlOwotCi0gICAgY2FzZSAnKic6ICAgICAgICAgICAgLyogVGhlc2Ug
cmVwZWF0cyB3b24ndCBiZSBhZnRlciBicmFja2V0czsgKi8KLSAgICBjYXNlICcrJzogICAgICAg
ICAgICAvKiB0aG9zZSBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5ICovCi0gICAgY2FzZSAnPyc6Ci0g
ICAgbGVuZ3RoKys7Ci0gICAgZ290byBQT1NFU1NJVkU7ICAgICAgLyogQSBmZXcgbGluZXMgYmVs
b3cgKi8KLQotICAgIC8qIFRoaXMgY292ZXJzIHRoZSBjYXNlcyBvZiBicmFjZWQgcmVwZWF0cyBh
ZnRlciBhIHNpbmdsZSBjaGFyLCBtZXRhY2hhciwKLSAgICBjbGFzcywgb3IgYmFjayByZWZlcmVu
Y2UuICovCi0KLSAgICBjYXNlICd7JzoKLSAgICBpZiAoIWlzX2NvdW50ZWRfcmVwZWF0KHB0cisx
LCBwYXR0ZXJuRW5kKSkgZ290byBOT1JNQUxfQ0hBUjsKLSAgICBwdHIgPSByZWFkX3JlcGVhdF9j
b3VudHMocHRyKzEsICZtaW4sICZtYXgsICZlcnJvcmNvZGUpOwotICAgIGlmIChlcnJvcmNvZGUg
IT0gMCkgZ290byBQQ1JFX0VSUk9SX1JFVFVSTjsKLQotICAgIC8qIFRoZXNlIHNwZWNpYWwgY2Fz
ZXMganVzdCBpbnNlcnQgb25lIGV4dHJhIG9wY29kZSAqLwotCi0gICAgaWYgKChtaW4gPT0gMCAm
JiAobWF4ID09IDEgfHwgbWF4ID09IC0xKSkgfHwKLSAgICAgIChtaW4gPT0gMSAmJiBtYXggPT0g
LTEpKQotICAgICAgICBsZW5ndGgrKzsKLQotICAgIC8qIFRoZXNlIGNhc2VzIG1pZ2h0IGluc2Vy
dCBhZGRpdGlvbmFsIGNvcGllcyBvZiBhIHByZWNlZGluZyBjaGFyYWN0ZXIuICovCi0KLSAgICBl
bHNlCi0gICAgICB7Ci0gICAgICBpZiAobWluICE9IDEpCi0gICAgICAgIHsKLSAgICAgICAgbGVu
Z3RoIC09IGxhc3RpdGVtbGVuZ3RoOyAgIC8qIFVuY291bnQgdGhlIG9yaWdpbmFsIGNoYXIgb3Ig
bWV0YWNoYXIgKi8KLSAgICAgICAgaWYgKG1pbiA+IDApIGxlbmd0aCArPSAzICsgbGFzdGl0ZW1s
ZW5ndGg7Ci0gICAgICAgIH0KLSAgICAgIGxlbmd0aCArPSBsYXN0aXRlbWxlbmd0aCArICgobWF4
ID4gMCk/IDMgOiAxKTsKLSAgICAgIH0KLQotICAgIGlmIChwdHJbMV0gPT0gJz8nKSBwdHIrKzsg
ICAgICAvKiBOZWVkcyBubyBleHRyYSBsZW5ndGggKi8KLQotICAgIFBPU0VTU0lWRTogICAgICAg
ICAgICAgICAgICAgICAvKiBUZXN0IGZvciBwb3NzZXNzaXZlIHF1YW50aWZpZXIgKi8KLSAgICBp
ZiAocHRyWzFdID09ICcrJykKLSAgICAgIHsKLSAgICAgIHB0cisrOwotICAgICAgbGVuZ3RoICs9
IDIgKyAyKkxJTktfU0laRTsgICAvKiBBbGxvdyBmb3IgYXRvbWljIGJyYWNrZXRzICovCi0gICAg
ICB9Ci0gICAgY29udGludWU7Ci0KLSAgICAvKiBBbiBhbHRlcm5hdGlvbiBjb250YWlucyBhbiBv
ZmZzZXQgdG8gdGhlIG5leHQgYnJhbmNoIG9yIGtldC4gSWYgYW55IGltcwotICAgIG9wdGlvbnMg
Y2hhbmdlZCBpbiB0aGUgcHJldmlvdXMgYnJhbmNoKGVzKSwgYW5kL29yIGlmIHdlIGFyZSBpbiBh
Ci0gICAgbG9va2JlaGluZCBhc3NlcnRpb24sIGV4dHJhIHNwYWNlIHdpbGwgYmUgbmVlZGVkIGF0
IHRoZSBzdGFydCBvZiB0aGUKLSAgICBicmFuY2guIFRoaXMgaXMgaGFuZGxlZCBieSBicmFuY2hf
ZXh0cmEuICovCi0KLSAgICBjYXNlICd8JzoKLSAgICBsZW5ndGggKz0gMSArIExJTktfU0laRSAr
IGJyYW5jaF9leHRyYTsKLSAgICBjb250aW51ZTsKLQotICAgIC8qIEEgY2hhcmFjdGVyIGNsYXNz
IHVzZXMgMzMgY2hhcmFjdGVycyBwcm92aWRlZCB0aGF0IGFsbCB0aGUgY2hhcmFjdGVyCi0gICAg
dmFsdWVzIGFyZSBsZXNzIHRoYW4gMjU2LiBPdGhlcndpc2UsIGl0IHVzZXMgYSBiaXQgbWFwIGZv
ciBsb3cgdmFsdWVkCi0gICAgY2hhcmFjdGVycywgYW5kIGluZGl2aWR1YWwgaXRlbXMgZm9yIG90
aGVycy4gRG9uJ3Qgd29ycnkgYWJvdXQgY2hhcmFjdGVyCi0gICAgdHlwZXMgdGhhdCBhcmVuJ3Qg
YWxsb3dlZCBpbiBjbGFzc2VzIC0gdGhleSdsbCBnZXQgcGlja2VkIHVwIGR1cmluZyB0aGUKLSAg
ICBjb21waWxlLiBBIGNoYXJhY3RlciBjbGFzcyB0aGF0IGNvbnRhaW5zIG9ubHkgb25lIHNpbmds
ZS1ieXRlIGNoYXJhY3RlcgotICAgIHVzZXMgMiBvciAzIGJ5dGVzLCBkZXBlbmRpbmcgb24gd2hl
dGhlciBpdCBpcyBuZWdhdGVkIG9yIG5vdC4gTm90aWNlIHRoaXMKLSAgICB3aGVyZSB3ZSBjYW4u
IChJbiBVVEYtOCBtb2RlIHdlIGNhbiBkbyB0aGlzIG9ubHkgZm9yIGNoYXJzIDwgMTI4LikgKi8K
LQotICAgIGNhc2UgJ1snOgotICAgIGlmICgqKCsrcHRyKSA9PSAnXicpCi0gICAgICB7Ci0gICAg
ICBjbGFzc19vcHRjb3VudCA9IDEwOyAgLyogR3JlYXRlciB0aGFuIG9uZSAqLwotICAgICAgcHRy
Kys7Ci0gICAgICB9Ci0gICAgZWxzZSBjbGFzc19vcHRjb3VudCA9IDA7Ci0KLSAgICBjbGFzc191
dGY4ID0gZmFsc2U7Ci0KLSAgICBmb3IgKDsgcHRyIDwgcGF0dGVybkVuZCAmJiAqcHRyICE9ICdd
JzsgKytwdHIpCi0gICAgICB7Ci0gICAgICAvKiBDaGVjayBmb3IgZXNjYXBlcyAqLwotCi0gICAg
ICBpZiAoKnB0ciA9PSAnXFwnKQotICAgICAgICB7Ci0gICAgICAgIGMgPSBjaGVja19lc2NhcGUo
JnB0ciwgcGF0dGVybkVuZCwgJmVycm9yY29kZSwgYnJhY291bnQsIHRydWUpOwotICAgICAgICBp
ZiAoZXJyb3Jjb2RlICE9IDApIGdvdG8gUENSRV9FUlJPUl9SRVRVUk47Ci0KLSAgICAgICAgLyog
XGIgaXMgYmFja3NwYWNlIGluc2lkZSBhIGNsYXNzOyBcWCBpcyBsaXRlcmFsICovCi0KLSAgICAg
ICAgaWYgKC1jID09IEVTQ19iKSBjID0gJ1xiJzsKLQotICAgICAgICAvKiBIYW5kbGUgZXNjYXBl
cyB0aGF0IHR1cm4gaW50byBjaGFyYWN0ZXJzICovCi0KLSAgICAgICAgaWYgKGMgPj0gMCkgZ290
byBOT05fU1BFQ0lBTF9DSEFSQUNURVI7Ci0KLSAgICAgICAgLyogRXNjYXBlcyB0aGF0IGFyZSBt
ZXRhLXRoaW5ncy4gVGhlIG5vcm1hbCBvbmVzIGp1c3QgYWZmZWN0IHRoZQotICAgICAgICBiaXQg
bWFwLCBidXQgVW5pY29kZSBwcm9wZXJ0aWVzIHJlcXVpcmUgYW4gWENMQVNTIGV4dGVuZGVkIGl0
ZW0uICovCi0KKyAgICAgICAgLy8gRklYTUU6IFByb3RlY3QgdGhpcyBibG9jayBmcm9tIGp1bXBz
IHRvIFBDUkVfRVJST1JfUkVUVVJOLCB3aGljaCBjcm9zcyBpbml0aWFsaXphdGlvbiBvZiBicmFj
b3VudAorICAgICAgICAvLyBldmVudHVhbGx5IHRoZSBnb3RvcyB3aWxsIGJlIGdvbmUsIGFuZCB3
ZSB3b24ndCBuZWVkIHRvLgorICAgICAgICBpbnQgYnJhY291bnQgPSAwOworICAgICAgICAodm9p
ZCljb21waWxlX3JlZ2V4KHJlLT5vcHRpb25zLCAmYnJhY291bnQsICZjb2RlLCAmcHRyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5FbmQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJmVycm9yY29kZSwgMCwgJmZpcnN0Ynl0ZSwgJnJlcWJ5dGUsICZjb21waWxlX2Js
b2NrKTsKKyAgICAgICAgcmUtPnRvcF9icmFja2V0ID0gYnJhY291bnQ7CisgICAgfQorICAgIHJl
LT50b3BfYmFja3JlZiA9IGNvbXBpbGVfYmxvY2sudG9wX2JhY2tyZWY7CisgICAgCisgICAgLyog
SWYgbm90IHJlYWNoZWQgZW5kIG9mIHBhdHRlcm4gb24gc3VjY2VzcywgdGhlcmUncyBhbiBleGNl
c3MgYnJhY2tldC4gKi8KKyAgICAKKyAgICBpZiAoZXJyb3Jjb2RlID09IDAgJiYgcHRyIDwgcGF0
dGVybkVuZCkKKyAgICAgICAgZXJyb3Jjb2RlID0gRVJSMTA7CisgICAgCisgICAgLyogRmlsbCBp
biB0aGUgdGVybWluYXRpbmcgc3RhdGUgYW5kIGNoZWNrIGZvciBkaXNhc3Ryb3VzIG92ZXJmbG93
LCBidXQKKyAgICAgaWYgZGVidWdnaW5nLCBsZWF2ZSB0aGUgdGVzdCB0aWxsIGFmdGVyIHRoaW5n
cyBhcmUgcHJpbnRlZCBvdXQuICovCisgICAgCisgICAgKmNvZGUrKyA9IE9QX0VORDsKKyAgICAK
KyNpZm5kZWYgREVCVUcKKyAgICBpZiAoY29kZSAtIGNvZGVzdGFydCA+IGxlbmd0aCkKKyAgICAg
ICAgZXJyb3Jjb2RlID0gRVJSNzsKKyNlbmRpZgorICAgIAorICAgIC8qIEdpdmUgYW4gZXJyb3Ig
aWYgdGhlcmUncyBiYWNrIHJlZmVyZW5jZSB0byBhIG5vbi1leGlzdGVudCBjYXB0dXJpbmcKKyAg
ICAgc3VicGF0dGVybi4gKi8KKyAgICAKKyAgICBpZiAocmUtPnRvcF9iYWNrcmVmID4gcmUtPnRv
cF9icmFja2V0KQorICAgICAgICBlcnJvcmNvZGUgPSBFUlIxNTsKKyAgICAKKyAgICAvKiBGYWls
ZWQgdG8gY29tcGlsZSwgb3IgZXJyb3Igd2hpbGUgcG9zdC1wcm9jZXNzaW5nICovCisgICAgCisg
ICAgaWYgKGVycm9yY29kZSAhPSBFUlIwKSB7CisgICAgICAgIGRlbGV0ZSBbXSByZWludGVycHJl
dF9jYXN0PGNoYXIqPihyZSk7CisgICAgUENSRV9FUlJPUl9SRVRVUk46CisgICAgICAgICplcnJv
cnB0ciA9IGVycm9yX3RleHQoZXJyb3Jjb2RlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
fQorICAgIAorICAgIC8qIElmIHRoZSBhbmNob3JlZCBvcHRpb24gd2FzIG5vdCBwYXNzZWQsIHNl
dCB0aGUgZmxhZyBpZiB3ZSBjYW4gZGV0ZXJtaW5lIHRoYXQKKyAgICAgdGhlIHBhdHRlcm4gaXMg
YW5jaG9yZWQgYnkgdmlydHVlIG9mIF4gY2hhcmFjdGVycyBvciBcQSBvciBhbnl0aGluZyBlbHNl
IChzdWNoCisgICAgIGFzIHN0YXJ0aW5nIHdpdGggLiogd2hlbiBET1RBTEwgaXMgc2V0KS4KKyAg
ICAgCisgICAgIE90aGVyd2lzZSwgaWYgd2Uga25vdyB3aGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIg
aGFzIHRvIGJlLCBzYXZlIGl0LCBiZWNhdXNlIHRoYXQKKyAgICAgc3BlZWRzIHVwIHVuYW5jaG9y
ZWQgbWF0Y2hlcyBubyBlbmQuIElmIG5vdCwgc2VlIGlmIHdlIGNhbiBzZXQgdGhlCisgICAgIFBD
UkVfU1RBUlRMSU5FIGZsYWcuIFRoaXMgaXMgaGVscGZ1bCBmb3IgbXVsdGlsaW5lIG1hdGNoZXMg
d2hlbiBhbGwgYnJhbmNoZXMKKyAgICAgc3RhcnQgd2l0aCBeLiBhbmQgYWxzbyB3aGVuIGFsbCBi
cmFuY2hlcyBzdGFydCB3aXRoIC4qIGZvciBub24tRE9UQUxMIG1hdGNoZXMuCisgICAgICovCisg
ICAgCisgICAgeworICAgICAgICBpZiAoaXNfYW5jaG9yZWQoY29kZXN0YXJ0LCByZS0+b3B0aW9u
cywgMCwgY29tcGlsZV9ibG9jay5iYWNrcmVmX21hcCkpCisgICAgICAgICAgICByZS0+b3B0aW9u
cyB8PSBQQ1JFX0FOQ0hPUkVEOwogICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAg
IGNsYXNzX29wdGNvdW50ID0gMTA7ICAgICAgICAgLyogXGQsIFxzIGV0YzsgbWFrZSBzdXJlID4g
MSAqLwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAvKiBBbnl0aGluZyBlbHNlIGlu
Y3JlbWVudHMgdGhlIHBvc3NpYmxlIG9wdGltaXphdGlvbiBjb3VudC4gV2UgaGF2ZSB0bwotICAg
ICAgZGV0ZWN0IHJhbmdlcyBoZXJlIHNvIHRoYXQgd2UgY2FuIGNvbXB1dGUgdGhlIG51bWJlciBv
ZiBleHRyYSByYW5nZXMgZm9yCi0gICAgICBjYXNlbGVzcyB3aWRlIGNoYXJhY3RlcnMgd2hlbiBV
Q1Agc3VwcG9ydCBpcyBhdmFpbGFibGUuIElmIHRoZXJlIGFyZSB3aWRlCi0gICAgICBjaGFyYWN0
ZXJzLCB3ZSBhcmUgZ29pbmcgdG8gaGF2ZSB0byB1c2UgYW4gWENMQVNTLCBldmVuIGZvciBzaW5n
bGUKLSAgICAgIGNoYXJhY3RlcnMuICovCi0KLSAgICAgIGVsc2UKICAgICAgICAgewotICAgICAg
ICBpbnQgZDsKLQotICAgICAgICAgIHsKLSAgICAgICAgICBpbnQgZXh0cmEgPSAwOwotICAgICAg
ICAgIEdFVENIQVJMRU5FTkQoYywgcHRyLCBwYXR0ZXJuRW5kLCBleHRyYSk7Ci0gICAgICAgICAg
cHRyICs9IGV4dHJhOwotICAgICAgICAgIH0KLQotICAgICAgICAvKiBDb21lIGhlcmUgZnJvbSBo
YW5kbGluZyBcIGFib3ZlIHdoZW4gaXQgZXNjYXBlcyB0byBhIGNoYXIgdmFsdWUgKi8KLQotICAg
ICAgICBOT05fU1BFQ0lBTF9DSEFSQUNURVI6Ci0gICAgICAgIGNsYXNzX29wdGNvdW50Kys7Ci0K
LSAgICAgICAgZCA9IC0xOwotICAgICAgICBpZiAocHRyICsgMSA8IHBhdHRlcm5FbmQgJiYgcHRy
WzFdID09ICctJykKLSAgICAgICAgICB7Ci0gICAgICAgICAgcGNyZV91Y2hhciBjb25zdCAqaHlw
dHIgPSBwdHIrKzsKLSAgICAgICAgICBpZiAocHRyICsgMSA8IHBhdHRlcm5FbmQgJiYgcHRyWzFd
ID09ICdcXCcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBwdHIrKzsKLSAgICAgICAgICAg
IGQgPSBjaGVja19lc2NhcGUoJnB0ciwgcGF0dGVybkVuZCwgJmVycm9yY29kZSwgYnJhY291bnQs
IHRydWUpOwotICAgICAgICAgICAgaWYgKGVycm9yY29kZSAhPSAwKSBnb3RvIFBDUkVfRVJST1Jf
UkVUVVJOOwotICAgICAgICAgICAgaWYgKC1kID09IEVTQ19iKSBkID0gJ1xiJzsgICAgICAgIC8q
IGJhY2tzcGFjZSAqLwotICAgICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKHB0ciArIDEg
PCBwYXR0ZXJuRW5kICYmIHB0clsxXSAhPSAnXScpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICBwdHIrKzsKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICBpbnQgZXh0cmEgPSAwOwot
ICAgICAgICAgICAgICBHRVRDSEFSTEVORU5EKGQsIHB0ciwgcGF0dGVybkVuZCwgZXh0cmEpOwot
ICAgICAgICAgICAgICBwdHIgKz0gZXh0cmE7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICBpZiAoZCA8IDApIHB0ciA9IGh5cHRyOyAgICAgIC8qIGdvIGJhY2sgdG8g
aHlwaGVuIGFzIGRhdGEgKi8KLSAgICAgICAgICB9Ci0KLSAgICAgICAgLyogSWYgZCA+PSAwIHdl
IGhhdmUgYSByYW5nZS4gSW4gVVRGLTggbW9kZSwgaWYgdGhlIGVuZCBpcyA+IDI1NSwgb3IgPgot
ICAgICAgICAxMjcgZm9yIGNhc2VsZXNzIG1hdGNoaW5nLCB3ZSB3aWxsIG5lZWQgdG8gdXNlIGFu
IFhDTEFTUy4gKi8KLQotICAgICAgICBpZiAoZCA+PSAwKQotICAgICAgICAgIHsKLSAgICAgICAg
ICBjbGFzc19vcHRjb3VudCA9IDEwOyAgICAgLyogRW5zdXJlID4gMSAqLwotICAgICAgICAgIGlm
IChkIDwgYykKKyAgICAgICAgICAgIGlmIChmaXJzdGJ5dGUgPCAwKQorICAgICAgICAgICAgICAg
IGZpcnN0Ynl0ZSA9IGZpbmRfZmlyc3Rhc3NlcnRlZGNoYXIoY29kZXN0YXJ0LCByZS0+b3B0aW9u
cywgZmFsc2UpOworICAgICAgICAgICAgaWYgKGZpcnN0Ynl0ZSA+PSAwKSAgIC8qIFJlbW92ZSBj
YXNlbGVzcyBmbGFnIGZvciBub24tY2FzZWFibGUgY2hhcnMgKi8KICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIGVycm9yY29kZSA9IEVSUjg7Ci0gICAgICAgICAgICBnb3RvIFBDUkVfRVJST1Jf
UkVUVVJOOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKChkID4gMjU1IHx8IChpZ25v
cmVDYXNlICYmIGQgPiAxMjcpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHVzY2hhciBi
dWZmZXJbNl07Ci0gICAgICAgICAgICBpZiAoIWNsYXNzX3V0ZjgpICAgICAgICAgLyogQWxsb3cg
Zm9yIFhDTEFTUyBvdmVyaGVhZCAqLwotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNs
YXNzX3V0ZjggPSB0cnVlOwotICAgICAgICAgICAgICBsZW5ndGggKz0gTElOS19TSVpFICsgMjsK
LSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBJZiB3ZSBoYXZlIFVDUCBzdXBwb3J0
LCBmaW5kIG91dCBob3cgbWFueSBleHRyYSByYW5nZXMgYXJlCi0gICAgICAgICAgICBuZWVkZWQg
dG8gbWFwIHRoZSBvdGhlciBjYXNlIG9mIGNoYXJhY3RlcnMgd2l0aGluIHRoaXMgcmFuZ2UuIFdl
Ci0gICAgICAgICAgICBoYXZlIHRvIG1pbWljIHRoZSByYW5nZSBvcHRpbWl6YXRpb24gaGVyZSwg
YmVjYXVzZSBleHRlbmRpbmcgdGhlCi0gICAgICAgICAgICByYW5nZSB1cHdhcmRzIG1pZ2h0IHB1
c2ggZCBvdmVyIGEgYm91bmRhcnkgdGhhdCBtYWtlcyBpcyB1c2UKLSAgICAgICAgICAgIGFub3Ro
ZXIgYnl0ZSBpbiB0aGUgVVRGLTggcmVwcmVzZW50YXRpb24uICovCi0KLSAgICAgICAgICAgIGlm
IChpZ25vcmVDYXNlKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGludCBvY2MsIG9j
ZDsKLSAgICAgICAgICAgICAgaW50IGNjID0gYzsKLSAgICAgICAgICAgICAgaW50IG9yaWdkID0g
ZDsKLSAgICAgICAgICAgICAgd2hpbGUgKGdldF9vdGhlcmNhc2VfcmFuZ2UoJmNjLCBvcmlnZCwg
Jm9jYywgJm9jZCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChvY2Mg
Pj0gYyAmJiBvY2QgPD0gZCkgY29udGludWU7ICAgLyogU2tpcCBlbWJlZGRlZCAqLwotCi0gICAg
ICAgICAgICAgICAgaWYgKG9jYyA8IGMgICYmIG9jZCA+PSBjIC0gMSkgIC8qIEV4dGVuZCB0aGUg
YmFzaWMgcmFuZ2UgKi8KLSAgICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLyogaWYgdGhlcmUgaXMgb3ZlcmxhcCwgICAqLwotICAgICAgICAgICAgICAgICAgYyA9
IG9jYzsgICAgICAgICAgICAgICAgICAgICAvKiBub3RpbmcgdGhhdCBpZiBvY2MgPCBjICovCi0g
ICAgICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgIC8qIHdlIGNhbid0
IGhhdmUgb2NkID4gZCAgKi8KLSAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLyogYmVjYXVzZSBhIHN1YnJhbmdlIGlzICAqLwotICAgICAgICAgICAgICAgIGlm
IChvY2QgPiBkICYmIG9jYyA8PSBkICsgMSkgICAvKiBhbHdheXMgc2hvcnRlciB0aGFuICAgICov
Ci0gICAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoZSBi
YXNpYyByYW5nZS4gICAgICAgKi8KLSAgICAgICAgICAgICAgICAgIGQgPSBvY2Q7Ci0gICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIC8qIEFuIGV4dHJhIGl0ZW0gaXMgbmVlZGVkICovCi0KLSAgICAgICAgICAgICAgICBsZW5n
dGggKz0gMSArIF9wY3JlX29yZDJ1dGY4KG9jYywgYnVmZmVyKSArCi0gICAgICAgICAgICAgICAg
ICAoKG9jYyA9PSBvY2QpPyAwIDogX3BjcmVfb3JkMnV0Zjgob2NkLCBidWZmZXIpKTsKKyAgICAg
ICAgICAgICAgICBpbnQgY2ggPSBmaXJzdGJ5dGUgJiAyNTU7CisgICAgICAgICAgICAgICAgaWYg
KGNoIDwgMTI3KSB7CisgICAgICAgICAgICAgICAgICAgIHJlLT5maXJzdF9ieXRlID0gKChmaXJz
dGJ5dGUgJiBSRVFfQ0FTRUxFU1MpICE9IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29tcGlsZV9ibG9jay5mY2NbY2hdID09IGNoKT8gY2ggOiBmaXJzdGJ5dGU7
CisgICAgICAgICAgICAgICAgICAgIHJlLT5vcHRpb25zIHw9IFBDUkVfRklSU1RTRVQ7CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIFRoZSBsZW5n
dGggb2YgdGhlIChwb3NzaWJseSBleHRlbmRlZCkgcmFuZ2UgKi8KLQotICAgICAgICAgICAgbGVu
Z3RoICs9IDEgKyBfcGNyZV9vcmQydXRmOChjLCBidWZmZXIpICsgX3BjcmVfb3JkMnV0ZjgoZCwg
YnVmZmVyKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgIH0KLQotICAgICAgICAvKiBXZSBo
YXZlIGEgc2luZ2xlIGNoYXJhY3Rlci4gVGhlcmUgaXMgbm90aGluZyB0byBiZSBkb25lIHVubGVz
cyB3ZQotICAgICAgICBhcmUgaW4gVVRGLTggbW9kZS4gSWYgdGhlIGNoYXIgaXMgPiAyNTUsIG9y
IDEyNyB3aGVuIGNhc2VsZXNzLCB3ZSBtdXN0Ci0gICAgICAgIGFsbG93IGZvciBhbiBYQ0xfU0lO
R0xFIGl0ZW0sIGRvdWJsZWQgZm9yIGNhc2VsZXNzbmVzcyBpZiB0aGVyZSBpcyBVQ1AKLSAgICAg
ICAgc3VwcG9ydC4gKi8KLQotICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgIGlm
ICgoYyA+IDI1NSB8fCAoaWdub3JlQ2FzZSAmJiBjID4gMTI3KSkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICB1c2NoYXIgYnVmZmVyWzZdOwotICAgICAgICAgICAgY2xhc3Nfb3B0Y291bnQg
PSAxMDsgICAgIC8qIEVuc3VyZSA+IDEgKi8KLSAgICAgICAgICAgIGlmICghY2xhc3NfdXRmOCkg
ICAgICAgICAvKiBBbGxvdyBmb3IgWENMQVNTIG92ZXJoZWFkICovCi0gICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2xhc3NfdXRmOCA9IHRydWU7Ci0gICAgICAgICAgICAgIGxlbmd0aCAr
PSBMSU5LX1NJWkUgKyAyOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZW5ndGggKz0g
KGlnbm9yZUNhc2UgPyAyIDogMSkgKiAoMSArIF9wY3JlX29yZDJ1dGY4KGMsIGJ1ZmZlcikpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgaWYg
KHB0ciA+PSBwYXR0ZXJuRW5kKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWlzc2luZyB0
ZXJtaW5hdGluZyAnXScgKi8KLSAgICAgIHsKLSAgICAgIGVycm9yY29kZSA9IEVSUjY7Ci0gICAg
ICBnb3RvIFBDUkVfRVJST1JfUkVUVVJOOwotICAgICAgfQotCi0gICAgLyogV2UgY2FuIG9wdGlt
aXplIHdoZW4gdGhlcmUgd2FzIG9ubHkgb25lIG9wdGltaXphYmxlIGNoYXJhY3Rlci4gUmVwZWF0
cwotICAgIGZvciBwb3NpdGl2ZSBhbmQgbmVnYXRlZCBzaW5nbGUgb25lLWJ5dGUgY2hhcnMgYXJl
IGhhbmRsZWQgYnkgdGhlIGdlbmVyYWwKLSAgICBjb2RlLiBIZXJlLCB3ZSBoYW5kbGUgcmVwZWF0
cyBmb3IgdGhlIGNsYXNzIG9wY29kZXMuICovCi0KLSAgICBpZiAoY2xhc3Nfb3B0Y291bnQgPT0g
MSkgbGVuZ3RoICs9IDM7IGVsc2UKLSAgICAgIHsKLSAgICAgIGxlbmd0aCArPSAzMzsKLQotICAg
ICAgLyogQSByZXBlYXQgbmVlZHMgZWl0aGVyIDEgb3IgNSBieXRlcy4gSWYgaXQgaXMgYSBwb3Nz
ZXNzaXZlIHF1YW50aWZpZXIsCi0gICAgICB3ZSBhbHNvIG5lZWQgZXh0cmEgZm9yIHdyYXBwaW5n
IHRoZSB3aG9sZSB0aGluZyBpbiBhIHN1Yi1wYXR0ZXJuLiAqLwotCi0gICAgICBpZiAocHRyICsg
MSA8IHBhdHRlcm5FbmQgJiYgcHRyWzFdID09ICd7JyAmJiBpc19jb3VudGVkX3JlcGVhdChwdHIr
MiwgcGF0dGVybkVuZCkpCi0gICAgICAgIHsKLSAgICAgICAgcHRyID0gcmVhZF9yZXBlYXRfY291
bnRzKHB0cisyLCAmbWluLCAmbWF4LCAmZXJyb3Jjb2RlKTsKLSAgICAgICAgaWYgKGVycm9yY29k
ZSAhPSAwKSBnb3RvIFBDUkVfRVJST1JfUkVUVVJOOwotICAgICAgICBpZiAoKG1pbiA9PSAwICYm
IChtYXggPT0gMSB8fCBtYXggPT0gLTEpKSB8fAotICAgICAgICAgIChtaW4gPT0gMSAmJiBtYXgg
PT0gLTEpKQotICAgICAgICAgICAgbGVuZ3RoKys7Ci0gICAgICAgIGVsc2UgbGVuZ3RoICs9IDU7
Ci0gICAgICAgIGlmIChwdHIgKyAxIDwgcGF0dGVybkVuZCAmJiBwdHJbMV0gPT0gJysnKQotICAg
ICAgICAgIHsKLSAgICAgICAgICBwdHIrKzsKLSAgICAgICAgICBsZW5ndGggKz0gMiArIDIqTElO
S19TSVpFOwotICAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAocHRyICsgMSA8IHBhdHRlcm5F
bmQgJiYgcHRyWzFdID09ICc/JykgcHRyKys7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICBjb250
aW51ZTsKLQotICAgIC8qIEJyYWNrZXRzIG1heSBiZSBnZW51aW5lIGdyb3VwcyBvciBzcGVjaWFs
IHRoaW5ncyAqLwotCi0gICAgY2FzZSAnKCc6Ci0gICAgYnJhbmNoX25ld2V4dHJhID0gMDsKLSAg
ICBicmFja2V0X2xlbmd0aCA9IDEgKyBMSU5LX1NJWkU7Ci0gICAgY2FwdHVyaW5nID0gZmFsc2U7
Ci0KLSAgICAvKiBIYW5kbGUgc3BlY2lhbCBmb3JtcyBvZiBicmFja2V0LCB3aGljaCBhbGwgc3Rh
cnQgKD8gKi8KLQotICAgIGlmIChwdHIgKyAxIDwgcGF0dGVybkVuZCAmJiBwdHJbMV0gPT0gJz8n
KQotICAgICAgewotICAgICAgc3dpdGNoIChjID0gKHB0ciArIDIgPCBwYXR0ZXJuRW5kID8gcHRy
WzJdIDogMCkpCi0gICAgICAgIHsKLSAgICAgICAgLyogTm9uLXJlZmVyZW5jaW5nIGdyb3VwcyBh
bmQgbG9va2FoZWFkcyBqdXN0IG1vdmUgdGhlIHBvaW50ZXIgb24sIGFuZAotICAgICAgICB0aGVu
IGJlaGF2ZSBsaWtlIGEgbm9uLXNwZWNpYWwgYnJhY2tldCwgZXhjZXB0IHRoYXQgdGhleSBkb24n
dCBpbmNyZW1lbnQKLSAgICAgICAgdGhlIGNvdW50IG9mIGV4dHJhY3RpbmcgYnJhY2tldHMuIERp
dHRvIGZvciB0aGUgIm9uY2Ugb25seSIgYnJhY2tldCwKLSAgICAgICAgd2hpY2ggaXMgaW4gUGVy
bCBmcm9tIHZlcnNpb24gNS4wMDUuICovCi0KLSAgICAgICAgY2FzZSAnOic6Ci0gICAgICAgIGNh
c2UgJz0nOgotICAgICAgICBjYXNlICchJzoKLSAgICAgICAgcHRyICs9IDI7Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIC8qIEVsc2UgbG9vcCBjaGVja2luZyB2YWxpZCBvcHRpb25zIHVudGls
ICkgaXMgbWV0LiBBbnl0aGluZyBlbHNlIGlzIGFuCi0gICAgICAgIGVycm9yLiBJZiB3ZSBhcmUg
d2l0aG91dCBhbnkgYnJhY2tldHMsIGkuZS4gYXQgdG9wIGxldmVsLCB0aGUgc2V0dGluZ3MKLSAg
ICAgICAgYWN0IGFzIGlmIHNwZWNpZmllZCBpbiB0aGUgb3B0aW9ucywgc28gbWFzc2FnZSB0aGUg
b3B0aW9ucyBpbW1lZGlhdGVseS4KLSAgICAgICAgVGhpcyBpcyBmb3IgYmFja3dhcmQgY29tcGF0
aWJpbGl0eSB3aXRoIFBlcmwgNS4wMDQuICovCi0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ZXJyb3Jjb2RlID0gRVJSMTI7Ci0gICAgICAgIGdvdG8gUENSRV9FUlJPUl9SRVRVUk47Ci0gICAg
ICAgIH0KLSAgICAgIH0KLQotICAgIGVsc2UgY2FwdHVyaW5nID0gMTsKLQotICAgIC8qIENhcHR1
cmluZyBicmFja2V0cyBtdXN0IGJlIGNvdW50ZWQgc28gd2UgY2FuIHByb2Nlc3MgZXNjYXBlcyBp
biBhCi0gICAgUGVybGlzaCB3YXkuIElmIHRoZSBudW1iZXIgZXhjZWVkcyBFWFRSQUNUX0JBU0lD
X01BWCB3ZSBhcmUgZ29pbmcgdG8gbmVlZAotICAgIGFuIGFkZGl0aW9uYWwgMyBieXRlcyBvZiBt
ZW1vcnkgcGVyIGNhcHR1cmluZyBicmFja2V0LiAqLwotCi0gICAgaWYgKGNhcHR1cmluZykKLSAg
ICAgIHsKLSAgICAgIGJyYWNvdW50Kys7Ci0gICAgICBpZiAoYnJhY291bnQgPiBFWFRSQUNUX0JB
U0lDX01BWCkgYnJhY2tldF9sZW5ndGggKz0gMzsKLSAgICAgIH0KLQotICAgIC8qIFNhdmUgbGVu
Z3RoIGZvciBjb21wdXRpbmcgd2hvbGUgbGVuZ3RoIGF0IGVuZCBpZiB0aGVyZSdzIGEgcmVwZWF0
IHRoYXQKLSAgICByZXF1aXJlcyBkdXBsaWNhdGlvbiBvZiB0aGUgZ3JvdXAuIEFsc28gc2F2ZSB0
aGUgY3VycmVudCB2YWx1ZSBvZgotICAgIGJyYW5jaF9leHRyYSwgYW5kIHN0YXJ0IHRoZSBuZXcg
Z3JvdXAgd2l0aCB0aGUgbmV3IHZhbHVlLiBJZiBub24temVybywgdGhpcwotICAgIHdpbGwgZWl0
aGVyIGJlIDIgZm9yIGEgKD9pbXN4OiBncm91cCwgb3IgMyBmb3IgYSBsb29rYmVoaW5kIGFzc2Vy
dGlvbi4gKi8KLQotICAgIGlmIChicmFzdGFja3B0ciA+PSBzaXplb2YoYnJhc3RhY2spL3NpemVv
ZihpbnQpKQotICAgICAgewotICAgICAgZXJyb3Jjb2RlID0gRVJSMTc7Ci0gICAgICBnb3RvIFBD
UkVfRVJST1JfUkVUVVJOOwotICAgICAgfQotCi0gICAgYnJhbGVuc3RhY2tbYnJhc3RhY2twdHJd
ID0gYnJhbmNoX2V4dHJhOwotICAgIGJyYW5jaF9leHRyYSA9IGJyYW5jaF9uZXdleHRyYTsKLQot
ICAgIGJyYXN0YWNrW2JyYXN0YWNrcHRyKytdID0gbGVuZ3RoOwotICAgIGxlbmd0aCArPSBicmFj
a2V0X2xlbmd0aDsKLSAgICBjb250aW51ZTsKLQotICAgIC8qIEhhbmRsZSBrZXQuIExvb2sgZm9y
IHN1YnNlcXVlbnQgbWF4L21pbjsgZm9yIGNlcnRhaW4gc2V0cyBvZiB2YWx1ZXMgd2UKLSAgICBo
YXZlIHRvIHJlcGxpY2F0ZSB0aGlzIGJyYWNrZXQgdXAgdG8gdGhhdCBtYW55IHRpbWVzLiBJZiBi
cmFzdGFja3B0ciBpcwotICAgIDAgdGhpcyBpcyBhbiB1bm1hdGNoZWQgYnJhY2tldCB3aGljaCB3
aWxsIGdlbmVyYXRlIGFuIGVycm9yLCBidXQgdGFrZSBjYXJlCi0gICAgbm90IHRvIHRyeSB0byBh
Y2Nlc3MgYnJhc3RhY2tbLTFdIHdoZW4gY29tcHV0aW5nIHRoZSBsZW5ndGggYW5kIHJlc3Rvcmlu
ZwotICAgIHRoZSBicmFuY2hfZXh0cmEgdmFsdWUuICovCi0KLSAgICBjYXNlICcpJzoKLSAgICBs
ZW5ndGggKz0gMSArIExJTktfU0laRTsKLSAgICBpZiAoYnJhc3RhY2twdHIgPiAwKQotICAgICAg
ewotICAgICAgZHVwbGVuZ3RoID0gbGVuZ3RoIC0gYnJhc3RhY2tbLS1icmFzdGFja3B0cl07Ci0g
ICAgICBicmFuY2hfZXh0cmEgPSBicmFsZW5zdGFja1ticmFzdGFja3B0cl07Ci0gICAgICB9Ci0g
ICAgZWxzZSBkdXBsZW5ndGggPSAwOwotCi0gICAgLyogTGVhdmUgcHRyIGF0IHRoZSBmaW5hbCBj
aGFyOyBmb3IgcmVhZF9yZXBlYXRfY291bnRzIHRoaXMgaGFwcGVucwotICAgIGF1dG9tYXRpY2Fs
bHk7IGZvciB0aGUgb3RoZXJzIHdlIG5lZWQgYW4gaW5jcmVtZW50LiAqLwotCi0gICAgaWYgKHB0
ciArIDEgPCBwYXR0ZXJuRW5kICYmIChjID0gcHRyWzFdKSA9PSAneycgJiYgaXNfY291bnRlZF9y
ZXBlYXQocHRyKzIsIHBhdHRlcm5FbmQpKQotICAgICAgewotICAgICAgcHRyID0gcmVhZF9yZXBl
YXRfY291bnRzKHB0cisyLCAmbWluLCAmbWF4LCAmZXJyb3Jjb2RlKTsKLSAgICAgIGlmIChlcnJv
cmNvZGUgIT0gMCkgZ290byBQQ1JFX0VSUk9SX1JFVFVSTjsKLSAgICAgIH0KLSAgICBlbHNlIGlm
IChjID09ICcqJykgeyBtaW4gPSAwOyBtYXggPSAtMTsgcHRyKys7IH0KLSAgICBlbHNlIGlmIChj
ID09ICcrJykgeyBtaW4gPSAxOyBtYXggPSAtMTsgcHRyKys7IH0KLSAgICBlbHNlIGlmIChjID09
ICc/JykgeyBtaW4gPSAwOyBtYXggPSAxOyAgcHRyKys7IH0KLSAgICBlbHNlIHsgbWluID0gMTsg
bWF4ID0gMTsgfQotCi0gICAgLyogSWYgdGhlIG1pbmltdW0gaXMgemVybywgd2UgaGF2ZSB0byBh
bGxvdyBmb3IgYW4gT1BfQlJBWkVSTyBiZWZvcmUgdGhlCi0gICAgZ3JvdXAsIGFuZCBpZiB0aGUg
bWF4aW11bSBpcyBncmVhdGVyIHRoYW4gemVybywgd2UgaGF2ZSB0byByZXBsaWNhdGUKLSAgICBt
YXh2YWwtMSB0aW1lczsgZWFjaCByZXBsaWNhdGlvbiBhY3F1aXJlcyBhbiBPUF9CUkFaRVJPIHBs
dXMgYSBuZXN0aW5nCi0gICAgYnJhY2tldCBzZXQuICovCi0KLSAgICBpZiAobWluID09IDApCi0g
ICAgICB7Ci0gICAgICBsZW5ndGgrKzsKLSAgICAgIGlmIChtYXggPiAwKSBsZW5ndGggKz0gKG1h
eCAtIDEpICogKGR1cGxlbmd0aCArIDMgKyAyKkxJTktfU0laRSk7Ci0gICAgICB9Ci0KLSAgICAv
KiBXaGVuIHRoZSBtaW5pbXVtIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLCB3ZSBoYXZlIHRvIHJlcGxp
Y2F0ZSB1cCB0bwotICAgIG1pbnZhbC0xIHRpbWVzLCB3aXRoIG5vIGFkZGl0aW9ucyByZXF1aXJl
ZCBpbiB0aGUgY29waWVzLiBUaGVuLCBpZiB0aGVyZQotICAgIGlzIGEgbGltaXRlZCBtYXhpbXVt
IHdlIGhhdmUgdG8gcmVwbGljYXRlIHVwIHRvIG1heHZhbC0xIHRpbWVzIGFsbG93aW5nCi0gICAg
Zm9yIGEgQlJBWkVSTyBpdGVtIGJlZm9yZSBlYWNoIG9wdGlvbmFsIGNvcHkgYW5kIG5lc3Rpbmcg
YnJhY2tldHMgZm9yIGFsbAotICAgIGJ1dCBvbmUgb2YgdGhlIG9wdGlvbmFsIGNvcGllcy4gKi8K
LQotICAgIGVsc2UKLSAgICAgIHsKLSAgICAgIGxlbmd0aCArPSAobWluIC0gMSkgKiBkdXBsZW5n
dGg7Ci0gICAgICBpZiAobWF4ID4gbWluKSAgIC8qIE5lZWQgdGhpcyB0ZXN0IGFzIG1heD0tMSBt
ZWFucyBubyBsaW1pdCAqLwotICAgICAgICBsZW5ndGggKz0gKG1heCAtIG1pbikgKiAoZHVwbGVu
Z3RoICsgMyArIDIqTElOS19TSVpFKQotICAgICAgICAgIC0gKDIgKyAyKkxJTktfU0laRSk7Ci0g
ICAgICB9Ci0KLSAgICAvKiBBbGxvdyBzcGFjZSBmb3Igb25jZSBicmFja2V0cyBmb3IgInBvc3Nl
c3NpdmUgcXVhbnRpZmllciIgKi8KLQotICAgIGlmIChwdHIgKyAxIDwgcGF0dGVybkVuZCAmJiBw
dHJbMV0gPT0gJysnKQotICAgICAgewotICAgICAgcHRyKys7Ci0gICAgICBsZW5ndGggKz0gMiAr
IDIqTElOS19TSVpFOwotICAgICAgfQotICAgIGNvbnRpbnVlOwotCi0gICAgLyogTm9uLXNwZWNp
YWwgY2hhcmFjdGVyLiBJdCB3b24ndCBiZSBzcGFjZSBvciAjIGluIGV4dGVuZGVkIG1vZGUsIHNv
IGl0IGlzCi0gICAgYWx3YXlzIGEgZ2VudWluZSBjaGFyYWN0ZXIuIElmIHdlIGFyZSBpbiBhIFxR
Li4uXEUgc2VxdWVuY2UsIGNoZWNrIGZvciB0aGUKLSAgICBlbmQ7IGlmIG5vdCwgd2UgaGF2ZSBh
IGxpdGVyYWwuICovCi0KLSAgICBkZWZhdWx0OgotICAgIE5PUk1BTF9DSEFSOgotCi0gICAgbGVu
Z3RoICs9IDI7ICAgICAgICAgIC8qIEZvciBhIG9uZS1ieXRlIGNoYXJhY3RlciAqLwotICAgIGxh
c3RpdGVtbGVuZ3RoID0gMTsgICAvKiBEZWZhdWx0IGxlbmd0aCBvZiBsYXN0IGl0ZW0gZm9yIHJl
cGVhdHMgKi8KLQotICAgIC8qIEluIFVURi04IG1vZGUsIGNoZWNrIGZvciBhZGRpdGlvbmFsIGJ5
dGVzLiAqLwotCi0gICAgaWYgKGMgPiAxMjcpCi0gICAgICB7Ci0gICAgICAgIGlmIChJU19MRUFE
SU5HX1NVUlJPR0FURShjKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgYyA9IERFQ09ERV9TVVJS
T0dBVEVfUEFJUihjLCBwdHIgPCBwYXR0ZXJuRW5kID8gKnB0ciA6IDApOwotICAgICAgICAgICsr
cHRyOwotICAgICAgICAgIH0KLQotICAgICAgICB7Ci0gICAgICAgICAgaW50IGk7Ci0gICAgICAg
ICAgZm9yIChpID0gMDsgaSA8IF9wY3JlX3V0ZjhfdGFibGUxX3NpemU7IGkrKykKLSAgICAgICAg
ICAgIGlmIChjIDw9IF9wY3JlX3V0ZjhfdGFibGUxW2ldKSBicmVhazsKLSAgICAgICAgICBsZW5n
dGggKz0gaTsKLSAgICAgICAgICBsYXN0aXRlbWxlbmd0aCArPSBpOworICAgICAgICAgICAgZWxz
ZSBpZiAoaXNfc3RhcnRsaW5lKGNvZGVzdGFydCwgMCwgY29tcGlsZV9ibG9jay5iYWNrcmVmX21h
cCkpCisgICAgICAgICAgICAgICAgcmUtPm9wdGlvbnMgfD0gUENSRV9TVEFSVExJTkU7CiAgICAg
ICAgIH0KLSAgICAgIH0KLQotICAgIGNvbnRpbnVlOwogICAgIH0KLSAgfQotCi1sZW5ndGggKz0g
MiArIExJTktfU0laRTsgICAgLyogRm9yIGZpbmFsIEtFVCBhbmQgRU5EICovCi0KLWlmIChsZW5n
dGggPiBNQVhfUEFUVEVSTl9TSVpFKQotICB7Ci0gIGVycm9yY29kZSA9IEVSUjE2OwotICBnb3Rv
IFBDUkVfRVJST1JfUkVUVVJOOwotICB9Ci0KLS8qIENvbXB1dGUgdGhlIHNpemUgb2YgZGF0YSBi
bG9jayBuZWVkZWQgYW5kIGdldCBpdC4gKi8KLQotc2l6ZSA9IGxlbmd0aCArIHNpemVvZihyZWFs
X3BjcmUpICsgbmFtZV9jb3VudCAqIChtYXhfbmFtZV9zaXplICsgMyk7Ci1yZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8cmVhbF9wY3JlKj4obmV3IGNoYXJbc2l6ZV0pOwotCi1pZiAocmUgPT0gTlVMTCkK
LSAgewotICBlcnJvcmNvZGUgPSBFUlIxMzsKLSAgZ290byBQQ1JFX0VSUk9SX1JFVFVSTjsKLSAg
fQotCi0vKiBQdXQgaW4gdGhlIG1hZ2ljIG51bWJlciwgYW5kIHNhdmUgdGhlIHNpemVzLCBvcHRp
b25zLCBhbmQgY2hhcmFjdGVyIHRhYmxlCi1wb2ludGVyLiBOVUxMIGlzIHVzZWQgZm9yIHRoZSBk
ZWZhdWx0IGNoYXJhY3RlciB0YWJsZXMuIFRoZSBudWxscGFkIGZpZWxkIGlzIGF0Ci10aGUgZW5k
OyBpdCdzIHRoZXJlIHRvIGhlbHAgaW4gdGhlIGNhc2Ugd2hlbiBhIHJlZ2V4IGNvbXBpbGVkIG9u
IGEgc3lzdGVtIHdpdGgKLTQtYnl0ZSBwb2ludGVycyBpcyBydW4gb24gYW5vdGhlciB3aXRoIDgt
Ynl0ZSBwb2ludGVycy4gKi8KLQotcmUtPnNpemUgPSAocGNyZV91aW50MzIpc2l6ZTsKLXJlLT5v
cHRpb25zID0gKGlnbm9yZUNhc2UgPyBQQ1JFX0NBU0VMRVNTIDogMCkgfCAobXVsdGlsaW5lID8g
UENSRV9NVUxUSUxJTkUgOiAwKTsKLQotLyogVGhlIHN0YXJ0aW5nIHBvaW50cyBvZiB0aGUgbmFt
ZS9udW1iZXIgdHJhbnNsYXRpb24gdGFibGUgYW5kIG9mIHRoZSBjb2RlIGFyZQotcGFzc2VkIGFy
b3VuZCBpbiB0aGUgY29tcGlsZSBkYXRhIGJsb2NrLiAqLwotCi1jb2Rlc3RhcnQgPSAoY29uc3Qg
dXNjaGFyICopKHJlICsgMSk7Ci1jb21waWxlX2Jsb2NrLnN0YXJ0X2NvZGUgPSBjb2Rlc3RhcnQ7
Ci1jb21waWxlX2Jsb2NrLnN0YXJ0X3BhdHRlcm4gPSAoY29uc3QgcGNyZV91Y2hhciAqKXBhdHRl
cm47Ci1jb21waWxlX2Jsb2NrLnJlcV92YXJ5b3B0ID0gMDsKLQotLyogU2V0IHVwIGEgc3RhcnRp
bmcsIG5vbi1leHRyYWN0aW5nIGJyYWNrZXQsIHRoZW4gY29tcGlsZSB0aGUgZXhwcmVzc2lvbi4g
T24KLWVycm9yLCBlcnJvcmNvZGUgd2lsbCBiZSBzZXQgbm9uLXplcm8sIHNvIHdlIGRvbid0IG5l
ZWQgdG8gbG9vayBhdCB0aGUgcmVzdWx0Ci1vZiB0aGUgZnVuY3Rpb24gaGVyZS4gKi8KLQotcHRy
ID0gKGNvbnN0IHBjcmVfdWNoYXIgKilwYXR0ZXJuOwotY29kZSA9ICh1c2NoYXIgKiljb2Rlc3Rh
cnQ7Ci0qY29kZSA9IE9QX0JSQTsKLWJyYWNvdW50ID0gMDsKLSh2b2lkKWNvbXBpbGVfcmVnZXgo
cmUtPm9wdGlvbnMsICZicmFjb3VudCwgJmNvZGUsICZwdHIsCi0gIHBhdHRlcm5FbmQsCi0gICZl
cnJvcmNvZGUsIDAsICZmaXJzdGJ5dGUsICZyZXFieXRlLCAmY29tcGlsZV9ibG9jayk7Ci1yZS0+
dG9wX2JyYWNrZXQgPSBicmFjb3VudDsKLXJlLT50b3BfYmFja3JlZiA9IGNvbXBpbGVfYmxvY2su
dG9wX2JhY2tyZWY7Ci0KLS8qIElmIG5vdCByZWFjaGVkIGVuZCBvZiBwYXR0ZXJuIG9uIHN1Y2Nl
c3MsIHRoZXJlJ3MgYW4gZXhjZXNzIGJyYWNrZXQuICovCi0KLWlmIChlcnJvcmNvZGUgPT0gMCAm
JiBwdHIgPCBwYXR0ZXJuRW5kKSBlcnJvcmNvZGUgPSBFUlIxMDsKLQotLyogRmlsbCBpbiB0aGUg
dGVybWluYXRpbmcgc3RhdGUgYW5kIGNoZWNrIGZvciBkaXNhc3Ryb3VzIG92ZXJmbG93LCBidXQK
LWlmIGRlYnVnZ2luZywgbGVhdmUgdGhlIHRlc3QgdGlsbCBhZnRlciB0aGluZ3MgYXJlIHByaW50
ZWQgb3V0LiAqLwotCi0qY29kZSsrID0gT1BfRU5EOwotCi0jaWZuZGVmIERFQlVHCi1pZiAoY29k
ZSAtIGNvZGVzdGFydCA+IGxlbmd0aCkgZXJyb3Jjb2RlID0gRVJSNzsKLSNlbmRpZgotCi0vKiBH
aXZlIGFuIGVycm9yIGlmIHRoZXJlJ3MgYmFjayByZWZlcmVuY2UgdG8gYSBub24tZXhpc3RlbnQg
Y2FwdHVyaW5nCi1zdWJwYXR0ZXJuLiAqLwotCi1pZiAocmUtPnRvcF9iYWNrcmVmID4gcmUtPnRv
cF9icmFja2V0KSBlcnJvcmNvZGUgPSBFUlIxNTsKLQotLyogRmFpbGVkIHRvIGNvbXBpbGUsIG9y
IGVycm9yIHdoaWxlIHBvc3QtcHJvY2Vzc2luZyAqLwotCi1pZiAoZXJyb3Jjb2RlICE9IEVSUjAp
Ci0gIHsKLSAgZGVsZXRlIFtdIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlKTsKLSAgUENSRV9F
UlJPUl9SRVRVUk46Ci0gICplcnJvcnB0ciA9IGVycm9yX3RleHQoZXJyb3Jjb2RlKTsKLSAgcmV0
dXJuIE5VTEw7Ci0gIH0KLQotLyogSWYgdGhlIGFuY2hvcmVkIG9wdGlvbiB3YXMgbm90IHBhc3Nl
ZCwgc2V0IHRoZSBmbGFnIGlmIHdlIGNhbiBkZXRlcm1pbmUgdGhhdAotdGhlIHBhdHRlcm4gaXMg
YW5jaG9yZWQgYnkgdmlydHVlIG9mIF4gY2hhcmFjdGVycyBvciBcQSBvciBhbnl0aGluZyBlbHNl
IChzdWNoCi1hcyBzdGFydGluZyB3aXRoIC4qIHdoZW4gRE9UQUxMIGlzIHNldCkuCi0KLU90aGVy
d2lzZSwgaWYgd2Uga25vdyB3aGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgaGFzIHRvIGJlLCBzYXZl
IGl0LCBiZWNhdXNlIHRoYXQKLXNwZWVkcyB1cCB1bmFuY2hvcmVkIG1hdGNoZXMgbm8gZW5kLiBJ
ZiBub3QsIHNlZSBpZiB3ZSBjYW4gc2V0IHRoZQotUENSRV9TVEFSVExJTkUgZmxhZy4gVGhpcyBp
cyBoZWxwZnVsIGZvciBtdWx0aWxpbmUgbWF0Y2hlcyB3aGVuIGFsbCBicmFuY2hlcwotc3RhcnQg
d2l0aCBeLiBhbmQgYWxzbyB3aGVuIGFsbCBicmFuY2hlcyBzdGFydCB3aXRoIC4qIGZvciBub24t
RE9UQUxMIG1hdGNoZXMuCi0qLwotCi0gIHsKLSAgaWYgKGlzX2FuY2hvcmVkKGNvZGVzdGFydCwg
cmUtPm9wdGlvbnMsIDAsIGNvbXBpbGVfYmxvY2suYmFja3JlZl9tYXApKQotICAgIHJlLT5vcHRp
b25zIHw9IFBDUkVfQU5DSE9SRUQ7Ci0gIGVsc2UKLSAgICB7Ci0gICAgaWYgKGZpcnN0Ynl0ZSA8
IDApCi0gICAgICBmaXJzdGJ5dGUgPSBmaW5kX2ZpcnN0YXNzZXJ0ZWRjaGFyKGNvZGVzdGFydCwg
cmUtPm9wdGlvbnMsIGZhbHNlKTsKLSAgICBpZiAoZmlyc3RieXRlID49IDApICAgLyogUmVtb3Zl
IGNhc2VsZXNzIGZsYWcgZm9yIG5vbi1jYXNlYWJsZSBjaGFycyAqLwotICAgICAgewotICAgICAg
aW50IGNoID0gZmlyc3RieXRlICYgMjU1OwotICAgICAgaWYgKGNoIDwgMTI3KQotICAgICAgeyAv
KiBTdHJhbmdlIGluZGVudGF0aW9uIHRvIGFpZCBpbiBtZXJnaW5nLiAqLwotICAgICAgcmUtPmZp
cnN0X2J5dGUgPSAoKGZpcnN0Ynl0ZSAmIFJFUV9DQVNFTEVTUykgIT0gMCAmJgotICAgICAgICAg
Y29tcGlsZV9ibG9jay5mY2NbY2hdID09IGNoKT8gY2ggOiBmaXJzdGJ5dGU7Ci0gICAgICByZS0+
b3B0aW9ucyB8PSBQQ1JFX0ZJUlNUU0VUOwotICAgICAgfQotICAgICAgfQotICAgIGVsc2UgaWYg
KGlzX3N0YXJ0bGluZShjb2Rlc3RhcnQsIDAsIGNvbXBpbGVfYmxvY2suYmFja3JlZl9tYXApKQot
ICAgICAgcmUtPm9wdGlvbnMgfD0gUENSRV9TVEFSVExJTkU7CisgICAgCisgICAgLyogRm9yIGFu
IGFuY2hvcmVkIHBhdHRlcm4sIHdlIHVzZSB0aGUgInJlcXVpcmVkIGJ5dGUiIG9ubHkgaWYgaXQg
Zm9sbG93cyBhCisgICAgIHZhcmlhYmxlIGxlbmd0aCBpdGVtIGluIHRoZSByZWdleC4gUmVtb3Zl
IHRoZSBjYXNlbGVzcyBmbGFnIGZvciBub24tY2FzZWFibGUKKyAgICAgYnl0ZXMuICovCisgICAg
CisgICAgaWYgKHJlcWJ5dGUgPj0gMCAmJiAoIShyZS0+b3B0aW9ucyAmIFBDUkVfQU5DSE9SRUQp
IHx8IChyZXFieXRlICYgUkVRX1ZBUlkpKSkgeworICAgICAgICBpbnQgY2ggPSByZXFieXRlICYg
MjU1OworICAgICAgICBpZiAoY2ggPCAxMjcpIHsKKyAgICAgICAgICAgIHJlLT5yZXFfYnl0ZSA9
ICgocmVxYnl0ZSAmIFJFUV9DQVNFTEVTUykgIT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbXBpbGVfYmxvY2suZmNjW2NoXSA9PSBjaCk/IChyZXFieXRlICYgflJFUV9DQVNF
TEVTUykgOiByZXFieXRlOworICAgICAgICAgICAgcmUtPm9wdGlvbnMgfD0gUENSRV9SRVFDSFNF
VDsKKyAgICAgICAgfQogICAgIH0KLSAgfQotCi0vKiBGb3IgYW4gYW5jaG9yZWQgcGF0dGVybiwg
d2UgdXNlIHRoZSAicmVxdWlyZWQgYnl0ZSIgb25seSBpZiBpdCBmb2xsb3dzIGEKLXZhcmlhYmxl
IGxlbmd0aCBpdGVtIGluIHRoZSByZWdleC4gUmVtb3ZlIHRoZSBjYXNlbGVzcyBmbGFnIGZvciBu
b24tY2FzZWFibGUKLWJ5dGVzLiAqLwotCi1pZiAocmVxYnl0ZSA+PSAwICYmCi0gICAgICgocmUt
Pm9wdGlvbnMgJiBQQ1JFX0FOQ0hPUkVEKSA9PSAwIHx8IChyZXFieXRlICYgUkVRX1ZBUlkpICE9
IDApKQotICB7Ci0gIGludCBjaCA9IHJlcWJ5dGUgJiAyNTU7Ci0gIGlmIChjaCA8IDEyNykKLSAg
eyAvKiBTdHJhbmdlIGluZGVudGF0aW9uIHRvIGFpZCBpbiBtZXJnaW5nLiAqLwotICByZS0+cmVx
X2J5dGUgPSAoKHJlcWJ5dGUgJiBSRVFfQ0FTRUxFU1MpICE9IDAgJiYKLSAgICAgIGNvbXBpbGVf
YmxvY2suZmNjW2NoXSA9PSBjaCk/IChyZXFieXRlICYgflJFUV9DQVNFTEVTUykgOiByZXFieXRl
OwotICByZS0+b3B0aW9ucyB8PSBQQ1JFX1JFUUNIU0VUOwotICB9Ci0gIH0KLQotLyogUHJpbnQg
b3V0IHRoZSBjb21waWxlZCBkYXRhIGlmIGRlYnVnZ2luZyBpcyBlbmFibGVkLiBUaGlzIGlzIG5l
dmVyIHRoZQotY2FzZSB3aGVuIGJ1aWxkaW5nIGEgcHJvZHVjdGlvbiBsaWJyYXJ5LiAqLwotCisg
ICAgCisgICAgLyogUHJpbnQgb3V0IHRoZSBjb21waWxlZCBkYXRhIGlmIGRlYnVnZ2luZyBpcyBl
bmFibGVkLiAqLwogI2lmZGVmIERFQlVHCi0KLXByaW50ZigiTGVuZ3RoID0gJWQgdG9wX2JyYWNr
ZXQgPSAlZCB0b3BfYmFja3JlZiA9ICVkXG4iLAotICBsZW5ndGgsIHJlLT50b3BfYnJhY2tldCwg
cmUtPnRvcF9iYWNrcmVmKTsKLQotaWYgKHJlLT5vcHRpb25zICE9IDApCi0gIHsKLSAgcHJpbnRm
KCIlcyVzJXNcbiIsCi0gICAgKChyZS0+b3B0aW9ucyAmIFBDUkVfQU5DSE9SRUQpICE9IDApPyAi
YW5jaG9yZWQgIiA6ICIiLAotICAgICgocmUtPm9wdGlvbnMgJiBQQ1JFX0NBU0VMRVNTKSAhPSAw
KT8gImNhc2VsZXNzICIgOiAiIiwKLSAgICAoKHJlLT5vcHRpb25zICYgUENSRV9NVUxUSUxJTkUp
ICE9IDApPyAibXVsdGlsaW5lICIgOiAiIik7Ci0gIH0KLQotaWYgKChyZS0+b3B0aW9ucyAmIFBD
UkVfRklSU1RTRVQpICE9IDApCi0gIHsKLSAgaW50IGNoID0gcmUtPmZpcnN0X2J5dGUgJiAyNTU7
Ci0gIGNvbnN0IGNoYXIgKmNhc2VsZXNzID0gKChyZS0+Zmlyc3RfYnl0ZSAmIFJFUV9DQVNFTEVT
UykgPT0gMCk/Ci0gICAgIiIgOiAiIChjYXNlbGVzcykiOwotICBpZiAoaXNwcmludChjaCkpIHBy
aW50ZigiRmlyc3QgY2hhciA9ICVjJXNcbiIsIGNoLCBjYXNlbGVzcyk7Ci0gICAgZWxzZSBwcmlu
dGYoIkZpcnN0IGNoYXIgPSBcXHglMDJ4JXNcbiIsIGNoLCBjYXNlbGVzcyk7Ci0gIH0KLQotaWYg
KChyZS0+b3B0aW9ucyAmIFBDUkVfUkVRQ0hTRVQpICE9IDApCi0gIHsKLSAgaW50IGNoID0gcmUt
PnJlcV9ieXRlICYgMjU1OwotICBjb25zdCBjaGFyICpjYXNlbGVzcyA9ICgocmUtPnJlcV9ieXRl
ICYgUkVRX0NBU0VMRVNTKSA9PSAwKT8KLSAgICAiIiA6ICIgKGNhc2VsZXNzKSI7Ci0gIGlmIChp
c3ByaW50KGNoKSkgcHJpbnRmKCJSZXEgY2hhciA9ICVjJXNcbiIsIGNoLCBjYXNlbGVzcyk7Ci0g
ICAgZWxzZSBwcmludGYoIlJlcSBjaGFyID0gXFx4JTAyeCVzXG4iLCBjaCwgY2FzZWxlc3MpOwot
ICB9Ci0KLXBjcmVfcHJpbnRpbnQocmUsIHN0ZG91dCk7Ci0KLS8qIFRoaXMgY2hlY2sgaXMgZG9u
ZSBoZXJlIGluIHRoZSBkZWJ1Z2dpbmcgY2FzZSBzbyB0aGF0IHRoZSBjb2RlIHRoYXQKLXdhcyBj
b21waWxlZCBjYW4gYmUgc2Vlbi4gKi8KLQotaWYgKGNvZGUgLSBjb2Rlc3RhcnQgPiBsZW5ndGgp
Ci0gIHsKLSAgKHBjcmVfZnJlZSkocmUpOwotICAqZXJyb3JwdHIgPSBlcnJvcl90ZXh0KEVSUjcp
OwotICByZXR1cm4gTlVMTDsKLSAgfQotCisgICAgcHJpbnRmKCJMZW5ndGggPSAlZCB0b3BfYnJh
Y2tldCA9ICVkIHRvcF9iYWNrcmVmID0gJWRcbiIsCisgICAgICAgICAgIGxlbmd0aCwgcmUtPnRv
cF9icmFja2V0LCByZS0+dG9wX2JhY2tyZWYpOworICAgIAorICAgIGlmIChyZS0+b3B0aW9ucykg
eworICAgICAgICBwcmludGYoIiVzJXMlc1xuIiwKKyAgICAgICAgICAgICAgICgocmUtPm9wdGlv
bnMgJiBQQ1JFX0FOQ0hPUkVEKSAhPSAwKT8gImFuY2hvcmVkICIgOiAiIiwKKyAgICAgICAgICAg
ICAgICgocmUtPm9wdGlvbnMgJiBQQ1JFX0NBU0VMRVNTKSAhPSAwKT8gImNhc2VsZXNzICIgOiAi
IiwKKyAgICAgICAgICAgICAgICgocmUtPm9wdGlvbnMgJiBQQ1JFX01VTFRJTElORSkgIT0gMCk/
ICJtdWx0aWxpbmUgIiA6ICIiKTsKKyAgICB9CisgICAgCisgICAgaWYgKHJlLT5vcHRpb25zICYg
UENSRV9GSVJTVFNFVCkgeworICAgICAgICBpbnQgY2ggPSByZS0+Zmlyc3RfYnl0ZSAmIDI1NTsK
KyAgICAgICAgY29uc3QgY2hhciAqY2FzZWxlc3MgPSAoKHJlLT5maXJzdF9ieXRlICYgUkVRX0NB
U0VMRVNTKSA9PSAwKT8KKyAgICAgICAgIiIgOiAiIChjYXNlbGVzcykiOworICAgICAgICBpZiAo
aXNwcmludChjaCkpIHByaW50ZigiRmlyc3QgY2hhciA9ICVjJXNcbiIsIGNoLCBjYXNlbGVzcyk7
CisgICAgICAgIGVsc2UgcHJpbnRmKCJGaXJzdCBjaGFyID0gXFx4JTAyeCVzXG4iLCBjaCwgY2Fz
ZWxlc3MpOworICAgIH0KKyAgICAKKyAgICBpZiAocmUtPm9wdGlvbnMgJiBQQ1JFX1JFUUNIU0VU
KSB7CisgICAgICAgIGludCBjaCA9IHJlLT5yZXFfYnl0ZSAmIDI1NTsKKyAgICAgICAgY29uc3Qg
Y2hhciAqY2FzZWxlc3MgPSAoKHJlLT5yZXFfYnl0ZSAmIFJFUV9DQVNFTEVTUykgPT0gMCk/Cisg
ICAgICAgICIiIDogIiAoY2FzZWxlc3MpIjsKKyAgICAgICAgaWYgKGlzcHJpbnQoY2gpKSBwcmlu
dGYoIlJlcSBjaGFyID0gJWMlc1xuIiwgY2gsIGNhc2VsZXNzKTsKKyAgICAgICAgZWxzZSBwcmlu
dGYoIlJlcSBjaGFyID0gXFx4JTAyeCVzXG4iLCBjaCwgY2FzZWxlc3MpOworICAgIH0KKyAgICAK
KyAgICBwY3JlX3ByaW50aW50KHJlLCBzdGRvdXQpOworICAgIAorICAgIC8qIFRoaXMgY2hlY2sg
aXMgZG9uZSBoZXJlIGluIHRoZSBkZWJ1Z2dpbmcgY2FzZSBzbyB0aGF0IHRoZSBjb2RlIHRoYXQK
KyAgICAgd2FzIGNvbXBpbGVkIGNhbiBiZSBzZWVuLiAqLworICAgIAorICAgIGlmIChjb2RlIC0g
Y29kZXN0YXJ0ID4gbGVuZ3RoKSB7CisgICAgICAgIChwY3JlX2ZyZWUpKHJlKTsKKyAgICAgICAg
KmVycm9ycHRyID0gZXJyb3JfdGV4dChFUlI3KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
fQorICAgIAogI2VuZGlmCi0KLWlmIChudW1TdWJwYXR0ZXJucykKLSAgICAqbnVtU3VicGF0dGVy
bnMgPSByZS0+dG9wX2JyYWNrZXQ7Ci1yZXR1cm4gKHBjcmUgKilyZTsKKyAgICAKKyAgICBpZiAo
bnVtU3VicGF0dGVybnMpCisgICAgICAgICpudW1TdWJwYXR0ZXJucyA9IHJlLT50b3BfYnJhY2tl
dDsKKyAgICByZXR1cm4gKHBjcmUgKilyZTsKIH0KIAogdm9pZCBqc1JlZ0V4cEZyZWUoSlNSZWdF
eHAqIHJlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17285</attachid>
            <date>2007-11-14 16:56:24 -0800</date>
            <delta_ts>2007-11-14 17:13:12 -0800</delta_ts>
            <desc>Add a couple more minor cleanups to PCRE, -b diff</desc>
            <filename>white.patch</filename>
            <type>text/plain</type>
            <size>24109</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfY29tcGls
ZS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfY29tcGlsZS5jcHAKaW5kZXggNTcwMWMw
Mi4uNWJiNmQxYSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX2NvbXBpbGUu
Y3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV9jb21waWxlLmNwcApAQCAtMjQyMSwx
MDYgKzI0MjEsMzggQEAgd2hpbGUgKCpjb2RlID09IE9QX0FMVCk7CiByZXR1cm4gYzsKIH0KIAot
Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0q
ICAgICAgICBDb21waWxlIGEgUmVndWxhciBFeHByZXNzaW9uICAgICAgICAgICAgKgotKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhpcyBm
dW5jdGlvbiB0YWtlcyBhIHN0cmluZyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBibG9jayBv
ZiBzdG9yZQotaG9sZGluZyBhIGNvbXBpbGVkIHZlcnNpb24gb2YgdGhlIGV4cHJlc3Npb24uIFRo
ZSBvcmlnaW5hbCBBUEkgZm9yIHRoaXMKLWZ1bmN0aW9uIGhhZCBubyBlcnJvciBjb2RlIHJldHVy
biB2YXJpYWJsZTsgaXQgaXMgcmV0YWluZWQgZm9yIGJhY2t3YXJkcwotY29tcGF0aWJpbGl0eS4g
VGhlIG5ldyBmdW5jdGlvbiBpcyBnaXZlbiBhIG5ldyBuYW1lLgotCi1Bcmd1bWVudHM6Ci0gIHBh
dHRlcm4gICAgICAgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgotICBvcHRpb25zICAgICAgIHZhcmlv
dXMgb3B0aW9uIGJpdHMKLSAgZXJyb3Jjb2RlcHRyICBwb2ludGVyIHRvIGVycm9yIGNvZGUgdmFy
aWFibGUgKHBjcmVfY29tcGlsZTIoKSBvbmx5KQotICAgICAgICAgICAgICAgICAgY2FuIGJlIE5V
TEwgaWYgeW91IGRvbid0IHdhbnQgYSBjb2RlIHZhbHVlCi0gIGVycm9ycHRyICAgICAgcG9pbnRl
ciB0byBwb2ludGVyIHRvIGVycm9yIHRleHQKLSAgZXJyb3JvZmZzZXQgICBwdHIgb2Zmc2V0IGlu
IHBhdHRlcm4gd2hlcmUgZXJyb3Igd2FzIGRldGVjdGVkCi0gIHRhYmxlcyAgICAgICAgcG9pbnRl
ciB0byBjaGFyYWN0ZXIgdGFibGVzIG9yIE5VTEwKLQotUmV0dXJuczogICAgICAgIHBvaW50ZXIg
dG8gY29tcGlsZWQgZGF0YSBibG9jaywgb3IgTlVMTCBvbiBlcnJvciwKLSAgICAgICAgICAgICAg
ICB3aXRoIGVycm9ycHRyIGFuZCBlcnJvcm9mZnNldCBzZXQKLSovCi0KLXBjcmUgKgotanNSZWdF
eHBDb21waWxlKGNvbnN0IHBjcmVfY2hhciogcGF0dGVybiwgaW50IHBhdHRlcm5MZW5ndGgsCi0g
ICAgSlNSZWdFeHBJZ25vcmVDYXNlT3B0aW9uIGlnbm9yZUNhc2UsIEpTUmVnRXhwTXVsdGlsaW5l
T3B0aW9uIG11bHRpbGluZSwKLSAgICB1bnNpZ25lZCogbnVtU3VicGF0dGVybnMsIGNvbnN0IGNo
YXIqKiBlcnJvcnB0cikKK3N0YXRpYyBpbnQgY2FsY3VsYXRlQ29tcGlsZWRQYXR0ZXJuTGVuZ3Ro
QW5kRmxhZ3MoY29uc3QgcGNyZV9jaGFyKiBwYXR0ZXJuLCBpbnQgcGF0dGVybkxlbmd0aCwgSlNS
ZWdFeHBJZ25vcmVDYXNlT3B0aW9uIGlnbm9yZUNhc2UsIGNvbXBpbGVfZGF0YSYgY29tcGlsZV9i
bG9jaywgRXJyb3JDb2RlIGVycm9yY29kZSkKIHsKLXJlYWxfcGNyZSAqcmU7Ci1pbnQgbGVuZ3Ro
ID0gMSArIExJTktfU0laRTsgICAgICAvKiBGb3IgaW5pdGlhbCBCUkEgcGx1cyBsZW5ndGggKi8K
LWludCBjLCBmaXJzdGJ5dGUsIHJlcWJ5dGU7Ci1pbnQgYnJhY291bnQgPSAwOwotaW50IGJyYW5j
aF9leHRyYSA9IDA7Ci1pbnQgYnJhbmNoX25ld2V4dHJhOwotaW50IGl0ZW1fY291bnQgPSAtMTsK
LWludCBuYW1lX2NvdW50ID0gMDsKLWludCBtYXhfbmFtZV9zaXplID0gMDsKLWludCBsYXN0aXRl
bWxlbmd0aCA9IDA7Ci1FcnJvckNvZGUgZXJyb3Jjb2RlID0gRVJSMDsKLUJPT0wgY2xhc3NfdXRm
ODsKLUJPT0wgY2FwdHVyaW5nOwotdW5zaWduZWQgaW50IGJyYXN0YWNrcHRyID0gMDsKLXNpemVf
dCBzaXplOwotdXNjaGFyICpjb2RlOwotY29uc3QgdXNjaGFyICpjb2Rlc3RhcnQ7Ci1jb25zdCBw
Y3JlX3VjaGFyICpwdHI7Ci1jb25zdCBwY3JlX3VjaGFyICpwYXR0ZXJuRW5kOwotY29tcGlsZV9k
YXRhIGNvbXBpbGVfYmxvY2s7Ci1pbnQgYnJhc3RhY2tbQlJBU1RBQ0tfU0laRV07Ci11c2NoYXIg
YnJhbGVuc3RhY2tbQlJBU1RBQ0tfU0laRV07Ci0KLS8qIFdlIGNhbid0IHBhc3MgYmFjayBhbiBl
cnJvciBtZXNzYWdlIGlmIGVycm9ycHRyIGlzIE5VTEw7IEkgZ3Vlc3MgdGhlIGJlc3Qgd2UKLWNh
biBkbyBpcyBqdXN0IHJldHVybiBOVUxMLCBidXQgd2UgY2FuIHNldCBhIGNvZGUgdmFsdWUgaWYg
dGhlcmUgaXMgYSBjb2RlCi1wb2ludGVyLiAqLwotCi1pZiAoZXJyb3JwdHIgPT0gTlVMTCkKLSAg
ewotICByZXR1cm4gTlVMTDsKLSAgfQotCi0qZXJyb3JwdHIgPSBOVUxMOwotCi0vKiBTZXQgdXAg
cG9pbnRlcnMgdG8gdGhlIGluZGl2aWR1YWwgY2hhcmFjdGVyIHRhYmxlcyAqLwotCi1jb21waWxl
X2Jsb2NrLmxjYyA9IF9wY3JlX2RlZmF1bHRfdGFibGVzICsgbGNjX29mZnNldDsKLWNvbXBpbGVf
YmxvY2suZmNjID0gX3BjcmVfZGVmYXVsdF90YWJsZXMgKyBmY2Nfb2Zmc2V0OwotY29tcGlsZV9i
bG9jay5jYml0cyA9IF9wY3JlX2RlZmF1bHRfdGFibGVzICsgY2JpdHNfb2Zmc2V0OwotY29tcGls
ZV9ibG9jay5jdHlwZXMgPSBfcGNyZV9kZWZhdWx0X3RhYmxlcyArIGN0eXBlc19vZmZzZXQ7Ci0K
LS8qIE1heGltdW0gYmFjayByZWZlcmVuY2UgYW5kIGJhY2tyZWYgYml0bWFwLiBUaGlzIGlzIHVw
ZGF0ZWQgZm9yIG51bWVyaWMKLXJlZmVyZW5jZXMgZHVyaW5nIHRoZSBmaXJzdCBwYXNzLCBidXQg
Zm9yIG5hbWVkIHJlZmVyZW5jZXMgZHVyaW5nIHRoZSBhY3R1YWwKLWNvbXBpbGUgcGFzcy4gVGhl
IGJpdG1hcCByZWNvcmRzIHVwIHRvIDMxIGJhY2sgcmVmZXJlbmNlcyB0byBoZWxwIGluIGRlY2lk
aW5nCi13aGV0aGVyICguKikgY2FuIGJlIHRyZWF0ZWQgYXMgYW5jaG9yZWQgb3Igbm90LiAqLwot
Ci1jb21waWxlX2Jsb2NrLnRvcF9iYWNrcmVmID0gMDsKLWNvbXBpbGVfYmxvY2suYmFja3JlZl9t
YXAgPSAwOwotCi0vKiBSZWZsZWN0IHBhdHRlcm4gZm9yIGRlYnVnZ2luZyBvdXRwdXQgKi8KLQot
RFBSSU5URigoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLVxuIikpOwotCi0vKiBUaGUgZmlyc3QgdGhpbmcgdG8gZG8gaXMg
dG8gbWFrZSBhIHBhc3Mgb3ZlciB0aGUgcGF0dGVybiB0byBjb21wdXRlIHRoZQotYW1vdW50IG9m
IHN0b3JlIHJlcXVpcmVkIHRvIGhvbGQgdGhlIGNvbXBpbGVkIGNvZGUuIFRoaXMgZG9lcyBub3Qg
aGF2ZSB0byBiZQotcGVyZmVjdCBhcyBsb25nIGFzIGVycm9ycyBhcmUgb3ZlcmVzdGltYXRlcy4g
QXQgdGhlIHNhbWUgdGltZSB3ZSBjYW4gZGV0ZWN0IGFueQotZmxhZyBzZXR0aW5ncyByaWdodCBh
dCB0aGUgc3RhcnQsIGFuZCBleHRyYWN0IHRoZW0uIE1ha2UgYW4gYXR0ZW1wdCB0byBjb3JyZWN0
Ci1mb3IgYW55IGNvdW50ZWQgd2hpdGUgc3BhY2UgaWYgYW4gImV4dGVuZGVkIiBmbGFnIHNldHRp
bmcgYXBwZWFycyBsYXRlIGluIHRoZQotcGF0dGVybi4gV2UgY2FuJ3QgYmUgc28gY2xldmVyIGZv
ciAjLWNvbW1lbnRzLiAqLwotCi1wdHIgPSAoY29uc3QgcGNyZV91Y2hhciAqKShwYXR0ZXJuIC0g
MSk7Ci1wYXR0ZXJuRW5kID0gKGNvbnN0IHBjcmVfdWNoYXIgKikocGF0dGVybiArIHBhdHRlcm5M
ZW5ndGgpOwotCi13aGlsZSAoKytwdHIgPCBwYXR0ZXJuRW5kKQorICAgIC8qIE1ha2UgYSBwYXNz
IG92ZXIgdGhlIHBhdHRlcm4gdG8gY29tcHV0ZSB0aGUKKyAgICAgYW1vdW50IG9mIHN0b3JlIHJl
cXVpcmVkIHRvIGhvbGQgdGhlIGNvbXBpbGVkIGNvZGUuIFRoaXMgZG9lcyBub3QgaGF2ZSB0byBi
ZQorICAgICBwZXJmZWN0IGFzIGxvbmcgYXMgZXJyb3JzIGFyZSBvdmVyZXN0aW1hdGVzLiBBdCB0
aGUgc2FtZSB0aW1lIHdlIGNhbiBkZXRlY3QgYW55CisgICAgIGZsYWcgc2V0dGluZ3MgcmlnaHQg
YXQgdGhlIHN0YXJ0LCBhbmQgZXh0cmFjdCB0aGVtLiBNYWtlIGFuIGF0dGVtcHQgdG8gY29ycmVj
dAorICAgICBmb3IgYW55IGNvdW50ZWQgd2hpdGUgc3BhY2UgaWYgYW4gImV4dGVuZGVkIiBmbGFn
IHNldHRpbmcgYXBwZWFycyBsYXRlIGluIHRoZQorICAgICBwYXR0ZXJuLiBXZSBjYW4ndCBiZSBz
byBjbGV2ZXIgZm9yICMtY29tbWVudHMuICovCisgICAgCisgICAgaW50IGxlbmd0aCA9IDEgKyBM
SU5LX1NJWkU7ICAgICAgLyogRm9yIGluaXRpYWwgQlJBIHBsdXMgbGVuZ3RoICovCisgICAgaW50
IGJyYW5jaF9leHRyYSA9IDA7CisgICAgaW50IGJyYW5jaF9uZXdleHRyYTsKKyAgICBpbnQgbGFz
dGl0ZW1sZW5ndGggPSAwOworICAgIEJPT0wgY2xhc3NfdXRmODsKKyAgICBCT09MIGNhcHR1cmlu
ZzsKKyAgICB1bnNpZ25lZCBpbnQgYnJhc3RhY2twdHIgPSAwOworICAgIGludCBicmFzdGFja1tC
UkFTVEFDS19TSVpFXTsKKyAgICB1c2NoYXIgYnJhbGVuc3RhY2tbQlJBU1RBQ0tfU0laRV07Cisg
ICAgaW50IGl0ZW1fY291bnQgPSAtMTsKKyAgICBpbnQgYnJhY291bnQgPSAwOworICAgIAorICAg
IGNvbnN0IHBjcmVfdWNoYXIqIHB0ciA9IChjb25zdCBwY3JlX3VjaGFyKikocGF0dGVybiAtIDEp
OworICAgIGNvbnN0IHBjcmVfdWNoYXIqIHBhdHRlcm5FbmQgPSAoY29uc3QgcGNyZV91Y2hhciop
KHBhdHRlcm4gKyBwYXR0ZXJuTGVuZ3RoKTsKKyAgICAKKyAgICB3aGlsZSAoKytwdHIgPCBwYXR0
ZXJuRW5kKQogICB7CiAgIGludCBtaW4gPSAwLCBtYXggPSAwOwogICBpbnQgY2xhc3Nfb3B0Y291
bnQ7CiAgIGludCBicmFja2V0X2xlbmd0aDsKICAgaW50IGR1cGxlbmd0aDsKIAotICBjID0gKnB0
cjsKKyAgICAgICAgaW50IGMgPSAqcHRyOwogICAKICAgaXRlbV9jb3VudCsrOyAgICAvKiBJcyB6
ZXJvIGZvciB0aGUgZmlyc3Qgbm9uLWNvbW1lbnQgaXRlbSAqLwogCkBAIC0yNTMxLDcgKzI0NjMs
OCBAQCB3aGlsZSAoKytwdHIgPCBwYXR0ZXJuRW5kKQogCiAgICAgY2FzZSAnXFwnOgogICAgIGMg
PSBjaGVja19lc2NhcGUoJnB0ciwgcGF0dGVybkVuZCwgJmVycm9yY29kZSwgYnJhY291bnQsIGZh
bHNlKTsKLSAgICBpZiAoZXJyb3Jjb2RlICE9IDApIGdvdG8gUENSRV9FUlJPUl9SRVRVUk47Cisg
ICAgICAgICAgICAgICAgaWYgKGVycm9yY29kZSAhPSAwKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gLTE7OwogCiAgICAgbGFzdGl0ZW1sZW5ndGggPSAxOyAgICAgLyogRGVmYXVsdCBsZW5n
dGggb2YgbGFzdCBpdGVtIGZvciByZXBlYXRzICovCiAKQEAgLTI1NjksNyArMjUwMiw3IEBAIHdo
aWxlICgrK3B0ciA8IHBhdHRlcm5FbmQpCiAgICAgICBpZiAocHRyWzFdID09ICd7JyAmJiBpc19j
b3VudGVkX3JlcGVhdChwdHIrMiwgcGF0dGVybkVuZCkpCiAgICAgICAgIHsKICAgICAgICAgcHRy
ID0gcmVhZF9yZXBlYXRfY291bnRzKHB0cisyLCAmbWluLCAmbWF4LCAmZXJyb3Jjb2RlKTsKLSAg
ICAgICAgaWYgKGVycm9yY29kZSAhPSAwKSBnb3RvIFBDUkVfRVJST1JfUkVUVVJOOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGVycm9yY29kZSAhPSAwKSByZXR1cm4gLTE7OwogICAgICAg
ICBpZiAoKG1pbiA9PSAwICYmIChtYXggPT0gMSB8fCBtYXggPT0gLTEpKSB8fAogICAgICAgICAg
IChtaW4gPT0gMSAmJiBtYXggPT0gLTEpKQogICAgICAgICAgICAgbGVuZ3RoKys7CkBAIC0yNTk5
LDcgKzI1MzIsNyBAQCB3aGlsZSAoKytwdHIgPCBwYXR0ZXJuRW5kKQogICAgIGNhc2UgJ3snOgog
ICAgIGlmICghaXNfY291bnRlZF9yZXBlYXQocHRyKzEsIHBhdHRlcm5FbmQpKSBnb3RvIE5PUk1B
TF9DSEFSOwogICAgIHB0ciA9IHJlYWRfcmVwZWF0X2NvdW50cyhwdHIrMSwgJm1pbiwgJm1heCwg
JmVycm9yY29kZSk7Ci0gICAgaWYgKGVycm9yY29kZSAhPSAwKSBnb3RvIFBDUkVfRVJST1JfUkVU
VVJOOworICAgICAgICAgICAgICAgIGlmIChlcnJvcmNvZGUgIT0gMCkgcmV0dXJuIC0xOzsKIAog
ICAgIC8qIFRoZXNlIHNwZWNpYWwgY2FzZXMganVzdCBpbnNlcnQgb25lIGV4dHJhIG9wY29kZSAq
LwogCkBAIC0yNjYzLDcgKzI1OTYsNyBAQCB3aGlsZSAoKytwdHIgPCBwYXR0ZXJuRW5kKQogICAg
ICAgaWYgKCpwdHIgPT0gJ1xcJykKICAgICAgICAgewogICAgICAgICBjID0gY2hlY2tfZXNjYXBl
KCZwdHIsIHBhdHRlcm5FbmQsICZlcnJvcmNvZGUsIGJyYWNvdW50LCB0cnVlKTsKLSAgICAgICAg
aWYgKGVycm9yY29kZSAhPSAwKSBnb3RvIFBDUkVfRVJST1JfUkVUVVJOOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGVycm9yY29kZSAhPSAwKSByZXR1cm4gLTE7OwogCiAgICAgICAgIC8q
IFxiIGlzIGJhY2tzcGFjZSBpbnNpZGUgYSBjbGFzczsgXFggaXMgbGl0ZXJhbCAqLwogCkBAIC0y
NzExLDcgKzI2NDQsNyBAQCB3aGlsZSAoKytwdHIgPCBwYXR0ZXJuRW5kKQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgcHRyKys7CiAgICAgICAgICAgICBkID0gY2hlY2tfZXNjYXBlKCZwdHIs
IHBhdHRlcm5FbmQsICZlcnJvcmNvZGUsIGJyYWNvdW50LCB0cnVlKTsKLSAgICAgICAgICAgIGlm
IChlcnJvcmNvZGUgIT0gMCkgZ290byBQQ1JFX0VSUk9SX1JFVFVSTjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGVycm9yY29kZSAhPSAwKSByZXR1cm4gLTE7OwogICAgICAg
ICAgICAgaWYgKC1kID09IEVTQ19iKSBkID0gJ1xiJzsgICAgICAgIC8qIGJhY2tzcGFjZSAqLwog
ICAgICAgICAgICAgfQogICAgICAgICAgIGVsc2UgaWYgKHB0ciArIDEgPCBwYXR0ZXJuRW5kICYm
IHB0clsxXSAhPSAnXScpCkBAIC0yNzM1LDcgKzI2NjgsNyBAQCB3aGlsZSAoKytwdHIgPCBwYXR0
ZXJuRW5kKQogICAgICAgICAgIGlmIChkIDwgYykKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
IGVycm9yY29kZSA9IEVSUjg7Ci0gICAgICAgICAgICBnb3RvIFBDUkVfRVJST1JfUkVUVVJOOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7OwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgaWYgKChkID4gMjU1IHx8IChpZ25vcmVDYXNlICYmIGQgPiAxMjcpKSkK
QEAgLTI4MTIsNyArMjc0NSw3IEBAIHdoaWxlICgrK3B0ciA8IHBhdHRlcm5FbmQpCiAgICAgaWYg
KHB0ciA+PSBwYXR0ZXJuRW5kKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWlzc2luZyB0
ZXJtaW5hdGluZyAnXScgKi8KICAgICAgIHsKICAgICAgIGVycm9yY29kZSA9IEVSUjY7Ci0gICAg
ICBnb3RvIFBDUkVfRVJST1JfUkVUVVJOOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7
OwogICAgICAgfQogCiAgICAgLyogV2UgY2FuIG9wdGltaXplIHdoZW4gdGhlcmUgd2FzIG9ubHkg
b25lIG9wdGltaXphYmxlIGNoYXJhY3Rlci4gUmVwZWF0cwpAQCAtMjgyOSw3ICsyNzYyLDcgQEAg
d2hpbGUgKCsrcHRyIDwgcGF0dGVybkVuZCkKICAgICAgIGlmIChwdHIgKyAxIDwgcGF0dGVybkVu
ZCAmJiBwdHJbMV0gPT0gJ3snICYmIGlzX2NvdW50ZWRfcmVwZWF0KHB0cisyLCBwYXR0ZXJuRW5k
KSkKICAgICAgICAgewogICAgICAgICBwdHIgPSByZWFkX3JlcGVhdF9jb3VudHMocHRyKzIsICZt
aW4sICZtYXgsICZlcnJvcmNvZGUpOwotICAgICAgICBpZiAoZXJyb3Jjb2RlICE9IDApIGdvdG8g
UENSRV9FUlJPUl9SRVRVUk47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3Jjb2Rl
ICE9IDApIHJldHVybiAtMTs7CiAgICAgICAgIGlmICgobWluID09IDAgJiYgKG1heCA9PSAxIHx8
IG1heCA9PSAtMSkpIHx8CiAgICAgICAgICAgKG1pbiA9PSAxICYmIG1heCA9PSAtMSkpCiAgICAg
ICAgICAgICBsZW5ndGgrKzsKQEAgLTI4NzUsNyArMjgwOCw3IEBAIHdoaWxlICgrK3B0ciA8IHBh
dHRlcm5FbmQpCiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgZXJyb3Jjb2RlID0gRVJSMTI7
Ci0gICAgICAgIGdvdG8gUENSRV9FUlJPUl9SRVRVUk47CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIC0xOzsKICAgICAgICAgfQogICAgICAgfQogCkBAIC0yODk5LDcgKzI4MzIs
NyBAQCB3aGlsZSAoKytwdHIgPCBwYXR0ZXJuRW5kKQogICAgIGlmIChicmFzdGFja3B0ciA+PSBz
aXplb2YoYnJhc3RhY2spL3NpemVvZihpbnQpKQogICAgICAgewogICAgICAgZXJyb3Jjb2RlID0g
RVJSMTc7Ci0gICAgICBnb3RvIFBDUkVfRVJST1JfUkVUVVJOOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gLTE7OwogICAgICAgfQogCiAgICAgYnJhbGVuc3RhY2tbYnJhc3RhY2twdHJdID0g
YnJhbmNoX2V4dHJhOwpAQCAtMjkzMCw3ICsyODYzLDcgQEAgd2hpbGUgKCsrcHRyIDwgcGF0dGVy
bkVuZCkKICAgICBpZiAocHRyICsgMSA8IHBhdHRlcm5FbmQgJiYgKGMgPSBwdHJbMV0pID09ICd7
JyAmJiBpc19jb3VudGVkX3JlcGVhdChwdHIrMiwgcGF0dGVybkVuZCkpCiAgICAgICB7CiAgICAg
ICBwdHIgPSByZWFkX3JlcGVhdF9jb3VudHMocHRyKzIsICZtaW4sICZtYXgsICZlcnJvcmNvZGUp
OwotICAgICAgaWYgKGVycm9yY29kZSAhPSAwKSBnb3RvIFBDUkVfRVJST1JfUkVUVVJOOworICAg
ICAgICAgICAgICAgICAgICBpZiAoZXJyb3Jjb2RlICE9IDApIHJldHVybiAtMTs7CiAgICAgICB9
CiAgICAgZWxzZSBpZiAoYyA9PSAnKicpIHsgbWluID0gMDsgbWF4ID0gLTE7IHB0cisrOyB9CiAg
ICAgZWxzZSBpZiAoYyA9PSAnKycpIHsgbWluID0gMTsgbWF4ID0gLTE7IHB0cisrOyB9CkBAIC0z
MDA0LDEwNSArMjkzNywxODUgQEAgd2hpbGUgKCsrcHRyIDwgcGF0dGVybkVuZCkKICAgICB9CiAg
IH0KIAotbGVuZ3RoICs9IDIgKyBMSU5LX1NJWkU7ICAgIC8qIEZvciBmaW5hbCBLRVQgYW5kIEVO
RCAqLworICAgIGxlbmd0aCArPSAyICsgTElOS19TSVpFOyAgICAvKiBGb3IgZmluYWwgS0VUIGFu
ZCBFTkQgKi8KKyAgICByZXR1cm4gbGVuZ3RoOworfQogCi1pZiAobGVuZ3RoID4gTUFYX1BBVFRF
Uk5fU0laRSkKLSAgewotICBlcnJvcmNvZGUgPSBFUlIxNjsKLSAgZ290byBQQ1JFX0VSUk9SX1JF
VFVSTjsKLSAgfQorI2lmZGVmIERFQlVHCitzdGF0aWMgdm9pZCBwcmludENvbXBpbGVkUmVnRXhw
KHJlYWxfcGNyZSogcmUsIGludCBsZW5ndGgpCit7CisgICAgcHJpbnRmKCJMZW5ndGggPSAlZCB0
b3BfYnJhY2tldCA9ICVkIHRvcF9iYWNrcmVmID0gJWRcbiIsCisgICAgICAgICAgIGxlbmd0aCwg
cmUtPnRvcF9icmFja2V0LCByZS0+dG9wX2JhY2tyZWYpOwogCi0vKiBDb21wdXRlIHRoZSBzaXpl
IG9mIGRhdGEgYmxvY2sgbmVlZGVkIGFuZCBnZXQgaXQuICovCisgICAgaWYgKHJlLT5vcHRpb25z
KSB7CisgICAgICAgIHByaW50ZigiJXMlcyVzXG4iLAorICAgICAgICAgICAgICAgKChyZS0+b3B0
aW9ucyAmIFBDUkVfQU5DSE9SRUQpICE9IDApPyAiYW5jaG9yZWQgIiA6ICIiLAorICAgICAgICAg
ICAgICAgKChyZS0+b3B0aW9ucyAmIFBDUkVfQ0FTRUxFU1MpICE9IDApPyAiY2FzZWxlc3MgIiA6
ICIiLAorICAgICAgICAgICAgICAgKChyZS0+b3B0aW9ucyAmIFBDUkVfTVVMVElMSU5FKSAhPSAw
KT8gIm11bHRpbGluZSAiIDogIiIpOworICAgIH0KIAotc2l6ZSA9IGxlbmd0aCArIHNpemVvZihy
ZWFsX3BjcmUpICsgbmFtZV9jb3VudCAqIChtYXhfbmFtZV9zaXplICsgMyk7Ci1yZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8cmVhbF9wY3JlKj4obmV3IGNoYXJbc2l6ZV0pOworICAgIGlmIChyZS0+b3B0
aW9ucyAmIFBDUkVfRklSU1RTRVQpIHsKKyAgICAgICAgY2hhciBjaCA9IHJlLT5maXJzdF9ieXRl
ICYgMjU1OworICAgICAgICBjb25zdCBjaGFyKiBjYXNlbGVzcyA9ICgocmUtPmZpcnN0X2J5dGUg
JiBSRVFfQ0FTRUxFU1MpID09IDApID8gIiIgOiAiIChjYXNlbGVzcykiOworICAgICAgICBpZiAo
aXNBU0NJSUFscGhhbnVtZXJpYyhjaCkpCisgICAgICAgICAgICBwcmludGYoIkZpcnN0IGNoYXIg
PSAlYyVzXG4iLCBjaCwgY2FzZWxlc3MpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcmlu
dGYoIkZpcnN0IGNoYXIgPSBcXHglMDJ4JXNcbiIsIGNoLCBjYXNlbGVzcyk7CisgICAgfQogCi1p
ZiAocmUgPT0gTlVMTCkKLSAgewotICBlcnJvcmNvZGUgPSBFUlIxMzsKLSAgZ290byBQQ1JFX0VS
Uk9SX1JFVFVSTjsKKyAgICBpZiAocmUtPm9wdGlvbnMgJiBQQ1JFX1JFUUNIU0VUKSB7CisgICAg
ICAgIGNoYXIgY2ggPSByZS0+cmVxX2J5dGUgJiAyNTU7CisgICAgICAgIGNvbnN0IGNoYXIqIGNh
c2VsZXNzID0gKChyZS0+cmVxX2J5dGUgJiBSRVFfQ0FTRUxFU1MpID09IDApID8gIiIgOiAiIChj
YXNlbGVzcykiOworICAgICAgICBpZiAoaXNBU0NJSUFscGhhbnVtZXJpYyhjaCkpCisgICAgICAg
ICAgICBwcmludGYoIlJlcSBjaGFyID0gJWMlc1xuIiwgY2gsIGNhc2VsZXNzKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcHJpbnRmKCJSZXEgY2hhciA9IFxceCUwMnglc1xuIiwgY2gsIGNh
c2VsZXNzKTsKICAgfQogCi0vKiBQdXQgaW4gdGhlIG1hZ2ljIG51bWJlciwgYW5kIHNhdmUgdGhl
IHNpemVzLCBvcHRpb25zLCBhbmQgY2hhcmFjdGVyIHRhYmxlCi1wb2ludGVyLiBOVUxMIGlzIHVz
ZWQgZm9yIHRoZSBkZWZhdWx0IGNoYXJhY3RlciB0YWJsZXMuIFRoZSBudWxscGFkIGZpZWxkIGlz
IGF0Ci10aGUgZW5kOyBpdCdzIHRoZXJlIHRvIGhlbHAgaW4gdGhlIGNhc2Ugd2hlbiBhIHJlZ2V4
IGNvbXBpbGVkIG9uIGEgc3lzdGVtIHdpdGgKLTQtYnl0ZSBwb2ludGVycyBpcyBydW4gb24gYW5v
dGhlciB3aXRoIDgtYnl0ZSBwb2ludGVycy4gKi8KKyAgICAvLyBUaGlzIGRlYnVnZ2luZyBmdW5j
dGlvbiBoYXMgYmVlbiByZW1vdmVkIGZyb20gSmF2YVNjcmlwdENvcmUncyBQQ1JFCisgICAgLy9w
Y3JlX3ByaW50aW50KHJlLCBzdGRvdXQpOworfQorI2VuZGlmCiAKLXJlLT5zaXplID0gKHBjcmVf
dWludDMyKXNpemU7Ci1yZS0+b3B0aW9ucyA9IChpZ25vcmVDYXNlID8gUENSRV9DQVNFTEVTUyA6
IDApIHwgKG11bHRpbGluZSA/IFBDUkVfTVVMVElMSU5FIDogMCk7CisvKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgQ29tcGlsZSBhIFJl
Z3VsYXIgRXhwcmVzc2lvbiAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIFRoZSBzdGFydGluZyBwb2ludHMgb2YgdGhl
IG5hbWUvbnVtYmVyIHRyYW5zbGF0aW9uIHRhYmxlIGFuZCBvZiB0aGUgY29kZSBhcmUKLXBhc3Nl
ZCBhcm91bmQgaW4gdGhlIGNvbXBpbGUgZGF0YSBibG9jay4gKi8KKy8qIFRoaXMgZnVuY3Rpb24g
dGFrZXMgYSBzdHJpbmcgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIGEgYmxvY2sgb2Ygc3RvcmUK
K2hvbGRpbmcgYSBjb21waWxlZCB2ZXJzaW9uIG9mIHRoZSBleHByZXNzaW9uLiBUaGUgb3JpZ2lu
YWwgQVBJIGZvciB0aGlzCitmdW5jdGlvbiBoYWQgbm8gZXJyb3IgY29kZSByZXR1cm4gdmFyaWFi
bGU7IGl0IGlzIHJldGFpbmVkIGZvciBiYWNrd2FyZHMKK2NvbXBhdGliaWxpdHkuIFRoZSBuZXcg
ZnVuY3Rpb24gaXMgZ2l2ZW4gYSBuZXcgbmFtZS4KIAotY29kZXN0YXJ0ID0gKGNvbnN0IHVzY2hh
ciAqKShyZSArIDEpOwotY29tcGlsZV9ibG9jay5zdGFydF9jb2RlID0gY29kZXN0YXJ0OwotY29t
cGlsZV9ibG9jay5zdGFydF9wYXR0ZXJuID0gKGNvbnN0IHBjcmVfdWNoYXIgKilwYXR0ZXJuOwot
Y29tcGlsZV9ibG9jay5yZXFfdmFyeW9wdCA9IDA7CitBcmd1bWVudHM6CisgIHBhdHRlcm4gICAg
ICAgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgorICBvcHRpb25zICAgICAgIHZhcmlvdXMgb3B0aW9u
IGJpdHMKKyAgZXJyb3Jjb2RlcHRyICBwb2ludGVyIHRvIGVycm9yIGNvZGUgdmFyaWFibGUgKHBj
cmVfY29tcGlsZTIoKSBvbmx5KQorICAgICAgICAgICAgICAgICAgY2FuIGJlIE5VTEwgaWYgeW91
IGRvbid0IHdhbnQgYSBjb2RlIHZhbHVlCisgIGVycm9ycHRyICAgICAgcG9pbnRlciB0byBwb2lu
dGVyIHRvIGVycm9yIHRleHQKKyAgZXJyb3JvZmZzZXQgICBwdHIgb2Zmc2V0IGluIHBhdHRlcm4g
d2hlcmUgZXJyb3Igd2FzIGRldGVjdGVkCisgIHRhYmxlcyAgICAgICAgcG9pbnRlciB0byBjaGFy
YWN0ZXIgdGFibGVzIG9yIE5VTEwKKworUmV0dXJuczogICAgICAgIHBvaW50ZXIgdG8gY29tcGls
ZWQgZGF0YSBibG9jaywgb3IgTlVMTCBvbiBlcnJvciwKKyAgICAgICAgICAgICAgICB3aXRoIGVy
cm9ycHRyIGFuZCBlcnJvcm9mZnNldCBzZXQKKyovCisKK3N0YXRpYyBwY3JlKiByZXR1cm5FcnJv
cihFcnJvckNvZGUgZXJyb3Jjb2RlLCBjb25zdCBjaGFyKiogZXJyb3JwdHIpCit7CisgICAgKmVy
cm9ycHRyID0gZXJyb3JfdGV4dChlcnJvcmNvZGUpOworICAgIHJldHVybiAwOworfQorCitwY3Jl
ICoKK2pzUmVnRXhwQ29tcGlsZShjb25zdCBwY3JlX2NoYXIqIHBhdHRlcm4sIGludCBwYXR0ZXJu
TGVuZ3RoLAorICAgICAgICAgICAgICAgIEpTUmVnRXhwSWdub3JlQ2FzZU9wdGlvbiBpZ25vcmVD
YXNlLCBKU1JlZ0V4cE11bHRpbGluZU9wdGlvbiBtdWx0aWxpbmUsCisgICAgICAgICAgICAgICAg
dW5zaWduZWQqIG51bVN1YnBhdHRlcm5zLCBjb25zdCBjaGFyKiogZXJyb3JwdHIpCit7CisgICAg
LyogV2UgY2FuJ3QgcGFzcyBiYWNrIGFuIGVycm9yIG1lc3NhZ2UgaWYgZXJyb3JwdHIgaXMgTlVM
TDsgSSBndWVzcyB0aGUgYmVzdCB3ZQorICAgICBjYW4gZG8gaXMganVzdCByZXR1cm4gTlVMTCwg
YnV0IHdlIGNhbiBzZXQgYSBjb2RlIHZhbHVlIGlmIHRoZXJlIGlzIGEgY29kZQorICAgICBwb2lu
dGVyLiAqLworICAgIGlmICghZXJyb3JwdHIpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAg
ICplcnJvcnB0ciA9IE5VTEw7CisgICAgCisgICAgLyogU2V0IHVwIHBvaW50ZXJzIHRvIHRoZSBp
bmRpdmlkdWFsIGNoYXJhY3RlciB0YWJsZXMgKi8KKyAgICAKKyAgICBjb21waWxlX2RhdGEgY29t
cGlsZV9ibG9jazsKKyAgICAKKyAgICBFcnJvckNvZGUgZXJyb3Jjb2RlID0gRVJSMDsKKyAgICBp
bnQgbGVuZ3RoID0gY2FsY3VsYXRlQ29tcGlsZWRQYXR0ZXJuTGVuZ3RoQW5kRmxhZ3MocGF0dGVy
biwgcGF0dGVybkxlbmd0aCwgaWdub3JlQ2FzZSwgY29tcGlsZV9ibG9jaywgZXJyb3Jjb2RlKTsK
KyAgICBpZiAoZXJyb3Jjb2RlKQorICAgICAgICByZXR1cm4gcmV0dXJuRXJyb3IoZXJyb3Jjb2Rl
LCBlcnJvcnB0cik7CisgICAgCisgICAgaWYgKGxlbmd0aCA+IE1BWF9QQVRURVJOX1NJWkUpCisg
ICAgICAgIHJldHVybiByZXR1cm5FcnJvcihFUlIxNiwgZXJyb3JwdHIpOworICAgIAorICAgIC8q
IENvbXB1dGUgdGhlIHNpemUgb2YgZGF0YSBibG9jayBuZWVkZWQgYW5kIGdldCBpdC4gKi8KKyAg
ICAKKyAgICBzaXplX3Qgc2l6ZSA9IGxlbmd0aCArIHNpemVvZihyZWFsX3BjcmUpOworICAgIHJl
YWxfcGNyZSogcmUgPSByZWludGVycHJldF9jYXN0PHJlYWxfcGNyZSo+KG5ldyBjaGFyW3NpemVd
KTsKKyAgICAKKyAgICBpZiAoIXJlKQorICAgICAgICByZXR1cm4gcmV0dXJuRXJyb3IoRVJSMTMs
IGVycm9ycHRyKTsKIAotLyogU2V0IHVwIGEgc3RhcnRpbmcsIG5vbi1leHRyYWN0aW5nIGJyYWNr
ZXQsIHRoZW4gY29tcGlsZSB0aGUgZXhwcmVzc2lvbi4gT24KLWVycm9yLCBlcnJvcmNvZGUgd2ls
bCBiZSBzZXQgbm9uLXplcm8sIHNvIHdlIGRvbid0IG5lZWQgdG8gbG9vayBhdCB0aGUgcmVzdWx0
Ci1vZiB0aGUgZnVuY3Rpb24gaGVyZS4gKi8KKyAgICAvKiBQdXQgaW4gdGhlIG1hZ2ljIG51bWJl
ciwgYW5kIHNhdmUgdGhlIHNpemVzLCBvcHRpb25zLCBhbmQgY2hhcmFjdGVyIHRhYmxlCisgICAg
IHBvaW50ZXIuIE5VTEwgaXMgdXNlZCBmb3IgdGhlIGRlZmF1bHQgY2hhcmFjdGVyIHRhYmxlcy4g
VGhlIG51bGxwYWQgZmllbGQgaXMgYXQKKyAgICAgdGhlIGVuZDsgaXQncyB0aGVyZSB0byBoZWxw
IGluIHRoZSBjYXNlIHdoZW4gYSByZWdleCBjb21waWxlZCBvbiBhIHN5c3RlbSB3aXRoCisgICAg
IDQtYnl0ZSBwb2ludGVycyBpcyBydW4gb24gYW5vdGhlciB3aXRoIDgtYnl0ZSBwb2ludGVycy4g
Ki8KIAotcHRyID0gKGNvbnN0IHBjcmVfdWNoYXIgKilwYXR0ZXJuOwotY29kZSA9ICh1c2NoYXIg
Kiljb2Rlc3RhcnQ7Ci0qY29kZSA9IE9QX0JSQTsKLWJyYWNvdW50ID0gMDsKLSh2b2lkKWNvbXBp
bGVfcmVnZXgocmUtPm9wdGlvbnMsICZicmFjb3VudCwgJmNvZGUsICZwdHIsCisgICAgcmUtPnNp
emUgPSAocGNyZV91aW50MzIpc2l6ZTsKKyAgICByZS0+b3B0aW9ucyA9IChpZ25vcmVDYXNlID8g
UENSRV9DQVNFTEVTUyA6IDApIHwgKG11bHRpbGluZSA/IFBDUkVfTVVMVElMSU5FIDogMCk7Cisg
ICAgCisgICAgLyogVGhlIHN0YXJ0aW5nIHBvaW50cyBvZiB0aGUgbmFtZS9udW1iZXIgdHJhbnNs
YXRpb24gdGFibGUgYW5kIG9mIHRoZSBjb2RlIGFyZQorICAgICBwYXNzZWQgYXJvdW5kIGluIHRo
ZSBjb21waWxlIGRhdGEgYmxvY2suICovCisgICAgCisgICAgY29uc3QgdXNjaGFyKiBjb2Rlc3Rh
cnQgPSAoY29uc3QgdXNjaGFyKikocmUgKyAxKTsKKyAgICBjb21waWxlX2Jsb2NrLnN0YXJ0X2Nv
ZGUgPSBjb2Rlc3RhcnQ7CisgICAgY29tcGlsZV9ibG9jay5zdGFydF9wYXR0ZXJuID0gKGNvbnN0
IHBjcmVfdWNoYXIqKXBhdHRlcm47CisgICAgCisgICAgLyogU2V0IHVwIGEgc3RhcnRpbmcsIG5v
bi1leHRyYWN0aW5nIGJyYWNrZXQsIHRoZW4gY29tcGlsZSB0aGUgZXhwcmVzc2lvbi4gT24KKyAg
ICAgZXJyb3IsIGVycm9yY29kZSB3aWxsIGJlIHNldCBub24temVybywgc28gd2UgZG9uJ3QgbmVl
ZCB0byBsb29rIGF0IHRoZSByZXN1bHQKKyAgICAgb2YgdGhlIGZ1bmN0aW9uIGhlcmUuICovCisg
ICAgCisgICAgY29uc3QgcGNyZV91Y2hhciogcHRyID0gKGNvbnN0IHBjcmVfdWNoYXIqKXBhdHRl
cm47CisgICAgY29uc3QgcGNyZV91Y2hhciogcGF0dGVybkVuZCA9IHBhdHRlcm4gKyBwYXR0ZXJu
TGVuZ3RoOworICAgIHVzY2hhciogY29kZSA9ICh1c2NoYXIqKWNvZGVzdGFydDsKKyAgICAqY29k
ZSA9IE9QX0JSQTsKKyAgICBpbnQgZmlyc3RieXRlLCByZXFieXRlOworICAgIGludCBicmFja2V0
Q291bnQgPSAwOworICAgICh2b2lkKWNvbXBpbGVfcmVnZXgocmUtPm9wdGlvbnMsICZicmFja2V0
Q291bnQsICZjb2RlLCAmcHRyLAogICBwYXR0ZXJuRW5kLAogICAmZXJyb3Jjb2RlLCAwLCAmZmly
c3RieXRlLCAmcmVxYnl0ZSwgJmNvbXBpbGVfYmxvY2spOwotcmUtPnRvcF9icmFja2V0ID0gYnJh
Y291bnQ7Ci1yZS0+dG9wX2JhY2tyZWYgPSBjb21waWxlX2Jsb2NrLnRvcF9iYWNrcmVmOworICAg
IHJlLT50b3BfYnJhY2tldCA9IGJyYWNrZXRDb3VudDsKKyAgICByZS0+dG9wX2JhY2tyZWYgPSBj
b21waWxlX2Jsb2NrLnRvcF9iYWNrcmVmOwogCi0vKiBJZiBub3QgcmVhY2hlZCBlbmQgb2YgcGF0
dGVybiBvbiBzdWNjZXNzLCB0aGVyZSdzIGFuIGV4Y2VzcyBicmFja2V0LiAqLworICAgIC8qIElm
IG5vdCByZWFjaGVkIGVuZCBvZiBwYXR0ZXJuIG9uIHN1Y2Nlc3MsIHRoZXJlJ3MgYW4gZXhjZXNz
IGJyYWNrZXQuICovCiAKLWlmIChlcnJvcmNvZGUgPT0gMCAmJiBwdHIgPCBwYXR0ZXJuRW5kKSBl
cnJvcmNvZGUgPSBFUlIxMDsKKyAgICBpZiAoZXJyb3Jjb2RlID09IDAgJiYgcHRyIDwgcGF0dGVy
bkVuZCkKKyAgICAgICAgZXJyb3Jjb2RlID0gRVJSMTA7CiAKLS8qIEZpbGwgaW4gdGhlIHRlcm1p
bmF0aW5nIHN0YXRlIGFuZCBjaGVjayBmb3IgZGlzYXN0cm91cyBvdmVyZmxvdywgYnV0Ci1pZiBk
ZWJ1Z2dpbmcsIGxlYXZlIHRoZSB0ZXN0IHRpbGwgYWZ0ZXIgdGhpbmdzIGFyZSBwcmludGVkIG91
dC4gKi8KKyAgICAvKiBGaWxsIGluIHRoZSB0ZXJtaW5hdGluZyBzdGF0ZSBhbmQgY2hlY2sgZm9y
IGRpc2FzdHJvdXMgb3ZlcmZsb3csIGJ1dAorICAgICBpZiBkZWJ1Z2dpbmcsIGxlYXZlIHRoZSB0
ZXN0IHRpbGwgYWZ0ZXIgdGhpbmdzIGFyZSBwcmludGVkIG91dC4gKi8KIAotKmNvZGUrKyA9IE9Q
X0VORDsKKyAgICAqY29kZSsrID0gT1BfRU5EOwogCiAjaWZuZGVmIERFQlVHCi1pZiAoY29kZSAt
IGNvZGVzdGFydCA+IGxlbmd0aCkgZXJyb3Jjb2RlID0gRVJSNzsKKyAgICBpZiAoY29kZSAtIGNv
ZGVzdGFydCA+IGxlbmd0aCkKKyAgICAgICAgZXJyb3Jjb2RlID0gRVJSNzsKICNlbmRpZgogCi0v
KiBHaXZlIGFuIGVycm9yIGlmIHRoZXJlJ3MgYmFjayByZWZlcmVuY2UgdG8gYSBub24tZXhpc3Rl
bnQgY2FwdHVyaW5nCi1zdWJwYXR0ZXJuLiAqLworICAgIC8qIEdpdmUgYW4gZXJyb3IgaWYgdGhl
cmUncyBiYWNrIHJlZmVyZW5jZSB0byBhIG5vbi1leGlzdGVudCBjYXB0dXJpbmcKKyAgICAgc3Vi
cGF0dGVybi4gKi8KIAotaWYgKHJlLT50b3BfYmFja3JlZiA+IHJlLT50b3BfYnJhY2tldCkgZXJy
b3Jjb2RlID0gRVJSMTU7CisgICAgaWYgKHJlLT50b3BfYmFja3JlZiA+IHJlLT50b3BfYnJhY2tl
dCkKKyAgICAgICAgZXJyb3Jjb2RlID0gRVJSMTU7CiAKLS8qIEZhaWxlZCB0byBjb21waWxlLCBv
ciBlcnJvciB3aGlsZSBwb3N0LXByb2Nlc3NpbmcgKi8KKyAgICAvKiBGYWlsZWQgdG8gY29tcGls
ZSwgb3IgZXJyb3Igd2hpbGUgcG9zdC1wcm9jZXNzaW5nICovCiAKLWlmIChlcnJvcmNvZGUgIT0g
RVJSMCkKLSAgeworICAgIGlmIChlcnJvcmNvZGUgIT0gRVJSMCkgewogICBkZWxldGUgW10gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4ocmUpOwotICBQQ1JFX0VSUk9SX1JFVFVSTjoKLSAgKmVycm9y
cHRyID0gZXJyb3JfdGV4dChlcnJvcmNvZGUpOwotICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0
dXJuIHJldHVybkVycm9yKGVycm9yY29kZSwgZXJyb3JwdHIpOwogICB9CiAKLS8qIElmIHRoZSBh
bmNob3JlZCBvcHRpb24gd2FzIG5vdCBwYXNzZWQsIHNldCB0aGUgZmxhZyBpZiB3ZSBjYW4gZGV0
ZXJtaW5lIHRoYXQKLXRoZSBwYXR0ZXJuIGlzIGFuY2hvcmVkIGJ5IHZpcnR1ZSBvZiBeIGNoYXJh
Y3RlcnMgb3IgXEEgb3IgYW55dGhpbmcgZWxzZSAoc3VjaAotYXMgc3RhcnRpbmcgd2l0aCAuKiB3
aGVuIERPVEFMTCBpcyBzZXQpLgorICAgIC8qIElmIHRoZSBhbmNob3JlZCBvcHRpb24gd2FzIG5v
dCBwYXNzZWQsIHNldCB0aGUgZmxhZyBpZiB3ZSBjYW4gZGV0ZXJtaW5lIHRoYXQKKyAgICAgdGhl
IHBhdHRlcm4gaXMgYW5jaG9yZWQgYnkgdmlydHVlIG9mIF4gY2hhcmFjdGVycyBvciBcQSBvciBh
bnl0aGluZyBlbHNlIChzdWNoCisgICAgIGFzIHN0YXJ0aW5nIHdpdGggLiogd2hlbiBET1RBTEwg
aXMgc2V0KS4KIAotT3RoZXJ3aXNlLCBpZiB3ZSBrbm93IHdoYXQgdGhlIGZpcnN0IGNoYXJhY3Rl
ciBoYXMgdG8gYmUsIHNhdmUgaXQsIGJlY2F1c2UgdGhhdAotc3BlZWRzIHVwIHVuYW5jaG9yZWQg
bWF0Y2hlcyBubyBlbmQuIElmIG5vdCwgc2VlIGlmIHdlIGNhbiBzZXQgdGhlCi1QQ1JFX1NUQVJU
TElORSBmbGFnLiBUaGlzIGlzIGhlbHBmdWwgZm9yIG11bHRpbGluZSBtYXRjaGVzIHdoZW4gYWxs
IGJyYW5jaGVzCi1zdGFydCB3aXRoIF4uIGFuZCBhbHNvIHdoZW4gYWxsIGJyYW5jaGVzIHN0YXJ0
IHdpdGggLiogZm9yIG5vbi1ET1RBTEwgbWF0Y2hlcy4KLSovCisgICAgIE90aGVyd2lzZSwgaWYg
d2Uga25vdyB3aGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgaGFzIHRvIGJlLCBzYXZlIGl0LCBiZWNh
dXNlIHRoYXQKKyAgICAgc3BlZWRzIHVwIHVuYW5jaG9yZWQgbWF0Y2hlcyBubyBlbmQuIElmIG5v
dCwgc2VlIGlmIHdlIGNhbiBzZXQgdGhlCisgICAgIFBDUkVfU1RBUlRMSU5FIGZsYWcuIFRoaXMg
aXMgaGVscGZ1bCBmb3IgbXVsdGlsaW5lIG1hdGNoZXMgd2hlbiBhbGwgYnJhbmNoZXMKKyAgICAg
c3RhcnQgd2l0aCBeLiBhbmQgYWxzbyB3aGVuIGFsbCBicmFuY2hlcyBzdGFydCB3aXRoIC4qIGZv
ciBub24tRE9UQUxMIG1hdGNoZXMuCisgICAgICovCiAKLSAgewogICBpZiAoaXNfYW5jaG9yZWQo
Y29kZXN0YXJ0LCByZS0+b3B0aW9ucywgMCwgY29tcGlsZV9ibG9jay5iYWNrcmVmX21hcCkpCiAg
ICAgcmUtPm9wdGlvbnMgfD0gUENSRV9BTkNIT1JFRDsKLSAgZWxzZQotICAgIHsKKyAgICBlbHNl
IHsKICAgICBpZiAoZmlyc3RieXRlIDwgMCkKICAgICAgIGZpcnN0Ynl0ZSA9IGZpbmRfZmlyc3Rh
c3NlcnRlZGNoYXIoY29kZXN0YXJ0LCByZS0+b3B0aW9ucywgZmFsc2UpOwogICAgIGlmIChmaXJz
dGJ5dGUgPj0gMCkgICAvKiBSZW1vdmUgY2FzZWxlc3MgZmxhZyBmb3Igbm9uLWNhc2VhYmxlIGNo
YXJzICovCiAgICAgICB7CiAgICAgICBpbnQgY2ggPSBmaXJzdGJ5dGUgJiAyNTU7Ci0gICAgICBp
ZiAoY2ggPCAxMjcpCi0gICAgICB7IC8qIFN0cmFuZ2UgaW5kZW50YXRpb24gdG8gYWlkIGluIG1l
cmdpbmcuICovCisgICAgICAgICAgICBpZiAoY2ggPCAxMjcpIHsKICAgICAgIHJlLT5maXJzdF9i
eXRlID0gKChmaXJzdGJ5dGUgJiBSRVFfQ0FTRUxFU1MpICE9IDAgJiYKICAgICAgICAgIGNvbXBp
bGVfYmxvY2suZmNjW2NoXSA9PSBjaCk/IGNoIDogZmlyc3RieXRlOwogICAgICAgcmUtPm9wdGlv
bnMgfD0gUENSRV9GSVJTVFNFVDsKQEAgLTMxMTEsNjUgKzMxMjQsMjYgQEAgc3RhcnQgd2l0aCBe
LiBhbmQgYWxzbyB3aGVuIGFsbCBicmFuY2hlcyBzdGFydCB3aXRoIC4qIGZvciBub24tRE9UQUxM
IG1hdGNoZXMuCiAgICAgZWxzZSBpZiAoaXNfc3RhcnRsaW5lKGNvZGVzdGFydCwgMCwgY29tcGls
ZV9ibG9jay5iYWNrcmVmX21hcCkpCiAgICAgICByZS0+b3B0aW9ucyB8PSBQQ1JFX1NUQVJUTElO
RTsKICAgICB9Ci0gIH0KIAotLyogRm9yIGFuIGFuY2hvcmVkIHBhdHRlcm4sIHdlIHVzZSB0aGUg
InJlcXVpcmVkIGJ5dGUiIG9ubHkgaWYgaXQgZm9sbG93cyBhCi12YXJpYWJsZSBsZW5ndGggaXRl
bSBpbiB0aGUgcmVnZXguIFJlbW92ZSB0aGUgY2FzZWxlc3MgZmxhZyBmb3Igbm9uLWNhc2VhYmxl
Ci1ieXRlcy4gKi8KKyAgICAvKiBGb3IgYW4gYW5jaG9yZWQgcGF0dGVybiwgd2UgdXNlIHRoZSAi
cmVxdWlyZWQgYnl0ZSIgb25seSBpZiBpdCBmb2xsb3dzIGEKKyAgICAgdmFyaWFibGUgbGVuZ3Ro
IGl0ZW0gaW4gdGhlIHJlZ2V4LiBSZW1vdmUgdGhlIGNhc2VsZXNzIGZsYWcgZm9yIG5vbi1jYXNl
YWJsZQorICAgICBieXRlcy4gKi8KIAotaWYgKHJlcWJ5dGUgPj0gMCAmJgotICAgICAoKHJlLT5v
cHRpb25zICYgUENSRV9BTkNIT1JFRCkgPT0gMCB8fCAocmVxYnl0ZSAmIFJFUV9WQVJZKSAhPSAw
KSkKLSAgeworICAgIGlmIChyZXFieXRlID49IDAgJiYgKCEocmUtPm9wdGlvbnMgJiBQQ1JFX0FO
Q0hPUkVEKSB8fCAocmVxYnl0ZSAmIFJFUV9WQVJZKSkpIHsKICAgaW50IGNoID0gcmVxYnl0ZSAm
IDI1NTsKLSAgaWYgKGNoIDwgMTI3KQotICB7IC8qIFN0cmFuZ2UgaW5kZW50YXRpb24gdG8gYWlk
IGluIG1lcmdpbmcuICovCisgICAgICAgIGlmIChjaCA8IDEyNykgewogICByZS0+cmVxX2J5dGUg
PSAoKHJlcWJ5dGUgJiBSRVFfQ0FTRUxFU1MpICE9IDAgJiYKICAgICAgIGNvbXBpbGVfYmxvY2su
ZmNjW2NoXSA9PSBjaCk/IChyZXFieXRlICYgflJFUV9DQVNFTEVTUykgOiByZXFieXRlOwogICBy
ZS0+b3B0aW9ucyB8PSBQQ1JFX1JFUUNIU0VUOwogICB9CiAgIH0KIAotLyogUHJpbnQgb3V0IHRo
ZSBjb21waWxlZCBkYXRhIGlmIGRlYnVnZ2luZyBpcyBlbmFibGVkLiBUaGlzIGlzIG5ldmVyIHRo
ZQotY2FzZSB3aGVuIGJ1aWxkaW5nIGEgcHJvZHVjdGlvbiBsaWJyYXJ5LiAqLwotCiAjaWZkZWYg
REVCVUcKKyAgICBwcmludENvbXBpbGVkUmVnRXhwKHJlKTsKIAotcHJpbnRmKCJMZW5ndGggPSAl
ZCB0b3BfYnJhY2tldCA9ICVkIHRvcF9iYWNrcmVmID0gJWRcbiIsCi0gIGxlbmd0aCwgcmUtPnRv
cF9icmFja2V0LCByZS0+dG9wX2JhY2tyZWYpOwotCi1pZiAocmUtPm9wdGlvbnMgIT0gMCkKLSAg
ewotICBwcmludGYoIiVzJXMlc1xuIiwKLSAgICAoKHJlLT5vcHRpb25zICYgUENSRV9BTkNIT1JF
RCkgIT0gMCk/ICJhbmNob3JlZCAiIDogIiIsCi0gICAgKChyZS0+b3B0aW9ucyAmIFBDUkVfQ0FT
RUxFU1MpICE9IDApPyAiY2FzZWxlc3MgIiA6ICIiLAotICAgICgocmUtPm9wdGlvbnMgJiBQQ1JF
X01VTFRJTElORSkgIT0gMCk/ICJtdWx0aWxpbmUgIiA6ICIiKTsKLSAgfQotCi1pZiAoKHJlLT5v
cHRpb25zICYgUENSRV9GSVJTVFNFVCkgIT0gMCkKLSAgewotICBpbnQgY2ggPSByZS0+Zmlyc3Rf
Ynl0ZSAmIDI1NTsKLSAgY29uc3QgY2hhciAqY2FzZWxlc3MgPSAoKHJlLT5maXJzdF9ieXRlICYg
UkVRX0NBU0VMRVNTKSA9PSAwKT8KLSAgICAiIiA6ICIgKGNhc2VsZXNzKSI7Ci0gIGlmIChpc3By
aW50KGNoKSkgcHJpbnRmKCJGaXJzdCBjaGFyID0gJWMlc1xuIiwgY2gsIGNhc2VsZXNzKTsKLSAg
ICBlbHNlIHByaW50ZigiRmlyc3QgY2hhciA9IFxceCUwMnglc1xuIiwgY2gsIGNhc2VsZXNzKTsK
LSAgfQotCi1pZiAoKHJlLT5vcHRpb25zICYgUENSRV9SRVFDSFNFVCkgIT0gMCkKLSAgewotICBp
bnQgY2ggPSByZS0+cmVxX2J5dGUgJiAyNTU7Ci0gIGNvbnN0IGNoYXIgKmNhc2VsZXNzID0gKChy
ZS0+cmVxX2J5dGUgJiBSRVFfQ0FTRUxFU1MpID09IDApPwotICAgICIiIDogIiAoY2FzZWxlc3Mp
IjsKLSAgaWYgKGlzcHJpbnQoY2gpKSBwcmludGYoIlJlcSBjaGFyID0gJWMlc1xuIiwgY2gsIGNh
c2VsZXNzKTsKLSAgICBlbHNlIHByaW50ZigiUmVxIGNoYXIgPSBcXHglMDJ4JXNcbiIsIGNoLCBj
YXNlbGVzcyk7Ci0gIH0KLQotcGNyZV9wcmludGludChyZSwgc3Rkb3V0KTsKLQotLyogVGhpcyBj
aGVjayBpcyBkb25lIGhlcmUgaW4gdGhlIGRlYnVnZ2luZyBjYXNlIHNvIHRoYXQgdGhlIGNvZGUg
dGhhdAotd2FzIGNvbXBpbGVkIGNhbiBiZSBzZWVuLiAqLwotCi1pZiAoY29kZSAtIGNvZGVzdGFy
dCA+IGxlbmd0aCkKLSAgeworICAgIC8qIFRoaXMgY2hlY2sgaXMgZG9uZSBoZXJlIGluIHRoZSBk
ZWJ1Z2dpbmcgY2FzZSBzbyB0aGF0IHRoZSBjb2RlIHRoYXQKKyAgICAgd2FzIGNvbXBpbGVkIGNh
biBiZSBzZWVuLiAqLworICAgIGlmIChjb2RlIC0gY29kZXN0YXJ0ID4gbGVuZ3RoKSB7CiAgIChw
Y3JlX2ZyZWUpKHJlKTsKICAgKmVycm9ycHRyID0gZXJyb3JfdGV4dChFUlI3KTsKICAgcmV0dXJu
IE5VTEw7CkBAIC0zMTc3LDkgKzMxNTEsOSBAQCBpZiAoY29kZSAtIGNvZGVzdGFydCA+IGxlbmd0
aCkKIAogI2VuZGlmCiAKLWlmIChudW1TdWJwYXR0ZXJucykKKyAgICBpZiAobnVtU3VicGF0dGVy
bnMpCiAgICAgKm51bVN1YnBhdHRlcm5zID0gcmUtPnRvcF9icmFja2V0OwotcmV0dXJuIChwY3Jl
ICopcmU7CisgICAgcmV0dXJuIChwY3JlICopcmU7CiB9CiAKIHZvaWQganNSZWdFeHBGcmVlKEpT
UmVnRXhwKiByZSkKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV9pbnRlcm5h
bC5oIGIvSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX2ludGVybmFsLmgKaW5kZXggYjA0YTQ0MC4u
NWY4OTM2MSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX2ludGVybmFsLmgK
KysrIGIvSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX2ludGVybmFsLmgKQEAgLTU0MywxMCArNTQz
LDM2IEBAIHR5cGVkZWYgc3RydWN0IHJlYWxfcGNyZSB7CiAgIHBjcmVfdWludDE2IHJlcV9ieXRl
OwogfSByZWFsX3BjcmU7CiAKKy8qIEludGVybmFsIHNoYXJlZCBkYXRhIHRhYmxlcy4gVGhlc2Ug
YXJlIHRhYmxlcyB0aGF0IGFyZSB1c2VkIGJ5IG1vcmUgdGhhbiBvbmUKKyBvZiB0aGUgZXhwb3J0
ZWQgcHVibGljIGZ1bmN0aW9ucy4gVGhleSBoYXZlIHRvIGJlICJleHRlcm5hbCIgaW4gdGhlIEMg
c2Vuc2UsCisgYnV0IGFyZSBub3QgcGFydCBvZiB0aGUgUENSRSBwdWJsaWMgQVBJLiBUaGUgZGF0
YSBmb3IgdGhlc2UgdGFibGVzIGlzIGluIHRoZQorIHBjcmVfdGFibGVzLmMgbW9kdWxlLiAqLwor
CisjZGVmaW5lIF9wY3JlX3V0ZjhfdGFibGUxX3NpemUgNgorCitleHRlcm4gY29uc3QgaW50ICAg
IF9wY3JlX3V0ZjhfdGFibGUxWzZdOworZXh0ZXJuIGNvbnN0IGludCAgICBfcGNyZV91dGY4X3Rh
YmxlMls2XTsKK2V4dGVybiBjb25zdCBpbnQgICAgX3BjcmVfdXRmOF90YWJsZTNbNl07CitleHRl
cm4gY29uc3QgdXNjaGFyIF9wY3JlX3V0ZjhfdGFibGU0WzB4NDBdOworCitleHRlcm4gY29uc3Qg
dXNjaGFyIF9wY3JlX2RlZmF1bHRfdGFibGVzW3RhYmxlc19sZW5ndGhdOworCiAvKiBTdHJ1Y3R1
cmUgZm9yIHBhc3NpbmcgInN0YXRpYyIgaW5mb3JtYXRpb24gYXJvdW5kIGJldHdlZW4gdGhlIGZ1
bmN0aW9ucwogZG9pbmcgdGhlIGNvbXBpbGluZywgc28gdGhhdCB0aGV5IGFyZSB0aHJlYWQtc2Fm
ZS4gKi8KIAogdHlwZWRlZiBzdHJ1Y3QgY29tcGlsZV9kYXRhIHsKKyAgICBjb21waWxlX2RhdGEo
KSB7CisgICAgICAgIGxjYyA9IF9wY3JlX2RlZmF1bHRfdGFibGVzICsgbGNjX29mZnNldDsKKyAg
ICAgICAgZmNjID0gX3BjcmVfZGVmYXVsdF90YWJsZXMgKyBmY2Nfb2Zmc2V0OworICAgICAgICBj
Yml0cyA9IF9wY3JlX2RlZmF1bHRfdGFibGVzICsgY2JpdHNfb2Zmc2V0OworICAgICAgICBjdHlw
ZXMgPSBfcGNyZV9kZWZhdWx0X3RhYmxlcyArIGN0eXBlc19vZmZzZXQ7CisgICAgICAgIHN0YXJ0
X2NvZGUgPSAwOworICAgICAgICBzdGFydF9wYXR0ZXJuID0gMDsKKyAgICAgICAgdG9wX2JhY2ty
ZWYgPSAwOworICAgICAgICBiYWNrcmVmX21hcCA9IDA7CisgICAgICAgIHJlcV92YXJ5b3B0ID0g
MDsKKyAgICB9CisgICAgCiAgIGNvbnN0IHVzY2hhciAqbGNjOyAgICAgICAgICAgIC8qIFBvaW50
cyB0byBsb3dlciBjYXNpbmcgdGFibGUgKi8KICAgY29uc3QgdXNjaGFyICpmY2M7ICAgICAgICAg
ICAgLyogUG9pbnRzIHRvIGNhc2UtZmxpcHBpbmcgdGFibGUgKi8KICAgY29uc3QgdXNjaGFyICpj
Yml0czsgICAgICAgICAgLyogUG9pbnRzIHRvIGNoYXJhY3RlciB0eXBlIHRhYmxlICovCkBAIC01
NTgsMjkgKzU4NCw2IEBAIHR5cGVkZWYgc3RydWN0IGNvbXBpbGVfZGF0YSB7CiAgIGludCAgcmVx
X3ZhcnlvcHQ7ICAgICAgICAgICAgIC8qICJBZnRlciB2YXJpYWJsZSBpdGVtIiBmbGFnIGZvciBy
ZXFieXRlICovCiB9IGNvbXBpbGVfZGF0YTsKIAotLyogTGF5b3V0IG9mIHRoZSBVQ1AgdHlwZSB0
YWJsZSB0aGF0IHRyYW5zbGF0ZXMgcHJvcGVydHkgbmFtZXMgaW50byB0eXBlcyBhbmQKLWNvZGVz
LiAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGNvbnN0IGNoYXIgKm5hbWU7Ci0gIHBjcmVfdWlu
dDE2IHR5cGU7Ci0gIHBjcmVfdWludDE2IHZhbHVlOwotfSB1Y3BfdHlwZV90YWJsZTsKLQotLyog
SW50ZXJuYWwgc2hhcmVkIGRhdGEgdGFibGVzLiBUaGVzZSBhcmUgdGFibGVzIHRoYXQgYXJlIHVz
ZWQgYnkgbW9yZSB0aGFuIG9uZQotb2YgdGhlIGV4cG9ydGVkIHB1YmxpYyBmdW5jdGlvbnMuIFRo
ZXkgaGF2ZSB0byBiZSAiZXh0ZXJuYWwiIGluIHRoZSBDIHNlbnNlLAotYnV0IGFyZSBub3QgcGFy
dCBvZiB0aGUgUENSRSBwdWJsaWMgQVBJLiBUaGUgZGF0YSBmb3IgdGhlc2UgdGFibGVzIGlzIGlu
IHRoZQotcGNyZV90YWJsZXMuYyBtb2R1bGUuICovCi0KLSNkZWZpbmUgX3BjcmVfdXRmOF90YWJs
ZTFfc2l6ZSA2Ci0KLWV4dGVybiBjb25zdCBpbnQgICAgX3BjcmVfdXRmOF90YWJsZTFbNl07Ci1l
eHRlcm4gY29uc3QgaW50ICAgIF9wY3JlX3V0ZjhfdGFibGUyWzZdOwotZXh0ZXJuIGNvbnN0IGlu
dCAgICBfcGNyZV91dGY4X3RhYmxlM1s2XTsKLWV4dGVybiBjb25zdCB1c2NoYXIgX3BjcmVfdXRm
OF90YWJsZTRbMHg0MF07Ci0KLWV4dGVybiBjb25zdCB1c2NoYXIgX3BjcmVfZGVmYXVsdF90YWJs
ZXNbdGFibGVzX2xlbmd0aF07Ci0KIC8qIEludGVybmFsIHNoYXJlZCBmdW5jdGlvbnMuIFRoZXNl
IGFyZSBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBieSBtb3JlIHRoYW4KIG9uZSBvZiB0aGUgZXhw
b3J0ZWQgcHVibGljIGZ1bmN0aW9ucy4gVGhleSBoYXZlIHRvIGJlICJleHRlcm5hbCIgaW4gdGhl
IEMKIHNlbnNlLCBidXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBQQ1JFIHB1YmxpYyBBUEkuICovCg==
</data>
<flag name="review"
          id="7369"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>