From f43234e1cbed1aa3da993750aec329b195d2f8cd Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 12 May 2017 07:52:33 -0600 Subject: [PATCH] add `prop:authentic` and `(struct .... #:authentic ....)` An authentic structure type is one whose instances cannot be impersonated or chaperoned. The intended use of `prop:authentic` is to annotate a library-private data structure where impersonators are never needed internally for the data structure, and the declaration lets the compiler produce less code and fewer branches by omitting impersonator support. --- pkgs/base/info.rkt | 2 +- .../scribblings/reference/chaperones.scrbl | 24 + .../scribblings/reference/define-struct.scrbl | 12 +- .../tests/racket/jitinline.rktl | 78 +- .../tests/racket/optimize.rktl | 16 + .../racket-test-core/tests/racket/struct.rktl | 22 + .../collects/racket/private/define-struct.rkt | 14 +- racket/src/racket/src/cstartup.inc | 1340 ++++++++--------- racket/src/racket/src/jit.h | 3 +- racket/src/racket/src/jitcall.c | 43 +- racket/src/racket/src/jitcommon.c | 37 +- racket/src/racket/src/jitinline.c | 7 +- racket/src/racket/src/module.c | 2 +- racket/src/racket/src/optimize.c | 80 +- racket/src/racket/src/schminc.h | 2 +- racket/src/racket/src/schpriv.h | 14 +- racket/src/racket/src/schvers.h | 4 +- racket/src/racket/src/struct.c | 55 +- racket/src/racket/src/validate.c | 3 +- racket/src/racket/src/vector.c | 3 + 20 files changed, 980 insertions(+), 781 deletions(-) diff --git a/pkgs/base/info.rkt b/pkgs/base/info.rkt index 2112e859e1..202d55f35f 100644 --- a/pkgs/base/info.rkt +++ b/pkgs/base/info.rkt @@ -12,7 +12,7 @@ (define collection 'multi) -(define version "6.9.0.3") +(define version "6.9.0.4") (define deps `("racket-lib" ["racket" #:version ,version])) diff --git a/pkgs/racket-doc/scribblings/reference/chaperones.scrbl b/pkgs/racket-doc/scribblings/reference/chaperones.scrbl index be2b300273..7765a97873 100644 --- a/pkgs/racket-doc/scribblings/reference/chaperones.scrbl +++ b/pkgs/racket-doc/scribblings/reference/chaperones.scrbl @@ -707,6 +707,30 @@ checked (recursively). predicates and accessors sensitive to @racket[prop:impersonator-of].}]} + +@defthing[prop:authentic struct-type-property?]{ + +A @tech{structure type property} that declares a structure type as +@deftech{authentic}. The value associated with the property is ignored; +the presence of the property itself makes the structure type +authentic. + +Instances of an @tech{authentic} structure type cannot be impersonated +via @racket[impersonate-struct] or chaperoned via +@racket[chaperone-struct]. As a consequence, an instance of an +@tech{authentic} structure type can be given a contract (see +@racket[struct/c]) only if it is a @tech{flat contract}. + +Declaring a structure type as @tech{authentic} can prevent unwanted +structure impersonation, but exposed structure types normally should +support impersonators or chaperones to facilitate contracts. Declaring +a structure type as @tech{authentic} can also slightly improve the +performance of structure predicates, selectors, and mutators, which +can be appropriate for data structures that are private +and frequently used within a library. + +@history[#:added "6.9.0.4"]} + @; ------------------------------------------------------------ @section{Chaperone Constructors} diff --git a/pkgs/racket-doc/scribblings/reference/define-struct.scrbl b/pkgs/racket-doc/scribblings/reference/define-struct.scrbl index 8441728d87..c7db54ad05 100644 --- a/pkgs/racket-doc/scribblings/reference/define-struct.scrbl +++ b/pkgs/racket-doc/scribblings/reference/define-struct.scrbl @@ -24,6 +24,7 @@ (code:line #:property prop-expr val-expr) (code:line #:transparent) (code:line #:prefab) + (code:line #:authentic) (code:line #:name name-id) (code:line #:extra-name name-id) (code:line #:constructor-name constructor-id) @@ -166,6 +167,14 @@ must also be a @tech{prefab} structure type. (prefab-point? #s(prefab-point 1 2)) ] +The @racket[#:authentic] option is a shorthand for @racket[#:property +prop:authentic #t], which prevents instances of the structure type +from being impersonated (see @racket[impersonate-struct]), chaperoned +(see @racket[chaperone-struct]), or acquiring a non-@tech{flat +contract} (see @racket[struct/c]). See @racket[prop:authentic] for +more information. If a supertype is specified, it must also have the +@racket[prop:authentic] property. + If @racket[name-id] is supplied via @racket[#:extra-name] and it is not @racket[id], then both @racket[name-id] and @racket[id] are bound to information about the structure type. Only one of @@ -289,7 +298,8 @@ cp ] For serialization, see @racket[define-serializable-struct]. -} + +@history[#:changed "6.9.0.4" @elem{Added @racket[#:authentic].}]} @defform[(struct-field-index field-id)]{ diff --git a/pkgs/racket-test-core/tests/racket/jitinline.rktl b/pkgs/racket-test-core/tests/racket/jitinline.rktl index 2a70d27b15..c0d8f967e5 100644 --- a/pkgs/racket-test-core/tests/racket/jitinline.rktl +++ b/pkgs/racket-test-core/tests/racket/jitinline.rktl @@ -11,18 +11,23 @@ ;; Check JIT inlining of primitives: (parameterize ([current-namespace (make-base-namespace)] - [eval-jit-enabled #t]) + [eval-jit-enabled #t]) (namespace-require 'racket/flonum) (namespace-require 'racket/extflonum) (namespace-require 'racket/fixnum) (namespace-require 'racket/unsafe/ops) (namespace-require 'racket/unsafe/undefined) (namespace-require '(prefix k: '#%kernel)) - (eval '(define-values (prop:thing thing? thing-ref) - (make-struct-type-property 'thing))) - (eval '(struct rock (x) #:property prop:thing 'yes)) + (eval '(module rock racket/base + (provide (all-defined-out)) + (define-values (prop:thing thing? thing-ref) + (make-struct-type-property 'thing)) + (struct rock (x) #:property prop:thing 'yes) + (struct stone (x) #:authentic))) + (eval '(require 'rock)) (let* ([struct:rock (eval 'struct:rock)] [a-rock (eval '(rock 0))] + [a-stone (eval '(stone 0))] [chap-rock (eval '(chaperone-struct (rock 0) rock-x (lambda (r v) (add1 v))))] [check-error-message (lambda (name proc [fixnum? #f] #:bad-value [bad-value (if fixnum? 10 'bad)] @@ -39,7 +44,7 @@ exact-integer? exact-nonnegative-integer? exact-positive-integer? - thing? + thing? rock? stone? continuation-mark-set-first)) (let ([s (with-handlers ([exn? exn-message]) (let ([bad bad-value]) @@ -221,8 +226,18 @@ (un #t 'bytes? #"apple") (un #f 'thing? 10) (un #t 'thing? a-rock) + (un #f 'thing? a-stone) (un #t 'thing? chap-rock) (un #t 'thing? struct:rock) + (un #f 'rock? 10) + (un #t 'rock? a-rock) + (un #f 'rock? a-stone) + (un #t 'rock? chap-rock) + (un #f 'rock? struct:rock) + (un #f 'stone? 10) + (un #f 'stone? a-rock) + (un #t 'stone? a-stone) + (un #f 'stone? chap-rock) (un #f 'immutable? (vector 1 2 3)) (un #t 'immutable? (vector-immutable 1 2 3)) (un #f 'immutable? (box 1)) @@ -901,31 +916,34 @@ ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Check JIT handling of structure-reference sequencese -(parameterize ([current-namespace (make-base-namespace)] - [eval-jit-enabled #t]) - (eval '(module paper racket/base - (provide (all-defined-out)) - (struct paper (width height folds) #:transparent) - (define (fold-letter l) - (for/fold ([l l]) ([i (in-range 100)]) - (and (paper? l) - (struct-copy paper l [folds i])))) - (define (refine-letter l) - (for/fold ([l l]) ([i (in-range 100)]) - (and (paper? l) - (struct-copy paper l [width i])))))) - (eval '(require 'paper)) - (eval '(define letter (paper 8.5 11 0))) - (eval '(define formal-letter (chaperone-struct letter paper-height - (lambda (s v) - (unless (equal? v 11) - (error "wrong")) - v)))) - (test #t eval '(equal? (fold-letter letter) (paper 8.5 11 99))) - (test #t eval '(equal? (fold-letter formal-letter) (paper 8.5 11 99))) - (test #t eval '(equal? (refine-letter letter) (paper 99 11 0))) - (test #t eval '(equal? (refine-letter formal-letter) (paper 99 11 0)))) +;; Check JIT handling of structure-reference sequences +(for ([options '(() (#:authentic))]) + (parameterize ([current-namespace (make-base-namespace)] + [eval-jit-enabled #t]) + (eval `(module paper racket/base + (provide (all-defined-out)) + (struct paper (width height folds) #:transparent ,@options) + (define (fold-letter l) + (for/fold ([l l]) ([i (in-range 100)]) + (and (paper? l) + (struct-copy paper l [folds i])))) + (define (refine-letter l) + (for/fold ([l l]) ([i (in-range 100)]) + (and (paper? l) + (struct-copy paper l [width i])))))) + (eval '(require 'paper)) + (eval '(define letter (paper 8.5 11 0))) + (unless (equal? options '(#:authentic)) + (eval '(define formal-letter (chaperone-struct letter paper-height + (lambda (s v) + (unless (equal? v 11) + (error "wrong")) + v))))) + (test #t eval '(equal? (fold-letter letter) (paper 8.5 11 99))) + (test #t eval '(equal? (refine-letter letter) (paper 99 11 0))) + (unless (equal? options '(#:authentic)) + (test #t eval '(equal? (fold-letter formal-letter) (paper 8.5 11 99))) + (test #t eval '(equal? (refine-letter formal-letter) (paper 99 11 0)))))) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Make sure the JIT handles struct-type property predicates and diff --git a/pkgs/racket-test-core/tests/racket/optimize.rktl b/pkgs/racket-test-core/tests/racket/optimize.rktl index 6a351ee250..a4e89f457c 100644 --- a/pkgs/racket-test-core/tests/racket/optimize.rktl +++ b/pkgs/racket-test-core/tests/racket/optimize.rktl @@ -3428,6 +3428,22 @@ (unsafe-struct-ref v 1)) (void))))) +(test-comp '(module m racket/base + (require racket/unsafe/ops) + (struct a (x y) #:authentic) + (define (f v) + (if (a? v) + (list (a-x v) (a-y v)) + (void)))) + '(module m racket/base + (require racket/unsafe/ops) + (struct a (x y) #:authentic) + (define (f v) + (if (a? v) + (list (unsafe-struct*-ref v 0) + (unsafe-struct*-ref v 1)) + (void))))) + (test-comp '(module m racket/base (require racket/unsafe/ops) (struct a (x y)) diff --git a/pkgs/racket-test-core/tests/racket/struct.rktl b/pkgs/racket-test-core/tests/racket/struct.rktl index 07504d7b29..00ad9d4f04 100644 --- a/pkgs/racket-test-core/tests/racket/struct.rktl +++ b/pkgs/racket-test-core/tests/racket/struct.rktl @@ -1176,6 +1176,28 @@ (test 'blinky ghost-name (struct-copy GHOST (ghost 'red 'blinky))) (syntax-test #'GHOST) +;; ---------------------------------------- +;; Check `#:authentic`: + +(let () + (struct posn (x y) #:authentic) + (test 1 posn-x (posn 1 2)) + (err/rt-test (chaperone-struct (posn 1 2) posn-x (lambda (p x) x))) + + ;; Subtype must be consistent: + (err/rt-test (let () + (struct posn3D posn (z)) + 'ok))) + +(let () + (struct posn (x y)) + + ;; Subtype must be consistent: + (err/rt-test (let () + (struct posn3D posn (z) + #:authentic) + 'ok))) + ;; ---------------------------------------- (report-errs) diff --git a/racket/collects/racket/private/define-struct.rkt b/racket/collects/racket/private/define-struct.rkt index c348298dd2..40b5f8531a 100644 --- a/racket/collects/racket/private/define-struct.rkt +++ b/racket/collects/racket/private/define-struct.rkt @@ -240,6 +240,7 @@ (#:reflection-name . #f) (#:name . #f) (#:only-name? . #f) + (#:authentic . #f) (#:omit-define-values . #f) (#:omit-define-syntaxes . #f))] [nongen? #f]) @@ -319,6 +320,12 @@ (loop (cdr p) (extend-config config '#:inspector #'#f) nongen?)] + [(eq? '#:authentic (syntax-e (car p))) + (when (lookup config '#:authentic) + (bad "multiple" "#:authentic" "s" (car p))) + (loop (cdr p) + (extend-config config '#:authentic #'#t) + nongen?)] [(or (eq? '#:constructor-name (syntax-e (car p))) (eq? '#:extra-constructor-name (syntax-e (car p)))) (check-exprs 1 p "identifier") @@ -452,7 +459,12 @@ (let ([config (parse-props #'fm (syntax->list #'(prop ...)) super-id)]) (values (lookup config '#:inspector) (lookup config '#:super) - (lookup config '#:props) + (let ([l (lookup config '#:props)] + [a (lookup config '#:authentic)]) + (if a + (cons (cons #'prop:authentic #'#t) + l) + l)) (lookup config '#:auto-value) (lookup config '#:guard) (lookup config '#:constructor-name) diff --git a/racket/src/racket/src/cstartup.inc b/racket/src/racket/src/cstartup.inc index 0e599998ad..b59b14c9c7 100644 --- a/racket/src/racket/src/cstartup.inc +++ b/racket/src/racket/src/cstartup.inc @@ -29,50 +29,50 @@ 2,19,248,22,105,199,12,249,22,82,2,20,248,22,107,201,27,248,22,170,4, 195,249,22,163,4,80,143,42,39,251,22,92,2,19,248,22,105,199,249,22,82, 2,20,248,22,107,201,12,27,248,22,84,248,22,170,4,196,28,248,22,90,193, -20,14,144,40,39,40,28,248,22,90,248,22,84,194,248,22,184,20,193,249,22, -163,4,80,143,42,39,251,22,92,2,19,248,22,184,20,199,249,22,82,2,4, -248,22,185,20,201,11,18,143,10,2,28,27,248,22,84,248,22,170,4,196,28, -248,22,90,193,20,14,144,40,39,40,28,248,22,90,248,22,84,194,248,22,184, +20,14,144,40,39,40,28,248,22,90,248,22,84,194,248,22,185,20,193,249,22, +163,4,80,143,42,39,251,22,92,2,19,248,22,185,20,199,249,22,82,2,4, +248,22,186,20,201,11,18,143,10,2,28,27,248,22,84,248,22,170,4,196,28, +248,22,90,193,20,14,144,40,39,40,28,248,22,90,248,22,84,194,248,22,185, 20,193,249,22,163,4,80,143,42,39,250,22,92,2,21,248,22,92,249,22,92, -248,22,92,2,22,248,22,184,20,201,251,22,92,2,19,2,22,2,22,249,22, -82,2,11,248,22,185,20,204,18,143,11,2,28,248,22,170,4,193,27,248,22, -170,4,194,249,22,82,248,22,92,248,22,83,196,248,22,185,20,195,27,248,22, +248,22,92,2,22,248,22,185,20,201,251,22,92,2,19,2,22,2,22,249,22, +82,2,11,248,22,186,20,204,18,143,11,2,28,248,22,170,4,193,27,248,22, +170,4,194,249,22,82,248,22,92,248,22,83,196,248,22,186,20,195,27,248,22, 84,248,22,170,4,23,197,1,249,22,163,4,80,143,42,39,28,248,22,66,248, 22,164,4,248,22,83,23,198,2,27,249,22,2,32,0,88,148,8,36,40,46, 11,9,222,33,43,248,22,170,4,248,22,105,23,200,2,250,22,92,2,23,248, -22,92,249,22,92,248,22,92,248,22,184,20,23,204,2,250,22,93,2,24,249, -22,2,22,83,23,204,2,248,22,107,23,206,2,249,22,82,248,22,184,20,23, +22,92,249,22,92,248,22,92,248,22,185,20,23,204,2,250,22,93,2,24,249, +22,2,22,83,23,204,2,248,22,107,23,206,2,249,22,82,248,22,185,20,23, 202,1,249,22,2,22,105,23,200,1,250,22,93,2,21,249,22,2,32,0,88, -148,8,36,40,50,11,9,222,33,44,248,22,170,4,248,22,184,20,201,248,22, -185,20,198,27,248,22,170,4,194,249,22,82,248,22,92,248,22,83,196,248,22, -185,20,195,27,248,22,84,248,22,170,4,23,197,1,249,22,163,4,80,143,42, +148,8,36,40,50,11,9,222,33,44,248,22,170,4,248,22,185,20,201,248,22, +186,20,198,27,248,22,170,4,194,249,22,82,248,22,92,248,22,83,196,248,22, +186,20,195,27,248,22,84,248,22,170,4,23,197,1,249,22,163,4,80,143,42, 39,250,22,93,2,23,249,22,2,32,0,88,148,8,36,40,50,11,9,222,33, -46,248,22,170,4,248,22,83,201,248,22,185,20,198,27,248,22,84,248,22,170, +46,248,22,170,4,248,22,83,201,248,22,186,20,198,27,248,22,84,248,22,170, 4,196,27,248,22,170,4,248,22,83,195,249,22,163,4,80,143,43,39,28,248, -22,90,195,250,22,93,2,21,9,248,22,185,20,199,250,22,92,2,7,248,22, -92,248,22,83,199,250,22,93,2,8,248,22,185,20,201,248,22,185,20,202,27, +22,90,195,250,22,93,2,21,9,248,22,186,20,199,250,22,92,2,7,248,22, +92,248,22,83,199,250,22,93,2,8,248,22,186,20,201,248,22,186,20,202,27, 248,22,84,248,22,170,4,196,27,248,22,170,4,248,22,83,195,249,22,163,4, -80,143,43,39,28,248,22,90,195,250,22,93,2,21,9,248,22,185,20,199,250, -22,92,2,21,248,22,92,248,22,83,199,250,22,93,2,9,248,22,185,20,201, -248,22,185,20,202,27,248,22,84,248,22,170,4,23,197,1,27,249,22,1,22, +80,143,43,39,28,248,22,90,195,250,22,93,2,21,9,248,22,186,20,199,250, +22,92,2,21,248,22,92,248,22,83,199,250,22,93,2,9,248,22,186,20,201, +248,22,186,20,202,27,248,22,84,248,22,170,4,23,197,1,27,249,22,1,22, 97,249,22,2,22,170,4,248,22,170,4,248,22,83,199,248,22,128,5,249,22, 163,4,80,143,44,39,251,22,92,1,22,119,105,116,104,45,99,111,110,116,105, 110,117,97,116,105,111,110,45,109,97,114,107,2,25,250,22,93,1,23,101,120, 116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110, 21,95,1,27,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107, 45,115,101,116,45,102,105,114,115,116,11,2,25,202,250,22,93,2,21,9,248, -22,185,20,204,27,248,22,84,248,22,170,4,196,28,248,22,90,193,20,14,144, +22,186,20,204,27,248,22,84,248,22,170,4,196,28,248,22,90,193,20,14,144, 40,39,40,249,22,163,4,80,143,42,39,27,248,22,170,4,248,22,83,197,28, 249,22,181,9,64,61,62,248,22,164,4,248,22,105,196,250,22,92,2,21,248, -22,92,249,22,92,21,93,2,26,248,22,184,20,199,250,22,93,2,5,249,22, -92,2,26,249,22,92,248,22,114,203,2,26,248,22,185,20,202,251,22,92,2, -19,28,249,22,181,9,248,22,164,4,248,22,184,20,200,66,101,108,115,101,10, -248,22,184,20,197,250,22,93,2,21,9,248,22,185,20,200,249,22,82,2,5, -248,22,185,20,202,18,143,94,10,66,118,111,105,100,2,28,27,248,22,84,248, +22,92,249,22,92,21,93,2,26,248,22,185,20,199,250,22,93,2,5,249,22, +92,2,26,249,22,92,248,22,114,203,2,26,248,22,186,20,202,251,22,92,2, +19,28,249,22,181,9,248,22,164,4,248,22,185,20,200,66,101,108,115,101,10, +248,22,185,20,197,250,22,93,2,21,9,248,22,186,20,200,249,22,82,2,5, +248,22,186,20,202,18,143,94,10,66,118,111,105,100,2,28,27,248,22,84,248, 22,170,4,196,249,22,163,4,80,143,42,39,28,248,22,66,248,22,164,4,248, -22,83,197,250,22,92,2,27,248,22,92,248,22,184,20,199,248,22,105,198,27, -248,22,164,4,248,22,184,20,197,250,22,92,2,27,248,22,92,248,22,83,197, -250,22,93,2,24,248,22,185,20,199,248,22,185,20,202,145,40,9,20,122,145, +22,83,197,250,22,92,2,27,248,22,92,248,22,185,20,199,248,22,105,198,27, +248,22,164,4,248,22,185,20,197,250,22,92,2,27,248,22,92,248,22,83,197, +250,22,93,2,24,248,22,186,20,199,248,22,186,20,202,145,40,9,20,122,145, 2,1,39,16,1,11,16,0,20,27,15,61,9,2,2,2,2,2,3,11,11, 11,11,9,9,11,11,11,10,40,80,143,39,39,20,122,145,2,1,39,16,0, 16,0,41,42,39,16,0,39,16,0,39,11,11,11,16,11,2,4,2,5,2, @@ -182,296 +182,296 @@ 116,111,32,97,32,114,111,111,116,32,112,97,116,104,58,32,5,11,80,76,84, 67,79,76,76,69,67,84,83,1,20,99,111,108,108,101,99,116,115,45,115,101, 97,114,99,104,45,100,105,114,115,6,8,8,99,111,108,108,101,99,116,115,28, -248,22,128,16,193,10,28,248,22,162,7,193,27,248,22,151,16,194,28,192,192, -248,22,152,16,194,11,0,21,35,114,120,34,94,91,92,92,93,91,92,92,93, +248,22,129,16,193,10,28,248,22,162,7,193,27,248,22,152,16,194,28,192,192, +248,22,153,16,194,11,0,21,35,114,120,34,94,91,92,92,93,91,92,92,93, 91,63,93,91,92,92,93,34,0,6,35,114,120,34,47,34,0,22,35,114,120, 34,91,47,92,92,93,91,46,32,93,43,91,47,92,92,93,42,36,34,0,19, 35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42,41,36,34,86,94, -28,248,22,129,16,23,195,2,11,28,248,22,128,16,23,195,2,11,28,28,248, -22,162,7,23,195,2,28,248,22,151,16,23,195,2,10,248,22,152,16,23,195, -2,11,11,250,22,132,12,2,41,2,42,23,197,2,28,28,248,22,129,16,23, -195,2,249,22,181,9,248,22,130,16,23,197,2,2,43,249,22,181,9,247,22, +28,248,22,130,16,23,195,2,11,28,248,22,129,16,23,195,2,11,28,28,248, +22,162,7,23,195,2,28,248,22,152,16,23,195,2,10,248,22,153,16,23,195, +2,11,11,250,22,133,12,2,41,2,42,23,197,2,28,28,248,22,130,16,23, +195,2,249,22,181,9,248,22,131,16,23,197,2,2,43,249,22,181,9,247,22, 189,8,2,43,27,28,248,22,162,7,23,196,2,23,195,2,248,22,174,8,248, -22,133,16,23,197,2,28,249,22,190,16,2,76,23,195,2,28,248,22,162,7, -195,248,22,136,16,195,194,27,248,22,137,8,23,195,1,249,22,137,16,248,22, -177,8,250,22,134,17,2,77,28,249,22,190,16,2,78,23,201,2,23,199,1, -250,22,134,17,2,79,23,202,1,2,44,80,144,47,40,41,2,43,28,248,22, -162,7,194,248,22,136,16,194,193,0,28,35,114,120,34,94,92,92,92,92,92, +22,134,16,23,197,2,28,249,22,191,16,2,76,23,195,2,28,248,22,162,7, +195,248,22,137,16,195,194,27,248,22,137,8,23,195,1,249,22,138,16,248,22, +177,8,250,22,135,17,2,77,28,249,22,191,16,2,78,23,201,2,23,199,1, +250,22,135,17,2,79,23,202,1,2,44,80,144,47,40,41,2,43,28,248,22, +162,7,194,248,22,137,16,194,193,0,28,35,114,120,34,94,92,92,92,92,92, 92,92,92,91,63,93,92,92,92,92,85,78,67,92,92,92,92,34,86,95,28, -248,22,128,16,23,195,2,11,28,28,248,22,162,7,23,195,2,28,248,22,151, -16,23,195,2,10,248,22,152,16,23,195,2,11,11,28,248,22,129,16,23,195, -2,11,252,22,132,12,2,6,2,45,39,23,199,2,23,200,2,28,248,22,128, -16,23,196,2,11,28,28,248,22,162,7,23,196,2,28,248,22,151,16,23,196, -2,10,248,22,152,16,23,196,2,11,11,28,248,22,129,16,23,196,2,11,252, -22,132,12,2,6,2,45,40,23,199,2,23,200,2,27,28,248,22,129,16,23, -196,2,248,22,130,16,23,196,2,247,22,131,16,86,95,28,248,22,153,16,23, -196,2,11,28,249,22,181,9,247,22,131,16,23,195,2,11,253,22,134,12,2, +248,22,129,16,23,195,2,11,28,28,248,22,162,7,23,195,2,28,248,22,152, +16,23,195,2,10,248,22,153,16,23,195,2,11,11,28,248,22,130,16,23,195, +2,11,252,22,133,12,2,6,2,45,39,23,199,2,23,200,2,28,248,22,129, +16,23,196,2,11,28,28,248,22,162,7,23,196,2,28,248,22,152,16,23,196, +2,10,248,22,153,16,23,196,2,11,11,28,248,22,130,16,23,196,2,11,252, +22,133,12,2,6,2,45,40,23,199,2,23,200,2,27,28,248,22,130,16,23, +196,2,248,22,131,16,23,196,2,247,22,132,16,86,95,28,248,22,154,16,23, +196,2,11,28,249,22,181,9,247,22,132,16,23,195,2,11,253,22,135,12,2, 6,6,54,54,112,97,116,104,32,105,115,32,110,111,116,32,99,111,109,112,108, 101,116,101,32,97,110,100,32,110,111,116,32,116,104,101,32,112,108,97,116,102, 111,114,109,39,115,32,99,111,110,118,101,110,116,105,111,110,2,46,23,201,2, 6,24,24,112,108,97,116,102,111,114,109,32,99,111,110,118,101,110,116,105,111, -110,32,116,121,112,101,247,22,131,16,28,249,22,181,9,28,248,22,129,16,23, -199,2,248,22,130,16,23,199,2,247,22,131,16,23,195,2,11,253,22,134,12, +110,32,116,121,112,101,247,22,132,16,28,249,22,181,9,28,248,22,130,16,23, +199,2,248,22,131,16,23,199,2,247,22,132,16,23,195,2,11,253,22,135,12, 2,6,6,37,37,103,105,118,101,110,32,112,97,116,104,115,32,117,115,101,32, 100,105,102,102,101,114,101,110,116,32,99,111,110,118,101,110,116,105,111,110,115, 2,46,23,201,2,6,9,9,114,111,111,116,32,112,97,116,104,23,202,2,27, -27,248,22,157,16,28,248,22,153,16,23,199,2,23,198,1,248,22,154,16,23, -199,1,86,94,28,248,22,129,16,23,194,2,11,28,248,22,128,16,23,194,2, -11,28,28,248,22,162,7,23,194,2,28,248,22,151,16,23,194,2,10,248,22, -152,16,23,194,2,11,11,250,22,132,12,2,41,2,42,23,196,2,28,28,248, -22,129,16,23,194,2,249,22,181,9,248,22,130,16,23,196,2,2,43,249,22, +27,248,22,158,16,28,248,22,154,16,23,199,2,23,198,1,248,22,155,16,23, +199,1,86,94,28,248,22,130,16,23,194,2,11,28,248,22,129,16,23,194,2, +11,28,28,248,22,162,7,23,194,2,28,248,22,152,16,23,194,2,10,248,22, +153,16,23,194,2,11,11,250,22,133,12,2,41,2,42,23,196,2,28,28,248, +22,130,16,23,194,2,249,22,181,9,248,22,131,16,23,196,2,2,43,249,22, 181,9,247,22,189,8,2,43,27,28,248,22,162,7,23,195,2,23,194,2,248, -22,174,8,248,22,133,16,23,196,2,28,249,22,190,16,2,76,23,195,2,86, -94,23,193,1,28,248,22,162,7,194,248,22,136,16,194,193,27,248,22,137,8, -23,195,1,249,22,137,16,248,22,177,8,250,22,134,17,2,77,28,249,22,190, -16,2,78,23,201,2,23,199,1,250,22,134,17,2,79,23,202,1,2,44,80, -144,50,40,41,2,43,28,248,22,162,7,193,248,22,136,16,193,192,27,248,22, -133,16,23,195,2,28,249,22,181,9,23,197,2,66,117,110,105,120,28,249,22, -159,8,194,5,1,47,28,248,22,129,16,198,197,248,22,136,16,198,249,22,146, -16,199,249,22,137,16,249,22,162,8,248,22,133,16,200,40,198,28,249,22,181, -9,23,197,2,2,43,249,22,146,16,23,200,1,249,22,137,16,28,249,22,190, +22,174,8,248,22,134,16,23,196,2,28,249,22,191,16,2,76,23,195,2,86, +94,23,193,1,28,248,22,162,7,194,248,22,137,16,194,193,27,248,22,137,8, +23,195,1,249,22,138,16,248,22,177,8,250,22,135,17,2,77,28,249,22,191, +16,2,78,23,201,2,23,199,1,250,22,135,17,2,79,23,202,1,2,44,80, +144,50,40,41,2,43,28,248,22,162,7,193,248,22,137,16,193,192,27,248,22, +134,16,23,195,2,28,249,22,181,9,23,197,2,66,117,110,105,120,28,249,22, +159,8,194,5,1,47,28,248,22,130,16,198,197,248,22,137,16,198,249,22,147, +16,199,249,22,138,16,249,22,162,8,248,22,134,16,200,40,198,28,249,22,181, +9,23,197,2,2,43,249,22,147,16,23,200,1,249,22,138,16,28,249,22,191, 16,0,27,35,114,120,34,94,92,92,92,92,92,92,92,92,91,63,93,92,92, 92,92,91,97,45,122,93,58,34,23,199,2,251,22,163,8,2,47,250,22,162, -8,203,43,44,5,1,92,249,22,162,8,202,45,28,249,22,190,16,2,81,23, -199,2,249,22,163,8,2,47,249,22,162,8,200,43,28,249,22,190,16,2,81, -23,199,2,249,22,163,8,2,47,249,22,162,8,200,43,28,249,22,190,16,0, +8,203,43,44,5,1,92,249,22,162,8,202,45,28,249,22,191,16,2,81,23, +199,2,249,22,163,8,2,47,249,22,162,8,200,43,28,249,22,191,16,2,81, +23,199,2,249,22,163,8,2,47,249,22,162,8,200,43,28,249,22,191,16,0, 14,35,114,120,34,94,92,92,92,92,92,92,92,92,34,23,199,2,249,22,163, -8,5,4,85,78,67,92,249,22,162,8,200,41,28,249,22,190,16,0,12,35, +8,5,4,85,78,67,92,249,22,162,8,200,41,28,249,22,191,16,0,12,35, 114,120,34,94,91,97,45,122,93,58,34,198,249,22,163,8,250,22,162,8,201, 39,40,249,22,162,8,200,41,12,198,12,32,83,88,148,8,36,42,56,11,72, 102,111,117,110,100,45,101,120,101,99,222,33,86,32,84,88,148,8,36,43,61, -11,66,110,101,120,116,222,33,85,27,248,22,155,16,23,197,2,28,249,22,183, -9,23,195,2,23,198,1,11,28,248,22,151,16,23,194,2,27,249,22,146,16, +11,66,110,101,120,116,222,33,85,27,248,22,156,16,23,197,2,28,249,22,183, +9,23,195,2,23,198,1,11,28,248,22,152,16,23,194,2,27,249,22,147,16, 23,200,1,23,196,1,28,23,196,2,90,144,42,11,89,146,42,39,11,248,22, -149,16,23,197,2,86,95,23,195,1,23,194,1,27,28,23,199,2,27,248,22, -155,16,23,199,2,28,249,22,183,9,23,195,2,23,200,2,86,94,23,193,1, -11,28,248,22,151,16,23,194,2,250,2,83,23,203,2,23,204,2,249,22,146, +150,16,23,197,2,86,95,23,195,1,23,194,1,27,28,23,199,2,27,248,22, +156,16,23,199,2,28,249,22,183,9,23,195,2,23,200,2,86,94,23,193,1, +11,28,248,22,152,16,23,194,2,250,2,83,23,203,2,23,204,2,249,22,147, 16,23,200,2,23,198,1,250,2,83,23,203,2,23,204,2,23,196,1,11,28, 23,193,2,86,97,23,200,1,23,199,1,23,197,1,23,194,1,192,27,28,248, -22,128,16,23,196,2,27,249,22,146,16,23,198,2,23,204,2,28,248,22,141, -16,23,194,2,192,28,248,22,140,16,193,192,11,11,28,23,193,2,86,97,23, +22,129,16,23,196,2,27,249,22,147,16,23,198,2,23,204,2,28,248,22,142, +16,23,194,2,192,28,248,22,141,16,193,192,11,11,28,23,193,2,86,97,23, 201,1,23,200,1,23,198,1,23,195,1,192,28,23,200,2,86,97,23,201,1, -23,200,1,23,198,1,23,195,1,11,27,248,22,155,16,23,200,2,28,249,22, -183,9,194,23,201,1,11,28,248,22,151,16,193,250,2,83,203,204,249,22,146, +23,200,1,23,198,1,23,195,1,11,27,248,22,156,16,23,200,2,28,249,22, +183,9,194,23,201,1,11,28,248,22,152,16,193,250,2,83,203,204,249,22,147, 16,200,197,250,2,83,203,204,195,86,95,23,196,1,23,195,1,192,86,94,23, -197,1,28,23,195,2,90,144,42,11,89,146,42,39,11,248,22,149,16,23,197, -2,86,95,23,195,1,23,194,1,27,28,23,198,2,27,248,22,155,16,23,199, +197,1,28,23,195,2,90,144,42,11,89,146,42,39,11,248,22,150,16,23,197, +2,86,95,23,195,1,23,194,1,27,28,23,198,2,27,248,22,156,16,23,199, 2,28,249,22,183,9,23,195,2,23,200,2,86,94,23,193,1,11,28,248,22, -151,16,23,194,2,250,2,83,23,202,2,23,203,2,249,22,146,16,23,200,2, +152,16,23,194,2,250,2,83,23,202,2,23,203,2,249,22,147,16,23,200,2, 23,198,1,250,2,83,23,202,2,23,203,2,23,196,1,11,28,23,193,2,192, -27,28,248,22,128,16,23,196,2,27,249,22,146,16,23,198,2,23,203,2,28, -248,22,141,16,23,194,2,192,28,248,22,140,16,193,192,11,11,28,23,193,2, -192,28,23,199,2,11,27,248,22,155,16,23,200,2,28,249,22,183,9,194,23, -201,1,11,28,248,22,151,16,193,250,2,83,202,203,249,22,146,16,200,197,250, +27,28,248,22,129,16,23,196,2,27,249,22,147,16,23,198,2,23,203,2,28, +248,22,142,16,23,194,2,192,28,248,22,141,16,193,192,11,11,28,23,193,2, +192,28,23,199,2,11,27,248,22,156,16,23,200,2,28,249,22,183,9,194,23, +201,1,11,28,248,22,152,16,193,250,2,83,202,203,249,22,147,16,200,197,250, 2,83,202,203,195,192,28,23,194,2,90,144,42,11,89,146,42,39,11,248,22, -149,16,23,199,2,86,95,23,195,1,23,194,1,27,28,23,197,2,251,2,84, +150,16,23,199,2,86,95,23,195,1,23,194,1,27,28,23,197,2,251,2,84, 23,201,2,23,202,2,23,203,2,23,198,2,11,28,23,193,2,192,27,28,248, -22,128,16,195,27,249,22,146,16,197,201,28,248,22,141,16,23,194,2,192,28, -248,22,140,16,193,192,11,11,28,192,192,28,197,11,251,2,84,201,202,203,198, +22,129,16,195,27,249,22,147,16,197,201,28,248,22,142,16,23,194,2,192,28, +248,22,141,16,193,192,11,11,28,192,192,28,197,11,251,2,84,201,202,203,198, 194,32,87,88,148,8,36,43,60,11,2,50,222,33,88,28,248,22,90,23,197, -2,11,27,249,22,146,16,248,22,154,16,248,22,83,23,201,2,23,198,2,28, -248,22,140,16,23,194,2,250,2,83,196,197,195,27,248,22,185,20,23,199,1, -28,248,22,90,23,194,2,11,27,249,22,146,16,248,22,154,16,248,22,83,23, -198,2,23,200,2,28,248,22,140,16,23,194,2,250,2,83,198,199,195,27,248, -22,185,20,23,196,1,28,248,22,90,23,194,2,11,27,249,22,146,16,248,22, -154,16,248,22,83,23,198,2,23,202,2,28,248,22,140,16,23,194,2,250,2, -83,200,201,195,27,248,22,185,20,23,196,1,28,248,22,90,23,194,2,11,27, -249,22,146,16,248,22,154,16,248,22,83,197,203,28,248,22,140,16,193,250,2, -83,202,203,195,251,2,87,203,204,205,248,22,185,20,198,86,95,28,248,22,128, -16,23,195,2,11,28,28,248,22,162,7,23,195,2,28,248,22,151,16,23,195, -2,10,248,22,152,16,23,195,2,11,11,250,22,132,12,2,7,2,48,23,197, -2,28,23,195,2,28,28,28,248,22,128,16,23,196,2,10,28,248,22,162,7, -23,196,2,28,248,22,151,16,23,196,2,10,248,22,152,16,23,196,2,11,248, -22,151,16,23,196,2,11,11,250,22,132,12,2,7,6,45,45,40,111,114,47, +2,11,27,249,22,147,16,248,22,155,16,248,22,83,23,201,2,23,198,2,28, +248,22,141,16,23,194,2,250,2,83,196,197,195,27,248,22,186,20,23,199,1, +28,248,22,90,23,194,2,11,27,249,22,147,16,248,22,155,16,248,22,83,23, +198,2,23,200,2,28,248,22,141,16,23,194,2,250,2,83,198,199,195,27,248, +22,186,20,23,196,1,28,248,22,90,23,194,2,11,27,249,22,147,16,248,22, +155,16,248,22,83,23,198,2,23,202,2,28,248,22,141,16,23,194,2,250,2, +83,200,201,195,27,248,22,186,20,23,196,1,28,248,22,90,23,194,2,11,27, +249,22,147,16,248,22,155,16,248,22,83,197,203,28,248,22,141,16,193,250,2, +83,202,203,195,251,2,87,203,204,205,248,22,186,20,198,86,95,28,248,22,129, +16,23,195,2,11,28,28,248,22,162,7,23,195,2,28,248,22,152,16,23,195, +2,10,248,22,153,16,23,195,2,11,11,250,22,133,12,2,7,2,48,23,197, +2,28,23,195,2,28,28,28,248,22,129,16,23,196,2,10,28,248,22,162,7, +23,196,2,28,248,22,152,16,23,196,2,10,248,22,153,16,23,196,2,11,248, +22,152,16,23,196,2,11,11,250,22,133,12,2,7,6,45,45,40,111,114,47, 99,32,35,102,32,40,97,110,100,47,99,32,112,97,116,104,45,115,116,114,105, 110,103,63,32,114,101,108,97,116,105,118,101,45,112,97,116,104,63,41,41,23, -198,2,11,28,28,248,22,151,16,23,195,2,90,144,42,11,89,146,42,39,11, -248,22,149,16,23,198,2,249,22,181,9,194,2,49,11,27,249,22,184,8,247, +198,2,11,28,28,248,22,152,16,23,195,2,90,144,42,11,89,146,42,39,11, +248,22,150,16,23,198,2,249,22,181,9,194,2,49,11,27,249,22,184,8,247, 22,183,8,5,4,80,65,84,72,27,28,23,194,2,249,80,143,43,44,249,22, 174,8,23,198,1,7,63,9,86,94,23,194,1,9,27,28,249,22,181,9,247, -22,189,8,2,43,249,22,82,248,22,137,16,5,1,46,23,196,1,23,194,1, +22,189,8,2,43,249,22,82,248,22,138,16,5,1,46,23,196,1,23,194,1, 28,248,22,90,23,194,2,86,97,23,199,1,23,198,1,23,197,1,23,193,1, -11,27,249,22,146,16,248,22,154,16,248,22,83,23,198,2,23,200,2,28,248, -22,140,16,23,194,2,86,95,23,198,1,23,194,1,250,2,83,202,201,195,27, -248,22,185,20,23,196,1,28,248,22,90,23,194,2,86,97,23,201,1,23,200, -1,23,199,1,23,193,1,11,27,249,22,146,16,248,22,154,16,248,22,83,23, -198,2,23,202,2,28,248,22,140,16,23,194,2,86,95,23,200,1,23,194,1, -250,2,83,204,203,195,27,248,22,185,20,23,196,1,28,248,22,90,23,194,2, -86,97,23,203,1,23,202,1,23,201,1,23,193,1,11,27,249,22,146,16,248, -22,154,16,248,22,83,23,198,2,23,204,2,28,248,22,140,16,23,194,2,86, -95,23,202,1,23,194,1,250,2,83,206,205,195,27,248,22,185,20,23,196,1, +11,27,249,22,147,16,248,22,155,16,248,22,83,23,198,2,23,200,2,28,248, +22,141,16,23,194,2,86,95,23,198,1,23,194,1,250,2,83,202,201,195,27, +248,22,186,20,23,196,1,28,248,22,90,23,194,2,86,97,23,201,1,23,200, +1,23,199,1,23,193,1,11,27,249,22,147,16,248,22,155,16,248,22,83,23, +198,2,23,202,2,28,248,22,141,16,23,194,2,86,95,23,200,1,23,194,1, +250,2,83,204,203,195,27,248,22,186,20,23,196,1,28,248,22,90,23,194,2, +86,97,23,203,1,23,202,1,23,201,1,23,193,1,11,27,249,22,147,16,248, +22,155,16,248,22,83,23,198,2,23,204,2,28,248,22,141,16,23,194,2,86, +95,23,202,1,23,194,1,250,2,83,206,205,195,27,248,22,186,20,23,196,1, 28,248,22,90,23,194,2,86,97,23,205,1,23,204,1,23,203,1,23,193,1, -11,27,249,22,146,16,248,22,154,16,248,22,83,197,205,28,248,22,140,16,193, -250,2,83,23,16,23,15,195,251,2,87,23,17,23,16,23,15,248,22,185,20, -198,27,248,22,154,16,23,196,1,28,248,22,140,16,193,250,2,83,199,198,195, +11,27,249,22,147,16,248,22,155,16,248,22,83,197,205,28,248,22,141,16,193, +250,2,83,23,16,23,15,195,251,2,87,23,17,23,16,23,15,248,22,186,20, +198,27,248,22,155,16,23,196,1,28,248,22,141,16,193,250,2,83,199,198,195, 11,250,80,144,42,43,42,196,197,11,250,80,144,42,43,42,196,11,11,32,92, 88,148,8,36,42,58,11,2,50,222,33,94,0,8,35,114,120,35,34,92,34, -34,27,249,22,186,16,23,196,2,23,198,2,28,23,193,2,86,94,23,196,1, -27,248,22,105,23,195,2,27,27,248,22,114,23,197,1,27,249,22,186,16,23, +34,27,249,22,187,16,23,196,2,23,198,2,28,23,193,2,86,94,23,196,1, +27,248,22,105,23,195,2,27,27,248,22,114,23,197,1,27,249,22,187,16,23, 200,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,105,23,195,2, 27,250,2,92,23,203,1,203,248,22,114,23,199,1,27,28,249,22,181,9,247, -22,189,8,2,43,250,22,134,17,2,93,23,198,1,2,51,194,28,249,22,159, -8,194,2,51,249,22,97,203,195,249,22,82,248,22,137,16,195,195,86,95,23, -198,1,23,193,1,27,28,249,22,181,9,247,22,189,8,2,43,250,22,134,17, +22,189,8,2,43,250,22,135,17,2,93,23,198,1,2,51,194,28,249,22,159, +8,194,2,51,249,22,97,203,195,249,22,82,248,22,138,16,195,195,86,95,23, +198,1,23,193,1,27,28,249,22,181,9,247,22,189,8,2,43,250,22,135,17, 2,93,23,198,1,2,51,194,28,249,22,159,8,194,2,51,249,22,97,201,9, -249,22,82,248,22,137,16,195,9,27,28,249,22,181,9,247,22,189,8,2,43, -250,22,134,17,2,93,23,198,1,2,51,194,28,249,22,159,8,194,2,51,249, -22,97,199,195,249,22,82,248,22,137,16,195,195,86,95,23,194,1,23,193,1, -27,28,249,22,181,9,247,22,189,8,2,43,250,22,134,17,2,93,23,200,1, +249,22,82,248,22,138,16,195,9,27,28,249,22,181,9,247,22,189,8,2,43, +250,22,135,17,2,93,23,198,1,2,51,194,28,249,22,159,8,194,2,51,249, +22,97,199,195,249,22,82,248,22,138,16,195,195,86,95,23,194,1,23,193,1, +27,28,249,22,181,9,247,22,189,8,2,43,250,22,135,17,2,93,23,200,1, 2,51,196,28,249,22,159,8,194,2,51,249,22,97,197,9,249,22,82,248,22, -137,16,195,9,86,95,28,248,22,151,8,194,11,28,248,22,162,7,194,11,250, -22,132,12,2,8,6,21,21,40,111,114,47,99,32,98,121,116,101,115,63,32, -115,116,114,105,110,103,63,41,196,28,28,248,22,91,195,249,22,4,22,128,16, -196,11,11,250,22,132,12,2,8,6,14,14,40,108,105,115,116,111,102,32,112, +138,16,195,9,86,95,28,248,22,151,8,194,11,28,248,22,162,7,194,11,250, +22,133,12,2,8,6,21,21,40,111,114,47,99,32,98,121,116,101,115,63,32, +115,116,114,105,110,103,63,41,196,28,28,248,22,91,195,249,22,4,22,129,16, +196,11,11,250,22,133,12,2,8,6,14,14,40,108,105,115,116,111,102,32,112, 97,116,104,63,41,197,250,2,92,195,197,28,248,22,162,7,197,248,22,176,8, 197,196,28,28,248,22,0,23,195,2,249,22,48,23,196,2,39,11,20,13,144, 80,144,39,46,40,26,35,80,144,8,35,47,40,249,22,31,11,80,144,8,37, -46,40,22,159,15,10,22,160,15,10,22,161,15,10,22,162,15,11,22,163,15, -11,22,167,15,10,22,166,15,11,22,168,15,10,22,165,15,10,22,169,15,10, -22,164,15,11,22,170,15,10,22,171,15,10,22,172,15,10,22,173,15,11,22, -174,15,10,22,157,15,11,247,23,194,1,250,22,132,12,2,9,2,52,23,197, -1,86,94,28,248,22,128,16,23,195,2,11,28,28,248,22,162,7,23,195,2, -28,248,22,151,16,23,195,2,10,248,22,152,16,23,195,2,11,11,250,22,132, -12,23,196,2,2,48,23,197,2,28,248,22,151,16,23,195,2,12,251,22,134, -12,23,197,1,2,53,2,46,23,198,1,86,94,28,248,22,128,16,23,195,2, -11,28,28,248,22,162,7,23,195,2,28,248,22,151,16,23,195,2,10,248,22, -152,16,23,195,2,11,11,250,22,132,12,23,196,2,2,48,23,197,2,28,248, -22,151,16,23,195,2,12,251,22,134,12,23,197,1,2,53,2,46,23,198,1, -86,95,28,248,22,128,16,23,195,2,11,28,28,248,22,162,7,23,195,2,28, -248,22,151,16,23,195,2,10,248,22,152,16,23,195,2,11,11,250,22,132,12, -23,196,2,2,48,23,197,2,28,248,22,151,16,23,195,2,86,94,23,194,1, -11,251,22,134,12,23,197,2,2,53,2,46,23,198,1,249,22,3,20,20,94, +46,40,22,160,15,10,22,161,15,10,22,162,15,10,22,163,15,11,22,164,15, +11,22,168,15,10,22,167,15,11,22,169,15,10,22,166,15,10,22,170,15,10, +22,165,15,11,22,171,15,10,22,172,15,10,22,173,15,10,22,174,15,11,22, +175,15,10,22,158,15,11,247,23,194,1,250,22,133,12,2,9,2,52,23,197, +1,86,94,28,248,22,129,16,23,195,2,11,28,28,248,22,162,7,23,195,2, +28,248,22,152,16,23,195,2,10,248,22,153,16,23,195,2,11,11,250,22,133, +12,23,196,2,2,48,23,197,2,28,248,22,152,16,23,195,2,12,251,22,135, +12,23,197,1,2,53,2,46,23,198,1,86,94,28,248,22,129,16,23,195,2, +11,28,28,248,22,162,7,23,195,2,28,248,22,152,16,23,195,2,10,248,22, +153,16,23,195,2,11,11,250,22,133,12,23,196,2,2,48,23,197,2,28,248, +22,152,16,23,195,2,12,251,22,135,12,23,197,1,2,53,2,46,23,198,1, +86,95,28,248,22,129,16,23,195,2,11,28,28,248,22,162,7,23,195,2,28, +248,22,152,16,23,195,2,10,248,22,153,16,23,195,2,11,11,250,22,133,12, +23,196,2,2,48,23,197,2,28,248,22,152,16,23,195,2,86,94,23,194,1, +11,251,22,135,12,23,197,2,2,53,2,46,23,198,1,249,22,3,20,20,94, 88,148,8,36,40,50,11,9,223,2,33,98,23,195,1,23,197,1,28,28,248, -22,0,23,195,2,249,22,48,23,196,2,40,11,12,250,22,132,12,23,196,1, -2,54,23,197,1,86,94,28,248,22,128,16,23,194,2,11,28,28,248,22,162, -7,23,194,2,28,248,22,151,16,23,194,2,10,248,22,152,16,23,194,2,11, -11,250,22,132,12,2,15,2,48,23,196,2,28,248,22,151,16,23,194,2,12, -251,22,134,12,2,15,2,53,2,46,23,197,1,86,97,28,248,22,128,16,23, -196,2,11,28,28,248,22,162,7,23,196,2,28,248,22,151,16,23,196,2,10, -248,22,152,16,23,196,2,11,11,250,22,132,12,2,15,2,48,23,198,2,28, -248,22,151,16,23,196,2,11,251,22,134,12,2,15,2,53,2,46,23,199,2, +22,0,23,195,2,249,22,48,23,196,2,40,11,12,250,22,133,12,23,196,1, +2,54,23,197,1,86,94,28,248,22,129,16,23,194,2,11,28,28,248,22,162, +7,23,194,2,28,248,22,152,16,23,194,2,10,248,22,153,16,23,194,2,11, +11,250,22,133,12,2,15,2,48,23,196,2,28,248,22,152,16,23,194,2,12, +251,22,135,12,2,15,2,53,2,46,23,197,1,86,97,28,248,22,129,16,23, +196,2,11,28,28,248,22,162,7,23,196,2,28,248,22,152,16,23,196,2,10, +248,22,153,16,23,196,2,11,11,250,22,133,12,2,15,2,48,23,198,2,28, +248,22,152,16,23,196,2,11,251,22,135,12,2,15,2,53,2,46,23,199,2, 249,22,3,32,0,88,148,8,36,40,49,11,9,222,33,101,23,198,2,28,28, -248,22,0,23,195,2,249,22,48,23,196,2,40,11,11,250,22,132,12,2,15, +248,22,0,23,195,2,249,22,48,23,196,2,40,11,11,250,22,133,12,2,15, 2,54,23,197,2,252,80,143,44,52,23,199,1,23,200,1,23,201,1,11,11, -86,94,28,248,22,128,16,23,194,2,11,28,28,248,22,162,7,23,194,2,28, -248,22,151,16,23,194,2,10,248,22,152,16,23,194,2,11,11,250,22,132,12, -2,17,2,48,23,196,2,28,248,22,151,16,23,194,2,12,251,22,134,12,2, -17,2,53,2,46,23,197,1,86,99,28,248,22,128,16,23,197,2,11,28,28, -248,22,162,7,23,197,2,28,248,22,151,16,23,197,2,10,248,22,152,16,23, -197,2,11,11,250,22,132,12,2,17,2,48,23,199,2,28,248,22,151,16,23, -197,2,11,251,22,134,12,2,17,2,53,2,46,23,200,2,28,248,22,128,16, -23,198,2,11,28,28,248,22,162,7,23,198,2,28,248,22,151,16,23,198,2, -10,248,22,152,16,23,198,2,11,11,250,22,132,12,2,17,2,48,23,200,2, -28,248,22,151,16,23,198,2,11,251,22,134,12,2,17,2,53,2,46,23,201, +86,94,28,248,22,129,16,23,194,2,11,28,28,248,22,162,7,23,194,2,28, +248,22,152,16,23,194,2,10,248,22,153,16,23,194,2,11,11,250,22,133,12, +2,17,2,48,23,196,2,28,248,22,152,16,23,194,2,12,251,22,135,12,2, +17,2,53,2,46,23,197,1,86,99,28,248,22,129,16,23,197,2,11,28,28, +248,22,162,7,23,197,2,28,248,22,152,16,23,197,2,10,248,22,153,16,23, +197,2,11,11,250,22,133,12,2,17,2,48,23,199,2,28,248,22,152,16,23, +197,2,11,251,22,135,12,2,17,2,53,2,46,23,200,2,28,248,22,129,16, +23,198,2,11,28,28,248,22,162,7,23,198,2,28,248,22,152,16,23,198,2, +10,248,22,153,16,23,198,2,11,11,250,22,133,12,2,17,2,48,23,200,2, +28,248,22,152,16,23,198,2,11,251,22,135,12,2,17,2,53,2,46,23,201, 2,249,22,3,32,0,88,148,8,36,40,49,11,9,222,33,103,23,200,2,28, -28,248,22,0,23,195,2,249,22,48,23,196,2,40,11,11,250,22,132,12,2, +28,248,22,0,23,195,2,249,22,48,23,196,2,40,11,11,250,22,133,12,2, 17,2,54,23,197,2,252,80,143,44,52,23,199,1,23,202,1,23,203,1,23, -201,1,23,200,1,27,248,22,169,16,2,55,28,248,22,153,16,23,194,2,248, -22,156,16,23,194,1,28,248,22,152,16,23,194,2,90,144,42,11,89,146,42, -39,11,248,22,149,16,249,22,154,16,250,80,144,49,43,42,248,22,169,16,2, -56,11,11,248,22,169,16,2,57,86,95,23,195,1,23,194,1,248,22,156,16, -249,22,154,16,23,199,1,23,196,1,27,250,80,144,44,43,42,248,22,169,16, -2,56,23,197,1,10,28,23,193,2,248,22,156,16,23,194,1,11,249,80,144, -41,55,40,39,80,144,41,8,40,42,27,248,22,169,16,2,58,28,248,22,153, -16,23,194,2,248,22,156,16,23,194,1,28,248,22,152,16,23,194,2,90,144, -42,11,89,146,42,39,11,248,22,149,16,249,22,154,16,250,80,144,49,43,42, -248,22,169,16,2,56,11,11,248,22,169,16,2,57,86,95,23,195,1,23,194, -1,248,22,156,16,249,22,154,16,23,199,1,23,196,1,27,250,80,144,44,43, -42,248,22,169,16,2,56,23,197,1,10,28,23,193,2,248,22,156,16,23,194, +201,1,23,200,1,27,248,22,170,16,2,55,28,248,22,154,16,23,194,2,248, +22,157,16,23,194,1,28,248,22,153,16,23,194,2,90,144,42,11,89,146,42, +39,11,248,22,150,16,249,22,155,16,250,80,144,49,43,42,248,22,170,16,2, +56,11,11,248,22,170,16,2,57,86,95,23,195,1,23,194,1,248,22,157,16, +249,22,155,16,23,199,1,23,196,1,27,250,80,144,44,43,42,248,22,170,16, +2,56,23,197,1,10,28,23,193,2,248,22,157,16,23,194,1,11,249,80,144, +41,55,40,39,80,144,41,8,40,42,27,248,22,170,16,2,58,28,248,22,154, +16,23,194,2,248,22,157,16,23,194,1,28,248,22,153,16,23,194,2,90,144, +42,11,89,146,42,39,11,248,22,150,16,249,22,155,16,250,80,144,49,43,42, +248,22,170,16,2,56,11,11,248,22,170,16,2,57,86,95,23,195,1,23,194, +1,248,22,157,16,249,22,155,16,23,199,1,23,196,1,27,250,80,144,44,43, +42,248,22,170,16,2,56,23,197,1,10,28,23,193,2,248,22,157,16,23,194, 1,11,249,80,144,41,55,40,40,80,144,41,8,41,42,27,20,13,144,80,144, 40,46,40,26,35,80,144,8,36,47,40,249,22,31,11,80,144,8,38,46,40, -22,159,15,10,22,160,15,10,22,161,15,10,22,162,15,11,22,163,15,11,22, -167,15,10,22,166,15,11,22,168,15,10,22,165,15,10,22,169,15,10,22,164, -15,11,22,170,15,10,22,171,15,10,22,172,15,10,22,173,15,11,22,174,15, -10,22,157,15,11,247,22,157,6,28,248,22,152,2,193,192,11,27,28,23,195, -2,249,22,146,16,23,197,1,6,11,11,99,111,110,102,105,103,46,114,107,116, -100,86,94,23,195,1,11,27,28,23,194,2,28,248,22,140,16,23,195,2,249, +22,160,15,10,22,161,15,10,22,162,15,10,22,163,15,11,22,164,15,11,22, +168,15,10,22,167,15,11,22,169,15,10,22,166,15,10,22,170,15,10,22,165, +15,11,22,171,15,10,22,172,15,10,22,173,15,10,22,174,15,11,22,175,15, +10,22,158,15,11,247,22,157,6,28,248,22,152,2,193,192,11,27,28,23,195, +2,249,22,147,16,23,197,1,6,11,11,99,111,110,102,105,103,46,114,107,116, +100,86,94,23,195,1,11,27,28,23,194,2,28,248,22,141,16,23,195,2,249, 22,149,6,23,196,1,80,144,43,8,42,42,11,11,28,192,192,21,17,1,0, 250,22,161,2,23,196,1,2,59,247,22,180,8,250,22,161,2,195,2,59,247, -22,180,8,28,248,22,162,7,23,195,2,27,248,22,136,16,23,196,1,28,248, -22,153,16,23,194,2,192,249,22,154,16,23,195,1,27,247,80,144,43,54,42, -28,23,193,2,192,247,22,170,16,28,248,22,151,8,23,195,2,27,248,22,137, -16,23,196,1,28,248,22,153,16,23,194,2,192,249,22,154,16,23,195,1,27, -247,80,144,43,54,42,28,23,193,2,192,247,22,170,16,28,248,22,128,16,23, -195,2,28,248,22,153,16,23,195,2,193,249,22,154,16,23,196,1,27,247,80, -144,42,54,42,28,23,193,2,192,247,22,170,16,193,27,248,22,169,16,2,55, -28,248,22,153,16,23,194,2,248,22,156,16,23,194,1,28,248,22,152,16,23, -194,2,90,144,42,11,89,146,42,39,11,248,22,149,16,249,22,154,16,250,80, -144,49,43,42,248,22,169,16,2,56,11,11,248,22,169,16,2,57,86,95,23, -195,1,23,194,1,248,22,156,16,249,22,154,16,23,199,1,23,196,1,27,250, -80,144,44,43,42,248,22,169,16,2,56,23,197,1,10,28,23,193,2,248,22, -156,16,23,194,1,11,28,248,22,153,16,23,195,2,193,249,22,154,16,23,196, +22,180,8,28,248,22,162,7,23,195,2,27,248,22,137,16,23,196,1,28,248, +22,154,16,23,194,2,192,249,22,155,16,23,195,1,27,247,80,144,43,54,42, +28,23,193,2,192,247,22,171,16,28,248,22,151,8,23,195,2,27,248,22,138, +16,23,196,1,28,248,22,154,16,23,194,2,192,249,22,155,16,23,195,1,27, +247,80,144,43,54,42,28,23,193,2,192,247,22,171,16,28,248,22,129,16,23, +195,2,28,248,22,154,16,23,195,2,193,249,22,155,16,23,196,1,27,247,80, +144,42,54,42,28,23,193,2,192,247,22,171,16,193,27,248,22,170,16,2,55, +28,248,22,154,16,23,194,2,248,22,157,16,23,194,1,28,248,22,153,16,23, +194,2,90,144,42,11,89,146,42,39,11,248,22,150,16,249,22,155,16,250,80, +144,49,43,42,248,22,170,16,2,56,11,11,248,22,170,16,2,57,86,95,23, +195,1,23,194,1,248,22,157,16,249,22,155,16,23,199,1,23,196,1,27,250, +80,144,44,43,42,248,22,170,16,2,56,23,197,1,10,28,23,193,2,248,22, +157,16,23,194,1,11,28,248,22,154,16,23,195,2,193,249,22,155,16,23,196, 1,27,249,80,144,44,55,40,39,80,144,44,8,43,42,28,23,193,2,192,247, -22,170,16,28,248,22,153,16,23,195,2,248,22,156,16,23,195,1,28,248,22, -152,16,23,195,2,90,144,42,11,89,146,42,39,11,248,22,149,16,249,22,154, -16,250,80,144,48,43,42,248,22,169,16,2,56,11,11,248,22,169,16,2,57, -86,95,23,195,1,23,194,1,248,22,156,16,249,22,154,16,23,200,1,23,196, -1,27,250,80,144,43,43,42,248,22,169,16,2,56,23,198,1,10,28,23,193, -2,248,22,156,16,23,194,1,11,28,248,22,90,23,196,2,9,28,248,22,83, -23,196,2,249,22,82,27,248,22,184,20,23,199,2,28,248,22,162,7,23,194, -2,27,248,22,136,16,23,195,1,28,248,22,153,16,23,194,2,192,249,22,154, -16,23,195,1,27,247,80,144,46,54,42,28,23,193,2,192,247,22,170,16,28, -248,22,151,8,23,194,2,27,248,22,137,16,23,195,1,28,248,22,153,16,23, -194,2,192,249,22,154,16,23,195,1,27,247,80,144,46,54,42,28,23,193,2, -192,247,22,170,16,28,248,22,128,16,23,194,2,28,248,22,153,16,23,194,2, -192,249,22,154,16,23,195,1,27,247,80,144,45,54,42,28,23,193,2,192,247, -22,170,16,192,27,248,22,185,20,23,199,1,28,248,22,90,23,194,2,86,95, +22,171,16,28,248,22,154,16,23,195,2,248,22,157,16,23,195,1,28,248,22, +153,16,23,195,2,90,144,42,11,89,146,42,39,11,248,22,150,16,249,22,155, +16,250,80,144,48,43,42,248,22,170,16,2,56,11,11,248,22,170,16,2,57, +86,95,23,195,1,23,194,1,248,22,157,16,249,22,155,16,23,200,1,23,196, +1,27,250,80,144,43,43,42,248,22,170,16,2,56,23,198,1,10,28,23,193, +2,248,22,157,16,23,194,1,11,28,248,22,90,23,196,2,9,28,248,22,83, +23,196,2,249,22,82,27,248,22,185,20,23,199,2,28,248,22,162,7,23,194, +2,27,248,22,137,16,23,195,1,28,248,22,154,16,23,194,2,192,249,22,155, +16,23,195,1,27,247,80,144,46,54,42,28,23,193,2,192,247,22,171,16,28, +248,22,151,8,23,194,2,27,248,22,138,16,23,195,1,28,248,22,154,16,23, +194,2,192,249,22,155,16,23,195,1,27,247,80,144,46,54,42,28,23,193,2, +192,247,22,171,16,28,248,22,129,16,23,194,2,28,248,22,154,16,23,194,2, +192,249,22,155,16,23,195,1,27,247,80,144,45,54,42,28,23,193,2,192,247, +22,171,16,192,27,248,22,186,20,23,199,1,28,248,22,90,23,194,2,86,95, 23,197,1,23,193,1,9,28,248,22,83,23,194,2,249,22,82,248,80,144,45, -60,42,248,22,184,20,23,197,2,27,248,22,185,20,23,197,1,28,248,22,90, +60,42,248,22,185,20,23,197,2,27,248,22,186,20,23,197,1,28,248,22,90, 23,194,2,86,95,23,200,1,23,193,1,9,28,248,22,83,23,194,2,249,22, -82,248,80,144,48,60,42,248,22,184,20,23,197,2,249,80,144,49,8,44,42, -23,204,1,248,22,185,20,23,198,1,249,22,97,23,202,2,249,80,144,49,8, -44,42,23,204,1,248,22,185,20,23,198,1,249,22,97,23,199,2,27,248,22, -185,20,23,197,1,28,248,22,90,23,194,2,86,95,23,200,1,23,193,1,9, -28,248,22,83,23,194,2,249,22,82,248,80,144,48,60,42,248,22,184,20,23, -197,2,249,80,144,49,8,44,42,23,204,1,248,22,185,20,23,198,1,249,22, -97,23,202,2,249,80,144,49,8,44,42,23,204,1,248,22,185,20,23,198,1, -249,22,97,23,196,2,27,248,22,185,20,23,199,1,28,248,22,90,23,194,2, -9,28,248,22,83,23,194,2,249,22,82,248,80,144,45,60,42,248,22,184,20, -23,197,2,27,248,22,185,20,23,197,1,28,248,22,90,23,194,2,86,95,23, +82,248,80,144,48,60,42,248,22,185,20,23,197,2,249,80,144,49,8,44,42, +23,204,1,248,22,186,20,23,198,1,249,22,97,23,202,2,249,80,144,49,8, +44,42,23,204,1,248,22,186,20,23,198,1,249,22,97,23,199,2,27,248,22, +186,20,23,197,1,28,248,22,90,23,194,2,86,95,23,200,1,23,193,1,9, +28,248,22,83,23,194,2,249,22,82,248,80,144,48,60,42,248,22,185,20,23, +197,2,249,80,144,49,8,44,42,23,204,1,248,22,186,20,23,198,1,249,22, +97,23,202,2,249,80,144,49,8,44,42,23,204,1,248,22,186,20,23,198,1, +249,22,97,23,196,2,27,248,22,186,20,23,199,1,28,248,22,90,23,194,2, +9,28,248,22,83,23,194,2,249,22,82,248,80,144,45,60,42,248,22,185,20, +23,197,2,27,248,22,186,20,23,197,1,28,248,22,90,23,194,2,86,95,23, 200,1,23,193,1,9,28,248,22,83,23,194,2,249,22,82,248,80,144,48,60, -42,248,22,184,20,23,197,2,249,80,144,49,8,44,42,23,204,1,248,22,185, +42,248,22,185,20,23,197,2,249,80,144,49,8,44,42,23,204,1,248,22,186, 20,23,198,1,249,22,97,23,202,2,249,80,144,49,8,44,42,23,204,1,248, -22,185,20,23,198,1,249,22,97,23,199,2,27,248,22,185,20,23,197,1,28, +22,186,20,23,198,1,249,22,97,23,199,2,27,248,22,186,20,23,197,1,28, 248,22,90,23,194,2,9,28,248,22,83,23,194,2,249,22,82,248,80,144,48, -60,42,248,22,184,20,23,197,2,249,80,144,49,8,44,42,23,204,1,248,22, -185,20,23,198,1,249,22,97,23,202,2,249,80,144,49,8,44,42,23,204,1, -248,22,185,20,23,198,1,27,250,22,161,2,23,198,1,23,199,1,11,28,192, -249,80,144,42,8,44,42,198,194,196,27,248,22,169,16,2,58,28,248,22,153, -16,23,194,2,248,22,156,16,23,194,1,28,248,22,152,16,23,194,2,90,144, -42,11,89,146,42,39,11,248,22,149,16,249,22,154,16,250,80,144,49,43,42, -248,22,169,16,2,56,11,11,248,22,169,16,2,57,86,95,23,195,1,23,194, -1,248,22,156,16,249,22,154,16,23,199,1,23,196,1,27,250,80,144,44,43, -42,248,22,169,16,2,56,23,197,1,10,28,23,193,2,248,22,156,16,23,194, +60,42,248,22,185,20,23,197,2,249,80,144,49,8,44,42,23,204,1,248,22, +186,20,23,198,1,249,22,97,23,202,2,249,80,144,49,8,44,42,23,204,1, +248,22,186,20,23,198,1,27,250,22,161,2,23,198,1,23,199,1,11,28,192, +249,80,144,42,8,44,42,198,194,196,27,248,22,170,16,2,58,28,248,22,154, +16,23,194,2,248,22,157,16,23,194,1,28,248,22,153,16,23,194,2,90,144, +42,11,89,146,42,39,11,248,22,150,16,249,22,155,16,250,80,144,49,43,42, +248,22,170,16,2,56,11,11,248,22,170,16,2,57,86,95,23,195,1,23,194, +1,248,22,157,16,249,22,155,16,23,199,1,23,196,1,27,250,80,144,44,43, +42,248,22,170,16,2,56,23,197,1,10,28,23,193,2,248,22,157,16,23,194, 1,11,27,248,80,144,41,58,42,249,80,144,43,55,40,40,80,144,43,8,45, 42,27,27,250,22,161,2,23,198,2,72,108,105,110,107,115,45,102,105,108,101, -11,27,28,23,194,2,23,194,1,86,94,23,194,1,249,22,146,16,27,250,22, +11,27,28,23,194,2,23,194,1,86,94,23,194,1,249,22,147,16,27,250,22, 161,2,23,202,2,71,115,104,97,114,101,45,100,105,114,11,28,192,192,249,22, -146,16,64,117,112,6,5,5,115,104,97,114,101,2,60,28,248,22,162,7,23, -194,2,27,248,22,136,16,23,195,1,28,248,22,153,16,23,194,2,192,249,22, -154,16,23,195,1,27,247,80,144,47,54,42,28,23,193,2,192,247,22,170,16, -28,248,22,151,8,23,194,2,27,248,22,137,16,23,195,1,28,248,22,153,16, -23,194,2,192,249,22,154,16,23,195,1,27,247,80,144,47,54,42,28,23,193, -2,192,247,22,170,16,28,248,22,128,16,23,194,2,28,248,22,153,16,23,194, -2,192,249,22,154,16,23,195,1,27,247,80,144,46,54,42,28,23,193,2,192, -247,22,170,16,192,250,22,97,248,22,92,11,28,247,22,177,16,28,247,22,178, -16,248,22,92,250,22,146,16,248,22,169,16,2,61,250,22,161,2,23,204,2, -2,59,247,22,180,8,2,60,9,9,28,247,22,178,16,250,80,144,47,8,23, +147,16,64,117,112,6,5,5,115,104,97,114,101,2,60,28,248,22,162,7,23, +194,2,27,248,22,137,16,23,195,1,28,248,22,154,16,23,194,2,192,249,22, +155,16,23,195,1,27,247,80,144,47,54,42,28,23,193,2,192,247,22,171,16, +28,248,22,151,8,23,194,2,27,248,22,138,16,23,195,1,28,248,22,154,16, +23,194,2,192,249,22,155,16,23,195,1,27,247,80,144,47,54,42,28,23,193, +2,192,247,22,171,16,28,248,22,129,16,23,194,2,28,248,22,154,16,23,194, +2,192,249,22,155,16,23,195,1,27,247,80,144,46,54,42,28,23,193,2,192, +247,22,171,16,192,250,22,97,248,22,92,11,28,247,22,178,16,28,247,22,179, +16,248,22,92,250,22,147,16,248,22,170,16,2,61,250,22,161,2,23,204,2, +2,59,247,22,180,8,2,60,9,9,28,247,22,179,16,250,80,144,47,8,23, 42,23,200,1,1,18,108,105,110,107,115,45,115,101,97,114,99,104,45,102,105, -108,101,115,248,22,92,23,200,1,9,248,22,188,13,23,194,1,249,22,14,80, -144,41,8,26,41,28,248,22,144,13,23,197,2,32,0,88,148,8,36,39,44, +108,101,115,248,22,92,23,200,1,9,248,22,189,13,23,194,1,249,22,14,80, +144,41,8,26,41,28,248,22,145,13,23,197,2,32,0,88,148,8,36,39,44, 11,9,222,11,20,20,94,88,148,8,36,39,46,11,9,223,3,33,121,23,196, 1,32,123,88,148,39,40,59,11,2,50,222,33,124,90,144,42,11,89,146,42, -39,11,248,22,149,16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,128, -16,23,194,2,28,248,22,141,16,23,194,2,249,22,154,6,23,195,1,32,0, +39,11,248,22,150,16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,129, +16,23,194,2,28,248,22,142,16,23,194,2,249,22,154,6,23,195,1,32,0, 88,148,8,36,39,44,11,9,222,11,90,144,42,11,89,146,42,39,11,248,22, -149,16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,128,16,23,194,2, -28,248,22,141,16,23,194,2,249,22,154,6,23,195,1,32,0,88,148,8,36, -39,44,11,9,222,11,90,144,42,11,89,146,42,39,11,248,22,149,16,23,197, -1,86,95,23,195,1,23,194,1,28,248,22,128,16,23,194,2,28,248,22,141, +150,16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,129,16,23,194,2, +28,248,22,142,16,23,194,2,249,22,154,6,23,195,1,32,0,88,148,8,36, +39,44,11,9,222,11,90,144,42,11,89,146,42,39,11,248,22,150,16,23,197, +1,86,95,23,195,1,23,194,1,28,248,22,129,16,23,194,2,28,248,22,142, 16,23,194,2,249,22,154,6,23,195,1,32,0,88,148,8,36,39,44,11,9, -222,11,90,144,42,11,89,146,42,39,11,248,22,149,16,23,197,1,86,95,23, -195,1,23,194,1,28,248,22,128,16,23,194,2,28,248,22,141,16,23,194,2, +222,11,90,144,42,11,89,146,42,39,11,248,22,150,16,23,197,1,86,95,23, +195,1,23,194,1,28,248,22,129,16,23,194,2,28,248,22,142,16,23,194,2, 249,22,154,6,23,195,1,32,0,88,148,8,36,39,44,11,9,222,11,248,2, 123,23,194,1,11,11,11,11,32,125,88,148,8,36,40,58,11,2,50,222,33, 126,27,249,22,172,6,8,128,128,23,196,2,28,248,22,157,7,23,194,2,9, @@ -480,7 +480,7 @@ 2,28,248,22,157,7,23,194,2,9,249,22,82,23,195,1,27,249,22,172,6, 8,128,128,23,205,2,28,248,22,157,7,23,194,2,9,249,22,82,23,195,1, 248,2,125,23,206,1,27,249,22,172,6,8,128,128,23,196,2,28,248,22,151, -8,23,194,2,28,249,22,173,20,248,22,164,21,23,196,2,8,128,128,249,22, +8,23,194,2,28,249,22,174,20,248,22,165,21,23,196,2,8,128,128,249,22, 1,22,163,8,249,22,82,23,197,1,27,249,22,172,6,8,128,128,23,201,2, 28,248,22,157,7,23,194,2,9,249,22,82,23,195,1,27,249,22,172,6,8, 128,128,23,204,2,28,248,22,157,7,23,194,2,9,249,22,82,23,195,1,27, @@ -489,57 +489,57 @@ 194,2,9,249,22,82,23,195,1,248,2,125,23,211,1,192,192,248,22,142,6, 23,194,1,20,13,144,80,144,40,8,28,40,80,144,40,8,46,42,27,28,249, 22,134,9,248,22,189,8,2,62,41,90,144,42,11,89,146,42,39,11,248,22, -149,16,23,198,2,86,95,23,195,1,23,194,1,28,248,22,128,16,23,194,2, -28,248,22,141,16,23,194,2,249,22,154,6,23,195,1,32,0,88,148,8,36, -39,44,11,9,222,11,90,144,42,11,89,146,42,39,11,248,22,149,16,23,197, -1,86,95,23,195,1,23,194,1,28,248,22,128,16,23,194,2,28,248,22,141, +150,16,23,198,2,86,95,23,195,1,23,194,1,28,248,22,129,16,23,194,2, +28,248,22,142,16,23,194,2,249,22,154,6,23,195,1,32,0,88,148,8,36, +39,44,11,9,222,11,90,144,42,11,89,146,42,39,11,248,22,150,16,23,197, +1,86,95,23,195,1,23,194,1,28,248,22,129,16,23,194,2,28,248,22,142, 16,23,194,2,249,22,154,6,23,195,1,32,0,88,148,8,36,39,44,11,9, -222,11,90,144,42,11,89,146,42,39,11,248,22,149,16,23,197,1,86,95,23, -195,1,23,194,1,28,248,22,128,16,23,194,2,28,248,22,141,16,23,194,2, +222,11,90,144,42,11,89,146,42,39,11,248,22,150,16,23,197,1,86,95,23, +195,1,23,194,1,28,248,22,129,16,23,194,2,28,248,22,142,16,23,194,2, 249,22,154,6,23,195,1,32,0,88,148,8,36,39,44,11,9,222,11,90,144, -42,11,89,146,42,39,11,248,22,149,16,23,197,1,86,95,23,195,1,23,194, -1,28,248,22,128,16,23,194,2,28,248,22,141,16,23,194,2,249,22,154,6, +42,11,89,146,42,39,11,248,22,150,16,23,197,1,86,95,23,195,1,23,194, +1,28,248,22,129,16,23,194,2,28,248,22,142,16,23,194,2,249,22,154,6, 23,195,1,32,0,88,148,8,36,39,44,11,9,222,11,248,2,123,23,194,1, 86,94,23,193,1,11,86,94,23,193,1,11,86,94,23,193,1,11,86,94,23, -193,1,11,11,28,248,22,140,16,23,195,2,27,28,249,22,134,9,248,22,189, +193,1,11,11,28,248,22,141,16,23,195,2,27,28,249,22,134,9,248,22,189, 8,2,62,41,249,22,154,6,23,197,2,32,0,88,148,8,36,39,44,11,9, 222,11,11,86,94,28,23,194,2,248,22,156,6,23,195,1,86,94,23,194,1, 11,249,22,82,27,248,22,133,6,23,199,1,250,22,44,22,35,88,148,39,39, 8,24,11,9,223,3,33,127,20,20,94,88,148,8,36,39,46,11,9,223,3, 33,128,2,23,196,1,194,249,22,82,11,194,28,28,23,195,2,28,248,22,84, -23,196,2,248,22,178,9,249,22,190,14,39,248,22,185,20,23,199,2,11,11, +23,196,2,248,22,178,9,249,22,191,14,39,248,22,186,20,23,199,2,11,11, 194,249,22,12,20,20,94,88,148,8,32,39,61,16,4,39,8,128,80,8,240, 0,64,0,0,39,9,224,2,3,33,129,2,23,196,1,80,144,41,8,26,41, 28,192,248,22,178,9,248,22,83,194,10,28,192,248,22,178,9,248,22,83,194, -10,86,95,28,248,22,165,12,23,198,2,27,247,22,157,12,28,249,22,147,12, -23,195,2,2,63,251,22,153,12,23,197,1,2,63,250,22,146,8,6,42,42, +10,86,95,28,248,22,166,12,23,198,2,27,247,22,158,12,28,249,22,148,12, +23,195,2,2,63,251,22,154,12,23,197,1,2,63,250,22,146,8,6,42,42, 101,114,114,111,114,32,114,101,97,100,105,110,103,32,99,111,108,108,101,99,116, 105,111,110,32,108,105,110,107,115,32,102,105,108,101,32,126,115,58,32,126,97, -23,201,2,248,22,161,12,23,206,2,247,22,27,86,94,23,193,1,11,11,28, +23,201,2,248,22,162,12,23,206,2,247,22,27,86,94,23,193,1,11,11,28, 23,195,2,250,22,159,2,80,144,45,8,25,41,23,196,1,249,22,82,23,200, -1,21,17,0,0,86,95,23,195,1,23,193,1,11,28,248,22,165,12,23,198, +1,21,17,0,0,86,95,23,195,1,23,193,1,11,28,248,22,166,12,23,198, 2,86,94,23,197,1,248,23,195,1,247,22,141,2,196,88,148,39,40,58,8, 240,0,0,0,2,9,226,0,3,2,1,33,133,2,20,20,94,248,22,157,6, -23,194,2,28,248,22,157,7,248,22,157,6,23,195,1,11,248,22,128,12,6, +23,194,2,28,248,22,157,7,248,22,157,6,23,195,1,11,248,22,129,12,6, 30,30,101,120,112,101,99,116,101,100,32,97,32,115,105,110,103,108,101,32,83, 45,101,120,112,114,101,115,115,105,111,110,248,22,142,6,23,194,1,28,248,22, -91,193,28,28,249,22,169,20,41,248,22,96,195,10,249,22,169,20,42,248,22, +91,193,28,28,249,22,170,20,41,248,22,96,195,10,249,22,170,20,42,248,22, 96,195,28,28,248,22,162,7,248,22,83,194,10,28,249,22,181,9,2,64,248, 22,83,195,10,249,22,181,9,2,65,248,22,83,195,28,27,248,22,105,194,28, -248,22,128,16,193,10,28,248,22,162,7,193,28,248,22,151,16,193,10,248,22, -152,16,193,11,28,248,22,90,248,22,107,194,10,248,22,135,17,248,22,114,194, -11,11,11,11,28,248,22,141,16,249,22,146,16,23,197,2,23,198,2,27,248, -22,70,248,22,132,16,23,198,1,250,22,159,2,23,197,2,23,196,2,249,22, +248,22,129,16,193,10,28,248,22,162,7,193,28,248,22,152,16,193,10,248,22, +153,16,193,11,28,248,22,90,248,22,107,194,10,248,22,136,17,248,22,114,194, +11,11,11,11,28,248,22,142,16,249,22,147,16,23,197,2,23,198,2,27,248, +22,70,248,22,133,16,23,198,1,250,22,159,2,23,197,2,23,196,2,249,22, 82,23,200,1,250,22,161,2,23,202,1,23,201,1,9,12,250,22,159,2,23, 196,1,23,198,1,249,22,82,23,199,1,23,201,1,28,28,248,22,90,248,22, -107,23,197,2,10,249,22,190,16,248,22,114,23,198,2,247,22,180,8,27,248, -22,156,16,249,22,154,16,248,22,105,23,200,2,23,198,1,28,249,22,181,9, -248,22,184,20,23,199,2,2,65,86,94,23,196,1,249,22,3,20,20,94,88, -148,8,36,40,56,11,9,224,2,3,33,138,2,23,196,1,248,22,159,16,23, -196,1,28,249,22,181,9,248,22,184,20,23,199,2,2,64,86,94,23,196,1, +107,23,197,2,10,249,22,191,16,248,22,114,23,198,2,247,22,180,8,27,248, +22,157,16,249,22,155,16,248,22,105,23,200,2,23,198,1,28,249,22,181,9, +248,22,185,20,23,199,2,2,65,86,94,23,196,1,249,22,3,20,20,94,88, +148,8,36,40,56,11,9,224,2,3,33,138,2,23,196,1,248,22,160,16,23, +196,1,28,249,22,181,9,248,22,185,20,23,199,2,2,64,86,94,23,196,1, 86,94,28,250,22,161,2,23,197,2,11,11,11,250,22,159,2,23,197,2,11, 9,249,22,167,2,23,196,2,20,20,95,88,148,8,36,41,53,11,9,224,2, -3,33,139,2,23,196,1,23,195,1,27,248,22,70,248,22,184,20,23,199,1, +3,33,139,2,23,196,1,23,195,1,27,248,22,70,248,22,185,20,23,199,1, 250,22,159,2,23,198,2,23,196,2,249,22,82,248,22,132,2,23,200,1,250, 22,161,2,23,203,1,23,201,1,9,12,250,22,159,2,23,196,1,23,197,1, 248,22,98,23,199,1,27,28,23,195,2,28,248,22,83,23,196,2,27,249,22, @@ -547,8 +547,8 @@ 39,47,11,9,223,3,33,135,2,20,20,94,88,148,8,36,39,46,11,9,223, 3,33,136,2,23,196,1,9,9,86,94,28,28,248,22,91,23,194,2,249,22, 4,32,0,88,148,8,36,40,48,11,9,222,33,137,2,23,195,2,11,11,248, -22,128,12,6,18,18,105,108,108,45,102,111,114,109,101,100,32,99,111,110,116, -101,110,116,27,247,22,141,2,27,90,144,42,11,89,146,42,39,11,248,22,149, +22,129,12,6,18,18,105,108,108,45,102,111,114,109,101,100,32,99,111,110,116, +101,110,116,27,247,22,141,2,27,90,144,42,11,89,146,42,39,11,248,22,150, 16,23,200,2,192,86,96,249,22,3,20,20,94,88,148,8,36,40,57,11,9, 224,2,3,33,140,2,23,195,1,23,197,1,249,22,167,2,195,88,148,8,36, 41,51,11,9,223,3,33,141,2,250,22,159,2,80,144,47,8,25,41,23,199, @@ -556,85 +556,85 @@ 43,8,47,42,23,196,2,23,198,2,11,27,250,22,161,2,80,144,44,8,25, 41,23,197,2,21,143,11,17,0,0,27,248,22,83,23,195,2,27,249,80,144, 45,8,27,42,23,198,2,23,196,2,28,249,22,183,9,23,195,2,23,196,1, -248,22,185,20,195,20,13,144,80,144,43,8,28,40,250,80,144,46,8,47,42, +248,22,186,20,195,20,13,144,80,144,43,8,28,40,250,80,144,46,8,47,42, 23,199,2,23,201,1,23,196,2,27,20,20,95,88,148,8,36,39,55,8,240, 0,0,0,2,9,225,5,1,4,33,142,2,23,197,1,23,194,1,28,249,22, 48,23,195,2,39,20,13,144,80,144,44,46,40,26,35,80,144,8,40,47,40, -249,22,31,11,80,144,8,42,46,40,22,159,15,10,22,160,15,10,22,161,15, -10,22,162,15,11,22,163,15,11,22,167,15,10,22,166,15,11,22,168,15,10, -22,165,15,10,22,169,15,10,22,164,15,11,22,170,15,10,22,171,15,10,22, -172,15,10,22,173,15,11,22,174,15,10,22,157,15,11,247,23,193,1,250,22, -132,12,2,9,2,52,23,196,1,248,22,8,20,20,94,88,148,39,40,8,49, +249,22,31,11,80,144,8,42,46,40,22,160,15,10,22,161,15,10,22,162,15, +10,22,163,15,11,22,164,15,11,22,168,15,10,22,167,15,11,22,169,15,10, +22,166,15,10,22,170,15,10,22,165,15,11,22,171,15,10,22,172,15,10,22, +173,15,10,22,174,15,11,22,175,15,10,22,158,15,11,247,23,193,1,250,22, +133,12,2,9,2,52,23,196,1,248,22,8,20,20,94,88,148,39,40,8,49, 16,4,8,128,6,8,128,104,8,240,0,128,0,0,39,9,224,1,2,33,143, 2,23,195,1,0,7,35,114,120,34,47,43,34,28,248,22,162,7,23,195,2, -27,249,22,188,16,2,145,2,23,197,2,28,23,193,2,28,249,22,134,4,248, -22,104,23,196,2,248,22,188,3,248,22,161,21,23,199,2,249,22,7,250,22, +27,249,22,189,16,2,145,2,23,197,2,28,23,193,2,28,249,22,134,4,248, +22,104,23,196,2,248,22,188,3,248,22,162,21,23,199,2,249,22,7,250,22, 184,7,23,200,1,39,248,22,104,23,199,1,23,198,1,249,22,7,250,22,184, 7,23,200,2,39,248,22,104,23,199,2,249,22,82,249,22,184,7,23,201,1, 248,22,106,23,200,1,23,200,1,86,94,23,193,1,249,22,7,23,197,1,23, -198,1,90,144,42,11,89,146,42,39,11,248,22,149,16,23,198,1,86,94,23, +198,1,90,144,42,11,89,146,42,39,11,248,22,150,16,23,198,1,86,94,23, 195,1,28,249,22,181,9,23,195,2,2,49,86,94,23,193,1,249,22,7,23, 196,1,23,200,1,27,249,22,82,23,197,1,23,201,1,28,248,22,162,7,23, -195,2,27,249,22,188,16,2,145,2,23,197,2,28,23,193,2,28,249,22,134, -4,248,22,104,23,196,2,248,22,188,3,248,22,161,21,23,199,2,249,22,7, +195,2,27,249,22,189,16,2,145,2,23,197,2,28,23,193,2,28,249,22,134, +4,248,22,104,23,196,2,248,22,188,3,248,22,162,21,23,199,2,249,22,7, 250,22,184,7,23,200,1,39,248,22,104,23,199,1,23,196,1,249,22,7,250, 22,184,7,23,200,2,39,248,22,104,23,199,2,249,22,82,249,22,184,7,23, 201,1,248,22,106,23,200,1,23,198,1,86,94,23,193,1,249,22,7,23,197, -1,23,196,1,90,144,42,11,89,146,42,39,11,248,22,149,16,23,198,1,86, +1,23,196,1,90,144,42,11,89,146,42,39,11,248,22,150,16,23,198,1,86, 94,23,195,1,28,249,22,181,9,23,195,2,2,49,86,94,23,193,1,249,22, 7,23,196,1,23,198,1,249,80,144,48,8,31,42,194,249,22,82,197,199,28, 248,22,90,23,196,2,9,28,248,22,83,23,196,2,28,248,22,152,2,248,22, -184,20,23,197,2,250,22,97,249,22,2,22,132,2,250,22,161,2,248,22,184, -20,23,204,2,23,202,2,9,250,22,161,2,248,22,184,20,23,202,2,11,9, -27,248,22,185,20,23,200,1,28,248,22,90,23,194,2,86,95,23,198,1,23, -193,1,9,28,248,22,83,23,194,2,28,248,22,152,2,248,22,184,20,23,195, -2,250,22,97,249,22,2,22,132,2,250,22,161,2,248,22,184,20,23,202,2, -23,206,2,9,250,22,161,2,248,22,184,20,23,200,2,11,9,249,80,144,48, -8,48,42,23,203,1,248,22,185,20,23,199,1,27,248,80,144,45,8,30,42, -248,22,184,20,23,196,2,250,22,97,250,22,161,2,23,199,2,23,205,2,9, +185,20,23,197,2,250,22,97,249,22,2,22,132,2,250,22,161,2,248,22,185, +20,23,204,2,23,202,2,9,250,22,161,2,248,22,185,20,23,202,2,11,9, +27,248,22,186,20,23,200,1,28,248,22,90,23,194,2,86,95,23,198,1,23, +193,1,9,28,248,22,83,23,194,2,28,248,22,152,2,248,22,185,20,23,195, +2,250,22,97,249,22,2,22,132,2,250,22,161,2,248,22,185,20,23,202,2, +23,206,2,9,250,22,161,2,248,22,185,20,23,200,2,11,9,249,80,144,48, +8,48,42,23,203,1,248,22,186,20,23,199,1,27,248,80,144,45,8,30,42, +248,22,185,20,23,196,2,250,22,97,250,22,161,2,23,199,2,23,205,2,9, 250,22,161,2,23,199,1,11,9,249,80,144,49,8,48,42,23,204,1,248,22, -185,20,23,200,1,249,22,97,247,22,173,16,249,80,144,47,8,48,42,23,202, -1,248,22,185,20,23,198,1,27,248,80,144,41,8,30,42,248,22,184,20,23, +186,20,23,200,1,249,22,97,247,22,174,16,249,80,144,47,8,48,42,23,202, +1,248,22,186,20,23,198,1,27,248,80,144,41,8,30,42,248,22,185,20,23, 198,2,250,22,97,250,22,161,2,23,199,2,23,201,2,9,250,22,161,2,23, -199,1,11,9,27,248,22,185,20,23,201,1,28,248,22,90,23,194,2,86,95, +199,1,11,9,27,248,22,186,20,23,201,1,28,248,22,90,23,194,2,86,95, 23,199,1,23,193,1,9,28,248,22,83,23,194,2,28,248,22,152,2,248,22, -184,20,23,195,2,250,22,97,249,22,2,22,132,2,250,22,161,2,248,22,184, -20,23,202,2,23,207,2,9,250,22,161,2,248,22,184,20,23,200,2,11,9, -249,80,144,49,8,48,42,23,204,1,248,22,185,20,23,199,1,27,248,80,144, -46,8,30,42,248,22,184,20,23,196,2,250,22,97,250,22,161,2,23,199,2, +185,20,23,195,2,250,22,97,249,22,2,22,132,2,250,22,161,2,248,22,185, +20,23,202,2,23,207,2,9,250,22,161,2,248,22,185,20,23,200,2,11,9, +249,80,144,49,8,48,42,23,204,1,248,22,186,20,23,199,1,27,248,80,144, +46,8,30,42,248,22,185,20,23,196,2,250,22,97,250,22,161,2,23,199,2, 23,206,2,9,250,22,161,2,23,199,1,11,9,249,80,144,50,8,48,42,23, -205,1,248,22,185,20,23,200,1,249,22,97,247,22,173,16,249,80,144,48,8, -48,42,23,203,1,248,22,185,20,23,198,1,249,22,97,247,22,173,16,27,248, -22,185,20,23,199,1,28,248,22,90,23,194,2,9,28,248,22,83,23,194,2, -28,248,22,152,2,248,22,184,20,23,195,2,250,22,97,249,22,2,22,132,2, -250,22,161,2,248,22,184,20,23,202,2,23,205,2,9,250,22,161,2,248,22, -184,20,23,200,2,11,9,249,80,144,47,8,48,42,23,202,1,248,22,185,20, -23,199,1,27,248,80,144,44,8,30,42,248,22,184,20,23,196,2,250,22,97, +205,1,248,22,186,20,23,200,1,249,22,97,247,22,174,16,249,80,144,48,8, +48,42,23,203,1,248,22,186,20,23,198,1,249,22,97,247,22,174,16,27,248, +22,186,20,23,199,1,28,248,22,90,23,194,2,9,28,248,22,83,23,194,2, +28,248,22,152,2,248,22,185,20,23,195,2,250,22,97,249,22,2,22,132,2, +250,22,161,2,248,22,185,20,23,202,2,23,205,2,9,250,22,161,2,248,22, +185,20,23,200,2,11,9,249,80,144,47,8,48,42,23,202,1,248,22,186,20, +23,199,1,27,248,80,144,44,8,30,42,248,22,185,20,23,196,2,250,22,97, 250,22,161,2,23,199,2,23,204,2,9,250,22,161,2,23,199,1,11,9,249, -80,144,48,8,48,42,23,203,1,248,22,185,20,23,200,1,249,22,97,247,22, -173,16,249,80,144,46,8,48,42,23,201,1,248,22,185,20,23,198,1,32,148, +80,144,48,8,48,42,23,203,1,248,22,186,20,23,200,1,249,22,97,247,22, +174,16,249,80,144,46,8,48,42,23,201,1,248,22,186,20,23,198,1,32,148, 2,88,148,8,36,40,50,11,2,50,222,33,149,2,28,248,22,90,248,22,84, -23,195,2,248,22,92,27,248,22,184,20,195,28,248,22,128,16,193,248,22,132, -16,193,192,250,22,93,27,248,22,184,20,23,198,2,28,248,22,128,16,193,248, -22,132,16,193,192,2,67,248,2,148,2,248,22,185,20,23,198,1,250,22,146, +23,195,2,248,22,92,27,248,22,185,20,195,28,248,22,129,16,193,248,22,133, +16,193,192,250,22,93,27,248,22,185,20,23,198,2,28,248,22,129,16,193,248, +22,133,16,193,192,2,67,248,2,148,2,248,22,186,20,23,198,1,250,22,146, 8,6,7,7,10,32,126,97,32,126,97,6,1,1,32,23,196,1,249,22,146, 8,6,6,6,10,32,32,32,126,97,248,22,135,2,23,196,1,32,152,2,88, 148,39,41,51,11,68,102,105,108,116,101,114,222,33,153,2,28,248,22,90,23, -195,2,9,28,248,23,194,2,248,22,83,23,196,2,249,22,82,248,22,184,20, -23,197,2,249,2,152,2,23,197,1,248,22,185,20,23,199,1,249,2,152,2, -23,195,1,248,22,185,20,23,197,1,28,248,22,90,23,201,2,86,95,23,200, +195,2,9,28,248,23,194,2,248,22,83,23,196,2,249,22,82,248,22,185,20, +23,197,2,249,2,152,2,23,197,1,248,22,186,20,23,199,1,249,2,152,2, +23,195,1,248,22,186,20,23,197,1,28,248,22,90,23,201,2,86,95,23,200, 1,23,194,1,28,23,201,2,86,97,23,199,1,23,198,1,23,197,1,23,196, -1,28,194,249,22,146,16,202,196,200,27,28,248,22,90,23,199,2,2,66,249, +1,28,194,249,22,147,16,202,196,200,27,28,248,22,90,23,199,2,2,66,249, 22,1,22,185,7,248,2,148,2,23,201,2,248,23,198,1,251,22,146,8,6, 70,70,99,111,108,108,101,99,116,105,111,110,32,110,111,116,32,102,111,117,110, 100,10,32,32,99,111,108,108,101,99,116,105,111,110,58,32,126,115,10,32,32, 105,110,32,99,111,108,108,101,99,116,105,111,110,32,100,105,114,101,99,116,111, -114,105,101,115,58,126,97,126,97,28,248,22,90,23,204,1,28,248,22,128,16, -23,205,2,248,22,132,16,23,205,1,23,204,1,250,22,185,7,28,248,22,128, -16,23,208,2,248,22,132,16,23,208,1,23,207,1,2,67,23,201,2,249,22, +114,105,101,115,58,126,97,126,97,28,248,22,90,23,204,1,28,248,22,129,16, +23,205,2,248,22,133,16,23,205,1,23,204,1,250,22,185,7,28,248,22,129, +16,23,208,2,248,22,133,16,23,208,1,23,207,1,2,67,23,201,2,249,22, 1,22,185,7,249,22,2,32,0,88,148,8,36,40,48,11,9,222,33,150,2, -19,248,22,96,23,211,2,19,248,22,96,247,22,173,16,28,249,22,135,4,249, -22,190,3,23,198,4,23,197,4,44,23,211,2,249,22,97,247,22,173,16,248, +19,248,22,96,23,211,2,19,248,22,96,247,22,174,16,28,249,22,135,4,249, +22,190,3,23,198,4,23,197,4,44,23,211,2,249,22,97,247,22,174,16,248, 22,92,249,22,146,8,6,50,50,46,46,46,32,91,126,97,32,97,100,100,105, 116,105,111,110,97,108,32,108,105,110,107,101,100,32,97,110,100,32,112,97,99, 107,97,103,101,32,100,105,114,101,99,116,111,114,105,101,115,93,249,22,190,3, @@ -644,272 +644,272 @@ 101,99,116,111,114,105,101,115,58,126,97,23,201,1,249,22,1,22,185,7,249, 22,2,32,0,88,148,8,36,40,48,11,9,222,33,151,2,249,2,152,2,22, 134,2,23,214,1,86,95,23,205,1,23,198,1,2,66,27,248,22,83,23,202, -2,27,28,248,22,128,16,23,195,2,249,22,146,16,23,196,1,23,202,2,248, -22,135,2,23,195,1,28,28,248,22,128,16,248,22,184,20,23,204,2,248,22, -141,16,23,194,2,10,27,250,22,1,22,146,16,23,197,1,23,203,2,28,28, -248,22,90,23,201,2,10,248,22,141,16,23,194,2,28,23,198,2,28,28,250, -80,144,45,8,32,42,195,200,199,10,27,28,248,22,128,16,199,248,22,132,16, -199,198,19,248,22,165,7,23,195,2,27,28,249,22,173,20,23,196,4,43,28, +2,27,28,248,22,129,16,23,195,2,249,22,147,16,23,196,1,23,202,2,248, +22,135,2,23,195,1,28,28,248,22,129,16,248,22,185,20,23,204,2,248,22, +142,16,23,194,2,10,27,250,22,1,22,147,16,23,197,1,23,203,2,28,28, +248,22,90,23,201,2,10,248,22,142,16,23,194,2,28,23,198,2,28,28,250, +80,144,45,8,32,42,195,200,199,10,27,28,248,22,129,16,199,248,22,133,16, +199,198,19,248,22,165,7,23,195,2,27,28,249,22,174,20,23,196,4,43,28, 249,22,168,7,6,4,4,46,114,107,116,249,22,184,7,23,199,2,249,22,190, 3,23,200,4,43,249,22,185,7,250,22,184,7,23,200,1,39,249,22,190,3, 23,201,4,43,6,3,3,46,115,115,86,94,23,195,1,11,86,94,23,195,1, 11,28,23,193,2,250,80,144,48,8,32,42,198,23,196,1,202,11,2,28,197, -249,22,146,16,194,199,192,26,8,80,144,50,8,49,42,204,205,206,23,15,23, -16,23,17,248,22,185,20,23,19,28,23,19,23,19,200,192,26,8,80,144,50, -8,49,42,204,205,206,23,15,23,16,23,17,248,22,185,20,23,19,23,19,26, -8,80,144,49,8,49,42,203,204,205,206,23,15,23,16,248,22,185,20,23,18, +249,22,147,16,194,199,192,26,8,80,144,50,8,49,42,204,205,206,23,15,23, +16,23,17,248,22,186,20,23,19,28,23,19,23,19,200,192,26,8,80,144,50, +8,49,42,204,205,206,23,15,23,16,23,17,248,22,186,20,23,19,23,19,26, +8,80,144,49,8,49,42,203,204,205,206,23,15,23,16,248,22,186,20,23,18, 23,18,90,144,41,11,89,146,41,39,11,249,80,144,43,8,31,42,23,199,1, -23,200,1,27,248,22,70,28,248,22,128,16,195,248,22,132,16,195,194,27,27, -247,22,174,16,28,248,22,90,23,194,2,9,28,248,22,83,23,194,2,28,248, -22,152,2,248,22,184,20,23,195,2,250,22,97,249,22,2,22,132,2,250,22, -161,2,248,22,184,20,23,202,2,23,203,2,9,250,22,161,2,248,22,184,20, -23,200,2,11,9,249,80,144,49,8,48,42,23,200,1,248,22,185,20,23,199, -1,27,248,80,144,46,8,30,42,248,22,184,20,23,196,2,250,22,97,250,22, +23,200,1,27,248,22,70,28,248,22,129,16,195,248,22,133,16,195,194,27,27, +247,22,175,16,28,248,22,90,23,194,2,9,28,248,22,83,23,194,2,28,248, +22,152,2,248,22,185,20,23,195,2,250,22,97,249,22,2,22,132,2,250,22, +161,2,248,22,185,20,23,202,2,23,203,2,9,250,22,161,2,248,22,185,20, +23,200,2,11,9,249,80,144,49,8,48,42,23,200,1,248,22,186,20,23,199, +1,27,248,80,144,46,8,30,42,248,22,185,20,23,196,2,250,22,97,250,22, 161,2,23,199,2,23,202,2,9,250,22,161,2,23,199,1,11,9,249,80,144, -50,8,48,42,23,201,1,248,22,185,20,23,200,1,249,22,97,247,22,173,16, -249,80,144,48,8,48,42,23,199,1,248,22,185,20,23,198,1,26,8,80,144, +50,8,48,42,23,201,1,248,22,186,20,23,200,1,249,22,97,247,22,174,16, +249,80,144,48,8,48,42,23,199,1,248,22,186,20,23,198,1,26,8,80,144, 51,8,49,42,23,17,23,16,205,203,202,200,200,11,32,156,2,88,148,8,36, -42,57,11,2,50,222,33,157,2,28,248,22,139,4,195,249,22,138,16,251,22, +42,57,11,2,50,222,33,157,2,28,248,22,139,4,195,249,22,139,16,251,22, 163,8,250,22,162,8,202,39,248,22,156,8,203,2,51,249,22,162,8,201,248, -22,164,21,202,2,68,28,248,22,129,16,195,248,22,130,16,195,247,22,131,16, +22,165,21,202,2,68,28,248,22,130,16,195,248,22,131,16,195,247,22,132,16, 27,248,22,188,3,196,28,28,248,22,139,4,193,11,249,22,181,9,8,46,249, -22,157,8,198,196,249,22,138,16,251,22,163,8,250,22,162,8,203,39,201,2, -69,249,22,162,8,202,248,22,187,3,201,2,68,28,248,22,129,16,196,248,22, -130,16,196,247,22,131,16,250,2,156,2,196,197,195,248,22,140,16,27,250,22, -146,16,23,198,1,23,202,1,23,199,1,28,249,22,181,9,23,199,2,66,115, -97,109,101,192,28,248,22,151,16,23,198,2,249,22,146,16,194,198,249,80,144, +22,157,8,198,196,249,22,139,16,251,22,163,8,250,22,162,8,203,39,201,2, +69,249,22,162,8,202,248,22,187,3,201,2,68,28,248,22,130,16,196,248,22, +131,16,196,247,22,132,16,250,2,156,2,196,197,195,248,22,141,16,27,250,22, +147,16,23,198,1,23,202,1,23,199,1,28,249,22,181,9,23,199,2,66,115, +97,109,101,192,28,248,22,152,16,23,198,2,249,22,147,16,194,198,249,80,144, 46,42,42,23,195,1,23,199,1,249,22,5,20,20,96,88,148,39,40,54,47, 9,226,5,6,3,2,33,158,2,23,195,1,23,196,1,23,199,1,23,197,1, -27,248,22,140,16,249,22,146,16,23,198,2,23,199,2,28,23,193,2,192,28, +27,248,22,141,16,249,22,147,16,23,198,2,23,199,2,28,23,193,2,192,28, 23,197,1,27,90,144,41,11,89,146,41,39,11,250,80,144,46,8,34,42,23, -202,2,2,68,2,34,27,248,22,134,16,23,196,1,27,250,2,156,2,23,204, -1,23,197,2,248,22,156,8,23,198,1,28,248,22,129,16,195,249,22,146,16, -196,194,192,27,247,22,175,16,249,22,5,20,20,96,88,148,39,40,51,47,9, -226,5,2,3,6,33,159,2,23,199,1,23,196,1,23,195,1,247,22,176,16, -11,86,95,28,248,22,129,16,23,194,2,11,28,248,22,128,16,23,194,2,11, -28,28,248,22,162,7,23,194,2,28,248,22,151,16,23,194,2,10,248,22,152, -16,23,194,2,11,11,252,22,132,12,23,200,2,2,42,39,23,198,2,23,199, +202,2,2,68,2,34,27,248,22,135,16,23,196,1,27,250,2,156,2,23,204, +1,23,197,2,248,22,156,8,23,198,1,28,248,22,130,16,195,249,22,147,16, +196,194,192,27,247,22,176,16,249,22,5,20,20,96,88,148,39,40,51,47,9, +226,5,2,3,6,33,159,2,23,199,1,23,196,1,23,195,1,247,22,177,16, +11,86,95,28,248,22,130,16,23,194,2,11,28,248,22,129,16,23,194,2,11, +28,28,248,22,162,7,23,194,2,28,248,22,152,16,23,194,2,10,248,22,153, +16,23,194,2,11,11,252,22,133,12,23,200,2,2,42,39,23,198,2,23,199, 2,28,248,22,162,7,23,195,2,86,94,23,194,1,11,28,248,22,151,8,23, -195,2,86,94,23,194,1,11,252,22,132,12,23,200,2,2,70,40,23,198,2, -23,199,1,90,144,42,11,89,146,42,39,11,248,22,149,16,23,197,2,86,94, -23,195,1,86,94,28,23,193,2,86,95,23,198,1,23,196,1,11,250,22,135, +195,2,86,94,23,194,1,11,252,22,133,12,23,200,2,2,70,40,23,198,2, +23,199,1,90,144,42,11,89,146,42,39,11,248,22,150,16,23,197,2,86,94, +23,195,1,86,94,28,23,193,2,86,95,23,198,1,23,196,1,11,250,22,136, 12,23,201,1,2,71,23,199,1,249,22,7,23,195,1,23,196,1,32,162,2, 88,148,8,36,45,8,23,11,2,50,222,33,163,2,28,248,22,139,4,23,199, -2,86,95,23,198,1,23,196,1,19,248,22,156,8,23,199,2,249,22,138,16, +2,86,95,23,198,1,23,196,1,19,248,22,156,8,23,199,2,249,22,139,16, 251,22,163,8,250,22,162,8,23,207,2,39,23,202,4,2,51,249,23,204,1, -23,206,2,248,22,164,21,23,207,1,28,248,22,162,7,200,249,22,177,8,201, -8,63,199,28,248,22,129,16,197,248,22,130,16,197,247,22,131,16,2,27,248, +23,206,2,248,22,165,21,23,207,1,28,248,22,162,7,200,249,22,177,8,201, +8,63,199,28,248,22,130,16,197,248,22,131,16,197,247,22,132,16,2,27,248, 22,188,3,23,200,1,28,28,248,22,139,4,23,194,2,11,249,22,181,9,8, -46,249,22,157,8,23,202,2,23,197,2,249,22,138,16,251,22,163,8,250,22, +46,249,22,157,8,23,202,2,23,197,2,249,22,139,16,251,22,163,8,250,22, 162,8,23,207,2,39,23,202,2,23,203,1,249,23,204,1,23,206,1,248,22, 187,3,23,202,1,28,248,22,162,7,200,249,22,177,8,201,8,63,199,28,248, -22,129,16,197,248,22,130,16,197,247,22,131,16,28,248,22,139,4,23,194,2, -86,95,23,197,1,23,193,1,19,248,22,156,8,23,200,2,249,22,138,16,251, +22,130,16,197,248,22,131,16,197,247,22,132,16,28,248,22,139,4,23,194,2, +86,95,23,197,1,23,193,1,19,248,22,156,8,23,200,2,249,22,139,16,251, 22,163,8,250,22,162,8,23,208,2,39,23,202,4,2,51,249,23,205,1,23, -207,2,248,22,164,21,23,208,1,28,248,22,162,7,201,249,22,177,8,202,8, -63,200,28,248,22,129,16,198,248,22,130,16,198,247,22,131,16,2,27,248,22, +207,2,248,22,165,21,23,208,1,28,248,22,162,7,201,249,22,177,8,202,8, +63,200,28,248,22,130,16,198,248,22,131,16,198,247,22,132,16,2,27,248,22, 188,3,23,195,1,28,28,248,22,139,4,23,194,2,11,249,22,181,9,8,46, -249,22,157,8,23,203,2,23,197,2,249,22,138,16,251,22,163,8,250,22,162, +249,22,157,8,23,203,2,23,197,2,249,22,139,16,251,22,163,8,250,22,162, 8,23,208,2,39,23,202,2,23,204,1,249,23,205,1,23,207,1,248,22,187, 3,23,202,1,28,248,22,162,7,201,249,22,177,8,202,8,63,200,28,248,22, -129,16,198,248,22,130,16,198,247,22,131,16,28,248,22,139,4,23,194,2,86, -95,23,198,1,23,193,1,19,248,22,156,8,23,201,2,249,22,138,16,251,22, +130,16,198,248,22,131,16,198,247,22,132,16,28,248,22,139,4,23,194,2,86, +95,23,198,1,23,193,1,19,248,22,156,8,23,201,2,249,22,139,16,251,22, 163,8,250,22,162,8,23,209,2,39,23,202,4,2,51,249,23,206,1,23,208, -2,248,22,164,21,23,209,1,28,248,22,162,7,202,249,22,177,8,203,8,63, -201,28,248,22,129,16,199,248,22,130,16,199,247,22,131,16,2,27,248,22,188, +2,248,22,165,21,23,209,1,28,248,22,162,7,202,249,22,177,8,203,8,63, +201,28,248,22,130,16,199,248,22,131,16,199,247,22,132,16,2,27,248,22,188, 3,23,195,1,28,28,248,22,139,4,23,194,2,11,249,22,181,9,8,46,249, -22,157,8,23,204,2,23,197,2,249,22,138,16,251,22,163,8,250,22,162,8, +22,157,8,23,204,2,23,197,2,249,22,139,16,251,22,163,8,250,22,162,8, 23,209,2,39,23,202,2,23,205,1,249,23,206,1,23,208,1,248,22,187,3, -23,202,1,28,248,22,162,7,202,249,22,177,8,203,8,63,201,28,248,22,129, -16,199,248,22,130,16,199,247,22,131,16,253,2,162,2,201,202,203,204,205,198, -90,144,41,11,89,146,41,39,11,86,95,28,248,22,129,16,23,199,2,11,28, -248,22,128,16,23,199,2,11,28,28,248,22,162,7,23,199,2,28,248,22,151, -16,23,199,2,10,248,22,152,16,23,199,2,11,11,252,22,132,12,23,200,2, +23,202,1,28,248,22,162,7,202,249,22,177,8,203,8,63,201,28,248,22,130, +16,199,248,22,131,16,199,247,22,132,16,253,2,162,2,201,202,203,204,205,198, +90,144,41,11,89,146,41,39,11,86,95,28,248,22,130,16,23,199,2,11,28, +248,22,129,16,23,199,2,11,28,28,248,22,162,7,23,199,2,28,248,22,152, +16,23,199,2,10,248,22,153,16,23,199,2,11,11,252,22,133,12,23,200,2, 2,42,39,23,203,2,23,204,2,28,248,22,162,7,23,200,2,11,28,248,22, -151,8,23,200,2,11,252,22,132,12,23,200,2,2,70,40,23,203,2,23,204, -2,90,144,42,11,89,146,42,39,11,248,22,149,16,23,202,2,86,94,23,195, -1,86,94,28,192,86,94,23,198,1,11,250,22,135,12,23,201,1,2,71,23, -204,2,249,22,7,194,195,27,248,22,134,16,23,196,1,27,19,248,22,156,8, -23,196,2,28,249,22,169,20,23,195,4,39,86,94,23,199,1,249,22,138,16, -251,22,163,8,250,22,162,8,23,204,2,39,248,22,164,21,23,205,2,2,51, -249,23,208,1,23,203,2,248,22,164,21,23,204,1,28,248,22,162,7,23,16, -249,22,177,8,23,17,8,63,23,15,28,248,22,129,16,203,248,22,130,16,203, -247,22,131,16,27,248,22,188,3,23,195,4,28,28,248,22,139,4,23,194,2, -11,249,22,181,9,8,46,249,22,157,8,23,200,2,23,197,2,249,22,138,16, +151,8,23,200,2,11,252,22,133,12,23,200,2,2,70,40,23,203,2,23,204, +2,90,144,42,11,89,146,42,39,11,248,22,150,16,23,202,2,86,94,23,195, +1,86,94,28,192,86,94,23,198,1,11,250,22,136,12,23,201,1,2,71,23, +204,2,249,22,7,194,195,27,248,22,135,16,23,196,1,27,19,248,22,156,8, +23,196,2,28,249,22,170,20,23,195,4,39,86,94,23,199,1,249,22,139,16, +251,22,163,8,250,22,162,8,23,204,2,39,248,22,165,21,23,205,2,2,51, +249,23,208,1,23,203,2,248,22,165,21,23,204,1,28,248,22,162,7,23,16, +249,22,177,8,23,17,8,63,23,15,28,248,22,130,16,203,248,22,131,16,203, +247,22,132,16,27,248,22,188,3,23,195,4,28,28,248,22,139,4,23,194,2, +11,249,22,181,9,8,46,249,22,157,8,23,200,2,23,197,2,249,22,139,16, 251,22,163,8,250,22,162,8,23,205,2,39,23,202,2,23,206,1,249,23,209, 1,23,204,1,248,22,187,3,23,202,1,28,248,22,162,7,23,17,249,22,177, -8,23,18,8,63,23,16,28,248,22,129,16,204,248,22,130,16,204,247,22,131, -16,28,248,22,139,4,23,194,2,86,95,23,200,1,23,193,1,249,22,138,16, -251,22,163,8,250,22,162,8,23,205,2,39,248,22,164,21,23,206,2,2,51, -249,23,209,1,23,204,2,248,22,164,21,23,205,1,28,248,22,162,7,23,17, -249,22,177,8,23,18,8,63,23,16,28,248,22,129,16,204,248,22,130,16,204, -247,22,131,16,27,248,22,188,3,23,195,1,28,28,248,22,139,4,23,194,2, -11,249,22,181,9,8,46,249,22,157,8,23,201,2,23,197,2,249,22,138,16, +8,23,18,8,63,23,16,28,248,22,130,16,204,248,22,131,16,204,247,22,132, +16,28,248,22,139,4,23,194,2,86,95,23,200,1,23,193,1,249,22,139,16, +251,22,163,8,250,22,162,8,23,205,2,39,248,22,165,21,23,206,2,2,51, +249,23,209,1,23,204,2,248,22,165,21,23,205,1,28,248,22,162,7,23,17, +249,22,177,8,23,18,8,63,23,16,28,248,22,130,16,204,248,22,131,16,204, +247,22,132,16,27,248,22,188,3,23,195,1,28,28,248,22,139,4,23,194,2, +11,249,22,181,9,8,46,249,22,157,8,23,201,2,23,197,2,249,22,139,16, 251,22,163,8,250,22,162,8,23,206,2,39,23,202,2,23,207,1,249,23,210, 1,23,205,1,248,22,187,3,23,202,1,28,248,22,162,7,23,18,249,22,177, -8,23,19,8,63,23,17,28,248,22,129,16,205,248,22,130,16,205,247,22,131, +8,23,19,8,63,23,17,28,248,22,130,16,205,248,22,131,16,205,247,22,132, 16,253,2,162,2,23,210,1,23,209,1,23,208,1,23,207,1,23,203,1,23, -199,1,2,28,248,22,129,16,195,249,22,146,16,196,194,192,32,165,2,88,148, -8,36,43,58,11,2,50,222,33,166,2,28,248,22,139,4,196,249,22,138,16, +199,1,2,28,248,22,130,16,195,249,22,147,16,196,194,192,32,165,2,88,148, +8,36,43,58,11,2,50,222,33,166,2,28,248,22,139,4,196,249,22,139,16, 251,22,163,8,250,22,162,8,203,39,248,22,156,8,204,2,51,2,51,28,248, -22,162,7,199,249,22,177,8,200,8,63,198,28,248,22,129,16,196,248,22,130, -16,196,247,22,131,16,27,248,22,188,3,197,28,28,248,22,139,4,193,11,249, -22,181,9,8,46,249,22,157,8,199,196,249,22,138,16,251,22,163,8,250,22, +22,162,7,199,249,22,177,8,200,8,63,198,28,248,22,130,16,196,248,22,131, +16,196,247,22,132,16,27,248,22,188,3,197,28,28,248,22,139,4,193,11,249, +22,181,9,8,46,249,22,157,8,199,196,249,22,139,16,251,22,163,8,250,22, 162,8,204,39,201,2,51,2,51,28,248,22,162,7,200,249,22,177,8,201,8, -63,199,28,248,22,129,16,197,248,22,130,16,197,247,22,131,16,251,2,165,2, -197,198,199,196,90,144,41,11,89,146,41,39,11,86,95,28,248,22,129,16,23, -196,2,11,28,248,22,128,16,23,196,2,11,28,28,248,22,162,7,23,196,2, -28,248,22,151,16,23,196,2,10,248,22,152,16,23,196,2,11,11,252,22,132, +63,199,28,248,22,130,16,197,248,22,131,16,197,247,22,132,16,251,2,165,2, +197,198,199,196,90,144,41,11,89,146,41,39,11,86,95,28,248,22,130,16,23, +196,2,11,28,248,22,129,16,23,196,2,11,28,28,248,22,162,7,23,196,2, +28,248,22,152,16,23,196,2,10,248,22,153,16,23,196,2,11,11,252,22,133, 12,2,37,2,42,39,23,200,2,23,201,2,28,248,22,162,7,23,197,2,11, -28,248,22,151,8,23,197,2,11,252,22,132,12,2,37,2,70,40,23,200,2, -23,201,2,90,144,42,11,89,146,42,39,11,248,22,149,16,23,199,2,86,94, -23,195,1,86,94,28,192,11,250,22,135,12,2,37,2,71,23,201,2,249,22, -7,194,195,27,248,22,134,16,23,196,1,27,251,2,165,2,23,202,1,23,201, -1,23,198,2,248,22,156,8,23,199,1,28,248,22,129,16,195,249,22,146,16, +28,248,22,151,8,23,197,2,11,252,22,133,12,2,37,2,70,40,23,200,2, +23,201,2,90,144,42,11,89,146,42,39,11,248,22,150,16,23,199,2,86,94, +23,195,1,86,94,28,192,11,250,22,136,12,2,37,2,71,23,201,2,249,22, +7,194,195,27,248,22,135,16,23,196,1,27,251,2,165,2,23,202,1,23,201, +1,23,198,2,248,22,156,8,23,199,1,28,248,22,130,16,195,249,22,147,16, 196,194,192,32,168,2,88,148,8,36,43,58,11,2,50,222,33,169,2,28,248, -22,139,4,196,249,22,138,16,251,22,163,8,250,22,162,8,203,39,248,22,156, -8,204,2,51,249,22,162,8,202,248,22,164,21,203,28,248,22,162,7,199,249, -22,177,8,200,8,63,198,28,248,22,129,16,196,248,22,130,16,196,247,22,131, +22,139,4,196,249,22,139,16,251,22,163,8,250,22,162,8,203,39,248,22,156, +8,204,2,51,249,22,162,8,202,248,22,165,21,203,28,248,22,162,7,199,249, +22,177,8,200,8,63,198,28,248,22,130,16,196,248,22,131,16,196,247,22,132, 16,27,248,22,188,3,197,28,28,248,22,139,4,193,11,249,22,181,9,8,46, -249,22,157,8,199,196,249,22,138,16,251,22,163,8,250,22,162,8,204,39,201, +249,22,157,8,199,196,249,22,139,16,251,22,163,8,250,22,162,8,204,39,201, 2,69,249,22,162,8,203,248,22,187,3,201,28,248,22,162,7,200,249,22,177, -8,201,8,63,199,28,248,22,129,16,197,248,22,130,16,197,247,22,131,16,251, +8,201,8,63,199,28,248,22,130,16,197,248,22,131,16,197,247,22,132,16,251, 2,168,2,197,198,199,196,90,144,41,11,89,146,41,39,11,86,95,28,248,22, -129,16,23,196,2,11,28,248,22,128,16,23,196,2,11,28,28,248,22,162,7, -23,196,2,28,248,22,151,16,23,196,2,10,248,22,152,16,23,196,2,11,11, -252,22,132,12,2,34,2,42,39,23,200,2,23,201,2,28,248,22,162,7,23, -197,2,11,28,248,22,151,8,23,197,2,11,252,22,132,12,2,34,2,70,40, -23,200,2,23,201,2,90,144,42,11,89,146,42,39,11,248,22,149,16,23,199, -2,86,94,23,195,1,86,94,28,192,11,250,22,135,12,2,34,2,71,23,201, -2,249,22,7,194,195,27,248,22,134,16,23,196,1,27,251,2,168,2,23,202, -1,23,201,1,23,198,2,248,22,156,8,23,199,1,28,248,22,129,16,195,249, -22,146,16,196,194,192,249,247,22,185,5,23,195,1,11,249,247,22,185,5,194, -11,28,248,22,90,23,195,2,9,27,27,248,22,83,23,197,2,28,248,22,153, -16,23,194,2,248,22,156,16,23,194,1,28,248,22,152,16,23,194,2,90,144, -42,11,89,146,42,39,11,248,22,149,16,249,22,154,16,250,80,144,50,43,42, -248,22,169,16,2,56,11,11,248,22,169,16,2,57,86,95,23,195,1,23,194, -1,248,22,156,16,249,22,154,16,23,199,1,23,196,1,27,250,80,144,45,43, -42,248,22,169,16,2,56,23,197,1,10,28,23,193,2,248,22,156,16,23,194, -1,86,94,23,193,1,11,28,23,193,2,249,22,82,248,22,156,16,249,22,154, -16,23,198,1,247,22,170,16,27,248,22,185,20,23,199,1,28,248,22,90,23, +130,16,23,196,2,11,28,248,22,129,16,23,196,2,11,28,28,248,22,162,7, +23,196,2,28,248,22,152,16,23,196,2,10,248,22,153,16,23,196,2,11,11, +252,22,133,12,2,34,2,42,39,23,200,2,23,201,2,28,248,22,162,7,23, +197,2,11,28,248,22,151,8,23,197,2,11,252,22,133,12,2,34,2,70,40, +23,200,2,23,201,2,90,144,42,11,89,146,42,39,11,248,22,150,16,23,199, +2,86,94,23,195,1,86,94,28,192,11,250,22,136,12,2,34,2,71,23,201, +2,249,22,7,194,195,27,248,22,135,16,23,196,1,27,251,2,168,2,23,202, +1,23,201,1,23,198,2,248,22,156,8,23,199,1,28,248,22,130,16,195,249, +22,147,16,196,194,192,249,247,22,185,5,23,195,1,11,249,247,22,185,5,194, +11,28,248,22,90,23,195,2,9,27,27,248,22,83,23,197,2,28,248,22,154, +16,23,194,2,248,22,157,16,23,194,1,28,248,22,153,16,23,194,2,90,144, +42,11,89,146,42,39,11,248,22,150,16,249,22,155,16,250,80,144,50,43,42, +248,22,170,16,2,56,11,11,248,22,170,16,2,57,86,95,23,195,1,23,194, +1,248,22,157,16,249,22,155,16,23,199,1,23,196,1,27,250,80,144,45,43, +42,248,22,170,16,2,56,23,197,1,10,28,23,193,2,248,22,157,16,23,194, +1,86,94,23,193,1,11,28,23,193,2,249,22,82,248,22,157,16,249,22,155, +16,23,198,1,247,22,171,16,27,248,22,186,20,23,199,1,28,248,22,90,23, 194,2,86,94,23,193,1,9,27,248,80,144,45,56,42,248,22,83,23,196,2, -28,23,193,2,249,22,82,248,22,156,16,249,22,154,16,23,198,1,247,22,170, -16,248,80,144,47,8,50,42,248,22,185,20,23,198,1,86,94,23,193,1,248, -80,144,45,8,50,42,248,22,185,20,23,196,1,86,94,23,193,1,27,248,22, -185,20,23,197,1,28,248,22,90,23,194,2,9,27,248,80,144,43,56,42,248, -22,83,23,196,2,28,23,193,2,249,22,82,248,22,156,16,249,22,154,16,23, -198,1,247,22,170,16,248,80,144,45,8,50,42,248,22,185,20,23,198,1,86, -94,23,193,1,248,80,144,43,8,50,42,248,22,185,20,23,196,1,28,248,22, -90,23,195,2,9,27,27,248,22,83,23,197,2,28,248,22,153,16,23,194,2, -248,22,156,16,23,194,1,28,248,22,152,16,23,194,2,90,144,42,11,89,146, -42,39,11,248,22,149,16,249,22,154,16,250,80,144,50,43,42,248,22,169,16, -2,56,11,11,248,22,169,16,2,57,86,95,23,195,1,23,194,1,248,22,156, -16,249,22,154,16,23,199,1,23,196,1,27,250,80,144,45,43,42,248,22,169, -16,2,56,23,197,1,10,28,23,193,2,248,22,156,16,23,194,1,86,94,23, -193,1,11,28,23,193,2,249,22,82,248,22,156,16,249,22,154,16,23,198,1, -247,22,170,16,27,248,22,185,20,23,199,1,28,248,22,90,23,194,2,86,94, +28,23,193,2,249,22,82,248,22,157,16,249,22,155,16,23,198,1,247,22,171, +16,248,80,144,47,8,50,42,248,22,186,20,23,198,1,86,94,23,193,1,248, +80,144,45,8,50,42,248,22,186,20,23,196,1,86,94,23,193,1,27,248,22, +186,20,23,197,1,28,248,22,90,23,194,2,9,27,248,80,144,43,56,42,248, +22,83,23,196,2,28,23,193,2,249,22,82,248,22,157,16,249,22,155,16,23, +198,1,247,22,171,16,248,80,144,45,8,50,42,248,22,186,20,23,198,1,86, +94,23,193,1,248,80,144,43,8,50,42,248,22,186,20,23,196,1,28,248,22, +90,23,195,2,9,27,27,248,22,83,23,197,2,28,248,22,154,16,23,194,2, +248,22,157,16,23,194,1,28,248,22,153,16,23,194,2,90,144,42,11,89,146, +42,39,11,248,22,150,16,249,22,155,16,250,80,144,50,43,42,248,22,170,16, +2,56,11,11,248,22,170,16,2,57,86,95,23,195,1,23,194,1,248,22,157, +16,249,22,155,16,23,199,1,23,196,1,27,250,80,144,45,43,42,248,22,170, +16,2,56,23,197,1,10,28,23,193,2,248,22,157,16,23,194,1,86,94,23, +193,1,11,28,23,193,2,249,22,82,248,22,157,16,249,22,155,16,23,198,1, +247,22,171,16,27,248,22,186,20,23,199,1,28,248,22,90,23,194,2,86,94, 23,193,1,9,27,248,80,144,45,56,42,248,22,83,23,196,2,28,23,193,2, -249,22,82,248,22,156,16,249,22,154,16,23,198,1,247,22,170,16,248,80,144, -47,8,51,42,248,22,185,20,23,198,1,86,94,23,193,1,248,80,144,45,8, -51,42,248,22,185,20,23,196,1,86,94,23,193,1,27,248,22,185,20,23,197, +249,22,82,248,22,157,16,249,22,155,16,23,198,1,247,22,171,16,248,80,144, +47,8,51,42,248,22,186,20,23,198,1,86,94,23,193,1,248,80,144,45,8, +51,42,248,22,186,20,23,196,1,86,94,23,193,1,27,248,22,186,20,23,197, 1,28,248,22,90,23,194,2,9,27,248,80,144,43,56,42,248,22,83,23,196, -2,28,23,193,2,249,22,82,248,22,156,16,249,22,154,16,23,198,1,247,22, -170,16,248,80,144,45,8,51,42,248,22,185,20,23,198,1,86,94,23,193,1, -248,80,144,43,8,51,42,248,22,185,20,23,196,1,27,248,22,169,16,2,58, -28,248,22,153,16,23,194,2,248,22,156,16,23,194,1,28,248,22,152,16,23, -194,2,90,144,42,11,89,146,42,39,11,248,22,149,16,249,22,154,16,250,80, -144,49,43,42,248,22,169,16,2,56,11,11,248,22,169,16,2,57,86,95,23, -195,1,23,194,1,248,22,156,16,249,22,154,16,23,199,1,23,196,1,27,250, -80,144,44,43,42,248,22,169,16,2,56,23,197,1,10,28,23,193,2,248,22, -156,16,23,194,1,11,28,248,22,90,23,195,2,9,27,27,248,22,83,23,197, -2,28,248,22,153,16,23,194,2,248,22,156,16,23,194,1,28,248,22,152,16, -23,194,2,90,144,42,11,89,146,42,39,11,248,22,149,16,249,22,154,16,250, -80,144,50,43,42,248,22,169,16,2,56,11,11,248,22,169,16,2,57,86,95, -23,195,1,23,194,1,248,22,156,16,249,22,154,16,23,199,1,23,196,1,27, -250,80,144,45,43,42,248,22,169,16,2,56,23,197,1,10,28,23,193,2,248, -22,156,16,23,194,1,86,94,23,193,1,11,28,23,193,2,249,22,82,248,22, -156,16,249,22,154,16,23,198,1,247,22,170,16,27,248,22,185,20,23,199,1, +2,28,23,193,2,249,22,82,248,22,157,16,249,22,155,16,23,198,1,247,22, +171,16,248,80,144,45,8,51,42,248,22,186,20,23,198,1,86,94,23,193,1, +248,80,144,43,8,51,42,248,22,186,20,23,196,1,27,248,22,170,16,2,58, +28,248,22,154,16,23,194,2,248,22,157,16,23,194,1,28,248,22,153,16,23, +194,2,90,144,42,11,89,146,42,39,11,248,22,150,16,249,22,155,16,250,80, +144,49,43,42,248,22,170,16,2,56,11,11,248,22,170,16,2,57,86,95,23, +195,1,23,194,1,248,22,157,16,249,22,155,16,23,199,1,23,196,1,27,250, +80,144,44,43,42,248,22,170,16,2,56,23,197,1,10,28,23,193,2,248,22, +157,16,23,194,1,11,28,248,22,90,23,195,2,9,27,27,248,22,83,23,197, +2,28,248,22,154,16,23,194,2,248,22,157,16,23,194,1,28,248,22,153,16, +23,194,2,90,144,42,11,89,146,42,39,11,248,22,150,16,249,22,155,16,250, +80,144,50,43,42,248,22,170,16,2,56,11,11,248,22,170,16,2,57,86,95, +23,195,1,23,194,1,248,22,157,16,249,22,155,16,23,199,1,23,196,1,27, +250,80,144,45,43,42,248,22,170,16,2,56,23,197,1,10,28,23,193,2,248, +22,157,16,23,194,1,86,94,23,193,1,11,28,23,193,2,249,22,82,248,22, +157,16,249,22,155,16,23,198,1,247,22,171,16,27,248,22,186,20,23,199,1, 28,248,22,90,23,194,2,86,94,23,193,1,9,27,27,248,22,83,23,196,2, -28,248,22,153,16,23,194,2,248,22,156,16,23,194,1,28,248,22,152,16,23, -194,2,90,144,42,11,89,146,42,39,11,248,22,149,16,249,22,154,16,250,80, -144,54,43,42,248,22,169,16,2,56,11,11,248,22,169,16,2,57,86,95,23, -195,1,23,194,1,248,22,156,16,249,22,154,16,23,199,1,23,196,1,27,250, -80,144,49,43,42,248,22,169,16,2,56,23,197,1,10,28,23,193,2,248,22, -156,16,23,194,1,86,94,23,193,1,11,28,23,193,2,249,22,82,248,22,156, -16,249,22,154,16,23,198,1,247,22,170,16,27,248,22,185,20,23,198,1,28, +28,248,22,154,16,23,194,2,248,22,157,16,23,194,1,28,248,22,153,16,23, +194,2,90,144,42,11,89,146,42,39,11,248,22,150,16,249,22,155,16,250,80, +144,54,43,42,248,22,170,16,2,56,11,11,248,22,170,16,2,57,86,95,23, +195,1,23,194,1,248,22,157,16,249,22,155,16,23,199,1,23,196,1,27,250, +80,144,49,43,42,248,22,170,16,2,56,23,197,1,10,28,23,193,2,248,22, +157,16,23,194,1,86,94,23,193,1,11,28,23,193,2,249,22,82,248,22,157, +16,249,22,155,16,23,198,1,247,22,171,16,27,248,22,186,20,23,198,1,28, 248,22,90,23,194,2,86,94,23,193,1,9,27,248,80,144,49,56,42,248,22, -83,23,196,2,28,23,193,2,249,22,82,248,22,156,16,249,22,154,16,23,198, -1,247,22,170,16,248,80,144,51,8,53,42,248,22,185,20,23,198,1,86,94, -23,193,1,248,80,144,49,8,53,42,248,22,185,20,23,196,1,86,94,23,193, -1,27,248,22,185,20,23,196,1,28,248,22,90,23,194,2,86,94,23,193,1, +83,23,196,2,28,23,193,2,249,22,82,248,22,157,16,249,22,155,16,23,198, +1,247,22,171,16,248,80,144,51,8,53,42,248,22,186,20,23,198,1,86,94, +23,193,1,248,80,144,49,8,53,42,248,22,186,20,23,196,1,86,94,23,193, +1,27,248,22,186,20,23,196,1,28,248,22,90,23,194,2,86,94,23,193,1, 9,27,248,80,144,47,56,42,248,22,83,23,196,2,28,23,193,2,249,22,82, -248,22,156,16,249,22,154,16,23,198,1,247,22,170,16,248,80,144,49,8,53, -42,248,22,185,20,23,198,1,86,94,23,193,1,248,80,144,47,8,53,42,248, -22,185,20,23,196,1,86,94,23,193,1,27,248,22,185,20,23,197,1,28,248, -22,90,23,194,2,9,27,27,248,22,83,23,196,2,28,248,22,153,16,23,194, -2,248,22,156,16,23,194,1,28,248,22,152,16,23,194,2,90,144,42,11,89, -146,42,39,11,248,22,149,16,249,22,154,16,250,80,144,52,43,42,248,22,169, -16,2,56,11,11,248,22,169,16,2,57,86,95,23,195,1,23,194,1,248,22, -156,16,249,22,154,16,23,199,1,23,196,1,27,250,80,144,47,43,42,248,22, -169,16,2,56,23,197,1,10,28,23,193,2,248,22,156,16,23,194,1,86,94, -23,193,1,11,28,23,193,2,249,22,82,248,22,156,16,249,22,154,16,23,198, -1,247,22,170,16,27,248,22,185,20,23,198,1,28,248,22,90,23,194,2,86, +248,22,157,16,249,22,155,16,23,198,1,247,22,171,16,248,80,144,49,8,53, +42,248,22,186,20,23,198,1,86,94,23,193,1,248,80,144,47,8,53,42,248, +22,186,20,23,196,1,86,94,23,193,1,27,248,22,186,20,23,197,1,28,248, +22,90,23,194,2,9,27,27,248,22,83,23,196,2,28,248,22,154,16,23,194, +2,248,22,157,16,23,194,1,28,248,22,153,16,23,194,2,90,144,42,11,89, +146,42,39,11,248,22,150,16,249,22,155,16,250,80,144,52,43,42,248,22,170, +16,2,56,11,11,248,22,170,16,2,57,86,95,23,195,1,23,194,1,248,22, +157,16,249,22,155,16,23,199,1,23,196,1,27,250,80,144,47,43,42,248,22, +170,16,2,56,23,197,1,10,28,23,193,2,248,22,157,16,23,194,1,86,94, +23,193,1,11,28,23,193,2,249,22,82,248,22,157,16,249,22,155,16,23,198, +1,247,22,171,16,27,248,22,186,20,23,198,1,28,248,22,90,23,194,2,86, 94,23,193,1,9,27,248,80,144,47,56,42,248,22,83,23,196,2,28,23,193, -2,249,22,82,248,22,156,16,249,22,154,16,23,198,1,247,22,170,16,248,80, -144,49,8,53,42,248,22,185,20,23,198,1,86,94,23,193,1,248,80,144,47, -8,53,42,248,22,185,20,23,196,1,86,94,23,193,1,27,248,22,185,20,23, +2,249,22,82,248,22,157,16,249,22,155,16,23,198,1,247,22,171,16,248,80, +144,49,8,53,42,248,22,186,20,23,198,1,86,94,23,193,1,248,80,144,47, +8,53,42,248,22,186,20,23,196,1,86,94,23,193,1,27,248,22,186,20,23, 196,1,28,248,22,90,23,194,2,9,27,248,80,144,45,56,42,248,22,83,23, -196,2,28,23,193,2,249,22,82,248,22,156,16,249,22,154,16,23,198,1,247, -22,170,16,248,80,144,47,8,53,42,248,22,185,20,23,198,1,86,94,23,193, -1,248,80,144,45,8,53,42,248,22,185,20,23,196,1,27,247,22,177,16,27, +196,2,28,23,193,2,249,22,82,248,22,157,16,249,22,155,16,23,198,1,247, +22,171,16,248,80,144,47,8,53,42,248,22,186,20,23,198,1,86,94,23,193, +1,248,80,144,45,8,53,42,248,22,186,20,23,196,1,27,247,22,178,16,27, 248,80,144,42,58,42,247,80,144,42,57,42,249,80,144,43,44,41,28,23,196, 2,27,249,22,184,8,247,22,183,8,2,72,28,192,249,22,174,8,194,7,63, 2,66,2,66,250,80,144,46,8,23,42,23,198,2,2,73,27,28,23,200,1, -250,22,146,16,248,22,169,16,2,61,250,22,161,2,23,205,1,2,59,247,22, +250,22,147,16,248,22,170,16,2,61,250,22,161,2,23,205,1,2,59,247,22, 180,8,2,74,86,94,23,199,1,11,27,248,80,144,49,8,50,42,250,22,97, -9,248,22,92,248,22,169,16,2,55,9,28,193,249,22,82,195,194,192,27,247, -22,177,16,27,248,80,144,42,58,42,247,80,144,42,57,42,249,80,144,43,44, +9,248,22,92,248,22,170,16,2,55,9,28,193,249,22,82,195,194,192,27,247, +22,178,16,27,248,80,144,42,58,42,247,80,144,42,57,42,249,80,144,43,44, 41,28,23,196,2,27,249,22,184,8,247,22,183,8,2,72,28,192,249,22,174, 8,194,7,63,2,66,2,66,250,80,144,46,8,23,42,23,198,2,2,73,27, -28,23,200,1,250,22,146,16,248,22,169,16,2,61,250,22,161,2,23,205,1, +28,23,200,1,250,22,147,16,248,22,170,16,2,61,250,22,161,2,23,205,1, 2,59,247,22,180,8,2,74,86,94,23,199,1,11,27,248,80,144,49,8,51, -42,250,22,97,23,207,1,248,22,92,248,22,169,16,2,55,9,28,193,249,22, -82,195,194,192,27,247,22,177,16,27,248,80,144,42,58,42,249,80,144,44,55, +42,250,22,97,23,207,1,248,22,92,248,22,170,16,2,55,9,28,193,249,22, +82,195,194,192,27,247,22,178,16,27,248,80,144,42,58,42,249,80,144,44,55, 40,40,80,144,44,8,52,42,249,80,144,43,44,41,28,23,196,2,27,249,22, 184,8,247,22,183,8,2,72,28,192,249,22,174,8,194,7,63,2,66,2,66, -250,80,144,46,8,23,42,23,198,2,2,73,27,28,23,200,1,250,22,146,16, -248,22,169,16,2,61,250,22,161,2,23,205,1,2,59,247,22,180,8,2,74, -86,94,23,199,1,11,27,27,250,22,97,23,207,1,248,22,92,248,22,169,16, +250,80,144,46,8,23,42,23,198,2,2,73,27,28,23,200,1,250,22,147,16, +248,22,170,16,2,61,250,22,161,2,23,205,1,2,59,247,22,180,8,2,74, +86,94,23,199,1,11,27,27,250,22,97,23,207,1,248,22,92,248,22,170,16, 2,55,23,208,1,28,248,22,90,23,194,2,86,94,23,193,1,9,27,27,248, -22,83,23,196,2,28,248,22,153,16,23,194,2,248,22,156,16,23,194,1,28, -248,22,152,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,149,16,249, -22,154,16,250,80,144,60,43,42,248,22,169,16,2,56,11,11,248,22,169,16, -2,57,86,95,23,195,1,23,194,1,248,22,156,16,249,22,154,16,23,199,1, -23,196,1,27,250,80,144,55,43,42,248,22,169,16,2,56,23,197,1,10,28, -23,193,2,248,22,156,16,23,194,1,86,94,23,193,1,11,28,23,193,2,249, -22,82,248,22,156,16,249,22,154,16,23,198,1,247,22,170,16,27,248,22,185, +22,83,23,196,2,28,248,22,154,16,23,194,2,248,22,157,16,23,194,1,28, +248,22,153,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,150,16,249, +22,155,16,250,80,144,60,43,42,248,22,170,16,2,56,11,11,248,22,170,16, +2,57,86,95,23,195,1,23,194,1,248,22,157,16,249,22,155,16,23,199,1, +23,196,1,27,250,80,144,55,43,42,248,22,170,16,2,56,23,197,1,10,28, +23,193,2,248,22,157,16,23,194,1,86,94,23,193,1,11,28,23,193,2,249, +22,82,248,22,157,16,249,22,155,16,23,198,1,247,22,171,16,27,248,22,186, 20,23,198,1,28,248,22,90,23,194,2,86,94,23,193,1,9,27,248,80,144, -55,56,42,248,22,83,23,196,2,28,23,193,2,249,22,82,248,22,156,16,249, -22,154,16,23,198,1,247,22,170,16,248,80,144,57,8,53,42,248,22,185,20, -23,198,1,86,94,23,193,1,248,80,144,55,8,53,42,248,22,185,20,23,196, -1,86,94,23,193,1,27,248,22,185,20,23,196,1,28,248,22,90,23,194,2, +55,56,42,248,22,83,23,196,2,28,23,193,2,249,22,82,248,22,157,16,249, +22,155,16,23,198,1,247,22,171,16,248,80,144,57,8,53,42,248,22,186,20, +23,198,1,86,94,23,193,1,248,80,144,55,8,53,42,248,22,186,20,23,196, +1,86,94,23,193,1,27,248,22,186,20,23,196,1,28,248,22,90,23,194,2, 86,94,23,193,1,9,27,248,80,144,53,56,42,248,22,83,23,196,2,28,23, -193,2,249,22,82,248,22,156,16,249,22,154,16,23,198,1,247,22,170,16,248, -80,144,55,8,53,42,248,22,185,20,23,198,1,86,94,23,193,1,248,80,144, -53,8,53,42,248,22,185,20,23,196,1,28,193,249,22,82,195,194,192,27,20, +193,2,249,22,82,248,22,157,16,249,22,155,16,23,198,1,247,22,171,16,248, +80,144,55,8,53,42,248,22,186,20,23,198,1,86,94,23,193,1,248,80,144, +53,8,53,42,248,22,186,20,23,196,1,28,193,249,22,82,195,194,192,27,20, 13,144,80,144,40,46,40,26,9,80,144,49,47,40,249,22,31,11,80,144,51, -46,40,22,166,15,10,22,173,15,10,22,174,15,10,22,175,15,10,248,22,157, +46,40,22,167,15,10,22,174,15,10,22,175,15,10,22,176,15,10,248,22,157, 6,23,196,2,28,248,22,157,7,23,194,2,12,86,94,248,22,190,9,23,194, 1,27,20,13,144,80,144,41,46,40,26,9,80,144,50,47,40,249,22,31,11, -80,144,52,46,40,22,166,15,10,22,173,15,10,22,174,15,10,22,175,15,10, +80,144,52,46,40,22,167,15,10,22,174,15,10,22,175,15,10,22,176,15,10, 248,22,157,6,23,197,2,28,248,22,157,7,23,194,2,12,86,94,248,22,190, 9,23,194,1,27,20,13,144,80,144,42,46,40,26,9,80,144,51,47,40,249, -22,31,11,80,144,53,46,40,22,166,15,10,22,173,15,10,22,174,15,10,22, -175,15,10,248,22,157,6,23,198,2,28,248,22,157,7,23,194,2,12,86,94, +22,31,11,80,144,53,46,40,22,167,15,10,22,174,15,10,22,175,15,10,22, +176,15,10,248,22,157,6,23,198,2,28,248,22,157,7,23,194,2,12,86,94, 248,22,190,9,23,194,1,248,80,144,43,8,54,42,197,86,94,249,22,148,7, 247,22,181,5,23,195,2,248,22,172,6,249,22,142,4,39,249,22,190,3,23, 199,1,23,198,1,27,248,22,134,6,28,23,198,2,23,198,1,86,94,23,198, -1,27,250,80,144,45,43,42,248,22,169,16,2,56,11,11,27,248,22,145,4, +1,27,250,80,144,45,43,42,248,22,170,16,2,56,11,11,27,248,22,145,4, 23,199,1,27,28,23,194,2,23,194,1,86,94,23,194,1,39,27,248,22,145, 4,23,202,1,27,28,23,194,2,23,194,1,86,94,23,194,1,39,249,22,149, 6,23,199,1,20,20,95,88,148,8,36,39,51,11,9,224,2,4,33,181,2, @@ -939,7 +939,7 @@ 2,88,148,8,36,41,61,41,2,6,223,0,33,82,80,144,39,42,40,20,15, 16,2,20,26,96,2,7,88,148,8,36,42,8,24,8,32,9,223,0,33,89, 88,148,8,36,41,50,55,9,223,0,33,90,88,148,8,36,40,49,55,9,223, -0,33,91,80,144,39,43,40,20,15,16,2,27,248,22,182,16,248,22,176,8, +0,33,91,80,144,39,43,40,20,15,16,2,27,248,22,183,16,248,22,176,8, 27,28,249,22,181,9,247,22,189,8,2,43,6,1,1,59,6,1,1,58,250, 22,146,8,6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23, 196,2,23,196,1,88,148,8,36,41,51,11,2,8,223,0,33,95,80,144,39, @@ -1031,7 +1031,7 @@ 39,16,0,39,16,2,2,6,2,7,41,11,11,11,16,5,2,4,2,8,2, 9,2,5,2,3,16,5,11,11,11,11,11,16,5,2,4,2,8,2,9,2, 5,2,3,44,44,40,12,11,11,16,0,16,0,16,0,39,39,11,12,11,11, -16,0,16,0,16,0,39,39,16,3,20,15,16,6,253,22,139,11,2,4,11, +16,0,16,0,16,0,39,39,16,3,20,15,16,6,253,22,140,11,2,4,11, 41,39,11,248,22,92,249,22,82,22,188,10,88,148,39,40,48,47,9,223,9, 33,10,80,144,39,39,40,80,144,39,40,40,80,144,39,41,40,80,144,39,42, 40,80,144,39,43,40,20,15,16,2,20,28,143,88,148,39,40,48,47,9,223, @@ -1077,80 +1077,80 @@ 98,6,12,12,109,111,100,117,108,101,45,112,97,116,104,63,6,2,2,46,46, 68,115,117,98,109,111,100,6,1,1,46,66,102,105,108,101,68,112,108,97,110, 101,116,6,4,4,46,114,107,116,6,8,8,109,97,105,110,46,114,107,116,69, -105,103,110,111,114,101,100,250,22,146,16,28,249,22,181,9,23,201,2,2,27, -86,94,23,199,1,23,197,1,28,248,22,151,16,23,200,2,249,22,146,16,23, +105,103,110,111,114,101,100,250,22,147,16,28,249,22,181,9,23,201,2,2,27, +86,94,23,199,1,23,197,1,28,248,22,152,16,23,200,2,249,22,147,16,23, 199,1,23,201,1,249,80,144,46,45,42,23,199,1,23,201,1,23,200,1,249, -80,144,46,46,42,23,198,1,2,28,250,22,146,16,28,249,22,181,9,23,201, -2,2,27,86,94,23,199,1,23,197,1,28,248,22,151,16,23,200,2,249,22, -146,16,23,199,1,23,201,1,249,80,144,46,45,42,23,199,1,23,201,1,23, -200,1,249,80,144,46,46,42,23,198,1,2,28,252,22,146,16,28,249,22,181, -9,23,203,2,2,27,86,94,23,201,1,23,199,1,28,248,22,151,16,23,202, -2,249,22,146,16,23,201,1,23,203,1,249,80,144,48,45,42,23,201,1,23, +80,144,46,46,42,23,198,1,2,28,250,22,147,16,28,249,22,181,9,23,201, +2,2,27,86,94,23,199,1,23,197,1,28,248,22,152,16,23,200,2,249,22, +147,16,23,199,1,23,201,1,249,80,144,46,45,42,23,199,1,23,201,1,23, +200,1,249,80,144,46,46,42,23,198,1,2,28,252,22,147,16,28,249,22,181, +9,23,203,2,2,27,86,94,23,201,1,23,199,1,28,248,22,152,16,23,202, +2,249,22,147,16,23,201,1,23,203,1,249,80,144,48,45,42,23,201,1,23, 203,1,23,202,1,2,29,247,22,190,8,249,80,144,48,46,42,23,200,1,80, -144,48,39,41,252,22,146,16,28,249,22,181,9,23,203,2,2,27,86,94,23, -201,1,23,199,1,28,248,22,151,16,23,202,2,249,22,146,16,23,201,1,23, +144,48,39,41,252,22,147,16,28,249,22,181,9,23,203,2,2,27,86,94,23, +201,1,23,199,1,28,248,22,152,16,23,202,2,249,22,147,16,23,201,1,23, 203,1,249,80,144,48,45,42,23,201,1,23,203,1,23,202,1,2,29,247,22, -190,8,249,80,144,48,46,42,23,200,1,80,144,48,39,41,27,252,22,146,16, +190,8,249,80,144,48,46,42,23,200,1,80,144,48,39,41,27,252,22,147,16, 28,249,22,181,9,23,205,2,2,27,86,94,23,203,1,23,201,1,28,248,22, -151,16,23,204,2,249,22,146,16,23,203,1,23,205,1,249,80,144,52,45,42, +152,16,23,204,2,249,22,147,16,23,203,1,23,205,1,249,80,144,52,45,42, 23,203,1,23,205,1,23,205,1,2,29,247,22,190,8,249,80,144,52,46,42, -23,202,1,80,144,52,39,41,27,250,22,164,16,196,11,32,0,88,148,8,36, +23,202,1,80,144,52,39,41,27,250,22,165,16,196,11,32,0,88,148,8,36, 39,44,11,9,222,11,28,192,249,22,82,195,28,196,194,39,11,249,22,5,20, 20,98,88,148,8,36,40,59,8,129,3,9,228,7,8,6,4,3,2,33,46, 23,195,1,23,196,1,23,197,1,23,199,1,23,201,1,23,198,1,27,252,22, -146,16,28,249,22,181,9,23,205,2,2,27,86,94,23,203,1,23,201,1,28, -248,22,151,16,23,204,2,249,22,146,16,23,203,1,23,205,1,249,80,144,52, +147,16,28,249,22,181,9,23,205,2,2,27,86,94,23,203,1,23,201,1,28, +248,22,152,16,23,204,2,249,22,147,16,23,203,1,23,205,1,249,80,144,52, 45,42,23,203,1,23,205,1,23,205,1,2,29,247,22,190,8,249,80,144,52, -46,42,23,202,1,80,144,52,39,41,27,250,22,164,16,196,11,32,0,88,148, +46,42,23,202,1,80,144,52,39,41,27,250,22,165,16,196,11,32,0,88,148, 8,36,39,44,11,9,222,11,28,192,249,22,82,195,28,196,194,39,11,249,22, 5,20,20,98,88,148,8,36,40,59,8,129,3,9,228,7,8,6,4,3,2, 33,48,23,195,1,23,196,1,23,197,1,23,199,1,23,201,1,23,198,1,27, -250,22,146,16,28,249,22,181,9,23,203,2,2,27,86,94,23,201,1,23,199, -1,28,248,22,151,16,23,202,2,249,22,146,16,23,201,1,23,203,1,249,80, +250,22,147,16,28,249,22,181,9,23,203,2,2,27,86,94,23,201,1,23,199, +1,28,248,22,152,16,23,202,2,249,22,147,16,23,201,1,23,203,1,249,80, 144,50,45,42,23,201,1,23,203,1,23,203,1,249,80,144,50,46,42,23,200, -1,2,28,27,250,22,164,16,196,11,32,0,88,148,8,36,39,44,11,9,222, +1,2,28,27,250,22,165,16,196,11,32,0,88,148,8,36,39,44,11,9,222, 11,28,192,249,22,82,195,28,196,194,39,11,249,22,5,20,20,98,88,148,8, 36,40,57,8,128,3,9,228,7,8,6,4,3,2,33,50,23,195,1,23,196, -1,23,197,1,23,199,1,23,201,1,23,198,1,27,250,22,146,16,28,249,22, -181,9,23,203,2,2,27,86,94,23,201,1,23,199,1,28,248,22,151,16,23, -202,2,249,22,146,16,23,201,1,23,203,1,249,80,144,50,45,42,23,201,1, -23,203,1,23,203,1,249,80,144,50,46,42,23,200,1,2,28,27,250,22,164, +1,23,197,1,23,199,1,23,201,1,23,198,1,27,250,22,147,16,28,249,22, +181,9,23,203,2,2,27,86,94,23,201,1,23,199,1,28,248,22,152,16,23, +202,2,249,22,147,16,23,201,1,23,203,1,249,80,144,50,45,42,23,201,1, +23,203,1,23,203,1,249,80,144,50,46,42,23,200,1,2,28,27,250,22,165, 16,196,11,32,0,88,148,8,36,39,44,11,9,222,11,28,192,249,22,82,195, 28,196,194,39,11,249,22,5,20,20,98,88,148,8,36,40,57,8,128,3,9, 228,7,8,6,4,3,2,33,52,23,195,1,23,196,1,23,197,1,23,199,1, 23,201,1,23,198,1,86,95,28,248,80,144,41,43,42,23,196,2,11,250,22, -132,12,2,25,6,12,12,112,97,116,104,45,115,116,114,105,110,103,63,23,198, +133,12,2,25,6,12,12,112,97,116,104,45,115,116,114,105,110,103,63,23,198, 2,28,23,196,2,28,28,248,22,66,23,197,2,10,28,248,22,91,23,197,2, -28,249,22,171,20,248,22,96,23,199,2,40,28,28,248,22,66,248,22,83,23, +28,249,22,172,20,248,22,96,23,199,2,40,28,28,248,22,66,248,22,83,23, 198,2,10,248,22,178,9,248,22,83,23,198,2,249,22,4,22,66,248,22,84, -23,199,2,11,11,11,11,250,22,132,12,2,25,6,71,71,40,111,114,47,99, +23,199,2,11,11,11,11,250,22,133,12,2,25,6,71,71,40,111,114,47,99, 32,35,102,32,115,121,109,98,111,108,63,32,40,99,111,110,115,47,99,32,40, 111,114,47,99,32,35,102,32,115,121,109,98,111,108,63,41,32,40,110,111,110, 45,101,109,112,116,121,45,108,105,115,116,111,102,32,115,121,109,98,111,108,63, 41,41,41,23,198,2,11,27,28,23,197,2,247,22,134,5,11,27,28,23,194, -2,250,22,161,2,80,143,45,44,248,22,147,17,247,22,159,14,11,11,27,28, +2,250,22,161,2,80,143,45,44,248,22,148,17,247,22,160,14,11,11,27,28, 23,194,2,250,22,161,2,248,22,84,23,198,2,23,198,2,11,11,28,23,193, 2,86,97,23,198,1,23,196,1,23,195,1,23,194,1,20,13,144,80,144,43, 41,40,250,80,144,46,42,40,249,22,31,11,80,144,48,41,40,22,135,5,248, 22,105,23,197,2,27,248,22,114,23,195,2,20,13,144,80,144,44,41,40,250, -80,144,47,42,40,249,22,31,11,80,144,49,41,40,22,186,5,28,248,22,128, -16,23,197,2,23,196,1,86,94,23,196,1,247,22,170,16,249,247,22,184,5, -248,22,184,20,23,197,1,23,202,1,86,94,23,193,1,27,28,248,22,153,16, -23,200,2,23,199,2,27,247,22,186,5,28,192,249,22,154,16,23,202,2,194, -23,200,2,90,144,42,11,89,146,42,39,11,248,22,149,16,23,203,1,86,94, -23,195,1,90,144,41,11,89,146,41,39,11,28,23,205,2,27,248,22,133,16, -23,198,2,19,248,22,156,8,194,28,28,249,22,173,20,23,195,4,43,249,22, +80,144,47,42,40,249,22,31,11,80,144,49,41,40,22,186,5,28,248,22,129, +16,23,197,2,23,196,1,86,94,23,196,1,247,22,171,16,249,247,22,184,5, +248,22,185,20,23,197,1,23,202,1,86,94,23,193,1,27,28,248,22,154,16, +23,200,2,23,199,2,27,247,22,186,5,28,192,249,22,155,16,23,202,2,194, +23,200,2,90,144,42,11,89,146,42,39,11,248,22,150,16,23,203,1,86,94, +23,195,1,90,144,41,11,89,146,41,39,11,28,23,205,2,27,248,22,134,16, +23,198,2,19,248,22,156,8,194,28,28,249,22,174,20,23,195,4,43,249,22, 159,8,2,26,249,22,162,8,197,249,22,190,3,23,199,4,43,11,249,22,7, -23,200,2,248,22,137,16,249,22,163,8,250,22,162,8,201,39,249,22,190,3, +23,200,2,248,22,138,16,249,22,163,8,250,22,162,8,201,39,249,22,190,3, 23,203,4,43,5,3,46,115,115,249,22,7,23,200,2,11,2,249,22,7,23, -198,2,11,27,28,249,22,181,9,23,196,2,23,199,2,23,199,2,249,22,146, +198,2,11,27,28,249,22,181,9,23,196,2,23,199,2,23,199,2,249,22,147, 16,23,198,2,23,196,2,27,28,23,196,2,28,249,22,181,9,23,198,2,23, -200,1,23,200,1,86,94,23,200,1,249,22,146,16,23,199,2,23,198,2,86, +200,1,23,200,1,86,94,23,200,1,249,22,147,16,23,199,2,23,198,2,86, 95,23,200,1,23,198,1,11,27,28,249,22,181,9,23,200,2,70,114,101,108, -97,116,105,118,101,86,94,23,198,1,2,27,23,198,1,27,247,22,175,16,27, -247,22,176,16,27,27,250,22,164,16,23,202,2,11,32,0,88,148,8,36,39, +97,116,105,118,101,86,94,23,198,1,2,27,23,198,1,27,247,22,176,16,27, +247,22,177,16,27,27,250,22,165,16,23,202,2,11,32,0,88,148,8,36,39, 44,11,9,222,11,28,192,249,22,82,23,201,2,28,23,211,2,194,39,11,27, -28,23,198,2,28,23,194,2,11,27,250,22,164,16,23,202,2,11,32,0,88, +28,23,198,2,28,23,194,2,11,27,250,22,165,16,23,202,2,11,32,0,88, 148,8,36,39,44,11,9,222,11,28,192,249,22,82,23,201,2,28,23,212,2, 194,39,11,11,27,28,23,195,2,23,195,2,23,194,2,27,88,148,8,36,41, 54,8,128,3,64,122,111,225,19,6,9,33,42,27,88,148,8,36,41,54,8, @@ -1167,8 +1167,8 @@ 23,199,1,23,198,1,23,196,1,23,195,1,23,194,1,20,13,144,80,144,8, 25,41,40,250,80,144,8,28,42,40,249,22,31,11,80,144,8,30,41,40,22, 135,5,11,20,13,144,80,144,8,25,41,40,250,80,144,8,28,42,40,249,22, -31,11,80,144,8,30,41,40,22,186,5,28,248,22,128,16,23,209,2,23,208, -1,86,94,23,208,1,247,22,170,16,249,247,22,181,16,248,22,83,23,196,1, +31,11,80,144,8,30,41,40,22,186,5,28,248,22,129,16,23,209,2,23,208, +1,86,94,23,208,1,247,22,171,16,249,247,22,182,16,248,22,83,23,196,1, 23,222,1,86,94,23,193,1,27,28,23,195,2,27,249,22,5,20,20,94,88, 148,39,40,53,8,129,3,9,228,29,7,15,16,20,28,33,49,23,200,1,23, 207,2,27,28,23,204,2,11,193,28,192,86,94,23,204,1,192,28,193,28,203, @@ -1178,8 +1178,8 @@ 196,1,23,195,1,20,13,144,80,144,8,26,41,40,250,80,144,8,29,42,40, 249,22,31,11,80,144,8,31,41,40,22,135,5,23,210,1,20,13,144,80,144, 8,26,41,40,250,80,144,8,29,42,40,249,22,31,11,80,144,8,31,41,40, -22,186,5,28,248,22,128,16,23,210,2,23,209,1,86,94,23,209,1,247,22, -170,16,249,247,22,181,16,248,22,83,23,196,1,23,223,1,86,94,23,193,1, +22,186,5,28,248,22,129,16,23,210,2,23,209,1,86,94,23,209,1,247,22, +171,16,249,247,22,182,16,248,22,83,23,196,1,23,223,1,86,94,23,193,1, 27,28,23,197,2,27,249,22,5,20,20,95,88,148,39,40,53,8,128,3,9, 228,30,11,16,17,20,29,33,51,23,213,1,23,204,1,23,208,2,27,28,23, 204,2,11,193,28,192,192,28,193,28,23,204,2,28,249,22,138,4,248,22,84, @@ -1189,8 +1189,8 @@ 47,23,223,1,23,222,1,248,22,83,23,199,2,11,23,212,2,20,13,144,80, 144,8,27,41,40,250,80,144,8,30,42,40,249,22,31,11,80,144,8,32,41, 40,22,135,5,11,20,13,144,80,144,8,27,41,40,250,80,144,8,30,42,40, -249,22,31,11,80,144,8,32,41,40,22,186,5,28,248,22,128,16,23,211,2, -23,210,1,86,94,23,210,1,247,22,170,16,249,247,22,184,5,248,22,184,20, +249,22,31,11,80,144,8,32,41,40,22,186,5,28,248,22,129,16,23,211,2, +23,210,1,86,94,23,210,1,247,22,171,16,249,247,22,184,5,248,22,185,20, 23,196,1,23,224,32,0,0,0,1,86,94,23,193,1,27,28,23,197,1,27, 249,22,5,20,20,97,88,148,39,40,53,8,128,3,9,228,31,11,17,18,22, 30,33,53,23,223,1,23,215,1,23,210,1,23,204,1,23,209,1,27,28,23, @@ -1201,17 +1201,17 @@ 83,23,199,2,23,214,2,23,213,2,20,13,144,80,144,8,28,41,40,250,80, 144,8,31,42,40,249,22,31,11,80,144,8,33,41,40,22,135,5,23,212,1, 20,13,144,80,144,8,28,41,40,250,80,144,8,31,42,40,249,22,31,11,80, -144,8,33,41,40,22,186,5,28,248,22,128,16,23,212,2,23,211,1,86,94, -23,211,1,247,22,170,16,249,247,22,184,5,248,22,184,20,23,196,1,23,224, +144,8,33,41,40,22,186,5,28,248,22,129,16,23,212,2,23,211,1,86,94, +23,211,1,247,22,171,16,249,247,22,184,5,248,22,185,20,23,196,1,23,224, 33,0,0,0,1,86,96,23,219,1,23,218,1,23,193,1,28,28,248,22,80, -23,224,32,0,0,0,2,248,22,184,20,23,224,32,0,0,0,2,10,27,28, +23,224,32,0,0,0,2,248,22,185,20,23,224,32,0,0,0,2,10,27,28, 23,199,2,86,94,23,210,1,23,211,1,86,94,23,211,1,23,210,1,28,28, -248,22,80,23,224,33,0,0,0,2,248,22,178,9,248,22,140,16,23,195,2, +248,22,80,23,224,33,0,0,0,2,248,22,178,9,248,22,141,16,23,195,2, 11,12,20,13,144,80,144,8,29,41,40,250,80,144,8,32,42,40,249,22,31, 11,80,144,8,34,41,40,22,135,5,28,23,224,35,0,0,0,2,28,23,202, 1,11,23,196,2,86,94,23,202,1,11,20,13,144,80,144,8,29,41,40,250, 80,144,8,32,42,40,249,22,31,11,80,144,8,34,41,40,22,186,5,28,248, -22,128,16,23,213,2,23,212,1,86,94,23,212,1,247,22,170,16,249,247,22, +22,129,16,23,213,2,23,212,1,86,94,23,212,1,247,22,171,16,249,247,22, 184,5,23,195,1,23,224,34,0,0,0,1,12,28,23,194,2,250,22,159,2, 248,22,84,23,198,1,23,196,1,250,22,92,23,201,1,23,202,1,23,203,1, 12,27,249,22,134,9,80,144,42,50,41,249,22,133,4,248,22,129,4,248,22, @@ -1257,10 +1257,10 @@ 22,166,7,23,199,2,23,197,2,249,22,82,250,22,184,7,23,200,2,39,23, 198,2,248,2,60,249,22,184,7,23,200,1,248,22,187,3,23,199,1,250,2, 63,197,23,199,4,248,22,187,3,196,19,248,22,165,7,23,195,2,28,249,22, -169,20,39,23,195,4,248,22,92,194,28,249,22,148,9,7,47,249,22,166,7, +170,20,39,23,195,4,248,22,92,194,28,249,22,148,9,7,47,249,22,166,7, 23,198,2,39,249,22,82,250,22,184,7,23,199,2,39,39,27,249,22,184,7, 23,199,1,40,19,248,22,165,7,23,195,2,250,2,61,23,197,1,23,196,4, -39,2,28,249,22,169,20,40,23,195,4,248,22,92,194,28,249,22,148,9,7, +39,2,28,249,22,170,20,40,23,195,4,248,22,92,194,28,249,22,148,9,7, 47,249,22,166,7,23,198,2,40,249,22,82,250,22,184,7,23,199,2,39,40, 248,2,60,249,22,184,7,23,199,1,41,250,2,63,196,23,196,4,41,2,28, 249,22,134,4,23,197,2,23,196,4,248,22,92,193,28,249,22,148,9,7,47, @@ -1275,23 +1275,23 @@ 198,2,23,197,2,249,22,82,250,22,184,7,23,199,2,39,23,198,2,248,2, 60,249,22,184,7,23,199,1,248,22,187,3,23,199,1,250,2,58,196,23,198, 4,248,22,187,3,196,32,74,88,148,39,40,58,11,2,31,222,33,75,28,248, -22,90,248,22,84,23,195,2,249,22,7,9,248,22,184,20,23,196,1,90,144, -41,11,89,146,41,39,11,27,248,22,185,20,23,197,2,28,248,22,90,248,22, -84,23,195,2,249,22,7,9,248,22,184,20,195,90,144,41,11,89,146,41,39, -11,27,248,22,185,20,196,28,248,22,90,248,22,84,23,195,2,249,22,7,9, -248,22,184,20,195,90,144,41,11,89,146,41,39,11,248,2,74,248,22,185,20, -196,249,22,7,249,22,82,248,22,184,20,199,196,195,249,22,7,249,22,82,248, -22,184,20,199,196,195,249,22,7,249,22,82,248,22,184,20,23,200,1,23,197, +22,90,248,22,84,23,195,2,249,22,7,9,248,22,185,20,23,196,1,90,144, +41,11,89,146,41,39,11,27,248,22,186,20,23,197,2,28,248,22,90,248,22, +84,23,195,2,249,22,7,9,248,22,185,20,195,90,144,41,11,89,146,41,39, +11,27,248,22,186,20,196,28,248,22,90,248,22,84,23,195,2,249,22,7,9, +248,22,185,20,195,90,144,41,11,89,146,41,39,11,248,2,74,248,22,186,20, +196,249,22,7,249,22,82,248,22,185,20,199,196,195,249,22,7,249,22,82,248, +22,185,20,199,196,195,249,22,7,249,22,82,248,22,185,20,23,200,1,23,197, 1,23,196,1,27,19,248,22,165,7,23,196,2,250,2,58,23,198,1,23,196, 4,39,2,28,23,195,1,192,28,248,22,90,248,22,84,23,195,2,249,22,7, -9,248,22,184,20,23,196,1,27,248,22,185,20,23,195,2,90,144,41,11,89, -146,41,39,11,28,248,22,90,248,22,84,23,197,2,249,22,7,9,248,22,184, -20,23,198,1,27,248,22,185,20,23,197,2,90,144,41,11,89,146,41,39,11, -28,248,22,90,248,22,84,23,197,2,249,22,7,9,248,22,184,20,197,90,144, -41,11,89,146,41,39,11,248,2,74,248,22,185,20,198,249,22,7,249,22,82, -248,22,184,20,201,196,195,249,22,7,249,22,82,248,22,184,20,23,203,1,196, -195,249,22,7,249,22,82,248,22,184,20,23,201,1,23,197,1,23,196,1,248, -22,158,12,252,22,175,10,248,22,169,4,23,200,2,248,22,165,4,23,200,2, +9,248,22,185,20,23,196,1,27,248,22,186,20,23,195,2,90,144,41,11,89, +146,41,39,11,28,248,22,90,248,22,84,23,197,2,249,22,7,9,248,22,185, +20,23,198,1,27,248,22,186,20,23,197,2,90,144,41,11,89,146,41,39,11, +28,248,22,90,248,22,84,23,197,2,249,22,7,9,248,22,185,20,197,90,144, +41,11,89,146,41,39,11,248,2,74,248,22,186,20,198,249,22,7,249,22,82, +248,22,185,20,201,196,195,249,22,7,249,22,82,248,22,185,20,23,203,1,196, +195,249,22,7,249,22,82,248,22,185,20,23,201,1,23,197,1,23,196,1,248, +22,159,12,252,22,175,10,248,22,169,4,23,200,2,248,22,165,4,23,200,2, 248,22,166,4,23,200,2,248,22,167,4,23,200,2,248,22,168,4,23,200,1, 28,24,194,2,12,20,13,144,80,144,39,41,40,80,143,39,59,89,146,40,40, 10,249,22,137,5,21,94,2,32,6,19,19,112,108,97,110,101,116,47,114,101, @@ -1299,50 +1299,50 @@ 100,117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,12,27,28, 23,195,2,28,249,22,181,9,23,197,2,80,143,42,55,86,94,23,195,1,80, 143,40,56,27,248,22,161,5,23,197,2,27,28,248,22,80,23,195,2,248,22, -184,20,23,195,1,23,194,1,28,248,22,128,16,23,194,2,90,144,42,11,89, -146,42,39,11,248,22,149,16,23,197,1,86,95,20,18,144,11,80,143,45,55, +185,20,23,195,1,23,194,1,28,248,22,129,16,23,194,2,90,144,42,11,89, +146,42,39,11,248,22,150,16,23,197,1,86,95,20,18,144,11,80,143,45,55, 199,20,18,144,11,80,143,45,56,192,192,86,94,23,193,1,11,86,94,23,195, -1,11,28,23,193,2,192,27,247,22,186,5,28,23,193,2,192,247,22,170,16, -90,144,42,11,89,146,42,39,11,248,22,149,16,23,198,2,86,95,23,195,1, -23,193,1,28,249,22,186,16,0,11,35,114,120,34,91,46,93,115,115,36,34, -248,22,133,16,23,197,1,249,80,144,44,61,42,23,199,1,2,26,196,249,80, +1,11,28,23,193,2,192,27,247,22,186,5,28,23,193,2,192,247,22,171,16, +90,144,42,11,89,146,42,39,11,248,22,150,16,23,198,2,86,95,23,195,1, +23,193,1,28,249,22,187,16,0,11,35,114,120,34,91,46,93,115,115,36,34, +248,22,134,16,23,197,1,249,80,144,44,61,42,23,199,1,2,26,196,249,80, 144,41,57,42,195,10,249,22,12,23,196,1,80,144,41,54,41,86,96,28,248, -22,159,5,23,196,2,11,250,22,132,12,2,22,6,21,21,114,101,115,111,108, +22,159,5,23,196,2,11,250,22,133,12,2,22,6,21,21,114,101,115,111,108, 118,101,100,45,109,111,100,117,108,101,45,112,97,116,104,63,23,198,2,28,23, -196,2,28,248,22,160,14,23,197,2,11,250,22,132,12,2,22,6,20,20,40, +196,2,28,248,22,161,14,23,197,2,11,250,22,133,12,2,22,6,20,20,40, 111,114,47,99,32,35,102,32,110,97,109,101,115,112,97,99,101,63,41,23,199, 2,11,28,24,193,2,248,24,194,1,23,196,2,86,94,23,193,1,11,27,250, -22,161,2,80,144,44,44,41,248,22,147,17,247,22,159,14,11,27,28,23,194, +22,161,2,80,144,44,44,41,248,22,148,17,247,22,160,14,11,27,28,23,194, 2,23,194,1,86,94,23,194,1,27,249,22,82,247,22,141,2,247,22,141,2, -86,94,250,22,159,2,80,144,46,44,41,248,22,147,17,247,22,159,14,195,192, +86,94,250,22,159,2,80,144,46,44,41,248,22,148,17,247,22,160,14,195,192, 86,94,250,22,159,2,248,22,83,23,197,2,23,200,2,70,100,101,99,108,97, 114,101,100,28,23,198,2,27,28,248,22,80,248,22,161,5,23,200,2,248,22, 160,5,248,22,83,248,22,161,5,23,201,1,23,198,1,27,250,22,161,2,80, -144,47,44,41,248,22,147,17,23,204,1,11,28,23,193,2,27,250,22,161,2, -248,22,84,23,198,1,23,198,2,11,28,23,193,2,250,22,159,2,248,22,185, -20,23,200,1,23,198,1,23,196,1,12,12,12,86,94,251,22,153,12,247,22, -157,12,67,101,114,114,111,114,6,69,69,100,101,102,97,117,108,116,32,109,111, +144,47,44,41,248,22,148,17,23,204,1,11,28,23,193,2,27,250,22,161,2, +248,22,84,23,198,1,23,198,2,11,28,23,193,2,250,22,159,2,248,22,186, +20,23,200,1,23,198,1,23,196,1,12,12,12,86,94,251,22,154,12,247,22, +158,12,67,101,114,114,111,114,6,69,69,100,101,102,97,117,108,116,32,109,111, 100,117,108,101,32,110,97,109,101,32,114,101,115,111,108,118,101,114,32,99,97, 108,108,101,100,32,119,105,116,104,32,116,104,114,101,101,32,97,114,103,117,109, 101,110,116,115,32,40,100,101,112,114,101,99,97,116,101,100,41,11,251,24,197, 1,23,198,1,23,199,1,23,200,1,10,32,85,88,148,39,43,57,11,2,31, 222,33,86,28,248,22,90,23,197,2,28,248,22,90,195,193,249,22,82,195,248, 22,98,197,28,249,22,183,9,248,22,83,23,199,2,2,34,28,248,22,90,23, -196,2,86,95,23,196,1,23,195,1,250,22,128,12,2,22,6,37,37,116,111, +196,2,86,95,23,196,1,23,195,1,250,22,129,12,2,22,6,37,37,116,111, 111,32,109,97,110,121,32,34,46,46,34,115,32,105,110,32,115,117,98,109,111, 100,117,108,101,32,112,97,116,104,58,32,126,46,115,250,22,93,2,35,28,249, -22,183,9,23,202,2,2,36,23,200,1,28,248,22,128,16,23,201,2,23,200, +22,183,9,23,202,2,2,36,23,200,1,28,248,22,129,16,23,201,2,23,200, 1,249,22,92,28,248,22,66,23,203,2,2,5,2,37,23,202,1,23,199,1, -251,2,85,196,197,248,22,84,199,248,22,185,20,200,251,2,85,196,197,249,22, -82,248,22,184,20,202,200,248,22,185,20,200,251,2,85,197,196,9,197,27,250, -22,185,7,27,28,23,198,2,28,247,22,145,12,248,80,144,47,58,42,23,199, +251,2,85,196,197,248,22,84,199,248,22,186,20,200,251,2,85,196,197,249,22, +82,248,22,185,20,202,200,248,22,186,20,200,251,2,85,197,196,9,197,27,250, +22,185,7,27,28,23,198,2,28,247,22,146,12,248,80,144,47,58,42,23,199, 2,11,11,28,192,192,6,29,29,115,116,97,110,100,97,114,100,45,109,111,100, 117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,6,2,2,58, -32,250,22,133,17,0,7,35,114,120,34,92,110,34,23,203,1,249,22,146,8, +32,250,22,134,17,0,7,35,114,120,34,92,110,34,23,203,1,249,22,146,8, 6,23,23,10,32,32,102,111,114,32,109,111,100,117,108,101,32,112,97,116,104, -58,32,126,115,10,23,203,2,248,22,188,13,28,23,195,2,251,22,132,13,23, +58,32,126,115,10,23,203,2,248,22,189,13,28,23,195,2,251,22,133,13,23, 198,1,247,22,27,248,22,92,23,200,1,23,200,1,86,94,23,195,1,250,22, -159,13,23,197,1,247,22,27,23,199,1,19,248,22,165,7,194,28,249,22,173, +160,13,23,197,1,247,22,27,23,199,1,19,248,22,165,7,194,28,249,22,174, 20,23,195,4,42,28,249,22,181,9,7,46,249,22,166,7,197,249,22,190,3, 23,199,4,42,28,28,249,22,181,9,7,115,249,22,166,7,197,249,22,190,3, 23,199,4,41,249,22,181,9,7,115,249,22,166,7,197,249,22,190,3,23,199, @@ -1350,9 +1350,9 @@ 2,39,193,193,193,2,28,249,22,168,7,194,2,36,2,27,28,249,22,168,7, 194,2,34,64,117,112,192,0,8,35,114,120,34,91,46,93,34,32,92,88,148, 8,36,40,50,11,2,31,222,33,93,28,248,22,90,23,194,2,9,250,22,93, -6,4,4,10,32,32,32,248,22,132,16,248,22,106,23,198,2,248,2,92,248, -22,185,20,23,198,1,28,249,22,183,9,248,22,84,23,200,2,23,196,1,28, -249,22,181,9,248,22,184,20,23,200,1,23,198,1,251,22,128,12,2,22,6, +6,4,4,10,32,32,32,248,22,133,16,248,22,106,23,198,2,248,2,92,248, +22,186,20,23,198,1,28,249,22,183,9,248,22,84,23,200,2,23,196,1,28, +249,22,181,9,248,22,185,20,23,200,1,23,198,1,251,22,129,12,2,22,6, 41,41,99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,10,32,32, 97,116,32,112,97,116,104,58,32,126,97,10,32,32,112,97,116,104,115,58,126, 97,23,197,1,249,22,1,22,185,7,248,2,92,248,22,98,23,203,1,12,12, @@ -1361,38 +1361,38 @@ 252,80,144,54,42,40,249,22,31,11,80,144,56,41,40,22,134,5,23,204,2, 22,136,5,248,28,23,199,2,20,20,94,88,148,8,36,40,49,11,9,223,6, 33,96,23,199,1,86,94,23,199,1,22,7,28,248,22,66,23,201,2,23,200, -1,28,28,248,22,80,23,201,2,249,22,181,9,248,22,184,20,23,203,2,2, +1,28,28,248,22,80,23,201,2,249,22,181,9,248,22,185,20,23,203,2,2, 32,11,23,200,1,86,94,23,200,1,28,248,22,159,5,23,206,2,27,248,22, 161,5,23,207,2,28,248,22,66,193,249,22,92,2,5,194,192,23,205,2,249, -247,22,185,5,23,198,1,27,248,22,70,248,22,132,16,23,203,1,28,23,198, -2,28,250,22,161,2,248,22,184,20,23,207,1,23,205,1,11,249,22,82,11, +247,22,185,5,23,198,1,27,248,22,70,248,22,133,16,23,203,1,28,23,198, +2,28,250,22,161,2,248,22,185,20,23,207,1,23,205,1,11,249,22,82,11, 199,249,22,82,194,199,192,86,96,28,248,22,170,5,23,196,2,11,28,248,22, -161,4,23,198,2,250,22,130,12,11,6,15,15,98,97,100,32,109,111,100,117, -108,101,32,112,97,116,104,23,200,2,250,22,132,12,2,22,2,33,23,198,2, -28,23,196,2,28,248,22,159,5,23,197,2,11,250,22,132,12,2,22,6,31, +161,4,23,198,2,250,22,131,12,11,6,15,15,98,97,100,32,109,111,100,117, +108,101,32,112,97,116,104,23,200,2,250,22,133,12,2,22,2,33,23,198,2, +28,23,196,2,28,248,22,159,5,23,197,2,11,250,22,133,12,2,22,6,31, 31,40,111,114,47,99,32,35,102,32,114,101,115,111,108,118,101,100,45,109,111, 100,117,108,101,45,112,97,116,104,63,41,23,199,2,11,28,23,197,2,28,248, -22,161,4,23,198,2,11,250,22,132,12,2,22,6,17,17,40,111,114,47,99, +22,161,4,23,198,2,11,250,22,133,12,2,22,6,17,17,40,111,114,47,99, 32,35,102,32,115,121,110,116,97,120,63,41,23,200,2,11,27,32,0,88,148, 39,41,50,11,78,102,108,97,116,116,101,110,45,115,117,98,45,112,97,116,104, -222,33,87,28,28,248,22,80,23,197,2,249,22,181,9,248,22,184,20,23,199, +222,33,87,28,28,248,22,80,23,197,2,249,22,181,9,248,22,185,20,23,199, 2,2,5,11,86,98,23,199,1,23,198,1,23,197,1,23,194,1,23,193,1, 248,22,160,5,248,22,105,23,198,1,28,28,248,22,80,23,197,2,28,249,22, -181,9,248,22,184,20,23,199,2,2,35,28,248,22,80,248,22,105,23,198,2, +181,9,248,22,185,20,23,199,2,2,35,28,248,22,80,248,22,105,23,198,2, 249,22,181,9,248,22,109,23,199,2,2,5,11,11,11,86,97,23,199,1,23, 198,1,23,197,1,23,194,1,248,22,160,5,249,23,196,1,248,22,122,23,200, 2,248,22,107,23,200,1,28,28,248,22,80,23,197,2,28,249,22,181,9,248, -22,184,20,23,199,2,2,35,28,28,249,22,183,9,248,22,105,23,199,2,2, +22,185,20,23,199,2,2,35,28,28,249,22,183,9,248,22,105,23,199,2,2, 36,10,249,22,183,9,248,22,105,23,199,2,2,34,28,23,197,2,27,248,22, 161,5,23,199,2,28,248,22,66,193,10,28,248,22,80,193,248,22,66,248,22, -184,20,194,11,11,11,11,11,86,96,23,199,1,23,198,1,23,194,1,27,248, +185,20,194,11,11,11,11,11,86,96,23,199,1,23,198,1,23,194,1,27,248, 22,161,5,23,199,1,248,22,160,5,249,23,197,1,28,248,22,80,23,197,2, -248,22,184,20,23,197,2,23,196,2,27,28,249,22,183,9,248,22,105,23,204, -2,2,34,248,22,185,20,201,248,22,107,201,28,248,22,80,23,198,2,249,22, -97,248,22,185,20,199,194,192,28,28,248,22,80,23,197,2,249,22,181,9,248, -22,184,20,23,199,2,2,38,11,86,94,23,193,1,86,94,248,80,144,42,8, +248,22,185,20,23,197,2,23,196,2,27,28,249,22,183,9,248,22,105,23,204, +2,2,34,248,22,186,20,201,248,22,107,201,28,248,22,80,23,198,2,249,22, +97,248,22,186,20,199,194,192,28,28,248,22,80,23,197,2,249,22,181,9,248, +22,185,20,23,199,2,2,38,11,86,94,23,193,1,86,94,248,80,144,42,8, 28,42,23,195,2,253,24,200,1,23,202,1,23,203,1,23,204,1,23,205,1, -11,80,143,47,59,28,28,248,22,80,23,197,2,28,249,22,181,9,248,22,184, +11,80,143,47,59,28,28,248,22,80,23,197,2,28,249,22,181,9,248,22,185, 20,23,199,2,2,35,28,248,22,80,248,22,105,23,198,2,249,22,181,9,248, 22,109,23,199,2,2,38,11,11,11,86,94,23,193,1,86,94,248,80,144,42, 8,28,42,23,195,2,253,24,200,1,248,22,105,23,203,2,23,203,1,23,204, @@ -1400,24 +1400,24 @@ 148,8,36,40,57,8,240,0,0,8,0,1,19,115,104,111,119,45,99,111,108, 108,101,99,116,105,111,110,45,101,114,114,225,3,4,6,33,88,27,32,0,88, 148,8,36,40,53,11,69,115,115,45,62,114,107,116,222,33,89,27,28,248,22, -80,23,200,2,28,249,22,181,9,2,35,248,22,184,20,23,202,2,27,248,22, +80,23,200,2,28,249,22,181,9,2,35,248,22,185,20,23,202,2,27,248,22, 105,23,201,2,28,28,249,22,183,9,23,195,2,2,36,10,249,22,183,9,23, 195,2,2,34,86,94,23,193,1,28,23,201,2,27,248,22,161,5,23,203,2, -28,248,22,80,193,248,22,184,20,193,192,250,22,128,12,2,22,6,45,45,110, +28,248,22,80,193,248,22,185,20,193,192,250,22,129,12,2,22,6,45,45,110, 111,32,98,97,115,101,32,112,97,116,104,32,102,111,114,32,114,101,108,97,116, 105,118,101,32,115,117,98,109,111,100,117,108,101,32,112,97,116,104,58,32,126, 46,115,23,203,2,192,23,199,2,23,199,2,27,28,248,22,80,23,201,2,28, -249,22,181,9,2,35,248,22,184,20,23,203,2,27,28,28,249,22,183,9,248, +249,22,181,9,2,35,248,22,185,20,23,203,2,27,28,28,249,22,183,9,248, 22,105,23,204,2,2,36,23,202,2,28,249,22,183,9,248,22,105,23,204,2, 2,34,23,202,2,11,27,248,22,161,5,23,204,2,27,28,249,22,183,9,248, -22,105,23,206,2,2,34,248,22,185,20,23,204,1,248,22,107,23,204,1,28, -248,22,80,23,195,2,249,23,202,1,248,22,184,20,23,197,2,249,22,97,248, -22,185,20,23,199,1,23,197,1,249,23,202,1,23,196,1,23,195,1,249,23, -200,1,2,36,28,249,22,183,9,248,22,105,23,206,2,2,34,248,22,185,20, -23,204,1,248,22,107,23,204,1,28,248,22,80,193,248,22,185,20,193,11,86, +22,105,23,206,2,2,34,248,22,186,20,23,204,1,248,22,107,23,204,1,28, +248,22,80,23,195,2,249,23,202,1,248,22,185,20,23,197,2,249,22,97,248, +22,186,20,23,199,1,23,197,1,249,23,202,1,23,196,1,23,195,1,249,23, +200,1,2,36,28,249,22,183,9,248,22,105,23,206,2,2,34,248,22,186,20, +23,204,1,248,22,107,23,204,1,28,248,22,80,193,248,22,186,20,193,11,86, 95,23,200,1,23,197,1,11,86,95,23,200,1,23,197,1,11,27,28,248,22, 66,23,196,2,86,94,23,196,1,27,248,80,144,48,51,42,249,22,82,23,199, -2,248,22,147,17,247,22,159,14,28,23,193,2,86,94,23,198,1,192,90,144, +2,248,22,148,17,247,22,160,14,28,23,193,2,86,94,23,198,1,192,90,144, 41,11,89,146,41,39,11,249,80,144,51,57,42,248,22,73,23,201,2,11,27, 28,248,22,90,23,195,2,2,40,249,22,185,7,23,197,2,2,39,252,80,144, 55,8,23,42,23,206,1,28,248,22,90,23,200,2,23,200,1,86,94,23,200, @@ -1426,60 +1426,60 @@ 1,27,248,80,144,48,8,29,42,23,204,2,27,248,80,144,49,51,42,249,22, 82,23,200,2,23,197,2,28,23,193,2,86,95,23,198,1,23,194,1,192,90, 144,41,11,89,146,41,39,11,249,80,144,52,57,42,23,201,2,11,28,248,22, -90,23,194,2,86,94,23,193,1,249,22,146,16,23,198,1,248,23,203,1,23, -197,1,250,22,1,22,146,16,23,199,1,249,22,97,249,22,2,32,0,88,148, +90,23,194,2,86,94,23,193,1,249,22,147,16,23,198,1,248,23,203,1,23, +197,1,250,22,1,22,147,16,23,199,1,249,22,97,249,22,2,32,0,88,148, 8,36,40,47,11,9,222,33,90,23,200,1,248,22,92,248,23,207,1,23,201, -1,28,248,22,128,16,23,196,2,86,95,23,197,1,23,196,1,248,80,144,47, -8,30,42,248,22,156,16,28,248,22,153,16,23,198,2,23,197,2,249,22,154, +1,28,248,22,129,16,23,196,2,86,95,23,197,1,23,196,1,248,80,144,47, +8,30,42,248,22,157,16,28,248,22,154,16,23,198,2,23,197,2,249,22,155, 16,23,199,2,248,80,144,51,8,29,42,23,207,2,28,249,22,181,9,248,22, 83,23,198,2,2,32,27,248,80,144,48,51,42,249,22,82,23,199,2,248,22, -147,17,247,22,159,14,28,23,193,2,86,95,23,198,1,23,197,1,192,90,144, +148,17,247,22,160,14,28,23,193,2,86,95,23,198,1,23,197,1,192,90,144, 41,11,89,146,41,39,11,249,80,144,51,57,42,248,22,105,23,201,2,11,27, -28,248,22,90,248,22,107,23,201,2,28,248,22,90,23,195,2,249,22,190,16, +28,248,22,90,248,22,107,23,201,2,28,248,22,90,23,195,2,249,22,191,16, 2,91,23,197,2,11,10,27,28,23,194,2,248,23,202,1,23,197,2,28,248, -22,90,23,196,2,86,94,23,201,1,2,40,28,249,22,190,16,2,91,23,198, +22,90,23,196,2,86,94,23,201,1,2,40,28,249,22,191,16,2,91,23,198, 2,248,23,202,1,23,197,2,86,94,23,201,1,249,22,185,7,23,198,2,2, 39,27,28,23,195,1,86,94,23,197,1,249,22,97,28,248,22,90,248,22,107, 23,205,2,21,93,6,5,5,109,122,108,105,98,249,22,1,22,97,249,22,2, 80,144,58,8,31,42,248,22,107,23,208,2,23,198,1,28,248,22,90,23,197, 2,86,94,23,196,1,248,22,92,23,198,1,86,94,23,197,1,23,196,1,252, -80,144,57,8,23,42,23,208,1,248,22,83,23,199,2,248,22,185,20,23,199, -1,23,199,1,10,86,95,23,197,1,23,196,1,28,249,22,181,9,248,22,184, -20,23,198,2,2,37,248,80,144,47,8,30,42,248,22,156,16,249,22,154,16, -248,22,158,16,248,22,105,23,201,2,248,80,144,51,8,29,42,23,207,2,12, -86,94,28,248,22,128,16,23,194,2,11,28,248,22,129,9,23,194,2,11,28, -23,203,2,250,22,130,12,69,114,101,113,117,105,114,101,249,22,146,8,6,17, +80,144,57,8,23,42,23,208,1,248,22,83,23,199,2,248,22,186,20,23,199, +1,23,199,1,10,86,95,23,197,1,23,196,1,28,249,22,181,9,248,22,185, +20,23,198,2,2,37,248,80,144,47,8,30,42,248,22,157,16,249,22,155,16, +248,22,159,16,248,22,105,23,201,2,248,80,144,51,8,29,42,23,207,2,12, +86,94,28,248,22,129,16,23,194,2,11,28,248,22,129,9,23,194,2,11,28, +23,203,2,250,22,131,12,69,114,101,113,117,105,114,101,249,22,146,8,6,17, 17,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198, -2,248,22,83,23,199,2,6,0,0,23,206,2,250,22,132,12,2,22,2,33, +2,248,22,83,23,199,2,6,0,0,23,206,2,250,22,133,12,2,22,2,33, 23,198,2,27,28,248,22,129,9,23,195,2,249,22,134,9,23,196,2,39,249, -22,156,16,248,22,157,16,23,197,2,11,27,28,248,22,129,9,23,196,2,249, +22,157,16,248,22,158,16,23,197,2,11,27,28,248,22,129,9,23,196,2,249, 22,134,9,23,197,2,40,248,80,144,49,8,24,42,23,195,2,90,144,42,11, 89,146,42,39,11,28,248,22,129,9,23,199,2,250,22,7,2,41,249,22,134, -9,23,203,2,41,2,41,248,22,149,16,23,198,2,86,95,23,195,1,23,193, +9,23,203,2,41,2,41,248,22,150,16,23,198,2,86,95,23,195,1,23,193, 1,27,28,248,22,129,9,23,200,2,249,22,134,9,23,201,2,42,249,80,144, 54,61,42,23,197,2,5,0,27,28,248,22,129,9,23,201,2,249,22,134,9, 23,202,2,43,248,22,160,5,23,200,2,27,250,22,161,2,80,144,57,44,41, -248,22,147,17,247,22,159,14,11,27,28,23,194,2,23,194,1,86,94,23,194, +248,22,148,17,247,22,160,14,11,27,28,23,194,2,23,194,1,86,94,23,194, 1,27,249,22,82,247,22,141,2,247,22,141,2,86,94,250,22,159,2,80,144, -59,44,41,248,22,147,17,247,22,159,14,195,192,27,28,23,204,2,248,22,160, +59,44,41,248,22,148,17,247,22,160,14,195,192,27,28,23,204,2,248,22,160, 5,249,22,82,248,22,161,5,23,200,2,23,207,2,23,196,2,86,95,28,23, 214,2,28,250,22,161,2,248,22,83,23,198,2,195,11,86,96,23,213,1,23, 204,1,23,194,1,11,27,251,22,31,11,80,144,61,53,41,9,28,248,22,15, -80,144,8,23,54,41,80,144,61,54,41,247,22,17,27,248,22,147,17,247,22, -159,14,86,94,249,22,3,88,148,8,36,40,57,11,9,226,2,3,12,13,33, +80,144,8,23,54,41,80,144,61,54,41,247,22,17,27,248,22,148,17,247,22, +160,14,86,94,249,22,3,88,148,8,36,40,57,11,9,226,2,3,12,13,33, 94,23,196,2,248,28,248,22,15,80,144,60,54,41,32,0,88,148,39,40,45, 11,9,222,33,95,80,144,59,8,32,42,20,20,98,88,148,39,39,8,25,8, 240,12,64,0,0,9,233,20,1,2,4,6,7,11,12,14,15,23,33,97,23, 216,1,23,207,1,23,197,1,23,195,1,23,194,1,86,96,23,213,1,23,204, 1,23,194,1,11,28,248,22,129,9,23,204,1,11,28,23,214,1,28,28,248, 22,162,7,23,206,2,10,28,248,22,66,23,206,2,10,28,248,22,80,23,206, -2,249,22,181,9,248,22,184,20,23,208,2,2,32,11,249,80,144,58,52,42, +2,249,22,181,9,248,22,185,20,23,208,2,2,32,11,249,80,144,58,52,42, 28,248,22,162,7,23,208,2,249,22,82,23,209,1,248,80,144,61,8,29,42, -23,217,1,86,94,23,214,1,249,22,82,23,209,1,248,22,147,17,247,22,159, +23,217,1,86,94,23,214,1,249,22,82,23,209,1,248,22,148,17,247,22,160, 14,252,22,131,9,23,209,1,23,208,1,23,206,1,23,204,1,23,203,1,11, 11,192,86,96,20,18,144,11,80,143,39,59,248,80,144,40,8,27,40,249,22, 31,11,80,144,42,41,40,248,22,133,5,80,144,40,60,41,248,22,185,5,80, -144,40,40,41,248,22,158,15,80,144,40,48,42,20,18,144,11,80,143,39,59, +144,40,40,41,248,22,159,15,80,144,40,48,42,20,18,144,11,80,143,39,59, 248,80,144,40,8,27,40,249,22,31,11,80,144,42,41,40,20,18,144,11,80, 143,39,59,248,80,144,40,8,27,40,249,22,31,11,80,144,42,41,40,145,40, 9,20,122,145,2,1,39,16,1,11,16,0,20,27,15,56,9,2,2,2,2, @@ -1502,7 +1502,7 @@ 11,16,3,2,23,2,21,2,24,42,42,40,12,11,11,16,0,16,0,16,0, 39,39,11,12,11,11,16,0,16,0,16,0,39,39,16,24,20,15,16,2,248, 22,189,8,71,115,111,45,115,117,102,102,105,120,80,144,39,39,40,20,15,16, -2,27,249,22,181,9,247,22,179,16,76,109,111,100,105,102,121,45,115,101,99, +2,27,249,22,181,9,247,22,180,16,76,109,111,100,105,102,121,45,115,101,99, 111,110,100,115,88,148,39,41,8,42,8,189,7,2,4,224,1,0,33,54,80, 144,39,40,40,20,15,16,2,32,0,88,148,8,36,44,55,11,2,9,222,33, 55,80,144,39,47,40,20,15,16,2,20,28,143,32,0,88,148,8,36,40,45, diff --git a/racket/src/racket/src/jit.h b/racket/src/racket/src/jit.h index 7f39a9926f..ac3c0d47a0 100644 --- a/racket/src/racket/src/jit.h +++ b/racket/src/racket/src/jit.h @@ -1524,7 +1524,8 @@ int scheme_generate_struct_op(mz_jit_state *jitter, int kind, int for_branch, Branch_Info *branch_info, int branch_short, int result_ignored, int check_proc, int check_arg_fixnum, - int type_pos, int field_pos, + int type_pos, int field_pos, + int authentic, int pop_and_jump, jit_insn *refslow, jit_insn *refslow2, jit_insn *bref_false, jit_insn *bref_true); diff --git a/racket/src/racket/src/jitcall.c b/racket/src/racket/src/jitcall.c index 383f7aa49a..ac8c331890 100644 --- a/racket/src/racket/src/jitcall.c +++ b/racket/src/racket/src/jitcall.c @@ -2421,10 +2421,10 @@ int scheme_generate_app(Scheme_App_Rec *app, Scheme_Object **alt_rands, int num_ static int detect_unsafe_struct_refs(Scheme_Object *arg, Scheme_Object **alt_rands, Scheme_App_Rec *app, int i, int num_rands, int shift) -/* Look for `(unsafe-struct-ref id 'num)` ... as a sequence of +/* Look for `(unsafe-struct[*]-ref id 'num)` ... as a sequence of arguments, which shows up as a result of `struct-copy`, and return the length of the sequence. Instead of performing each - `unsafe-struct-ref` separately, which involves a chaperone test + `unsafe-struct[*]-ref` separately, which can involve a chaperone test each time, we'll test once and extract all. */ { Scheme_App3_Rec *app3, *next_app3; @@ -2432,7 +2432,8 @@ static int detect_unsafe_struct_refs(Scheme_Object *arg, Scheme_Object **alt_ran if (SAME_TYPE(SCHEME_TYPE(arg), scheme_application3_type)) { app3 = (Scheme_App3_Rec *)arg; - if (SAME_OBJ(app3->rator, scheme_unsafe_struct_ref_proc) + if ((SAME_OBJ(app3->rator, scheme_unsafe_struct_ref_proc) + || SAME_OBJ(app3->rator, scheme_unsafe_struct_star_ref_proc)) && SAME_TYPE(SCHEME_TYPE(app3->rand1), scheme_local_type) && SCHEME_INTP(app3->rand2)) { int seq = 1, delta = SCHEME_INT_VAL(app3->rand2) - i; @@ -2441,7 +2442,8 @@ static int detect_unsafe_struct_refs(Scheme_Object *arg, Scheme_Object **alt_ran next_arg = (alt_rands ? alt_rands[i+shift] : app->args[i+shift]); if (SAME_TYPE(SCHEME_TYPE(next_arg), scheme_application3_type)) { next_app3 = (Scheme_App3_Rec *)next_arg; - if (SAME_OBJ(next_app3->rator, scheme_unsafe_struct_ref_proc) + if ((SAME_OBJ(next_app3->rator, scheme_unsafe_struct_ref_proc) + || SAME_OBJ(next_app3->rator, scheme_unsafe_struct_star_ref_proc)) && SAME_TYPE(SCHEME_TYPE(next_app3->rand1), scheme_local_type) && SCHEME_INTP(next_app3->rand2) && (SCHEME_INT_VAL(next_app3->rand2) == i + delta) @@ -2466,7 +2468,7 @@ static int generate_unsafe_struct_ref_sequence(mz_jit_state *jitter, Scheme_Obje { Scheme_App3_Rec *app3 = (Scheme_App3_Rec *)arg; int i, base = SCHEME_INT_VAL(app3->rand2); - GC_CAN_IGNORE jit_insn *ref, *refslow, *ref2; + GC_CAN_IGNORE jit_insn *ref2; /* Using `last_arg` ensures that we clear the local, if needed */ mz_runstack_skipped(jitter, 2); @@ -2476,18 +2478,22 @@ static int generate_unsafe_struct_ref_sequence(mz_jit_state *jitter, Scheme_Obje /* Check for chaperones, and take slow path if found */ __START_SHORT_JUMPS__(1); - jit_ldxi_s(JIT_R2, JIT_R0, &((Scheme_Object *)0x0)->type); - ref = jit_bnei_i(jit_forward(), JIT_R2, scheme_chaperone_type); - refslow = jit_get_ip(); - jit_addi_p(JIT_R1, JIT_RUNSTACK, WORDS_TO_BYTES(stack_pos)); - jit_str_p(JIT_R1, JIT_R0); - jit_movi_i(JIT_V1, base); - jit_movi_p(JIT_R0, count); - (void)jit_calli(sjc.struct_raw_refs_code); - ref2 = jit_jmpi(jit_forward()); - mz_patch_branch(ref); - (void)jit_beqi_i(refslow, JIT_R2, scheme_proc_chaperone_type); - CHECK_LIMIT(); + if (SAME_OBJ(app3->rator, scheme_unsafe_struct_ref_proc)) { + GC_CAN_IGNORE jit_insn *ref, *refslow; + jit_ldxi_s(JIT_R2, JIT_R0, &((Scheme_Object *)0x0)->type); + ref = jit_bnei_i(jit_forward(), JIT_R2, scheme_chaperone_type); + refslow = jit_get_ip(); + jit_addi_p(JIT_R1, JIT_RUNSTACK, WORDS_TO_BYTES(stack_pos)); + jit_str_p(JIT_R1, JIT_R0); + jit_movi_i(JIT_V1, base); + jit_movi_p(JIT_R0, count); + (void)jit_calli(sjc.struct_raw_refs_code); + ref2 = jit_jmpi(jit_forward()); + mz_patch_branch(ref); + (void)jit_beqi_i(refslow, JIT_R2, scheme_proc_chaperone_type); + CHECK_LIMIT(); + } else + ref2 = NULL; /* This is the fast path: */ for (i = 0; i < count; i++) { @@ -2499,7 +2505,8 @@ static int generate_unsafe_struct_ref_sequence(mz_jit_state *jitter, Scheme_Obje CHECK_LIMIT(); } - mz_patch_branch(ref2); + if (ref2) + mz_patch_branch(ref2); __END_SHORT_JUMPS__(1); return 1; diff --git a/racket/src/racket/src/jitcommon.c b/racket/src/racket/src/jitcommon.c index 781e203dc3..71b135ba68 100644 --- a/racket/src/racket/src/jitcommon.c +++ b/racket/src/racket/src/jitcommon.c @@ -1561,7 +1561,8 @@ int scheme_generate_struct_op(mz_jit_state *jitter, int kind, int for_branch, Branch_Info *branch_info, int branch_short, int result_ignored, int check_proc, int check_arg_fixnum, - int type_pos, int field_pos, + int type_pos, int field_pos, + int authentic, int pop_and_jump, GC_CAN_IGNORE jit_insn *refslow, GC_CAN_IGNORE jit_insn *refslow2, GC_CAN_IGNORE jit_insn *bref_false, GC_CAN_IGNORE jit_insn *bref_true) @@ -1593,17 +1594,21 @@ int scheme_generate_struct_op(mz_jit_state *jitter, int kind, int for_branch, jit_ldxi_s(JIT_R2, JIT_R1, &((Scheme_Object *)0x0)->type); __START_INNER_TINY__(1); ref2 = jit_beqi_i(jit_forward(), JIT_R2, scheme_structure_type); - ref3 = jit_beqi_i(jit_forward(), JIT_R2, scheme_proc_struct_type); - CHECK_LIMIT(); - ref9 = jit_beqi_i(jit_forward(), JIT_R2, scheme_chaperone_type); - __END_INNER_TINY__(1); - bref2 = jit_bnei_i(jit_forward(), JIT_R2, scheme_proc_chaperone_type); - CHECK_LIMIT(); - __START_INNER_TINY__(1); - mz_patch_branch(ref9); - jit_ldxi_p(JIT_R1, JIT_R1, &SCHEME_CHAPERONE_VAL(0x0)); - (void)jit_jmpi(refretry); - mz_patch_branch(ref3); + if (!authentic) { + ref3 = jit_beqi_i(jit_forward(), JIT_R2, scheme_proc_struct_type); + CHECK_LIMIT(); + ref9 = jit_beqi_i(jit_forward(), JIT_R2, scheme_chaperone_type); + __END_INNER_TINY__(1); + bref2 = jit_bnei_i(jit_forward(), JIT_R2, scheme_proc_chaperone_type); + CHECK_LIMIT(); + __START_INNER_TINY__(1); + mz_patch_branch(ref9); + jit_ldxi_p(JIT_R1, JIT_R1, &SCHEME_CHAPERONE_VAL(0x0)); + (void)jit_jmpi(refretry); + mz_patch_branch(ref3); + } else { + bref2 = jit_bnei_i(jit_forward(), JIT_R2, scheme_proc_struct_type); + } __END_INNER_TINY__(1); } else { if (check_arg_fixnum) { @@ -1713,13 +1718,15 @@ int scheme_generate_struct_op(mz_jit_state *jitter, int kind, int for_branch, /* False branch: */ if (branch_info) { scheme_add_branch_false(branch_info, bref1); - scheme_add_branch_false(branch_info, bref2); + if (bref2) + scheme_add_branch_false(branch_info, bref2); if (bref3) scheme_add_branch_false(branch_info, bref3); scheme_add_branch_false(branch_info, bref4); } else { mz_patch_branch(bref1); - mz_patch_branch(bref2); + if (bref2) + mz_patch_branch(bref2); if (bref3) mz_patch_branch(bref3); mz_patch_branch(bref4); @@ -2036,7 +2043,7 @@ static int common4(mz_jit_state *jitter, void *_data) __END_SHORT_JUMPS__(1); scheme_generate_struct_op(jitter, kind, for_branch, NULL, 1, 0, - 1, 1, -1, -1, + 1, 1, -1, -1, 0, 1, refslow, refslow2, bref5, bref6); CHECK_LIMIT(); diff --git a/racket/src/racket/src/jitinline.c b/racket/src/racket/src/jitinline.c index 5c7ee393ee..da8899e112 100644 --- a/racket/src/racket/src/jitinline.c +++ b/racket/src/racket/src/jitinline.c @@ -678,9 +678,11 @@ static int generate_inlined_struct_op(int kind, mz_jit_state *jitter, } if (inline_rator) { - int pos, tpos, jkind; + int pos, tpos, jkind, authentic; tpos = ((Scheme_Struct_Type *)((Scheme_Primitive_Closure *)inline_rator)->val[0])->name_pos; + authentic = ((Scheme_Struct_Type *)((Scheme_Primitive_Closure *)inline_rator)->val[0])->authentic; + if (kind == INLINE_STRUCT_PROC_PRED) { pos = 0; } else { @@ -708,7 +710,8 @@ static int generate_inlined_struct_op(int kind, mz_jit_state *jitter, for_branch, branch_short, result_ignored, 0, 0, - tpos, pos, + tpos, pos, + authentic, 0, refslow, refslow, NULL, NULL); CHECK_LIMIT(); diff --git a/racket/src/racket/src/module.c b/racket/src/racket/src/module.c index d31724e9ee..c32f23320e 100644 --- a/racket/src/racket/src/module.c +++ b/racket/src/racket/src/module.c @@ -4566,7 +4566,7 @@ static void setup_accessible_table(Scheme_Module *m) if (SAME_TYPE(SCHEME_TYPE(form), scheme_define_values_type)) { int checked_st = 0, is_st_prop = 0, has_guard = 0; Scheme_Object *is_st = NULL; - Simple_Stuct_Type_Info stinfo; + Simple_Struct_Type_Info stinfo; Scheme_Object *parent_identity; for (k = SCHEME_VEC_SIZE(form); k-- > 1; ) { tl = SCHEME_VEC_ELS(form)[k]; diff --git a/racket/src/racket/src/optimize.c b/racket/src/racket/src/optimize.c index d1404d1068..e51f50d664 100644 --- a/racket/src/racket/src/optimize.c +++ b/racket/src/racket/src/optimize.c @@ -409,7 +409,8 @@ int scheme_is_struct_functional(Scheme_Object *rator, int num_args, Optimize_Inf return 1; } } else if (SAME_TYPE(SCHEME_TYPE(c), scheme_struct_prop_proc_shape_type)) { - if ((SCHEME_PROP_PROC_SHAPE_MODE(c) == STRUCT_PROP_PROC_SHAPE_PRED) + int mode = (SCHEME_PROP_PROC_SHAPE_MODE(c) & STRUCT_PROC_SHAPE_MASK); + if ((mode == STRUCT_PROP_PROC_SHAPE_PRED) && (num_args == 1)) return 1; } @@ -1190,7 +1191,7 @@ static int ok_proc_creator_args(Scheme_Object *rator, Scheme_Object *rand1, Sche } static int is_values_with_accessors_and_mutators(Scheme_Object *e, int vals, int resolved, - Simple_Stuct_Type_Info *_stinfo, + Simple_Struct_Type_Info *_stinfo, Scheme_IR_Local **vars) /* Does `e` produce values for a structure type, mutators, and accessors in the usual order? */ @@ -1421,7 +1422,7 @@ static int ok_constant_property_with_guard(void *data, Scheme_Object *v, int mod if (mode == OK_CONSTANT_SHAPE) { if (SAME_TYPE(SCHEME_TYPE(v), scheme_struct_prop_proc_shape_type)) { - k = SCHEME_PROC_SHAPE_MODE(v); + k = SCHEME_PROP_PROC_SHAPE_MODE(v); } } else if (mode == OK_CONSTANT_ENCODED_SHAPE) { if (!scheme_decode_struct_prop_shape(v, &k)) @@ -1469,7 +1470,8 @@ static int is_simple_property_list(Scheme_Object *a, int resolved, Scheme_Hash_Table *inline_variants, Scheme_Hash_Table *top_level_table, Scheme_Object **runstack, int rs_delta, - Scheme_Object **symbols, Scheme_Hash_Table *symbol_table) + Scheme_Object **symbols, Scheme_Hash_Table *symbol_table, + int just_for_authentic, int *_authentic) /* Does `a` produce a property list that always lets `make-struct-type` succeed? */ { Scheme_Object *arg; @@ -1505,19 +1507,28 @@ static int is_simple_property_list(Scheme_Object *a, int resolved, if (SAME_TYPE(SCHEME_TYPE(arg), scheme_application3_type)) { Scheme_App3_Rec *a3 = (Scheme_App3_Rec *)arg; - if (!SAME_OBJ(a3->rator, scheme_cons_proc)) - return 0; - if (is_struct_type_property_without_guard(a3->rand1, - top_level_consts, - inline_variants, top_level_table, - runstack, rs_delta, - symbols, symbol_table)) { - if (!scheme_omittable_expr(a3->rand2, 1, 3, (resolved ? OMITTABLE_RESOLVED : 0), NULL, NULL)) + if (!SAME_OBJ(a3->rator, scheme_cons_proc)) { + if (!just_for_authentic) return 0; - } else + } else { + if (_authentic && SAME_OBJ(a3->rand1, scheme_authentic_property)) + *_authentic = 1; + if (!just_for_authentic) { + if (is_struct_type_property_without_guard(a3->rand1, + top_level_consts, + inline_variants, top_level_table, + runstack, rs_delta, + symbols, symbol_table)) { + if (!scheme_omittable_expr(a3->rand2, 1, 3, (resolved ? OMITTABLE_RESOLVED : 0), NULL, NULL)) + return 0; + } else + return 0; + } + } + } else { + if (!just_for_authentic) return 0; - } else - return 0; + } } return 1; @@ -1525,7 +1536,7 @@ static int is_simple_property_list(Scheme_Object *a, int resolved, Scheme_Object *scheme_is_simple_make_struct_type(Scheme_Object *e, int vals, int flags, GC_CAN_IGNORE int *_auto_e_depth, - Simple_Stuct_Type_Info *_stinfo, + Simple_Struct_Type_Info *_stinfo, Scheme_Object **_parent_identity, Scheme_Hash_Table *top_level_consts, Scheme_Hash_Table *inline_variants, @@ -1592,7 +1603,8 @@ Scheme_Object *scheme_is_simple_make_struct_type(Scheme_Object *e, int vals, in top_level_consts, inline_variants, top_level_table, runstack, rs_delta, - symbols, symbol_table))) + symbols, symbol_table, + 0, NULL))) && ((app->num_args < 7) /* inspector: */ || SCHEME_FALSEP(app->args[7]) @@ -1620,6 +1632,7 @@ Scheme_Object *scheme_is_simple_make_struct_type(Scheme_Object *e, int vals, in if (_name) *_name = app->args[1]; if (_stinfo) { + int authentic = 0; int super_count = (super_count_plus_one ? (super_count_plus_one - 1) : 0); @@ -1631,6 +1644,15 @@ Scheme_Object *scheme_is_simple_make_struct_type(Scheme_Object *e, int vals, in _stinfo->super_field_count = (super_count_plus_one ? (super_count_plus_one - 1) : 0); _stinfo->normal_ops = 1; _stinfo->indexed_ops = 0; + _stinfo->authentic = 0; + if ((app->num_args > 6) + && is_simple_property_list(app->args[6], resolved, + top_level_consts, inline_variants, + top_level_table, + runstack, rs_delta, + symbols, symbol_table, + 1, &authentic)) + _stinfo->authentic = authentic; _stinfo->num_gets = 1; _stinfo->num_sets = 1; } @@ -1649,7 +1671,7 @@ Scheme_Object *scheme_is_simple_make_struct_type(Scheme_Object *e, int vals, in Scheme_IR_Let_Value *lv = (Scheme_IR_Let_Value *)lh->body; if (SAME_TYPE(SCHEME_TYPE(lv->value), scheme_application_type)) { Scheme_Object *auto_e; - Simple_Stuct_Type_Info stinfo; + Simple_Struct_Type_Info stinfo; if (!_stinfo) _stinfo = &stinfo; auto_e = scheme_is_simple_make_struct_type(lv->value, 5, flags, _auto_e_depth, _stinfo, _parent_identity, @@ -1681,7 +1703,7 @@ Scheme_Object *scheme_is_simple_make_struct_type(Scheme_Object *e, int vals, in e2 = skip_clears(lv->value); if (SAME_TYPE(SCHEME_TYPE(e2), scheme_application_type)) { Scheme_Object *auto_e; - Simple_Stuct_Type_Info stinfo; + Simple_Struct_Type_Info stinfo; if (!_stinfo) _stinfo = &stinfo; auto_e = scheme_is_simple_make_struct_type(e2, 5, flags, _auto_e_depth, _stinfo, _parent_identity, @@ -1753,12 +1775,14 @@ int scheme_is_simple_make_struct_type_property(Scheme_Object *e, int vals, int f /* more utils */ /*========================================================================*/ -intptr_t scheme_get_struct_proc_shape(int k, Simple_Stuct_Type_Info *stinfo) +intptr_t scheme_get_struct_proc_shape(int k, Simple_Struct_Type_Info *stinfo) { switch (k) { case 0: if (stinfo->field_count == stinfo->init_field_count) - return STRUCT_PROC_SHAPE_STRUCT | (stinfo->field_count << STRUCT_PROC_SHAPE_SHIFT); + return (STRUCT_PROC_SHAPE_STRUCT + | (stinfo->authentic ? STRUCT_PROC_SHAPE_AUTHENTIC : 0) + | (stinfo->field_count << STRUCT_PROC_SHAPE_SHIFT)); else return STRUCT_PROC_SHAPE_OTHER; break; @@ -1766,16 +1790,20 @@ intptr_t scheme_get_struct_proc_shape(int k, Simple_Stuct_Type_Info *stinfo) return STRUCT_PROC_SHAPE_CONSTR | (stinfo->init_field_count << STRUCT_PROC_SHAPE_SHIFT); break; case 2: - return STRUCT_PROC_SHAPE_PRED; + return (STRUCT_PROC_SHAPE_PRED + | (stinfo->authentic ? STRUCT_PROC_SHAPE_AUTHENTIC : 0)); break; default: if (stinfo && stinfo->normal_ops && stinfo->indexed_ops) { if (k - 3 < stinfo->num_gets) { /* record index of field */ return (STRUCT_PROC_SHAPE_GETTER + | (stinfo->authentic ? STRUCT_PROC_SHAPE_AUTHENTIC : 0) | ((stinfo->super_field_count + (k - 3)) << STRUCT_PROC_SHAPE_SHIFT)); } else - return (STRUCT_PROC_SHAPE_SETTER | (stinfo->field_count << STRUCT_PROC_SHAPE_SHIFT)); + return (STRUCT_PROC_SHAPE_SETTER + | (stinfo->authentic ? STRUCT_PROC_SHAPE_AUTHENTIC : 0) + | (stinfo->field_count << STRUCT_PROC_SHAPE_SHIFT)); } } @@ -4561,7 +4589,9 @@ static Scheme_Object *finish_optimize_application2(Scheme_App2_Rec *app, Optimiz } else { /* Struct type matches, so use `unsafe-struct-ref` */ Scheme_App3_Rec *new; - new = (Scheme_App3_Rec *)make_application_3(scheme_unsafe_struct_ref_proc, + new = (Scheme_App3_Rec *)make_application_3(((SCHEME_PROC_SHAPE_MODE(alt) & STRUCT_PROC_SHAPE_AUTHENTIC) + ? scheme_unsafe_struct_star_ref_proc + : scheme_unsafe_struct_ref_proc), app->rand, scheme_make_integer(SCHEME_PROC_SHAPE_MODE(alt) >> STRUCT_PROC_SHAPE_SHIFT), info); @@ -8813,7 +8843,7 @@ module_optimize(Scheme_Object *data, Optimize_Info *info, int context) if (SAME_TYPE(SCHEME_TYPE(e), scheme_define_values_type)) { int n, cnst = 0, sproc = 0, sprop = 0, has_guard = 0; Scheme_Object *sstruct = NULL, *parent_identity = NULL; - Simple_Stuct_Type_Info stinfo; + Simple_Struct_Type_Info stinfo; vars = SCHEME_VEC_ELS(e)[0]; e = SCHEME_VEC_ELS(e)[1]; diff --git a/racket/src/racket/src/schminc.h b/racket/src/racket/src/schminc.h index 9e16242693..50fdb985b8 100644 --- a/racket/src/racket/src/schminc.h +++ b/racket/src/racket/src/schminc.h @@ -14,7 +14,7 @@ #define USE_COMPILED_STARTUP 1 -#define EXPECTED_PRIM_COUNT 1155 +#define EXPECTED_PRIM_COUNT 1156 #define EXPECTED_UNSAFE_COUNT 133 #define EXPECTED_FLFXNUM_COUNT 69 #define EXPECTED_EXTFL_COUNT 45 diff --git a/racket/src/racket/src/schpriv.h b/racket/src/racket/src/schpriv.h index f4cb7640b8..dec7ec6346 100644 --- a/racket/src/racket/src/schpriv.h +++ b/racket/src/racket/src/schpriv.h @@ -536,6 +536,7 @@ extern Scheme_Object *scheme_vector_set_proc; extern Scheme_Object *scheme_list_to_vector_proc; extern Scheme_Object *scheme_unsafe_vector_length_proc; extern Scheme_Object *scheme_unsafe_struct_ref_proc; +extern Scheme_Object *scheme_unsafe_struct_star_ref_proc; extern Scheme_Object *scheme_hash_ref_proc; extern Scheme_Object *scheme_box_p_proc; extern Scheme_Object *scheme_box_proc; @@ -651,6 +652,8 @@ extern Scheme_Object *scheme_app_mark_impersonator_property; extern Scheme_Object *scheme_no_arity_property; +extern Scheme_Object *scheme_authentic_property; + extern Scheme_Object *scheme_chaperone_undefined_property; extern Scheme_Object *scheme_reduced_procedure_struct; @@ -1045,6 +1048,7 @@ typedef struct Scheme_Struct_Type { mzshort num_slots; /* initialized + auto + parent-initialized + parent-auto */ mzshort num_islots; /* initialized + parent-initialized */ mzshort name_pos; + char authentic; /* 1 => chaperones/impersonators disallowed */ Scheme_Object *name; @@ -3518,12 +3522,13 @@ typedef struct { int init_field_count; /* number of fields supplied to the constructor; usually == field_count */ int normal_ops; /* are selectors and predicates in the usual order? */ int indexed_ops; /* do selectors have the index built in (as opposed to taking an index argument)? */ + int authentic; /* conservatively 0 is ok */ int num_gets, num_sets; -} Simple_Stuct_Type_Info; +} Simple_Struct_Type_Info; Scheme_Object *scheme_is_simple_make_struct_type(Scheme_Object *app, int vals, int flags, int *_auto_e_depth, - Simple_Stuct_Type_Info *_stinfo, + Simple_Struct_Type_Info *_stinfo, Scheme_Object **_parent_identity, Scheme_Hash_Table *top_level_consts, Scheme_Hash_Table *inline_variants, @@ -3545,7 +3550,7 @@ int scheme_is_simple_make_struct_type_property(Scheme_Object *app, int vals, int #define CHECK_STRUCT_TYPE_DELAY_AUTO_CHECK 0x4 Scheme_Object *scheme_intern_struct_proc_shape(int shape); -intptr_t scheme_get_struct_proc_shape(int k, Simple_Stuct_Type_Info *sinfo); +intptr_t scheme_get_struct_proc_shape(int k, Simple_Struct_Type_Info *sinfo); Scheme_Object *scheme_make_struct_proc_shape(intptr_t k, Scheme_Object *identity); #define STRUCT_PROC_SHAPE_STRUCT 0 #define STRUCT_PROC_SHAPE_CONSTR 1 @@ -3554,7 +3559,8 @@ Scheme_Object *scheme_make_struct_proc_shape(intptr_t k, Scheme_Object *identity #define STRUCT_PROC_SHAPE_SETTER 4 #define STRUCT_PROC_SHAPE_OTHER 5 #define STRUCT_PROC_SHAPE_MASK 0xF -#define STRUCT_PROC_SHAPE_SHIFT 4 +#define STRUCT_PROC_SHAPE_AUTHENTIC 0x10 +#define STRUCT_PROC_SHAPE_SHIFT 5 typedef struct Scheme_Struct_Proc_Shape { Scheme_Object so; diff --git a/racket/src/racket/src/schvers.h b/racket/src/racket/src/schvers.h index f69815dba2..055a2a3201 100644 --- a/racket/src/racket/src/schvers.h +++ b/racket/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "6.9.0.3" +#define MZSCHEME_VERSION "6.9.0.4" #define MZSCHEME_VERSION_X 6 #define MZSCHEME_VERSION_Y 9 #define MZSCHEME_VERSION_Z 0 -#define MZSCHEME_VERSION_W 3 +#define MZSCHEME_VERSION_W 4 #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W) diff --git a/racket/src/racket/src/struct.c b/racket/src/racket/src/struct.c index a4a196f691..c58b8e3e59 100644 --- a/racket/src/racket/src/struct.c +++ b/racket/src/racket/src/struct.c @@ -50,6 +50,7 @@ READ_ONLY Scheme_Object *scheme_app_mark_impersonator_property; READ_ONLY Scheme_Object *scheme_liberal_def_ctx_type;; READ_ONLY Scheme_Object *scheme_object_name_property; READ_ONLY Scheme_Object *scheme_struct_to_vector_proc; +READ_ONLY Scheme_Object *scheme_authentic_property; READ_ONLY static Scheme_Object *location_struct; READ_ONLY static Scheme_Object *write_property; @@ -536,6 +537,12 @@ scheme_init_struct (Scheme_Env *env) scheme_add_global_constant("prop:method-arity-error", method_property, env); } + { + REGISTER_SO(scheme_authentic_property); + scheme_authentic_property = scheme_make_struct_type_property(scheme_intern_symbol("authentic")); + scheme_add_global_constant("prop:authentic", scheme_authentic_property, env); + } + REGISTER_SO(not_free_id_symbol); not_free_id_symbol = scheme_intern_symbol("not-free-identifier=?"); @@ -3602,8 +3609,9 @@ int scheme_check_structure_shape(Scheme_Object *e, Scheme_Object *expected) st = (Scheme_Struct_Type *)e; if (st->num_slots != st->num_islots) return (v == STRUCT_PROC_SHAPE_OTHER); - return (v == ((st->num_slots << STRUCT_PROC_SHAPE_SHIFT) - | STRUCT_PROC_SHAPE_STRUCT)); + return (v == ((st->num_slots << STRUCT_PROC_SHAPE_SHIFT) + | STRUCT_PROC_SHAPE_STRUCT + | (st->authentic ? STRUCT_PROC_SHAPE_AUTHENTIC : 0))); } else if (!SCHEME_PRIMP(e)) return 0; @@ -3611,19 +3619,23 @@ int scheme_check_structure_shape(Scheme_Object *e, Scheme_Object *expected) if ((i == SCHEME_PRIM_STRUCT_TYPE_CONSTR) || (i == SCHEME_PRIM_STRUCT_TYPE_SIMPLE_CONSTR)) { st = (Scheme_Struct_Type *)SCHEME_PRIM_CLOSURE_ELS(e)[0]; - return (v == ((st->num_islots << STRUCT_PROC_SHAPE_SHIFT) + return (v == ((st->num_islots << STRUCT_PROC_SHAPE_SHIFT) | STRUCT_PROC_SHAPE_CONSTR)); } else if (i == SCHEME_PRIM_STRUCT_TYPE_PRED) { - return (v == STRUCT_PROC_SHAPE_PRED); + st = (Scheme_Struct_Type *)SCHEME_PRIM_CLOSURE_ELS(e)[0]; + return (v == (STRUCT_PROC_SHAPE_PRED + | (st->authentic ? STRUCT_PROC_SHAPE_AUTHENTIC : 0))); } else if (i == SCHEME_PRIM_STRUCT_TYPE_INDEXED_SETTER) { st = (Scheme_Struct_Type *)SCHEME_PRIM_CLOSURE_ELS(e)[0]; return (v == ((st->num_slots << STRUCT_PROC_SHAPE_SHIFT) - | STRUCT_PROC_SHAPE_SETTER)); + | STRUCT_PROC_SHAPE_SETTER + | (st->authentic ? STRUCT_PROC_SHAPE_AUTHENTIC : 0))); } else if (i == SCHEME_PRIM_STRUCT_TYPE_INDEXED_GETTER) { int pos = SCHEME_INT_VAL(SCHEME_PRIM_CLOSURE_ELS(e)[1]); st = (Scheme_Struct_Type *)SCHEME_PRIM_CLOSURE_ELS(e)[0]; return (v == ((pos << STRUCT_PROC_SHAPE_SHIFT) - | STRUCT_PROC_SHAPE_GETTER)); + | STRUCT_PROC_SHAPE_GETTER + | (st->authentic ? STRUCT_PROC_SHAPE_AUTHENTIC : 0))); } else if ((i == SCHEME_PRIM_STRUCT_TYPE_INDEXLESS_SETTER) || (i == SCHEME_PRIM_STRUCT_TYPE_BROKEN_INDEXED_SETTER) || (i == SCHEME_PRIM_STRUCT_TYPE_INDEXLESS_GETTER)) @@ -4862,6 +4874,7 @@ Scheme_Struct_Type *scheme_make_prefab_struct_type_raw(Scheme_Object *base, struct_type->num_slots = num_fields + num_uninit_fields + (parent_type ? parent_type->num_slots : 0); struct_type->num_islots = num_fields + (parent_type ? parent_type->num_islots : 0); struct_type->name_pos = depth; + struct_type->authentic = 0; struct_type->inspector = scheme_false; struct_type->uninit_val = uninit_val; struct_type->props = NULL; @@ -5048,6 +5061,8 @@ static Scheme_Object *_make_struct_type(Scheme_Object *base, checked_proc = 1; if (SAME_OBJ(prop, scheme_chaperone_undefined_property)) chaperone_undefined = 1; + if (SAME_OBJ(prop, scheme_authentic_property)) + struct_type->authentic = 1; propv = guard_property(prop, SCHEME_CDR(a), struct_type); @@ -5108,6 +5123,8 @@ static Scheme_Object *_make_struct_type(Scheme_Object *base, checked_proc = 1; if (SAME_OBJ(prop, scheme_chaperone_undefined_property)) chaperone_undefined = 1; + if (SAME_OBJ(prop, scheme_authentic_property)) + struct_type->authentic = 1; propv = guard_property(prop, SCHEME_CDR(a), struct_type); @@ -5161,7 +5178,21 @@ static Scheme_Object *_make_struct_type(Scheme_Object *base, } } - + if (parent_type && (parent_type->authentic != struct_type->authentic)) { + if (parent_type->authentic) + scheme_contract_error("make-struct-type", + "cannot make a non-authentic subtype of an authentic type", + "type name", 1, struct_type->name, + "authentic type", 1, parent, + NULL); + else + scheme_contract_error("make-struct-type", + "cannot make an authentic subtype of a non-authentic type", + "type name", 1, struct_type->name, + "non-authentic type", 1, parent, + NULL); + } + if (guard) { if (!scheme_check_proc_arity(NULL, struct_type->num_islots + 1, -1, 0, &guard)) { scheme_contract_error("make-struct-type", @@ -6366,6 +6397,16 @@ static Scheme_Object *do_chaperone_struct(const char *name, int is_impersonator, NULL); return NULL; } + + if (SCHEME_STRUCTP(val) && ((Scheme_Structure *)val)->stype->authentic) { + scheme_contract_error(name, + (is_impersonator + ? "cannot impersonate instance of an authentic structure type" + : "cannot chaperone instance of an authentic structure type"), + "given value", 1, val, + NULL); + return NULL; + } if (!redirects) { /* a non-structure chaperone */ diff --git a/racket/src/racket/src/validate.c b/racket/src/racket/src/validate.c index f9bc4a50b4..06ab2ed106 100644 --- a/racket/src/racket/src/validate.c +++ b/racket/src/racket/src/validate.c @@ -306,7 +306,7 @@ static int define_values_validate(Scheme_Object *data, Mz_CPort *port, Scheme_Hash_Table **_st_ht) { int i, size, flags, result, is_struct, is_struct_prop, has_guard; - Simple_Stuct_Type_Info stinfo; + Simple_Struct_Type_Info stinfo; Scheme_Object *val, *only_var; val = SCHEME_VEC_ELS(data)[0]; @@ -1422,7 +1422,6 @@ static int validate_expr(Mz_CPort *port, Scheme_Object *expr, /* check expectation */ if (((tl_state[p] & SCHEME_TOPLEVEL_FLAGS_MASK) < flags) || ((tl_state[p] >> 2) > tl_timestamp)) { - printf("?? %d\n", p); scheme_ill_formed_code(port); } } diff --git a/racket/src/racket/src/vector.c b/racket/src/racket/src/vector.c index d9dd86c2aa..97a6e1a66d 100644 --- a/racket/src/racket/src/vector.c +++ b/racket/src/racket/src/vector.c @@ -38,6 +38,7 @@ READ_ONLY Scheme_Object *scheme_unsafe_vector_length_proc; READ_ONLY Scheme_Object *scheme_unsafe_string_length_proc; READ_ONLY Scheme_Object *scheme_unsafe_byte_string_length_proc; READ_ONLY Scheme_Object *scheme_unsafe_struct_ref_proc; +READ_ONLY Scheme_Object *scheme_unsafe_struct_star_ref_proc; /* locals */ static Scheme_Object *vector_p (int argc, Scheme_Object *argv[]); @@ -239,7 +240,9 @@ scheme_init_unsafe_vector (Scheme_Env *env) | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("unsafe-struct-ref", p, env); + REGISTER_SO(scheme_unsafe_struct_ref_proc); p = scheme_make_immed_prim(unsafe_struct_star_ref, "unsafe-struct*-ref", 2, 2); + scheme_unsafe_struct_star_ref_proc = p; SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED | SCHEME_PRIM_IS_UNSAFE_OMITABLE | SCHEME_PRIM_IS_OMITABLE);