Index: doc/next-tutorial.html =================================================================== diff -u -r90ecfc116b3f569cea63dbce061a301497a5746b -rfdecdc39d01dbc9fc816e432e793aeff2a78d82e --- doc/next-tutorial.html (.../next-tutorial.html) (revision 90ecfc116b3f569cea63dbce061a301497a5746b) +++ doc/next-tutorial.html (.../next-tutorial.html) (revision fdecdc39d01dbc9fc816e432e793aeff2a78d82e) @@ -1175,7 +1175,7 @@ next } } -

Note that the methods of the class Safety all end with next. +

Note that all the methods of the class Safety end with next. This command is a primitive command of NX, that will call the same-named method with the same argument list as the current invocation.

@@ -1521,25 +1521,25 @@

A variable without any colon prefix refers typically to a method scoped variable (the variable is created at the begin of the - invocation of the method and deleted, when the method ends); + invocation of the method and deleted, when the method ends). In the example below, the variable a is method scoped.

  • A variable with a single colon prefix refers to an instance variable (the variable is part of the object, when the object is destroyed, - the variable is deleted as well. In the example below, the variable + the variable is deleted as well). In the example below, the variable b is an instance variable.

  • -a variable with two leading colons refers to a global variable (the - lifespan ends when te variable is explicitly unset or the script - ends). Also variables in placed in Tcl namespaces are global - variables. In the example below, the variable c is a global - variable. +A variable with two leading colons refers to a global variable (the + lifespan of a globale variable ends when the variable is explicitly + unset or the script terminates). Variables in placed in Tcl + namespaces are also global variables. In the example below, the + variable c is a global variable.

  • @@ -1569,11 +1569,11 @@
    Class create Foo {
     
       :method foo args {...}
    -    # Method scoped variable a
    +    # "a" is a method scoped variable
         set a 1
    -    # Instance variable b
    +    # "b" is an Instance variable
         set :b 2
    -    # Global variable/namespaced variable c
    +    # "c" is a global variable/namespaced variable
         set ::c 3
       }
     }
    @@ -1584,9 +1584,29 @@

    So, in general, there is no need to define or declare instance variables in NX. However, in some cases, a definition is useful. For example, one can define properties on classes, which are inherited to -subclasses, and which are used during object initialization. Consider -the following example:

    -
    Listing 17: Properties

    +subclasses. Or, the definition of properties can be used the check +permissible values for instance variables or to initialize instance +variables from default values during object initialization.

    +
    +
    +

    A property is a definition of an attribute (an instance variable) +with accessors. The property definition might carry as well +value-constraints and a default value.

    +
    +
    +
    +person-student.png +
    +
    Figure 17. Classes Person and Student
    +
    +

    +

    Consider the example above, where the classes Person and Student +are defined. Both classes have accessor methods for all their +attributes specified (Note that we show the accessor methods only in +this example). By defining properties we can use the name of the +attribute as method name to access the variable. . The listing below +shows an implementation of this conceptual model in NX.

    +
    Listing 18: Properties

    +
      1
    +  2
    +  3
    +  4
    +  5
    +  6
    +  7
    +  8
    +  9
    + 10
    + 11
    + 12
    + 13
    + 14
    +
    nx::Class create C {
     
    -NX provides a generalized mechanism for passing values to either
    -methods (we refer to these as _method parameters_) or to objects
    -(these are called _object parameters_). Both kind of parameters
    -might have different features, such as:
    +    # Define an ensemble method "string" with sub-methods
    +    # "length", "tolower" and "info"
    +
    +    :public method "string length"  {x} {....}
    +    :public method "string tolower" {x} {...}
    +    :public method "string info" {x} {...}
    +    ...
    +    :create c1
    +}
     
    -- Positional and non-positional parameters
    -- Required and non-required parameters
    -- Default values for parameters
    -- Value-checking for parameters
    -- Multiplicity of parameters
    -
    -TODO: complete list above and provide a short summary of the section
    -
    -Before we discuss method and object parameters in more detail, we
    +# Invoke the ensemble method
    +c1 string length "hello world"
    + +
    +

    3.6. Method Resolution

    +

    +
    +
    +

    3.7. Parameters

    +

    NX provides a generalized mechanism for passing values to either +methods (we refer to these as method parameters) or to objects +(these are called object parameters). Both kind of parameters +might have different features, such as:

    +
    +

    TODO: complete list above and provide a short summary of the section

    +

    Before we discuss method and object parameters in more detail, we describe the parameter features in the subsequent sections based on -method parameters. - -==== Positional and Non-Positional Parameters - -If the position of a parameter in the list of formal arguments +method parameters.

    +
    +

    3.7.1. Positional and Non-Positional Parameters

    +

    If the position of a parameter in the list of formal arguments (e.g. passed to a function) is significant for its meaning, this is a -_positional_ parameter. If the meaning of the parameter is independent -of its postion, this is a _non-positional_ parameter. When we call a +positional parameter. If the meaning of the parameter is independent +of its postion, this is a non-positional parameter. When we call a method with positional parameters, the meaning of the parameters (the association with the argument in the argument list of the method) is determined by its position. When we call a method with non-positional parameters, their meaning is determined via a name passed with the -argument during invocation. +argument during invocation.

    +
    Listing 31: Positional and Non-Positional Method Parameters

    +
    +
    +
      1
    +  2
    +  3
    +  4
    +  5
    +  6
    +  7
    +  8
    +  9
    + 10
    + 11
    + 12
    + 13
    + 14
    + 15
    + 16
    + 17
    + 18
    + 19
    + 20
    + 21
    + 22
    + 23
    + 24
    + 25
    + 26
    + 27
    + 28
    + 29
    + 30
    + 31
    + 32
    + 33
    + 34
    + 35
    + 36
    +
    nx::Object create o1 {
     
    -[[xmp-posnonpos]]
    -.Listing {counter:figure-number}: Positional and Non-Positional Method Parameters
    -{set:xmp-posnonpos:Listing {figure-number}}
    -[source,tcl,numbers]
    ---------------------------------------------------
    -nx::Object create o1 {
    -
    -  #
    -  # Method foo has positional parameters:
    -  #
    -  :public method foo {x y} {
    -    puts "x=$x y=$y"
    +  #
    +  # Method foo has positional parameters:
    +  #
    +  :public method foo {x y} {
    +    puts "x=$x y=$y"
       }
     
    -  #
    -  # Method bar has non-positional parameters:
    -  #
    -  :public method bar {-x -y} {
    -    puts "x=$x y=$y"
    +  #
    +  # Method bar has non-positional parameters:
    +  #
    +  :public method bar {-x -y} {
    +    puts "x=$x y=$y"
       }
     
    -  #
    -  # Method baz has non-positional and
    -  # positional parameters:
    -  #
    -  :public method baz {-x -y a} {
    -    puts "x? [info exists x] y? [info exists y] a=$a"
    +  #
    +  # Method baz has non-positional and
    +  # positional parameters:
    +  #
    +  :public method baz {-x -y a} {
    +    puts "x? [info exists x] y? [info exists y] a=$a"
       }
     }
     
    -# invoke foo (positional parameters)
    -o1 foo 1 2
    +# invoke foo (positional parameters)
    +o1 foo 1 2
     
    -# invoke bar (non-positional parameters)
    -o1 bar -y 3 -x 1
    +# invoke bar (non-positional parameters)
    +o1 bar -y 3 -x 1
     o1 bar -x 1 -y 3
     
    -# invoke baz (positional and non-positional parameters)
    -o1 baz -x 1 100
    +# invoke baz (positional and non-positional parameters)
    +o1 baz -x 1 100
     o1 baz 200
    -o1 baz -- -y
    ---------------------------------------------------
    -
    -Consider the example in <<xmp-posnonpos, {xmp-posnonpos}>>. The method
    -+foo+ has the argument list +x y+. This means that the first argument
    -is passed in an invocation like +o1 foo 1 2+ to +x+ (here, the value
    -+1+), and the second argument is passed to +y+ (here the value +2+).
    -Method +bar+ has in contrary just with non-positional arguments. Here
    +o1 baz -- -y
    +

    Consider the example in Listing 31. The method +foo has the argument list x y. This means that the first argument +is passed in an invocation like o1 foo 1 2 to x (here, the value +1), and the second argument is passed to y (here the value 2). +Method bar has in contrary just with non-positional arguments. Here we pass the names of the parameter together with the values. In the -invocation +o1 bar -y 3 -x 1+ the names of the parameters are prefixed +invocation o1 bar -y 3 -x 1 the names of the parameters are prefixed with a dash ("-"). No matter whether in which order we write the non-positional parameters in the invocation (see line 30 and 31 in -<<xmp-posnonpos, {xmp-posnonpos}>>) in both cases the variables +x+ -and +y+ in the body of the method +bar+ get the same values assigned -(+x+ becomes +1+, +y+ becomes +3+). - -It is certainly possible to combine positional and non-positional -arguments. Method +baz+ provides two non-positional parameter (+-y+ -and +-y+) and one positional parameter (namely +a+). The invocation in -line 34 passes the value of +1+ to +x+ and the value of +100+ to +a+. -There is no value passed to +y+, therefore value of +y+ will be -undefined in the body of +baz+, +info exists y+ checks for the -existence of the variable +y+ and returns +0+. - -The invocation in line 35 passes only a value to the positional +Listing 31) in both cases the variables x +and y in the body of the method bar get the same values assigned +(x becomes 1, y becomes 3).

    +

    It is certainly possible to combine positional and non-positional +arguments. Method baz provides two non-positional parameter (-y +and -y) and one positional parameter (namely a). The invocation in +line 34 passes the value of 1 to x and the value of 100 to a. +There is no value passed to y, therefore value of y will be +undefined in the body of baz, info exists y checks for the +existence of the variable y and returns 0.

    +

    The invocation in line 35 passes only a value to the positional parameter. A more tricky case is in line 36, where we want to pass -+-y+ as a value to the positional parameter +a+. The case is more -tricky since syntactically the argument parser might consider +-y+ as -the name of one of the non-positional parameter. Therefore we use +--+ +-y as a value to the positional parameter a. The case is more +tricky since syntactically the argument parser might consider -y as +the name of one of the non-positional parameter. Therefore we use -- (double dash) to indicate the end of the block of the non-positional -parameters and therefore the value of +-y+ is passed to +a+. - -==== Optional and Required Parameters - -Per default positional parameters are required, and non-positional +parameters and therefore the value of -y is passed to a.

    +
    +
    +

    3.7.2. Optional and Required Parameters

    +

    Per default positional parameters are required, and non-positional parameters are optional (they can be left out). By using parameter options, we can as well define positional parameters, which are -optional, and non-positional parameters, which are required. +optional, and non-positional parameters, which are required.

    +
    Listing 32: Optional and Required Method Parameters

    +
    +
    +
      1
    +  2
    +  3
    +  4
    +  5
    +  6
    +  7
    +  8
    +  9
    + 10
    + 11
    + 12
    + 13
    + 14
    + 15
    + 16
    + 17
    + 18
    + 19
    + 20
    + 21
    +
    nx::Object create o2 {
     
    -[[xmp-optional-req]]
    -.Listing {counter:figure-number}: Optional and Required Method Parameters
    -{set:xmp-optional-req:Listing {figure-number}}
    -[source,tcl,numbers]
    ---------------------------------------------------
    -nx::Object create o2 {
    -
    -  #
    -  # Method foo has one required and one optional
    -  # positional parameter:
    -  #
    -  :public method foo {x:required y:optional} {
    -    puts "x=$x y? [info exists y]"
    +  #
    +  # Method foo has one required and one optional
    +  # positional parameter:
    +  #
    +  :public method foo {x:required y:optional} {
    +    puts "x=$x y? [info exists y]"
       }
     
    -  #
    -  # Method bar has one required and one optional
    -  # non-positional parameter:
    -  #
    -  :public method bar {-x:required -y:optional} {
    -    puts "x=$x y? [info exists y]"
    +  #
    +  # Method bar has one required and one optional
    +  # non-positional parameter:
    +  #
    +  :public method bar {-x:required -y:optional} {
    +    puts "x=$x y? [info exists y]"
       }
     }
     
    -# invoke foo (one optional positional parameter is missing)
    -o2 foo 1
    ---------------------------------------------------
    -
    -The example in <<xmp-optional-req, {xmp-optional-req}>> defined method +foo+
    +# invoke foo (one optional positional parameter is missing)
    +o2 foo 1
    +

    The example in Listing 32 defined method foo with one required and one optional positional parameter. For this -purpose we use the parameter options +required+ and +optional+. The +purpose we use the parameter options required and optional. The parameter options are separated from the parameter name by a colon. If there are multiple parameter options, these are separated by commas -(we show this in later examples). - -The parameter definition +x:required+ for method +foo+ is equivalent -to +x+ without any parameter options (see e.g. previous example), +(we show this in later examples).

    +

    The parameter definition x:required for method foo is equivalent +to x without any parameter options (see e.g. previous example), since positional parameters are per default required. The invocation -in line 21 of <<xmp-optional-req, {xmp-optional-req}>> will lead to an -undefined variable +y+ in method +foo+, because no value us passed to +in line 21 of Listing 32 will lead to an +undefined variable y in method foo, because no value us passed to the optional parameter. Note that only trailing positional parameters might be -optional. If we would call method +foo+ of <<xmp-posnonpos, -{xmp-posnonpos}>> with only one argument, the system would raise an -exception. - -Similarly, we define method +bar+ in <<xmp-optional-req, -{xmp-optional-req}>> with one required and one optional non-positional -parameter. The parameter definition +-y:optional+ is equivalent to -+-y+, since non-positional parameter are per default optional. -However, the non-positional parameter +-x:required+ is required. If we -invoke +bar+ without it, the system will raise an exception. - -==== Default Values for Parameters - -Optional parameters might have a default value, which will be used, +optional. If we would call method foo of Listing 31 with only one argument, the system would raise an +exception.

    +

    Similarly, we define method bar in Listing 32 with one required and one optional non-positional +parameter. The parameter definition -y:optional is equivalent to +-y, since non-positional parameter are per default optional. +However, the non-positional parameter -x:required is required. If we +invoke bar without it, the system will raise an exception.

    +
    +
    +

    3.7.3. Default Values for Parameters

    +

    Optional parameters might have a default value, which will be used, when not value is provided for this parameter. Default values can be -specified for positional and non-positional parameters. +specified for positional and non-positional parameters.

    +
    Listing 33: Method Parameters with Default Values

    +
    +
    +
      1
    +  2
    +  3
    +  4
    +  5
    +  6
    +  7
    +  8
    +  9
    + 10
    + 11
    + 12
    + 13
    + 14
    + 15
    + 16
    + 17
    + 18
    + 19
    + 20
    +
    nx::Object create o3 {
     
    -[[xmp-default-value]]
    -.Listing {counter:figure-number}: Method Parameters with Default Values
    -{set:xmp-default-value:Listing {figure-number}}
    -[source,tcl,numbers]
    ---------------------------------------------------
    -nx::Object create o3 {
    -
    -  #
    -  # Positional parameter with default value:
    -  #
    -  :public method foo {x:required {y 101}} {
    -    puts "x=$x y? [info exists y]"
    +  #
    +  # Positional parameter with default value:
    +  #
    +  :public method foo {x:required {y 101}} {
    +    puts "x=$x y? [info exists y]"
       }
     
    -  #
    -  # Non-positional parameter with default value:
    -  #
    -  :public method bar {{-x 10} {-y 20}} {
    -    puts "x=$x y? [info exists y]"
    +  #
    +  # Non-positional parameter with default value:
    +  #
    +  :public method bar {{-x 10} {-y 20}} {
    +    puts "x=$x y? [info exists y]"
       }
     }
     
    -# use default values
    -o3 foo
    -o3 bar
    ---------------------------------------------------
    -
    -In order to define a default value, the parameter specification must
    +# use default values
    +o3 foo
    +o3 bar
    +

    In order to define a default value, the parameter specification must be of the form of a 2 element list, where the second argument is the default value. See for an example in -<<xmp-default-value,{xmp-default-value}>>. - -==== Value Constraints - -NX provides value constraints for all kind of parameters. By +Listing 33.

    +
    +
    +

    3.7.4. Value Constraints

    +

    NX provides value constraints for all kind of parameters. By specifying value constraints a developer can restrict the permissible values for a parameter and document the expected values in the source code. Value checking in NX is conditional, it can be turned on or off in general or on a per-usage level (more about this later). The same mechanisms can be used not only for input value checking, but as well -for return value checking (we will address this point as well later). - -===== Built-in Value Constraints - -NX comes with a set of built-in value constraints, which can be +for return value checking (we will address this point as well later).

    +
    +
    Built-in Value Constraints
    +

    NX comes with a set of built-in value constraints, which can be extended on the scripting level. The built-in checkers are either the native checkers provided directly by the Next Scripting Framework (the most efficient checkers) or the value checkers provided by Tcl through -+string is ...+. The built-in checkers have as well the advantage that +string is …. The built-in checkers have as well the advantage that they can be used also at any time during bootstrap of an object system, at a time, when e.g. no objects or methods are defined. The same checkers are used as well for all C-implemented primitives of NX -and the Next Scripting Framework. - -[[img-value-checkers]] -image::value-checkers.png[align="center",title="General Applicable Value Checkers in NX"] -{set:img-value-checkers:Figure {figure-number}} - -<<img-value-checkers, {img-value-checkers}>> shows the built-in +and the Next Scripting Framework.

    +
    +
    +value-checkers.png +
    +
    Figure 34. General Applicable Value Checkers in NX
    +
    +

    +

    Figure 34 shows the built-in general applicable value checkers available in NX, which can be used for all method and object parameters. In the next step, we show how to use these value-checkers for checking permissible values for method parameters. Then we will show, how to provide more detailed value -constraints. +constraints.

    +
    Listing 35: Method Parameters with Value Constraints

    +
    +
    +
      1
    +  2
    +  3
    +  4
    +  5
    +  6
    +  7
    +  8
    +  9
    + 10
    + 11
    + 12
    + 13
    + 14
    + 15
    + 16
    + 17
    + 18
    + 19
    +
    nx::Object create o4 {
     
    -[[xmp-value-check]]
    -.Listing {counter:figure-number}: Method Parameters with Value Constraints
    -{set:xmp-value-check:Listing {figure-number}}
    -[source,tcl,numbers]
    ---------------------------------------------------
    -nx::Object create o4 {
    -
    -  #
    -  # Positional parameter with value constraints:
    -  #
    -  :public method foo {x:integer o:object,optional} {
    -    puts "x=$x o? [info exists o]"
    +  #
    +  # Positional parameter with value constraints:
    +  #
    +  :public method foo {x:integer o:object,optional} {
    +    puts "x=$x o? [info exists o]"
       }
     
    -  #
    -  # Non-positional parameter with value constraints:
    -  #
    -  :public method bar {{-x:integer 10} {-verbose:boolean false}} {
    -    puts "x=$x y=$y"
    +  #
    +  # Non-positional parameter with value constraints:
    +  #
    +  :public method bar {{-x:integer 10} {-verbose:boolean false}} {
    +    puts "x=$x y=$y"
       }
     }
     
    -# The following invocation raises an exception
    -o4 foo a
    ---------------------------------------------------
    -
    -Value contraints are specified as parameter options in the parameter
    -specifications. The parameter specification +x:integer+ defines +x+ as
    +# The following invocation raises an exception
    +o4 foo a
    +

    Value contraints are specified as parameter options in the parameter +specifications. The parameter specification x:integer defines x as a required positional parmeter which value is constraint to an -integer. The parameter specification +o:object,optional+ shows how to -combine multiple parameter options. The parameter +o+ is an optional +integer. The parameter specification o:object,optional shows how to +combine multiple parameter options. The parameter o is an optional positional parameter, its value must be an object (see -<<xmp-value-check,{xmp-value-check}>>). Value constraints are +Listing 35). Value constraints are specified exactly the same way for non-positional parameters (see -method +bar+ in <<xmp-value-check,{xmp-value-check}>>). +method bar in Listing 35).

    +
    Listing 36: Parameterized Value Constraints

    +
    +
    +
      1
    +  2
    +  3
    +  4
    +  5
    +  6
    +  7
    +  8
    +  9
    + 10
    + 11
    + 12
    + 13
    + 14
    + 15
    + 16
    + 17
    + 18
    + 19
    + 20
    + 21
    + 22
    + 23
    + 24
    + 25
    + 26
    + 27
    + 28
    +
    #
    +# Create classes for Person and Project
    +#
    +Class create Person
    +Class create Project
     
    -[[xmp-check-parameterized]]
    -.Listing {counter:figure-number}: Parameterized Value Constraints
    -{set:xmp-check-parameterized:Listing {figure-number}}
    -[source,tcl,numbers]
    ---------------------------------------------------
    -#
    -# Create classes for Person and Project
    -#
    -Class create Person
    -Class create Project
    -
    -nx::Object create o5 {
    -  #
    -  # Parameterized value constraints
    -  #
    -  :public method work {
    +nx::Object create o5 {
    +  #
    +  # Parameterized value constraints
    +  #
    +  :public method work {
          -person:object,type=Person
          -project:object,type=Project
        } {
    -    # ...
    -  }
    +    # ...
    +  }
     }
     
    -#
    -# Create a Person and a Project instance
    -#
    -Person create gustaf
    -Project create nx
    +#
    +# Create a Person and a Project instance
    +#
    +Person create gustaf
    +Project create nx
     
    -#
    -# Use method with value constraints
    -#
    -o5 work -person gustaf -project nx
    ---------------------------------------------------
    -
    -The native checkers +object+, +class+, +metaclass+ and +baseclass+ can
    -be further specialized with the parameter option +type+ to restrict
    +#
    +# Use method with value constraints
    +#
    +o5 work -person gustaf -project nx
    +

    The native checkers object, class, metaclass and baseclass can +be further specialized with the parameter option type to restrict the permissible values to instances of certain classes. We can use for -example the native value constraint +object+ either for testing +example the native value constraint object either for testing whether an argument is some object (without further constraints, as in -<<xmp-default-value, {xmp-default-value}>>, method +foo+), or we can +Listing 33, method foo), or we can constrain the value further to some type (direct or indirect instance -of a class). This is shown by method +work+ in -<<xmp-check-parameterized, {xmp-check-parameterized}>> which requires -the parameter +-person+ to be an instance of class +Person+ and the -parameter +-project+ to be an instance of class +Project+. - -===== Scripted Value Constraints - -The set of predefined value checkers can be extended by application +of a class). This is shown by method work in +Listing 36 which requires +the parameter -person to be an instance of class Person and the +parameter -project to be an instance of class Project.

    +
    +
    +
    Scripted Value Constraints
    +

    The set of predefined value checkers can be extended by application programs via defining methods following certain conventions. The user -defined value checkers are defined as methods of the class +nx::Slot+ +defined value checkers are defined as methods of the class nx::Slot or of one of its subclasses or instances. We will address such cases in the next sections. In the following example we define two new -value checkers on class +nx::Slot+. The first value checker is called -+groupsize+, the second one is called +choice+. - -[[xmp-user-types]] -.Listing {counter:figure-number}: Scripted Value Checker for Method Parameters -{set:xmp-user-types:Listing {figure-number}} -[source,tcl,numbers] --------------------------------------------------- -# -# Value checker named "groupsize" -# -::nx::Slot method type=groupsize {name value} { - if {$value < 1 || $value > 6} { - error "Value '$value' of parameter $name is not between 1 and 6" +value checkers on class nx::Slot. The first value checker is called +groupsize, the second one is called choice.

    +
    Listing 37: Scripted Value Checker for Method Parameters

    +
    +
    +
      1
    +  2
    +  3
    +  4
    +  5
    +  6
    +  7
    +  8
    +  9
    + 10
    + 11
    + 12
    + 13
    + 14
    + 15
    + 16
    + 17
    + 18
    + 19
    + 20
    + 21
    + 22
    + 23
    + 24
    + 25
    + 26
    + 27
    + 28
    + 29
    + 30
    + 31
    + 32
    + 33
    + 34
    + 35
    + 36
    + 37
    + 38
    + 39
    + 40
    +
    #
    +# Value checker named "groupsize"
    +#
    +::nx::Slot method type=groupsize {name value} {
    +  if {$value < 1 || $value > 6} {
    +    error "Value '$value' of parameter $name is not between 1 and 6"
       }
     }
     
    -#
    -# Value checker named "choice" with extra argument
    -#
    -::nx::Slot method type=choice {name value arg} {
    -  if {$value ni [split $arg |]} {
    -    error "Value '$value' of parameter $name not in permissible values $arg"
    +#
    +# Value checker named "choice" with extra argument
    +#
    +::nx::Slot method type=choice {name value arg} {
    +  if {$value ni [split $arg |]} {
    +    error "Value '$value' of parameter $name not in permissible values $arg"
       }
     }
     
    -#
    -# Create an application class D
    -# using the new value checkers
    -#
    -Class create D {
    -  :public method foo {a:groupsize} {
    -    # ...
    -  }
    -  :public method bar {a:choice,arg=red|yellow|green b:choice,arg=good|bad} {
    -    # ...
    -  }
    +#
    +# Create an application class D
    +# using the new value checkers
    +#
    +Class create D {
    +  :public method foo {a:groupsize} {
    +    # ...
    +  }
    +  :public method bar {a:choice,arg=red|yellow|green b:choice,arg=good|bad} {
    +    # ...
    +  }
     }
     
    -D create d1
    +D create d1
     
    -# testing "groupsize"
    -d1 foo 2
    +# testing "groupsize"
    +d1 foo 2
     d1 foo 10
     
    -# testing "choice"
    -d1 bar green good
    -d1 bar pink bad
    ---------------------------------------------------
    -
    -In order to define a checker +groupsize+ a method of the name
    -+type=groupsize+ is defined. This method receives two arguments,
    -+name+ and +value+. The first argument is the name of the parameter
    +# testing "choice"
    +d1 bar green good
    +d1 bar pink bad
    +

    In order to define a checker groupsize a method of the name +type=groupsize is defined. This method receives two arguments, +name and value. The first argument is the name of the parameter (mostly used for the error message) and the second parameter is provided value. The value checker simply tests whether the provided value is between 1 and 3 and raises an exception if this is not the -case (invocation in line 36 in <<xmp-user-types, {xmp-user-types}>>). - -The checker +groupsize+ has the permissible values defined in its -method's body. It is as well possible to define more generic checkers +case (invocation in line 36 in Listing 37).

    +

    The checker groupsize has the permissible values defined in its +method’s body. It is as well possible to define more generic checkers that can be parameterized. For this parameterization, one can pass an -argument to the checker method (last argument). The checker +choice+ +argument to the checker method (last argument). The checker choice can be used for restricting the values to a set of predefined constants. This set is defined in the parameter specification. The -parameter +a+ of method +bar+ in <<xmp-user-types, {xmp-user-types}>> -is restricted to the values +red+, +yellow+ or +green+, and the -parameter +b+ is restricted to +good+ or +bad+. Note that the syntax +parameter a of method bar in Listing 37 +is restricted to the values red, yellow or green, and the +parameter b is restricted to good or bad. Note that the syntax of the permissible values is solely defined by the definition of the value checker in lines 13 to 17. The invocation in line 39 will be ok, -the invocation in line 40 will raise an exception, since +pink+ is not -allowed. - -If the same checks are used in many places in the program, +the invocation in line 40 will raise an exception, since pink is not +allowed.

    +

    If the same checks are used in many places in the program, defining names for the value checker will be the better choice since it improves maintainability. For seldomly used kind of checks, the -parameterized value checkers might be more convenient. - -==== Multiplicity - -***************************************************************************** -*Multiplicity* is used to define whether a parameter should receive -single or multiple values. -***************************************************************************** - -A multiplicity specification has a lower and an upper bound. A lower -bound of +0+ means that the value might be empty. A lower bound of +1+ +parameterized value checkers might be more convenient.

    +
    +
    +
    +

    3.7.5. Multiplicity

    +
    +
    +

    Multiplicity is used to define whether a parameter should receive +single or multiple values.

    +
    +

    A multiplicity specification has a lower and an upper bound. A lower +bound of 0 means that the value might be empty. A lower bound of 1 means that the the parameter needs at least one value. The upper bound -might be +1+ or +n+ (or synonymously +*+). While the upper bound of -+1+ states that at most one value has to be passed, the upper bound of -+n+ says that multiple values are permitted. Other kinds of -multiplicity are currently not allowed. - -The multiplicity is written as parameter option in the parameter -specification in the form _lower-bound_.._upper-bound_. If no -multiplicity is defined the default multiplicity is +1..1+, which +might be 1 or n (or synonymously *). While the upper bound of +1 states that at most one value has to be passed, the upper bound of +n says that multiple values are permitted. Other kinds of +multiplicity are currently not allowed.

    +

    The multiplicity is written as parameter option in the parameter +specification in the form lower-bound..upper-bound. If no +multiplicity is defined the default multiplicity is 1..1, which means: provide exactly one (atomic) value (this was the case in the -previous examples). +previous examples).

    +
    Listing 38: Method Parameters with Explicit Multiplicity

    +
    +
    +
      1
    +  2
    +  3
    +  4
    +  5
    +  6
    +  7
    +  8
    +  9
    + 10
    + 11
    + 12
    + 13
    + 14
    + 15
    + 16
    + 17
    + 18
    + 19
    + 20
    + 21
    + 22
    + 23
    + 24
    + 25
    + 26
    +
    nx::Object create o6 {
     
    -[[xmp-multiplicity]]
    -.Listing {counter:figure-number}: Method Parameters with Explicit Multiplicity
    -{set:xmp-multiplicity:Listing {figure-number}}
    -[source,tcl,numbers]
    ---------------------------------------------------
    -nx::Object create o6 {
    -
    -  #
    -  # Positional parameter with an possibly empty
    -  # single value
    -  #
    -  :public method foo {x:integer,0..1} {
    -    puts "x=$x"
    +  #
    +  # Positional parameter with an possibly empty
    +  # single value
    +  #
    +  :public method foo {x:integer,0..1} {
    +    puts "x=$x"
       }
     
    -  #
    -  # Positional parameter with an possibly empty
    -  # list of values value
    -  #
    -  :public method bar {x:integer,0..n} {
    -    puts "x=$x"
    +  #
    +  # Positional parameter with an possibly empty
    +  # list of values value
    +  #
    +  :public method bar {x:integer,0..n} {
    +    puts "x=$x"
       }
     
    -  #
    -  # Positional parameter with a non-empty
    -  # list of values
    -  #
    -  :public method baz {x:integer,1..n} {
    -    puts "x=$x"
    +  #
    +  # Positional parameter with a non-empty
    +  # list of values
    +  #
    +  :public method baz {x:integer,1..n} {
    +    puts "x=$x"
       }
    -}
    ---------------------------------------------------
    -
    -<<xmp-multiplicity, {xmp-multiplicity}>> contains three examples for
    +}
    +

    Listing 38 contains three examples for positional parameters with different multiplicities. Multiplicity is often combined with value constraints. A parameter specification of -the form +x:integer,0..n+ means that the parameter +x+ receives a list +the form x:integer,0..n means that the parameter x receives a list of integers, which might be empty. Note that the value constraints are -applied to every single element of the list. - -The parameter specification +x:integer,0..1+ means that +x+ might be +applied to every single element of the list.

    +

    The parameter specification x:integer,0..1 means that x might be an integer or it might be empty. This is one style of specifying that no explicit value is passed for a certain parameter. Another style is to use required or optional parameters. NX does not enforce any -particular style for handling unspecified values. - -All the examples in <<xmp-multiplicity, {xmp-multiplicity}>> are for +particular style for handling unspecified values.

    +

    All the examples in Listing 38 are for single positional parameters. Certainly, multiplicity is fully orthogonal with the other parameter features and can be used as well for multiple parameters, non-positional parameter, default values, -etc. - -== Advanced Language Features - -... - -=== Objects, Classes and Meta-Classes - -... - -=== Resolution Order and Next-Path - -... - -=== Details on Method and Object Parameters - -The parameter specifications are used in NX for the following -purposes. They are used for - -- the specification of input arguments of methods and commands, for -- the specification of return values of methods and commands, and for -- the specification for the initialization of objects. - -We refer to the first two as method parameters and the last one as +etc.

    +
    +
    + + +
    +

    4. Advanced Language Features

    +
    +

    +
    +

    4.1. Objects, Classes and Meta-Classes

    +

    +
    +
    +

    4.2. Resolution Order and Next-Path

    +

    +
    +
    +

    4.3. Details on Method and Object Parameters

    +

    The parameter specifications are used in NX for the following +purposes. They are used for

    +
      +
    • +

      +the specification of input arguments of methods and commands, for +

      +
    • +
    • +

      +the specification of return values of methods and commands, and for +

      +
    • +
    • +

      +the specification for the initialization of objects. +

      +
    • +
    +

    We refer to the first two as method parameters and the last one as object parameters. The examples in the previous sections all parameter -specification were specifications of method parameters. - -***************************************************************************** -*Method parameters* specify properties about permissible values passed -to methods. -***************************************************************************** - -The method parameter specify how methods are invoked, how the +specification were specifications of method parameters.

    +
    +
    +

    Method parameters specify properties about permissible values passed +to methods.

    +
    +

    The method parameter specify how methods are invoked, how the actual arguments are passed to local variables of the invoked method -and what kind of checks should be performed on these. - -***************************************************************************** -*Object parameters* are parameters that specify, with what values +and what kind of checks should be performed on these.

    +
    +
    +

    Object parameters are parameters that specify, with what values instance variables of objects are initialized and how these objects -could be parameterized. -***************************************************************************** - -Syntactically, object parameters and method parameters are the same, +could be parameterized.

    +
    +

    Syntactically, object parameters and method parameters are the same, although there are certain differences (e.g. some parameter options are only applicable for objects parameters, the list of object parameters is computed dynamically from the class structures, object parameters are often used in combination with special setter methods, etc.). Consider the following example, where we define the two -application classes +Person+ and +Student+ with a few properties. - -[[xmp-object-parameters]] -.Listing {counter:figure-number}: Object Parameters -{set:xmp-object-parameters:Listing {figure-number}} -[source,tcl,numbers] --------------------------------------------------- -# -# Define a class Person with properties "name" -# and "birthday" -# -nx::Class create Person { - :property name:required - :property birthday +application classes Person and Student with a few properties.

    +
    Listing 39: Object Parameters

    +
    +
    +
      1
    +  2
    +  3
    +  4
    +  5
    +  6
    +  7
    +  8
    +  9
    + 10
    + 11
    + 12
    + 13
    + 14
    + 15
    + 16
    + 17
    + 18
    + 19
    + 20
    + 21
    + 22
    + 23
    + 24
    + 25
    + 26
    + 27
    +
    #
    +# Define a class Person with properties "name"
    +# and "birthday"
    +#
    +nx::Class create Person {
    +  :property name:required
    +  :property birthday
     }
     
    -#
    -# Define a class Student as specialization of Person
    -# with and additional property
    -#
    -nx::Class create Student -superclass Person {
    -  :property matnr:required
    -  :property {oncampus:boolean true}
    +#
    +# Define a class Student as specialization of Person
    +# with and additional property
    +#
    +nx::Class create Student -superclass Person {
    +  :property matnr:required
    +  :property {oncampus:boolean true}
     }
     
    -#
    -# Create instances using object parameters
    -# for the initialization
    -#
    -Person create p1 -name Bob
    -Student create s1 -name Susan -matnr 4711
    +#
    +# Create instances using object parameters
    +# for the initialization
    +#
    +Person create p1 -name Bob
    +Student create s1 -name Susan -matnr 4711
     
    -# Access property value via accessor method
    -puts "The name of s1 is [s1 name]"
    ---------------------------------------------------
    -
    -The class +Person+ has two properties +name+ and +birthday+, where the
    -property +name+ is required, the property +birthday+ is not. The
    -class +Student+ is a subclass of +Person+ with the additional required
    -property +matnr+ and an optional property +oncampus+ with the
    -default value +true+ (see <<xmp-object-parameters,
    -{xmp-object-parameters}>>). The class diagram below visualizes these
    -definitions.
    -
    -[[img-object-parameters]]
    -image::object-parameter.png[align="center",title="System and Application Classes"]
    -{set:img-object-parameters:Figure {figure-number}}
    -
    -In NX, these definitions imply that instances of the class of +Person+
    -have the properties +name+ and +birthday+ as _non-positional object
    -parameters_.  Furthermore it implies that instances of +Student+ will
    -have the object parameters of +Person+ augmented with the object
    -parameters from +Student+ (namely +matnr+ and +oncampus+).  Based on
    -these object parameters, we can create a +Person+ named +Bob+ and a
    -+Student+ named +Susan+ with the matriculation number +4711+ (see line
    -23 and 24 in <<xmp-object-parameters,
    -{xmp-object-parameters}>>). After the object +s1+ is created it has the
    -instance variables +name+, +matnr+ and +oncampus+ (the latter is
    -initialized with the default value).
    -
    -==== Object Parameters for all NX Objects
    -
    -The object parameters are not limited to the application defined
    +# Access property value via accessor method
    +puts "The name of s1 is [s1 name]"
    +

    The class Person has two properties name and birthday, where the +property name is required, the property birthday is not. The +class Student is a subclass of Person with the additional required +property matnr and an optional property oncampus with the +default value true (see Listing 39). The class diagram below visualizes these +definitions.

    +
    +
    +object-parameter.png +
    +
    Figure 40. System and Application Classes
    +
    +

    +

    In NX, these definitions imply that instances of the class of Person +have the properties name and birthday as non-positional object +parameters. Furthermore it implies that instances of Student will +have the object parameters of Person augmented with the object +parameters from Student (namely matnr and oncampus). Based on +these object parameters, we can create a Person named Bob and a +Student named Susan with the matriculation number 4711 (see line +23 and 24 in Listing 39). After the object s1 is created it has the +instance variables name, matnr and oncampus (the latter is +initialized with the default value).

    +
    +

    4.3.1. Object Parameters for all NX Objects

    +

    The object parameters are not limited to the application defined properties, also NX provides some predefined definitions. Since -+Person+ is a subclass of +nx::Object+ also the object parameters of -+nx::Object+ are inherited. In the introductory stack example, we used -+-mixin+ applied to an object to denote per-object mixins (see -<<xmp-using-class-safety, {xmp-using-class-safety}>>). Since +mixin+ -is defined as a parameter on +nx::Object+ it can be used as an object -parameter +-mixin+ for all objects in NX. To put it in other words, +Person is a subclass of nx::Object also the object parameters of +nx::Object are inherited. In the introductory stack example, we used +-mixin applied to an object to denote per-object mixins (see +Listing 8). Since mixin +is defined as a parameter on nx::Object it can be used as an object +parameter -mixin for all objects in NX. To put it in other words, every object can be configured to have per-object mixins. If we would -remove this definition, this feature would be removed as well. - -As shown in the introductory examples, every object can be configured +remove this definition, this feature would be removed as well.

    +

    As shown in the introductory examples, every object can be configured via a scripted initialization block (the optional scripted block specified at object creation as last argument; see -<<xmp-object-stack, {xmp-object-stack}>> or -<<xmp-object-integer-stack, {xmp-object-integer-stack}>>). The +Listing 5 or +Listing 12). The scripted block and its meaning are as well defined by the means of object parameters. However, this object parameter is positional (last argument) and optional (it can be omitted). The following listing shows -(simplified) the object parameters of +Person p1+ and +Student s1+. - -[[xmp-object-parameter-list]] -.Listing {counter:figure-number}: Computed Actual Object Parameter (simplified) -{set:xmp-object-parameter-list:Listing {figure-number}} -[source,tcl,numbers] --------------------------------------------------- -Object parameter for Person p1: +(simplified) the object parameters of Person p1 and Student s1.

    +
    Listing 41: Computed Actual Object Parameter (simplified)

    +
    +
    +
      1
    +  2
    +  3
    +  4
    +  5
    +  6
    +  7
    +  8
    +
    Object parameter for Person p1:
        -name:required -birthday ...
    -   -mixin:mixinreg,alias,1..n -filter:filterreg,alias,1..n _:initcmd,optional
    +   -mixin:mixinreg,alias,1..n -filter:filterreg,alias,1..n _:initcmd,optional
     
    -Object parameter for Student s1:
    +Object parameter for Student s1:
        -matnr:required {-oncampus:boolean true}
        -name:required -birthday ...
    -   -mixin:mixinreg,alias,1..n -filter:filterreg,alias,1..n _:initcmd,optional
    ---------------------------------------------------
    -
    -The actual values can be optained via introspection via +Person info
    -parameter definition+. The object parameter types +mixinreg+ and
    -+filterreg+ are for converting definitions of filters and mixins.  The
    -object parameter type +initcmd+ says that the content of this variable
    +   -mixin:mixinreg,alias,1..n -filter:filterreg,alias,1..n _:initcmd,optional
    +

    The actual values can be optained via introspection via Person info +parameter definition. The object parameter types mixinreg and +filterreg are for converting definitions of filters and mixins. The +object parameter type initcmd says that the content of this variable will be executed in the context of the object being created (before -the constructor +init+ is called). More about the object parameter -types later. - -==== Object Parameters for all NX Classes - -Since classes are certain kind of objects, classes are parameterized +the constructor init is called). More about the object parameter +types later.

    +
    +
    +

    4.3.2. Object Parameters for all NX Classes

    +

    Since classes are certain kind of objects, classes are parameterized in the same way as objects. A typical parameter for a class definition is the relation of the class to its superclass.In our example, we have -specified, that +Student+ has +Person+ as superclass via the -non-positional object parameter +-superclass+. If no superclass is +specified, that Student has Person as superclass via the +non-positional object parameter -superclass. If no superclass is specified for a class, the default superclass is -+nx::Object+. Therefore +nx::Object+ is the default value for the -parameter +superclass+. - -Another frequently used parameter for classes is +-mixin+ to denote +nx::Object. Therefore nx::Object is the default value for the +parameter superclass.

    +

    Another frequently used parameter for classes is -mixin to denote per-class mixins (see e.g. the introductory Stack example in -<<xmp-class-safestack,{xmp-class-safestack}>>), which is defined in -the same way. - -Since +Student+ is an instance of the meta-class +nx::Class+ it -inherits the object parameters from +nx::Class+ (see class diagram -<<img-object-parameters,{img-object-parameters}>>). Therefore, one can -use e.g. +-superclass+ in the definition of classes. - -Since +nx::Class+ is a subclass of +nx::Object+, the meta-class -+nx::Class+ inherits the parameter definitions from the most general -class +nx::Object+. Therefore, every class might as well be configured +Listing 10), which is defined in +the same way.

    +

    Since Student is an instance of the meta-class nx::Class it +inherits the object parameters from nx::Class (see class diagram +Figure 40). Therefore, one can +use e.g. -superclass in the definition of classes.

    +

    Since nx::Class is a subclass of nx::Object, the meta-class +nx::Class inherits the parameter definitions from the most general +class nx::Object. Therefore, every class might as well be configured with a scripted initialization block the same way as objects can be configured. We used actually this scripted initialization block in most examples for defining the methods of the class. The following -listing shows (simplified) the parameters applicable for +Class -Student+. - -[[xmp-class-parameter-list]] -.Listing {counter:figure-number}: Computed Parameters for a Class (simplified) -{set:xmp-class-parameter-list:Listing {figure-number}} -[source,tcl,numbers] --------------------------------------------------- -Object parameter for Class Student: - -mixin:mixinreg,alias,1..n -filter:filterreg,alias,1..n ... - {-superclass:class,alias,1..n ::nx::Object} ... --------------------------------------------------- - -The actual values can be obtained via introspection via +nx::Class info -parameter definition+. - - -==== User defined Parameter Types - -More detailed definition of the object parameter types comes here. - -==== Slot Classes and Slot Objects - -In one of the previous sections, we defined scripted (application -defined) checker methods on a class named +nx::Slot+. In general NX +listing shows (simplified) the parameters applicable for Class +Student.

    +
    Listing 42: Computed Parameters for a Class (simplified)

    +
    +
    +
      1
    +  2
    +  3
    +
    Object parameter for Class Student:
    +   -mixin:mixinreg,alias,1..n -filter:filterreg,alias,1..n ...
    +   {-superclass:class,alias,1..n ::nx::Object} ...
    +

    The actual values can be obtained via introspection via nx::Class info +parameter definition.

    +
    +
    +

    4.3.3. User defined Parameter Types

    +

    More detailed definition of the object parameter types comes here.

    +
    +
    +

    4.3.4. Slot Classes and Slot Objects

    +

    In one of the previous sections, we defined scripted (application +defined) checker methods on a class named nx::Slot. In general NX offers the possibility to define value checkers not only for all usages of parameters but as well differently for method parameters or -object parameters - -[[img-slots]] -image::slots.png[align="center",title="Slot Classes and Objects"] -{set:img-slots:Figure {figure-number}} - - -==== Attribute Slots - - -Still Missing - -- return value checking -- switch -- initcmd ... -- subst rules -- converter -- incremental slots - -== Miscellaneous - -=== Profiling - -=== Unknown Handlers - -NX provides two kinds of unknown handlers: - -- Unknown handlers for methods -- Unknown handlers for objects and classes - -==== Unknown Handlers for Methods - -Object and classes might be equipped -with a method +unknown+ which is called in cases, where an unknown +object parameters

    +
    +
    +slots.png +
    +
    Figure 43. Slot Classes and Objects
    +
    +

    +
    +
    +

    4.3.5. Attribute Slots

    +

    Still Missing

    +
      +
    • +

      +return value checking +

      +
    • +
    • +

      +switch +

      +
    • +
    • +

      +initcmd … +

      +
    • +
    • +

      +subst rules +

      +
    • +
    • +

      +converter +

      +
    • +
    • +

      +incremental slots +

      +
    • +
    +
    +
    +
    +
    +
    +

    5. Miscellaneous

    +
    +
    +

    5.1. Profiling

    +
    +
    +

    5.2. Unknown Handlers

    +

    NX provides two kinds of unknown handlers:

    +
      +
    • +

      +Unknown handlers for methods +

      +
    • +
    • +

      +Unknown handlers for objects and classes +

      +
    • +
    +
    +

    5.2.1. Unknown Handlers for Methods

    +

    Object and classes might be equipped +with a method unknown which is called in cases, where an unknown method is called. The method unknown receives as first argument the -called method followed by the provided arguments - -[[xmp-unknown-method]] -.Listing {counter:figure-number}: Unknown Method Handler -{set:xmp-unknown-method:Listing {figure-number}} -[source,tcl,numbers] --------------------------------------------------- -::nx::Object create o { - :method unknown {called_method args} { - puts "Unknown method '$called_method' called" +called method followed by the provided arguments

    +
    Listing 44: Unknown Method Handler

    +
    +
    +
      1
    +  2
    +  3
    +  4
    +  5
    +  6
    +  7
    +  8
    +  9
    + 10
    +
    ::nx::Object create o {
    +  :method unknown {called_method args} {
    +    puts "Unknown method '$called_method' called"
       }
     }
     
    -# Invoke an unknown method for object o:
    -o foo 1 2 3
    +# Invoke an unknown method for object o:
    +o foo 1 2 3
     
    -# Output will be: "Unknown method 'foo' called"
    ---------------------------------------------------
    -
    -Without any provision of an unknown method handler, an error will be
    -raised, when an unknown method is called.
    -
    -==== Unknown Handlers for Objects and Classes
    -
    -The next scripting framework provides in addition to unknown method
    +# Output will be: "Unknown method 'foo' called"
    +

    Without any provision of an unknown method handler, an error will be +raised, when an unknown method is called.

    +
    +
    +

    5.2.2. Unknown Handlers for Objects and Classes

    +

    The next scripting framework provides in addition to unknown method handlers also a means to dynamically create objects and classes, when these are referenced. This happens e.g. when superclasses, mixins, or parent objects are referenced. This mechanism can be used to implement e.g. lazy loading of these classes. Nsf allows to register multiple unknown handlers, each identified by a key (a unique name, different -from the keys of other unknown handlers). - -[[xmp-unknown-class]] -.Listing {counter:figure-number}: Unknown Class Handler -{set:xmp-unknown-class:Listing {figure-number}} -[source,tcl,numbers] --------------------------------------------------- -::nx::Class public class method __unknown {name} { - # A very simple unknown handler, showing just how - # the mechanism works. - puts "***** __unknown called with <$name>" - ::nx::Class create $name +from the keys of other unknown handlers).

    +
    Listing 45: Unknown Class Handler

    +
    +
    +
      1
    +  2
    +  3
    +  4
    +  5
    +  6
    +  7
    +  8
    +  9
    + 10
    + 11
    + 12
    + 13
    + 14
    + 15
    + 16
    + 17
    + 18
    + 19
    + 20
    + 21
    + 22
    +
    ::nx::Class public class method __unknown {name} {
    +  # A very simple unknown handler, showing just how
    +  # the mechanism works.
    +  puts "***** __unknown called with <$name>"
    +  ::nx::Class create $name
     }
     
    -# Register an unknown handler as a method of ::nx::Class
    -::nsf::object::unknown::add nx {::nx::Class __unknown}
    +# Register an unknown handler as a method of ::nx::Class
    +::nsf::object::unknown::add nx {::nx::Class __unknown}
     
    -::nx::Object create o {
    -  # The class M is unknown at this point
    -
    -  :mixin add M
    -  # The line above has triggered the unknown class handler,
    -  # class M is now defined
    -
    -  puts [:info mixin classes]
    -  # The output will be:
    -  #     ***** __unknown called with <::M>
    -  #     ::M
    -}
    ---------------------------------------------------
    -
    -The Next Scripting Framework allows to add, query, delete and list unknown handlers.
    -
    -[[xmp-unknown-registgration]]
    -.Listing {counter:figure-number}: Unknown Handler registration
    -{set:xmp-unknown-registgration:Listing {figure-number}}
    -[source,tcl,numbers]
    ---------------------------------------------------
    -# Interface for unknown handlers:
    -# nsf::object::unknown::add /key/ /handler/
    -# nsf::object::unknown::get /key/
    -# nsf::object::unknown::delete /key/
    -# nsf::object::unknown::keys
    ---------------------------------------------------
    -
    -
    -[bibliography]
    -.References
    -
    -- [[Zdun, Strembeck, Neumann 2007]] U. Zdun, M. Strembeck, G. Neumann:
    +::nx::Object create o {
    +  # The class M is unknown at this point
    +
    +  :mixin add M
    +  # The line above has triggered the unknown class handler,
    +  # class M is now defined
    +
    +  puts [:info mixin classes]
    +  # The output will be:
    +  #     ***** __unknown called with <::M>
    +  #     ::M
    +}
    +

    The Next Scripting Framework allows to add, query, delete and list unknown handlers.

    +
    Listing 46: Unknown Handler registration

    +
    +
    +
      1
    +  2
    +  3
    +  4
    +  5
    +
    # Interface for unknown handlers:
    +# nsf::object::unknown::add /key/ /handler/
    +# nsf::object::unknown::get /key/
    +# nsf::object::unknown::delete /key/
    +# nsf::object::unknown::keys
    +
    References
      +
    • +

      + U. Zdun, M. Strembeck, G. Neumann: Object-Based and Class-Based Composition of Transitive Mixins, Information and Software Technology, 49(8) 2007 . - -- [[Neumann and Zdun 1999a]] G. Neumann and U. Zdun: Filters as a +

      +
    • +
    • +

      + G. Neumann and U. Zdun: Filters as a language support for design patterns in object-oriented scripting - languages. In Proceedings of COOTS'99, 5th Conference on + languages. In Proceedings of COOTS’99, 5th Conference on Object-Oriented Technologies and Systems, San Diego, May 1999. - -- [[Neumann and Zdun 1999b]] G. Neumann and U. Zdun: Implementing +

      +
    • +
    • +

      + G. Neumann and U. Zdun: Implementing object-specific design patterns using per-object mixins. In Proc. of NOSA`99, Second Nordic Workshop on Software Architecture, Ronneby, Sweden, August 1999. - -- [[Neumann and Zdun 1999c]] G. Neumann and U. Zdun: Enhancing +

      +
    • +
    • +

      + G. Neumann and U. Zdun: Enhancing object-based system composition through per-object mixins. In Proceedings of Asia-Pacific Software Engineering Conference (APSEC), Takamatsu, Japan, December 1999. - -- [[Neumann and Zdun 2000a]] G. Neumann and U. Zdun: XOTCL, an +

      +
    • +
    • +

      + G. Neumann and U. Zdun: XOTCL, an object-oriented scripting language. In Proceedings of Tcl2k: The 7th USENIX Tcl/Tk Conference, Austin, Texas, February 2000. - -- [[Neumann and Zdun 2000b]] G. Neumann and U. Zdun: Towards the Usage +

      +
    • +
    • +

      + G. Neumann and U. Zdun: Towards the Usage of Dynamic Object Aggregations as a Form of Composition In: - Proceedings of Symposium of Applied Computing (SAC'00), Como, + Proceedings of Symposium of Applied Computing (SAC’00), Como, Italy, Mar 19-21, 2000. - -- [[Neumann and Sobernig 2009]] G. Neumann, S. Sobernig: XOTcl 2.0 - A +

      +
    • +
    • +

      + G. Neumann, S. Sobernig: XOTcl 2.0 - A Ten-Year Retrospective and Outlook, in: Proceedings of the Sixteenth Annual Tcl/Tk Conference, Portland, Oregon, October, 2009. - -- [[Ousterhout 1990]] J. K. Ousterhout: Tcl: An embeddable command +

      +
    • +
    • +

      + J. K. Ousterhout: Tcl: An embeddable command language. In Proc. of the 1990 Winter USENIX Conference, January 1990. - -- [[Ousterhout 1998]] J. K. Ousterhout: Scripting: Higher Level +

      +
    • +
    • +

      + J. K. Ousterhout: Scripting: Higher Level Programming for the 21st Century, IEEE Computer 31(3), March 1998. - -- [[Wetherall and Lindblad 1995]] D. Wetherall and C. J. Lindblad: Extending Tcl for +

      +
    • +
    • +

      + D. Wetherall and C. J. Lindblad: Extending Tcl for Dynamic Object-Oriented Programming. Proc. of the Tcl/Tk Workshop '95, - July 1995. -

    + July 1995. +

    + +
    +

    Index: doc/next-tutorial.txt =================================================================== diff -u -r90ecfc116b3f569cea63dbce061a301497a5746b -rfdecdc39d01dbc9fc816e432e793aeff2a78d82e --- doc/next-tutorial.txt (.../next-tutorial.txt) (revision 90ecfc116b3f569cea63dbce061a301497a5746b) +++ doc/next-tutorial.txt (.../next-tutorial.txt) (revision fdecdc39d01dbc9fc816e432e793aeff2a78d82e) @@ -366,7 +366,7 @@ } -------------------------------------------------- -Note that the methods of the class +Safety+ all end with +next+. +Note that all the methods of the class +Safety+ end with +next+. This command is a primitive command of NX, that will call the same-named method with the same argument list as the current invocation. @@ -618,19 +618,19 @@ - A variable without any colon prefix refers typically to a method scoped variable (the variable is created at the begin of the - invocation of the method and deleted, when the method ends); + invocation of the method and deleted, when the method ends). In the example below, the variable +a+ is method scoped. - + - A variable with a single colon prefix refers to an instance variable (the variable is part of the object, when the object is destroyed, - the variable is deleted as well. In the example below, the variable + the variable is deleted as well). In the example below, the variable +b+ is an instance variable. -- a variable with two leading colons refers to a global variable (the - lifespan ends when te variable is explicitly unset or the script - ends). Also variables in placed in Tcl namespaces are global - variables. In the example below, the variable +c+ is a global - variable. +- A variable with two leading colons refers to a global variable (the + lifespan of a globale variable ends when the variable is explicitly + unset or the script terminates). Variables in placed in Tcl + namespaces are also global variables. In the example below, the + variable +c+ is a global variable. [[xmp-var-resolver]] .Listing {counter:figure-number}: Scopes of Variables @@ -640,11 +640,11 @@ Class create Foo { :method foo args {...} - # Method scoped variable a + # "a" is a method scoped variable set a 1 - # Instance variable b + # "b" is an Instance variable set :b 2 - # Global variable/namespaced variable c + # "c" is a global variable/namespaced variable set ::c 3 } } @@ -659,9 +659,27 @@ So, in general, there is no need to define or declare instance variables in NX. However, in some cases, a definition is useful. For example, one can define properties on classes, which are inherited to -subclasses, and which are used during object initialization. Consider -the following example: +subclasses. Or, the definition of properties can be used the check +permissible values for instance variables or to initialize instance +variables from default values during object initialization. +========================================= +A *property* is a definition of an attribute (an instance variable) +with accessors. The property definition might carry as well +value-constraints and a default value. +========================================= + +[[img-person-student]] +image::person-student.png[align="center",title="Classes Person and Student"] +{set:img-person-student:Figure {figure-number}} + +Consider the example above, where the classes +Person+ and +Student+ +are defined. Both classes have accessor methods for all their +attributes specified (Note that we show the accessor methods only in +this example). By defining properties we can use the name of the +attribute as method name to access the variable. The listing below +shows an implementation of this conceptual model in NX. + [[xmp-properties]] .Listing {counter:figure-number}: Properties {set:xmp-properties:Listing {figure-number}} @@ -696,19 +714,12 @@ puts "The name of s1 is [s1 name]" -------------------------------------------------- -We define here a class named +Person+ with two properties, namely - +name+ and birthday. - -We refer with the term _property_ to an instance variable with -accessors, where the property definition might carry as well -value-constraints and a default value. - When the class +Person+ is defined, NX provides as well automatically -accessors. Accessors are methods named like the variables, which are -used to access (to read and write) the underlying instance -variables. Therefore, in our example, the class +Person+ has two -methods implied by the +property+ definition, namely the method +name+ -and the method +birthday+. +accessors for its properties. Accessors are methods named like the +variables, which are used to access (to read and write) the underlying +instance variables. Therefore, in our example, the class +Person+ has +two methods implied by the +property+ definition, namely the method ++name+ and the method +birthday+. The class +Student+ is defined as a specialization of +Person+ with two additional properties, namely +matnr+ and +oncampus+. The property @@ -1122,9 +1133,9 @@ ==== Inherited Methods =========================================== -Typically, methods are defined on a class and these methods are -applicable to the instances (direct or indirect) of this class. These -methods are *inherited methods*. +Typically, methods are defined on a class, and the methods defined on the +class are applicable to the instances (direct or indirect) of this +class. These methods are called *inherited methods*. =========================================== In the following example method +foo+ is an inherited method defined @@ -1151,15 +1162,19 @@ ==== Object Methods =========================================== -Methods contained in objects are *per-object methods*, which are only -applicable on the object, on which they are defined. +Methods defined on objects are *per-object methods*. Per-object +methods are only applicable on the object, on which they are defined. +Per-object methods cannot be inherited from other objects. =========================================== The following example defines a object specific method +bar+ on the instance +c1+ of class +C+, and as well the object specific method -+baz+ defined on the object +o1+. Note that we can define a per-object -method that shadows (redefines) for this object an inherited method. ++baz+ defined on the object +o1+. An object-specific method is defined +simply by defining the method on an object. +Note that we can define a per-object method that shadows (redefines) +for this object an inherited method. + [[xmp-object-applicable1]] .Listing {counter:figure-number}: Per-object Method {set:xmp-object-applicable1:Listing {figure-number}} @@ -1190,13 +1205,19 @@ ========================================= A *class method* is a method defined on a class, which is only -applicable to the class itself. +applicable to the class object itself. ========================================= -In NX, all classes are objects as well. Classes are certainly special -kind of objects, that have the ability to e.g. create instances and to -provide methods to the instances. Classes manage their instances. +In NX, all classes are objects. Classes are in NX special kind of +objects that have e.g. the ability to create instances and to provide +methods to the instances. Classes manage their instances. The general +method set for classes is defined on the meta-classes (more about +this later). +The following example defines a public class method +bar+ on class ++C+. The class method is specified by using the modifier +class+ in +front of +method+ in the method definition command. + [[xmp-object-applicable2]] .Listing {counter:figure-number}: Per-object Method {set:xmp-object-applicable2:Listing {figure-number}} @@ -1222,14 +1243,51 @@ In several other object oriented programming languages, class methods are called "static methods". - === Ensemble Methods -... +NX provides "ensemble methods", which are similar in concept to Tcl's +ensemble commands. +========================================= +An *ensemble method* is a form of a hierarchical method consisting of +a container method and sub-methods. The first argument of the +container method is interpreted as a selector (the sub-method). Every +sub-method can be an container method as well. +========================================= + +Ensemble methods provide a means to group related commands together, +and they are extensible in various ways. It is possible to add +sub-methods at any time to existing ensembles. Furthermore, it is +possible to extend ensemble methods via mixin classes. + +The following example defines an ensemble method for +string+. An +ensemble method is defined when the provide method name contains a +space. + +[[xmp-ensemble-methods]] +.Listing {counter:figure-number}: Ensemble Method +{set:xmp-ensemble-methods:Listing {figure-number}} +[source,tcl,numbers] +-------------------------------------------------- +nx::Class create C { + + # Define an ensemble method "string" with sub-methods + # "length", "tolower" and "info" + + :public method "string length" {x} {....} + :public method "string tolower" {x} {...} + :public method "string info" {x} {...} + ... + :create c1 +} + +# Invoke the ensemble method +c1 string length "hello world" +-------------------------------------------------- + === Method Resolution -.... +... === Parameters Index: doc/person-student.graffle =================================================================== diff -u --- doc/person-student.graffle (revision 0) +++ doc/person-student.graffle (revision fdecdc39d01dbc9fc816e432e793aeff2a78d82e) @@ -0,0 +1,1750 @@ + + + + + ActiveLayerIndex + 0 + ApplicationVersion + + com.omnigroup.OmniGrafflePro + 138.17.0.133677 + + AutoAdjust + + BackgroundGraphic + + Bounds + {{0, 0}, {571, 818}} + Class + SolidGraphic + ID + 2 + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + + CanvasOrigin + {0, 0} + ColumnAlign + 1 + ColumnSpacing + 36 + CreationDate + 2009-12-29 16:06:59 +0100 + Creator + Gustaf A. Neumann + DisplayScale + 1.000 cm = 1.000 cm + GraphDocumentVersion + 6 + GraphicsList + + + Bounds + {{240.5, 474.88}, {90, 36}} + Class + ShapedGraphic + ID + 27 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\b\fs24 \cf0 s1 : Student} + VerticalPad + 0 + + + + AllowLabelDrop + + Class + LineGraphic + Head + + ID + 4 + + ID + 26 + Points + + {258.64, 332.132} + {305.698, 259.384} + + Style + + stroke + + HeadArrow + UMLInheritance + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 22 + + + + Class + TableGroup + Graphics + + + Bounds + {{162, 332.132}, {148, 14}} + Class + ShapedGraphic + FitText + Vertical + Flow + Resize + ID + 23 + Shape + Rectangle + Style + + fill + + GradientCenter + {-0.294118, -0.264706} + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\b\fs24 \cf0 Student} + VerticalPad + 0 + + TextPlacement + 0 + + + Bounds + {{162, 346.132}, {148, 28}} + Class + ShapedGraphic + FitText + Vertical + Flow + Resize + ID + 24 + Shape + Rectangle + Style + + fill + + GradientCenter + {-0.294118, -0.264706} + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 matnr\ +oncampus true} + VerticalPad + 0 + + TextPlacement + 0 + + + Bounds + {{162, 374.132}, {148, 28}} + Class + ShapedGraphic + FitText + Vertical + Flow + Resize + ID + 25 + Shape + Rectangle + Style + + fill + + GradientCenter + {-0.294118, -0.264706} + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 matnr <<property>>\ +oncampus <<property>>} + VerticalPad + 0 + + TextPlacement + 0 + + + GridH + + 23 + 24 + 25 + + + GroupConnect + YES + ID + 22 + + + Bounds + {{372.002, 318.405}, {75, 24}} + Class + ShapedGraphic + ID + 9 + Line + + ID + 8 + Position + 0.57259494066238403 + RotationType + 0 + + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs18 \cf0 instance of} + VerticalPad + 0 + + + + AllowLabelDrop + + Class + LineGraphic + Head + + ID + 7 + + ID + 8 + Points + + {364.665, 259.384} + {412, 305} + {384.96, 405} + + Style + + stroke + + HeadArrow + 0 + LineType + 1 + Pattern + 1 + TailArrow + FilledArrow + + + Tail + + ID + 4 + + + + Bounds + {{339.96, 405}, {90, 36}} + Class + ShapedGraphic + ID + 7 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\b\fs24 \cf0 p1 : Person} + VerticalPad + 0 + + + + Class + TableGroup + Graphics + + + Bounds + {{260.346, 189.384}, {136, 14}} + Class + ShapedGraphic + FitText + Vertical + Flow + Resize + ID + 11 + Shape + Rectangle + Style + + fill + + GradientCenter + {-0.294118, -0.264706} + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\b\fs24 \cf0 Person} + VerticalPad + 0 + + TextPlacement + 0 + + + Bounds + {{260.346, 203.384}, {136, 28}} + Class + ShapedGraphic + FitText + Vertical + Flow + Resize + ID + 12 + Shape + Rectangle + Style + + fill + + GradientCenter + {-0.294118, -0.264706} + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 name\ +birthday} + VerticalPad + 0 + + TextPlacement + 0 + + + Bounds + {{260.346, 231.384}, {136, 28}} + Class + ShapedGraphic + FitText + Vertical + Flow + Resize + ID + 40 + Shape + Rectangle + Style + + fill + + GradientCenter + {-0.294118, -0.264706} + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs24 \cf0 name <<property>>\ +birthday <<property>>} + VerticalPad + 0 + + TextPlacement + 0 + + + GridH + + 11 + 12 + 40 + + + GroupConnect + YES + ID + 4 + + + AllowLabelDrop + + Class + LineGraphic + Head + + ID + 27 + + ID + 36 + Points + + {214.222, 402.132} + {194, 434.632} + {240.5, 492.88} + + Style + + stroke + + HeadArrow + 0 + LineType + 1 + Pattern + 1 + TailArrow + FilledArrow + + + Tail + + ID + 22 + + + + Bounds + {{145.838, 435.657}, {75, 24}} + Class + ShapedGraphic + ID + 37 + Line + + ID + 36 + Offset + -15 + Position + 0.42781621217727661 + RotationType + 0 + + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural + +\f0\fs18 \cf0 instance of} + VerticalPad + 0 + + + + GridInfo + + GridSpacing + 14.17322826385498 + MajorGridSpacing + 10 + + GuidesLocked + NO + GuidesVisible + YES + HPages + 1 + ImageCounter + 1 + KeepToScale + + Layers + + + Lock + NO + Name + Layer 1 + Print + YES + View + YES + + + LayoutInfo + + Animate + NO + circoMinDist + 18 + circoSeparation + 0.0 + layoutEngine + dot + neatoSeparation + 0.0 + twopiSeparation + 0.0 + + LinksVisible + NO + MagnetsVisible + NO + MasterSheets + + ModificationDate + 2011-09-12 19:39:19 +0200 + Modifier + Gustaf A. Neumann + NotesVisible + NO + Orientation + 2 + OriginVisible + NO + PageBreaks + YES + PrintInfo + + NSBottomMargin + + float + 12 + + NSJobFeatures + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhBNOU011dGFibGVEaWN0aW9uYXJ5AISEDE5TRGljdGlvbmFyeQCEhAhOU09iamVjdACFhAFpAIY= + + NSLeftMargin + + float + 12 + + NSPagesPerSheet + + int + 1 + + NSPaperSize + + size + {595, 842} + + NSPrintAllPages + + int + 0 + + NSReversePageOrder + + int + 0 + + NSRightMargin + + float + 12 + + NSTopMargin + + float + 12 + + + PrintOnePage + + QuickLookPreview + + JVBERi0xLjMKJcTl8uXrp/Og0MTGCjUgMCBvYmoKPDwgL0xlbmd0aCA2IDAgUiAvRmls + dGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGdWMtuGzcU3fMruJQWpvm4fBVBFnVb + oF4ltYEsjCxcRUIcWHEs2QXy9z2XM+SMRpKtGMJAI5qP+zj3nEs/yo/yUWp8fDQymSQ3 + S/lJfpfnF1sjF1tpyme7kGdaecnPaOJKnn9YbhbLH0/Pt/dic4etjE/ddlpayspRkJ6c + CibIxVqe/7028o+HcmibaYaZUfNM0c2005kuDDNzHu3p2kxju9OTdDapHKQLtt+O2qTI + /sJjDWuNJK1VCjH29vlj07AfT+t325sG48puPox3C223wTJrM8Jos1XGZL9r3fk/y/vb + p7v/lhcP9w+bu/XyaXO3kIisIa+ci/DLww5yJCP2IE4XsnCxtUiW0BKJQg6Ke2dIXXL9 + IgTW8SJE9vdrmbsJWZ45C1Mcnmsk5y+jEBJ5vZI3YnY355RbOfteX7ZPcwAAI7d1pP1p + saxDsp/zUAdWc/FZXl/KP6+RdSMv8XyTN5Lw+QwzvnRIu7gqJml5dTF2QBdIwmirowrZ + ZkEawYvaSB7TShuXJJmgorXwN2sVtcWIdcqSR0oyDnKkgrNOLvAzKRezlQRsRu+9sNYr + rYFOik5RCISgMsoJ6UlJeyy6guG1HDrkIMrWWMAr8eGkyOUk2CCP14DFRivSIct7jGWV + 2RL8VkQpYOzr/mq4s0IELvF8EzddYEaJHOLQjtXIWtC2xKEeiyD57MzoWEHGKO8NTY4d + VrN3iBw+7FVgnKBkATIuWcMlVzhhJWruDprVr7POKJdotK4PHsMTvu3Ck0u0nBZtLXuA + sy+UM3yfBQeITrE5gmRD4noCQDGrQDz2/e7djwrRTQNrG2rbbZ7mooD+5/v3cyC2InkU + hYkbfY1N3DCoq7UYl5ic/VsNaLWG07oS+1r/9KW+NFd/dh6J2ekedHtOPKiQNsjsbvJT + mCb/cE3WpANMQ9IFGOmUpAdUb68KR5I+iVYjmxYJTvqLGRnOEPtnlIzskN6pGREdMTY7 + fo7NaGGd1lQAUdSaQj0W4n5E7JlSwNVDifdhNQny2ddSN/+ksFpzvJaoKyXbaF7OPgxI + r0jb1heUBaAvWAGGMO/55xwYDkILBc0aett7BvennvUzCaxaZr4KlURl5wwWLro1rinS + UJCiWnAHYWTVkjMUcKlWU32o5f9bffllh8daNar6li8H9nLeR5CnV8EaD0p2KSlwIeQl + oh3QgBrrljExg05JOWgVwRlX9IUMpD1Z/ERjYANkw2WncoS6u4hsRmzHgYD2HZUjF4Iy + kBgwd1RkoHAwAqJPgRzGIJSUWY5cJAiji8J7Uuj4WIwOrW1iJF8Qo7pQsGz4pNP4UBui + yh5CPRyKCEGW2YzRoaO1wHfhosJG7DqWZwhzUDr7Qw0PELarKKU7KIsSS6En7q5Oanjk + CQ1PqYSu9l9seF6qFhPQfCDhpeM0lIAHLoMVyqVrjQ5BjBdx5gx3Md0irrJ9PhjoxKIQ + CXiqne2U/zK6HvQ9B+V13TObmFU5aty7qWX0a9/7cvxm8RKlkRxF6VRP9/lezJrwNwcX + jdXXrRl4rmSyrV4fsF4w93TgGCi1xu+Y9FaNKKjANWkPFSM/G+EUNBDq/TU0DBRcYgRm + qBeYt6BBHkDDuLcfmTo+7gB1hwq+nZSIjsHfmpIa6s3zvNfnne5gT7ZKyMExLeRNk4ew + lZAzhZSQ467UQv66IJcYxO7O+FIMSFQRw7ldCK6egLgiY+j+yndDFHBaBuDtIMmjyDeL + LXfwhAJ31WzcT/j2E3BBt1CGyCJxXzikv3ccavKE04R7kMNdExwPMSG+cOBuRBjEWFDZ + RN6H50FYcH0CT3mLzBaWn67GLalnrd3/LnSXLocLDN+Jx43EMV7ktPRXNZxYrmqt/dgn + xiGnNnm+8uLaV04q+iCONhYtJ60pOt5ZcNq6u8Jpafv4P4V9m7sKZW5kc3RyZWFtCmVu + ZG9iago2IDAgb2JqCjE0MzkKZW5kb2JqCjMgMCBvYmoKPDwgL1R5cGUgL1BhZ2UgL1Bh + cmVudCA0IDAgUiAvUmVzb3VyY2VzIDcgMCBSIC9Db250ZW50cyA1IDAgUiAvTWVkaWFC + b3ggWzAgMCA1NzEgODE4XQo+PgplbmRvYmoKNyAwIG9iago8PCAvUHJvY1NldCBbIC9Q + REYgL1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUkgXSAvQ29sb3JTcGFjZSA8PCAv + Q3MyIDIxIDAgUgovQ3MxIDggMCBSID4+IC9Gb250IDw8IC9GMi4wIDIzIDAgUiAvRjEu + MCAyMiAwIFIgPj4gL1hPYmplY3QgPDwgL0ltMyAxMyAwIFIKL0ltNCAxNSAwIFIgL0lt + NSAxNyAwIFIgL0ltMiAxMSAwIFIgL0ltNiAxOSAwIFIgL0ltMSA5IDAgUiA+PiA+Pgpl + bmRvYmoKMTMgMCBvYmoKPDwgL0xlbmd0aCAxNCAwIFIgL1R5cGUgL1hPYmplY3QgL1N1 + YnR5cGUgL0ltYWdlIC9XaWR0aCAzMTYgL0hlaWdodCA3MiAvSW50ZXJwb2xhdGUKdHJ1 + ZSAvQ29sb3JTcGFjZSAyNCAwIFIgL0ludGVudCAvUGVyY2VwdHVhbCAvU01hc2sgMjUg + MCBSIC9CaXRzUGVyQ29tcG9uZW50CjggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3Ry + ZWFtCngB7dAxAQAAAMKg9U9tDQ+IQGHAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA + gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY + MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED + BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA + gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY + MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED + BgwYMGDAgAEDBgwY+BoYCq8AAQplbmRzdHJlYW0KZW5kb2JqCjE0IDAgb2JqCjMyMQpl + bmRvYmoKMTUgMCBvYmoKPDwgL0xlbmd0aCAxNiAwIFIgL1R5cGUgL1hPYmplY3QgL1N1 + YnR5cGUgL0ltYWdlIC9XaWR0aCAyMjQgL0hlaWdodCAxMTYgL0ludGVycG9sYXRlCnRy + dWUgL0NvbG9yU3BhY2UgMjQgMCBSIC9JbnRlbnQgL1BlcmNlcHR1YWwgL1NNYXNrIDI3 + IDAgUiAvQml0c1BlckNvbXBvbmVudAo4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0 + cmVhbQp4Ae3QgQAAAADDoPlTH+EChVBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg + wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM + GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB + AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg + wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM + GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB + AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg + wIABAwb+wAAwjwABCmVuZHN0cmVhbQplbmRvYmoKMTYgMCBvYmoKMzY0CmVuZG9iagox + NyAwIG9iago8PCAvTGVuZ3RoIDE4IDAgUiAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAv + SW1hZ2UgL1dpZHRoIDM0MCAvSGVpZ2h0IDEwMCAvSW50ZXJwb2xhdGUKdHJ1ZSAvQ29s + b3JTcGFjZSAyNCAwIFIgL0ludGVudCAvUGVyY2VwdHVhbCAvU01hc2sgMjkgMCBSIC9C + aXRzUGVyQ29tcG9uZW50CjggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB + 7dAxAQAAAMKg9U9tCj+IQGHAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY + MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED + BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA + gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY + MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED + BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA + gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY + MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED + BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA + wGtgjn8AAQplbmRzdHJlYW0KZW5kb2JqCjE4IDAgb2JqCjQ2OAplbmRvYmoKMTEgMCBv + YmoKPDwgL0xlbmd0aCAxMiAwIFIgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0ltYWdl + IC9XaWR0aCAzMTYgL0hlaWdodCAxMDIgL0ludGVycG9sYXRlCnRydWUgL0NvbG9yU3Bh + Y2UgMjQgMCBSIC9JbnRlbnQgL1BlcmNlcHR1YWwgL1NNYXNrIDMxIDAgUiAvQml0c1Bl + ckNvbXBvbmVudAo4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae3QAQ0A + AADCoPdPbQ8HESgMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg + wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM + GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB + AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg + wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM + GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB + AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg + wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM + GDBgwIABAwYMGDBgwIABAwYMGDBgwMDPwAB5xwABCmVuZHN0cmVhbQplbmRvYmoKMTIg + MCBvYmoKNDQ1CmVuZG9iagoxOSAwIG9iago8PCAvTGVuZ3RoIDIwIDAgUiAvVHlwZSAv + WE9iamVjdCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRoIDM0MCAvSGVpZ2h0IDcyIC9JbnRl + cnBvbGF0ZQp0cnVlIC9Db2xvclNwYWNlIDI0IDAgUiAvSW50ZW50IC9QZXJjZXB0dWFs + IC9TTWFzayAzMyAwIFIgL0JpdHNQZXJDb21wb25lbnQKOCAvRmlsdGVyIC9GbGF0ZURl + Y29kZSA+PgpzdHJlYW0KeAHt0AENAAAAwqD3T20ON4hAYcCAAQMGDBgwYMCAAQMGDBgw + YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG + DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA + AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw + YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG + DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA + AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAgY+BAR7v + AAEKZW5kc3RyZWFtCmVuZG9iagoyMCAwIG9iagozNDQKZW5kb2JqCjkgMCBvYmoKPDwg + L0xlbmd0aCAxMCAwIFIgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0 + aCAzMTYgL0hlaWdodCAxMDAgL0ludGVycG9sYXRlCnRydWUgL0NvbG9yU3BhY2UgMjQg + MCBSIC9JbnRlbnQgL1BlcmNlcHR1YWwgL1NNYXNrIDM1IDAgUiAvQml0c1BlckNvbXBv + bmVudAo4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae3QMQEAAADCoPVP + bQsviEBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg + wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM + GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB + AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg + wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM + GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB + AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg + wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM + GDBgwIABAwYMvAcGcl8AAQplbmRzdHJlYW0KZW5kb2JqCjEwIDAgb2JqCjQzNwplbmRv + YmoKMjUgMCBvYmoKPDwgL0xlbmd0aCAyNiAwIFIgL1R5cGUgL1hPYmplY3QgL1N1YnR5 + cGUgL0ltYWdlIC9XaWR0aCAzMTYgL0hlaWdodCA3MiAvQ29sb3JTcGFjZQovRGV2aWNl + R3JheSAvSW50ZXJwb2xhdGUgdHJ1ZSAvQml0c1BlckNvbXBvbmVudCA4IC9GaWx0ZXIg + L0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae2c+1NSWxTHtVDkDYqgPAIPIAIinSuGaAYO + jo/UW/kKSx2VasIo0pFi8pGNGcXk6ybjY9LMsrejjWlT95+7a4OpKE6e+0O/nP39iV/4 + YX/mu9baZ++1dlISFiaACWACmAAmgAn8eQLJWFEClMjDP07s6SRttcfgBCA5BsIYN+DF + YKRgAQEGA2AgjL/DFyUXw5bKZKbFxKKldhbPZKbGAP6G3g65lJRUwMZiszkcDpfL5dFU + sHQAwGaz0tIQPwYy35HeQ+hOQqQCOMDG5fH5AqFQRGMJhQI+nwcE2YAvRu8IeFF04DlE + jscXiETpGWJxZqZEIqWlJJLMTLE4I10kEvB5iB54D6yXGB5yHTIdIicEbhJpVrZMJlco + lLSUQiGXybKzpBLgJ4zSA+sheAkKbhQdJDoOF8gBOKCmVKnVOYSGpiJy1GqVEggCPqDH + 5aC0lxheMsp1TBaYTpQhyZIBN0Kjy9XnGQxGo4l2MhoNhjx9rk5DAD9ZliRDBNZjMVHF + OGw8sB2gS+PwBCKxVKZUE9pcgzHfbLGQJPkXDQXLtljM+UZDrpZQK2VSsUjAA+elMBJE + LdgOygQ7ik6uInR5JrOFLCw6Y7OXgEppJrRmu+1MUSFpMZvydIRKHoXHhoKRwHjJYLs0 + NpcvEmfJVRq9qYC02uylZQ5nucvlqqCdYNHlTkdZqd1mJQtMeo1KniUW8bnsNDDewaCN + 2Y4D6KRytdZgJq3FpY7yisrqmtq6+r9pqPq62prqyopyR2mxlTQbtGrkPD4nkfEQO4hY + IaBTaQ2WQttZp6vqfP2FhsbmFjct1dLc2HCh/nyVy3nWVmgxaFHYCnlgvENBCyGbmsbh + p0tkKo2hwFriqKipu9Tkvtre0dnt8VyjnTye7s6O9qvupkt1NRWOEmuBQaOSSdKR8Q4F + bfIJ2J+A7bKUhN5cWOKsrL3Y3Nre6bnhveW7fcdPO9257bvlveHpbG9tvlhb6SwpNOsJ + ZRYYD/YpBxMeClnIdhKZWmcibY7KugZ3W9d1r8/f1x+4H6Sh7gf6+/w+7/WuNndDXaXD + Rpp0apkEZTwI2vhPiyg7QYZUSeQVWM9WALoOj/d2byA4MDQ88oiGGhkeGggGem97PR0A + r+KstSCPUEozBAnZpbK4QnG2Smsii501F90d13r8geDQyOhY6FmYhnoWGhsdGQoG/D3X + OtwXa5zFpEmryhYLuazUQ75jpLJ4KGRzzdZSV31zm6fnbmBg5HEoPD459Q8NNTU5Hg49 + HhkI3O3xtDXXu0qt5lwUtDwWFIsDMctgsvnpUgWRZ7Gdq7rU2nXTHxh49CQ8MT0TmZub + p53m5iIz0xPhJ48GAv6bXa2Xqs7ZLHmEQprOZzMTsOPwId1pjKS9/HxT+3UfoAs9n5qZ + XXi59GqZdnq19HJhdmbqeQjg+a63N50vt5NGDSQ8PicBOyiz4uxTuvxCCFl3p7c3+PDJ + 8+nI/OLyytvVd7TT6tuV5cX5yPTzJw+Dvd5ONwRtYb7uVLYYCu0h38EWRSBG6a6orPLC + FY8vMDganoosLL1eff/x02fa6dPH96uvlxYiU+HRwYDPc+VCZVkRSnhiVGgP5jtgJwR2 + eovNUd3QfsMfHAlNzMwvrbz79HltfYN2Wl/7/OndytL8zERoJOi/0d5Q7bBZ9MBOmJAd + V5gpy4FS4axp7PD2PRgNT88uArq1ja+bNNTXjTWAtzg7HR590OftaKxxQrHIkWUKuYl8 + xxVlygnDaXt5bXNnT//g2PiLheXVj2sbm1vb32mn7a3NjbWPq8sLL8bHBvt7Optry+2n + DYQ8U3QEO4mCMJAlrrqWbl9gODQRebny/sv65tb3HzTU963N9S/vV15GJkLDAV93S52r + hDQQCsnR7GCLAuwue3z3Hj6dnF1882Ft49v2j5//0k4/f2x/21j78GZxdvLpw3s+z2XE + zqjB7I7hhP/BDsfsr/RENWZxrditiVRrBd6j7NuLUduj4L3xvi8Aintj/E2278uT0jcZ + A58F7D/woHQWwGDiM6h9J23UzqDw2ef+A15qZ5/4zD3uZoHKmftJfNcTd6NF5a4H3c/i + O8a9y1RKd4z4bjvuBp/C3TbuqYhvG6HSU4F7eeLblaj18uAesvhWOSo9ZKhlFvcu7nZp + UuhdTMI9s3F9wVR6ZoEd7tXea0in2quNZwT2j0JQmRFAxsOzKbszOJRmU4Adilo8E7U7 + AUZhJioGD8/i/Ro8pDKLl4RnQONmXSnNgMbg4dnjvWHr488eJ0XhRSe38cw7zPlTmnmH + LtqdFwPQExX4rYXoawvHfWsBtSBH6Z3Ab3zsvm9y7Dc+og3c+G2Z2HM66FGUHR3vbZko + vV8I4S9Ye0TwL0wAE8AEMAFMABP4cwT+AyLrlvIKZW5kc3RyZWFtCmVuZG9iagoyNiAw + IG9iagoxNzkxCmVuZG9iagoyOSAwIG9iago8PCAvTGVuZ3RoIDMwIDAgUiAvVHlwZSAv + WE9iamVjdCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRoIDM0MCAvSGVpZ2h0IDEwMCAvQ29s + b3JTcGFjZQovRGV2aWNlR3JheSAvSW50ZXJwb2xhdGUgdHJ1ZSAvQml0c1BlckNvbXBv + bmVudCA4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae3d+1PSWRQAcE0U + eYMiKI+FvvgCQpakJaUWHBjL1B6WLT10LKxZXIytiYlZq8Vxi4kp01bHx5S5Ttqo62jD + mONUs//ani8SoQLeu7/uOb90qTv+8Jlz7/eL3XtOQQEGCqAACqAACqAAChRi5BWgyhD4 + SYe+RRHGHoFvNoeAioB2xxN+CodTjJFHgMMBJJb3INak6A5nCZdbuhM8jAyBFAqXWwLg + AHuAakq0uLgEOHl8vkAgEAqFIoxdAkACMHw+r7SUdc2vypIWwYoHUOAUisRiiVQqw9gn + IJVKxGIRyPKBdUc1xwaQJIUcZUVFYolMVlYul1dUKBRKjAwBhaKiQi4vL5PJJGIRqwq5 + ChtAdlQ2S9kkZUWl4KlQVlapVGqNRouRIaDRqFWqqkqlAlylSVVIVRY1ywtAkhQ2UoEQ + RAEUNLU6vf4wY8DYJcAc1ut1WpAFVlAVCthtNTtqIbuXcnmQpLJyRaUKPBlDTW1dvdFo + MpkxUgImk9FYX1dbY2DAVVWpKJdBqvK47JNqf6JCmgJpqUAkkcmVKq2eqa41mo5YrFab + zXYUIy0AHFar5YjJWFvN6LUqpVwmEUGmFnOyrH5IU3g88ZOkah1TU2+2WG2Nx35wNDVD + ODGSAqxFk+OHY402q8VcX8Po1ElUPjyosiRqIaRpKV8olskr1TpDnbnBZnc0OU+63C0e + j8eLkRIAjBa366SzyWG3NZjrDDp1pVwmFvJLIVH3Lv6dNBUAqVKtrzZabPbjTleLt/V0 + W3tH51mMtEBnR3vb6VZvi8t53G6zGKv1bKaKBdkSlTWFlS8FUl210droOOH2nDrTea7r + YvdlH0aGwOXui13nOs+c8rhPOBqtxmp2+UtFkKj7Fj8s/ZJSgbhModIZjA32Zpe3rePC + Jd+1nt6+m35/P0ZKwO+/2dfbc8136UJHm9fVbG8wGnQqRRmbqPsWf+EheI+CNK3UMnWW + xmZ3a/v57is9ff7bgV+Cg3dCGCmBO4PBXwK3/X09V7rPt7e6mxstdYy2EhIV3qf2bqjs + 0ofdVKHS15htDldrR5fv+o1bgWDo3v3wgwhGWuBB+P69UDBw68Z1X1dHq8thM9foVQp2 + R4XFv/urVNJUUq7UMvUN9hNeIO31BwbvhiNDjx5HhzHSAtHHj4Yi4buDAX8voHpP2Bvq + Ga2yXJLVtIQnlMqrdNVm23F323lfb/9AKBx5FB15EnsWx0gLPIs9GYk+ioRDA/29vvNt + 7uM2c7WuSi4V8kr25SmnhCdil36txe70dHZf9w/8Gh6K/hGLv3g59gojLTD28kU89kd0 + KPzrgP96d6fHabfUsotfxIOH1J61z+HyxWVKDVNvdfx46sKVGz+HwkPDT+Oj4xOT09Mz + GCmB6enJifHR+NPhoXDo5xtXLpz60WGtZzTKMjGfm8VUIIbt1GCyNbWcudRzKwiksedj + E1Ozr+fezmOkBN7OvZ6dmhh7HgPU4K2eS2dammwmA2yoYkEWU3jsy6u+qznSCEvf1xe4 + G/n96fPxyZk38wvvFpcwUgKL7xbm38xMjj9/+nvkbqDPB4u/8UjNd1VyePDvy1N4lZLI + 2e302MnWc1f9wfDDkfjY5OzcX4vvl1dWMVICK8vvF/+am50ci488DAf9V8+1njzGbqhy + 9sG/dz8FUymY1lkdrtNdPbdDkWhsdGJmbmFpZXVtfQMjJbC+trqytDA3MzEai0ZCt3u6 + Trsc1jowlWY1FUorVIfhEeVuu9gbuPfbSHx86g2Qrm18SGCkBT5srAHqm6nx+Mhv9wK9 + F9vc8JA6rKqQCrPlqVBWoWaM3ze1tHf3Ddx/+OTFn7Pzi8trG4nNj1sYKYGPm4mNteXF + +dk/Xzx5eH+gr7u9pel7I6OukOUwVWgYo63Z03H5ZjD8ODY6+Xrh/d/ric2tbYy0wNZm + Yv3v9wuvJ0djj8PBm5c7PM02I6NR5DaFVykw/ck/+CD67OXU3LvltQ9A+ukzRkrg0/bW + 5oe15XdzUy+fRR8M+n9iTU2GA007ff47keH4+PTbxZX1xEcg/YKREvj8aftjYn1l8e30 + eHw4cscPL1O5TOFXfaVCmUKTzNMspv9gJAW+5Dfd9b8nhUXF8HUfvkaZjzq9Z339IcjT + VzPzS6sbia3tz19Q9KvAl8/bW4mN1aX5mVeQp6F+31mv86gZvkjBF/7iIjT96kTzJ5rS + aJHNRVMyJ5pZaEqjRTYXTcmcaGahKY0W2Vw0JXOimYWmNFpkc9GUzIlmFprSaJHNRVMy + J5pZaEqjRTYXTcmcaGahKY0W2Vw0JXOimYWmNFpkc9GUzIlmFprSaJHNRVMyJ5pZaEqj + RTYXTcmcaGahKY0W2Vw0JXOimUVjimcmiGRpzkwUHGCKZ3voz/bsMsUzaLmP3P2HM2h4 + VjJ9KDLHgPasJJ7pPfDsMu2ZXjx7nj5hnntAd/Yc70gQ3AShvCOBd3kIbixR3eXh4J0z + kot1VHfOOFy8G0lwA5TubiTe4SW5qEx3hxfvmqfvk+cb0Nw1L8KaCOm6B/kGNDUR2Hoo + WLsjXaIj54CqdgfWmEnXkck3oKgxg7WQyMo90dRCwppdZGXJ6Gp2YW25jAJyeYY0teXY + Up1YAzFd6zDXgKIGYgHW6iSqR0pTqxNMsabswYVzaWvKYu3jdIHjPAOa2sdsomKN7gNr + kVPV6AZTdvVjLflddeOzfaCoJb+Dij0PMtobZB3S9DwowN4cGR04cg+penPsoGIPmX0t + Y/b9BXkPmYIkarIzD/Y62tXdaPcHql5HUL0z1UGKbXGGPbkyGnFlDCl7crElUZOqh7B3 + XJ6ucTv/RNw7LlloFnsc7mlquOcjdY/DpOpXWtDFyCXwTQpHKIACKIACKIAC/1+BfwFW + ye/8CmVuZHN0cmVhbQplbmRvYmoKMzAgMCBvYmoKMjE1OAplbmRvYmoKMzMgMCBvYmoK + PDwgL0xlbmd0aCAzNCAwIFIgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0ltYWdlIC9X + aWR0aCAzNDAgL0hlaWdodCA3MiAvQ29sb3JTcGFjZQovRGV2aWNlR3JheSAvSW50ZXJw + b2xhdGUgdHJ1ZSAvQml0c1BlckNvbXBvbmVudCA4IC9GaWx0ZXIgL0ZsYXRlRGVjb2Rl + ID4+CnN0cmVhbQp4Ae2c+1NSWxTHzVDkDYqgIBc8+Dog0rlihFbA4KCm3kqjqNRRqSYM + o5ooJrVsrCimTG86PibNLHs72thj6v5zdx3knlABOff+eNf3p03N+MNnvmvtffZea2Vl + oZAAEkACSAAJIAEksAeVlgArh8Bfyv6lvahtBH6xyQZUGaDd5Al/hcPJQaUhwOEAJBrv + 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 + b2JqCjM0IDAgb2JqCjE4NjIKZW5kb2JqCjM1IDAgb2JqCjw8IC9MZW5ndGggMzYgMCBS + IC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggMzE2IC9IZWlnaHQg + MTAwIC9Db2xvclNwYWNlCi9EZXZpY2VHcmF5IC9JbnRlcnBvbGF0ZSB0cnVlIC9CaXRz + UGVyQ29tcG9uZW50IDggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB7Z3r + T1NpEMZBCqX3FkoLvdh6yq2tpR6pVqjakjYoAl5Q3LoKQYvGssWuxsZG1C1htbFRBIVw + iSJLBAMsAdMgIWL2X9s5rQKV8sr54pczzyeSCR/OLzPvew7MPJOTg0ICSAAJIAEkgAR+ + PYFcVIoAK/LwG/u2lMdZbTHYB0j2gDDNDXjxePkoIMDjAQwG48/wpcilsRXw+YVpCTip + bw/P5xekAf6E3jdy+fkFgE0gFIpEIrFYLOGo4NEBgFAoKCxk+PGY5Ns19xh0eVCpAA6w + iSVSqUwuV3BYcrlMKpUAQSHgS9PbBV4KHeQcQ04ilSkURcVKZUmJSqXmpFSqkhKlsrhI + oZBJJQw9yD1IvezwmKxjko4hJwduKnVpmUaj1en0nJROp9VoykrVKuAnT9GD1GPgZblw + U+jgoBOJgRyAA2p6g9F4gDJxVNQBo9GgB4KAD+iJRcyxlx1eLnPW8QWQdIpiVakGuFGm + isqqarPZYrFyThaL2VxdVVlhooCfplRVrIDUE/CZG2Nn4kHaAbpCkUSmUKo1eiNVXmm2 + HLTZ7TRNH+ag4LHtdttBi7mynDLqNWqlQiaBzMvnZalaSDu4JoQpdFoDVVFttdnp2iNH + nXX1IBfHxDxznfPokVrabrNWV1AGbQqeEC6MLImXC2lXKBRLFcpSrcFUZa2hHc461wm3 + p8Hr9fo4J3joBo/7hKvO6aBrrFUmg7ZUqZCKhYWQeD8WbTrtRIBOrTWWm22045jL3eBr + PN3U3NJ6loNqbWluOt3oa3C7jjlom7ncyGSeVJQt8Rh2ULFyQGcoN9trncc93lNnWs+1 + XWy/7OekLrdfbDvXeuaU13PcWWs3lzNlK5dA4u0oWijZgkKRtEilMZjMNY56t6+p5cIl + /9WOzq4bgUA35xQI3Ojq7Ljqv3ShpcnnrnfUmE0GjaqISbwdRZu7D95PIO1K9VSVrbbe + 09h8vv1KR1fgVvCPUO+dMOd0pzf0R/BWoKvjSvv55kZPfa2titKXQuLBe8qPBx5TsnDa + qTTGCivtdDe2tPmvXb8ZDIXv3Y88iHJQDyL374VDwZvXr/nbWhrdTtpaYdSomBMPijbz + 0yLFTlas1lPVNY7jPkDXGQj23o1E+x4/ifVzULEnj/uikbu9wUAnwPMdd9RUU3p1sSwr + uwKBWK4sM5Rb6WOepvP+zu6ecCT6ODbwNP48wUE9jz8diD2ORsI93Z3+802eY7S13FCm + lIsFBTvyjlcgkDAlW2lzuLyt7dcCPX9G+mJ/xxMvXw295qCGXr1MxP+O9UX+7Alca2/1 + uhy2SqZoJQK4LH6oWR5fKC1S66hqu/PkqQtXrt8OR/r6nyUGh0dGx8cnOKfx8dGR4cHE + s/6+SPj29SsXTp102qspnbpIKuRnYSeSwnFnstB1DWcuddwMAbr4i6GRscm3U++nOaf3 + U28nx0aGXsQBXuhmx6UzDXW0xQQHnlSUhR1cs8qy/RUHa6Fk/V3Bu9G/nr0YHp14Nz3z + YXaOc5r9MDP9bmJ0+MWzv6J3g11+KNragxX7y5Rw0e7IO3hFkSmZ4+7IicZzvwdCkUcD + iaHRyal/Zj/OLyxyTgvzH2f/mZocHUoMPIqEAr+fazxxhDnwlMxF++N5B+zkwK7K7nSf + buu4FY7G4oMjE1MzcwuLS8srnNPy0uLC3MzUxMhgPBYN3+poO+122quAnTwrO7G8RHMA + rgpP08XO4L2HA4nhsXeAbmnlU5KD+rSyBPDejQ0nBh7eC3ZebPLAZXFAUyIXZ8s7saJE + S5kP1TU0t3f13H/09OWbyenZ+aWV5OrnNc7p82pyZWl+dnryzcunj+73dLU3N9QdMlPa + EsUu7FQ6ykzXe1su3whFnsQHR9/OfPx3Obm6ts5Bra0ml//9OPN2dDD+JBK6cbnFW0+b + KZ1qd3bwigLsfgv0Pog9fzU29WF+6ROg+7LBOX1ZX1v9tDT/YWrs1fPYg97Abww7i+mn + 7Fr9gTvR/sTw+PvZheXkZ0D3lXPa+LL+Obm8MPt+fDjRH70TgJeU3djBn6AKxQqVLpV3 + Wdj9xzF9JbPL+Kt7bl4+fM7CZ4X1sMt31t8dhrx7PTE9t7iSXFvf+MoxcvC4XzfW15Ir + i3PTE68h78Ld/rM+12ErfFjAB21+HrIjZQSyI9Ehx5AdmQ8piuxIdMgxZEfmQ4oiOxId + cgzZkfmQosiORIccQ3ZkPqQosiPRIceQHZkPKYrsSHTIMWRH5kOKIjsSHXIM2ZH5kKLI + jkSHHEN2ZD6kKLIj0SHHkB2ZDymK7Eh0yDFkR+ZDiiI7Eh1yDNmR+ZCibNjh/7YzSLL5 + 33bOT9hhT8XuPRUZ7LCXZwNaKlj38mAP2fd2ObY9ZNi7uNmjybZ3EXtmt/UGs+uZxV7t + bR3pLHu1cUZg2yQEqxkBHs6mbB/AYTWbwuPjTNS2yS92M1E4i7d94JDdLB7OgGZMurKZ + Ac3D2eOMCWs2s8eMXwDOvG8N97OaeUevhQxHCRZeC+jxkWljwsbjA71lMu1z2HnLoKdR + pnUTG08jxsINvbQ2XcNYeGnloIdbhk8dGw83YIfegVsGiWy9A9Gzcrs1JxvPSibx0Ct1 + 0xOWlVcqsGOqFj16Nx2JWXj0puGhN/R3I2w23tA56Eme4b3OypM8DQ+98LfM//fuhZ+T + gpfaJIA7GGDvBKsdDODq9m2DBbMyBXd/pLZ/7HX3B2OJl6K3D3fObO7b2fPOmZShIO46 + Sq93Ypb0fNPedh2l6H1HCL+C2iKCPyEBJIAEkAASQAK/jsD/PYfo4AplbmRzdHJlYW0K + ZW5kb2JqCjM2IDAgb2JqCjIwODUKZW5kb2JqCjI3IDAgb2JqCjw8IC9MZW5ndGggMjgg + MCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggMjI0IC9IZWln + aHQgMTE2IC9Db2xvclNwYWNlCi9EZXZpY2VHcmF5IC9JbnRlcnBvbGF0ZSB0cnVlIC9C + aXRzUGVyQ29tcG9uZW50IDggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB + 7ZzpTxNbGMZZCqV7C6WFLrZMgdKWUkeKBaq2pA1QFhcQrQsEKBqLhQqxsRHUEoSGBhEU + whKoSAQDSIA0SIia+6/dd4r3GmGQexODw+Q8n8h8mfM7z/ucmTLnvAkJSGgG0AygGUAz + 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 + idb9heOE/2AC6enQj1Gjv9AMoBlAM4Bm4PfMwN+IzvBHCmVuZHN0cmVhbQplbmRvYmoK + MjggMCBvYmoKMTg3MQplbmRvYmoKMzEgMCBvYmoKPDwgL0xlbmd0aCAzMiAwIFIgL1R5 + cGUgL1hPYmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCAzMTYgL0hlaWdodCAxMDIg + L0NvbG9yU3BhY2UKL0RldmljZUdyYXkgL0ludGVycG9sYXRlIHRydWUgL0JpdHNQZXJD + b21wb25lbnQgOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHtnetPU2kQ + xkEKpfcWSgu92HrKra2lHqlWqNqSNigCXlDcuisELRrLFrsaGxtRt4TVxkYRFMIlikgE + AywB0yAhYvZf2zmtApXyyvmyH/bM84lkwofzy8z7ngMzz+TkoJAAEkACSAAJIIH/nkAu + KkWAFXn4jX1byuOsthjsAyR7QJjmBrx4vHwUEODxAAaD8Wf4UuTS2Ar4/MK0BJzUt4fn + 8wvSAH9C7xu5/PwCwCYQCkUikVgslnBU8OgAQCgUFBYy/HhM8u2aewy6PKhUAAfYxBKp + VCaXKzgsuVwmlUqAoBDwpentAi+FDnKOISeRyhSKomKlsqREpVJzUipVSYlSWVykUMik + EoYe5B6kXnZ4TNYxSceQkwM3lbq0TKPR6nR6Tkqn02o0ZaVqFfCTp+hB6jHwsly4KXRw + 0InEQA7AATW9wWg8QJk4KuqA0WjQA0HAB/TEIubYyw4vlznr+AJIOkWxqlQD3ChTRWVV + tdlssVg5J4vFbK6uqqwwUcBPU6oqVkDqCfjMjbEz8SDtAF2hSCJTKNUavZEqrzRbDtrs + dpqmD3NQ8Nh2u+2gxVxZThn1GrVSIZNA5uXzslQtpB1cE8IUOq2Bqqi22ux07ZGjzrp6 + kItjYp65znn0SC1tt1mrKyiDNgVPCBdGlsTLhbQrFIqlCmWp1mCqstbQDmed64Tb0+D1 + en2cEzx0g8d9wlXndNA11iqTQVuqVEjFwkJIvB+LNp12IkCn1hrLzTbacczlbvA1nm5q + bmk9y0G1tjQ3nW70Nbhdxxy0zVxuZDJPKsqWeAw7qFg5oDOUm+21zuMe76kzrefaLrZf + 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 + tXb79j21lWVgIeottrcQ+iGRZgAfmZ8oZYCzwB2Wr9g+ATxYDqwa8COiAw+auTDT0Zx0 + pbItkVPmoigqr2I7Sa77+bnGvou1iYP+XI9m1o69s+qq0UzUtPdEobwPrkQZz19U9mw1 + FKcN45xIQxop8q7V3ytMxxGRKxBKBlI1ZLmfak6ddeB1GLtdupPj+PYQpT7JYKiJtemy + mR2FfQB2KsvsEPAF6PGyYg/ngXth/1tRw5PAJ2E/ZId51q0f9heuU+B7hD014M4UrsXx + 2oofXi0BQ/dUI2iMc03E09c5c6SI7zHUGZj3RjmmCzF3lqoTN4A7YR9ZqmYKsV37ruol + 7nsCd9PjO9GbOQtcoBxJcrEV2RTQPAlYFH2LsEkOPD7OHlXgd6iYwBy5idzNKPce1REb + Z6NSgVZ6jVfGT+O58cX4ZWwYz4B+rHbXe3z/6eMVdde2Pjz5jXrcOa69nRtVYVZxZQvd + /8cyhI/ZJzmmwdOhWVhr2HbkD5rMTLAMKMR/BT6X+pITVdzV7u24RRLMUD4sbCW6S1Ru + KdTqPYNKrBwr2AB2cJLELFocuFNrujl4d9giem35TVey64b++vZ6+9ryHm3KqCkoE82z + RGaUsVuj5N142/1mkRGfODq+572KWsn+SUUQP4U5WiryFFX0VlDWxG9nDn4btn5cP6Xn + 9UH9PAk9rZ/Rr+ijEb4MdEnPwnNRH6NJ8LBpIeISoIqDM9ROVGONA+Ip8fK0W2SR/Q9A + Gf1mCmVuZHN0cmVhbQplbmRvYmoKMzggMCBvYmoKNzA0CmVuZG9iagoyMSAwIG9iagpb + IC9JQ0NCYXNlZCAzNyAwIFIgXQplbmRvYmoKMzkgMCBvYmoKPDwgL0xlbmd0aCA0MCAw + IFIgL04gMyAvQWx0ZXJuYXRlIC9EZXZpY2VSR0IgL0ZpbHRlciAvRmxhdGVEZWNvZGUg + Pj4Kc3RyZWFtCngBhVTPaxNBFP42bqnQIghaaw6yeJAiSVmraEXUNv0RYmsM2x+2RZBk + M0nWbjbr7ia1pYjk4tEq3kXtoQf/gB568GQvSoVaRSjeqyhioRct8c1uTLal6sDOfvPe + N+99b3bfAA1y0jT1gATkDcdSohFpbHxCavyIAI6iCUE0JVXb7E4kBkGDc/l759h6D4Fb + VsN7+3eyd62a0raaB4T9QOBHmtkqsO8XcQpZEgKIPN+hKcd0CN/j2PLsjzlOeXjBtQ8r + PcRZInxANS3Of024U80l00CDSDiU9XFSPpzXi5TXHQdpbmbGyBC9T5Cmu8zuq2KhnE72 + DpC9nfR+TrPePsIhwgsZrT9GuI2e9YzVP+Jh4aTmxIY9HBg19PhgFbcaqfg1whRfEE0n + olRx2S4N8Ziu/VbySoJwkDjKZGGAc1pIT9dMbvi6hwV9JtcTr+J3VlHheY8TZ97U3e9F + 2gKvMA4dDBoMmg1IUBBFBGGYsFBAhjwaMTSycj8jqwYbk3sydSRqu3RiRLFBezbcPbdR + pN08/igicZRDtQiS/EH+Kq/JT+V5+ctcsNhW95Stm5q68uA7xeWZuRoe19PI43NNXnyV + 1HaTV0eWrHl6vJrsGj/sV5cx5oI1j8RzsPvxLV+VzJcpjBTF41Xz6kuEdVoxN9+fbH87 + PeIuzy611nOtiYs3VpuXZ/1qSPvuqryT5lX5T1718fxnzcRj4ikxJnaK5yGJl8Uu8ZLY + S6sL4mBtxwidlYYp0m2R+iTVYGCavPUvXT9beL1Gfwz1UZQZzNJUifd/wipkNJ25Dm/6 + j9vH/Bfk94rnnygCL2zgyJm6bVNx7xChZaVuc64CF7/RffC2bmujfjj8BFg8qxatUjWf + ILwBHHaHeh7oKZjTlpbNOVKHLJ+TuunKYlLMUNtDUlLXJddlSxazmVVi6XbYmdMdbhyh + OUL3xKdKZZP6r/ERsP2wUvn5rFLZfk4a1oGX+m/AvP1FCmVuZHN0cmVhbQplbmRvYmoK + NDAgMCBvYmoKNzM3CmVuZG9iago4IDAgb2JqClsgL0lDQ0Jhc2VkIDM5IDAgUiBdCmVu + ZG9iago0MSAwIG9iago8PCAvTGVuZ3RoIDQyIDAgUiAvTiAzIC9BbHRlcm5hdGUgL0Rl + dmljZVJHQiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHVWGVUVV23Xnuf + 5ATdeejuBuku6RTpLmkRMEBCQlFKSlFAEVBElBCVEkRCEFDBBlEBRUWQkJC78R36veOO + e//dP3eNsdd5zlzzrL3Oftbac84HANYiz/DwEJgWgNCw6EgbI12Kk7MLBfcS4AAPIAEJ + wOfpHRWuY2VlDv7XtvoMQLuD45K7c/2vbv/zAJ2Pb5Q3AJAVMuzlE+UdiuBbCF70Do+M + BgCuQvDjg9HhCEYhF2CMRBaI4BO72P8fXLaLvf7BDb997Gz0EJ8eAPAkT89IfwCIjxE7 + JdbbH5mDuAgAlj7MJzAMAHo0gjW9Azx9AGDVR3wkQkMP7OJwBIt4/Wse/39hT0+vv3N6 + evr/xf/8F+SXyI31A6PCQzwP/f7yf9mFhsQgz+t3o0d6UljI3l1u8Mg15+Opb/YHh4f8 + 5uy33TfM3vaPPcxrr+Uf7BdpaPMHh0fr/gtb2f2xxwfo7f2DfaMM/s4T5Glq9cceGWNj + /wdHxdoa/MHxAXaOf7CPr/5fu1+gockfe2C0yd97BR8w+7sGEAgsgCfwjvaN2+Ud6B0I + PxQZ6B8QTdFBdpmvBMUkzFtKgiInIyu7O/z/pu2er38Wu2zz+9xAzCP/sUUhz1RtCDkD + Y/+xeSQC0OqKbHHl/9j4CQj1kwDc4/eOiYz9Zz5kKwOAAQRAAxgBG+AG/EAESAI5oATU + gTYwAKbAEtgBZ+AGvEEACAWR4CBIBEkgDWSB06AAlIByUAmugGugEbSAu6ALPACD4DF4 + Cl6CKfABfAaLYBVsQhCEg8gQA8QG8UCCkDgkB6lAmpABZA7ZQM6QB+QPhUExUCJ0HMqC + cqES6CJUA92AbkNdUD80Cj2HpqF5aAnagFEwCWaEuWAhWBpWgXVgM9gO3g/7wxFwPJwC + n4KL4Ar4KtwMd8GD8FN4Cv4Mr6AAiohiRvGiJFEqKD2UJcoF5YeKRB1BZaIKURWoelQb + qg81jppCLaB+orFoBjQFLYlWRxuj7dHe6Aj0EXQ2ugR9Bd2M7kGPo6fRi+hfGDKGEyOO + UcOYYJww/piDmDRMIeYypgnTi3mK+YBZxWKxzFhhrDLWGOuMDcImYLOx57DXsZ3YUewM + dgWHw7HhxHEaOEucJy4al4Yrxl3FdeDGcB9w63gingcvhzfEu+DD8Mn4Qnwtvh0/hp/F + b1LRUglSqVFZUvlQHaLKoaqiaqMaofpAtUmgIwgTNAh2hCBCEqGIUE/oJbwiLBOJRD6i + KtGaGEg8RiwiNhAfEqeJP0n0JDGSHsmVFEM6RaomdZKek5bJZLIQWZvsQo4mnyLXkO+T + 35DXqRmopahNqH2oj1KXUjdTj1F/paGiEaTRoXGjiacppLlJM0KzQEtFK0SrR+tJe4S2 + lPY27QTtCh0DnSydJV0oXTZdLV0/3Rw9jl6I3oDehz6FvpL+Pv0MA4qBn0GPwZvhOEMV + Qy/DB0YsozCjCWMQYxbjNcZhxkUmeiYFJgemOKZSpntMU8woZiFmE+YQ5hzmRuZnzBss + XCw6LL4sGSz1LGMsa6wcrNqsvqyZrNdZn7JusFHYDNiC2c6wtbC9Zkezi7Fbsx9kP8/e + y77AwcihzuHNkcnRyPGCE+YU47ThTOCs5BziXOHi5jLiCucq5rrPtcDNzK3NHcSdz93O + Pc/DwKPJE8iTz9PB84nCRNGhhFCKKD2URV5OXmPeGN6LvMO8m3zCfPZ8yXzX+V7zE/hV + +P348/m7+RcFeAQsBBIF6gReCFIJqggGCJ4V7BNcExIWchRKF2oRmhNmFTYRjheuE34l + QhbREokQqRB5IooVVRENFj0n+lgMFlMUCxArFRsRh8WVxAPFz4mPSmAkVCXCJCokJiRJ + kjqSsZJ1ktNSzFLmUslSLVJfpQWkXaTPSPdJ/5JRlAmRqZJ5KUsvayqbLNsmuyQnJuct + Vyr3RJ4sbyh/VL5V/ruCuIKvwnmFSUUGRQvFdMVuxW0lZaVIpXqleWUBZQ/lMuUJFUYV + K5VslYeqGFVd1aOqd1V/qimpRas1qn1Tl1QPVq9Vn9sjvMd3T9WeGQ0+DU+NixpTmhRN + D80LmlNavFqeWhVa77T5tX20L2vP6ojqBOlc1fmqK6Mbqduku6anpndYr1MfpW+kn6k/ + bEBvYG9QYvDGkM/Q37DOcNFI0SjBqNMYY2xmfMZ4woTLxNukxmTRVNn0sGmPGcnM1qzE + 7J25mHmkeZsFbGFqkWfxaq/g3rC9LZbA0sQyz/K1lbBVhNUda6y1lXWp9UcbWZtEmz5b + Blt321rbVTtduxy7l/Yi9jH23Q40Dq4ONQ5rjvqOuY5TTtJOh50GndmdA51bXXAuDi6X + XVb2Gewr2PfBVdE1zfXZfuH9cfv73djdQtzuudO4e7rf9MB4OHrUemx5WnpWeK54mXiV + eS1663mf9f7so+2T7zPvq+Gb6zvrp+GX6zfnr+Gf5z8foBVQGLAQqBdYEvg9yDioPGgt + 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 + yZHCKc35kiudW5H7PU8hxYwX5r3LF8evzP9ToB05/+bCTEh9XykaKCYttireIZEp6Sgl + LLUhPSJzWfaYnJu8poKAIq0SSmlTeUNlSw1WJ+5h1RDWVNOy0g7USdWt0uvVnzXEG4kZ + m5mEmp42azGf2kuyVLcKta6weWHHZG/rkO/4zJnVZd++867v3ETcwz3uehG8XX0a/PD+ + XgEdQTzBSSHvw4wPXI2gjTwY9TbGNLY1TvTQuQTGxFNHiEezkqiT81O4UmvTVU8MZLpn + rZ48kyN1eiQ3Kp+9oOdsRDFvydOyrPP6F6CLXZWpl8yrWa68r22+mlnv1aDRyHlzu2mm + Zeh2251r96o7rnTduN/RO9o3N4Aa4h3Wexw4lvek89n354IvXV5nvW2enpz58ZE8J/RJ + Z8H9a9LipaVHP9bXhH46bWZv9+zyH+UnL7cbPQBE0kXkxzc7O8tCAOByAdh9P2xW7Oxs + VyLFxisAOkP+0dZ3nbG0AJQhcQaAB/Ezx3Y//93+Cw9iRH4KZW5kc3RyZWFtCmVuZG9i + ago0MiAwIG9iago1NzA4CmVuZG9iagoyNCAwIG9iagpbIC9JQ0NCYXNlZCA0MSAwIFIg + XQplbmRvYmoKNCAwIG9iago8PCAvVHlwZSAvUGFnZXMgL01lZGlhQm94IFswIDAgNjEy + IDc5Ml0gL0NvdW50IDEgL0tpZHMgWyAzIDAgUiBdID4+CmVuZG9iago0MyAwIG9iago8 + PCAvVHlwZSAvQ2F0YWxvZyAvT3V0bGluZXMgMiAwIFIgL1BhZ2VzIDQgMCBSIC9WZXJz + aW9uIC8xLjQgPj4KZW5kb2JqCjIgMCBvYmoKPDwgL0xhc3QgNDQgMCBSIC9GaXJzdCA0 + NSAwIFIgPj4KZW5kb2JqCjQ1IDAgb2JqCjw8IC9QYXJlbnQgNDYgMCBSIC9Db3VudCAw + IC9EZXN0IFsgMyAwIFIgL1hZWiAwIDgxOCAwIF0gL1RpdGxlIChDYW52YXMgMSkKPj4K + ZW5kb2JqCjQ2IDAgb2JqCjw8ID4+CmVuZG9iago0NCAwIG9iago8PCAvUGFyZW50IDQ2 + IDAgUiAvQ291bnQgMCAvRGVzdCBbIDMgMCBSIC9YWVogMCA4MTggMCBdIC9UaXRsZSAo + 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 + zWsnHfvEKbwk9p9r6sLQXRPXVp3C2C1sbnTlaR5A/U6pyypI+9k8O8ZvTV1p8yDTSQge + T1Rfza6JK0zd8715CwWbKFz79/BeLQyF4IEd/HK5RpJrTqPljF2pbFQsVi6y+20N+W/T + MmuOTaVgDIWMweLxZEgZT57S40nXK2xWQ1OOVO+VNrksRSqwNqV7oanQ7C3a+6VjjOPm + mwrLWjEIp5xk4qTmJAbn0pJbum4hkyFZDE0uMSD7yqcHZGGz6jMlDlsuxuNueXbFD1Z2 + 5+UlkseWLo2//SohusQfJebizV3LCwqSR9pW/u1aInkZLxk7l9qqyspKzOb5RQH/4IF3 + H3+p0jZ3rrvUYJyTt6Jl+49PvvtTGjcCAX3yz9SdbA/u0yVHNZ50TuXRPkM2A0M6eYMU + OiVEYsKlSZeMM3I3/BDXyRQj6jF7SFieU9VnJ6rHq4X1+UuT+BISr8FwjAe4+I5Qrndo + MwXfqtRLJXjYaPUHiWVkJOemNKt678tLSujeV0hJ4rVXJo4vtBPyJittKl1LHRL8PXme + acPYYcb77qV8kcJgMRQY5hjapRGpxCJVgMSgTlOwzkylJU3htpiUllnEZzJnzfoyeAj7 + MqOqaeKUiHlVVU11jXAEEq3o7HgCTp4NUuF4EExzkccM7i0/9OE1buICYzMsHFj5ycpi + cpGpm9jUVdzaz6+jVlx9fpgt01V7fh56lnrQinaKT1K4tf6qJx0LacjEs60cb/sXQQPe + cbdAK96bt8NNeNstoJ+BJDwS/G8CtLfWNq1YVNgQ2dAf2bquO+yt27RhjdDqi8ePmWak + EFIf0iDSA0iPIkWRjiO9hvQh0l9THYkGuS05+WA5TOUJRpPpcukMee4MuXmG3DpDRmOn + jS/icp2+jTPqN82Q+2bIW2bIt82Qxf83Xzf+7UL9/wHi4Hy0CmVuZHN0cmVhbQplbmRv + YmoKNDggMCBvYmoKNDk0MgplbmRvYmoKNDkgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNj + cmlwdG9yIC9Bc2NlbnQgNzcwIC9DYXBIZWlnaHQgNzIwIC9EZXNjZW50IC0yMzAgL0Zs + YWdzIDMyCi9Gb250QkJveCBbLTEwMTggLTQ4MSAxNDM2IDExNTldIC9Gb250TmFtZSAv + VlNBTVFHK0hlbHZldGljYS1Cb2xkIC9JdGFsaWNBbmdsZQowIC9TdGVtViAwIC9NYXhX + aWR0aCAxNTAwIC9YSGVpZ2h0IDY0NCAvRm9udEZpbGUyIDQ3IDAgUiA+PgplbmRvYmoK + NTAgMCBvYmoKWyAyNzggMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA1NTYg + MCAwIDAgMCAwIDAgMCAwIDMzMyAwIDAgMCAwIDAgMAowIDAgMCAwIDAgMCAwIDAgMCAw + IDAgMCAwIDAgMCA2NjcgMCAwIDY2NyAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg + MCAwCjYxMSA1NTYgMCAwIDAgMCAwIDAgMCAwIDYxMSA2MTEgNjExIDAgMzg5IDU1NiAz + MzMgNjExIF0KZW5kb2JqCjIzIDAgb2JqCjw8IC9UeXBlIC9Gb250IC9TdWJ0eXBlIC9U + cnVlVHlwZSAvQmFzZUZvbnQgL1ZTQU1RRytIZWx2ZXRpY2EtQm9sZCAvRm9udERlc2Ny + aXB0b3IKNDkgMCBSIC9XaWR0aHMgNTAgMCBSIC9GaXJzdENoYXIgMzIgL0xhc3RDaGFy + IDExNyAvRW5jb2RpbmcgL01hY1JvbWFuRW5jb2RpbmcKPj4KZW5kb2JqCjUxIDAgb2Jq + Cjw8IC9MZW5ndGggNTIgMCBSIC9MZW5ndGgxIDEwMDg4IC9GaWx0ZXIgL0ZsYXRlRGVj + b2RlID4+CnN0cmVhbQp4Ab1aC3STVbbe538nadMkzbtJk5Amafp+0BctNJS2lEdraXm0 + SKEtFFoEQSxVdOBWhQGqoog89TqiDhQQCaVCAOUyXBR1nBEdxcc4zjiiw8y1y7lz1VGh + yd3nT6nQNeNizXLN/+c89nnu85199j7n/OlcsbINYqEbWKid3bJ8IciP5zQA6Z2/tGV5 + lI6XMHx9flenM0rzyQDskoXLFy2N0tKjAEr7oiWrhurrMVlb297WsiCaD1cwzG/HhChN + RmOY1L60884orevHcPqSZfOH8uPfRjptacudQ/3Dh0g7b21Z2hYt73kcw6Tly27vHKJr + MZy6fEXbUHnSgPy9AQRTDbAMFHALiMCABt8mAPGS0g4c5tJ8fBakqbbMiyv5CrR0mADz + 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 + YB0YjhPcfV9Pl4ygx42gKZfX1m8dQc8fQS8YQcs4XtP/whH5yPN17XeMoOX/qF1T/9YR + +ctG0MtH0CtG0LePoOX/oF3T/soR+aso/f/NSSmdCmVuZHN0cmVhbQplbmRvYmoKNTIg + MCBvYmoKNjQ0MgplbmRvYmoKNTMgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9y + IC9Bc2NlbnQgNzcwIC9DYXBIZWlnaHQgNzE3IC9EZXNjZW50IC0yMzAgL0ZsYWdzIDMy + Ci9Gb250QkJveCBbLTk1MSAtNDgxIDE0NDUgMTEyMl0gL0ZvbnROYW1lIC9HVUxOWFQr + SGVsdmV0aWNhIC9JdGFsaWNBbmdsZSAwCi9TdGVtViAwIC9NYXhXaWR0aCAxNTAwIC9Y + SGVpZ2h0IDYzNyAvRm9udEZpbGUyIDUxIDAgUiA+PgplbmRvYmoKNTQgMCBvYmoKWyAy + NzggMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg + MCAwIDAgNTg0IDAgNTg0IDAgMAowIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw + IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNTU2IDU1NiA1MDAKNTU2IDU1 + NiAyNzggMCA1NTYgMjIyIDAgMCAwIDgzMyA1NTYgNTU2IDU1NiAwIDMzMyA1MDAgMjc4 + IDU1NiAwIDAgMCA1MDAgXQplbmRvYmoKMjIgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL1N1 + YnR5cGUgL1RydWVUeXBlIC9CYXNlRm9udCAvR1VMTlhUK0hlbHZldGljYSAvRm9udERl + c2NyaXB0b3IKNTMgMCBSIC9XaWR0aHMgNTQgMCBSIC9GaXJzdENoYXIgMzIgL0xhc3RD + aGFyIDEyMSAvRW5jb2RpbmcgL01hY1JvbWFuRW5jb2RpbmcKPj4KZW5kb2JqCjU1IDAg + b2JqCihNYWMgT1MgWCAxMC42LjggUXVhcnR6IFBERkNvbnRleHQpCmVuZG9iago1NiAw + IG9iagooRDoyMDExMDkxMjE3MzkyNVowMCcwMCcpCmVuZG9iagoxIDAgb2JqCjw8IC9Q + cm9kdWNlciA1NSAwIFIgL0NyZWF0aW9uRGF0ZSA1NiAwIFIgL01vZERhdGUgNTYgMCBS + ID4+CmVuZG9iagp4cmVmCjAgNTcKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDM5ODY5 + IDAwMDAwIG4gCjAwMDAwMjY2NDEgMDAwMDAgbiAKMDAwMDAwMTU1NSAwMDAwMCBuIAow + MDAwMDI2NDc4IDAwMDAwIG4gCjAwMDAwMDAwMjIgMDAwMDAgbiAKMDAwMDAwMTUzNSAw + MDAwMCBuIAowMDAwMDAxNjU5IDAwMDAwIG4gCjAwMDAwMjA1NzMgMDAwMDAgbiAKMDAw + MDAwNTAzOCAwMDAwMCBuIAowMDAwMDA1Njk1IDAwMDAwIG4gCjAwMDAwMDM3NjggMDAw + MDAgbiAKMDAwMDAwNDQzNCAwMDAwMCBuIAowMDAwMDAxODkzIDAwMDAwIG4gCjAwMDAw + MDI0MzQgMDAwMDAgbiAKMDAwMDAwMjQ1NCAwMDAwMCBuIAowMDAwMDAzMDM5IDAwMDAw + IG4gCjAwMDAwMDMwNTkgMDAwMDAgbiAKMDAwMDAwMzc0OCAwMDAwMCBuIAowMDAwMDA0 + NDU0IDAwMDAwIG4gCjAwMDAwMDUwMTggMDAwMDAgbiAKMDAwMDAxOTY3NiAwMDAwMCBu + IAowMDAwMDM5NjAwIDAwMDAwIG4gCjAwMDAwMzI0MDEgMDAwMDAgbiAKMDAwMDAyNjQ0 + MSAwMDAwMCBuIAowMDAwMDA1NzE1IDAwMDAwIG4gCjAwMDAwMDc2OTcgMDAwMDAgbiAK + MDAwMDAxNDQ2MSAwMDAwMCBuIAowMDAwMDE2NTI0IDAwMDAwIG4gCjAwMDAwMDc3MTgg + MDAwMDAgbiAKMDAwMDAxMDA2OCAwMDAwMCBuIAowMDAwMDE2NTQ1IDAwMDAwIG4gCjAw + MDAwMTg4MjcgMDAwMDAgbiAKMDAwMDAxMDA4OSAwMDAwMCBuIAowMDAwMDEyMTQyIDAw + MDAwIG4gCjAwMDAwMTIxNjMgMDAwMDAgbiAKMDAwMDAxNDQ0MCAwMDAwMCBuIAowMDAw + MDE4ODQ4IDAwMDAwIG4gCjAwMDAwMTk2NTYgMDAwMDAgbiAKMDAwMDAxOTcxMyAwMDAw + MCBuIAowMDAwMDIwNTUzIDAwMDAwIG4gCjAwMDAwMjA2MDkgMDAwMDAgbiAKMDAwMDAy + NjQyMCAwMDAwMCBuIAowMDAwMDI2NTYxIDAwMDAwIG4gCjAwMDAwMjY4MDQgMDAwMDAg + biAKMDAwMDAyNjY4OSAwMDAwMCBuIAowMDAwMDI2NzgyIDAwMDAwIG4gCjAwMDAwMjY4 + OTcgMDAwMDAgbiAKMDAwMDAzMTkyOSAwMDAwMCBuIAowMDAwMDMxOTUwIDAwMDAwIG4g + CjAwMDAwMzIxODEgMDAwMDAgbiAKMDAwMDAzMjU4MSAwMDAwMCBuIAowMDAwMDM5MTE0 + IDAwMDAwIG4gCjAwMDAwMzkxMzUgMDAwMDAgbiAKMDAwMDAzOTM2MCAwMDAwMCBuIAow + MDAwMDM5Nzc1IDAwMDAwIG4gCjAwMDAwMzk4MjcgMDAwMDAgbiAKdHJhaWxlcgo8PCAv + U2l6ZSA1NyAvUm9vdCA0MyAwIFIgL0luZm8gMSAwIFIgL0lEIFsgPGY1OTk0NjNhNDBh + MjI0MzM4YmM1MmRlOTJjNjc4MTQ4Pgo8ZjU5OTQ2M2E0MGEyMjQzMzhiYzUyZGU5MmM2 + NzgxNDg+IF0gPj4Kc3RhcnR4cmVmCjM5OTQ0CiUlRU9GCjEgMCBvYmoKPDwvQXV0aG9y + IChHdXN0YWYgQS4gTmV1bWFubikvQ3JlYXRpb25EYXRlIChEOjIwMDkxMjI5MTUwNjAw + WikvQ3JlYXRvciAoT21uaUdyYWZmbGUgUHJvZmVzc2lvbmFsIDUuMi4zKS9Nb2REYXRl + IChEOjIwMTEwOTEyMTczOTAwWikvUHJvZHVjZXIgNTUgMCBSIC9UaXRsZSAocGVyc29u + LXN0dWRlbnQuZ3JhZmZsZSk+PgplbmRvYmoKeHJlZgoxIDEKMDAwMDA0MTI0MiAwMDAw + MCBuIAp0cmFpbGVyCjw8L0lEIFs8ZjU5OTQ2M2E0MGEyMjQzMzhiYzUyZGU5MmM2Nzgx + NDg+IDxmNTk5NDYzYTQwYTIyNDMzOGJjNTJkZTkyYzY3ODE0OD5dIC9JbmZvIDEgMCBS + IC9QcmV2IDM5OTQ0IC9Sb290IDQzIDAgUiAvU2l6ZSA1Nz4+CnN0YXJ0eHJlZgo0MTQz + OQolJUVPRgo= + + QuickLookThumbnail + + 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 + bW9kAAAYcAAAAChiVFJDAAADxAAACAxnVFJDAAADxAAACAxhYWJnAAAL0AAAACBhYWdn + AAAL0AAAACBkZXNjAAAAAAAAAAhEaXNwbGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAbWx1YwAAAAAAAAASAAAADG5sTkwAAAAIAAAA6GRhREsAAAAIAAAA6HBsUEwA + AAAIAAAA6GVuVVMAAAAIAAAA6G5iTk8AAAAIAAAA6GZyRlIAAAAIAAAA6HB0QlIAAAAI + AAAA6HB0UFQAAAAIAAAA6HpoQ04AAAAIAAAA6GVzRVMAAAAIAAAA6GphSlAAAAAIAAAA + 6HJ1UlUAAAAIAAAA6HN2U0UAAAAIAAAA6HpoVFcAAAAIAAAA6GRlREUAAAAIAAAA6GZp + RkkAAAAIAAAA6Gl0SVQAAAAIAAAA6GtvS1IAAAAIAAAA6ABpAE0AYQBjdGV4dAAAAABD + b3B5cmlnaHQgQXBwbGUsIEluYy4sIDIwMTEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAA + AAAAAADzUgABAAAAARbPWFlaIAAAAAAAAHNQAAA6zAAAAdJYWVogAAAAAAAAYHwAALhc + AAAUN1hZWiAAAAAAAAAjCgAADNgAAL0jY3VydgAAAAAAAAQAAAAABQAKAA8AFAAZAB4A + IwAoAC0AMgA2ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCf + AKMAqACtALIAtwC8AMEAxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUB + KwEyATgBPgFFAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHh + AekB8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLBAssC + 1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oDxwPTA+AD7AP5 + BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgEtgTEBNME4QTwBP4FDQUcBSsFOgVJBVgF + ZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgGWQZqBnsGjAadBq8GwAbRBuMG9QcH + BxkHKwc9B08HYQd0B4YHmQesB78H0gflB/gICwgfCDIIRghaCG4IggiWCKoIvgjSCOcI + +wkQCSUJOglPCWQJeQmPCaQJugnPCeUJ+woRCicKPQpUCmoKgQqYCq4KxQrcCvMLCwsi + CzkLUQtpC4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUANWg10DY4N + qQ3DDd4N+A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P7BAJECYQQxBh + EH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMTIxNDE2MT + gxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYDFiYWSRZsFo8WshbW + FvoXHRdBF2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlrGZEZtxndGgQaKhpRGnca + nhrFGuwbFBs7G2MbihuyG9ocAhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6U + Hr4e6R8THz4faR+UH78f6iAVIEEgbCCYIMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0j + CiM4I2YjlCPCI/AkHyRNJHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm6CcYJ0kneier + J9woDSg/KHEooijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvRLAUsOSxuLKIs + 1y0MLUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIxSjGCMbox8jIq + MmMymzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbpNyQ3YDecN9c4 + FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8ZTykPOM9Ij1hPaE94D4g + PmA+oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpBrEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpE + zkUSRVVFmkXeRiJGZ0arRvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0ua + S+JMKkxyTLpNAk1KTZNN3E4lTm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGbUeZSMVJ8UsdT + E1NfU6pT9lRCVI9U21UoVXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqm + WvVbRVuVW+VcNVyGXNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg/GFPYaJh9WJJYpxi + 8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo7GlDaZpp8WpIap9q92tP + a6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfByS3KmcwFzXXO4dBR0 + cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8IXyBfOF9QX2h + fgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuH + n4gEiGmIzokziZmJ/opkisqLMIuWi/yMY4zKjTGNmI3/jmaOzo82j56QBpBukNaRP5Go + khGSepLjk02TtpQglIqU9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByc + iZz3nWSd0p5Anq6fHZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTilqaYapoum/adu + p+CoUqjEqTepqaocqo+rAqt1q+msXKzQrUStuK4trqGvFq+LsACwdbDqsWCx1rJLssKz + OLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9Fb2Pvgq+hL7/ + v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZGxsPHQce/yD3IvMk6ybnKOMq3yzbL + tsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHTRNPG1EnUy9VO1dHWVdbY11zX4Nhk + 2OjZbNnx2nba+9uA3AXcit0Q3ZbeHN6i3ynfr+A24L3hROHM4lPi2+Nj4+vkc+T85YTm + DeaW5x/nqegy6LzpRunQ6lvq5etw6/vshu0R7ZzuKO6070DvzPBY8OXxcvH/8ozzGfOn + 9DT0wvVQ9d72bfb794r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t//9wYXJhAAAA + AAADAAAAAmZmAADypwAADVkAABPQAAAKDnZjZ3QAAAAAAAAAAAADAQAAAgAAABEATwDA + AUsB7wKVA1oEPgU0BkYHZQimCeELPQyZDgEPbRDkEmQT6xVjFuEYZBneG00cth4dH3Ig + uiHyIx8kNyVBJkcnQyg6KTUqKCseLBEtBC33Lugv2jDMMb8ysjOjNJI1gjZwN104SDk1 + Oh47BjvuPNc9wD6qP5pAj0GKQolDi0SPRZJGk0eUSJVJlUqUS5FMjk2LTohPhVCDUYNS + hFODVIRVhFaCV4FYf1l7Wnhbc1xuXWleZF9jYGVha2J1Y4FkjmWbZqdns2i+achq0Wva + bONt7G72cANxEnIlczl0UHVndn13kXinebp6znvhfPJ+A38QgBqBIIIjgyKEIIUchhiH + FIgPiQqKBIr9i/aM743ojuGP3JDYkdWS05PSlNKV0ZbPl82YypnImsSbwJy8nbietZ+0 + oLehvqLIo9Sk4qXvpv2oCqkWqiOrLqw5rUSuTq9YsGCxZ7Jts3K0d7V7tn63gbiEuYe6 + ibuLvI29jr6Pv5LAlcGawp/DpMSqxa7Gsce1yLjJu8q9y77MwM3BzsHPv9C70bXSrNOi + 1JfVjNaB13bYatld2lHbRNw33SreHN8N3/7g7eHa4sXjseSb5YXmb+dZ6ELpK+oU6v3r + 5uzN7bXune+F8G7xWPJC8y30GfUF9fD23PfG+LH5nPqG+3D8Wv1D/i3/Fv//AAAAEQBP + AMABQgHRAocDUgQlBRoGLgdICG4JswsCDGINvg8mEJMSChOJFQQWexf6GWYa2Rw+HZge + 6yA0IWgijyOpJLUluCa3J7EoqCmfKpYriyx+LXEuYi9VMEcxOzItMx80ETUBNfI24TfQ + OL45qjqWO4A8az1VPj8/KkAaQQ5CBEL9Q/ZE70XoRuFH2EjOScRKuEusTKBNkk6GT3lQ + cFFpUmZTY1RiVV9WXVdaWFVZUVpLW0VcPl03XjFfK2AoYSdiKGMqZCxlL2YwZzFoMWkx + ajBrL2wtbSxuLG8ucDVxQXJRc2R0enWPdqV3uXjOeeF69XwHfRl+KX83gEOBSoJPg1CE + UIVPhk6HTIhJiUaKQos/jDqNNo4xjy2QKpEokiiTJ5QnlSeWJpclmCSZIpogmx2cGp0W + nhOfEaASoRSiGKMfpCelL6Y2pz2oRKlLqlKrV6xdrWKuZ69usHaxf7KJs5W0obWttrm3 + xLjPudq647vtvPe+AL8IwA/BFsIcwyHEJcUpxi3HMMgzyTXKN8s5zDvNPM49zz7QQNFC + 0kXTSNRL1U/WUtdU2FfZWdpb21zcXt1e3l3fWuBT4UjiOOMl5BDk+eXi5srnsuia6YHq + aOtP7DbtHe4D7uvv1PDB8bDyovOW9Iz1gfZ292v4YPlV+kr7Pvwx/SX+Gf8M//8AAAAR + AE8AwAFCAdECeAM4BAsFAAYABx8IUgmICswMKQ2BDuYQUxHNE0AUsxYsF6QZGBqKG/Ad + UR6nH+8hMCJfI38klSWkJq4nsSizKbUqtSu1LLItry6uL6wwqDGkMqAzmzSXNZI2ijeD + OHw5cjpmO1o8TT1APjQ/KkAjQR5CHEMdRB1FIEYgRyBIHkkdShlLFkwQTQxOB08CT/9Q + /FH7UvpT/FT8VfxW+1f5WPZZ8lruW+lc5F3fXttf2GDWYddi2WPdZOFl42blZ+do6Gnp + aulr6Gznbedu6G/tcPZyAnMSdCR1NnZJd1t4bXl8eox7nHyqfbd+wn/JgMuByYLEg7uE + soWnhpyHkIiFiXiKa4tdjE+NQY4zjyeQHJEUkg2TCZQGlQOWAJb9l/mY9Znwmuub5Zzg + ndqe05/PoMyhyqLKo8ukzKXOps6nz6jPqc+qzavNrMutyq7Jr8mwyrHNstGz1bTatd+2 + 47fnuOq57brwu/K89L31vve/98D3wfjC+MP4xPjF98b2x/XI88nxyu/L7czqzebO48/g + 0NzR2NLT087UyNXC1rzXtdiu2afan9uY3I/dh95933PgZ+FZ4knjOOQm5RPmAObs59jo + xOmw6pvrhuxx7VzuR+808CPxF/IP8wv0CvUK9gr3CvgK+Qn6CPsH/Ab9Bf4D/wH//wAA + bmRpbgAAAAAAAAY2AACmRQAAVbUAAEzMAACeSAAAJPAAAA0OAABQDQAAVDkAAiPXAAIC + jwAB/XAAAwEAAAIAAAAFAAwAFQAeACgAMgA9AEgAUwBgAGwAeQCHAJUApACzAMMA0wDk + APUBCAEbAS8BQwFZAW8BhwGgAboB1QHyAhECMgJWAnwCpgLUAwQDOANvA6cD4wQgBGAE + ogTmBS0FdQXABgwGWwatBwEHWAexCA4IbAjOCTMJmgoDCm8K2wtHC7IMHQyJDPYNZQ3X + DksOwQ86D7UQMxC0ETYRuxJCEssTVRPgFG4U/hWQFiUWvBdWF/MYkhk0GdkagBspG9Ic + ex0jHcsedB8eH8ogeSEqId0ikyNMJAckxCWEJkUnByfJKIspTSoQKtMrmSxhLSwt+C7I + L5kwbTFEMh0y+jPcNMM1sDaiN5k4lDmSOpM7lzydPac+tD/EQNdB7EMERB1FN0ZSR25I + i0mqSsxL8U0ZTkRPclCjUddTDlRIVYJWvVf2WSxaYVuVXMpeAV86YHZhtWL2ZDplgWbL + aBdpZ2q6bBFtbG7KcCxxkXL5dGR10ndDeLd6LnunfSR+pIAlgaiDK4SvhjWHvYlIiteM + aY3+j5aRMZLPlHGWFZe9mWmbG5zUnpOgWaIko/SlxqecqXarU60zrxew/7LptNi2y7jD + usK8x77TwOPC+MURxy3JTctxzZnPxdH01CjWX9iZ2tbdFN9S4ZLj0+YX6F/qquz6703x + pPP/9l74wPsn/ZH//wAAAAUADQAVAB8AKQAzAD4ASgBWAGIAbwB8AIoAmQCoALgAyADZ + AOoA/AEPASMBNwFMAWMBegGSAawBxwHkAgICIgJFAmoCkwK+Au4DIANVA40DxwQDBEEE + ggTFBQsFUgWcBecGNQaFBtcHLAeDB90IOQiYCPoJXwnGCjAKnAsKC3gL5gxWDMYNOQ2u + DiUOnw8cD5sQHRCiESkRtBJAEs8TXhPuFH4VEBWjFjkW0RdsGAoYqhlNGfMamxtGG/Mc + oR1QHf8esB9iIBYgzCGGIkEjACPBJIUlSyYUJt8nqyh3KUEqCirSK5osYi0sLfguxy+Y + MGsxQTIZMvQz0TSyNZc2gDdvOGM5XDpYO1g8Wj1gPmg/dECCQZNCp0O+RNdF8kcNSCpJ + SEppS4tMsU3ZTwRQMlFjUpdTzlUIVkVXg1jBWf9bPVx6Xbhe92A5YX5ixWQPZVxmq2f+ + aVNqq2wFbV9uu3AWcXNy0HQvdZF29XhcecZ7MnyifhR/iYEBgn2D+4V9hwOIjYoai6qN + PY7UkG2SCZOplUuW8ZiZmkWb852jn1WhCKK9pHSmLafpqamra60wrviwxLKStGS2O7gX + ufy77L3ov/HCA8QcxjrIXMqBzKvO2NEK0z/VeNe02fLcLd5k4JbixeTy5yDpUuuG7b/v + +vI59Hz2w/kN+1r9q///AAAABQANABYAIAAqADUAQABLAFgAZAByAH8AjgCcAKwAvADM + AN0A7wECARUBKQE+AVMBagGBAZoBtAHPAewCCgIrAk0CcgKaAsUC8wMjA1YDjAPDA/0E + OAR2BLYE+AU7BYEFyQYTBl8GrQb9B1AHpQf8CFYIswkSCXQJ2Ao+CqULDQt2C+AMSwy4 + DSYNmA4LDoIO+g92D/MQdBD2EXsSAhKKExQTnxQsFLoVSxXfFnUXDheqGEgY6RmNGjMa + 2xuEHC8c2x2HHjUe5B+WIEshAiG8IngjNyP5JL4lhCZMJxUn3CijKWkqLyr2K78sii1X + Licu+i/PMKYxgDJeMz40JDUQNgM2+zf6OPw6AjsLPBg9Jz46P1BAaUGFQqRDxUTnRghH + KkhLSW1KkEu3TOBODE87UG1RolLaVBVVU1aUV9ZZGFpbW55c4l4oX3BgvGIKY1xksGYI + Z2Jov2ofa4Fs5G5Ib6xxEHJ3c991Sna4eCl5nXsUfI5+C3+LgQ6ClIQdhaqHOYjKil+L + 9o2Rjy6Qz5JzlBqVxJdxmSGa1ZyLnkSgAaHBo4WlTKcXqOSqtqyKrmKwPbIcs/2147fM + ubq7rb2nv6jBscO/xdHH6MoDzCHOQ9Bp0pPUwNbx2SXbWt2L37bh2OP05g3oJupB7F/u + gfCl8s30+Pcm+Vj7jP3E//8AAHNmMzIAAAAAAAEMQgAABd7///MmAAAHkgAA/ZH///ui + ///9owAAA9wAAMBsbW1vZAAAAAAAAAYQAACctQAAAADGeuOAAAAAAAAAAAAAAAAAAAAA + AA== + + ReadOnly + NO + RowAlign + 1 + RowSpacing + 36 + SheetTitle + Canvas 1 + SmartAlignmentGuidesActive + YES + SmartDistanceGuidesActive + YES + UniqueID + 1 + UseEntirePage + + VPages + 1 + WindowInfo + + CurrentSheet + 0 + ExpandedCanvases + + Frame + {{319, 486}, {753, 756}} + ListView + + OutlineWidth + 142 + RightSidebar + + Sidebar + + SidebarWidth + 138 + VisibleRegion + {{-14, 4}, {601, 647}} + Zoom + 1 + ZoomValues + + + Canvas 1 + 1 + 1 + + + + saveQuickLookFiles + YES + + Index: doc/person-student.png =================================================================== diff -u Binary files differ