diff --git a/scheme/ikarus.not-yet-implemented.ss b/scheme/ikarus.not-yet-implemented.ss index 2bbc0a8..24c3053 100644 --- a/scheme/ikarus.not-yet-implemented.ss +++ b/scheme/ikarus.not-yet-implemented.ss @@ -10,9 +10,9 @@ set-port-position! make-eqv-hashtable hashtable-hash-function make-hashtable hashtable-equivalence-function equal-hash - string-downcase string-normalize-nfc string-normalize-nfd + string-normalize-nfc string-normalize-nfd string-normalize-nfkc string-normalize-nfkd string-titlecase - string-upcase) + ) (import (except (ikarus) bitwise-reverse-bit-field @@ -24,9 +24,9 @@ set-port-position! make-eqv-hashtable hashtable-hash-function make-hashtable hashtable-equivalence-function equal-hash - string-downcase string-normalize-nfc string-normalize-nfd + string-normalize-nfc string-normalize-nfd string-normalize-nfkc string-normalize-nfkd string-titlecase - string-upcase)) + )) (define-syntax not-yet (syntax-rules () @@ -52,7 +52,7 @@ (not-yet ;;; should be implemented - string-downcase string-titlecase string-upcase + string-titlecase bitwise-rotate-bit-field bitwise-reverse-bit-field fxreverse-bit-field ;;; not top priority at the moment diff --git a/scheme/ikarus.unicode-data.ss b/scheme/ikarus.unicode-data.ss index 32e85e6..fa39263 100644 --- a/scheme/ikarus.unicode-data.ss +++ b/scheme/ikarus.unicode-data.ss @@ -25,7 +25,8 @@ char-ci>? char-ci>=? string-ci=? string-ci? string-ci>=? string-foldcase char-general-category char-alphabetic? char-numeric? char-whitespace? - char-upper-case? char-lower-case? char-title-case? ) + char-upper-case? char-lower-case? char-title-case? + string-upcase string-downcase) (import (ikarus system $fx) @@ -40,7 +41,8 @@ string-ci=? string-ci? string-ci>=? string-foldcase char-general-category char-alphabetic? char-numeric? char-whitespace? - char-upper-case? char-lower-case? char-title-case? )) + char-upper-case? char-lower-case? char-title-case? + string-upcase string-downcase)) (include "unicode/unicode-char-cases.ss") (include "unicode/unicode-charinfo.ss") @@ -229,7 +231,7 @@ (char-ci-loop x x* char>=? 'char-ci>=?) (die 'char-ci>=? "not a char" x))])) - (define ($string-foldcase str) + (define ($string-change-case str adjustment-vector) (define (extend-length str ac) (define (chars ac n) (cond @@ -270,7 +272,7 @@ [else (let* ([cn ($char->fixnum ($string-ref str i))]) (let ([n/ls - (vector-ref string-foldcase-adjustment-vector + (vector-ref adjustment-vector (binary-search cn charcase-search-vector))]) (cond [(fixnum? n/ls) @@ -280,11 +282,24 @@ (f str dst (fxadd1 i) n (cons (cons i n/ls) ac))])))])))) + (define ($string-foldcase str) + ($string-change-case str string-foldcase-adjustment-vector)) + (define (string-foldcase str) (if (string? str) ($string-foldcase str) (die 'string-foldcase "not a string" str))) + (define (string-upcase x) + (if (string? x) + ($string-change-case x string-upcase-adjustment-vector) + (die 'string-upcase "not a string" x))) + + (define (string-downcase x) + (if (string? x) + ($string-change-case x string-downcase-adjustment-vector) + (die 'string-downcase "not a string" x))) + ;;; FIXME: case-insensitive comparison procedures are slow. (define string-ci-cmp diff --git a/scheme/last-revision b/scheme/last-revision index 239cbd5..7bb9a89 100644 --- a/scheme/last-revision +++ b/scheme/last-revision @@ -1 +1 @@ -1577 +1578 diff --git a/scheme/unicode/extract-char-cases.ss b/scheme/unicode/extract-char-cases.ss index e2301fc..88f6a19 100755 --- a/scheme/unicode/extract-char-cases.ss +++ b/scheme/unicode/extract-char-cases.ss @@ -39,7 +39,7 @@ (define (hex->num x) - (read (open-input-string (format "#x~a" x)))) + (read (open-string-input-port (format "#x~a" x)))) (define data-case (lambda (fields) @@ -51,7 +51,7 @@ (define (f x) (if (string=? x "") 0 (- (hex->num x) n))) ;#(UC LC TC FC string-FC) - (cons n (vector (f uc) (f lc) (f tc) #f 0)))))) + (cons n (vector (f uc) (f lc) (f tc) #f 0 (f uc) (f lc) (f tc))))))) (define (remove-dups ls) (let f ([ls ls] [last #f]) @@ -133,6 +133,37 @@ (convert-full-fold-fields (cdr ls)))))] [else (convert-full-fold-fields (cdr ls))])))])) +(define-struct spcase (lc tc uc)) + +(define (convert-special-casing ls) + (cond + [(null? ls) '()] + [else + (let ([fields (car ls)]) + (cond + [(or (<= (length fields) 4) + (= 0 (string-length (remove-spaces (list-ref fields 4))))) + (let ([n (hex->num (remove-spaces (car fields)))]) + (define (field-data str) + (let ([c* (map hex->num + (map remove-spaces + (split (remove-spaces str))))]) + (if (= (length c*) 1) + (- (car c*) n) + (improperize (map integer->char c*))))) + (cons + (cons n + (make-spcase + (field-data (list-ref fields 1)) + (field-data (list-ref fields 2)) + (field-data (list-ref fields 3)))) + (convert-special-casing (cdr ls))))] + [else (convert-special-casing (cdr ls))]))])) + +(define (with-output-to-file* file thunk) + (when (file-exists? file) (delete-file file)) + (with-output-to-file file thunk)) + (let ([ls ;;; get initial table (compute-foldcase @@ -146,18 +177,31 @@ [(assq n ls) => (lambda (p) (vector-set! (cdr p) 4 chars))] - [else (error #f "~s is not there" n)]))) + [else (error #f "not there" n)]))) (convert-full-fold-fields (get-unicode-data "UNIDATA/CaseFolding.txt"))) + (for-each + (lambda (x) + (let ([n (car x)] [cases (cdr x)]) + (cond + [(assq n ls) => + (lambda (p) + (let ([v (cdr p)]) + (vector-set! (cdr p) 5 (spcase-uc cases)) + (vector-set! (cdr p) 6 (spcase-lc cases)) + (vector-set! (cdr p) 7 (spcase-tc cases))))] + [else (error #f "not here" n)]))) + (convert-special-casing + (get-unicode-data "UNIDATA/SpecialCasing.txt"))) ;;; done (let ([ls (remove-dups ls)]) (define (p name idx) (pretty-print `(define ,name ',(list->vector (map (lambda (x) (vector-ref (cdr x) idx)) ls))))) - (parameterize ([print-unicode #f]) + (parameterize ([print-unicode #f] [pretty-width 80]) (let ([v0 (list->vector (map car ls))]) - (with-output-to-file "unicode-char-cases.ss" + (with-output-to-file* "unicode-char-cases.ss" (lambda () (display license) (printf ";;; DO NOT EDIT\n;;; automatically generated\n") @@ -168,8 +212,10 @@ (p 'char-titlecase-adjustment-vector 2) (p 'char-foldcase-adjustment-vector 3) (p 'string-foldcase-adjustment-vector 4) - ) - 'replace))))) + (p 'string-upcase-adjustment-vector 5) + (p 'string-downcase-adjustment-vector 6) + (p 'string-titlecase-adjustment-vector 7) + )))))) (printf "Happy Happy Joy Joy\n") diff --git a/scheme/unicode/unicode-char-cases.ss b/scheme/unicode/unicode-char-cases.ss index 25a2e01..8b2eb51 100644 --- a/scheme/unicode/unicode-char-cases.ss +++ b/scheme/unicode/unicode-char-cases.ss @@ -299,3 +299,155 @@ (#\f . #\i) (#\f . #\l) (#\f #\f . #\i) (#\f #\f . #\l) (#\s . #\t) (#\x574 . #\x576) (#\x574 . #\x565) (#\x574 . #\x56B) (#\x57E . #\x576) (#\x574 . #\x56D) 0 32 0 0 0 40 0 0)) +(define string-upcase-adjustment-vector + '#(0 0 0 -32 0 743 0 0 0 0 (#\S . #\S) -32 0 -32 121 0 -1 0 -1 0 -1 0 -1 0 -1 + 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 + 0 -1 0 -1 0 -1 0 -1 0 -232 0 -1 0 -1 0 -1 0 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 (#\x2BC . #\N) 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 -1 0 -1 + 0 -1 -300 195 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 0 0 0 -1 0 0 97 0 0 0 -1 163 0 + 0 0 130 0 0 -1 0 -1 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 + 56 0 0 -1 -2 0 -1 -2 0 -1 -2 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 -79 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 (#\J . #\x30C) 0 -1 -2 0 -1 0 0 + 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 + 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 -1 0 -1 0 -1 0 -1 0 -210 -206 0 -205 0 -202 + 0 -203 0 -205 0 -207 0 -209 -211 0 10743 0 -211 0 -213 0 -214 0 10727 0 + -218 0 -218 0 -218 -69 -217 -71 0 -219 0 84 0 130 0 0 0 0 0 0 + (#\x399 #\x308 . #\x301) 0 -38 -37 (#\x3A5 #\x308 . #\x301) -32 -31 -32 -64 + -63 -62 -57 0 -47 -54 0 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 -86 -80 7 0 0 -96 0 0 -1 0 0 -1 0 0 0 0 -32 -80 0 -1 0 -1 0 -1 0 -1 + 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 -1 0 -1 0 -1 0 -1 + 0 -1 0 -1 0 -1 -15 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 -48 (#\x535 . #\x552) 0 0 0 3814 + 0 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 (#\H . #\x331) (#\T . #\x308) (#\W . #\x30A) (#\Y . #\x30A) + (#\A . #\x2BE) -59 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 8 0 8 0 8 0 8 0 8 0 (#\x3A5 . #\x313) 8 + (#\x3A5 #\x313 . #\x300) 8 (#\x3A5 #\x313 . #\x301) 8 + (#\x3A5 #\x313 . #\x342) 8 0 8 0 74 86 100 128 112 126 (#\x1F08 . #\x399) + (#\x1F09 . #\x399) (#\x1F0A . #\x399) (#\x1F0B . #\x399) (#\x1F0C . #\x399) + (#\x1F0D . #\x399) (#\x1F0E . #\x399) (#\x1F0F . #\x399) (#\x1F08 . #\x399) + (#\x1F09 . #\x399) (#\x1F0A . #\x399) (#\x1F0B . #\x399) (#\x1F0C . #\x399) + (#\x1F0D . #\x399) (#\x1F0E . #\x399) (#\x1F0F . #\x399) (#\x1F28 . #\x399) + (#\x1F29 . #\x399) (#\x1F2A . #\x399) (#\x1F2B . #\x399) (#\x1F2C . #\x399) + (#\x1F2D . #\x399) (#\x1F2E . #\x399) (#\x1F2F . #\x399) (#\x1F28 . #\x399) + (#\x1F29 . #\x399) (#\x1F2A . #\x399) (#\x1F2B . #\x399) (#\x1F2C . #\x399) + (#\x1F2D . #\x399) (#\x1F2E . #\x399) (#\x1F2F . #\x399) (#\x1F68 . #\x399) + (#\x1F69 . #\x399) (#\x1F6A . #\x399) (#\x1F6B . #\x399) (#\x1F6C . #\x399) + (#\x1F6D . #\x399) (#\x1F6E . #\x399) (#\x1F6F . #\x399) (#\x1F68 . #\x399) + (#\x1F69 . #\x399) (#\x1F6A . #\x399) (#\x1F6B . #\x399) (#\x1F6C . #\x399) + (#\x1F6D . #\x399) (#\x1F6E . #\x399) (#\x1F6F . #\x399) 8 + (#\x1FBA . #\x399) (#\x391 . #\x399) (#\x386 . #\x399) (#\x391 . #\x342) + (#\x391 #\x342 . #\x399) 0 0 (#\x391 . #\x399) 0 -7205 0 (#\x1FCA . #\x399) + (#\x397 . #\x399) (#\x389 . #\x399) (#\x397 . #\x342) + (#\x397 #\x342 . #\x399) 0 (#\x397 . #\x399) 0 8 (#\x399 #\x308 . #\x300) + (#\x399 #\x308 . #\x301) (#\x399 . #\x342) (#\x399 #\x308 . #\x342) 0 0 0 8 + (#\x3A5 #\x308 . #\x300) (#\x3A5 #\x308 . #\x301) (#\x3A1 . #\x313) 7 + (#\x3A5 . #\x342) (#\x3A5 #\x308 . #\x342) 0 0 0 0 (#\x1FFA . #\x399) + (#\x3A9 . #\x399) (#\x38F . #\x399) (#\x3A9 . #\x342) + (#\x3A9 #\x342 . #\x399) 0 0 (#\x3A9 . #\x399) 0 0 0 0 0 0 0 0 -28 0 0 -16 + 0 0 -1 0 0 -26 0 0 -48 0 -1 0 0 0 -10795 -10792 0 -1 0 -1 0 -1 0 0 -1 0 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -7264 0 (#\F . #\F) (#\F . #\I) (#\F . #\L) + (#\F #\F . #\I) (#\F #\F . #\L) (#\S . #\T) (#\x544 . #\x546) + (#\x544 . #\x535) (#\x544 . #\x53B) (#\x54E . #\x546) (#\x544 . #\x53D) 0 0 + 0 -32 0 0 -40 0)) +(define string-downcase-adjustment-vector + '#(0 32 0 0 0 0 0 32 0 32 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 (#\i . #\x307) 0 1 0 + 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 + 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 -121 1 0 1 0 1 + 0 0 0 210 1 0 1 0 206 1 0 205 1 0 0 79 202 203 1 0 205 207 0 211 209 1 0 0 + 0 211 213 0 214 1 0 1 0 1 0 218 1 0 218 0 1 0 218 1 0 217 1 0 1 0 219 1 0 0 + 1 0 0 0 0 2 1 0 2 1 0 2 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 0 2 1 0 1 0 -97 -56 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 -130 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 0 10795 1 0 -163 10792 0 1 0 -195 69 71 1 0 1 0 1 0 1 0 1 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 38 0 37 64 63 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 -60 0 0 1 0 -7 1 0 0 -130 80 32 0 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 + 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 + 1 0 1 0 1 0 1 0 1 0 15 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 48 0 0 0 0 7264 0 0 0 1 0 1 0 1 0 1 0 + 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 + 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 + 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 + 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 1 0 1 0 + 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 + 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 + 1 0 1 0 1 0 1 0 1 0 0 -8 0 -8 0 -8 0 -8 0 -8 0 0 0 0 0 0 0 0 -8 0 -8 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 -8 -8 -8 -8 -8 -8 -8 -8 0 0 0 0 0 0 0 0 -8 -8 -8 -8 + -8 -8 -8 -8 0 0 0 0 0 0 0 0 -8 -8 -8 -8 -8 -8 -8 -8 0 0 0 0 0 0 -8 -74 -9 0 + 0 0 0 0 0 0 0 -86 -9 0 0 0 0 0 0 -8 -100 0 0 0 0 0 0 0 0 -8 -112 -7 0 0 0 0 + 0 0 -128 -126 -9 0 -7517 0 -8383 -8262 0 28 0 0 0 16 0 0 1 0 0 26 0 0 48 0 + 1 0 -10743 -3814 -10727 0 0 1 0 1 0 1 0 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 + 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 + 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 + 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 0 0 0 40 0 0)) +(define string-titlecase-adjustment-vector + '#(0 0 0 -32 0 743 0 0 0 0 (#\S . #\s) -32 0 -32 121 0 -1 0 -1 0 -1 0 -1 0 -1 + 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 + 0 -1 0 -1 0 -1 0 -1 0 -232 0 -1 0 -1 0 -1 0 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 (#\x2BC . #\N) 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 -1 0 -1 + 0 -1 -300 195 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 0 0 0 -1 0 0 97 0 0 0 -1 163 0 + 0 0 130 0 0 -1 0 -1 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 + 56 0 1 0 -1 1 0 -1 1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 -79 0 -1 + 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 (#\J . #\x30C) 1 0 -1 0 -1 0 0 0 -1 + 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 + 0 -1 0 -1 0 -1 0 -1 0 0 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 0 + -1 0 0 0 0 -1 0 0 0 0 -1 0 -1 0 -1 0 -1 0 -1 0 -210 -206 0 -205 0 -202 0 + -203 0 -205 0 -207 0 -209 -211 0 10743 0 -211 0 -213 0 -214 0 10727 0 -218 + 0 -218 0 -218 -69 -217 -71 0 -219 0 84 0 130 0 0 0 0 0 0 + (#\x399 #\x308 . #\x301) 0 -38 -37 (#\x3A5 #\x308 . #\x301) -32 -31 -32 -64 + -63 -62 -57 0 -47 -54 0 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 -86 -80 7 0 0 -96 0 0 -1 0 0 -1 0 0 0 0 -32 -80 0 -1 0 -1 0 -1 0 -1 + 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 -1 0 -1 0 -1 0 -1 + 0 -1 0 -1 0 -1 -15 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 -48 (#\x535 . #\x582) 0 0 0 3814 + 0 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 (#\H . #\x331) (#\T . #\x308) (#\W . #\x30A) (#\Y . #\x30A) + (#\A . #\x2BE) -59 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 + -1 0 -1 0 -1 0 -1 8 0 8 0 8 0 8 0 8 0 (#\x3A5 . #\x313) 8 + (#\x3A5 #\x313 . #\x300) 8 (#\x3A5 #\x313 . #\x301) 8 + (#\x3A5 #\x313 . #\x342) 8 0 8 0 74 86 100 128 112 126 8 8 8 8 8 8 8 8 0 0 + 0 0 0 0 0 0 8 8 8 8 8 8 8 8 0 0 0 0 0 0 0 0 8 8 8 8 8 8 8 8 0 0 0 0 0 0 0 0 + 8 (#\x1FBA . #\x345) 9 (#\x386 . #\x345) (#\x391 . #\x342) + (#\x391 #\x342 . #\x345) 0 0 0 0 -7205 0 (#\x1FCA . #\x345) 9 + (#\x389 . #\x345) (#\x397 . #\x342) (#\x397 #\x342 . #\x345) 0 0 0 8 + (#\x399 #\x308 . #\x300) (#\x399 #\x308 . #\x301) (#\x399 . #\x342) + (#\x399 #\x308 . #\x342) 0 0 0 8 (#\x3A5 #\x308 . #\x300) + (#\x3A5 #\x308 . #\x301) (#\x3A1 . #\x313) 7 (#\x3A5 . #\x342) + (#\x3A5 #\x308 . #\x342) 0 0 0 0 (#\x1FFA . #\x345) 9 (#\x38F . #\x345) + (#\x3A9 . #\x342) (#\x3A9 #\x342 . #\x345) 0 0 0 0 0 0 0 0 0 0 0 -28 0 0 + -16 0 0 -1 0 0 -26 0 0 -48 0 -1 0 0 0 -10795 -10792 0 -1 0 -1 0 -1 0 0 -1 0 + 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 + 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 + 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 + 0 -1 0 -1 0 -1 0 -1 0 -1 0 -7264 0 (#\F . #\f) (#\F . #\i) (#\F . #\l) + (#\F #\f . #\i) (#\F #\f . #\l) (#\S . #\t) (#\x544 . #\x576) + (#\x544 . #\x565) (#\x544 . #\x56B) (#\x54E . #\x576) (#\x544 . #\x56D) 0 0 + 0 -32 0 0 -40 0))