ࡱ> RTOPQW#` dbjbj BiVdvއއއ:vrt"ѯx7\\z$h!o@[D& l<) |އu=Lq0b$))5#<_dþ555L^555vvv>P6vvvPvvv  The Design and Implementation of P2V, An Architecture for Zero-Overhead Online Verification of Software Programs Hong Lu Texas A&M University Alessandro Forin Microsoft Research August 2007 Technical Report MSR-TR-2007-99 Microsoft Research Microsoft Corporation One Microsoft Way Redmond, WA 98052 The Design and Implementation of P2V, An Architecture for Zero-Overhead Online Verification of Software Programs Hong Lu Department of Computer Science Texas A&M University College Station, TX 77843 +1-979-8478609 luhong@tamu.edu Alessandro Forin Microsoft Research One Microsoft Way Redmond, WA 98052 +1-425-7061841 sandrof@microsoft.com ABSTRACT The PSL-to-Verilog (P2V) compiler can translate a set of assertions about a block-structured software program into a hardware design to be executed concurrently with the execution of the software program. The assertions validate the correctness of the software program without altering its temporal behavior in any way, a result that has never been previously achieved by any online model-checking system. The technique and the implementation apply to any general purpose program and the absence of execution overheads makes the system ideal for the verification and debugging of real-time systems. The assertions are expressed in the simple subset of the Property Specification Language PSL, an IEEE standard originally intended for the behavioral specification of hardware designs. The target execution system is the eMIPS processor, a dynamically self-extensible processor realized with an FPGA. The system can concurrently execute and check multiple programs at a time. Assertions are compiled into eMIPS Extensions, which are loaded by the operating system software into a portion of the FPGA at program loading time, and discarded once the program terminates. If an assertion is violated the program receives an exception, otherwise it executes fully unaware of its verifier. The software program does not need to be modified in any way, it can be compiled separately with full optimizations and executes with or without the corresponding hardware checker. The P2V compiler is implemented in Python. It generates code for the implementation of the eMIPS processor running on the Xilinx ML401 development board. It is currently used to verify software properties in such areas as testing and debugging, intrusion detection, and the behavioral verification of concurrent and real-time programs. INTRODUCTION Software program monitoring is an effective approach for the runtime validation of system requirement, usually described in a temporal logic formalism such as LTL formula. In this report, we concern ourselves with transparent monitors, the class of monitors whose execution does not interfere with target programs. Transparent monitoring involves passive observation and online verification. Passive observation refers to the non-intrusive collection of relevant information from an executing program, and online verification refers to the detection of requirement violations in a timely fashion, using the collected information. Most existing observation techniques are based on code instrumentation. Such software based techniques cause the unavoidable probe effect which changes the timing behavior of the target program. Hardware based observation have been attempted in the past with various degrees of success, but to the best of our knowledge, none of them is deployed together with online verification. In this report, we introduce project P2V, a PSL-to-Verilog compilation system, which aims at the runtime verification of real-time as well as general purpose software by automatic generation of the hardware design of a transparent monitor from its sPSL  REF _Ref171494989 \r \h [8] specification.  Figure  SEQ Figure \* ARABIC 1: Block diagram of eMIPS architecture In project P2V, the execution platform for the target software program and its monitor is eMIPS, a dynamically extensible processor  REF _Ref171494937 \r \h [17] implemented on FPGAs. eMIPS allows multiple extensions of a MIPS processor to load dynamically and to plug into the stages of a pipelined CPU data path.  REF _Ref171493767 \h Figure 1 illustrates the architecture of the eMIPS platform with two extensions. The transparent monitor unit, abbreviated as MU from this point on, is deployed as one of the extensions. MU has two major components, an observing unit OU and a verification unit VU, as shown in  REF _Ref171493800 \h Figure 2. OU is closely integrated with the eMIPS core datapath, and can passively access all relevant signals and registers, including the program counter, the stack pointer, the current instruction register, memory write addresses and values, and the general purpose registers. In Figure 2, this interaction is depicted by the input signals PC, INSTR and MEMVAL among others. VU verifies sPSL assertions using the observations collected by OU. It takes a list of atomic propositions a1, a2, , an as inputs (generated by OU), and outputs two signals VIOLATED and SATISFIED. A concrete example will be given shortly in Section 3 to describe the MU in more details. Besides being completely transparent, the other distinctive feature of P2V is its flexibility. As an extension to eMIPS core, the logic of MU can be synthesized on a per-program basis. Furthermore, MU is loaded and executed at runtime together with the target program. More than one program can be executing on the same microprocessor under system software control. This flexibility is achieved via the dynamic partial reconfiguration capabilities of modern FPGAs, something that is simply not possible for ASIC platforms.  SHAPE \* MERGEFORMAT  Figure  SEQ Figure \* ARABIC 2: MU architecture Software correctness specifications are expressed in sPSL  REF _Ref171494989 \r \h [8], a language based on PSL and adapted for C requirement specifications. P2V translates sPSL assertions into Verilog code. The compiled Verilog code is loaded and executed in parallel with the software C program. P2V uses debugging information generated by the C compiler to keep track of the mapping between C and assembly code, and as a result, the binary of the compiled target C program does not need to be instrumented or modified in any way. The dataflow of P2V is shown in  REF _Ref171493812 \h Figure 3. The top side of the diagram depicts the normal compilation flow for C, using the standard compiler and tools and resulting in an executable image file. The bottom part of the diagram shows the symmetric flow for the sPSL specifications, compiled by the P2V compiler and resulting into the Verilog source for an eMIPS extension. The manufacturers FPGA tools then take this file and create the binary file used for partial configuration of the FPGA.  SHAPE \* MERGEFORMAT  Figure  SEQ Figure \* ARABIC 3: P2V data flow The remainder of this document is structured as follows. In Section 2 we review the related literature. In Section 3, we use an example to illustrate the design of P2V. A few practical P2V usage cases are presented in Section 4. Section 5 discusses the limitations of our approach, and Section 6 concludes this report. RELATED WORK Program monitoring has been studied extensively in the past and numerous monitoring systems have been developed and deployed. Existing monitoring approaches can be roughly divided into two groups: software based and hardware based. In this section, we review related work in these two categories. Software-Based Monitoring LTL properties can be translated into code that is added to the target program to monitor it during execution, as with the Temporal Rover and DBRover tools  REF _Ref171495043 \r \h [10] REF _Ref171495044 \r \h [11]. Temporal Rover is a code generator which accepts source code from Java, C, C++, Verilog or VHDL. The LTL assertions are expressed as comments embedded in the source code. With the aid of a parser, the assertions are inserted in the programs source code that is then compiled and executed. Java-MaC  REF _Ref171495066 \r \h [16] is a more limited system, restricted only to Java programs. It contains a static phase and a run-time phase. At program analysis time, it uses the Primitive Event Definition Language (PEDL) to define events and their desired relationships. At run-time, it continuously monitors and checks the executing program with respect to the defined formal specifications. An even simpler approach to detect software faults at runtime is to use a pre-processor and assertions, as with ASAP  ADDIN EN.CITE Curcio7717Igor D.D. CurcioA Simple Assertion Pre-processorSIGPLAN44-5133121998[9]. ASAP is a pre-processor for C programs, it extends the usage of assertions in C programs by using partial functions and first order logic. Inevitability, these assertions are embedded in the program source code. Ro_u  REF _Ref171495075 \r \h [20] suggests re-writing techniques to evaluate LTL formulas. The execution of an instrumented program creates traces of interesting events and the rewriter operates on such traces. Some algorithms assume the entire trace is available for (backward) analysis, others can process each event as it arrives. Rosus algorithms make it possible to generate very efficient monitors that can be used by practical tools such as the Java PathExplorer (JPaX)  REF _Ref171495092 \r \h [13]. P2V leverages from the work of Ro_u and Havelund, it uses their rewriting techniques at compile time to create the monitors, which are then implemented in hardware. The Java Modeling Language (JML)  REF _Ref171495100 \r \h [15] is a behavioral interface specification language for Java modules. The JML Compiler (jmlc) compiles JML code into runtime checks of the class contracts. In  REF _Ref171495112 \r \h [7], the jmlc compiler is used in conjunction with an Extended Static Checker for Java version2 (ESC/Java2). In  REF _Ref171495136 \r \h [6] this approach is used to perform verification of a full compiler. ESC/Java2 makes additional use of static analysis, a technique that does not require actually executing the program for fault detection. The Spec# programming language REF _Ref171495145 \r \h [5] is a superset of C# which provides method contracts in the form of pre-conditions and post-conditions, as well as object invariants. The Spec# compiler provides run-time checking for method contracts and object invariants. A Spec# static program verifier generates the logical verification for Spec# program and an automated theorem prover analyzes the verification directives to prove the programs correctness. SLIC  REF _Ref171495160 \r \h [3] is a language for specifying the low level temporal safety properties of Application Program Interfaces (APIs) defined in the C programming language. It can be used along with the companion tool SLAM  REF _Ref171495177 \r \h [4] to perform validation. All of the above systems insert instrumentation code into the executing program to monitor events and check properties and therefore introduce execution overhead that modifies the programs temporal behavior. This is not acceptable for Real-Time programs and even a limited execution overhead is poorly received by developers. Hardware-Based Monitoring MAMon  REF _Ref171495191 \r \h [12] is a hardware monitoring system that gives non-intrusive observability into the execution of hardware accelerated RealTime Operating Systems. In MAMon, traditional RTOS functions, such as process scheduling, management, and communication are implemented as a hardware unit RTU, whose execution is passively observed by an Integrated Probing Unit IPU, also implemented as hardware. The collected system level events, including task switches, service calls, interrupts, software probes are sent by IPU through a parallel port to a separate host for further processing. MAMon is designed for monitoring the execution of a specific RTOS kernel, while P2V monitors general purpose software at a fine level of granularity. Noninterference monitoring architecture  REF _Ref171495201 \r \h [21] targets monitoring distributed real-time systems without interfering with their execution by using additional hardware to collect observations of the target system. The data to be captured is predetermined, such as process creation, termination, synchronization, function call and return. Data analysis is performed offline afterwards. Compared with this approach, the type of data to be collected in P2V is much finer grained and dynamically reconfigurable, and data analysis is performed online in a synchronous manner. ODYSSEY  REF _Ref171495211 \r \h [14] is a system-level synthesis methodology for embedded systems. Recently, an assertion-based verification methodology has been integrated into ODYSSEY. Similar to our approach, specifications of software properties are in PSL and specifications are synthesized into hardware monitors. However, in ODYSSEY, the temporal layer of PSL is only used to specify the validity of a sequence of method calls, while in our system PSL is used to describe the temporal behavior of the entire program, including statements about global and local variables and their values and interactions with other programs and I/O peripherals. Furthermore, only a limited fraction of PSL is supported in ODYSSEY (no until, eventually, and etc), and as a result, the temporal properties that can be specified in ODYSSEY are a very limited subset of those that can be specified in P2V. P2V DESIGN In this section we will use a simple example to illustrate the basic architecture of P2V. int ACK = 0; int control(void) { .... REQ: device->CONTROL = 1; while(1) { ACK = device->STATUS; .... } } Figure  SEQ Figure \* ARABIC 4: device.c  REF _Ref171493838 \h  \* MERGEFORMAT Figure 4 shows a fragment of a simple real-time C program device.c. The program acts on the CONTROL of a peripheral device and then loops checking on the STATUS, expecting an acknowledge. atom req := REQ atom ack := ::ACK == 1 property P: always(req(( eventually(ack)) Figure  SEQ Figure \* ARABIC 5: device.c specification  REF _Ref171493845 \h  \* MERGEFORMAT Figure 5 is a fragment of a PSL specification. Line 1 and 2 in  REF _Ref171493845 \h  \* MERGEFORMAT Figure 5 define two atomic proposition req and ack. The two expressions REQ and ::ACK==1 (used to define req and ack) are called atomic proposition expressions. The leading :: before ACK indicates ACK is a global variable. Line 3 defines a temporal property P, which asserts that a request must always lead to an acknowledgement. In this example, we explicitly introduced propositions req and ack to specify property P. This is only for ease of later discussion. Otherwise, P can be written more compactly as always(REQ ( eventually(::ACK == 1)). A complete description of the sPSL syntax and semantics can be found in [8].  EMBED Visio.Drawing.11  Figure  SEQ Figure \* ARABIC 6: Observation Unit Circuit Observation Unit In the example of Figure 5, the atomic proposition req refers to the label REQ in device.c, and analysis of the compiled programs binary and debugging information reveals that its address is 0x40000004. The atomic proposition ack refers to the variable ACK, which for simplicity we assume is a global variable at address 40 in memory. It might be on the stack, in which case 40 would be the offset from the stack pointer register.  REF _Ref171493871 \h Figure 6 depicts a simplified version of the OU for this example, generated by the P2V compiler. Signals MEMADDR, MEMVAL, and PC come from the eMIPS core datapath. MEMADDR and MEMVAL are compared against 40 and 1 respectively to produce the atomic proposition ack, while the program counter PC is compared with 0x40000004 to produce req. req and ack are later fed to VU for further processing. OU also generates an entry and an exit signals when the entry and exit of function foo are detected. These two signals are omitted in  REF _Ref171493871 \h Figure 6 for simplicity. Based on this simple example, we can now discuss OU in more detail. The main task of OU is execution trace generation. An execution trace here is defined as a sequence of observations, where an observation is a realization of one atomic proposition. In what follows, we will discuss the two key aspects of execution trace generation: scope detection and atomic proposition evaluation. Note that the design of OU is inherently platform dependent: OU collects the relevant information about a running program that was originally written in high level programming language by watching the stream of machine code flowing through the CPU. In particular, to generate OU, P2V must have sufficient knowledge of the target platform including the compiler and the hardware architecture. Therefore, the following discussion about OU is based on certain assumptions and conventions of the MIPS platform and its compilers. In sPSL, the start and the end of a local trace is defined as the entry and the exit of a function invocation. Therefore, function scope detection is one of the main tasks of OU. Assertions can also be scoped globally or limited to a block within a function, but those cases can easily be reduced the local trace case. Let foo be the function of a single threaded C program which OU is observing. Normally, C compilers allocate foo's code at a fixed location in the text segment, and use a stack to organize function invocations. When foo is called, an activation record is created on the top of the stack, which will be discarded when foo returns. By convention, register SP in the MIPS processor is used exclusively to keep track of where the top of stack is. To detect the scope entry of foo, OU simply checks the register PC against foo's virtual address in the text segment. Notice that if foo is recursive it might have multiple activation records on the stack. In this case, the value of register SP at the time when foo is entered is used to distinguish multiple invocations. Furthermore, SP is also used to detect scope exit. For example, suppose the activation record of a particular foo instance is located at memory address 100, then the moment when SP falls below 100 is the moment that that instance goes out of scope. The above simple rule for scope detection can be easily extended to multithreaded programs. In such programs, each thread is associated with a different stack, and as a result, OU only needs to keep track of multiple stacks for correct scope detection. The primary step for atomic proposition evaluation is to collect the addresses of C program variables, which can be done by analyzing the program binary and debugging information. Typically, C compilers allocate static and global variables at fixed locations in the data segment. Local variables are dynamically allocated on the stack. Function arguments could be allocated either on the stack or in registers. In this report, the process of deciding the location of a variable at the time when it is created (by analyzing debugging information generated by the C compiler) is called variable analysis. Variable analysis allows OU to keep track of variables transparently by intercepting and caching all the value written to the variable's location. Verification Unit The verification unit for the property P: always(req ( eventually(ack)) from Figure 5 implements the Moore finite state machine (FSM) shown in  REF _Ref171493912 \h Figure 7. For this reason, the terms VU and verification FSM are used interchangeably in this subsection. VU has four states INIT, REQ SEEN, SATISFIED, VIOLATED, and is driven by signal req, ack, and exit outputted by OU (the signal entry is omitted for simplicity of illustration). The label of each transition in the verification FSM indicates the values of the observations that trigger this transition. For example, label 100 of transition INIT ( REQ SEEN is a non-exit transition triggered by the observation req=1, ack=0, and exit=0. Label **1 of transition INIT ( SATISFIED corresponds to an exit observation where the value of req and ack could be either 1 or 0.  EMBED Visio.Drawing.11  Figure  SEQ Figure \* ARABIC 7: Verification FSM Driven by the observations generated from the OU, VU verifies the property P defined in example.psl. The moment when it moves to the states SATISFIED/VIOLATED is the moment P is violated/satisfied. For example, suppose VU is at state INIT, and the following trace is observed (by OU): O1 = 100 O2 = 010 O3 = 100 O4 = 001 Driven by this trace, the action taken by VU is: INIT(REQ SEEN(INIT(REQ SEEN(VIOLATED and VU correctly stops at state VIOLATED because the last request was not followed by an acknowledge. It is easy to verify that according to the PSL semantic rules P indeed is violated by this trace. The fact that property violation detection is performed by an FSM is crucial for online verification because the execution of the FSM is completely synchronized with the target program, and the target program needs not be stalled. The verification FSM in  REF _Ref171493912 \h Figure 7 is generated by a property rewriting algorithm proposed by Ro_u and Haveland in  REF _Ref171495075 \r \h [20]. The basic idea of this algorithm is that to verify if P holds for a trace starting with an observation O, one just needs to verify if P{O} holds for the rest of the trace, where P{O} is the property rewritten from P given O. For example, consider the operator always. Notice that saying that the property P = always Q holds for a trace starting with O it is equivalent to saying that (1) Q holds for the same trace and, (2) P holds for the rest of the trace. Therefore, the recursive rewriting rule for an always property P is: P{O} = Q{O} ( P. However, if O is an exit observation, then according to the semantics of always, P = always Q is satisfied, that is, P{exit} = true. In summary, the rewriting rule for always properties is: P{O} = P ( Q{O}, if O is not exit P{O} = false, if O is exit Given their timeless nature, the rewriting rules for the Boolean operators and, or, imply and not are much simpler compared with the temporal operators. Take and as an example, P = Q and R holds for a trace starting with O is simply equivalent to saying Q holds and R holds for the same trace, therefore, the rewriting rule for an and property P = Q and R is: P{O} = Q{O} ( R{O} The rewriting rules for or, imply and not are similar. The rewriting rules for atomic propositions are straightforward: the property rewritten from proposition A given observation O is simply the value of A in O, which is either true or false. Readers can refer to [21] for a complete list of the rewriting rules. Now, consider property P: always(req ( eventually ack) from our previous example. In what follows, we show how to generate P's verification FSM by property rewriting. P's sub formulae are summarized as follows: P: always(P1) P1: P2 ( P3 P2: req P3: eventually P4 P4: ack Suppose we want to check if P holds for trace 100,010,100,001, which can be written more clearly as O1 = req, O2 = ack, O3 = req, O4 = exit given that there is only one true atomic proposition in each observation. P can be verified by the following property rewriting process: P{O1} = P{req} = P ( P1{req} = P ( (P2{req} ( P3{req}) = P ( (true ( P3{req}) = P ( P3{req} = P ( (P3 ( P4{req}) = P ( (P3 ( false) = P ( P3 P{O1}{O2} = (P ( P3){O2} = P{ack} ( P3{ack} = P ( P1{ack} ( (P3 ( P4{ack}) = P ( (P2{ack} ( P3{ack}) ( (P3 ( true) = P ( (false ( P3{ack}) ( true = P P{O1}{O2}{O3} = P{O3} = P ( P3 P{O1}{O2}{O3}{O4} = (P ( P3){O4} = P{exit} ( P3{exit} = true ( false = false The above procedure keeps rewriting properties using new observations. The resulting property P{O1}{O2}{O3}{O4} produced at the end of the trace is false, indicating that the property is violated at that moment. Notice that the above property rewriting chain: P({O1}(P(P3({O2}(P({O3}(P( P3({O4}(false directly corresponds to the state-transition sequence in the FSM in  REF _Ref171493912 \h Figure 7: INIT(REQ SEEN(INIT(REQ SEEN(VIOLATED where property P corresponds to state INIT, P(P3 corresponds to REQ SEEN, and false corresponds to VIOLATED. The set of properties that could be generated by rewriting a property is called the closure of that property. It may seem that, since there are an infinite number of possible traces and each trace may lead to a new property by property rewriting, there could be infinite number of properties in the closure. It is shown in  REF _Ref171495075 \r \h [20] that the closure of any property is actually finite and its size only depends on the length of the property. The consequence is that the size of the verification FSM is also finite. The algorithm to generate the verification FSM for a property can be summarized as follows: Enumerate all possible observations Compute the closure of the property against all possible sequence of observations. Synthesize the verification FSM such that (a) each state corresponds to a property in the closure, and (b) each transition corresponds to one step in the rewriting rules, according to one observation. APPLICATIONS In the previous section, we have seen how P2V can monitor one simple liveness property always(req(( eventually ack). In this section, we use a few more examples to show how PSL can be used to validate other practical applications. Debugging and testing Consider the C function swap in  REF _Ref171153603 \h  \* MERGEFORMAT Figure 8, which takes two pointer arguments x and y, and exchanges the values they point to. void swap(int *x, int *y) { int temp = *x; L1: *x = *y; // some other computation *y = temp; L2: return; } Figure  SEQ Figure \* ARABIC 8: swap.c The requirements that x and y should both be valid and point to two different integers at the entrance of swap can be expressed in sPSL as follows: (x != NULL) ( (y!=NULL) ( (x!=y) P2V also allows users to check pointer validity between two specific points in a program. For example, the validity of pointer x between L1 and L2 can be expressed as: always (L1 ( (x!=NULL) until L2) P2V can also be used in software testing. As an example, consider a C program with two functions foo and bar. The requirement that function bar must be called immediately after foo at least once in a test suite can be specified as: eventually (foo ( next bar) Real-time behavior verification The PSL operators next_e and next_a are well suited for specifying real-time properties. Specifically, property next_e [i:j]F holds if F holds for every time instance between i and j from now. Property next_a[i:j] holds if F holds at least once between time i and j from now. For instance, assume that it is critical in a real-time system that interrupts should never be turned off for more than a short period of time, say 10 microseconds. Assuming that intoff() and inton() are the two functions to turn off and on the interrupts, we can specify this requirement as follows: always( intoff ( next_e[0:10s] inton) next_e, when used together with the operator next_a, is also useful to indicate periodic tasks-- operations that should happen at a given frequency. For example, the requirement that the function foo should be called approximately every 20 milliseconds can be specified as: always( foo ( next_a[0:20ms] !foo) always( foo( next_e[0:21ms] foo) Intrusion Detection Stack based buffer overflow is a commonly used method to break into computer systems. It usually exploits unbounded string operations to replace the return address of a function on the stack by the address of malicious code. In sPSL, we can detect this kind of attack as follows: never($writing == $return) Here, $writing and $return are two special variables maintained by MU. $writing holds the address of the memory cell that the CPU is currently writing and $return holds the function return address. The proposition $writing == $return evaluates true only when the processor is trying to rewrite the function return address, and the property asserts that this should never happen. In this example, $return is basically a constant. In general, the special variable $writing can also be used to detect attempts to modify program variables that should remain constant. For example, the requirement that variable c is a constant can be specified as follows: never($writing == &c) P2V IMPLEMENTATION The P2V compiler is written in Python. It consists of three major components: a PSL parser, an image parser, and a Verilog code generator. This section describes the implementation of each component, using device.c, swap.c in  REF _Ref171493838 \h  \* MERGEFORMAT Figure 4 and  REF _Ref171153603 \h  \* MERGEFORMAT Figure 8, and the following demo.psl as example. vunit vunit1(device.c::control) { atom req := REQ; atom ack := ::ACK == 1; property P := always(req imply eventually(ack)); } vunit vunit2(swap.c::swap) { atom a := x != 0; atom b := x != 0; atom c := x != y; property P := a and b and c; } Figure  SEQ Figure \* ARABIC 9: demo.psl PSL parser The PSL parser is implemented in the source files psl.py and property.py located in the folder psllib. The function psl.parse is the entry point of psllib. It takes as input a PSL specification and generates a data structure which is an internal representation of the specification. For example, the result of parsing demo.psl (in  REF _Ref174260931 \h  \* MERGEFORMAT Figure 9) is shown in  REF _Ref174260961 \h  \* MERGEFORMAT Figure 10. [ { 'name': 'vunit1', 'file_name': 'device.c', 'func_name': 'control', 'atoms': { 'req': 'REQ', 'ack': ('::ACK', '==', '1'), }, 'properties': [ ('P', ['always', ['imply', 'req', ['eventually', 'ack', 0]], 1]),] }, { 'name': 'vunit2', 'file_name': 'swap.c', 'func_name': 'swap', 'atoms': { 'a': ('x', '!=', '0'), 'b': ('x', '!=', '0'), 'c': ('x', '!=', 'y') }, 'properties': [ ('P', ['and', ['and','a', 'b'], 'c']), ], } ] Figure  SEQ Figure \* ARABIC 10: output of psllib.parse The function psl.parse calls psl.vunit_parse, psl.property_parse, and psl.atom_parse to generate the above output. As shown in  REF _Ref174260961 \h  \* MERGEFORMAT Figure 10, psllib.parse extracts the name, file_name, func_name, properties, and atoms for each vunit. Each property in properties is an annotated abstract syntax tree generated by property.parse. In this abstract syntax tree, each temporal sub-property of the property is assigned a numerical id. As an example, consider property P of vunit1, the id of its always sub-property is 1, and the id of its until sub-property is 0. The id of a temporal sub-property is used to define the notion of literal. More specifically, a literal is either an atomic proposition or a temporal sub-property id. The notion of literal is crucial to compute the closure of a property. The other useful function in property.py is atoms_of, which computes the sorted list of names of atomic propositions referred to a property. Image parser The image parser is implemented in stab.py located in folder stablib, which is currently still under construction. Stablib uses the output of objdump to obtain the symbol information for all the objects defined in multiple C files, including functions, global variables, local variables, arguments, labels, and so on. The symbol information is stored in a data structure to be consumed by the Verilog generator. For example, stablib.parse generates the following structure for device.c, and swap.c shown in Figure 11. { "device.c":{ # function scope "control":{ "info": (0x80000378, 32, 12), "labels": { 'REQ':0x80000388, } }, # global scope "":{ 'ACK': (0x800005f4,32,'signed'), }, }, "swap.c":{ "swap":{ "info": (0x80000328, 16, 20), "locals": { 'temp':(-24,32,'signed'), }, "args": { 'x':(0x10,32,'unsigned'), 'y':(0x14,32,'unsigned') }, "labels": { 'L1':0x80000338, 'L2':0x80000344, } }, }, } Figure  SEQ Figure \* ARABIC 11: Output of stablib.parse More specifically, the extracted information for a function includes function name, address, frame_size, and prologue_size, a locals section, an args (argument) section, an arglocs section, and a labels section. For example, function control in device.c has address 0x80000378, its frame size is 32, and its prologue size is 12. Notice that global variables such as ACK in this example are treated as local variables of a special function with an empty name. This allows us to associate global variables to individual source files. A global variable has name, address, bit width, and sign. Each local or argument variable has a name, an offset (to the stack pointer), a bit width, and a sign. A label has a name and an address. Verilog Code Generator The Verilog code generator is implemented in the source files P2V.py, MU.py, OU.py, VU.py, and in common_module.py. The entry point of the Verilog code generator is P2V.generate. This function takes as input the output of psllib.parse and stablib.parse, and compiles them into Verilog code. P2V.generate calls to MU.generate, VU.generate, and OU.generate to generate the VU, OU, and MU for each PSL property defined in all PSL vunits. MU.generate is the simplest of the three: it instantiates the OU and VU of a property. Below, we give more details of OU.generate and VU.generate. OU.py The function OU.generate calls OU.generate_wires, OU.generate_assigns, and OU.generate_modules to generate the OU for a property given the vunit and stab information. For example, the following Verilog code is generated for the property P of the vunit1 defined in demo.psl,  REF _Ref174260931 \h  \* MERGEFORMAT Figure 9. module OU_vunit1_P( CLK,PCLK,RESET,GR,PC, REGWRITE1_RG,REGWRITE2_RG, WRREG1_RG,WRREG2_RG, WRDATA1_RG,WRDATA2_RG, ADDR_MEM,DATA_MEM,WE_MEM, SCOPE,OBSERVATION); input CLK, PCLK, RESET, GR; input REGWRITE1_RG, REGWRITE2_RG; input [4:0] WRREG1_RG, WRREG2_RG; input [31:0] WRDATA1_RG, WRDATA2_RG; input [31:0] PC; input [31:0] DATA_MEM,ADDR_MEM; input WE_MEM; output SCOPE; output [2:0] OBSERVATION; wire [31:0] SP,sp; wire RANGE, PROLOGUE; //wires wire atom_ack,atom_req; wire label_REQ; wire signed [31:0] global_ACK; //assigns assign OBSERVATION = {atom_ack,atom_req}; assign atom_ack = (global_ACK == 1); assign atom_req = label_REQ; //modules register_observer #(29) so(PCLK,GR, WRREG1_RG, WRDATA1_RG, WRREG2_RG,WRDATA2_RG,SP); scope_detector #('h80000378,32,12) sd(PC,SP, RANGE,PROLOGUE,SCOPE,sp); label_observer #('h80000388) lbo_REQ(CLK, PC,SCOPE,label_REQ); global_observer #('h800005f4,32) go_ACK( DATA_MEM,ADDR_MEM,WE_MEM,global_ACK); endmodule Figure  SEQ Figure \* ARABIC 12: Output of ou.generate The value of the global variable g and the local variable l are captured by the Verilog modules global_observer go_g and local_observer lo_l. The value of register SP is captured by module register_observer so. Scope detection for function foo is done by the module scope_detector sd. label_observer lbo_L keeps track of register PC (the program counter) and matches it with the address of label L. Notice that, the Verilog modules global_observer, local_observer, register_observer, label_observer and scope_detector are parameterized. In other words, they are designed to be generic modules for any labels, variables, and functions. The definition of these Verilog modules, as well as two other common modules localarg_observer and AU are located in common_module.py. AU stands for activation unit. It asks permissions from the eMIPS pipleline arbiter to perform snooping of various TISA signals, such as the PC and SP registers above. VU.py VU.generate first calls VU.FSM (which calls VU.closure_of, and VU.rewrite) and VU.FSM_terminal(which calls VU.closure_of and VU.rewrite_terminal) to compute the main and terminal section of the verification FSM of a property, and then uses the result of these two functions to generate the corresponding Verilog code. For example, the Verilog code generated for property P of vunit1 defined in is as follows: module VU_vunit1_P(CLK,SCOPE,OBSERVATION, SATISFIED,VIOLATED); input CLK; input SCOPE; // OBSERVATION = ack,req input [1:0] OBSERVATION; output SATISFIED,VIOLATED; reg SATISFIED,VIOLATED; reg [20:0] STATE; always @(posedge SCOPE) begin STATE = 0; SATISFIED = 0; VIOLATED = 0; end always @(negedge SCOPE) case (STATE) 0: STATE=1; 1: STATE=1; 2: STATE=2; 3: STATE=2; endcase always @(posedge CLK) if (SCOPE) case({STATE,OBSERVATION}) {21'd0,2'b11}: STATE=0; {21'd0,2'b01}: STATE=3; {21'd0,2'b10}: STATE=0; {21'd0,2'b00}: STATE=0; {21'd3,2'b11}: STATE=0; {21'd3,2'b01}: STATE=3; {21'd3,2'b10}: STATE=0; {21'd3,2'b00}: STATE=3; endcase always @(posedge CLK) if (STATE == 1) SATISFIED = 1; always @(posedge CLK) if (STATE == 2) VIOLATED = 1; endmodule Figure  SEQ Figure \* ARABIC 13: Output of vu.generate As shown in  REF _Ref174414801 \h  \* MERGEFORMAT Figure 13, state 0, 1, and 2 correspond to INIT, SATISFIED and VIOLATED respectively. TO-DO list A proper implementation of an image parser is currently missing. The implementation of the PSL parser has certain limitations. In the first place, C expressions are not allowed in a property definition. For example, let p be a C integer pointer, then always (p!=NULL) is not a valid property definition. Instead, it should be split into atoms and written as: atom a := p != NULL property P: always a In the second place, at most one C operator is allowed in an atomic proposition definition, and it must be a comparison operator. For example, the following atomic proposition definition is invalid: atom a := ( i == j + k) The Verilog code generated by P2V has only been tested in a Verilog simulator. It has been successfully run in ModelSim + Giano, but not yet on the FPGA board. LIMITATIONS In this section, we discuss a few limitations with regard to transparent monitoring and the expressiveness of sPSL. Transparency Transparent monitoring cannot be achieved without placing restrictions on the atomic proposition expressions. Consider the relatively extreme case where a program generates a sequence of numbers, and its monitor must verify that each generated number is prime. It is well known that primarity testing is computational expensive, thus the target program may be generating numbers much faster than its online monitor can consume. As a result, the program needs to wait for its monitor, which results in a change of the timing behavior. Note that this limitation is an inherent one which applies not only to P2V, but also to all transparent monitoring system. Atomic proposition expressions involving pointer dereferencing may also affect the monitor transparency. Consider an atomic proposition expression **p, where p is a two level C pointer. The value of this expression changes when the value of each level of indirection changes. In general, to keep track of the value of an N-level pointer dereferencing expression we can set a watch address for each level of indirection. At level 0 it is the final object pointed to, at level 1 a pointer, at level 2 a pointer-to-pointer and so on. All transactions to level 0 memory can be transparently intercepted by MU. If level 1 is changed we re-fetch the level 0 value and re-evaluate. And so on for the other levels, at level N we need to dereference N pointers, the object, and re-evaluate. However, the above process must stop the pipeline during these fetches and that changes the programs timing. For the above reasons, we only allow relative simple computations in atomic proposition expressions, such as equality testing, addition/subtraction. Supported data types in atomic proposition expressions are limited to machine native data types such as byte, word etc. sPSL Expressiveness sPSL is designed for procedural languages. Various issues need to be considered if we want to extend it to object oriented languages. For instance, consider the following C++ code: class foo { public: void change_something(void); private: int A, B; } Figure  SEQ Figure \* ARABIC 14: C++ Example and the corresponding sPSL property always(A < B). This property is what we might call a class level property. Unlike function level properties, it asserts that A must be less than B for every instance of class foo at all times. In this case, variables are associated with an object instance instead of a function and the definition of sPSL semantics has to be adjusted accordingly. CONCLUSIONS We have introduced project P2V, a PSL-to-Verilog compilation system aimed at realizing an online, zero-overhead verification system both for general purpose and for real-time software. We use Assertion-Based Verification to check the properties of a software program that are expressed in a C binding for PSL, an IEEE standard property specification language. The temporal logic behind PSL is Linear Temporal Logic, which is amenable to online verification. In general, the basic principle of our approach is applicable not only to software written in C, but also other block structured languages. REFERENCES Accellera and I. 1364, SystemVerilog. Accellera Organization, Napa, CA. Accellera, IEEE P1850 PSL. Accellera Organization, Napa, CA. Ball, T., and S. K. Rajamani, S., K. SLIC: A Specification Language for Interface Checking (of C). Technical Report MSR-TR-2001-21, Microsoft Research, Redmond, WA, 2001. Ball, T., and S. K. Rajamani, S., K. The SLAM Project: Debugging System Software via Static Analysis. In Proceedings of the 29th SIGPLAN-SIGACT symposium on Principle Of Programming Languages (POPL02) (Portland, Oregon, January 16-18, 2002). ACM Press, New York, NY, 2002, 1-3. Barnett, M., Leino, K., R., M., and Schulte, W. The Spec# Programming System: An Overview. In Proceedings of the International Workshop on Construction and Analysis of Safe, Secure and Interoperable Smart devices (CASSIS04) (Marseille, France, March 10-13, 2004). LNCS Volume 3362, Springer-Verlag, Berlin, Germany, 2005, 46-69. Chalin, P., Hurlin, C., and Kiniry, J. Integrating Static Checking and Interactive Verification: Supporting Multiple Theories and Provers in Verification. In Proceedings of the International Conference on Verified Software: Theories, Tools, Experiments (VSTTE05) (Zurich, Switzerland, October 10-13, 2005). Chalin, P., and James, P. Cross-Verification of JML Tools: An ESC/Java2 Case Study. Technical Report MSR-TR-2006-117, Microsoft Research, Redmond, WA, 2006. Cheung, P. H., and Forin, A. A C-language binding for PSL. In Proceedings of the 3rd International Conference on Embedded Software and Systems (ICESS07) (Daegu, Korea, May 14-16, 2007). LNCS Volume 4523, Springer-Verlag, Berlin, Germany, 2007, 585-591. Curcio, I., D., D. A Simple Assertion Pre-processor. ACM SIGPLAN Notices, 33 (December 1998), 44-51. Drusinsky, D. The Temporal Rover and the ATG Rover. In Proceedings of the 7th SPIN Workshop on Model Checking and Software Verification (SPIN00) (Stanford, CA, August 30-31, 2000). LNCS Volume 1885, Springer-Verlag, Berlin, Germany, 2000, 323-330. Drusinsky, D. Monitoring Temporal Rules Combined with Time Series. In Proceedings of the 15th Computer Aided Verification Conference (CAV03).(Boulder, CA, July 8-12, 2003). LNCS Volume 2725, Springer-Verlag, Berlin, Germany, 2003, 114-118. El Shobaki, M. On-Chip Monitoring of Single-and Multiprocessor Hardware Real-Time Operating Systems. In Proceedings of the 8th International Conference on Real-Time Computing Systems and Applications (RTCSA02). (Tokyo, Japan, March 18-20, 2002). Havelund, K., and Ro_u, G. Java PathExplorer --- A runtime verification tool. In Proceedings of the 6th International Symposium on Artificial Intelligence, Robotics and Automation in Space(ISAIRAS'01). (Montreal, Canada, June 18-20, 2001).  HYPERLINK "http://ieeexplore.ieee.org/search/searchresult.jsp?disp=cit&queryText=%28hessabi%20%20s.%3CIN%3Eau%29&valnm=Hessabi%2C+S.&reqloc%20=others&history=yes" Hessabi, S.,  HYPERLINK "http://ieeexplore.ieee.org/search/searchresult.jsp?disp=cit&queryText=%28%20gharehbaghi%20%20a.%20m.%3CIN%3Eau%29&valnm=+Gharehbaghi%2C+A.M.&reqloc%20=others&history=yes" Gharehbaghi, A., M.,  HYPERLINK "http://ieeexplore.ieee.org/search/searchresult.jsp?disp=cit&queryText=%28%20yaran%20%20b.%20h.%3CIN%3Eau%29&valnm=+Yaran%2C+B.H.&reqloc%20=others&history=yes" Yaran, B., H., and  HYPERLINK "http://ieeexplore.ieee.org/search/searchresult.jsp?disp=cit&queryText=%28%20goudarzi%20%20m.%3CIN%3Eau%29&valnm=+Goudarzi%2C+M.&reqloc%20=others&history=yes" Goudarzi, M. Integrating assertion-based verification into system-level synthesis methodology. In Proceedings of the 16th International Conference on Microelectronics(ICM 2004) (Tunis, Tunisia, December 6-8, 2004). IEEE Press, Catalog 04EX918, New Brunswick, NJ, 2004, 232-235. rstuv}~8 9 ; \ _ ` a ƿvrnrnjfbYS ht_@hJhCJhh8 hh'hth CJOJQJ^JaJhDh CJaJhDh 6CJOJQJaJh 6CJOJQJaJhZyh CJaJh CJaJ hZyh h h h &h/h 5CJ OJQJ\^JaJ &h h 5CJ OJQJ\^JaJ h 5\stuv~ ' 9 $a$gd *gd )gd $a$gd WqWd9 :  " 3 y Vgd$a$^gd%.^gd%. ^gd%.8^8gd%.8^8gd%. 8^8gd%.<gdt$a$gd       ! " 7    !`jlCLT¹¹¹° hw!aJhhrKaJhhIaJ hIaJhh@aJhhB?aJhh=gaJhhaJhhSqBaJhJh5CJhJhCJh h%.@ h/U@ htO@ ht_@ h@2TVg#48_`dhֻֻֻzmzgz h aJjh]UaJjh]UaJ h]aJ hw!aJhh iaJhh#aJh hePUaJ hkJaJhh&aJhh{;aJhhSqBaJhhtBsaJhh8maJhhHaJ hIaJhhHIaJhhaJ&@Kh""#G$T$}%%',16xxxgd7gdy$$x`a$gdygdZ$$x`a$gdZgdJ$$x`a$gdU:x`x\]stu|}~żŏ|uΏŏhuΏb h6<aJj'h1'UaJ hh j['h1'UaJ h1'aJjh1'UaJ h aJj&h]UaJ h]aJjh]UaJhh&-aJhh:paJh mHnHujhhJU hhJhhJaJj}hhJUaJ$KLcdefghop ֺͦ쌂uoi_jh1'UaJ hBGaJ h aJj(h]UaJjh]UaJ h]aJh mHnHujhhZU hhZjU(hhZUaJ$jhhZUaJmHnHuhhZaJjhhZUaJhh(aJhh:paJhh:pH*aJ" !!D"S"""""""""""""""""###$$F$G$S$ʻʲʥ|ujujjuʲʻa]h7hJh:pCJjhhyU hhyj)hhyUaJ$jhhyUaJmHnHuhhyaJjhhyUaJhh iaJ hJaJhh!laJhh:paJh mHnHu hh jh1'UaJjb)h1'UaJ h1'aJ"S$T$}%%%3&4&M&N&O&S&U&n&o&p&t&u&_'i''''''''((((T)U)))++++++,,,,-----w.߿߬~j+h]UaJhhJaJjhh7UaJhh7NHaJji+h]UaJ hJaJj*h]UaJ h aJjo*h]UaJ h]aJjh]UaJh7hh7aJh1w.x.D/E/F/_/`/a/e/f/g/0080<0f000011 1J1L1~111111c2d2}2~222222 3 3 333d3e3334úôôôܮ}jh>*UaJj-h]UaJj]-h]UaJj,h]UaJ h>*aJ hrFmaJhhrFmaJ hJaJ h aJjc,h]UaJjh]UaJ h]aJhh7aJhh7NHaJ044444444Y5Z555555555555666666666:7A7K7V777777788&8?8@8E8F8G8`8пееЏппЉЅЯhh7 hIaJ haJjQ/h]UaJj.h]UaJ h]aJjh]UaJ h>*aJhh7NHaJhh7aJhh>*aJ h aJjh>*UaJjW.h>*UaJ06&8@85;= AApA~AAAAAAAABBB>B%C5CLC & F 8&#$+D/0$gdfu,gdfu,`gdNExgd7x`xx`8a8b8f8g89999::::;3;\;];^;w;x;y;};~;;;;;<<<<==========>5?T?@^@_@@@A A A軮٥ٟٟٙ軌٥ٙٙ hv|&aJj0h]UaJ hxfaJ hLaJhhv|&aJjK0h]UaJ h]aJhh&-aJ haJhh iaJhh7aJ h aJjh]UaJj/h]UaJ3 AAAApA~AAABBB0B1B2B3B5B;B>B?BUBVBfBgBnBoBpB|BBBBB$C%CȽȽȪȝ{tkaWhv|&h76aJhv|&hLy"6aJhv|&hoxaJ hv|&h hv|&h7aJjE1hv|&h1'UaJhv|&h1'aJjhv|&h1'UaJ hv|&hLy"hv|&h mHnHujhv|&hfu,U hv|&hfu,hv|&hfu,aJhv|&hLy"aJhv|&h7aJh7h\ ht\h7h7\ %C)C*C-C.C/C0C1C4C5C9C:C=C>C?C@CACCCFCLCTCUCVCXC^C_CbCcCdCeCoCpCsCvCwC~CCCCCCC٤ꋄyymyhv|&h mHnHujhv|&hfu,U hv|&hfu,hv|&hv|&CJaJ jhv|&hfu,CJaJ j hv|&hfu,CJaJhv|&hkCJaJhv|&hLy"CJaJ hv|&hLy"CJOJQJ^JaJ hv|&hfu,CJOJQJ^JaJhv|&hfu,CJaJhv|&hyvCJaJ)LCvCwCCFFGGH-KNTWW7[U[[gdiv $x`gdivxxgdB $$xa$gdBx`gdfu, 8h&#$+D/0$^hgdv|& & F 8&#$+D/0$gdfu,CCCCCCCCCCCCDDDDDDD1D2DBDCDJDKDLDMDXDjDkDnDsDvDDDDDDD弰姞܅弰啧{lllclhv|&hkaJhv|&h7OJQJ^JaJhv|&h76aJj?2hv|&h1'UaJhv|&hfu,aJhv|&hLy"aJhv|&h7aJhv|&h mHnHu hv|&h hv|&h7aJj1hv|&h1'UaJhv|&h1'aJjhv|&h1'UaJ hv|&hfu, hv|&h{q&DDDDDDD#E(E*E4EFEGEIE[EEEEEEEFFAFLFMFYF[FgFFFFFFFFFFF蕈obj2hhBUaJj1T&J hhBUVaJhhBaJjhhBUaJhch7B*aJphThv|&ht]aJhv|&hVOJQJ^JaJ" jhv|&h7OJQJ^JaJhv|&hLy"aJhv|&hkaJhv|&h76aJhv|&h7aJhv|&h7OJQJ^JaJ&FFFFFFFGGGGRGUGjGmGqGwGGGHHH!HHHHHHHHHHIIKIRIIIIIII7J:Jh1'UaJ h1'aJjh1'UaJhhEaJhh iaJ hLy"aJhhOJQJ^JaJhhaJhhAh mHnHujhhBU hhB-?JDJGJJJJJJJJJKKKKKKKKKK{LLLLLLLLLL1Mj?jFjGjTjUjXjYj\j]j߽߽߽߽߽߽߽߽߽߽߫߫" jhhOJQJ^JaJ" jhhOJQJ^JaJhhH*OJQJ^JaJhhOJQJ^JaJ" jhhOJQJ^JaJC]jdjejkjljnjpjsjtjwjxj{j|jjjjjjjjjjjjjjjjkkk"k#k&k'k*k+k,kQkVkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk" jhhOJQJ^JaJhhaJ" jhhOJQJ^JaJhhH*OJQJ^JaJhhOJQJ^JaJGk.l/lElFlGlNlOlPlRlVlWlZl[l_l`ldlelhlilmlnlwllllllllllllllllll8m?mtmwm'n(nvjh]UaJhh:aJhh6aJhhH*OJQJ^JaJ jhhaJ jhhaJhhOJQJ^JaJh mHnHu hh j*RhivUaJ hivaJjhivUaJhhaJ-wll[ooopppqqOrjrmrrrrrrrrr (`gdK x`gdKxgdKxgdKxgdKgdK & F(&#$+D/0$^gd%.gda(nAnBnCnGnHn[o5p7pppppppq q qqqYq[qqqqqqqqɾɲp^XXSKhhK\ hK\ hKaJ" jhhKOJQJ^JaJ" j hhKOJQJ^JaJhhKOJQJ^JaJhhKaJhKhrhv|&hKPJaJnHtHhCJaJnH tH hh:CJaJhhCJaJhhaJ h aJjh]UaJjRh]UaJ h]aJqqqqqqqqqqqrr$r%rrrrrrrrsssssss1s2s7s8sssss迳ժՓ蓍{{r{nhLy"h mHnHujhhKU hhK hKaJhhKaJh h aJmHnHuh h aJhKOJQJ^JaJ+j$ShhKOJQJU^JaJ%jhhKOJQJU^JaJhhKOJQJ^JaJhhKaJ$rsssxttuuuvwJx7z8z[z}zz{{Q~ (VD^gdK 7$8$H$gdKxgdK xVD^gdKxgdKxVD^`gdK x`gdKgdKsssssOtPtYtZt[t`tatbtxttttttttu%u(u8uIuJuMuuuuuuuuuuuuuuuuuvv-v:vAvDvEvLvlvʸֲֲ߸֮ʘʮhvhKOJQJ^J h!hK hvhKhhKOJQJ^JaJhK hKaJ" jhhKOJQJ^JaJhKOJQJ^JaJhhKaJhhKOJQJ^JaJ" jhhKOJQJ^JaJ4lvmvrvsv|vvvvvvvvvvvuwvwwwwwwwwxxx8xHxJxVxxxyyyyy zz7zwppp hnhKh*hKOJQJ^Jhh(hKOJQJ^JaJhKOJQJ^JaJh7hKOJQJ^JaJ" jhhKOJQJ^JaJhi3hKOJQJ^JaJ hK5hIJUhKOJQJ^J h9hKhK hvhKhvhKOJQJ^J(7z8z@zCzDzEzKzLzOzPzUzYzZzfzgzqzszwz|z}zz{{{{{{ ||Z|^|_|f|l|p||||||||||| }}Q}X}\}h}~}}}}}}$~Գ hKaJhhKOJQJ^JaJhhKaJhKhnhKOJQJ^JaJ" jhhKOJQJ^JaJhKOJQJ^JaJhi3hKOJQJ^JaJ h9hKCJOJQJ^JaJ9$~%~Q~f~g~h~{~~~AZ]^tužvhva hRh@EjThRhLUhRh mHnHu hRh hRhcjShRhLUjhRhLU hRhL hRhk hRh& hRhthRht\hhKCJaJnH tH hKOJQJ^JaJhhKaJhhKOJQJ^JaJQ~g~h~{~'CxzÀـ(3gdtxPgdtgd/gdYgd@Exgdt(&#$+D/0$gdK xVD^gdK(3SdNepz{~׹tf_tXt hRh hRhcjThRhtUjhRhtU hRh&(hRhtOJPJQJ^JaJnHtHhRh&PJaJnHtHhRhtPJaJnHtH hRhthRh mHnHujhRhIU hRhI hRhtOJQJ^JnH tH hRhYOJQJ^JnH tH "Ղւ $)+78ACEFKOSTV[^adehmr|}wwwwwhRhtOJQJ^JhRhyEOJQJ^JhRhdOJQJ^JhRhU!nOJQJ^JhRh>|OJQJ^JhRhtOJQJ^JhRh mHnHu hRh hRhcjUhRhtU hRhtjhRhtU.)CPaʃ% 8^`gdU!n% 8^`gd/% 8^`gd|g% 8^`gdt% 8^`gd>| "',.<@CFJKĄDŽ΄τЄӄ܄ބ߄̲󲥲昋~hRh7OJQJ^JhRh/OJQJ^JhRhyEOJQJ^JhRhdOJQJ^JhRhU!nOJQJ^JhRhB,OJQJ^JhRh>|OJQJ^JhRh|gOJQJ^JhRhtOJQJ^JhRhtOJQJ^J0,CPk% 4IsgdYxPgdtgdtgdt% 8^`gdt% 8^`gdU!n $%'(12;BKLQS_`ekstyĵĠ|||||||eR$hRhtOJPJQJaJnHtH-jhRhtOJPJQJUaJnHtHhRhtPJaJnHtH(hRhtOJPJQJ^JaJnHtH(hRh&OJPJQJ^JaJnHtHhRhS%[PJaJnHtHhRh&PJaJnHtHhRhtCJOJQJ^JhRh mHnHujhRhtU hRht̅ͅԅօׅ $:BFP$һu`QhRhiRPJaJnHtH(hRhiROJPJQJ^JaJnHtHhRhKPJaJnHtHhRhtPJaJnHtH(hRhtOJPJQJ^JaJnHtHhRh mHnHu hRh -jhRhtOJPJQJUaJnHtH$hRhcOJPJQJaJnHtH3jUhRhtOJPJQJUaJnHtH$&ćʇf 28=ފteVhRhRPJaJnHtHhRhcPJaJnHtHhRhdPJaJnHtHhRhrPJaJnHtHhRh&PJaJnHtH hRht hRh&hRhsGPJaJnHtH(hRhtOJPJQJ^JaJnHtHhRhp2PJaJnHtHhRhiRPJaJnHtHhRhtPJaJnHtHsƋ݋#*9Kuƌ܌/>VwgdcgdY؍ٍۍ܍ލߍFJLSUZ[_emnrv|Ž̎䪛wwhhRh/PJaJnHtHhRh>-PJaJnHtH(hRhG OJPJQJ^JaJnHtHhRhG PJaJnHtHhRhcOJQJ^JhRhcCJOJQJ^J hRhRhRh mHnHujhRhcU hRhc(hRhYOJPJQJ^JaJnHtH#GҐ/5{͔":;[Е gdYgdtxPgdtgdt% v^`gdFv#B]^gjsz{~ď 2;FGRUsvѐҐ&HKosܾ;|mmmmmf hRhthRh>-PJaJnHtHhRhWPJaJnHtH(hRhOPOJPJQJ^JaJnHtHhRh&PJaJnHtHhRhG PJaJnHtHhRhtPJaJnHtHhRhv|&PJaJnHtHhRh/PJaJnHtH(hRh/OJPJQJ^JaJnHtH(sǑӑؑ !"-/:@KĒ"-/5ABMTegrsz'+GH^_ͫ+jVhRhtPJUaJnHtH%jhRhtPJUaJnHtH(hRh&OJPJQJ^JaJnHtHhRhtPJnHtHhRh&PJaJnHtH(hRhtOJPJQJ^JaJnHtHhRhtPJaJnHtH1_opwxy{˜Øʘ˘ '78IM޼ˀyl]H]H](hRhtOJPJQJ^JaJnHtHhRh&PJaJnHtHhRhtOJQJ^J hRhRjhRhtU hRht(hRh&OJPJQJ^JaJnHtH(hRhYOJPJQJ^JaJnHtHhRhtPJaJnHtHhRh mHnHu hRh %jhRhtPJUaJnHtHhRhcPJaJnHtH.LMd~ߖEfgx֗!Kd `gdYgdYØFGqǞ 67S]pŸgdLgd]tgdtgdtgdtgdYM[\]qv™ϙЙ.I_̚Κߚś֛ۛݛ~Ŝ̜ٜ %*=ko !%+F񾩾hRhtPJnHtH(hRh@EOJPJQJ^JaJnHtHhRh@EPJaJnHtH(hRhtOJPJQJ^JaJnHtHhRh&PJaJnHtHhRhtPJaJnHtH:FNâŢѢҢQ··—ˆu_PuIu hRh hRhcPJaJnHtH+jVhRhS%[PJUaJnHtH%jhRhS%[PJUaJnHtHhRhS%[PJaJnHtHhRhtOJQJ^J hRhRhRh mHnHujhRhtU hRht$hRh&OJPJQJaJnHtH(hRhLOJPJQJ^JaJnHtHhRhLPJaJnHtHŸן7GHbuà;cۡ 12LrgdtgdLŢR]Ťڤϥp| .(gd%.gd!\xgd!\gd xgd x`xgd>-^gdtgdtxPgdtgdtgdtQRTU]yz{ݣYiŤɤ),RWϥ *:NX\^bop{|Ԧԛ񌈄{hh aJhh}[hRhtOJQJ^JaJhRh>-PJaJnHtH(hRhLOJPJQJ^JaJnHtH(hRhtOJPJQJ^JaJnHtHhRh&PJaJnHtH hRhv|& hRhthRhtPJaJnHtH.Ԧئ/67"%-.&1MNop.~@GH^_abp%&CFսzzzt h?aJhh!\OJQJ^JaJ(hh!\OJPJQJ^JaJnHtHh mHnHujhh!\U hh!\h!\hh!\aJhh OJQJ^JaJhh"aJ h"aJhh iaJh hh aJ h4*iaJ-1=@pQR]""gd2gdMgd}Pxgd!\xgd!\xVD^`gd!\x`gd!\(gd%.PQR]mtD VĵulchhaJhhj5aJhhj56H*aJhhj56aJhh8gsaJhh}PaJhhM6aJhhMaJhh!jaJhhJh!\CJhh iPJaJnHtHhh!\PJaJnHtH h!\\h!\h!\\ h?aJhh!\aJ%ĵȵǶζضHI"X !"Ymoú av۾۴ҪەҕvvvvlhhD@6aJhhD@aJhh6I6H*aJhh6I6aJhh6IaJhh26H*aJhh26aJhhc 6aJhhc NHaJhhMaJhh2aJhhc aJhh6aJhhaJhhMaJ&" PQRSBT!VVWWWWWWWWWW W!W#W $a$gd*gd %gdU:%gd!jgd|(vxƻȻt׼ڼ߼^_`stvw"ϼϪtdjXhhMUaJj WhhMUaJjhhMUaJhh|(OJQJ^JaJhh|(6aJhh|(aJhhMaJhhoaJhh@6aJhhD@aJhh IgaJhhqiaJhhD@6aJhhD@6H*aJ#"#$239:I^`abopPnPPP Q^Qٿ٠ٗ|zpg]hh\V-6aJhh\V-aJhhJ]6aJUhh|(aJhhJ]aJhhQaJhh?aJhh,%%aJhh%6aJhhM6H*aJhhM6aJje\hhMUaJhhMaJjhhMUaJjZhhMUaJ$Leavens, G., T., Poll, E., Clifton, C., Cheon, Y., Ruby, C., Cok, D., Muller, P., Kiniry, J., and Chalin, P. JML Reference Manual. Iowa State University, Ames, IA, 2006. Lee, I., Kannan, S., Kim, M., Sokolsky, O., and Viswanathan, M. Runtime assurance based on formal specifications. In Proceedings of the International Conference on Parallel and Distributed Processing Techniques and Applications(PDPTA99) (Las Vegas, NV, June 28-30, 1999). CSREA Press, ISBN 1-892512-15-7, 279-287, 1999. Pittman, R., N., Lynch, N., L., and Forin, A.  HYPERLINK "http://research.microsoft.com/research/EmbeddedSystems/eMIPS/eMIPSreport1.pdf" eMIPS, A Dynamically Extensible Processor. Technical Report MSR-TR-2006-143, Microsoft Research, Redmond, WA, 2006. Pnueli, A. The temporal logic of programs. In Proceedings of the 18th IEEE Symposium on the Foundations of Computer Science (FOCS-77) (Providence, RI, October 31-November 2, 1977). IEEE Press, New Brunswick, NJ, 1977, 46-57. Prior, A., N. Past, Present and Future. Oxford University Press, Oxford, UK, 1967. Ro_u, G., and Havelund, K. Rewriting-based Techniques for Runtime Verification. In Proceedings of the 16th IEEE Conference on Automated Software Engineering (ASE 01)(Coronado Island, CA, November 26-29, 2005). IEEE Press, New Brunswick, NJ, 2005, 135-143. Tsai, J., J., P., Fang, K.-Y, Chen, H.-Y., Bi, Y.-D. A Noninterference Monitoring and Replay Mechanism for Real-Time Software Testing and Debugging. IEEE Transaction on Software Engineering, 16:8 (August 1990), 897-916.  ADDIN EN.REFLIST       PAGE  Draft for RTAS 2006 Do not redistribute PAGE  VU a1 a2 an PC MU MEMVAL OU VIOLATED SATISFIED MEMADDR INSTR C sPSL C Compiler P2V compiler Verilog executable ^Q_QQQQQQQQQQQQRRvRwRxRRRRSrStSSSSSSSSBTĻֲ~ulcYchhk[6aJhhk[aJhhJ]aJhhoaJhh aJ"j(^hh>76UaJhh>76aJjhh>76UaJhh>7aJhhQaJhhS#aJhh3haJhh\V-aJhh3h6aJhh\V-6aJhh\V-6NHaJBTTUUUUUUUVV V!VVVVVWWWWWWWWWWWWW!W"W$W%W'W(W*WƼƴtlhlhlhlhb^h h 0JhC@jhC@Uh*h5CJOJQJaJh2h OJQJh h*PJaJnHtHhn- hf;h!j h h!jh!jjh!jUhh%)~6aJhh%)~aJhh^aJhhJaJhhqi6H*aJhhqi6aJhhqiaJ$#W$W&W'W(W)W*W3W4W5W8W9W:W;WdWeWnWoWpWqWtWuWvWgdZ$a$gdZ&`#$$a$!$a$ &`#$gdC@!h]h!&`#$*W+W1W2W3W;WcWeWfWlWmWnWpWqWtWuWvWwWxWyWzW{W|W}W~WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWddddŻŻŻҲҪҦh U huCJhJhuCJhJh,%%CJH*hJh,%%CJhC@h,%% h,%%0Jjh,%%0JU h 6h h 0Jjh 0JU?vWwWzW{W~WWWWWWWWWWWWWWWWWWWWWWWWW$a$gdygdZWWWWWWWWdddd $a$gd*$a$gdy Debugging information ddh*h5CJOJQJaJ<00;&PP:pC@/ =!"#$[% ,&P/ =!8"8#$% 9 0&P:p%./ =!8"8#$% P 3 0&P/ =!8"8#$% P 3 0&P/ =!8"8#$% P / 0&P/ =!8"8#$% }DyK _Ref171494989a&Dd*AV/^  C AC"b% C, ch%W.n% C, chPNG  IHDRX(týsRGB pHYs.>IDATx^ UUS͐zLA# 41TQCMKj\LCM1H "bj`aY89Zs5Zz{hkoo/<<5Vm" !]" " " " " B" " " " " # !.WE@D@D@D@D@5N@D@I~?XͬQu5@}wXͬҸj>f֨qLU*9%DD &/Me#v]>M׸j>f֨qLU*9%" " " " " M" !$ЪFD@D@D@D@D 9$DD@D@D@D@DI$ZՈ$PrB4P@JN_&jhU#" " " " "B Y"" " " " "$BMjD@D@D@D@D@C@B(9}!KD@D@D@D@D@D@BIU@rH%/d@H5 H ,h &V5" " " " " ! !%" " " " " M" !$ЪFD@D@D@D@D 9$DD@D@D@D@DI$ZՈ$PrB4P@JN_H:=~k zwW2魒}" $ !nWE@D@DVX>yL3~ӒZ@c H5J@,{ZwUVۮvdP:QMf86T+C+/tȁm$"RB |[;^c9oW;Fj})zߗҔYrI%yJ#":B2," " '0m:qgxJS.#B9tS|˗xȨH+gBkpe`uފzdZĤPD!T>ap[7@D  hJD@D@D`s[G},2툯tH=|J捷4K[NPu?|uH~$/{_YvJ6* 1E֦0s?@96jP*IF@pLl zxh!F|sMzuĂ{cbOB_H8ᷤډh!~/IQ&r&N\\͜U4}u!B~i>\كrFchMiTF * HU LE@D@D@6߷S;2i5r͙O|%`if9ޅQ'd.;g`SYZPÅp{-f2r!afd|^k f{b‘@H5 TwV|Tu3!םՐI^dl} o7_>,}rA˴9ErI/(pm̶ Qd+ZεPUCtwŕ4Ïoۋwv@u "JB6-" " I ;U '֎6yU,%0Tm;mssR;[" -' !." " "b^8bs~\WIE]~kY[iXK!3.Av@_Jh& fV]" " "5^8|rU3^v+ ! X&G!E(HA|-*JiJ#"B Y"" " #jI6 "٩vjqG+BC5;6.\،Yn5 ,\%4PP"(IِQ,șrW 1̎{|gmI)@|=礏 vßj!ϚV<#6rl"lx~#ДLO@B(}$ E@L_9񼥜y˚A+g#,#HOې@ڎ.nCRсg,pվ|nv?c?$ͳһ! 0awβ@Y^:_%_x7_ }XiO8{̆8r7}ol\ڞ|p押XӢ(aW" hkooP(" "P@[ۄ[X^&j<{o.x u$-'t;:cX`*Ϝ~Խfۮ 5Z7_u=5#M#nש+FŸf9WY)etW-ltJ5pv,#CU熽|z ¤nĴYBاs_k"ET)E@N@B($D@Ig*sy_SqSw>hi^+:8&imH.1"vh&{`L4[ RŒ-QRR {#CJ3ͤJZ)H>>b' tecLesծ<s" -#pXĖnsRP oʼn8;]K_i~8c%ېOJ>G!; |l =>64Q2]]ŦX^|ݥ,71H2BL\3"x֕FQ77?UFJRv˜pj$Kq)#Y8aLxE+{x:a'0=@;һoQq${qQX;laN[cmښZ#`8(m."SBtJG?J̇uTqbaS,K?(&c|mGń&(I~ ܑd7v-da!|Tc' Y^rE$sZhh rW j-." UeН*=wi ۻ'^}n;}(kknØf!S"r̡MDbc},isiE<eD v+ 7=[<ҧhPTUJ*" "xB"("ED&ZPwU4ۛēp [B_-DG~ٷmCt% G49Hx =[D2vj{惇|H ,3/xUL_0񞐃haE97m B  ?G XN '%CV&4\rUu4P:(pbnH:.޸tSf:^~':xyYQ.Tl8m^іo\P3:_p"x:Db"M.h`^&ƺ@ H%wg®: lf1y{InݺPS߬!^;O9~ .W$"ÏJ+ i]ϙ`Mf۫Sq I` ܴhl-Cvb5Yo.4"gዏK@ ҈`Q֬}$\d&i^5@ b7{l/W^ye rCC=O6mW$2dk!B tB03Jc|- ,D+57}BBl[ ` (YůN8b뢁$dr/F4LVޭ>Vש:6TZ tmXdǯ|n]`RK F.wXUkC{xy[t 0 6Xz;%f&jqD\xmzSBv׈zC!hGvݿu(=9xؓ`J>۝D ^ ġȔq63x__x-'yѡA~iϙIDU}\w\5vo=u΍j}+K!$;m}9UK9zqm.ZWU#3ƴj\%Vi3fԜ[ȿ`РAժ ʜ5k+f@x0,T[XjDH3o+&>H[TFfxy019]7%%KLBu)Ci0EQ+jj4DӫHCZ0%3KK\~ Tg\3&LRJBO>V-PocbO3Ph<֩Cp_}&쌡Bà[4vE8c,TbV,M D@rN@+B9U4ԊE̝;U!)g=!w*4òw;Xt ^!f|yҥK#8›~ժU .|׃|A U,%}sGXN!NbL,}[ ]0G7.qGl|n.Le ȧ߲9\MIdR;gZ+j<6xK+EL~zÚ![Amn 5w]aIPV/^kE(gfBU\Q9>z^%#$I;l 6;v!hѢ8<_$ڵkY={O6saa tep BM82M}5h+jTj!ЪEUy(KI4s6!P84*~,噟g579f] eIȸ9*GBG@qw68$Gu7 k2k'a@O}eTVDwq)vBTE4Ksi*t%pnz|MeZ-(Ew+hG}mV}" i& !kpZ%jcDZ^Xr֜x# ]v[n⺓X|ij0R& *t/^mC[BM-#ڸ֩d^6E+;a\eծi?tyq0kё˽i}vWޛvIy^ޡvGn@3D)sbxqLbHww ./NQ+ͪC2D@B(C :Ywc-;YӛUU]b۷ovz)Pҥct@}GhDPQ"U#|_~U@v;L&L,W ~/"N@B(G#Ep觻Z6//Vrjb>wa!IPj[1p@O2F%p9.QEϞ= gg/^ex Vbg~q , 38oM!""B)ZL9AKC EauȻ'U ]2! WJ," %6Ē;/n˜.PUR:+x'XvyC2VX^sCn9G`Ɲv#Gum k)U2WD@#c=/!fw)hg9?\H. M@BTϝ;/,w#7ipv]Z8J_W}=(۶a}" ""^xp~q;}lK|־RxU]?"2UD~B3Lb H)Sx-ϙ3g=/ҪTwc%~q>V&O\XC+R\y啿" "FٮSxw\m88 W/Ԟz竡.#~;V4^ D@D@B(K-cǎz!uʬ$\ <8z-MKn: \H߱BWlBO?\r%}1QDQ1':_u?$K;;I&-ʀn%J[;bq=y>._ iN`yN\EX[1KUIUXB({}Z`9h֬Ya#F^ӧW%w/SOF'Fն{U"؂~q>>C&p3Q|ݛ9)7͙7t9zq_=L\h#mOW+2oA 7Y9pqTwȁ*7yǝx!E z~@WOW)-_+Uc |})* H0%7}ރq̙=#)x]̤&ĥp.[!;3DIW\qj2C8㑸*J,!gv-:sh-!G)~ GKL/)YJ_-.^I79uoҗڡį>i k򠢏T@j&MVޞ@dR؎F ek 7;/vkV>5*.ed{ JA 58tPj"Ez?0㉂D,VHmB걜C>E =%-e*(O[2rWLQ0/Y|RsM#&Hb!h [.q>tASR:,}y{G=.U[VKܩlYv~)m.hoiW3o?=+]nIϱZÌw9aYWl2?4M?ssVyWd>B&wΛVN!F1M`uqQ;< >֬Lgm׃ -UB\U*./GB~*'Wj6Z!DE^SUJ8l-‰'?m-u-u 8_uرk'N}'|²%-꟰՛MfBʁ(^Uöwg6o2ʙ|n;4?~q)o77xfEg 9}Uj4+rVycުsZAUUml o˰jˡ!v`,ڪ4BQ0CHڃe[`F{bAgo<ւd%oF"Y锜qU_D\%5..*g38||D$7BU(\MPA4&/wkMU$G`[=囀mΥM$*LM&aPM| ͼtɘX.^.78$cN#횸Vg<qBB /+E'nZ/ >blwU U:ң%OfdbmNp;5*VZ QAMkrB*B <8!1̰OYQ[^.FO<x|C̞$l[=Hݽ N$#4Xk:ʧ4;GGYnO'$w2fP:ʛg}g=~C+ຑC8zPlO4~˿RVmqU>A~0 ʬ̸5L Y` D79 (vv{1}$;EѮ4/>J#1K=O9,`+2?dؤxlgTl ߘ $z$8p'Q`U6xJx&zFJ[Qϥ=b m+}>ѻ{+_4]v]Z|z/rOKkμF˱lEU.P}pՀCqq-􋫡'5OyaU2?y|~Qc+']\\W!t* hY6[n'G(Zxg5eX8c^(ދH +R x2O3.sfc)1=\XX.oNcǽUk{_Q3.W=?,vuUnO#|Hem0N޹SOCK5bQse;hlMk"_PEyMRkwLGϣؖqc#E$iㆫPضdz…U=mz59LBW5|Ǫ<JK"rchdN2,D%h!=l; ")K|Tl ^Gᘇ%z4 &ET#, .D2MI*]m $j\޳Mq܊(olA!Ybb)-II#PX&esEh7[l1sQT>Gxn)/!;uٸ]*}-%_ c#ew y-Yx|QE4m n6Z K(Q-ؓU2d";UW$噈Ґ"޸ӦM8GgRz&O77f 8C̝O<1 >|xtJgn ĉ|E&8;\SnfμjD=CFf s <}(.^pbf$j/km{4XeW  &$l | CJxW /8w$ӷw]B,PopV՝S;މsa `ѴnԑY2xdk!}!vIɡ;ioה\]pS /S)(N#IOW7R;<#Pݎ[ 1 M-6مBARFydbk[ EɌ>7 s{x㎧=^1jw{$1 g޶W +ֈ] BMM<>[;_qsx︳MmGvLnGEOug/;{;.{|_ ^.d>󤷙92aʊОf;V5_)X|@kQ-v |.5UMוYF|iڌ!Xyk1KpH9a " ƨ6ӀDIdAOڣs;䞨%P&)^M^jM1@mǭ?پ}Dx{&iW! Ư2#uJxc^e:j:11 n9EJ;w8z.%f>)FUzF¸oVMÄ'[z/{R?"{.yc.;:GM@<'+{uGH3TW ԉX)Zs!.<㊺+xst|:T `P#&cJXhQCM;v,:'"g N[ӷMh_`F~_{LkTAS'$douA{[Rq\&dQ1X =|/8uLU:ޯ:aRx {',ĎkcmkUVV7XV k;w.અ>+ȏR*Z|?A"< gE_#'TPCKwd6q_D`ro(}QjZoPr`;͢W7E઎(i.:ϊ?!/_w`^[^*OwTR3O@+B d;ŋ/]Zt6uG5LXrR^5՜cǎHЎY&1͌غx x _}o2%U%\=7q:8ñRo iոJ+ ,&B/{KBfte2W5ٜǴj{_I<.PL[-lc3æ 9&3d7Vo”m'Ë3Vuハ`Ӈ(<%a{=:؜fqlm;m2Q5!D+L5>V]y[5ayUkbL@'Q Ac ժqPrKN_8U}E* mJhM9X ;*13uxG,Bma-%̶}MMxoaTi)ת3+R̆C~8U/PL`AX-z^,ZzNrÊR#/ 7-hTM S/i S(@i혬Yk9g>Z D;'={(Wma'V`LU]q;.~kEgzp3lb ѥ}`QKPECرޏi$N, XyǙ_ 2KCAv%(CuITIG" " %`8%@0'"nX35P˚kyǙ_\*$RHhpa;DX@HdTG`Q#wNh=%E!~,},*[`)DTPsZ+|.iL@Bft(" $`A X/߳Vk+=s fa+oڱ㫂ʌa+wGEm3}8sMb̵L h, U" "HљSv{[a ~CW( O 1I|s2)ga9%l};M{!{a/o,2Sd7U<څ@N 5Lޥ[,}buj{KO" y#`K}|4?D.ϧ:xμ{ ?iW8aFpУ>V;L:a'_JwoPoF[UIG" #>>+|n儐kV6KKD@D {$קjB 4҅9lS9R\{|eTbY†RsjSڕ@D@D $ݿjD"~Y t' ހyNֱ"]6;3 qρ$nڙ SJVjy+"  "`mX rQq5!],vՊS1K'&LH< w fq|Zuȁx-xa#oV,Ђqs:齉ȄIzA+Xm,J\ h!C@29wo۫։@& He[(ACz`egc3JUfG[lb%;(]{'ɋIગIld"r6Šsa4.^ b)K 3@5D@@B(6@x1'RJ8F%dGrzB'b"7䝣t ȋIXzdj2y|5)]uJ]Q4 !apNb@[{{{y^D@Dfmm_Ws(YYο:n.VH|5kֺx/1R,pnO0\AhO]\ZheLsP2A\[X֣Pbā³4m.hoWUX7t\YQM_hf76=[dk$`,MKl!j9!YlW+hոhXH5 *"NX8HuwЧ̩{7O& WN1gQPR[X˃2bO wer\ŋH@USEq bE@D@A҉Ñ9㉰&FP8e"R3 Ǿи "7(XXbVr7TM̂:]i eajQct1Rޱ2_rJ@B(f@0fv F]?/Ai~X }c0QfMV! w%Y;HiA C!c,6@HeO"UvBQ3@׹O,ЊPAvb/;* M|n}{\>~z'<7\YD <֨h-{۶\[S5bYΗhQeq/U<.*GD ^BTi" " I! Ӯ>|Ż6zFR;8󭖸E)GS?GƷ AKtț?=~\h 9bFX ~hn&H ~p6FZ!i$ !^" " "2Cüq@N5& }^g '"ث,dO֔:p7}`/%R'(ϬtdPfR fgnceέ,Y~qA+UvAoLmGLaNh9dQj>q:D@J;JŹr?ugb~l[Nr.Sz.{ޖtdPzSmfzǙX)8gУv`VǷOlabyӆ /ugJEcmE5*@ H5jtpqm_lQ=/.=w-8Z`!yj͈!Mǎ&' W+"rB- " " #`qg#_&ZeolATxۉ"ouRS<^We{Uz鮾C6&eh4 FV" " "Ag|\9lôi=PjmIW3 l-]u ?ǏRA䯺D@D@% !/O&$`$ϟw}>;'g}Gq#kM>@[Y;buΝKțcǖ"xwΚ5d'ҠͲ:aB\}GhATsA9h3gδ\H _veD>B9|>|8ېfX'Ǟ~ه:L];G5BS5_nP*VD@D@C@B9UdSO=E{|no4 _fM\'p2AXԙCH+ "zO+nFg^Oڗ_}!W-~ O⡟?vУ;t@ Hd[ xnݺq=L e^vU&S7zh2Z9zkZ|{^:~q{; dBeh)" "kB~5^j#`"wޥϙ3_>N;U_z饬/3$^{=R(أ.'8?Co]{ۦ^>l~.t" " "mB_N' r[tSJ}%h_ &9<4]sg|6o|xvnEC]" " "[Bz5\j$`;|DJS('=hРPg9N_Tw9x͵WXQch>v=eO;mo"M7ݞWD@D@& !T52eXt)U)gMq:'rwXر#p8 IѮv qDk»=}X{ @F@ul~W*[hL94ϺuYOZ;)]2Yb§ygѮ9Ǣ]Q?zح1" " $ !nWEVX׮;|4b Jdm.hoJq|Tc4Z5B Y") PQҰO wJ{fΜɏNp vvP"6B-F8ץm;_zͻem^_(,c 7|휮n? L5ݹӇV[Sֺ2EWuWM`nY%z^Y%"  pxV*=l$`Ǘvܹsݯ`QDx˴\e,آ$?Abիss̤Ij3cժm\"#q!W2 7Q$ !K)LǗ6!w;g϶,n7ݝкJ)䰊b 7n!j/~W]uŋdL~] _/*-.KWq.`%huN@ =ܳ;ZK\7x .Jz͘1!6zeXQ;찃yӥ"g1͟?H 6;!ʄ#OQӜWS^4kƛKy_ݹVillN$Blи^FoPtVJ)" 5Xd?{g?|e!-dVaJ %גoU(j\bYB(F*JD@6X|C=d+?]vu-@TrV!-^o|485h\7oƀF`ʕNP(>oTaV!-KiWIڦq޾r a(<Xz?|Os#ҬBZ(Wc"j\AQe h\iL !qx{ ?LdbV!-oN#49oh\˴WBHAD@p8 85FU=HYWTiF@J#K@BHAD@h׶OƢ]3jUH =y5r-hU 'J dh?,8 []g] iDm+Ӹj%֭qݾeBSN,xq,52yO,ìBZ(V!WϤF*)=0;$!2GDs8~b۬BZ(J!WYdC*Y$k$EZJ`m%sKMhvݺu>g+?99'1*bq>Lb 4+IB(1]!CD@K`ƌgϾ[mkkȬBZ(h\KPh\i\'o$" $0tPL>=ͯ U`P/LcPKm)WJ h\nU;( iE( D@ZCW~sΕ_\hYѝ;o*I;`2׸Jf$*%Gd@aԩÆ k^I vfUmܔ<+$"R2l Rܞ{yM7ey1y 3X>r1u\‹ѸJx Hjk&L.R$PR{Fv$رc͛p„%sD@D@D@j! !T 5'ロ#V WE@D@2F@B(c戀4@ݿoYuhj fU""Ç_rC=" " "SB9x5[DfzE!j.AE@D@D@ZN@B] D@RFk׮8ȝ{)[技xHi8@BӧO:2$P2AVIL|.{E@D@D@$4D@D;wF M#" " "jB/"ZիɓS." " % !߾WE@'pUW~/BEfj&m%"5L:u*G_>kmS{D@D@D $2ݽj@ C_j@[{{{l %8E7.fi[t~Uߩ[lVo,O;W $q~IUWif/!LڪKD &4lذ_8eK<)+gM.tnꭺ;fΤѽzuOh\i$4U#f?>mSD@Di~{"p AVi*ڵ{3u,*l^ j8DTqnȜW6H{WE駟κмy2jVfXaK^RA@%qn^[5:5}SK^OydBazpJ`ВY{YCe} 5]"qnVk5E:׫˒ŧ{M BmmVIE{d$]z|?I3,.{Yq)k[u9vNTV夅UZz*]vj\mm㼵5U@?w׿?jQ)hK>rRAY1ڥqRUG@:^K-!>WE@LIWNWf8TPd*׸JE7HuY3 j&m%" ]vwո3O8q-rgW0)Q4B9l5UDi>wG7i56xRAdרqIuWi-!`*^D piM+0zRAu4MxZƕGF4V[mum76!'RAqNɀIWxZSOY4H/Ot6!-w|Zq(Ք^@5TQicBc?4R+" )$q?^-@W5^ah^@5$A #L-t}TJ'"  `rg|s l[q7QW$qqjHAmRAV g!_ MaSyn!;qNnA5Z[eIB !#U/"= `l]6[HՅ6י5r kUF+8Z.!$JD@ ?:/rtB*Hиrиjh]IxzT|1J5[HR6#qWZE-B5 !*:XIE@D`וCMs坻;Ip' WJ@㪡xs[UuZ ǔ!RFm[EizH.u BeYXeE4(h\i4U#ܢ{==Y#:uP6}𪅐ւ7*VD AmWXBw =ފߪ YB*cIc{|mMᄧ7*,'" 4X +*u~/" Qx[?=n_ؾp'  k,۟م?lRT>-\ݕ V b c,ZHײGJ1ѝ}覮Yb/o,d" "dBA!T!&U'"V(AXI' S 屶yCY{gP2 +fc*9dQތR%" i'BQ]㤂>d@\ .W(L(VaTɤ"҂9 z;u/ŭG W %H,Euk 0招h8 PP"4< PỬGBcH8F_qTjhs4c'cY fp!ggUH_\>>^_y;7m/ .ZC7}XHX)ovtJ)" "+mBSԧzi-(?J[-//)K'Q\Vjp/CWD@F1Z(Lu^l-RAIGD6a q |vpuڧ>nXd?(c;}? =|5yůą 1pEAZ^ Vr“ C(96 f ,nZ\9J " i'wˠcaBhV]&|(U'!](*V ~X-_&bT+hHJ!1 zX/´7a%" "P&(]tJcGK AXelM 6hD]]b_!b^#QL"/v R 0TбQ(C B!-#e%"w* \Z-b- ۵joYiCnk_M/vQs"ҫ9 6!R[)&K&39{dբ?u@4F0\ i\ 05VD,!ׂRM&|kj7k=[Lu[K@AVX6.pg4"YtzMܽJQmB!.-x T" " SA4wBICD ]v`dϲ !8L .M.w: ;p}-hdX O0. mi\lj!Z43oDLJͺ4PAI Q'lօaW0rtPUh U[{{X[ۄc|7Yq)ξ3[ $XX(릘Ě DB+vSV%" " $Թmr{;Y7]\\BesU" %ЗՅ'D@D@DB *,-ԀV" "PBBa@>4Q !$-V$VmɅ\'2DD@DQhE=B/u|gɆB,hU[UEJ19Є4 J ih CE'U#+5`5jl EawI-6>h kVlJLe45=iN_ydֈN?qM"Вq5h&5R4@KU[ M@sP]ӟt£Iռ=/w!* kk UJ|eGqfƌhոm?܋֬^1jhոlиv6uH> sۏ9b|Mj 5=B"jol0MO^+UZ)-`([nFB tq3jUK7U}uru*V.,-k![BTMZ>~<+B?g,hLи`@9 䭣f9RTk?r2&Nx__z^!kNȸܷG*C Q%P=r*(!$-pS)q(p>Hθҵ !u^>;"cNθ؜7G* "jC PAʹP,=BDzBSU#9SNwMK]jIW)+ : +C]}SeSufkn/Ե{l@ԧPJO渺jUSL]|EQHJ Q+Z)_@(B/$AailBB/t4@uOi&wOjKbE-tgm OuWÖQB/|- @ںKM[ҵǹU 䏫 Mئ6=Wݗ"W))S+ p^)}^kY ߺcVr=JSy[L.->LbWׯ?O{Z={$l HŸRU,Ego#BxR4djUwǞ:ї%%-qUU7.q?X( /H qIq4Ry 6=t\9{%b-*lK ]n5'6TV i\%f4Đ Sn'5 @UMVиj,߼W^wpE(` jUz\6ÏFy:iWH[psHJ,L畺OH@B("VaI {ܥw\=咓/vw&W *6и@HER4@B֑q}箣9;?H.߼ZqNKA5RI21=$WOi ӿvWV>4y$;*XsoUL@B(f*AjP%̌ۮEoK0q>KCS5K1e$Ra5H3`'O3_u̸GǝQNn)NU@fƕz4Q42&2rgc8jE[BD{=g{*y_C6ϭ޸6;?Cnmy۳7ZT@@Jà>[BJeLj]6Sd#V\qs D #s7ry nU;'ŦI5.W@m:L| B"" " "PPEDJ " !п~{?ePZh I:|O+SJHG" "`ЖS/} @B" "5}{=>ܞ=" " " X$H O-\\b,!" " ",BY#"  7fԥSֿOj+|B,TU@He7Dq' =h3FD@D@DK@BHAD@I\.ee*:HOYE@D NoJ2MD@D@M@BU4SřB]wUŸܜzUP*IF@-|?r۸_'vVj!<" " % !ݾUD@DPMOz{7p$4D@D pS-$"RBJO" " " " "  HEF" " " " " Y! !T;D@D@D@D@D@"J E@D@D@D@D@B@B(+=vD& !dPVzRL@B(2*%  !" " " " "PdTJ(" " " " "BYICD@D@D@D@D 2 ȨPD@D@D@D@D +$ғj@dBQ)@VHe'$"RBJO" " " " "  HEF" " " " " Y! !T;D@D@D@D@D@"J E@D@D@D@D@B@B(+=vD& !dPVzRL@B(2*%  !" " " " "PdTJ(" " " " "BYICD@D@D@D@D 2 ȨPD@D@D@D@D +$ғj@dBPMdYH8oZ,4&ymиJ^"{U䈈Z7L㵿ӍU" "? MLK[·o');^CC(S8由˼ xmZVz5ݿ o{Wċ4 o4؀nkU\U{bM>=XBr,{}٥$Ǥ<[R#f?f" ' !>jY`Ӣ{,T_|4c&_ۂ{+9uy;)28æ}+F$+Eg&"vBiOP h\i,@ r`'8ekn.zن։P<>})>!sݥ!* Y虵|Ob=x˷ڃuy`[ zɛ`X-o` ϣ~UIJWM]]'8؈ǔv N07,sG?B~;mKUǓ-+{%Xu2z dL6B6?&ye?k=/zϴ{^g/\' 2>dԜ:f=S8}:Xj1pY|0~%c* 6xwKu=[D VexR7fH4a44ݥӓojO~w%<F|sx*-zG\+~:<x>JiA8~~i;ܷwW?ugzD‘a2PR5K;\xwXAyK+(L}Hք%G?Vu͖xٛ<)aOD,"7+7$B3`jn9[2oRlBJᭇ3sf LsIpy}&ٴ)[-/r0=eR[sKu*KWx>8󋳿5Lٿ*s^GãN,݊R獷ڢ 2/}ƶoQ|Oܤv&!FP+K#?g-X~gb㵪Pl;u}ݶ9״bv~Ou f9p7}*^{RVq\z ͉ .nA]mU}o;-ri,B(=0TȒۻcoN54OR{u߹8|㪔_\|xSBa^w@iPrʤ'^L" ܦ|M<ӽr $!OCB{z8 Z\Qi\e{ 4u4s m 8*Wxы}+зFpVE|qW?ÞP}{|μz@27Cѽ4R;*" ! ![_0řݜxػR1[pX۱U2M@*ݛ-F=aF[0R7) mmihcV;J9-2PgqKIj5Gӊ\ˬsB+"P3 хgĽM "@ m mzMvfƷmb^_b`'ɩ1WTa8<,Wz>4m>Ѣ֨1Q+ڣowȕsRbrmu%C>.;b؊J/JJ#"rBtƺ+9^xX+Z/Swy/S/.Wl[I/ʜr٩vr LqU'@e-/{=m7Vۺ͓i)c^ r' [ݞh(K;E(gj6~TZ1m|-_^kb"sTTzS$R ƺtWPbï,713i; ${fSpba˜Wg{G@JC\(j^ػBv3O!uRXvBabr즻xywAݞI|#Ȏb^֖DD08 α e @BބF{o2*_~s>XW^^oTՉq%Bx qE !;ߚSb#5맿J|m>VƶF x)==g'y1KF.퉙{-SwCuu7bi1.@ VDL^Ku;PҪ:Bc؟@xSc70\-L^?P?jRhkoom1hpɅ56UbK~? L3|'7蚵yXr8(S-D/X,%/ [PU` ~"*1WqPT~WY6_琌⢑qUJ SYKE9&f$*? !U$J " " "ku /C'VG|}ZYs`\w67X߻E^9Y,2$em))|^2i֐o mPV{V3Tvk]mkzf;?#B!q3?=jw |"[SK G\͓$`ů"1yvEH29dprq3HE!.e2};[1^ a(6+amKs|GܢsX"&rǸs\k[]VqӢFyE,"%iAJ+_9D"1=cL[!{r7L؝2IIO !lDU,kyf"Q{[$bGE@D@D@@L|}2m}(ԆLI#nY-qG]dȚҫ3yg"!۾{pgkAھ^B("(% EϬ"pcŻ2c L 9zCB*Z2|}%liZ,ǎ %[ fkD)s#oI H@B""%0([ao%}DAֈbX ~ Ƈ#YkE#:ODsj(Ͳ;ےt/*jv$djU)" " " " œy :ǷD7_\8 zԢ*.%B Xx:B~n@$!`BjKP$*"Rؖ<2(!"\{/;;u wؖTjJ,ςǕ"$tCV>l|%ۄ~[mCr›:anLJb!!;R(" i%ފ'mnakvH8# .[#^řl' ?ق'KE|̩Ai?3xWd 2Wb%!(ˆV<fAmS3٩\U3"şIefY2 ڱ Z>l-Kr5ЌBܬ7?lOmkk&ՐQYC tS3uXU[-iqka.,sNx hO9>WoF=}-'DH',K: /AYw7kBhÀW7;|f'Nn_EH#~'-..`vp@J$#;zwrIAW;Y\2UqVEoj H3(9Ws𝪵7w I&p; OmxЈM ٖ.0se1K|IU5U"Z`LlowjI`Qc0)!%yj"mǭ?3;p3}dL|޵=X/ ?9 3%b-n)dxk@"pb3$B "2dŒڋ>m [U,UG4ު% !T-f5Q[2M&ѩqS՜YRxïOKkEa}Du8Hz#t)–pGg$2p{ltRk$`ˆl#DgQXɈKD@@@B(1Gzz\31WW:[2ғ⿫dʫ5ϒpJo2lCg o,`{ ah%3)RkǶwWt-Cq,]jU[[6wxm-D[;DْIT5Ŏv!>s'ɝbaƮ30cx`TqXb1O21aySa jUWQ :Êsb~IőN]lTNy6wօX+Z">yec;ly'o3G=Ni+qYnBd\dseAX\ e rԪˎFt%iuVBC&Dy[^`=lgۜ?dh"$OH "# aŌМ|_ko)w8I-xbRmd'^~Ёdso5hhhL+{xڜrۦs lo9.6GߖSƌR&Ro2s7J-3K\̏8`$8uh#.ƒ/fmZNlh`Ȅ<(?p;q}XՓG]?d6Y_w)?!RvTr2@DBЋIad^wwv 2әJ](EI_\Y,,-)x]7<9#j.1Bf{#6fc;m{mW#3;&4UޘFvoC_7mhJ* m +*»'5>.,fMG^oC Q'cD~B3Po|F.vbc 5UW8K F`ūZW*<"Y96_ᦋfіʌI1S/r |~ےkmiW Jݲ~{m'U[yQFysl Fva۶β)BZ޿2@2L@B(YkGk>t4Jݲ,ϑ`౥"=.N"^A%$?l-9Z ~[q՚rxpp됦uaP|7:_ ^5`/ ["q4|"""spjh X֎BI?{j;Ufz8wy EN|,}dD4q`01f}8ܖfrLvX(q`<xusEvYS;8^p<9>ڇ 1N8o3)@ H ;lG+:^&4E2 e r*9] ym,-w9gSVVu{_!`l#Q>O.gXgTp󥆮{1U UQ\S]hlHG't(">?+d9EĮHrrv7r' ʯ,.JDWR7 {O$9ƍ#O~}5[kyJik}LEK6>ƒƗ_]L|ӿ(jKC.󟞅(%0}."6}G~;WlB΃3 flELZto >QhFiNiޯkDy+1ʏ+]?[-7 uB.#ٺm omÌ[l.ϿENm;m$fxb')MJ[W'i3*G ;"fFYsEê#ȹώ [8>Bu,~K-F[{Vh5?cs:`>㕯c~ijx.#KAFLD*iMxR{3mu*4fR=UEOv/ƻAt Fs>Du~ ;s!N5'U=+Fиj<׈ڢ{ƹZY[m?!|vP,S^_GNv>翢X{8z1I;SiŠ4Z?Uk\es[4dՍQooNPC2!υV5Jҭ"z5ݿjUg^ oB&Z)dBbyH'32dU:3AMѸJPgd tfB&[)dBb KRodeZqȎ-W\LȻ* _roUZO@/ZY@*6i\hUzuY3~{hJ&^m޿ {_HJ D  BIi%qU-1B@* %U~چ%ΰ{!T((dBU˰w~q@9.Z*ǝk\5nO B&4*7eXn ոj*TqnjC5mЈVPG֌?iIٓVz֞KWZq֞KW(2!JЃ×o/er3fw/O=$4яIkUz$h\/I}"4@Bhv7p)D"Ŭ? GJD"UdTJX*`)idWQ%5C'ղ8*ts̮qrUYy&~L>ۧ ~nv5M<i\壟Jfmn?$BWPCvYJ[LW߱[zTWItۥqKWIv: % [>"`qLTC41F*]M}G<  –7=x cE)k(ZWS(4PRj h\UK,?xgO=w ݤ Lb}`@i7W 5r nU7ӷk[7Vבw!0 _2՝iUb"Sh\e;tE&֞?U9-&!U55X{(i\ߒnU{(i\6zC#-M҄\ !I2D&"Jɪ"qU.%H@*"(%UU8?a[{{'&nӈ6>ƒj͸y}]Iv#]/kP=Re_UYFXGFw,oM w? "4Q h\E%tиV&׈ںw.Y|ms 5QK}f 2@ {_4m.(sOGɥ4%@~] RWRŤ8CodւRUи G$qUE@*\JMwek6>B(q D*WteFJQ=)GeW)E4g `*&!5I^ѩDqIqWDqh\$Z)LB? %L@*3R h\UL9*иH)'qU=[\ -o{;'pʤkuY* ָJE7HuY* ָJE7U47{WLto^ʭi^{kոz}WZ5٧oW +BHar5Xk(qۮoh57k\es&:.B}|al \>2o{kmP#q>MB4 ٳA*}ھG[6RU+(AU %.Iે(K h\ŎTB@Jà4Aey@+MBB KZ@?& WIlأq~LZ+4#[0LʝZX_¯D|44$A@TUƕ@#h\5jK0LBNPjHܭ%d@ H5jh1 wh> 3W" " " " " -& !P" " " " " ' !|QD@D@D@D@D$Z^D@D@D@D@DbBqɥ>[t~LɅj/fQD@D@D@D@D bBn;j]+}[1 -j.YE@D@D@D@D@F f!ԭ6v<֟0WNEB]بZT@ , Qc/j@ 4D5JI5p$h 8$PƤ*" " " "  'p!TjP" " " " ";MB!I܍F5XD@D@D@D@DB(jR)rrH(PhkooU6aufZbۗNxt9q{?XʹYu5@N[`&٭j:uuxLtk/иJfdӪWلV%ЪWWowV6[w_V][b>[~"PMB(nHm `vi gFϥDtck1Q"A!2׸P" " " " " "P(Hi䎀P\  u," " " " " !1 " " " " ";Br5XD@D@D@D@D@BHc@D@D@D@D@D w$rjƀ@H` !]" " " " " B" " " " " # !.WE@D@D@D@D@$4D@D@D@D@D@rG@B(w]Hi 䎀P\  u," " " " " !1 " " " " ";Br5XD@D@D@D@D@BHc@D@D@D@D@D w$rjƀ@H` !]" " " " " B" " " " " # !.WE@D@D@D@D@$4D@D@D@D@D@rG@B(w]Hi 䎀P\  u," " " " " !1 " " " " ";Br5XD@D@D@D@D@BHc@D@D@D@D@D w$rjƀ4oyxρ0%:91z68 JMWTXا6^0 ĕؚS5w:PQ )@ Hd|+xg$uw=});nVx vɗb֢E@D@D@I@B(VXPsW~2G[/|U$N* ^J*" " "P% *)۱RX>YrYdX{dl@rWϺKpOT,G D@D@D@DB5@Sh,~|ǐ䭆n+n{ _޻S\9>'7( &A{XyNQ6<4%!1A =V{-$+|DXT Hu2*wJ lZ cf4 Ln+nu w:ux~Dq; d(Acj! YNFo[>tOd#=ؕyG{9ˏ/6a^-D9oeAې2ILV,(ʥ_w,M6шrHvuz43ɎۯD" " " I$ !^M&P&kuBpoHH>h :Ɂ\a!; d7\so9VEQ ~r_;yΛ@^s÷ŻpǕCWv K'}OIL|{LW`̳6Q̛gq%w?D@D@D@Dq$V%~~]HVK''[L05r7]h$9E!x f~?i( ޺pJxɼ\pEÇץ}N<4|)_~!g[wI}0s+ΟKd$ osç_:oLI@.6Y vɗ%ݜW󒲛f6rJA#ab4Dk$vuEZм6LҢeJU&(O#c RE%Pfxn*V%?wx  ( P﨣2 ,D-J#"P3 )I6]:b>k^#=U;g;`MdFzOR+? QV쉔5>ES} ] @qkLrW+`Ci7-ʏ㭈,"`+"ٷKooZAO>IeY;ÃN $ǽ >l8C2#'ʫc8t-}gohFZDLD B`T!"$3kGKΛemJxl.] $>Ÿ+9$4^WW2ϹΈRo=ij'M]V-<)v|o%3 O9B0o$%{E(dCJL=voWDs JP`/[K+3q ÀI@G GQ܁-], fy)Ic}vDd64N:A7 <|{x,z%ELeFfkReX :Ã[/}MnΘa䐀ABet^m:8)c<;Q{%!#04qE3| xHRN0<$IObC@DNBuTv3Wݡ<k8&F\ޒd BhY?`9yOąf/=M~^K.+o>(}i0.A^i+ qƐLP+Mn+|n ³EMC3܌c], u(f9ak`,1 0_˞4K#~?k $HߛgӛA Xy.%+a mn/ 9>TREJ "P' :*F9?'wmf ݬ)m :ދ46!U,ĦMRkq=Id6pW}0qPZNJ|ElIvja:BձDQ֭0uyn^M8|bc?窦4U?:|C6,^} _rmţq4<\  b byzCg3Cx¾L+;|&%&cB-&v35*l׏߶-dvw$+njޚu5 =Rsȍɰ#aA =^uc}#6 Fl CGePGFA9--e%G諭-yP/yKПRml;O*gbOa>6˷?jY0ISއI*j!8"V4'A伍"t󋈼l1e "PPEDJ  _j /S 6b}."}fŻ̎yuyoRr'!zne md˻6H!vǼ 8Y+cّCQ+*^6bsnLڂ"Gs`weBW] "P|\ }Ͳ3Szb N(7,̺HCm3{)ΏSP|ejO]D-ؓf΀ =< L2)6E&0kV,9K#  o+]|eݠd˜d?80@|σ14eerU)xtH vmmVI23:M.A1O(?`"D3O!^ۣ xOA>% Ԉ;ý^E%bk;qBKpIL5a!v8,;?8ͤAA&% )8&_ehS[;Kp2dFToe?7.E,܍_ݺ9KhՙۀYJQ[d$^"ՍW " & !l/cs5o,~ne3ozkovlP*VD@J`iImjRE7>]" !$4,D wkb((rȡ{Ê.: 4ߩV"L(&RTdJ(" us|qPx¬ :ΝXq` (^[W,"|B#YקɆ^>W]qC=J7[M~EMp桧 /S:j_Hke&5GI/7vx׷U8tyDGS|&: u2ۢdYfVlbQȭeCl:l+:'\~0~&wH@}v+YN(t/ >o17<_9, s{4]>F!>Mj&7%" 1{uݮ@ªC /, 88bۊtdPzSmi%5g,4ًBL2ĝqmE׎œwތݴcQ&tl?A ~$`;"W+s.<ÙYHdH뀈&T&Ń[^pK„[ ( Xs4"BH5/}2!]>n|Ϛ29.qsE0<.;eoGɠRVxJߓriܝ&d%{\EotE9qH) vN69dk8h?u3;C7 ctLP,,x—\pXm:g} BFq!Ly|4NDחHD@ tqE8{~q7suPzK&G-j~t?M_ z #-UCxymKO}=wyWw)^_E@D ~87(| +7j!BDFB5S6!ke3C&Y- a wZe 4U(T@& tߩ87ªyEǹOz_qd( t Yjfy2g y#r2g/o_:MJH H`-sOŢ5 '/:΍p߼e(@H5jJ2m n3>gN7Y!O=b!ph1>cw'nX"d6 ދsŮ.oB4uËhRl8wYSpۯGsl(59}}jDD@J yo96>dP;.2ϻ?m&]:sma?p⦷o@J#p\(L;|c.v N($ A0Nr17s' *<8g-8e&-!m1-F@UX) *(kIŐwTgyh(ʴUTysו?g'D{׏9O "duP=G~|/Bd17v=vǪfɔء 71gC."`m[Z6,Iu-;k}ϺUfJ/[<ϙ?r,7{^quӊZg]K=x/AW@&#K{8/ix@  E{>}q"2AyUxO+KCl8DNŸ '|OE!ds[9ܴsW@#w<H4^= O+:9tܶ7:-tfMXUX̒7*'i#MX8sN=[T &"!Ь I@U$>T Cv )"" "?ԋ /_PԩCNP z0|ɬPȄH٧m eO>6jPo;lu|NeÏ8|qw{# 6xֈk{|֍?QuUe&,B##}oycHڥ![>Ֆ ՜qQo-K+Be~v=Dqh/(|_K`P+BbjtpE(BQzi=v/]~QW{W~9^9%[ҿO{ppB  BL!pPEaԋTI5/Tcq_s-{]w/6CxA ëo5qs^7nT3ӣ^j\-/9ŮqЏcxuG8Kyk+)KʛZwW}#ciu *$ jikӊjUg_5SG>mn{.R([Q(Fx\} ?QWS.3F&SҦ&jÏݲ?ͻY`(^-ՕbdnGh5?Xjoacc?i9cѤY&[Ri߶༑4=FrMj#5f#~闞.,.>Y( (& /4ɌTC-n~uTń&7M)^l&|;t١R15B_K/4lZF?ҳ.7 KKW^v6Du#_+~-qOǫOƃ!:uT(SP8Gy6s fW1׋!Kw/3 1_Mt ^0jd!mꅐB?Œlrnr卐xh~'b;a\dNZzCw-Aʍn^59?¤BBanܔBaBaX0P}>& ,SR;b,Kj\=5&$ov@B& Xݻq⍥3rO >?wj/uO=-]-݆^Q TňkgG9"dhU[ҋ@am% JG?\0)i}BaL0PxP\(/z -\=ǥdJ2bL3"ҦO|ۅv{`^˼RsNi-SRy,Vx)cscd4MDK8Ao WϹΔk Fz=U|¦ǎC<萃 6ƱFYE sʰEe7o>{9Ί}c5nem=}͜bl@ǧ +mct@)j\Ð'}VnŸvz wqPX_(ta`p%WԸHbC rm6K\Cdʄs`ϱL7s 6K@Ν9=& BP J^dV}ʂw9D#cрZd22b]z7?.`@{ׅ f ,s*yMI3w1F$a?hhvA缛N?txE6(e-Zȕ ޿)<>`Xƺdƺa.luHmLoQ[, _"-DvKI_ꯔY;|ɬXs  6W8}9| YL 4\e*xy o6`jҭ uƯ| r) vꙧԎ\)+j|X;b}EJ֔u( V;i(%O d~pUoim ("137) =,gMup~|ۏ)#M6cHƜȹwfx YBV>G7"]w|brپ{tXdq[?3ope S{@U*6k9'o0X7w̴uߞ+][VewLX~(R[t—eå-1Kh1qER5TJLNh qL_P83zQ쾟_c'zKØͲ4Tʟ_6- -<4_462RNg#Ow&H\|ymW#^yбcGKo'ƺW,"y\P;}oSZN/q9߯^k$\*ؖ\BX e֘C=2q k&c5߇kC?y|w50^9O_ZC{EaԛuPQ[ 2K^RٛTP^`?~u]ݷc~bJR9Ib\<\_46v87[{#I.^;7wL yv(jpywH~W(؛wMi`b+ӻ`֚s[S nqeP@.V~&M_2wTX Z+*(ͫg'sa䶚 #PYJAICc2ҟjG->қ>)g+5]FC{\Uoҵ7NƏgx?V2gǠ7 &΁؂a(T G#>'<-1! ^_vK|Ԑ|-0{}f^vm[bH hGSkɞF\B V,ضVW>m֪A![YTr&4nL:b"[Jÿʶ&z[k_i 3c8u/=~Mm.>bp錟q=luD t*LB?\awA~(omnv\Vۜ1眪\J_>SVᴙ/BOA!xMqqL@T/`Ud]w$tbׅg4day@[4Ȱښ\m u|:iYa)O[ՁtWʬ ק{#~ǹ=R8wqS'OͶ [DLmpYAnmqG1וvQ g] 14]e(GME{5o}̀nr[fduZ(kB2kz04=uآy^Gd*كLʴ?_.N6԰ښ\`sQ>~?$$3`B&_tYPїis~aGs>}+x{^^tEss6l  >^6"x(Eg8l'YH4J[2GGrToW^ϊ $cc7`i3^ hՕ5!uƫQv6Xd_("DQ& y8G).45,&&$IHnd2LHWW_vi篚tswκ.pe]Xgqn5*zj 4ł1 =S?sgv W[^D\sH˶rS yHLzyA"& 7Q s6BLwEt cl5{ 8|@leMޡ`zwX澎$1ǔeGQvEd5,$j৫_X[[cƌqQ^侬8e-7fLs&4~w8# lnYjQ_}{6Kd-0weŝnⷦܜ@B\_Y#cPcJm $VLyˤ)Lfpu^!c׭yi8Ff;7ԩ̫pd֗ڟiMkX9:Ih lv2>c"\,ӂQL ճWoI[B^D"7+}p|ry[hy'6kX"Ih!U-q+]͟=tTB0sy78wӔq#82"Ƕr1!$̕Dz(;!X!C!x!Ic[GYv^{$2Nqd7@w3R8a1Ʒ@2y!m]qmYFolyK`F=novWk]\DP~ٌ7P[w ߼f޼ێD\l^mJ5c5,G%Lֹmr+Ƈy'RB/̚1^(& R׸PXآ$d6l(<)_+ۊ\<hԸo~5`\}a]3p#<7U(qޔY"S`Q BήrJUotAN#B N]m#2Z>n%`lDk8cbLSay.Ja2ܹIlC;x-I4R69͍%'@O*IesIܕ|{8wި8첳"ԬUl P,s$t0[f! .ڝ4 #m"7+<.U-вpg~w(Iguӿq{Z~I?>CzүwIWOzf35"@WؽimgN҈poJG=v.BfC} $po&R;l[NѢ>Rrf~0D m,7]niRjY^f7Wˣi{=7uкB +B[ 9u^ZPΆr+nTx*2w[[9%Ouko,$̟d+>2V[JK<{+BIB(F](4BrI;ޡ8!d%\i|&-׉@|E),"$UvuK{~J=?Wjy:W˻ [.LB,܏gxkKq{g܄&qf#q9(>a+]tk>~1=GnԉO4qp?3zؓwX~}~P PmHꯆ`o Ps~ק{ [LĹv?~tӏAWsʘ[Bz5\D }G SmuV*L͟=Yp;~^bsuE^)&# (XBDPJD$` IljF8uOc6r)LBDˈ+W-CEA%'@q̚5?LZ²Gzs|c爯YjmEk[ !ԂNmbMBTFpC_}wF! / Q*@c^zHFLi'Y"o:;Ǟ=REfжf>W}O aj˫^/8qiTsʘ=#>UD@H@իtW9489IW9ntiMlˈa#~ G3W5Psy6ׄe_-CՊ?Ю0 u-qƌwν/=>}?=|ՓSTgʞRB)8-"/[!4VKjuDZ>p/s$sWN5o8(:oyrK_wgP}[D@@=?Wn Ub"D>܃sg}p_;k8νfX:ZJ@BUD m %(+A!SD nݻ}o8|O:ǹCzүw?YL2*}tPL;ZmcuM(|6;[3tͭ0aٹ4UϫXOo!H{~|3_ۊZN 5^D@Df`Wl(U+{gࠁWXݾZf]%Ƶ/L5@i$D$ꯤZ <>q 0pl8u"s|& !q" " aJQgTX~=18w WMU mbN2L@B(ÝT @ M#sWq:#E-$jovİۦ6xq S~(j\~:-mtԸnlApj|+~aƕH8 Tz^5ͭ /SnV>U[jk `8 j@'?5爥XH4_i\%q44&[!&!R+q5y8um7vͷF^H " " " " qP3N>/8 |lcxI6hPzNT ?=>९-;~l]DM !a " " " "5kVt;_9?5RP}[D@D@D@D INz{xM{ڧ~:IʖJJOz7h=/^zjUW|" " " "exM !" " " %bν_~>,^pι_|v5P3(cF8nt8S' 6# !!!" " " "8ׯk]B Gթs*RK@B(]'E@D@D@D pф>s֝xy̑YlbB-U/" " " "`~# nNǞ=GD@BA`U@$G ϽKܹcϕ\$vJT :)@^_:^pl G~ȗ~U !T,%^pg|!  TOR $"R2wg C^RtC*B$ !T%0%^psǞx]9JV~|(F@B(6*HD@D@D@D H%*k~lcx}JZN@B] D@D@D@D ~:FG8qW\6{:JgjH*5'쟏7vxmVIWv唀PN;^ ,{ay#6^p}pp쵨@P,UqGw±'>O^pݺw55>$E2PD@D@D@J/#GFo y%df$4 D@D@D@D@&b SY??_u) # !:YD@D@D@RH/8G S' .( B" " " "  _/8!w&s?{]bɢIBC%jO[)PRq]RKIz-A-"%J#TXCKB5h%{~qf;3syM53}rYp/fuֵvMJ@ B NA ,s:ww,)Ӧ]̂KLppqQ dNrfmAzm+]w!O) @D@|f3hi#Oc\ vJPzb @,^21@Ypcjq@<BpU@ (yVy.]\̂KTp&tБb :Osޣ{:hBhT @'qF;&[cQ f?:`Q d|ѕon}wB!e!@@ ١s;Fz?8 gGM@ g\,sU(0-"jXB xcgYޡ:Nx HP  @ t:1 MǹYp#` ? @#q&8֎s\ܱh!"- W9}?:s(\ NK^d̅[56 d[sZ,ELsY2@BM*Xx=gw lXTJX;:#'.Wh( @ _t;&1 N!p)_@o!ju ATzۋJ/xpKvj5kRAӞALϓ7-x{;ElBH-Ov3;$Щ̂Km0qb^e% 'Uz*:rS"GűX7SꔎOzO<}ّJz 7!7:N}r}y@@#DF?>mDhĉ[LH9TiO;F2>wbzmאhڄoj266p?{\Dѻ2J5ɳSn?\JmuE  f+Η:gXufݺO$@%1*UU϶㦡U^[nnW! IqRAC% QsflH} 29~e׈©L]Z{ͫ3 9p-'8O9v\B(R4*gH!y3vp34nSޜ7۩iGԂz۬6i0w7ObG+$M׹jGMhN MlVb< ,|I)[!"yx$RP埬R#Y*}jN]Ih'ޣqSDZV;}jZnh`> Ypt޻}ӣK\.E!x~vkQ=U7>՜J#NDm"Zk5&r |>^U*`֩&ɍR@hܸMv?\Yp8 t@;~xU_vq׵mlY.v[aq盏D.@ա퀼&$=ۼAW,=2[GlCJ]2q׀~i%,=9?qЙz G@4t;llMrv.u^{$h7U9}!OFBisPjګHΧOmσΝV߳}6] v>U{w⮴(=@h|Cqc3 d@Bqҧت< Fc$E4MMT=4zc洭FQ4sX٘ tꖫ_s{#ٴ$J*Hsl].Ep_*fJA9 F(@ Q͙yYp^@#@ By:}TJ}]4"yc~j.UxzmtkT  ح42ӿ;ջlٿ}{}NvdJ6}[7][6InB$ۭKi@]4 _{чc/΂ Q"Ha@[Pok0b6)V9/Ia&"h5KGil ;-,5-duD'ܒm+=y.g[Xy%"nI;o}y3lf"y]boR|Kh[Y#g*Č=UV nN@&>QwE Yp۬ Jxq%Jo f|;YpNsrR|@,@'i;6w[V4n@dB!@C`?Տ8'98 : =@ 2b:@@$x|͂;wZq!fi s7n@\Bq]@N@y~\ 8 ō4 n x@$Jep VXdw !3p,sb\c-'j9b @ [@!  Hh/{:o%@ SB 'I }|jʹ8ϙ R %!$=6E.(i> ,P{6Pz)}81tU J97W@ \,8{>C0x @ 2Pw~֍mzC>XY]^vo522֐pD {;kh.H˘6p.{kF*P|ɩ({/4izo2{{ 膥n  :PH1\8oPaJ|%VIDATB!e )].~_~ˬ*6sIUZv#5LMzW[k;ɰ;gdJ芣fȸt V)2\r=)ebuŌZ.!@%<@ "[˥}ƞb4|#M;g**ڤfnԔ; ]WL]dA( ȐқYm*17|젹-#&H#c"uR*vPu??&Lٺl&z+i*K7Tث䭌/53WI sב(}C*KUIo,LUJw#^69K~Y3y$`FUrmf+in{#+  F-L@eM58a}I{SӞ-|g==I;,GYa{훏{]zk]37l ;($jEmY*EA'֢t[ :22"mKH:V+*Tl]A 9i0w}$SA=F@џ!:"W+tP&m:ܴta(^z~*;ކT7jHa3Dwn:TPXY%y +=K_&"-aSqU,{U2 NzFUIh`A-[E ?%! gC({S@Mq}.$sY;x-uDӥ4IOnȯ9*`eSM\2tW-Txw-kg\HZNzcNge| >AQdD~=*)^bbru/lU1Qɳm,E fy?SOџ*@HJ*: /Ub$)^ U׫Ӳvt:(} Uu{:JQ7_T@*KF5Tŕu蝭\[mM]JgtCʂ_6/dB(S3&`PLiYW({Q3(rdt6%hEJk$J RVh݈KKYpd\ jcUG?/Tџʖ~۾1}!^ ZPL3E@g5v^5APM4+>|n\ΦV茪ʰOcsjCo,U+u\; ꣭6Xflqi"ɡ"Re?7>XgvސJ+?㎚?La#P=yʦ;Ki`޽.|m>yB q7MS} iKw8,b[DB F JBA.YS,te&\&//lŎLْ}/ّ??Hn}fs6^˥[\߻k@%: -.{V"tU¶7RDe7KhG*[yPؖ\VtA@/*ɣ]4|+Rkm&icpc %yZۈ?tZ5/ʛJwОp̃|1J;BI@aQ*-_Kj p?Ly=d7E?w.UVxݰWN{PFdVGJwbޅlTXuTi'~ٶ8= ʈM?:1~gw[L6E(mTkwfwU*.muPYZJh2y.mj!Z:]OsmzUuTi;|MR&IuJ v%vn|)5ND2C&j5aC or~qy눎{Y.TLִ}Kw.=KȚVs2&l㲲K6 e9[]].κTF;h[_u{SjuTzIyVzթ\{[iю-Bp%dٛGI$+*춥%LU*nd#`Nv֠kιu `[QmoU7xKNowLJdJ('xYvnHMrej&U"!Vh+ 6,+lu؇@Mp 㴍._%?߰L! X'޻dFܛ]HEý*ݢ+ [uWbU@iim+kYݒzjL39 bVҽq]L>\URSp0ڭ%wh^1w{Yn*#6fgsΛ [LEyy[6M+ <ֶ.l{[WuoI+ݖՖJin-ɜirZY^'ׅ$!QWU~Ju\T7zYqP2Ʒ]^݁4,ͽl2)Q]nKr}?h3WR{WS@p PA W5玚N U KϼݎiڪbI,VĢu^@4B(VV(BLk5sC |9d: RuSbUib{ E@'5 @ @<@ O!T?3j@ @)'Jyq @B~fԀ @RN!> @ P?P̨@ B(}@ @~Qx՚cا9噯.\A$.݈s5@%7A 07<J߾g.* ϓgG@ F %G=DBx#I{Ym1a  @Y#ZDO,6h?hQy^r䐚slB4G܀ DO!=sZ ۟jt{{_} (mZs) XQ z,(+-d P3 9}"qGnmW |ׅ#=EKF-:HTLoJW|oo*vxzb՚mt)bzj.J 4@!4@ GhzK4(hɐiо=iYѨg^pmGxӟ:#*b;~}U9>pC|ٱix>;:=/icRVٕFJ @B.\@EG̽jvԃB^oLdHGw&iYG͘w$͠]4cL&sϥd$Ι5T`w꽎=SQi$UTG'KdUMgWM)@HPBI%0l/ݱu[&v.^V?yxOS&G-Z\.aDQ]tt]^ZwϮ[{UџV] G?FHe#]JjDWٕ  @ |b1:}/Ǽ &}GsL^dt*=^ɳo؎ڢc+*h-.XD0TH@r0uu;A CRG!pr ,jMu]jsKKEMb;kKfgY(S.& Ǖ]I @"" Q.j%>Ѣ)m=HGg}R}HHh+!N)Qg@ B;n(׬] w~9+ }7`ug=;jx lXf.*HevRsߧc@D6N F E]Ӧ/ng{!aզtlu}m|t;(q"b [Җ6`>;ŮwBj2,Ϯ G$2E6  ,@e) NO[vk6a=ƣ$9|m.]8}& |bpA/]ִq\߷ǫּb^zcSHR|fD_r2JRrfDzlL騥a-[ZxɵV,KMj[%4!eWcĨʹq1{;60itO(%^q/e BbG*@xڥ(JUܕ{|*HǵHwS;J)e"QUA*VWtݐ_z{ A!ݒUhcnvU/Ѐ. /(=jl RLד{~bQKK}V\K-Vۜov[u5 sN4Jڊ k8#>.qgWaJ]s6v'O>˷pDG{ňPF 0"\v}=XD 2g%A쨺TWAMe'ZړˌqP@ ҵ~˄Fq @9( M[9";]#oA>TODJ5B⦱p $wPG?~ԙG۾p{D0>5!:Lv=7>|6SePl`AyK5ByH5B9O)G;g]SX1X?CU?3j@ALk Pwj]hȫ01rYhY"}H PJi$vF9Ȯq2!aJ Ov 7]gٕru?-J `J 2`l6  R\(XqI dB({qX>#W봛mdW4E+1221l@e;.6k^}BvdWt+!22!l>Bَo{ݻ=Ό ݋-՚ >?}Ա=wхIai,xDp A#DFg|`"=aȨdWit>TYQ!ԸOBYdAv%1*|6?@!@sTIB@B&`!{Baɮaԃۅjc 3kbOqnt8ьѨ8GIVbP}  XFkz_oaHmV>Cc5B>JtB((;%@B"Ԁ?/ L .ubQ!g;MNDV/^˗O/! e,*ViQK/YB,,`,E$ ٓDv4LhLi6JDp"X#ұ=iJmSjC2!a@e4t+\z^${c?h0K[&ZA! )4ts01|X:_1ZN!r4\K'dBc18@B#`N p7dW$o 3ͧE݇j]F{zZz~l6FI슀ztF7\oS]oAЄ.8Y'PǨ &N{Y%0bYAVd?X-#[`GDO!=sZ 7\v> F6 ]"|`BcШRJ dZG!:XT) nfB(# J{?]BB @!@ @@ mmcFxO&8!mtٜ߲?c"vEGF^%2\p*߫L>/) d^BɎU%VyϸU >yϸ !5FZ @@ R<\ @#j @ @8x@ 4F!7jA  py>i(NYj7@2  @ \s!,WiKCaTyjK-Pc$Ɍ ^}H=7si)] 5ֿek߹=v**_U3pY7.vme˻Sgu_iߨm"}"M;"R:%} A= դ)D? ((Fg,8y_*qJ.TP:&j&_TPLJ{UR"-?ȫl3YiUvgB( ʴVŠP:W[ҽ&4~vҜ0PQAD2YWɊGV!$#B%1Pi#\aMWi^r}'{Nvҟ aQ1Na&D^?Aم Jnl, ((F+4 jEToJ *QɊOg*(+9@?&j'?*(%*IgUt.TPңQ@EA6ZG_TPUV"~WɊG/PAي>iBatTL ~QAI[ tG^3n:hvOB( ʴjAQADWيgRzC^%%Yvvw0P記,QAɊX:!yI^-biZvI|B( ʴ M$ yx&7UR"E?gf1I&R=Yxd*+LV?ȫd#[ қ "JXR"-?ȫl3)!,Yvխ3dbG'j5K+a M#R:O^%64p̲kGe tB p%,d*QOU1ȮʮXPv#LϚ"V(|,+l*! w;XHF@2y@&U;@tkP(\B(k1? @@bjI@ B(w! @B @rG!a@ @!D@ @#]0 @ " @ @.t @@ @@ rr: @  @ @ wB 9 @B @ ;܅C @!r @PBN!@ 9@ B(w! @@[PQX˗-[ @ @ Э[KK! @ @05܀ @rG!a@ @!D@ @#]0 @ p^gǨIENDB`}DyK _Ref171494937}DyK _Ref171493767}DyK _Ref171493800Dd D  3 @@"?}DyK _Ref171494989}DyK _Ref171493812DdOD  3 @@"?}DyK _Ref171495043}DyK _Ref171495044}DyK _Ref171495066}DyK _Ref171495075}DyK _Ref171495092}DyK _Ref171495100}DyK _Ref171495112}DyK _Ref171495136}DyK _Ref171495145}DyK _Ref171495160}DyK _Ref171495177}DyK _Ref171495191}DyK _Ref171495201}DyK _Ref171495211}DyK _Ref171493838}DyK _Ref171493845}DyK _Ref171493845 Dd >>b  c $A? ?3"`?" f)P+tTI 3W.@= f)P+tTI*y60 xZ pTW>Jv1!]$5ii4啻wI&)dyt&2  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNSVYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root Entry FUData M_WordDocumentBiObjectPool _1244025905 F  Ole CompObjsObjInfo  !"#%&'()*+-./0123456789:;<=>?@ABCDEFGHIJKLN FMicrosoft Visio DrawingVisio 11.0 ShapesVisio.Drawing.119q Oh+'0 X`lx t-holuVisioDocument X4jVisioInformation"SummaryInformation( DocumentSummaryInformation8 ibVisio (TM) Drawing 4jHhaR[:3<4h !fffMMM3?33U J:DT5I[1hXT@. .Ub##/a0zGGz?K&[&/~&b%*~ !oL $c)PF?#~~,, & "& , 4&?Cp"/.?L74? T0A  }, ,,'p/%O6$X6 (}j?k)?"   34#o =S?#A:;A;dUdU@;dUdUdUAONOD`;dUdUdUdUdUdUdUUb SR~;4OL%=Qip;RRRggRph=Qj5 .F@]E' %p3~|bFp#| | | ui?UG=L/T]asp=rnynCxS/e/w+ ~qrB҅g4`/'STzÂ!=ݽ{?q͑Dw B=ckhr&p PGͯjaRFRFRF RFRFRFRF BL s̟ޟ2GUgy3¿Կ|VfSQ+oo'Ǵm-TY@Sq/Hb:Ho4`)QZvc +sz\?S{'9K㑶IyOO%rbbb3t%tbbObIbybOb#4w-O+Oլ0Q]6ŮCŢ?HK]]PŮHRh8se&ҟGY_/_A_b}__] %Vb9bHE`C ZX8.!3AWViX|k Dۯ\XF#UFDfP h,TPYYBUFU~?x<FńBPG(?3P m 9U39E:O @Fo@b&_d2?\.Y(sU6!4&PV/BHD$?/&?]%"  0 oq`3gates\lo_gic\d00/1t 0l\w00r*00n.0, 0n@2-1U,$0l$0c"0r,0mf2hT211A1 oT^ m( _!!2% w` Ed8$}82 O8e?? SG[&u B}? 7@Hu\``/qqy?zhy^fpw@gDrag onut he]pe,nrih-wcl%cks e/ifygt ttMD ndnumb UrfipoItAdo.jFi dbx<{ο?H?LgοBP(?h? (d2CϿ⿞L&5 ={UG DF P# BTr :I"HOh^ *<^$||x#U@P&d2?@=?Fx<_?Fw?P  u-# 7,@xSSSSSXS; .S--u` o? x-I7 U_$"m$"w$"$"$"V& y#%]_*&&u]V2<7ދFtQtRX4G2M4U?g1uAU2_L@j2$"-,-񣔬ؠ31D;1`Vis_TE/@.chm!#5?@06C@`?Co_pyr%@g7@_t (5@)f@2C@DA M%@c:\@o'@ofdBUArX@Aad@iV@n3@ f@Al@ \HsBe'@e\@v"@d3@J@v32q@?OF3?1 J3* ?B454 ĸ=9 C  GT_2'2)4kU$Qx@[7a@ZC5e??d5fn9u`u `"0ydQb]u#`r;ccub 7dQu0`x-F0abk@+@ccooo q278pIR&(4E7 @HBp7rTx##28Y'bT-or@0]`bh02)`IR@As%@E +@exd@J@IRIR7j(rbde 䙀u\%R&zſ0Z1ÿ0풳f:``0e32mY+m2 P 2B8A5s1 @C` qNV@AA I@puBJ@R`2;345IA"`2IA8؆)/;% ĺ"A2i`rߢY15(57XIaV GBeɂyX@eIA;xORAN;Tg`NeXoXm A3@HSp- rIJG(5 I'JSZOmlxC1WV؆XQ/c% Ԣϧţ Ԩ|ٽ,^E3p#"5"f5-A`@eE2!!2BR38qe?APmȸ˩ϓϣ(`ijӺZ5]Fox8O$"'sc%ESSi|9? s:dQHAv2--~4qu0Uc(@3j(1[C(EnDv@]AomAfBmBblJV@g|B `@EsG љy3F>3իՔXs͛o'2Ub?$11q'e1iSe.@e{QWFUHQ>U1{t{tO{%tYwUH\uD  # #UI>hY(JTYYM NUFx2=G2-r29 0%ME2ODOVO?0?B?L6Op9l1; 6 )_=U_5 pX@uR Y/vFuG DC$"Y34[<=uRT**~u8`haP5uB_zy`Q%]ooodovF2r qS!x_>yf9Xf}zh6 RUp?x#__^@SoAdY|OnV9o(R_UHLuD " # ;h(TEJ UFx>uQ` ͽ[? 4HuA` aNT>t tU>bpo/&>UK!\P$ >``?CopyrigXt(c)20 6M c os} f"|!r !a i} n. Al (s"e e v d q >lgpNE'[ j#0%glip?7J>T42"9()3FoǶ?&S!aUl>4fUlA11C;t!Q1 B9(ZE#i7o;?(3"NT *a$#:o:2"8oDXy?FF1z?Fm`W fbn??NCK 3*RӬDDb:@rnAT*ڰja AT ?]Tʿ`G h(JTaaMEMUFFx~A@p>u6` ?0tN R2>tmh?buahTUIyJ>Uk >`c`?CopyrigX}tp(c)pW20- 6pM ]c os f"R!r L!a i n.p AUlg (sk"e? e v} d_  NlKpB %0%lJaUl~ !/}p b 3T Q85?#cM1bUN$<@6a=5E2U67E!A/??,?rB6r {?8>4Fџ?:?4=O7N46 W&_UHXuD   *>ihY(JTYYM MUF|>?FxSfTu9 !`Z+d2_}_prs{rDyG:CR1F KV%ZqM DY <[퇤PC0{[!3P*<:>ISf6]gB7 g|h?>]ud68OT6z;L@HVUFbKc]T o@O0#B EU"C?ɪh'U,CGJ!A@ݟ\n u5 x9`Mu"ՃZϵHD:  # ;ih(>T9  AUFx u` /W?l"[u` 5R"(TtOL it)}b5JU5 ``?CopyrigTt(c])20! 6uM c os If"!r @!a i n. WAl[ (s_"Ue3 e vq dS Bh?l 0%l>#!Uhh#3 @ 9$W6#p  7 tM: @JiF`0?F9N(bAy1l3skMB448232=5 N&O9AQ3=iLHr&8L?bJ&1MBCC_H=-? G XŨeHWFS} #OB A]az@+ZaGyUY PW?k(Y5*\[ g*t\אFTK^'c]+J UFDf h-TYYU?@ ?6I?h P" (UhnE +J*&%(Fo_g5qk#pheoT'T X!! Jc0xo)vR2'"U75a%O3W,_74b5J-6 `F2 5au\@|Q:0b)`R@As)@E KT@xd@Di@ ei=G]xU6Tg'0"qV!HAn 6SWaH=w`* O`EW )Fd`7+#V ,7B 𔉆C-edɨo@|aPUFDfP h>$/T 6D UUF~@xTB]]9 EcAUF~?M&d2?F\.K?Q6 mu` 7??uJ by BL A AYYMJڍU5 !L/@%/#i!n$5 `?CopyrigTt (wc) 20 6 M c o%s f"!r !ua i n. _ Al (Us"e e v d y/`V s_Sb . hm!#`57302$x-//u# u'?9  5&P?L݆=3Iyv#u6u6P?MB#32NoNk?l@7l>0>UhhE7!4 Ba+BE@JT3FFFj\V  'RMW(aOQ _Q"AQG5M^f_ YtQ=U5MUF__[P:1O>BrA IbOcQ"qD ,bP#UO7VNZ:F:Dt1v"F @ca}\aMk?e:Fi]@SKeZ%nn0omaG5e\FwwZgvy5\BzoMUeiC;'gheE7BTA KZ"W(IcTVK(@Mi@Ale59 =X7k'2qᐼu6!(Iu^Ax% :H-,E? ~L)uE/>Fc2_#dXg3JB įB]za+4@+\/Mad7|PU.U U t4 FNh;}@٠?Q8'Ca 9W At4FNh;}@٠? bw9 AJ-$37 t4FNh;}@٠? Db9 AJ-T37X@Q*9MR@Q9DR@,R9DRH<(H<(H<(XER: RER: RE S: R(DS.*S+B!_{1/"{4 ԵP??hU??:w "`*^p? N(<*@; RCU`0Ց?5({? LFDNTyB@ uh TPU?FNh;}@?_٠?23I?FP 2<j@?-o؅u2`6"F"uP)aoEj!! "` Electrui0a0 W" /4%f// # C n0/3o 0;z2 ?2e*$d'L11 !u*$ 1U *6!AGFARDAH^J%RD!~KOGA~KRDA~K ANH1~KANH&A~KANH*A~K%RD.A~KANH2A~KANH6!~K1NH:A~K&ANH>A~K*ANH1~K.ANH~K2ANHF!~K6!NH{N:ANHA{N>ERD!~GɪHE"P AeaDaA:A:AA1F!F!{e);]AAy sS&AEWq!8'Q&x)? Gޚي<@ fQa:њ\__~Q_ oo/oAho4?@Q1\oxʣҀooo OOF7Ofx\_O*<);M_q\!িoʥ ҿ.QuX ( yvVhz;nWDKEwnu.y+Կո 1C)Udϭ-釐ĄRET?π3EWi{FfY&}v!3EWiYvS昢Қ ?0BTfFS)-tǠk? 0BTfx_//TAaQq(Qu\n߀ߒAoSoeowo"Aa*mAu@R8/ǖޡnȿ쿵ϨAw5N}!N5`Wfq/T?]>O@?^2/R@w594.@@ -?@v9vՕ@٥`r,eq8bݷ;au``X1?`bujiQfqbf]„PRsrEX{E3o2q`?off6qĄ?X0M*Ao;7wb`BackgroundCZplZprz@b@t8=mIs+ s1Ą#X0b^Q f!//'/aOCyJA1s/m`bfc&2 se|is`MC^p2ԉ5Nׇˏ݅!c1b_t________ol5,h?/j=iOoaosojc1itn!o2c d oo @Rdvwc1&8@uŏ׏=N`π鏻DVU $,^Q0q_(?:GD?qv?@^V?@Y' ?@B ?Q4GYf2ѐiffz5z$2 šT1҄t-1(kIyA+39w3O#O5OGOkOmOO3MODqp4,Y7Ι1t  ~E , SPsBd_Y 2 "Ģw5Xg,%|\4H/1ɄcT~AACѴC0l0rQ}l@bnC;ZlNRՒ15pg%c&Iӥ 2@LT*7&, Rg>5wW?ȡm3G);M_dd|?@oRD`،Cΐ/ .  2D,ߙmVqNy0@?@ on ąV_w/mVlW$o.nwJokdo.ioo/!/3/E/W/i/{'G//-///O?)?;?M?@_?q?aNl;??@?IMPՑNMbM$a?@4΢tώ1\oUP˛x?OA;_M_J ́qYv@@LLu20zGzZ?BbƐKv[:P@`|svv1?uajtab`VT-UAZWBϒ뙀ƹ7ھϻ[BϦfʵT僿쿬ʄG=4 ԂBя+=O?s7I@ӟNBqY,>Pbtί(L^pʿܿW?$6ϟχ~ϐ3); &<1JgRVhzߌߞߗJny?@(BOi(#:L^pjPM!qY6 .@Rdvb/btN&OOL_AK_Oo_VOO_+A:MEJ`ADR`RJ //./@/R/BOv/&̲bl``?@|H6(/s////_av ?2?D?V?h?z???????? OO.OoROdOvO__ooO /v&Z_J'_n__~__ן;_C o2gBlV P`LJ`oroooooooΏ&"׹&/ @@@fETungaH"@&>fGSendya{ (  R$fERavi"&5<fGDhenu|"{a (  R$fELath#&<fEGautmi &<fGCordia New{ (  R$fGMS Farsi{{ ( _ R$fGulim"{a (  R$fETimes NwRoanz@D$ZEBl[.BC[%B\h[5B[9BL[=B\CB<V\9B\7B,\=B]8B;]'Bb]"B ]#B]9B]"Bt^9B;^&Bd a^'B ^CBT ^>B  _8BD A_GBGuideTheDocPage-1"Gestur Fom aE NormalLogic _ate2Row_1InputTypeOutSubTypeMarginLi}mtHe7ghvisVerion"visDecrptonXCo}nectr(Dynamic onetrTextPoWsiinBasicRectan7glRectanwgl.1 Rectangl.21V3t\aE3laG3aG3|ra%G3daG3ra G3aE3ԗbE3엌bE3to$b E30bG3HbG3d]bG3d{bG3rb$G3obE3dbG3t˔b)G3rc G34'cE3e7cG3sSc"G3Dsuc"G Ut4FNh;}@٠C? Le C-oU7 A%t4 o_f A-%7AJ@4ɕeOR@lɕ'f6RH<(H<(JEɕg REʕg R{  w"4FX0h(_!*@(ƒ_/s~H^z @jUBTH P ʕ`P e{ % $$AAF`TEMF+@@4u?@$$==_888% % UPc| b?:RxRRH?HbH r xr :r  b% % $$AA( FEMF+@ B7CB]C@B7CB7C,-B7CA]CA7CA-C,-B7CB7C@B7CB-CB8C@$$==%  ;UP ":xHH"HF2x2:2F"<>{D % $$AAF`TEMF+@@4u?@$$==_888% % UP|E ":xHH"HF2x2:2F"% % $$AA( FEMF+@ :Cm C:CsB2ЯC@BạC@BC@B:CrB:Cl C:C ZCCm 'CມCm 'C0ЯCn 'C:C"ZC:Co C@$$==%  ;UP hbh?R8RuR?b ur 8r r h hb<>ew % $$AAF`TEMF+@@4u?@$$==_888% % UPcx hbh?R8RuR?b ur 8r r h hb% % $$AA( FEMF+@ :C7C:C]C2вC7CẤC7CC7C:C]C:C7C:C-CC7C຤C7C0вC7C:C-C:C8C@$$==%  ;UP "Zhh"hF22Z2F"<>}D % $$AAF`TEMF+@@4u?@$$==_888% % UP~E "Zhh"hF22Z2F"% % $$AA( FEMF+@@4u?@<0ıB%B`!CBt/fC9B'C B@$$==_888% % U,qTw6V xcZ% % $$AA( F\PEMF+@<0uCBQɋC"BCBuCB@( $$=='%  % V,lv/zV@/%  % $$AAFEMF+@@4u?@, Be&CByC@$$==_888% % W$CFIg I% % $$AA( F\PEMF+@<0|B|xCB7CdB|xC|B|xC@$$==%  % V,@II%  % $$AAFEMF+@@4u?@<06CC mC9C#CnG:CBC@$$==_888% % U,u   @ n % % $$AA( F\PEMF+@<0BC"C3B CXB;CBC"C@$$==%  % V,p{U!   U! %  % $$AAFEMF+@@4u?@, n_C'Cn_CyC@$$==_888% % W$CGLr L% % $$AA( F\PEMF+@<0dC|xCn_C7Cx6C|xCdC|xC@$$==%  % V,@JL%  % $$AAFEMF+@@4u?@XLF(BPBABe BZJBgjB5B BBBBrWBnDB@$$==_888% % U8&ym 93*YyneK% % $$AA( F\PEMF+@<0BBBPBB BBB@$$==%  % V,daml_NX_%  % $$AAFEMF+@@4u?@XLNCBƊCBCQ=BuğCϰ(Bz:C"BCBUͶCwB@$$==_888% % U8"~jYD1% % $$AA( F\PEMF+@<0^C?BfCB5CB^C?B@$$==%  % V,i^rh**%  % $$AAFEMF+@@4u?@<0xB)C0 AVCEBtC~BaC@$$==_888% % U,=vVIK;-% % $$AA( F\PEMF+@<0*'BkCmBCbBJdC*'BkC@$$==%  % V,f;oEbN-bN%  % $$AAFEMF+@@4u?@<05CJC}ljCC0XC0dCCC@$$==_888% % U,?uG 9c+D% % $$AA( F\PEMF+@<0C)C CsC¶C"CC)C@$$==%  % V,e<nGSfuESf%  % $$AAFEMF+@@4u?@<05CJC}ljCC0XC0dCCC@$$==_888% % U,?uG 9c+D% % $$AA( F\PEMF+@<0C)C CsC¶C"CC)C@$$==%  % V,e<nGSfuESf%  % $$AAFEMF+*@$BB5CuNC@0$*>ARIAL6@H<**N>mA>~>mA>??   RpArialTٌxd8XLxg1x0|w w L|w w|8|2||2|-DT! @x ||&xHxZxP;!kx6Pdv% TXNXAANLP**% FtEMF++@ *@$BB5CuNC6@@41>mA>??   % TTZ_AAZLP1% FEMF++@ *@$BB5CC6@TH***\>mA>>mA>Ӱ>mA>??   % T`7cGtAA7rLT***% FEMF++@ *@$BB`B7C6@TH***\>mA>>mA>Ӱ>mA>??   % T`;dKuAA;sLT***% FtEMF++@ *@$BBAXA6@@4*+>mA>??   % TT%)*AA%(LP*% FEMF++@ *@$BBAXA6@TH10 Un>mA>>mA>>mA>??   % T`+=*AA+(LT10 % F|EMF++@ *@$BBAXA6@H<| >mA>?mA>??   % TXAE*AAA(LP| % FEMF++@ *@$BBAXA6@TH000 ?mA>@%?mA>K=?mA>??   % T`Jc*AAJ(LT000 % F|EMF++@ *@$BBp@IC6@H<**>mA>E>mA>??   % TX(2AA(LP**% FtEMF++@ *@$BBp@IC6@@41?mA>??   % TT49AA4LP1% FEMF++@ *@$BBBp@6@THreq_?mA>Sm?mA>?mA>??   % T`AALTreq % F|EMF++@ *@$BBBp@6@H<, @d?mA>Q?mA>??   % TXAALP, % FEMF++@ *@$BBBp@6@THack??mA>`?mA> ǰ?mA>??   % T`AALTack % F|EMF++@ *@$BBBp@6@H<, q?mA>@_?mA>??   % TXAALP, % FEMF++@ *@$BBBp@6@\PexitL?mA>*?mA>?mA> ?mA>??   % TdAALTexit % FEMF++@ *@$BBuC@B6@TH100и>mA>E>mA> ?mA>??   % T`DUAASLT100 % FtEMF++@ *@$BBuC1C6@@4*>mA>??   % TTAALP*% F|EMF++@ *@$BBuC1C6@H<10%>mA>M?mA>??   % TXAALP10 % FtEMF++@ *@$BB:CjA6@@4*>mA>??   % TT:>%AA:#LP*% F|EMF++@ *@$BB:CjA6@H<00%>mA>M?mA>??   % TXAQ%AAA#LP00 % FEMF++@ *@$BBAB6@\PINITy>mA>.>mA>>mA>B ?mA>??   % Td5~QAA5LTINIT % FEMF++@ *@$BB)\7A:C6@ SATISFIED G>mA>o>mA>Z>mA>@?mA>?mA> -?mA>G?mA>@R?mA>mo?mA>??   % Tp+AA) L`SATISFIED   % FEMF++@ *@$BBẉCC6@xVIOLATEDY>mA>>mA>>mA>>mA>?mA>-4?mA>=N?mA>j?mA>??   % T|(v,AA(*L\VIOLATED  % FEMF++@ *@$BB:CB6@xREQ SEENF>mA>>mA> >mA>@5?mA>?mA>6?mA>R?mA>po?mA>??   % T|~nAAL\REQ SEEN  % FEMF++@ Ld}n)??" FEMF+@ ObjInfoVisioDocument21VisioInformation"SummaryInformation(Visio (TM) Drawing 21H/aR[:3<4h !fffMMM3?33UJ:DT5I[1hTT<. z.U~baK 0zGz?@GHW"+zf"b!ʐz !$oH$_)PQ?zz,(, |& & , 0&??/*?H34? P0A  y,,,'l/~%K6$T6D (} f?g)?"   $3# o 9S;#=:7)=7`U`U<7`U`U`U=ONOD`7`U`U`U`U`U`U`UUb SRz;d0OH@)9Qil;RR*RggRAlh9Qj  f*f#<YA' !~pP3z|bFp#| J| | qi?8On<35*s,,,/HRQ AheTl]}UH;QqoqGZ_l_~___O@O_OO YU['Xf+?Бأ sUɡǦs鯁ɟ۟ H z)ż Dȥ%;dUU;?ϚE[?!}:̵5̵5̵5̵00D 3 L b>iP fT'Wހ'0ɢU,׮50 fVOhOzC ߌE#PCU6  = 殴,U345|&6"9Aajߤߊ8'W3?!%3 8Tׯr???8t"0URY L-ak48$JpiMHeoDbT)cp<p1Nahd'A('A !5.A/J&]""ah-00zGzkv4]IaqGmc&A,9?/K??:}J,j !{O#OBe4)iOM_<!$7Wղ!I! ////A/S/e/?//dROdOXUiOx4 5eZ[&oO__(\!'彜02q`?of'/o?Qf,45|5|5wU%_xOOm 41toooo3]T 2`Z/tT;6bu_____/ąo`sXo!O Wb6Ճy3)f%t0*  ߇??rԦ@(굂|䦶syq{,u 1CU4\I 6N贁NkFv{JWP1`ConectrWikgtzWPC7ϯWPl]WPWPW` EdS\l3U Pten9AS@S^K8ql‘ݣHk̓DĎpU5Ruig;k0X  ŀU=PTaWsprnyCkҡͺ̲rBg:!4n$6S"gz!ro@l%I6a`c0 Bcgdޯ`ÿ%۟6u1a` q ąLՍ0ch5Phz Aġϯ0fp2 4( >{J4 2k>@'? @:w "`*^p? N(<*m RCU`0gťd@.@ LFDTyqC uhn rT U?Gzt@?L@??4EI?FP 4<2?oreuu`"5&"u- )*e@Z!Z! u-!#! R!%!!H!$u;$-!;-"'!;!(!;!(!;!(!;!(;$!;!(!;!(!;!(!;!(!;!(!;!(!;!(!;!(;!(!;!(!;!(!;!(!;(!;!(!;!(;(!;%$Z!71 F5}!@i X5y5 XPQ?@Zw@2y?/?8/Wq$"ee Vvv qrwvv v 2l(R-! B+x}9+vWErKsla}!"b% Era}E=#!qCi%Woio{ooo-!qqE/oljI:"4Xjzu #, +u,6Os! .-M  z&8J\nȏڏ썆(:L^p# @ П-! #M L֓uMWpl~Ưد 2DVhz¿ ϔ"!3EWiϭooooT @'9! #f eufp /ASew4+"%5J@/n1,U%15X1y5J|Y@@id^?@=C?$6 % р@`u6``bou@`u`@v4@"i8(GP@QT!"1?3 22P4FP$.aV!j 2272662=ѝd,{p%K:8,' qrt"67qs9OKN6GLM7OT@ч7c2q@?OF?U A 7K`BackgroundCIPlIPrPz01Ց=ך҆V! 0pхZ#7c0z&=W`ϩUfcP1(f1ѐ$&pf|\5'P󷹚Z ad(:Mҗoh ?؀}6q:o2  ? ;fp? ^? %P 41BK\nwr351R<A//%/7/I/[/m///'b,8VP|?@:OL7>h(-DT!//?!?3?E?W?i?D{??Aju 34̒?`ZeB@P$d?1E7VD8JBCfEJOOݯO _/_A_S_e_w___W____oo'o9oKo]oooooom?"p+/o 1CUybtrq!/EWi{*B:> Cv0@@:g&`&3? z#5GYk}=j 34C"=LU&@<߰=NN@؆IkjR0F6VD7I~J ѯ+=Oas̿޿&8J\nϒϤϷmi~h@u`|Đ 0BTߠxߊ@a?s?r ./DVhzN @@ dh(廀2ĉC֏ /ASew15 R3VƔVVR]LH ְ2F(V5gWT6oHnV}gImWoo*<N`r1//%/7/I/[/m////~O-=I ??1?C?U??y??bt?0[1 ?OO&O$CM@]B%;EI.Q?@yD1@?P9e!gH{rT F&8Jq; 2DVό  @@HXw дƮد 2DVhz/#R @@?] `.e89KLxϊϜϫ,>Pbt߆ߘߪ߼߽^pG?Y?k?}??$q3EWi{ /2/U@EVH|xI?@:P@Pos|AUJWP㠽%3*q*<N`rIr$fk$4Hv{?@x/P/b/τLU//I-k$C^-//?~X23T^] Bّ?t8wտ?n23?Јqf???;`?1#`q{OOOOOOOhz_U@sp4T?"@PD^K[Yh_z________ o,=ok$N)Q>@@%SI >W @@?wxf, +ĉ,з;ڿ,>P K"4FXj|9K]ď֏ ߟ߱(ʟܟo$o :L^pʯܯ 4Ek$L_q343V4 C"4FXϲ 0BTfx5GYk,///t9@9+1(.t11-W4@@> @@?@rq?^DfE?5P*@E.1(iFM8,>pL2,E!⮱b@ U[:rSA&A& E&K\KRQZY0flt"O2MB7]/ne-_FVoe/zoenhEooaEho(eeEoono4.t1P0 24a???????Oo5OGLZw2S@_OqOOOOG4a0GOO__$_6_H_Z_l_~_______o o2oooݯooaI@Rǿԯ* .*Pbt(:"?! O|iQOHZO?O?O_ .@Rdv?Ȇ҂ @@ %y'ew //1/;QKfh/z//////// ??.?@?R?d?v?.o???,_>_P_b_OiOrOOՏ_OO_S`wn__*______ ooBoPQ?@ \`mooooo#Woo"4FXj|0BŸԟ柜)qYߕPbߘ $6HZl~ƯدpvY@@ w 0BL S)pʿܿ$6HZl~6ϴ4FXj wnw߶/C/(b/p︪QXIN0TT&J\Zw2 @O4`-1iaF*<N`r?&8J////Wc6_./o-\87"A@O:#FRH<(ElP# R\P 7T!#@?O#.PD4P#.PU1( UO"D&aUAUNj )h"T} U+U |ɉB&Q- -H*=(XiwEQ//,/feArial UncodeMiS6?/?`4 R$fSymbol$67fWingds*7 fEArial"z@D/ R$fSwimunS$fPMingELUw.6UfMS PGothich@ $fDotum"|i0@ S$fESylaen  $fEstrangeloU dsa@`9$fGVrinda{ (  R$fEShrut1i$&<fEM_angl$$%>fETungaH"@&>fGSendya{ (  R$fERavi"&5<fGDhenu|"{a (  R$fELath#&<fEGautmi &<fGCordia New{ (  R$fGMS Farsi{{ ( _ R$fGulim"|i0@ S$fETimes NwRoanz@D$A%EB\BE%.BBs%%BLC%5BC%2BBK-):B4Lg)GBGuideTheDocPage-1"Gestur Fom aCo}nectr3ԑ+E3L+G3d+G3|m+%G3D+G3+A3+At4Gzt@L@ i, AJ-37%t4 i_- A-#7AJ@m,DR@,n%-6RH<(H<(JEn. REn. R{  w"4FX0h(Z *@(5|+2TvȰڼz @jzUBTHW P Ռ|o5`<  o C ako_No WR$)o!OIo) o+'#h1k]Ү}Lm]P2 , ? [-*'"Ddn.H%a!Oh+'0 X`lx t-holut-holuMicrosoft Visio@vŵ՜.+,D՜.+,4 `ht  DocumentSummaryInformation81TableSummaryInformation($DocumentSummaryInformation8,0 Microsoft Page-1N Pages(`ht_PID_LINKBASE_VPID_ALTERNATENAMESAOh+'0  (4 T ` l xProceedings Template - WORDl%-k2E ;8<Bʀ2L)ZCX:<#t"S%~߹, $!Agq;Ϲ !R PjBLS>~BT; :.[Zn!l4`p(h@47¡9D.l?=,_s4. F4Ȑk 1^ քS. ~xe"|UfWs˜dcR߳{*k|NhKW |H[bm=Pmןk dBSm-36G-gNE_YommoZ--/F4_eo]nY:2;\p5<~s$X0XEѾp\X:5 d0 tBlK^v>xOul/01:,D HUwd׸Kx`@;_:ov:w8n%f띝\ dtj:cTp3t8i/@.5>o;6>}LN v1kwu>!4=ׄkĚ?=k~ņP1@usG1 =`V@g,"NS[(?Rjx- ul{{w8D]Ɔb"`_MUV|o<ܿa@"$gioY܀>uo(c<x )\qv5w}ԋG-{/ymOq̓k&ׁ*zU=9s[>X~=0y~yGsLZYMwh';|I9y)?HWNc].c,:{@R\). r ZRgi&0lbS{a-0Zh+0^Qc;+wƞ@NYIWzstP ?#L#xzO|':k%πi_ƚ{GrM =ô_q&qP3\Bեl4}[(՜i!q=I".܋a1MLv44bتo &h(ao;m 6 h^ŇT\Z Inh|x]3 {g 7OKB@el߀,?t3-mWj4 7-JN4P懦p9g Ыxah%eFz`/k.rn)QGꘪ *~/g@8&ow>f`^5`<&!U 4¦W-s"]gKDH9?q+^f @^g>7 .{@yJF̳_ 8< 9iGV^*Nw"aG|cր#@", EGI" G06x}JWDI&ĮǍn*Q&8S-}5W* ~Vvbǟ̷,an{MtEAv aϕ&.󝆄9橚6Yb7L6u>;!%yƴ} O1cb}>W~Dn7 ǎ/r$-Ņ)M6+K}i)YC~,t*h;,<+5fy.x$E֐9'@|97>4w5zc0`0xsIJ&cITq|G($rՄSC~1 /{{ӵDY!>׋OWM^JdcfT~ C*E Lx7?q %Oj(Ux0R%w8ЮI& xD1c ȱ+&Yȿ(=Lד@#5`/xΤ{gUz9] B-kmel@dto5ɻ&RJ9 .]rX|5V^5]Թ3ş: xp|2B!-֘[`YW~5$IIMzMxj;~zo[IvmgB7X5FJ>Q#z)o+=s=[rzHeH,q>%nM[ $rWh'~΅&΅ϤsnD_?{TX&&eg܌A#sgÎBse+nWeu-> ݝoKeTڲB$}Gc_X{hGlBxNA2{RKȧVc>U+cj<P{ P $bCrI&%$أ9s!`Spw*7/#%qF=;Н<cz6z)&s,oksgAGzb ^U0R̛M:|\@cH|`X^xL]I?h۷SlrmSsѰU*u_Zկc `VV>V4Ag3=6H-25T_X?y&~yll}U.-=eOə{(PH/Br${ýT^K 3j]曫y_tfWCx9m܇K;|sЛ2>4n}{& D79i@tF@I#G<3L4O%Grr,Tǩ4Gw^ۀhl@D鉼Aڞj>cTԷo)Oj h){>ή]]tٓo{9;+ہ%ǸѺSqZ^i͈;뵱[Qnu2 Ml]7ch|Y<+Y>\^<@٩VRM.vxjC ږk2}VqQyl OO]^mz{cN{#$}cJڄ;;qDᶓIIʜ742n_j7Ys]/jfywwud"HI+ǓN2or ^hW&xN=]W|2\e+Ig77s*?'>>9e[թ컒a90e1ɛ6JےM-mfyw 8q3$UJZy &+yf WGdef>Yҍ=7=` uH&s>P|uo6M>"7xN*Y\<ӓI7x*%4üŗ_w9o yn܆{ng{\ ѤŸ_=ay@:T ~ҒbExw?cR|qG!g W%WLPӅ%>晒YV,C}@:6D#sEN~u1q.NEȪJ~?T/&Ҿ3nV.[l?QUWmJ}6'ykryZU1/l2lbMLCj\L#孌nqE|2-B?sp2{~x?#}I1xz Jo?qj!i~4w_R׌2֟& ů4`Vʼ@9@^ )@(ߥ/Ў`_Åwa=csp ?2ꚡpM>֠r||%6"Dks N_wtG%h d ue 7fwBO$|lK7Y;z_f\ #|Qwkr3o~:7\D?`ܧ7 Bَ)k+ކI8 lẍJ`M9o~EL|բ xe}ZE|tޒ!\g9sD9bp~D;md㋬LRHgE` aYl+iu=_2l6(yY5}KN:lDܤ?87X9Ԝ@_"G,ۛ5uo yѾt 7*ڏZ6\~u#'c`N#'!\| ]lIsQڼE4gp2c.O`\@{e,D,F3 [CEPK0}MX"0.r:r^lN1u/]&[R1]Cyb\D]G|oGa eU@gҩ[^Q",K;5QE}i="f.H-4v;raau;L{ݨU|QGh4 0O>_1 M۹6ѧX)د֠Vo­]G&_f&C:ORu]O. rr u\o>x?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`agcdefhĻŻۻܻ߻000)0*0*00)00*0)0000000000000000000000000000000000 00 0 0 0 0 0 0 0,F@F Normal $Pa$CJ_HmH sH tH V@V  Heading 1$$ & F(@&a$ 5CJKH8@8  Heading 2  & F@&B@!B  Heading 3  & F@& 56CJ8@18  Heading 4  & F@&^@^  Heading 5*$ & F(@&^`a$6CJT@T  Heading 6 & F<@&6CJOJQJkHL@L  Heading 7 & F<@& OJQJkHP@P  Heading 8 & F<@&6OJQJkHT @T  Heading 9 & F<@&6CJOJQJkHDA@D Default Paragraph FontVi@V  Table Normal :V 44 la (k@(No List P&@P Footnote ReferenceCJH*OJQJkH>O> Author$a$CJOJQJkHPOP Paper-Title $xa$5CJ$OJQJkHFO"F Affiliations$a$ CJOJQJJ@2J  Footnote Textp^`pCJOB Bulletp & Fp>Th^`p4 @R4 Footer  !,Ob, E-Mail<LOrL Abstract$ & Fx@& a$5CJ;@ List Number 3p & F8>Th.^8`POP Captions$H#$+Dp/0$a$5CJ>O> References$ & Fa$.)@. Page NumberHC@H Body Text Indenth`hRYR  Document Map-D M OJ QJ ^J B"@B Caption$a$5\^J aJtH TB@T ( Body Text#/H&#$+D@/0$CJ6U@6 Hyperlink >*B*ph4@4 Header ! !FV@!F XGFollowedHyperlink >*B* ph>'1> aComment ReferenceCJ<B< a Comment Text$CJZORZ !j reference&%5$7$8$9DH$^`OJQJHbH t] Balloon Text&CJOJ QJ ^J aJDjABD &Comment Subject'P5\4O4 Ly" Char CharCJtH VOV author$)$5$7$8$9DH$`a$ CJOJQJZOZ authorinfo$*$5$7$8$9DH$`a$OJQJPOP email$+$5$7$8$9DH$`a$OJQJ "&0;DKNT`nw޻ "#&'*+    "&0;DKNT`nw :޻h>hlhhhistuv~'9:"3yV @KhGT}b$ 'h,--0366677(7.7M7`7l77777788889:9=<[<<<Y>@DDvJeMwMPPQ/RTRRRYTUVW)WW X$XYYZ[[[[\]]6]M][]p]]]]]]]^"^8^A^b^w^^^__#`H``,cQccndod|dceye f;f>fWf\fofffffffggIhjhRiniijkkm m,mNmbmznn"q8q9qLqrrrrsIsKsfshs~sssssstuuuuuv!v2vRvWviv~vvvvvvvvvw!w@DDvJeMwMPPQ/RTRRRYTUVW)WW X$XYYZ[[[[\]]6]M][]p]]]]]]]^"^8^A^b^w^^^__#`H``,cQccndod|dceye f;f>fWf\fofffffffggIhjhRiniijkkm m,mNmbmznn"q8q9qLqrrrrsIsKsfshs~sssssstuuuuuv!v2vRvWviv~vvvvvvvvvw!wq>z>@@@NN(NPPPPPPqTTTTTU_` `abbeeefff.rVr_rerrrsssOuwuuuuuwwwuxxx@Iby|ʕԕ/2Űkwz3GJ ƳHrκ޻ _ _ Q  : :        XXXXXQJQX!!8+,@++ (   , 3  "<?Z  S X?,T"  #  T"  # H 3 T  #  :& h  3 o"` I :& H  #  H   # 3 T"   #  e'I + T"   #  e', T"   #   $&4  H   # j#n# H B # j#4 n#3 H  # :&e'H  # P&e'L  3  "<?n  c $X99?"  0 ?"6@NNN?N :    0 ?"6@NNN?N 1   6?"6@NNN?NX ! Y   6?"6@NNN?NV ! W   6?"6@NNN?NY! Z   B8c?"6@NNN?N'b c   6 ?"<@`NNN?N     6 ?"B@`?NNN?N    6 ?"B@`?NNN?N     6 ?"B@`?NNN?N % |   6?"<@?NNN?NB&C  6?"<@?NNN?N &   B8c?"6@NNN?N % &   6  ?"B@`?NNN?N    ! s *?"<@`NNN?N  " 6" ?"B@`?NNN?N k  # 6 # ?"B@`?NNN?N Y j6   $ 6?"6@NNN?N= > : % 6?"6@NNN?Nwx: & 6 & ?"B@`?NNN?N    ' 6 ' ?"B@`?NNN?N/   ( 6?"<@?NNN?N &  ) 6?"<@?NNN?N & * 6 * ?"B@`?NNN?Ng   + 6 + ?"B@`?NNN?N\g   B S  ? $ % (        )d޻ t Ot _Ref171493767 _Ref171493800 _Ref171493812 _Ref171493838 _Ref171493845 _Ref171493871 _Ref171493912 _Ref171153603 _Ref174260931 _Ref174260961 _Ref174414801 _Ref171495160 _Ref171495177 _Ref171495145 _Ref171495136 _Ref171495112 _Ref171494989 _Ref171495043 _Ref171495044 _Ref171495191 _Ref171495092 _Ref171495211 _Ref171495100 _Ref171495066 _Ref171494937 _Ref171495075 OLE_LINK3 OLE_LINK4 _Ref171495201h79[<Pfsw[^uݮԯŰѴ| ߻ 7!9|<Pfsw}]tܮӯİд{@@ͺ߻lCzL.Co.CWCDWCC#Ct"C!C,CC\CCC\CCS.C,C?@ABDCEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijk&&.288MM>pttRVV199dhh`hhΪ۪۪077lt}}ʭҭۭۭî̮̮r{{Y_jptt͸ظݹ߻     !"#$%&(')*+,-./0123546789:;=<>?@ABDCEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijk BG*urn:schemas-microsoft-com:office:smarttagscountry-region9k*urn:schemas-microsoft-com:office:smarttagsplace;h*urn:schemas-microsoft-com:office:smarttagsaddress8f*urn:schemas-microsoft-com:office:smarttagsCity9d*urn:schemas-microsoft-com:office:smarttagsState=l*urn:schemas-microsoft-com:office:smarttags PlaceName=i*urn:schemas-microsoft-com:office:smarttags PlaceType:g*urn:schemas-microsoft-com:office:smarttagsStreet>c*urn:schemas-microsoft-com:office:smarttags PostalCode IlklihgfkdclkllliikfkfkdfkdfkdfkdfkdfkGfkdGfkGfkdfkGfkdGkfkdfkdGfkdfkdGfkGfkGfkGfkdfkliifkdkfkdfkdlifkGfkdfkdR U %,| $$%%1&=&?&C&&&)','''''''((`(h(n(s(((**A+E+*.7.c.k.od{d|d|dcece=q=qKqKq}}ɀɀ##%&&((BBLL.7ERT]vǦϦئܦ+-rzߧ&KT~ũ˩ѩ۩AHŪ#&5:\^ (+0KOflǬά|ĭʭrxԯܯls4?³be$*4:?B`hķ;?6AB߻(7ap/ 9 RS~%%{))ddrrrrss!s%sQsXsqsusssssss?vDv0w2wKwMwfwhwzz~~y|]_gxLy{QbS`AB߻33333333333333333333333333333333333'101W4588MM[[od{d|d|dcece=q=qKqKq}}ɀɀʁDK hq##%&((BBLL6ABDHJLNPRTVXZ\bdfhpr{}ûŻڻ߻AB߻ 0/!! &v`Xgb@!jo?}{!@.@.@..@...@ ....@ .....@ ......@ .......@ ........^`o(. ^`hH. pL^p`LhH. @ ^@ `hH. ^`hH. L^`LhH. ^`hH. ^`hH. PL^P`LhH.h^`OJQJo(hHh^`OJ QJ ^J o(hHohp^p`OJ QJ o(hHh@ ^@ `OJQJo(hHh^`OJ QJ ^J o(hHoh^`OJ QJ o(hHh^`OJQJo(hHh^`OJ QJ ^J o(hHohP^P`OJ QJ o(hH^`o(. ^`hH. pL^p`LhH. @ ^@ `hH. ^`hH. L^`LhH. ^`hH. ^`hH. PL^P`LhH.hh^h`CJOJQJo([]^`o(. ^`hH. pL^p`LhH. @ ^@ `hH. ^`hH. L^`LhH. ^`hH. ^`hH. PL^P`LhH.!jo?}{`Xg &0/!e                                    ?>aga KB"`K]xJnG  c + 0 5 f j  zX:d|tLW$(KgJ]oko?Q[]twk/7.Y LU MB!w!"Ly"Fv#,%%&&v|&1'|(h(>*@3+_+*,,,B,fu,>-\V-n-%.//t12ma23E3j35j5-67>7NX89s:}:{;6<>u>????Q?C@D@AABSqBsCuD@EyENE0BGBGsGHIrKLsLM2MtOQiRa\T/UIJUePUV. V[V0cW"~W@OXS%[!\=]t]Va$9bK;bcexf g=g Ig|g3h i4*ifNiOoiqi!j8mrFmnU!n1RpAstBs|Cs8gstsv 7x%z>|+G}%)~S[r!ln6It_4cIiENc/~U:mM7 #GY4s 7}Pb?MFgui3<9{q&>H2== !$?S#-J&-':L:pVu9Hyv%RV=%d&;J@Rk[%Ydf8 Eox\C3WAIh7 Ej"Cza-lBcTh[3qGlWo@tBK>>>>>\\research\112C4thDS odLetterPRIV0''''\KhC2 9XRXMOCXDo xlewijopqrfo o \"dkm z|} 300>>>>>>)_)_)_)_$%&'TUklԯ԰ѴѸѹŻ޻p@p,p\@p0pd@p`p@pxp@pp@p@pTp@p@Unknown Gz Times New Roman5Symbol3& z Arial3CMR10;SimSun[SOA. +aMS Shell Dlg71 Courier;" Helvetica3Times5& z!TahomaU MiriamTimes New Roman?5 z Courier New;Wingdings"hT"T{3_S_End User Computing Services Normal.dotAlessandro Forin5Microsoft Office Word@캃@y@[@d՜.+,D՜.+,H hp|  ACMS_ Proceedings Template - WORD Title 8@ _PID_HLINKSAXNhttp://research.microsoft.com/research/EmbeddedSystems/eMIPS/eMIPSreport1.pdf http://ieeexplore.ieee.org/search/searchresult.jsp?disp=cit&queryText=%28%20goudarzi%20%20m.%3CIN%3Eau%29&valnm=+Goudarzi%2C+M.&reqloc%20=others&history=yes Ehttp://ieeexplore.ieee.org/search/searchresult.jsp?disp=cit&queryText=%28%20yaran%20%20b.%20h.%3CIN%3Eau%29&valnm=+Yaran%2C+B.H.&reqloc%20=others&history=yes Whttp://ieeexplore.ieee.org/search/searchresult.jsp?disp=cit&queryText=%28%20gharehbaghi%20%20a.%20m.%3CIN%3Eau%29&valnm=+Gharehbaghi%2C+A.M.&reqloc%20=others&history=yes jmhttp://ieeexplore.ieee.org/search/searchresult.jsp?disp=cit&queryText=%28hessabi%20%20s.%3CIN%3Eau%29&valnm=Hessabi%2C+S.&reqloc%20=others&history=yes   FMicrosoft Office Word Document MSWordDocWord.Document.89qS4d 2qHX ?tO2Proceedings Template - WORDEnd User Computing ServicesAlessandro Forin$      CompObjMq