123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532 |
- /-- This set of tests is run only with the 8-bit library. They do not require
- UTF-8 or Unicode property support. The file starts with all the tests of
- the POSIX interface, because that is supported only with the 8-bit library.
- --/
-
- < forbid 8W
- /abc/P
- abc
- 0: abc
- *** Failers
- No match: POSIX code 17: match failed
- /^abc|def/P
- abcdef
- 0: abc
- abcdef\B
- 0: def
- /.*((abc)$|(def))/P
- defabc
- 0: defabc
- 1: abc
- 2: abc
- \Zdefabc
- 0: def
- 1: def
- 3: def
- /the quick brown fox/P
- the quick brown fox
- 0: the quick brown fox
- *** Failers
- No match: POSIX code 17: match failed
- The Quick Brown Fox
- No match: POSIX code 17: match failed
- /the quick brown fox/Pi
- the quick brown fox
- 0: the quick brown fox
- The Quick Brown Fox
- 0: The Quick Brown Fox
- /abc.def/P
- *** Failers
- No match: POSIX code 17: match failed
- abc\ndef
- No match: POSIX code 17: match failed
- /abc$/P
- abc
- 0: abc
- abc\n
- 0: abc
- /(abc)\2/P
- Failed: POSIX code 15: bad back reference at offset 7
- /(abc\1)/P
- abc
- No match: POSIX code 17: match failed
- /a*(b+)(z)(z)/P
- aaaabbbbzzzz
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- 3: z
- aaaabbbbzzzz\O0
- aaaabbbbzzzz\O1
- 0: aaaabbbbzz
- aaaabbbbzzzz\O2
- 0: aaaabbbbzz
- 1: bbbb
- aaaabbbbzzzz\O3
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- aaaabbbbzzzz\O4
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- 3: z
- aaaabbbbzzzz\O5
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- 3: z
- /ab.cd/P
- ab-cd
- 0: ab-cd
- ab=cd
- 0: ab=cd
- ** Failers
- No match: POSIX code 17: match failed
- ab\ncd
- No match: POSIX code 17: match failed
- /ab.cd/Ps
- ab-cd
- 0: ab-cd
- ab=cd
- 0: ab=cd
- ab\ncd
- 0: ab\x0acd
- /a(b)c/PN
- abc
- Matched with REG_NOSUB
- /a(?P<name>b)c/PN
- abc
- Matched with REG_NOSUB
- /a?|b?/P
- abc
- 0: a
- ** Failers
- 0:
- ddd\N
- No match: POSIX code 17: match failed
- /\w+A/P
- CDAAAAB
- 0: CDAAAA
- /\w+A/PU
- CDAAAAB
- 0: CDA
-
- /\Biss\B/I+P
- Mississippi
- 0: iss
- 0+ issippi
- /abc/\P
- Failed: POSIX code 9: bad escape sequence at offset 4
- /-- End of POSIX tests --/
- /a\Cb/
- aXb
- 0: aXb
- a\nb
- 0: a\x0ab
- ** Failers (too big char)
- No match
- A\x{123}B
- ** Character \x{123} is greater than 255 and UTF-8 mode is not enabled.
- ** Truncation will probably give the wrong result.
- No match
- A\o{443}B
- ** Character \x{123} is greater than 255 and UTF-8 mode is not enabled.
- ** Truncation will probably give the wrong result.
- No match
-
- /\x{100}/I
- Failed: character value in \x{} or \o{} is too large at offset 6
- /\o{400}/I
- Failed: character value in \x{} or \o{} is too large at offset 6
- / (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* # optional leading comment
- (?: (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- |
- " (?: # opening quote...
- [^\\\x80-\xff\n\015"] # Anything except backslash and quote
- | # or
- \\ [^\x80-\xff] # Escaped something (something != CR)
- )* " # closing quote
- ) # initial word
- (?: (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* \. (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- |
- " (?: # opening quote...
- [^\\\x80-\xff\n\015"] # Anything except backslash and quote
- | # or
- \\ [^\x80-\xff] # Escaped something (something != CR)
- )* " # closing quote
- ) )* # further okay, if led by a period
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* @ (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- | \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- ) # initial subdomain
- (?: #
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* \. # if led by a period...
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- | \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- ) # ...further okay
- )*
- # address
- | # or
- (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- |
- " (?: # opening quote...
- [^\\\x80-\xff\n\015"] # Anything except backslash and quote
- | # or
- \\ [^\x80-\xff] # Escaped something (something != CR)
- )* " # closing quote
- ) # one word, optionally followed by....
- (?:
- [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] | # atom and space parts, or...
- \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) | # comments, or...
- " (?: # opening quote...
- [^\\\x80-\xff\n\015"] # Anything except backslash and quote
- | # or
- \\ [^\x80-\xff] # Escaped something (something != CR)
- )* " # closing quote
- # quoted strings
- )*
- < (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* # leading <
- (?: @ (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- | \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- ) # initial subdomain
- (?: #
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* \. # if led by a period...
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- | \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- ) # ...further okay
- )*
- (?: (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* , (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* @ (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- | \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- ) # initial subdomain
- (?: #
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* \. # if led by a period...
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- | \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- ) # ...further okay
- )*
- )* # further okay, if led by comma
- : # closing colon
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* )? # optional route
- (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- |
- " (?: # opening quote...
- [^\\\x80-\xff\n\015"] # Anything except backslash and quote
- | # or
- \\ [^\x80-\xff] # Escaped something (something != CR)
- )* " # closing quote
- ) # initial word
- (?: (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* \. (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- |
- " (?: # opening quote...
- [^\\\x80-\xff\n\015"] # Anything except backslash and quote
- | # or
- \\ [^\x80-\xff] # Escaped something (something != CR)
- )* " # closing quote
- ) )* # further okay, if led by a period
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* @ (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- | \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- ) # initial subdomain
- (?: #
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* \. # if led by a period...
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- | \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- ) # ...further okay
- )*
- # address spec
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* > # trailing >
- # name and address
- ) (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* # optional trailing comment
- /xSI
- Capturing subpattern count = 0
- Contains explicit CR or LF match
- Options: extended
- No first char
- No need char
- Subject length lower bound = 3
- Starting chars: \x09 \x20 ! " # $ % & ' ( * + - / 0 1 2 3 4 5 6 7 8
- 9 = ? A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ^ _ ` a b c d e
- f g h i j k l m n o p q r s t u v w x y z { | } ~ \x7f
- /-- Although this saved pattern was compiled with link-size=2, it does no harm
- to run this test with other link sizes because it is going to generated a
- "compiled in wrong mode" error as soon as it is loaded, so the link size does
- not matter. --/
- <!testsaved16
- Compiled pattern loaded from testsaved16
- No study data
- Error -28 from pcre_fullinfo(0)
- Running in 8-bit mode but pattern was compiled in 16-bit mode
- <!testsaved32
- Compiled pattern loaded from testsaved32
- No study data
- Error -28 from pcre_fullinfo(0)
- Running in 8-bit mode but pattern was compiled in 32-bit mode
- /\h/SI
- Capturing subpattern count = 0
- No options
- No first char
- No need char
- Subject length lower bound = 1
- Starting chars: \x09 \x20 \xa0
- /\H/SI
- Capturing subpattern count = 0
- No options
- No first char
- No need char
- Subject length lower bound = 1
- No starting char list
- /\v/SI
- Capturing subpattern count = 0
- No options
- No first char
- No need char
- Subject length lower bound = 1
- Starting chars: \x0a \x0b \x0c \x0d \x85
- /\V/SI
- Capturing subpattern count = 0
- No options
- No first char
- No need char
- Subject length lower bound = 1
- No starting char list
- /\R/SI
- Capturing subpattern count = 0
- No options
- No first char
- No need char
- Subject length lower bound = 1
- Starting chars: \x0a \x0b \x0c \x0d \x85
- /[\h]/BZ
- ------------------------------------------------------------------
- Bra
- [\x09 \xa0]
- Ket
- End
- ------------------------------------------------------------------
- >\x09<
- 0: \x09
- /[\h]+/BZ
- ------------------------------------------------------------------
- Bra
- [\x09 \xa0]++
- Ket
- End
- ------------------------------------------------------------------
- >\x09\x20\xa0<
- 0: \x09 \xa0
- /[\v]/BZ
- ------------------------------------------------------------------
- Bra
- [\x0a-\x0d\x85]
- Ket
- End
- ------------------------------------------------------------------
- /[\H]/BZ
- ------------------------------------------------------------------
- Bra
- [\x00-\x08\x0a-\x1f!-\x9f\xa1-\xff]
- Ket
- End
- ------------------------------------------------------------------
- /[^\h]/BZ
- ------------------------------------------------------------------
- Bra
- [\x00-\x08\x0a-\x1f!-\x9f\xa1-\xff] (neg)
- Ket
- End
- ------------------------------------------------------------------
- /[\V]/BZ
- ------------------------------------------------------------------
- Bra
- [\x00-\x09\x0e-\x84\x86-\xff]
- Ket
- End
- ------------------------------------------------------------------
- /[\x0a\V]/BZ
- ------------------------------------------------------------------
- Bra
- [\x00-\x0a\x0e-\x84\x86-\xff]
- Ket
- End
- ------------------------------------------------------------------
- /\777/I
- Failed: octal value is greater than \377 in 8-bit non-UTF-8 mode at offset 3
- /(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF)XX/K
- Failed: name is too long in (*MARK), (*PRUNE), (*SKIP), or (*THEN) at offset 259
- /(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE)XX/K
- XX
- 0: XX
- MK: 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE
- /\u0100/<JS>
- Failed: character value in \u.... sequence is too large at offset 5
- /[\u0100-\u0200]/<JS>
- Failed: character value in \u.... sequence is too large at offset 6
- /[^\x00-a]{12,}[^b-\xff]*/BZ
- ------------------------------------------------------------------
- Bra
- [b-\xff] (neg){12,}+
- [\x00-a] (neg)*+
- Ket
- End
- ------------------------------------------------------------------
- /[^\s]*\s* [^\W]+\W+ [^\d]*?\d0 [^\d\w]{4,6}?\w*A/BZ
- ------------------------------------------------------------------
- Bra
- [\x00-\x08\x0e-\x1f!-\xff] (neg)*+
- \s*
-
- [0-9A-Z_a-z]++
- \W+
-
- [\x00-/:-\xff] (neg)*+
- \d
- 0
- [\x00-/:-@[-^`{-\xff] (neg){4,6}+
- \w*
- A
- Ket
- End
- ------------------------------------------------------------------
- /(?'ABC'[bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar]([bar](*THEN:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))/
- /-- End of testinput14 --/
|