Subject: |
[Merge] lp:~info-martin-konrad/epics-gateway/epics-gateway-putlog into lp:epics-gateway |
From: |
Martin Konrad <[email protected]> |
To: |
[email protected] |
Date: |
Tue, 18 Feb 2014 20:49:23 -0000 |
Martin Konrad has proposed merging lp:~info-martin-konrad/epics-gateway/epics-gateway-putlog into lp:epics-gateway.
Requested reviews:
EPICS Core Developers (epics-core)
For more details, see:
https://code.launchpad.net/~info-martin-konrad/epics-gateway/epics-gateway-putlog/+merge/207029
NSCL's put-logging code. Does not only log machine/user but also the value. In production use at NSCL since quite some time.
--
The attached diff has been truncated due to its size.
https://code.launchpad.net/~info-martin-konrad/epics-gateway/epics-gateway-putlog/+merge/207029
Your team EPICS Core Developers is requested to review the proposed merge of lp:~info-martin-konrad/epics-gateway/epics-gateway-putlog into lp:epics-gateway.
=== added file 'GATEWAY.access'
--- GATEWAY.access 1970-01-01 00:00:00 +0000
+++ GATEWAY.access 2014-02-18 20:49:12 +0000
@@ -0,0 +1,36 @@
+UAG(GatewayAdmin) {gateway,smith}
+UAG(jones) {jones,Jones}
+UAG(engineers) {jones,roberts}
+HAG(engineershost) {snoopy}
+
+ASG(DEFAULT) {
+ RULE(1,READ)
+}
+
+ASG(GatewayAdmin) {
+ RULE(1,READ)
+ RULE(1,WRITE,TRAPWRITE){
+ UAG(GatewayAdmin)
+ }
+}
+
+ASG(Beam) {
+ INPA(BeamAccess:access)
+ RULE(1,READ)
+ RULE(1,WRITE,TRAPWRITE) {
+ UAG(jones)
+ CALC("A")
+ }
+}
+
+ASG(PowerSupply) {
+ RULE(1,READ)
+ RULE(1,WRITE){
+ UAG(jones)
+ }
+ RULE(1,READ)
+ RULE(1,WRITE) {
+ UAG(engineers)
+ HAG(engineershost)
+ }
+}
=== renamed file 'GATEWAY.access' => 'GATEWAY.access.moved'
=== added file 'GATEWAY.command'
--- GATEWAY.command 1970-01-01 00:00:00 +0000
+++ GATEWAY.command 2014-02-18 20:49:12 +0000
@@ -0,0 +1,6 @@
+# R1 - generate a complete PV report to log file
+# R2 - generate a PV summary report to log file
+# R3 - generate an access security report to log file
+# AS - reread the access security file
+#R1
+AS
=== renamed file 'GATEWAY.command' => 'GATEWAY.command.moved'
=== added file 'GATEWAY.pvlist'
--- GATEWAY.pvlist 1970-01-01 00:00:00 +0000
+++ GATEWAY.pvlist 2014-02-18 20:49:12 +0000
@@ -0,0 +1,91 @@
+# Valid forms of the lines in this file:
+#
+# 1) EVALUATION ORDER <eval_order>
+# 2) <pv_name_pattern> DENY [FROM] [<host> ...]
+# 3) <pv_name_pattern> ALIAS <real_pv_name> [<asg> [<asl>]]
+# 4) <pv_name_pattern> ALLOW [<asg> [<asl>]]
+#
+# where:
+# <eval_order> = DENY, ALLOW allow rules take precedence
+# ALLOW, DENY deny rules take precedence (default)
+# <pv_name_pattern> = regular expression that matches PV names
+# <host> = unqualified host name
+# <real_pv_name> = substitution pattern that specifies the real PV name
+# (\0 ... \9 are replaced by matched sub-expressions)
+# <asg> = Access Security Group as specified in AS file [DEFAULT]
+# <asl> = Access Security Level (0 or 1) [1]
+#
+#
+# ORDER:
+# This will set the evaluation order that is used when a client requests
+# a PV. Setting this to "DENY, ALLOW" will allow access to a PV name that matches
+# both a DENY and an ALLOW pattern. "ALLOW, DENY" will make a DENY override an ALLOW
+# for the same variable. (This is the default.)
+# NOTE: Matching DENY FROM patterns (with host names) will always override matching
+# ALLOW patterns.
+#
+# DENY / DENY FROM:
+# The gateway will completely ignore requests for any PV that matches the pattern.
+# Can be used to block the gateway from responding to groups of PVs.
+# Naming hosts (DENY FROM) will block the PVs only for the given hosts (useful to
+# prevent loops caused by forwarding to other gateways).
+#
+# ALIAS:
+# Define an alias and allows it as a pattern for names which the Gateway should serve.
+# For process variable names that match <pv-name-pattern>, the Gateway translates the
+# name into a real process variable name and uses the real name as if it had been the
+# one specified. The <real-pv-name> may contain the special escape sequences \1 ... \9
+# which will be replaced by the nth subexpression matched. See a UNIX book on regular
+# expressions for more information. Access security rules to be used for process
+# variables matched by this pattern may be specified. If not specified, the defaults
+# are the DEFAULT group and level 1. Apart from specifying an alias, this rule is
+# functionally the same as ALLOW.
+#
+# ALLOW:
+# Used to declare PV names which the Gateway should serve. Access security rules to
+# be used for process variables matched by this pattern may be specified. If not
+# specified, the defaults are the DEFAULT group and level 1.
+#
+# Notes:
+# 1) Commands are not case sensitive.
+# 2) Pattern use GNU-style regular expressions. (See the documentation included
+# with the regex library for details on regular expressions.)
+# 3) Any PV not included in an ALLOW command is not allowed access. If no PV list
+# file is specified on the command line, a default rule ".* ALLOW" will be created.
+# 4) The patterns are matched in reverse order. I.e. you should always specify general
+# rules before specific rules.
+# 5) See EPICS access security documentation for creating an access security
+# file for the PV gateway.
+#
+# Below:
+# - make DENY rules override ALLOW rules
+# - requests for PVs starting with Beam: will be allowed according to rules for access
+# security group Beam, similarly for PS using PowerSupply and gateway flags using
+# GatewayAdmin
+# - anything starting with test is not allowed
+# - ps0 ... ps9 are translated to PSCurrent0.ai ... PSCurrent9.ai and are allowed for
+# the PowerSupply group at level 1.
+
+
+EVALUATION ORDER ALLOW, DENY
+
+[0-9].* ALLOW
+[a-z].* ALLOW
+[A-Z].* ALLOW
+
+Beam:.* ALLOW Beam 1
+PS.* ALLOW PowerSupply 1
+gateway:.*Flag ALLOW GatewayAdmin
+test.* DENY
+ps\([0-9]\) ALIAS PSCurrent\1.ai PowerSupply 1
+
+# Convert old Gateway internal process variable names
+gateway\.\(.*\) ALIAS gateway:\1
+gateway\.\(.*\)Flag ALIAS gateway:\1Flag GatewayAdmin
+gateway\.alive ALIAS gateway:connected
+gateway\.postEventRate ALIAS gateway:clientPostRate
+
+# Use DENY FROM and negated regular expressions to prevent loops in reverse
+# gateways while allowing access to the internal PVs.
+# This requires USE_NEG_REGEXP=YES and USE_DENY_FROM=YES in Makefile.
+# !gateway:.* DENY FROM <ip address of reverse gateway>
=== renamed file 'GATEWAY.pvlist' => 'GATEWAY.pvlist.moved'
=== added file 'LICENSE'
--- LICENSE 1970-01-01 00:00:00 +0000
+++ LICENSE 2014-02-18 20:49:12 +0000
@@ -0,0 +1,85 @@
+Copyright (c) 2002 University of Chicago.
+Copyright (c) 2002 Berliner Speicherring-Gesellschaft fuer Synchrotron-
+Strahlung mbH (BESSY).
+All rights reserved.
+
+The gateway is distributed subject to the following license conditions:
+
+ SOFTWARE LICENSE AGREEMENT
+ Software: gateway
+
+ 1. The "Software", below, refers to gateway (in either source code,
+ or binary form and accompanying documentation). Each licensee is
+ addressed as "you" or "Licensee."
+
+ 2. The copyright holders shown above and their third-party licensors
+ hereby grant Licensee a royalty-free nonexclusive license, subject to
+ the limitations stated herein and U.S. Government license rights.
+
+ 3. You may modify and make a copy or copies of the Software for use
+ within your organization, if you meet the following conditions:
+ a. Copies in source code must include the copyright notice and this
+ Software License Agreement.
+ b. Copies in binary form must include the copyright notice and this
+ Software License Agreement in the documentation and/or other
+ materials provided with the copy.
+
+ 4. You may modify a copy or copies of the Software or any portion of it,
+ thus forming a work based on the Software, and distribute copies of
+ such work outside your organization, if you meet all of the following
+ conditions:
+ a. Copies in source code must include the copyright notice and this
+ Software License Agreement;
+ b. Copies in binary form must include the copyright notice and this
+ Software License Agreement in the documentation and/or other
+ materials provided with the copy;
+ c. Modified copies and works based on the Software must carry
+ prominent notices stating that you changed specified portions of
+ the Software.
+
+ 5. Portions of the Software resulted from work developed under a U.S.
+ Government contract and are subject to the following license: the
+ Government is granted for itself and others acting on its behalf a
+ paid-up, nonexclusive, irrevocable worldwide license in this computer
+ software to reproduce, prepare derivative works, and perform publicly
+ and display publicly.
+
+ 6. WARRANTY DISCLAIMER. THE SOFTWARE IS SUPPLIED "AS IS" WITHOUT WARRANTY
+ OF ANY KIND. THE COPYRIGHT HOLDERS, THEIR THIRD PARTY LICENSORS, THE
+ UNITED STATES, THE UNITED STATES DEPARTMENT OF ENERGY, AND THEIR
+ EMPLOYEES: (1) DISCLAIM ANY WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ FOR A PARTICULAR PURPOSE, TITLE OR NON-INFRINGEMENT, (2) DO NOT ASSUME
+ ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS,
+ OR USEFULNESS OF THE SOFTWARE, (3) DO NOT REPRESENT THAT USE OF THE
+ SOFTWARE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS, (4) DO NOT WARRANT
+ THAT THE SOFTWARE WILL FUNCTION UNINTERRUPTED, THAT IT IS ERROR-FREE
+ OR THAT ANY ERRORS WILL BE CORRECTED.
+
+ 7. LIMITATION OF LIABILITY. IN NO EVENT WILL THE COPYRIGHT HOLDERS, THEIR
+ THIRD PARTY LICENSORS, THE UNITED STATES, THE UNITED STATES DEPARTMENT
+ OF ENERGY, OR THEIR EMPLOYEES: BE LIABLE FOR ANY INDIRECT, INCIDENTAL,
+ CONSEQUENTIAL, SPECIAL OR PUNITIVE DAMAGES OF ANY KIND OR NATURE,
+ INCLUDING BUT NOT LIMITED TO LOSS OF PROFITS OR LOSS OF DATA, FOR ANY
+ REASON WHATSOEVER, WHETHER SUCH LIABILITY IS ASSERTED ON THE BASIS OF
+ CONTRACT, TORT (INCLUDING NEGLIGENCE OR STRICT LIABILITY), OR
+ OTHERWISE, EVEN IF ANY OF SAID PARTIES HAS BEEN WARNED OF THE
+ POSSIBILITY OF SUCH LOSS OR DAMAGES.
+
+________________________________________________________________________
+
+This software is in part copyrighted by the BERLINER SPEICHERRING
+GESELLSCHAFT FUER SYNCHROTRONSTRAHLUNG M.B.H. (BESSY), BERLIN, GERMANY.
+
+In no event shall BESSY be liable to any party for direct, indirect,
+special, incidental, or consequential damages arising out of the use of
+this software, its documentation, or any derivatives thereof, even if
+BESSY has been advised of the possibility of such damage.
+
+BESSY specifically disclaims any warranties, including, but not limited
+to, the implied warranties of merchantability, fitness for a particular
+purpose, and non-infringement. This software is provided on an "as is"
+basis, and BESSY has no obligation to provide maintenance, support,
+updates, enhancements, or modifications.
+________________________________________________________________________
+
=== renamed file 'LICENSE' => 'LICENSE.moved'
=== added file 'Makefile'
--- Makefile 1970-01-01 00:00:00 +0000
+++ Makefile 2014-02-18 20:49:12 +0000
@@ -0,0 +1,186 @@
+#*************************************************************************
+# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
+# National Laboratory.
+# Copyright (c) 2002 Berliner Speicherring-Gesellschaft fuer Synchrotron-
+# Strahlung mbH (BESSY).
+# Copyright (c) 2002 The Regents of the University of California, as
+# Operator of Los Alamos National Laboratory.
+# This file is distributed subject to a Software License Agreement found
+# in the file LICENSE that is included with this distribution.
+#*************************************************************************
+
+# 3.14 Makefile for Gateway
+
+TOP = ../..
+include $(TOP)/configure/CONFIG
+
+# Use of GNU regex library (version 0.12) for patterns and aliasing
+# (These should be defined in extensions/config/CONFIG_SITE.Host.xxx)
+# GNU_REGEX_INC = ../../../../regex-0.12
+# GNU_REGEX_LIB = ../../../../regex-0.12
+
+# use Perl compatible regular expressions
+#USE_PCRE=YES
+
+# Negative regexp matching: !pattern matches when pattern does not match
+#USE_NEG_REGEXP=YES
+
+# Enable DENY FROM
+USE_DENY_FROM=YES
+
+# Optimization
+#HOST_OPT = NO
+
+# Compiler options
+#USR_CXXFLAGS += -xsb
+
+# Patches for HPUX / aCC
+# NORMAL to suppress "future errors", needs immediate binding as using shared libs produces core dumps
+ifeq ($(OS_CLASS),hp700)
+ CXXCMPLR=NORMAL
+ USR_LDFLAGS += -Wl,-Bimmediate
+endif
+
+# Purify
+#PURIFY=YES
+ifeq ($(PURIFY),YES)
+ifeq ($(OS_CLASS),solaris)
+PURIFY_FLAGS = -first-only -chain-length=26 -max_threads=256
+# Put the cache files in the appropriate bin directory
+PURIFY_FLAGS += -always-use-cache-dir -cache-dir=$(shell $(PERL) $(TOOLS)/fullPathName.pl .)
+DEBUGCMD = purify $(PURIFY_FLAGS)
+endif
+endif
+
+# Quantify
+#QUANTIFY=YES
+ifeq ($(QUANTIFY),YES)
+ifeq ($(OS_CLASS),solaris)
+#QUANTIFY_FLAGS += -measure-timed-calls=user+system
+QUANTIFY_FLAGS += -collection-granularity=function
+QUANTIFY_FLAGS += -use-machine=UltraSparcIII:1002MHz
+QUANTIFY_FLAGS += -max_threads=160
+
+# QUANTIFY_FLAGS += -record-system-calls=no
+
+# -measure-timed-calls=elapsed-time (default) gives wall clock time
+# for system calls
+# -measure-timed-calls=user+system gives user+system time
+# -record-system-calls=no gives 0 time for system calls
+# -collection-granularity=function runs faster than default=line
+# -use-machine=UltraSparc:168MHz timing for Nike
+# -use-machine=UltraSparcIII:1002MHz timing for Ctlapps1
+DEBUGCMD = quantify $(QUANTIFY_FLAGS)
+endif
+endif
+
+# Turn on debug mode
+# USR_CXXFLAGS += -DDEBUG_MODE
+# Turn off Gateway debug calls:
+# USR_CXXFLAGS += -DNODEBUG
+# Use stat PV's
+USR_CXXFLAGS += -DSTAT_PVS
+# Use rate statistics
+USR_CXXFLAGS += -DRATE_STATS
+# Use control PV's
+USR_CXXFLAGS += -DCONTROL_PVS
+# Use heartbeat PV
+#USR_CXXFLAGS += -DHEARTBEAT_PV
+# Use CAS diagnostics statistics
+USR_CXXFLAGS += -DCAS_DIAGNOSTICS
+# Install exception handler and print exceptions to log file
+USR_CXXFLAGS += -DHANDLE_EXCEPTIONS
+ifeq ($(USE_DENY_FROM),YES)
+# Use deny from
+USR_CXXFLAGS += -DUSE_DENYFROM
+endif
+ifeq ($(USE_NEG_REGEXP),YES)
+# Use deny from
+USR_CXXFLAGS += -DUSE_NEG_REGEXP
+endif
+
+# Reserve file descriptor for fopen to avoid fd limit of 256 on Solaris
+USR_CXXFLAGS_solaris += -DRESERVE_FOPEN_FD
+
+# USR_INCLUDES += -I$(GNU_REGEX_INC)
+
+WIN32_RUNTIME=MD
+USR_CXXFLAGS_WIN32 += /DWIN32 /D_WINDOWS
+USR_LDFLAGS_WIN32 += /SUBSYSTEM:CONSOLE
+
+ifeq ($(USE_PCRE),YES)
+ USR_CXXFLAGS += -DUSE_PCRE
+ USR_SYS_LIBS_DEFAULT += pcre
+else
+ifeq ($(OS_CLASS),WIN32)
+# Use Obj for object libraries and no Obj for import libraries
+ PROD_LIBS = regexObj
+ regexObj_DIR = $(EPICS_EXTENSIONS_LIB)
+else
+ifneq ($(OS_CLASS),Linux)
+ PROD_LIBS = regex
+ regex_DIR = $(EPICS_EXTENSIONS_LIB)
+endif
+endif
+endif
+
+USR_LIBS_DEFAULT += ca cas asHost gdd Com
+ca_DIR = $(EPICS_BASE_LIB)
+cas_DIR = $(EPICS_BASE_LIB)
+asHost_DIR = $(EPICS_BASE_LIB)
+Com_DIR = $(EPICS_BASE_LIB)
+gdd_DIR = $(EPICS_BASE_LIB)
+
+gateway_SRCS += gateway.cc
+gateway_SRCS += gatePv.cc
+gateway_SRCS += gateResources.cc
+gateway_SRCS += gateServer.cc
+gateway_SRCS += gateAs.cc
+gateway_SRCS += gateVc.cc
+gateway_SRCS += gateAsyncIO.cc
+gateway_SRCS += gateAsCa.cc
+gateway_SRCS += gateStat.cc
+
+# need access to casCtx.h
+USR_INCLUDES += -I$(EPICS_BASE)/src/cas/generic
+
+PROD_HOST = gateway
+
+
+
+
+include $(TOP)/configure/RULES
+
+xxxx:
+ @echo HOST_OPT: $(HOST_OPT)
+ @echo PURIFY: $(PURIFY)
+ @echo PURIFY_FLAGS: $(PURIFY_FLAGS)
+ @echo PURIFYCMD: $(PURIFYCMD)
+ @echo QUANTIFY: $(QUANTIFY)
+ @echo QUANTIFYCMD: $(QUANTIFYCMD)
+ @echo CXX $(CXX)
+ @echo CXXFLAGS $(CXXFLAGS)
+ @echo LINK.cc: $(LINK.cc)
+ @echo LINK.c: $(LINK.c)
+ @echo TARGET_OBJS: $(TARGET_OBJS)
+ @echo PRODNAME_OBJS: $(PRODNAME_OBJS)
+ @echo PROD_LD_OBJS: $(PROD_LD_OBJS)
+ @echo PRODUCT_OBJS: $(PRODUCT_OBJS)
+ @echo PROD_OBJS: $(PROD_OBJS)
+ @echo EPICS_BASE: $(EPICS_BASE)
+ @echo HOST_ARCH: $(HOST_ARCH)
+ @echo ARCH_DEP_LDFLAGS_ML_NO: $(ARCH_DEP_LDFLAGS_ML_NO)
+ @echo ARCH_DEP_LDFLAGS_ML_YES: $(ARCH_DEP_LDFLAGS_ML_YES)
+ @echo ARCH_DEP_LDFLAGS_ML: $(ARCH_DEP_LDFLAGS_ML)
+ @echo ARCH_DEP_LDFLAGS_MD_NO: $(ARCH_DEP_LDFLAGS_MD_NO)
+ @echo ARCH_DEP_LDFLAGS_MD_YES: $(ARCH_DEP_LDFLAGS_MD_YES)
+ @echo ARCH_DEP_LDFLAGS_MD: $(ARCH_DEP_LDFLAGS_MD)
+ @echo ACC_SFLAGS_YES: $(ACC_SFLAGS_YES)
+ @echo ACC_SFLAGS_NO: $(ACC_SFLAGS_NO)
+ @echo SHARED_LIBRARIES: $(SHARED_LIBRARIES)
+ @echo DEBUGCMD: $(DEBUGCMD)
+
+# **************************** Emacs Editing Sequences *****************
+# Local Variables:
+# mode: makefile
+# End:
=== renamed file 'Makefile' => 'Makefile.moved'
=== added file 'README.1st'
--- README.1st 1970-01-01 00:00:00 +0000
+++ README.1st 2014-02-18 20:49:12 +0000
@@ -0,0 +1,2 @@
+The extension distribution file should be unziped and untared
+in the extensions/src directory.
=== renamed file 'README.1st' => 'README.1st.moved'
=== added file 'S99gateway'
--- S99gateway 1970-01-01 00:00:00 +0000
+++ S99gateway 2014-02-18 20:49:12 +0000
@@ -0,0 +1,21 @@
+#!/bin/sh
+#
+# Solaris rc3 script for EPICS CA gateway
+#
+
+GATEWAY=/home/helios/GATEWAY/gateway/gateway
+HOME_DIR=/home/helios/GATEWAY/gateway/`/usr/bin/uname -n`
+
+if [ $1 = "start" ]; then
+ if [ -f $GATEWAY ]; then
+ echo "Starting EPICS CA gateway "
+ /usr/bin/mkdir -p $HOME_DIR
+ $GATEWAY -log gateway.log -cip 164.54.3.255 -sip 164.54.188.65 -home $HOME_DIR -uid 265 -server
+ fi
+else
+ if [ $1 = "stop" ]; then
+ echo "Stopping EPICS CA gateway "
+ $HOME_DIR/gateway.killer
+ fi
+fi
+
=== renamed file 'S99gateway' => 'S99gateway.moved'
=== added file 'START.server'
--- START.server 1970-01-01 00:00:00 +0000
+++ START.server 2014-02-18 20:49:12 +0000
@@ -0,0 +1,36 @@
+
+
+# Clients using gateway as CA concentrator with local loopback driver.
+# Set these variable where clients are run:
+# export EPICS_CA_ADDR_LIST=127.0.0.1
+# export EPICS_CA_AUTO_ADDR_LIST=NO
+#
+# iocpvgateway: -cip 164.54.2.108 - test with PV pvgateway:memuse
+
+# Clients esing the gateway that is running at the APS (on the 188 network):
+# export EPICS_CA_ADDR_LIST=164.54.189.255
+
+# Other important variables to remember (gateway sets these)
+# export EPICS_CAS_INTF_ADDR= - IP address where server listens
+# export EPICS_CAS_SERVER_PORT= - port that the CA server uses
+# export EPICS_CA_SERVER_PORT= - port that the CA client library uses
+
+# Start using a pv list and alias file
+# ./gateway -pv ../PV_LIST -alias ../PV_ALIAS $*
+
+# Start on chiron using the 2 network as client, the 188 as server
+# ./gateway -sip 164.54.188.29 -cip 164.54.3.255
+
+# Start as a CA concentrator
+# ./gateway -sip 127.0.0.1 -cip 164.54.3.255
+
+# Start on an alternate port
+# ./gateway -cport 9990 -sport 9990 $*
+
+./gateway $*
+
+# test the gateway in here:
+# cd /home/helios2/srsys/op/adl <--- major adl file directory.
+# medm -x sMain.adl <--- main APS adl file
+
+# test PV for waveform = SRI:S35DCCT:currentCP
=== renamed file 'START.server' => 'START.server.moved'
=== added directory 'docs'
=== renamed directory 'docs' => 'docs.moved'
=== added file 'docs/AliasGateway.gif'
Binary files docs/AliasGateway.gif 1970-01-01 00:00:00 +0000 and docs/AliasGateway.gif 2014-02-18 20:49:12 +0000 differ
=== added file 'docs/FPAT064.pdf'
--- docs/FPAT064.pdf 1970-01-01 00:00:00 +0000
+++ docs/FPAT064.pdf 2014-02-18 20:49:12 +0000
@@ -0,0 +1,1203 @@
+%PDF-1.4
+%��+100 0 obj <</Linearized 1/L 114625/O 103/E 58060/N 3/T 112577/H [ 995 279]>>
+endobj
+
+xref
+100 34
+0000000016 00000 n
+0000001445 00000 n
+0000000995 00000 n
+0000001697 00000 n
+0000002137 00000 n
+0000002529 00000 n
+0000002853 00000 n
+0000003392 00000 n
+0000003439 00000 n
+0000003486 00000 n
+0000003533 00000 n
+0000003580 00000 n
+0000003826 00000 n
+0000004066 00000 n
+0000004322 00000 n
+0000004399 00000 n
+0000006717 00000 n
+0000008780 00000 n
+0000010966 00000 n
+0000012999 00000 n
+0000015209 00000 n
+0000017388 00000 n
+0000017424 00000 n
+0000019449 00000 n
+0000021655 00000 n
+0000024325 00000 n
+0000025178 00000 n
+0000026031 00000 n
+0000026884 00000 n
+0000027734 00000 n
+0000037170 00000 n
+0000045858 00000 n
+0000050382 00000 n
+0000001274 00000 n
+trailer
+<</Size 134/Prev 112565/XRefStm 1274/Root 101 0 R/Info 25 0 R/ID[<840dd7da2e0c2f0688bf724042c3b200><c95ad66b1655064f8ad09ec47444d1cb>]>>
+startxref
+0
+%%EOF
+
+102 0 obj<</Length 186/Filter/FlateDecode/C 201/L 185/O 169/S 86>>stream
+x�```b``�e`r``@ �(ǃ���'�*�I�djj���00�x40CT;�@Z���<�3�`:���ASyE����?Z?0�U|�d�gC�#F/�)�� |